commit fc1b3033fcdf84ea9edd3af3bea33cdb95222174 Author: Akamaru Date: Fri Apr 15 22:33:14 2022 +0200 Neu diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7383cd3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +SponsorBlock diff --git a/BlockTube/blocktube_backup.json b/BlockTube/blocktube_backup.json new file mode 100644 index 0000000..f86218d --- /dev/null +++ b/BlockTube/blocktube_backup.json @@ -0,0 +1 @@ +{"filterData":{"channelId":["","// Blocked by context menu (AniTV)","UCChjE9CYTSJUECtLkA3SnTw",""],"channelName":[""],"comment":[""],"javascript":"(video, objectType) => {\n // Add custom conditions below\n\n // Custom conditions did not match, do not block\n return false;\n}","title":["#shorts","7 vs. Wild"],"vidLength":[null,null],"videoId":[""]},"options":{"autoplay":false,"block_feedback":false,"block_message":"","enable_javascript":false,"mixes":true,"suggestions_only":false,"trending":true,"vidLength_type":"allow","shorts":false,"disable_db_normalize":false,"disable_you_there":false,"percent_watched_hide":null},"uiPass":""} \ No newline at end of file diff --git a/ClearURLs/ClearURLs.json b/ClearURLs/ClearURLs.json new file mode 100644 index 0000000..1bbf8e8 --- /dev/null +++ b/ClearURLs/ClearURLs.json @@ -0,0 +1 @@ +{"ClearURLsData":"{\"providers\":{\"amazon\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?amazon(?:\\\\.[a-z]{2,}){1,}\",\"rules\":[\"p[fd]_rd_[a-z]*\",\"qid\",\"srs?\",\"__mk_[a-z]{1,3}_[a-z]{1,3}\",\"spIA\",\"ms3_c\",\"[a-z%0-9]*ie\",\"refRID\",\"colii?d\",\"[^a-z%0-9]adId\",\"qualifier\",\"_encoding\",\"smid\",\"field-lbr_brands_browse-bin\",\"ref_?\",\"th\",\"sprefix\",\"crid\",\"keywords\",\"cv_ct_[a-z]+\",\"linkCode\",\"creativeASIN\",\"ascsubtag\",\"aaxitk\",\"hsa_cr_id\",\"sb-ci-[a-z]+\",\"rnid\",\"dchild\",\"camp\",\"creative\",\"s\"],\"rawRules\":[\"\\\\/ref=[^/?]*\"],\"referralMarketing\":[\"tag\",\"ascsubtag\"],\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?amazon(?:\\\\.[a-z]{2,}){1,}\\\\/gp\\\\/.*?(?:redirector.html|cart\\\\/ajax-update.html|video\\\\/api\\\\/)\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?amazon(?:\\\\.[a-z]{2,}){1,}\\\\/(?:hz\\\\/reviews-render\\\\/ajax\\\\/|message-us\\\\?|s\\\\?)\"]},\"amazon search\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?amazon(?:\\\\.[a-z]{2,}){1,}\\\\/s\\\\?\",\"rules\":[\"p[fd]_rd_[a-z]*\",\"qid\",\"srs?\",\"__mk_[a-z]{1,3}_[a-z]{1,3}\",\"spIA\",\"ms3_c\",\"[a-z%0-9]*ie\",\"refRID\",\"colii?d\",\"[^a-z%0-9]adId\",\"qualifier\",\"_encoding\",\"smid\",\"field-lbr_brands_browse-bin\",\"ref_?\",\"th\",\"sprefix\",\"crid\",\"cv_ct_[a-z]+\",\"linkCode\",\"creativeASIN\",\"ascsubtag\",\"aaxitk\",\"hsa_cr_id\",\"sb-ci-[a-z]+\",\"rnid\",\"dchild\",\"camp\",\"creative\"],\"rawRules\":[\"\\\\/ref=[^/?]*\"],\"referralMarketing\":[\"tag\"]},\"fls-na.amazon\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?fls-na\\\\.amazon(?:\\\\.[a-z]{2,}){1,}\"},\"google\":{\"forceRedirection\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}\",\"rules\":[\"ved\",\"bi[a-z]*\",\"gfe_[a-z]*\",\"ei\",\"source\",\"gs_[a-z]*\",\"site\",\"oq\",\"esrc\",\"uact\",\"cd\",\"cad\",\"gws_[a-z]*\",\"atyp\",\"vet\",\"zx\",\"_u\",\"je\",\"dcr\",\"ie\",\"sei\",\"sa\",\"dpr\",\"btn[a-z]*\",\"usg\",\"cd\",\"cad\",\"uact\",\"aqs\",\"sourceid\",\"sxsrf\",\"rlz\",\"i-would-rather-use-firefox\",\"pcampaignid\"],\"referralMarketing\":[\"referrer\"],\"exceptions\":[\"^https?:\\\\/\\\\/mail\\\\.google\\\\.com\\\\/mail\\\\/u\\\\/\",\"^https?:\\\\/\\\\/(?:docs|accounts)\\\\.google(?:\\\\.[a-z]{2,}){1,}\",\"^https?:\\\\/\\\\/([a-z0-9-\\\\.])*drive\\\\.google\\\\.com\\\\/videoplayback\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}(?:\\\\/upload)?\\\\/drive\\\\/\",\"^https?:\\\\/\\\\/news\\\\.google\\\\.com.*\\\\?hl=.\",\"^https?:\\\\/\\\\/hangouts\\\\.google\\\\.com\\\\/webchat.*?zx=.\",\"^https?:\\\\/\\\\/client-channel\\\\.google\\\\.com\\\\/client-channel.*?zx=.\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}\\\\/s\\\\?tbm=map.*?gs_[a-z]*=.\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}\\\\/(?:complete\\\\/search|setprefs|searchbyimage)\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}\\\\/(?:appsactivity|aclk\\\\?)\"],\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}\\\\/url\\\\?.*?(?:url|q)=(https?[^&]+)\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}\\\\/.*?adurl=([^&]+)\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}\\\\/amp\\\\/s\\\\/([^&]+)\"]},\"googleSearch\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?google(?:\\\\.[a-z]{2,}){1,}\\\\/search\\\\?\",\"rules\":[\"client\",\"sclient\"]},\"googlesyndication\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?googlesyndication\\\\.com\"},\"doubleclick\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?doubleclick(?:\\\\.[a-z]{2,}){1,}\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?doubleclick(?:\\\\.[a-z]{2,}){1,}\\\\/.*?tag_for_child_directed_treatment=;%3F([^&]*)\"]},\"googleadservices\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?googleadservices\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?googleadservices\\\\.com\\\\/.*?adurl=([^&]*)\"]},\"globalRules\":{\"urlPattern\":\".*\",\"rules\":[\"(?:%3F)?utm(?:_[a-z_]*)?\",\"(?:%3F)?ga_[a-z_]+\",\"(?:%3F)?yclid\",\"(?:%3F)?_openstat\",\"(?:%3F)?fb_action_(?:types|ids)\",\"(?:%3F)?fb_(?:source|ref)\",\"(?:%3F)?fbclid\",\"(?:%3F)?action_(?:object|type|ref)_map\",\"(?:%3F)?gs_l\",\"(?:%3F)?mkt_tok\",\"(?:%3F)?hmb_(?:campaign|medium|source)\",\"(?:%3F)?ref_?\",\"(?:%3F)?referrer\",\"(?:%3F)?gclid\",\"(?:%3F)?otm_[a-z_]*\",\"(?:%3F)?cmpid\",\"(?:%3F)?os_ehash\",\"(?:%3F)?_ga\",\"(?:%3F)?_gl\",\"(?:%3F)?__twitter_impression\",\"(?:%3F)?wt_?z?mc\",\"(?:%3F)?wtrid\",\"(?:%3F)?[a-z]?mc\",\"(?:%3F)?dclid\",\"Echobox\",\"(?:%3F)?spm\",\"(?:%3F)?vn(?:_[a-z]*)+\",\"(?:%3F)?tracking_source\",\"(?:%3F)?ceneo_spo\"],\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?matrix\\\\.org\\\\/_matrix\\\\/\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?(?:cloudflare\\\\.com|prismic\\\\.io|tangerine\\\\.ca|gitlab\\\\.com)\",\"^https?:\\\\/\\\\/myaccount.google(?:\\\\.[a-z]{2,}){1,}\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?gcsip\\\\.(?:com|nl)[^?]*\\\\?.*?&?ref_?=.\",\"^https?:\\\\/\\\\/[^/]+/[^/]+/[^/]+\\\\/-\\\\/refs\\\\/switch[^?]*\\\\?.*?&?ref_?=.\",\"^https?:\\\\/\\\\/bugtracker\\\\.[^/]*\\\\/[^?]+\\\\?.*?&?ref_?=[^/?&]*\",\"^https?:\\\\/\\\\/comment-cdn\\\\.9gag\\\\.com\\\\/.*?comment-list.json\\\\?\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?battle\\\\.net\\\\/login\",\"^https?:\\\\/\\\\/blizzard\\\\.com\\\\/oauth2\",\"^https?:\\\\/\\\\/kreditkarten-banking\\\\.lbb\\\\.de\",\"^https?:\\\\/\\\\/www\\\\.tinkoff\\\\.ru\",\"^https?:\\\\/\\\\/www\\\\.cyberport\\\\.de\\\\/adscript\\\\.php\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tweakers\\\\.net\\\\/ext\\\\/lt\\\\.dsp\\\\?.*?(?:%3F)?&?ref_?=.\",\"^https?:\\\\/\\\\/git(lab)?\\\\.[^/]*\\\\/[^?]+\\\\?.*?&?ref_?=[^/?&]*\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?amazon(?:\\\\.[a-z]{2,}){1,}\\\\/message-us\\\\?\",\"^https?:\\\\/\\\\/authorization\\\\.td\\\\.com\",\"^https?:\\\\/\\\\/support\\\\.steampowered\\\\.com\",\"^https?:\\\\/\\\\/privacy\\\\.vakmedianet\\\\.nl\\\\/.*?ref=\",\"^https?:\\\\/\\\\/sso\\\\.serverplan\\\\.com\\\\/manage2fa\\\\/check\\\\?ref=\",\"^https?:\\\\/\\\\/login\\\\.meijer\\\\.com\\\\/.*?\\\\?ref=\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\\\\/(?:login_alerts|ajax|should_add_browser)/\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\\\\/groups\\\\/member_bio\\\\/bio_dialog\\\\/\",\"^https?:\\\\/\\\\/api\\\\.taiga\\\\.io\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?gog\\\\.com\\\\/click\\\\.html\",\"^https?:\\\\/\\\\/login\\\\.progressive\\\\.com\",\"^https?:\\\\/\\\\/www\\\\.sephora\\\\.com\\\\/api\\\\/\",\"^https?:\\\\/\\\\/www\\\\.contestgirl\\\\.com\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?agenciatributaria\\\\.gob\\\\.es\",\"^https?:\\\\/\\\\/login\\\\.ingbank\\\\.pl\",\"^wss?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?zoom\\\\.us\",\"^https?:\\\\/\\\\/api\\\\.bilibili\\\\.com\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?onet\\\\.pl\\\\/[^?]*\\\\?.*?utm_campaign=.\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?stripe\\\\.com\\\\/[^?]+.*?&?referrer=[^/?&]*\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?lichess\\\\.org\\\\/login.*?&?referrer=.*?\",\"^https?:\\\\/\\\\/like.co\\\\/api\\\\/like\\\\/likebutton\\\\/[^?]+.*?&?referrer=[^/?&]*\",\"^https?:\\\\/\\\\/button.like.co\\\\/in\\\\/.*?&?referrer=[^/?&]*\",\"^https?:\\\\/\\\\/www\\\\.mma\\\\.go\\\\.kr\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?github\\\\.com\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?billiger\\\\.de\\\\/.*?mc=\"]},\"adtech\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?adtech(?:\\\\.[a-z]{2,}){1,}\"},\"contentpass\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?contentpass\\\\.(?:net|de)\"},\"bf-ad\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?bf-ad(?:\\\\.[a-z]{2,}){1,}\"},\"amazon-adsystem\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?amazon-adsystem(?:\\\\.[a-z]{2,}){1,}\",\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?amazon-adsystem(?:\\\\.[a-z]{2,}){1,}\\\\/v3\\\\/oor\\\\?\"],\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?amazon-adsystem(?:\\\\.[a-z]{2,}){1,}\\\\/x\\\\/c\\\\/.+?\\\\/([^&]+)\"]},\"adsensecustomsearchads\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?adsensecustomsearchads(?:\\\\.[a-z]{2,}){1,}\"},\"youtube\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?youtube\\\\.com\",\"rules\":[\"feature\",\"gclid\",\"kw\"],\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?youtube\\\\.com\\\\/signin\\\\?.*?\"],\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?youtube\\\\.com\\\\/redirect?.*?q=([^&]*)\"]},\"youtube_pagead\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?youtube\\\\.com\\\\/pagead\"},\"youtube_apiads\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?youtube\\\\.com\\\\/api\\\\/stats\\\\/ads\"},\"facebook\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\",\"rules\":[\"hc_[a-z_%\\\\[\\\\]0-9]*\",\"[a-z]*ref[a-z]*\",\"__tn__\",\"eid\",\"__(?:xts|cft)__(?:\\\\[|%5B)\\\\d(?:\\\\]|%5D)\",\"comment_tracking\",\"dti\",\"app\",\"video_source\",\"ftentidentifier\",\"pageid\",\"padding\",\"ls_ref\",\"action_history\",\"tracking\",\"referral_code\",\"referral_story_type\"],\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\\\\/.*?(plugins|ajax)\\\\/\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\\\\/dialog\\\\/(?:share|send)\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\\\\/groups\\\\/member_bio\\\\/bio_dialog\\\\/\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\\\\/photo\\\\.php\\\\?\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\\\\/privacy\\\\/specific_audience_selector_dialog\\\\/\",\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?facebook\\\\.com\\\\/photo\\\\/download\\\\/\"],\"redirections\":[\"^https?:\\\\/\\\\/l[a-z]?\\\\.facebook\\\\.com/l\\\\.php\\\\?.*?u=(https?%3A%2F%2F[^&]*)\"]},\"twitter\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?twitter.com\",\"rules\":[\"(?:ref_?)?src\",\"s\",\"cn\",\"ref_url\"]},\"reddit\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?reddit.com\",\"rules\":[\"%24deep_link\",\"\\\\$deep_link\",\"correlation_id\",\"ref_campaign\",\"ref_source\",\"%243p\",\"\\\\$3p\",\"%24original_url\",\"\\\\$original_url\",\"_branch_match_id\"],\"redirections\":[\"^https?:\\\\/\\\\/out\\\\.reddit\\\\.com\\\\/.*?url=([^&]*)\",\"^https?:\\\\/\\\\/click\\\\.redditmail\\\\.com\\\\/.*?url=([^&]*)\"]},\"netflix\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?netflix.com\",\"rules\":[\"trackId\",\"tctx\",\"jb[a-z]*?\"]},\"techcrunch\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?techcrunch\\\\.com\",\"rules\":[\"ncid\",\"sr\",\"sr_share\"]},\"bing\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?bing(?:\\\\.[a-z]{2,}){1,}\",\"rules\":[\"cvid\",\"form\",\"sk\",\"sp\",\"sc\",\"qs\",\"qp\"],\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?bing(?:\\\\.[a-z]{2,}){1,}\\\\/WS\\\\/redirect\\\\/\"]},\"tweakers\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tweakers\\\\.net\",\"rules\":[\"nb\",\"u\"]},\"twitch\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?twitch\\\\.com\",\"rules\":[\"tt_medium\",\"tt_content\"]},\"vivaldi\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?vivaldi\\\\.com\",\"rules\":[\"pk_campaign\",\"pk_kwd\"]},\"indeed\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?indeed\\\\.com\",\"rules\":[\"from\",\"alid\",\"[a-z]*tk\"],\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?indeed\\\\.com\\\\/rc\\\\/clk\"]},\"hhdotru\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?hh\\\\.ru\",\"rules\":[\"vss\",\"t\",\"swnt\",\"grpos\",\"ptl\",\"stl\",\"exp\",\"plim\"]},\"ebay\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?ebay(?:\\\\.[a-z]{2,}){1,}\",\"rules\":[\"_trkparms\",\"_trksid\",\"_from\",\"hash\"],\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?rover\\\\.ebay(?:\\\\.[a-z]{2,}){1,}\\\\/rover.*mpre=([^&]*)\"]},\"cnet\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?cnet\\\\.com\",\"rules\":[\"ftag\"]},\"imdb.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?imdb\\\\.com\",\"rules\":[\"ref_\",\"pf_rd_[a-z]*\"]},\"govdelivery.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?govdelivery\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?links\\\\.govdelivery\\\\.com.*\\\\/track\\\\?.*(https?:\\\\/\\\\/.*)\"]},\"walmart.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?walmart\\\\.com\",\"rules\":[\"u1\",\"ath[a-z]*\"]},\"net-parade.it\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?net\\\\-parade\\\\.it\",\"rules\":[\"pl\"]},\"prvnizpravy.cz\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?prvnizpravy\\\\.cz\",\"rules\":[\"xid\"]},\"youku.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?youku\\\\.com\",\"rules\":[\"tpa\"]},\"nytimes.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?nytimes\\\\.com\",\"rules\":[\"smid\"]},\"tchibo.de\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tchibo\\\\.de\",\"rules\":[\"wbdcd\"]},\"steampowered\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?steampowered\\\\.com\",\"rules\":[\"snr\"]},\"steamcommunity\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?steamcommunity\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?steamcommunity\\\\.com\\\\/linkfilter\\\\/\\\\?url=([^&]*)\"]},\"mozaws.net\":{\"urlPattern\":\"https?:\\\\/\\\\/outgoing\\\\.prod\\\\.mozaws\\\\.net\\\\/\",\"redirections\":[\"https?:\\\\/\\\\/[^/]+\\\\/v1\\\\/[0-9a-f]{64}\\\\/(.*)\"]},\"shutterstock.com\":{\"urlPattern\":\"https?:\\\\/\\\\/([a-z0-9-.]*\\\\.)shutterstock\\\\.com\",\"rules\":[\"src\"]},\"mozilla.org\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?mozilla\\\\.org\",\"rules\":[\"src\",\"platform\",\"redirect_source\"],\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?mozilla.org\\\\/api\"]},\"readdc.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?readdc\\\\.com\",\"rules\":[\"ref\"]},\"dailycodingproblem.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?dailycodingproblem\\\\.com\",\"rules\":[\"email\"]},\"github.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?github\\\\.com\",\"rules\":[\"email_token\",\"email_source\"]},\"deviantart.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?deviantart\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?deviantart\\\\.com\\\\/.*?\\\\/outgoing\\\\?(.*)\"]},\"site2.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?site2\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?site2\\\\.com.*?\\\\?.*=(.*)\"]},\"site.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?site\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?site\\\\.com.*?\\\\?to=([^&]*)\"]},\"site3.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?site3\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?site3\\\\.com.*?\\\\?r=([^&]*)\"]},\"aliexpress\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?aliexpress(?:\\\\.[a-z]{2,}){1,}\",\"rules\":[\"ws_ab_test\",\"btsid\",\"algo_expid\",\"algo_pvid\",\"gps-id\",\"scm[_a-z-]*\",\"cv\",\"af\",\"mall_affr\",\"sk\",\"dp\",\"terminal_id\",\"aff_request_id\"]},\"mozillazine.org\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?mozillazine\\\\.org\",\"rules\":[\"sid\"]},\"9gag.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?9gag\\\\.com\",\"rules\":[\"ref\"],\"exceptions\":[\"^https?:\\\\/\\\\/comment-cdn\\\\.9gag\\\\.com\\\\/.*?comment-list.json\\\\?\"]},\"linksynergy.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?linksynergy\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?linksynergy\\\\.com\\\\/.*?murl=([^&]*)\"]},\"giphy.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?giphy\\\\.com\",\"rules\":[\"ref\"]},\"gate.sc\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?gate\\\\.sc\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?gate\\\\.sc\\\\/.*?url=([^&]*)\"]},\"vk.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/vk\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/vk\\\\.com\\\\/away\\\\.php\\\\?to=([^&]*)\"]},\"woot.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?woot\\\\.com\",\"rules\":[\"ref_?\"]},\"vitamix.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?vitamix\\\\.com\",\"rules\":[\"_requestid\",\"cid\",\"dl\",\"di\",\"sd\",\"bi\"]},\"curseforge.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?curseforge\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?curseforge\\\\.com\\\\/linkout\\\\?remoteUrl=([^&]*)\"]},\"messenger.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?messenger\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/l\\\\.messenger\\\\.com\\\\/l\\\\.php\\\\?u=([^&]*)\"]},\"nypost.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?nypost\\\\.com\",\"rules\":[\"__twitter_impression\"]},\"ozon.ru\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?ozon\\\\.ru\",\"rules\":[\"partner\"]},\"norml.org\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?norml\\\\.org\",\"rules\":[\"link_id\",\"can_id\",\"source\",\"email_referrer\",\"email_subject\"]},\"LinkedIn\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?linkedin\\\\.com\",\"rules\":[\"refId\",\"trk\",\"li[a-z]{2}\"]},\"LinkedIn Learning\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?linkedin\\\\.com\\\\/learning\",\"rules\":[\"u\"]},\"smartredirect.de\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?smartredirect\\\\.de\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?smartredirect\\\\.de.*?url=([^&]*)\"]},\"SPIEGEL ONLINE\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?spiegel\\\\.de\",\"rules\":[\"b\"]},\"rutracker.org\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?rutracker\\\\.org\",\"redirections\":[\".*url=([^&]*)\"]},\"instagram\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?instagram\\\\.com\",\"rules\":[\"igshid\"],\"redirections\":[\".*u=([^&]*)\"]},\"lazada.com.my\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?lazada\\\\.com\\\\.my\",\"rules\":[\"ad_src\",\"did\",\"pa\",\"mp\",\"impsrc\",\"cid\",\"pos\"]},\"imgsrc.ru\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?imgsrc\\\\.ru\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?dlp\\\\.imgsrc\\\\.ru\\\\/go\\\\/\\\\d+\\\\/\\\\d+\\\\/\\\\d+\\\\/([^&]*)\"]},\"boredpanda.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?boredpanda\\\\.com\",\"rules\":[\"h\"]},\"awstrack.me\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?awstrack\\\\.me\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?awstrack\\\\.me\\\\/.*\\\\/(https?.*?)\\\\/\"]},\"exactag.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?exactag\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?exactag\\\\.com.*url=([^&]*)\"]},\"bahn.de\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?bahn\\\\.de\",\"rules\":[\"dbkanal_[0-9]{3}\"]},\"disq.us\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?disq\\\\.us\",\"rules\":[\"cuid\"],\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?disq\\\\.us\\\\/.*?url=([^&]*)%3A\"]},\"anonym.to\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?anonym\\\\.to\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?anonym\\\\.to.*\\\\?([^&]*)\"]},\"moosejaw.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?moosejaw\\\\.com\",\"rules\":[\"cm_lm\",\"cm_mmc\",\"webUserId\",\"spMailingID\",\"spUserID\",\"spJobID\",\"spReportId\"]},\"spotify.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?spotify\\\\.com\",\"rules\":[\"si\"]},\"yandex\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?(?:yandex(?:\\\\.[a-z]{2,}){1,}|ya\\\\.ru)\",\"rules\":[\"lr\",\"redircnt\"]},\"healio.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?healio\\\\.com\",\"rules\":[\"ecp\",\"m_bt\"]},\"zoho.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?zoho\\\\.com\",\"rules\":[\"iref\"]},\"snapchat.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?snapchat\\\\.com\",\"rules\":[\"sc_referrer\",\"sc_ua\"]},\"medium.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?medium\\\\.com\",\"rules\":[\"source\"]},\"swp.de\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?swp\\\\.de\",\"rules\":[\"source\"]},\"wps.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?wps\\\\.com\",\"rules\":[\"from\"]},\"accounts.firefox.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:accounts\\\\.)?firefox\\\\.com\",\"rules\":[\"context\",\"entrypoint\",\"form_type\"]},\"support.mozilla.org\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:support\\\\.)?mozilla\\\\.org\",\"rules\":[\"as\"]},\"ClearURLsTest\":{\"urlPattern\":\"^https?:\\\\/\\\\/kevinroebert\\\\.gitlab\\\\.io\\\\/ClearUrls\\\\/void\\\\/index\\\\.html\",\"rules\":[\"test\"],\"redirections\":[\"^https?:\\\\/\\\\/kevinroebert\\\\.gitlab\\\\.io\\\\/ClearUrls\\\\/void\\\\/index\\\\.html\\\\?url=([^&]*)\"]},\"ClearURLsTestBlock\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/kevinroebert\\\\.gitlab\\\\.io\\\\/ClearUrls\\\\/void\\\\/block\\\\.svg\"},\"ClearURLsTest2\":{\"urlPattern\":\"^https?:\\\\/\\\\/test\\\\.clearurls\\\\.xyz\\\\/void\\\\/index\\\\.html\",\"rules\":[\"test\"],\"redirections\":[\"^https?:\\\\/\\\\/test\\\\.clearurls\\\\.xyz\\\\/void\\\\/index\\\\.html\\\\?url=([^&]*)\"]},\"ClearURLsTestBlock2\":{\"completeProvider\":true,\"urlPattern\":\"^https?:\\\\/\\\\/test\\\\.clearurls\\\\.xyz\\\\/void\\\\/block\\\\.svg\"},\"diepresse.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?diepresse\\\\.com\",\"rules\":[\"from\",\"xtor\",\"xt_at\"]},\"newsletter.lidl.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/newsletter\\\\.lidl(?:\\\\.[a-z]{2,}){1,}\",\"rules\":[\"x\"]},\"allegro.pl\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?allegro\\\\.pl\",\"rules\":[\"reco_id\",\"sid\"]},\"backcountry.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?backcountry\\\\.com\",\"rules\":[\"CMP_SKU\",\"MER\",\"mr:trackingCode\",\"mr:device\",\"mr:adType\",\"iv_\",\"CMP_ID\",\"k_clickid\",\"rmatt\",\"INT_ID\",\"ti\",\"fl\"],\"referralMarketing\":[\"mr:referralID\"]},\"meetup.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?meetup\\\\.com\",\"rules\":[\"rv\",\"_xtd\"]},\"apple.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?apple\\\\.com\",\"rules\":[\"app\",\"ign-itsc[a-z]+\"]},\"alabout.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?alabout\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?alabout\\\\.com.*url=([^&]*)\"]},\"newyorker.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?newyorker\\\\.com\",\"rules\":[\"source\",\"bxid\",\"cndid\",\"esrc\",\"mbid\"]},\"gog.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?gog\\\\.com\",\"rules\":[\"track_click\",\"link_id\"]},\"tradedoubler.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tradedoubler\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tradedoubler\\\\.com.*(?:url|_td_deeplink)=([^&]*)\"]},\"theguardian.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?theguardian\\\\.com\",\"rules\":[\"CMP\"]},\"srvtrck.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?srvtrck\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?srvtrck\\\\.com.*url=([^&]*)\"]},\"mysku.ru\":{\"urlPattern\":\"^https?:\\\\/\\\\/mysku\\\\.ru\",\"redirections\":[\"^https?:\\\\/\\\\/mysku\\\\.ru.*r=([^&]*)\"]},\"admitad.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?admitad\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?admitad\\\\.com.*ulp=([^&]*)\"]},\"taobao.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?taobao\\\\.com\",\"rules\":[\"price\",\"sourceType\",\"suid\",\"ut_sk\",\"un\",\"share_crt_v\",\"sp_tk\",\"cpp\",\"shareurl\",\"short_name\",\"app\",\"scm[_a-z-]*\",\"pvid\",\"algo_expid\",\"algo_pvid\",\"ns\",\"abbucket\",\"ali_refid\",\"ali_trackid\",\"acm\",\"utparam\",\"pos\",\"abtest\",\"trackInfo\",\"utkn\",\"scene\",\"mytmenu\",\"turing_bucket\",\"lygClk\",\"impid\",\"bftTag\",\"bftRwd\",\"spm\",\"_u\"]},\"tmall.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tmall\\\\.com\",\"rules\":[\"price\",\"sourceType\",\"suid\",\"ut_sk\",\"un\",\"share_crt_v\",\"sp_tk\",\"cpp\",\"shareurl\",\"short_name\",\"app\",\"scm[_a-z-]*\",\"pvid\",\"algo_expid\",\"algo_pvid\",\"ns\",\"abbucket\",\"ali_refid\",\"ali_trackid\",\"acm\",\"utparam\",\"pos\",\"abtest\",\"trackInfo\",\"user_number_id\",\"utkn\",\"scene\",\"mytmenu\",\"turing_bucket\",\"lygClk\",\"impid\",\"bftTag\",\"bftRwd\",\"activity_id\"]},\"tb.cn\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tb\\\\.cn\",\"rules\":[\"sm\"]},\"bilibili.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?bilibili\\\\.com\",\"rules\":[\"callback\",\"spm_id_from\",\"from_source\",\"from\",\"seid\",\"share_source\",\"msource\",\"refer_from\",\"share_medium\",\"share_source\",\"share_plat\",\"share_tag\",\"share_session_id\",\"timestamp\",\"unique_k\"],\"exceptions\":[\"^https?:\\\\/\\\\/api\\\\.bilibili\\\\.com\"]},\"m.bilibili.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/m\\\\.bilibili\\\\.com\",\"rules\":[\"bbid\",\"ts\"]},\"live.bilibili.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/live\\\\.bilibili\\\\.com\",\"rules\":[\"visit_id\",\"session_id\",\"broadcast_type\",\"is_room_feed\"]},\"marketscreener.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?marketscreener\\\\.com\",\"rules\":[\"type_recherche\",\"mots\",\"noredirect\",\"RewriteLast\",\"lien\",\"aComposeInputSearch\",\"type_recherche_forum\",\"add_mots\",\"countview\"],\"exceptions\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?marketscreener\\\\.com\\\\/search\\\\/\\\\?\"]},\"marketscreener.com search\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?marketscreener\\\\.com\\\\/search\\\\/\\\\?\",\"rules\":[\"type_recherche\",\"noredirect\",\"RewriteLast\",\"lien\",\"aComposeInputSearch\",\"type_recherche_forum\",\"countview\"]},\"bestbuy.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?bestbuy\\\\.com\",\"rules\":[\"irclickid\",\"irgwc\",\"loc\",\"acampID\",\"mpid\",\"intl\"]},\"digidip.net\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?digidip\\\\.net\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?digidip\\\\.net.*url=([^&]*)\"]},\"tiktok.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tiktok\\\\.com\",\"rules\":[\"u_code\",\"preview_pb\",\"_d\",\"timestamp\",\"user_id\",\"share_app_name\",\"share_iid\",\"source\"]},\"autoplus.fr\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?autoplus\\\\.fr\",\"rules\":[\"idprob\",\"hash\",\"sending_id\",\"site_id\",\"dr_tracker\"]},\"bigfishgames.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?bigfishgames\\\\.com\",\"rules\":[\"pc\",\"npc\",\"npv[0-9]+\",\"npi\"],\"rawRules\":[\"\\\\?pc$\"]},\"dpbolvw.net\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?dpbolvw\\\\.net\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?dpbolvw\\\\.net.*url=([^&]*)\"]},\"humblebundle.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?humblebundle\\\\.com\",\"referralMarketing\":[\"partner\"]},\"cafepedagogique.net\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?cafepedagogique\\\\.net\",\"rules\":[\"actId\",\"actCampaignType\",\"actSource\"]},\"bloculus.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?bloculus\\\\.com\",\"rules\":[\"tl_[a-z_]+\"]},\"mailpanion.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?mailpanion\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?mailpanion\\\\.com.*destination=([^&]*)\"]},\"signtr.website\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?signtr\\\\.website\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?signtr\\\\.website.*redirect=([^&]*)\"]},\"mailtrack.io\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?mailtrack\\\\.io\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?mailtrack\\\\.io.*url=([^&]*)\"]},\"zillow.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?zillow\\\\.com\",\"rules\":[\"rtoken\"]},\"realtor.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?realtor\\\\.com\",\"rules\":[\"ex\",\"identityID\",\"MID\",\"RID\"]},\"redfin.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?redfin\\\\.com\",\"rules\":[\"riftinfo\"]},\"epicgames.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?epicgames\\\\.com\",\"rules\":[\"epic_affiliate\",\"epic_gameId\"]},\"onet.pl\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?onet\\\\.pl\",\"rules\":[\"srcc\",\"utm_v\",\"utm_medium\",\"utm_source\"]},\"allrecipes.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?allrecipes\\\\.com\",\"rules\":[\"internalSource\",\"referringId\",\"referringContentType\",\"clickId\"]},\"europe1.fr\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?europe1\\\\.fr\",\"rules\":[\"xtor\"]},\"effiliation.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?effiliation\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?effiliation\\\\.com.*url=([^&]*)\"]},\"argos.co.uk\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?argos\\\\.co\\\\.uk\",\"rules\":[\"istCompanyId\",\"istFeedId\",\"istItemId\",\"istBid\",\"clickOrigin\"]},\"hlserve.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?hlserve\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?hlserve\\\\.com.*dest=([^&]*)\"]},\"thunderbird.net\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?thunderbird\\\\.net\",\"rules\":[\"src\"]},\"cnbc.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?cnbc\\\\.com\",\"rules\":[\"__source\"]},\"roblox.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?roblox\\\\.com\",\"rules\":[\"refPageId\"]},\"cell.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?cell\\\\.com\",\"rules\":[\"_returnURL\"]},\"academic.oup.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/academic\\\\.oup\\\\.com\",\"rules\":[\"redirectedFrom\"]},\"flexlinkspro.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?flexlinkspro\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?flexlinkspro\\\\.com.*url=([^&]*)\"]},\"agata88.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?agata88\\\\.com\",\"rules\":[\"source\"]},\"hs.fi\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?hs\\\\.fi\",\"rules\":[\"share\"]},\"yle.fi\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?yle\\\\.fi\",\"rules\":[\"origin\"]},\"ccbill.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/refer\\\\.ccbill\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/refer\\\\.ccbill\\\\.com.*HTML=([^&]*)\"]},\"flipkart\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?flipkart\\\\.com\",\"rules\":[\"otracker.?\",\"ssid\",\"[cilp]id\",\"marketplace\",\"store\",\"srno\",\"store\",\"ppn\",\"ppt\",\"fm\",\"collection-tab-name\",\"sattr\\\\[\\\\]\",\"p\\\\[\\\\]\",\"st\"]},\"idealo.de\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?idealo\\\\.de\",\"rules\":[\"sid\",\"src\",\"siteId\",\"lcb\",\"leadOutUrl\",\"offerListId\",\"osId\",\"cancelUrl\",\"disc\"]},\"idealo-partner.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?idealo-partner\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?idealo-partner\\\\.com.*trg=([^&]*)\"]},\"teletrader.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?teletrader\\\\.com\",\"rules\":[\"internal\"]},\"webgains.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?webgains\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?webgains\\\\.com.*wgtarget=([^&]*)\"]},\"deeplearning.ai\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?deeplearning\\\\.ai\",\"rules\":[\"ecid\",\"_hsmi\",\"_hsenc\"]},\"getpocket.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?getpocket\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?getpocket\\\\.com.*url=([^&]*)\"]},\"gamespot.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?gamespot\\\\.com\",\"rules\":[\"PostType\",\"ServiceType\",\"ftag\",\"UniqueID\",\"TheTime\"]},\"tokopedia.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tokopedia\\\\.com\",\"rules\":[\"src\",\"trkid\",\"whid\"],\"redirections\":[\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?tokopedia\\\\.com\\\\/promo.*r=([^&]*)\"]},\"wkorea.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?wkorea\\\\.com\",\"rules\":[\"ddw\",\"ds_ch\"]},\"eonline.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?eonline\\\\.com\",\"rules\":[\"source\",\"medium\",\"content\"]},\"reuters.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?reuters\\\\.com\",\"rules\":[\"taid\"]},\"app.adjust.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/app\\\\.adjust\\\\.com\",\"redirections\":[\"^https?:\\\\/\\\\/app\\\\.adjust\\\\.com.*redirect=([^&]*)\"]},\"change.org\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?change\\\\.org\",\"rules\":[\"source_location\",\"psf_variant\",\"share_intent\"]},\"ceneo.pl\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?ceneo\\\\.pl\",\"rules\":[\"tag\"]},\"wired.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?wired\\\\.com\",\"rules\":[\"intcid\"]},\"alibaba cloud arms\":{\"urlPattern\":\"^https?:\\\\/\\\\/arms-retcode\\\\.aliyuncs\\\\.com\",\"rules\":[\"pid\",\"uid\",\"tag\",\"release\",\"environment\",\"sample\",\"behavior\",\"enableSPA\",\"enableLinkTrace\",\"page\",\"begin\",\"c2\",\"c3\",\"success\",\"code\",\"msg\",\"api\",\"traceId\",\"pv_id\",\"flag\",\"sr\",\"vp\",\"ct\",\"_v\",\"sampling\",\"dl\",\"post_res\"]},\"nikkei\":{\"urlPattern\":\"^https?://(?:[a-z0-9-]+\\\\.)*?nikkei\\\\.co(?:m|\\\\.jp)\",\"rules\":[\"adid\",\"i_cid\",\"n_cid\",\"waad\"]},\"weibo\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?weibo\\\\.(cn|com)\",\"rules\":[\"weibo_id\",\"dt_dapp\"]},\"fiverr.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?fiverr\\\\.com\",\"rules\":[\"context_referrer\",\"source\",\"ref_ctx_id\",\"funnel\"]},\"etsy.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?etsy\\\\.com\",\"rules\":[\"click_key\",\"click_sum\",\"organic_search_click\"]},\"magento.com\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?magento\\\\.com\",\"rules\":[\"itm_campaign\",\"itm_medium\",\"itm_source\",\"itm_term\"]},\"novinky.cz\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?novinky\\\\.cz\",\"rules\":[\"dop_ab_variant\",\"dop_source_zone_name\",\"dop_req_id\",\"dop_id\",\"source\",\"seq_no\"]},\"aktualne.cz\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?aktualne\\\\.cz\",\"rules\":[\"dop_ab_variant\",\"dop_source_zone_name\",\"dop_req_id\",\"dop_id\"]},\"seznamzpravy.cz\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?seznamzpravy\\\\.cz\",\"rules\":[\"dop_ab_variant\",\"dop_source_zone_name\",\"dop_req_id\",\"dop_id\",\"source\",\"seq_no\"]},\"billiger.de\":{\"urlPattern\":\"^https?:\\\\/\\\\/(?:[a-z0-9-]+\\\\.)*?billiger\\\\.de\",\"rules\":[\"log\",\"p\"]}}}","dataHash":"c7e054f105a7e3f366940e73803b5d2ee30e1d4993c23516b4afa61ee7965653","badgedStatus":true,"globalStatus":true,"globalurlcounter":63875129,"globalCounter":388004,"hashStatus":"hash_status_code_1","loggingStatus":true,"log":"{\"log\":[{\"before\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1195.701&fmt=303&fs=1&rt=1197.001&euri=&lact=29750&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1237&afmt=251&idpj=-6&ldpj=-35&rti=1197&st=1155.71&et=1195.701&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"after\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1195.701&fmt=303&fs=1&rt=1197.001&euri=&lact=29750&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1237&afmt=251&idpj=-6&ldpj=-35&rti=1197&st=1155.71&et=1195.701&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"rule\":\"(?:%3F)?referrer\",\"timestamp\":1650048372841},{\"before\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=37&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1200.001:PL&bwm=1200.001:8568855:1.509&bwe=1200.001:7226960&bat=1200.001:0.99:1&cmt=1200.001:1198.702&bh=1200.001:111.021\",\"after\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=37&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1200.001:PL&bwm=1200.001:8568855:1.509&bwe=1200.001:7226960&bat=1200.001:0.99:1&cmt=1200.001:1198.702&bh=1200.001:111.021\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650048375838},{\"before\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=38&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1230.001:PL&bwm=1230.001:8136177:0.966&bwe=1230.001:8060374&bat=1230.001:0.99:1&cmt=1230.001:1228.702&bh=1230.001:111.938\",\"after\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=38&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1230.001:PL&bwm=1230.001:8136177:0.966&bwe=1230.001:8060374&bat=1230.001:0.99:1&cmt=1230.001:1228.702&bh=1230.001:111.938\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650048405839},{\"before\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1235.701&fmt=303&fs=1&rt=1237.001&euri=&lact=69750&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1277&afmt=251&idpj=-6&ldpj=-35&rti=1237&st=1195.701&et=1235.701&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"after\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1235.701&fmt=303&fs=1&rt=1237.001&euri=&lact=69750&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1277&afmt=251&idpj=-6&ldpj=-35&rti=1237&st=1195.701&et=1235.701&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"rule\":\"(?:%3F)?referrer\",\"timestamp\":1650048412841},{\"before\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=39&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1260.001:PL&bwm=1260.001:5973627:0.778&bwe=1260.001:7835781&bat=1260.001:0.99:1&cmt=1260.001:1258.700&bh=1260.001:112.690\",\"after\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=39&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1260.001:PL&bwm=1260.001:5973627:0.778&bwe=1260.001:7835781&bat=1260.001:0.99:1&cmt=1260.001:1258.700&bh=1260.001:112.690\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650048435838},{\"before\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1275.701&fmt=303&fs=1&rt=1277.002&euri=&lact=109751&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1317&afmt=251&idpj=-6&ldpj=-35&rti=1277&st=1235.701&et=1275.701&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"after\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1275.701&fmt=303&fs=1&rt=1277.002&euri=&lact=109751&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1317&afmt=251&idpj=-6&ldpj=-35&rti=1277&st=1235.701&et=1275.701&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"rule\":\"(?:%3F)?referrer\",\"timestamp\":1650048452841},{\"before\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=40&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1290.009:PL&bwm=1290.009:4145503:0.605&bwe=1290.009:7835781&bat=1290.009:0.99:1&cmt=1290.009:1288.708&bh=1290.009:1388.400\",\"after\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=40&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1290.009:PL&bwm=1290.009:4145503:0.605&bwe=1290.009:7835781&bat=1290.009:0.99:1&cmt=1290.009:1288.708&bh=1290.009:1388.400\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650048465847},{\"before\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1315.699&fmt=303&fs=1&rt=1317.001&euri=&lact=149749&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1357&afmt=251&idpj=-6&ldpj=-35&rti=1317&st=1275.701&et=1315.699&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"after\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1315.699&fmt=303&fs=1&rt=1317.001&euri=&lact=149749&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1357&afmt=251&idpj=-6&ldpj=-35&rti=1317&st=1275.701&et=1315.699&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"rule\":\"(?:%3F)?referrer\",\"timestamp\":1650048492839},{\"before\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=41&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1330.002:PL&bwe=1330.002:7835781&bat=1330.002:0.99:1&cmt=1330.002:1328.700&bh=1330.002:1388.400&df=1330.002:6\",\"after\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=41&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1330.002:PL&bwe=1330.002:7835781&bat=1330.002:0.99:1&cmt=1330.002:1328.700&bh=1330.002:1388.400&df=1330.002:6\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650048505838},{\"before\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1355.7&fmt=303&fs=1&rt=1357.002&euri=&lact=189750&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1397&afmt=251&idpj=-6&ldpj=-35&rti=1357&st=1315.699&et=1355.7&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"after\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1355.7&fmt=303&fs=1&rt=1357.002&euri=&lact=189750&cl=441587635&state=playing&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&rtn=1397&afmt=251&idpj=-6&ldpj=-35&rti=1357&st=1315.699&et=1355.7&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"rule\":\"(?:%3F)?referrer\",\"timestamp\":1650048532841},{\"before\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=42&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1360.002:PL&bwe=1360.002:7835781&bat=1360.002:0.99:1&cmt=1360.002:1358.699&bh=1360.002:1388.400\",\"after\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=42&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&vps=1360.002:PL&bwe=1360.002:7835781&bat=1360.002:0.99:1&cmt=1360.002:1358.699&bh=1360.002:1388.400\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650048535838},{\"before\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1388.441&fmt=303&fs=1&rt=1389.736&euri=&lact=222485&cl=441587635&state=paused&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&afmt=251&idpj=-6&ldpj=-35&st=1355.7&et=1388.441&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"after\":\"https://www.youtube.com/api/stats/watchtime?ns=yt&el=detailpage&cpn=QE0efHFZOiQC1B0G&ver=2&cmt=1388.441&fmt=303&fs=1&rt=1389.736&euri=&lact=222485&cl=441587635&state=paused&volume=100&subscribed=1&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&hl=de_DE&cr=DE&uga=m30&len=1388.441&afmt=251&idpj=-6&ldpj=-35&st=1355.7&et=1388.441&muted=0&vis=2&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&plid=AAXctYvO55kIG2Ve&of=VZ3kVRlcv_UH0W1Ky9hQ4w&vm=CAEQARgEOjJBS1JhaHdCdzFlRlY1djgyU25xeWx3Y09wYl9XRnc2ZUtKeHJmMGkzWU9pQ1JGR1NTZ2JgQVBta0tETE5JVUhacURNYk9QN2VPN1NIZmhJZjh5YjBvV1NCVkZqMUI3bUhCXy1VOUk3NC1kSldMeVE5ZFFuTnpaSkZ2TXBpTmUwaGRPejZBWExDYUxzLXlVNWR1d0hU\",\"rule\":\"(?:%3F)?referrer\",\"timestamp\":1650048565576},{\"before\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=43&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&cmt=1389.739:1388.441,1389.739:1388.441&vps=1389.739:EN&bwe=1389.739:7835781&bat=1389.739:0.99:1&bh=1389.739:1388.400\",\"after\":\"https://www.youtube.com/api/stats/qoe?fmt=303&afmt=251&cpn=QE0efHFZOiQC1B0G&el=detailpage&ns=yt&fexp=23848211%2C23858057%2C23983296%2C23986033%2C24001373%2C24002022%2C24002025%2C24004644%2C24007246%2C24062267%2C24071000%2C24080738%2C24082661%2C24135310%2C24148483%2C24169457%2C24169501%2C24183255%2C24196549%2C24202118&cl=441587635&seq=43&docid=G04RtkgWmt8&ei=yLhZYpKiEcPm1gKdn6qoDg&event=streamingstats&plid=AAXctYvO55kIG2Ve&referrer=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DG04RtkgWmt8&cbr=Chrome&cbrver=100.0.4896.88&c=WEB&cver=2.20220413.05.00&cplayer=UNIPLAYER&cos=Windows&cosver=10.0&cplatform=DESKTOP&cmt=1389.739:1388.441,1389.739:1388.441&vps=1389.739:EN&bwe=1389.739:7835781&bat=1389.739:0.99:1&bh=1389.739:1388.400\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650048565579},{\"before\":\"https://www.imfernsehen.de/z/z.inc.php\",\"after\":\"https://www.imfernsehen.de/z/z.inc.php\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049822695},{\"before\":\"https://www.imfernsehen.de/z/z.inc.php\",\"after\":\"https://www.imfernsehen.de/z/z.inc.php\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049837147},{\"before\":\"https://www.imfernsehen.de/z/z.inc.php\",\"after\":\"https://www.imfernsehen.de/z/z.inc.php\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049842589},{\"before\":\"https://www.imfernsehen.de/z/z.inc.php\",\"after\":\"https://www.imfernsehen.de/z/z.inc.php\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049863501},{\"before\":\"https://twitter.com/i/jot\",\"after\":\"https://twitter.com/i/jot\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049989891},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049997710},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049997712},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049997715},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650049997780},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050000862},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050089506},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050091869},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050092101},{\"before\":\"https://www.google.com/images/cleardot.gif?zx=ysqhcwxl5thm\",\"after\":\"https://www.google.com/images/cleardot.gif\",\"rule\":\"zx\",\"timestamp\":1650050127180},{\"before\":\"https://www.google.com/search?q=test&oq=test&aqs=chrome..69i57j69i59j0i271l3j69i61j69i60l2.1722j0j7&sourceid=chrome&ie=UTF-8\",\"after\":\"https://www.google.com/search?q=test&aqs=chrome..69i57j69i59j0i271l3j69i61j69i60l2.1722j0j7&sourceid=chrome&ie=UTF-8\",\"rule\":\"oq\",\"timestamp\":1650050161400},{\"before\":\"https://www.google.com/search?q=test&aqs=chrome..69i57j69i59j0i271l3j69i61j69i60l2.1722j0j7&sourceid=chrome&ie=UTF-8\",\"after\":\"https://www.google.com/search?q=test&aqs=chrome..69i57j69i59j0i271l3j69i61j69i60l2.1722j0j7&sourceid=chrome\",\"rule\":\"ie\",\"timestamp\":1650050161400},{\"before\":\"https://www.google.com/search?q=test&aqs=chrome..69i57j69i59j0i271l3j69i61j69i60l2.1722j0j7&sourceid=chrome\",\"after\":\"https://www.google.com/search?q=test&sourceid=chrome\",\"rule\":\"aqs\",\"timestamp\":1650050161401},{\"before\":\"https://www.google.com/search?q=test&sourceid=chrome\",\"after\":\"https://www.google.com/search?q=test\",\"rule\":\"sourceid\",\"timestamp\":1650050161401},{\"before\":\"https://www.google.com/gen_204?s=web&t=aft&atyp=csi&ei=A8VZYunUJIuDxc8PqJWbwAE&rt=wsrt.267,aft.935,afti.935,frt.776,sct.723&wh=947&frtp=625&imn=15&ima=9&imad=9&aftp=947&r=1&bl=Crt7\",\"after\":\"https://www.google.com/gen_204?s=web&t=aft&atyp=csi&ei=A8VZYunUJIuDxc8PqJWbwAE&rt=wsrt.267,aft.935,afti.935,frt.776,sct.723&wh=947&frtp=625&imn=15&ima=9&imad=9&aftp=947&r=1&bl=Crt7\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050308257},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&bver=1564&srcpg=web&jsr=1&error=Cannot%20redefine%20property:%20rwt&script=chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/userscript.html?name%3DDirect%252520links%252520out.user.js%26id%3Df7dfc06c-8af4-4016-92f9-e21c74771af5&line=198&ons=0&jsel=0&sd=1&ectx={}&tum={%22https://www.google.com/search%22:%22{{0}}%22}&trace=TypeError:%20Cannot%20redefine%20property:%20rwt%0A%20%20%20%20at%20Function.defineProperty%20(%3Canonymous%3E)%0A%20%20%20%20at%20rwGoogle%20(chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/userscript.html?name%3DDirect%252520links%252520out.user.js%26id%3Df7dfc06c-8af4-4016-92f9-e21c74771af5:198:20)%0A%20%20%20%20at%20HTMLDocument.%3Canonymous%3E%20(chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/userscript.html?name%3DDirect%252520links%252520out.user.js%26id%3Df7dfc06c-8af4-4016-92f9-e21c74771af5:330:17)%0A%20%20%20%20at%20it%20(%3Canonymous%3E:14:1074)%0A%20%20%20%20at%20HTMLDocument.t.%3Ccomputed%3E%20(%3Canonymous%3E:38:422)%0A%20%20%20%20at%20it%20(%3Canonymous%3E:14:1074)%0A%20%20%20%20at%20t%20(%3Canonymous%3E:38:441)%0A%20%20%20%20at%20HTMLDocument.L%20(%3Canonymous%3E:44:470)%0A%20%20%20%20at%20Object.window.jsl.dh%20({{0}}:51:110)%0A%20%20%20%20at%20{{0}}:168:1540&zx=1650050308909\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&bver=1564&srcpg=web&jsr=1&error=Cannot%20redefine%20property:%20rwt&script=chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/userscript.html?name%3DDirect%252520links%252520out.user.js%26id%3Df7dfc06c-8af4-4016-92f9-e21c74771af5&line=198&ons=0&jsel=0&sd=1&ectx={}&tum={%22https://www.google.com/search%22:%22{{0}}%22}&trace=TypeError:%20Cannot%20redefine%20property:%20rwt%0A%20%20%20%20at%20Function.defineProperty%20(%3Canonymous%3E)%0A%20%20%20%20at%20rwGoogle%20(chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/userscript.html?name%3DDirect%252520links%252520out.user.js%26id%3Df7dfc06c-8af4-4016-92f9-e21c74771af5:198:20)%0A%20%20%20%20at%20HTMLDocument.%3Canonymous%3E%20(chrome-extension://dhdgffkkebhmkfjojejmpbldmpobfkfo/userscript.html?name%3DDirect%252520links%252520out.user.js%26id%3Df7dfc06c-8af4-4016-92f9-e21c74771af5:330:17)%0A%20%20%20%20at%20it%20(%3Canonymous%3E:14:1074)%0A%20%20%20%20at%20HTMLDocument.t.%3Ccomputed%3E%20(%3Canonymous%3E:38:422)%0A%20%20%20%20at%20it%20(%3Canonymous%3E:14:1074)%0A%20%20%20%20at%20t%20(%3Canonymous%3E:38:441)%0A%20%20%20%20at%20HTMLDocument.L%20(%3Canonymous%3E:44:470)%0A%20%20%20%20at%20Object.window.jsl.dh%20({{0}}:51:110)%0A%20%20%20%20at%20{{0}}:168:1540&zx=1650050308909\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050308917},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&cad=key.message:Cannot%20redefine%20property:%20rwt,%20context:{},errorCount.5,lLog.1650050308905,timesLogged.1,bRate.0,now.1650050308915&zx=1650050308915\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&cad=key.message:Cannot%20redefine%20property:%20rwt,%20context:{},errorCount.5,lLog.1650050308905,timesLogged.1,bRate.0,now.1650050308915&zx=1650050308915\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050308925},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&m=HV&pv=0.9208919999570009&me=1:1650050308820,x:2,V,0,0,1920,947:0,B,2916:0,N,1,A8VZYunUJIuDxc8PqJWbwAE:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22:0,R,1,CFMQAA,934,571,366,22:0,R,1,CC0QAA,932,723,369,127:0,R,1,CCoQAA,934,724,366,48:0,R,1,CCAQAA,934,772,366,77:107,T:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22&zx=1650050308961\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&m=HV&pv=0.9208919999570009&me=1:1650050308820,x:2,V,0,0,1920,947:0,B,2916:0,N,1,A8VZYunUJIuDxc8PqJWbwAE:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22:0,R,1,CFMQAA,934,571,366,22:0,R,1,CC0QAA,932,723,369,127:0,R,1,CCoQAA,934,724,366,48:0,R,1,CCAQAA,934,772,366,77:107,T:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22&zx=1650050308961\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050308967},{\"before\":\"https://www.google.com/client_204?atyp=i&biw=1920&bih=947&ei=A8VZYunUJIuDxc8PqJWbwAE\",\"after\":\"https://www.google.com/client_204?atyp=i&bih=947&ei=A8VZYunUJIuDxc8PqJWbwAE\",\"rule\":\"bi[a-z]*\",\"timestamp\":1650050308983},{\"before\":\"https://www.google.com/client_204?atyp=i&bih=947&ei=A8VZYunUJIuDxc8PqJWbwAE\",\"after\":\"https://www.google.com/client_204?atyp=i&bih=947\",\"rule\":\"ei\",\"timestamp\":1650050308983},{\"before\":\"https://www.google.com/client_204?atyp=i&bih=947\",\"after\":\"https://www.google.com/client_204?bih=947\",\"rule\":\"atyp\",\"timestamp\":1650050308983},{\"before\":\"https://www.google.com/async/bgasy?ei=A8VZYunUJIuDxc8PqJWbwAE&yv=3&async=_fmt%3Ajspb\",\"after\":\"https://www.google.com/async/bgasy?yv=3&async=_fmt%3Ajspb\",\"rule\":\"ei\",\"timestamp\":1650050309268},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&dt19=3&zx=1650050309281\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&dt19=3&zx=1650050309281\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309286},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&m=HV&pv=0.9208919999570009&me=1:1650050308820,x:2,V,0,0,1920,947:0,B,2916:0,N,1,A8VZYunUJIuDxc8PqJWbwAE:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22:0,R,1,CFMQAA,934,571,366,22:0,R,1,CC0QAA,932,723,369,127:0,R,1,CCoQAA,934,724,366,48:0,R,1,CCAQAA,934,772,366,77:107,T:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22&zx=1650050309379\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&m=HV&pv=0.9208919999570009&me=1:1650050308820,x:2,V,0,0,1920,947:0,B,2916:0,N,1,A8VZYunUJIuDxc8PqJWbwAE:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22:0,R,1,CFMQAA,934,571,366,22:0,R,1,CC0QAA,932,723,369,127:0,R,1,CCoQAA,934,724,366,48:0,R,1,CCAQAA,934,772,366,77:107,T:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22&zx=1650050309379\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309383},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=ibtZYols-4bFzw-K2rCACQ&ct=slh&v=t1&pv=0.22771617006314426&me=133:1650047881814,h,1,CAIQBA,i:44,h,1,CAIQBA,o:0,h,1,CAIQAw,i:36,h,1,CAIQAw,o:202,h,1,CAIQAw,i:665,G,1,CAIQAw,47,21,1:0,c,285,106:2,G,1,CAIQAw,47,21:1,e,U&zx=1650050309380\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=ibtZYols-4bFzw-K2rCACQ&ct=slh&v=t1&pv=0.22771617006314426&me=133:1650047881814,h,1,CAIQBA,i:44,h,1,CAIQBA,o:0,h,1,CAIQAw,i:36,h,1,CAIQAw,o:202,h,1,CAIQAw,i:665,G,1,CAIQAw,47,21,1:0,c,285,106:2,G,1,CAIQAw,47,21:1,e,U&zx=1650050309380\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309387},{\"before\":\"https://www.google.com/gen_204?atyp=csi&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&s=web&t=all&bl=Crt7&wh=947&frtp=625&imn=15&ima=9&imad=9&aftp=947&adh=tv.6&cls=0.00039241465987205755&ime=2&imex=2&imeh=1&imea=0&imeb=0&imel=0&scp=0&fld=1054&net=dl.10000,ect.4g,rtt.100&mem=ujhs.39,tjhs.51,jhsl.4295,dm.8&sto=&sys=hc.8&rt=sct.723,frt.776,aft.935,afti.935,aftqf.1013,prt.939,dcl.1032,xjsls.1199,xjses.1440,xjsee.1544,xjs.1544,ol.2247,lcp.904,fcp.318,wsrt.267,cst.33,dnst.87,rqst.786,rspt.658,sslt.33,rqstt.139,unt.5,cstt.133,dit.1295&zx=1650050309480\",\"after\":\"https://www.google.com/gen_204?atyp=csi&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&s=web&t=all&bl=Crt7&wh=947&frtp=625&imn=15&ima=9&imad=9&aftp=947&adh=tv.6&cls=0.00039241465987205755&ime=2&imex=2&imeh=1&imea=0&imeb=0&imel=0&scp=0&fld=1054&net=dl.10000,ect.4g,rtt.100&mem=ujhs.39,tjhs.51,jhsl.4295,dm.8&sto=&sys=hc.8&rt=sct.723,frt.776,aft.935,afti.935,aftqf.1013,prt.939,dcl.1032,xjsls.1199,xjses.1440,xjsee.1544,xjs.1544,ol.2247,lcp.904,fcp.318,wsrt.267,cst.33,dnst.87,rqst.786,rspt.658,sslt.33,rqstt.139,unt.5,cstt.133,dit.1295&zx=1650050309480\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309483},{\"before\":\"https://www.google.com/gen_204?atyp=i&ct=psnt&cad=&nt=reload&ei=A8VZYunUJIuDxc8PqJWbwAE&zx=1650050309485\",\"after\":\"https://www.google.com/gen_204?atyp=i&ct=psnt&cad=&nt=reload&zx=1650050309485\",\"rule\":\"ei\",\"timestamp\":1650050309489},{\"before\":\"https://www.google.com/gen_204?atyp=i&ct=psnt&cad=&nt=reload&zx=1650050309485\",\"after\":\"https://www.google.com/gen_204?atyp=i&ct=psnt&nt=reload&zx=1650050309485\",\"rule\":\"cad\",\"timestamp\":1650050309489},{\"before\":\"https://www.google.com/gen_204?atyp=i&ct=psnt&nt=reload&zx=1650050309485\",\"after\":\"https://www.google.com/gen_204?ct=psnt&nt=reload&zx=1650050309485\",\"rule\":\"atyp\",\"timestamp\":1650050309489},{\"before\":\"https://www.google.com/gen_204?ct=psnt&nt=reload&zx=1650050309485\",\"after\":\"https://www.google.com/gen_204?ct=psnt&nt=reload\",\"rule\":\"zx\",\"timestamp\":1650050309489},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309568},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309574},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309575},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309576},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309577},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309580},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309595},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309595},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309599},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309599},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309600},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309601},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309602},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309604},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309604},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309606},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309607},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309607},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309609},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309610},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309612},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309614},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050309838},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050310248},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050310296},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&pv=0.9208919999570009&me=68:1650050308929,R,1,CFMQAA,934,571,366,22:0,R,1,CC0QAA,932,723,369,127:0,R,1,CCoQAA,934,724,366,48:0,R,1,CCAQAA,934,772,366,77:41,T:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22:0,R,1,CFMQAA,934,571,366,22:0,R,1,CC0QAA,932,723,369,127:0,R,1,CCoQAA,934,724,366,48:0,R,1,CCAQAA,934,772,366,77:1885,e,B&zx=1650050310857\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&pv=0.9208919999570009&me=68:1650050308929,R,1,CFMQAA,934,571,366,22:0,R,1,CC0QAA,932,723,369,127:0,R,1,CCoQAA,934,724,366,48:0,R,1,CCAQAA,934,772,366,77:41,T:0,R,1,8,24,36,92,33:0,R,1,CAIQAw,238,85,77,44:0,R,1,CAIQBA,317,85,86,44:0,R,1,CAIQBQ,405,85,79,44:0,R,1,CAIQBg,486,85,78,44:0,R,1,CAIQNw,180,182,652,2176:0,R,1,CBAQAA,180,182,600,415:0,R,1,CBEQAA,180,182,600,99:0,R,1,CAMQAA,180,641,652,370:0,R,1,CAgQAA,180,682,652,276:0,R,1,CAYQAA,180,683,326,143:0,R,1,CAcQAA,507,683,326,143:0,R,1,CAUQAA,180,827,326,143:0,R,1,CAQQAA,507,827,326,143:0,R,1,CAEQAA,932,176,369,2622:0,R,1,CDoQAA,933,182,368,511:0,R,1,CEYQAA,934,183,366,90:0,R,1,CD0QAA,934,195,366,66:0,R,1,CD0QAQ,1245,195,40,40:0,R,1,CDoQAw,934,287,366,306:0,R,1,CD4QAA,934,287,366,306:0,R,1,CFUQAA,934,287,366,306:0,R,1,CFQQAA,934,287,366,306:0,R,1,CFEQAA,934,287,366,155:0,R,1,CFEQAQ,949,287,336,155:0,R,1,CFIQAA,934,455,366,22:0,R,1,CE8QAA,934,484,366,22:0,R,1,CFAQAA,934,513,366,22:0,R,1,CE4QAA,934,542,366,22:0,R,1,CFMQAA,934,571,366,22:0,R,1,CC0QAA,932,723,369,127:0,R,1,CCoQAA,934,724,366,48:0,R,1,CCAQAA,934,772,366,77:1885,e,B&zx=1650050310857\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050310863},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&im=M&pv=0.9208919999570009&me=107:1650050310858,V,0,0,0,0:3024,e,U&zx=1650050313882\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&im=M&pv=0.9208919999570009&me=107:1650050310858,V,0,0,0,0:3024,e,U&zx=1650050313882\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050313895},{\"before\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&im=M&pv=0.9208919999570009&me=109:1650050313892,V,0,0,1920,947:1573,e,H&zx=1650050315474\",\"after\":\"https://www.google.com/gen_204?atyp=i&r=1&ei=A8VZYunUJIuDxc8PqJWbwAE&ct=slh&v=t1&im=M&pv=0.9208919999570009&me=109:1650050313892,V,0,0,1920,947:1573,e,H&zx=1650050315474\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050315493},{\"before\":\"https://play.google.com/log?hasfast=true&auth=SAPISIDHASH%2010450be9a67ffc44624d5666fb88a35c321b94f7&authuser=0&format=json\",\"after\":\"https://play.google.com/log?hasfast=true&auth=SAPISIDHASH%2010450be9a67ffc44624d5666fb88a35c321b94f7&authuser=0&format=json\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050339361},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050343322},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050398030},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050403541},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050417376},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050417379},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050418097},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050421768},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050421845},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650050424416},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051274209},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051274219},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051277469},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051277514},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051277515},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051277981},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051283791},{\"before\":\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1473193330168238\",\"after\":\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\",\"rule\":\".*\",\"timestamp\":1650051463166},{\"before\":\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1473193330168238\",\"after\":\"https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\",\"rule\":\".*\",\"timestamp\":1650051478304},{\"before\":\"https://sentry.io/api/270058/envelope/?sentry_key=6182e7a7bb2d4d51836d6b4d06ac0385&sentry_version=7\",\"after\":\"https://sentry.io/api/270058/envelope/?sentry_key=6182e7a7bb2d4d51836d6b4d06ac0385&sentry_version=7\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051657314},{\"before\":\"https://www.imfernsehen.de/z/z.inc.php\",\"after\":\"https://www.imfernsehen.de/z/z.inc.php\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051872807},{\"before\":\"https://www.imfernsehen.de/z/z.inc.php\",\"after\":\"https://www.imfernsehen.de/z/z.inc.php\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051884037},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051911918},{\"before\":\"https://analytics.plex.tv/collect/event\",\"after\":\"https://analytics.plex.tv/collect/event\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650051911920},{\"before\":\"https://twitter.com/i/jot\",\"after\":\"https://twitter.com/i/jot\",\"rule\":\"Diese Hyperlink-Auditing-Anfrage wurde blockiert\",\"timestamp\":1650052092820}]}","statisticsStatus":true,"badged_color":"#FFA500","hashURL":"https://rules2.clearurls.xyz/rules.minify.hash","ruleURL":"https://rules2.clearurls.xyz/data.minify.json","contextMenuEnabled":false,"historyListenerEnabled":true,"localHostsSkipping":true,"referralMarketing":false,"logLimit":100,"domainBlocking":false,"pingBlocking":true,"eTagFiltering":false,"watchDogErrorCount":0,"types":"main_frame,sub_frame,stylesheet,script,image,font,object,xmlhttprequest,ping,csp_report,media,websocket,other","pingRequestTypes":["ping"]} \ No newline at end of file diff --git a/Context Menu Search/search_options_2021.03.28.json b/Context Menu Search/search_options_2021.03.28.json new file mode 100644 index 0000000..a1ed115 --- /dev/null +++ b/Context Menu Search/search_options_2021.03.28.json @@ -0,0 +1 @@ +[["-1","MyAnimeList","https://myanimelist.net/anime.php?q=TESTSEARCH",true],["-1","Yandex","https://yandex.com/search/?text=TESTSEARCH",true],["-1","Anime-Loads","https://www.anime-loads.org/search?q=TESTSEARCH",true],["-1","NOX.tv","https://nox.tv/Search?q=TESTSEARCH",true],["-1","DDL-Music","https://ddl-music.to/?search=TESTSEARCH",true],["-1","DDL-Warez","https://ddl-warez.to/?search=TESTSEARCH",true],["-1","Plex","https://app.plex.tv/desktop#!/search?query=TESTSEARCH",true],["-1","AniDB","https://anidb.net/search/anime/?adb.search=TESTSEARCH&do.search=1",true],["-1","TheTVDB","https://www.thetvdb.com/search?query=TESTSEARCH",true],["-1","MikuDB","http://mikudb.moe/?s=TESTSEARCH",true],["-1","Nyaa.si","https://nyaa.si/?f=0&c=0_0&q=TESTSEARCH",true],["-1","Nyaa.si Hentai","https://sukebei.nyaa.si/?f=0&c=0_0&q=TESTSEARCH",true],["-1","HentaiSun","https://hentaisun.com/Media/Search?term=TESTSEARCH",true],["-1","SakuraCircle","https://sakuracircle.animeholics.org/?s=TESTSEARCH",true],["-1","Amazon (DE)","https://smile.amazon.de/s?k=TESTSEARCH",true],["-1","Amazon (JPN)","https://www.amazon.co.jp/s?k=TESTSEARCH",true],["-1","idealo.de","https://www.idealo.de/preisvergleich/MainSearchProductCategory.html?q=TESTSEARCH",true],["-1","eBay","https://www.ebay.de/sch/i.html?_nkw=TESTSEARCH&_sacat=0",true],["-1","DHL","https://www.dhl.de/de/privatkunden.html?piececode=TESTSEARCH",true],["-1","Parcelsapp","http://parcelsapp.com/de/tracking/TESTSEARCH",true],["-1","Epic Games","https://www.epicgames.com/store/de/browse?pageSize=30&q=TESTSEARCH&sortBy=relevance&sortDir=DESC",true],["-1","itch.io","https://itch.io/search?q=TESTSEARCH",true],["-1","Steam Shop","https://store.steampowered.com/search/?term=TESTSEARCH",true],["-1","Steam-Key","https://store.steampowered.com/account/registerkey?key=TESTSEARCH",true],["-1","WiiDB-Wiki","https://wiki.wiidatabase.de/index.php?title=Spezial%3ASuche&search=TESTSEARCH&go=Seite",true],["-1","Figuya","https://figuya.com/de/produkte?q%5Bquery%5D=TESTSEARCH",true],["-1","FromJapan","https://www.fromjapan.co.jp/en/auction/yahoo/input/TESTSEARCH",true],["-1","Google","https://www.google.com/search?q=TESTSEARCH",true],["-1","Google Übersetzer","https://translate.google.de/#view=home&op=translate&sl=auto&tl=de&text=TESTSEARCH",true],["-1","Wikipedia","https://de.wikipedia.org/wiki/Special:Search?ns0=1&search=TESTSEARCH",true],["-1","IMDB","https://www.imdb.com/find?s=all&q=TESTSEARCH",true]] \ No newline at end of file diff --git a/Context Menu Search/search_options_2022.04.15.json b/Context Menu Search/search_options_2022.04.15.json new file mode 100644 index 0000000..124ff94 --- /dev/null +++ b/Context Menu Search/search_options_2022.04.15.json @@ -0,0 +1 @@ +[["-1","MyAnimeList","https://myanimelist.net/anime.php?q=TESTSEARCH",true],["-1","Yandex","https://yandex.com/search/?text=TESTSEARCH",true],["-1","Anime-Loads","https://www.anime-loads.org/search?q=TESTSEARCH",true],["-1","NOX.tv","https://nox.tv/Search?q=TESTSEARCH",true],["-1","Plex","https://app.plex.tv/desktop#!/search?query=TESTSEARCH",true],["-1","AniDB","https://anidb.net/search/anime/?adb.search=TESTSEARCH&do.search=1",true],["-1","TheTVDB","https://www.thetvdb.com/search?query=TESTSEARCH",true],["-1","TheMovieDB","https://www.themoviedb.org/search?language=de&query=TESTSEARCH",true],["-1","MikuDB","http://mikudb.moe/?s=TESTSEARCH",true],["-1","Nyaa.si","https://nyaa.si/?f=0&c=0_0&q=TESTSEARCH",true],["-1","Nyaa.si Hentai","https://sukebei.nyaa.si/?f=0&c=0_0&q=TESTSEARCH",true],["-1","HentaiSun","https://hentaisun.com/Media/Search?term=TESTSEARCH",true],["-1","SakuraCircle","https://sakuracircle.animeholics.org/?s=TESTSEARCH",true],["-1","Amazon (DE)","https://smile.amazon.de/s?k=TESTSEARCH",true],["-1","Amazon (JPN)","https://www.amazon.co.jp/s?k=TESTSEARCH",true],["-1","idealo.de","https://www.idealo.de/preisvergleich/MainSearchProductCategory.html?q=TESTSEARCH",true],["-1","eBay","https://www.ebay.de/sch/i.html?_nkw=TESTSEARCH&_sacat=0",true],["-1","DHL","https://www.dhl.de/de/privatkunden.html?piececode=TESTSEARCH",true],["-1","Parcelsapp","http://parcelsapp.com/de/tracking/TESTSEARCH",true],["-1","Epic Games","https://www.epicgames.com/store/de/browse?pageSize=30&q=TESTSEARCH&sortBy=relevance&sortDir=DESC",true],["-1","itch.io","https://itch.io/search?q=TESTSEARCH",true],["-1","Steam Shop","https://store.steampowered.com/search/?term=TESTSEARCH",true],["-1","Steam-Key","https://store.steampowered.com/account/registerkey?key=TESTSEARCH",true],["-1","GOG-Key","https://www.gog.com/redeem/TESTSEARCH",true],["-1","WiiDB-Wiki","https://wiki.wiidatabase.de/index.php?title=Spezial%3ASuche&search=TESTSEARCH&go=Seite",true],["-1","Figuya","https://figuya.com/de/produkte?q%5Bquery%5D=TESTSEARCH",true],["-1","FromJapan","https://www.fromjapan.co.jp/en/auction/yahoo/input/TESTSEARCH",true],["-1","Google","https://www.google.com/search?q=TESTSEARCH",true],["-1","Google Übersetzer","https://translate.google.de/#view=home&op=translate&sl=auto&tl=de&text=TESTSEARCH",true],["-1","Wikipedia","https://de.wikipedia.org/wiki/Special:Search?ns0=1&search=TESTSEARCH",true],["-1","IMDB","https://www.imdb.com/find?s=all&q=TESTSEARCH",true]] \ No newline at end of file diff --git a/Cookie AutoDelete/CAD_CoreSettings_2020-08-12_22.25.41.json b/Cookie AutoDelete/CAD_CoreSettings_2020-08-12_22.25.41.json new file mode 100644 index 0000000..815a53c --- /dev/null +++ b/Cookie AutoDelete/CAD_CoreSettings_2020-08-12_22.25.41.json @@ -0,0 +1,84 @@ +{ + "settings": [ + { + "name": "activeMode", + "value": true + }, + { + "name": "delayBeforeClean", + "value": 15 + }, + { + "name": "statLogging", + "value": true + }, + { + "name": "showNumOfCookiesInIcon", + "value": true + }, + { + "name": "showNotificationAfterCleanup", + "value": false + }, + { + "name": "cleanCookiesFromOpenTabsOnStartup", + "value": false + }, + { + "name": "contextualIdentities", + "value": false + }, + { + "name": "localstorageCleanup", + "value": false + }, + { + "name": "notificationOnScreen", + "value": 3 + }, + { + "name": "domainChangeCleanup", + "value": false + }, + { + "name": "greyCleanLocalstorage", + "value": false + }, + { + "name": "whiteCleanLocalstorage", + "value": false + }, + { + "name": "enableNewVersionPopup", + "value": false + }, + { + "name": "debugMode", + "value": false + }, + { + "name": "enableGreyListCleanup", + "value": true + }, + { + "name": "keepDefaultIcon", + "value": false + }, + { + "name": "sizePopup", + "value": 16 + }, + { + "name": "sizeSetting", + "value": 16 + }, + { + "name": "contextMenus", + "value": false + }, + { + "name": "discardedCleanup", + "value": false + } + ] +} \ No newline at end of file diff --git a/Cookie AutoDelete/CAD_CoreSettings_2021-03-15_22.24.56.json b/Cookie AutoDelete/CAD_CoreSettings_2021-03-15_22.24.56.json new file mode 100644 index 0000000..cb5787b --- /dev/null +++ b/Cookie AutoDelete/CAD_CoreSettings_2021-03-15_22.24.56.json @@ -0,0 +1,119 @@ +{ + "settings": [ + { + "name": "activeMode", + "value": true + }, + { + "name": "delayBeforeClean", + "value": 15 + }, + { + "name": "statLogging", + "value": true + }, + { + "name": "showNumOfCookiesInIcon", + "value": true + }, + { + "name": "showNotificationAfterCleanup", + "value": false + }, + { + "name": "cleanCookiesFromOpenTabsOnStartup", + "value": false + }, + { + "name": "contextualIdentities", + "value": false + }, + { + "id": "DEPRECATED - use localStorageCleanup", + "name": "localstorageCleanup", + "value": false + }, + { + "name": "notificationOnScreen", + "value": 3 + }, + { + "name": "domainChangeCleanup", + "value": false + }, + { + "id": "DEPRECATED - use default expressions", + "name": "greyCleanLocalstorage", + "value": false + }, + { + "id": "DEPRECATED - use default expressions", + "name": "whiteCleanLocalstorage", + "value": false + }, + { + "name": "enableNewVersionPopup", + "value": false + }, + { + "name": "debugMode", + "value": false + }, + { + "name": "enableGreyListCleanup", + "value": true + }, + { + "name": "keepDefaultIcon", + "value": false + }, + { + "name": "sizePopup", + "value": 16 + }, + { + "name": "sizeSetting", + "value": 16 + }, + { + "name": "contextMenus", + "value": false + }, + { + "name": "discardedCleanup", + "value": false + }, + { + "name": "cacheCleanup", + "value": false + }, + { + "name": "cleanExpiredCookies", + "value": false + }, + { + "name": "indexedDBCleanup", + "value": false + }, + { + "name": "localStorageCleanup", + "value": false + }, + { + "name": "manualNotifications", + "value": true + }, + { + "name": "pluginDataCleanup", + "value": false + }, + { + "name": "serviceWorkersCleanup", + "value": false + }, + { + "name": "contextualIdentitiesAutoRemove", + "value": true + } + ] +} \ No newline at end of file diff --git a/Cookie AutoDelete/CAD_CoreSettings_2021-03-28_21.43.14.json b/Cookie AutoDelete/CAD_CoreSettings_2021-03-28_21.43.14.json new file mode 100644 index 0000000..cb5787b --- /dev/null +++ b/Cookie AutoDelete/CAD_CoreSettings_2021-03-28_21.43.14.json @@ -0,0 +1,119 @@ +{ + "settings": [ + { + "name": "activeMode", + "value": true + }, + { + "name": "delayBeforeClean", + "value": 15 + }, + { + "name": "statLogging", + "value": true + }, + { + "name": "showNumOfCookiesInIcon", + "value": true + }, + { + "name": "showNotificationAfterCleanup", + "value": false + }, + { + "name": "cleanCookiesFromOpenTabsOnStartup", + "value": false + }, + { + "name": "contextualIdentities", + "value": false + }, + { + "id": "DEPRECATED - use localStorageCleanup", + "name": "localstorageCleanup", + "value": false + }, + { + "name": "notificationOnScreen", + "value": 3 + }, + { + "name": "domainChangeCleanup", + "value": false + }, + { + "id": "DEPRECATED - use default expressions", + "name": "greyCleanLocalstorage", + "value": false + }, + { + "id": "DEPRECATED - use default expressions", + "name": "whiteCleanLocalstorage", + "value": false + }, + { + "name": "enableNewVersionPopup", + "value": false + }, + { + "name": "debugMode", + "value": false + }, + { + "name": "enableGreyListCleanup", + "value": true + }, + { + "name": "keepDefaultIcon", + "value": false + }, + { + "name": "sizePopup", + "value": 16 + }, + { + "name": "sizeSetting", + "value": 16 + }, + { + "name": "contextMenus", + "value": false + }, + { + "name": "discardedCleanup", + "value": false + }, + { + "name": "cacheCleanup", + "value": false + }, + { + "name": "cleanExpiredCookies", + "value": false + }, + { + "name": "indexedDBCleanup", + "value": false + }, + { + "name": "localStorageCleanup", + "value": false + }, + { + "name": "manualNotifications", + "value": true + }, + { + "name": "pluginDataCleanup", + "value": false + }, + { + "name": "serviceWorkersCleanup", + "value": false + }, + { + "name": "contextualIdentitiesAutoRemove", + "value": true + } + ] +} \ No newline at end of file diff --git a/Cookie AutoDelete/CAD_CoreSettings_2022-04-15_21.56.52.json b/Cookie AutoDelete/CAD_CoreSettings_2022-04-15_21.56.52.json new file mode 100644 index 0000000..cb5787b --- /dev/null +++ b/Cookie AutoDelete/CAD_CoreSettings_2022-04-15_21.56.52.json @@ -0,0 +1,119 @@ +{ + "settings": [ + { + "name": "activeMode", + "value": true + }, + { + "name": "delayBeforeClean", + "value": 15 + }, + { + "name": "statLogging", + "value": true + }, + { + "name": "showNumOfCookiesInIcon", + "value": true + }, + { + "name": "showNotificationAfterCleanup", + "value": false + }, + { + "name": "cleanCookiesFromOpenTabsOnStartup", + "value": false + }, + { + "name": "contextualIdentities", + "value": false + }, + { + "id": "DEPRECATED - use localStorageCleanup", + "name": "localstorageCleanup", + "value": false + }, + { + "name": "notificationOnScreen", + "value": 3 + }, + { + "name": "domainChangeCleanup", + "value": false + }, + { + "id": "DEPRECATED - use default expressions", + "name": "greyCleanLocalstorage", + "value": false + }, + { + "id": "DEPRECATED - use default expressions", + "name": "whiteCleanLocalstorage", + "value": false + }, + { + "name": "enableNewVersionPopup", + "value": false + }, + { + "name": "debugMode", + "value": false + }, + { + "name": "enableGreyListCleanup", + "value": true + }, + { + "name": "keepDefaultIcon", + "value": false + }, + { + "name": "sizePopup", + "value": 16 + }, + { + "name": "sizeSetting", + "value": 16 + }, + { + "name": "contextMenus", + "value": false + }, + { + "name": "discardedCleanup", + "value": false + }, + { + "name": "cacheCleanup", + "value": false + }, + { + "name": "cleanExpiredCookies", + "value": false + }, + { + "name": "indexedDBCleanup", + "value": false + }, + { + "name": "localStorageCleanup", + "value": false + }, + { + "name": "manualNotifications", + "value": true + }, + { + "name": "pluginDataCleanup", + "value": false + }, + { + "name": "serviceWorkersCleanup", + "value": false + }, + { + "name": "contextualIdentitiesAutoRemove", + "value": true + } + ] +} \ No newline at end of file diff --git a/Cookie AutoDelete/CAD_Expressions_2020-02-01_10.56.11.json b/Cookie AutoDelete/CAD_Expressions_2020-02-01_10.56.11.json new file mode 100644 index 0000000..075eab3 --- /dev/null +++ b/Cookie AutoDelete/CAD_Expressions_2020-02-01_10.56.11.json @@ -0,0 +1,319 @@ +{ + "default": [ + { + "expression": "*.akamaru.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ADuVtS_0U" + }, + { + "expression": "*.amazon.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ELSNxf8Qw" + }, + { + "expression": "*.centzilius.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "yGSOdnFFP" + }, + { + "expression": "*.ebay.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "GaeYCVbkB" + }, + { + "expression": "*.homebrew.cloud", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "UpE_PQAaG" + }, + { + "expression": "*.leutecraft.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "wdz6LrgeC" + }, + { + "expression": "*.live.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "F1zy0zAB_" + }, + { + "expression": "*.nintendo.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "irucs_hz-" + }, + { + "expression": "*.nintendo.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "98J_7wkOR" + }, + { + "expression": "*.playstation.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ZIFvOI0BX" + }, + { + "expression": "*.plex.tv", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "aWlqjELg9" + }, + { + "expression": "*.ponypaste.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "hGTBaSfsH" + }, + { + "expression": "*.ponywave.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "i3QSdXmoq" + }, + { + "expression": "*.riko.moe", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "GUUsseyMs" + }, + { + "expression": "*.sonyentertainmentnetwork.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "dwBZYzeSI" + }, + { + "expression": "*.steampowered.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ZmNheJuPI" + }, + { + "expression": "*.telegram.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "iWyzzc0PK" + }, + { + "expression": "*.wiidatabase.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ac9QANgSV" + }, + { + "expression": "*.woleutesind.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "WMqGurAVd" + }, + { + "expression": "*.yagyuu.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "aIxG0bWUq" + }, + { + "expression": "*.yagyuu.moe", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "DTTF05iHI" + }, + { + "expression": "accounts.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "MxKG8fjmh" + }, + { + "expression": "amazon.co.jp", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "BHMXY39m2" + }, + { + "expression": "anidb.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "SlpNMWdhz" + }, + { + "expression": "anime-loads.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "hc3jZZo52" + }, + { + "expression": "docs.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "47Y2FqV5-" + }, + { + "expression": "drive.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "STZ1tioYk" + }, + { + "expression": "github.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "hRu021uen" + }, + { + "expression": "google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "BUX_4kr-w" + }, + { + "expression": "google.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "awGhDfrtw" + }, + { + "expression": "hakase.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "w_uKB3oH6" + }, + { + "expression": "icloud.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "3pbvtAR2P" + }, + { + "expression": "my.jdownloader.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "V8MI3XgMJ" + }, + { + "expression": "myaccount.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "mll_fXtA6" + }, + { + "expression": "myanimelist.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "mdIjAeHWk" + }, + { + "expression": "nibutani.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "-I5NSgejl" + }, + { + "expression": "ogs.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "TbSskYwNT" + }, + { + "expression": "outlook.live.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ucVR5YSj4" + }, + { + "expression": "shana.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "7Af9Wzs_g" + }, + { + "expression": "steamcommunity.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "Kmpmr85oy" + }, + { + "expression": "sumomo.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ejt8mX6g_" + }, + { + "expression": "twitch.amazon.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "1BYeBlMAb" + }, + { + "expression": "twitter.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "cvsJMWsCZ" + }, + { + "expression": "yougov.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "J3oWnZDTS" + }, + { + "expression": "youtube.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "h813n9J5E" + } + ] +} \ No newline at end of file diff --git a/Cookie AutoDelete/CAD_Expressions_2021-03-15_22.25.02.json b/Cookie AutoDelete/CAD_Expressions_2021-03-15_22.25.02.json new file mode 100644 index 0000000..541d0be --- /dev/null +++ b/Cookie AutoDelete/CAD_Expressions_2021-03-15_22.25.02.json @@ -0,0 +1,807 @@ +{ + "default": [ + { + "expression": "*.akamaru.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "IF-hwlShO", + "cleanAllCookies": true + }, + { + "expression": "*.amazon.co.jp", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "4nopqREA", + "cleanAllCookies": true + }, + { + "expression": "*.amazon.co.uk", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "PN5h3Utjz" + }, + { + "expression": "*.amazon.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "Qo2yKibN", + "cleanAllCookies": true + }, + { + "expression": "*.amazon.de", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "7aFQvmL5Y" + }, + { + "expression": "*.bandcamp.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "hjghhQ7WC", + "cleanAllCookies": false + }, + { + "expression": "*.ebay.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "dp1", + "JSESSIONID", + "shs", + "s" + ], + "id": "ocp2mPAnR", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "*.epicgames.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "siq1wvgY6", + "cleanAllCookies": true + }, + { + "expression": "*.filmfans.org", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "settings_ok2", + "ph", + "notify_id" + ], + "id": "icNNLzmDm", + "cleanAllCookies": false + }, + { + "expression": "*.fromjapan.co.jp", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "login_cookie", + "crcd", + "tiger_session", + "uid_cookie", + "history", + "virgin_access_request_uri" + ], + "id": "s2xr2vjRO", + "cleanAllCookies": false + }, + { + "expression": "*.gog.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "galaxy-login-al", + "galaxy-login-s", + "gog-al" + ], + "id": "zSXCdXOkO", + "cleanAllCookies": false + }, + { + "expression": "*.homebrew.cloud", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "UpE_PQAaG" + }, + { + "expression": "*.icloud.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "g30Z1goFc", + "cleanAllCookies": true + }, + { + "expression": "*.itch.io", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "itchio_token", + "itchio" + ], + "id": "BWfFXjrhC", + "cleanAllCookies": false + }, + { + "expression": "*.leutecraft.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "wdz6LrgeC" + }, + { + "expression": "*.live.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "RPSSecAuth", + "ShCLSessionID" + ], + "id": "d2Azl1OQ", + "cleanAllCookies": true + }, + { + "expression": "*.makerbot.com", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "authorization.sid", + "sso_user" + ], + "id": "5ZTVMDSD-", + "cleanAllCookies": false + }, + { + "expression": "*.mantis-x.net", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "surbma-yes-no-popup" + ], + "id": "GPJKAJrFT", + "cleanAllCookies": false + }, + { + "expression": "*.mihoyo.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "login_ticket", + "account_id" + ], + "id": "Cabyh8L_A", + "cleanAllCookies": false + }, + { + "expression": "*.myfigurecollection.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "tb_session_key", + "tb_session_id", + "TBv4_Safe" + ], + "id": "UZLW5r02", + "cleanAllCookies": false + }, + { + "expression": "*.nintendo.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID", + "cp_session", + "NASID", + "NATID" + ], + "id": "e9MmqT06", + "cleanAllCookies": false + }, + { + "expression": "*.nintendo.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "userIsLoggedIn", + "tCookieUser" + ], + "id": "Ccj0RPtF", + "cleanAllCookies": false + }, + { + "expression": "*.ok.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "loggedIn" + ], + "id": "_bhpEGnw", + "cleanAllCookies": false + }, + { + "expression": "*.playstation.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID" + ], + "id": "7MpdVq3Nk", + "cleanAllCookies": true + }, + { + "expression": "*.plex.tv", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "plex_tv_auth" + ], + "id": "zyou268y", + "cleanAllCookies": false + }, + { + "expression": "*.ponypaste.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "lG0PdhJY", + "cleanAllCookies": true + }, + { + "expression": "*.ponywave.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ND8NeN2en", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "*.retroachievements.org", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "RAPrefs_CSS", + "RA_Cookie", + "RA_User" + ], + "id": "YGxp8HGDl", + "cleanAllCookies": false + }, + { + "expression": "*.reviewmeta.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "rm-first-time-modal-welcome" + ], + "id": "jRaX3__5Q", + "cleanAllCookies": false + }, + { + "expression": "*.riko.moe", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "pPF0pijS", + "cleanAllCookies": true + }, + { + "expression": "*.sankakucomplex.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "login", + "pass_hash", + "theme" + ], + "id": "ZawihqLCg", + "cleanAllCookies": false + }, + { + "expression": "*.sellmyretro.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "sessionLogin", + "sessionId" + ], + "id": "--M-3_5tL", + "cleanAllCookies": false + }, + { + "expression": "*.serienfans.org", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "settings_ok", + "notify_id", + "default_quality", + "ph" + ], + "id": "LRM9Z9hLo", + "cleanAllCookies": false + }, + { + "expression": "*.sony.com", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "pGbGpn41I" + }, + { + "expression": "*.sonyentertainmentnetwork.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID" + ], + "id": "jwVYTS2UT", + "cleanAllCookies": true + }, + { + "expression": "*.steampowered.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "steamRememberLogin", + "steamMachineAuth76561198084563614", + "steamLoginSecure" + ], + "id": "vPukIMJ9", + "cleanAllCookies": false + }, + { + "expression": "*.tagesschau.de", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "darkmode_content", + "twitter_content", + "twentythreedegrees_content", + "optOutTracking_content", + "mapbox_content", + "datawrapper_content" + ], + "id": "ZV5llgl9P", + "cleanAllCookies": false + }, + { + "expression": "*.telegram.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "BehBGRAV", + "cleanAllCookies": true + }, + { + "expression": "*.thingiverse.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "token" + ], + "id": "JuWlGhtUw", + "cleanAllCookies": false + }, + { + "expression": "*.uptimerobot.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "productSource" + ], + "id": "E1KN6630M", + "cleanAllCookies": false + }, + { + "expression": "*.woleutesind.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "4or_BF5T", + "cleanAllCookies": true + }, + { + "expression": "*.yagyuu.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "JK8JlwMX", + "cleanAllCookies": true + }, + { + "expression": "*.yagyuu.moe", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "bVKYUCHQ", + "cleanAllCookies": true + }, + { + "expression": "192.168.2.*", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "UIjqsCsr", + "cleanAllCookies": true + }, + { + "expression": "accounts.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "GAPS" + ], + "id": "B3e6QIKXN", + "cleanAllCookies": true + }, + { + "expression": "anidb.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "adbautopass", + "adbautouser", + "adbsess", + "adbsessuser" + ], + "id": "A-vaud3JM", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "anime-loads.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "safe_search", + "identity", + "remember_code" + ], + "id": "8P4RuzOM", + "cleanAllCookies": false + }, + { + "expression": "beamng.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "xf_user" + ], + "id": "bGjNdQUt", + "cleanAllCookies": false + }, + { + "expression": "bethesda.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "bnet-remember-username", + "bnet-session", + "bnet-username" + ], + "id": "AFYjFeYo", + "cleanAllCookies": false + }, + { + "expression": "boerse.to", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "bto_session", + "bto_user" + ], + "id": "JwSMmre6C", + "cleanAllCookies": false + }, + { + "expression": "ddl-warez.to", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "darkmode" + ], + "id": "gyaTCSPY-", + "cleanAllCookies": false + }, + { + "expression": "debriditalia.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth", + "user" + ], + "id": "WW5c4lsh", + "cleanAllCookies": false + }, + { + "expression": "dhl.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "eToken" + ], + "id": "FtdQ1ruq", + "cleanAllCookies": false + }, + { + "expression": "disqus.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "disqusauths", + "disqusauth" + ], + "id": "RVH9M_H75", + "cleanAllCookies": true + }, + { + "expression": "figuya.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "remember_user_token", + "chakra-ui-color-mode" + ], + "id": "TJUhYwbzw", + "cleanAllCookies": false, + "cleanSiteData": [] + }, + { + "expression": "forum.wii-homebrew.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "wcf_password", + "wcf_userID" + ], + "id": "6LH8J5o4", + "cleanAllCookies": false + }, + { + "expression": "github.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "user_session", + "logged_in", + "cookie-preferences" + ], + "id": "X5cyoWg4C", + "cleanAllCookies": false, + "cleanSiteData": [] + }, + { + "expression": "google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "98a-9uDs", + "cleanAllCookies": true + }, + { + "expression": "google.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "SSID", + "SID", + "SEARCH_SAMESITE", + "SAPISID", + "NID", + "HSID", + "__Secure-SSID", + "__Secure-HSID", + "__Secure-APISID", + "__Secure-3PAPISID", + "__Secure-3PSID", + "APISID", + "1P_JAR", + "CONSENT" + ], + "id": "WsUhjjES", + "cleanAllCookies": true + }, + { + "expression": "hakase.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "GHz0gMrdM", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "humblebundle.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "_simpleauth_sess", + "hbreqsec", + "csrf_cookie" + ], + "id": "e2jPcVhV", + "cleanAllCookies": false + }, + { + "expression": "indiegala.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth", + "xf_user" + ], + "id": "ATz-o4P4", + "cleanAllCookies": false + }, + { + "expression": "my.jdownloader.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "i18next" + ], + "id": "lto5AKE8", + "cleanAllCookies": false + }, + { + "expression": "myaccount.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "Pg1DDrgt", + "cleanAllCookies": true + }, + { + "expression": "myanimelist.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "MALSESSIONID", + "is_logged_in", + "MALHLOGSESSID" + ], + "id": "rKIiMjlC", + "cleanAllCookies": false + }, + { + "expression": "nibutani.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "-I5NSgejl" + }, + { + "expression": "ogs.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "SEiUNpEA", + "cleanAllCookies": true + }, + { + "expression": "payback.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "UserID1", + "pbLogin" + ], + "id": "14A-f-kBD", + "cleanAllCookies": false + }, + { + "expression": "shana.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "sGx3IEbf", + "cleanAllCookies": true + }, + { + "expression": "startgame.world", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "wordpress_logged_in_c6053de40b8fb5db5be6c79b3bd75790" + ], + "id": "25WA-d8QO", + "cleanAllCookies": true + }, + { + "expression": "steamcommunity.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "browserid", + "sessionid", + "steamLoginSecure", + "steamMachineAuth76561198084563614", + "steamRememberLogin" + ], + "id": "SXs-gfFN", + "cleanAllCookies": false + }, + { + "expression": "sumomo.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ejt8mX6g_" + }, + { + "expression": "twitter.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth_multi", + "auth_token", + "eu_cn" + ], + "id": "NRw8DwYo", + "cleanAllCookies": false + }, + { + "expression": "wunschliste.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth", + "user_id" + ], + "id": "i5AcrLLU", + "cleanAllCookies": false + }, + { + "expression": "yougov.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "csrftoken", + "sessionid", + "OptanonAlertBoxClosed" + ], + "id": "J-5vwWgAP", + "cleanAllCookies": false + }, + { + "expression": "youtube.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "LOGIN_INFO", + "PREF", + "wide", + "YSC" + ], + "id": "UnxBANv6P", + "cleanAllCookies": false + } + ] +} \ No newline at end of file diff --git a/Cookie AutoDelete/CAD_Expressions_2021-03-28_21.43.37.json b/Cookie AutoDelete/CAD_Expressions_2021-03-28_21.43.37.json new file mode 100644 index 0000000..92406c1 --- /dev/null +++ b/Cookie AutoDelete/CAD_Expressions_2021-03-28_21.43.37.json @@ -0,0 +1,816 @@ +{ + "default": [ + { + "expression": "*.akamaru.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "IF-hwlShO", + "cleanAllCookies": true + }, + { + "expression": "*.amazon.co.jp", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "4nopqREA", + "cleanAllCookies": true + }, + { + "expression": "*.amazon.co.uk", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "PN5h3Utjz" + }, + { + "expression": "*.amazon.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "Qo2yKibN", + "cleanAllCookies": true + }, + { + "expression": "*.amazon.de", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "7aFQvmL5Y" + }, + { + "expression": "*.bandcamp.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "hjghhQ7WC", + "cleanAllCookies": false + }, + { + "expression": "*.ebay.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "dp1", + "JSESSIONID", + "shs", + "s" + ], + "id": "ocp2mPAnR", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "*.epicgames.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "siq1wvgY6", + "cleanAllCookies": true + }, + { + "expression": "*.filmfans.org", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "settings_ok2", + "ph", + "notify_id" + ], + "id": "icNNLzmDm", + "cleanAllCookies": false + }, + { + "expression": "*.fromjapan.co.jp", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "login_cookie", + "crcd", + "tiger_session", + "uid_cookie", + "history", + "virgin_access_request_uri" + ], + "id": "s2xr2vjRO", + "cleanAllCookies": false + }, + { + "expression": "*.gog.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "galaxy-login-al", + "galaxy-login-s", + "gog-al" + ], + "id": "zSXCdXOkO", + "cleanAllCookies": false + }, + { + "expression": "*.homebrew.cloud", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "UpE_PQAaG" + }, + { + "expression": "*.icloud.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "g30Z1goFc", + "cleanAllCookies": true + }, + { + "expression": "*.itch.io", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "itchio_token", + "itchio" + ], + "id": "BWfFXjrhC", + "cleanAllCookies": false + }, + { + "expression": "*.leutecraft.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "wdz6LrgeC" + }, + { + "expression": "*.live.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "RPSSecAuth", + "ShCLSessionID" + ], + "id": "d2Azl1OQ", + "cleanAllCookies": true + }, + { + "expression": "*.makerbot.com", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "authorization.sid", + "sso_user" + ], + "id": "5ZTVMDSD-", + "cleanAllCookies": false + }, + { + "expression": "*.mantis-x.net", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "surbma-yes-no-popup" + ], + "id": "GPJKAJrFT", + "cleanAllCookies": false + }, + { + "expression": "*.mein-senec.de", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [], + "id": "hVH8GztNm", + "cleanAllCookies": true + }, + { + "expression": "*.mihoyo.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "login_ticket", + "account_id" + ], + "id": "Cabyh8L_A", + "cleanAllCookies": false + }, + { + "expression": "*.myfigurecollection.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "tb_session_key", + "tb_session_id", + "TBv4_Safe" + ], + "id": "UZLW5r02", + "cleanAllCookies": false + }, + { + "expression": "*.nintendo.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID", + "cp_session", + "NASID", + "NATID" + ], + "id": "e9MmqT06", + "cleanAllCookies": false + }, + { + "expression": "*.nintendo.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "userIsLoggedIn", + "tCookieUser" + ], + "id": "Ccj0RPtF", + "cleanAllCookies": false + }, + { + "expression": "*.ok.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "loggedIn" + ], + "id": "_bhpEGnw", + "cleanAllCookies": false + }, + { + "expression": "*.playstation.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID" + ], + "id": "7MpdVq3Nk", + "cleanAllCookies": true + }, + { + "expression": "*.plex.tv", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "plex_tv_auth" + ], + "id": "zyou268y", + "cleanAllCookies": false + }, + { + "expression": "*.ponypaste.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "lG0PdhJY", + "cleanAllCookies": true + }, + { + "expression": "*.ponywave.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ND8NeN2en", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "*.retroachievements.org", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "RAPrefs_CSS", + "RA_Cookie", + "RA_User" + ], + "id": "YGxp8HGDl", + "cleanAllCookies": false + }, + { + "expression": "*.reviewmeta.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "rm-first-time-modal-welcome" + ], + "id": "jRaX3__5Q", + "cleanAllCookies": false + }, + { + "expression": "*.riko.moe", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "pPF0pijS", + "cleanAllCookies": true + }, + { + "expression": "*.sankakucomplex.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "login", + "pass_hash", + "theme" + ], + "id": "ZawihqLCg", + "cleanAllCookies": false + }, + { + "expression": "*.sellmyretro.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "sessionLogin", + "sessionId" + ], + "id": "--M-3_5tL", + "cleanAllCookies": false + }, + { + "expression": "*.serienfans.org", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "settings_ok", + "notify_id", + "default_quality", + "ph" + ], + "id": "LRM9Z9hLo", + "cleanAllCookies": false + }, + { + "expression": "*.sony.com", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "pGbGpn41I" + }, + { + "expression": "*.sonyentertainmentnetwork.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID" + ], + "id": "jwVYTS2UT", + "cleanAllCookies": true + }, + { + "expression": "*.steampowered.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "steamRememberLogin", + "steamMachineAuth76561198084563614", + "steamLoginSecure" + ], + "id": "vPukIMJ9", + "cleanAllCookies": false + }, + { + "expression": "*.tagesschau.de", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "darkmode_content", + "twitter_content", + "twentythreedegrees_content", + "optOutTracking_content", + "mapbox_content", + "datawrapper_content" + ], + "id": "ZV5llgl9P", + "cleanAllCookies": false + }, + { + "expression": "*.telegram.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "BehBGRAV", + "cleanAllCookies": true + }, + { + "expression": "*.thingiverse.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "token" + ], + "id": "JuWlGhtUw", + "cleanAllCookies": false + }, + { + "expression": "*.uptimerobot.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "productSource" + ], + "id": "E1KN6630M", + "cleanAllCookies": false + }, + { + "expression": "*.woleutesind.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "4or_BF5T", + "cleanAllCookies": true + }, + { + "expression": "*.yagyuu.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "JK8JlwMX", + "cleanAllCookies": true + }, + { + "expression": "*.yagyuu.moe", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "bVKYUCHQ", + "cleanAllCookies": true + }, + { + "expression": "192.168.2.*", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "UIjqsCsr", + "cleanAllCookies": true + }, + { + "expression": "accounts.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "GAPS" + ], + "id": "B3e6QIKXN", + "cleanAllCookies": true + }, + { + "expression": "anidb.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "adbautopass", + "adbautouser", + "adbsess", + "adbsessuser" + ], + "id": "A-vaud3JM", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "anime-loads.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "safe_search", + "identity", + "remember_code" + ], + "id": "8P4RuzOM", + "cleanAllCookies": false + }, + { + "expression": "beamng.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "xf_user" + ], + "id": "bGjNdQUt", + "cleanAllCookies": false + }, + { + "expression": "bethesda.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "bnet-remember-username", + "bnet-session", + "bnet-username" + ], + "id": "AFYjFeYo", + "cleanAllCookies": false + }, + { + "expression": "boerse.to", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "bto_session", + "bto_user" + ], + "id": "JwSMmre6C", + "cleanAllCookies": false + }, + { + "expression": "ddl-warez.to", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "darkmode" + ], + "id": "gyaTCSPY-", + "cleanAllCookies": false + }, + { + "expression": "debriditalia.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth", + "user" + ], + "id": "WW5c4lsh", + "cleanAllCookies": false + }, + { + "expression": "dhl.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "eToken" + ], + "id": "FtdQ1ruq", + "cleanAllCookies": false + }, + { + "expression": "disqus.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "disqusauths", + "disqusauth" + ], + "id": "RVH9M_H75", + "cleanAllCookies": true + }, + { + "expression": "figuya.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "remember_user_token", + "chakra-ui-color-mode" + ], + "id": "TJUhYwbzw", + "cleanAllCookies": false, + "cleanSiteData": [] + }, + { + "expression": "forum.wii-homebrew.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "wcf_password", + "wcf_userID" + ], + "id": "6LH8J5o4", + "cleanAllCookies": false + }, + { + "expression": "github.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "user_session", + "logged_in", + "cookie-preferences" + ], + "id": "X5cyoWg4C", + "cleanAllCookies": false, + "cleanSiteData": [] + }, + { + "expression": "google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "98a-9uDs", + "cleanAllCookies": true + }, + { + "expression": "google.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "SSID", + "SID", + "SEARCH_SAMESITE", + "SAPISID", + "NID", + "HSID", + "__Secure-SSID", + "__Secure-HSID", + "__Secure-APISID", + "__Secure-3PAPISID", + "__Secure-3PSID", + "APISID", + "1P_JAR", + "CONSENT" + ], + "id": "WsUhjjES", + "cleanAllCookies": true + }, + { + "expression": "hakase.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "GHz0gMrdM", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "humblebundle.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "_simpleauth_sess", + "hbreqsec", + "csrf_cookie" + ], + "id": "e2jPcVhV", + "cleanAllCookies": false + }, + { + "expression": "indiegala.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth", + "xf_user" + ], + "id": "ATz-o4P4", + "cleanAllCookies": false + }, + { + "expression": "my.jdownloader.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "i18next" + ], + "id": "lto5AKE8", + "cleanAllCookies": false + }, + { + "expression": "myaccount.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "Pg1DDrgt", + "cleanAllCookies": true + }, + { + "expression": "myanimelist.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "MALSESSIONID", + "is_logged_in", + "MALHLOGSESSID" + ], + "id": "rKIiMjlC", + "cleanAllCookies": false + }, + { + "expression": "nibutani.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "-I5NSgejl" + }, + { + "expression": "ogs.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "SEiUNpEA", + "cleanAllCookies": true + }, + { + "expression": "payback.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "UserID1", + "pbLogin" + ], + "id": "14A-f-kBD", + "cleanAllCookies": false + }, + { + "expression": "shana.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "sGx3IEbf", + "cleanAllCookies": true + }, + { + "expression": "startgame.world", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "wordpress_logged_in_c6053de40b8fb5db5be6c79b3bd75790" + ], + "id": "25WA-d8QO", + "cleanAllCookies": true + }, + { + "expression": "steamcommunity.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "browserid", + "sessionid", + "steamLoginSecure", + "steamMachineAuth76561198084563614", + "steamRememberLogin" + ], + "id": "SXs-gfFN", + "cleanAllCookies": false + }, + { + "expression": "sumomo.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ejt8mX6g_" + }, + { + "expression": "twitter.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth_multi", + "auth_token", + "eu_cn" + ], + "id": "NRw8DwYo", + "cleanAllCookies": false + }, + { + "expression": "wunschliste.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth", + "user_id" + ], + "id": "i5AcrLLU", + "cleanAllCookies": false + }, + { + "expression": "yougov.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "csrftoken", + "sessionid", + "OptanonAlertBoxClosed" + ], + "id": "J-5vwWgAP", + "cleanAllCookies": false + }, + { + "expression": "youtube.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "LOGIN_INFO", + "PREF", + "wide", + "YSC" + ], + "id": "UnxBANv6P", + "cleanAllCookies": false + } + ] +} \ No newline at end of file diff --git a/Cookie AutoDelete/CAD_Expressions_2022-04-15_21.57.09.json b/Cookie AutoDelete/CAD_Expressions_2022-04-15_21.57.09.json new file mode 100644 index 0000000..508426a --- /dev/null +++ b/Cookie AutoDelete/CAD_Expressions_2022-04-15_21.57.09.json @@ -0,0 +1,910 @@ +{ + "default": [ + { + "expression": "*.akamaru.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "hkNQwAN3F", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "*.amazon.co.jp", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "4nopqREA", + "cleanAllCookies": true + }, + { + "expression": "*.amazon.co.uk", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "PN5h3Utjz" + }, + { + "expression": "*.amazon.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "Qo2yKibN", + "cleanAllCookies": true + }, + { + "expression": "*.amazon.de", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "7aFQvmL5Y" + }, + { + "expression": "*.archive.org", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "logged-in-sig", + "logged-in-user" + ], + "id": "lkjcRxvuv", + "cleanAllCookies": false + }, + { + "expression": "*.bandcamp.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "hjghhQ7WC", + "cleanAllCookies": false + }, + { + "expression": "*.customercontrolpanel.de", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [], + "id": "nsl24WtCz", + "cleanAllCookies": true + }, + { + "expression": "*.ebay.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "dp1", + "JSESSIONID", + "shs", + "s" + ], + "id": "ocp2mPAnR", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "*.epicgames.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "siq1wvgY6", + "cleanAllCookies": true + }, + { + "expression": "*.filmfans.org", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "settings_ok2", + "ph", + "notify_id" + ], + "id": "icNNLzmDm", + "cleanAllCookies": false + }, + { + "expression": "*.fromjapan.co.jp", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "login_cookie", + "crcd", + "tiger_session", + "uid_cookie", + "history", + "virgin_access_request_uri" + ], + "id": "c4zOsRXmB", + "cleanAllCookies": true + }, + { + "expression": "*.gibmirspiele.de", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [], + "id": "TWRIoia9L", + "cleanAllCookies": true + }, + { + "expression": "*.gitlab.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "_gitlab_session", + "known_sign_in", + "remember_user_token" + ], + "id": "nn186RK3_", + "cleanAllCookies": false + }, + { + "expression": "*.gog.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "galaxy-login-al", + "galaxy-login-s", + "gog-al" + ], + "id": "zSXCdXOkO", + "cleanAllCookies": false + }, + { + "expression": "*.homebrew.cloud", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "UpE_PQAaG" + }, + { + "expression": "*.icloud.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "g30Z1goFc", + "cleanAllCookies": true + }, + { + "expression": "*.itch.io", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "itchio_token", + "itchio" + ], + "id": "BWfFXjrhC", + "cleanAllCookies": false + }, + { + "expression": "*.leutecraft.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "wdz6LrgeC" + }, + { + "expression": "*.live.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "RPSSecAuth", + "ShCLSessionID" + ], + "id": "d2Azl1OQ", + "cleanAllCookies": true + }, + { + "expression": "*.makerbot.com", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "authorization.sid", + "sso_user" + ], + "id": "5ZTVMDSD-", + "cleanAllCookies": false + }, + { + "expression": "*.mantis-x.net", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "surbma-yes-no-popup" + ], + "id": "GPJKAJrFT", + "cleanAllCookies": false + }, + { + "expression": "*.mihoyo.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "login_ticket", + "account_id" + ], + "id": "Cabyh8L_A", + "cleanAllCookies": false + }, + { + "expression": "*.myfigurecollection.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "tb_session_key", + "tb_session_id", + "TBv4_Safe" + ], + "id": "UZLW5r02", + "cleanAllCookies": false + }, + { + "expression": "*.nintendo.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID", + "cp_session", + "NASID", + "NATID" + ], + "id": "e9MmqT06", + "cleanAllCookies": false + }, + { + "expression": "*.nintendo.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "userIsLoggedIn", + "tCookieUser" + ], + "id": "Ccj0RPtF", + "cleanAllCookies": false + }, + { + "expression": "*.ok.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "loggedIn" + ], + "id": "_bhpEGnw", + "cleanAllCookies": false + }, + { + "expression": "*.pixiv.net", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "login_ever" + ], + "id": "WiEtPnq7V", + "cleanAllCookies": true + }, + { + "expression": "*.playstation.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID" + ], + "id": "7MpdVq3Nk", + "cleanAllCookies": true + }, + { + "expression": "*.plex.tv", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "plex_tv_auth" + ], + "id": "zyou268y", + "cleanAllCookies": false + }, + { + "expression": "*.ponypaste.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "lG0PdhJY", + "cleanAllCookies": true + }, + { + "expression": "*.ponywave.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ND8NeN2en", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "*.retroachievements.org", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "RAPrefs_CSS", + "RA_Cookie", + "RA_User" + ], + "id": "YGxp8HGDl", + "cleanAllCookies": false + }, + { + "expression": "*.reviewmeta.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "rm-first-time-modal-welcome" + ], + "id": "jRaX3__5Q", + "cleanAllCookies": false + }, + { + "expression": "*.riko.moe", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "pPF0pijS", + "cleanAllCookies": true + }, + { + "expression": "*.sankakucomplex.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "login", + "pass_hash", + "theme" + ], + "id": "ZawihqLCg", + "cleanAllCookies": false + }, + { + "expression": "*.sellmyretro.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "sessionLogin", + "sessionId" + ], + "id": "--M-3_5tL", + "cleanAllCookies": false + }, + { + "expression": "*.serienfans.org", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [ + "settings_ok", + "notify_id", + "default_quality", + "ph" + ], + "id": "LRM9Z9hLo", + "cleanAllCookies": false + }, + { + "expression": "*.sony.com", + "listType": "WHITE", + "storeId": "default", + "cleanLocalStorage": false, + "cookieNames": [], + "id": "pGbGpn41I" + }, + { + "expression": "*.sonyentertainmentnetwork.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "JSESSIONID" + ], + "id": "jwVYTS2UT", + "cleanAllCookies": true + }, + { + "expression": "*.sparkasse-badneustadt.de", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [], + "id": "Mk5W2nSkN" + }, + { + "expression": "*.steampowered.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "steamRememberLogin", + "steamMachineAuth76561198084563614", + "steamLoginSecure" + ], + "id": "vPukIMJ9", + "cleanAllCookies": false + }, + { + "expression": "*.tagesschau.de", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "darkmode_content", + "twitter_content", + "twentythreedegrees_content", + "optOutTracking_content", + "mapbox_content", + "datawrapper_content" + ], + "id": "ZV5llgl9P", + "cleanAllCookies": false + }, + { + "expression": "*.telegram.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "BehBGRAV", + "cleanAllCookies": true + }, + { + "expression": "*.thetvdb.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "TVDB_AUTHENTICATED", + "tvdb_5ce3823a428dc" + ], + "id": "SnBrY2J0d", + "cleanAllCookies": false + }, + { + "expression": "*.thingiverse.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "token" + ], + "id": "JuWlGhtUw", + "cleanAllCookies": false + }, + { + "expression": "*.uptimerobot.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "productSource" + ], + "id": "E1KN6630M", + "cleanAllCookies": false + }, + { + "expression": "*.videogameschronicle.com", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "CookieControl" + ], + "id": "JM2IxNDeb", + "cleanAllCookies": false + }, + { + "expression": "*.waipu.tv", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [], + "id": "EkBHv1LDQ" + }, + { + "expression": "*.woleutesind.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "4or_BF5T", + "cleanAllCookies": true + }, + { + "expression": "*.yagyuu.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "JK8JlwMX", + "cleanAllCookies": true + }, + { + "expression": "*.yagyuu.moe", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "bVKYUCHQ", + "cleanAllCookies": true + }, + { + "expression": "192.168.1.25", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [], + "id": "1CMthI5nQ" + }, + { + "expression": "192.168.1.32", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [], + "id": "Kc85XeCES" + }, + { + "expression": "192.168.2.*", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "UIjqsCsr", + "cleanAllCookies": true + }, + { + "expression": "accounts.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "GAPS" + ], + "id": "B3e6QIKXN", + "cleanAllCookies": true + }, + { + "expression": "anidb.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "adbautopass", + "adbautouser", + "adbsess", + "adbsessuser" + ], + "id": "A-vaud3JM", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "anime-loads.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "safe_search", + "identity", + "remember_code", + "alnotice" + ], + "id": "HNmmJRcwz", + "cleanAllCookies": false, + "cleanSiteData": [] + }, + { + "expression": "beamng.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "xf_user" + ], + "id": "bGjNdQUt", + "cleanAllCookies": false + }, + { + "expression": "bethesda.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "bnet-remember-username", + "bnet-session", + "bnet-username" + ], + "id": "AFYjFeYo", + "cleanAllCookies": false + }, + { + "expression": "boerse.to", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "bto_session", + "bto_user" + ], + "id": "JwSMmre6C", + "cleanAllCookies": false + }, + { + "expression": "ddl-warez.to", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "darkmode" + ], + "id": "gyaTCSPY-", + "cleanAllCookies": false + }, + { + "expression": "dhl.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "eToken" + ], + "id": "FtdQ1ruq", + "cleanAllCookies": false + }, + { + "expression": "disqus.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "disqusauths", + "disqusauth" + ], + "id": "uymSnZiCD", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "figuya.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "remember_user_token", + "chakra-ui-color-mode", + "_figuya_session" + ], + "id": "a_Eo9-Pze", + "cleanAllCookies": false, + "cleanSiteData": [] + }, + { + "expression": "forum.wii-homebrew.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "wcf_password", + "wcf_userID" + ], + "id": "6LH8J5o4", + "cleanAllCookies": false + }, + { + "expression": "github.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "user_session", + "logged_in", + "cookie-preferences" + ], + "id": "X5cyoWg4C", + "cleanAllCookies": false, + "cleanSiteData": [] + }, + { + "expression": "google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "98a-9uDs", + "cleanAllCookies": true + }, + { + "expression": "google.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "SSID", + "SID", + "SEARCH_SAMESITE", + "SAPISID", + "NID", + "HSID", + "__Secure-SSID", + "__Secure-HSID", + "__Secure-APISID", + "__Secure-3PAPISID", + "__Secure-3PSID", + "APISID", + "1P_JAR", + "CONSENT" + ], + "id": "WsUhjjES", + "cleanAllCookies": true + }, + { + "expression": "hakase.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "GHz0gMrdM", + "cleanAllCookies": true, + "cleanSiteData": [] + }, + { + "expression": "humblebundle.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "_simpleauth_sess", + "hbreqsec", + "csrf_cookie" + ], + "id": "e2jPcVhV", + "cleanAllCookies": false + }, + { + "expression": "indiegala.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth", + "xf_user" + ], + "id": "ATz-o4P4", + "cleanAllCookies": false + }, + { + "expression": "my.jdownloader.org", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "i18next" + ], + "id": "lto5AKE8", + "cleanAllCookies": false + }, + { + "expression": "myaccount.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "Pg1DDrgt", + "cleanAllCookies": true + }, + { + "expression": "myanimelist.net", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "MALSESSIONID", + "is_logged_in", + "MALHLOGSESSID" + ], + "id": "rKIiMjlC", + "cleanAllCookies": false + }, + { + "expression": "nibutani.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "-I5NSgejl" + }, + { + "expression": "ogs.google.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "SEiUNpEA", + "cleanAllCookies": true + }, + { + "expression": "payback.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "UserID1", + "pbLogin" + ], + "id": "14A-f-kBD", + "cleanAllCookies": false + }, + { + "expression": "shana.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "sGx3IEbf", + "cleanAllCookies": true + }, + { + "expression": "startgame.world", + "listType": "WHITE", + "storeId": "default", + "cleanSiteData": [], + "cookieNames": [ + "wordpress_logged_in_c6053de40b8fb5db5be6c79b3bd75790" + ], + "id": "25WA-d8QO", + "cleanAllCookies": true + }, + { + "expression": "steamcommunity.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "browserid", + "sessionid", + "steamLoginSecure", + "steamMachineAuth76561198084563614", + "steamRememberLogin" + ], + "id": "SXs-gfFN", + "cleanAllCookies": false + }, + { + "expression": "sumomo.local", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [], + "id": "ejt8mX6g_" + }, + { + "expression": "twitter.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth_multi", + "auth_token", + "eu_cn" + ], + "id": "NRw8DwYo", + "cleanAllCookies": false + }, + { + "expression": "wunschliste.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "auth", + "user_id" + ], + "id": "i5AcrLLU", + "cleanAllCookies": false + }, + { + "expression": "yougov.de", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "csrftoken", + "sessionid", + "OptanonAlertBoxClosed" + ], + "id": "J-5vwWgAP", + "cleanAllCookies": false + }, + { + "expression": "youtube.com", + "listType": "WHITE", + "storeId": "default", + "cookieNames": [ + "LOGIN_INFO", + "PREF", + "wide", + "YSC" + ], + "id": "UnxBANv6P", + "cleanAllCookies": false + } + ] +} \ No newline at end of file diff --git a/ModHeader/ModHeader-Export_2021.03.28.json b/ModHeader/ModHeader-Export_2021.03.28.json new file mode 100644 index 0000000..6aa991e --- /dev/null +++ b/ModHeader/ModHeader-Export_2021.03.28.json @@ -0,0 +1 @@ +[{"alwaysOn":false,"appendMode":false,"backgroundColor":"#081930","filters":[{"comment":"","enabled":false,"resourceType":[],"type":"urls","urlRegex":"http:\\/\\/wieistmeinuseragent.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/web.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.computerbase.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.gmx.net"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.golem.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.spiegel.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.zeit.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.thueringer-allgemeine.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.ksta.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.mainpost.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.heise.de"}],"headers":[{"comment":"","enabled":true,"name":"User-Agent","value":"Googlebot-News"}],"hideComment":true,"respHeaders":[],"shortTitle":"1","textColor":"#ffffff","title":"Profile 1","urlReplacements":[]},{"appendMode":false,"backgroundColor":"#3a2e23","filters":[{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/i.nozomi.la"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/tn.nozomi.la"}],"headers":[{"comment":"","enabled":true,"name":"Referer","value":"https://i.nozomi.la/"}],"hideComment":true,"respHeaders":[],"shortTitle":"2","textColor":"#ffffff","title":"Nozomi","urlReplacements":[]}] \ No newline at end of file diff --git a/ModHeader/ModHeader-Export_2022.04.15.json b/ModHeader/ModHeader-Export_2022.04.15.json new file mode 100644 index 0000000..42a9e91 --- /dev/null +++ b/ModHeader/ModHeader-Export_2022.04.15.json @@ -0,0 +1 @@ +[{"alwaysOn":false,"appendMode":false,"backgroundColor":"#081930","filters":[{"comment":"","enabled":false,"resourceType":[],"type":"urls","urlRegex":"http:\\/\\/wieistmeinuseragent.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/web.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.computerbase.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.gmx.net"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.golem.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.spiegel.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.zeit.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.thueringer-allgemeine.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.ksta.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.mainpost.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.heise.de"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/www.sueddeutsche.de"}],"headers":[{"comment":"","enabled":true,"name":"User-Agent","value":"Googlebot-News"}],"hideComment":true,"respHeaders":[],"shortTitle":"1","textColor":"#ffffff","title":"Profile 1","urlReplacements":[]},{"appendMode":false,"backgroundColor":"#3a2e23","filters":[{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/i.nozomi.la"},{"comment":"","enabled":true,"resourceType":[],"type":"urls","urlRegex":"https:\\/\\/tn.nozomi.la"}],"headers":[{"comment":"","enabled":true,"name":"Referer","value":"https://i.nozomi.la/"}],"hideComment":true,"respHeaders":[],"shortTitle":"2","textColor":"#ffffff","title":"Nozomi","urlReplacements":[]}] \ No newline at end of file diff --git a/Redirector/Redirector_2019.08.23.json b/Redirector/Redirector_2019.08.23.json new file mode 100644 index 0000000..3f97b23 --- /dev/null +++ b/Redirector/Redirector_2019.08.23.json @@ -0,0 +1,415 @@ +{ + "createdBy": "Redirector v3.2", + "createdAt": "2019-08-23T17:14:51.535Z", + "redirects": [ + { + "description": "Clean YouTube Link", + "exampleUrl": "https://www.youtube.com/watch?feature=youtu.be&v=HkUGNi8mmRc&app=desktop", + "exampleResult": "https://www.youtube.com/watch?v=HkUGNi8mmRc", + "error": null, + "includePattern": "youtube\\.com\\/watch\\?.+&v=([0-9A-aZ-z-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.youtube.com/watch?v=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip awin1", + "exampleUrl": "https://www.awin1.com/cread.php?awinmid=16040&awinaffid=394187&clickref=&p=https%3A%2F%2Fwww.tvnow.de%2Fserien%2Fdie-versicherungsdetektive-218%2Fstaffel-10%2Fepisode-4-folge-4-1664525", + "exampleResult": "https://www.tvnow.de/serien/die-versicherungsdetektive-218/staffel-10/episode-4-folge-4-1664525", + "error": null, + "includePattern": "https://www.awin1.com/cread.php?awinmid=16040&awinaffid=394187&clickref=&p=*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "W", + "processMatches": "urlDecode", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Humble remove tags", + "exampleUrl": "https://www.humblebundle.com/games/jackbox-party-2019-bundle?hmb_source=navbar&hmb_medium=product_tile&hmb_campaign=tile_index_1", + "exampleResult": "https://www.humblebundle.com/games/jackbox-party-2019-bundle", + "error": null, + "includePattern": "https?:\\/\\/www\\.humblebundle\\.com\\/(.+)\\/(.+)\\?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.humblebundle.com/$1/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX skip \"Forget Logout\"", + "exampleUrl": "https://navigator.gmx.net/remindlogout?sid=9a6af4183c5b76ee7a31719d15a341c5b3a9b07811bc6f3475c36f2c88e71e32d9c6030842bff82b37f716d7b9ab8d96", + "exampleResult": "https://navigator.gmx.net/home?sid=9a6af4183c5b76ee7a31719d15a341c5b3a9b07811bc6f3475c36f2c88e71e32d9c6030842bff82b37f716d7b9ab8d96", + "error": null, + "includePattern": "https?:\\/\\/navigator\\.gmx\\.net\\/remindlogout\\?sid=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://navigator.gmx.net/home?sid=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX skip outgoing link", + "exampleUrl": "https://deref-gmx.net/mail/client/mmBLeewM6K8/dereferrer/?redirectUrl=https%3A%2F%2Fget.adobe.com%2Fde%2Freader%2F", + "exampleResult": "https://get.adobe.com/de/reader/", + "error": null, + "includePattern": "https?:\\/\\/deref-gmx\\.net\\/mail\\/client\\/.+\\/dereferrer\\/\\?redirectUrl=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Short eBay Links", + "exampleUrl": "https://www.ebay.de/itm/Commodore-CBM-3032-funktionsfahig-ohne-OVP/163747849835?hash=item262021e66b:g:6uMAAOSwpfNdDjcl", + "exampleResult": "https://www.ebay.de/itm/163747849835?orig_cvip=true", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?ebay\\.(?:de|com)\\/itm\\/.+\\/(\\d+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/itm/$1?orig_cvip=true", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "tagesschau HTTPS", + "exampleUrl": "http://www.tagesschau.de/faktenfinder/ausland/mass-shootings-usa-101.html", + "exampleResult": "https://www.tagesschau.de/faktenfinder/ausland/mass-shootings-usa-101.html", + "error": null, + "includePattern": "http://www.tagesschau.de/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.tagesschau.de/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Konachan direct JPG to PNG", + "exampleUrl": "https://konachan.com/jpeg/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.jpg", + "exampleResult": "https://konachan.com/image/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.png", + "error": null, + "includePattern": "https://konachan.com/jpeg/(.+).jpg", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://konachan.com/image/$1.png", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "PonyPaste", + "exampleUrl": "https://ponywave.de/PonyPaste/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "exampleResult": "https://ponypaste.de/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "error": null, + "includePattern": "https://ponywave.de/PonyPaste/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://ponypaste.de/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Old Reddit", + "exampleUrl": "https://www.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "exampleResult": "https://old.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "error": null, + "includePattern": "https://www.reddit.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://old.reddit.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fuck You Discord", + "exampleUrl": "https://cdn.discordapp.com/attachments/360743716975280128/590215255498686485/fr60rirs2v431.jpg", + "exampleResult": "https://andi7.uber.space/img.php?url=https://cdn.discordapp.com/attachments/360743716975280128/590215255498686485/fr60rirs2v431.jpg", + "error": null, + "includePattern": "(https?:\\/\\/.+\\.discordapp\\.(?:com|net)\\/attachments\\/\\d+\\/\\d+\\/.+\\.(?:png|jpg|jpeg|gif|bmp))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://andi7.uber.space/img.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "nyaa Redirect", + "exampleUrl": "https://nyaa.si/?page=download&tid=504343", + "exampleResult": "https://nyaa.si/view/504343", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?nyaa\\.s[ei]\\/\\?page=(?:(?:download)|(?:view))&tid=(\\d+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://nyaa.si/view/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Discord", + "exampleUrl": "https://discordapp.com/", + "exampleResult": "https://discordapp.com/channels/@me", + "error": null, + "includePattern": "https://discordapp.com/?$", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://discordapp.com/channels/@me", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": true, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fix old Twitter links", + "exampleUrl": "https://twitter.com/#!/benni3005/status/191600397914345472", + "exampleResult": "https://twitter.com/benni3005/status/191600397914345472", + "error": null, + "includePattern": "http*://twitter.com/#!/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "7TV zu Sat.1", + "exampleUrl": "https://www.7tv.de/auf-streife/3317-nazis-belaestigen-tuerkin-ganze-folge", + "exampleResult": "https://www.sat1.de/tv/auf-streife/video/3317-nazis-belaestigen-tuerkin-ganze-folge", + "error": null, + "includePattern": "https://www.7tv.de/*/*", + "excludePattern": "https://www.sat1.de/tv/*/video/playlists", + "patternDesc": "", + "redirectUrl": "https://www.sat1.de/tv/$1/video/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Imgur HTTPS", + "exampleUrl": "http://i.imgur.com/34iFRfz.jpg", + "exampleResult": "https://i.imgur.com/34iFRfz.jpg", + "error": null, + "includePattern": "http://i.imgur.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://i.imgur.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Abload HTTPS", + "exampleUrl": "http://abload.de/img/screenshot-19gkww.png", + "exampleResult": "https://abload.de/img/screenshot-19gkww.png", + "error": null, + "includePattern": "http://abload.de/img/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://abload.de/img/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Userscripts.org 2", + "exampleUrl": "http://userscripts.org:8080/scripts/show/172936", + "exampleResult": "http://userscripts-mirror.org/scripts/show/172936", + "error": null, + "includePattern": "http://userscripts.org:8080/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "http://userscripts-mirror.org/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Userscripts.org", + "exampleUrl": "http://userscripts.org/scripts/show/172936", + "exampleResult": "http://userscripts-mirror.org/scripts/show/172936", + "error": null, + "includePattern": "http://userscripts.org/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "http://userscripts-mirror.org/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame", + "sub_frame", + "stylesheet", + "script", + "image", + "object", + "xmlhttprequest", + "other" + ] + }, + { + "description": "Imgur Direktlink", + "exampleUrl": "https://imgur.com/fJKiZ6h", + "exampleResult": "https://i.imgur.com/fJKiZ6h.jpg", + "error": null, + "includePattern": "https?://m?.?imgur.com/(.*)", + "excludePattern": "https?://imgur.com/a/", + "patternDesc": "", + "redirectUrl": "https://i.imgur.com/$1.jpg", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "YouTube", + "exampleUrl": "https://www.youtube.com/", + "exampleResult": "https://www.youtube.com/feed/subscriptions", + "error": null, + "includePattern": "https://www.youtube.com/", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.youtube.com/feed/subscriptions", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Bing zu Google", + "exampleUrl": "https://www.bing.com/search?q=Windows.&input=2&nclid=1474F518F45516A59A2B7FD41C828B75&form=WNSSSV&cc=DE&setlang=de-DE", + "exampleResult": "https://www.google.de/search?q=Windows.&ie=utf-8&oe=utf-8&source=cortana", + "error": null, + "includePattern": "https://www.bing.com/search?q=*&*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.google.de/search?q=$1&ie=utf-8&oe=utf-8&source=cortana", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Dropbox DL", + "exampleUrl": "https://www.dropbox.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip?dl=0", + "exampleResult": "https://dl.dropboxusercontent.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip", + "error": null, + "includePattern": "*.dropbox.com/*/*?dl=0", + "excludePattern": "https://dl.dropboxusercontent.com/*", + "patternDesc": "", + "redirectUrl": "https://dl.dropboxusercontent.com/$2/$3", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Twitter zu Desktop Twitter", + "exampleUrl": "https://mobile.twitter.com/gonintendotweet/status/835920024321867776", + "exampleResult": "https://twitter.com/gonintendotweet/status/835920024321867776", + "error": null, + "includePattern": "https://mobile.twitter.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Wikipedia zu Desktop Wikipedia", + "exampleUrl": "https://de.m.wikipedia.org/wiki/Wii", + "exampleResult": "https://de.wikipedia.org/wiki/Wii", + "error": null, + "includePattern": "https://(.+).m.wikipedia.org/wiki/(.*)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://$1.wikipedia.org/wiki/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + } + ] +} \ No newline at end of file diff --git a/Redirector/Redirector_2019.08.28.json b/Redirector/Redirector_2019.08.28.json new file mode 100644 index 0000000..533abaf --- /dev/null +++ b/Redirector/Redirector_2019.08.28.json @@ -0,0 +1,512 @@ +{ + "createdBy": "Redirector v3.2", + "createdAt": "2019-08-28T17:44:28.386Z", + "redirects": [ + { + "description": "MyFigureCollection Deutsch", + "exampleUrl": "https://myfigurecollection.net/item/198386", + "exampleResult": "https://de.myfigurecollection.net/item/198386", + "error": null, + "includePattern": "https?:\\/\\/([\\w\\.]+)?myfigurecollection\\.net\\/?(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://de.myfigurecollection.net/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Sankaku no beta", + "exampleUrl": "https://beta.sankakucomplex.com/post/show/15455999?tags=hide_posts_in_books%3Anever+yagyuu_%28senran_kagura%29", + "exampleResult": "https://chan.sankakucomplex.com/post/show/15455999?tags=hide_posts_in_books%3Anever+yagyuu_%28senran_kagura%29", + "error": null, + "includePattern": "https?:\\/\\/beta\\.sankakucomplex\\.com\\/?(.*)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://chan.sankakucomplex.com/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Sankaku skip \"18?\"", + "exampleUrl": "https://www.sankakucomplex.com/mature-content-disclaimer?then=https%3A%2F%2Fwww.sankakucomplex.com%2F2013%2F08%2F30%2Fto-love-ru-darkness-body-swapping-oad%2F#comments", + "exampleResult": "https://www.sankakucomplex.com/2013/08/30/to-love-ru-darkness-body-swapping-oad/", + "error": null, + "includePattern": "https?:\\/\\/www\\.sankakucomplex\\.com\\/mature-content-disclaimer\\?then=(.+)#comments", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Amazon Cleaner (No Smile)", + "exampleUrl": "https://www.amazon.co.jp/gp/product/B07N6BJFP8?pf_rd_p=ce2eab38-4495-4b24-90fc-38dbaedf3574&pf_rd_r=KYY75JN2HH1NM23F7NCR", + "exampleResult": "https://www.amazon.co.jp/dp/B07N6BJFP8", + "error": null, + "includePattern": "https?:\\/\\/(?:www)?\\.?amazon\\.(ca|co\\.jp)\\/.*(\\/B[0-9A-Z]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.amazon.$1/dp$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Amazon Smile :)", + "exampleUrl": "https://www.amazon.de/gp/product/B07W6CC27R/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=ll1&tag=akamaru-21&linkId=56ef0319ddac72ae036929428952e222&language=de_DE", + "exampleResult": "https://smile.amazon.de/dp/B07W6CC27R", + "error": null, + "includePattern": "https?:\\/\\/(?:www|smile)?\\.?amazon\\.([\\w\\.]+)\\/.*(\\/B[0-9A-Z]+)", + "excludePattern": "(amazon\\.ca|co\\.jp)", + "patternDesc": "", + "redirectUrl": "https://smile.amazon.$1/dp$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Clean YouTube Link", + "exampleUrl": "https://www.youtube.com/watch?feature=youtu.be&v=HkUGNi8mmRc&app=desktop", + "exampleResult": "https://www.youtube.com/watch?v=HkUGNi8mmRc", + "error": null, + "includePattern": "youtube\\.com\\/watch\\?.+&v=([0-9A-aZ-z-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.youtube.com/watch?v=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip awin1", + "exampleUrl": "https://www.awin1.com/cread.php?awinmid=16040&awinaffid=394187&clickref=&p=https%3A%2F%2Fwww.tvnow.de%2Fserien%2Fdie-versicherungsdetektive-218%2Fstaffel-10%2Fepisode-4-folge-4-1664525", + "exampleResult": "https://www.tvnow.de/serien/die-versicherungsdetektive-218/staffel-10/episode-4-folge-4-1664525", + "error": null, + "includePattern": "https://www.awin1.com/cread.php?awinmid=16040&awinaffid=394187&clickref=&p=*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "W", + "processMatches": "urlDecode", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Humble remove tags", + "exampleUrl": "https://www.humblebundle.com/games/jackbox-party-2019-bundle?hmb_source=navbar&hmb_medium=product_tile&hmb_campaign=tile_index_1", + "exampleResult": "https://www.humblebundle.com/games/jackbox-party-2019-bundle", + "error": null, + "includePattern": "https?:\\/\\/www\\.humblebundle\\.com\\/(.+)\\/(.+)\\?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.humblebundle.com/$1/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX skip \"Forget Logout\"", + "exampleUrl": "https://navigator.gmx.net/remindlogout?sid=9a6af4183c5b76ee7a31719d15a341c5b3a9b07811bc6f3475c36f2c88e71e32d9c6030842bff82b37f716d7b9ab8d96", + "exampleResult": "https://navigator.gmx.net/home?sid=9a6af4183c5b76ee7a31719d15a341c5b3a9b07811bc6f3475c36f2c88e71e32d9c6030842bff82b37f716d7b9ab8d96", + "error": null, + "includePattern": "https?:\\/\\/navigator\\.gmx\\.net\\/remindlogout\\?sid=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://navigator.gmx.net/home?sid=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX skip outgoing link", + "exampleUrl": "https://deref-gmx.net/mail/client/mmBLeewM6K8/dereferrer/?redirectUrl=https%3A%2F%2Fget.adobe.com%2Fde%2Freader%2F", + "exampleResult": "https://get.adobe.com/de/reader/", + "error": null, + "includePattern": "https?:\\/\\/deref-gmx\\.net\\/mail\\/client\\/.+\\/dereferrer\\/\\?redirectUrl=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Short eBay Links", + "exampleUrl": "https://www.ebay.de/itm/Commodore-CBM-3032-funktionsfahig-ohne-OVP/163747849835?hash=item262021e66b:g:6uMAAOSwpfNdDjcl", + "exampleResult": "https://www.ebay.de/itm/163747849835?orig_cvip=true", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?ebay\\.(?:de|com)\\/itm\\/.+\\/(\\d+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/itm/$1?orig_cvip=true", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "tagesschau HTTPS", + "exampleUrl": "http://www.tagesschau.de/faktenfinder/ausland/mass-shootings-usa-101.html", + "exampleResult": "https://www.tagesschau.de/faktenfinder/ausland/mass-shootings-usa-101.html", + "error": null, + "includePattern": "http://www.tagesschau.de/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.tagesschau.de/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Konachan direct JPG to PNG", + "exampleUrl": "https://konachan.com/jpeg/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.jpg", + "exampleResult": "https://konachan.com/image/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.png", + "error": null, + "includePattern": "https://konachan.com/jpeg/(.+).jpg", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://konachan.com/image/$1.png", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "PonyPaste", + "exampleUrl": "https://ponywave.de/PonyPaste/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "exampleResult": "https://ponypaste.de/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "error": null, + "includePattern": "https://ponywave.de/PonyPaste/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://ponypaste.de/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Old Reddit", + "exampleUrl": "https://www.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "exampleResult": "https://old.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "error": null, + "includePattern": "https://www.reddit.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://old.reddit.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fuck You 4chan", + "exampleUrl": "https://i.4cdn.org/v/1566849101907.png", + "exampleResult": "https://andi7.uber.space/img.php?url=https://i.4cdn.org/v/1566849101907.png", + "error": null, + "includePattern": "(https?:\\/\\/i\\.4cdn\\.org\\/v\\/[0-9]+\\.(?:png|jpg|jpeg|gif|bmp))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://andi7.uber.space/img.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "Fuck You Discord", + "exampleUrl": "https://cdn.discordapp.com/attachments/360743716975280128/590215255498686485/fr60rirs2v431.jpg", + "exampleResult": "https://andi7.uber.space/img.php?url=https://cdn.discordapp.com/attachments/360743716975280128/590215255498686485/fr60rirs2v431.jpg", + "error": null, + "includePattern": "(https?:\\/\\/.+\\.discordapp\\.(?:com|net)\\/attachments\\/\\d+\\/\\d+\\/.+\\.(?:png|jpg|jpeg|gif|bmp))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://andi7.uber.space/img.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "nyaa Redirect", + "exampleUrl": "https://nyaa.si/?page=download&tid=504343", + "exampleResult": "https://nyaa.si/view/504343", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?nyaa\\.s[ei]\\/\\?page=(?:(?:download)|(?:view))&tid=(\\d+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://nyaa.si/view/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Discord", + "exampleUrl": "https://discordapp.com/", + "exampleResult": "https://discordapp.com/channels/@me", + "error": null, + "includePattern": "https://discordapp.com/?$", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://discordapp.com/channels/@me", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": true, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fix old Twitter links", + "exampleUrl": "https://twitter.com/#!/benni3005/status/191600397914345472", + "exampleResult": "https://twitter.com/benni3005/status/191600397914345472", + "error": null, + "includePattern": "http*://twitter.com/#!/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "7TV zu Sat.1", + "exampleUrl": "https://www.7tv.de/auf-streife/3317-nazis-belaestigen-tuerkin-ganze-folge", + "exampleResult": "https://www.sat1.de/tv/auf-streife/video/3317-nazis-belaestigen-tuerkin-ganze-folge", + "error": null, + "includePattern": "https://www.7tv.de/*/*", + "excludePattern": "https://www.sat1.de/tv/*/video/playlists", + "patternDesc": "", + "redirectUrl": "https://www.sat1.de/tv/$1/video/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Imgur HTTPS", + "exampleUrl": "http://i.imgur.com/34iFRfz.jpg", + "exampleResult": "https://i.imgur.com/34iFRfz.jpg", + "error": null, + "includePattern": "http://i.imgur.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://i.imgur.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Abload HTTPS", + "exampleUrl": "http://abload.de/img/screenshot-19gkww.png", + "exampleResult": "https://abload.de/img/screenshot-19gkww.png", + "error": null, + "includePattern": "http://abload.de/img/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://abload.de/img/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Userscripts.org 2", + "exampleUrl": "http://userscripts.org:8080/scripts/show/172936", + "exampleResult": "http://userscripts-mirror.org/scripts/show/172936", + "error": null, + "includePattern": "http://userscripts.org:8080/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "http://userscripts-mirror.org/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Userscripts.org", + "exampleUrl": "http://userscripts.org/scripts/show/172936", + "exampleResult": "http://userscripts-mirror.org/scripts/show/172936", + "error": null, + "includePattern": "http://userscripts.org/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "http://userscripts-mirror.org/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame", + "sub_frame", + "stylesheet", + "script", + "image", + "object", + "xmlhttprequest", + "other" + ] + }, + { + "description": "Imgur Direktlink", + "exampleUrl": "https://imgur.com/fJKiZ6h", + "exampleResult": "https://i.imgur.com/fJKiZ6h.jpg", + "error": null, + "includePattern": "https?://m?.?imgur.com/(.*)", + "excludePattern": "https?://imgur.com/a/", + "patternDesc": "", + "redirectUrl": "https://i.imgur.com/$1.jpg", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "YouTube", + "exampleUrl": "https://www.youtube.com/", + "exampleResult": "https://www.youtube.com/feed/subscriptions", + "error": null, + "includePattern": "https://www.youtube.com/", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.youtube.com/feed/subscriptions", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Bing zu Google", + "exampleUrl": "https://www.bing.com/search?q=Windows.&input=2&nclid=1474F518F45516A59A2B7FD41C828B75&form=WNSSSV&cc=DE&setlang=de-DE", + "exampleResult": "https://www.google.de/search?q=Windows.&ie=utf-8&oe=utf-8&source=cortana", + "error": null, + "includePattern": "https://www.bing.com/search?q=*&*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.google.de/search?q=$1&ie=utf-8&oe=utf-8&source=cortana", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Dropbox DL", + "exampleUrl": "https://www.dropbox.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip?dl=0", + "exampleResult": "https://dl.dropboxusercontent.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip", + "error": null, + "includePattern": "*.dropbox.com/*/*?dl=0", + "excludePattern": "https://dl.dropboxusercontent.com/*", + "patternDesc": "", + "redirectUrl": "https://dl.dropboxusercontent.com/$2/$3", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Twitter zu Desktop Twitter", + "exampleUrl": "https://mobile.twitter.com/gonintendotweet/status/835920024321867776", + "exampleResult": "https://twitter.com/gonintendotweet/status/835920024321867776", + "error": null, + "includePattern": "https://mobile.twitter.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Wikipedia zu Desktop Wikipedia", + "exampleUrl": "https://de.m.wikipedia.org/wiki/Wii", + "exampleResult": "https://de.wikipedia.org/wiki/Wii", + "error": null, + "includePattern": "https://(.+).m.wikipedia.org/wiki/(.*)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://$1.wikipedia.org/wiki/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "appliesTo": [ + "main_frame" + ] + } + ] +} \ No newline at end of file diff --git a/Redirector/Redirector_2020.08.13.json b/Redirector/Redirector_2020.08.13.json new file mode 100644 index 0000000..ca9d6d9 --- /dev/null +++ b/Redirector/Redirector_2020.08.13.json @@ -0,0 +1,883 @@ +{ + "createdBy": "Redirector v3.5.3", + "createdAt": "2020-08-13T16:41:00.736Z", + "redirects": [ + { + "description": "Google Search no tags", + "exampleUrl": "https://www.google.com/search?sxsrf=ACYBGNRSUH0BO4CvglFADP9ireMXO5QWNA%3A1578494792609&ei=SOsVXuDpJJC9gQa7ka6YAw&q=akamaru.de&oq=akamaru.de&gs_l=psy-ab.3..0i30l6j0i8i30l4.14786.17556..18142...1.0..0.84.546.7......0....1..gws-wiz.......35i39j0j0i10j0i20i263j0i10i203.GJaDBTNbIQM&ved=0ahUKEwjgrZKrn_TmAhWQXsAKHbuICzMQ4dUDCAs&uact=5", + "exampleResult": "https://www.google.com/search?q=akamaru.de", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?google\\.com\\/search\\?(:?.+)?q=(.+)&oq=", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.google.com/search?q=$3", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip YouTube Redirect", + "exampleUrl": "https://www.youtube.com/redirect?q=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1Wm9OWQS3wL9pgd9uJatNIql_HaDGxR5X%2Fview%3Fusp%3Dsharing&event=video_description&v=kfxcWEKHkIw&redir_token=OS2ifIE6Hihpv_Wkkyt5Mv9PQcR8MTU3NjQ0MDE4M0AxNTc2MzUzNzgz", + "exampleResult": "https://drive.google.com/file/d/1Wm9OWQS3wL9pgd9uJatNIql_HaDGxR5X/view?usp=sharing", + "error": null, + "includePattern": "https?:\\/\\/www\\.youtube\\.com\\/redirect\\?q=(.+)&event=video_description", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Idealo-Ref", + "exampleUrl": "http://marketing.net.idealo-partner.com/ts/i5626864/tsc?amc=pricecomp.idealo.210455.220402.111203.1&smc2=NcxotFmOn3wABPI1xgqJVg&smc3=25375&smc4=183934&smc5=idealo&rmd=3&trg=https%3A%2F%2Fwww.mytime.de%2Fproduct.php%3FMerchantID%3Dpsmido%26product_sku%3D4502084338%26campaign%3Dfeed%252Fde%252F10242%252Fidealo%252F4502084338%26utm_source%3Didealo%26utm_medium%3Dpsm%26utm_campaign%3Dpsm_idealo", + "exampleResult": "https://www.mytime.de/product.php?MerchantID=psmido&product_sku=4502084338", + "error": null, + "includePattern": "https?:\\/\\/marketing\\.net\\.idealo-partner\\.com\\/.+&trg=(.+)%26campaign.+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip tradedoubler", + "exampleUrl": "https://clkde.tradedoubler.com/click?p=299827&a=1352022&g=24686026", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/tradedoublerredir.php?url=https://clkde.tradedoubler.com/click?p=299827&a=1352022&g=24686026", + "error": null, + "includePattern": "(https?:\\/\\/clkde\\.tradedoubler\\.com\\/click.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/tradedoublerredir.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Disqus ref", + "exampleUrl": "https://disq.us/?url=https%3A%2F%2Fakamaru.de%2Fdie-geschichte-von-the-homebrew-cloud%2F&key=4cW3zzSMbhM4pdcOKKMJ4Q", + "exampleResult": "https://akamaru.de/die-geschichte-von-the-homebrew-cloud/", + "error": null, + "includePattern": "https?:\\/\\/disq\\.us\\/\\?url=(.+)&key=.+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip ampproject", + "exampleUrl": "https://www-t--online-de.cdn.ampproject.org/c/s/www.t-online.de/unterhaltung/tv/id_86863096/tid_amp/-wer-weiss-denn-sowas-die-500-sendung-das-ist-das-erfolgsgeheimnis-.html", + "exampleResult": "www.t-online.de/unterhaltung/tv/id_86863096", + "error": null, + "includePattern": "https?:\\/\\/(:?[a-z-_.]+)\\/(:?c\\/s\\/(.+)\\/tid_amp|v\\/s\\/.+ampshare=(.+))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$3$4", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Forum64 skip leave Forum", + "exampleUrl": "https://www.forum64.de/wcf/index.php?sc-dereferer/&encode=0&target=http%3A%2F%2Fwww.archive.org%2Fdetails%2FCC517_commodore_64&source=https%3A%2F%2Fwww.forum64.de%2Findex.php%3Fthread%2F26474-der-c64-in-film-und-fernsehen%2F", + "exampleResult": "http://www.archive.org/details/CC517_commodore_64", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?forum64\\.de\\/wcf\\/index\\.php\\?sc-dereferer\\/&encode=0&target=(.+)&source", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Exactag", + "exampleUrl": "https://m.exactag.com/cl.aspx?extProvId=81&extPu=docm-idealo&extLi=psm-nonmed&extCr=00826616&url=https%3A%2F%2Fwww.docmorris.de%2Fneoangin-halstabletten-zuckerfrei%2F00826616?from=5W581&wt_mc=psm.psm_non-med.idealo.preisvergleich.", + "exampleResult": "https://www.docmorris.de/neoangin-halstabletten-zuckerfrei/00826616", + "error": null, + "includePattern": "https?:\\/\\/(?:m\\.)exactag\\.com\\/cl\\.aspx\\?extProvId=(?:[0-9]+)&extPu=(?:[a-zA-z-]+)&extLi=(?:[a-zA-z-]+)&extCr=(?:[0-9]+)&url=(.+)\\?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Platelets Fun Mirror", + "exampleUrl": "http://platelets.fun", + "exampleResult": "https://code.ponywave.de/workspace/test/cell/index.html", + "error": null, + "includePattern": "https?:\\/\\/platelets\\.fun", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/cell/index.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "TV Spielfilm \"Meine Sender\"", + "exampleUrl": "https://my.tvspielfilm.de/tv-programm/sendungen/jetzt.html", + "exampleResult": "https://my.tvspielfilm.de/tv-programm/sendungen/?page=1&order=channel&time=now&channel=g%3Auser", + "error": null, + "includePattern": "https?:\\/\\/my\\.tvspielfilm\\.de\\/tv-programm\\/sendungen\\/jetzt\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://my.tvspielfilm.de/tv-programm/sendungen/?page=1&order=channel&time=now&channel=g%3Auser", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Link Blacklist", + "exampleUrl": "https://www.filecrypt.cc/pax/iox.html", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/close.php", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?(filecrypt\\.cc\\/pax\\/iox\\.html|g2a\\.com\\/\\?(reflink|gname)|paypal\\.com\\/cgi-bin\\/webscr\\?cmd=_s-xclick&hosted_button_id=|toplist\\.raidrush\\.ws|aj1574\\.online|get3\\.adobe\\.com\\/de\\/flashplayer\\/completion\\/adm|uploaded\\.net\\/register)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/close.php", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "script" + ] + }, + { + "description": "Facebook no Mobile", + "exampleUrl": "https://m.facebook.com/story.php?story_fbid=258373738451635&id=100028370323740", + "exampleResult": "https://facebook.com/story.php?story_fbid=258373738451635&id=100028370323740", + "error": null, + "includePattern": "https?:\\/\\/m\\.facebook\\.com\\/story\\.php\\?story_fbid=([0-9]+)&id=([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://facebook.com/story.php?story_fbid=$1&id=$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Steam Linkfilter", + "exampleUrl": "https://steamcommunity.com/linkfilter/?url=https://blog.beamng.com/fourth-hotfix-for-0-17/", + "exampleResult": "https://blog.beamng.com/fourth-hotfix-for-0-17/", + "error": null, + "includePattern": "https://steamcommunity.com/linkfilter/?url=*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "WinFuture no mobi", + "exampleUrl": "https://winfuture.mobi/news/109913", + "exampleResult": "https://winfuture.de/news,109913.html", + "error": null, + "includePattern": "https?:\\/\\/winfuture\\.mobi\\/news\\/([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://winfuture.de/news,$1.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Twitter direct Statuses", + "exampleUrl": "https://twitter.com/status/1154736423393800192", + "exampleResult": "https://twitter.com/i/web/status/1154736423393800192", + "error": null, + "includePattern": "https?:\\/\\/(?:m|mobile|www)?\\.?twitter\\.com.+status(?:es)?\\/([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/i/web/status/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Nox.to > Nox.tv (Forum)", + "exampleUrl": "http://www.nox.to/forum/index.php/topic,113908.0.html", + "exampleResult": "https://forum.nox.tv/index.php?thread/113908", + "error": null, + "includePattern": "nox\\.to\\/forum\\/index\\.php\\/topic,([0-9]+)\\.[0-9]\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://forum.nox.tv/index.php?thread/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyDealz direct skip", + "exampleUrl": "https://www.mydealz.de/visit/thread/1550766", + "exampleResult": "https://code.ponywave.de/workspace/test/dealzredirect.php?link=https://www.mydealz.de/visit/thread/1550766", + "error": null, + "includePattern": "(https?:\\/\\/(:?www\\.)?(mydealz\\.de|preisjaeger\\.at)\\/visit\\/thread(image)?\\/([0-9]+))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/dealzredirect.php?link=$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Google Drive direct download", + "exampleUrl": "https://drive.google.com/file/d/1_KRgyoQWbRfUlpwTwZhMOITjQPyIj7R2/view", + "exampleResult": "https://drive.google.com/uc?id=1_KRgyoQWbRfUlpwTwZhMOITjQPyIj7R2&export=download", + "error": null, + "includePattern": "https?:\\/\\/drive\\.google\\.com\\/(open\\/?\\?id=|file\\/d\\/)([A-Za-z0-9_\\-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://drive.google.com/uc?id=$2&export=download", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Aliexpress no translation", + "exampleUrl": "https://de.aliexpress.com/item/32856376200.html?spm=a2g0o.ams_82947.layer-9z66wm.3.54e7577eQMubKN&gps-id=7237617&scm=1007.19164.122182.0&scm_id=1007.19164.122182.0&scm-url=1007.19164.122182.0&pvid=4695b8d2-2481-4918-ba75-8104182bb73f", + "exampleResult": "https://aliexpress.com/item/32856376200.html", + "error": null, + "includePattern": "https?:\\/\\/([\\w\\.]+\\.)?aliexpress\\.com\\/item\\/([0-9]+)\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://aliexpress.com/item/$2.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyFigureCollection Deutsch", + "exampleUrl": "https://myfigurecollection.net/item/198386", + "exampleResult": "https://de.myfigurecollection.net/item/198386", + "error": null, + "includePattern": "https?:\\/\\/([\\w\\.]+)?myfigurecollection\\.net\\/?(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://de.myfigurecollection.net/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Sankaku no beta", + "exampleUrl": "https://beta.sankakucomplex.com/post/show/15455999?tags=hide_posts_in_books%3Anever+yagyuu_%28senran_kagura%29", + "exampleResult": "https://chan.sankakucomplex.com/post/show/15455999?tags=hide_posts_in_books%3Anever+yagyuu_%28senran_kagura%29", + "error": null, + "includePattern": "https?:\\/\\/(beta\\.sankakucomplex\\.com|sankaku\\.app)\\/?(.*)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://chan.sankakucomplex.com/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Sankaku skip \"18?\"", + "exampleUrl": "https://www.sankakucomplex.com/mature-content-disclaimer?then=https%3A%2F%2Fwww.sankakucomplex.com%2F2013%2F08%2F30%2Fto-love-ru-darkness-body-swapping-oad%2F#comments", + "exampleResult": "https://www.sankakucomplex.com/2013/08/30/to-love-ru-darkness-body-swapping-oad/", + "error": null, + "includePattern": "https?:\\/\\/www\\.sankakucomplex\\.com\\/mature-content-disclaimer\\/?\\?then=(.+)#(?:comments|respond)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Amazon Cleaner (No Smile)", + "exampleUrl": "https://www.amazon.co.jp/gp/product/B07N6BJFP8?pf_rd_p=ce2eab38-4495-4b24-90fc-38dbaedf3574&pf_rd_r=KYY75JN2HH1NM23F7NCR", + "exampleResult": "https://www.amazon.co.jp/dp/B07N6BJFP8", + "error": null, + "includePattern": "https?:\\/\\/(?:www)?\\.?amazon\\.([\\w\\.]+)\\/.*(\\/B0[0-9A-Z]+)", + "excludePattern": "amazon\\.(de|com|co\\.uk)|(gp\\/offer-listing|black-curtain-redirect\\.html|product-reviews|kindle-dbs|gp\\/bestsellers|stores\\/page|buyagain|browse\\/|gp\\/buy\\/thankyou)", + "patternDesc": "", + "redirectUrl": "https://www.amazon.$1/dp$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Amazon Smile :)", + "exampleUrl": "https://www.amazon.de/gp/product/B07W6CC27R/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=ll1&tag=akamaru-21&linkId=56ef0319ddac72ae036929428952e222&language=de_DE", + "exampleResult": "https://smile.amazon.de/dp/B07W6CC27R", + "error": null, + "includePattern": "https?:\\/\\/(?:www|smile)?\\.?amazon\\.(de|com|co\\.uk)\\/.*(\\/B[0-9A-Z]+)", + "excludePattern": "(gp\\/offer-listing|black-curtain-redirect\\.html|product-reviews|kindle-dbs|gp\\/bestsellers|stores\\/page|buyagain|browse\\/|gp\\/buy\\/thankyou)", + "patternDesc": "", + "redirectUrl": "https://smile.amazon.$1/dp$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip awin1", + "exampleUrl": "https://www.awin1.com/cread.php?awinmid=16040&awinaffid=394187&clickref=&p=https%3A%2F%2Fwww.tvnow.de%2Fserien%2Fdie-versicherungsdetektive-218%2Fstaffel-10%2Fepisode-4-folge-4-1664525", + "exampleResult": "https://www.tvnow.de/serien/die-versicherungsdetektive-218/staffel-10/episode-4-folge-4-1664525", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?awin1\\.com\\/cread\\.php\\?awinmid=[0-9]+&awinaffid=[0-9]+&clickref=&p=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$2", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Humble remove tags", + "exampleUrl": "https://www.humblebundle.com/games/jackbox-party-2019-bundle?hmb_source=navbar&hmb_medium=product_tile&hmb_campaign=tile_index_1", + "exampleResult": "https://www.humblebundle.com/games/jackbox-party-2019-bundle", + "error": null, + "includePattern": "https?:\\/\\/www\\.humblebundle\\.com\\/(.+)\\/(.+)\\?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.humblebundle.com/$1/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX/Web.de skip \"Forget Logout\"", + "exampleUrl": "https://bap.navigator.gmx.net/remindlogout?sid=26d97c3605b4b46dd711335178b7c09fc4947576704d4163aa26b16c9bc396d62bcade77731e11a2c6a1ff28564193c6", + "exampleResult": "https://navigator.gmx.net/mail?sid=26d97c3605b4b46dd711335178b7c09fc4947576704d4163aa26b16c9bc396d62bcade77731e11a2c6a1ff28564193c6", + "error": null, + "includePattern": "https?:\\/\\/(?:bap\\.)?navigator\\.(gmx\\.net|web\\.de)\\/(?:remindlogout)?\\?sid=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://navigator.$1/mail?sid=$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX/Web.de skip outgoing link", + "exampleUrl": "https://deref-gmx.net/mail/client/p8wcBOC4P6Q/dereferrer/?redirectUrl=https%3A%2F%2Fmajormovezshop.de%2Fauftragsverfolgung-gast", + "exampleResult": "https://majormovezshop.de/auftragsverfolgung-gast", + "error": null, + "includePattern": "https?:\\/\\/(:?deref-gmx\\.net|deref-web(:?-\\d+)?\\.de)\\/mail\\/client\\/.+\\/dereferrer\\/\\?redirectUrl=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$3", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Short eBay Links", + "exampleUrl": "https://www.ebay.de/itm/Commodore-CBM-3032-funktionsfahig-ohne-OVP/163747849835?hash=item262021e66b:g:6uMAAOSwpfNdDjcl", + "exampleResult": "https://www.ebay.de/itm/163747849835?nordt=true&orig_cvip=true", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?ebay\\.[a-z.]+\\/itm\\/.+\\/(\\d+)", + "excludePattern": "(\\/itm\\/preview\\/)", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/itm/$1?nordt=true&orig_cvip=true", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Konachan direct JPG to PNG", + "exampleUrl": "https://konachan.com/jpeg/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.jpg", + "exampleResult": "https://konachan.com/image/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.png", + "error": null, + "includePattern": "https://konachan.com/jpeg/(.+).jpg", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://konachan.com/image/$1.png", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "PonyPaste", + "exampleUrl": "https://ponywave.de/PonyPaste/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "exampleResult": "https://ponypaste.de/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "error": null, + "includePattern": "https://ponywave.de/PonyPaste/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://ponypaste.de/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Old Reddit", + "exampleUrl": "https://www.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "exampleResult": "https://old.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "error": null, + "includePattern": "https://www.reddit.com/*", + "excludePattern": "https://www.reddit.com/gallery/*", + "patternDesc": "", + "redirectUrl": "https://old.reddit.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "No Reddit Preview Link", + "exampleUrl": "https://preview.redd.it/j85ycjwzf1041.jpg?width=463&auto=webp&s=cda01f1c2d87be82c14b71250701c72eba19dbbf", + "exampleResult": "https://i.redd.it/j85ycjwzf1041.jpg", + "error": null, + "includePattern": "https?:\\/\\/preview\\.redd\\.it\\/(.+)\\?width=[0-9]+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://i.redd.it/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "PonyWave Bilder-Proxy", + "exampleUrl": "http://pm1.narvii.com/6433/4447eb7fd89f6a83e4824b148a0c7bf2451506c7_hq.jpg", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/img.php?url=http://pm1.narvii.com/6433/4447eb7fd89f6a83e4824b148a0c7bf2451506c7_hq.jpg", + "error": null, + "includePattern": "^(https?:\\/\\/(?:p[am]1\\.narvii\\.com|i\\.4cdn\\.org\\/v|.+\\.discordapp\\.(?:com|net)\\/attachments|img\\.pr0gramm\\.com|i\\.4cdn\\.org)\\/.+\\.(?:png|jpe?g|gif|bmp))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/img.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "nyaa Redirect", + "exampleUrl": "https://nyaa.si/?page=download&tid=504343", + "exampleResult": "https://nyaa.si/view/504343", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?nyaa\\.s[ei]\\/\\?page=(?:(?:download)|(?:view))&tid=(\\d+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://nyaa.si/view/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fix old Twitter links", + "exampleUrl": "https://twitter.com/#!/benni3005/status/191600397914345472", + "exampleResult": "https://twitter.com/benni3005/status/191600397914345472", + "error": null, + "includePattern": "http*://twitter.com/#!/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "7TV zu Sat.1", + "exampleUrl": "https://www.7tv.de/auf-streife/3317-nazis-belaestigen-tuerkin-ganze-folge", + "exampleResult": "https://www.sat1.de/tv/auf-streife/video/3317-nazis-belaestigen-tuerkin-ganze-folge", + "error": null, + "includePattern": "https://www.7tv.de/*/*", + "excludePattern": "https://www.sat1.de/tv/*/video/playlists", + "patternDesc": "", + "redirectUrl": "https://www.sat1.de/tv/$1/video/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Userscripts.org to Mirror", + "exampleUrl": "http://userscripts.org/scripts/show/172936", + "exampleResult": "https://userscripts-mirror.org/scripts/show/172936", + "error": null, + "includePattern": "https?:\\/\\/userscripts\\.org(?:\\:8080)?\\/(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://userscripts-mirror.org/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "sub_frame", + "stylesheet", + "script", + "image", + "object", + "xmlhttprequest", + "other" + ] + }, + { + "description": "Imgur Direktlink", + "exampleUrl": "https://imgur.com/fJKiZ6h", + "exampleResult": "https://i.imgur.com/fJKiZ6h.png", + "error": null, + "includePattern": "https?://m?.?imgur.com/(.*)", + "excludePattern": "https?://imgur.com/a/", + "patternDesc": "", + "redirectUrl": "https://i.imgur.com/$1.png", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Dropbox DL", + "exampleUrl": "https://www.dropbox.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip?dl=0", + "exampleResult": "https://dl.dropboxusercontent.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip", + "error": null, + "includePattern": "*.dropbox.com/*/*?dl=0", + "excludePattern": "https://dl.dropboxusercontent.com/*", + "patternDesc": "", + "redirectUrl": "https://dl.dropboxusercontent.com/$2/$3", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Twitter zu Desktop Twitter", + "exampleUrl": "https://mobile.twitter.com/gonintendotweet/status/835920024321867776", + "exampleResult": "https://twitter.com/gonintendotweet/status/835920024321867776", + "error": null, + "includePattern": "https://mobile.twitter.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Wikipedia zu Desktop Wikipedia", + "exampleUrl": "https://de.m.wikipedia.org/wiki/Wii", + "exampleResult": "https://de.wikipedia.org/wiki/Wii", + "error": null, + "includePattern": "https://(.+).m.wikipedia.org/wiki/(.*)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://$1.wikipedia.org/wiki/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Kleinanzeigen Kurzlink", + "exampleUrl": "https://www.ebay-kleinanzeigen.de/s-anzeige/wii-u-konsole-32-gb-mit-mario-kart-8/1308677475-279-2096", + "exampleResult": "https://www.ebay-kleinanzeigen.de/s-anzeige/1308677475-279-2096", + "error": null, + "includePattern": "https?:\\/\\/(:?m|www)?\\.?ebay-kleinanzeigen\\.de\\/s-anzeige\\/[A-Za-z0-9-_]+\\/([0-9-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.ebay-kleinanzeigen.de/s-anzeige/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "SakuraCircle New URL", + "exampleUrl": "http://sakuracircle.animeholics.org/overflow-04-web/", + "exampleResult": "https://sakuracircle.com//overflow-04-web/", + "error": null, + "includePattern": "https?:\\/\\/sakuracircle\\.animeholics\\.org(.+)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://sakuracircle.com/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "eBay NEIN", + "exampleUrl": "https://reg.ebay.de/reg/UpdateContactInfo?_uci=2&flow=SIGN_IN&ru=https%3A%2F%2Fmy.ebay.de%2Fws%2FeBayISAPI.dll%3FMyEbayBeta%26MyEbay%3D%26gbh%3D1%26guest%3D1", + "exampleResult": "https://my.ebay.de/ws/eBayISAPI.dll?MyEbayBeta&MyEbay=&gbh=1&guest=1", + "error": null, + "includePattern": "https?:\\/\\/reg\\.ebay\\.de\\/reg\\/UpdateContactInfo\\?_uci=2&flow=SIGN_IN&ru=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Chaturbate No-ref", + "exampleUrl": "https://chaturbate.com/in/?track=post&tour=dT8X&campaign=wXffl&room=projektmelody", + "exampleResult": "https://de.chaturbate.com/projektmelody/", + "error": null, + "includePattern": "https?:\\/\\/chaturbate\\.com\\/in\\/\\?track=post&tour=[a-zA-Z0-9]+&campaign=[a-zA-Z0-9]+&room=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://de.chaturbate.com/$1/", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "New Serienjunkies", + "exampleUrl": "http://serienjunkies.org/better-call-saul/better-call-saul-staffel-5-web-dl-720p1080p/", + "exampleResult": "https://serienjunkies.org/serie/better-call-saul", + "error": null, + "includePattern": "https?:\\/\\/serienjunkies\\.org\\/([a-z0-9-]+)\\/?", + "excludePattern": "https?:\\/\\/serienjunkies\\.org\\/(serie\\/|list\\/)", + "patternDesc": "", + "redirectUrl": "https://serienjunkies.org/serie/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "DMAX Alt>Neu", + "exampleUrl": "https://www.dmax.de/programme/112-feuerwehr-im-einsatz", + "exampleResult": "https://dmax.de/sendungen/112-feuerwehr-im-einsatz/", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?dmax\\.de\\/programme\\/([a-z0-9-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://dmax.de/sendungen/$2/", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip GoogleAdServices", + "exampleUrl": "https://www.googleadservices.com/pagead/aclk?sa=L&ai=C2yT2ISPIXsz2HdqVywXS1YiwDqqM7I9d-bG0z8MKntXm0eAYCAkQASDezc8eKAVglYKAgJgHoAGWqfT-A8gBB6kCHqjnUt5Gsj6qBERP0FrGX_942hWnYpOmFxOKfvpQoylhxZyD8SGBkrkGhLjfoCtSwHPtDfZywrBpX3G0QHoI0HjhRJtA_SZKDntvcAakecAEirOr4q8CwAUFoAYmgAfS1osBiAcBkAcCqAemvhuoB_DZG6gH8tkbqAfz0RuoB-7SG6gHytwbqAfC2hvYBwGwCAHACAHSCAUQAiCEApoJRGh0dHBzOi8vZW5nbGlzaC1zaG9wLmRlL2RlL2JyYXNzby13YWRkaW5nLXBvbGlzaC1mb3ItbWV0YWxzLTc1Zy5odG1ssQldY5ZnbsfsiLkJXWOWZ27H7Ij4CQGYCwHgErigo8yG79ybOukVhXXf8BbgAdPwFaOEjAT6FQYxMDQzMTCIFqsluBawyLACwBbwzO0C6hYECNaSIQ&ctype=5&ved=0ahUKEwiEwa7QlcjpAhWGwMQBHVZSCkYQrkMIDQ&dblrd=1&sival=AF15MEBiB8ogWPV1IOLLeoBSBYJ_27GFbD-ybQPW1rJzQnftOvvv5CLyvGTCepvfkr0Uwzf_L9v9CrJyhBzaxZqCzftnIP0ZcQglCuBfCzG-QGTEzFyp_8p0t--M3a2UrCByDWynY19SgcvGlNJRqMv7xq3J50-aCQ&sig=AOD64_2RdRY1VVFJToGIxx5L0QXyM5CA5g&adurl=https://english-shop.de/de/brasso-wadding-polish-for-metals-75g.html", + "exampleResult": "https://english-shop.de/de/brasso-wadding-polish-for-metals-75g.html", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?googleadservices\\.com\\/pagead\\/.+adurl=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "EGS Deutsch", + "exampleUrl": "https://www.epicgames.com/store/en-US/product/samurai-shodown-neogeo-collection/home", + "exampleResult": "https://www.epicgames.com/store/de/product/samurai-shodown-neogeo-collection/home", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?epicgames\\.com\\/store\\/en-US\\/product\\/(.+)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.epicgames.com/store/de/product/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyAnimeList", + "exampleUrl": "https://myanimelist.net/anime/30901/Utawarerumono__Itsuwari_no_Kamen", + "exampleResult": "https://myanimelist.net/anime/30901", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?myanimelist\\.net\\/(manga|anime)\\/([0-9]+)", + "excludePattern": "https?:\\/\\/(:?www\\.)?myanimelist\\.net\\/(manga|anime)\\/([0-9]+)\\/.+\\/([a-z]+)", + "patternDesc": "", + "redirectUrl": "https://myanimelist.net/$2/$3", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + } + ] +} \ No newline at end of file diff --git a/Redirector/Redirector_2021.03.28.json b/Redirector/Redirector_2021.03.28.json new file mode 100644 index 0000000..bc5066d --- /dev/null +++ b/Redirector/Redirector_2021.03.28.json @@ -0,0 +1,1071 @@ +{ + "createdBy": "Redirector v3.5.3", + "createdAt": "2021-03-28T19:51:16.994Z", + "redirects": [ + { + "description": "Google Search no tags", + "exampleUrl": "https://www.google.com/search?sxsrf=ACYBGNRSUH0BO4CvglFADP9ireMXO5QWNA%3A1578494792609&ei=SOsVXuDpJJC9gQa7ka6YAw&q=akamaru.de&oq=akamaru.de&gs_l=psy-ab.3..0i30l6j0i8i30l4.14786.17556..18142...1.0..0.84.546.7......0....1..gws-wiz.......35i39j0j0i10j0i20i263j0i10i203.GJaDBTNbIQM&ved=0ahUKEwjgrZKrn_TmAhWQXsAKHbuICzMQ4dUDCAs&uact=5", + "exampleResult": "https://www.google.com/search?q=akamaru.de", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?google\\.com\\/search\\?(:?.+)?q=(.+)&oq=", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.google.com/search?q=$3", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip YouTube Redirect", + "exampleUrl": "https://www.youtube.com/redirect?q=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1Wm9OWQS3wL9pgd9uJatNIql_HaDGxR5X%2Fview%3Fusp%3Dsharing&event=video_description&v=kfxcWEKHkIw&redir_token=OS2ifIE6Hihpv_Wkkyt5Mv9PQcR8MTU3NjQ0MDE4M0AxNTc2MzUzNzgz", + "exampleResult": "https://drive.google.com/file/d/1Wm9OWQS3wL9pgd9uJatNIql_HaDGxR5X/view?usp=sharing", + "error": null, + "includePattern": "https?:\\/\\/www\\.youtube\\.com\\/redirect\\?q=(.+)&event=video_description", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Idealo-Ref", + "exampleUrl": "http://marketing.net.idealo-partner.com/ts/i5626864/tsc?amc=pricecomp.idealo.210455.220402.111203.1&smc2=NcxotFmOn3wABPI1xgqJVg&smc3=25375&smc4=183934&smc5=idealo&rmd=3&trg=https%3A%2F%2Fwww.mytime.de%2Fproduct.php%3FMerchantID%3Dpsmido%26product_sku%3D4502084338%26campaign%3Dfeed%252Fde%252F10242%252Fidealo%252F4502084338%26utm_source%3Didealo%26utm_medium%3Dpsm%26utm_campaign%3Dpsm_idealo", + "exampleResult": "https://www.mytime.de/product.php?MerchantID=psmido&product_sku=4502084338", + "error": null, + "includePattern": "https?:\\/\\/marketing\\.net\\.idealo-partner\\.com\\/.+&trg=(.+)%26campaign.+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip tradedoubler", + "exampleUrl": "https://clkde.tradedoubler.com/click?p=299827&a=1352022&g=24686026", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/tradedoublerredir.php?url=https://clkde.tradedoubler.com/click?p=299827&a=1352022&g=24686026", + "error": null, + "includePattern": "(https?:\\/\\/clkde\\.tradedoubler\\.com\\/click.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/tradedoublerredir.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Disqus ref", + "exampleUrl": "https://disq.us/?url=https%3A%2F%2Fakamaru.de%2Fdie-geschichte-von-the-homebrew-cloud%2F&key=4cW3zzSMbhM4pdcOKKMJ4Q", + "exampleResult": "https://akamaru.de/die-geschichte-von-the-homebrew-cloud/", + "error": null, + "includePattern": "https?:\\/\\/disq\\.us\\/\\?url=(.+)&key=.+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip ampproject", + "exampleUrl": "https://www-t--online-de.cdn.ampproject.org/c/s/www.t-online.de/unterhaltung/tv/id_86863096/tid_amp/-wer-weiss-denn-sowas-die-500-sendung-das-ist-das-erfolgsgeheimnis-.html", + "exampleResult": "www.t-online.de/unterhaltung/tv/id_86863096", + "error": null, + "includePattern": "https?:\\/\\/(:?[a-z-_.]+)\\/(:?c\\/s\\/(.+)\\/tid_amp|v\\/s\\/.+ampshare=(.+))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$3$4", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Forum64 skip leave Forum", + "exampleUrl": "https://www.forum64.de/wcf/index.php?sc-dereferer/&encode=0&target=http%3A%2F%2Fwww.archive.org%2Fdetails%2FCC517_commodore_64&source=https%3A%2F%2Fwww.forum64.de%2Findex.php%3Fthread%2F26474-der-c64-in-film-und-fernsehen%2F", + "exampleResult": "http://www.archive.org/details/CC517_commodore_64", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?forum64\\.de\\/wcf\\/index\\.php\\?sc-dereferer\\/&encode=0&target=(.+)&source", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Exactag", + "exampleUrl": "https://m.exactag.com/cl.aspx?extProvId=81&extPu=docm-idealo&extLi=psm-nonmed&extCr=00826616&url=https%3A%2F%2Fwww.docmorris.de%2Fneoangin-halstabletten-zuckerfrei%2F00826616?from=5W581&wt_mc=psm.psm_non-med.idealo.preisvergleich.", + "exampleResult": "https://www.docmorris.de/neoangin-halstabletten-zuckerfrei/00826616", + "error": null, + "includePattern": "https?:\\/\\/(?:m\\.)exactag\\.com\\/cl\\.aspx\\?extProvId=(?:[0-9]+)&extPu=(?:[a-zA-z-]+)&extLi=(?:[a-zA-z-]+)&extCr=(?:[0-9]+)&url=(.+)\\?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Platelets Fun Mirror", + "exampleUrl": "http://platelets.fun", + "exampleResult": "https://code.ponywave.de/workspace/test/cell/index.html", + "error": null, + "includePattern": "https?:\\/\\/platelets\\.fun", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/cell/index.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "TV Spielfilm \"Meine Sender\"", + "exampleUrl": "https://my.tvspielfilm.de/tv-programm/sendungen/jetzt.html", + "exampleResult": "https://my.tvspielfilm.de/tv-programm/sendungen/?page=1&order=channel&time=now&channel=g%3Auser", + "error": null, + "includePattern": "https?:\\/\\/my\\.tvspielfilm\\.de\\/tv-programm\\/sendungen\\/jetzt\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://my.tvspielfilm.de/tv-programm/sendungen/?page=1&order=channel&time=now&channel=g%3Auser", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Link Blacklist", + "exampleUrl": "https://www.filecrypt.cc/pax/iox.html", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/close.php", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?(filecrypt\\.cc\\/(pax\\/iox|Create)\\.html|g2a\\.com\\/\\?(reflink|gname)|paypal\\.com\\/cgi-bin\\/webscr\\?cmd=_s-xclick&hosted_button_id=|toplist\\.raidrush\\.ws|aj1574\\.online|get3\\.adobe\\.com\\/de\\/flashplayer\\/completion\\/adm|uploaded\\.net\\/register)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/close.php", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "script" + ] + }, + { + "description": "Facebook no Mobile", + "exampleUrl": "https://m.facebook.com/story.php?story_fbid=258373738451635&id=100028370323740", + "exampleResult": "https://facebook.com/story.php?story_fbid=258373738451635&id=100028370323740", + "error": null, + "includePattern": "https?:\\/\\/m\\.facebook\\.com\\/story\\.php\\?story_fbid=([0-9]+)&id=([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://facebook.com/story.php?story_fbid=$1&id=$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Steam Linkfilter", + "exampleUrl": "https://steamcommunity.com/linkfilter/?url=https://blog.beamng.com/fourth-hotfix-for-0-17/", + "exampleResult": "https://blog.beamng.com/fourth-hotfix-for-0-17/", + "error": null, + "includePattern": "https://steamcommunity.com/linkfilter/?url=*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "WinFuture no mobi", + "exampleUrl": "https://winfuture.mobi/news/109913", + "exampleResult": "https://winfuture.de/news,109913.html", + "error": null, + "includePattern": "https?:\\/\\/winfuture\\.mobi\\/news\\/([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://winfuture.de/news,$1.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Twitter direct Statuses", + "exampleUrl": "https://twitter.com/status/1154736423393800192", + "exampleResult": "https://twitter.com/i/web/status/1154736423393800192", + "error": null, + "includePattern": "https?:\\/\\/(?:m|mobile|www)?\\.?twitter\\.com.+status(?:es)?\\/([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/i/web/status/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Nox.to > Nox.tv (Forum)", + "exampleUrl": "http://www.nox.to/forum/index.php/topic,113908.0.html", + "exampleResult": "https://forum.nox.tv/index.php?thread/113908", + "error": null, + "includePattern": "nox\\.to\\/forum\\/index\\.php\\/topic,([0-9]+)\\.[0-9]\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://forum.nox.tv/index.php?thread/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyDealz direct skip", + "exampleUrl": "https://www.mydealz.de/visit/thread/1550766", + "exampleResult": "https://code.ponywave.de/workspace/test/dealzredirect.php?link=https://www.mydealz.de/visit/thread/1550766", + "error": null, + "includePattern": "(https?:\\/\\/(:?www\\.)?(mydealz\\.de|preisjaeger\\.at)\\/visit\\/(thread(image|desc|addinfo)?|comment)\\/(([0-9]+)\\/?([0-9]+)?))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/dealzredirect.php?link=$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Google Drive direct download", + "exampleUrl": "https://drive.google.com/file/d/1_KRgyoQWbRfUlpwTwZhMOITjQPyIj7R2/view", + "exampleResult": "https://drive.google.com/uc?id=1_KRgyoQWbRfUlpwTwZhMOITjQPyIj7R2&export=download", + "error": null, + "includePattern": "https?:\\/\\/drive\\.google\\.com\\/(open\\/?\\?id=|file\\/d\\/)([A-Za-z0-9_\\-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://drive.google.com/uc?id=$2&export=download", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Aliexpress no translation", + "exampleUrl": "https://de.aliexpress.com/item/32856376200.html?spm=a2g0o.ams_82947.layer-9z66wm.3.54e7577eQMubKN&gps-id=7237617&scm=1007.19164.122182.0&scm_id=1007.19164.122182.0&scm-url=1007.19164.122182.0&pvid=4695b8d2-2481-4918-ba75-8104182bb73f", + "exampleResult": "https://aliexpress.com/item/32856376200.html", + "error": null, + "includePattern": "https?:\\/\\/([\\w\\.]+\\.)?aliexpress\\.com\\/item\\/([0-9]+)\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://aliexpress.com/item/$2.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyFigureCollection Deutsch", + "exampleUrl": "https://myfigurecollection.net/item/198386", + "exampleResult": "https://de.myfigurecollection.net/item/198386", + "error": null, + "includePattern": "https?:\\/\\/([\\w\\.]+)?myfigurecollection\\.net\\/?(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://de.myfigurecollection.net/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Sankaku no beta", + "exampleUrl": "https://beta.sankakucomplex.com/post/show/15455999?tags=hide_posts_in_books%3Anever+yagyuu_%28senran_kagura%29", + "exampleResult": "https://chan.sankakucomplex.com/post/show/15455999?tags=hide_posts_in_books%3Anever+yagyuu_%28senran_kagura%29", + "error": null, + "includePattern": "https?:\\/\\/(beta\\.sankakucomplex\\.com|sankaku\\.app)\\/?(.*)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://chan.sankakucomplex.com/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Sankaku skip \"18?\"", + "exampleUrl": "https://www.sankakucomplex.com/mature-content-disclaimer?then=https%3A%2F%2Fwww.sankakucomplex.com%2F2013%2F08%2F30%2Fto-love-ru-darkness-body-swapping-oad%2F#comments", + "exampleResult": "https://www.sankakucomplex.com/2013/08/30/to-love-ru-darkness-body-swapping-oad/", + "error": null, + "includePattern": "https?:\\/\\/www\\.sankakucomplex\\.com\\/mature-content-disclaimer\\/?\\?then=(.+)#(?:comments|respond)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Amazon Cleaner (No Smile)", + "exampleUrl": "https://www.amazon.co.jp/gp/product/B07N6BJFP8?pf_rd_p=ce2eab38-4495-4b24-90fc-38dbaedf3574&pf_rd_r=KYY75JN2HH1NM23F7NCR", + "exampleResult": "https://www.amazon.co.jp/dp/B07N6BJFP8", + "error": null, + "includePattern": "https?:\\/\\/(?:www)?\\.?amazon\\.([\\w\\.]+)\\/.*(\\/B0[0-9A-Z]+)", + "excludePattern": "amazon\\.(de|com|co\\.uk)|(gp\\/offer-listing|black-curtain-redirect\\.html|product-reviews|kindle-dbs|gp\\/bestsellers|stores\\/page|buyagain|browse\\/|gp\\/buy\\/thankyou|ask\\/questions)", + "patternDesc": "", + "redirectUrl": "https://www.amazon.$1/dp$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Amazon Smile :)", + "exampleUrl": "https://www.amazon.de/gp/product/B07W6CC27R/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=ll1&tag=akamaru-21&linkId=56ef0319ddac72ae036929428952e222&language=de_DE", + "exampleResult": "https://smile.amazon.de/dp/B07W6CC27R", + "error": null, + "includePattern": "https?:\\/\\/(?:www|smile)?\\.?amazon\\.(de|com|co\\.uk)\\/.*(\\/B0[0-9A-Z]+)", + "excludePattern": "(gp\\/offer-listing|black-curtain-redirect\\.html|product-reviews|kindle-dbs|gp\\/bestsellers|stores\\/page|buyagain|browse\\/|gp\\/buy\\/thankyou|ask\\/questions)", + "patternDesc": "", + "redirectUrl": "https://smile.amazon.$1/dp$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip awin1", + "exampleUrl": "https://www.awin1.com/cread.php?awinmid=16040&awinaffid=394187&clickref=&p=https%3A%2F%2Fwww.tvnow.de%2Fserien%2Fdie-versicherungsdetektive-218%2Fstaffel-10%2Fepisode-4-folge-4-1664525", + "exampleResult": "https://www.tvnow.de/serien/die-versicherungsdetektive-218/staffel-10/episode-4-folge-4-1664525", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?awin1\\.com\\/cread\\.php\\?awinmid=[0-9]+&awinaffid=[0-9]+&clickref=&p=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$2", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Humble remove tags", + "exampleUrl": "https://www.humblebundle.com/games/jackbox-party-2019-bundle?hmb_source=navbar&hmb_medium=product_tile&hmb_campaign=tile_index_1", + "exampleResult": "https://www.humblebundle.com/games/jackbox-party-2019-bundle", + "error": null, + "includePattern": "https?:\\/\\/www\\.humblebundle\\.com\\/(.+)\\/(.+)\\?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.humblebundle.com/$1/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX/Web.de skip \"Forget Logout\"", + "exampleUrl": "https://bap.navigator.gmx.net/remindlogout?sid=26d97c3605b4b46dd711335178b7c09fc4947576704d4163aa26b16c9bc396d62bcade77731e11a2c6a1ff28564193c6", + "exampleResult": "https://navigator.gmx.net/mail?sid=26d97c3605b4b46dd711335178b7c09fc4947576704d4163aa26b16c9bc396d62bcade77731e11a2c6a1ff28564193c6", + "error": null, + "includePattern": "https?:\\/\\/(?:bap\\.)?navigator\\.(gmx\\.net|web\\.de)\\/(?:remindlogout)?\\?sid=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://navigator.$1/mail?sid=$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX/Web.de skip outgoing link", + "exampleUrl": "https://deref-gmx.net/mail/client/p8wcBOC4P6Q/dereferrer/?redirectUrl=https%3A%2F%2Fmajormovezshop.de%2Fauftragsverfolgung-gast", + "exampleResult": "https://majormovezshop.de/auftragsverfolgung-gast", + "error": null, + "includePattern": "https?:\\/\\/(:?deref-gmx\\.net|deref-web(:?-\\d+)?\\.de)\\/mail\\/client\\/.+\\/dereferrer\\/\\?redirectUrl=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$3", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Short eBay Links", + "exampleUrl": "https://www.ebay.de/itm/Commodore-CBM-3032-funktionsfahig-ohne-OVP/163747849835?hash=item262021e66b:g:6uMAAOSwpfNdDjcl", + "exampleResult": "https://www.ebay.de/itm/163747849835?nordt=true&orig_cvip=true", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?ebay\\.[a-z.]+\\/it?m?\\/(?:.+\\/)?(\\d+)", + "excludePattern": "(\\/itm\\/preview\\/)", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/itm/$1?nordt=true&orig_cvip=true", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Short eBay Links 2", + "exampleUrl": "https://www.ebay.de/i/193691555646?chn=ps&mkevt=1&mkcid=28", + "exampleResult": "https://www.ebay.de/itm/193691555646?nordt=true&orig_cvip=true", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?ebay\\.[a-z.]+\\/i\\/(\\d+)", + "excludePattern": "(\\/itm\\/preview\\/)", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/itm/$1?nordt=true&orig_cvip=true", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Konachan direct JPG to PNG", + "exampleUrl": "https://konachan.com/jpeg/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.jpg", + "exampleResult": "https://konachan.com/image/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.png", + "error": null, + "includePattern": "https://konachan.com/jpeg/(.+).jpg", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://konachan.com/image/$1.png", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "PonyPaste", + "exampleUrl": "https://ponywave.de/PonyPaste/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "exampleResult": "https://ponypaste.de/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "error": null, + "includePattern": "https://ponywave.de/PonyPaste/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://ponypaste.de/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Old Reddit", + "exampleUrl": "https://www.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "exampleResult": "https://old.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "error": null, + "includePattern": "https://www.reddit.com/*", + "excludePattern": "https://www.reddit.com/gallery/*", + "patternDesc": "", + "redirectUrl": "https://old.reddit.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "No Reddit Preview Link", + "exampleUrl": "https://preview.redd.it/j85ycjwzf1041.jpg?width=463&auto=webp&s=cda01f1c2d87be82c14b71250701c72eba19dbbf", + "exampleResult": "https://i.redd.it/j85ycjwzf1041.jpg", + "error": null, + "includePattern": "https?:\\/\\/preview\\.redd\\.it\\/(.+)\\?width=[0-9]+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://i.redd.it/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "PonyWave Bilder-Proxy", + "exampleUrl": "http://pm1.narvii.com/6433/4447eb7fd89f6a83e4824b148a0c7bf2451506c7_hq.jpg", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/img.php?url=http://pm1.narvii.com/6433/4447eb7fd89f6a83e4824b148a0c7bf2451506c7_hq.jpg", + "error": null, + "includePattern": "^(https?:\\/\\/(?:p[am]1\\.narvii\\.com|.+\\.discordapp\\.(?:com|net)\\/attachments|img\\.pr0gramm\\.com|i.4cdn\\.org|is2\\.4chan\\.org)\\/.+\\.(?:png|jpe?g|gif|bmp))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/img.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "nyaa Redirect", + "exampleUrl": "https://nyaa.si/?page=download&tid=504343", + "exampleResult": "https://nyaa.si/view/504343", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?nyaa\\.s[ei]\\/\\?page=(?:(?:download)|(?:view))&tid=(\\d+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://nyaa.si/view/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fix old Twitter links", + "exampleUrl": "https://twitter.com/#!/benni3005/status/191600397914345472", + "exampleResult": "https://twitter.com/benni3005/status/191600397914345472", + "error": null, + "includePattern": "http*://twitter.com/#!/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "7TV zu Sat.1", + "exampleUrl": "https://www.7tv.de/auf-streife/3317-nazis-belaestigen-tuerkin-ganze-folge", + "exampleResult": "https://www.sat1.de/tv/auf-streife/video/3317-nazis-belaestigen-tuerkin-ganze-folge", + "error": null, + "includePattern": "https://www.7tv.de/*/*", + "excludePattern": "https://www.sat1.de/tv/*/video/playlists", + "patternDesc": "", + "redirectUrl": "https://www.sat1.de/tv/$1/video/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Userscripts.org to Mirror", + "exampleUrl": "http://userscripts.org/scripts/show/172936", + "exampleResult": "https://userscripts-mirror.org/scripts/show/172936", + "error": null, + "includePattern": "https?:\\/\\/userscripts\\.org(?:\\:8080)?\\/(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://userscripts-mirror.org/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "sub_frame", + "stylesheet", + "script", + "image", + "object", + "xmlhttprequest", + "other" + ] + }, + { + "description": "Imgur Direktlink", + "exampleUrl": "https://imgur.com/fJKiZ6h", + "exampleResult": "https://i.imgur.com/fJKiZ6h.png", + "error": null, + "includePattern": "https?://m?.?imgur.com/(.*)", + "excludePattern": "https?:\\/\\/imgur\\.com\\/(a|gallery])\\/", + "patternDesc": "", + "redirectUrl": "https://i.imgur.com/$1.png", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Dropbox DL", + "exampleUrl": "https://www.dropbox.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip?dl=0", + "exampleResult": "https://dl.dropboxusercontent.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip", + "error": null, + "includePattern": "*.dropbox.com/*/*?dl=0", + "excludePattern": "https://dl.dropboxusercontent.com/*", + "patternDesc": "", + "redirectUrl": "https://dl.dropboxusercontent.com/$2/$3", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Twitter zu Desktop Twitter", + "exampleUrl": "https://mobile.twitter.com/gonintendotweet/status/835920024321867776", + "exampleResult": "https://twitter.com/gonintendotweet/status/835920024321867776", + "error": null, + "includePattern": "https://mobile.twitter.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Wikipedia zu Desktop Wikipedia", + "exampleUrl": "https://de.m.wikipedia.org/wiki/Wii", + "exampleResult": "https://de.wikipedia.org/wiki/Wii", + "error": null, + "includePattern": "https://(.+).m.wikipedia.org/wiki/(.*)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://$1.wikipedia.org/wiki/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Kleinanzeigen Kurzlink", + "exampleUrl": "https://www.ebay-kleinanzeigen.de/s-anzeige/wii-u-konsole-32-gb-mit-mario-kart-8/1308677475-279-2096", + "exampleResult": "https://www.ebay-kleinanzeigen.de/s-anzeige/1308677475-279-2096", + "error": null, + "includePattern": "https?:\\/\\/(:?m|www)?\\.?ebay-kleinanzeigen\\.de\\/s-anzeige\\/[A-Za-z0-9-_]+\\/([0-9-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.ebay-kleinanzeigen.de/s-anzeige/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "SakuraCircle New URL", + "exampleUrl": "http://sakuracircle.animeholics.org/overflow-04-web/", + "exampleResult": "https://sakuracircle.com//overflow-04-web/", + "error": null, + "includePattern": "https?:\\/\\/sakuracircle\\.animeholics\\.org(.+)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://sakuracircle.com/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "eBay NEIN", + "exampleUrl": "https://reg.ebay.de/reg/UpdateContactInfo?_uci=2&flow=SIGN_IN&ru=https%3A%2F%2Fmy.ebay.de%2Fws%2FeBayISAPI.dll%3FMyEbayBeta%26MyEbay%3D%26gbh%3D1%26guest%3D1", + "exampleResult": "https://my.ebay.de/ws/eBayISAPI.dll?MyEbayBeta&MyEbay=&gbh=1&guest=1", + "error": null, + "includePattern": "https?:\\/\\/reg\\.ebay\\.de\\/reg\\/UpdateContactInfo\\?_uci=2&flow=SIGN_IN&ru=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Chaturbate No-ref", + "exampleUrl": "https://chaturbate.com/in/?track=post&tour=dT8X&campaign=wXffl&room=projektmelody", + "exampleResult": "https://de.chaturbate.com/projektmelody/", + "error": null, + "includePattern": "https?:\\/\\/chaturbate\\.com\\/in\\/\\?track=post&tour=[a-zA-Z0-9]+&campaign=[a-zA-Z0-9]+&room=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://de.chaturbate.com/$1/", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "New Serienjunkies", + "exampleUrl": "http://serienjunkies.org/better-call-saul/better-call-saul-staffel-5-web-dl-720p1080p/", + "exampleResult": "https://serienjunkies.org/serie/better-call-saul", + "error": null, + "includePattern": "https?:\\/\\/serienjunkies\\.org\\/([a-z0-9-]+)\\/?", + "excludePattern": "https?:\\/\\/serienjunkies\\.org\\/(serie\\/|list\\/)", + "patternDesc": "", + "redirectUrl": "https://serienjunkies.org/serie/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "DMAX Alt>Neu", + "exampleUrl": "https://www.dmax.de/programme/112-feuerwehr-im-einsatz", + "exampleResult": "https://dmax.de/sendungen/112-feuerwehr-im-einsatz/", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?dmax\\.de\\/programme\\/([a-z0-9-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://dmax.de/sendungen/$2/", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip GoogleAdServices", + "exampleUrl": "https://www.googleadservices.com/pagead/aclk?sa=L&ai=CUPL4eqFjX6KNBMLMtwe17ZX4Ddfk0Mdd3vaw7rsL0byLzrcbCAkQASDezc8eKBRglYKAgJgHoAGWxpv-A8gBB6kCVQ-wTf_Psz6qBEVP0IBtWlVCcfwpu9M9KTcguAA22Caxvur50lxyrb6JdufzLnqO4hVkU7HqnHqBG79m0Q-lJH-NR5hdMON-Lm3IL9xE98PABMX-xd_7AsAFBaAGJoAHjqfSNogHAZAHAqgHpr4bqAfw2RuoB_LZG6gH89EbqAfu0huoB8rcG6gHwtob2AcBsAgBwAgB0ggFEAIghAKaCSJodHRwczovL3d3dy5lYmF5LmRlL2kvMTQzNjYxMDc3MjMxsQlSDKraH1tavrkJUgyq2h9bWr74CQGYCwHgEvflocnA6K-XK_AVtL_BA_oVDDE0MzY2MTA3NzIzMYEWnHOnRztQglyIFo4KuBaAo8NH6hYECNvmIA&ctype=5&ved=0ahUKEwj5hr713_DrAhV8QkEAHcTjC2UQsEMIHQ&dblrd=1&sival=AF15MEC2PttKDIwJfs8FpAnkuD0BL6nGkwVaGQmEuvkkTtPacVSOOLy7oUttpJyShmU_FPPBf_h0Sg7RiN9-W6RUUS0fJXzfnUBrOyFjw8AKHmaqIcHH2SuXmUmB2VvCmfZ7ibU_Q4SfEQTzekEdEYnoim1RWPjBGg&sig=AOD64_2IXeF2NCRJolvK4TiyI_T-XJ7ALw&adurl=https://www.ebay.de/i/143661077231%3Fchn%3Dps%26norover%3D1%26mkevt%3D1%26mkrid%3D707-134425-41852-0%26mkcid%3D2%26itemid%3D143661077231%26targetid%3D942640651857%26device%3Dc%26mktype%3Dpla%26googleloc%3D9042826%26poi%3D%26campaignid%3D10203814983%26mkgroupid%3D101937413957%26rlsatarget%3Dpla-942640651857%26abcId%3D1145992%26merchantid%3D7364532", + "exampleResult": "https://www.ebay.de/i/143661077231", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?googleadservices\\.com\\/pagead\\/.+adurl=(.+)%3F", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip GoogleAdServices (ClickServe)", + "exampleUrl": "http://clickserve.dartsearch.net/link/click%3Flid%3D92700049194322785%26ds_s_kwgid%3D58700005405802208%26ds_s_inventory_feed_id%3D97700000007033978%26ds_a_cid%3D107295541%26ds_a_caid%3D2030081720%26ds_a_agid%3D83638297667%26ds_a_fiid%3D%26ds_a_lid%3Dpla-440433889361%26%26ds_e_adid%3D392232291032%26ds_e_matchtype%3Dsearch%26ds_e_device%3Dc%26ds_e_network%3Dg%26ds_e_product_group_id%3D440433889361%26ds_e_product_id%3D2685508%26ds_e_product_merchant_id%3D136844442%26ds_e_product_country%3DDE%26ds_e_product_language%3Dde%26ds_e_product_channel%3Donline%26ds_e_product_store_id%3D%26ds_url_v%3D2%26ds_dest_url%3Dhttps://www.saturn.de/de/product/_sony-interactive-ent-gmbh-destruction-allstars-2685508.html%3Fgclsrc%3Daw.ds%26", + "exampleResult": "https://www.saturn.de/de/product/_sony-interactive-ent-gmbh-destruction-allstars-2685508.html%3Fgclsrc%3Daw.ds%26", + "error": null, + "includePattern": "https?:\\/\\/clickserve\\.dartsearch\\.net\\/link\\/.+ds_dest_url%3D(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "EGS Deutsch", + "exampleUrl": "https://www.epicgames.com/store/en-US/product/samurai-shodown-neogeo-collection/home", + "exampleResult": "https://www.epicgames.com/store/de/product/samurai-shodown-neogeo-collection/home", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?epicgames\\.com\\/store\\/en-US\\/product\\/(.+)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.epicgames.com/store/de/product/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyAnimeList", + "exampleUrl": "https://myanimelist.net/anime/30901/Utawarerumono__Itsuwari_no_Kamen", + "exampleResult": "https://myanimelist.net/anime/30901", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?myanimelist\\.net\\/(manga|anime|character)(\\/|\\.php\\?id=)?([0-9]+)", + "excludePattern": "https?:\\/\\/(:?www\\.)?myanimelist\\.net\\/(manga|anime|character)\\/([0-9]+)\\/.+\\/([a-z]+)", + "patternDesc": "", + "redirectUrl": "https://myanimelist.net/$2/$4", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "aniSearch Short-Link", + "exampleUrl": "https://www.anisearch.de/anime/13491,gekijouban-soushuuhen-made-in-abyss", + "exampleResult": "https://www.anisearch.de/anime/13491", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?anisearch\\.de\\/anime\\/([0-9]+)", + "excludePattern": "https?:\\/\\/(:?www\\.)?anisearch\\.de\\/anime\\/([0-9]+),.+(\\/[a-z]+)", + "patternDesc": "", + "redirectUrl": "https://www.anisearch.de/anime/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Google no Text marker", + "exampleUrl": "https://de.wikipedia.org/wiki/Carrier_Sense_Multiple_Access/Collision_Detection#:~:text=Der%20englische%20Begriff%20Carrier%20Sense,Computer%20samt%20ihren%20Netzwerkanschl%C3%BCssen)%20auf", + "exampleResult": "https://de.wikipedia.org/wiki/Carrier_Sense_Multiple_Access/Collision_Detection", + "error": null, + "includePattern": "(https?:\\/\\/.+)#:~:text=", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX Fuck you", + "exampleUrl": "https://www.gmx.net/consent-management/", + "exampleResult": "https://gmx.net", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?(gmx\\.net|web\\.de)\\/consent-management\\/?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "eBay 1", + "exampleUrl": "http://www.ebay.de/sch/i.html?LH_Auction=1&_dmd=1&_sacat=1249&LH_LocatedIn=77&_sop=1", + "exampleResult": "https://www.ebay.de/sch/PC-Videospiele/1249/i.html?_fosrp=1&_from=R40&_nkw=&_in_kw=1&_ex_kw=&_sacat=1249&_udlo=&_udhi=&LH_Time=1&_ftrt=901&_ftrv=12&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_sadis=10&_fpos=&LH_SubLocation=1&_sargn=-1%26saslc%3D0&_fsradio2=%26LH_LocatedIn%3D1&_salic=77&_saact=77&LH_SALE_CURRENCY=0&_fss=1&_fsradio=%26LH_SpecificSeller%3D1&_saslop=2&_sasl=2405bayern&_sop=1&_dmd=1&_ipg=200", + "error": null, + "includePattern": "https?:\\/\\/www\\.ebay\\.de\\/sch\\/i\\.html\\?LH_Auction=1&_dmd=1&_sacat=1249&LH_LocatedIn=77&_sop=1", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/sch/PC-Videospiele/1249/i.html?_fosrp=1&_from=R40&_nkw=&_in_kw=1&_ex_kw=&_sacat=1249&_udlo=&_udhi=&LH_Time=1&_ftrt=901&_ftrv=12&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_sadis=10&_fpos=&LH_SubLocation=1&_sargn=-1%26saslc%3D0&_fsradio2=%26LH_LocatedIn%3D1&_salic=77&_saact=77&LH_SALE_CURRENCY=0&_fss=1&_fsradio=%26LH_SpecificSeller%3D1&_saslop=2&_sasl=2405bayern&_sop=1&_dmd=1&_ipg=200", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Google Redirect", + "exampleUrl": "https://www.google.com/url?q=https://parcelsapp.com/de/tracking/CNCAI2021011710151848&sa=D&ust=1612015819627000&usg=AFQjCNHPYGZwEW4k8ZUM5Fz2-m0BVbUAlA", + "exampleResult": "https://parcelsapp.com/de/tracking/CNCAI2021011710151848", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?google\\.com\\/url\\?q=(.+)&sa", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fuck YouTube Age Restriction", + "exampleUrl": "https://myaccount.google.com/age-verification?utm_source=YT_WEB&utm_medium=watch_link&utm_campaign=watch_verify_prompt&continue=https://youtube.com/watch?v%3DoGTydcxc5Pg%26pp%3DQADoAwE%253D https://www.youtube.com/watch?v=oGTydcxc5Pg", + "exampleResult": "https://invidious.kavin.rocks/watch?v=oGTydcxc5Pg", + "error": null, + "includePattern": "https?:\\/\\/myaccount\\.google\\.com\\/age-verification\\?utm_source=YT_WEB&utm_medium=watch_link&utm_campaign=watch_verify_prompt&continue=https?:\\/\\/youtube\\.com\\/watch\\?v%3D([A-Za-z0-9_\\-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://invidious.kavin.rocks/watch?v=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Remove Shortpixel", + "exampleUrl": "https://cdn.shortpixel.ai/client/to_webp,q_glossy,ret_img/https://dragon-subs.de/wp-content/uploads/2020/09/The-Kings-Avatar-2020-Premiere-Trailer-September-25th-Added-English-subtitles-Falupst9CcU.mp4_00h00m38.922s_0001-300x200.jpg", + "exampleResult": "https://dragon-subs.de/wp-content/uploads/2020/09/The-Kings-Avatar-2020-Premiere-Trailer-September-25th-Added-English-subtitles-Falupst9CcU.mp4_00h00m38.922s_0001-300x200.jpg", + "error": null, + "includePattern": "https:\\/\\/cdn\\.shortpixel\\.ai\\/client\\/to_webp,q_glossy,ret_img\\/(.*)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "DHL direkt", + "exampleUrl": "http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=00340434462626148472", + "exampleResult": "https://www.dhl.de/de/privatkunden.html?piececode=00340434462626148472", + "error": null, + "includePattern": "https?:\\/\\/nolp\\.dhl\\.de\\/nextt-online-public\\/set_identcodes\\.do\\?lang=de&idc=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.dhl.de/de/privatkunden.html?piececode=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "ReviewMeta DE", + "exampleUrl": "https://reviewmeta.com/amazon-de/B00BEH0ASA?utm_source=extension&utm_content=chrome_v2.4", + "exampleResult": "https://reviewmeta.com/de/amazon-de/B00BEH0ASA", + "error": null, + "includePattern": "https?:\\/\\/reviewmeta\\.com\\/(amazon-[a-z]+\\/[A-Z0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://reviewmeta.com/de/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + } + ] +} \ No newline at end of file diff --git a/Redirector/Redirector_2022.04.15.json b/Redirector/Redirector_2022.04.15.json new file mode 100644 index 0000000..a170cfe --- /dev/null +++ b/Redirector/Redirector_2022.04.15.json @@ -0,0 +1,1243 @@ +{ + "createdBy": "Redirector v3.5.3", + "createdAt": "2022-04-15T20:03:42.177Z", + "redirects": [ + { + "description": "Google Search no tags", + "exampleUrl": "https://www.google.com/search?sxsrf=ACYBGNRSUH0BO4CvglFADP9ireMXO5QWNA%3A1578494792609&ei=SOsVXuDpJJC9gQa7ka6YAw&q=akamaru.de&oq=akamaru.de&gs_l=psy-ab.3..0i30l6j0i8i30l4.14786.17556..18142...1.0..0.84.546.7......0....1..gws-wiz.......35i39j0j0i10j0i20i263j0i10i203.GJaDBTNbIQM&ved=0ahUKEwjgrZKrn_TmAhWQXsAKHbuICzMQ4dUDCAs&uact=5", + "exampleResult": "https://www.google.com/search?q=akamaru.de", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?google\\.com\\/search\\?(:?.+)?q=(.+)&oq=", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.google.com/search?q=$3", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip YouTube Redirect", + "exampleUrl": "https://www.youtube.com/redirect?q=https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1Wm9OWQS3wL9pgd9uJatNIql_HaDGxR5X%2Fview%3Fusp%3Dsharing&event=video_description&v=kfxcWEKHkIw&redir_token=OS2ifIE6Hihpv_Wkkyt5Mv9PQcR8MTU3NjQ0MDE4M0AxNTc2MzUzNzgz", + "exampleResult": "https://drive.google.com/file/d/1Wm9OWQS3wL9pgd9uJatNIql_HaDGxR5X/view?usp=sharing", + "error": null, + "includePattern": "https?:\\/\\/www\\.youtube\\.com\\/redirect\\?q=(.+)&event=video_description", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Idealo-Ref", + "exampleUrl": "http://marketing.net.idealo-partner.com/ts/i5626864/tsc?amc=pricecomp.idealo.210455.220402.111203.1&smc2=NcxotFmOn3wABPI1xgqJVg&smc3=25375&smc4=183934&smc5=idealo&rmd=3&trg=https%3A%2F%2Fwww.mytime.de%2Fproduct.php%3FMerchantID%3Dpsmido%26product_sku%3D4502084338%26campaign%3Dfeed%252Fde%252F10242%252Fidealo%252F4502084338%26utm_source%3Didealo%26utm_medium%3Dpsm%26utm_campaign%3Dpsm_idealo", + "exampleResult": "https://www.mytime.de/product.php?MerchantID=psmido&product_sku=4502084338", + "error": null, + "includePattern": "https?:\\/\\/marketing\\.net\\.idealo-partner\\.com\\/.+&trg=(.+)%26campaign.+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip tradedoubler", + "exampleUrl": "https://clkde.tradedoubler.com/click?p=299827&a=1352022&g=24686026", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/tradedoublerredir.php?url=https://clkde.tradedoubler.com/click?p=299827&a=1352022&g=24686026", + "error": null, + "includePattern": "(https?:\\/\\/clkde\\.tradedoubler\\.com\\/click.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/tradedoublerredir.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Disqus ref", + "exampleUrl": "https://disq.us/?url=https%3A%2F%2Fakamaru.de%2Fdie-geschichte-von-the-homebrew-cloud%2F&key=4cW3zzSMbhM4pdcOKKMJ4Q", + "exampleResult": "https://akamaru.de/die-geschichte-von-the-homebrew-cloud/", + "error": null, + "includePattern": "https?:\\/\\/disq\\.us\\/\\?url=(.+)&key=.+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip ampproject", + "exampleUrl": "https://www-t--online-de.cdn.ampproject.org/c/s/www.t-online.de/unterhaltung/tv/id_86863096/tid_amp/-wer-weiss-denn-sowas-die-500-sendung-das-ist-das-erfolgsgeheimnis-.html", + "exampleResult": "www.t-online.de/unterhaltung/tv/id_86863096", + "error": null, + "includePattern": "https?:\\/\\/(:?[a-z-_.]+)\\/(:?c\\/s\\/(.+)\\/tid_amp|v\\/s\\/.+ampshare=(.+))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$3$4", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Forum64 skip leave Forum", + "exampleUrl": "https://www.forum64.de/wcf/index.php?sc-dereferer/&encode=0&target=http%3A%2F%2Fwww.archive.org%2Fdetails%2FCC517_commodore_64&source=https%3A%2F%2Fwww.forum64.de%2Findex.php%3Fthread%2F26474-der-c64-in-film-und-fernsehen%2F", + "exampleResult": "http://www.archive.org/details/CC517_commodore_64", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?forum64\\.de\\/wcf\\/index\\.php\\?sc-dereferer\\/&encode=0&target=(.+)&source", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Exactag", + "exampleUrl": "https://m.exactag.com/cl.aspx?extProvId=81&extPu=docm-idealo&extLi=psm-nonmed&extCr=00826616&url=https%3A%2F%2Fwww.docmorris.de%2Fneoangin-halstabletten-zuckerfrei%2F00826616?from=5W581&wt_mc=psm.psm_non-med.idealo.preisvergleich.", + "exampleResult": "https://www.docmorris.de/neoangin-halstabletten-zuckerfrei/00826616", + "error": null, + "includePattern": "https?:\\/\\/(?:m\\.)exactag\\.com\\/cl\\.aspx\\?extProvId=(?:[0-9]+)&extPu=(?:[a-zA-z-]+)&extLi=(?:[a-zA-z-]+)&extCr=(?:[0-9]+)&url=(.+)\\?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Platelets Fun Mirror", + "exampleUrl": "http://platelets.fun", + "exampleResult": "https://code.ponywave.de/workspace/test/cell/index.html", + "error": null, + "includePattern": "https?:\\/\\/platelets\\.fun", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/cell/index.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "TV Spielfilm \"Meine Sender\"", + "exampleUrl": "https://my.tvspielfilm.de/tv-programm/sendungen/jetzt.html", + "exampleResult": "https://my.tvspielfilm.de/tv-programm/sendungen/?page=1&order=channel&time=now&channel=g%3Auser", + "error": null, + "includePattern": "https?:\\/\\/my\\.tvspielfilm\\.de\\/tv-programm\\/sendungen\\/jetzt\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://my.tvspielfilm.de/tv-programm/sendungen/?page=1&order=channel&time=now&channel=g%3Auser", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Link Blacklist", + "exampleUrl": "https://www.filecrypt.cc/pax/iox.html", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/close.php", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?(filecrypt\\.cc\\/(pax\\/iox|Create)\\.html|g2a\\.com\\/\\?(reflink|gname)|paypal\\.com\\/cgi-bin\\/webscr\\?cmd=_s-xclick&hosted_button_id=|toplist\\.raidrush\\.ws|aj1574\\.online|get3\\.adobe\\.com\\/de\\/flashplayer\\/completion\\/adm|uploaded\\.net\\/register)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/close.php", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "script" + ] + }, + { + "description": "Facebook no Mobile", + "exampleUrl": "https://m.facebook.com/story.php?story_fbid=258373738451635&id=100028370323740", + "exampleResult": "https://facebook.com/story.php?story_fbid=258373738451635&id=100028370323740", + "error": null, + "includePattern": "https?:\\/\\/m\\.facebook\\.com\\/story\\.php\\?story_fbid=([0-9]+)&id=([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://facebook.com/story.php?story_fbid=$1&id=$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Steam Linkfilter", + "exampleUrl": "https://steamcommunity.com/linkfilter/?url=https://blog.beamng.com/fourth-hotfix-for-0-17/", + "exampleResult": "https://blog.beamng.com/fourth-hotfix-for-0-17/", + "error": null, + "includePattern": "https://steamcommunity.com/linkfilter/?url=*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "WinFuture no mobi", + "exampleUrl": "https://winfuture.mobi/news/109913", + "exampleResult": "https://winfuture.de/news,109913.html", + "error": null, + "includePattern": "https?:\\/\\/winfuture\\.mobi\\/news\\/([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://winfuture.de/news,$1.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Twitter direct Statuses", + "exampleUrl": "https://twitter.com/status/1154736423393800192", + "exampleResult": "https://twitter.com/i/web/status/1154736423393800192", + "error": null, + "includePattern": "https?:\\/\\/(?:m|mobile|www)?\\.?twitter\\.com.+status(?:es)?\\/([0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/i/web/status/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Nox.to > Nox.tv (Forum)", + "exampleUrl": "http://www.nox.to/forum/index.php/topic,113908.0.html", + "exampleResult": "https://forum.nox.tv/index.php?thread/113908", + "error": null, + "includePattern": "nox\\.to\\/forum\\/index\\.php\\/topic,([0-9]+)\\.[0-9]\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://forum.nox.tv/index.php?thread/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyDealz direct skip", + "exampleUrl": "https://www.mydealz.de/visit/thread/1550766", + "exampleResult": "https://code.ponywave.de/workspace/test/dealzredirect.php?link=https://www.mydealz.de/visit/thread/1550766", + "error": null, + "includePattern": "(https?:\\/\\/(:?www\\.)?(mydealz\\.de|preisjaeger\\.at)\\/visit\\/(thread(image|desc|addinfo)?|comment)\\/(([0-9]+)\\/?([0-9]+)?))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/dealzredirect.php?link=$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Google Drive direct download", + "exampleUrl": "https://drive.google.com/file/d/1_KRgyoQWbRfUlpwTwZhMOITjQPyIj7R2/view", + "exampleResult": "https://drive.google.com/uc?id=1_KRgyoQWbRfUlpwTwZhMOITjQPyIj7R2&export=download", + "error": null, + "includePattern": "https?:\\/\\/drive\\.google\\.com\\/(open\\/?\\?id=|file\\/d\\/)([A-Za-z0-9_\\-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://drive.google.com/uc?id=$2&export=download", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Aliexpress no translation", + "exampleUrl": "https://de.aliexpress.com/item/32856376200.html?spm=a2g0o.ams_82947.layer-9z66wm.3.54e7577eQMubKN&gps-id=7237617&scm=1007.19164.122182.0&scm_id=1007.19164.122182.0&scm-url=1007.19164.122182.0&pvid=4695b8d2-2481-4918-ba75-8104182bb73f", + "exampleResult": "https://aliexpress.com/item/32856376200.html", + "error": null, + "includePattern": "https?:\\/\\/([\\w\\.]+\\.)?aliexpress\\.com\\/item\\/([0-9]+)\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://aliexpress.com/item/$2.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyFigureCollection Deutsch", + "exampleUrl": "https://myfigurecollection.net/item/198386", + "exampleResult": "https://de.myfigurecollection.net/item/198386", + "error": null, + "includePattern": "https?:\\/\\/([\\w\\.]+)?myfigurecollection\\.net\\/?(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://de.myfigurecollection.net/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Sankaku no beta", + "exampleUrl": "https://beta.sankakucomplex.com/post/show/15455999?tags=hide_posts_in_books%3Anever+yagyuu_%28senran_kagura%29", + "exampleResult": "https://chan.sankakucomplex.com/post/show/15455999?tags=hide_posts_in_books%3Anever+yagyuu_%28senran_kagura%29", + "error": null, + "includePattern": "https?:\\/\\/(beta\\.sankakucomplex\\.com|sankaku\\.app)\\/?(.*)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://chan.sankakucomplex.com/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Sankaku skip \"18?\"", + "exampleUrl": "https://www.sankakucomplex.com/mature-content-disclaimer?then=https%3A%2F%2Fwww.sankakucomplex.com%2F2013%2F08%2F30%2Fto-love-ru-darkness-body-swapping-oad%2F#comments", + "exampleResult": "https://www.sankakucomplex.com/2013/08/30/to-love-ru-darkness-body-swapping-oad/", + "error": null, + "includePattern": "https?:\\/\\/www\\.sankakucomplex\\.com\\/mature-content-disclaimer\\/?\\?then=(.+)#(?:comments|respond)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Amazon Cleaner (No Smile)", + "exampleUrl": "https://www.amazon.co.jp/gp/product/B07N6BJFP8?pf_rd_p=ce2eab38-4495-4b24-90fc-38dbaedf3574&pf_rd_r=KYY75JN2HH1NM23F7NCR", + "exampleResult": "https://www.amazon.co.jp/dp/B07N6BJFP8", + "error": null, + "includePattern": "https?:\\/\\/(?:www)?\\.?amazon\\.([\\w\\.]+)\\/.*(\\/B0[0-9A-Z]+)", + "excludePattern": "amazon\\.(de|com|co\\.uk)|(gp\\/offer-listing|black-curtain-redirect\\.html|product-reviews|kindle-dbs|gp\\/bestsellers|stores\\/page|buyagain|browse\\/|gp\\/buy\\/thankyou|ask\\/questions)", + "patternDesc": "", + "redirectUrl": "https://www.amazon.$1/dp$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Amazon Smile :)", + "exampleUrl": "https://www.amazon.de/gp/product/B07W6CC27R/ref=as_li_ss_tl?ie=UTF8&psc=1&linkCode=ll1&tag=akamaru-21&linkId=56ef0319ddac72ae036929428952e222&language=de_DE", + "exampleResult": "https://smile.amazon.de/dp/B07W6CC27R", + "error": null, + "includePattern": "https?:\\/\\/(?:www|smile)?\\.?amazon\\.(de|com|co\\.uk)\\/.*(\\/B0[0-9A-Z]+)", + "excludePattern": "(gp\\/offer-listing|black-curtain-redirect\\.html|product-reviews|kindle-dbs|gp\\/bestsellers|stores\\/page|buyagain|browse\\/|gp\\/buy\\/thankyou|ask\\/questions)", + "patternDesc": "", + "redirectUrl": "https://smile.amazon.$1/dp$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip awin1", + "exampleUrl": "https://www.awin1.com/cread.php?awinmid=16040&awinaffid=394187&clickref=&p=%5B%5Bhttps%253A%252F%252Fwww.tvnow.de%252Fserien%252F112-sie-retten-dein-leben-17722%252Fstaffel-1%252Fepisode-7-folge-7-1638769%5D%5D", + "exampleResult": "https://www.tvnow.de/serien/112-sie-retten-dein-leben-17722/staffel-1/episode-7-folge-7-1638769", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?awin1\\.com\\/cread\\.php\\?awinmid=[0-9]+&awinaffid=[0-9]+&clickref=(.+)?&(p|ued)=%5B%5B(.+)%5D%5D", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$4", + "patternType": "R", + "processMatches": "doubleUrlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Humble remove tags", + "exampleUrl": "https://www.humblebundle.com/games/jackbox-party-2019-bundle?hmb_source=navbar&hmb_medium=product_tile&hmb_campaign=tile_index_1", + "exampleResult": "https://www.humblebundle.com/games/jackbox-party-2019-bundle", + "error": null, + "includePattern": "https?:\\/\\/www\\.humblebundle\\.com\\/(.+)\\/(.+)\\?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.humblebundle.com/$1/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX/Web.de skip \"Forget Logout\"", + "exampleUrl": "https://bap.navigator.gmx.net/remindlogout?sid=26d97c3605b4b46dd711335178b7c09fc4947576704d4163aa26b16c9bc396d62bcade77731e11a2c6a1ff28564193c6", + "exampleResult": "https://navigator.gmx.net/mail?sid=26d97c3605b4b46dd711335178b7c09fc4947576704d4163aa26b16c9bc396d62bcade77731e11a2c6a1ff28564193c6", + "error": null, + "includePattern": "https?:\\/\\/(?:bap\\.)?navigator\\.(gmx\\.net|web\\.de)\\/(?:remindlogout)?\\?sid=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://navigator.$1/mail?sid=$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX/Web.de skip outgoing link", + "exampleUrl": "https://deref-gmx.net/mail/client/p8wcBOC4P6Q/dereferrer/?redirectUrl=https%3A%2F%2Fmajormovezshop.de%2Fauftragsverfolgung-gast", + "exampleResult": "https://majormovezshop.de/auftragsverfolgung-gast", + "error": null, + "includePattern": "https?:\\/\\/(:?deref-gmx\\.net|deref-web(:?-\\d+)?\\.de)\\/mail\\/client\\/.+\\/dereferrer\\/\\?redirectUrl=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$3", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Short eBay Links", + "exampleUrl": "https://www.ebay.de/itm/Commodore-CBM-3032-funktionsfahig-ohne-OVP/163747849835?hash=item262021e66b:g:6uMAAOSwpfNdDjcl", + "exampleResult": "https://www.ebay.de/itm/163747849835?nordt=true&orig_cvip=true", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?ebay\\.[a-z.]+\\/it?m?\\/(?:.+\\/)?(\\d+)", + "excludePattern": "(\\/itm\\/preview\\/)", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/itm/$1?nordt=true&orig_cvip=true", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Short eBay Links 2", + "exampleUrl": "https://www.ebay.de/i/193691555646?chn=ps&mkevt=1&mkcid=28", + "exampleResult": "https://www.ebay.de/itm/193691555646?nordt=true&orig_cvip=true", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?ebay\\.[a-z.]+\\/i\\/(\\d+)", + "excludePattern": "(\\/itm\\/preview\\/)", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/itm/$1?nordt=true&orig_cvip=true", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Konachan direct JPG to PNG", + "exampleUrl": "https://konachan.com/jpeg/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.jpg", + "exampleResult": "https://konachan.com/image/281a642eb4a403c28a28f78f575810d4/Konachan.com%20-%20196792%20ass%20bikini%20erect_nipples%20kisaragi_alice%20long_hair%20original%20over_drive%20pink_hair%20swimsuit%20twintails%20wave_ride.png", + "error": null, + "includePattern": "https://konachan.com/jpeg/(.+).jpg", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://konachan.com/image/$1.png", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "PonyPaste", + "exampleUrl": "https://ponywave.de/PonyPaste/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "exampleResult": "https://ponypaste.de/?d915d60d02fa9092#B0VPoA0EqthdCFu/X3D5R3j7Ev+m95NtMFrZ6/jPxSA=", + "error": null, + "includePattern": "https://ponywave.de/PonyPaste/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://ponypaste.de/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Old Reddit", + "exampleUrl": "https://www.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "exampleResult": "https://old.reddit.com/r/PS4/comments/9r3sar/one_of_the_employees_of_marvelous_games_creators/", + "error": null, + "includePattern": "https://www.reddit.com/*", + "excludePattern": "https://www.reddit.com/gallery/*", + "patternDesc": "", + "redirectUrl": "https://old.reddit.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "No Reddit Preview Link", + "exampleUrl": "https://preview.redd.it/j85ycjwzf1041.jpg?width=463&auto=webp&s=cda01f1c2d87be82c14b71250701c72eba19dbbf", + "exampleResult": "https://i.redd.it/j85ycjwzf1041.jpg", + "error": null, + "includePattern": "https?:\\/\\/preview\\.redd\\.it\\/(.+)\\?width=[0-9]+", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://i.redd.it/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "PonyWave Bilder-Proxy", + "exampleUrl": "http://pm1.narvii.com/6433/4447eb7fd89f6a83e4824b148a0c7bf2451506c7_hq.jpg", + "exampleResult": "https://code.ponywave.de/workspace/test/fuck/img.php?url=http://pm1.narvii.com/6433/4447eb7fd89f6a83e4824b148a0c7bf2451506c7_hq.jpg", + "error": null, + "includePattern": "^(https?:\\/\\/(?:p[am]1\\.narvii\\.com|.+\\.discordapp\\.(?:com|net)\\/(?:emojis|attachments)|img\\.pr0gramm\\.com|i.4cdn\\.org|is2\\.4chan\\.org|bilder\\.bild\\.de)\\/.+\\.(?:png|jpe?g|gif|bmp))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://code.ponywave.de/workspace/test/fuck/img.php?url=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "Japan Bilder-Proxy", + "exampleUrl": "https://auctions.c.yimg.jp/images.auctions.yahoo.co.jp/image/dr000/auc0304/users/9706af5e4f5d4214391e7baffc25306c5ccdb99f/i-img1198x898-1649582644ntqqyb127465.jpg", + "exampleResult": "https://image.fromjapan.co.jp/image.php?path=https://auctions.c.yimg.jp/images.auctions.yahoo.co.jp/image/dr000/auc0304/users/9706af5e4f5d4214391e7baffc25306c5ccdb99f/i-img1198x898-1649582644ntqqyb127465.jpg", + "error": null, + "includePattern": "^(https?:\\/\\/(?:auctions\\.c\\.yimg\\.jp)\\/.+\\.(?:png|jpe?g|gif))", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://image.fromjapan.co.jp/image.php?path=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "nyaa Redirect", + "exampleUrl": "https://nyaa.si/?page=download&tid=504343", + "exampleResult": "https://nyaa.si/view/504343", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?nyaa\\.s[ei]\\/\\?page=(?:(?:download)|(?:view))&tid=(\\d+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://nyaa.si/view/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fix old Twitter links", + "exampleUrl": "https://twitter.com/#!/benni3005/status/191600397914345472", + "exampleResult": "https://twitter.com/benni3005/status/191600397914345472", + "error": null, + "includePattern": "http*://twitter.com/#!/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "7TV zu Sat.1", + "exampleUrl": "https://www.7tv.de/auf-streife/3317-nazis-belaestigen-tuerkin-ganze-folge", + "exampleResult": "https://www.sat1.de/tv/auf-streife/video/3317-nazis-belaestigen-tuerkin-ganze-folge", + "error": null, + "includePattern": "https://www.7tv.de/*/*", + "excludePattern": "https://www.sat1.de/tv/*/video/playlists", + "patternDesc": "", + "redirectUrl": "https://www.sat1.de/tv/$1/video/$2", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Userscripts.org to Mirror", + "exampleUrl": "http://userscripts.org/scripts/show/172936", + "exampleResult": "https://userscripts-mirror.org/scripts/show/172936", + "error": null, + "includePattern": "https?:\\/\\/userscripts\\.org(?:\\:8080)?\\/(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://userscripts-mirror.org/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "sub_frame", + "stylesheet", + "script", + "image", + "object", + "xmlhttprequest", + "other" + ] + }, + { + "description": "Imgur Direktlink", + "exampleUrl": "https://imgur.com/fJKiZ6h", + "exampleResult": "https://i.imgur.com/fJKiZ6h.png", + "error": null, + "includePattern": "https?://m?.?imgur.com/(.*)", + "excludePattern": "https?:\\/\\/imgur\\.com\\/(a|gallery])\\/", + "patternDesc": "", + "redirectUrl": "https://i.imgur.com/$1.png", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": true, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Dropbox DL", + "exampleUrl": "https://www.dropbox.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip?dl=0", + "exampleResult": "https://dl.dropboxusercontent.com/s/cc10m54o89bc8gy/nyan_cat_cia.zip", + "error": null, + "includePattern": "*.dropbox.com/*/*?dl=0", + "excludePattern": "https://dl.dropboxusercontent.com/*", + "patternDesc": "", + "redirectUrl": "https://dl.dropboxusercontent.com/$2/$3", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Twitter zu Desktop Twitter", + "exampleUrl": "https://mobile.twitter.com/gonintendotweet/status/835920024321867776", + "exampleResult": "https://twitter.com/gonintendotweet/status/835920024321867776", + "error": null, + "includePattern": "https://mobile.twitter.com/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://twitter.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Mobile Wikipedia zu Desktop Wikipedia", + "exampleUrl": "https://de.m.wikipedia.org/wiki/Wii", + "exampleResult": "https://de.wikipedia.org/wiki/Wii", + "error": null, + "includePattern": "https://(.+).m.wikipedia.org/wiki/(.*)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://$1.wikipedia.org/wiki/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Kleinanzeigen Kurzlink", + "exampleUrl": "https://www.ebay-kleinanzeigen.de/s-anzeige/wii-u-konsole-32-gb-mit-mario-kart-8/1308677475-279-2096", + "exampleResult": "https://www.ebay-kleinanzeigen.de/s-anzeige/1308677475-279-2096", + "error": null, + "includePattern": "https?:\\/\\/(:?m|www)?\\.?ebay-kleinanzeigen\\.de\\/s-anzeige\\/[A-Za-z0-9-_]+\\/([0-9-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.ebay-kleinanzeigen.de/s-anzeige/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "SakuraCircle New URL", + "exampleUrl": "http://sakuracircle.animeholics.org/overflow-04-web/", + "exampleResult": "https://sakuracircle.com//overflow-04-web/", + "error": null, + "includePattern": "https?:\\/\\/sakuracircle\\.animeholics\\.org(.+)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://sakuracircle.com/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "eBay NEIN", + "exampleUrl": "https://reg.ebay.de/reg/UpdateContactInfo?_uci=2&flow=SIGN_IN&ru=https%3A%2F%2Fmy.ebay.de%2Fws%2FeBayISAPI.dll%3FMyEbayBeta%26MyEbay%3D%26gbh%3D1%26guest%3D1", + "exampleResult": "https://my.ebay.de/ws/eBayISAPI.dll?MyEbayBeta&MyEbay=&gbh=1&guest=1", + "error": null, + "includePattern": "https?:\\/\\/reg\\.ebay\\.de\\/reg\\/UpdateContactInfo\\?_uci=2&flow=SIGN_IN&ru=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Chaturbate No-ref", + "exampleUrl": "https://chaturbate.com/in/?track=post&tour=dT8X&campaign=wXffl&room=projektmelody", + "exampleResult": "https://de.chaturbate.com/projektmelody/", + "error": null, + "includePattern": "https?:\\/\\/chaturbate\\.com\\/in\\/\\?track=post&tour=[a-zA-Z0-9]+&campaign=[a-zA-Z0-9]+&room=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://de.chaturbate.com/$1/", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "New Serienjunkies", + "exampleUrl": "http://serienjunkies.org/better-call-saul/better-call-saul-staffel-5-web-dl-720p1080p/", + "exampleResult": "https://serienjunkies.org/serie/better-call-saul", + "error": null, + "includePattern": "https?:\\/\\/serienjunkies\\.org\\/([a-z0-9-]+)\\/?", + "excludePattern": "https?:\\/\\/serienjunkies\\.org\\/(serie\\/|list\\/)", + "patternDesc": "", + "redirectUrl": "https://serienjunkies.org/serie/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "DMAX Alt>Neu", + "exampleUrl": "https://www.dmax.de/programme/112-feuerwehr-im-einsatz", + "exampleResult": "https://dmax.de/sendungen/112-feuerwehr-im-einsatz/", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?dmax\\.de\\/programme\\/([a-z0-9-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://dmax.de/sendungen/$2/", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip GoogleAdServices", + "exampleUrl": "https://www.googleadservices.com/pagead/aclk?sa=L&ai=CUPL4eqFjX6KNBMLMtwe17ZX4Ddfk0Mdd3vaw7rsL0byLzrcbCAkQASDezc8eKBRglYKAgJgHoAGWxpv-A8gBB6kCVQ-wTf_Psz6qBEVP0IBtWlVCcfwpu9M9KTcguAA22Caxvur50lxyrb6JdufzLnqO4hVkU7HqnHqBG79m0Q-lJH-NR5hdMON-Lm3IL9xE98PABMX-xd_7AsAFBaAGJoAHjqfSNogHAZAHAqgHpr4bqAfw2RuoB_LZG6gH89EbqAfu0huoB8rcG6gHwtob2AcBsAgBwAgB0ggFEAIghAKaCSJodHRwczovL3d3dy5lYmF5LmRlL2kvMTQzNjYxMDc3MjMxsQlSDKraH1tavrkJUgyq2h9bWr74CQGYCwHgEvflocnA6K-XK_AVtL_BA_oVDDE0MzY2MTA3NzIzMYEWnHOnRztQglyIFo4KuBaAo8NH6hYECNvmIA&ctype=5&ved=0ahUKEwj5hr713_DrAhV8QkEAHcTjC2UQsEMIHQ&dblrd=1&sival=AF15MEC2PttKDIwJfs8FpAnkuD0BL6nGkwVaGQmEuvkkTtPacVSOOLy7oUttpJyShmU_FPPBf_h0Sg7RiN9-W6RUUS0fJXzfnUBrOyFjw8AKHmaqIcHH2SuXmUmB2VvCmfZ7ibU_Q4SfEQTzekEdEYnoim1RWPjBGg&sig=AOD64_2IXeF2NCRJolvK4TiyI_T-XJ7ALw&adurl=https://www.ebay.de/i/143661077231%3Fchn%3Dps%26norover%3D1%26mkevt%3D1%26mkrid%3D707-134425-41852-0%26mkcid%3D2%26itemid%3D143661077231%26targetid%3D942640651857%26device%3Dc%26mktype%3Dpla%26googleloc%3D9042826%26poi%3D%26campaignid%3D10203814983%26mkgroupid%3D101937413957%26rlsatarget%3Dpla-942640651857%26abcId%3D1145992%26merchantid%3D7364532", + "exampleResult": "https://www.ebay.de/i/143661077231", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?googleadservices\\.com\\/pagead\\/.+adurl=(.+)%3F", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip GoogleAdServices (ClickServe)", + "exampleUrl": "http://clickserve.dartsearch.net/link/click%3Flid%3D92700049194322785%26ds_s_kwgid%3D58700005405802208%26ds_s_inventory_feed_id%3D97700000007033978%26ds_a_cid%3D107295541%26ds_a_caid%3D2030081720%26ds_a_agid%3D83638297667%26ds_a_fiid%3D%26ds_a_lid%3Dpla-440433889361%26%26ds_e_adid%3D392232291032%26ds_e_matchtype%3Dsearch%26ds_e_device%3Dc%26ds_e_network%3Dg%26ds_e_product_group_id%3D440433889361%26ds_e_product_id%3D2685508%26ds_e_product_merchant_id%3D136844442%26ds_e_product_country%3DDE%26ds_e_product_language%3Dde%26ds_e_product_channel%3Donline%26ds_e_product_store_id%3D%26ds_url_v%3D2%26ds_dest_url%3Dhttps://www.saturn.de/de/product/_sony-interactive-ent-gmbh-destruction-allstars-2685508.html%3Fgclsrc%3Daw.ds%26", + "exampleResult": "https://www.saturn.de/de/product/_sony-interactive-ent-gmbh-destruction-allstars-2685508.html%3Fgclsrc%3Daw.ds%26", + "error": null, + "includePattern": "https?:\\/\\/clickserve\\.dartsearch\\.net\\/link\\/.+ds_dest_url%3D(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "EGS Deutsch", + "exampleUrl": "https://store.epicgames.com/en-US/p/samurai-shodown-neogeo-collection", + "exampleResult": "https://store.epicgames.com/de/p/samurai-shodown-neogeo-collection", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.|store\\.)?epicgames\\.com\\/(store\\/)?en-US\\/p(roduct)?\\/(.+)?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://store.epicgames.com/de/p/$4", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "MyAnimeList", + "exampleUrl": "https://myanimelist.net/anime/30901/Utawarerumono__Itsuwari_no_Kamen", + "exampleResult": "https://myanimelist.net/anime/30901", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?myanimelist\\.net\\/(manga|anime|character)(\\/|\\.php\\?id=)?([0-9]+)", + "excludePattern": "https?:\\/\\/(:?www\\.)?myanimelist\\.net\\/(manga|anime|character)\\/([0-9]+)\\/.+\\/([a-z]+)", + "patternDesc": "", + "redirectUrl": "https://myanimelist.net/$2/$4", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "aniSearch Short-Link", + "exampleUrl": "https://www.anisearch.de/anime/13491,gekijouban-soushuuhen-made-in-abyss", + "exampleResult": "https://www.anisearch.de/anime/13491", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?anisearch\\.de\\/anime\\/([0-9]+)", + "excludePattern": "https?:\\/\\/(:?www\\.)?anisearch\\.de\\/anime\\/([0-9]+),.+(\\/[a-z]+)", + "patternDesc": "", + "redirectUrl": "https://www.anisearch.de/anime/$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Google no Text marker", + "exampleUrl": "https://de.wikipedia.org/wiki/Carrier_Sense_Multiple_Access/Collision_Detection#:~:text=Der%20englische%20Begriff%20Carrier%20Sense,Computer%20samt%20ihren%20Netzwerkanschl%C3%BCssen)%20auf", + "exampleResult": "https://de.wikipedia.org/wiki/Carrier_Sense_Multiple_Access/Collision_Detection", + "error": null, + "includePattern": "(https?:\\/\\/.+)#:~:text=", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "GMX Fuck you", + "exampleUrl": "https://www.gmx.net/consent-management/", + "exampleResult": "https://gmx.net", + "error": null, + "includePattern": "https?:\\/\\/(?:www\\.)?(gmx\\.net|web\\.de)\\/consent-management\\/?", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "eBay 1", + "exampleUrl": "http://www.ebay.de/sch/i.html?_dmd=1&LH_LocatedIn=77&LH_Auction=1&_sacat=1249&_sop=1", + "exampleResult": "https://www.ebay.de/sch/PC-Videospiele/1249/i.html?_fosrp=1&_from=R40&_nkw=&_in_kw=1&_ex_kw=&_sacat=1249&_udlo=&_udhi=&LH_Time=1&_ftrt=901&_ftrv=12&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_sadis=10&_fpos=&LH_SubLocation=1&_sargn=-1%26saslc%3D0&_fsradio2=%26LH_LocatedIn%3D1&_salic=77&_saact=77&LH_SALE_CURRENCY=0&_fss=1&_fsradio=%26LH_SpecificSeller%3D1&_saslop=2&_sasl=2405bayern&_sop=1&_dmd=1&_ipg=200", + "error": null, + "includePattern": "https?:\\/\\/www\\.ebay\\.de\\/sch\\/i\\.html\\?_dmd=1&LH_LocatedIn=77&LH_Auction=1&_sacat=1249&_sop=1", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.ebay.de/sch/PC-Videospiele/1249/i.html?_fosrp=1&_from=R40&_nkw=&_in_kw=1&_ex_kw=&_sacat=1249&_udlo=&_udhi=&LH_Time=1&_ftrt=901&_ftrv=12&_sabdlo=&_sabdhi=&_samilow=&_samihi=&_sadis=10&_fpos=&LH_SubLocation=1&_sargn=-1%26saslc%3D0&_fsradio2=%26LH_LocatedIn%3D1&_salic=77&_saact=77&LH_SALE_CURRENCY=0&_fss=1&_fsradio=%26LH_SpecificSeller%3D1&_saslop=2&_sasl=2405bayern&_sop=1&_dmd=1&_ipg=200", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip Google Redirect", + "exampleUrl": "https://www.google.com/url?q=https://parcelsapp.com/de/tracking/CNCAI2021011710151848&sa=D&ust=1612015819627000&usg=AFQjCNHPYGZwEW4k8ZUM5Fz2-m0BVbUAlA", + "exampleResult": "https://parcelsapp.com/de/tracking/CNCAI2021011710151848", + "error": null, + "includePattern": "https?:\\/\\/(:?www\\.)?google\\.com\\/url\\?q=(.+)&sa", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fuck YouTube Age Restriction", + "exampleUrl": "https://myaccount.google.com/age-verification?utm_source=YT_WEB&utm_medium=watch_link&utm_campaign=watch_verify_prompt&continue=https://youtube.com/watch?v%3DoGTydcxc5Pg%26pp%3DQADoAwE%253D https://www.youtube.com/watch?v=oGTydcxc5Pg", + "exampleResult": "https://invidious.kavin.rocks/watch?v=oGTydcxc5Pg", + "error": null, + "includePattern": "https?:\\/\\/myaccount\\.google\\.com\\/age-verification\\?(:?utm_source=YT_WEB&utm_medium=watch_link&utm_campaign=watch_verify_prompt&)?continue=https?:\\/\\/youtube\\.com\\/watch\\?v%3D([A-Za-z0-9_\\-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://invidious.kavin.rocks/watch?v=$2", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fuck YouTube Age Restriction 2", + "exampleUrl": "https://myaccount.google.com/age-verification?p=3&avl=1&continue=https%3A%2F%2Fyoutube.com%2Fwatch%3Fv%3DwRO0uNSECFU%26pp%3DQADoAwE%253D&utm_source=p3", + "exampleResult": "https://invidious.kavin.rocks/watch?v=wRO0uNSECFU", + "error": null, + "includePattern": "https?:\\/\\/myaccount\\.google\\.com\\/age-verification.+continue=https?%3A%2F%2Fyoutube\\.com%2Fwatch%3Fv%3D([A-Za-z0-9_\\-]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://invidious.kavin.rocks/watch?v=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Remove Shortpixel", + "exampleUrl": "https://cdn.shortpixel.ai/client/to_webp,q_glossy,ret_img/https://dragon-subs.de/wp-content/uploads/2020/09/The-Kings-Avatar-2020-Premiere-Trailer-September-25th-Added-English-subtitles-Falupst9CcU.mp4_00h00m38.922s_0001-300x200.jpg", + "exampleResult": "https://dragon-subs.de/wp-content/uploads/2020/09/The-Kings-Avatar-2020-Premiere-Trailer-September-25th-Added-English-subtitles-Falupst9CcU.mp4_00h00m38.922s_0001-300x200.jpg", + "error": null, + "includePattern": "https:\\/\\/cdn\\.shortpixel\\.ai\\/client\\/to_webp,q_glossy,ret_img\\/(.*)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "Remove Jetpack Pic Load", + "exampleUrl": "https://i2.wp.com/www.mobiflip.de/wp-content/uploads/2020/11/sony-playstation-5-ps5-controller-header.jpg?w=1600&ssl=1", + "exampleResult": "https://www.mobiflip.de/wp-content/uploads/2020/11/sony-playstation-5-ps5-controller-header.jpg", + "error": null, + "includePattern": "https?:\\/\\/i\\d+\\.wp\\.com\\/(.+\\.[jpeng]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame", + "image" + ] + }, + { + "description": "DHL direkt", + "exampleUrl": "http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=00340434462626148472", + "exampleResult": "https://www.dhl.de/de/privatkunden.html?piececode=00340434462626148472", + "error": null, + "includePattern": "https?:\\/\\/nolp\\.dhl\\.de\\/nextt-online-public\\/set_identcodes\\.do\\?lang=de&idc=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://www.dhl.de/de/privatkunden.html?piececode=$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "ReviewMeta DE", + "exampleUrl": "https://reviewmeta.com/amazon-de/B00BEH0ASA?utm_source=extension&utm_content=chrome_v2.4", + "exampleResult": "https://reviewmeta.com/de/amazon-de/B00BEH0ASA", + "error": null, + "includePattern": "https?:\\/\\/reviewmeta\\.com\\/(amazon-[a-z]+\\/[A-Z0-9]+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://reviewmeta.com/de/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Fritz!Box direct IP", + "exampleUrl": "http://fritz.box/", + "exampleResult": "http://192.168.1.1/", + "error": null, + "includePattern": "http://fritz.box/", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "http://192.168.1.1/", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Chip no ref", + "exampleUrl": "https://x.chip.de/linktrack/button/?url=https%3A%2F%2Fwww.amazon.de%2Fdp%2FB00MYYTP3S%3Ftag%3Dtestbericht_b-21&c=58a64111ad3675601225652db55c3cd1&type=text&v06=test+%26+kaufberatung&v15=cl_artikel&v34=de7f89fd&v35=textlink&v63=cl-118269&v66=https%3A%2F%2Fwww.chip.de%2Fartikel%2Fnetzwerk-switch-test-lan-verteiler-fuer-rechner-tv_118269&v99=&server=www.chip.de", + "exampleResult": "https://www.amazon.de/dp/B00MYYTP3S?tag=testbericht_b-21&c=58a64111ad3675601225652db55c3cd1&type=text&v06=test+&+kaufberatung&v15=cl_artikel&v34=de7f89fd&v35=textlink&v63=cl-118269&v66=https://www.chip.de/artikel/netzwerk-switch-test-lan-verteiler-fuer-rechner-tv_118269&v99=&server=www.chip.de", + "error": null, + "includePattern": "https?:\\/\\/x\\.chip\\.de\\/linktrack\\/button\\/\\?url=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$1", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "AniDB Short Link", + "exampleUrl": "http://anidb.info/perl-bin/animedb.pl?show=anime&aid=14678", + "exampleResult": "https://anidb.net/anime/14678", + "error": null, + "includePattern": "https?:\\/\\/anidb\\.info\\/perl-bin\\/animedb\\.pl\\?show=anime&aid=(\\d+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://anidb.net/anime/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Medium -> Scribe", + "exampleUrl": "https://medium.com/@user/post-123456abcdef", + "exampleResult": "https://scribe.rip/@user/post-123456abcdef", + "error": null, + "includePattern": ".*medium.com/(.*)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://scribe.rip/$1", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Netgames Clean URL", + "exampleUrl": "https://netgames.de/X-Box-One/XBOne-Spiele/Shooter-1042/far-cry-6-ultimate-edition-xbsx-xbone.html?refID=idealo&idealoid=2111071646413920144", + "exampleResult": "https://netgames.de/X-Box-One/XBOne-Spiele/Shooter-1042/far-cry-6-ultimate-edition-xbsx-xbone.html", + "error": null, + "includePattern": "https?:\\/\\/netgames\\.de\\/(.+)\\.html", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://netgames.de/$1.html", + "patternType": "R", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "Skip krxd.net", + "exampleUrl": "http://apiservices.krxd.net/click_tracker/track?kxconfid=rpb7gsboz&kxadvertiserid=Omni_newsletter_PanEuropean&kxcampaignid=WP21_BF21_MSW_2_3_VIP_Wend_Highlights_NB_&kxplacementid=Mixed_Mixed_eActive&kxsiteid=191388&kxadid=DE&kxcreativeid=&clk=https%3a%2f%2fde.tommy.com%2fherren-sale%3futm_source%3dnewsletter%26utm_medium%3demail%26utm_term%3dOmni_newsletter_PanEuropean_de-DE_Mixed_BlackFriday_eActive_191388_191388%26utm_campaign%3dWP21_BF21_MSW_2_3_VIP_Wend_Highlights_NB_%26cmpid%3dch%3aEmail%257Cdp%3aOmni%257Cso%3anewsletter%257Cpi%3aPanEuropean%257Ccp%3aWP21_BF21_MSW_2_3_VIP_Wend_Highlights_NB_%257Clb%3aMixed%257Cca%3aBlackFriday%257Cts%3aeActive%257Ccr%3a191388%257Cmt%3a191388%26CIN%3d28313298%26sid%3d249374667%26sfmc_id%3d249374667", + "exampleResult": "https://de.tommy.com/herren-sale?utm_source=newsletter&utm_medium=email&utm_term=Omni_newsletter_PanEuropean_de-DE_Mixed_BlackFriday_eActive_191388_191388&utm_campaign=WP21_BF21_MSW_2_3_VIP_Wend_Highlights_NB_&cmpid=ch:Email%7Cdp:Omni%7Cso:newsletter%7Cpi:PanEuropean%7Ccp:WP21_BF21_MSW_2_3_VIP_Wend_Highlights_NB_%7Clb:Mixed%7Cca:BlackFriday%7Cts:eActive%7Ccr:191388%7Cmt:191388&CIN=28313298&sid=249374667&sfmc_id=249374667", + "error": null, + "includePattern": "https?:\\/\\/apiservices\\.krxd\\.net\\/click_tracker\\/track(.+)clk=(.+)", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "$2", + "patternType": "R", + "processMatches": "urlDecode", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + }, + { + "description": "SankakuChannel original Link", + "exampleUrl": "https://chan.sankakucomplex.com/de/post/show/20462668", + "exampleResult": "https://chan.sankakucomplex.com/post/show/20462668", + "error": null, + "includePattern": "https://chan.sankakucomplex.com/de/*", + "excludePattern": "", + "patternDesc": "", + "redirectUrl": "https://chan.sankakucomplex.com/$1", + "patternType": "W", + "processMatches": "noProcessing", + "disabled": false, + "grouped": false, + "appliesTo": [ + "main_frame" + ] + } + ] +} \ No newline at end of file diff --git a/Stylus/stylus-2021-03-28.json b/Stylus/stylus-2021-03-28.json new file mode 100644 index 0000000..fd2afd1 --- /dev/null +++ b/Stylus/stylus-2021-03-28.json @@ -0,0 +1,1452 @@ +[ + { + "settings": { + "openEditInWindow": false, + "openEditInWindow.popup": false, + "windowPosition": { + "height": 568, + "left": 234, + "top": 97, + "width": 968 + }, + "show-badge": true, + "disableAll": false, + "exposeIframes": false, + "newStyleAsUsercss": false, + "styleViaXhr": false, + "patchCsp": false, + "config.autosave": true, + "popup.breadcrumbs": true, + "popup.breadcrumbs.usePath": false, + "popup.enabledFirst": true, + "popup.stylesFirst": true, + "popup.autoResort": false, + "popup.borders": false, + "popup.findStylesInline": true, + "manage.onlyEnabled": false, + "manage.onlyLocal": false, + "manage.onlyUsercss": false, + "manage.onlyEnabled.invert": false, + "manage.onlyLocal.invert": false, + "manage.onlyUsercss.invert": false, + "manage.actions.expanded": true, + "manage.backup.expanded": true, + "manage.filters.expanded": true, + "manage.newUI": false, + "manage.newUI.favicons": false, + "manage.newUI.faviconsGray": true, + "manage.newUI.targets": 3, + "manage.newUI.sort": "title,asc", + "editor.options": {}, + "editor.toc.expanded": true, + "editor.options.expanded": true, + "editor.lint.expanded": true, + "editor.lineWrapping": true, + "editor.smartIndent": true, + "editor.indentWithTabs": false, + "editor.tabSize": 4, + "editor.keyMap": "sublime", + "editor.theme": "default", + "editor.beautify": { + "end_with_newline": false, + "newline_after_open_brace": true, + "newline_before_close_brace": true, + "newline_before_open_brace": false, + "newline_between_properties": true, + "newline_between_rules": false, + "selector_separator_newline": true, + "space_around_selector_separator": true + }, + "editor.beautify.hotkey": "", + "editor.lintDelay": 300, + "editor.linter": "csslint", + "editor.lintReportDelay": 500, + "editor.matchHighlight": "token", + "editor.autoCloseBrackets": false, + "editor.autocompleteOnTyping": false, + "editor.contextDelete": true, + "editor.selectByTokens": true, + "editor.appliesToLineWidget": true, + "editor.livePreview": true, + "editor.colorpicker": true, + "editor.colorpicker.hexUppercase": false, + "editor.colorpicker.hotkey": "", + "editor.colorpicker.color": "#000000d4", + "editor.colorpicker.maxHeight": 300, + "hotkey._execute_browser_action": "", + "hotkey.openManage": "", + "hotkey.styleDisableAll": "", + "sync.enabled": "none", + "iconset": 0, + "badgeDisabled": "#8B0000", + "badgeNormal": "#006666", + "popupWidth": 246, + "updateInterval": 24 + } + }, + { + "sections": [ + { + "code": "#header {\n background: none repeat scroll 0% 0% #242424;\n border-bottom: 1px solid #050505;\n}\n \n #header .logo a {\n border-bottom: 2px solid #242424;\n}\n \n #session a, #session input, #session button {\n background: none repeat scroll 0% 0% rgba(0,0,0,0);\n }\n \n #session h2 img {\n border: 1px solid #050505;\n}\n \n body.nofooter {\n border-bottom: 1px solid #050505;\n}\n \n body {\n background: none repeat scroll 0% 0% #161616;\n}\n\n #char-count {\n border: 0px none !important;\n background: none repeat scroll 0% 0% #242424 !important; \n }\n \n html {\n background: none repeat scroll 0% 0% #101010; \n }\n\n .footer {\n background: #161616 none repeat scroll 0% 0%;\n border-top: 1px solid #050505;\n}\n\n .subject h2 a {\n color: #CCCCCC;\n }\n \n .subject .note {\n color: #CCCCCC;\n }\n \n a.tweet-screen-name {\n color: #CCCCCC;\n}\n\n\n .js #session .user-menu {\n background: none repeat scroll 0% 0% #161616;\n }\n \n .user-menu .break-before {\n border-top: 1px solid #050505;\n} \n \n input.textual, button.textual {\n border: 0px none !important;\n}\n\n .button:hover {\n color: #aaa;\n background-color: #050505;\n background-image: linear-gradient(#1a1a1a, #242424);\n border-color: #050505;\n}\n\n .button {\n color: #aaa !important;\n background-color: #050505;\n background-image: linear-gradient(#242424, #1a1a1a);\n border: 1px solid #050505;\n}\n\n .facepile li img {\n border: 1px solid #050505;\n}\n \n .tweet-image img {\n border: 1px solid #050505;\n}", + "urls": [], + "urlPrefixes": [ + "https://twitter.com/intent" + ], + "domains": [], + "regexps": [] + }, + { + "code": "/* TweetDeck */\n \n .column-header, .column-header-temp {\n color: #BBB !important;\n background-color: #242424 !important;\n border-bottom: 1px solid #060606 !important;\n}\n \n .with-column-divider-bottom {\n border-bottom: 0px solid #060606 !important;\n}\n \n .column {\n background-color: #161616 !important;\n}\n \n .app-content {\n background-color: #161616 !important;\n}\n \n .dropdown-menu [data-action] {\n color: #BBB !important;\n}\n \n .compose {\n background-color: #161616 !important;\n color: #BBB !important;\n}\n \n .app-header {\n background-color: #242424 !important;\n}\n \n.app-navigator {\n background-color: #242424 !important;\n}\n \n .column-nav-item {\n background-color: #242424 !important;\n}\n \n .list-item:hover, .list-item:active, .list-item.is-selected {\n background-color: #1B1B1B !important;\n color: #BBB !important;\n}\n \n .popover {\n background-color: #1B1B1B !important;\n}\n \n .list-item {\n color: #BBB !important;\n}\n \n .list-item-button {\n color: #BBB !important;\n background-color: #060606 !important;\n}\n \n.column-background-fill {\n background-color: #060606 !important;\n}\n\n.app-title {\n background-color: #242424;\n}\n \n .column-options .button-tray {\n background-color: #191919 !important;\n}\n.accordion-divider-t {\n border-top: 1px solid #060606 !important;\n}\n\n.column-options {\n background-color: #1B1B1B !important;\n}\n\n.facet-type {\n border-bottom: 1px solid #060606 !important;\n}\n\n.tweet-btn, .tweet-btn:active, .tweet-btn.active {\n background-color: #09181D !important;\n}\n\n.is-options-open .column-settings-link {\n background-color: #1B1B1B !important;\n border-color: #060606 #060606 -moz-use-text-color;\n}\n\n.mdl {\n background-color: #1B1B1B !important;\n}\n\n.mdl-content {\n border: 1px solid #060606 !important;\n background: none repeat scroll 0% 0% padding-box #161616!important;\n}\n\n.mdl-col-settings {\n background-color: #161616 !important;\n}\n\n.QuoteTweet {\n border: 1px solid #666 !important;\n}\n\n.QuoteTweet .tweet-content, .QuoteTweet-text a, .QuoteTweet-text a:hover, .QuoteTweet-text a:focus, .QuoteTweet-text a:active, .QuoteTweet-text .pretty-link b, .QuoteTweet-text .pretty-link b:hover, .QuoteTweet-text .pretty-link b:focus, .QuoteTweet-text .pretty-link b:active, .QuoteTweet-text .pretty-link s {\n color: #BBB !important;\n}\n\n.tweet {\n border-bottom: 0px solid #060606 !important;\n}\n\n.character-count-compose:disabled {\n background-color: transparent !important;\n}", + "urls": [], + "urlPrefixes": [ + "https://tweetdeck.twitter.com/", + "http://tweetdeck.twitter.com/" + ], + "domains": [], + "regexps": [] + }, + { + "code": "/* here you can change the loading thumb, the first one is of the nav bar, the second is of the footer */\n\n.pushstate-spinner {\n background-image: url(\"http://i570.photobucket.com/albums/ss143/stbinan/1665_zpsjgoesfr2.png\") !important;\n margin-bottom: 5px;\n }\n\n .spinner {\n background: url(\"http://i570.photobucket.com/albums/ss143/stbinan/379_zpsbepu58zc.png\") no-repeat !important;\n margin-top: 6px;\n}\n\n .tweet-form .spinner {\n background-image: url(\"http://i570.photobucket.com/albums/ss143/stbinan/329_zpslswkgcny.png\") !important;\n }\n\n .PermalinkOverlay-spinner {\n background: transparent no-repeat scroll 0px center;\n }\n\n .wtf-module.has-content {\n display: block;\n} \n \n .WhoToFollow.is-visible {\n display: block;\n}\n\n.DashboardProfileCard {\n border: 1px solid #060606 !important;\n background: none repeat scroll 0% 0% #161616 !important;\n border-radius: 6px;\n}\n\n .Trends {\n background-color: #161616 !important;\n}\n\n.module .flex-module, .dashboard .stats {\n background-color: #161616 !important;\n}\n\n.tweet:hover {\n background-color: #1B1B1B !important;\n}\n\n.simple-tweet:hover {\n background-color: #1B1B1B !important;\n}\n\nbody {\n color: #CCCCCC !important;\n background-color: #101010 !important;\n}\n\n .permalink-tweet {\n background-color: #161616 !important;\n}\n\n.GalleryTweet--new .simple-tweet {\n background-color: #060606 !important;\n}\n\n .GalleryTweet--new .simple-tweet:hover {\n background-color: #050505 !important;\n}\n\n.content-main .expansion-container .tweet.ancestor, .content-main .expansion-container .tweet.descendant, .content-main .expansion-container .view-more-container, .content-main .expansion-container .inline-reply-tweetbox {\n background: none repeat scroll 0% 0% #1B1B1B;\n}\n\n.new-tweets-bar {\n\tbackground-color: #161616 !important;\n\tborder-top: 1px solid #000 !important;\n\tborder-bottom: 1px solid #000 !important;\n}\n\n.new-tweets-bar:hover {\n\tbackground-color: #1B1B1B !important;\n}\n\n\n.content-header .header-inner, .content-no-header .no-header-inner {\n\tbackground-color: #161616 !important;\n\tborder-bottom: 1px solid #000!important;\n}\n\n\n.DMInboxItem-snippet {\n color: #CCCCCC;\n}\n\n.ProfileHeaderCard-locationText, .ProfileHeaderCard-joinDateText, .ProfileHeaderCard-birthdateText {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsLargeImageHeadline-body {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.AdaptiveNewsLargeImageHeadline-image {\n background-color: #161616;\n}\n\n.AdaptiveNewsLargeImageHeadline-title {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsLargeImageHeadline-description {\n color: #CCCCCC;\n}\n\n.TwitterCard-container:hover { \n background-color: #1B1B1B;\n}\n\n.TwitterCard .SummaryCard-image {\n background-color: #161616;\n}\n\n.global-nav-inner {\n background-color: #242424 !important;\n border-bottom: 1px solid #000 !important;\n}\n\n.permalink-tweet:hover, .permalink-tweet.focus, .stream-item.open .original-tweet:hover, .stream-item.open .original-tweet.focus {\n background-color: #1B1B1B !important;\n}\n\n.module .list-link {\n\tbackground-color: #161616;\n\tborder-top: 1px solid #000;\n\t-webkit-box-shadow: none!important;\n\tbox-shadow: none!important;\n}\n\n.module .list-link:hover, .module .active .list-link {\n background-color: #1B1B1B;\n}\n\n.module .list-link:hover {\n background-color: #1B1B1B;\n}\n\n.follow-card .follow-bar {\n background-color: #161616;\n background-image: none !important;\n border-top: 0px solid rgb(6, 6, 6)!important;\n box-shadow: 0px 1px 0px rgb(6,6,6) inset !important;\n}\n\n.follow-card {\n background-color: #161616;\n}\n\n#global-tweet-dialog .modal-tweet-form-container {\n background-color: #242424 !important;\n border-radius: 6px;\n}\n\n.AdaptiveNewsTextHeadline-body {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n .AdaptiveNewsTextHeadline-title {\n color: #CCCCCC;\n}\n \n .AdaptiveNewsTextHeadline-description {\n color: #CCCCCC;\n}\n\n .MomentCapsuleList-featured .MomentCapsuleSummary {\n border-top: 1px solid #050505;\n}\n \n .MomentCapsuleSummary {\n background: none repeat scroll 0% 0% #161616;\n border: 1px solid #050505;\n }\n\n .MomentCapsuleList-list .MomentCapsuleSummary:first-child {\n border-top: 1px solid #050505;\n }\n\n .MomentCapsuleList-title {\n background-color: #161616;\n border-left: 1px solid #050505;\n border-right: 1px solid #050505;\n border-top: 1px solid #050505;\n }\n \n.EmojiBar-keyboardEntry {\n background-color: rgba(0,0,0,0);\n}\n\n .EmojiBar-suggestions {\n background-color: rgba(0,0,0,0);\n }\n\n .DMPopover-content.Caret:after {\n border-color: #333;\n}\n\n.inline-reply-tweetbox {\n background-color: #242424 !important;\n}\n\n.inline-reply-tweetbox, .content-main .conversations-enabled .expansion-container .inline-reply-tweetbox, .content-main .expansion-container .inline-reply-tweetbox {\n\tbackground-color: #242424;\n \tborder-top: none!important;\n}\n\n.ProfileSidebar .TweetImpressionsModule, .ProfileSidebar .ProfileLifelineInfo, .ProfileSidebar .RelatedUsers {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.DirectMessage-tweet .QuoteTweet {\n background-color: #161616;\n}\n\n\n\n\n\n.tweet {\n border-bottom: 1px solid #060606;\n}\n\n.opened-tweet .content .cards-media-container, .opened-tweet .content .expanded-content {\n\tdisplay: inline!important;\n}\n\n.wrapper.white {\n\tbackground: rgba(36,36,36,0.75)!important;\n}\n\n.tweet-counter, .modal-header .modal-title, .dashboard .tweet-box-title h2 {\n\ttext-shadow: none!important;\n}\n\n.module {\n\ttext-shadow: none!important;\n border: 1px solid #000!important;\n}\n \n.tweet-user {\n\tbackground-color: rgb(36,36,36)!important;\n}\n \n.stats {\n\tborder-top: 1px solid #000!important;\n\tborder-bottom: 1px solid #000!important;\n}\n \n.profile-card .stats {\n\tborder-top: 0!important;\n\tborder-bottom: 0!important;\n}\n\n.profile-card.profile-header .profile-picture {\n\tborder: 4px solid #000!important;\n\tbackground-color: #000!important;\n}\n\n.btn, .primary-btn, .following.first-hover .follow-btn:hover, .following .follow-btn, .following .follow-button.cancel-hover-style:hover, .following .follow-button, .email-following .email-follow-button.cancel-hover-style:hover, .email-following .email-follow-button, .email-follow-enabled .email-follow-state-button, .button-group-item .content.selected {\n\tcolor: #777!important;\n\ttext-shadow: none!important;\n\tbackground-color: rgb(25,25,25)!important;\n\tbackground-image: -moz-linear-gradient(rgb(36,36,36),rgb(26,26,26))!important;\n\tbackground-image: linear-gradient(rgb(36,36,36),rgb(26,26,26))!important;\n\tborder-color: #000!important;\n\t-webkit-box-shadow: none!important;\n\tbox-shadow: none!important;\n \toutline: none!important;\n}\n \n.btn:hover, .primary-btn:hover, .following.first-hover .follow-btn:hover, .following .follow-btn:hover, .following .follow-button.cancel-hover-style:hover, .following .follow-button:hover, .email-following .email-follow-button.cancel-hover-style:hover, .email-following .email-follow-button:hover, .email-follow-enabled .email-follow-state-button:hover, .button-group-item .content.selected:hover, .btn:hover, .btn:focus, .photo-selector:not(.disabled):hover .btn {\n\tcolor: #FFF!important;\n\tbackground-color: rgb(45,45,45)!important;\n\tbackground-image: -moz-linear-gradient(rgb(26,26,26),rgb(36,36,36))!important;\n\tbackground-image: linear-gradient(rgb(26,26,26),rgb(36,36,36))!important;\n}\n\n\ninput, textarea, div[contenteditable=\"true\"], select {\n\tbackground-color: rgb(16,16,16)!important;\n \tcolor: #BBB!important;\n\tborder: 1px solid #333;\n}\n\ninput:focus, textarea:focus, div[contenteditable=\"true\"]:focus, div[contenteditable=\"true\"].fake-focus {\n \tbox-shadow: none!important;\n}\n\n.topbar {\n\t-webkit-box-shadow: none!important;\n\tbox-shadow: none!important;\n border-bottom: 1px solid #000!important;\n}\n\n.global-nav {\n border-bottom: 0px !important;\n}\n\n\n.content-header, .content-no-header {\n\tborder: 1px solid #000!important;\n \tborder-bottom: none!important;\n}\n\n.stream-item {\n\tbackground: #161616;\n}\n\n.stream-item-activity-me {\n border-bottom: 1px solid rgb(5,3,7)!important;\n}\n\n.stream-item-activity-me .latest-tweet {\n border-bottom: 0px none!important;\n}\n\n.tweet-actions {\n\tbackground-color: #161616;\n\tbox-shadow: none!important;\n \tpadding: 2px 12px 1px 5px!important;\n}\n\n.vellip, .vellip:before, .vellip:after, .conversation-module > li:after, .conversation-module > li:before {\n\tbackground-color: #999!important;\n}\n\n.modal-close {\n border-left: 0px solid #000;\n border-bottom: none;\n border-radius: 0!important;\n -webkit-box-shadow: none!important;\n box-shadow: none!important;\n}\n \n.modal-close:hover {\n \tborder: 1px solid #000;\n\tbackground: rgb(36,36,36)!important;\n}\n \n.modal-btn {\n outline: none!important;\n}\n\n.module.profile-card.component.profile-header {\n\tborder:0!important;\n}\n\n.dropdown-menu {\n background-color: #161616;\n border-color: #000!important;\n border: 1px solid #000;\n box-shadow: none!important;\n}\n\n.dropdown-caret .caret-inner {\n\tborder-bottom: 6px solid rgb(16,16,16)!important;\n}\n \n.dropdown-caret .caret-outer {\n\tborder-bottom: 7px solid #000!important;\n}\n \n.dropdown-divider {\n\tborder-bottom: 1px solid #000!important;\n}\n\n\n.content-inner {\n background-color: rgb(36,36,36)!important;\n border-left: 1px solid #000!important;\n border-right: 1px solid #000!important;\n \tborder-bottom: 1px solid #000!important;\n}\n\n.conversation-collapse-btn {\n background-color: rgb(16,16,16)!important;\n border: 1px solid #000!important;\n border-left: none!important;\n border-radius: 0!important;\n outline: none!important;\n}\n\n.conversation-collapse-btn:hover {\n background-color: rgb(36,36,36)!important;\n}\n\n.profile-social-proof {\n\tbackground-color: rgb(36,36,36)!important;\n\tborder-top: 1px solid #000!important;\n}\n\n\n.promptbird-below-black-bar, .promptbird-dashboard-narrow, .promptbird-wide-above-timeline {\n border: 1px solid #000!important;\n background-color: rgb(16,16,16)!important;\n}\n\n.content-main .conversations-enabled .expansion-container .inline-reply-tweetbox {\n background-color: rgb(35, 35, 35);\n}\n\n\n\n.modal-close {\n border-left: 1px solid rgb(1, 1, 1)!important;\n}\n\n.module .flex-module {\n border: 0px solid rgb(5, 2, 7)!important;\n}\n\n.dashboard .stats {\n border: 0px solid rgb(5, 2, 7)!important;\n}\n\n.stream-item, .stream-item.open, .unfocusable-stream-item {\n border-color: rgb(5, 2, 7)!important;\n}\n\n.stream-end-item, .stream-end, .stream-loading, .stream-placeholder {\n border-right: 1px solid rgb(5, 2, 7)!important;\n border-left:1px solid rgb(5, 2, 7)!important;\n border-bottom: 1px solid rgb(5, 2, 7)!important;\n}\n\n.message {\n background: none repeat scroll 0% 0% rgba(16, 16, 16, 0.97)!important;\n}\n\n.user-dropdown {\n padding: 0px 5px 0px 5px !important;\n}\n\n.module .list-link, .search-more-options .btn-link {\n border-right: 0px solid rgb(6,6,6)!important;\n border-width: 0px 0px 0px!important;\n border-color: -moz-use-text-color rgb(6,6,6) rgb(6,6,6)!important;\n}\n\n.module li:first-child .list-link {\n border-top: 0px solid rgb(6,6,6)!important;\n}\n\n.search {\n background-color: rgba(36,36,36,0.75)!important;\n text-shadow: none !important;\n}\n\n.media-not-displayed {\n background: none repeat scroll 0% 0% rgb(6,6,6)!important;\n}\n \n.stats a {\n border-left: 0px solid #E8E8E8 !important;\n}\n\n.stream-item .stats .avatar-row a:first-child {\n border-left: 1px solid rgb(5,3,7) !important;\n padding-left: 5px !important;\n} \n\n.tweet .stats .avatar-row a {\n padding: 13px 0px !important;\n}\n\n.content-main .expansion-container > li:last-child:first-child .tweet {\n border-bottom: 0px solid #DDD !important;\n}\n\n.modal-footer {\n text-align: right;\n border-top: 1px solid #FEF6F8;\n border-radius: 0px 0px 7px !important;\n border-left: 1px solid #050307 !important;\n border-right: 1px solid #050307 !important;\n} \n\n .tweet-form .thumbnail-container {\n background-color: #060606 !important;\n} \n\n.content-searchbar {\n background-color: #242424 !important;\n border-bottom: 1px solid #060606 !important;\n}\n \n.content-searchbar .search-query {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 0px 0px #FFF !important;\n} \n \n.stream-item-activity-network .stream-item-activity-header {\n padding: 8px 8px 8px 12px;\n margin: 0px 12px;\n background-color: #060606 !important;\n border-color: #060606 #060606 #060606 !important;\n}\n \n.stream-item-activity-network .supplement, .stream-item-activity-network .follow-more-than-two, .stream-item-activity-network .follow-exactly-two, .stream-item-activity-network .activity-secondary-supplement {\n border-right: 1px solid #060606 !important;\n border-width: 0px 1px 1px !important;\n border-color: -moz-use-text-color #060606 #060606 !important;\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.08) !important;\n} \n \n.stream-item-activity .account, .stream-item-activity .list {\n border-bottom: 0px none !important;\n}\n \n.find-friends-top-subheader, .find-friends-bottom-subheader {\n background-color: #060606 !important;\n} \n \n.find-friends-list li:hover {\n background-color: #060606 !important;\n}\n \n.find-friends-list li {\n border-bottom: 1px solid #060606 !important;\n} \n\n.find-friends-bottom-subheader {\n border-top: 1px solid #060606 !important;\n}\n \n.find-friends-top-subheader, .find-friends-bottom-subheader {\n background-color: #242424 !important;\n} \n \n.find-friends-search form {\n background-color: #242424 !important;\n border-bottom: 1px solid #060606 !important;\n}\n\n.content-main .expansion-container > .original-tweet-container, .content-main .expansion-container > li .tweet, .content-main .expansion-container > li .inline-reply-tweetbox, .content-main .expansion-container > li + li:last-child .tweet.original-tweet, .content-main .stream-items > .stream-item:last-child .expansion-container > li .tweet, .content-main .stream-items > .stream-item:last-child .expansion-container > li .inline-reply-tweetbox, .content-main .stream-items > .stream-item:last-child .expansion-container > li .view-more-container {\n border-bottom: 1px solid #060606;\n}\n\n.tweet-translation {\n border-top: 1px solid #666 !important;\n}\n\n.typeahead .dropdown-inner > .has-results ~ .has-results, .typeahead .dropdown-inner > .has-items ~ .has-items {\n border-top: 1px solid #666 !important;\n}\n\n.cards-base {\n border-color: #060606 !important;\n}\n\n.DashboardProfileCard-avatarLink {\n background: none !important;\n}\n\n.DashboardProfileCard-avatarImage {\n border: 1px solid #060606 !important\n}\n\n.DashboardProfileCard-bg {\n border-bottom: 1px solid #060606 !important;\n}\n\n.DashboardProfileCard-tweetbox {\n border: 1px solid #060606 !important;\n}\n\n.ProfileListItem {\n border-bottom: 1px solid #060606 !important;\n}\n\nbody.user-style-MeetAnimals {\n background-color: #242424;\n}\n\n.top-timeline-tweetbox .timeline-tweet-box {\n border: 1px solid #060606 !important;\n}\n\n\n\n\n \n \n/* New Page style */\n \n\n.ProfileHeaderCard-bio {\n color: #CCCCCC;\n} \n\n.ProfileTweet-text {\n color: #CCCCCC;\n} \n \n.ProfileHeaderCard-locationText, .ProfileHeaderCard-joinDateText {\n color: #CCCCCC;\n} \n\n.StreamToggler {\n border-bottom: 1px solid #060606 !important;\n} \n\n.ProfileTweet-fullname {\n color: #CCCCCC;\n} \n \n.StreamToggler-link.is-active, .StreamToggler-link.is-active:hover .StreamToggler-link.is-active:focus {\n color: #8899A6;\n} \n\n.permalink.has-replies .inline-reply-tweetbox, .permalink.stream-uncapped .replies-to li:last-child .tweet {\n border-bottom: 1px solid #060606;\n} \n \n.u-borderUserColorLight, .u-borderUserColorLightFocus:focus, .u-borderUserColorLightHover:hover, .u-borderUserColorLightHover:focus {\n border-color: #060606 !important;\n} \n\n.ProfileNav-item.is-active .ProfileNav-value, .ProfileNav-item.is-active:hover .ProfileNav-value {\n color: #CCCCCC;\n}\n \n\n.ProfileClusterFollow {\n border-top: 1px solid #060606 !important;\n border-bottom: 1px solid #060606 !important;\n background-color: rgba(36,36,36,0.0) !important;\n}\n\n.ProfileCard-userFields {\n color: #CCCCCC;\n}\n\n.GridTimeline-footer:before {\n background: none repeat scroll 0% 0% #060606 !important;\n}\n\n.GridTimeline-footerIcon {\n background-color: rgba(0,0,0,0) !important;\n}\n\n.TwitterPhoto-media {\n background-color: #060606 !important;\n border: 0px solid #060606 !important;\n}\n\n.ProfileListItem {\n border-top: 0px solid #E1E8ED !important;\n}\n\n.stream-item-header .avatar, .permalink-header .avatar {\n margin-left: -58px ;\n}\n\n.conversation-module .conversation-tweet-item .stream-item-header .avatar {\n margin-left: -58px;\n}\n\n.wtf-module .import-prompt .cta {\n border-bottom: 1px solid #060606 !important;\n}\n\n.style-element-7 {\n color: #CCCCCC;\n}\n\n.style-element-71 {\n background: linear-gradient(0rad, #111, #222) repeat scroll 0% 0% transparent !important;\n border-color: #666 !important;\n}\n\n.style-element-85 {\n color: #CCCCCC;\n}\n \n\n.dm-to {\n background-color: #060606 !important;\n border-bottom: 1px solid #060606 !important;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset !important;\n} \n\n.dm-thread:hover {\n background-color: rgb(6,6,6)!important;\n background-image: none !important;\n}\n\n.dm-thread {\n background-color: rgb(16,16,16)!important;\n border-bottom: 1px solid rgb(5,3,7)!important;\n}\n\n.dm-dialog .twttr-dialog-footer {\n text-shadow: 0px 0px 0px #FFF !important;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset !important;\n}\n \n.twttr-dialog-footer {\n background-color: rgb(6,6,6)!important;\n border-top: 0px solid!important;\n} \n\n.tweet .stats {\n padding-left: 1px !important;\n}\n\n.dm-dialog .twttr-dialog-header {\n border-bottom: 0px solid #050307 !important;\n}\n\n.dm-dialog .twttr-dialog-body { \n border-left: 1px solid #050307 !important;\n border-right: 1px solid #050307 !important;\n border-radius: 6px !important;\n } \n\n .dm-convo {\n background-color: #101010 !important;\n}\n \n.dm-message {\n\n background-color: #060606 !important;\n border: 1px solid #555 !important;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.4) inset, 0px 0px 0px rgba(0, 0, 0, 0.05) !important;\n} \n \n.dm-caret-outer {\n border-right: 5px solid #555 !important;\n}\n\n\n.dm-caret-inner {\n border-right: 4px solid #555 !important;\n}\n\n .t1-label {\n background-color: #161616;\n}\n .t1-legend {\n color: #CCCCCC;\n}\n \n.list-editor .options label b {\n color: #CCCCCC;\n}\n\n.dm-participant-container {\n border-top: 0px solid #060606 !important;\n} \n \n .dm-participant-container .typeahead-item {\n border-bottom: 1px solid #777 !important;\n}\n \n .user-select-controls input {\n border: 0px none !important;\n} \n \n.ep-AggregateMetric {\n color: #8899A6;\n}\n \n .DirectMessage--received .DirectMessage-text {\n color: #CCCCCC !important;\n} \n .TwitterCard {\n color: #CCCCCC;\n}\n\n\n\n .icon-btn {\n background: none repeat scroll 0% 0% transparent !important;\n border: 1px solid transparent !important;\n}\n\n.ProfilePopupContainer--bellbird .ProfileHeader .profile-header-inner {\n border-bottom: 1px solid #060606 !important;\n}\n\n.recent-tweets .tweet {\n border-top: 1px solid #060606 !important;\n}\n\n.SiderailRelatedTweets {\n background-color: #060606 !important;\n}\n\n.SiderailRelatedTweets-header {\n border-bottom: 1px solid #060606 !important;\n}\n\n.SiderailRelatedTweets-viewMore {\n border-top: 1px solid #060606 !important;\n}\n\n.SiderailRelatedTweet-authorFullName {\n color: #CCCCCC;\n}\n\n.AdaptiveSearchPage {\n background-color: #101010 !important;\n}\n\n.AdaptiveFiltersBar {\n border-bottom: 0px solid #E1E8ED ;\n\n}\n\n.stream-item-activity-notification {\n border-bottom: 1px solid #060606 !important;\n}\n\n .simple-tweet:hover, .recent-tweets .tweet:hover, .stream-item-activity .tweet:hover, .twttr-dialog-reply-footer:hover {\n background-color: transparent !important;\n}\n\n .ThreadedConversation, .ThreadedConversation-showMore, .ThreadedConversation-showMore:after, .ThreadedConversation + .ThreadedConversation--loneTweet, :not(.ThreadedConversation--ownReply) + .ThreadedConversation--ownReply, .ThreadedConversation--ownReply + .ThreadedConversation--loneTweet:not(.ThreadedConversation--ownReply), .ThreadedConversation--loneTweet:first-child {\n border-top: 0px solid #E1E8ED;\n}\n\n .ThreadedConversation, .ThreadedConversation--loneTweet {\n background-color: #060606;\n}\n\n.tweet-form .thumbnail-container {\n box-shadow: 0px 1px 0px #666 inset;\n}\n\n.TwitterCard-container {\n border-color: #666;\n}\n\n.QuoteTweet-fullname {\n color: #CCCCCC;\n}\n\n.ThreadedConversation, .ThreadedConversation-showMore:after, .ThreadedConversation-viewOther .view-other-link {\n border-bottom: 1px solid #060606;\n}\n\n.stream-item.separated-module.before-expanded .original-tweet {\n border-bottom: 1px solid #060606;\n} \n\n.DMTokenizedMultiselectSuggestion {\n border-bottom: 1px solid #050505;\n} \n\n .u-borderUserColorLighter {\n border-color: #050505 !important;\n} \n\n.DMComposer {\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset; \n}\n\n.hovercard.profile-card.profile-header .DashboardProfileCard-stats {\n border-top: 1px solid #050505;\n}\n\n\n.QuoteTweet--unavailable {\n background: none repeat scroll 0% 0% #060606;\n}\n\n.disabled, .disabled:hover, .disabled:focus, .disabled:active, input[disabled], .t1-select[disabled], textarea[disabled], input[readonly], .t1-select[readonly], textarea[readonly], div[contenteditable=\"false\"], div[contenteditable=\"true\"][readonly] {\n background: none repeat scroll 0% 0% #242424;\n border-color: #050505;\n}\n\n\n\n\n\n\n .fullname {\n color: #CCCCCC !important;\n} \n\n .stream-item:not(.no-header-background-module) {\n background: none repeat scroll 0% 0% padding-box #161616 !important;\n}\n\n.ProfileSidebar .ProfileSignupCallOut, .ProfileSidebar .ProfileLifelineInfo, .ProfileSidebar .WhoToFollow, .ProfileSidebar .Trends {\n background-color: #161616 !important;\n border: 1px solid #060606 !important;\n} \n\n.ProfileCanopy-navBar {\n background-color: #161616 !important;\n border-bottom: 1px solid #060606 !important;\n}\n \n.ProfileTweet {\n background-color: #161616 !important;\n border: 1px solid #060606 !important;\n} \n \n \n.ProfileSidebar .Footer {\n background-color: #161616 !important;\n}\n\n.Grid--withInnerPadding > .Grid-cell {\n border-radius: 0px 0px 5px 5px !important;\n background-color: rgba(36,36,36,0.75) !important;\n}\n\n.ProfilePage {\n background-color: #101010 !important;\n}\n\n.ProfileNav-item--userActions {\n background-color: #161616 !important;\n}\n\n.ProfileHeading-content {\n background-color: #161616 !important;\n border: 1px solid #060606 !important;\n}\n\n.ProfileCard {\n background-color: #161616 !important;\n border: 1px solid #060606 !important;\n}\n\n.ProfileCard-bio {\n color: #CCCCCC;\n}\n\n.TwitterPhoto-media {\n background-color: #161616 !important;\n border-top: 1px solid #060606 !important;\n border-bottom: 1px solid #060606 !important;\n}\n\n .DMInboxItem {\n background-color: #161616;\n} \n\n .DMInboxItem.is-unread {\n background-color: #1B1B1B;\n}\n\n.DMInboxItem:hover {\n background-color: #1B1B1B !important;\n} \n\n.DMInbox .DMInboxItem {\n border-bottom: 1px solid #060606 !important;\n} \n\n.DMConversation-scrollContainer {\n background-color: #101010 !important;\n}\n\n.DirectMessage--sent .DirectMessage-message{\n background-color: #161616 !important;\n border-color: #333 !important;\n}\n\n.DirectMessage--received .DirectMessage-message {\n background-color: #161616 !important;\n border-color: #333 !important;\n}\n\n .DirectMessage--sent .DirectMessage-text {\n color: #CCCCCC !important;\n}\n\n .DirectMessage--received .DirectMessage-text {\n color: #CCCCCC !important;\n} \n\n .DMTokenizedMultiselectSuggestion.is-highlighted {\n background-color: #161616;\n}\n\n.stream-end-inner {\n background-color: #161616 !important;\n}\n\n.ThreadedConversation-showMore {\n background: none repeat scroll 0% 0% #161616;\n}\n\n.ThreadedConversation-viewOther {\n background: none repeat scroll 0% 0% #161616;\n}\n\n.DMActivity-header {\n background-color: #161616;\n border-bottom: 1px solid #333; \n}\n\n\n.home-tweet-box, .rosetta .dm-tweetbox, .rosetta .WebNotification-buffer--altColor, .content-main .conversations-enabled .expansion-container .inline-reply-tweetbox {\n background-color: #242424 !important;\n}\n\n.dm-tweetbox {\n border-top: 1px solid #050307 !important;\n background-color: #242424 !important;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset !important;\n}\n\n\n .home-tweet-box, .dm-tweetbox, .RetweetDialog-commentBox, .WebToast-box--altColor, .content-main .conversations-enabled .expansion-container .inline-reply-tweetbox {\n background-color: #242424;\n}\n\n .u-bgUserColorLightest {\n background-color: #242424 !important;\n}\n\n.DMButtonBar {\n background-color: #161616;\n border-top: 1px solid #050505;\n}\n\n.activity-content .account, .modal-footer, hr, #profile_popup .go-to-profile {\n \tbackground: #161616;\n\tborder-top: 1px solid #000!important;\n}\n\n\n.modal-content {\n\tbackground-color: #161616 !important;\n\tborder-radius: 6px !important;\n border-bottom: 1px solid #050307 !important;\n\t-webkit-box-shadow: none!important;\n box-shadow: none!important;\n}\n\n.modal .modal-tweet .tweet {\n background-color: #161616 !important;\n border-bottom: 0px solid #060606 !important;\n border-left: 0px solid #050307;\n border-right: 0px solid #050307;\n}\n \n.modal .modal-tweet .tweet:hover {\n background-color: #161616;\n} \n\n .modal .modal-tweet {\n background-color: #161616 !important;\n}\n\n.AdaptiveNewsSmallImageHeadline-body {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.AdaptiveNewsRelatedHeadlines-title {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsSmallImageHeadline-title:focus, .AdaptiveNewsSmallImageHeadline-title:hover {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsSmallImageHeadline-title {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsSmallImageHeadline-description {\n color: #CCCCCC;\n}\n\n .AdaptiveNewsSmallImageHeadline-description:hover {\n color: #CCCCCC;\n}\n\n.InputToken {\n background-color: #1B1B1B;\n border: 1px solid #333;\n}\n \n .empty-timeline-section, .empty-timeline-footer {\n background-color: #161616;\n}\n \n .PromptbirdPrompt {\n background: #161616;\n }\n\n.WebToast {\n background: none repeat scroll 0% 0% #161616 !important;\n border: 1px solid #050505 !important;\n}\n \n.WebToast-line {\n border-top: 1px solid #050505; \n} \n\n .WebToast-accountLink {\n color: #CCCCCC;\n} \n\n .WebToast-tweetExcerpt {\n color: #CCCCCC;\n}\n\n .ProfilePrefilledTweet .tweet .tweet-text {\n color: #CCCCCC;\n}\n\n\n\n.OldMedia-attributionName {\n color: #CCCCCC;\n}\n\n.ProfileHeading-toggleItem.is-active, .ProfileHeading-toggleItem.is-active:hover, .ProfileHeading-toggleItem.is-active:focus {\n color: #CCCCCC;\n}\n\n.ProfileNav-item.is-active .ProfileNav-label, .ProfileNav-item.is-active:hover .ProfileNav-label {\n color: #CCCCCC !important;\n}\n\n.ProfileNav-label {\n color: #CCCCCC;\n}\n\n.ProfileHeaderCard-screennameLink, .ProfileHeaderCard-screennameLink:hover {\n color: #8899A6;\n}\n\n.username, .time, .time a, .metadata, .metadata button.btn-link, .metadata a {\n color: #8899A6;\n}\n\n.username s, .account-group-inner s {\n color: #8899A6;\n}\n\n.WhoToFollow-users .username {\n color: #8899A6;\n}\n\n.TweetImpressionsModule-heading {\n color: #8899A6;\n}\n\n.ProfileHeaderCard-location, .ProfileHeaderCard-url, .ProfileHeaderCard-vineProfile, .ProfileHeaderCard-joinDate, .ProfileHeaderCard-birthdate {\n color: #8899A6;\n}\n\n.account-summary .dismiss {\n color: #8899A6;\n}\n\n.dm-thread-snippet {\n color: #CCCCCC !important;\n}\n\n .typeahead .selected a, .typeahead .selected strong, .typeahead .selected .fullname, .typeahead .selected .username, .typeahead .selected .typeahead-social-context, .typeahead .selected .Icon--close, .typeahead a:hover, .typeahead a:hover strong, .typeahead a:hover .fullname, .typeahead a:hover .username, .typeahead a:hover .typeahead-social-context {\n color: #CCCCCC;\n}\n\n.typeahead strong {\n color: #CCCCCC;\n}\n\n.TwitterCard .Button--smallGray {\n color: #CCCCCC;\n}\n\n.find-friends-list .source {\n color: #CCCCCC;\n} \n\n .GalleryTweet .pretty-link b, .GalleryTweet .pretty-link:hover s, .GalleryTweet .pretty-link:hover b, .GalleryTweet .pretty-link:focus s, .GalleryTweet .pretty-link:focus b, .GalleryTweet .tweet-actions > li b {\n color: #8899A6;\n}\n\n .GalleryTweet {\n color: #CCCCCC;\n}\n\nlabel {\n color: #CCCCCC;\n}\n\n\n.message .message-text {\n color: #CCCCCC;\n}\n\n.dropdown-menu li>a:hover, .dropdown-menu li>a:focus, .dropdown-menu .dropdown-link:hover, .dropdown-menu .dropdown-link:focus, .dropdown-menu .typeahead-recent-search-item.selected, .dropdown-menu .typeahead-saved-search-item.selected, .dropdown-menu .selected a, .dropdown-menu .dropdown-link.selected {\n background-color: #161616;\n color: #CCCCCC;\n}\n\n.profile-header .profile-card-inner h1, .profile-header .profile-card-inner h2, .profile-header .profile-card-inner p, .profile-header .profile-card-inner s, .profile-header .profile-card-inner a, .profile-header .profile-card-inner a b, .profile-header .profile-card-inner a:hover s, .profile-header .profile-card-inner a:hover b {\t\n\tcolor: #8899A6;\n}\n\nh1, h2, h3, h4, h5, h6, .fullname {\n\tcolor: #CCCCCC;\n}\n\n.stats a strong, .modal-body p {\n\tcolor: #CCCCCC;\n}\n\n .DMPopoverMenu {\n background-color: #161616;\n border: 1px solid #333;\n color: #CCCCCC;\n}\n\n\n .AdaptiveNewsTextHeadline-title:focus, .AdaptiveNewsTextHeadline-title:hover {\n color: #8899A6;\n}\n\n.AdaptiveNewsHeadlineDetails-user, .AdaptiveNewsHeadlineDetails-user:focus, .AdaptiveNewsHeadlineDetails-user:hover {\n color: #8899A6;\n}\n\n.WhoToFollow-title {\n color: #8899A6;\n}\n\n.nav > li {\n color: #8899A6;\n}\n\n.Trends .trend-location {\n color: #8899A6;\n}\n\n.ProfileUserList-heading {\n color: #8899A6;\n}\n\n.PhotoRail-heading {\n color: #8899A6;\n}\n\n.Footer--blankBackground .Footer-item, .Footer--blankBackground .Footer-link {\n color: #8899A6;\n}\n\n.ProfileCard .ProfileCard-screennameLink, .ProfileCard .ProfileCard-screennameLink:hover, .ProfileCard .ProfileCard-screennameLink:focus {\n color: #8899A6;\n}\n\n.ScrollBump-title {\n color: #CCCCCC;\n}\n\n.ScrollBump-title a, .ScrollBump-title a:hover, .ScrollBump-title a:focus, .ScrollBump-title a:active {\n color: #8899A6;\n}\n\n.ProfileTweet-actionCount {\n color: #8899A6;\n}\n\n.dropdown-menu li > a, .dropdown-menu .dropdown-link {\n color: #8899A6;\n}\n\n.dropdown-menu li > a:hover, .dropdown-menu li > a:focus, .dropdown-menu .dropdown-link:hover, .dropdown-menu .dropdown-link:focus, .dropdown-menu .dropdown-link.is-focused, .dropdown-menu li:hover .dropdown-link, .dropdown-menu li:focus .dropdown-link, .dropdown-menu .typeahead-recent-search-item.selected, .dropdown-menu .typeahead-saved-search-item.selected, .dropdown-menu .selected a, .dropdown-menu .dropdown-link.selected {\n background-color: #1B1B1B !important;\n}\n\n.typeahead-items li > a {\n color: #8899A6;\n}\n\n.typeahead-recent-search-item .Icon--close, .typeahead-saved-search-item .Icon--close {\n color: #8899A6;\n}\n\n.DMActivity-title {\n color: #8899A6;\n}\n\n.DMActivity-header {\n color: #8899A6;\n}\n\n.DMInboxItem-timestamp {\n color: #8899A6;\n}\n\n.DMActivity-body {\n background-color: #101010;\n}\n\n.QuoteTweet-screenname {\n color: #8899A6;\n}\n\n.QuoteTweet .tweet-content, .QuoteTweet-text a, .QuoteTweet-text a:hover, .QuoteTweet-text a:focus, .QuoteTweet-text a:active, .QuoteTweet-text .pretty-link b, .QuoteTweet-text .pretty-link s, .QuoteTweet-text .pretty-link:hover b, .QuoteTweet-text .pretty-link:hover s, .QuoteTweet-text .pretty-link:focus b, .QuoteTweet-text .pretty-link:focus s, .QuoteTweet-text .pretty-link:active b, .QuoteTweet-text .pretty-link:active s {\n color: #CCCCCC;\n}\n\n.module .list-link {\n color: #8899A6;\n}\n\n.t1-label {\n color: #CCCCCC;\n}\n\n.settings-header {\n color: #8899A6;\n}\n\n.form-horizontal .controls p {\n color: #8899A6;\n}\n\n.Footer-item, .Footer-link {\n color: #8899A6;\n}\n\n.tweet .context .pretty-link s, .tweet .context .pretty-link b {\n color: #8899A6;\n}\n\n.with-icn {\n color: #8899A6;\n}\n\n.PermalinkOverlay-spinnerContainer {\n background-color: #161616;\n}\n\n.ep-Header .ep-Title {\n color: #CCCCCC;\n}\n\n.ep-TweetPerformance.ep-Section .ep-Metric .ep-MetricTopContainer {\n color: #CCCCCC;\n}\n\n.ep-Header {\n border-bottom: 1px solid #333;\n}\n\n.bird-topbar-etched {\n color: #8899A6;\n}\n\n.FoundMediaSearch-query {\n background-color: #242424;\n background-image: none;\n border-bottom: 1px solid #050505;\n}\n\n.Caret--top::before, .Caret--top.Caret--stroked::after {\n border-bottom-color: #050505;\n}\n\n.ProfileCardStats-statLabel {\n color: #8899A6;\n}\n\n.DashboardProfileCard-screennameLink {\n color: #8899A6;\n}\n\n.Trends .context-trend-item .trend-item-stats {\n color: #8899A6;\n}\n\n.tweet .context a {\n color: #8899A6;\n}\n\n.AdaptiveSearchPage-moduleTitle {\n color: #8899A6;\n}\n\n.stats a {\n color: #8899A6;\n}\n\n.flex-module-header p {\n color: #8899A6;\n}\n\n.ProfileListItem-memberCount {\n color: #8899A6;\n}\n\n.ListCreationModule-description {\n color: #8899A6;\n}\n\n.ListCreationModule-title {\n color: #8899A6;\n}\n\n.NotificationsHeadingContent {\n background-color: #161616;\n border-bottom: 1px solid #050505;\n}\n\nli.stream-item.highlighted {\n background-color: #1B1B1B !important;\n}\n\n\n\n\n\n\n\n\n .TwitterCard [data-poll-vote-majority*=\"1\"] .PollXChoice-optionContainer[data-poll-index=\"1\"] .PollXChoice-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"2\"] .PollXChoice-optionContainer[data-poll-index=\"2\"] .PollXChoice-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"3\"] .PollXChoice-optionContainer[data-poll-index=\"3\"] .PollXChoice-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"4\"] .PollXChoice-optionContainer[data-poll-index=\"4\"] .PollXChoice-choice--chart {\n background: #333 none repeat scroll 0% 0%;\n}\n\n .TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--chart {\n background: #333 none repeat scroll 0% 0%;\n }\n\n .PollXChoiceTextOnly-choice--chart{\n background-color: #333 !important;\n}\n\n.TwitterCard [data-poll-vote-majority*=\"1\"] .PollXChoiceTextOnly-optionContainer[data-poll-index=\"1\"] .PollXChoiceTextOnly-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"2\"] .PollXChoiceTextOnly-optionContainer[data-poll-index=\"2\"] .PollXChoiceTextOnly-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"3\"] .PollXChoiceTextOnly-optionContainer[data-poll-index=\"3\"] .PollXChoiceTextOnly-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"4\"] .PollXChoiceTextOnly-optionContainer[data-poll-index=\"4\"] .PollXChoiceTextOnly-choice--chart {\n background-color: #333 !important;\n}\n\n\n\n.content-main .stream-items > .stream-item > .expansion-container > .stream-item:not(.open) > .expansion-container:first-child:last-child .tweet:first-child:last-child {\n border-bottom: 1px solid #050505 !important;\n}\n\n .PromptbirdPrompt--inline, .PromptbirdPrompt--inlinePointer {\n border: 1px solid #050505;\n }\n\n .tweet .account-in-timeline-blk {\n border-top: 1px solid #050505;\n }\n\n .ProfilePrefilledTweet .tweet {\n border: 1px solid #050505; \n background-color: #161616;\n }\n\n.content-header, .content-no-header {\n border: 1px solid #050505 !important;\n}\n \n.global-dm-nav.new.with-count .dm-new .count-inner {\n border: 2px solid #bbb;\n}\n \n.global-dm-nav.new.with-count .dm-new {\n color: #CCCCCC;\n} \n \n.DMDivider:before {\n border-bottom: 1px solid #333; \n}\n \n .DMDivider {\n background-color: #101010;\n}\n\n.AdaptiveNewsRelatedHeadlines-headline {\n border-bottom: 1px solid #050505;\n}\n\n.DMConversation-composer {\n border-top: 0px solid #060606;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset;\n}\n\n.DMComposer-container {\n background-color: #242424;\n}\n\n.input-group-addon {\n text-shadow: 0px 0px 0px #FFF;\n border-color: #060606 !important;\n}\n\n .DirectMessage--received .Caret:before {\n border-color: #333;\n}\n\n.DirectMessage--sent .Caret:before {\n border-color: #333;\n}\n\n .TokenizedMultiselect-inputContainer {\n border: 1px solid #333;\n}\n\n.TokenizedMultiselect-input {\n border: 0px none !important;\n}\n\n .permalink.standard-tweets .ThreadedConversation .ThreadedConversation-tweet .stream-item .tweet, .ThreadedPermalinkOverlay .ThreadedConversation .ThreadedConversation-tweet .stream-item .tweet, .ThreadedPermalinkOverlay .ThreadedConversation .ThreadedConversation-tweet .stream-item.open {\n border: 0px none !important;\n }\n\n.account, .tweet, .app {\n border-bottom: 1px solid #050505;\n}\n\n.logged-out .permalink-replies {\n border-top: 1px solid #050505;\n}\n\n.content-header, .content-no-header {\n border: 1px solid #000 !important;\n}\n\n.TwitterCard .Button--smallGray {\n background-image: linear-gradient(0rad, #1a1a1a, #242424);\n border: 1px solid #050505; \n}\n\n .TwitterCard .Button--smallGray:hover:not([disabled]), .TwitterCard .Button--smallGray:focus:not([disabled]), .TwitterCard .Button--smallGray:active:not([disabled]) {\n border: 1px solid #050505;\n background-image: linear-gradient(0rad, #242424, #1a1a1a);\n} \n \n .TwitterCard a.u-buttonLabel, .TwitterCard a.u-buttonLabel:hover, .TwitterCard a.u-buttonLabel:focus, .TwitterCard a.u-buttonLabel:active {\n color: #8899A6;\n}\n\n.input-prepend .add-on, .input-append .add-on {\n text-shadow: 0px 0px 0px #FFF;\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.DMActivity {\n border: 0px solid #CCD6DD;\n}\n\n.EmojiBar-icon {\n background-color: rgba(0,0,0,0);\n}\n\n\n.TwitterCard .PollXChoiceTextOnly-footer {\n border-color: #666\n}\n\n.module .active .list-link, label {\n\tcolor: #CCCCCC;\n}\n\n.TweetWithPivotModule-header a {\n color: #CCCCCC;\n}\n\n.conversations-enabled .inline-reply-caret .caret-inner {\n border-bottom-color: #aaa;\n border-color: transparent transparent #aaa;\n}\n\n.conversations-enabled .inline-reply-caret {\n border-color: transparent transparent #aaa;\n}\n\n.permalink .in-reply-to .tweet, .permalink .replies-to .tweet {\n border-bottom: 1px solid #050505;\n}\n\n.ProfileCard-bg {\n border-bottom: 0px solid #E1E8ED;\n}\n\n.AdaptiveFiltersBar-label {\n border-right: 1px solid #050505;\n}\n\n.find-friends-sources {\n background-color: #101010;\n padding: 0px 0px 12px;\n}\n.stream-media-grid-items.media-grid {\n background: none repeat scroll 0% 0% padding-box content-box #101010;\n border-left: 1px solid rgb(0, 0, 0) !important;\n border-right: 1px solid rgb(0, 0, 0) !important;\n} \n\n.Gallery-content {\n background-color: #101010;\n}\n.dm-convo-placeholder {\n background-color: #101010;\n} \n .user-select-controls {\n border: 1px solid #777 !important;\n background-color: #101010;\n}\n.SiderailRelatedTweets-viewMore:hover {\n background-color: #101010 !important;\n}\n .permalink {\n background-color: #101010;\n border: 1px solid #050505;\n}\n .InputToken {\n background-color: #101010;\n}\n .DMComposer .tweet-content {\n background-color: #101010;\n} \n.DMActivity-container {\n background-color: #101010;\n} \n .DMTypeaheadHeader {\n color: #CCCCCC;\n background-color: #101010;\n border-bottom: 1px solid #050505;\n border-top: 1px solid #333 !important;\n}\n\n.modal-header {\n background-color: #101010 !important;\n \tborder: 1px solid #000!important;\n border-radius: 0!important;\n -webkit-box-shadow: none!important;\n box-shadow: none!important;\n}\n\n.PollingCardComposer {\n background-color: #101010;\n box-shadow: inset 0 1px 0 #333;\n}\n\n.ProfileAvatar {\n background: #101010 none repeat scroll 0% 0%;\n border: 0px solid #FFF;\n left: 5px;\n top: -5px;\n}\n\n.DMComposer-attachment {\n border-bottom: 1px solid #050505;\n}\n\n.DirectMessage--sent .DirectMessage-text a, .DirectMessage--sent .DirectMessage-text .pretty-link b, .DirectMessage--sent .DirectMessage-text .pretty-link s {\n color: #8899A6 !important;\n}\n \n.has-scroll-bump {\n background: transparent none repeat scroll 0px center !important;\n}\n\n.DirectMessage--sent .QuoteTweet, .DirectMessage--sent .QuoteTweet:hover {\n border-color: #333;\n}\n\n.Caret--right::before, .Caret--right.Caret--stroked::after {\n border-left-color: #333;\n}\n\n.PollingCardComposer .PollingCardComposer-pollDuration {\n border-top: 1px solid #333;\n}\n\n.tweet-box[contenteditable=\"true\"] {\n border-color: #050505 !important;\n}\n\n.global-nav .search-input {\n border: 1px solid #050505;\n}\n\n.QuoteTweet {\n border: 1px solid #666;\n}\n\n.RichEditor-scrollContainer {\n border: 1px solid #050505;\n}\n\n.tweet-box textarea:focus, .tweet-box input[type=\"text\"], .currently-dragging .tweet-form.is-droppable .tweet-drag-help, .tweet-box[contenteditable=\"true\"]:focus, .RichEditor-scrollContainer.is-fakeFocus {\n border-color: #050505;\n}\n\n.RichEditor {\n border: 1px solid #101010 !important;\n}\n\n.tweet-box textarea:focus, .tweet-box input[type=\"text\"], .currently-dragging .tweet-form.is-droppable .tweet-drag-help, .tweet-box[contenteditable=\"true\"]:focus, .RichEditor.is-fakeFocus {\n border-color: #101010;\n}\n\n.TwitterCard .PlayerCard--video .PlayerCard-videoContainer {\n border-bottom: 1px solid #666;\n}\n\n.tweet-form .thumbnail-container .previews .preview {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 0px 0px rgba(255, 255, 255, 0.6);\n background-color: rgba(0,0,0,0);\n}\n\n.tweet-form .thumbnail-container .preview {\n border: 1px solid #333;\n}\n\n .button.selected, .follow-button .unfollow .button {\n border-color: #050505;\n} \n \n .button.selected:hover {\n border-color: #333;\n} \n\n input:focus, textarea:focus, div[contenteditable=\"true\"]:focus, div[contenteditable=\"true\"].fake-focus {\n \tborder: 1px solid #333;\n}\n\n .ThreadedConversation .ThreadedConversation-tweet .stream-item .tweet, .ThreadedPermalinkOverlay .ThreadedConversation .ThreadedConversation-tweet .stream-item .tweet, .ThreadedPermalinkOverlay .ThreadedConversation .ThreadedConversation-tweet .stream-item.open {\n border-bottom: 0px solid #050505 !important;\n}\n\ninput, textarea, div[contenteditable], .t1-select {\n border: 1px solid #050505;\n}\n\n.Streams .TweetForwardTimeline .AdaptiveMedia {\n border: 1px solid #050505;\n}\n\n.Streams .TweetForwardTimeline .tweet {\n border: 1px solid #050505;\n}\n\n.ComposerThumbnail {\n background-color: #333;\n border: 1px solid #333;\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 0px 0px rgba(255, 255, 255, 0.6);\n}\n\n.ProfileCard--wide .ProfileCard-bio {\n color: #CCCCCC;\n}\n\n.ProfileCard a, .ProfileCard a:hover, .ProfileCard a:focus, .ProfileCard a:active, .ProfileCard .pretty-link, .ProfileCard .pretty-link:hover, .ProfileCard .pretty-link:focus, .ProfileCard .pretty-link:active {\n color: #8899A6;\n}\n\n.TwitterCard .MomentCard {\n background-color: #161616;\n}\n\n.TwitterCard .MomentCard:hover {\n background-color: #1B1B1B;\n}\n\n.TwitterCard .MomentCard-authorName {\n color: #CCCCCC;\n}\n\n .TwitterCard {\n background-color: #161616;\n}\n\n .TwitterCard:hover {\n background-color: #1B1B1B;\n}\n\n .TwitterCard .PlayerCard--video .SummaryCard-contentContainer:hover {\n background-color: #1B1B1B;\n }\n\n.t1-legend {\n border-bottom: 1px solid #060606;\n}\n\n.dismiss-module .dismiss-confirmation, .dismiss-module .feedback-action {\n border-bottom: 1px solid #060606;\n}\n\n.GalleryTweet {\n background: #161616 none repeat scroll 0% 0%;\n}\n\n.login-responsive .page-canvas {\n background-color: #161616;\n}\n\n.login-responsive .mobile, .route-resend-password .mobile, .contact-support {\n background-color: #242424;\n}\n\n.signin .remember {\n color: #CCCCCC;\n}\n \n .global-nav--newLoggedOut #signin-dropdown {\n background-color: #161616;\n display: block;\n}\n \n .SignupCallOut {\n display: block !important;\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.ProfileSidebar .TweetImpressionsModule, .ProfileSidebar .ProfileLifelineInfo, .ProfileSidebar .RelatedUsers {\n display: block;\n}\n\n#auto-close p {\n color:#8899A6;\n background: #161616 none repeat scroll 0% 0%;\n}\n\n.ListCreationModule {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.ProfileUserMomentsTimeline .GridTimeline-items {\n border: 1px solid #050505;\n}\n\n.ProfileUserMomentsTimeline .MomentGuideVTwoCapsuleSummary {\n background: #161616 none repeat scroll 0% 0%;\n border-bottom: 1px solid #050505;\n}\n\n.ProfileUserMomentsTimeline .GridTimeline-items {\n border: 1px solid #050505;\n}\n\n.MomentGuideVTwoCapsuleSummary-cover {\n background-color: #161616;\n}\n\n.MomentGuideVTwoCapsuleSummary-title {\n color: #8899A6;\n}\n\n.front-page-photo-set .front-signin {\n background: #161616 none repeat scroll 0% 0%;\n}\n\n.front-page-photo-set .front-signin, .front-page-photo-set .front-signup {\n border: 1px solid #050505;\n}\n\n.front-card .text-input {\n border: 1px solid #050505;\n box-shadow: 0px 0px 0px #EEE inset, 0px 0px 0px #FFF;\n}\n\n.front-page-photo-set .front-signin .text-input, .front-page-photo-set .front-signup .text-input {\n border: 1px solid #050505;\n}\n\n.front-page-photo-set .front-signup {\n background: #161616 none repeat scroll 0% 0%;\n}\n\n.front-signup h2, .front-signin h2 {\n text-shadow: 0px 0px 0px rgba(255, 255, 255, 0.6);\n}\n\n.front-signup h2 strong, .front-signin h2 strong {\n color: #CCCCCC;\n}\n\n.front-signup h2, .front-signin h2 {\n border-bottom: 1px solid #050505;\n box-shadow: 0px 0px 0px #FFF;\n}\n\n.PageContainer {\n background: transparent;\n}\n\n.Form-textbox, .Button {\n border: 1px solid #333;\n}\n\n.TopNav {\n color: #8899A6;\n background: #242424;\n border-bottom: 1px solid #050505 !important;\n box-shadow: 0 0 0px #aaa;\n}\n\n.TopNav-title {\n color: #8899A6;\n}\n\n.content-inner {\n background-color: #161616 !important;\n}\n\n.field-highlight, .alert {\n background-color: #333;\n background-image: none !important;\n}\n\n.alert {\n text-shadow: 0 0px 0px rgba(255,255,255,0.25);\n}\n\n.Form-textbox:focus {\n border-color: #444;\n}\n\n.backup-code-display {\n border: 1px solid #333;\n}\n\n.MomentMakerHomeModule {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.RichEditor, .TweetBoxAttachments {\n border-color: #050505 !important;\n}\n\n .twitter-timeline-link[class*=\"u-hidden\"] {\n width: auto !important;\n height: auto !important;\n display: inline !important;\n position: static !important;\n margin-left: 0.3em !important;\n}\n\n .ProfileListItem {\n background-color: #161616;\n border-bottom: 1px solid #050505;\n }\n .ProfileListsTimeline .GridTimeline-items.has-items {\n border: 1px solid #050505;\n }", + "urls": [], + "urlPrefixes": [ + "http://twitter.com", + "https://twitter.com", + "https://tweetdeck.twitter.com/", + "http://tweetdeck.twitter.com/" + ], + "domains": [], + "regexps": [] + } + ], + "url": "http://userstyles.org/styles/97767", + "updateUrl": "https://userstyles.org/styles/chrome/97767.json?ik-avatarMarginValue=ik-With+Avatar&ik-notlogin=ik-Display&ik-hpbackground=%23101010&ik-tweetbgcolor=%23161616&ik-tweetbghovercolor=%231B1B1B&ik-navbarbgcolor=%23242424&ik-tweetfontcolor=%23CCCCCC&ik-darkerfontcolor=%238899A6", + "md5Url": "https://update.userstyles.org/97767.md5", + "originalMd5": "638920b1602105b86af58523e42811a2", + "name": "Dark Twitter Customizable", + "enabled": false, + "id": 2, + "_id": "cfa8790e-2f77-404b-9529-3cb7a195ab0a", + "_rev": 1580730543288 + }, + { + "installDate": 1519587024929, + "name": "Linkwarner", + "enabled": true, + "sections": [ + { + "code": "/*Positive Links*/\n\na[href*=\"foldr.us/\"]:after {\n content: \" (foldr.us)\";\n}\na[href*=\"filecrypt.cc/\"]:after {\n content: \" (Filecrypt.cc)\";\n}\na[href*=\"download.serienjunkies.org/\"]:after {\n content: \" (Serienjunkies.org)\";\n}\na[href*=\"uploaded.net/\"]:after {\n content: \" (Uploaded.net)\";\n}\na[href*=\"ul.to/\"]:after {\n content: \" (Uploaded.net)\";\n}\na[href*=\"uploadboy.com/\"]:after {\n content: \" (UploadBoy.com)\";\n}\na[href*=\"1fichier.com/\"]:after {\n content: \" (1fichier.com)\";\n}\na[href*=\"mega.co.nz/\"]:after {\n content: \" (MEGA.co.nz)\";\n}\na[href*=\"mega.nz/\"]:after {\n content: \" (MEGA.nz)\";\n}\na[href*=\"zippyshare.com/\"]:after {\n content: \" (Zippyshare.com)\";\n}\na[href*=\"mediafire.com/\"]:after {\n content: \" (Mediafire.com)\";\n}\na[href*=\"file-upload.net/\"]:after {\n content: \" (File-Upload.net)\";\n}\na[href*=\"dailyuploads.net/\"]:after {\n content: \" (DailyUploads.net)\";\n}\na[href*=\"turbobit.net/\"]:after {\n content: \" (Turbobit.net)\";\n}\na[href*=\"filepup.net/\"]:after {\n content: \" (FilePup.net)\";\n}\na[href*=\"multiup.org/\"]:after {\n content: \" (MultiUp.org)\";\n}\na[href*=\"jheberg.net/\"]:after {\n content: \" (Jheberg.net)\";\n}\na[href*=\"hitfile.net/\"]:after {\n content: \" (hitFile.net)\";\n}\na[href*=\"oboom.com/\"]:after {\n content: \" (Oboom.com)\";\n}\na[href*=\"linky.club/\"]:after {\n content: \" (Linky.Club)\";\n}\na[href*=\"yadi.sk/\"]:after {\n content: \" (Yandex Disk)\";\n}\na[href*=\"uptobox.com/\"]:after {\n content: \" (UpToBox.com)\";\n}\na[href*=\"dropapk.to/\"]:after {\n content: \" (Drop APK)\";\n}\n\n/*Down Links*/\n\na[href*=\"boerse.to/posts/11816261/\"]:after {\n content: \" [Down!]\";\n}\na[href*=\"boerse.to/posts/12556308/\"]:after {\n content: \" [Down!]\";\n}\na[href*=\"ncrypt.in/\"]:after {\n content: \" [Down! (nCrypt.in)]\";\n}\na[href*=\"cryptor.to/\"]:after {\n content: \" [Down! (Cryptor.to)]\";\n}\na[href*=\"rapidshare.com/\"]:after {\n content: \" [Down! (RapidShare.com)]\";\n}\na[href*=\"streamcloud.eu/\"]:after {\n content: \" [Down! (StreamCloud.eu)]\";\n}\na[href*=\"share-online.biz/\"]:after {\n content: \" [Down! (Share-Online.biz)]\";\n}\na[href*=\"share-links.biz/\"]:after {\n content: \" [Down! (Share-Links.biz)]\";\n}\na[href*=\"s2l.biz/\"]:after {\n content: \" [Down! (Share-Links.biz)]\";\n}\n\n/*Negative Links*/\n\na[href*=\"adf.ly/\"]:after {\n content: \" [Achtung! AdF.ly!]\";\n}\na[href*=\"j.gs/\"]:after {\n content: \" [Achtung! AdF.ly!]\";\n}\na[href*=\"linkcrypt.ws/\"]:after {\n content: \" [Achtung! LinkCrypt.ws!]\";\n}\na[href*=\"linksave.in/\"]:after {\n content: \" [Achtung! Linksave.in!]\";\n}\na[href*=\"smoozed.com/\"]:after {\n content: \" [Achtung! Smoozed.com!]\";\n}\na[href*=\"crypt.to/\"]:after {\n content: \" [Achtung! Crypt.to!]\";\n}\na[href*=\"relink.to/\"]:after {\n content: \" [Achtung! relink.to]\";\n}\na[href*=\"relink.us/\"]:after {\n content: \" [Achtung! relink.us]\";\n}", + "domains": [ + "boerse.to", + "3dsiso.com", + "wiiuiso.com", + "serienjunkies.org", + "download.serienjunkies.org", + "dokujunkies.org", + "romshepherd.com", + "movie-blog.to", + "skidrowreloaded.com" + ] + } + ], + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "id": 4, + "updateDate": 1597752072831, + "_id": "9c6b47a5-97db-4532-ae26-8d9160a4dea7", + "_rev": 1597752072831 + }, + { + "installDate": 1518796682661, + "sections": [ + { + "code": ".html5-play-progress, .ytp-play-progress {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAMCAIAAAAs6UAAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUNCQzIyREQ0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUNCQzIyREU0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQ0JDMjJEQjRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQ0JDMjJEQzRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PovDFgYAAAAmSURBVHjaYvjPwMAAxjMZmBhA9H8INv4P4TPM/A+m04zBNECAAQBCWQv9SUQpVgAAAABJRU5ErkJggg==\") repeat-x !important; \nbackground: linear-gradient(to bottom, #FF0000 0%, #FF0000 16.5%, #FF9900 16.5%, #FF9900 33%, #FFFF00 33%, #FFFF00 50%, #33FF00 50%, #33FF00 66%, #0099FF 66%, #0099FF 83.5%, #6633ff 83.5%, #6633ff 100%) !important;\nbackground: -webkit-linear-gradient(top, #FF0000 0%, #FF0000 16.5%, #FF9900 16.5%, #FF9900 33%, #FFFF00 33%, #FFFF00 50%, #33FF00 50%, #33FF00 66%, #0099FF 66%, #0099FF 83.5%, #6633ff 83.5%, #6633ff 100%) !important;\nbackground: -moz-linear-gradient(top, #FF0000 0%, #FF0000 16.5%, #FF9900 16.5%, #FF9900 33%, #FFFF00 33%, #FFFF00 50%, #33FF00 50%, #33FF00 66%, #0099FF 66%, #0099FF 83.5%, #6633ff 83.5%, #6633ff 100%) !important;\n}\n\n.html5-load-progress, .ytp-load-progress {\n background: url(\"data:image/gif;base64,R0lGODlhMAAMAIAAAAxBd////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQECgAAACwAAAAAMAAMAAACJYSPqcvtD6MKstpLr24Z9A2GYvJ544mhXQmxoesElIyCcB3dRgEAIfkEBAoAAAAsAQACAC0ACgAAAiGEj6nLHG0enNQdWbPefOHYhSLydVhJoSYXPO04qrAmJwUAIfkEBAoAAAAsBQABACkACwAAAiGEj6nLwQ8jcC5ViW3evHt1GaE0flxpphn6BNTEqvI8dQUAIfkEBAoAAAAsAQABACoACwAAAiGEj6nLwQ+jcU5VidPNvPtvad0GfmSJeicUUECbxnK0RgUAIfkEBAoAAAAsAAAAACcADAAAAiCEj6mbwQ+ji5QGd6t+c/v2hZzYiVpXmuoKIikLm6hXAAAh+QQECgAAACwAAAAALQAMAAACI4SPqQvBD6NysloTXL480g4uX0iW1Wg21oem7ismLUy/LFwAACH5BAQKAAAALAkAAAAkAAwAAAIghI8Joe0Po0yBWTaz3g/z7UXhMX7kYmplmo0rC8cyUgAAIfkEBAoAAAAsBQAAACUACgAAAh2Ejwmh7Q+jbIFZNrPeEXPudU74IVa5kSiYqOtRAAAh+QQECgAAACwEAAAAIgAKAAACHISPELfpD6OcqTGKs4bWRp+B36YFi0mGaVmtWQEAIfkEBAoAAAAsAAAAACMACgAAAh2EjxC36Q+jnK8xirOW1kavgd+2BYtJhmnpiGtUAAAh+QQECgAAACwAAAAALgALAAACIYSPqcvtD+MKicqLn82c7e6BIhZQ5jem6oVKbfdqQLzKBQAh+QQECgAAACwCAAIALAAJAAACHQx+hsvtD2OStDplKc68r2CEm0eW5uSN6aqe1lgAADs=\") !important;\n}\n\n.html5-scrubber-button, .ytp-scrubber-button {\n background: url(\"data:image/gif;base64,R0lGODlhIgAVAKIHAL3/9/+Zmf8zmf/MmZmZmf+Z/wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMkJBNjY5RTU1NEJFMzExOUM4QUM2MDAwNDQzRERBQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCREIzOEIzMzRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCREIzOEIzMjRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM1QkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMyQkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkECQcABwAsAAAAACIAFQAAA6J4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93bqCA7f7TFaYoIFAMMwczB5EkTzJllEUttmIGoG5bfPBjDawD7CsJC67uWcv2CRov929C/q2ZpcBbYBmLGk6W1BRY4MUDnMvJEsBAXdlknk2fCeRk2iJliAijpBlEmigjR0plKSgpKWvEUheF4tUZqZID1RHjEe8PsDBBwkAIfkECQcABwAsAAAAACIAFQAAA6B4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93TqS40XiKSYgTLBgIBAMqE/zmQSaZEzns+jQ9pC/5dQJ0VIv5KMVWxqb36opxHrNvu9ptPfGbmsBbgSAeRdydCdjXWRPchQPh1hNAQF4TpM9NnwukpRyi5chGjqJEoSOIh0plaYsZBKvsCuNjY5ptElgDyFIuj6+vwcJACH5BAkHAAcALAAAAAAiABUAAAOfeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GKifWaddvNQAtszXYCxgR/Zy5jYTFeXmSDiIZGdQEBd06QSBQ5e4cEkE9nnZQaG2J4F4MSLx8rkqUSZBeurhlTUqsLsi60DpZxSWBJugcJACH5BAkHAAcALAAAAAAiABUAAAOgeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GuifWaddvNwMkZtmY7AWMEgGcKY2ExXl5khFMVc0Z1AQF3TpJShDl8iASST2efloV5JTyJFpgOch8dgW9KZxexshGNLqgLtbW0SXFwvaJfCQAh+QQJBwAHACwAAAAAIgAVAAADoXi63P7wmUmrnVGOzbvfRsYYXGGe6MmF4kEOaSGYMwq2LizHfDGwIlLPNKGZfi6gZmggEAy2iVPZEKZqzakq+1xUFFYe90lxTsHmim6HGpvf3eR7skYJ3PC5tyystc0AboFnVXQ9XFJTZIQOYUYFTQEBeWaSVF4bbCeRk1meBJYSL3WbaReMIxQfHXh6jaYXsbEQni6oaF21ERR7l0ksvA0JACH5BAkHAAcALAAAAAAiABUAAAOeeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMfFlA4hTITEMxkIBMOuADwmhzqeM6mashTCXKw2TVKQyKuTRSx2wegnNkyJ1ozpOFiMLqcEU8BZHx6NYW8nVlZefQ1tZgQBAXJIi1eHUTRwi0lhl48QL0sogxaGDhMlUo2gh14fHhcVmnOrrxNqrU9joX21Q0IUElm7DQkAIfkECQcABwAsAAAAACIAFQAAA6J4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93bqCA7f7TFaYoIFAMMwczB5EkTzJllEUttmIGoG5bfPBjDawD7CsJC67uWcv2CRov929C/q2ZpcBbYBmLGk6W1BRY4MUDnMvJEsBAXdlknk2fCeRk2iJliAijpBlEmigjR0plKSgpKWvEUheF4tUZqZID1RHjEe8PsDBBwkAIfkECQcABwAsAAAAACIAFQAAA6B4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93TqS40XiKSYgTLBgIBAMqE/zmQSaZEzns+jQ9pC/5dQJ0VIv5KMVWxqb36opxHrNvu9ptPfGbmsBbgSAeRdydCdjXWRPchQPh1hNAQF4TpM9NnwukpRyi5chGjqJEoSOIh0plaYsZBKvsCuNjY5ptElgDyFIuj6+vwcJACH5BAkHAAcALAAAAAAiABUAAAOfeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GKifWaddvNQAtszXYCxgR/Zy5jYTFeXmSDiIZGdQEBd06QSBQ5e4cEkE9nnZQaG2J4F4MSLx8rkqUSZBeurhlTUqsLsi60DpZxSWBJugcJACH5BAkHAAcALAAAAAAiABUAAAOgeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GuifWaddvNwMkZtmY7AWMEgGcKY2ExXl5khFMVc0Z1AQF3TpJShDl8iASST2efloV5JTyJFpgOch8dgW9KZxexshGNLqgLtbW0SXFwvaJfCQAh+QQJBwAHACwAAAAAIgAVAAADoXi63P7wmUmrnVGOzbvfRsYYXGGe6MmF4kEOaSGYMwq2LizHfDGwIlLPNKGZfi6gZmggEAy2iVPZEKZqzakq+1xUFFYe90lxTsHmim6HGpvf3eR7skYJ3PC5tyystc0AboFnVXQ9XFJTZIQOYUYFTQEBeWaSVF4bbCeRk1meBJYSL3WbaReMIxQfHXh6jaYXsbEQni6oaF21ERR7l0ksvA0JACH5BAkHAAcALAAAAAAiABUAAAOeeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMfFlA4hTITEMxkIBMOuADwmhzqeM6mashTCXKw2TVKQyKuTRSx2wegnNkyJ1ozpOFiMLqcEU8BZHx6NYW8nVlZefQ1tZgQBAXJIi1eHUTRwi0lhl48QL0sogxaGDhMlUo2gh14fHhcVmnOrrxNqrU9joX21Q0IUElm7DQkAOw==\") !important;\n width: 34px !important;\n height: 21px !important;\n border: none !important;\n margin-left: -18px !important;\n margin-top: 0px !important;\n transform: scale(0.8);\n-webkit-transform: scale(0.8);\n-moz-transform: scale(0.8);\n-ms-transform: scale(0.8);\n}\n.ytp-progress-bar-container:hover .ytp-scrubber-button,\n.ytp-progress-bar-container:hover .ytp-load-progress{\n\timage-rendering: pixelated;\n}\n.html5-progress-bar-container, .ytp-progress-bar-container {\n height: 12px !important;\n}\n.html5-progress-bar, .ytp-progress-bar {\n margin-top: 12px !important;\n}\n.html5-progress-list, .ytp-progress-list, .video-ads .html5-progress-list.html5-ad-progress-list, .video-ads .ytp-progress-list.ytp-ad-progress-list {\n height: 12px !important;\n}\n.ytp-volume-slider-track {\n background: #0C4177 !important;\n}", + "start": 3485, + "domains": [ + "youtube.com" + ] + } + ], + "url": "https://33kk.github.io/uso-archive/?style=95033", + "updateUrl": "https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/usercss/95033.user.css", + "name": "YouTube - Nyan Cat progress bar video player theme", + "enabled": true, + "id": 7, + "originalDigest": "cfb38a924c3c23928728e45c54d09aec9bc73f74", + "updateDate": 1615723396513, + "_id": "979a8182-360f-45d3-91ee-872f41b52e22", + "_rev": 1615723396513, + "etag": "W/\"aae0b30205a4aa86ea01aa8e83f2efd810025cbf66ee7d0c0e6a1ddc6a6366d6\"", + "sourceCode": "/* ==UserStyle==\n@name YouTube - Nyan Cat progress bar video player theme\n@namespace USO Archive\n@author zoid\n@description `Bring Nyan Cat to your YouTube videos with this custom video progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!If Nyan Cat's not to your tastes, check out this customisable style: YouTube - Custom colors video progress bar.
`\n@version 20180627.19.1\n@license CC-BY-NC-4.0\n@preprocessor uso\n@advanced dropdown show_nyan \"Show Nyan Cat\" {\n\tshow_nyan_always \"Always (default)*\" <<YouTube - Custom colors video progress bar.
", + "version": "20180627.19.1", + "license": "CC-BY-NC-4.0", + "preprocessor": "uso", + "vars": { + "show_nyan": { + "type": "select", + "label": "Show Nyan Cat", + "name": "show_nyan", + "value": null, + "default": "show_nyan_always", + "options": [ + { + "name": "show_nyan_always", + "label": "Always (default)*", + "value": "transform: scale(0.8);\n-webkit-transform: scale(0.8);\n-moz-transform: scale(0.8);\n-ms-transform: scale(0.8);" + }, + { + "name": "show_nyan_mouseover", + "label": "Only on mouseover", + "value": "" + } + ] + }, + "stars": { + "type": "select", + "label": "Stars", + "name": "stars", + "value": null, + "default": "stars_animated", + "options": [ + { + "name": "stars_animated", + "label": "Animated (default)*", + "value": "data:image/gif;base64,R0lGODlhMAAMAIAAAAxBd////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQECgAAACwAAAAAMAAMAAACJYSPqcvtD6MKstpLr24Z9A2GYvJ544mhXQmxoesElIyCcB3dRgEAIfkEBAoAAAAsAQACAC0ACgAAAiGEj6nLHG0enNQdWbPefOHYhSLydVhJoSYXPO04qrAmJwUAIfkEBAoAAAAsBQABACkACwAAAiGEj6nLwQ8jcC5ViW3evHt1GaE0flxpphn6BNTEqvI8dQUAIfkEBAoAAAAsAQABACoACwAAAiGEj6nLwQ+jcU5VidPNvPtvad0GfmSJeicUUECbxnK0RgUAIfkEBAoAAAAsAAAAACcADAAAAiCEj6mbwQ+ji5QGd6t+c/v2hZzYiVpXmuoKIikLm6hXAAAh+QQECgAAACwAAAAALQAMAAACI4SPqQvBD6NysloTXL480g4uX0iW1Wg21oem7ismLUy/LFwAACH5BAQKAAAALAkAAAAkAAwAAAIghI8Joe0Po0yBWTaz3g/z7UXhMX7kYmplmo0rC8cyUgAAIfkEBAoAAAAsBQAAACUACgAAAh2Ejwmh7Q+jbIFZNrPeEXPudU74IVa5kSiYqOtRAAAh+QQECgAAACwEAAAAIgAKAAACHISPELfpD6OcqTGKs4bWRp+B36YFi0mGaVmtWQEAIfkEBAoAAAAsAAAAACMACgAAAh2EjxC36Q+jnK8xirOW1kavgd+2BYtJhmnpiGtUAAAh+QQECgAAACwAAAAALgALAAACIYSPqcvtD+MKicqLn82c7e6BIhZQ5jem6oVKbfdqQLzKBQAh+QQECgAAACwCAAIALAAJAAACHQx+hsvtD2OStDplKc68r2CEm0eW5uSN6aqe1lgAADs=" + }, + { + "name": "stars_static", + "label": "Static", + "value": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAkCAIAAABE0v5gAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDBCQzQ5NUQ0QjgwMTFFMzgzMjlFRUMwNEE5QTFEODMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDBCQzQ5NUU0QjgwMTFFMzgzMjlFRUMwNEE5QTFEODMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEMEJDNDk1QjRCODAxMUUzODMyOUVFQzA0QTlBMUQ4MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMEJDNDk1QzRCODAxMUUzODMyOUVFQzA0QTlBMUQ4MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsJssJMAAADHSURBVHja7JfBDYAgDEWFsw6lS+kITuVSLiCmxjQhgbaB0kOJBw6A7/82hYZ53Sd7I04mx4t1X6dFrGU7yov0uSMFCLibwxUOrGBhI6umKrmVq2llWDonfUknTPIFYWCBADJ5brGsauIoya2CrJHlVJnJdpV3LMdyLMdyLMdSfUZH2c8ElzdLiUYQBQ3B9976d+IjxudW4gAmmHRtbyiGdQ9iLpIiOyq8QgUNgUbK42QnKtcrp6xQ+OXDSUFDWDjKHkTOeAQYAIkcV+RUQwO/AAAAAElFTkSuQmCC" + } + ] + } + } + }, + "author": "zoid", + "description": "Bring Nyan Cat to your YouTube videos with this custom video progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!If Nyan Cat's not to your tastes, check out this customisable style: YouTube - Custom colors video progress bar.
" + }, + { + "installDate": 1518796679892, + "sections": [ + { + "code": "/*================================================================\n\n Youtube Umbra Theme\n by Andy Cormack\n\n http://ac-design.co.uk/\n @groundxaero\n\n v1.1.9\n\t Last updated: 2017/02/17\n\n ================================================================*/\n\t:root {\n\t\t--selection-bg-color: #8ea2cb;\n\t\t--selection-text-color: #dde;\n\t\t--body-font: 'Open Sans', sans-serif;\n\t\t--bg-color: #1b1b1d;\n\t\t--main-text-color: #aaaab6;\n\t\t--main-faded-text-color: #66666c;\n\t\t--author-highlight-bg-color: #445;\n\t\t--sep-line-color: #36363f;\n\t\t--card-bg-color: #222225;\n\t\t--card-dark-bg-color: #1e1e20;\n\t\t--card-light-bg-color: #2a2a2d;\n\t\t--card-border-color: #2f2f34;\n\t\t--card-hover-bg-color: #2a2a2d;\n\t\t--card-light-hover-bg-color: #303034;\n\t\t--card-light-hover-border-color: #404044;\n\t\t--menu-bg-color: #2a2a2e;\n\t\t--menu-hover-bg-color: #2f2f34;\n\t\t--menu-border-color: #36363f;\n\t\t--menu-light-bg-color: #3a3a44;\n\t\t--menu-light-hover-bg-color: #3f3f48;\n\t\t--menu-light-active-bg-color: #46464f;\n\t\t--menu-light-border-color: #46464f;\n\t\t--link-color: #ddd;\n\t\t--link-hover-color: #fff;\n\t\t--input-box-bg-color: #171719;\n\t\t--input-checkbox-toggle-bg-color: #54545a;\n\t\t--input-checkbox-active-bg-color: #3a3a44;\n\t\t--input-checkbox-inactive-bg-color: #222225\n\t}\n\t::-moz-selection {\n\t\tbackground: var(--selection-bg-color);\n\t\tcolor: var(--selection-text-color)\n\t}\n\t::selection {\n\t\tbackground: var(--selection-bg-color);\n\t\tcolor: var(--selection-text-color)\n\t}\n\tbody {\n\t\tfont-family: var(--body-font);\n\t\tbackground: var(--bg-color)\n\t}\n\t.yt-default p,\n\tbody,\n\tp.yt {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#action-panel-details a,\n\t#pl-header .pl-header-details a,\n\t#watch-header .yt-user-info a,\n\t.HPHGCHB-b-c a,\n\t.HPHGCHB-p-a,\n\t.branded-page-module-title a,\n\t.branded-page-module-title a:visited,\n\t.branded-page-related-channels h3,\n\t.branded-page-related-channels h3 a,\n\t.c4-checklist-module .checklist-item-title-text,\n\t.comment-renderer-header .comment-author-text,\n\t.comment-renderer-like-count,\n\t.comment-replies-renderer-hide,\n\t.comment-replies-renderer-paginator,\n\t.comment-replies-renderer-view,\n\t.creator-editor-title a,\n\t.dashboard-widget-comments .comment-header a,\n\t.dashboard-widget-comments .selectable-item:hover .vm-link a,\n\t.dashboard-widget-videos .video-list-item .video-title a,\n\t.feed-item-main .feed-item-header a,\n\t.feed-item-main a.yt-user-name,\n\t.filter,\n\t.filter-sort.filter-selected,\n\t.lohp-video-link,\n\t.lohp-video-metadata .yt-user-name,\n\t.multirow-shelf .yt-uix-expander-head,\n\t.shared-conversation-title,\n\t.video-player-view-component .video-detail a,\n\t.vm-list-view .vm-video-side-notification-text a,\n\t.vm-list-view .vm-video-side-view-count a,\n\t.vm-list-view .vm-video-title .vm-video-title-content,\n\t.yt-advertise-sidebar a,\n\t.yt-alert-naked .yt-alert-content a,\n\t.yt-card-light .yt-card-title a,\n\t.yt-card-light a,\n\t.yt-creator-benefits-table a,\n\t.yt-dev-showcase-external-link-msg-container:hover a,\n\t.yt-lockup-title a,\n\t.yt-lockup:hover .yt-lockup-description a,\n\t.yt-lockup:hover .yt-lockup-meta a,\n\t.yt-lockup:hover a,\n\t.yt-tile-default:hover a,\n\t.yt-tile-static a,\n\t.yt-tile-visible:hover a,\n\t.yt-uix-button-link,\n\ta {\n\t\tcolor: var(--link-color)\n\t}\n\t.video-list .video-list-item .title {\n\t\tcolor: var(--link-color)!important\n\t}\n\t.video-list .video-list-item:hover .title {\n\t\tcolor: var(--link-hover-color)!important\n\t}\n\t#action-panel-details:hover a,\n\t#pl-header .pl-header-details a:hover,\n\t#watch7-sidebar .video-list-item:hover .title,\n\t#watch7-sidebar .video-list-item:hover .title .yt-deemphasized-text,\n\t.HPHGCHB-b-c a:hover,\n\t.HPHGCHB-d-a .HPHGCHB-d-c:hover,\n\t.branded-page-module-title a.branded-page-module-title-link:hover,\n\t.branded-page-related-channels h3 a:hover,\n\t.branded-page-related-channels-item .yt-uix-button-link:hover,\n\t.c4-checklist-module .checklist-item-title-text:hover,\n\t.c4-checklist-module .checklist-item.done .checklist-item-title-text:hover,\n\t.c4-checklist-module .checklist-item:hover .checklist-item-title-text .todo-title-text,\n\t.c4-checklist-module .view-all-link a:hover,\n\t.creator-editor-title a:hover,\n\t.dashboard-widget-comments .comment-header a:hover,\n\t.dashboard-widget-comments .selectable-item:hover .vm-link a:hover,\n\t.dashboard-widget-videos .video-list-item .video-title a:hover,\n\t.feed-item-container:hover .feed-item-header a,\n\t.feed-item-container:hover a.yt-user-name,\n\t.filter:hover,\n\t.lohp-video-metadata .yt-user-name:hover,\n\t.multirow-shelf .compact-shelf-view-all-card-link:hover a,\n\t.multirow-shelf .compact-shelf-view-all-card-link:hover h4,\n\t.video-player-view-component .video-detail a:hover,\n\t.vm-list-view .vm-video-title a.vm-video-title-content:hover,\n\t.yt-alert-naked .yt-alert-content a:hover,\n\ta:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t#footer-logo .footer-logo-icon,\n\t#masthead-logo,\n\t#yt-masthead #logo-container .logo,\n\t.footer-logo {\n\t\tbackground: no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAA8CAYAAACEhkNqAAAF/UlEQVR4nO2d3ZWCMBCFtwRLoARLSAlbAiVYAh1sCZZgCZRgCZRACXcfQMXJHfIDEdT5zuHBk8mQTK4kkBB+fgzDMAzDMHQAuPGoATST4w9Aqxw9tuUKXq4LnuvQ4FG/w9ax/ngwiOjyWi3sgg7DH6baug0+CgDHMbgG0GzdHh8BhquU8cwV1kXmg2GMYXDardvnbYF1fyHqrdvo7YB1gTF0W7fT24FhHGGEcaUawJHjOGNfKXl2Mxgcy2jEcS7VCB052XXG/k8poCrGVwO9G2R/iJRjDU7C52klv7mU6Q6hC6VS7FkXs6u+GsCZVWgFv2vghM893LlWS2PDgnVUTlYTW62L+Vu9YAvAMM3hsYLfNXDC5x6E5XiNlweMzYF5fS/0LmY33eDPjy6AUn4TccLnHoR1WhobLWBncjKve4u12xoteqX8JuKEzz0Iq1kaGy1gv8oJj8KuIzZl7ioyQfodYUN8NIk+UnAvPFcs5YYy4N3haZKujcV+ixUqA6RfARri49uEVW56B3w5yWWSzm6L+2IFygQmrByKCosNzPtJOhMe7QYxdK0NHgvR/kb/6kNUDF2YXKxWCxsXYaN16xoNKcuWwrrisdgwhQ75ixKLCuugnNSN6aygslFD6556mWeSl11pWmHDGjzGZo6GlIX5YHZthI3EKee6krQK4akpL98kf404gZXtecCvSg307uUwyXuMrATAn5F9s7DU9VHQx7ZAxI0ThgtGcN405GcR4OOoK3igLyJv6qRvJfJ/q7AcAvOs4H94ddqN5K8Q+NPH+soC+q06E009yZc6rgHEvw1fKixRfyoy8D+852fio4qs0x1WplVB/JWnmuRh841XDEI9gD9Y7cV5v1JY8MdR3pUIfmzYw2vZBuw8KtLf6iButv0q8rTEpp6kazcG1cTmW4XF6i0fTMtxlvdAE35Xx8qidofSdnVIJRgnkYcV2AkbdiV0k3QTlmJD/MScx3uEQMp7R9oWAeG14lWgUiyAzKebpJuwFBvix5vtID52KSxtjRbA+3eGS7GBCUu1IX5C6cBOhcUqe4P17wyXYqOc04TF/bD0VhysnWR570jbYkAf6HlrrxQ7l2KjBNiExf146TGQ8t7J8ZcFEtZeKWV1KTZKgL9BWOwZoAv48dJjIOW9k+MvCyW4dLJSKatLscH3CoudywX8eOkxkPLeyfGXhVJhE9azXRthI5FxWUVY8Fd9sKPTgiD9FUOpsAnr2a6NsJHIuKwlrEVIf8VQKmzCerZrI2wkMi4mLJiwpF0bYSORcSklrB4JOxJKf8VQKmzCerZrI2wkMi6lhJXygPR1S8yVCi8R1qvmCkstTWZ2bYSNRMYlR1hrT+m8bq8spcKasLqIAM7aIE5Y5wgb5meOJrLuzK4VNt6Ln8SPjEuOsFhZJB8hLFbgZpJeKRWaLm1mgrhO0uuYoCh+5mh+BMgTVuzV3Il0tkzpIGzkipOn1bujjVxlykTeKTHYrbCYbY9BDL+I2EgEuiBqxT8tE8q9sMq2HLhN1p+hr1mXOOV83Ux5ZGy8MRGeX2RpZXkCcXnd3htKcDVhpTamF0ASvFjYJT+7HKl1l3GIKIsL+SE+2FUtab8FpU5qDIqRGlzML7WRdOBru0OwK9+rhDV75zTmYb4kTqQ7BPYCBR9q9IjcjAXhxZtlNgVRCpP8r4WyL5Wg0wISyK91iUnrjghNZN0BpQEm5Wa+JE6k367UteJ77i43KK7Rf+i1PDfnY1WU4MZ0BzX4ILHHcFWbexv6AF8U7S14sWVCnMBvnPF4u+V2aPl7DN3SYTyPHD8yX5K5Hf0uGB8l4PFmeGwdfiflOoy/tXpIqkyZvB4Ml997ADPzVpnn3nr7xXdid9tQ7RbY5rYp7Gobqt0D2447ll1tQ7V7YB8QiMG6wRxgnzwJUW/dRm8J8vaU+BbsI01LgHWJDPus3BpgeHTRbduWu2H2WaKRAYau8YLtv+38anoMD0urrdvg48HjY1O3qaIG8x8a3wtsyXEL/4Pjtyf8u/q4g7EA6F9ImztMAIZhGKvyD107xTs8H96dAAAAAElFTkSuQmCC);\n\t\tbackground-size: 100%;\n\t\topacity: .65\n\t}\n\t#masthead-logo img,\n\t.footer-logo img {\n\t\tvisibility: hidden\n\t}\n\t@media (max-width:704px) {\n\t\t.exp-responsive #yt-masthead #logo-container {\n\t\t\tfilter: invert(.88) saturate(0)\n\t\t}\n\t}\n\t.footer-logo {\n\t\tmargin-top: 15px;\n\t\tdisplay: inline-block\n\t}\n\t.yt-thumb {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#audio-tab img,\n\t#cc-tab img,\n\t#images-tab img,\n\t#keyboard-help-tab img,\n\t#masthead-search .search-btn-component .yt-uix-button-content,\n\t#search-btn span,\n\t#text-tab img,\n\t#transition-tab img,\n\t#video-tab img,\n\t#watch8-action-buttons .yt-uix-button,\n\t#yt-masthead-user .yt-uix-button-icon-bell,\n\t.HPHGCHB-H-i img,\n\t.HPHGCHB-L-c,\n\t.HPHGCHB-W-s,\n\t.HPHGCHB-Y-u,\n\t.HPHGCHB-eb-a img,\n\t.HPHGCHB-g-d,\n\t.HPHGCHB-h-n,\n\t.HPHGCHB-n-c,\n\t.HPHGCHB-nb-b,\n\t.HPHGCHB-x-a,\n\t.add-to-widget .addto-search-playlist-section .search-icon,\n\t.add-to-widget .yt-sprite,\n\t.audiolibrary-track-head .favorite-button .track-action-icon,\n\t.box-close-link img,\n\t.c4-editor-edit::before,\n\t.c4-featured-content-editor .question-mark-icon,\n\t.close-small,\n\t.comments .mod-button,\n\t.copynotice-info-target,\n\t.create-playlist-widget-form .has-icon::before,\n\t.create-playlist-widget-form .yt-uix-button-has-icon::before,\n\t.creator-editor-nav-tabs li a .yt-sprite,\n\t.creator-editor-nav-tabs li>span .yt-sprite,\n\t.creator-heart-big-unhearted,\n\t.flag-channel-abuse-form .report-question-mark,\n\t.footer-help-btn-img-container,\n\t.icon-annotation-anchored,\n\t.icon-annotation-highlight,\n\t.icon-annotation-label,\n\t.icon-annotation-popup,\n\t.icon-annotation-title,\n\t.live-chat-widget .live-comments-emoji-picker-open::before,\n\t.live-chat-widget .overflow-menu-button::before,\n\t.live-chat-widget .post-button::before,\n\t.mediapicker-audio .audio-monetized-badge-container img,\n\t.pl-header-title-icon,\n\t.track.attribution .license-button .track-action-icon,\n\t.vm-list-view .vm-video-metric .yt-sprite,\n\t.vm-search-btn .yt-uix-button-content,\n\t.yt-card a.yt-action:not([style-scope]):not(.style-scope):after,\n\t.yt-close-img,\n\t.yt-help-icon,\n\t.yt-ui-menu-item.has-icon::before,\n\t.yt-uix-button .yt-uix-button-arrow,\n\t.yt-uix-button .yt-uix-button-icon,\n\t.yt-uix-button-icon-annotation-anchored,\n\t.yt-uix-button-icon-annotation-highlight,\n\t.yt-uix-button-icon-annotation-label,\n\t.yt-uix-button-icon-annotation-popup,\n\t.yt-uix-button-icon-annotation-title,\n\t.yt-uix-button-icon-icon-account-settings,\n\t.yt-uix-button-menu-item-icon-annotation-anchored,\n\t.yt-uix-button-menu-item-icon-annotation-highlight,\n\t.yt-uix-button-menu-item-icon-annotation-label,\n\t.yt-uix-button-menu-item-icon-annotation-popup,\n\t.yt-uix-button-menu-item-icon-annotation-title,\n\t.yt-uix-clickcard-close,\n\t.yt-uix-form-input-checkbox-element,\n\t.ytch-search-container .search-btn-component .yt-uix-button-content,\n\tbutton.audio-add img,\n\tbutton.expand-button,\n\tbutton.play-pause-button,\n\timg.storyboard-icon.audio-icon,\n\timg.storyboard-icon.video-icon {\n\t\tfilter: invert(100%)\n\t}\n\t.timeline-zoomslider .slider-icon {\n\t\tfilter: invert(100%) brightness(200%)\n\t}\n\tbutton.thumb-add img,\n\tbutton.thumb-remove img {\n\t\tfilter: invert(100%) saturate(0)\n\t}\n\t#player-playlist .yt-uix-button-icon.yt-sprite {\n\t\tfilter: invert(0)\n\t}\n\t.add-segment-button-icon,\n\t.c4-checklist-module .checklist-item.active .todo-icon,\n\t.delete-segment-button-icon,\n\t.live-dashboard .yt-sprite,\n\t.vm-list-view .vm-video-indicators,\n\t.yt-sprite.vm-video-privacy {\n\t\tfilter: brightness(120%) saturate(5%)\n\t}\n\t.video-unlisted-icon {\n\t\tbackground: no-repeat url(http://s.ytimg.com/yts/imgbin/www-hitchhiker-2x-vflMlDDAN.png) -285px -221px;\n\t\tbackground-size: 419px 399px;\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tfilter: invert(50%)\n\t}\n\t.yt-uix-form-input-checkbox-container input:checked+.yt-uix-form-input-checkbox-element {\n\t\tborder-color: #777;\n\t\topacity: .7\n\t}\n\t.comment-renderer.channel-owner .comment-author-text {\n\t\tbackground-color: var(--author-highlight-bg-color);\n\t\tpadding-left: .5em;\n\t\tpadding-right: .5em\n\t}\n\t.yt-ui-ellipsis {\n\t\tbackground: 0 0!important\n\t}\n\t#masthead-appbar,\n\t#masthead-container,\n\t#yt-masthead-container,\n\t.footer-container,\n\t.yt-card,\n\tbody #footer-container {\n\t\tbackground: var(--card-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder: none\n\t}\n\t.yt-uix-checkbox-on-off .toggle {\n\t\tbackground: var(--input-checkbox-toggle-bg-color)\n\t}\n\t.yt-uix-checkbox-on-off label {\n\t\tbackground-color: var(--input-checkbox-inactive-bg-color)\n\t}\n\t.yt-uix-checkbox-on-off input[type=checkbox]:checked+label {\n\t\tbackground-color: var(--input-checkbox-active-bg-color)\n\t}\n\t.yt-consent-banner {\n\t\tbackground: var(--card-light-bg-color);\n\t\tborder: none\n\t}\n\t.yt-alert-actionable.yt-alert-success,\n\t.yt-alert-default.yt-alert-success,\n\t.yt-alert-naked.yt-alert-success .yt-alert-icon,\n\t.yt-alert-small.yt-alert-success {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.yt-consent-banner .yt-consent-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-consent-banner .consent-close {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-consent-banner .consent-close:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.yt-alert-actionable.yt-alert-info,\n\t.yt-alert-default.yt-alert-info,\n\t.yt-alert-naked.yt-alert-info .yt-alert-icon,\n\t.yt-alert-small.yt-alert-info {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.yt-alert-panel {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-F-e.HPHGCHB-F-m,\n\t.HPHGCHB-F-k.HPHGCHB-F-m,\n\t.yt-alert-actionable.yt-alert-warn,\n\t.yt-alert-default.yt-alert-warn,\n\t.yt-alert-naked.yt-alert-warn .yt-alert-icon,\n\t.yt-alert-small.yt-alert-warn {\n\t\tbackground-color: #ffbd59;\n\t\tmargin-bottom: 1em\n\t}\n\t.HPHGCHB-s-n,\n\t.picker.modal-dialog-bg,\n\t.yt-dialog-bg,\n\t.yt-uix-overlay-bg {\n\t\tbackground-color: #000\n\t}\n\t.HPHGCHB-s-n {\n\t\topacity: .6\n\t}\n\t.HPHGCHB-s-f,\n\t.HPHGCHB-s-g,\n\t.no-focus-outline .yt-dialog-fg:focus,\n\t.yt-dialog-fg,\n\t.yt-uix-overlay-fg {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.yt-uix-overlay-actions {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.HPHGCHB-s-f .HPHGCHB-s-p {\n\t\tbackground-color: var(--menu-light-bg-color);\n\t\tcolor: var(--link-color)\n\t}\n\t.HPHGCHB-f-c:focus .HPHGCHB-f-f,\n\t.HPHGCHB-f-c:hover .HPHGCHB-f-f,\n\t.HPHGCHB-f-h .HPHGCHB-f-f,\n\t.HPHGCHB-h-q li a,\n\t.yt-dialog-fg-content .yt-dialog-title,\n\t.yt-uix-overlay-fg-content .yt-dialog-title {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-dialog-fg-content,\n\t.yt-uix-overlay-fg-content,\n\tinput.HPHGCHB-l-f.HPHGCHB-h-o {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.overlay-confirmation-preferences-dialog .overlay-confirmation-delivery-method,\n\t.share-email label {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#playlist-settings-editor .yt-uix-tabs,\n\t.HPHGCHB-f-a,\n\t.HPHGCHB-s-f .HPHGCHB-s-p,\n\t.flag-channel-abuse-form hr {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.HPHGCHB-h-i {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#collaboration-settings .yt-uix-button.create-invite-link-button,\n\t.HPHGCHB-r-a {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-r-e,\n\t.HPHGCHB-r-e strong {\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t.yt-channel-msg-dialog .user-box {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.yt-channel-msg-dialog .compose-message {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-s-f .HPHGCHB-s-i,\n\t.create-playlist-widget-form .create-playlist-bottom-section,\n\t.yt-channel-msg-dialog .yt-dialog-footer {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.yt-uix-form-label,\n\t.yt-uix-form-legend,\n\tli.guide-section h3 a {\n\t\tcolor: var(--link-color)\n\t}\n\t#playlist-settings-editor .yt-dialog-footer {\n\t\tbackground-color: var(--card-bg-color);\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#collaboration-settings .collaboration-settings-invite-link.disabled::before {\n\t\topacity: .05;\n\t\tpointer-events: none\n\t}\n\t.yt-card .yt-uix-tabs {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.pl-header-sharepanel-content .share-panel-url,\n\t.share-panel,\n\t.yt-masthead-account-picker.yt-uix-clickcard-card-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.share-email-preview-container {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#masthead-container,\n\t#yt-masthead-container {\n\t\tbackground: var(--card-dark-bg-color)\n\t}\n\t#masthead-search-term,\n\t#masthead-search-terms {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tbox-shadow: none;\n\t\tborder: 1px solid var(--menu-border-color)\n\t}\n\t#masthead-search-term input,\n\t#masthead-search-term input:focus,\n\t#masthead-search-terms input {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#masthead-search-term:hover,\n\t#masthead-search-terms:hover {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.gssb_m {\n\t\tcolor: var(--main-text-color);\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.gssb_e {\n\t\tborder: none\n\t}\n\t.gssb_i,\n\t.gssb_i td {\n\t\tbackground: var(--card-light-bg-color)\n\t}\n\t#appbar-nav .yt-uix-button.yt-uix-button-epic-nav-item,\n\t.yt-masthead-picker-account-subtitle {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.yt-masthead-picker-footer {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.yt-uix-button-default.yt-masthead-picker-button-primary,\n\t.yt-uix-button-default.yt-masthead-picker-settings-button {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.yt-uix-button-default:hover.yt-masthead-picker-button-primary,\n\t.yt-uix-button-default:hover.yt-masthead-picker-settings-button {\n\t\tbackground: var(--menu-light-hover-bg-color)\n\t}\n\t.yt-uix-button-default.yt-masthead-picker-settings-button .yt-uix-button-icon {\n\t\topacity: .7\n\t}\n\t.yt-uix-button-default:hover.yt-masthead-picker-settings-button .yt-uix-button-icon {\n\t\topacity: .9\n\t}\n\t#yt-masthead-notifications-title,\n\t.epic-nav-item-heading,\n\t.epic-nav-item.selected,\n\t.epic-nav-item.yt-uix-button-toggled,\n\t.yt-ui-menu-content,\n\ta.yt-uix-button-epic-nav-item.selected,\n\ta.yt-uix-button-epic-nav-item.yt-uix-button-toggled,\n\tbutton.yt-uix-button-epic-nav-item.selected,\n\tbutton.yt-uix-button-epic-nav-item.yt-uix-button-toggled {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yt-masthead-notifications-content .item-section>li>.yt-lockup-tile,\n\t#yt-masthead-notifications-content .yt-ui-ellipsis {\n\t\tbackground: var(--card-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yt-masthead-notifications-content .item-section>li>.yt-lockup-tile:hover,\n\t#yt-masthead-notifications-content .yt-lockup-tile:hover .yt-ui-ellipsis {\n\t\tbackground: var(--card-hover-bg-color)\n\t}\n\t.yt-ui-menu-content {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#creator-subheader #creator-subheader-item-count,\n\t.HPHGCHB-g-q,\n\t.business-email-container .business-email-button,\n\t.comment-section-renderer-paginator,\n\t.yt-form-input-select-container,\n\t.yt-uix-button-dark,\n\t.yt-uix-button-dark[disabled],\n\t.yt-uix-button-dark[disabled]:active,\n\t.yt-uix-button-dark[disabled]:focus,\n\t.yt-uix-button-dark[disabled]:hover,\n\t.yt-uix-button-default,\n\t.yt-uix-button-default[disabled],\n\t.yt-uix-button-default[disabled]:active,\n\t.yt-uix-button-default[disabled]:focus,\n\t.yt-uix-button-default[disabled]:hover,\n\t.yt-uix-button-panel:hover .creator-bar-item .yt-uix-button-text-dark,\n\t.yt-uix-button-subscribe-unbranded,\n\t.yt-uix-button-subscribe-unbranded[disabled],\n\t.yt-uix-button-subscribe-unbranded[disabled]:active,\n\t.yt-uix-button-subscribe-unbranded[disabled]:focus,\n\t.yt-uix-button-subscribe-unbranded[disabled]:hover,\n\t.yt-uix-button-subscribed-branded,\n\t.yt-uix-button-subscribed-branded[disabled],\n\t.yt-uix-button-subscribed-unbranded,\n\t.yt-uix-button-subscribed-unbranded[disabled],\n\t.yt-uix-button-text {\n\t\tbackground: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-border-color);\n\t\topacity: 1\n\t}\n\t.yt-uix-button-c4-view-action {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-g-q:hover,\n\t.yt-uix-button-dark:hover,\n\t.yt-uix-button-default.yt-uix-button-active,\n\t.yt-uix-button-default.yt-uix-button-active:focus,\n\t.yt-uix-button-default.yt-uix-button-toggled,\n\t.yt-uix-button-default:active,\n\t.yt-uix-button-text:active {\n\t\tbackground-color: var(--menu-hover-bg-color);\n\t\tborder-color: var(--menu-border-color);\n\t\tbox-shadow: none\n\t}\n\t.HPHGCHB-g-f,\n\t.HPHGCHB-g-f.HPHGCHB-g-y,\n\t.HPHGCHB-g-f:active,\n\t.HPHGCHB-g-v:active,\n\t.HPHGCHB-g-w:active {\n\t\tbackground-image: none;\n\t\tbackground-color: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color);\n\t\tbox-shadow: none\n\t}\n\t.HPHGCHB-g-f:hover {\n\t\tbackground-image: none;\n\t\tbackground-color: var(--menu-light-hover-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t#comment-section-renderer .comment-section-renderer-paginator:hover,\n\t.yt-uix-button-default.yt-uix-button-toggled:hover,\n\t.yt-uix-button-default:hover,\n\t.yt-uix-button-panel .creator-bar-item .yt-uix-button-text-dark:hover,\n\t.yt-uix-button-subscribe-unbranded:hover,\n\t.yt-uix-button-subscribed-branded[disabled]:active,\n\t.yt-uix-button-subscribed-branded[disabled]:focus,\n\t.yt-uix-button-subscribed-branded[disabled]:hover,\n\t.yt-uix-button-subscribed-unbranded[disabled]:active,\n\t.yt-uix-button-subscribed-unbranded[disabled]:focus,\n\t.yt-uix-button-subscribed-unbranded[disabled]:hover,\n\t.yt-uix-button-text:hover {\n\t\tbackground: var(--menu-light-hover-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-light-border-color);\n\t\tbox-shadow: none\n\t}\n\t.HPHGCHB-g-f[disabled],\n\t.HPHGCHB-g-f[disabled]:active,\n\t.HPHGCHB-g-f[disabled]:hover,\n\t.yt-uix-button.yt-uix-button-subscribed-unbranded {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.HPHGCHB-g-f[disabled],\n\t.HPHGCHB-g-f[disabled]:active,\n\t.HPHGCHB-g-f[disabled]:hover,\n\t.yt-uix-button-menu {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.yt-ui-menu-item,\n\t.yt-uix-button-menu .yt-uix-button-menu-item {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-uix-button-menu .yt-uix-button-menu-item-highlight .yt-uix-button-menu-item,\n\t.yt-uix-button-menu .yt-uix-button-menu-item.selected,\n\t.yt-uix-button-menu .yt-uix-button-menu-item:hover {\n\t\tcolor: var(--link-hover-color);\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.yt-ui-menu-item:hover {\n\t\tbackground: rgba(255, 255, 255, .02)\n\t}\n\t.yt-ui-menu-item:focus {\n\t\tbackground: rgba(255, 255, 255, .05)\n\t}\n\t.yt-uix-clickcard-card-border,\n\t.yt-uix-hovercard-card-border {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-E-g {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-E-l .HPHGCHB-E-e {\n\t\tborder-right-color: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-E-l .HPHGCHB-E-h {\n\t\tborder-right-color: #66666f\n\t}\n\t.HPHGCHB-E-e {\n\t\tborder-left-color: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-E-h {\n\t\tborder-left-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-p-c,\n\t.yt-uix-clickcard-card-body,\n\t.yt-uix-hovercard-card-body {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-uix-clickcard-card-flip .yt-uix-card-body-arrow-horizontal,\n\t.yt-uix-hovercard-card-flip .yt-uix-card-body-arrow-horizontal {\n\t\tborder-right-color: var(--menu-bg-color)\n\t}\n\t.yt-uix-clickcard-card-reverse .yt-uix-card-body-arrow-vertical,\n\t.yt-uix-hovercard-card-reverse .yt-uix-card-body-arrow-vertical {\n\t\tborder-bottom-color: var(--menu-bg-color)\n\t}\n\t.yt-uix-button-arrow {\n\t\tborder-top-color: var(--main-text-color)\n\t}\n\t.yt-uix-clickcard-card-flip .yt-uix-card-border-arrow-horizontal,\n\t.yt-uix-hovercard-card-flip .yt-uix-card-border-arrow-horizontal {\n\t\tborder-right-color: var(--menu-border-color)\n\t}\n\t.yt-uix-clickcard-card-reverse .yt-uix-card-border-arrow-vertical,\n\t.yt-uix-hovercard-card-reverse .yt-uix-card-border-arrow-vertical {\n\t\tborder-bottom-color: var(--menu-border-color)\n\t}\n\t#appbar-guide-menu,\n\t.guide-flyout {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#appbar-guide-button {\n\t\tbackground: 0 0;\n\t\tborder: none\n\t}\n\t#appbar-guide-button .yt-uix-button-icon {\n\t\tfilter: invert(.4)\n\t}\n\t#masthead-positioner:hover .yt-uix-button-icon-appbar-guide {\n\t\tfilter: brightness(2)\n\t}\n\t.guide-pinned .guide-pinning-enabled #appbar-guide-menu {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.guide-collapsible-item .yt-uix-expander-head:hover,\n\t.guide-flyout-trigger.on-hover,\n\t.guide-item:hover,\n\t.guide-item:hover .yt-deemphasized-text {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.guide-item,\n\t.question-shelf-heading h4 {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-lockup-notifications-container {\n\t\tborder-color: var(--sep-line-color);\n\t}\n\t.service-endpoint-replace-enclosing-action-notification {\n\t\tcolor: var(--main-text-color);\n\t}\n\t.guide-item .guide-count,\n\t.guide-item-subtitle,\n\t.guide-view-more {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.guide-item .yt-sprite {\n\t\tfilter: brightness(200%);\n\t\topacity: .65\n\t}\n\t.guide-item.guide-item-selected .yt-sprite,\n\t.guide-item:hover .yt-sprite {\n\t\topacity: 1\n\t}\n\t.guide-section-separator,\n\t.search-header,\n\t.yt-lockup-playlist-item {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.compact-shelf .yt-uix-button-shelf-slider-pager {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.browse-list-item-container:hover .compact-shelf .yt-uix-button-shelf-slider-pager,\n\t.compact-shelf:hover .yt-uix-button-shelf-slider-pager {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.compact-shelf .yt-uix-shelfslider-next-arrow,\n\t.compact-shelf .yt-uix-shelfslider-prev-arrow,\n\t.rtl .compact-shelf .yt-uix-shelfslider-next-arrow,\n\t.rtl .compact-shelf .yt-uix-shelfslider-prev-arrow {\n\t\tfilter: invert(100%)\n\t}\n\t.addto-watch-later-button-sign-in::before,\n\t.addto-watch-later-button::before {\n\t\tfilter: invert(100%) brightness(70%)\n\t}\n\t.lohp-video-metadata .yt-user-name {\n\t\topacity: .7\n\t}\n\t.search-header {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.filter-col-title,\n\t.search-header .yt-uix-button-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.filter {\n\t\topacity: .75\n\t}\n\t.filter-selected {\n\t\topacity: 1\n\t}\n\t.search-header .num-results,\n\t.search-header .num-results strong {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#browse-items-primary .item-section>li>.yt-lockup-tile,\n\t.branded-page-v2-primary-col .branded-page-box,\n\t.section-list li .item-section .branded-page-box {\n\t\tborder-color: var(--sep-line-color)!important;\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.search-pager button {\n\t\tbackground-color: var(--menu-light-hover-bg-color) !important;\n\t}\n\t.feed-header,\n\t.comment-history-block-header {\n\t\tborder-color: var(--sep-line-color);\n\t}\n\t#history-search .history-search-field {\n\t\tborder-color: var(--menu-border-color);\n\t}\n\t.yt-lockup,\n\t.comment-history-entry-renderer-content {\n\t\tcolor: var(--main-text-color);\n\t}\n\t#upload-button-text,\n\t.upload-footer-header,\n\t.upload-sidebar-header {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.upload-other-options-list .upload-option-text {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#view-as-notification,\n\t.channel-header .secondary-header-contents {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.secondary-header-contents .nav-text {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.channel-header .about-custom-links,\n\t.channel-header .about-secondary-links {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.branded-page-module-title,\n\t.channel-header .branded-page-header-title .branded-page-header-title-link {\n\t\tcolor: var(--link-color)\n\t}\n\t.primary-header-contents .view-as-menu .view-as-menu-trigger {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#channel-search .show-search .search-icon,\n\t.c4-button-opacity::before,\n\t.secondary-header-action .header-action-icon,\n\t.yt-uix-button [class*=material],\n\t.yt-uix-button-default .yt-uix-button-icon,\n\t.yt-uix-button-default::before {\n\t\tfilter: invert(60%) brightness(150%)\n\t}\n\t.epic-nav-item,\n\t.lohp-video-metadata,\n\t.lohp-video-metadata .view-count,\n\t.video-player-view-component .view-count .content-item-time-created,\n\t.video-player-view-component .view-count .count,\n\ta.yt-uix-button.yt-uix-button-epic-nav-item,\n\tbutton.yt-uix-button-epic-nav-item {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#c4-spotlight-editor .spotlight-editor-tab {\n\t\tborder-color: var(--card-hover-bg-color)\n\t}\n\t.video-player-view-component {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-uix-expander-ellipsis {\n\t\tbackground-color: transparent\n\t}\n\t.pl-header-thumb .pl-header-play-all-overlay,\n\t.yt-pl-thumb .sidebar,\n\t.yt-pl-thumb-link .yt-pl-thumb-overlay {\n\t\tbackground: rgba(22, 22, 25, .92)\n\t}\n\t.watched-badge {\n\t\tbackground-color: var(--card-bg-color);\n\t\tpadding-top: 25%;\n\t\tfont-size: 1.5em\n\t}\n\t.resume-playback-background:before,\n\t.resume-playback-background,\n\t.resume-playback-background:after {\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t\tleft: 0;\n\t}\n\t.resume-playback-background:before {\n\t\tcontent: '';\n\t\tbottom: 0;\n\t\theight: 4px;\n\t\tbackground-color: rgba(128, 128, 128, 0.3);\n\t}\n\t.resume-playback-background {\n\t\tbackground-color: rgba(34, 34, 37, 0.9);\n\t\ttop: 0;\n\t\theight: 100%;\n\t\topacity: 1;\n\t\tpointer-events: none;\n\t\tcolor: var(--main-text-color);\n\t\ttransition: 0.2s;\n\t}\n\t.resume-playback-background:after {\n\t\tcontent: 'Watched';\n\t\tz-index: 20000;\n\t\ttop: 47.5%;\n\t\tfont-size: 1rem;\n\t\ttext-align: center;\n\t\ttext-transform: uppercase;\n\t}\n\t.thumb-wrapper .resume-playback-background:after {\n\t\ttop: 35%;\n\t}\n\t.pl-video-thumb .resume-playback-background:after {\n\t\ttop: 25%;\n\t\tfont-size: 0.8rem;\n\t}\n\t.yt-lockup-thumbnail:hover .resume-playback-background,\n\t.thumb-wrapper:hover .resume-playback-background,\n\t.pl-video-thumb:hover .resume-playback-background {\n\t\topacity: 0;\n\t}\n\t.resume-playback-progress-bar,\n\t.video-time {\n\t\tz-index: 2;\n\t}\n\t.contains-percent-duration-watched + .yt-lockup-content {\n\t\topacity: 0.3;\n\t}\n\t.yt-lockup-grid:hover .yt-lockup-content {\n\t\topacity: 1;\n\t}\n\t.ltr .watched-badge,\n\t.pl-video .pl-video-thumbnail .watched-badge,\n\t.watched-badge {\n\t\ttop: 0!important;\n\t\tleft: 0!important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\tmax-width: 100%;\n\t\ttext-align: center;\n\t\topacity: .8;\n\t\ttransition: opacity .15s ease\n\t}\n\t.pl-video .pl-video-thumbnail:hover .watched-badge,\n\t.watched-badge:hover {\n\t\topacity: 0\n\t}\n\t.shelf-annotation,\n\t.shelf-description {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#c4-header-bg-container,\n\t.branded-page-v2-primary-col .branded-page-box.c4-featured-content-editor:last-child,\n\t.branded-page-v2-primary-col .branded-page-box.c4-featured-content:last-child,\n\t.branded-page-v2-primary-col .branded-page-box.video-player-view-component:last-child,\n\t.branded-page-v2-primary-col .branded-page-box.welcome:last-child,\n\t.branded-page-v2-primary-col .yt-uix-inlineedit-view-container .branded-page-box,\n\t.branded-page-v2-subnav-container,\n\t.channel-header .secondary-header-contents {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#other-channels-sidebar:hover,\n\t.related-channels-editor:hover {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t#pl-header .pl-header-add-description-button:hover,\n\t.yt-uix-button-c4-view-action.yt-uix-button-destructive {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.about-stats .about-stat {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.about-metadata-container,\n\t.c4-module-editor-form .yt-uix-form-input-select,\n\t.c4-module-editor-form .yt-uix-form-input-text,\n\t.c4-module-editor-form .yt-uix-form-input-textarea {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#pl-header .privacy-icon-present .pl-header-details::before,\n\t.about-metadata-label-border-top {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.about-business-email-editor .c4-module-is-editable:hover,\n\t.about-description-editor .c4-module-is-editable:hover,\n\t.about-metadata-editor .c4-module-is-editable:hover {\n\t\tbackground-color: var(--card-dark-bg-color)\n\t}\n\t.yt-uix-form-input-select,\n\t.yt-uix-form-input-text,\n\t.yt-uix-form-input-textarea {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#pl-header {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#pl-header .pl-header-add-description-button,\n\t#pl-header .pl-header-title {\n\t\tcolor: var(--link-color)\n\t}\n\t.pl-header-inlineedit .c4-module-is-editable:hover {\n\t\tbackground-color: var(--input-box-bg-color)\n\t}\n\t.c4-module-editor-form .yt-uix-form-input-select,\n\t.c4-module-editor-form .yt-uix-form-input-text,\n\t.c4-module-editor-form .yt-uix-form-input-textarea,\n\t.pl-header-inlineedit .yt-uix-button-c4-view-action {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.c4-module-editor-form {\n\t\tbackground-color: transparent\n\t}\n\t.pl-message-panel .yt-alert-default {\n\t\tborder-color: var(--sep-line-color);\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.pl-message-panel .yt-alert-default .yt-alert-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.pl-video {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.pl-video:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.yt-uix-dragdrop-cursor-follower {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.pl-video-list-editable .pl-video:hover .pl-video-handle,\n\t.yt-uix-dragdrop-cursor-follower .pl-video-handle {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tborder: none;\n\t\tpadding: 0 .2em\n\t}\n\t#footer-links-primary a,\n\t#yt-uix-videoactionmenu-menu h3,\n\t.pl-video-title-link {\n\t\tcolor: var(--link-color)\n\t}\n\t.pl-video:hover .pl-video-owner a,\n\t.pl-video:hover .pl-video-title-link {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t#watch7-sidebar .watch-sidebar-head {\n\t\tcolor: inherit\n\t}\n\t.autoplay-bar .autoplay-info-icon {\n\t\tfilter: invert(100%)\n\t}\n\t#watch7-sidebar .video-list-item a:hover .title,\n\t#watch7-sidebar .video-list-item a:hover .title .yt-deemphasized-text,\n\t.video-list .video-list-item .title,\n\t.video-list-item a,\n\t.yt-badge {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.video-list .video-list-item .description,\n\t.video-list .video-list-item .stat {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#watch7-sidebar .watch-sidebar-separation-line {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.yt-badge {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#watch7-creator-bar {\n\t\tbackground: var(--card-light-bg-color);\n\t\tborder-color: var(--card-border-color)\n\t}\n\t.creator-bar-item [class*=yt-uix-button-icon] {\n\t\tfilter: invert(50%) brightness(150%)\n\t}\n\t.ytp-probably-keyboard-focus .ytp-progress-bar:focus,\n\t.ytp-keyboard-focus .ytp-progress-bar:focus {\n\t\tbox-shadow: none;\n\t}\n\t#watch8-action-buttons {\n\t\tborder-top-color: var(--sep-line-color)\n\t}\n\t.watch-editable:hover {\n\t\tbackground: var(--bg-color)\n\t}\n\t.yt-uix-button-default .yt-uix-button-icon,\n\t.yt-uix-button-default::before {\n\t\topacity: 1\n\t}\n\t.yt-uix-button-default:hover .yt-uix-button-icon,\n\t.yt-uix-button-default:hover::before {\n\t\topacity: .4;\n\t\tfilter: invert(100%)\n\t}\n\t.yt-subscription-button-subscriber-count-branded-horizontal,\n\t.yt-subscription-button-subscriber-count-unbranded-horizontal {\n\t\tcolor: var(--main-text-color);\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\tborder-left: 1px solid var(--menu-border-color)\n\t}\n\t.yt-commentbox-text:hover,\n\t.yt-uix-form-input-select:hover,\n\t.yt-uix-form-input-text:hover,\n\t.yt-uix-form-input-textarea:hover {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.add-to-widget .addto-playlist-item {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.like-button-renderer-like-button.yt-uix-button:active:before,\n\t.like-button-renderer-like-button.yt-uix-button.yt-uix-button-toggled:before,\n\t.like-button-renderer-like-button:active .yt-uix-button-content,\n\t.like-button-renderer-like-button.yt-uix-button-toggled .yt-uix-button-content {\n\t\tfilter: hue-rotate(180deg);\n\t}\n\t#creator-sidebar>.creator-sidebar-section.selected>h3 a,\n\t#player-playlist .playlist-videos-list>li:hover,\n\t.add-to-widget .addto-playlist-item.yt-uix-kbd-nav-highlight,\n\t.add-to-widget .addto-playlist-item:hover,\n\t.add-to-widget .create-playlist-item:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.add-to-widget .contains-all-selected-videos.to-be-removed .playlist-status,\n\t.add-to-widget .contains-some-selected-videos.to-be-removed .playlist-status,\n\t.add-to-widget .playlist-status {\n\t\topacity: 1;\n\t\tfilter: invert(.6)\n\t}\n\t.add-to-widget .playlists {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#watch-description,\n\t.add-to-widget .create-playlist-item,\n\t.watch-playlist {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-card .yt-uix-button-expander {\n\t\tborder-top-color: var(--sep-line-color);\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.watch-playlist {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#player-playlist .playlist-videos-list {\n\t\tbackground-color: var(--card-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t#player-playlist:not(.watch-queue-nav) .playlist-videos-list>li.currently-playing {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t#player-playlist .playlist-video h4 {\n\t\tcolor: var(--main-text-color);\n\t\tbackground-color: transparent\n\t}\n\t#player-playlist .video-uploader-byline {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.comment-simplebox-arrow,\n\t.sharing-balloon::after,\n\t.sharing-balloon::before {\n\t\tdisplay: none\n\t}\n\t.comment-simplebox-renderer-collapsed-content,\n\t.sharing-balloon {\n\t\tborder: 1px solid var(--menu-border-color);\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.comment-simplebox {\n\t\tbackground-color: transparent\n\t}\n\t.comment-simplebox-frame {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--input-box-bg-color)\n\t}\n\t.comment-simplebox-prompt,\n\t.comment-simplebox-text {\n\t\tcolor: var(--main-text-color);\n\t\tbackground-color: transparent\n\t}\n\t.comment-simplebox-renderer {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.comment-renderer-header .comment-renderer-linked-comment {\n\t\tbackground: var(--sep-line-color);\n\t\tborder-color: var(--sep-line-color);\n\t\tcolor: var(--main-text-color);\n\t\tpadding: .2em 1em\n\t}\n\t.sprite-like[aria-checked=\"true\"]::before {\n\t\tfilter: hue-rotate(0deg);\n\t}\n\t.sprite-like[aria-checked=\"true\"]:hover::before {\n\t\tfilter: hue-rotate(0deg) brightness(1.35);\n\t}\n\n\t.sprite-dislike[aria-checked=\"true\"]::before {\n\t\tfilter: hue-rotate(140deg);\n\t}\n\t.sprite-dislike[aria-checked=\"true\"]:hover::before {\n\t\tfilter: hue-rotate(140deg) brightness(1.35);\n\t}\n\t#footer .yt-uix-button-icon {\n\t\tfilter: invert(100%);\n\t\topacity: .5\n\t}\n\t#yt-picker-country-footer,\n\t#yt-picker-language-footer,\n\t#yt-picker-safetymode-footer {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#footer .yt-close-img {\n\t\tfilter: invert(100%);\n\t\topacity: 1\n\t}\n\t.yt-default h1,\n\t.yt-default h2,\n\t.yt-default h3,\n\t.yt-default h4,\n\t.yt-default h5,\n\t.yt-default h6,\n\t.yt-picker-region-name,\n\th1.yt,\n\th2.yt,\n\th3.yt,\n\th4.yt,\n\th5.yt,\n\th6.yt {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#footer-links-secondary .copyright,\n\t#footer-links-secondary a,\n\t.yt-default .yt-notes,\n\tp.yt-notes {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#dashboard-header h2 a:hover,\n\t#footer-links-primary a:hover,\n\t.yt-picker-content strong,\n\t.yt-picker-content strong .yt-picker-region-name {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t#footer-links-secondary a:hover,\n\t.account-header h1,\n\th3.account-section-header {\n\t\tcolor: var(--link-color)\n\t}\n\t#footer-main,\n\t#safety-form p.safety-submit,\n\t.yt-picker-header,\n\t.yt-picker-hr {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#creator-sidebar .creator-sidebar-section a:hover {\n\t\tbackground: var(--card-dark-bg-color);\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.account-container {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#creator-sidebar .creator-sidebar-section a,\n\t#creator-sidebar h3,\n\t#creator-sidebar h3 a,\n\t#safety-form,\n\t.account-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.setting-reminder {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#dashboard-header-stats li,\n\t.add-widget-menu-content li,\n\t.yt-horizontal-rule {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.yt-commentbox-text {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.yt-commentbox-text,\n\t.yt-uix-form-input-select-content,\n\t.yt-uix-form-input-select-element {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\ttext-shadow: none\n\t}\n\t.social-connector {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.howto-promo-container {\n\t\tbackground-image: none\n\t}\n\t.howto-circle {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder: 1px solid var(--menu-border-color)\n\t}\n\t.remote-icon {\n\t\tfilter: invert(92%) brightness(200%)\n\t}\n\t.yt-uix-form-input-select,\n\t.yt-uix-form-input-text,\n\t.yt-uix-form-input-textarea {\n\t\tbackground: var(--input-box-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#creator-sidebar .creator-sidebar-branding h1,\n\t#dashboard-header h2 a,\n\t.add-widget-menu-content h3,\n\t.dashboard-widget-header h2 a,\n\t.dashboard-widget-header:hover h2 a {\n\t\tcolor: var(--link-color)\n\t}\n\t#dashboard-header .add-widget-button-label,\n\t#dashboard-header .dashboard-stat-name,\n\t#dashboard-header .dashboard-stat-value,\n\t#dashboard-header h2,\n\t#dashboard-header h3 {\n\t\ttext-shadow: none\n\t}\n\t.HPHGCHB-c-b {\n\t\tbackground: var(--menu-light-hover-bg-color)\n\t}\n\t.HPHGCHB-c-e {\n\t\tbox-shadow: 0 2px 8px #111\n\t}\n\t.dashboard-widget .dashboard-widget-config,\n\t.dashboard-widget .dashboard-widget-content,\n\t.dashboard-widget.notification,\n\t.yt-form-input-select-container select {\n\t\tbackground-color: var(--card-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.dashboard-widget .dashboard-widget-config .dashboard-widget-header,\n\t.dashboard-widget-header:hover,\n\t.dashboard-widget.yt-uix-dragdrop-cursor-follower .dashboard-widget-header,\n\t.dashboard-widget.yt-uix-dragdrop-dragged-item .dashboard-widget-header {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.dashboard-widget-header:hover .dashboard-widget-overlay-icon,\n\t.dashboard-widget.yt-uix-dragdrop-cursor-follower .dashboard-widget-display-title,\n\t.dashboard-widget.yt-uix-dragdrop-cursor-follower .dashboard-widget-header .dashboard-widget-header-controls,\n\t.dashboard-widget.yt-uix-dragdrop-dragged-item .dashboard-widget-display-title,\n\t.dashboard-widget.yt-uix-dragdrop-dragged-item .dashboard-widget-header .dashboard-widget-header-controls,\n\t.dashboard-widget:hover .dashboard-widget-display-title {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.yt-uix-button-icon-dashboard-widget-config,\n\t.yt-uix-button-icon-dashboard-widget-remove {\n\t\tfilter: invert(100%) brightness(200%)\n\t}\n\t#dashboard-header .dashboard-stat-value {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#dashboard-header .add-widget-button-label,\n\t#dashboard-header .dashboard-stat-name {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.add-widget-button {\n\t\tbackground: no-repeat url(http://s.ytimg.com/yts/imgbin/www-videomanager-2x-vflI4gnrL.png) -26px -631px;\n\t\tbackground-size: 70px 705px;\n\t\tfilter: brightness(150%)\n\t}\n\t.add-widget-button:focus,\n\t.add-widget-button:hover {\n\t\tbackground: no-repeat url(http://s.ytimg.com/yts/imgbin/www-videomanager-2x-vflI4gnrL.png) 0 -665px;\n\t\tbackground-size: 70px 705px;\n\t\tfilter: invert(.7)\n\t}\n\t.add-widget-menu-content.widget-limit .add-widget-menu-item:hover,\n\t.add-widget-menu-item,\n\t.add-widget-menu-item.added:hover {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#annotator-select-menu tr.yt-uix-button-menu-item:hover,\n\t.add-widget-menu-item:hover .add-widget-menu-item-contents {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t#creator-sidebar .studio-icon {\n\t\tfilter: invert(1)\n\t}\n\t#creator-sidebar .studio-icon.selected,\n\t#creator-sidebar a:hover .studio-icon.creator-sidebar-dashboard.selected {\n\t\tfilter: none\n\t}\n\t.dashboard-widget-todos .todo-item {\n\t\tborder: 1px solid transparent\n\t}\n\t.dashboard-widget-footer .dashboard-widget-view-all-link:hover,\n\t.dashboard-widget-todos .todo-item:hover {\n\t\tbackground-color: var(--card-hover-bg-color)\n\t}\n\t#vm-myvideos-search-box,\n\t#vm-playlists-search-box,\n\t#vm-tags-search-box,\n\t.dashboard-widget-todos .todo-description {\n\t\tborder-color: var(--card-border-color)\n\t}\n\t#creator-subheader h2,\n\t.dashboard-widget-footer .dashboard-widget-view-all-link,\n\t.yt-creator-notifications .yt-creator-notifications-header h2 {\n\t\tcolor: var(--link-color)\n\t}\n\t#advanced-search-button-menu,\n\t.analytics-sparkline-card .infos .title,\n\t.dashboard-widget-comments .comment-comment,\n\t.yt-creator-notifications .yt-creator-tip-list tr {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.analytics-sparkline-card:hover,\n\t.vm-list-view .vm-video-list .vm-video-item.selected {\n\t\tbackground: var(--card-hover-bg-color)\n\t}\n\t.analytics-sparkline-card .infos .total {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.video-list-item a:hover {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.yt-creator-notifications .yt-creator-tip-list tr {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.yt-creator-notifications .yt-creator-tip-list .inactive {\n\t\tbackground: var(--card-dark-bg-color)\n\t}\n\t.advanced-search-footer {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#non-appbar-vm-video-actions-bar,\n\t#non-appbar-vm-video-actions-bar .vm-video-actions-bar,\n\t#vm-pagination {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.yt-ui-menu-content .yt-ui-menu-item.menu-subheading,\n\t.yt-ui-menu-content .yt-ui-menu-item.menu-subheading-notice {\n\t\tbackground: var(--card-bg-color);\n\t\tborder-color: var(--menu-border-color);\n\t\tborder-bottom: 1px solid var(--menu-border-color);\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.vm-list-view .vm-video-list .vm-video-item,\n\t.vm-list-view .vm-video-metrics a:hover {\n\t\tbackground: 0 0\n\t}\n\t.vm-list-view .vm-video-list .vm-video-item:hover {\n\t\tbackground: var(--card-light-hover-bg-color)\n\t}\n\t#non-appbar-vm-video-actions-bar .vm-video-actions-inner #vm-view-filter-label,\n\t.vm-copyright-filter-wrapper {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#non-appbar-vm-video-actions-bar .vm-video-actions-inner,\n\t.menu-item-top-divider {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.vm-list-view .vm-video-item-content-horizontal-divider {\n\t\tbackground: var(--sep-line-color)\n\t}\n\t#creator-editor-container {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#inline-editor-main,\n\t.metadata-container,\n\t.metadata-editor-container .video-settings-form {\n\t\tbackground: 0 0\n\t}\n\t.creator-editor-nav-tabs li a,\n\t.creator-editor-nav-tabs li>span,\n\t.tabs .tab-header a:focus,\n\t.tabs .tab-header a:hover,\n\t.tabs .tab-header.selected a,\n\t.tabs .tab-header:hover a {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#add-captions-section,\n\t#annotator-add-div,\n\t#annotator-select-div,\n\t#annotator-select-menu .yt-uix-button-menu-item td,\n\t#audio-ui-pagefold,\n\t#audio-ui-wfe .audio-ui-wfe-section,\n\t#audio-ui-wfe table,\n\t#audio-ui-wfe-nonmuting .audio-ui-wfe-rowgroup,\n\t#bottom-notes-section,\n\t#enhance-footer,\n\t#event-line-editor,\n\t#video-settings-section,\n\t.annotation-details-container li.annotation-time-pair,\n\t.annotation-link,\n\t.blur-effect-entry,\n\t.copynotice-claim-details-table tr,\n\t.creator-editor-content #inline-editor-header,\n\t.creator-editor-header,\n\t.creator-editor-nav,\n\t.metadata-editor-container .subnav,\n\t.tab-container,\n\t.timed-event-line,\n\t.translation-editor-header .translation-editor-column-divider,\n\t.translation-editor-header .translation-editor-column-half {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.yt-uix-card-body-arrow-vertical {\n\t\tborder-top-color: var(--menu-bg-color)\n\t}\n\t#player-and-info-pane #video-info dd,\n\t.blur-effect-entry .blur-effect-title,\n\t.copynotice-claim-info,\n\t.copynotice-top-section,\n\t.enhance-effect .property-title,\n\t.enhance-effect .slider-readout,\n\t.menu-tab.selected,\n\t.menu-tab:hover,\n\t.metadata-container h3,\n\t.single-field,\n\t.video-info-text,\n\t.yt-alert-naked .yt-alert-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.blur-effect-entry .blur-effect-explanation,\n\t.blur-effect-footnote {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.video-settings-tag-chips-container {\n\t\tbackground: var(--card-dark-bg-color);\n\t\tborder-color: var(--card-border-color)\n\t}\n\t.yt-chip {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-border-color);\n\t\tbox-shadow: none\n\t}\n\t.translation-editor-original-input,\n\t.translation-editor-original-input:focus,\n\t.translation-editor-original-input:hover,\n\t.video-settings-add-tag {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tborder: 1px solid var(--menu-border-color)!important;\n\t\tcolor: var(--main-text-color)\n\t}\n\t#annotator-select-menu tr.yt-uix-button-menu-item,\n\t#featured-tracks-header {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t#audio-ui {\n\t\tcolor: var(--link-color)\n\t}\n\t#audio-ui-featured-table,\n\t#featured-tracks-header {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.audio-ui-featured-row {\n\t\tbackground-color: var(--card-dark-bg-color);\n\t\tborder-color: var(--card-border-color);\n\t\tbox-shadow: none;\n\t\tcolor: var(--main-text-color)\n\t}\n\t#audio-ui-search-input-field {\n\t\tbackground-color: transparent;\n\t\tborder: none\n\t}\n\t.searchfield input {\n\t\tborder-color: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.searchfield input:focus {\n\t\tborder-color: var(--menu-light-bg-color)\n\t}\n\t#annotator-div {\n\t\tbackground: var(--card-dark-bg-color);\n\t\tborder-color: transparent\n\t}\n\t.time-field-nudge-container .time-field-nudge-down,\n\t.time-field-nudge-container .time-field-nudge-up {\n\t\tbackground-image: none\n\t}\n\t.annotator-clickcard-item .annotator-clickcard-title {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.annotator-clickcard-item .annotator-clickcard-subtitle {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.annotator-overlay-content,\n\t.yt-video-picker-scroll-container {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.annotator-clickcard-item .annotator-clickcard-right .yt-uix-clickcard-close {\n\t\tfilter: invert(.05)\n\t}\n\t.multitrack-timeline {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.timeline-row {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.timeline-ruler .hline,\n\t.timeline-ruler .mtick,\n\t.timeline-ruler .stick {\n\t\tbackground-color: var(--main-text-color)\n\t}\n\t.timedtext-content {\n\t\tbackground-color: transparent\n\t}\n\t#empty-editor-placeholder,\n\t#empty-editor-placeholder h3,\n\t#video-settings-section,\n\t.auto-pause-checkbox-section,\n\t.timeline-ruler .rulabel {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.waveform-player,\n\t.zoom-slider {\n\t\tbackground-color: transparent\n\t}\n\t.timed-event-line.timed-event-line-focused {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.timed-event-line:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.event-text:hover,\n\t.event-time-field:hover {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.zoom-slider {\n\t\tfilter: invert(.95)\n\t}\n\t.live-dashboard .player-controls-buttons {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.live-dashboard-status-bar {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t#verify-phone-page,\n\t.live-chat-widget #comments-scroller,\n\t.live-dashboard .checklist-item,\n\t.live-dashboard .checklist-remove-container,\n\t.live-dashboard-status-bar,\n\t.live-dashboard-status-bar-container {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.live-chat-widget .byline a,\n\t.live-dashboard .more-actions-buttons a,\n\t.live-dashboard .strong-text,\n\t.yt-card .yt-uix-button-expander:hover {\n\t\tcolor: var(--link-color)\n\t}\n\t.live-chat-widget .byline,\n\t.live-dashboard .checklist-item,\n\t.live-dashboard .yt-uix-tabs .yt-uix-button-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.live-chat-widget .comments-textarea-label {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#player .player-dragdrop-handle-container .yt-uix-dragdrop-drag-handle,\n\t.live-dashboard .yt-uix-dragdrop-drag-handle {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder: 1px solid var(--menu-border-color)\n\t}\n\t.yt-uix-button-icon.yt-uix-button-icon-settings.yt-sprite {\n\t\tfilter: invert(100%)\n\t}\n\t.yt-help-icon.yt-sprite {\n\t\tfilter: invert(100%)!important\n\t}\n\t.live-rtd-info-chart-group {\n\t\tfilter: invert(.9) saturate(0);\n\t\tmargin: 1em 0\n\t}\n\t.live-comments-emoji-picker-tab-row {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.gwt-viz-container text,\n\t.live-comments-emoji-picker-tab-cell {\n\t\tfilter: invert(1)\n\t}\n\t.live-chat-page {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.live-chat-widget .comment {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.live-chat-widget .comment.alternate-row {\n\t\tbackground-color: var(--card-dark-bg-color)\n\t}\n\t.live-chat-widget .comment-text {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.stream-health-item {\n\t\tbackground-color: transparent\n\t}\n\t.live-welcome-intro {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.live-welcome-features .yt-sprite {\n\t\tfilter: invert(.87)\n\t}\n\t.caption-queue .contribution-title a,\n\t.comments .comment-footer-action,\n\t.comments .comment-header .user-name,\n\t.comments .thumb-title,\n\t.subscribers-table .description-text a {\n\t\tcolor: var(--link-color)\n\t}\n\t.comments .comment-entry:hover .thumb-title,\n\t.comments .comment-entry:hover .vis-inspect-link,\n\t.subscribers-table .description-text a:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.comments .channel-owner .comment-header .user-name {\n\t\tbackground-color: transparent;\n\t\tfont-weight: 700\n\t}\n\t.comments .feedback-banner,\n\t.feedback-banner {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.tabbed-page .tabs-wrapper {\n\t\tborder-left: none\n\t}\n\t.tabbed-page .tab,\n\t.tabbed-page .tab.active {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.tabbed-page .tab {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.tabbed-page .tab.active {\n\t\tborder-bottom-color: var(--menu-border-color);\n\t\tborder-left-color: var(--menu-border-color);\n\t\tborder-right-color: var(--menu-border-color)\n\t}\n\t.tabbed-page .tab:hover,\n\t.video-dds .entry:hover .highlight {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.caption-queue td,\n\t.caption-queue th,\n\t.subscribers-table .subscribers-table-header,\n\t.subscribers-table td,\n\t.tabbed-page .options-bar,\n\t.tabbed-page .tabs-area {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.video-dds,\n\t.video-dds.open,\n\t.video-dds:hover {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.video-dds .list,\n\t.video-dds .topline {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.video-dds.open .topline {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.video-dds .list {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.video-dds .entry:hover .highlight {\n\t\tcolor: var(--link-color)\n\t}\n\t.video-dds .highlight {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.comments .comment-item:hover .mod-buttonbar,\n\t.comments .comment-item:hover .mod-buttonbar .mod-button {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.commenthub .comments .mod-buttonbar .mod-button-content:hover {\n\t\tbackground: #ccccc6\n\t}\n\t.comments .mod-list,\n\t.comments .mod-list-button {\n\t\tbackground-color: #ccccc4\n\t}\n\t.comments .paginator,\n\t.comments .paginator:hover {\n\t\tbackground-image: none;\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.comments .paginator:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.caption-queue,\n\t.comments .paginator,\n\t.subscribers-table .subscribed-since,\n\t.subscribers-table .subscribers-table-header,\n\t.tabbed-page .tab.active a {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-P-g h2 a:hover,\n\t.HPHGCHB-R-g h2 a:hover,\n\t.caption-queue .contribution-title a:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.waveform-container,\n\t.waveform-slider-container,\n\t.zoom-icon-container,\n\t.zoom-slider-container {\n\t\tfilter: invert(.92) saturate(0)\n\t}\n\t.captions-credits-opt-in-box {\n\t\tbackground: var(--card-bg-color);\n\t\tborder-color: var(--card-border-color)\n\t}\n\t#comment-settings .comment-settings-section {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t#comment-settings .comment-settings-header {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t#comment-settings .comment-settings-label,\n\t#comment-settings .comment-settings-title,\n\t.account-feature-v2-grid-items .account-features-v2-grid-item-description a {\n\t\tcolor: var(--link-color)\n\t}\n\t#comment-settings .comment-settings-control-info,\n\t#comment-settings .comment-settings-subtitle,\n\t#comment-settings label {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.acl-target-list-container .none-defined-text {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.acl-target-list-container[data-which=moderator] {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--input-box-bg-color)\n\t}\n\t.account-features-v2-content,\n\t.acl-target-list-container .target-search,\n\t.channel-watermark-uploader-content .upload-guidelines {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#creator-subheader,\n\t.HPHGCHB-T-e,\n\t.HPHGCHB-T-n tr,\n\t.HPHGCHB-q-h,\n\t.HPHGCHB-t-a,\n\t.account-content .account-section.account-bordered-section,\n\t.account-feature-v2-grid-items .account-features-v2-grid-item-title,\n\t.account-status-scales,\n\t.account-status-v2 {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.HPHGCHB-r-h {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-cb-e.HPHGCHB-a-a {\n\t\tborder-color: var(--sep-line-color)!important\n\t}\n\t.HPHGCHB-R-C .HPHGCHB-R-x,\n\t.HPHGCHB-R-c,\n\t.HPHGCHB-R-x,\n\t.HPHGCHB-R-z,\n\t.account-feature-v2-grid-items li {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-T-n td:nth-child(3):hover,\n\t.HPHGCHB-T-n td:nth-child(4):hover {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.featured-programming-editor .overview {\n\t\tborder-color: var(--card-border-color)\n\t}\n\t#creator-subheader,\n\t.HPHGCHB-N-c,\n\t.HPHGCHB-R-D,\n\t.HPHGCHB-R-h,\n\t.HPHGCHB-b-d,\n\t.HPHGCHB-b-l,\n\t.channel-watermark-uploader-content .watermark-example-container,\n\t.featured-programming-editor .overview {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.HPHGCHB-H-a a,\n\t.HPHGCHB-P-g h2 a,\n\t.HPHGCHB-R-g h2 a,\n\t.HPHGCHB-R-s .HPHGCHB-R-B,\n\t.HPHGCHB-T-e,\n\t.HPHGCHB-T-s .HPHGCHB-T-B,\n\t.HPHGCHB-T-v .HPHGCHB-T-B,\n\t.HPHGCHB-d-a .HPHGCHB-d-b,\n\t.HPHGCHB-pb-d,\n\t.gwt-Label.HPHGCHB-nb-A.HPHGCHB-nb-j.HPHGCHB-nb-C.HPHGCHB-nb-B {\n\t\tcolor: var(--link-color)\n\t}\n\t.HPHGCHB-T-b,\n\t.HPHGCHB-T-l .HPHGCHB-f-c:hover .HPHGCHB-f-f,\n\t.HPHGCHB-T-l .HPHGCHB-f-h .HPHGCHB-f-f,\n\t.HPHGCHB-T-w,\n\t.HPHGCHB-b-c,\n\t.HPHGCHB-d-a .HPHGCHB-d-b {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-R-b,\n\t.HPHGCHB-R-e h3,\n\t.HPHGCHB-R-j,\n\t.HPHGCHB-R-w {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.HPHGCHB-P-j {\n\t\topacity: 1\n\t}\n\t.HPHGCHB-P-g h2 .HPHGCHB-P-j {\n\t\tfilter: saturate(0) invert(100%) brightness(300%)\n\t}\n\t.HPHGCHB-R-d li,\n\t.HPHGCHB-R-e,\n\t.HPHGCHB-R-l .HPHGCHB-f-c:hover .HPHGCHB-f-f,\n\t.HPHGCHB-R-l .HPHGCHB-f-h .HPHGCHB-f-f,\n\t.HPHGCHB-g-f,\n\t.HPHGCHB-r-f {\n\t\tcolor: var(--main-text-color);\n\t\ttext-shadow: none\n\t}\n\t.HPHGCHB-g-f .HPHGCHB-g-c,\n\t.HPHGCHB-g-w .HPHGCHB-g-c {\n\t\tborder-top-color: var(--main-text-color)\n\t}\n\t.HPHGCHB-g-q,\n\t.HPHGCHB-g-q:hover {\n\t\tborder-width: 1px;\n\t\tborder-style: solid\n\t}\n\t.HPHGCHB-g-f:focus,\n\t.HPHGCHB-g-v:focus,\n\t.HPHGCHB-g-w:focus {\n\t\tbox-shadow: none\n\t}\n\t.HPHGCHB-H-g .HPHGCHB-H-d.HPHGCHB-H-e,\n\tinput.HPHGCHB-l-f {\n\t\tcolor: var(--main-text-color)\n\t}\n\tinput.HPHGCHB-l-f {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-N-b,\n\t.HPHGCHB-N-c,\n\t.HPHGCHB-N-g,\n\t.HPHGCHB-N-h,\n\t.HPHGCHB-R-m,\n\t.HPHGCHB-T-d,\n\t.HPHGCHB-T-k tr,\n\t.HPHGCHB-Z-a:first-child>ul {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-ab-e {\n\t\tborder-color: var(--menu-light-border-color)!important\n\t}\n\t.HPHGCHB-K-h {\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-K-h,\n\t.HPHGCHB-K-h .datePickerMonthSelector {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-K-h .datePickerWeekdayLabel,\n\t.HPHGCHB-K-h .datePickerWeekendLabel {\n\t\tbackground-color: var(--menu-hover-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-K-h .datePickerNextButton,\n\t.HPHGCHB-K-h .datePickerPreviousButton {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-K-h .datePickerDayIsWeekend {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.HPHGCHB-K-h .datePickerDayIsValue {\n\t\tbox-shadow: inset 0 0 .1em var(--main-text-color);\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t.HPHGCHB-K-h .datePickerDay:hover,\n\t.HPHGCHB-K-h .datePickerWeekdayLabel:hover,\n\t.HPHGCHB-K-h .datePickerWeekendLabel:hover {\n\t\tbackground-color: var(--menu-light-hover-bg-color);\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.HPHGCHB-K-c,\n\t.HPHGCHB-W-u,\n\t.HPHGCHB-kb-b,\n\t.HPHGCHB-r-b .HPHGCHB-r-g,\n\t.HPHGCHB-r-b .HPHGCHB-r-g .HPHGCHB-g-f,\n\t.HPHGCHB-r-b .HPHGCHB-r-g .HPHGCHB-r-f {\n\t\tfilter: invert(100%)\n\t}\n\t.HPHGCHB-r-b .HPHGCHB-r-g.HPHGCHB-r-e {\n\t\tbackground-color: var(--menu-light-hover-bg-color);\n\t\tfilter: invert(0%)\n\t}\n\t.HPHGCHB-r-b .HPHGCHB-r-g.HPHGCHB-r-e a {\n\t\tcolor: #000\n\t}\n\t.HPHGCHB-b-s {\n\t\tmargin-top: 0\n\t}\n\t.HPHGCHB-b-s .HPHGCHB-a-a {\n\t\tpadding-top: 20px\n\t}\n\t.HPHGCHB-P-b {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-N-h,\n\t.HPHGCHB-T-D,\n\t.HPHGCHB-T-h {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-R-c:hover,\n\t.HPHGCHB-R-p:hover {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.HPHGCHB-T-C .HPHGCHB-T-x,\n\t.HPHGCHB-T-c,\n\t.HPHGCHB-T-m,\n\t.HPHGCHB-T-x,\n\t.HPHGCHB-T-z {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-f-a {\n\t\tbackground: 0 0\n\t}\n\t.HPHGCHB-kb-m,\n\t.HPHGCHB-kb-p {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-kb-e {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-kb-y,\n\t.HPHGCHB-kb-y tr {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-kb-r,\n\t.HPHGCHB-q-b:hover,\n\t.HPHGCHB-q-q:hover,\n\t.HPHGCHB-q-s:hover {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.HPHGCHB-f-i {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-q-b,\n\t.HPHGCHB-q-q {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-q-a,\n\t.HPHGCHB-q-h,\n\t.HPHGCHB-s-f {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-q-u:hover,\n\t.footer-secondary .footer-secondary-info a:hover,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #info.yt-creator-hub-card a:hover,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card .link.yt-creator-hub-card a:hover,\n\t.yt-creator-hub-event-0 a.yt-creator-hub-event:hover,\n\t.yt-creator-hub-social-nav-0 li.yt-creator-hub-social-nav:hover a {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.HPHGCHB-M-e {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-L-i,\n\t.HPHGCHB-L-j,\n\t.HPHGCHB-M-b {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-L-j.HPHGCHB-g-y,\n\t.HPHGCHB-L-j.HPHGCHB-g-y:hover,\n\t.HPHGCHB-L-j:hover,\n\t.HPHGCHB-eb-a {\n\t\tbackground: var(--menu-light-hover-bg-color)\n\t}\n\t.HPHGCHB-L-n {\n\t\tcolor: var(--link-color)\n\t}\n\t.HPHGCHB-L-p {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-M-a,\n\t.HPHGCHB-M-e,\n\t.HPHGCHB-W-c td,\n\t.HPHGCHB-W-c th,\n\t.HPHGCHB-W-o td,\n\t.HPHGCHB-W-o th,\n\t.HPHGCHB-eb-a,\n\t.HPHGCHB-eb-a li {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t#gwt-debug-date-range-slider,\n\t#gwt-debug-performanceChart {\n\t\tfilter: invert(.9)\n\t}\n\t.HPHGCHB-eb-a {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-eb-a li {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-eb-a li:hover {\n\t\tbackground-image: none;\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t.HPHGCHB-eb-a li.HPHGCHB-eb-b {\n\t\tbackground-color: var(--menu-light-active-bg-color)\n\t}\n\t.HPHGCHB-W-c,\n\t.HPHGCHB-W-o,\n\t.HPHGCHB-W-o tr:nth-child(2n) {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-W-H,\n\t.HPHGCHB-W-o .HPHGCHB-W-w td {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t#yt-editor-project-menu div.project-menu-item.selected,\n\t#yt-editor-project-menu div.project-menu-item:hover,\n\t.HPHGCHB-W-o tr:hover,\n\tpaper-item:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.HPHGCHB-W-o .HPHGCHB-W-H:hover,\n\t.track.expanded .audiolibrary-track-head .audiolibrary-column .popularity-bar,\n\t.track.loading .audiolibrary-track-head .audiolibrary-column .popularity-bar,\n\t.track:hover .audiolibrary-track-head .audiolibrary-column .popularity-bar {\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t#main-title,\n\t.HPHGCHB-W-F,\n\t.HPHGCHB-W-q .HPHGCHB-W-F,\n\tbutton.track-selection-menu-button {\n\t\tcolor: var(--link-color)\n\t}\n\t.HPHGCHB-W-g {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.top-menu,\n\t.track-filter-selection-list .track-filter.all,\n\t.track-list li.track,\n\t.track-list li.track.expanded {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.track-list li.track {\n\t\tbackground-color: var(--card-dark-bg-color)\n\t}\n\t.track-list li.track.expanded,\n\t.track-list li.track:hover {\n\t\tbackground-color: var(--card-hover-bg-color)\n\t}\n\t.track-list li.track.loading {\n\t\tbackground-color: var(--card-light-hover-bg-color)\n\t}\n\t.audiolibrary-column-genre-and-mood a:hover,\n\t.audiolibrary-column-title,\n\t.audiolibrary-column-title-expand,\n\t.track.expanded .audiolibrary-track-head .audiolibrary-column,\n\t.track.loading .audiolibrary-track-head .audiolibrary-column,\n\t.track:hover .audiolibrary-track-head .audiolibrary-column {\n\t\tcolor: var(--link-color)\n\t}\n\t.audiolibrary-column-album,\n\t.audiolibrary-column-artist,\n\t.audiolibrary-column-duration,\n\t.audiolibrary-column-genre-and-mood a {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.asset-composition-section,\n\t.asset-sound-recording-section,\n\t.music-attribution-monetization-section,\n\t.music-attribution-no-monetization-section,\n\t.music-no-attribution-monetization-section,\n\t.music-no-attribution-no-monetization-section {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#video-title,\n\t.asset-monetization-header,\n\t.asset-monetization-list div,\n\t.asset-restrictions-header,\n\t.asset-restrictions-list div,\n\t.asset-stores-header,\n\t.asset-stores-list div,\n\t.drag-to-begin-audio-message p,\n\t.drag-to-begin-message p,\n\t.editor-slider .slider-readout,\n\t.editor-timeline .timeline-ruler .rulabel,\n\t.text-property-panel .property-title {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yt-editor-project-menu .project-menu-header {\n\t\tbackground-color: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t#video-title {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tbox-shadow: none;\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#video-title:focus {\n\t\tcolor: var(--main-text-color);\n\t\toutline: 1px solid var(--menu-light-border-color)\n\t}\n\t.infobox-body {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#storyboard {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.timeline-audio-clip .audio-overflow-mask {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t#advertising-note,\n\t#top-bar,\n\t.image-media #infobox-options-container,\n\t.video-media #infobox-options-container {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.editor-timeline .timeline-ruler .hline,\n\t.editor-timeline .timeline-ruler .mtick .base,\n\t.editor-timeline .timeline-ruler .stick {\n\t\tbackground-color: var(--menu-light-border-color)\n\t}\n\t#mediapicker .video-original.selected .video-title,\n\t.dragging .video-title,\n\t.editor-thumb:hover .video-title,\n\t.media-list .editor-thumb .video-title {\n\t\tbackground: var(--menu-bg-color);\n\t\tcolor: var(--link-color);\n\t\topacity: .8\n\t}\n\t.editor-thumb-body,\n\t.editor-thumb-body:hover,\n\t.ghost {\n\t\toutline-color: var(--menu-light-border-color)\n\t}\n\t.editor-thumb-body {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.editor-thumb-body:hover {\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t.mediapicker-audio.audio-track .audio-title,\n\t.mediapicker-audio.audio-track .editor-thumb-time {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.mediapicker-audio.audio-track .audio-artist,\n\t.mediapicker-audio.audio-track .audio-genre {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#audio-media-list .scroll-content .audio-original.selected,\n\t#audio-media-list .scroll-content .audio-original:hover {\n\t\tbox-shadow: 0 1px 0 0 var(--menu-light-border-color);\n\t\tborder-color: var(--menu-light-border-color);\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t#creator-sidebar>#creator-sidebar-section-id-dashboard.selected>h3 a,\n\t#creator-sidebar>#creator-sidebar-section-id-your-contributions.selected>h3 a {\n\t\tbackground-color: var(--menu-hover-bg-color);\n\t\tcolor: #cc181e\n\t}\n\t#yt-main-nav-container,\n\t.yt-nav-dark {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#yt-microsite .yt-card-light .yt-card-title h2,\n\t#yt-microsite .yt-card-light h2.yt-card-title,\n\t#yt-microsite-features .yt-microsite-feature strong,\n\t#yt-microsite-features .yt-microsite-features strong,\n\t.footer-secondary a,\n\t.yt-testtube-card-light .yt-testtube-card-title,\n\t.yt-testtube-card-title {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-testtube-card-dark .yt-testtube-card-content,\n\t.yt-testtube-card-light .yt-testtube-card-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yt-main-nav .yt-nav-element.active,\n\t#yt-main-nav .yt-nav-element.yt-nav-navmenu-container.yt-collapsed.active-nav,\n\t#yt-main-nav .yt-nav-element:active,\n\t#yt-main-nav .yt-nav-element:hover,\n\t#yt-main-nav a.active,\n\t#yt-main-nav a:active,\n\t#yt-main-nav a:hover,\n\t#yt-main-nav>a.active,\n\t#yt-main-nav>a:active,\n\t#yt-main-nav>a:hover,\n\t.nav-container>a.active,\n\t.nav-container>a:active,\n\t.nav-container>a:hover,\n\t.yt-nav-navmenu-container.yt-expanded {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.page-header {\n\t\tbackground: var(--bg-color)\n\t}\n\t#yt-microsite h2,\n\t#yt-microsite h3,\n\t#yt-microsite h4,\n\t#yt-microsite h5,\n\t#yt-sidebar h2 a,\n\t#yts-nav ol li.top-level a,\n\t.yt-text h1,\n\t.yt-text h2,\n\t.yt-text h3,\n\th1.yt,\n\th2.yt,\n\th3.yt {\n\t\ttext-shadow: none;\n\t\tcolor: var(--link-color)\n\t}\n\t#yt-microsite .yt-card-dark .yt-card-text p,\n\t#yt-microsite .yt-card-light .yt-card-text,\n\t#yt-microsite .yt-card-light .yt-card-text .yt-policyandsafety-col,\n\t#yt-microsite .yt-card-light .yt-card-text .yt-policyandsafety-col p,\n\t#yt-microsite .yt-card-light .yt-card-text p,\n\t#yt-microsite .yt-policyandsafety-content-container p,\n\t#yt-microsite-features p,\n\t#yt-sidebar ul a,\n\t#yts-article,\n\t#yts-nav .indented .sub-level a,\n\t.yt-text ol,\n\t.yt-text ul,\n\tol.yt,\n\tul.yt {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yts-nav .indented .sub-level a:hover {\n\t\tbackground: var(--menu-hover-bg-color);\n\t\tbackground-image: none\n\t}\n\t#yts-article #header,\n\t#yts-article .with-separator,\n\t#yts-nav,\n\t.header,\n\t.separator,\n\t.with-divider {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#yts-article::after,\n\t.yt-card-light,\n\t.yt-tile-default:hover,\n\t.yt-tile-static,\n\t.yt-tile-visible {\n\t\tbackground: var(--card-bg-color);\n\t\tborder-color: var(--card-light-bg-color);\n\t\tbox-shadow: none\n\t}\n\t.yt-sidebar-border,\n\thr.yt-advertise-sidebar-rule {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#yt-sidebar li.selected a,\n\t.footer-secondary .footer-secondary-info a,\n\t.footer-secondary a {\n\t\tfont-weight: 400\n\t}\n\t.yt-cardified #page {\n\t\tbackground-color: var(--bg-color)\n\t}\n\t#yt-jobs-search-form .yt-jobs-searchbox {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tborder-color: var(--card-light-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.footer-secondary li,\n\t.yt-form-input-select-container {\n\t\ttext-shadow: none\n\t}\n\t.yt-form-input-select-container:hover {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.yt-form-input-select-value {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#content.yt-creator-hub-page,\n\tbody:not([style-scope]):not(.style-scope) {\n\t\tbackground-color: var(--bg-color)!important\n\t}\n\t#yt-dev-nav-container,\n\t.yt-creator-hub-page-0 #masthead.yt-creator-hub-page {\n\t\tbackground: var(--card-dark-bg-color)\n\t}\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #info.yt-creator-hub-card p,\n\t.yt-creator-hub-page-0 #hamburger.yt-creator-hub-page {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-creator-hub-logo-0 {\n\t\tbackground-color: transparent\n\t}\n\t.iron-image-0 #img.iron-image {\n\t\tvisibility: hidden;\n\t\twidth: 72px;\n\t\theight: 32px\n\t}\n\t.yt-creator-hub-logo-0 #logo.yt-creator-hub-logo {\n\t\tbackground: no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAA8CAYAAACEhkNqAAAF/UlEQVR4nO2d3ZWCMBCFtwRLoARLSAlbAiVYAh1sCZZgCZRgCZRACXcfQMXJHfIDEdT5zuHBk8mQTK4kkBB+fgzDMAzDMHQAuPGoATST4w9Aqxw9tuUKXq4LnuvQ4FG/w9ax/ngwiOjyWi3sgg7DH6baug0+CgDHMbgG0GzdHh8BhquU8cwV1kXmg2GMYXDardvnbYF1fyHqrdvo7YB1gTF0W7fT24FhHGGEcaUawJHjOGNfKXl2Mxgcy2jEcS7VCB052XXG/k8poCrGVwO9G2R/iJRjDU7C52klv7mU6Q6hC6VS7FkXs6u+GsCZVWgFv2vghM893LlWS2PDgnVUTlYTW62L+Vu9YAvAMM3hsYLfNXDC5x6E5XiNlweMzYF5fS/0LmY33eDPjy6AUn4TccLnHoR1WhobLWBncjKve4u12xoteqX8JuKEzz0Iq1kaGy1gv8oJj8KuIzZl7ioyQfodYUN8NIk+UnAvPFcs5YYy4N3haZKujcV+ixUqA6RfARri49uEVW56B3w5yWWSzm6L+2IFygQmrByKCosNzPtJOhMe7QYxdK0NHgvR/kb/6kNUDF2YXKxWCxsXYaN16xoNKcuWwrrisdgwhQ75ixKLCuugnNSN6aygslFD6556mWeSl11pWmHDGjzGZo6GlIX5YHZthI3EKee6krQK4akpL98kf404gZXtecCvSg307uUwyXuMrATAn5F9s7DU9VHQx7ZAxI0ThgtGcN405GcR4OOoK3igLyJv6qRvJfJ/q7AcAvOs4H94ddqN5K8Q+NPH+soC+q06E009yZc6rgHEvw1fKixRfyoy8D+852fio4qs0x1WplVB/JWnmuRh841XDEI9gD9Y7cV5v1JY8MdR3pUIfmzYw2vZBuw8KtLf6iButv0q8rTEpp6kazcG1cTmW4XF6i0fTMtxlvdAE35Xx8qidofSdnVIJRgnkYcV2AkbdiV0k3QTlmJD/MScx3uEQMp7R9oWAeG14lWgUiyAzKebpJuwFBvix5vtID52KSxtjRbA+3eGS7GBCUu1IX5C6cBOhcUqe4P17wyXYqOc04TF/bD0VhysnWR570jbYkAf6HlrrxQ7l2KjBNiExf146TGQ8t7J8ZcFEtZeKWV1KTZKgL9BWOwZoAv48dJjIOW9k+MvCyW4dLJSKatLscH3CoudywX8eOkxkPLeyfGXhVJhE9azXRthI5FxWUVY8Fd9sKPTgiD9FUOpsAnr2a6NsJHIuKwlrEVIf8VQKmzCerZrI2wkMi4mLJiwpF0bYSORcSklrB4JOxJKf8VQKmzCerZrI2wkMi6lhJXygPR1S8yVCi8R1qvmCkstTWZ2bYSNRMYlR1hrT+m8bq8spcKasLqIAM7aIE5Y5wgb5meOJrLuzK4VNt6Ln8SPjEuOsFhZJB8hLFbgZpJeKRWaLm1mgrhO0uuYoCh+5mh+BMgTVuzV3Il0tkzpIGzkipOn1bujjVxlykTeKTHYrbCYbY9BDL+I2EgEuiBqxT8tE8q9sMq2HLhN1p+hr1mXOOV83Ux5ZGy8MRGeX2RpZXkCcXnd3htKcDVhpTamF0ASvFjYJT+7HKl1l3GIKIsL+SE+2FUtab8FpU5qDIqRGlzML7WRdOBru0OwK9+rhDV75zTmYb4kTqQ7BPYCBR9q9IjcjAXhxZtlNgVRCpP8r4WyL5Wg0wISyK91iUnrjghNZN0BpQEm5Wa+JE6k367UteJ77i43KK7Rf+i1PDfnY1WU4MZ0BzX4ILHHcFWbexv6AF8U7S14sWVCnMBvnPF4u+V2aPl7DN3SYTyPHD8yX5K5Hf0uGB8l4PFmeGwdfiflOoy/tXpIqkyZvB4Ml997ADPzVpnn3nr7xXdid9tQ7RbY5rYp7Gobqt0D2447ll1tQ7V7YB8QiMG6wRxgnzwJUW/dRm8J8vaU+BbsI01LgHWJDPus3BpgeHTRbduWu2H2WaKRAYau8YLtv+38anoMD0urrdvg48HjY1O3qaIG8x8a3wtsyXEL/4Pjtyf8u/q4g7EA6F9ImztMAIZhGKvyD107xTs8H96dAAAAAElFTkSuQmCC);\n\t\tbackground-size: 100%;\n\t\topacity: .65\n\t}\n\t.yt-creator-hub-logo .iron-image-0 #img.iron-image {\n\t\tvisibility: hidden\n\t}\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #title.yt-creator-hub-card h1,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #title.yt-creator-hub-card h2,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #title.yt-creator-hub-card h3,\n\t.yt-creator-hub-card-0.yt-benefit-layout #content.yt-creator-hub-card #title.yt-creator-hub-card h1,\n\t.yt-creator-hub-card-0.yt-home-layout #content.yt-creator-hub-card #title.yt-creator-hub-card h1,\n\t.yt-creator-hub-card-0.yt-home-layout #content.yt-creator-hub-card #title.yt-creator-hub-card h2,\n\t.yt-creator-hub-events-filter-0 #label-container.yt-creator-hub-events-filter h2#heading.yt-creator-hub-events-filter,\n\t.yt-creator-hub-logo-0 #link.yt-creator-hub-logo a,\n\t.yt-creator-hub-page-0 #menu.yt-creator-hub-page a {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-creator-hub-page-0 #nav.yt-creator-hub-page {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.yt-creator-hub-page-0 #nav.yt-creator-hub-page>div a.active,\n\t.yt-creator-hub-page-0 #nav.yt-creator-hub-page>div a:active,\n\t.yt-creator-hub-page-0 #nav.yt-creator-hub-page>div a:hover {\n\t\tcolor: var(--link-color);\n\t\tfont-weight: 400\n\t}\n\t.yt-creator-hub-drawer-0 #content.yt-creator-hub-drawer {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.yt-creator-hub-page-0 #menu.yt-creator-hub-page a.active,\n\t.yt-creator-hub-page-0 #menu.yt-creator-hub-page a:hover {\n\t\tbackground: var(--menu-hover-bg-color);\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.yt-creator-hub-card-0 {\n\t\tbackground-color: var(--light-bg-color)\n\t}\n\t.yt-creator-hub-spotlight-0,\n\t.yt-creator-hub-spotlights-0 {\n\t\tbackground: 0 0\n\t}\n\t.yt-card a.yt-action:not([style-scope]):not(.style-scope),\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #info.yt-creator-hub-card a,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card .link.yt-creator-hub-card a,\n\t.yt-creator-hub-event-0 a.yt-creator-hub-event,\n\t.yt-creator-hub-social-nav-0 a {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card .link.yt-creator-hub-card a::after,\n\t.yt-creator-hub-event-0 a.yt-creator-hub-event::after {\n\t\tfilter: invert(60%)\n\t}\n\t.yt-creator-hub-dropdown-0 {\n\t\tbackground-color: transparent\n\t}\n\t#yt-microsite .yt-card-light,\n\t.yt-advertise-sidebar p,\n\t.yt-creator-hub-dropdown-0 #label.yt-creator-hub-dropdown,\n\t.yt-creator-hub-event-0 h2.yt-creator-hub-event {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.paper-input-container-0 .input-content.paper-input-container .paper-input-input,\n\t.paper-input-container-0 .input-content.paper-input-container input,\n\t.paper-input-container-0 .input-content.paper-input-container iron-autogrow-textarea,\n\t.paper-input-container-0 .input-content.paper-input-container textarea,\n\tpaper-item {\n\t\tcolor: var(--main-text-color);\n\t\tcursor: pointer\n\t}\n\t.paper-dropdown-menu,\n\t.paper-listbox-0,\n\t.paper-menu-button-0 .dropdown-content.paper-menu-button,\n\tmd-sidenav {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.paper-input-container-0 {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.paper-input-container-0 .unfocused-line.paper-input-container {\n\t\tbackground: var(--menu-border-color)\n\t}\n\t.yt-creator-hub-events-filter-0,\n\tmd-content.md-default-theme {\n\t\tbackground-color: transparent\n\t}\n\t.make-video-director-adwords-banner a.adwords-cta-banner,\n\t.make-video-grid-steps,\n\t.yt-creator-hub-event-0 .card.yt-creator-hub-event,\n\t.yt-dev-footer,\n\ta.adwords-cta-banner {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.yt-creator-hub-event-0 h1.yt-creator-hub-event {\n\t\tcolor: var(--link-color);\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#yt-dev-nav a.active,\n\t#yt-dev-nav a:active,\n\t#yt-dev-nav a:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.yt-toggle-dev-demos-sidebar-button {\n\t\tbackground: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t#menu-arrow {\n\t\tfill: var(--main-text-color)\n\t}\n\t.yt-dev-demos-sidebar {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.yt-dev-demos-sidebar-title,\n\t.yt-dev-demos-tab .yt-dev-demos-tab-text {\n\t\tcolor: var(--link-color)\n\t}\n\t#error-page-content p,\n\t.yt-dev-demos-sidebar-resources-title {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-dev-demos-tab.yt-dev-demos-sidebar-tabs-highlighted,\n\t.yt-dev-demos-tab.yt-dev-demos-sidebar-tabs-highlighted:hover,\n\t.yt-dev-demos-tab:hover {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.yt-dev-demos-tab:hover {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.yt-dev-demos-sidebar-resources-container,\n\t.yt-dev-demos-sidebar-tabs-container {\n\t\tborder-color: var(--sep-line-color);\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.yt-dev-showcase-external-link-msg-container:hover .yt-dev-showcase-external-link-img {\n\t\tfilter: saturate(0) brightness(250%)\n\t}\n\t#error-page-content p {\n\t\ttext-shadow: none\n\t}\n\t.sb-card-arrow {\n\t\tborder-bottom-color: var(--sep-line-color)\n\t}\n\t.sb-card-body-arrow {\n\t\tborder-bottom-color: var(--card-light-bg-color)\n\t}\n\t.sb-card-border {\n\t\tborder-color: var(--sep-line-color);\n\t\tbox-shadow: none;\n\t\tbackground: 0 0\n\t}\n\t.sb-on {\n\t\tbox-shadow: 0 2px 1px #1a1a1a\n\t}\n\t#chat-messages yt-live-chat-header-renderer {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\tiron-dropdown paper-menu#items {\n\t\tbackground: var(--card-light-bg-color)\n\t}\n\tiron-dropdown #items ytd-menu-service-item-renderer:hover,\n\tiron-dropdown #items a.ytd-menu-navigation-item-renderer:hover {\n\t\tbackground-color: var(--card-light-hover-bg-color)\n\t}\n\t.yt-live-chat-renderer-0 {\n\t\tbackground: var(--card-dark-bg-color)\n\t}\n\tiron-dropdown #items yt-formatted-string,\n\t#chat-messages yt-live-chat-header-renderer,\n\t#chat-messages iron-icon,\n\t.yt-live-chat-renderer-0 #message,\n\t.yt-live-chat-renderer-0 #deleted-state,\n\t.yt-live-chat-renderer-0 #label,\n\t.yt-live-chat-renderer-0 #input,\n\t.yt-live-chat-renderer-0 #count,\n\t.yt-live-chat-renderer-0,\n\t.yt-live-chat-text-message-renderer-0 #timestamp.yt-live-chat-text-message-renderer {\n\t\tcolor: var(--main-text-color)!important\n\t}\n\t.yt-live-chat-renderer-0 #author-name {\n\t\tcolor: var(--main-faded-text-color)!important\n\t}\n\t.yt-live-chat-renderer-0 #menu {\n\t\tbackground: transparent!important\n\t}\n\t.yt-live-chat-renderer-0 a {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-live-chat-renderer-0 a:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.yt-live-chat-renderer-0 yt-formatted-string.yt-emoji-picker-category-renderer {\n\t\tbackground-color: var(--card-light-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-live-chat-message-input-renderer-0,\n\t#watch-sidebar-live-chat,\n\t#watch-sidebar-live-chat .yt-uix-expander-collapsed {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.exp-searchbox-redesign #masthead-search {\n\t\tbackground-color: var(--card-dark-bg-color)\n\t}\n\t.exp-searchbox-redesign #masthead-search-terms input {\n\t\tpadding: 5px\n\t}\n\t.mc-actions,\n\t.mc-channel-footer,\n\t.mc-channel-item {\n\t\tbackground-color: var(--card-bg-color);\n\t\tborder-color: var(--card-light-bg-color);\n\t\tcolor: var(--main-text-color)!important\n\t}\n\t.mc-channel-title-content {\n\t\tcolor: var(--main-text-color)!important\n\t}\n\t.yt-card .yt-uix-tabs .yt-uix-button {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.monetize-with-ads.monetize-options-box {\n\t\tbackground-color: var(--card-bg-color);\n\t\tbox-shadow: none\n\t}\n\t.basic-info-tab .custom-thumb-area,\n\t.upload-thumb,\n\thr.metadata-separator-line {\n\t\tborder-bottom: none;\n\t\tborder-color: var(--card-light-bg-color)\n\t}\n\t.item-title,\n\t.monetize-with-ads.monetize-options-box h3 {\n\t\tcolor: var(--main-text-color)!important;\n\t\tfont-weight: 600\n\t}\n\t#channel-switcher-content,\n\t.yt-masthead-account-picker-option,\n\t.yt-masthead-picker-photo-wrapper {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.not-yt-legacy-css .yt-masthead-picker-photo-wrapper .yt-thumb,\n\t.yt-masthead-account-picker-option:hover,\n\t.yt-masthead-account-picker-option:hover .yt-masthead-picker-photo-wrapper,\n\t.yt-masthead-picker-body .yt-masthead-picker-photo-wrapper,\n\t.yt-uix-clickcard-card.yt-masthead-multilogin .yt-masthead-multilogin-users-header,\n\t.yt-uix-clickcard-card.yt-masthead-multilogin .yt-masthead-picker-header {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.yt-masthead-account-picker-option .yt-masthead-picker-name {\n\t\tcolor: var(--main-text-color)!important\n\t}\n\t.yt-uix-clickcard-card.yt-masthead-multilogin .yt-uix-card-body-arrow {\n\t\tborder-bottom-color: var(--card-light-bg-color)\n\t}\n\t.channel-switcher-button .yt-uix-button,\n\t.social-connector.connected,\n\t.ytp-ce-expanding-overlay-background {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.channel-switcher-button:hover .yt-uix-button {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.social-connector .connection-settings-container,\n\t.ytp-ce-channel-this .ytp-ce-channel-metadata {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.watch-stage-mode #theater-background {\n\t\tdisplay: none\n\t}\n\t/* Dark subscribe button instead of YT red */\n\t/*\n\t.yt-uix-button-subscribe-branded, .yt-uix-button-subscribe-branded[disabled], .yt-uix-button-subscribe-branded[disabled]:hover, .yt-uix-button-subscribe-branded[disabled]:active, .yt-uix-button-subscribe-branded[disabled]:focus {\n\t\tfilter: saturate(0.075) hue-rotate(240deg);\n\t}\n\t*/", + "urls": [], + "urlPrefixes": [], + "domains": [ + "youtube.com" + ], + "regexps": [] + }, + { + "code": ".nbc {\n\t\tbackground-color: #2a2a2e;\n\t\tborder-color: #36363f\n\t}\n\t.nbc a {\n\t\tcolor: #aaaab6\n\t}\nbody {\n background: url(https://akamaru.de/wp-content/uploads/2017/01/shimakaze.png) no-repeat center center fixed;\n -webkit-background-size: cover;\n -moz-background-size: cover;\n -o-background-size: cover;\n background-size: cover;\n}", + "urls": [], + "urlPrefixes": [], + "domains": [ + "apis.google.com" + ], + "regexps": [] + }, + { + "code": ".Lub,\n\t.TC,\n\t.TR,\n\t.WR,\n\t.Xa,\n\t.bS,\n\t.l4a,\n\t.vy {\n\t\tbackground-color: transparent\n\t}\n\t.IO,\n\t.WdjWF,\n\t.WpuQke,\n\t.aac,\n\t.cp,\n\t.tQb,\n\t.ve,\n\t.wu,\n\t.xac {\n\t\tbackground-color: #2a2a2d\n\t}\n\t.fr,\n\t.qac {\n\t\tbackground-color: #222225\n\t}\n\t.Fr+.bj,\n\t.Fr>.Qp,\n\t.IO,\n\t.cp,\n\t.fr>.vt,\n\t.wu {\n\t\tborder-color: #3a3a40\n\t}\n\t.Kza,\n\t.MNn0h,\n\t.d-r,\n\t.f4a.tta,\n\t.nfe {\n\t\tbackground-color: #3a3a40\n\t}\n\t.d-A-u,\n\t.d-A-yb,\n\t.l4a:active .f4a {\n\t\tbackground-color: #4a4a50\n\t}\n\t.Gc.esw,\n\t.Id>.eswd {\n\t\tbackground-color: #3a3a40\n\t}\n\t.Id>.eswd {\n\t\tcolor: #ccc;\n\t\tborder-color: #4a4a50\n\t}\n\t.Gc.esw {\n\t\tborder-color: #46464f\n\t}\n\t.Dg:hover,\n\t.Gc.eswd:hover {\n\t\tborder-color: #52525f\n\t}\n\t.Iac,\n\t.Oub.d-r-Gk .d-A,\n\t.Ub,\n\t.bS,\n\t.cp,\n\t.d-A-u .d-A-B,\n\t.d-A-yb .d-A-B,\n\t.k4a,\n\t.ot-hashtag,\n\t.proflink,\n\t.sQb:link,\n\t.sQb:visited,\n\t.tta .Jub,\n\t.vy,\n\t.xQb {\n\t\tcolor: #ccc\n\t}\n\t.Aq,\n\t.MNn0h.RATVS .YGETNc,\n\t.MNn0h:hover .YGETNc,\n\t.SR,\n\t.YGETNc,\n\t.bhsVm,\n\t.dR.d-s,\n\t.dn,\n\t.nYXukb,\n\t.tf,\n\t.tta .Gub,\n\t.tta .Hub,\n\t.y9fV .YGETNc {\n\t\tcolor: #999\n\t}\n\t.MNn0h.RATVS,\n\t.MNn0h:hover {\n\t\tbackground-color: #3c3c42\n\t}\n\t.TR,\n\t.bxpCne,\n\t.eswd .sm,\n\t.gr,\n\t.hhb,\n\t.khb,\n\t.nV46l,\n\t.tubEcf,\n\t.vwa {\n\t\tfilter: invert(.7) brightness(3)\n\t}", + "urls": [], + "urlPrefixes": [ + "https://plus.google.com/_/notifications/frame?origin=https%3A%2F%2Fwww.youtube.com&source=yt" + ], + "domains": [], + "regexps": [] + } + ], + "url": "http://userstyles.org/styles/130610", + "updateUrl": "https://userstyles.org/styles/chrome/130610.json", + "md5Url": "https://update.userstyles.org/130610.md5", + "originalMd5": "7a78b5ef99141cd88cd04fc42d3a5934", + "name": "Youtube Umbra", + "enabled": false, + "id": 9, + "_id": "990ab9a4-99b4-4164-a413-19008babbff5", + "_rev": 1580730543288 + }, + { + "installDate": 1518796677333, + "name": "YT Background", + "sections": [ + { + "code": "html:not(#⁠)\n {\n background: url(https://img.ponywave.de/di/DIQT/jibril_wallpaper_by_tk77185_da5kxqc.png)fixed no-repeat #000!important;\n background-size: cover!important;\n }\n\n :not([class*=\"video-extras-sparkbar\"])\n {\n background-color: #00000061!important;\n }\n\n :not(#dismissable):not(#content):not(#container):not(#search-form)\n {\n background-color: rgba(0, 0, 0, 0)!important;\n }\n", + "regexps": [ + "https?://www.youtube.com?/(?!my_videos|ad_companion|subscribe_embed|account|yt|red).*" + ] + } + ], + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "id": 10, + "updateDate": 1565035216567, + "_id": "d0081f1b-a993-4299-a5a7-b53f09e2c4fa", + "_rev": 1580730543289 + }, + { + "installDate": 1514224592103, + "sections": [ + { + "code": "/* ++----------------------------------------------------------------------------------++ */\r\n/* || || */\r\n/* ||* Name : Plex Fixes || */\r\n/* || || */\r\n/* ||* Author : JourneyOver || */\r\n/* || || */\r\n/* ||* Created : 03 / 10 / 2017 || */\r\n/* || || */\r\n/* ||* Updated : 07 / 26 / 2018 || */\r\n/* || || */\r\n/* ||* Version : 1.0.6 || */\r\n/* || || */\r\n/* ||* Copyright : 2017-2018 || */\r\n/* || || */\r\n/* ++----------------------------------------------------------------------------------++ */", + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [ + "https?://app.plex.tv/.*", + "https?://.*:32400/.*", + "https://example.com/.*" + ] + }, + { + "code": "/*::::::::::::::::::::::::::::::::::::::::::::::::::::::: Pre 3.0.0 Fixes :::::::::::::::::::::::::::::::::::::::::::::::::::::::*/\r\n\r\na {\r\n user-select: all !important;\r\n}\r\n\r\n/*::: Main Background Image :::*/\r\n.background-container > [class^=\"FullPage-container-\"] div > div {\r\n background: rgba(31, 31, 31, 1);\r\n background-image: url(\"https://example.com/example.jpg\") !important;\r\n background-position: center center;\r\n background-size: 100% 100% !important;\r\n\r\n image-rendering: auto;\r\n}\r\n\r\n/*::: Image Container :::*/\r\ndiv[class^=\"PrePlayArtwork-imageContainer-\"],\r\ndiv[class*=\"3dXG6\"] {\r\n position: fixed !important;\r\n top: 0 !important;\r\n right: 0 !important;\r\n bottom: 0 !important;\r\n left: 0 !important;\r\n z-index: -1 !important;\r\n\r\n margin: 0 !important;\r\n width: 100% !important;\r\n height: 100% !important;\r\n\r\n background: #1f1f1f !important;\r\n\r\n -webkit-animation: plexbgfadein .6s ease-in;\r\n}\r\n\r\n/*::: Image :::*/\r\ndiv[class^=\"PrePlayArtwork-imageContainer-\"] > div,\r\ndiv[class*=\"3dXG6\"] > div {\r\n position: fixed !important;\r\n\r\n width: 100% !important;\r\n height: 100% !important;\r\n\r\n background-repeat: no-repeat !important;\r\n background-size: 100% 100% !important;\r\n\r\n opacity: .25 !important;\r\n}\r\n\r\n/*::: Resizing adds extra divs :::*/\r\ndiv[class^=\"PrePlayArtwork-imageContainer-\"] > div + div,\r\ndiv[class*=\"3dXG6\"] > div + div {\r\n display: none !important;\r\n}\r\n\r\n/*::: Item Thumbnail :::*/\r\ndiv[class^=\"PrePlayArtwork-imageContainer-\"] + div,\r\ndiv[class*=\"3dXG6\"] + div {\r\n position: fixed !important;\r\n top: 180px !important;\r\n\r\n background-position: center !important;\r\n}\r\n\r\n/*::: Background Fade-in :::*/\r\n@-webkit-keyframes plexbgfadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/*::::::::::::::::::::::::::::::::::::::::::::::::::::::: NEW ADDITIONS :::::::::::::::::::::::::::::::::::::::::::::::::::::::*/\r\n\r\n/*::: Max Width Of Summary Container :::*/\r\ndiv[class^=\"PrePlaySummary-summary-\"],\r\ndiv[class*=\"1NL8g\"] {\r\n margin-bottom: 5px;\r\n max-width: none !important;\r\n\r\n font-size: 15px;\r\n}\r\n\r\n/*::: Make Sure Overflow Of Summary Container is always visible :::*/\r\ndiv[class^=\"PrePlaySummary-summary-\"] > div,\r\ndiv[class*=\"1NL8g\"] > div {\r\n overflow: visible !important;\r\n\r\n max-height: none !important;\r\n}\r\n\r\n/*::: Hide Read More Button Since It's Useless Now :::*/\r\n[class^=\"CollapsibleText-readMore-\"],\r\n[class*=\"1bRJm\"] {\r\n display: none !important;\r\n}\r\n\r\n/*::: Hide The Go Premium Button :::*/\r\n.plex-pass-label {\r\n display: none !important;\r\n}\r\n\r\n/*::: Plex Fixes Version :::*/\r\n[class=\"version-title\"]::after {\r\n white-space: pre;\r\n\r\n content: \"\\A Plex Fixes Ver. 1.0.3\";\r\n}\r\n\r\n/*::: Make Users pic square :::*/\r\n[class^=\"dropdown-poster-\"] > div,\r\n[class^=\"card-poster\"],\r\n[class^=\"AvatarImg-avatar-\"],\r\n[class*=\"3Op56\"] {\r\n border-radius: 0;\r\n}\r\n\r\n/*::: Move dashboard down slightly :::*/\r\n[class^=\"DashboardPage-dashboardPageContent-\"],\r\n[class*=\"2rN8X\"] {\r\n padding: 15px 55px 60px !important;\r\n}\r\n\r\n/*::: make continue watching title containers a bit smaller :::*/\r\ndiv[class*=\"MetadataPosterCell-continueWatchingTitleContainer-\"],\r\ndiv[class*=\"3yCAY\"] {\r\n padding: 4px 5px !important;\r\n\r\n background-color: rgba(0, 0, 0, .35);\r\n}\r\n\r\n/*::: shorten the padding on headers on dashboard to bring inline with being closer to continue watching title container :::*/\r\ndiv[class*=\"HubCellHeader-hubCellHeader-\"],\r\ndiv[class*=\"2pvYN\"] {\r\n padding: 4px 0 0 5px !important;\r\n}\r\n\r\n/*::: Make cast pictures square :::*/\r\na[class^=\"PrePlayCastCell-cardLink-\"],\r\ndiv[class^=\"TagPosterCard-card-\"],\r\na[class*=\"Tndv5\"],\r\ndiv[class*=\"RVD0D\"] {\r\n border-radius: 0 !important;\r\n}\r\n\r\n/*::: lower actors faces a bit :::*/\r\ndiv[class^=\"TagPosterCard-card-\"] [class^=\"PosterCardImg-imageContainer-\"] > div,\r\ndiv[class*=\"RVD0D\"] [class*=\"1Ar4M\"] > div {\r\n background-position: 100% 30% !important;\r\n}\r\n\r\n/*::: Pulsate Status :::*/ /*::: Credits to @IanCeling :::*/\r\n.nav-bar li.active i {\r\n opacity: .1;\r\n\r\n -webkit-animation: pulsate 5s ease-out;\r\n -webkit-animation-iteration-count: infinite;\r\n}\r\n\r\n@-webkit-keyframes pulsate {\r\n 0% {\r\n opacity: 1;\r\n\r\n -webkit-transform: scale(1.7, 1);\r\n }\r\n 50% {\r\n opacity: .3;\r\n\r\n -webkit-transform: scale(.85, .85);\r\n }\r\n 100% {\r\n opacity: 1;\r\n\r\n -webkit-transform: scale(1.7, 1);\r\n }\r\n}\r\n\r\n/*::: Hover effect on CAST cards :::*/\r\na[class^=\"PrePlayCastCell-cardLink-\"]:hover,\r\na[class^=\"PrePlayCastCell-cardLink-\"]:hover > div,\r\na[class*=\"Tndv5\"]:hover,\r\na[class*=\"Tndv5\"]:hover > div {\r\n transform: scale(1.07);\r\n}\r\n\r\n/*::: Expand 'Extras' display for movies (shows as grid instead of scroller) :::*/\r\n[class^=\"PrePlayExtrasList-extrasHubCell-\"] > div:nth-child(2),\r\n[class^=\"PrePlayExtrasList-extrasHubCell-\"] > div:nth-child(2) > [class^=\"Measure-container-\"] > div > div,\r\n[class*=\"2NcGK\"] > div:nth-child(2),\r\n[class*=\"2NcGK\"] > div:nth-child(2) > [class*=\"2XznZ\"] > div > div {\r\n width: auto !important;\r\n height: auto !important;\r\n}\r\n\r\n[class^=\"PrePlayExtrasList-extrasHubCell-\"] > div:nth-child(2) > [class^=\"Measure-container-\"] > div > div > div,\r\n[class*=\"2NcGK\"] > div:nth-child(2) > [class*=\"2XznZ\"] > div > div > div {\r\n display: inline-block;\r\n\r\n position: relative !important;\r\n\r\n margin: 10px;\r\n\r\n transform: translate3d(10px, 10px, 0) !important;\r\n}\r\n\r\n\r\n\r\n/*::: Posters Hover Effects :::*/ /*::: Credits to @IanCeling :::*/\r\n\r\n/* Poster Shadow */\r\ndiv[class^=\"MetadataPosterCard-cardContainer-\"],\r\ndiv[class*=\"2gRcQ\"] {\r\n box-shadow: 0 6px 26px -2px #000;\r\n\r\n transition: all 350ms;\r\n\r\n -webkit-perspective: 500px;\r\n perspective: 500px;\r\n}\r\n\r\n/* Poster Hover */\r\ndiv[class^=\"MetadataPosterCard-cardContainer-\"]:hover,\r\ndiv[class*=\"2gRcQ\"]:hover {\r\n box-shadow: 0 0 0 0 #000;\r\n\r\n transform: scale(.95) translateY(0);\r\n}\r\n\r\n/* Continue Watching poster hover */\r\ndiv[data-qa-id=\"hub--home.continue\"] div[class^=\"MetadataPosterCard-cardContainer-\"]:hover,\r\ndiv[data-qa-id=\"hub--home.continue\"] div[class*=\"2gRcQ\"]:hover {\r\n transform: scale(.97) translateY(-5px);\r\n}\r\n\r\n/*::: Photo Card Hover :::*/\r\n[class^=\"MetadataPhotoCell-photoContainer-\"],\r\n[class*=\"1HkmQ\"] {\r\n transition: all 350ms;\r\n\r\n -webkit-perspective: 500px;\r\n perspective: 500px;\r\n}\r\n\r\n[class^=\"MetadataPhotoCell-photoContainer-\"]:hover,\r\n[class*=\"1HkmQ\"] {\r\n transform: scale(.95) translateY(0);\r\n}\r\n\r\n[class^=\"MetadataPhotoCell-photo-\"]:hover,\r\n[class*=\"Po3Kx\"]:hover {\r\n box-shadow: none;\r\n\r\n transform: scale(1.02);\r\n}\r\n\r\n/*::: Poster Play Button :::*/\r\ndiv[class^=\"MetadataPosterCardOverlay-playCircle-\"],\r\ndiv[class*=\"M67q6\"] {\r\n border-radius: 50%;\r\n width: 50px;\r\n height: 50px;\r\n\r\n font-size: 18px;\r\n line-height: 48px;\r\n\r\n color: hsla(0, 0%, 100%, .7);\r\n\r\n box-shadow: 0 4px 16px -2px #000;\r\n\r\n transition: all 350ms;\r\n transform: translate(-50%, -50%) scale(.1);\r\n}\r\n\r\ndiv[class^=\"MetadataPosterCard-cardContainer-\"]:hover div[class^=\"MetadataPosterCardOverlay-playCircle-\"],\r\ndiv[class*=\"2gRcQ\"]:hover div[class*=\"M67q6\"] {\r\n transform: translate(-50%, -50%) scale(1.2);\r\n}\r\n\r\ndiv[class^=\"MetadataPosterCard-cardContainer-\"]:hover [class^=plex-icon-play-],\r\ndiv[class*=\"2gRcQ\"]:hover [class^=plex-icon-play-] {\r\n font-size: 30px;\r\n}\r\n\r\n/*::: kill container margin and add transition speed :::*/\r\n/*::: Contract the sidebar to save screen space [Expands back out on hovering over the sidebar] :::*/\r\n.page-container {\r\n margin-left: 0 !important;\r\n}\r\n\r\ndiv[role=navigation] div a {\r\n overflow: visible;\r\n}\r\n\r\ndiv[role=navigation] div {\r\n padding-right: 0;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-] {\r\n width: 55px !important;\r\n max-width: 55px !important;\r\n\r\n transition: all .5s ease !important;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-]:hover {\r\n width: 240px !important;\r\n max-width: 240px !important;\r\n\r\n transition: all 1.5s ease !important;\r\n}\r\n\r\n[class^=SidebarLink-title],\r\n[class^=SidebarList-sidebarListHeader],\r\n[class^=SidebarServerLibraries-librariesTitle],\r\nbutton[data-qa-id=serverMenuButton] div span,\r\ndiv[role=navigation] div a div:nth-child(2),\r\ndiv[role=navigation] div[role=header] {\r\n font-size: 0 !important;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarLink-title],\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarList-sidebarListHeader],\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarServerLibraries-librariesTitle],\r\n[class^=SidebarContainer-sidebarContainer-]:hover div[role=navigation] div a div:nth-child(2),\r\n[class^=SidebarContainer-sidebarContainer-]:hover div[role=navigation] div[role=header] {\r\n font-size: 12px !important;\r\n\r\n transition: all 2s ease !important;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-]:hover button[data-qa-id=serverMenuButton] div span {\r\n font-size: 14px !important;\r\n\r\n transition: all 2s ease !important;\r\n}\r\n\r\n[class^=DisclosureArrow-disclosureArrow-],\r\n[class^=SidebarLibrariesActions-actions],\r\n[class^=SidebarLink-children] {\r\n display: none !important;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=DisclosureArrow-disclosureArrow],\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarLibrariesActions-actions],\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarLink-children] {\r\n display: inline-block !important;\r\n\r\n transition: all 2s ease !important;\r\n}\r\n\r\n[class^=SidebarLibraryItem-action] {\r\n width: 0 !important;\r\n}", + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [ + "https?://app.plex.tv/.*", + "https?://.*:32400/.*", + "https://example.com/.*" + ] + } + ], + "url": "http://userstyles.org/styles/139979", + "updateUrl": "https://userstyles.org/styles/chrome/139979.json?ik-RelatedL=ik-RLN&ik-PosterHE=ik-PHEY&ik-CompactSB=ik-CSY&ik-PORT=32400&ik-CastL=ik-CLY&ik-ExtrasM=ik-EEY", + "md5Url": "https://update.userstyles.org/139979.md5", + "originalMd5": "bce6c77be04bfe0740670a9577973521", + "name": "Plex Fixes", + "enabled": false, + "id": 11, + "originalDigest": "cb169174e50e2af75a681014615650210bd2dee0", + "updateDate": 1534175987340, + "_id": "c2484d66-aa44-4c4d-bd10-b381c8f0eab2", + "_rev": 1580730543289 + }, + { + "installDate": 1520008447897, + "enabled": true, + "updateUrl": "https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/usercss/126572.user.css", + "url": "https://33kk.github.io/uso-archive/?style=126572", + "sections": [ + { + "code": ".player-slider__left {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAMCAIAAAAs6UAAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUNCQzIyREQ0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUNCQzIyREU0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQ0JDMjJEQjRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQ0JDMjJEQzRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PovDFgYAAAAmSURBVHjaYvjPwMAAxjMZmBhA9H8INv4P4TPM/A+m04zBNECAAQBCWQv9SUQpVgAAAABJRU5ErkJggg==\") repeat-x !important; \n height: 12px !important;box-shadow: 0px 0px 10px #5099FF, 0px 0px 10px #5099FF, 0px 0px 10px #5099FF !important;\n}\n.player-slider:before {\n background: url(\"data:image/gif;base64,R0lGODlhMAAMAIAAAAxBd////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQECgAAACwAAAAAMAAMAAACJYSPqcvtD6MKstpLr24Z9A2GYvJ544mhXQmxoesElIyCcB3dRgEAIfkEBAoAAAAsAQACAC0ACgAAAiGEj6nLHG0enNQdWbPefOHYhSLydVhJoSYXPO04qrAmJwUAIfkEBAoAAAAsBQABACkACwAAAiGEj6nLwQ8jcC5ViW3evHt1GaE0flxpphn6BNTEqvI8dQUAIfkEBAoAAAAsAQABACoACwAAAiGEj6nLwQ+jcU5VidPNvPtvad0GfmSJeicUUECbxnK0RgUAIfkEBAoAAAAsAAAAACcADAAAAiCEj6mbwQ+ji5QGd6t+c/v2hZzYiVpXmuoKIikLm6hXAAAh+QQECgAAACwAAAAALQAMAAACI4SPqQvBD6NysloTXL480g4uX0iW1Wg21oem7ismLUy/LFwAACH5BAQKAAAALAkAAAAkAAwAAAIghI8Joe0Po0yBWTaz3g/z7UXhMX7kYmplmo0rC8cyUgAAIfkEBAoAAAAsBQAAACUACgAAAh2Ejwmh7Q+jbIFZNrPeEXPudU74IVa5kSiYqOtRAAAh+QQECgAAACwEAAAAIgAKAAACHISPELfpD6OcqTGKs4bWRp+B36YFi0mGaVmtWQEAIfkEBAoAAAAsAAAAACMACgAAAh2EjxC36Q+jnK8xirOW1kavgd+2BYtJhmnpiGtUAAAh+QQECgAAACwAAAAALgALAAACIYSPqcvtD+MKicqLn82c7e6BIhZQ5jem6oVKbfdqQLzKBQAh+QQECgAAACwCAAIALAAJAAACHQx+hsvtD2OStDplKc68r2CEm0eW5uSN6aqe1lgAADs=\") !important\n}\n.player-volume__slider-thumb {\n background: url(\"data:image/gif;base64,R0lGODlhIgAVAKIHAL3/9/+Zmf8zmf/MmZmZmf+Z/wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMkJBNjY5RTU1NEJFMzExOUM4QUM2MDAwNDQzRERBQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCREIzOEIzMzRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCREIzOEIzMjRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM1QkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMyQkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkECQcABwAsAAAAACIAFQAAA6J4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93bqCA7f7TFaYoIFAMMwczB5EkTzJllEUttmIGoG5bfPBjDawD7CsJC67uWcv2CRov929C/q2ZpcBbYBmLGk6W1BRY4MUDnMvJEsBAXdlknk2fCeRk2iJliAijpBlEmigjR0plKSgpKWvEUheF4tUZqZID1RHjEe8PsDBBwkAIfkECQcABwAsAAAAACIAFQAAA6B4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93TqS40XiKSYgTLBgIBAMqE/zmQSaZEzns+jQ9pC/5dQJ0VIv5KMVWxqb36opxHrNvu9ptPfGbmsBbgSAeRdydCdjXWRPchQPh1hNAQF4TpM9NnwukpRyi5chGjqJEoSOIh0plaYsZBKvsCuNjY5ptElgDyFIuj6+vwcJACH5BAkHAAcALAAAAAAiABUAAAOfeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GKifWaddvNQAtszXYCxgR/Zy5jYTFeXmSDiIZGdQEBd06QSBQ5e4cEkE9nnZQaG2J4F4MSLx8rkqUSZBeurhlTUqsLsi60DpZxSWBJugcJACH5BAkHAAcALAAAAAAiABUAAAOgeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GuifWaddvNwMkZtmY7AWMEgGcKY2ExXl5khFMVc0Z1AQF3TpJShDl8iASST2efloV5JTyJFpgOch8dgW9KZxexshGNLqgLtbW0SXFwvaJfCQAh+QQJBwAHACwAAAAAIgAVAAADoXi63P7wmUmrnVGOzbvfRsYYXGGe6MmF4kEOaSGYMwq2LizHfDGwIlLPNKGZfi6gZmggEAy2iVPZEKZqzakq+1xUFFYe90lxTsHmim6HGpvf3eR7skYJ3PC5tyystc0AboFnVXQ9XFJTZIQOYUYFTQEBeWaSVF4bbCeRk1meBJYSL3WbaReMIxQfHXh6jaYXsbEQni6oaF21ERR7l0ksvA0JACH5BAkHAAcALAAAAAAiABUAAAOeeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMfFlA4hTITEMxkIBMOuADwmhzqeM6mashTCXKw2TVKQyKuTRSx2wegnNkyJ1ozpOFiMLqcEU8BZHx6NYW8nVlZefQ1tZgQBAXJIi1eHUTRwi0lhl48QL0sogxaGDhMlUo2gh14fHhcVmnOrrxNqrU9joX21Q0IUElm7DQkAIfkECQcABwAsAAAAACIAFQAAA6J4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93bqCA7f7TFaYoIFAMMwczB5EkTzJllEUttmIGoG5bfPBjDawD7CsJC67uWcv2CRov929C/q2ZpcBbYBmLGk6W1BRY4MUDnMvJEsBAXdlknk2fCeRk2iJliAijpBlEmigjR0plKSgpKWvEUheF4tUZqZID1RHjEe8PsDBBwkAIfkECQcABwAsAAAAACIAFQAAA6B4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93TqS40XiKSYgTLBgIBAMqE/zmQSaZEzns+jQ9pC/5dQJ0VIv5KMVWxqb36opxHrNvu9ptPfGbmsBbgSAeRdydCdjXWRPchQPh1hNAQF4TpM9NnwukpRyi5chGjqJEoSOIh0plaYsZBKvsCuNjY5ptElgDyFIuj6+vwcJACH5BAkHAAcALAAAAAAiABUAAAOfeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GKifWaddvNQAtszXYCxgR/Zy5jYTFeXmSDiIZGdQEBd06QSBQ5e4cEkE9nnZQaG2J4F4MSLx8rkqUSZBeurhlTUqsLsi60DpZxSWBJugcJACH5BAkHAAcALAAAAAAiABUAAAOgeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GuifWaddvNwMkZtmY7AWMEgGcKY2ExXl5khFMVc0Z1AQF3TpJShDl8iASST2efloV5JTyJFpgOch8dgW9KZxexshGNLqgLtbW0SXFwvaJfCQAh+QQJBwAHACwAAAAAIgAVAAADoXi63P7wmUmrnVGOzbvfRsYYXGGe6MmF4kEOaSGYMwq2LizHfDGwIlLPNKGZfi6gZmggEAy2iVPZEKZqzakq+1xUFFYe90lxTsHmim6HGpvf3eR7skYJ3PC5tyystc0AboFnVXQ9XFJTZIQOYUYFTQEBeWaSVF4bbCeRk1meBJYSL3WbaReMIxQfHXh6jaYXsbEQni6oaF21ERR7l0ksvA0JACH5BAkHAAcALAAAAAAiABUAAAOeeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMfFlA4hTITEMxkIBMOuADwmhzqeM6mashTCXKw2TVKQyKuTRSx2wegnNkyJ1ozpOFiMLqcEU8BZHx6NYW8nVlZefQ1tZgQBAXJIi1eHUTRwi0lhl48QL0sogxaGDhMlUo2gh14fHhcVmnOrrxNqrU9joX21Q0IUElm7DQkAOw==\") !important;\n width: 34px !important;\n height: 21px !important;\n border: none !important;\n margin-left: -18px !important;\n margin-top: 0px !important;\n}\n.player-slider:before, .player-slider__muted-segments, .player-slider__muted {\n height: 12px !important;\n}\n.player-seek > .player-slider {\n transform: scaleY(0.6);\n transition: transform .1s cubic-bezier(0.4,0.0,1,1);\n padding-top: inherit;\n}\n.player-seek > .player-slider:hover {\n transform: scaleY(1);\n}\n.player-button {\n margin-top: .4em\n}\n.player-quality {\n margin-top: .4em;\n}\n.player-slider__buffer {\n background: none !important;\n}\n.player-volume__slider-container {\n padding: .35em 0 .3em !important;\n}\n.player-hover p, .player-hover span {\n cursor: pointer !important;\n}\n.player-slider--roundhandle .ui-slider-handle {\n transition: opacity .2s ease !important;\n}\n.player-seek__time-container{\n margin-bottom: .5em !important;\n}\ndiv#player {\n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5);\n}\n.has-player-mini>.tse-content>.ember-view>.ember-view>.content>#channel>.ember-view>.player-column>.player-placeholder { \n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5); \n}", + "start": 1013, + "domains": [ + "twitch.tv" + ] + } + ], + "name": "Twitch - Nyan Cat progress bar video player theme", + "originalDigest": "4304bea21601d61d25e2c0a65f57c21b8d468e66", + "id": 12, + "updateDate": 1615723396511, + "_id": "597b538f-68f5-4bfd-9903-f5fff6c8d7f9", + "_rev": 1615723396512, + "etag": "W/\"9f39d20ab094e1c3a6fcc39f3b09aadb72ad50f25584dfdc6387fd95f103021a\"", + "sourceCode": "/* ==UserStyle==\n@name Twitch - Nyan Cat progress bar video player theme\n@namespace USO Archive\n@author badjokr\n@description `Bring Nyan Cat to your Twitch VODs and streams with this custom progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!`\n@version 20180302.2.25\n@license NO-REDISTRIBUTION\n@preprocessor uso\n@advanced dropdown glow \"Progress bar glow\" {\n\tglow1 \"Yes*\" <<.tse-content>.ember-view>.ember-view>.content>#channel>.ember-view>.player-column>.player-placeholder { \n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5); \n} EOT;\nplayerglow2 \"No\" << .player-slider {\n transform: scaleY(0.6);\n transition: transform .1s cubic-bezier(0.4,0.0,1,1);\n padding-top: inherit;\n}\n.player-seek > .player-slider:hover {\n transform: scaleY(1);\n}\n.player-button {\n margin-top: .4em\n}\n.player-quality {\n margin-top: .4em;\n}\n.player-slider__buffer {\n background: none !important;\n}\n.player-volume__slider-container {\n padding: .35em 0 .3em !important;\n}\n.player-hover p, .player-hover span {\n cursor: pointer !important;\n}\n.player-slider--roundhandle .ui-slider-handle {\n transition: opacity .2s ease !important;\n}\n.player-seek__time-container{\n margin-bottom: .5em !important;\n}\n/*[[playerglow]]*/\n}", + "usercssData": { + "name": "Twitch - Nyan Cat progress bar video player theme", + "namespace": "USO Archive", + "author": "badjokr", + "description": "Bring Nyan Cat to your Twitch VODs and streams with this custom progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!", + "version": "20180302.2.25", + "license": "NO-REDISTRIBUTION", + "preprocessor": "uso", + "vars": { + "glow": { + "type": "select", + "label": "Progress bar glow", + "name": "glow", + "value": "glow1", + "default": "glow1", + "options": [ + { + "name": "glow1", + "label": "Yes*", + "value": "box-shadow: 0px 0px 10px #5099FF, 0px 0px 10px #5099FF, 0px 0px 10px #5099FF !important;" + }, + { + "name": "glow2", + "label": "No", + "value": "" + } + ] + }, + "playerglow": { + "type": "select", + "label": "Purple glow under player", + "name": "playerglow", + "value": "playerglow1", + "default": "playerglow1", + "options": [ + { + "name": "playerglow1", + "label": "Yes*", + "value": "div#player {\n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5);\n}\n.has-player-mini>.tse-content>.ember-view>.ember-view>.content>#channel>.ember-view>.player-column>.player-placeholder { \n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5); \n}" + }, + { + "name": "playerglow2", + "label": "No", + "value": "" + } + ] + } + } + }, + "author": "badjokr", + "description": "Bring Nyan Cat to your Twitch VODs and streams with this custom progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!" + }, + { + "installDate": 1530455075022, + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "name": "Jetpack Fix", + "sections": [ + { + "code": "#jp-stats-wrap, #jp-plugin-container.is-wide .wrap {\n max-width: 100%;\n}", + "domains": [ + "akamaru.de" + ] + } + ], + "id": 14, + "_id": "bed9b946-1e63-4374-981f-8012658569e5", + "_rev": 1580730543289 + }, + { + "installDate": 1531140041462, + "enabled": false, + "updateUrl": "https://raw.githubusercontent.com/Athari/CssGitHubWindows/master/GitHubWindows.user.css", + "md5Url": null, + "url": "https://github.com/Athari/CssGitHubWindows", + "originalMd5": null, + "sourceCode": "/* ==UserStyle==\n@name GitHub Windows Edition [Ath]\n@namespace https://github.com/Athari\n@version 0.6.0\n@description Transforms GitHub's pages into a GUI resembling Windows 9x.\n@author Athari\n@homepageURL https://github.com/Athari/CssGitHubWindows\n@license MIT\n==/UserStyle== */\n\n@-moz-document domain(\"github.com\") {\n :root {\n --color-button-text: rgb(0, 0, 0);\n --color-button-face: rgb(192, 192, 192);\n --color-button-highlight: rgb(255, 255, 255);\n --color-button-shadow: rgb(128, 128, 128);\n --color-button-shadow-dark: rgb(0, 0, 0);\n --color-button-checked: rgb(223, 223, 223);\n --color-window-text: rgb(0, 0, 0);\n --color-window: rgb(255, 255, 255);\n --color-active-caption-text: rgb(255, 255, 255);\n --color-active-caption: rgb(0, 0, 128);\n --color-info-background: rgb(255, 255, 192);\n --color-highlight-text: rgb(255, 255, 255);\n --color-highlight: rgb(0, 0, 128);\n --color-gray-text: rgb(128, 128, 128);\n --color-gray-text-dark: rgb(64, 64, 64);\n --color-link: rgb(0, 0, 255);\n --color-hover: rgb(223, 223, 255);\n\n --font-family: MS Sans Serif, MS Reference Sans Serif, Liberation Sans, Tahoma, sans-serif;\n --font-size: 12px;\n --font-size-text: 14px;\n --font-size-bigger: 13px;\n --font-size-header: 14px;\n --font-line: 1.2;\n --font-line-text: 1.2;\n --font: var(--font-size)/var(--font-line) var(--font-family);\n --font-text: var(--font-size-text)/var(--font-line-text) var(--font-family);\n --font-header: var(--font-size-header)/var(--font-line) var(--font-family);\n\n --button-3d-border-color-exact: var(--color-button-face) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-face);\n --button-3d-box-shadow-exact:\n 0 -1px 0 0 var(--color-button-highlight),\n -1px 0 0 0 var(--color-button-highlight),\n -1px -1px 0 0 var(--color-button-highlight),\n -1px 1px 0 0 var(--color-button-shadow-dark),\n 1px 0 0 0 var(--color-button-shadow-dark),\n 1px 1px 0 0 var(--color-button-shadow-dark);\n --button-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight);\n --button-3d-border-color-inverted: var(--color-button-shadow) var(--color-button-highlight) var(--color-button-highlight) var(--color-button-shadow);\n --button-3d-box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-shadow-dark),\n 1px 1px 0 var(--color-button-shadow-dark);\n --box-3d-border-color: var(--color-button-shadow-dark) var(--color-button-face) var(--color-button-face) var(--color-button-shadow-dark);\n --box-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-shadow),\n -1px 0 0 0 var(--color-button-shadow),\n -1px -1px 0 0 var(--color-button-shadow),\n -1px 1px 0 0 var(--color-button-highlight),\n 1px 0 0 0 var(--color-button-highlight),\n 1px 1px 0 0 var(--color-button-highlight);\n --group-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight);\n --group-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-shadow),\n -1px 0 0 0 var(--color-button-shadow),\n -1px -1px 0 0 var(--color-button-shadow),\n -1px 1px 0 0 var(--color-button-highlight),\n 1px 0 0 0 var(--color-button-highlight),\n 1px 1px 0 0 var(--color-button-highlight);\n --window-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-face),\n -1px 0 0 0 var(--color-button-face),\n -1px -1px 0 0 var(--color-button-face),\n -1px 1px 0 0 var(--color-button-shadow-dark),\n 1px 0 0 0 var(--color-button-shadow-dark),\n 1px 1px 0 0 var(--color-button-shadow-dark);\n\n --image-folder: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAD//5nMzGYAAAD/zJmZmQD//8zx8fEIMK00AAAAAXRSTlMAQObYZgAAAE5JREFUCNdjQIDQ0GAwzVqWKGoAYgQpKSmFhoYyMISlgYCQAUOYIAg4QRgiIjARR4iICFzEESIiAgQghiMQuAAZQUpgYMDAbAwGBgwYAABoaBIom9Nm3gAAAABJRU5ErkJggg==');\n --image-folder-documents: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAACZmQD//5n/zJn///8zMwDn59aGhobMzGZVVVUAM5mAgADx8fH/+/Dq6upNTU2p3qmcAAAAAXRSTlMAQObYZgAAAGlJREFUCNdjAIECBghgfwmmGAVLrn0AMSTaXY68BDNKXNYem72BgUE8LSsrLXMDgyAYpH1gEHEBAguxTAYRJSUlZWWxAAZGJWUlI+NGIAMkoGwIZAAFjIyADAZhZYgIVD+QwRoKAgxwAADcLBkG7Oto1QAAAABJRU5ErkJggg==');\n --image-file-text: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD///8AAADAwMCAgIA71crUAAAAAXRSTlMAQObYZgAAADdJREFUCNdjYFAAAQYGBiYRIBACMhwVQUAByBAEAmEUhpCSkCK6iBLJIgiGszEIABlMSiDAwAAAbdoMvcC7PKEAAAAASUVORK5CYII=');\n --image-file-script: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEX///8AAACAgIDAwMAAAP9P8fJzAAAAUUlEQVQI11WLyRHAMAgDGTsFgCsAuwKGEkL/NYVj8rBeC1rB7ggwBDNowADQAvZ3YUA+TsHjRFmV8jt4r7b4LHkuLGDlroaJtUxEqR+raNydD4tEDMx2wEOBAAAAAElFTkSuQmCC');\n --image-drive-network: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAADAwMAAAACAgID///+AgAD//wAA/wAAgACrI+ZSAAAAAXRSTlMAQObYZgAAAEpJREFUCNdjwAKMwcCAgVkQDIwYTFxAwNmIwRDElyiGMgSFgQywWhADrEZYgYFJCQzAJjEpQI1kBDOAWkKDgAQDUD4lCKoIRCIAANMFDQmCUWfHAAAAAElFTkSuQmCC');\n --image-help: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAACAAIDMAMwAAABmAGbAwMCZAJn/mf/n59aZmZn//wDWAJNmZmaZZjPMZsytqZD/zDOGhobMmTM1eNxEAAAAAXRSTlMAQObYZgAAAG5JREFUGNNVzVEOhSAMRFGHtjzoE1H3v1iHWDFOwse5IekSgyyf4ZdUvk4pRwq3poDKtLufLCJhbneFYNp9b5AVYSojy1p5HQAPZD76GKEa0+1OMxTr4P+jGs3w30oxQ+3DY6pMbOGZwm8Kv+nxBbR5A2SXmbJNAAAAAElFTkSuQmCC');\n --image-files: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD///8AAADAwMCAgIA71crUAAAAAXRSTlMAQObYZgAAADpJREFUCNdjYGBwcXFxUgDSLMbGxspKUAEjI6CQo6CgiLIylCEEFRFSgooIClOB4WwMBCBLlUBAgQEAR6QOgOgRPP8AAAAASUVORK5CYII=');\n --image-tree: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAAAAgAAAAAAA/wCAAACAgAD//wD////AwMCATq9oAAAAAXRSTlMAQObYZgAAAF5JREFUCNd1irENgDAMBJ9I9DguaBOLgtYpqBEzZIGMwP4Nb1HHhe91OgDCQ/AdqlzLuFRcNuyEChVfMDN199YyUmNRqwFmmVeA9TYzEuj9fAiqfoQIxfIfZTaSRfMBdb8LBoGZClYAAAAASUVORK5CYII=');\n --image-install: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIVBMVEUAAACAgIAAAADAwMD///8AAIAA//8AAP8AgID//wAA/wB9pF0iAAAAAXRSTlMAQObYZgAAAIBJREFUCNdjAAJGQUFBARBDxMXFWQjMCA0NBjEERYKTm4EMRheVMAsgg1FQSCW4o1iIQcRRRdnY2BgoIuSuBATKDIxO5YrCgoKGDIxFxSqOM40FgQxjZbFMEyOglLGiVKIxmKEkbCQMYhgxCDtPSwIyFBgYja2UGZiUgNYpKRkAAHKUFEgKyHHMAAAAAElFTkSuQmCC');\n --image-users: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAAAAAAD////AwMAAAICAAAAAAP+AgID/AACUdQtdAAAAAXRSTlMAQObYZgAAAGdJREFUCNctzcEJgDAMBdAIDtCkE5jgAGnBBSy9K3QALy7gBG5u0vov/8GHBCwTYgAPoslrYOqdf/DSl6h8OaJElmCgjcaURVkdKREGPytCagBUPMXxCLb1BZhL0tYOgHrvtf8uFscH72MNfQW7pXEAAAAASUVORK5CYII=');\n --image-lock: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAAAAAACAgAD//wDAwMCZmQD4+PjMzACGhoYAAP+ysrIAmTMICAj/AAB3d3fMADNdKQKAAAAAAXRSTlMAQObYZgAAAGpJREFUCNdjAAIOAQYIaHOE0HwZUgIQAemNYCGOlL/FQCEQQ3JiCpiR6ygGkXKZBhZgUBRxAQswSRkJggWURY2VlJQUgAxFYWNjY0MgQ028NDy0XIBBvag85qhgIFBxaKgAIwNIuaAg2EYAxGwRy03mvagAAAAASUVORK5CYII=');\n --image-message-warning: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD//wAAAACAgICAgAD7lZT4AAAAAXRSTlMAQObYZgAAAFFJREFUCNc9zNENgCAMhOE+sEA7gcICVRYQ4/4z+bcELn34krtUyPdIpqhteGKoHhOmbTb1tA2PBjAKvIMRjRqXIIz4cl98WmiABErNdJGe8R94Ngsp7z6ySgAAAABJRU5ErkJggg==');\n --image-hierarchy: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAAAAAD////AwMD/AAAA/////wAA/wC2MU76AAAAAXRSTlMAQObYZgAAAE9JREFUCNc9ytERgDAIA1BwgxRPv8ENigt4xwLuv4xVsPl6l4QYihEivs+IuAZQWKSbmb5AS2CThCPBpo6WwC5/U+iHF+ZnzckcBcsPvtADzokMhSp6+fAAAAAASUVORK5CYII=');\n --image-graph: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAAAAAACAAID///8A//+AgIDAwMAGyj3KAAAAAXRSTlMAQObYZgAAAFlJREFUCNdVy7ENwDAIRFGa9AGb9LCB5Qks3QoZII33HyHYFFFe9cUJ4nRS6Zt+cc1nhrg0KTmJW+usxO4u7Eriyz8sth1VbKxgDIPEF4CKoVSxxSUpHXd6AVDAE78kckOGAAAAAElFTkSuQmCC');\n --image-config: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAM1BMVEUAAABmZgCZmZn/+/Dn59aZmQD//5kzMwAcHBzAwMDMzGZNTU0AAADq6upmZmYzAACtqZA/egufAAAAAXRSTlMAQObYZgAAAHJJREFUGNNNzVESgyAMRVEu8QVLBdz/aosU1DvDzyGThPgURtG22XfBZ9/3uJU3mMU18QC8oC/EjBvOlE5cBGleoegCGQvEBWhCcneycDcGkPAM2cUETG6eZceAgolmudElhForJOBooPCP1F//XLBw9APHJgNeldevuwAAAABJRU5ErkJggg==');\n }\n\n body {\n background: var(--color-button-face) !important;\n font: var(--font) !important;\n color: var(--color-button-text) !important;\n }\n a {\n color: var(--color-link);\n }\n ::-moz-selection {\n color: var(--color-highlight-text) !important;\n background: var(--color-highlight) !important;\n }\n ::selection {\n color: var(--color-highlight-text) !important;\n background: var(--color-highlight) !important;\n }\n\n .markdown-body {\n font: var(--font-text) !important;\n }\n .markdown-body pre,\n .markdown-body .highlight pre,\n .markdown-body code {\n background: #eee !important;\n }\n\n .avatar,\n .gravatar {\n border-radius: 0 !important;\n }\n\n label {\n font: inherit !important;\n color: inherit !important;\n }\n .note,\n .info,\n .text-gray,\n .text-gray-light {\n font: inherit !important;\n color: var(--color-gray-text-dark) !important;\n }\n\n .Header {\n background: var(--color-active-caption) !important;\n font: inherit !important;\n }\n .HeaderNavlink {\n color: var(--color-active-caption-text) !important;\n font-weight: normal !important;\n }\n .HeaderNavlink:hover {\n text-decoration: underline !important;\n }\n .header-search-key-slash {\n display: none !important;\n }\n h1, h2, h3, h4, h5, h6 {\n border: none !important;\n }\n\n .footer .pt-6 {\n margin: 8px 0 0 0 !important;\n padding: 0 !important;\n border: none !important;\n }\n .footer .pb-6 {\n padding: 0 0 8px 0 !important;\n }\n\n .repohead {\n background: var(--color-button-face) !important;\n margin: 0;\n }\n .pagehead {\n border: none !important;\n }\n .pagehead *,\n .file-wrap * {\n font-size: inherit !important;\n }\n .numbers-summary a,\n .numbers-summary .nolink,\n .reponav-item {\n color: inherit;\n }\n .numbers-summary a:hover {\n text-decoration: underline !important;\n }\n\n .social-count {\n font: inherit !important;\n color: var(--color-link) !important;\n background: inherit !important;\n border: none !important;\n padding: 6px;\n }\n .social-count:hover {\n text-decoration: underline !important;\n }\n\n .topic-tag {\n color: inherit;\n background: var(--color-button-checked) !important;\n border: solid 1px transparent !important;\n border-color: var(--color-button-shadow) var(--color-button-highlight) var(--color-button-highlight) var(--color-button-shadow) !important;\n border-radius: 0 !important;\n }\n .topic-tag:hover {\n color: var(--color-link) !important;\n }\n\n .repository-meta:not(.open) {\n font-size: inherit !important;\n font-weight: bold !important;\n margin: 6px 0;\n }\n .repository-meta .repo-description-field {\n width: 490px;\n }\n .topic-input-container .tag-input {\n width: 880px;\n }\n .container.experiment-repo-nav {\n padding: 8px;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n box-shadow: var(--button-3d-box-shadow) !important;\n width: 1000px;\n }\n\n .commit-tease {\n margin: 0 0 8px 0 !important;\n }\n .commit-tease-contributors {\n background: transparent !important;\n border: none !important;\n margin: 8px -10px 0 -10px !important;\n }\n\n .pr-toolbar {\n background: var(--color-button-face) !important;\n margin: 1px -20px !important;\n }\n .pr-toolbar.is-stuck {\n border-bottom: solid 1px var(--color-button-shadow) !important;\n box-shadow: 0 1px 0 0 var(--color-button-shadow-dark) !important;\n }\n .pr-toolbar-shadow {\n display: none !important;\n }\n .diffbar {\n background: inherit !important;\n }\n\n .file-wrap,\n .blob-wrapper,\n .menu,\n .network,\n #readme,\n .overall-summary,\n .summary-stats,\n .pulse-section .simple-conversation-list,\n .capped-list,\n .issues-listing > div[class^=border] {\n background: var(--color-window) !important;\n border: solid 1px black !important;\n border-color: var(--box-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--box-3d-box-shadow) !important;\n }\n .network {\n padding: 4px !important;\n }\n .file {\n border: none !important;\n margin: 0 !important;\n }\n .file-header {\n background: transparent !important;\n }\n .menu-item {\n font: inherit !important;\n border: none !important;\n border-radius: 0 !important;\n color: inherit !important;\n }\n .menu-item:hover {\n background: var(--color-hover) !important;\n }\n .menu-item.selected {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .menu-item::before {\n display: none !important;\n }\n .network .current-repository,\n .network .current-repository a {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .network .current-repository {\n padding: 0px 4px 1px !important;\n }\n table.files td a,\n table.files td span {\n color: var(--color-window-text) !important;\n }\n table.files tr.navigation-focus td {\n background: var(--color-highlight) !important;\n }\n table.files tr.navigation-focus td a,\n table.files tr.navigation-focus td span {\n color: var(--color-highlight-text) !important;\n }\n .Box-row.navigation-focus {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .Box-row.navigation-focus * {\n color: inherit !important;\n }\n .Box-row {\n margin: 0 !important;\n }\n .overall-summary {\n height: 60px;\n padding: 8px;\n }\n .numbers-summary a,\n .numbers-summary .nolink {\n padding: 0;\n }\n .repository-lang-stats * {\n font: inherit !important;\n }\n .repository-lang-stats .language-color {\n width: 16px !important;\n height: 16px !important;\n border-radius: 0 !important;\n vertical-align: -4px;\n }\n .repository-lang-stats a:hover,\n .repository-lang-stats a:hover span {\n color: var(--color-link) !important;\n text-decoration: underline !important;\n }\n .IssueLabel {\n font: inherit !important;\n line-height: 13px !important;\n border: none !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n height: 18px !important;\n }\n .capped-list th {\n background: var(--color-button-face) !important;\n }\n .capped-list tbody {\n background: var(--color-window) !important;\n }\n\n .repository-lang-stats-graph {\n border: solid 1px var(--color-button-shadow-dark) !important;\n border-radius: 0 !important;\n height: 16px !important;\n margin: 6px 0 -6px 0 !important;\n pointer-events: none !important;\n }\n .repository-lang-stats-graph .language-color {\n border-radius: 0 !important;\n }\n\n .table-list-header {\n background: inherit !important;\n border: none !important;\n margin: 4px 0 !important;\n }\n .table-list-header .btn-link {\n padding: 6px 8px !important;\n }\n\n .issues-listing .h4 {\n font: inherit !important;\n font-size: var(--font-size-bigger) !important;\n }\n\n .discussion-timeline,\n .timeline-comment-wrapper,\n .timeline-comment,\n .timeline-comment-header,\n .discussion-timeline-actions {\n background: inherit !important;\n border: none !important;\n }\n .discussion-timeline::before {\n display: none !important;\n }\n .discussion-item + .discussion-item,\n .discussion-item-review + .discussion-item,\n .discussion-sidebar-item + .discussion-sidebar-item {\n border-top: solid 1px var(--color-button-highlight) !important;\n box-shadow: 0 -1px 0 0 var(--color-button-shadow) !important;\n }\n .discussion-sidebar-item {\n color: inherit !important;\n }\n .comment-reactions.has-reactions {\n border: none !important;\n }\n .gh-header-meta {\n border-bottom: solid 1px var(--color-button-shadow) !important;\n box-shadow: 0 1px 0 0 var(--color-button-highlight) !important;\n }\n\n .UnderlineNav,\n .tabnav {\n margin: 0 !important;\n background: inherit !important;\n border: none !important;\n }\n .select-menu-tabs {\n font-size: 0;\n }\n .reponav {\n width: 1000px;\n }\n .reponav > span,\n .select-menu-tabs ul,\n .select-menu-tab {\n display: contents !important;\n }\n .UnderlineNav-item,\n .pagehead-tabs-item,\n .tabnav-tabs a,\n .tabnav-tabs span:not(.Counter),\n .reponav-item,\n .select-menu-tab a {\n font-size: var(--font-size);\n font-weight: normal !important;\n color: var(--color-button-text) !important;\n background: var(--color-button-face) !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n border-bottom: none !important;\n border-radius: 2px 2px 0 0 !important;\n box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-highlight)\n !important;\n margin: 0 1px -1px 0 !important;\n padding: 4px 6px !important;\n min-height: 26px;\n }\n .UnderlineNav-item.selected,\n .pagehead-tabs-item.selected,\n .tabnav-tabs a.selected,\n .tabnav-tabs span:not(.Counter).selected,\n .reponav-item.selected,\n .select-menu-tab a.selected {\n box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-face)\n !important;\n margin: -2px 1px 1px 0 !important;\n min-height: 28px;\n }\n .tabnav-tabs span:not(.Counter) {\n color: var(--color-gray-text) !important;\n }\n\n .Counter {\n background: inherit !important;\n font: inherit !important;\n color: inherit !important;\n padding: 0 !important;\n }\n .Counter::before {\n content: \"(\";\n }\n .Counter::after {\n content: \")\";\n }\n\n .auth-form-body,\n .select-menu-modal,\n .dropdown-menu {\n background: var(--color-button-face) !important;\n color: inherit !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--window-3d-box-shadow) !important;\n padding: 0 !important;\n }\n\n .dropdown-menu::before,\n .dropdown-menu::after {\n display: none !important;\n }\n .dropdown-item:hover {\n background: var(--color-highlight) !important;\n }\n .dropdown-divider {\n height: 0 !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color-inverted) !important;\n }\n\n .select-menu-header {\n background: var(--color-active-caption) !important;\n padding: 4px 6px !important;\n }\n .select-menu-title {\n color: var(--color-active-caption-text) !important;\n }\n .select-menu-filters {\n background: inherit !important;\n }\n .select-menu-item.navigation-focus {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .select-menu-item .text-gray {\n color: var(--color-gray-text) !important;\n }\n .select-menu-item.navigation-focus .text-gray {\n color: inherit !important;\n }\n\n .tooltipped::before {\n display: none !important;\n }\n .Popover-message,\n .tooltipped::after {\n font: inherit !important;\n color: var(--color-window-text) !important;\n background: var(--color-info-background) !important;\n border: solid 1px var(--color-button-shadow-dark) !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n .Popover-message::before,\n .Popover-message::after {\n display: none !important;\n }\n\n .btn-link,\n .btn,\n .btn:hover,\n .subnav-item,\n .pagination > :not(.gap),\n #user-links .dropdown,\n .js-menu-close {\n font: var(--font) !important;\n font-weight: normal !important;\n background: var(--color-button-face) !important;\n color: var(--color-button-text) !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color-exact) !important;\n border-radius: 0 !important;\n box-shadow: var(--button-3d-box-shadow-exact) !important;\n margin: 1px 2px !important;\n }\n .btn-link svg,\n .btn svg,\n .btn:hover svg,\n .subnav-item svg,\n #user-links .dropdown svg,\n .js-menu-close svg {\n fill: var(--color-window-text) !important;\n }\n .pagination .disabled {\n color: var(--color-gray-text) !important;\n }\n .pagination .current {\n font-weight: bold !important;\n }\n .pagination > .gap {\n background: inherit !important;\n border: none !important;\n color: inherit !important;\n }\n .btn-link .dropdown-caret,\n .btn .dropdown-caret,\n .btn:hover .dropdown-caret,\n .subnav-item .dropdown-caret,\n #user-links .dropdown .dropdown-caret {\n color: var(--color-window-text) !important;\n border-top-color: var(--color-window-text) !important;\n }\n .btn-link:active,\n .btn:active,\n .btn.selected,\n [open] > .btn,\n .subnav-item:active,\n .pagination > :not(.gap):not(.disabled):active,\n #user-links .dropdown:active,\n .js-menu-close:active {\n border-color: var(--color-button-shadow) !important;\n box-shadow:\n 0 0 0 1px var(--color-button-shadow-dark)\n !important;\n }\n .btn-link:focus,\n .btn:focus,\n .subnav-item:focus {\n outline: dotted 1px var(--color-button-text) !important;\n outline-offset: -4px !important;\n }\n\n input:not([type]),\n input[type=text],\n input[type=search],\n input[type=password],\n input[type=url],\n .tag-input,\n textarea {\n color: var(--color-window-text) !important;\n background: var(--color-window) !important;\n border: solid 1px black !important;\n border-color: var(--box-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--box-3d-box-shadow) !important;\n margin: 0 2px !important;\n padding-top: 4px !important;\n padding-bottom: 4px !important;\n min-height: 0 !important;\n }\n input::placeholder {\n color: var(--color-gray-text) !important;\n opacity: 1 !important;\n }\n\n .btn-link {\n padding: 4px 6px;\n text-decoration: none !important;\n }\n .milestone-action .btn-link {\n border: none !important;\n box-shadow: none !important;\n padding: 0 !important;\n }\n .js-menu-close {\n width: 16px !important;\n height: 14px !important;\n }\n\n #user-links .dropdown {\n height: 22px !important;\n margin: 0 0 0 8px !important;\n }\n #user-links .dropdown > * {\n height: 20px !important;\n line-height: 20px !important;\n margin: 0 2px !important;\n padding: 0 4px 0 0 !important;\n }\n #user-links .dropdown details summary {\n margin: 0 !important;\n }\n #user-links .mail-status.unread {\n position: static !important;\n display: inline !important;\n width: 0 !important;\n height: 0 !important;\n background: transparent !important;\n border: none !important;\n white-space: nowrap;\n }\n #user-links .notification-indicator .mail-status.unread::after {\n color: var(--color-button-text) !important;\n content: \"(unread)\";\n }\n\n .Box:not(.position-absolute):not(.Popover-message):not(.js-network-graph-container),\n #user-repositories-list li,\n .user-profile-nav + .position-relative > .d-block,\n .blankslate,\n .border,\n .timeline-comment,\n .commit-tease {\n font: inherit !important;\n color: inherit !important;\n line-height: 20px !important;\n background: var(--color-button-face) !important;\n border: solid 1px black !important;\n border-color: var(--group-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--group-3d-box-shadow) !important;\n position: relative !important;\n padding: 12px 8px 4px 8px;\n margin-top: 2px !important;\n }\n #user-repositories-list li > .d-inline-block,\n .user-profile-nav + .position-relative > .d-block > .d-inline-block,\n .js-notice > .border::before,\n .commit-tease::before {\n color: var(--color-button-text) !important;\n background: var(--color-button-face) !important;\n position: absolute;\n left: 6px;\n top: -11px;\n padding: 0 3px;\n }\n .js-notice > .border::before {\n content: \"Notice\";\n }\n .commit-tease::before {\n content: \"Last commit\";\n }\n\n .Box.Box.Box.Box.Box.Box.Box--danger {\n background: red !important;\n }\n .Box-row {\n border-top: solid 1px var(--color-button-highlight) !important;\n box-shadow: 0 -1px 0 0 var(--color-button-shadow) !important;\n }\n .Box-row:first-of-type {\n border: none !important;\n box-shadow: none !important;\n }\n .Box-header {\n background: inherit !important;\n border: none !important;\n padding: 0 8px !important;\n }\n .Box h3 {\n font: var(--font-header) !important;\n border: none !important;\n }\n\n .Subhead {\n border: none !important;\n font-size: var(--font-size-header) !important;\n margin: 0 0 6px 0 !important;\n }\n .Subhead h2,\n .Subhead-heading {\n font-size: var(--font-size-header) !important;\n font-weight: bold !important;\n }\n .Subhead--spacious {\n margin: 12px 0 0 0 !important;\n }\n\n .boxed-group > h3,\n .boxed-group .heading {\n background: none !important;\n }\n\n #user-repositories-list li,\n .user-profile-nav + .position-relative > .d-block {\n margin: 0 0 16px 0 !important;\n padding: 12px 8px 8px 8px !important;\n }\n #user-repositories-list li > .d-inline-block,\n .user-profile-nav + .position-relative > .d-block > .d-inline-block {\n display: flex !important;\n flex-flow: row !important;\n margin: 2px 0 0 0;\n }\n #user-repositories-list li > .d-inline-block > span::before {\n content: \" (\";\n }\n #user-repositories-list li > .d-inline-block > span::after {\n content: \")\";\n }\n #user-repositories-list li > .my-1,\n #user-repositories-list li > .mt-2,\n .user-profile-nav + .position-relative > .d-block > .mt-2 {\n margin: 0 !important;\n }\n #user-repositories-list h3,\n .user-profile-nav + .position-relative > .d-block h3 {\n font: bold var(--font) !important;\n }\n #user-repositories-list h3 + span {\n font: var(--font) !important;\n }\n #user-repositories-list h3 + span a {\n color: var(--color-link) !important;\n }\n #user-repositories-list h3 + span a:hover {\n text-decoration: underline !important;\n }\n #user-repositories-list .text-gray,\n .user-profile-nav + .position-relative > .d-block .text-gray {\n color: inherit !important;\n }\n .repo-language-color {\n width: 16px !important;\n height: 16px !important;\n border-radius: 0 !important;\n margin: 2px 4px -2px 0 !important;\n }\n\n .summary-stats {\n margin: -2px 0 4px 0 !important;\n }\n .summary-stats li {\n border: none !important;\n color: inherit !important;\n }\n .summary-stats li a {\n background: inherit !important;\n color: inherit !important;\n }\n .summary-stats li a:hover {\n color: var(--color-link) !important;\n text-decoration: underline !important;\n }\n .summary-stats li a .num {\n font: bold var(--font) !important;\n text-decoration-color: transparent !important;\n }\n .diffstat-summary {\n font: inherit !important;\n line-height: 166% !important;\n color: inherit !important;\n padding: 32px 48px 0 8px !important;\n }\n .pulse-section {\n font: inherit !important;\n color: inherit !important;\n }\n .pulse-section h3 {\n color: inherit !important;\n }\n .pulse-section h3 span {\n background: none !important;\n font: var(--font-header) !important;\n }\n .pulse-section h3 .text-emphasized {\n font-weight: bold !important;\n }\n .simple-conversation-list {\n font: inherit !important;\n color: inherit !important;\n }\n .simple-conversation-list > li {\n border: none !important;\n padding: 2px 0 !important;\n }\n .simple-conversation-list > li .num {\n color: var(--color-gray-text) !important;\n }\n .pulse-section .simple-conversation-list {\n padding: 4px 8px !important;\n }\n\n .Box.d-block svg {\n margin: 0 0 -8px -8px;\n }\n .tint-box,\n .capped-card-content {\n background: transparent !important;\n }\n svg .tick text {\n fill: var(--color-button-text) !important;\n }\n svg .tick line {\n stroke: var(--color-gray-text) !important;\n }\n\n .js-edit-repo-container dl {\n margin: 0 !important;\n }\n .boxed-group-inner,\n .access-form-wrapper {\n background: none !important;\n color: inherit !important;\n border: none !important;\n }\n .settings-next {\n font: inherit !important;\n }\n\n .auth-form-header {\n display: none !important;\n }\n .auth-form-body {\n position: relative !important;\n padding: 32px 8px 8px 8px !important;\n font: inherit !important;\n }\n .auth-form-body::before {\n display: block;\n position: absolute;\n height: 24px;\n left: 0;\n right: 0;\n margin: -32px 0 0 0;\n padding: 0 10px;\n background: var(--color-active-caption) !important;\n color: var(--color-active-caption-text) !important;\n font: bold var(--font-size)/24px var(--font-family);\n content: \"Confirm password to continue\";\n }\n .auth-form-body .btn {\n margin: 8px 2px 0 2px !important;\n }\n\n .octicon-file-directory, .octicon-file, .octicon-book, .octicon-history, .octicon-git-branch, .octicon-tag, .octicon-organization, .octicon-law, .octicon-code,\n .octicon-issue-opened, .octicon-git-pull-request, .octicon-project, .octicon-graph, .octicon-gear, .octicon-repo {\n fill: transparent !important;\n width: 16px !important;\n height: 16px !important;\n }\n .octicon-file-directory { background: var(--image-folder) !important; }\n .octicon-file { background: var(--image-file-text) !important; }\n .octicon-book { background: var(--image-help) !important; }\n .octicon-history { background: var(--image-files) !important; }\n .octicon-git-branch { background: var(--image-tree) !important; }\n .octicon-tag { background: var(--image-install) !important; }\n .octicon-organization { background: var(--image-users) !important; }\n .octicon-law { background: var(--image-lock) !important; }\n .octicon-code { background: var(--image-file-script) !important; }\n .octicon-issue-opened { background: var(--image-message-warning) !important; }\n .octicon-git-pull-request { background: var(--image-drive-network) !important; }\n .octicon-project { background: var(--image-hierarchy) !important; }\n .octicon-graph { background: var(--image-graph) !important; }\n .octicon-gear { background: var(--image-config) !important; }\n .octicon-repo { background: var(--image-folder-documents) !important; }\n}", + "sections": [ + { + "code": "/* ==UserStyle==\n@name GitHub Windows Edition [Ath]\n@namespace https://github.com/Athari\n@version 0.6.0\n@description Transforms GitHub's pages into a GUI resembling Windows 9x.\n@author Athari\n@homepageURL https://github.com/Athari/CssGitHubWindows\n@license MIT\n==/UserStyle== */", + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [] + }, + { + "code": ":root {\n --color-button-text: rgb(0, 0, 0);\n --color-button-face: rgb(192, 192, 192);\n --color-button-highlight: rgb(255, 255, 255);\n --color-button-shadow: rgb(128, 128, 128);\n --color-button-shadow-dark: rgb(0, 0, 0);\n --color-button-checked: rgb(223, 223, 223);\n --color-window-text: rgb(0, 0, 0);\n --color-window: rgb(255, 255, 255);\n --color-active-caption-text: rgb(255, 255, 255);\n --color-active-caption: rgb(0, 0, 128);\n --color-info-background: rgb(255, 255, 192);\n --color-highlight-text: rgb(255, 255, 255);\n --color-highlight: rgb(0, 0, 128);\n --color-gray-text: rgb(128, 128, 128);\n --color-gray-text-dark: rgb(64, 64, 64);\n --color-link: rgb(0, 0, 255);\n --color-hover: rgb(223, 223, 255);\n\n --font-family: MS Sans Serif, MS Reference Sans Serif, Liberation Sans, Tahoma, sans-serif;\n --font-size: 12px;\n --font-size-text: 14px;\n --font-size-bigger: 13px;\n --font-size-header: 14px;\n --font-line: 1.2;\n --font-line-text: 1.2;\n --font: var(--font-size)/var(--font-line) var(--font-family);\n --font-text: var(--font-size-text)/var(--font-line-text) var(--font-family);\n --font-header: var(--font-size-header)/var(--font-line) var(--font-family);\n\n --button-3d-border-color-exact: var(--color-button-face) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-face);\n --button-3d-box-shadow-exact:\n 0 -1px 0 0 var(--color-button-highlight),\n -1px 0 0 0 var(--color-button-highlight),\n -1px -1px 0 0 var(--color-button-highlight),\n -1px 1px 0 0 var(--color-button-shadow-dark),\n 1px 0 0 0 var(--color-button-shadow-dark),\n 1px 1px 0 0 var(--color-button-shadow-dark);\n --button-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight);\n --button-3d-border-color-inverted: var(--color-button-shadow) var(--color-button-highlight) var(--color-button-highlight) var(--color-button-shadow);\n --button-3d-box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-shadow-dark),\n 1px 1px 0 var(--color-button-shadow-dark);\n --box-3d-border-color: var(--color-button-shadow-dark) var(--color-button-face) var(--color-button-face) var(--color-button-shadow-dark);\n --box-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-shadow),\n -1px 0 0 0 var(--color-button-shadow),\n -1px -1px 0 0 var(--color-button-shadow),\n -1px 1px 0 0 var(--color-button-highlight),\n 1px 0 0 0 var(--color-button-highlight),\n 1px 1px 0 0 var(--color-button-highlight);\n --group-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight);\n --group-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-shadow),\n -1px 0 0 0 var(--color-button-shadow),\n -1px -1px 0 0 var(--color-button-shadow),\n -1px 1px 0 0 var(--color-button-highlight),\n 1px 0 0 0 var(--color-button-highlight),\n 1px 1px 0 0 var(--color-button-highlight);\n --window-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-face),\n -1px 0 0 0 var(--color-button-face),\n -1px -1px 0 0 var(--color-button-face),\n -1px 1px 0 0 var(--color-button-shadow-dark),\n 1px 0 0 0 var(--color-button-shadow-dark),\n 1px 1px 0 0 var(--color-button-shadow-dark);\n\n --image-folder: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAD//5nMzGYAAAD/zJmZmQD//8zx8fEIMK00AAAAAXRSTlMAQObYZgAAAE5JREFUCNdjQIDQ0GAwzVqWKGoAYgQpKSmFhoYyMISlgYCQAUOYIAg4QRgiIjARR4iICFzEESIiAgQghiMQuAAZQUpgYMDAbAwGBgwYAABoaBIom9Nm3gAAAABJRU5ErkJggg==');\n --image-folder-documents: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAACZmQD//5n/zJn///8zMwDn59aGhobMzGZVVVUAM5mAgADx8fH/+/Dq6upNTU2p3qmcAAAAAXRSTlMAQObYZgAAAGlJREFUCNdjAIECBghgfwmmGAVLrn0AMSTaXY68BDNKXNYem72BgUE8LSsrLXMDgyAYpH1gEHEBAguxTAYRJSUlZWWxAAZGJWUlI+NGIAMkoGwIZAAFjIyADAZhZYgIVD+QwRoKAgxwAADcLBkG7Oto1QAAAABJRU5ErkJggg==');\n --image-file-text: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD///8AAADAwMCAgIA71crUAAAAAXRSTlMAQObYZgAAADdJREFUCNdjYFAAAQYGBiYRIBACMhwVQUAByBAEAmEUhpCSkCK6iBLJIgiGszEIABlMSiDAwAAAbdoMvcC7PKEAAAAASUVORK5CYII=');\n --image-file-script: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEX///8AAACAgIDAwMAAAP9P8fJzAAAAUUlEQVQI11WLyRHAMAgDGTsFgCsAuwKGEkL/NYVj8rBeC1rB7ggwBDNowADQAvZ3YUA+TsHjRFmV8jt4r7b4LHkuLGDlroaJtUxEqR+raNydD4tEDMx2wEOBAAAAAElFTkSuQmCC');\n --image-drive-network: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAADAwMAAAACAgID///+AgAD//wAA/wAAgACrI+ZSAAAAAXRSTlMAQObYZgAAAEpJREFUCNdjwAKMwcCAgVkQDIwYTFxAwNmIwRDElyiGMgSFgQywWhADrEZYgYFJCQzAJjEpQI1kBDOAWkKDgAQDUD4lCKoIRCIAANMFDQmCUWfHAAAAAElFTkSuQmCC');\n --image-help: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAACAAIDMAMwAAABmAGbAwMCZAJn/mf/n59aZmZn//wDWAJNmZmaZZjPMZsytqZD/zDOGhobMmTM1eNxEAAAAAXRSTlMAQObYZgAAAG5JREFUGNNVzVEOhSAMRFGHtjzoE1H3v1iHWDFOwse5IekSgyyf4ZdUvk4pRwq3poDKtLufLCJhbneFYNp9b5AVYSojy1p5HQAPZD76GKEa0+1OMxTr4P+jGs3w30oxQ+3DY6pMbOGZwm8Kv+nxBbR5A2SXmbJNAAAAAElFTkSuQmCC');\n --image-files: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD///8AAADAwMCAgIA71crUAAAAAXRSTlMAQObYZgAAADpJREFUCNdjYGBwcXFxUgDSLMbGxspKUAEjI6CQo6CgiLIylCEEFRFSgooIClOB4WwMBCBLlUBAgQEAR6QOgOgRPP8AAAAASUVORK5CYII=');\n --image-tree: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAAAAgAAAAAAA/wCAAACAgAD//wD////AwMCATq9oAAAAAXRSTlMAQObYZgAAAF5JREFUCNd1irENgDAMBJ9I9DguaBOLgtYpqBEzZIGMwP4Nb1HHhe91OgDCQ/AdqlzLuFRcNuyEChVfMDN199YyUmNRqwFmmVeA9TYzEuj9fAiqfoQIxfIfZTaSRfMBdb8LBoGZClYAAAAASUVORK5CYII=');\n --image-install: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIVBMVEUAAACAgIAAAADAwMD///8AAIAA//8AAP8AgID//wAA/wB9pF0iAAAAAXRSTlMAQObYZgAAAIBJREFUCNdjAAJGQUFBARBDxMXFWQjMCA0NBjEERYKTm4EMRheVMAsgg1FQSCW4o1iIQcRRRdnY2BgoIuSuBATKDIxO5YrCgoKGDIxFxSqOM40FgQxjZbFMEyOglLGiVKIxmKEkbCQMYhgxCDtPSwIyFBgYja2UGZiUgNYpKRkAAHKUFEgKyHHMAAAAAElFTkSuQmCC');\n --image-users: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAAAAAAD////AwMAAAICAAAAAAP+AgID/AACUdQtdAAAAAXRSTlMAQObYZgAAAGdJREFUCNctzcEJgDAMBdAIDtCkE5jgAGnBBSy9K3QALy7gBG5u0vov/8GHBCwTYgAPoslrYOqdf/DSl6h8OaJElmCgjcaURVkdKREGPytCagBUPMXxCLb1BZhL0tYOgHrvtf8uFscH72MNfQW7pXEAAAAASUVORK5CYII=');\n --image-lock: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAAAAAACAgAD//wDAwMCZmQD4+PjMzACGhoYAAP+ysrIAmTMICAj/AAB3d3fMADNdKQKAAAAAAXRSTlMAQObYZgAAAGpJREFUCNdjAAIOAQYIaHOE0HwZUgIQAemNYCGOlL/FQCEQQ3JiCpiR6ygGkXKZBhZgUBRxAQswSRkJggWURY2VlJQUgAxFYWNjY0MgQ028NDy0XIBBvag85qhgIFBxaKgAIwNIuaAg2EYAxGwRy03mvagAAAAASUVORK5CYII=');\n --image-message-warning: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD//wAAAACAgICAgAD7lZT4AAAAAXRSTlMAQObYZgAAAFFJREFUCNc9zNENgCAMhOE+sEA7gcICVRYQ4/4z+bcELn34krtUyPdIpqhteGKoHhOmbTb1tA2PBjAKvIMRjRqXIIz4cl98WmiABErNdJGe8R94Ngsp7z6ySgAAAABJRU5ErkJggg==');\n --image-hierarchy: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAAAAAD////AwMD/AAAA/////wAA/wC2MU76AAAAAXRSTlMAQObYZgAAAE9JREFUCNc9ytERgDAIA1BwgxRPv8ENigt4xwLuv4xVsPl6l4QYihEivs+IuAZQWKSbmb5AS2CThCPBpo6WwC5/U+iHF+ZnzckcBcsPvtADzokMhSp6+fAAAAAASUVORK5CYII=');\n --image-graph: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAAAAAACAAID///8A//+AgIDAwMAGyj3KAAAAAXRSTlMAQObYZgAAAFlJREFUCNdVy7ENwDAIRFGa9AGb9LCB5Qks3QoZII33HyHYFFFe9cUJ4nRS6Zt+cc1nhrg0KTmJW+usxO4u7Eriyz8sth1VbKxgDIPEF4CKoVSxxSUpHXd6AVDAE78kckOGAAAAAElFTkSuQmCC');\n --image-config: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAM1BMVEUAAABmZgCZmZn/+/Dn59aZmQD//5kzMwAcHBzAwMDMzGZNTU0AAADq6upmZmYzAACtqZA/egufAAAAAXRSTlMAQObYZgAAAHJJREFUGNNNzVESgyAMRVEu8QVLBdz/aosU1DvDzyGThPgURtG22XfBZ9/3uJU3mMU18QC8oC/EjBvOlE5cBGleoegCGQvEBWhCcneycDcGkPAM2cUETG6eZceAgolmudElhForJOBooPCP1F//XLBw9APHJgNeldevuwAAAABJRU5ErkJggg==');\n }\n\n body {\n background: var(--color-button-face) !important;\n font: var(--font) !important;\n color: var(--color-button-text) !important;\n }\n a {\n color: var(--color-link);\n }\n ::-moz-selection {\n color: var(--color-highlight-text) !important;\n background: var(--color-highlight) !important;\n }\n ::selection {\n color: var(--color-highlight-text) !important;\n background: var(--color-highlight) !important;\n }\n\n .markdown-body {\n font: var(--font-text) !important;\n }\n .markdown-body pre,\n .markdown-body .highlight pre,\n .markdown-body code {\n background: #eee !important;\n }\n\n .avatar,\n .gravatar {\n border-radius: 0 !important;\n }\n\n label {\n font: inherit !important;\n color: inherit !important;\n }\n .note,\n .info,\n .text-gray,\n .text-gray-light {\n font: inherit !important;\n color: var(--color-gray-text-dark) !important;\n }\n\n .Header {\n background: var(--color-active-caption) !important;\n font: inherit !important;\n }\n .HeaderNavlink {\n color: var(--color-active-caption-text) !important;\n font-weight: normal !important;\n }\n .HeaderNavlink:hover {\n text-decoration: underline !important;\n }\n .header-search-key-slash {\n display: none !important;\n }\n h1, h2, h3, h4, h5, h6 {\n border: none !important;\n }\n\n .footer .pt-6 {\n margin: 8px 0 0 0 !important;\n padding: 0 !important;\n border: none !important;\n }\n .footer .pb-6 {\n padding: 0 0 8px 0 !important;\n }\n\n .repohead {\n background: var(--color-button-face) !important;\n margin: 0;\n }\n .pagehead {\n border: none !important;\n }\n .pagehead *,\n .file-wrap * {\n font-size: inherit !important;\n }\n .numbers-summary a,\n .numbers-summary .nolink,\n .reponav-item {\n color: inherit;\n }\n .numbers-summary a:hover {\n text-decoration: underline !important;\n }\n\n .social-count {\n font: inherit !important;\n color: var(--color-link) !important;\n background: inherit !important;\n border: none !important;\n padding: 6px;\n }\n .social-count:hover {\n text-decoration: underline !important;\n }\n\n .topic-tag {\n color: inherit;\n background: var(--color-button-checked) !important;\n border: solid 1px transparent !important;\n border-color: var(--color-button-shadow) var(--color-button-highlight) var(--color-button-highlight) var(--color-button-shadow) !important;\n border-radius: 0 !important;\n }\n .topic-tag:hover {\n color: var(--color-link) !important;\n }\n\n .repository-meta:not(.open) {\n font-size: inherit !important;\n font-weight: bold !important;\n margin: 6px 0;\n }\n .repository-meta .repo-description-field {\n width: 490px;\n }\n .topic-input-container .tag-input {\n width: 880px;\n }\n .container.experiment-repo-nav {\n padding: 8px;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n box-shadow: var(--button-3d-box-shadow) !important;\n width: 1000px;\n }\n\n .commit-tease {\n margin: 0 0 8px 0 !important;\n }\n .commit-tease-contributors {\n background: transparent !important;\n border: none !important;\n margin: 8px -10px 0 -10px !important;\n }\n\n .pr-toolbar {\n background: var(--color-button-face) !important;\n margin: 1px -20px !important;\n }\n .pr-toolbar.is-stuck {\n border-bottom: solid 1px var(--color-button-shadow) !important;\n box-shadow: 0 1px 0 0 var(--color-button-shadow-dark) !important;\n }\n .pr-toolbar-shadow {\n display: none !important;\n }\n .diffbar {\n background: inherit !important;\n }\n\n .file-wrap,\n .blob-wrapper,\n .menu,\n .network,\n #readme,\n .overall-summary,\n .summary-stats,\n .pulse-section .simple-conversation-list,\n .capped-list,\n .issues-listing > div[class^=border] {\n background: var(--color-window) !important;\n border: solid 1px black !important;\n border-color: var(--box-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--box-3d-box-shadow) !important;\n }\n .network {\n padding: 4px !important;\n }\n .file {\n border: none !important;\n margin: 0 !important;\n }\n .file-header {\n background: transparent !important;\n }\n .menu-item {\n font: inherit !important;\n border: none !important;\n border-radius: 0 !important;\n color: inherit !important;\n }\n .menu-item:hover {\n background: var(--color-hover) !important;\n }\n .menu-item.selected {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .menu-item::before {\n display: none !important;\n }\n .network .current-repository,\n .network .current-repository a {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .network .current-repository {\n padding: 0px 4px 1px !important;\n }\n table.files td a,\n table.files td span {\n color: var(--color-window-text) !important;\n }\n table.files tr.navigation-focus td {\n background: var(--color-highlight) !important;\n }\n table.files tr.navigation-focus td a,\n table.files tr.navigation-focus td span {\n color: var(--color-highlight-text) !important;\n }\n .Box-row.navigation-focus {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .Box-row.navigation-focus * {\n color: inherit !important;\n }\n .Box-row {\n margin: 0 !important;\n }\n .overall-summary {\n height: 60px;\n padding: 8px;\n }\n .numbers-summary a,\n .numbers-summary .nolink {\n padding: 0;\n }\n .repository-lang-stats * {\n font: inherit !important;\n }\n .repository-lang-stats .language-color {\n width: 16px !important;\n height: 16px !important;\n border-radius: 0 !important;\n vertical-align: -4px;\n }\n .repository-lang-stats a:hover,\n .repository-lang-stats a:hover span {\n color: var(--color-link) !important;\n text-decoration: underline !important;\n }\n .IssueLabel {\n font: inherit !important;\n line-height: 13px !important;\n border: none !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n height: 18px !important;\n }\n .capped-list th {\n background: var(--color-button-face) !important;\n }\n .capped-list tbody {\n background: var(--color-window) !important;\n }\n\n .repository-lang-stats-graph {\n border: solid 1px var(--color-button-shadow-dark) !important;\n border-radius: 0 !important;\n height: 16px !important;\n margin: 6px 0 -6px 0 !important;\n pointer-events: none !important;\n }\n .repository-lang-stats-graph .language-color {\n border-radius: 0 !important;\n }\n\n .table-list-header {\n background: inherit !important;\n border: none !important;\n margin: 4px 0 !important;\n }\n .table-list-header .btn-link {\n padding: 6px 8px !important;\n }\n\n .issues-listing .h4 {\n font: inherit !important;\n font-size: var(--font-size-bigger) !important;\n }\n\n .discussion-timeline,\n .timeline-comment-wrapper,\n .timeline-comment,\n .timeline-comment-header,\n .discussion-timeline-actions {\n background: inherit !important;\n border: none !important;\n }\n .discussion-timeline::before {\n display: none !important;\n }\n .discussion-item + .discussion-item,\n .discussion-item-review + .discussion-item,\n .discussion-sidebar-item + .discussion-sidebar-item {\n border-top: solid 1px var(--color-button-highlight) !important;\n box-shadow: 0 -1px 0 0 var(--color-button-shadow) !important;\n }\n .discussion-sidebar-item {\n color: inherit !important;\n }\n .comment-reactions.has-reactions {\n border: none !important;\n }\n .gh-header-meta {\n border-bottom: solid 1px var(--color-button-shadow) !important;\n box-shadow: 0 1px 0 0 var(--color-button-highlight) !important;\n }\n\n .UnderlineNav,\n .tabnav {\n margin: 0 !important;\n background: inherit !important;\n border: none !important;\n }\n .select-menu-tabs {\n font-size: 0;\n }\n .reponav {\n width: 1000px;\n }\n .reponav > span,\n .select-menu-tabs ul,\n .select-menu-tab {\n display: contents !important;\n }\n .UnderlineNav-item,\n .pagehead-tabs-item,\n .tabnav-tabs a,\n .tabnav-tabs span:not(.Counter),\n .reponav-item,\n .select-menu-tab a {\n font-size: var(--font-size);\n font-weight: normal !important;\n color: var(--color-button-text) !important;\n background: var(--color-button-face) !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n border-bottom: none !important;\n border-radius: 2px 2px 0 0 !important;\n box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-highlight)\n !important;\n margin: 0 1px -1px 0 !important;\n padding: 4px 6px !important;\n min-height: 26px;\n }\n .UnderlineNav-item.selected,\n .pagehead-tabs-item.selected,\n .tabnav-tabs a.selected,\n .tabnav-tabs span:not(.Counter).selected,\n .reponav-item.selected,\n .select-menu-tab a.selected {\n box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-face)\n !important;\n margin: -2px 1px 1px 0 !important;\n min-height: 28px;\n }\n .tabnav-tabs span:not(.Counter) {\n color: var(--color-gray-text) !important;\n }\n\n .Counter {\n background: inherit !important;\n font: inherit !important;\n color: inherit !important;\n padding: 0 !important;\n }\n .Counter::before {\n content: \"(\";\n }\n .Counter::after {\n content: \")\";\n }\n\n .auth-form-body,\n .select-menu-modal,\n .dropdown-menu {\n background: var(--color-button-face) !important;\n color: inherit !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--window-3d-box-shadow) !important;\n padding: 0 !important;\n }\n\n .dropdown-menu::before,\n .dropdown-menu::after {\n display: none !important;\n }\n .dropdown-item:hover {\n background: var(--color-highlight) !important;\n }\n .dropdown-divider {\n height: 0 !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color-inverted) !important;\n }\n\n .select-menu-header {\n background: var(--color-active-caption) !important;\n padding: 4px 6px !important;\n }\n .select-menu-title {\n color: var(--color-active-caption-text) !important;\n }\n .select-menu-filters {\n background: inherit !important;\n }\n .select-menu-item.navigation-focus {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .select-menu-item .text-gray {\n color: var(--color-gray-text) !important;\n }\n .select-menu-item.navigation-focus .text-gray {\n color: inherit !important;\n }\n\n .tooltipped::before {\n display: none !important;\n }\n .Popover-message,\n .tooltipped::after {\n font: inherit !important;\n color: var(--color-window-text) !important;\n background: var(--color-info-background) !important;\n border: solid 1px var(--color-button-shadow-dark) !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n .Popover-message::before,\n .Popover-message::after {\n display: none !important;\n }\n\n .btn-link,\n .btn,\n .btn:hover,\n .subnav-item,\n .pagination > :not(.gap),\n #user-links .dropdown,\n .js-menu-close {\n font: var(--font) !important;\n font-weight: normal !important;\n background: var(--color-button-face) !important;\n color: var(--color-button-text) !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color-exact) !important;\n border-radius: 0 !important;\n box-shadow: var(--button-3d-box-shadow-exact) !important;\n margin: 1px 2px !important;\n }\n .btn-link svg,\n .btn svg,\n .btn:hover svg,\n .subnav-item svg,\n #user-links .dropdown svg,\n .js-menu-close svg {\n fill: var(--color-window-text) !important;\n }\n .pagination .disabled {\n color: var(--color-gray-text) !important;\n }\n .pagination .current {\n font-weight: bold !important;\n }\n .pagination > .gap {\n background: inherit !important;\n border: none !important;\n color: inherit !important;\n }\n .btn-link .dropdown-caret,\n .btn .dropdown-caret,\n .btn:hover .dropdown-caret,\n .subnav-item .dropdown-caret,\n #user-links .dropdown .dropdown-caret {\n color: var(--color-window-text) !important;\n border-top-color: var(--color-window-text) !important;\n }\n .btn-link:active,\n .btn:active,\n .btn.selected,\n [open] > .btn,\n .subnav-item:active,\n .pagination > :not(.gap):not(.disabled):active,\n #user-links .dropdown:active,\n .js-menu-close:active {\n border-color: var(--color-button-shadow) !important;\n box-shadow:\n 0 0 0 1px var(--color-button-shadow-dark)\n !important;\n }\n .btn-link:focus,\n .btn:focus,\n .subnav-item:focus {\n outline: dotted 1px var(--color-button-text) !important;\n outline-offset: -4px !important;\n }\n\n input:not([type]),\n input[type=text],\n input[type=search],\n input[type=password],\n input[type=url],\n .tag-input,\n textarea {\n color: var(--color-window-text) !important;\n background: var(--color-window) !important;\n border: solid 1px black !important;\n border-color: var(--box-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--box-3d-box-shadow) !important;\n margin: 0 2px !important;\n padding-top: 4px !important;\n padding-bottom: 4px !important;\n min-height: 0 !important;\n }\n input::placeholder {\n color: var(--color-gray-text) !important;\n opacity: 1 !important;\n }\n\n .btn-link {\n padding: 4px 6px;\n text-decoration: none !important;\n }\n .milestone-action .btn-link {\n border: none !important;\n box-shadow: none !important;\n padding: 0 !important;\n }\n .js-menu-close {\n width: 16px !important;\n height: 14px !important;\n }\n\n #user-links .dropdown {\n height: 22px !important;\n margin: 0 0 0 8px !important;\n }\n #user-links .dropdown > * {\n height: 20px !important;\n line-height: 20px !important;\n margin: 0 2px !important;\n padding: 0 4px 0 0 !important;\n }\n #user-links .dropdown details summary {\n margin: 0 !important;\n }\n #user-links .mail-status.unread {\n position: static !important;\n display: inline !important;\n width: 0 !important;\n height: 0 !important;\n background: transparent !important;\n border: none !important;\n white-space: nowrap;\n }\n #user-links .notification-indicator .mail-status.unread::after {\n color: var(--color-button-text) !important;\n content: \"(unread)\";\n }\n\n .Box:not(.position-absolute):not(.Popover-message):not(.js-network-graph-container),\n #user-repositories-list li,\n .user-profile-nav + .position-relative > .d-block,\n .blankslate,\n .border,\n .timeline-comment,\n .commit-tease {\n font: inherit !important;\n color: inherit !important;\n line-height: 20px !important;\n background: var(--color-button-face) !important;\n border: solid 1px black !important;\n border-color: var(--group-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--group-3d-box-shadow) !important;\n position: relative !important;\n padding: 12px 8px 4px 8px;\n margin-top: 2px !important;\n }\n #user-repositories-list li > .d-inline-block,\n .user-profile-nav + .position-relative > .d-block > .d-inline-block,\n .js-notice > .border::before,\n .commit-tease::before {\n color: var(--color-button-text) !important;\n background: var(--color-button-face) !important;\n position: absolute;\n left: 6px;\n top: -11px;\n padding: 0 3px;\n }\n .js-notice > .border::before {\n content: \"Notice\";\n }\n .commit-tease::before {\n content: \"Last commit\";\n }\n\n .Box.Box.Box.Box.Box.Box.Box--danger {\n background: red !important;\n }\n .Box-row {\n border-top: solid 1px var(--color-button-highlight) !important;\n box-shadow: 0 -1px 0 0 var(--color-button-shadow) !important;\n }\n .Box-row:first-of-type {\n border: none !important;\n box-shadow: none !important;\n }\n .Box-header {\n background: inherit !important;\n border: none !important;\n padding: 0 8px !important;\n }\n .Box h3 {\n font: var(--font-header) !important;\n border: none !important;\n }\n\n .Subhead {\n border: none !important;\n font-size: var(--font-size-header) !important;\n margin: 0 0 6px 0 !important;\n }\n .Subhead h2,\n .Subhead-heading {\n font-size: var(--font-size-header) !important;\n font-weight: bold !important;\n }\n .Subhead--spacious {\n margin: 12px 0 0 0 !important;\n }\n\n .boxed-group > h3,\n .boxed-group .heading {\n background: none !important;\n }\n\n #user-repositories-list li,\n .user-profile-nav + .position-relative > .d-block {\n margin: 0 0 16px 0 !important;\n padding: 12px 8px 8px 8px !important;\n }\n #user-repositories-list li > .d-inline-block,\n .user-profile-nav + .position-relative > .d-block > .d-inline-block {\n display: flex !important;\n flex-flow: row !important;\n margin: 2px 0 0 0;\n }\n #user-repositories-list li > .d-inline-block > span::before {\n content: \" (\";\n }\n #user-repositories-list li > .d-inline-block > span::after {\n content: \")\";\n }\n #user-repositories-list li > .my-1,\n #user-repositories-list li > .mt-2,\n .user-profile-nav + .position-relative > .d-block > .mt-2 {\n margin: 0 !important;\n }\n #user-repositories-list h3,\n .user-profile-nav + .position-relative > .d-block h3 {\n font: bold var(--font) !important;\n }\n #user-repositories-list h3 + span {\n font: var(--font) !important;\n }\n #user-repositories-list h3 + span a {\n color: var(--color-link) !important;\n }\n #user-repositories-list h3 + span a:hover {\n text-decoration: underline !important;\n }\n #user-repositories-list .text-gray,\n .user-profile-nav + .position-relative > .d-block .text-gray {\n color: inherit !important;\n }\n .repo-language-color {\n width: 16px !important;\n height: 16px !important;\n border-radius: 0 !important;\n margin: 2px 4px -2px 0 !important;\n }\n\n .summary-stats {\n margin: -2px 0 4px 0 !important;\n }\n .summary-stats li {\n border: none !important;\n color: inherit !important;\n }\n .summary-stats li a {\n background: inherit !important;\n color: inherit !important;\n }\n .summary-stats li a:hover {\n color: var(--color-link) !important;\n text-decoration: underline !important;\n }\n .summary-stats li a .num {\n font: bold var(--font) !important;\n text-decoration-color: transparent !important;\n }\n .diffstat-summary {\n font: inherit !important;\n line-height: 166% !important;\n color: inherit !important;\n padding: 32px 48px 0 8px !important;\n }\n .pulse-section {\n font: inherit !important;\n color: inherit !important;\n }\n .pulse-section h3 {\n color: inherit !important;\n }\n .pulse-section h3 span {\n background: none !important;\n font: var(--font-header) !important;\n }\n .pulse-section h3 .text-emphasized {\n font-weight: bold !important;\n }\n .simple-conversation-list {\n font: inherit !important;\n color: inherit !important;\n }\n .simple-conversation-list > li {\n border: none !important;\n padding: 2px 0 !important;\n }\n .simple-conversation-list > li .num {\n color: var(--color-gray-text) !important;\n }\n .pulse-section .simple-conversation-list {\n padding: 4px 8px !important;\n }\n\n .Box.d-block svg {\n margin: 0 0 -8px -8px;\n }\n .tint-box,\n .capped-card-content {\n background: transparent !important;\n }\n svg .tick text {\n fill: var(--color-button-text) !important;\n }\n svg .tick line {\n stroke: var(--color-gray-text) !important;\n }\n\n .js-edit-repo-container dl {\n margin: 0 !important;\n }\n .boxed-group-inner,\n .access-form-wrapper {\n background: none !important;\n color: inherit !important;\n border: none !important;\n }\n .settings-next {\n font: inherit !important;\n }\n\n .auth-form-header {\n display: none !important;\n }\n .auth-form-body {\n position: relative !important;\n padding: 32px 8px 8px 8px !important;\n font: inherit !important;\n }\n .auth-form-body::before {\n display: block;\n position: absolute;\n height: 24px;\n left: 0;\n right: 0;\n margin: -32px 0 0 0;\n padding: 0 10px;\n background: var(--color-active-caption) !important;\n color: var(--color-active-caption-text) !important;\n font: bold var(--font-size)/24px var(--font-family);\n content: \"Confirm password to continue\";\n }\n .auth-form-body .btn {\n margin: 8px 2px 0 2px !important;\n }\n\n .octicon-file-directory, .octicon-file, .octicon-book, .octicon-history, .octicon-git-branch, .octicon-tag, .octicon-organization, .octicon-law, .octicon-code,\n .octicon-issue-opened, .octicon-git-pull-request, .octicon-project, .octicon-graph, .octicon-gear, .octicon-repo {\n fill: transparent !important;\n width: 16px !important;\n height: 16px !important;\n }\n .octicon-file-directory { background: var(--image-folder) !important; }\n .octicon-file { background: var(--image-file-text) !important; }\n .octicon-book { background: var(--image-help) !important; }\n .octicon-history { background: var(--image-files) !important; }\n .octicon-git-branch { background: var(--image-tree) !important; }\n .octicon-tag { background: var(--image-install) !important; }\n .octicon-organization { background: var(--image-users) !important; }\n .octicon-law { background: var(--image-lock) !important; }\n .octicon-code { background: var(--image-file-script) !important; }\n .octicon-issue-opened { background: var(--image-message-warning) !important; }\n .octicon-git-pull-request { background: var(--image-drive-network) !important; }\n .octicon-project { background: var(--image-hierarchy) !important; }\n .octicon-graph { background: var(--image-graph) !important; }\n .octicon-gear { background: var(--image-config) !important; }\n .octicon-repo { background: var(--image-folder-documents) !important; }", + "urls": [], + "urlPrefixes": [], + "domains": [ + "github.com" + ], + "regexps": [] + } + ], + "usercssData": { + "vars": {}, + "name": "GitHub Windows Edition [Ath]", + "namespace": "https://github.com/Athari", + "version": "0.6.0", + "description": "Transforms GitHub's pages into a GUI resembling Windows 9x.", + "author": "Athari", + "homepageURL": "https://github.com/Athari/CssGitHubWindows", + "license": "MIT" + }, + "name": "GitHub Windows Edition [Ath]", + "description": "Transforms GitHub's pages into a GUI resembling Windows 9x.", + "author": "Athari", + "originalDigest": "17f37e4697df092b2fb98fb37cbd0740e6769a53", + "id": 15, + "updateDate": 1534175986776, + "_id": "ed6368eb-01f6-4624-922a-6844a88b08ad", + "_rev": 1580730543289, + "etag": "W/\"f81c396b14660923c8b9cb817cfcf223a54e234054e2eb51b36f603a4817727e\"" + }, + { + "installDate": 1536263450643, + "enabled": true, + "updateUrl": "https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/usercss/146429.user.css", + "url": "https://33kk.github.io/uso-archive/?style=146429", + "sections": [ + { + "code": "/* ==UserStyle==\n@name MyAnimeList DeepDark\n@namespace github.com/RaitaroH/MyAnimeList-DeepDark\n@homepageURL https://github.com/RaitaroH/MyAnimeList-DeepDark\n@version 1.4.7\n@updateURL https://rawgit.com/RaitaroH/MyAnimeList-DeepDark/master/MyAnimeListDeepDark.user.css\n@description Satisfy thy craving for anime and organization. May the dark be kinder on thine eyes. (MyAnimeList Dark Theme)\n@author RaitaroH\n@license GNU-V3.0\n\n@preprocessor uso\n@var select mainColor 'Main color' {\n\t\"DeepDark\": \"#00adee\",\n\t\"BreezeDark\": \"#3DAEE9\",\n\t\"Vertex Dark\": \"#4080fb\",\n\t\"Arc Dark\": \"#5294E2\",\n\t\"Firefox Dark\": \"#5675B9\",\n\t\"Firefox57\": \"#4080FB\",\n\t\"Discord\": \"#7289DA\",\n\t\"YouTubeDark\": \"#E52117\",\n\t\"Mint-Y-Dark\": \"#9AB87C\",\n\t\"9anime\": \"#723f8c\",\n\t\"Black&White\": \"#ffffff\",\n\t\"Yellow_petrocompletions\": \"#FFC700\",\n\t\"Yellow2\": \"#FFC700\",\n\t\"Ubuntu_grey\": \"#EF7847\",\n\t\"Ubuntu_purple\": \"#EF7847\",\n\t\"Orange\": \"#ff6905\",\n\t\"Jisho_夜明け\": \"#EF7D6C\",\n\t\"Custom\": \"/*[[custom-main-color]]*\\/\"\n}\n@var color custom-main-color \"Custom main color\" #00adee\"\n\n@var select mainBackground 'Main background color' {\n\t\"DeepDark\": \"#111111\",\n\t\"BreezeDark\": \"#232629\",\n\t\"Vertex Dark\": \"#2B2B2C\",\n\t\"Arc Dark\": \"#343944\",\n\t\"Firefox Dark\": \"#272B35\",\n\t\"Firefox57\": \"#0C0C0D\",\n\t\"Discord\": \"#1E2124\",\n\t\"YouTubeDark\": \"#111111\",\n\t\"Mint-Y-Dark\": \"#2F2F2F\",\n\t\"9anime\": \"#0B0A0D\",\n\t\"Black&White\": \"#000000\",\n\t\"Yellow_petrocompletions\": \"#141414\",\n\t\"Yellow2\": \"#0a0800\",\n\t\"Ubuntu_grey\": \"#312D2A\",\n\t\"Ubuntu_purple\": \"#2C071A\",\n\t\"Orange\": \"#0a0400\",\n\t\"Jisho_夜明け\": \"#332222\",\n\t\"Custom\": \"/*[[custom-main-background]]*\\/\"\n}\n@var color custom-main-background \"Custom main background\" \"#111111\"\n\n@var select secondBackground 'Second background color' {\n\t\"DeepDark\": \"#181818\",\n\t\"BreezeDark\": \"#2a2e32\",\n\t\"Vertex Dark\": \"#353638\",\n\t\"Arc Dark\": \"#383C4A\",\n\t\"Firefox Dark\": \"#181D20\",\n\t\"Firefox57\": \"#252526\",\n\t\"Discord\": \"#2F3136\",\n\t\"YouTubeDark\": \"#232323\",\n\t\"Mint-Y-Dark\": \"#383838\",\n\t\"9anime\": \"#17151C\",\n\t\"Black&White\": \"#0a0a0a\",\n\t\"Yellow_petrocompletions\": \"#202222\",\n\t\"Yellow2\": \"#0c0a04\",\n\t\"Ubuntu_grey\": \"#3D3C38\",\n\t\"Ubuntu_purple\": \"#430B28\",\n\t\"Orange\": \"#0e0702\",\n\t\"Jisho_夜明け\": \"#2A1B1B\",\n\t\"Custom\": \"/*[[custom-second-background]]*\\/\"\n}\n@var color custom-second-background \"Custom second background\" \"#181818\"\n\n@var select hoverBackground 'Hover background color' {\n\t\"DeepDark\": \"#232323\",\n\t\"BreezeDark\": \"#31363b\",\n\t\"Vertex Dark\": \"#515254\",\n\t\"Arc Dark\": \"#414A59\",\n\t\"Firefox Dark\": \"#353A44\",\n\t\"Firefox57\": \"#323234\",\n\t\"Discord\": \"#484B51\",\n\t\"YouTubeDark\": \"#343434\",\n\t\"Mint-Y-Dark\": \"#404040\",\n\t\"9anime\": \"#1E1C25\",\n\t\"Black&White\": \"#0f0f0f\",\n\t\"Yellow_petrocompletions\": \"#353838\",\n\t\"Yellow2\": \"#0f0d05\",\n\t\"Ubuntu_grey\": \"#59564D\",\n\t\"Ubuntu_purple\": \"#520D30\",\n\t\"Orange\": \"#110903\",\n\t\"Jisho_夜明け\": \"#863B2F\",\n\t\"Custom\": \"/*[[custom-hover-background]]*\\/\"\n}\n@var color custom-hover-background \"Custom hover background\" \"#232323\"\n\n@var select mainText 'Main text color' {\n\t\"DeepDark\": \"#eff0f1\",\n\t\"BreezeDark\": \"#eff0f1\",\n\t\"Vertex Dark\": \"#F3F3F5\",\n\t\"Arc Dark\": \"#C1C8D1\",\n\t\"Firefox Dark\": \"#E3EEF9\",\n\t\"Firefox57\": \"#F9F9FA\",\n\t\"Discord\": \"#FFFFFF\",\n\t\"YouTubeDark\": \"#E1E1E1\",\n\t\"Mint-Y-Dark\": \"#FFFFFF\",\n\t\"9anime\": \"#B4B4B4\",\n\t\"Black&White\": \"#b4b4b4\",\n\t\"Yellow_petrocompletions\": \"#EFF0F1\",\n\t\"Yellow2\": \"#fffdf5\",\n\t\"Ubuntu_grey\": \"#F2F1EF\",\n\t\"Ubuntu_purple\": \"#F2F1EF\",\n\t\"Orange\": \"#fff9f5\",\n\t\"Jisho_夜明け\": \"#EFB26C\",\n\t\"Custom\": \"/*[[custom-main-text]]*\\/\"\n}\n@var color custom-main-text \"main-text\" \"#eff0f1\"\n\n@var select dimmerText 'Secondary text color' {\n\t\"DeepDark\": \"#CCCCCC\",\n\t\"BreezeDark\": \"#bdc3c7\",\n\t\"Vertex Dark\": \"#AEAFB0\",\n\t\"Arc Dark\": \"#B3BAC5\",\n\t\"Firefox Dark\": \"#606376\",\n\t\"Firefox57\": \"#D0D0D0\",\n\t\"Discord\": \"#ADA8AA\",\n\t\"YouTubeDark\": \"#7F7F7F\",\n\t\"Mint-Y-Dark\": \"#D5DADA\",\n\t\"9anime\": \"#747474\",\n\t\"Black&White\": \"#828282\",\n\t\"Yellow_petrocompletions\": \"#9F9999\",\n\t\"Yellow2\": \"#fff8e1\",\n\t\"Ubuntu_grey\": \"#E6E5E3\",\n\t\"Ubuntu_purple\": \"#E6E5E3\",\n\t\"Orange\": \"#ffede1\",\n\t\"Jisho_夜明け\": \"#986E3F\",\n\t\"Custom\": \"/*[[custom-dimmer-text]]*\\/\"\n}\n@var color custom-dimmer-text \"dimmer-text\" \"#CCCCCC\"\n\n@advanced dropdown progress \"Custom progress colors\" {\n normal \"No\" << div\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common p, .page-common .textReadability, .page-common span, .page-common td, .page-common .dark_text, .page-common .dark_text:hover, .page-common .dark_text:visited\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common #profileRows a:hover, .page-common .profileRows a:hover, .detail-characters-list .left-column table:nth-of-type(2n), .detail-characters-list .left-right table:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t/*Recent forum discussion*/\n\t.page-forum .forum_boardrow2, .page-forum .forum_boardrow1\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Text in polls*/\n\t.page-forum .forum_boardrow1\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\n\n\t/*Videos*/\n\t.video-block.episode-video .outside-region .outside-region-block\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/arrows.png\") !important;\n\t}\n\n\n\t/*Episodes*/\n\t.episode_list .episode-list-header td, .episode_list .episode-list-data:nth-of-type(2n+1) td, .episode_list .episode-list-header td:last-of-type\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.episode_list .episode-list-header, .episode_list .episode-list-data:nth-of-type(2n+1) td, .di-t, .contents-video-embed .episode-information\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.episode_list .episode-list-header .episode-number .btn-sort-outer\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-sort-triangle.png\") !important;\n\t}\n\t.episode_list .episode-list-data:nth-of-type(2n) td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .fn-grey2\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.user-status-block .btn-forum-episode, .contents-video-embed .btn-rect\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\topacity: .9;\n\t}\n\t.user-status-block .btn-forum-episode:hover, .contents-video-embed .btn-rect:hover\n\t{\n\t\topacity: 1;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.contents-video-embed .btn-video-anime-slide.hori, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.contents-video-embed .btn-video-anime-slide.hori:hover, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime.play .link, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime:hover .link\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.contents-video-embed .video-anime-slide-block.hori\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime .link .text\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\n\n\t/*Reviews*/\n\t.reviews-horiznav-nav-sort-block, .page-common .border_bottom, .js-scrollfix-bottom-rel > div\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .button_form\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .button_form:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Recommendations*/\n\t.page-common .bgColor1\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.btn-detail-recommendations-view-all\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.btn-detail-recommendations-view-all:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Stats*/\n\t.page-common div.updatesBar\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.table-recently-updated tr:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.table-recently-updated tr:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.statistics-info\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.statistics-info::after, .statistics-info::before\n\t{\n\t\tborder-top-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Characters & Voice Actors*/\n\t.page-common .bgColor2\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Forum*/\n\t.page-common .normal_header, .page-forum .forum-table-header, .page-common .quotetext, .page-common .codetext\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\ta.icon-team-title.manga_db_moderator,.icon-team-title.social_media_moderator, .icon-team-title.social_media_moderator:hover, a.icon-team-title.forum_moderator, a.icon-team-title.review_recommendation_moderator, .icon-team-title.database_administrator, .icon-team-title.news_moderator\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t}\n\t.page-forum .sig\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-forum .forum_boardrowspacer\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.page-forum .forum_category\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-forum .forum_locheader, #content > div, .page-common .fn-grey5\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-forum .btn-forum, .page-forum .btn-forum, .btn-rect-grey1, .page-common .forum-topic-sort\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: transparent !important;\n\t}\n\t.page-forum .btn-forum:hover, .page-forum .btn-forum:hover, .btn-rect-grey1:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\t/*Top anime page*/\n\t.top-ranking-table .table-header td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t/*Buttons*/\n\t.page-common .pagination .link-blue-box\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.notinmylist\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.completed, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.dropped, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantoread, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantowatch, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.reading, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.watching, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.on-hold\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.completed\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.dropped\n\t{\n\t\tbackground-color: var(--red) !important;\n\t\tborder-color: var(--red) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantoread, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantowatch\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t\tborder-color: var(--gray) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.reading, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.watching\n\t{\n\t\tbackground-color: var(--green) !important;\n\t\tborder-color: var(--green) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.on-hold\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t\tborder-color: var(--yellow) !important;\n\t}\n\n\t.top-ranking-table .icon-score-star\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-rank-stars.png\") !important;\n\t}\n\n\t.icon-top-ranking-page .prev:hover, .icon-top-ranking-page .next:hover, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.notinmylist:hover, .page-common .pagination .link-blue-box:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.icon-top-ranking-page .prev, .icon-top-ranking-page .next\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t/*Rows odd*/\n\t.top-ranking-table tr.ranking-list:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Rows even*/\n\t.top-ranking-table tr.ranking-list:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.top-ranking-table .title .information\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.top-ranking-table tr:last-of-type\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Seasonal anime*/\n\t.navi-seasonal\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a:hover, .navi-seasonal .horiznav_nav ul li a.horiznav_active, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type:hover, .navi-seasonal .horiznav_nav ul li a.on:hover, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type.on:hover, .page-common .inputButton:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\ttransition: none !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a.on, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type.on\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav-nav-seasonal, .navi-seasonal .horiznav_nav\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.page-common .inputtext\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .inputtext:active, .page-common .inputtext:focus, .page-common .inputtext:hover\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.season .btn-show-sort:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.season .btn-show-kids, .season .btn-show-r18\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.page-common .inputButton, .seasonal-anime-list .anime-header\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Episode*/\n\t.watch .video-menu-category .btn-category.on\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.watch .video-menu-category .btn-category:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\ttransition: none !important;\n\t}\n\t.watch .video-menu-category .btn-category\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.video-menu-category\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.watch .video-menu-category .btn-hide-blocked-video\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.video-block .video-list.episode a\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.video-block .video-list.episode a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Industry forums*/\n\t.forum .forum-header\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-board:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.forum .forum-board, .forum .content-container .container-left, .forum .forum-side-block .header, .forum .forum-side-block .forum-side-list .forum-post\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .fn-grey4\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common .fn-blue1\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t.forum .forum-search-side .forum-search-select\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-triangles.png\") !important;\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-search-side .forum-search-input-text, .forum .forum-search-side .forum-search-input-submit.notActive, .forum .forum-search-side .forum-search-input-submit\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-search-side .forum-search-input-text:hover, .forum .forum-search-side .forum-search-input-text:active, .forum .forum-search-side .forum-search-input-text:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Login page*/\n\t#dialog, #dialog td, .page-common .social-login-block, .page-common .login-inputtext\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .social-login-block::after\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .icon-social-login.icon-fb, .page-common .icon-social-login.icon-tw, .page-common .icon-social-login.icon-gp\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .login-inputtext:hover, .page-common .login-inputtext:active, .page-common .login-inputtext:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*User name*/\n\t.page-common .header-profile.link-bg\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\n\n\t/*SVGs*/\n\t.page-common .header-list-button .fa, .page-common .header-message-button .fa, .page-common .header-notification-button .fa, a.header-message-button, a.header-list-button, a.header-notification-button\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\topacity: 1 !important;\n\t}\n\t.page-common .header-list-button .fa:hover, .page-common .header-message-button .fa:hover, .page-common .header-notification-button .fa:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t/*Dropdown menu*/\n\t.page-common .header-profile .header-profile-dropdown ul li a, .page-common .header-profile .header-profile-dropdown, .page-common .header-list .header-list-dropdown ul li a, .page-common .header-list .header-list-dropdown\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .header-profile .header-profile-dropdown ul li a:hover, .page-common .header-list .header-list-dropdown ul li a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\ttransition: none !important;\n\t}\n\n\n\t/*Icon borders near username*/\n\t.page-common #header-menu > .border::before\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Notifications*/\n\n\t/*Dropdown*/\n\t.page-common .header-notification-dropdown .arrow_box, .page-common .header-notification-view-all a\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-dropdown-inner h3, .page-common .header-notification-item\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item:hover, .page-common .header-notification-view-all a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-button.new::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.page-common .header-notification-button.has-unread::after, .page-common .header-notification-button.has-unread::after\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item.new\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .header-notification-item.new:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item-header .is-read .fa-check-circle\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*Notification page*/\n\tbody.notification .notificaiton-category-nav a.active\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a.active:hover, body.notification .notificaiton-category-nav a:hover, body.notification .notification-item:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav li, body.notification .notification-item, body.notification .notification-header h3, .page-common #content.container--small-left .left-column\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a .counter\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a .counter.zero\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tbox-shadow: var(--shadow) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a, body.notification .notification-header.simple h3\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a:hover, body.notification .notification-header .right-menu .item:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\tbody.notification .notification-item-layout .is-read .fa-check-circle\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t/*Notification settings*/\n\t.notification_settings .notification-setting-content .settings-notification .setting.header td, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"]:checked + label\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.label, .notification_settings .notification-setting-content .settings-notification .setting td.button\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::before, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::after\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\n\n\t/*Messages*/\n\t.message-container, .total_messages\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read > .mym\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read:hover > .mym, .private-message-content .message.selected:first-of-type > .mym, .pmessage-checked-action .pmessage-checked-action-button, .private-message-content .message.selected > .mym, .pmessage-checkbox-block .mym-checkbox-pulldown-button.on\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read .mym_subject > a.subject-link .text\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.pmessage-checkbox-block, .pmessage-select > a\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.mym_checkboxes input[type=\"checkbox\"] + label\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-checkbox-set2.png\") !important;\n\t}\n\t.pmessage-select > a, .total_messages\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.message.read .mym_date\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common .textarea\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .textarea:hover, .page-common .textarea:active, .page-common .textarea:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.page-common .bgbdrContainer\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-message-button.has-unread::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\t/*My Panel*/\n\t.page-common table.forum-topics tr td:nth-child(2n+1)\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.page-common table.forum-topics tr td:nth-child(2n+1), .page-common table.forum-topics tr td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Image and code taken from https://userstyles.org/styles/120493/dark-night-myanimelist*/\n\timg[src*=\"ignorethread.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/ignorethread.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 12px;\n\t\theight: 12px;\n\t\tpadding-left: 12px;\n\t}\n\t/*Image and code taken from https://userstyles.org/styles/120493/dark-night-myanimelist*/\n\timg[src*=\"watch_y.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/watch_y.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tpadding-left: 15px;\n\t}\n\timg[src*=\"watch_n.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/watch_n.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tpadding-left: 15px;\n\t}\n\timg[src*=\"images/bad-off.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/bad-off.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\timg[src*=\"images/cancel-fsg.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/cancel-fsg.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\timg[src*=\"images/good-off.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/good-off.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\t.page-common .quote-inline-text\n\t{\n\t\tbackground-color: transparent !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.show_button, .hide_button, .button.expand_quote, select[name=\"uloc\"]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder: 1px solid var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.show_button:hover, .hide_button:hover, .button.expand_quote:hover, select[name=\"uloc\"]:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\t.page-common .badresult\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t.icon-about-recommendations\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.icon-about-recommendations::after\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Image borders*/\n\t.page-common div.picSurround img, .profile .user-favorites .favorites-list .list .image, .profile .user-comments .comment .image img, .page-common .header-profile-button, .profile .statistics-updates .image, .forum .forum-side-block .forum-side-list img.thumbs\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.ranking-digest .ranking-unit .image, .user-profile .user-friends .icon-friend, .page-common .header-profile-button\n\t{\n\t\tbox-shadow: 0 0 0 1px var(--hover-background),0 0 0 2px var(--hover-background) !important;\n\t}\n\n\n\t/*Profile page*/\n\t.user-profile .user-function .icon-user-function, .profile .statistics-updates .data .graph-content, .page-common .content-container .container-right h5, .page-common .pt8\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.user-profile .user-function .icon-user-function, .user-profile .user-status.border-top, .user-profile h4, .page-common .content-container .container-left, .page-common .content-container .container-right h5, .profile .statistics-updates .data .graph, .user-profile .user-compatability-graph .bar-outer\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.user-profile .user-function .icon-user-function:hover, .profile .statistics-updates .data .graph\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.user-profile .user-function .icon-user-function\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon_profile_sprite2.png\") !important;\n\t}\n\t.user-profile .user-status li, .user-profile .user-compatability-graph .bar-outer\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.user-profile h4, .page-common .content-container .container-right h5, .page-common .content-container .container-right .fw-b, .user-profile .user-compatability-graph .bar-outer .bar-outer-positive .bar-inner, div.user-profile-sns\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.user-profile .user-button .btn-profile-submit, .user-profile .user-button .btn-profile-submit:hover\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.js-truncate-outer .btn-truncate\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/arrows.png\") !important;\n\t}\n\t.js-truncate-outer, .profile .user-favorites, .profile .user-favorites .favorites-list .list\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t/*User image links*/\n\t.word-break > a[rel=\"nofollow\"]\n\t{\n\t\topacity: 1 !important;\n\t}\n\t.word-break > a[rel=\"nofollow\"]:hover\n\t{\n\t\tfilter: brightness(110%);\n\t}\n\t/*Comments*/\n\t.profile .user-comments .comment .text .comment-text\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.profile .user-comments .comment:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.profile .user-comments .comment:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .content-container .container-right a.fw-b\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.page-common .btn-form-submit\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.page-common .btn-form-submit:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .floatRightHeader\n\t{\n\t\tcolor: var(--hover-background) !important;\n\t}\n\t.page-common a.floatRightHeader\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*Also available at*/\n\t.user-profile .user-profile-sns .icon-profile-sns.icon-url::after\n\t{\n\t\tfilter: invert(100%) !important;\n\t}\n\t/*RSS*/\n\t.user-profile h4.icon-rss::after\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/rss.png\") !important;\n\t}\n\n\t/*Manga and anime history*/\n\t#content > div:nth-child(2)\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Clubs*/\n\t.club-search-form-search .select\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.club-search-form-search .inputtext, .page-common .word-break\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.club-list .table-data td .informantion\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.club-list .table-data td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.club-list .table-data:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.club-list .btn-club-join:hover\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.club-list .btn-club-join\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Account settings*/\n\t.page-common .login-form-header-text\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .icon-sns-connect\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.setting-row.locate-right, .setting-row.show-hidden\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.settings-cunstom-forum-title input:disabled, .sns-setting .table tr:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tul.ignored-user-list, .sns-setting .cell-border-vertical, .sns-setting .cell-border-vertical, .sns-setting .sns-setting-default, .sns-setting .cell-border-vertical, .sns-setting, .ownlist_style .style-setting .style-setting-form-button\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-sns-setting, .btn-sns-setting span, .sns-setting .setting-input-button, .ownlist_style .style-setting .setting-switch input[type=\"radio\"]:checked + label\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .style-setting .setting-switch input[type=\"radio\"] + label, .ownlist_style #new-style .info\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .new-theme-list .new-theme-unit.selected, #dialog > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > textarea:nth-child(8)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .new-theme-list .new-theme-unit\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\t.membership .about-membership .plan-header, .membership .about-membership .plan, .membership .about-membership .about-new-feature, .membership .about-membership .about-no-ads\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.membership .about-membership .plan .plan-monthly .button, .membership .about-membership .plan .plan-annually .button, .membership .about-membership .about-new-feature .new, .membership .about-membership .btn-subscription\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.membership .about-membership .about-extras .about-extras-content .header\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\t/*Favorites*/\n\t.page-common .normal_header\n\t{\n\t\tpadding-left: 5px !important;\n\t}\n\t.page-common .draggable_list li:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Anime & Manga News and Featured Articles*/\n\tbody.news .menu-category, body.news .content-left, body.news .news-side-block .header, body.news .featured-side-block .header, body.news .news-side-block .news-list .news, body.news .news-side-block .news-list .featured, body.news .news-side-block .featured-list .news, body.news .news-side-block .featured-list .featured, body.news .featured-side-block .news-list .news, body.news .featured-side-block .news-list .featured, body.news .featured-side-block .featured-list .news, body.news .featured-side-block .featured-list .featured, body.news .tag-side-block .header, body.news .columnist-side-block .header, body.news .news-content-block.news-tags h2.news-tags-header, body.news .news-content-block.news-tags .news-tags-table.news td, body.news .news-breadcrumbs, .featured-pickup .featured-pickup-unit .information .pv, .featured-pickup .featured-pickup-unit .information .tags, .featured-content-block-outer\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.news .menu-category .btn-category.selected\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\tbody.news .menu-category .btn-category\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.news .menu-category .btn-category:hover\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t#all > svg:nth-child(1) > circle:nth-child(1)\n\t{\n\t\tfill: var(--main-color) !important;\n\t}\n\tbody.news .news-container .content, body.news .news-container .information, .news-list .comment-list .quotetext\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\tbody.news .news-container .tags, .news-list .comment-list:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\tbody.news .news-container .tags .tag, .news-list .comment-list .quotetext\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\tbody.news .news-container .tags .tag, .news-list .comment-list:nth-of-type(2n), body.news .news-content-block .news-related-database tr td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Tags*/\n\tbody.news .menu-category .btn-edit-tags\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color1, .news-list .news-unit .information .tags .tag.tag-color1, body.news .tag-side-block .tag-cloud .tag.tag-color1, .featured-pickup .featured-pickup-unit .information .tags .tag.tag-color-feature-spoiler, body.news .news-side-block .news-list .text-color-spoiler, body.news .news-side-block .featured-list .text-color-spoiler, body.news .featured-side-block .news-list .text-color-spoiler, body.news .featured-side-block .featured-list .text-color-spoiler\n\t{\n\t\tbackground-color: var(--red) !important;\n\t\tborder-color: var(--red) !important;\n\t\tcolor: #fff !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color4, .news-list .news-unit .information .tags .tag.tag-color4, body.news .tag-side-block .tag-cloud .tag.tag-color4, .featured-pickup .featured-pickup-unit .information .tags .tag.tag-color-feature-advertorial\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color6, .news-list .news-unit .information .tags .tag.tag-color6, body.news .tag-side-block .tag-cloud .tag.tag-color6, body.news .tag-side-block .tag-cloud .tag, .news-list .comment-list .information .tags .tag, .news-list .news-unit .information .tags .tag\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t\tborder-color: var(--gray) !important;\n\t\tcolor: var(--main-background) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color2, .news-list .news-unit .information .tags .tag.tag-color2, body.news .tag-side-block .tag-cloud .tag.tag-color2\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t\tborder-color: var(--yellow) !important;\n\t\tcolor: #fff !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color3, .news-list .news-unit .information .tags .tag.tag-color3, body.news .tag-side-block .tag-cloud .tag.tag-color3\n\t{\n\t\tbackground-color: var(--green) !important;\n\t\tborder-color: var(--green) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color5, .news-list .news-unit .information .tags .tag.tag-color5, body.news .tag-side-block .tag-cloud .tag.tag-color5\n\t{\n\t\tbackground-color: var(--purple) !important;\n\t\tborder-color: var(--purple) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color1, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color2, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color3, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color4, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color5, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color6, .page-common .fn-black\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*Image border*/\n\tbody.news .columnist-side-block .columnist-list .columnists-unit-side .image\n\t{\n\t\t-webkit-box-shadow: var(--hover-background) 0 0 2px,var(--hover-background) 0 0 0 1px\n\t}\n\tbody.news .news-side-block .news-list img.thumbs, body.news .news-side-block .featured-list img.thumbs, body.news .featured-side-block .news-list img.thumbs, body.news .featured-side-block .featured-list img.thumbs, .news-list .comment-list .image-link, .news-list .news-unit .image-link, body.news .news-content-block.news-tags .news-tags-table.news tr:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.featured-pickup .featured-pickup-unit .image\n\t{\n\t\tbox-shadow: var(--hover-background) 0 0 2px,var(--hover-background) 0 0 0 1px;\n\t}\n\n\n\t/*People and Characters */\n\t.people-favorites-ranking-table tr.ranking-list:nth-of-type(2n+1) td, .people-favorites-ranking-table .table-header td, .characters-favorites-ranking-table tr.ranking-list:nth-of-type(2n+1) td, .characters-favorites-ranking-table .table-header td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--second-background) !important;\n\t}\n\t.people-favorites-ranking-table tr.ranking-list:nth-of-type(2n) td, .characters-favorites-ranking-table tr.ranking-list:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-choose-your-own\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-choose-your-own:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.people-search-form-search .inputtext, .characters-search-form-search .inputtext\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.people-favorites-ranking-table tr:last-of-type, .characters-favorites-ranking-table tr:last-of-type, .page-common .incrementalSearchResultList .list .image\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Help*/\n\t.about-content-box.l, .about-content-box.r\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.about-content.content-bg-grey, .page-advertising #ad_menu, .page-advertising section.ad_section:nth-of-type(2n) div.ad_section\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.pt16, .page-advertising .ad_form_content label.required, .page-advertising .ad_form_content label\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.btn-switch-lang\n\t{\n\t\tcolor: var(--hover-background) !important;\n\t}\n\t.page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell.on, .page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell:hover\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell, .page-advertising .ad_form_content .ad_select\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-advertising .ad-spec-sample-list\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .mauto, .btn-switch-lang, .membership .about-membership .about-extras\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.membership .membership-faq .question, .membership .membership-faq .answer, .membership .membership-faq .answer .answer-detail, .membership .membership-faq .faq-img\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.membership .membership-faq .question:hover, .membership .membership-faq .question.on\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/* Thanks to Dark/Night MyAnimeList for the following code */\n\t.page-common #headerSmall .banner-header-anime-straming {\n\t\tdisplay: none !important;\n\t}\n\t*[id*=div-gpt-ad] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Panel */\n\t.widget.right_top_ad.right, .widget.left_bottom_ad.left {\n\t\tdisplay: none !important;\n\t}\n\t.page-common.ad-skin #myanimelist .ad-skin-side-outer.bg-left, .page-common.ad-skin #myanimelist .ad-skin-side-outer.bg-right {\n\t\tdisplay: none !important;\n\t}\n\t/* > Browse Anime */\n\t.side-ad.side-ad--l, .side-ad.side-ad--r {\n\t\tdisplay: none !important;\n\t}\n\t/* > View Anime/Manga */\n\tdiv[style=\"padding: 20px 0 20px 40px; float: left; position: relative; z-index: 1;\"], div[style=\"padding: 20px 40px 20px 0; float: right; position: relative;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"padding: 20px 0 20px 40px; float: left;\"], div[style=\"padding: 20px 40px 20px 0; float: right;\"], div[style=\"padding: 20px 40px;display: inline-block;\"], div[style=\"padding: 20px 0px;display: inline-block;\"], div[class=\"mauto clearfix pt24\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[class=\"clearfix mauto mt16\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"padding:16px 0px 0px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.amazon-ads {\n\t\tdisplay: none !important;\n\t}\n\t.kskdDiv {\n\t\tdisplay: none !important;\n\t}\n\t/* > Add/Edit detailed info */\n\t.vrl-unit-container {\n\t\tdisplay: none !important;\n\t}\n\t/* > Reviews */\n\tdiv[style=\"width:728px; margin:0 auto\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"overflow: hidden; padding: 10px 0; border-bottom: solid #cdcdcd 1px\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[class=\"borderDark pt4 pb8 pl4 pr4 mb8\"] + div[class=\"border_bottom pt12 pb12 mb4\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Recommendations */\n\t.border_bottom[style=\"padding:8px 0px 8px 0px;margin:0px 0px 8px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Watch Videos */\n\t.clearfix[style=\"padding:16px 3px 20px 100px;width:880px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Watch Episode */\n\tdiv[style=\"padding:16px 0px 0px 0px;margin:14px 0px 0px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"float:left; padding:25px 25px 10px;\"], div[style=\"float:right; padding:25px 25px 10px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Forums */\n\t._unit[style=\"width:300px; height:250px; display: block !important;\"] {\n\t\theight: 0px !important;\n\t}\n\ttable[style=\"width:100%;height:100%;text-align:center;border-collapse:collapse;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix.pt24[style=\"width:720px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t#pc_forum_top_middle_rec_l {\n\t\tdisplay: none !important;\n\t}\n\t#pc_forum_top_middle_rec_r {\n\t\tdisplay: none !important;\n\t}\n\t.forum_boardrowspacer + .di-t {\n\t\tdisplay: none !important;\n\t}\n\t/* > Profile */\n\t.clearfix[style=\"padding:16px 3px 20px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Users */\n\t.clearfix[style=\"padding:16px 3px 20px 10px;width:100%;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > News */\n\ttable[style=\"width:160px;height:100%;text-align:center;border-collapse:collapse;margin:auto;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix[style=\"padding:16px 24px 20px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix[style=\"padding:16px 8px 20px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t#pc_news_top_1st_rec, #pc_news_top_2nd_rec {\n\t\tdisplay: none !important;\n\t}\n\t.js-scrollfix-bottom div[style=\"margin-top: 8px; text-align: center;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"margin-top: 24px;\"] > div[style=\"width: 300px; display: block !important; height: 600px;\"]\n\t{\n\t\tdisplay: none !important;\n\t}\n\t/* Social buttons hidden */\n\t.page-common .icon-block .icon-social {\n\t\tdisplay: none !important;\n\t}\n\t*[class*=PIN] {\n\t\tdisplay: none !important;\n\t}\n\tbody.news .news-container .news-info-block .sns-unit .sprite-icon-social.rect.icon-social {\n\t\tdisplay: none !important;\n\t}\n\t.page-common .sprite-icon-social.rect.wide.icon-social {\n\t\tdisplay: none !important;\n\t}\n\tbody.news .news-container .news-info-block {\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.js-sns-icon-container.icon-block-small {\n\t\tdisplay: none !important;\n\t}\n\t.fb-page, .page-common iframe[src*=\"facebook\"]\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.left-column > article:nth-child(5) > .clearfix[style=\"margin: 0 0 20px;\"], .widget.right_middle_ad.right\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.js-scrollfix-bottom ._unit, .js-scrollfix-bottom ._unit table {\n\t\tdisplay: none !important;\n\t\theight: 0 !important;\n\t}\n\n\n\t/*Search all*/\n\t#pc_search_1st_rec\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.search_all .result-header, .search_all .btn-search-more, .search_all .link-content-jump .link.on, .search_all .link-content-jump .link:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.search_all .content-result .list:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.search_all .content-result .list:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.search_all .content-result .list, .search_all .content-result .content-left\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Editing anime entires*/\n\t#fancybox-outer\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t#fancybox-close\n\t{\n\t\tbackground: url(https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/close_sprite.png) no-repeat !important;\n\t\theight: 24px !important;\n\t\twidth: 24px !important;\n\t\tposition: absolute !important;\n\t\tright: -15px !important;\n\t\ttop: -16px !important;\n\t}\n\t#fancybox-close:hover\n\t{\n\t\tbackground-position-y: -24px !important;\n\t\ttransition: none !important;\n\t}\n\n\t/*Modern list settings*/\n\t.ownlist_style_theme .customize-content-left .theme-custom-content, .ownlist_style_theme .customize-content-left .theme-custom-content, .ownlist_style_theme .customize-content-left h3.theme-custom-header, .ace_editor.ace_autocomplete, .ace_editor.ace_autocomplete .ace_line-hover\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left h2.theme-custom-header, .ace_editor.ace_autocomplete\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line, .ace_editor.ace_autocomplete .ace_line-hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left h3.theme-custom-header, .ownlist_style_theme .customize-content-left .header, .ownlist_style_theme .customize-content-left .header .header-text, .ace_editor.ace_autocomplete, .ace_gutter-cell\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left .header\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\n\n\t/*Friends*/\n\t.majorPad .bgLightBlue, .majorPad .friendHolder\n\t{\n\t\tbackground: var(--second-background) !important;\n\t}\n\t.page-common .profile_leftcell\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Hover details for anime*/\n\t.page-common .hoverinfo\n\t{\n\t\tbackground: var(--main-background) !important;\n\t}\n\t.page-common .hoverinfo::after\n\t{\n\t\tbackground: none !important;\n\t}\n\n\n\t/*Shared anime list*/\n\t.borderClass[style=\"background-color: #f6f6f6;\"]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Set to completed warning*/\n\t#fancybox-inner\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Missing content*/\n\t.borderDark.pt8.pb8.pl4.pr4.mb8\n\t{\n\t\tdisplay: block !important;\n\t}\n\n\t\t/*Manga store*/\n\t.manga-store *, .manga-store .section-title, .detail-preview-container.hasPreview[data-v-8dc9b7cc]::after,\n\t.manga-store-preview\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.manga-store .comics-list-tab-area::before\n\t{\n\t\tbackground: var(--hover-background) !important;\n\t}\n\ta.manga-store-genre-list-toggle, a[data-v-2617fe40], .manga-store .btn-link-detail,\n\t.manga-store .detail-card .detail-infoList-item .tag,\n\t.manga-store .comics-list-tab-item.is-active,\n\t.manga-store-preview-info a.manga-store-preview-button\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.manga-store .comics-list-tab-item.is-active\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*checkout*/\n\ta[data-v-135eaa16]\n\t{\n\t\tbackground: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\ta[data-v-135eaa16]:hover\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*Manga preview*/\n\t.header[data-v-65e5eae6], .footer[data-v-65e5eae6]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.button-buy[data-v-65e5eae6]\n\t{\n\t\tbackground: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*titles*/\n\t.title[data-v-8a87ff5a]\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\t/*Info warning*/\n\t.initialize-tutorial\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t.page-common.announcement .announce-sitemap, .page-common.announcement .announce-header\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Sitemap*/\n\t.sitemap__category, .sitemap__category__title\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}", + "start": 11737, + "domains": [ + "myanimelist.net" + ] + } + ], + "name": "MyAnimeList DeepDark", + "originalDigest": "e7e65baa7e320355cb131c6e5b5c39f4dcbdbe2c", + "id": 17, + "_id": "36f89a04-99de-4992-ace3-140bc923af07", + "_rev": 1615723396764, + "etag": "W/\"1c685b28d6a12d620f3aa459a2e2d4176437a3ee9314c0e8293dfb2e7d74a4fb\"", + "sourceCode": "/* ==UserStyle==\n@name MyAnimeList DeepDark\n@namespace USO Archive\n@author RaitaroH\n@description `

Satisfy thy craving for anime and organization. May the dark be kinder on thine eyes. (MyAnimeList Dark Theme)

This is a dark theme for MyAnimeList inspired by FT DeepDark.

Credit for some images and code (ads removal) to dark-night-myanimelist.

Also, credit where credit is due for the color palettes. (@KDE, @horst3180, @linuxmint, Firefox, YouTube and Discord)

Official GitHub page, with screenshots, available here.

`\n@version 20180902.18.41\n@license NO-REDISTRIBUTION\n@preprocessor uso\n@advanced color mainColor \"Main highlight color\" #00ADEE\n@advanced color mainBackground \"Main background color\" #111111\n@advanced color secondBackground \"Second background color\" #181818\n@advanced color hoverBackground \"Hover background color\" #232323\n@advanced color mainText \"Main text color\" #EFF0F1\n@advanced color dimmerText \"Dimmer text color\" #CCCCCC\n@advanced dropdown progress \"Progress custom colors\" {\n\tnormal \"No*\" << div\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common p, .page-common .textReadability, .page-common span, .page-common td, .page-common .dark_text, .page-common .dark_text:hover, .page-common .dark_text:visited\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common #profileRows a:hover, .page-common .profileRows a:hover, .detail-characters-list .left-column table:nth-of-type(2n), .detail-characters-list .left-right table:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t/*Recent forum discussion*/\n\t.page-forum .forum_boardrow2, .page-forum .forum_boardrow1\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Text in polls*/\n\t.page-forum .forum_boardrow1\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\n\n\t/*Videos*/\n\t.video-block.episode-video .outside-region .outside-region-block\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/arrows.png\") !important;\n\t}\n\n\n\t/*Episodes*/\n\t.episode_list .episode-list-header td, .episode_list .episode-list-data:nth-of-type(2n+1) td, .episode_list .episode-list-header td:last-of-type\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.episode_list .episode-list-header, .episode_list .episode-list-data:nth-of-type(2n+1) td, .di-t, .contents-video-embed .episode-information\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.episode_list .episode-list-header .episode-number .btn-sort-outer\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-sort-triangle.png\") !important;\n\t}\n\t.episode_list .episode-list-data:nth-of-type(2n) td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .fn-grey2\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.user-status-block .btn-forum-episode, .contents-video-embed .btn-rect\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\topacity: .9;\n\t}\n\t.user-status-block .btn-forum-episode:hover, .contents-video-embed .btn-rect:hover\n\t{\n\t\topacity: 1;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.contents-video-embed .btn-video-anime-slide.hori, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.contents-video-embed .btn-video-anime-slide.hori:hover, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime.play .link, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime:hover .link\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.contents-video-embed .video-anime-slide-block.hori\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime .link .text\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\n\n\t/*Reviews*/\n\t.reviews-horiznav-nav-sort-block, .page-common .border_bottom, .js-scrollfix-bottom-rel > div\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .button_form\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .button_form:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Recommendations*/\n\t.page-common .bgColor1\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.btn-detail-recommendations-view-all\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.btn-detail-recommendations-view-all:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Stats*/\n\t.page-common div.updatesBar\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.table-recently-updated tr:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.table-recently-updated tr:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.statistics-info\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.statistics-info::after, .statistics-info::before\n\t{\n\t\tborder-top-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Characters & Voice Actors*/\n\t.page-common .bgColor2\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Forum*/\n\t.page-common .normal_header, .page-forum .forum-table-header, .page-common .quotetext, .page-common .codetext\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\ta.icon-team-title.manga_db_moderator,.icon-team-title.social_media_moderator, .icon-team-title.social_media_moderator:hover, a.icon-team-title.forum_moderator, a.icon-team-title.review_recommendation_moderator, .icon-team-title.database_administrator, .icon-team-title.news_moderator\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t}\n\t.page-forum .sig\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-forum .forum_boardrowspacer\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.page-forum .forum_category\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-forum .forum_locheader, #content > div, .page-common .fn-grey5\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-forum .btn-forum, .page-forum .btn-forum, .btn-rect-grey1, .page-common .forum-topic-sort\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: transparent !important;\n\t}\n\t.page-forum .btn-forum:hover, .page-forum .btn-forum:hover, .btn-rect-grey1:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\t/*Top anime page*/\n\t.top-ranking-table .table-header td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t/*Buttons*/\n\t.page-common .pagination .link-blue-box\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.notinmylist\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.completed, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.dropped, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantoread, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantowatch, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.reading, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.watching, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.on-hold\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.completed\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.dropped\n\t{\n\t\tbackground-color: var(--red) !important;\n\t\tborder-color: var(--red) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantoread, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantowatch\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t\tborder-color: var(--gray) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.reading, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.watching\n\t{\n\t\tbackground-color: var(--green) !important;\n\t\tborder-color: var(--green) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.on-hold\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t\tborder-color: var(--yellow) !important;\n\t}\n\n\t.top-ranking-table .icon-score-star\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-rank-stars.png\") !important;\n\t}\n\n\t.icon-top-ranking-page .prev:hover, .icon-top-ranking-page .next:hover, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.notinmylist:hover, .page-common .pagination .link-blue-box:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.icon-top-ranking-page .prev, .icon-top-ranking-page .next\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t/*Rows odd*/\n\t.top-ranking-table tr.ranking-list:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Rows even*/\n\t.top-ranking-table tr.ranking-list:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.top-ranking-table .title .information\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.top-ranking-table tr:last-of-type\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Seasonal anime*/\n\t.navi-seasonal\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a:hover, .navi-seasonal .horiznav_nav ul li a.horiznav_active, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type:hover, .navi-seasonal .horiznav_nav ul li a.on:hover, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type.on:hover, .page-common .inputButton:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\ttransition: none !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a.on, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type.on\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav-nav-seasonal, .navi-seasonal .horiznav_nav\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.page-common .inputtext\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .inputtext:active, .page-common .inputtext:focus, .page-common .inputtext:hover\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.season .btn-show-sort:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.season .btn-show-kids, .season .btn-show-r18\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.page-common .inputButton, .seasonal-anime-list .anime-header\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Episode*/\n\t.watch .video-menu-category .btn-category.on\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.watch .video-menu-category .btn-category:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\ttransition: none !important;\n\t}\n\t.watch .video-menu-category .btn-category\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.video-menu-category\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.watch .video-menu-category .btn-hide-blocked-video\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.video-block .video-list.episode a\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.video-block .video-list.episode a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Industry forums*/\n\t.forum .forum-header\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-board:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.forum .forum-board, .forum .content-container .container-left, .forum .forum-side-block .header, .forum .forum-side-block .forum-side-list .forum-post\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .fn-grey4\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common .fn-blue1\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t.forum .forum-search-side .forum-search-select\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-triangles.png\") !important;\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-search-side .forum-search-input-text, .forum .forum-search-side .forum-search-input-submit.notActive, .forum .forum-search-side .forum-search-input-submit\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-search-side .forum-search-input-text:hover, .forum .forum-search-side .forum-search-input-text:active, .forum .forum-search-side .forum-search-input-text:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Login page*/\n\t#dialog, #dialog td, .page-common .social-login-block, .page-common .login-inputtext\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .social-login-block::after\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .icon-social-login.icon-fb, .page-common .icon-social-login.icon-tw, .page-common .icon-social-login.icon-gp\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .login-inputtext:hover, .page-common .login-inputtext:active, .page-common .login-inputtext:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*User name*/\n\t.page-common .header-profile.link-bg\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\n\n\t/*SVGs*/\n\t.page-common .header-list-button .fa, .page-common .header-message-button .fa, .page-common .header-notification-button .fa, a.header-message-button, a.header-list-button, a.header-notification-button\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\topacity: 1 !important;\n\t}\n\t.page-common .header-list-button .fa:hover, .page-common .header-message-button .fa:hover, .page-common .header-notification-button .fa:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t/*Dropdown menu*/\n\t.page-common .header-profile .header-profile-dropdown ul li a, .page-common .header-profile .header-profile-dropdown, .page-common .header-list .header-list-dropdown ul li a, .page-common .header-list .header-list-dropdown\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .header-profile .header-profile-dropdown ul li a:hover, .page-common .header-list .header-list-dropdown ul li a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\ttransition: none !important;\n\t}\n\n\n\t/*Icon borders near username*/\n\t.page-common #header-menu > .border::before\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Notifications*/\n\n\t/*Dropdown*/\n\t.page-common .header-notification-dropdown .arrow_box, .page-common .header-notification-view-all a\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-dropdown-inner h3, .page-common .header-notification-item\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item:hover, .page-common .header-notification-view-all a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-button.new::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.page-common .header-notification-button.has-unread::after, .page-common .header-notification-button.has-unread::after\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item.new\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .header-notification-item.new:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item-header .is-read .fa-check-circle\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*Notification page*/\n\tbody.notification .notificaiton-category-nav a.active\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a.active:hover, body.notification .notificaiton-category-nav a:hover, body.notification .notification-item:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav li, body.notification .notification-item, body.notification .notification-header h3, .page-common #content.container--small-left .left-column\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a .counter\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a .counter.zero\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tbox-shadow: var(--shadow) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a, body.notification .notification-header.simple h3\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a:hover, body.notification .notification-header .right-menu .item:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\tbody.notification .notification-item-layout .is-read .fa-check-circle\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t/*Notification settings*/\n\t.notification_settings .notification-setting-content .settings-notification .setting.header td, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"]:checked + label\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.label, .notification_settings .notification-setting-content .settings-notification .setting td.button\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::before, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::after\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\n\n\t/*Messages*/\n\t.message-container, .total_messages\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read > .mym\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read:hover > .mym, .private-message-content .message.selected:first-of-type > .mym, .pmessage-checked-action .pmessage-checked-action-button, .private-message-content .message.selected > .mym, .pmessage-checkbox-block .mym-checkbox-pulldown-button.on\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read .mym_subject > a.subject-link .text\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.pmessage-checkbox-block, .pmessage-select > a\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.mym_checkboxes input[type=\"checkbox\"] + label\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-checkbox-set2.png\") !important;\n\t}\n\t.pmessage-select > a, .total_messages\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.message.read .mym_date\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common .textarea\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .textarea:hover, .page-common .textarea:active, .page-common .textarea:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.page-common .bgbdrContainer\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-message-button.has-unread::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\t/*My Panel*/\n\t.page-common table.forum-topics tr td:nth-child(2n+1)\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.page-common table.forum-topics tr td:nth-child(2n+1), .page-common table.forum-topics tr td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Image and code taken from https://userstyles.org/styles/120493/dark-night-myanimelist*/\n\timg[src*=\"ignorethread.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/ignorethread.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 12px;\n\t\theight: 12px;\n\t\tpadding-left: 12px;\n\t}\n\t/*Image and code taken from https://userstyles.org/styles/120493/dark-night-myanimelist*/\n\timg[src*=\"watch_y.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/watch_y.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tpadding-left: 15px;\n\t}\n\timg[src*=\"watch_n.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/watch_n.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tpadding-left: 15px;\n\t}\n\timg[src*=\"images/bad-off.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/bad-off.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\timg[src*=\"images/cancel-fsg.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/cancel-fsg.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\timg[src*=\"images/good-off.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/good-off.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\t.page-common .quote-inline-text\n\t{\n\t\tbackground-color: transparent !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.show_button, .hide_button, .button.expand_quote, select[name=\"uloc\"]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder: 1px solid var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.show_button:hover, .hide_button:hover, .button.expand_quote:hover, select[name=\"uloc\"]:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\t.page-common .badresult\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t.icon-about-recommendations\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.icon-about-recommendations::after\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Image borders*/\n\t.page-common div.picSurround img, .profile .user-favorites .favorites-list .list .image, .profile .user-comments .comment .image img, .page-common .header-profile-button, .profile .statistics-updates .image, .forum .forum-side-block .forum-side-list img.thumbs\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.ranking-digest .ranking-unit .image, .user-profile .user-friends .icon-friend, .page-common .header-profile-button\n\t{\n\t\tbox-shadow: 0 0 0 1px var(--hover-background),0 0 0 2px var(--hover-background) !important;\n\t}\n\n\n\t/*Profile page*/\n\t.user-profile .user-function .icon-user-function, .profile .statistics-updates .data .graph-content, .page-common .content-container .container-right h5, .page-common .pt8\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.user-profile .user-function .icon-user-function, .user-profile .user-status.border-top, .user-profile h4, .page-common .content-container .container-left, .page-common .content-container .container-right h5, .profile .statistics-updates .data .graph, .user-profile .user-compatability-graph .bar-outer\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.user-profile .user-function .icon-user-function:hover, .profile .statistics-updates .data .graph\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.user-profile .user-function .icon-user-function\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon_profile_sprite2.png\") !important;\n\t}\n\t.user-profile .user-status li, .user-profile .user-compatability-graph .bar-outer\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.user-profile h4, .page-common .content-container .container-right h5, .page-common .content-container .container-right .fw-b, .user-profile .user-compatability-graph .bar-outer .bar-outer-positive .bar-inner, div.user-profile-sns\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.user-profile .user-button .btn-profile-submit, .user-profile .user-button .btn-profile-submit:hover\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.js-truncate-outer .btn-truncate\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/arrows.png\") !important;\n\t}\n\t.js-truncate-outer, .profile .user-favorites, .profile .user-favorites .favorites-list .list\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t/*User image links*/\n\t.word-break > a[rel=\"nofollow\"]\n\t{\n\t\topacity: 1 !important;\n\t}\n\t.word-break > a[rel=\"nofollow\"]:hover\n\t{\n\t\tfilter: brightness(110%);\n\t}\n\t/*Comments*/\n\t.profile .user-comments .comment .text .comment-text\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.profile .user-comments .comment:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.profile .user-comments .comment:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .content-container .container-right a.fw-b\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.page-common .btn-form-submit\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.page-common .btn-form-submit:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .floatRightHeader\n\t{\n\t\tcolor: var(--hover-background) !important;\n\t}\n\t.page-common a.floatRightHeader\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*Also available at*/\n\t.user-profile .user-profile-sns .icon-profile-sns.icon-url::after\n\t{\n\t\tfilter: invert(100%) !important;\n\t}\n\t/*RSS*/\n\t.user-profile h4.icon-rss::after\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/rss.png\") !important;\n\t}\n\n\t/*Manga and anime history*/\n\t#content > div:nth-child(2)\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Clubs*/\n\t.club-search-form-search .select\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.club-search-form-search .inputtext, .page-common .word-break\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.club-list .table-data td .informantion\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.club-list .table-data td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.club-list .table-data:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.club-list .btn-club-join:hover\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.club-list .btn-club-join\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Account settings*/\n\t.page-common .login-form-header-text\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .icon-sns-connect\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.setting-row.locate-right, .setting-row.show-hidden\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.settings-cunstom-forum-title input:disabled, .sns-setting .table tr:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tul.ignored-user-list, .sns-setting .cell-border-vertical, .sns-setting .cell-border-vertical, .sns-setting .sns-setting-default, .sns-setting .cell-border-vertical, .sns-setting, .ownlist_style .style-setting .style-setting-form-button\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-sns-setting, .btn-sns-setting span, .sns-setting .setting-input-button, .ownlist_style .style-setting .setting-switch input[type=\"radio\"]:checked + label\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .style-setting .setting-switch input[type=\"radio\"] + label, .ownlist_style #new-style .info\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .new-theme-list .new-theme-unit.selected, #dialog > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > textarea:nth-child(8)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .new-theme-list .new-theme-unit\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\t.membership .about-membership .plan-header, .membership .about-membership .plan, .membership .about-membership .about-new-feature, .membership .about-membership .about-no-ads\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.membership .about-membership .plan .plan-monthly .button, .membership .about-membership .plan .plan-annually .button, .membership .about-membership .about-new-feature .new, .membership .about-membership .btn-subscription\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.membership .about-membership .about-extras .about-extras-content .header\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\t/*Favorites*/\n\t.page-common .normal_header\n\t{\n\t\tpadding-left: 5px !important;\n\t}\n\t.page-common .draggable_list li:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Anime & Manga News and Featured Articles*/\n\tbody.news .menu-category, body.news .content-left, body.news .news-side-block .header, body.news .featured-side-block .header, body.news .news-side-block .news-list .news, body.news .news-side-block .news-list .featured, body.news .news-side-block .featured-list .news, body.news .news-side-block .featured-list .featured, body.news .featured-side-block .news-list .news, body.news .featured-side-block .news-list .featured, body.news .featured-side-block .featured-list .news, body.news .featured-side-block .featured-list .featured, body.news .tag-side-block .header, body.news .columnist-side-block .header, body.news .news-content-block.news-tags h2.news-tags-header, body.news .news-content-block.news-tags .news-tags-table.news td, body.news .news-breadcrumbs, .featured-pickup .featured-pickup-unit .information .pv, .featured-pickup .featured-pickup-unit .information .tags, .featured-content-block-outer\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.news .menu-category .btn-category.selected\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\tbody.news .menu-category .btn-category\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.news .menu-category .btn-category:hover\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t#all > svg:nth-child(1) > circle:nth-child(1)\n\t{\n\t\tfill: var(--main-color) !important;\n\t}\n\tbody.news .news-container .content, body.news .news-container .information, .news-list .comment-list .quotetext\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\tbody.news .news-container .tags, .news-list .comment-list:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\tbody.news .news-container .tags .tag, .news-list .comment-list .quotetext\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\tbody.news .news-container .tags .tag, .news-list .comment-list:nth-of-type(2n), body.news .news-content-block .news-related-database tr td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Tags*/\n\tbody.news .menu-category .btn-edit-tags\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color1, .news-list .news-unit .information .tags .tag.tag-color1, body.news .tag-side-block .tag-cloud .tag.tag-color1, .featured-pickup .featured-pickup-unit .information .tags .tag.tag-color-feature-spoiler, body.news .news-side-block .news-list .text-color-spoiler, body.news .news-side-block .featured-list .text-color-spoiler, body.news .featured-side-block .news-list .text-color-spoiler, body.news .featured-side-block .featured-list .text-color-spoiler\n\t{\n\t\tbackground-color: var(--red) !important;\n\t\tborder-color: var(--red) !important;\n\t\tcolor: #fff !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color4, .news-list .news-unit .information .tags .tag.tag-color4, body.news .tag-side-block .tag-cloud .tag.tag-color4, .featured-pickup .featured-pickup-unit .information .tags .tag.tag-color-feature-advertorial\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color6, .news-list .news-unit .information .tags .tag.tag-color6, body.news .tag-side-block .tag-cloud .tag.tag-color6, body.news .tag-side-block .tag-cloud .tag, .news-list .comment-list .information .tags .tag, .news-list .news-unit .information .tags .tag\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t\tborder-color: var(--gray) !important;\n\t\tcolor: var(--main-background) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color2, .news-list .news-unit .information .tags .tag.tag-color2, body.news .tag-side-block .tag-cloud .tag.tag-color2\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t\tborder-color: var(--yellow) !important;\n\t\tcolor: #fff !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color3, .news-list .news-unit .information .tags .tag.tag-color3, body.news .tag-side-block .tag-cloud .tag.tag-color3\n\t{\n\t\tbackground-color: var(--green) !important;\n\t\tborder-color: var(--green) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color5, .news-list .news-unit .information .tags .tag.tag-color5, body.news .tag-side-block .tag-cloud .tag.tag-color5\n\t{\n\t\tbackground-color: var(--purple) !important;\n\t\tborder-color: var(--purple) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color1, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color2, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color3, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color4, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color5, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color6, .page-common .fn-black\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*Image border*/\n\tbody.news .columnist-side-block .columnist-list .columnists-unit-side .image\n\t{\n\t\t-webkit-box-shadow: var(--hover-background) 0 0 2px,var(--hover-background) 0 0 0 1px\n\t}\n\tbody.news .news-side-block .news-list img.thumbs, body.news .news-side-block .featured-list img.thumbs, body.news .featured-side-block .news-list img.thumbs, body.news .featured-side-block .featured-list img.thumbs, .news-list .comment-list .image-link, .news-list .news-unit .image-link, body.news .news-content-block.news-tags .news-tags-table.news tr:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.featured-pickup .featured-pickup-unit .image\n\t{\n\t\tbox-shadow: var(--hover-background) 0 0 2px,var(--hover-background) 0 0 0 1px;\n\t}\n\n\n\t/*People and Characters */\n\t.people-favorites-ranking-table tr.ranking-list:nth-of-type(2n+1) td, .people-favorites-ranking-table .table-header td, .characters-favorites-ranking-table tr.ranking-list:nth-of-type(2n+1) td, .characters-favorites-ranking-table .table-header td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--second-background) !important;\n\t}\n\t.people-favorites-ranking-table tr.ranking-list:nth-of-type(2n) td, .characters-favorites-ranking-table tr.ranking-list:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-choose-your-own\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-choose-your-own:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.people-search-form-search .inputtext, .characters-search-form-search .inputtext\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.people-favorites-ranking-table tr:last-of-type, .characters-favorites-ranking-table tr:last-of-type, .page-common .incrementalSearchResultList .list .image\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Help*/\n\t.about-content-box.l, .about-content-box.r\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.about-content.content-bg-grey, .page-advertising #ad_menu, .page-advertising section.ad_section:nth-of-type(2n) div.ad_section\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.pt16, .page-advertising .ad_form_content label.required, .page-advertising .ad_form_content label\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.btn-switch-lang\n\t{\n\t\tcolor: var(--hover-background) !important;\n\t}\n\t.page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell.on, .page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell:hover\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell, .page-advertising .ad_form_content .ad_select\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-advertising .ad-spec-sample-list\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .mauto, .btn-switch-lang, .membership .about-membership .about-extras\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.membership .membership-faq .question, .membership .membership-faq .answer, .membership .membership-faq .answer .answer-detail, .membership .membership-faq .faq-img\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.membership .membership-faq .question:hover, .membership .membership-faq .question.on\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/* Thanks to Dark/Night MyAnimeList for the following code */\n\t.page-common #headerSmall .banner-header-anime-straming {\n\t\tdisplay: none !important;\n\t}\n\t*[id*=div-gpt-ad] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Panel */\n\t.widget.right_top_ad.right, .widget.left_bottom_ad.left {\n\t\tdisplay: none !important;\n\t}\n\t.page-common.ad-skin #myanimelist .ad-skin-side-outer.bg-left, .page-common.ad-skin #myanimelist .ad-skin-side-outer.bg-right {\n\t\tdisplay: none !important;\n\t}\n\t/* > Browse Anime */\n\t.side-ad.side-ad--l, .side-ad.side-ad--r {\n\t\tdisplay: none !important;\n\t}\n\t/* > View Anime/Manga */\n\tdiv[style=\"padding: 20px 0 20px 40px; float: left; position: relative; z-index: 1;\"], div[style=\"padding: 20px 40px 20px 0; float: right; position: relative;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"padding: 20px 0 20px 40px; float: left;\"], div[style=\"padding: 20px 40px 20px 0; float: right;\"], div[style=\"padding: 20px 40px;display: inline-block;\"], div[style=\"padding: 20px 0px;display: inline-block;\"], div[class=\"mauto clearfix pt24\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[class=\"clearfix mauto mt16\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"padding:16px 0px 0px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.amazon-ads {\n\t\tdisplay: none !important;\n\t}\n\t.kskdDiv {\n\t\tdisplay: none !important;\n\t}\n\t/* > Add/Edit detailed info */\n\t.vrl-unit-container {\n\t\tdisplay: none !important;\n\t}\n\t/* > Reviews */\n\tdiv[style=\"width:728px; margin:0 auto\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"overflow: hidden; padding: 10px 0; border-bottom: solid #cdcdcd 1px\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[class=\"borderDark pt4 pb8 pl4 pr4 mb8\"] + div[class=\"border_bottom pt12 pb12 mb4\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Recommendations */\n\t.border_bottom[style=\"padding:8px 0px 8px 0px;margin:0px 0px 8px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Watch Videos */\n\t.clearfix[style=\"padding:16px 3px 20px 100px;width:880px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Watch Episode */\n\tdiv[style=\"padding:16px 0px 0px 0px;margin:14px 0px 0px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"float:left; padding:25px 25px 10px;\"], div[style=\"float:right; padding:25px 25px 10px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Forums */\n\t._unit[style=\"width:300px; height:250px; display: block !important;\"] {\n\t\theight: 0px !important;\n\t}\n\ttable[style=\"width:100%;height:100%;text-align:center;border-collapse:collapse;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix.pt24[style=\"width:720px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t#pc_forum_top_middle_rec_l {\n\t\tdisplay: none !important;\n\t}\n\t#pc_forum_top_middle_rec_r {\n\t\tdisplay: none !important;\n\t}\n\t.forum_boardrowspacer + .di-t {\n\t\tdisplay: none !important;\n\t}\n\t/* > Profile */\n\t.clearfix[style=\"padding:16px 3px 20px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Users */\n\t.clearfix[style=\"padding:16px 3px 20px 10px;width:100%;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > News */\n\ttable[style=\"width:160px;height:100%;text-align:center;border-collapse:collapse;margin:auto;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix[style=\"padding:16px 24px 20px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix[style=\"padding:16px 8px 20px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t#pc_news_top_1st_rec, #pc_news_top_2nd_rec {\n\t\tdisplay: none !important;\n\t}\n\t.js-scrollfix-bottom div[style=\"margin-top: 8px; text-align: center;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"margin-top: 24px;\"] > div[style=\"width: 300px; display: block !important; height: 600px;\"]\n\t{\n\t\tdisplay: none !important;\n\t}\n\t/* Social buttons hidden */\n\t.page-common .icon-block .icon-social {\n\t\tdisplay: none !important;\n\t}\n\t*[class*=PIN] {\n\t\tdisplay: none !important;\n\t}\n\tbody.news .news-container .news-info-block .sns-unit .sprite-icon-social.rect.icon-social {\n\t\tdisplay: none !important;\n\t}\n\t.page-common .sprite-icon-social.rect.wide.icon-social {\n\t\tdisplay: none !important;\n\t}\n\tbody.news .news-container .news-info-block {\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.js-sns-icon-container.icon-block-small {\n\t\tdisplay: none !important;\n\t}\n\t.fb-page, .page-common iframe[src*=\"facebook\"]\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.left-column > article:nth-child(5) > .clearfix[style=\"margin: 0 0 20px;\"], .widget.right_middle_ad.right\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.js-scrollfix-bottom ._unit, .js-scrollfix-bottom ._unit table {\n\t\tdisplay: none !important;\n\t\theight: 0 !important;\n\t}\n\n\n\t/*Search all*/\n\t#pc_search_1st_rec\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.search_all .result-header, .search_all .btn-search-more, .search_all .link-content-jump .link.on, .search_all .link-content-jump .link:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.search_all .content-result .list:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.search_all .content-result .list:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.search_all .content-result .list, .search_all .content-result .content-left\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Editing anime entires*/\n\t#fancybox-outer\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t#fancybox-close\n\t{\n\t\tbackground: url(https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/close_sprite.png) no-repeat !important;\n\t\theight: 24px !important;\n\t\twidth: 24px !important;\n\t\tposition: absolute !important;\n\t\tright: -15px !important;\n\t\ttop: -16px !important;\n\t}\n\t#fancybox-close:hover\n\t{\n\t\tbackground-position-y: -24px !important;\n\t\ttransition: none !important;\n\t}\n\n\t/*Modern list settings*/\n\t.ownlist_style_theme .customize-content-left .theme-custom-content, .ownlist_style_theme .customize-content-left .theme-custom-content, .ownlist_style_theme .customize-content-left h3.theme-custom-header, .ace_editor.ace_autocomplete, .ace_editor.ace_autocomplete .ace_line-hover\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left h2.theme-custom-header, .ace_editor.ace_autocomplete\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line, .ace_editor.ace_autocomplete .ace_line-hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left h3.theme-custom-header, .ownlist_style_theme .customize-content-left .header, .ownlist_style_theme .customize-content-left .header .header-text, .ace_editor.ace_autocomplete, .ace_gutter-cell\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left .header\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\n\n\t/*Friends*/\n\t.majorPad .bgLightBlue, .majorPad .friendHolder\n\t{\n\t\tbackground: var(--second-background) !important;\n\t}\n\t.page-common .profile_leftcell\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Hover details for anime*/\n\t.page-common .hoverinfo\n\t{\n\t\tbackground: var(--main-background) !important;\n\t}\n\t.page-common .hoverinfo::after\n\t{\n\t\tbackground: none !important;\n\t}\n\n\n\t/*Shared anime list*/\n\t.borderClass[style=\"background-color: #f6f6f6;\"]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Set to completed warning*/\n\t#fancybox-inner\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Missing content*/\n\t.borderDark.pt8.pb8.pl4.pr4.mb8\n\t{\n\t\tdisplay: block !important;\n\t}\n\n\t\t/*Manga store*/\n\t.manga-store *, .manga-store .section-title, .detail-preview-container.hasPreview[data-v-8dc9b7cc]::after,\n\t.manga-store-preview\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.manga-store .comics-list-tab-area::before\n\t{\n\t\tbackground: var(--hover-background) !important;\n\t}\n\ta.manga-store-genre-list-toggle, a[data-v-2617fe40], .manga-store .btn-link-detail,\n\t.manga-store .detail-card .detail-infoList-item .tag,\n\t.manga-store .comics-list-tab-item.is-active,\n\t.manga-store-preview-info a.manga-store-preview-button\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.manga-store .comics-list-tab-item.is-active\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*checkout*/\n\ta[data-v-135eaa16]\n\t{\n\t\tbackground: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\ta[data-v-135eaa16]:hover\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*Manga preview*/\n\t.header[data-v-65e5eae6], .footer[data-v-65e5eae6]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.button-buy[data-v-65e5eae6]\n\t{\n\t\tbackground: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*titles*/\n\t.title[data-v-8a87ff5a]\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\t/*Info warning*/\n\t.initialize-tutorial\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t.page-common.announcement .announce-sitemap, .page-common.announcement .announce-header\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Sitemap*/\n\t.sitemap__category, .sitemap__category__title\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n}", + "usercssData": { + "name": "MyAnimeList DeepDark", + "namespace": "USO Archive", + "author": "RaitaroH", + "description": "

Satisfy thy craving for anime and organization. May the dark be kinder on thine eyes. (MyAnimeList Dark Theme)

This is a dark theme for MyAnimeList inspired by FT DeepDark.

Credit for some images and code (ads removal) to dark-night-myanimelist.

Also, credit where credit is due for the color palettes. (@KDE, @horst3180, @linuxmint, Firefox, YouTube and Discord)

Official GitHub page, with screenshots, available here.

", + "version": "20180902.18.41", + "license": "NO-REDISTRIBUTION", + "preprocessor": "uso", + "vars": { + "mainColor": { + "type": "color", + "label": "Main highlight color", + "name": "mainColor", + "value": "#00ADEE", + "default": "rgb(0, 173, 238)", + "options": null + }, + "mainBackground": { + "type": "color", + "label": "Main background color", + "name": "mainBackground", + "value": "#111111", + "default": "rgb(17, 17, 17)", + "options": null + }, + "secondBackground": { + "type": "color", + "label": "Second background color", + "name": "secondBackground", + "value": "#181818", + "default": "rgb(24, 24, 24)", + "options": null + }, + "hoverBackground": { + "type": "color", + "label": "Hover background color", + "name": "hoverBackground", + "value": "#232323", + "default": "rgb(35, 35, 35)", + "options": null + }, + "mainText": { + "type": "color", + "label": "Main text color", + "name": "mainText", + "value": "#EFF0F1", + "default": "rgb(239, 240, 241)", + "options": null + }, + "dimmerText": { + "type": "color", + "label": "Dimmer text color", + "name": "dimmerText", + "value": "#CCCCCC", + "default": "rgb(204, 204, 204)", + "options": null + }, + "progress": { + "type": "select", + "label": "Progress custom colors", + "name": "progress", + "value": "normal", + "default": "normal", + "options": [ + { + "name": "normal", + "label": "No*", + "value": "" + }, + { + "name": "breeze", + "label": "Yes", + "value": ".profile .user-statistics .stats-graph .graph.watching, .profile .user-statistics .stats-graph .graph.reading, .profile .user-statistics .stats-status .circle.watching::after, .profile .user-statistics .stats-status .circle.reading::after\n\t{\n\t\tbackground-color: var(--green) !important;\n\t}\n\t.profile .user-statistics .stats-graph .graph.completed, .profile .user-statistics .stats-status .circle.completed::after, .profile .statistics-updates .data .graph .graph-inner.completed\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.profile .user-statistics .stats-graph .graph.on_hold, .profile .user-statistics .stats-status .circle.on_hold::after\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t}\n\t.profile .user-statistics .stats-graph .graph.dropped, .profile .user-statistics .stats-status .circle.dropped::after\n\t{\n\t\tbackground-color: var(--red) !important;\n\t}\n\t.profile .user-statistics .stats-graph, .profile .user-statistics .stats-graph .graph.plan_to_watch, .profile .user-statistics .stats-graph .graph.plan_to_read, .profile .user-statistics .stats-status .circle.plan_to_watch::after, .profile .user-statistics .stats-status .circle.plan_to_read::after\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.watching,.profile .statistics-updates .data .graph .graph-inner.re-watching,.profile .statistics-updates .data .graph .graph-inner.reading,.profile .statistics-updates .data .graph .graph-inner.re-reading\n\t{\n\t\tbackground-color: var(--green) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.completed\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.on_hold\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.dropped\n\t{\n\t\tbackground-color: var(--red) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.plan_to_watch,.profile .statistics-updates .data .graph .graph-inner.plan_to_read\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t}\n\t.profile .statistics-updates .data .text.watching,.profile .statistics-updates .data .text.re-watching,.profile .statistics-updates .data .text.reading,.profile .statistics-updates .data .text.re-reading\n\t{\n\t\tcolor: var(--green) !important;\n\t}\n\t.profile .statistics-updates .data .text.completed\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.profile .statistics-updates .data .text.on_hold\n\t{\n\t\tcolor: var(--yellow) !important;\n\t}\n\t.profile .statistics-updates .data .text.dropped\n\t{\n\t\tcolor: var(--red) !important;\n\t}\n\t.profile .statistics-updates .data .text.plan_to_watch,.profile .statistics-updates .data .text.plan_to_read\n\t{\n\t\tcolor: var(--gray) !important;\n\t}" + } + ] + } + } + }, + "author": "RaitaroH", + "description": "

Satisfy thy craving for anime and organization. May the dark be kinder on thine eyes. (MyAnimeList Dark Theme)

This is a dark theme for MyAnimeList inspired by FT DeepDark.

Credit for some images and code (ads removal) to dark-night-myanimelist.

Also, credit where credit is due for the color palettes. (@KDE, @horst3180, @linuxmint, Firefox, YouTube and Discord)

Official GitHub page, with screenshots, available here.

", + "updateDate": 1615723396762 + }, + { + "installDate": 1536263867292, + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "name": "MyAnimeList Background", + "sections": [ + { + "code": " body {\n background: #222 url('https://img.ponywave.de/di/23GT/ef26dd416ebc9a68d8e67fedac3b2085e070c01d.jpg') no-repeat fixed center top !important;\n}", + "regexps": [ + ".*myanimelist\\.net/(?!animelist|mangalist).*" + ] + } + ], + "id": 19, + "updateDate": 1576531753416, + "_id": "d66dbd9d-51fd-4640-9669-151a83b0ff2f", + "_rev": 1580730543289 + }, + { + "enabled": true, + "updateUrl": "https://stylishthemes.github.io/GitHub-Dark/github-dark.user.css", + "url": "https://github.com/StylishThemes/GitHub-Dark", + "installDate": 1546688855246, + "sourceCode": "/* ==UserStyle==\n@name GitHub Dark\n@namespace StylishThemes\n@version 4.2.244\n@homepageURL https://github.com/StylishThemes/GitHub-Dark\n@updateURL https://stylishthemes.github.io/GitHub-Dark/github-dark.user.css\n@license BSD-2-Clause\n@author StylishThemes\n@advanced color base-color \"Base color\" #4f8cc9\n@advanced color bg-color \"Background Color\" #202020\n@advanced dropdown bg-choice \"Background\" {\n crosshatch \"Cross-Hatch\" <<.pl-c1{color:#678cb1!important}.pl-token.active,.pl-token:hover{background:#678cb1!important;color:#e0e2e4!important} EOT;\n One Dark \"One Dark\" <<span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror{line-height:1.4em!important;color:#e6e1dc!important;background-color:#202020!important;-webkit-box-shadow:inset 0 0 10px #000!important;-moz-box-shadow:inset 0 0 10px #000!important;box-shadow:inset 0 0 10px #000!important}.CodeMirror-gutters{background:#3d3d3d!important;border-right:1px solid #4d4d4d!important;box-shadow:0 10px 20px #000!important}.CodeMirror-linenumber{text-shadow:0 1px 1px #4d4d4d!important;color:#111!important;padding:0 5px!important}.CodeMirror-guttermarker{color:#aaa!important}.CodeMirror-guttermarker-subtle{color:#111!important}.CodeMirror-cursor{border-left:1px solid #7991e8!important}.CodeMirror-activeline-background{background:none repeat scroll 0 0 hsla(0,0%,100%,.031)!important} EOT;\n Base16 Ocean Dark \"Base16 Ocean Dark\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(179,101,57,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(179,101,57,.99)!important}.CodeMirror-gutters{background:#002240!important;border-right:1px solid #aaa!important}.CodeMirror-guttermarker{color:#ffee80!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.cm-comment{color:#08f!important}.cm-atom{color:#845dc4!important}.cm-number,span.cm-attribute{color:#ff80e1!important}.cm-keyword{color:#ffee80!important}.cm-string{color:#3ad900!important}.cm-meta{color:#ff9d00!important}.cm-variable-2,span.cm-tag{color:#9effff!important}.cm-variable-3,span.cm-def{color:#fff!important}.cm-bracket{color:#d8d8d8!important}.cm-builtin,span.cm-special{color:#ff9e59!important}.cm-link{color:#845dc4!important}.cm-error{color:#9d1e15!important}.CodeMirror-activeline-background{background:#002d57!important}.CodeMirror-matchingbracket{outline:1px solid grey!important;color:#fff!important} EOT;\n Dracula \"Dracula\" <<span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}span.cm-comment{color:#6272a4!important}span.cm-string,span.cm-string-2{color:#f1fa8c!important}span.cm-number{color:#bd93f9!important}span.cm-variable{color:#50fa7b!important}span.cm-variable-2{color:#fff!important}span.cm-def{color:#ffb86c!important}span.cm-keyword,span.cm-operator{color:#ff79c6!important}span.cm-atom{color:#bd93f9!important}span.cm-meta{color:#f8f8f2!important}span.cm-tag{color:#ff79c6!important}span.cm-attribute,span.cm-qualifier{color:#50fa7b!important}span.cm-property{color:#66d9ef!important}span.cm-builtin,span.cm-variable-3{color:#50fa7b!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important} EOT;\n Material \"Material\" <<span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-activeline-background{background:transparent!important}.cm-keyword{color:#c792ea!important}.cm-operator{color:#e9eded!important}.cm-variable-2{color:#80cbc4!important}.cm-type,.cm-variable-3{color:#82b1ff!important}.cm-builtin{color:#decb6b!important}.cm-atom,.cm-number{color:#f77669!important}.cm-def{color:#e9eded!important}.cm-string{color:#c3e88d!important}.cm-string-2{color:#80cbc4!important}.cm-comment{color:#546e7a!important}.cm-variable{color:#82b1ff!important}.cm-meta,.cm-tag{color:#80cbc4!important}.cm-attribute{color:#ffcb6b!important}.cm-property{color:#80cbae!important}.cm-qualifier,.cm-type,.cm-variable-3{color:#decb6b!important}.cm-tag{color:#ff5370!important}.cm-error{color:#fff!important;background-color:#ec5f67!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important} EOT;\n Monokai - Spacegray Eighties \"Monokai - Spacegray Eighties\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(44,44,44,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(44,44,44,.99)!important}.CodeMirror-gutters{background:#1c1c1c!important;border-right:0!important}.CodeMirror-guttermarker{color:#b9b9b9!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#8a8a8a!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}.cm-comment{color:grey!important}.cm-atom,.cm-number{color:#ae81ff!important}.cm-property,span.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#66d9ef!important;font-style:italic!important}.cm-builtin{color:#f8f8f8!important}.cm-string{color:#e6db74!important}.cm-variable{color:#f8f8f8!important}.cm-variable-2{color:#9effff!important}.cm-variable-3{color:#ae81ff!important}.cm-def{color:#66d9ef!important;font-style:italic!important}.cm-bracket{color:#f8f8f8!important}.cm-tag{color:#f92672!important}.cm-header,.cm-link{color:#ae81ff!important}.cm-error{background:#1e0010!important;color:#960050!important}.CodeMirror-activeline-background{background:#2c2c2c!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#f8f8f8!important} EOT;\n Monokai \"Monokai\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)!important}.CodeMirror-gutters{background:#272822!important;border-right:0!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}.cm-comment{color:#75715e!important}.cm-atom,.cm-number{color:#ae81ff!important}.cm-property,span.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#f92672!important}.cm-builtin{color:#66d9ef!important}.cm-string{color:#e6db74!important}.cm-variable{color:#f8f8f2!important}.cm-variable-2{color:#9effff!important}.cm-variable-3{color:#66d9ef!important}.cm-def{color:#fd971f!important}.cm-bracket{color:#f8f8f2!important}.cm-tag{color:#f92672!important}.cm-header,.cm-link{color:#ae81ff!important}.cm-error{background:#f92672!important;color:#f8f8f0!important}.CodeMirror-activeline-background{background:#373831!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important} EOT;\n One Dark \"One Dark\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(221,240,255,.2)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(221,240,255,.2)!important}.CodeMirror-gutters{background:#34302f!important;border-right:0!important;padding:0 3px!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#8f938f!important}.CodeMirror-cursor{border-left:1px solid #a7a7a7!important}.cm-comment{color:#a6c6ff!important}.cm-atom{color:#de8e30!important}.cm-number{color:#ccc!important}.cm-property{color:#8f938f!important}.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#aeb2f8!important}.cm-string{color:#66a968!important}.cm-variable{color:#aeb2f8!important}.cm-variable-2{color:#bebf55!important}.cm-variable-3{color:#de8e30!important}.cm-def{color:#757ad8!important}.cm-bracket{color:#f8f8f2!important}.cm-tag{color:#c1c144!important}.cm-link{color:#ae81ff!important}.cm-qualifier,span.cm-builtin{color:#c1c144!important}.cm-error{background:#757ad8!important;color:#f8f8f0!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.031)!important}.CodeMirror-matchingbracket{border:1px solid hsla(0,0%,100%,.25)!important;color:#8f938f!important;margin:-1px -1px 0!important} EOT;\n Railscasts \"Railscasts\" <<span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)!important}.cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000!important;-webkit-box-shadow:inset 7px 0 12px -6px #000!important;box-shadow:inset 7px 0 12px -6px #000!important}.CodeMirror-gutters{border-right:0!important;background-color:#073642!important}.CodeMirror-linenumber{text-shadow:#021014 0 -1px!important;padding:0 5px!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#586e75!important}.CodeMirror-guttermarker{color:#ddd!important}.CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75!important}.CodeMirror-cursor{border-left:1px solid #819090!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.06)!important} EOT;\n Tomorrow Night Bright \"Tomorrow Night Bright\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)!important}.CodeMirror-gutters{background:#000!important;border-right:0!important}.CodeMirror-guttermarker{color:#f2777a!important}.CodeMirror-guttermarker-subtle{color:#777!important}.CodeMirror-linenumber{color:#515151!important}.CodeMirror-cursor{border-left:1px solid #6a6a6a!important}.cm-comment{color:#d27b53!important}.cm-atom,.cm-number{color:#a16a94!important}.cm-property,span.cm-attribute{color:#9c9!important}.cm-keyword{color:#f2777a!important}.cm-string{color:#fc6!important}.cm-variable{color:#9c9!important}.cm-variable-2{color:#69c!important}.cm-def{color:#f99157!important}.cm-bracket{color:#ccc!important}.cm-tag{color:#f2777a!important}.cm-link{color:#a16a94!important}.cm-error{background:#f2777a!important;color:#6a6a6a!important}.CodeMirror-activeline-background{background:#343600!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important} EOT;\n Vibrant Ink \"Vibrant Ink\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(53,73,60,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(53,73,60,.99)!important}.CodeMirror-gutters{background:#002240!important;border-right:1px solid #aaa!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.cm-keyword{color:#cc7832!important}.cm-atom{color:#fc0!important}.cm-number{color:#ffee98!important}.cm-def{color:#8da6ce!important}.cm-s-vibrant span.cm-def,.cm-s-vibrant span.cm-tag,.cm-variable-2,.cm-variable-3{color:#ffc66d!important}.cm-operator{color:#888!important}.cm-comment{color:grey!important;font-weight:700!important}.cm-string{color:#a5c25c!important}.cm-string-2{color:red!important}.cm-meta{color:#d8fa3c!important}.cm-attribute,.cm-builtin,.cm-tag{color:#8da6ce!important}.cm-header{color:#ff6400!important}.cm-hr{color:#aeaeae!important}.cm-link{color:#00f!important}.cm-error{border-bottom:1px solid red!important}.CodeMirror-activeline-background{background:#27282e!important}.CodeMirror-matchingbracket{outline:1px solid grey!important;color:#fff!important} EOT;\n}\n@advanced dropdown syntax-jupyter \"Jupyter syntax theme\" {\n Twilight \"Twilight\" << .octicon {\n color: #181818;\n }\n /* begin github-mobile rules */\n body[class=\"page-responsive\"] a {\n background-color: initial;\n }\n body[class=\"page-responsive\"] :root,\n body[class=\"page-responsive\"] [data-color-mode=light][data-light-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: /*[[base-color]]*/;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: /*[[base-color]]*/;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: /*[[base-color]]*/;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: /*[[base-color]]*/;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: /*[[base-color]]*/;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: /*[[base-color]]*/;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: /*[[base-color]]*/;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: /*[[base-color]]*/;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: /*[[base-color]]*/;\n --color-state-hover-primary-border: /*[[base-color]]*/;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: /*[[base-color]]*/;\n --color-state-selected-primary-border: /*[[base-color]]*/;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: /*[[base-color]]*/;\n --color-state-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: /*[[base-color]]*/;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: /*[[base-color]]*/;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: /*[[base-color]]*/;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(/*[[base-color-rgb]]*/, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: /*[[base-color]]*/;\n --color-label-info-border: /*[[base-color]]*/;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: /*[[base-color]]*/;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: /*[[base-color]]*/;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: /*[[base-color]]*/;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: /*[[base-color]]*/;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: /*[[base-color]]*/;\n --color-mktg-btn-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-text: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-icon: /*[[base-color]]*/;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: /*[[base-color]]*/;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: /*[[base-color]]*/;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: /*[[base-color]]*/;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: /*[[base-color]]*/;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: /*[[base-color]]*/;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: /*[[base-color]]*/;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: /*[[base-color]]*/;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: /*[[base-color]]*/;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: /*[[base-color]]*/;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n @media (prefers-color-scheme:light) {\n body[class=\"page-responsive\"] [data-color-mode=auto][data-light-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: /*[[base-color]]*/;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: /*[[base-color]]*/;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: /*[[base-color]]*/;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: /*[[base-color]]*/;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: /*[[base-color]]*/;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: /*[[base-color]]*/;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: /*[[base-color]]*/;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: /*[[base-color]]*/;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: /*[[base-color]]*/;\n --color-state-hover-primary-border: /*[[base-color]]*/;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: /*[[base-color]]*/;\n --color-state-selected-primary-border: /*[[base-color]]*/;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: /*[[base-color]]*/;\n --color-state-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: /*[[base-color]]*/;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: /*[[base-color]]*/;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: /*[[base-color]]*/;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(/*[[base-color-rgb]]*/, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: /*[[base-color]]*/;\n --color-label-info-border: /*[[base-color]]*/;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: /*[[base-color]]*/;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: /*[[base-color]]*/;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: /*[[base-color]]*/;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: /*[[base-color]]*/;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: /*[[base-color]]*/;\n --color-mktg-btn-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-text: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-icon: /*[[base-color]]*/;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: /*[[base-color]]*/;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: /*[[base-color]]*/;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: /*[[base-color]]*/;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: /*[[base-color]]*/;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: /*[[base-color]]*/;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: /*[[base-color]]*/;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: /*[[base-color]]*/;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: /*[[base-color]]*/;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: /*[[base-color]]*/;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n @media (prefers-color-scheme:dark) {\n body[class=\"page-responsive\"] [data-color-mode=auto][data-dark-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: /*[[base-color]]*/;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: /*[[base-color]]*/;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: /*[[base-color]]*/;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: /*[[base-color]]*/;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: /*[[base-color]]*/;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: /*[[base-color]]*/;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: /*[[base-color]]*/;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: /*[[base-color]]*/;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: /*[[base-color]]*/;\n --color-state-hover-primary-border: /*[[base-color]]*/;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: /*[[base-color]]*/;\n --color-state-selected-primary-border: /*[[base-color]]*/;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: /*[[base-color]]*/;\n --color-state-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: /*[[base-color]]*/;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: /*[[base-color]]*/;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: /*[[base-color]]*/;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(/*[[base-color-rgb]]*/, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: /*[[base-color]]*/;\n --color-label-info-border: /*[[base-color]]*/;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: /*[[base-color]]*/;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: /*[[base-color]]*/;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: /*[[base-color]]*/;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: /*[[base-color]]*/;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: /*[[base-color]]*/;\n --color-mktg-btn-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-text: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-icon: /*[[base-color]]*/;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: /*[[base-color]]*/;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: /*[[base-color]]*/;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: /*[[base-color]]*/;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: /*[[base-color]]*/;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: /*[[base-color]]*/;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: /*[[base-color]]*/;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: /*[[base-color]]*/;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: /*[[base-color]]*/;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: /*[[base-color]]*/;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n body[class=\"page-responsive\"] [data-color-mode=dark][data-dark-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme:light) {\n body[class=\"page-responsive\"] [data-color-mode=auto][data-light-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme:dark) {\n body[class=\"page-responsive\"] [data-color-mode=auto][data-dark-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n body[class=\"page-responsive\"] [data-color-mode=dark][data-dark-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme:light) {\n body[class=\"page-responsive\"] [data-color-mode=auto][data-light-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme:dark) {\n body[class=\"page-responsive\"] [data-color-mode=auto][data-dark-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n body[class=\"page-responsive\"] .rule, body[class=\"page-responsive\"] hr {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .btn-danger.disabled,\n body[class=\"page-responsive\"] .btn-danger:disabled,\n body[class=\"page-responsive\"] .btn-danger[aria-disabled=true],\n body[class=\"page-responsive\"] .btn-outline.disabled,\n body[class=\"page-responsive\"] .btn-outline:disabled,\n body[class=\"page-responsive\"] .btn-outline[aria-disabled=true] {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .btn-link {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .btn-invisible {\n background-color: initial;\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .btn-invisible.selected,\n body[class=\"page-responsive\"] .btn-invisible.zeroclipboard-is-active,\n body[class=\"page-responsive\"] .btn-invisible.zeroclipboard-is-hover,\n body[class=\"page-responsive\"] .btn-invisible:active,\n body[class=\"page-responsive\"] .btn-invisible:focus,\n body[class=\"page-responsive\"] .btn-invisible:hover,\n body[class=\"page-responsive\"] .btn-invisible[aria-selected=true] {\n background: none;\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .btn-invisible.disabled,\n body[class=\"page-responsive\"] .btn-invisible:disabled,\n body[class=\"page-responsive\"] .btn-invisible[aria-disabled=true] {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .btn-octicon,\n body[class=\"page-responsive\"] .close-button {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .inline-form .btn-plain {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .filter-list.pjax-active .filter-item,\n body[class=\"page-responsive\"] .SideNav-item,\n body[class=\"page-responsive\"] .SideNav-subItem,\n body[class=\"page-responsive\"] .tabnav-tab,\n body[class=\"page-responsive\"] .UnderlineNav-item {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .UnderlineNav-item.selected,\n body[class=\"page-responsive\"] .UnderlineNav-item[aria-current]:not([aria-current=false]),\n body[class=\"page-responsive\"] .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: #fff;\n }\n body[class=\"page-responsive\"] .box-shadow-none {\n box-shadow: none !important;\n }\n body[class=\"page-responsive\"] .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .input-dark {\n box-shadow: none;\n }\n @keyframes blink {\n 50% {\n background-color: initial;\n }\n }\n body[class=\"page-responsive\"] image-crop .crop-box {\n border-color: var(--ghd-bg-color);\n }\n body[class=\"page-responsive\"] image-crop .handle::before {\n background-color: #181818;\n border-color: #767676;\n }\n body.intent-mouse [role=button]:focus,\n body.intent-mouse [role=tabpanel][tabindex=\"0\"]:focus,\n body.intent-mouse a:focus, body.intent-mouse button:focus,\n body.intent-mouse summary:focus {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .zeroclipboard-link {\n background: none;\n }\n body[class=\"page-responsive\"] .auth-form-header .octicon {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .1);\n }\n body[class=\"page-responsive\"] .session-authentication .auth-form-header,\n body[class=\"page-responsive\"] .session-authentication.enterprise .header-logged-out,\n body[class=\"page-responsive\"] .session-authentication .header-logged-out,\n body[class=\"page-responsive\"] .session-authentication.hosted .header-logged-out {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px var(--color-fade-black-15), 0 0 1px rgba(220, 220, 220, .2);\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu--logged-out {\n background-color: initial;\n box-shadow: none;\n }\n }\n .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: none;\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px var(--color-fade-black-15), 0 0 1px rgba(220, 220, 220, .2);\n }\n }\n .page-responsive .HeaderMenu-link {\n background-color: transparent;\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu-link .icon-chevon-down-mktg {\n stroke: hsla(0, 0%, 0%, .5);\n background-color: transparent;\n }\n }\n body[class=\"page-responsive\"] .HeaderMenu-link {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .HeaderMenu-link .icon-chevon-down-mktg {\n stroke: hsla(0, 0%, 0%, .5);\n }\n body[class=\"page-responsive\"] .feature-preview-indicator,\n body[class=\"page-responsive\"] .notification-indicator .mail-status {\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n body[class=\"page-responsive\"] .header-search-wrapper,\n body[class=\"page-responsive\"] .header-search-wrapper.focus {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .header-search-input {\n background: none;\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .header-search-input:focus {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .jump-to-suggestions-path mark {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .btn-black-mktg-fluid,\n body[class=\"page-responsive\"] .btn-black-mktg-fluid.hover,\n body[class=\"page-responsive\"] .btn-black-mktg-fluid.selected,\n body[class=\"page-responsive\"] .btn-black-mktg-fluid:active,\n body[class=\"page-responsive\"] .btn-black-mktg-fluid:hover,\n body[class=\"page-responsive\"] .btn-black-mktg-fluid[aria-selected=true],\n body[class=\"page-responsive\"] [open] > .btn-black-mktg-fluid {\n background-color: rgba(220, 220, 220, .5);\n background-image: linear-gradient(-180deg, rgba(220, 220, 220, .5), rgba(220, 220, 220, .5));\n }\n body[class=\"page-responsive\"] .btn-outline-mktg-fluid,\n body[class=\"page-responsive\"] .btn-outline-mktg-fluid.hover,\n body[class=\"page-responsive\"] .btn-outline-mktg-fluid.selected,\n body[class=\"page-responsive\"] .btn-outline-mktg-fluid:active,\n body[class=\"page-responsive\"] .btn-outline-mktg-fluid:hover,\n body[class=\"page-responsive\"] .btn-outline-mktg-fluid[aria-selected=true],\n body[class=\"page-responsive\"] [open] > .btn-outline-mktg-fluid {\n background: none;\n }\n body[class=\"page-responsive\"] .btn-white-outline-mktg-fluid {\n color: #fff;\n background: none;\n box-shadow: inset 0 0 0 1px hsla(0, 0%, 0%, .3);\n }\n body[class=\"page-responsive\"] .btn-white-outline-mktg-fluid.hover,\n body[class=\"page-responsive\"] .btn-white-outline-mktg-fluid.selected,\n body[class=\"page-responsive\"] .btn-white-outline-mktg-fluid:active,\n body[class=\"page-responsive\"] .btn-white-outline-mktg-fluid:hover,\n body[class=\"page-responsive\"] .btn-white-outline-mktg-fluid[aria-selected=true],\n body[class=\"page-responsive\"] [open] > .btn-white-outline-mktg-fluid {\n color: #fff;\n background: none;\n box-shadow: inset 0 0 0 2px hsla(0, 0%, 0%, .5);\n }\n body[class=\"page-responsive\"] .btn-white-outline-mktg-fluid.focus,\n body[class=\"page-responsive\"] .btn-white-outline-mktg-fluid:focus {\n box-shadow: inset 0 0 0 2px var(--ghd-bg-color), 0 0 0 4px hsla(0, 0%, 0%, .5);\n }\n body[class=\"page-responsive\"] .btn-invisible-mktg-fluid,\n body[class=\"page-responsive\"] .btn-invisible-mktg-fluid::before,\n body[class=\"page-responsive\"] .btn-invisible-mktg-fluid:hover,\n body[class=\"page-responsive\"] .btn-lg-invisible-mktg-fluid,\n body[class=\"page-responsive\"] .btn-lg-invisible-mktg-fluid::before,\n body[class=\"page-responsive\"] .btn-lg-invisible-mktg-fluid:hover {\n background: none !important;\n }\n body[class=\"page-responsive\"] .btn-invisible-mktg-fluid.focus,\n body[class=\"page-responsive\"] .btn-invisible-mktg-fluid:focus,\n body[class=\"page-responsive\"] .btn-lg-invisible-mktg-fluid.focus,\n body[class=\"page-responsive\"] .btn-lg-invisible-mktg-fluid:focus {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .btn-invisible-mktg-fluid.text-underline,\n body[class=\"page-responsive\"] .btn-lg-invisible-mktg-fluid.text-underline {\n background-color: initial !important;\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .link-blue-light-mktg {\n color: #4f8cc9 !important;\n }\n body[class=\"page-responsive\"] .text-gradient-blue-green {\n background: -webkit-linear-gradient(-70deg, #4f8cc9, #01a49e);\n }\n body[class=\"page-responsive\"] .text-gradient-blue-purple {\n background: -webkit-linear-gradient(-70deg, #4f8cc9, #804eda);\n }\n body[class=\"page-responsive\"] .text-gradient-pink-blue {\n background: -webkit-linear-gradient(-70deg, #db469f, #4f8cc9);\n }\n body[class=\"page-responsive\"] .box-shadow-active-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 2px 2px rgba(0, 0, 0, .0274351), 0 4px 4px rgba(0, 0, 0, .0400741), 0 10px 8px rgba(0, 0, 0, .0499982), 0 15px 15px rgba(0, 0, 0, .0596004), 0 30px 30px rgba(0, 0, 0, .0709366), 0 70px 65px rgba(0, 0, 0, .09) !important;\n }\n body[class=\"page-responsive\"] .box-shadow-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1) !important;\n }\n body[class=\"page-responsive\"] .box-shadow-card-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 3px 2px rgba(0, 0, 0, .04), 0 7px 5px rgba(0, 0, 0, .02), 0 13px 10px rgba(0, 0, 0, .02), 0 22px 17px rgba(0, 0, 0, .02) !important;\n }\n body[class=\"page-responsive\"] .testimonial-avatar {\n border-color: var(--ghd-bg-color);\n }\n body[class=\"page-responsive\"] .customer-story-overlay {\n background-image: linear-gradient(180deg, #f0f0f0 -5%, transparent 50%);\n }\n body[class=\"page-responsive\"] .page-nav .page-nav-trigger {\n background: none;\n }\n body[class=\"page-responsive\"] .btn-green-mktg-fluid {\n background-color: #373;\n background-image: linear-gradient(-180deg, #34b859, #373);\n }\n body[class=\"page-responsive\"] .btn-green-mktg-fluid::before {\n background-image: linear-gradient(-180deg, #279a43, #6cc644);\n }\n body[class=\"page-responsive\"] .btn-green-mktg-fluid.hover,\n body[class=\"page-responsive\"] .btn-green-mktg-fluid.selected,\n body[class=\"page-responsive\"] .btn-green-mktg-fluid:active,\n body[class=\"page-responsive\"] .btn-green-mktg-fluid:hover,\n body[class=\"page-responsive\"] .btn-green-mktg-fluid[aria-selected=true],\n body[class=\"page-responsive\"] [open] > .btn-green-mktg-fluid {\n background-color: #373;\n background-image: linear-gradient(-180deg, #34b859, #373);\n }\n body[class=\"page-responsive\"] .bg-gradient-gray {\n background-image: linear-gradient(175.44deg, #383838 1.44%, #181818 96.23%);\n }\n body[class=\"page-responsive\"] .bg-radial-white {\n background: radial-gradient(145.3% 145.3% at 65.91% 0, #181818 0, #f0f0f0 100%);\n }\n body[class=\"page-responsive\"] .text-blue-mktg {\n color: /*[[base-color]]*/ !important;\n }\n body[class=\"page-responsive\"] .text-gray-light-ultra {\n color: #767676;\n }\n body[class=\"page-responsive\"] .underline-dashed {\n background-image: linear-gradient(90deg, var(--color-auto-gray-3) 50%, transparent 0);\n }\n body[class=\"page-responsive\"] .link-mktg {\n color: /*[[base-color]]*/;\n box-shadow: 0 1px 0 0 rgba(/*[[base-color-rgb]]*/, .5);\n }\n body[class=\"page-responsive\"] .link-mktg:hover {\n box-shadow: 0 1px 0 0 /*[[base-color]]*/;\n }\n body[class=\"page-responsive\"] .link-white-mktg {\n box-shadow: 0 1px 0 0 hsla(0, 0%, 0%, .5);\n }\n body[class=\"page-responsive\"] .link-white-mktg:hover {\n box-shadow: 0 1px 0 0 var(--ghd-bg-color);\n }\n body[class=\"page-responsive\"] hr {\n border-bottom-color: #2c2c2c;\n }\n body[class=\"page-responsive\"] .card-mktg {\n box-shadow: 0 1px 15px #000, 0 0 1px rgba(106, 115, 125, .35);\n }\n body[class=\"page-responsive\"] .animation-is-typing::before {\n color: hsla(0, 0%, 100%, .4);\n }\n body[class=\"page-responsive\"] .subnav-link.selected {\n border-bottom-color: /*[[base-color]]*/;\n }\n @media (min-width:768px) {\n body[class=\"page-responsive\"] .subnav-primary.selected {\n border-bottom-color: /*[[base-color]]*/;\n }\n }\n body[class=\"page-responsive\"] .fade-img-to-white-bg::before {\n background: linear-gradient(180deg, var(--color-auto-white) 0, transparent);\n }\n body[class=\"page-responsive\"] .fade-img-to-white-bg::after {\n background: linear-gradient(0deg, var(--color-auto-white) 0, transparent);\n }\n body[class=\"page-responsive\"] .exploregrid-item {\n color: #afafaf;\n border-bottom-color: rgba(220, 220, 220, .125);\n }\n body[class=\"page-responsive\"] .exploregrid-item-header {\n background-color: #222;\n }\n body[class=\"page-responsive\"] .dropdown-signout,\n body[class=\"page-responsive\"] .flash-close {\n background: none;\n }\n body[class=\"page-responsive\"] .label, body[class=\"page-responsive\"] .Label {\n background-color: initial !important;\n }\n body[class=\"page-responsive\"] .markdown-body .emoji,\n body[class=\"page-responsive\"] .markdown-body table img {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .markdown-body pre > code {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .markdown-body pre code,\n body[class=\"page-responsive\"] .markdown-body pre tt,\n body[class=\"page-responsive\"] .SelectMenu-closeButton,\n body[class=\"page-responsive\"] .SelectMenu-tab {\n background-color: initial;\n }\n @media (min-width:544px) {\n body[class=\"page-responsive\"] .SelectMenu-tab[aria-selected=true] {\n box-shadow: none;\n }\n }\n body[class=\"page-responsive\"] .Toast-dismissButton {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .select-menu-button::after {\n border-top-color: currentcolor;\n }\n body[class=\"page-responsive\"] .select-menu-header .close-button,\n body[class=\"page-responsive\"] .select-menu-header .octicon {\n color: var(--color-icon-tertiary, #767676);\n }\n body[class=\"page-responsive\"] .select-menu-text-filter input:-ms-input-placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n body[class=\"page-responsive\"] .select-menu-text-filter input::-ms-input-placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n body[class=\"page-responsive\"] .select-menu-text-filter input::placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n body[class=\"page-responsive\"] .select-menu-tabs .select-menu-tab-nav,\n body[class=\"page-responsive\"] .select-menu-tabs a {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .select-menu.label-select-menu .select-menu-item:active {\n background-color: initial !important;\n }\n body[class=\"page-responsive\"] .Box--overlay {\n box-shadow: 0 0 18px #000;\n }\n body[class=\"page-responsive\"] .capped-card {\n border-color: #343434;\n }\n body[class=\"page-responsive\"] .comment-body .highlight {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .locked-conversation .preview-tab,\n body[class=\"page-responsive\"] .locked-conversation .write-tab {\n color: #767676;\n }\n body[class=\"page-responsive\"] .commit-form {\n border-color: #343434;\n }\n body[class=\"page-responsive\"] .commit-form::before {\n background-color: #343434;\n }\n body[class=\"page-responsive\"] .full-commit {\n background-color: var(--color-bg-info, #182030);\n }\n body[class=\"page-responsive\"] .full-commit .sha-block > a {\n border-bottom-color: #767676;\n }\n body[class=\"page-responsive\"] .branches-tag-list li .ellipsis-expander {\n background-color: #383838;\n }\n body[class=\"page-responsive\"] .branches-tag-list li .ellipsis-expander:hover {\n background-color: #444;\n }\n body[class=\"page-responsive\"] .signed-commit-badge {\n background: none;\n }\n body[class=\"page-responsive\"] .signed-commit-badge:hover {\n border-color: #767676;\n }\n body[class=\"page-responsive\"] .signed-commit-badge.unverified {\n background: none;\n }\n body[class=\"page-responsive\"] .table-of-contents .toc-diff-stats .octicon {\n color: #767676;\n }\n body[class=\"page-responsive\"] .blob-wrapper table tr:nth-child(2n) {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .add-line-comment.octicon-check {\n background-color: #c6c6c6;\n }\n body[class=\"page-responsive\"] .inline-comment-form {\n border-color: #343434;\n }\n body[class=\"page-responsive\"] button.discussion-sidebar-toggle {\n background: none;\n }\n @media (min-width:1012px) {\n .page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting {\n background-color: transparent;\n }\n }\n body[class=\"page-responsive\"] .previewable-comment-form .comment-body {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .notifications-component-dialog:not([hidden]) + .notifications-component-dialog-overlay {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .reponav-wrapper .reponav-item.selected {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .steps {\n border-color: #343434;\n box-shadow: 0 1px 3px rgba(220, 220, 220, .05);\n }\n body[class=\"page-responsive\"] .steps li {\n color: #767676;\n border-left-color: #343434;\n }\n body[class=\"page-responsive\"] .render-container.is-render-ready.is-render-requested:not(.is-render-failed) {\n background: none;\n }\n body[class=\"page-responsive\"] .content-attachment {\n border-left-color: #343434;\n }\n body[class=\"page-responsive\"] .max--md .content-attachment-content--gradient {\n background: linear-gradient(180deg, transparent, #181818 calc(100% - 28px));\n }\n body[class=\"page-responsive\"] .content-attachment-details[open] .max--md .content-attachment-content--gradient {\n background: none;\n }\n body[class=\"page-responsive\"] .emoji-picker-tab .btn-outline:not(:hover) {\n background-color: initial;\n }\n @media (max-width:767px) {\n body[class=\"page-responsive\"] .notifications-v2 .AvatarStack-body .avatar {\n border-right-color: var(--ghd-bg-color) !important;\n }\n }\n body[class=\"page-responsive\"] .notifications-v2 .thread-subscription-status {\n background-color: initial !important;\n }\n body[class=\"page-responsive\"] .notifications-list-item .notification-list-item-unread-indicator {\n background: none;\n }\n body[class=\"page-responsive\"] .progress-pjax-loader {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .progress-pjax-loader > .progress-pjax-loader-bar {\n box-shadow: 0 0 10px rgba(/*[[base-color-rgb]]*/, .3);\n }\n body[class=\"page-responsive\"] .tag-input input {\n background: none;\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .tag-input input:focus {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .toolbar-commenting .dropdown-item,\n body[class=\"page-responsive\"] .toolbar-item,\n body[class=\"page-responsive\"] .toolbar-item .menu-target {\n background: none;\n }\n body[class=\"page-responsive\"] .topic-input-container .tag-input .tag-input-inner {\n background-image: none;\n }\n body[class=\"page-responsive\"] .hx_flex-avatar-stack-item .avatar {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .AvatarStack-body:not(:hover) {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .hx_badge-search-container .hx_badge-input {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .hx_badge-search-container .hx_badge-input:focus {\n box-shadow: none !important;\n }\n body[class=\"page-responsive\"] :root,\n body[class=\"page-responsive\"] [data-color-mode=light][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n @media (prefers-color-scheme:light) {\n body[class=\"page-responsive\"] [data-color-mode=auto][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n }\n @media (prefers-color-scheme:dark) {\n body[class=\"page-responsive\"] [data-color-mode=auto][data-dark-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n }\n body[class=\"page-responsive\"] .hx_breadcrumb-header .feature-preview-indicator,\n body[class=\"page-responsive\"] .hx_breadcrumb-header .notification-indicator .mail-status {\n background-image: none;\n }\n body[class=\"page-responsive\"] .Header-button:active,\n body[class=\"page-responsive\"] .Header-button:focus,\n body[class=\"page-responsive\"] .Header-button:hover {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .Box--responsive .Box-row--unread,\n body[class=\"page-responsive\"] .Header-button:active .octicon,\n body[class=\"page-responsive\"] .Header-button:focus .octicon,\n body[class=\"page-responsive\"] .Header-button:hover .octicon {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .Box--responsive .Box-row--unread::before {\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n body[class=\"page-responsive\"] .autocomplete-item {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .radio-input:disabled + .radio-label {\n background-color: #242424;\n }\n body[class=\"page-responsive\"] .hx_status-indicator.status-indicator-loading {\n background-image: none;\n }\n body[class=\"page-responsive\"] .select-menu-item:hover .Label {\n border-color: currentcolor;\n }\n body[class=\"page-responsive\"] .notification-list-item-actions .btn {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .pagehead-tabs-item.selected,\n body[class=\"page-responsive\"] .reponav-item.selected {\n border-top-color: #fff;\n }\n body[class=\"page-responsive\"] .intgrs-lstng-item-description::after {\n background-image: linear-gradient(90deg, transparent, #181818 80%);\n }\n body[class=\"page-responsive\"] .intgr-admin-link.draft-tag:hover {\n background-color: #f0f0f0;\n }\n body[class=\"page-responsive\"] .integrations-install-target .flash,\n body[class=\"page-responsive\"] .integrations-install-target .flash-error {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .not-found-octocat-wrapper::after {\n box-shadow: 0 4px 0 var(--ghd-bg-color), 0 8px 0 var(--ghd-bg-color), 0 12px 0 var(--ghd-bg-color), 0 16px 0 var(--ghd-bg-color), 0 20px 0 var(--ghd-bg-color);\n }\n body[class=\"page-responsive\"] .usage-bar {\n background-color: #2c2c2c;\n }\n body[class=\"page-responsive\"] .blame-commit[data-heat=\"1\"] {\n border-right-color: #fb8532;\n }\n body[class=\"page-responsive\"] .heat[data-heat=\"1\"] {\n background-color: #fb8532;\n }\n body[class=\"page-responsive\"] .blame-commit-date[data-heat=\"1\"] {\n color: #f3582c;\n }\n body[class=\"page-responsive\"] .blame-commit-date[data-heat=\"10\"] {\n color: #9b9b9b;\n }\n body[class=\"page-responsive\"] .commit-form::after {\n background-image: linear-gradient(var(--color-bg-primary, #181818), var(--color-bg-primary, #181818));\n }\n body[class=\"page-responsive\"] .commit-form::before {\n background-color: var(--color-border-primary, #343434);\n }\n body[class=\"page-responsive\"] .status-meta-file-name {\n background-color: rgba(220, 220, 220, .05);\n }\n body[class=\"page-responsive\"] .RecentBranches-item + .RecentBranches-item {\n border-top-color: rgba(220, 220, 220, .05);\n }\n body[class=\"page-responsive\"] .branch-a-b-count .meter.zero {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .branch-a-b-count .bar-ahead.even,\n body[class=\"page-responsive\"] .branch-a-b-count .bar-behind.even {\n background-color: #2c2c2c;\n }\n body[class=\"page-responsive\"] .code-frequency .addition {\n fill: #373;\n }\n body[class=\"page-responsive\"] .search-form-fluid .search-page-input {\n background: none;\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .search-form-fluid .search-page-input:focus {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .community-checklist .progress-bar {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .dashboards-overview-cards .blankslate {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .dashboards-overview-cards .dots.metric-1 circle,\n body[class=\"page-responsive\"] .dashboards-overview-cards .metric-0 circle {\n stroke: #181818;\n }\n body[class=\"page-responsive\"] :target .discussion-nested-comment-group .timeline-comment,\n body[class=\"page-responsive\"] :target .nested-discussion-timeline-comment {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .discussion-comment .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n body[class=\"page-responsive\"] .discussion-spotlights-sortable .sortable-drag {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .discussion-spotlight-gradient[aria-selected=true] {\n box-shadow: 0 0 0 2px rgba(/*[[base-color-rgb]]*/, .3);\n }\n body[class=\"page-responsive\"] .file {\n border-color: var(--color-border-primary, #343434);\n }\n body[class=\"page-responsive\"] .file .image {\n background-color: #343434;\n }\n body[class=\"page-responsive\"] .file .image canvas,\n body[class=\"page-responsive\"] .file .image img {\n background-color: #2c2c2c;\n border-color: var(--ghd-bg-color);\n }\n body[class=\"page-responsive\"] .file .image .view canvas,\n body[class=\"page-responsive\"] .file .image .view img {\n background-color: #2c2c2c;\n }\n body[class=\"page-responsive\"] .file .empty {\n background: none;\n }\n body[class=\"page-responsive\"] .svg-tip {\n background-color: #242424;\n }\n body[class=\"page-responsive\"] .svg-tip strong {\n color: #343434;\n }\n body[class=\"page-responsive\"] .svg-tip::after {\n border-top-color: #242424;\n }\n body[class=\"page-responsive\"] .team-discussions .previewable-comment-form .toolbar-commenting.toolbar-commenting.toolbar-commenting {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .discussion-post .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n body[class=\"page-responsive\"] .team-discussion-new-post .review-thread-reply-button:disabled {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .team-project-suggestion-number {\n color: #767676;\n }\n body[class=\"page-responsive\"] .hook-deliveries-list .hook-delivery-item:hover {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .integrations-select-repos::-webkit-scrollbar-thumb {\n box-shadow: 0 0 1px hsla(0, 0%, 0%, .5);\n }\n body[class=\"page-responsive\"] .integrations-select-repos::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .table-list-milestones .stat {\n color: var(--color-text-primary, #afafaf);\n }\n body[class=\"page-responsive\"] .milestone-title-link a {\n color: var(--color-text-primary, #c6c6c6);\n }\n body[class=\"page-responsive\"] .task-progress .octicon {\n color: var(--color-icon-tertiary, #767676);\n }\n body[class=\"page-responsive\"] .issue-meta-section .octicon {\n color: var(--color-icon-tertiary, #5a5a5a);\n }\n body[class=\"page-responsive\"] .label-select-menu .selected:active,\n body[class=\"page-responsive\"] .label-select-menu [aria-checked=mixed]:active,\n body[class=\"page-responsive\"] .label-select-menu [aria-checked=true]:active {\n background-color: initial !important;\n }\n body[class=\"page-responsive\"] .label-select-menu .select-menu-item.navigation-focus,\n body[class=\"page-responsive\"] .label-select-menu .select-menu-item:focus,\n body[class=\"page-responsive\"] .label-select-menu .select-menu-item:hover,\n body[class=\"page-responsive\"] .label-select-menu .select-menu-item[aria-selected=true] {\n background-color: var(--color-bg-secondary, #242424);\n }\n body[class=\"page-responsive\"] .repository-lang-stats ol.repository-lang-stats-numbers li a:hover {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .MarketplaceEdit-body .CircleIcon {\n background-color: #444;\n }\n body[class=\"page-responsive\"] .ClipboardButton.ClipboardButton--success,\n body[class=\"page-responsive\"] .ClipboardButton.ClipboardButton--success:focus {\n box-shadow: 0 0 0 .2em #3737;\n }\n body[class=\"page-responsive\"] .MarketplaceAnnouncement {\n background: linear-gradient(90deg, #4f8cc9, #2426ca);\n }\n body[class=\"page-responsive\"] .MarketplaceAnnouncement .btn-outline-mktg {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .merge-branch-manually {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .news .alert {\n border-top-color: #242424;\n }\n body[class=\"page-responsive\"] .oauth-permissions-details.open a.btn-sm {\n background-image: none;\n }\n body[class=\"page-responsive\"] .org-insights-graph-canvas .axis line {\n stroke: rgba(220, 220, 220, .1);\n }\n body[class=\"page-responsive\"] .org-insights-svg-tip::after {\n border-color: transparent;\n }\n body[class=\"page-responsive\"] .theme-toggle {\n background: none;\n }\n @media print {\n body[class=\"page-responsive\"] .btn:not(.btn-outline),\n body[class=\"page-responsive\"] .State {\n background: none;\n }\n body[class=\"page-responsive\"] .State--open {\n border-color: #373;\n }\n }\n @media (min-width:544px) {\n body[class=\"page-responsive\"] .project-full-screen .card-filter-input {\n background-color: hsla(0, 0%, 0%, .125);\n box-shadow: none;\n }\n }\n body[class=\"page-responsive\"] .pending-cards-status {\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n body[class=\"page-responsive\"] .user-profile-nav {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .review-comment .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n body[class=\"page-responsive\"] .release-timeline-tags .tag-timeline-date::after {\n border-color: var(--ghd-bg-color);\n }\n body[class=\"page-responsive\"] .timeout {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .prereceive-feedback {\n border-color: #343434;\n }\n body[class=\"page-responsive\"] .avatar-upload .flash {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .saved-reply-form .comment-body {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .access-token.new-token {\n background-color: #6cc64450;\n }\n body[class=\"page-responsive\"] .application-show-group .drag-and-drop {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .qr-code-table tr {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .qr-code-table .black {\n background-color: #f0f0f0;\n }\n body[class=\"page-responsive\"] .qr-code-table .white {\n background-color: #181818;\n }\n body[class=\"page-responsive\"] .session-device .session-state-indicator.not-recent {\n background-image: linear-gradient(#aaa, #5a5a5a);\n box-shadow: 0 1px 0 var(--ghd-bg-color);\n }\n body[class=\"page-responsive\"] .oauth-pending-deletion-list-item {\n box-shadow: inset 0 0 8px #2c2c2c;\n }\n body[class=\"page-responsive\"] .form-hr {\n border-bottom-color: var(--color-border-primary, #343434);\n }\n body[class=\"page-responsive\"] .listgroup {\n border-color: var(--color-border-primary, #343434);\n }\n body[class=\"page-responsive\"] .listgroup-item + .listgroup-item {\n border-top-color: var(--color-border-primary, #343434);\n }\n body[class=\"page-responsive\"] .listgroup-header {\n border-bottom-color: var(--color-border-primary, #343434);\n }\n body[class=\"page-responsive\"] .listgroup-overflow {\n background-color: var(--color-bg-secondary, #222);\n }\n @keyframes toggle-color {\n 0% {\n background-color: initial;\n }\n to {\n background-color: initial;\n }\n }\n body[class=\"page-responsive\"] .repository-merge-features .form-group.errored .error {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .user-identification-questions.redesign .topic-input-container .tag-input {\n border-bottom-color: #f0f0f0;\n }\n body[class=\"page-responsive\"] .draft-tag {\n color: #2c2c2c;\n }\n body[class=\"page-responsive\"] .showcase-page-pattern::after {\n background-image: linear-gradient(180deg, hsla(0, 0%, 0%, .85), #181818);\n }\n body[class=\"page-responsive\"] .sponsors-goal-progress-bar {\n background-color: #c49;\n }\n body[class=\"page-responsive\"] .sponsors-goal-completed-bar,\n body[class=\"page-responsive\"] .sponsors-goal-progress-bar:hover {\n background: linear-gradient(90deg, #cb4, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff);\n }\n body[class=\"page-responsive\"] .team-label-ldap,\n body[class=\"page-responsive\"] .tree-finder-input,\n body[class=\"page-responsive\"] .tree-finder-input:focus {\n box-shadow: none;\n }\n body[class=\"page-responsive\"] .tree-browser-result mark,\n body[class=\"page-responsive\"] .wiki-footer .markdown-body img {\n background: none;\n }\n body[class=\"page-responsive\"] .WorkflowGraph.dragging .WorkflowJob:hover {\n background: none !important;\n }\n body[class=\"page-responsive\"] .WorkflowJob-deployment-progress .Progress {\n background: none;\n }\n body[class=\"page-responsive\"] .actions-workflow-navigation .row-section {\n background-color: transparent !important;\n }\n body[class=\"page-responsive\"] .actions-workflow-navigation .row-parent {\n background-color: transparent;\n }\n body[class=\"page-responsive\"] .actions-workflow-navigation .row-parent:hover {\n background-color: initial;\n }\n body[class=\"page-responsive\"] .ActionsApprovalOverlay-environment .AvatarStack-body {\n background-color: transparent !important;\n }\n /* end github-mobile rules */\n /* begin github.com rules */\n a {\n background-color: initial;\n }\n :root, [data-color-mode=light][data-light-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: /*[[base-color]]*/;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: /*[[base-color]]*/;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: /*[[base-color]]*/;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: /*[[base-color]]*/;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: /*[[base-color]]*/;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: /*[[base-color]]*/;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: /*[[base-color]]*/;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: /*[[base-color]]*/;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: /*[[base-color]]*/;\n --color-state-hover-primary-border: /*[[base-color]]*/;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: /*[[base-color]]*/;\n --color-state-selected-primary-border: /*[[base-color]]*/;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: /*[[base-color]]*/;\n --color-state-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: /*[[base-color]]*/;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: /*[[base-color]]*/;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: /*[[base-color]]*/;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(/*[[base-color-rgb]]*/, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: /*[[base-color]]*/;\n --color-label-info-border: /*[[base-color]]*/;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: /*[[base-color]]*/;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: /*[[base-color]]*/;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: /*[[base-color]]*/;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: /*[[base-color]]*/;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: /*[[base-color]]*/;\n --color-mktg-btn-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-text: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-icon: /*[[base-color]]*/;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: /*[[base-color]]*/;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: /*[[base-color]]*/;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: /*[[base-color]]*/;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: /*[[base-color]]*/;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: /*[[base-color]]*/;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: /*[[base-color]]*/;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: /*[[base-color]]*/;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: /*[[base-color]]*/;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: /*[[base-color]]*/;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n @media (prefers-color-scheme:light) {\n [data-color-mode=auto][data-light-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: /*[[base-color]]*/;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: /*[[base-color]]*/;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: /*[[base-color]]*/;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: /*[[base-color]]*/;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: /*[[base-color]]*/;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: /*[[base-color]]*/;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: /*[[base-color]]*/;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: /*[[base-color]]*/;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: /*[[base-color]]*/;\n --color-state-hover-primary-border: /*[[base-color]]*/;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: /*[[base-color]]*/;\n --color-state-selected-primary-border: /*[[base-color]]*/;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: /*[[base-color]]*/;\n --color-state-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: /*[[base-color]]*/;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: /*[[base-color]]*/;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: /*[[base-color]]*/;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(/*[[base-color-rgb]]*/, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: /*[[base-color]]*/;\n --color-label-info-border: /*[[base-color]]*/;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: /*[[base-color]]*/;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: /*[[base-color]]*/;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: /*[[base-color]]*/;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: /*[[base-color]]*/;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: /*[[base-color]]*/;\n --color-mktg-btn-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-text: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-icon: /*[[base-color]]*/;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: /*[[base-color]]*/;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: /*[[base-color]]*/;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: /*[[base-color]]*/;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: /*[[base-color]]*/;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: /*[[base-color]]*/;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: /*[[base-color]]*/;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: /*[[base-color]]*/;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: /*[[base-color]]*/;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: /*[[base-color]]*/;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n @media (prefers-color-scheme:dark) {\n [data-color-mode=auto][data-dark-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: /*[[base-color]]*/;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: /*[[base-color]]*/;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: /*[[base-color]]*/;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: /*[[base-color]]*/;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(/*[[base-color-rgb]]*/, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: /*[[base-color]]*/;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: /*[[base-color]]*/;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: /*[[base-color]]*/;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: /*[[base-color]]*/;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: /*[[base-color]]*/;\n --color-state-hover-primary-border: /*[[base-color]]*/;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: /*[[base-color]]*/;\n --color-state-selected-primary-border: /*[[base-color]]*/;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: /*[[base-color]]*/;\n --color-state-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(/*[[base-color-rgb]]*/, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: /*[[base-color]]*/;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: /*[[base-color]]*/;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: /*[[base-color]]*/;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(/*[[base-color-rgb]]*/, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: /*[[base-color]]*/;\n --color-label-info-border: /*[[base-color]]*/;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: /*[[base-color]]*/;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: /*[[base-color]]*/;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: /*[[base-color]]*/;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: /*[[base-color]]*/;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: /*[[base-color]]*/;\n --color-mktg-btn-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-text: /*[[base-color]]*/;\n --color-mktg-btn-outline-hover-icon: /*[[base-color]]*/;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: /*[[base-color]]*/;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: /*[[base-color]]*/;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: /*[[base-color]]*/;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: /*[[base-color]]*/;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: /*[[base-color]]*/;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: /*[[base-color]]*/;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: /*[[base-color]]*/;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: /*[[base-color]]*/;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: /*[[base-color]]*/;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n [data-color-mode=dark][data-dark-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme:light) {\n [data-color-mode=auto][data-light-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme:dark) {\n [data-color-mode=auto][data-dark-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n [data-color-mode=dark][data-dark-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme:light) {\n [data-color-mode=auto][data-light-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme:dark) {\n [data-color-mode=auto][data-dark-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n .rule {\n background-color: transparent;\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=true],\n .btn-outline.disabled, .btn-outline:disabled,\n .btn-outline[aria-disabled=true] {\n box-shadow: none;\n }\n .btn-invisible, .btn-link {\n background-color: initial;\n }\n .btn-invisible {\n box-shadow: none;\n }\n .btn-invisible.selected, .btn-invisible.zeroclipboard-is-active,\n .btn-invisible.zeroclipboard-is-hover, .btn-invisible:active,\n .btn-invisible:focus, .btn-invisible:hover,\n .btn-invisible[aria-selected=true] {\n background: none;\n box-shadow: none;\n }\n .btn-invisible.disabled, .btn-invisible:disabled,\n .btn-invisible[aria-disabled=true] {\n background-color: initial;\n }\n .btn-octicon, .close-button {\n background-color: transparent;\n }\n .inline-form .btn-plain {\n background-color: initial;\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .filter-list.pjax-active .filter-item, .SideNav-item, .SideNav-subItem,\n .tabnav-tab, .UnderlineNav-item {\n background-color: initial;\n }\n .UnderlineNav-item.selected,\n .UnderlineNav-item[aria-current]:not([aria-current=false]),\n .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: #fff;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .input-dark {\n box-shadow: none;\n }\n @keyframes blink {\n 50% {\n background-color: initial;\n }\n }\n image-crop .crop-box {\n border-color: var(--ghd-bg-color);\n }\n image-crop .handle::before {\n background-color: #181818;\n border-color: #767676;\n }\n body.intent-mouse [role=button]:focus,\n body.intent-mouse [role=tabpanel][tabindex=\"0\"]:focus,\n body.intent-mouse a:focus, body.intent-mouse button:focus,\n body.intent-mouse summary:focus {\n box-shadow: none;\n }\n .zeroclipboard-link {\n background: none;\n }\n .auth-form-header .octicon {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .1);\n }\n .session-authentication .auth-form-header,\n .session-authentication.enterprise .header-logged-out,\n .session-authentication .header-logged-out,\n .session-authentication.hosted .header-logged-out {\n background-color: initial;\n }\n .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px var(--color-fade-black-15), 0 0 1px rgba(220, 220, 220, .2);\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu--logged-out {\n background-color: initial;\n box-shadow: none;\n }\n }\n .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: none;\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px var(--color-fade-black-15), 0 0 1px rgba(220, 220, 220, .2);\n }\n }\n .page-responsive .HeaderMenu-link {\n background-color: transparent;\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu-link .icon-chevon-down-mktg {\n stroke: hsla(0, 0%, 0%, .5);\n background-color: transparent;\n }\n }\n .HeaderMenu-link {\n background-color: transparent;\n }\n .HeaderMenu-link .icon-chevon-down-mktg {\n stroke: hsla(0, 0%, 0%, .5);\n }\n .feature-preview-indicator, .notification-indicator .mail-status {\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n .header-search-wrapper, .header-search-wrapper.focus {\n box-shadow: none;\n }\n .header-search-input {\n background: none;\n box-shadow: none;\n }\n .header-search-input:focus {\n box-shadow: none;\n }\n .jump-to-suggestions-path mark {\n background-color: initial;\n }\n .dropdown-signout, .flash-close {\n background: none;\n }\n .label, .Label {\n background-color: initial !important;\n }\n .markdown-body .emoji, .markdown-body table img {\n background-color: initial;\n }\n .markdown-body pre > code {\n background-color: transparent;\n }\n .markdown-body pre code, .markdown-body pre tt, .SelectMenu-closeButton,\n .SelectMenu-tab {\n background-color: initial;\n }\n @media (min-width:544px) {\n .SelectMenu-tab[aria-selected=true] {\n box-shadow: none;\n }\n }\n .Toast-dismissButton {\n background-color: initial;\n }\n .select-menu-button::after {\n border-top-color: currentcolor;\n }\n .select-menu-header .close-button, .select-menu-header .octicon {\n color: var(--color-icon-tertiary, #767676);\n }\n .select-menu-text-filter input:-ms-input-placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n .select-menu-text-filter input::-ms-input-placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n .select-menu-text-filter input::placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n .select-menu-tabs .select-menu-tab-nav, .select-menu-tabs a {\n background-color: transparent;\n }\n .select-menu.label-select-menu .select-menu-item:active {\n background-color: initial !important;\n }\n .Box--overlay {\n box-shadow: 0 0 18px #000;\n }\n .capped-card {\n border-color: #343434;\n }\n .comment-body .highlight {\n background-color: initial;\n }\n .locked-conversation .preview-tab, .locked-conversation .write-tab {\n color: #767676;\n }\n .commit-form {\n border-color: #343434;\n }\n .commit-form::before {\n background-color: #343434;\n }\n .full-commit {\n background-color: var(--color-bg-info, #182030);\n }\n .full-commit .sha-block > a {\n border-bottom-color: #767676;\n }\n .branches-tag-list li .ellipsis-expander {\n background-color: #383838;\n }\n .branches-tag-list li .ellipsis-expander:hover {\n background-color: #444;\n }\n .signed-commit-badge {\n background: none;\n }\n .signed-commit-badge:hover {\n border-color: #767676;\n }\n .signed-commit-badge.unverified {\n background: none;\n }\n .table-of-contents .toc-diff-stats .octicon {\n color: #767676;\n }\n .blob-wrapper table tr:nth-child(2n) {\n background-color: initial;\n }\n .add-line-comment.octicon-check {\n background-color: #c6c6c6;\n }\n .inline-comment-form {\n border-color: #343434;\n }\n button.discussion-sidebar-toggle {\n background: none;\n }\n @media (min-width:1012px) {\n .page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting {\n background-color: transparent;\n }\n }\n .previewable-comment-form .comment-body {\n background-color: initial;\n }\n .notifications-component-dialog:not([hidden]) + .notifications-component-dialog-overlay {\n background-color: transparent;\n }\n .reponav-wrapper .reponav-item.selected {\n background-color: initial;\n }\n .steps {\n border-color: #343434;\n box-shadow: 0 1px 3px rgba(220, 220, 220, .05);\n }\n .steps li {\n color: #767676;\n border-left-color: #343434;\n }\n .render-container.is-render-ready.is-render-requested:not(.is-render-failed) {\n background: none;\n }\n .content-attachment {\n border-left-color: #343434;\n }\n .max--md .content-attachment-content--gradient {\n background: linear-gradient(180deg, transparent, #181818 calc(100% - 28px));\n }\n .content-attachment-details[open] .max--md .content-attachment-content--gradient {\n background: none;\n }\n .emoji-picker-tab .btn-outline:not(:hover) {\n background-color: initial;\n }\n @media (max-width:767px) {\n .notifications-v2 .AvatarStack-body .avatar {\n border-right-color: var(--ghd-bg-color) !important;\n }\n }\n .notifications-v2 .thread-subscription-status {\n background-color: initial !important;\n }\n .notifications-list-item .notification-list-item-unread-indicator {\n background: none;\n }\n .progress-pjax-loader {\n background-color: transparent;\n }\n .progress-pjax-loader > .progress-pjax-loader-bar {\n box-shadow: 0 0 10px rgba(/*[[base-color-rgb]]*/, .3);\n }\n .tag-input input {\n background: none;\n box-shadow: none;\n }\n .tag-input input:focus {\n box-shadow: none;\n }\n .toolbar-commenting .dropdown-item, .toolbar-item,\n .toolbar-item .menu-target {\n background: none;\n }\n .topic-input-container .tag-input .tag-input-inner {\n background-image: none;\n }\n .hx_flex-avatar-stack-item .avatar {\n box-shadow: none;\n }\n .AvatarStack-body:not(:hover) {\n background-color: initial;\n }\n .hx_badge-search-container .hx_badge-input {\n box-shadow: none;\n }\n .hx_badge-search-container .hx_badge-input:focus {\n box-shadow: none !important;\n }\n :root, [data-color-mode=light][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n @media (prefers-color-scheme:light) {\n [data-color-mode=auto][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n }\n @media (prefers-color-scheme:dark) {\n [data-color-mode=auto][data-dark-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n }\n .hx_breadcrumb-header .feature-preview-indicator,\n .hx_breadcrumb-header .notification-indicator .mail-status {\n background-image: none;\n }\n .Header-button:active, .Header-button:focus, .Header-button:hover {\n background-color: initial;\n }\n .Box--responsive .Box-row--unread, .Header-button:active .octicon,\n .Header-button:focus .octicon, .Header-button:hover .octicon {\n box-shadow: none;\n }\n .Box--responsive .Box-row--unread::before {\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n .autocomplete-item {\n background-color: initial;\n }\n .radio-input:disabled + .radio-label {\n background-color: #242424;\n }\n .hx_status-indicator.status-indicator-loading {\n background-image: none;\n }\n .select-menu-item:hover .Label {\n border-color: currentcolor;\n }\n .notification-list-item-actions .btn {\n box-shadow: none;\n }\n .pagehead-tabs-item.selected, .reponav-item.selected {\n border-top-color: #fff;\n }\n .intgrs-lstng-item-description::after {\n background-image: linear-gradient(90deg, transparent, #181818 80%);\n }\n .intgr-admin-link.draft-tag:hover {\n background-color: #f0f0f0;\n }\n .integrations-install-target .flash,\n .integrations-install-target .flash-error {\n background-color: initial;\n }\n .not-found-octocat-wrapper::after {\n box-shadow: 0 4px 0 var(--ghd-bg-color), 0 8px 0 var(--ghd-bg-color), 0 12px 0 var(--ghd-bg-color), 0 16px 0 var(--ghd-bg-color), 0 20px 0 var(--ghd-bg-color);\n }\n .usage-bar {\n background-color: #2c2c2c;\n }\n .blame-commit[data-heat=\"1\"] {\n border-right-color: #fb8532;\n }\n .heat[data-heat=\"1\"] {\n background-color: #fb8532;\n }\n .blame-commit-date[data-heat=\"1\"] {\n color: #f3582c;\n }\n .blame-commit-date[data-heat=\"10\"] {\n color: #9b9b9b;\n }\n .commit-form::after {\n background-image: linear-gradient(var(--color-bg-primary, #181818), var(--color-bg-primary, #181818));\n }\n .commit-form::before {\n background-color: var(--color-border-primary, #343434);\n }\n .status-meta-file-name {\n background-color: rgba(220, 220, 220, .05);\n }\n .RecentBranches-item + .RecentBranches-item {\n border-top-color: rgba(220, 220, 220, .05);\n }\n .branch-a-b-count .meter.zero {\n background-color: initial;\n }\n .branch-a-b-count .bar-ahead.even, .branch-a-b-count .bar-behind.even {\n background-color: #2c2c2c;\n }\n .code-frequency .addition {\n fill: #373;\n }\n .search-form-fluid .search-page-input {\n background: none;\n box-shadow: none;\n }\n .search-form-fluid .search-page-input:focus {\n box-shadow: none;\n }\n .community-checklist .progress-bar {\n background-color: initial;\n }\n .dashboards-overview-cards .blankslate {\n box-shadow: none;\n }\n .dashboards-overview-cards .dots.metric-1 circle,\n .dashboards-overview-cards .metric-0 circle {\n stroke: #181818;\n }\n :target .discussion-nested-comment-group .timeline-comment,\n :target .nested-discussion-timeline-comment {\n box-shadow: none;\n }\n .discussion-comment .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n .discussion-spotlights-sortable .sortable-drag {\n background-color: initial;\n }\n .discussion-spotlight-gradient[aria-selected=true] {\n box-shadow: 0 0 0 2px rgba(/*[[base-color-rgb]]*/, .3);\n }\n .file {\n border-color: var(--color-border-primary, #343434);\n }\n .file .image {\n background-color: #343434;\n }\n .file .image canvas, .file .image img {\n background-color: #2c2c2c;\n border-color: var(--ghd-bg-color);\n }\n .file .image .view canvas, .file .image .view img {\n background-color: #2c2c2c;\n }\n .file .empty {\n background: none;\n }\n .svg-tip {\n background-color: #242424;\n }\n .svg-tip strong {\n color: #343434;\n }\n .svg-tip::after {\n border-top-color: #242424;\n }\n .team-discussions .previewable-comment-form .toolbar-commenting.toolbar-commenting.toolbar-commenting {\n background-color: transparent;\n }\n .discussion-post .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n .team-discussion-new-post .review-thread-reply-button:disabled {\n box-shadow: none;\n }\n .team-project-suggestion-number {\n color: #767676;\n }\n .hook-deliveries-list .hook-delivery-item:hover {\n background-color: initial;\n }\n .integrations-select-repos::-webkit-scrollbar-thumb {\n box-shadow: 0 0 1px hsla(0, 0%, 0%, .5);\n }\n .integrations-select-repos::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n .table-list-milestones .stat {\n color: var(--color-text-primary, #afafaf);\n }\n .milestone-title-link a {\n color: var(--color-text-primary, #c6c6c6);\n }\n .task-progress .octicon {\n color: var(--color-icon-tertiary, #767676);\n }\n .issue-meta-section .octicon {\n color: var(--color-icon-tertiary, #5a5a5a);\n }\n .label-select-menu .selected:active,\n .label-select-menu [aria-checked=mixed]:active,\n .label-select-menu [aria-checked=true]:active {\n background-color: initial !important;\n }\n .label-select-menu .select-menu-item.navigation-focus,\n .label-select-menu .select-menu-item:focus,\n .label-select-menu .select-menu-item:hover,\n .label-select-menu .select-menu-item[aria-selected=true] {\n background-color: var(--color-bg-secondary, #242424);\n }\n .repository-lang-stats ol.repository-lang-stats-numbers li a:hover {\n background-color: transparent;\n }\n .MarketplaceEdit-body .CircleIcon {\n background-color: #444;\n }\n .ClipboardButton.ClipboardButton--success,\n .ClipboardButton.ClipboardButton--success:focus {\n box-shadow: 0 0 0 .2em #3737;\n }\n .MarketplaceAnnouncement {\n background: linear-gradient(90deg, #4f8cc9, #2426ca);\n }\n .MarketplaceAnnouncement .btn-outline-mktg {\n background-color: transparent;\n }\n .merge-branch-manually {\n background-color: initial;\n }\n .news .alert {\n border-top-color: #242424;\n }\n .oauth-permissions-details.open a.btn-sm {\n background-image: none;\n }\n .org-insights-graph-canvas .axis line {\n stroke: rgba(220, 220, 220, .1);\n }\n .org-insights-svg-tip::after {\n border-color: transparent;\n }\n .theme-toggle {\n background: none;\n }\n @media print {\n .btn:not(.btn-outline), .State {\n background: none;\n }\n .State--open {\n border-color: #373;\n }\n }\n @media (min-width:544px) {\n .project-full-screen .card-filter-input {\n background-color: hsla(0, 0%, 0%, .125);\n box-shadow: none;\n }\n }\n .pending-cards-status {\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n .user-profile-nav {\n box-shadow: none;\n }\n .review-comment .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n .release-timeline-tags .tag-timeline-date::after {\n border-color: var(--ghd-bg-color);\n }\n .timeout {\n background-color: initial;\n }\n .prereceive-feedback {\n border-color: #343434;\n }\n .avatar-upload .flash {\n box-shadow: none;\n }\n .saved-reply-form .comment-body {\n background-color: initial;\n }\n .access-token.new-token {\n background-color: #6cc64450;\n }\n .application-show-group .drag-and-drop {\n background-color: initial;\n }\n .qr-code-table tr {\n background-color: transparent;\n }\n .qr-code-table .black {\n background-color: #f0f0f0;\n }\n .qr-code-table .white {\n background-color: #181818;\n }\n .session-device .session-state-indicator.not-recent {\n background-image: linear-gradient(#aaa, #5a5a5a);\n box-shadow: 0 1px 0 var(--ghd-bg-color);\n }\n .oauth-pending-deletion-list-item {\n box-shadow: inset 0 0 8px #2c2c2c;\n }\n .form-hr {\n border-bottom-color: var(--color-border-primary, #343434);\n }\n .listgroup {\n border-color: var(--color-border-primary, #343434);\n }\n .listgroup-item + .listgroup-item {\n border-top-color: var(--color-border-primary, #343434);\n }\n .listgroup-header {\n border-bottom-color: var(--color-border-primary, #343434);\n }\n .listgroup-overflow {\n background-color: var(--color-bg-secondary, #222);\n }\n @keyframes toggle-color {\n 0% {\n background-color: initial;\n }\n to {\n background-color: initial;\n }\n }\n .repository-merge-features .form-group.errored .error {\n background-color: transparent;\n }\n .user-identification-questions.redesign .topic-input-container .tag-input {\n border-bottom-color: #f0f0f0;\n }\n .draft-tag {\n color: #2c2c2c;\n }\n .showcase-page-pattern::after {\n background-image: linear-gradient(180deg, hsla(0, 0%, 0%, .85), #181818);\n }\n .sponsors-goal-progress-bar {\n background-color: #c49;\n }\n .sponsors-goal-completed-bar, .sponsors-goal-progress-bar:hover {\n background: linear-gradient(90deg, #cb4, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff);\n }\n .team-label-ldap, .tree-finder-input, .tree-finder-input:focus {\n box-shadow: none;\n }\n .tree-browser-result mark, .wiki-footer .markdown-body img {\n background: none;\n }\n .WorkflowGraph.dragging .WorkflowJob:hover {\n background: none !important;\n }\n .WorkflowJob-deployment-progress .Progress {\n background: none;\n }\n .actions-workflow-navigation .row-section {\n background-color: transparent !important;\n }\n .actions-workflow-navigation .row-parent {\n background-color: transparent;\n }\n .actions-workflow-navigation .row-parent:hover {\n background-color: initial;\n }\n .ActionsApprovalOverlay-environment .AvatarStack-body {\n background-color: transparent !important;\n }\n .header-overlay .Header, .header-overlay .header-logged-out {\n background-color: initial;\n }\n .header-overlay .header-search-wrapper {\n background-color: hsla(0, 0%, 0%, .15);\n }\n .home-nav.on .home-nav-item.selected {\n border-color: #4f8cc9;\n }\n .home-nav-trigger {\n background: none;\n }\n @media (min-width:768px) {\n .home-nav-item.selected {\n border-color: #4f8cc9;\n }\n }\n .home-packages-terminal, .home-repo-editor {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 34px 65px #040d21, 0 2.76726px 2.21381px rgba(0, 0, 0, .07), 0 6.6501px 5.32008px rgba(0, 0, 0, .04317), 0 12.5216px 10.0172px rgba(0, 0, 0, .0339075), 0 22.3363px 17.869px rgba(0, 0, 0, .0282784), 0 41.7776px 33.4221px rgba(0, 0, 0, .0235573), 0 100px 80px rgba(0, 0, 0, .0174624);\n }\n .home-cli-title {\n color: hsla(0, 0%, 0%, .3);\n }\n .build-in-animate .home-codeql-step-1, .home-secret-alert,\n .home-secret-comp.build-in-animate .home-secret-alert {\n box-shadow: 0 0 65px rgba(237, 78, 80, .4), 0 0 0 1px hsla(0, 0%, 0%, .1), 0 2px 2px rgba(0, 0, 0, .0274351), 0 4px 4px rgba(0, 0, 0, .0400741), 0 10px 8px rgba(0, 0, 0, .0499982), 0 15px 15px rgba(0, 0, 0, .0596004), 0 30px 30px rgba(0, 0, 0, .0709366), 0 70px 65px rgba(0, 0, 0, .09);\n }\n .home-discussions-check-0 {\n border-color: var(--ghd-bg-color);\n }\n .password-validity-pill.password-validity-pill-close {\n background-color: #cb4;\n }\n .password-validity-summary.password-validity-summary-close {\n color: #cb4;\n }\n .btn-black-mktg-fluid, .btn-black-mktg-fluid.hover,\n .btn-black-mktg-fluid.selected, .btn-black-mktg-fluid:active,\n .btn-black-mktg-fluid:hover, .btn-black-mktg-fluid[aria-selected=true],\n [open] > .btn-black-mktg-fluid {\n background-color: rgba(220, 220, 220, .5);\n background-image: linear-gradient(-180deg, rgba(220, 220, 220, .5), rgba(220, 220, 220, .5));\n }\n .btn-outline-mktg-fluid, .btn-outline-mktg-fluid.hover,\n .btn-outline-mktg-fluid.selected, .btn-outline-mktg-fluid:active,\n .btn-outline-mktg-fluid:hover, .btn-outline-mktg-fluid[aria-selected=true],\n [open] > .btn-outline-mktg-fluid {\n background: none;\n }\n .btn-white-outline-mktg-fluid {\n color: #fff;\n background: none;\n box-shadow: inset 0 0 0 1px hsla(0, 0%, 0%, .3);\n }\n .btn-white-outline-mktg-fluid.hover, .btn-white-outline-mktg-fluid.selected,\n .btn-white-outline-mktg-fluid:active, .btn-white-outline-mktg-fluid:hover,\n .btn-white-outline-mktg-fluid[aria-selected=true],\n [open] > .btn-white-outline-mktg-fluid {\n color: #fff;\n background: none;\n box-shadow: inset 0 0 0 2px hsla(0, 0%, 0%, .5);\n }\n .btn-white-outline-mktg-fluid.focus, .btn-white-outline-mktg-fluid:focus {\n box-shadow: inset 0 0 0 2px var(--ghd-bg-color), 0 0 0 4px hsla(0, 0%, 0%, .5);\n }\n .btn-invisible-mktg-fluid, .btn-invisible-mktg-fluid::before,\n .btn-invisible-mktg-fluid:hover, .btn-lg-invisible-mktg-fluid,\n .btn-lg-invisible-mktg-fluid::before, .btn-lg-invisible-mktg-fluid:hover {\n background: none !important;\n }\n .btn-invisible-mktg-fluid.focus, .btn-invisible-mktg-fluid:focus,\n .btn-lg-invisible-mktg-fluid.focus, .btn-lg-invisible-mktg-fluid:focus {\n box-shadow: none;\n }\n .btn-invisible-mktg-fluid.text-underline,\n .btn-lg-invisible-mktg-fluid.text-underline {\n background-color: initial !important;\n box-shadow: none;\n }\n .link-blue-light-mktg {\n color: #4f8cc9 !important;\n }\n .text-gradient-blue-green {\n background: -webkit-linear-gradient(-70deg, #4f8cc9, #01a49e);\n }\n .text-gradient-blue-purple {\n background: -webkit-linear-gradient(-70deg, #4f8cc9, #804eda);\n }\n .text-gradient-pink-blue {\n background: -webkit-linear-gradient(-70deg, #db469f, #4f8cc9);\n }\n .box-shadow-active-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 2px 2px rgba(0, 0, 0, .0274351), 0 4px 4px rgba(0, 0, 0, .0400741), 0 10px 8px rgba(0, 0, 0, .0499982), 0 15px 15px rgba(0, 0, 0, .0596004), 0 30px 30px rgba(0, 0, 0, .0709366), 0 70px 65px rgba(0, 0, 0, .09) !important;\n }\n .box-shadow-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1) !important;\n }\n .box-shadow-card-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 3px 2px rgba(0, 0, 0, .04), 0 7px 5px rgba(0, 0, 0, .02), 0 13px 10px rgba(0, 0, 0, .02), 0 22px 17px rgba(0, 0, 0, .02) !important;\n }\n .testimonial-avatar {\n border-color: var(--ghd-bg-color);\n }\n .customer-story-overlay {\n background-image: linear-gradient(180deg, #f0f0f0 -5%, transparent 50%);\n }\n .page-nav .page-nav-trigger {\n background: none;\n }\n .btn-green-mktg-fluid {\n background-color: #373;\n background-image: linear-gradient(-180deg, #34b859, #373);\n }\n .btn-green-mktg-fluid::before {\n background-image: linear-gradient(-180deg, #279a43, #6cc644);\n }\n .btn-green-mktg-fluid.hover, .btn-green-mktg-fluid.selected,\n .btn-green-mktg-fluid:active, .btn-green-mktg-fluid:hover,\n .btn-green-mktg-fluid[aria-selected=true], [open] > .btn-green-mktg-fluid {\n background-color: #373;\n background-image: linear-gradient(-180deg, #34b859, #373);\n }\n .bg-gradient-gray {\n background-image: linear-gradient(175.44deg, #383838 1.44%, #181818 96.23%);\n }\n .bg-radial-white {\n background: radial-gradient(145.3% 145.3% at 65.91% 0, #181818 0, #f0f0f0 100%);\n }\n .text-blue-mktg {\n color: /*[[base-color]]*/ !important;\n }\n .text-gray-light-ultra {\n color: #767676;\n }\n .underline-dashed {\n background-image: linear-gradient(90deg, var(--color-auto-gray-3) 50%, transparent 0);\n }\n .link-mktg {\n color: /*[[base-color]]*/;\n box-shadow: 0 1px 0 0 rgba(/*[[base-color-rgb]]*/, .5);\n }\n .link-mktg:hover {\n box-shadow: 0 1px 0 0 /*[[base-color]]*/;\n }\n .link-white-mktg {\n box-shadow: 0 1px 0 0 hsla(0, 0%, 0%, .5);\n }\n .link-white-mktg:hover {\n box-shadow: 0 1px 0 0 var(--ghd-bg-color);\n }\n .card-mktg {\n box-shadow: 0 1px 15px #000, 0 0 1px rgba(106, 115, 125, .35);\n }\n .animation-is-typing::before {\n color: hsla(0, 0%, 100%, .4);\n }\n .subnav-link.selected {\n border-bottom-color: /*[[base-color]]*/;\n }\n @media (min-width:768px) {\n .subnav-primary.selected {\n border-bottom-color: /*[[base-color]]*/;\n }\n }\n .fade-img-to-white-bg::before {\n background: linear-gradient(180deg, var(--color-auto-white) 0, transparent);\n }\n .fade-img-to-white-bg::after {\n background: linear-gradient(0deg, var(--color-auto-white) 0, transparent);\n }\n .exploregrid-item {\n color: #afafaf;\n border-bottom-color: rgba(220, 220, 220, .125);\n }\n .exploregrid-item-header {\n background-color: #222;\n }\n /* end github.com rules */\n body, body.bg-gray {\n color: var(--ghd-body-color);\n background-color: var(--ghd-bg-color) !important;\n background-image: var(--ghd-bg-img) !important;\n background-clip: border-box !important;\n background-origin: padding-box !important;\n background-attachment: /*[[bg-attachment]]*/ !important;\n /*[[bg-options]]*/\n }\n .application-main > .color-bg-canvas-inset {\n background: transparent !important;\n }\n /* Base link colors */\n table.files .octicon-file-directory,\n table.files .octicon-file-symlink-directory,\n table.files .octicon-file-submodule, .header-logo-invertocat:hover,\n .markdown-body a strong, .markdown-format a strong,\n .notifications.list-group a:hover, a.octolinker-link[href], .commit-id:hover,\n body[class=\"page-responsive\"] .files-list .octicon,\n .timeline-comment-action:hover, .Header-link[data-ga-click]:focus,\n .Header-link[data-ga-click]:hover, .btn-link .octicon-kebab-horizontal:hover,\n .Header-link:hover, .Header-link:focus {\n color: /*[[base-color]]*/;\n }\n .text-gray-light.btn-octicon:hover .octicon-kebab-horizontal {\n color: /*[[base-color]]*/ !important;\n }\n #notebook a:hover, #notebook a:focus {\n color: /*[[base-color]]*/;\n opacity: .8;\n }\n body.api li a code {\n color: rgba(/*[[base-color-rgb]]*/, .9) !important;\n }\n body.api li a:active code, body.api li a:hover code {\n color: rgba(/*[[base-color-rgb]]*/, 1) !important;\n }\n .hidden-text-expander .hx_bg-black-fade-15 {\n background: #343434;\n }\n /* Base color panel */\n option:hover, .listings-layout .nav li a:hover,\n #fork-select .target:not(.disabled):hover, table.upgrades tr:hover td,\n .dashboard-tabs a:hover, .documentation-results a:hover,\n .hidden-text-expander a:hover, .example-nav li a.selected,\n .issues-reset-query:hover .octicon-x, .segmented-nav li.active,\n .diff-expander:hover, .owner-select-target:hover,\n .release-timeline-tags .expander-text:hover .expander-dots,\n .search-result-item.navigation-focus, .pull-request-link:hover,\n .issues-reset-query:hover .issues-reset-query-block, .result.selected,\n .result:hover, .CommunityTemplate-highlight, .version-picker a:hover,\n .discussion-item-changes-marker.is-unread .discussion-item-icon {\n background: /*[[base-color]]*/ !important;\n }\n .diff-table button.add-line-comment, .add-line-comment,\n .email-format .email-hidden-toggle a:hover {\n background: /*[[base-color]]*/;\n }\n .context-button::after {\n border-color: /*[[base-color]]*/ transparent transparent !important;\n }\n .timeline-progressive-disclosure-button:hover,\n .release-timeline-tags .expander-text:hover .expander-dots,\n .review-comment[aria-selected=true],\n .timeline-comment[aria-selected=true] .review-summary .comment-body {\n border-color: /*[[base-color]]*/ !important;\n }\n /* pjax loader */\n [style*=\"background-color: rgb(121, 184, 255)\"] {\n background: /*[[base-color]]*/ !important;\n }\n @keyframes autofill {\n to {\n background-color: #181818;\n background-image: none;\n color: #ddd;\n }\n }\n input:-webkit-autofill, input:-webkit-autofill:hover,\n input:-webkit-autofill:focus, textarea:-webkit-autofill,\n textarea:-webkit-autofill:hover, textarea:-webkit-autofill:focus,\n select:-webkit-autofill, select:-webkit-autofill:hover,\n select:-webkit-autofill:focus {\n animation-name: autofill !important;\n animation-fill-mode: both !important;\n }\n #com #header .top-nav .dropdown-button:hover .dropdown-caret,\n .header-nav-link:hover .dropdown-caret, .header-nav-link:focus .dropdown-caret,\n .header-navlink:hover .dropdown-caret, .header-navlink:focus .dropdown-caret,\n .HeaderNavlink:hover .dropdown-caret, .HeaderNavlink:focus .dropdown-caret {\n border-top-color: /*[[base-color]]*/ !important;\n }\n .table-list .table-list-item.unread .table-list-cell-checkbox,\n .Box-row--unread, .Box-row.unread {\n border-left-color: /*[[base-color]]*/ !important;\n box-shadow: 2px 0 0 /*[[base-color]]*/ inset !important;\n }\n /* notification icon - \"transparent\" border */\n .notification-indicator .mail-status {\n border-color: #181818;\n }\n /* text selection */\n ::selection {\n background-color: /*[[base-color]]*/ !important;\n color: #fff !important;\n }\n ::-moz-selection {\n background-color: /*[[base-color]]*/ !important;\n color: #fff !important;\n }\n /* placeholder */\n ::-webkit-input-placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n ::-moz-placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n ::placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n .select-menu-text-filter input::-webkit-input-placeholder {\n color: #555 !important;\n }\n .select-menu-text-filter input::-moz-placeholder {\n color: #555 !important;\n }\n .select-menu-text-filter input::placeholder {\n color: #555 !important;\n }\n ::-webkit-calendar-picker-indicator {\n background-color: #181818;\n color: #c9c9c9;\n }\n ::-webkit-calendar-picker-indicator:hover {\n color: #666;\n }\n /* Remove dotted borders on already otherwise higlighted elements (Firefox) */\n .dropdown-item:focus, .details-dialog:focus {\n outline: none;\n }\n /* commit tease */\n .commit-tease, .commit-tease-sha, .commit-tease .commit-author {\n color: #c6c6c6 !important;\n }\n .tree-browser-result mark {\n color: #c6c6c6;\n }\n /* people panel org page issue #1041 */\n .auto-search-group input[type=\"text\"][aria-label] {\n background: #181818;\n }\n /* focus hightlight */\n a:focus, button:focus, [tabindex] {\n outline-color: /*[[base-color]]*/ !important;\n }\n input.focus[type=\"text\"], #adv_code_search .focus.search-page-label,\n .focused .drag-and-drop, #adv_code_search .search-page-label:focus,\n #q:focus ~ button, input.color-editor-input:focus, #ghd-settings select:focus,\n #ghd-settings input:focus, .intgrs-lstng-item:hover,\n .ajax-pagination-btn:focus, input[type=\"checkbox\"]:focus,\n div.search-form input:focus, #search > input[name=\"q\"]:focus {\n border-color: /*[[base-color]]*/ !important;\n outline-color: /*[[base-color]]*/ !important;\n }\n /* add border to site search field */\n .radio-group input[type=radio] {\n position: relative !important;\n }\n .dragover textarea, .dragover .drag-and-drop {\n box-shadow: 0 0 1px 1px /*[[base-color]]*/ !important;\n }\n /* below style is workaround for Firefox. */\n /* see: https://bugzilla.mozilla.org/show_bug.cgi?id=1394491 */\n optgroup::before {\n color: #888 !important;\n background-color: #181818 !important;\n }\n optgroup {\n background-color: #191919 !important;\n }\n /* custom checkboxes and radios */\n input[type=\"checkbox\"], input[type=\"checkbox\"]:focus, input[type=\"radio\"],\n input[type=\"radio\"]:focus, input[type=\"checkbox\"]:hover:active,\n input[type=\"radio\"]:hover:active, input[type=\"checkbox\"]:disabled,\n input[type=\"checkbox\"]:hover:disabled,\n input[type=\"checkbox\"]:hover:active:disabled {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #181818;\n border: 1px solid #484848;\n color: #eee;\n height: 14px;\n width: 14px;\n }\n input[type=\"radio\"] {\n border-radius: 100% !important;\n }\n input[type=\"checkbox\"]:disabled, input[type=\"checkbox\"]:hover:disabled,\n input[type=\"checkbox\"]:hover:active:disabled, input[type=\"radio\"]:disabled {\n background-color: #282828 !important;\n color: #555 !important;\n }\n input[type=\"checkbox\"]:checked {\n background: url('data:image/svg+xml;utf8,') !important;\n background-size: cover !important;\n }\n input[type=\"checkbox\"]:checked:disabled {\n background: url('data:image/svg+xml;utf8,') !important;\n }\n input[type=\"checkbox\"]:indeterminate {\n background: url('data:image/svg+xml;utf8,') !important;\n background-size: cover !important;\n }\n input[type=\"checkbox\"]:indeterminate:disabled {\n background: url('data:image/svg+xml;utf8,') !important;\n }\n input[type=\"radio\"]:checked {\n background: url('data:image/svg+xml;utf8,') !important;\n background-size: cover !important;\n }\n input[type=\"radio\"]:checked:disabled {\n background: url('data:image/svg+xml;utf8,') !important;\n }\n /*[[tab-size]]*/\n /* User time line firsts */\n img[src$=\"profile-joined-github.png\"] {\n padding-bottom: 20px !important;\n }\n table.pricing-table td:first-child {\n text-indent: 9px;\n }\n /* HACK: Label colors */\n [class*=\"IssueLabel\"][style*=\" color: #f\"], .IssueLabel a[style*=\"color: #f\"],\n .issue-card-label[style*=\" color: #f\"] {\n color: #e8e8e8 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #e\"], .IssueLabel a[style*=\"color: #e\"],\n .issue-card-label[style*=\" color: #e\"] {\n color: #e8e8e8 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #d\"], .IssueLabel a[style*=\"color: #d\"],\n .issue-card-label[style*=\" color: #d\"] {\n color: #e8e8e8 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #c\"], .IssueLabel a[style*=\"color: #c\"],\n .issue-card-label[style*=\" color: #c\"] {\n color: #e8e8e8 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #3\"], .IssueLabel a[style*=\"color: 3\"],\n .issue-card-label[style*=\" color: #3\"] {\n color: #181818 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #2\"], .IssueLabel a[style*=\"color: #2\"],\n .issue-card-label[style*=\" color: #2\"] {\n color: #181818 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #1\"], .IssueLabel a[style*=\"color: #1\"],\n .issue-card-label[style*=\" color: #1\"] {\n color: #181818 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #0\"], .IssueLabel a[style*=\"color: #0\"],\n .issue-card-label[style*=\" color: #0\"] {\n color: #181818 !important;\n }\n /* Fix GitHub's weird dark mode labels by reverting them to light mode values */\n .hx_IssueLabel {\n --lightness-threshold: .453 !important;\n --border-threshold: .96 !important;\n --border-alpha: max(0, min(calc((var(--perceived-lightness) - var(--border-threshold)) * 100), 1)) !important;\n background: rgb(var(--label-r), var(--label-g), var(--label-b)) !important;\n color: hsl(0, 0%, calc(var(--lightness-switch) * 100%)) !important;\n border-color: hsla(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) - 25) * 1%), var(--border-alpha)) !important;\n }\n /* Tooltip on contribution calendar */\n .svg-tip {\n color: #949494;\n }\n .svg-tip strong {\n color: #dcdcdc;\n }\n .Label--gray-darker {\n border-color: #484848 !important;\n }\n .project-card .highlight pre {\n padding: 1em;\n overflow: auto;\n white-space: pre;\n word-wrap: initial;\n }\n .project-card code {\n padding: .2em .4em;\n }\n .markdown-title code {\n background: #2d2d2d;\n }\n .markdown-body pre code, .markdown-body pre tt {\n padding: .2em 0 !important;\n border: none !important;\n }\n .intgrs-lstng-item-description::after {\n background-image: linear-gradient(to right, rgba(24, 24, 24, 0), #181818 80%) !important;\n }\n .marketplace-product-callout-bg {\n background-image: linear-gradient(to right, rgba(24, 24, 24, 0), #181818) !important;\n }\n .CircleBadge--github::after {\n background-color: #fff;\n }\n div[style*=\"background: linear-gradient(to bottom, rgba(246,248,250,0.5) 0%,rgba(246,248,250,1) 100%);\"] {\n background: linear-gradient(to bottom, rgba(32, 32, 32, .5) 0%, #202020 100%) !important;\n }\n .profile-timeline-month-heading {\n padding: 2px 5px !important;\n }\n input.tree-finder-input, input.tree-finder-input:focus {\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n }\n .dropdown-menu, .word-upload-callout, .select-menu-modal {\n box-shadow: 0 3px 12px rgba(0, 0, 0, .4);\n }\n .dropdown-menu-dark::after {\n border-bottom-color: #343434 !important;\n }\n .exploregrid-item {\n border-color: rgba(255, 255, 255, .075) !important;\n box-shadow: 0 1px 2px rgba(0, 0, 0, .05), 0 5px 10px rgba(0, 0, 0, .05) !important;\n }\n .exploregrid-item:hover {\n border-color: rgba(255, 255, 255, .15) !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, .15), 0 8px 15px rgba(0, 0, 0, .3) !important;\n }\n .box-shadow-large, html[class*=\"ghh-\"] .tooltipster-box {\n box-shadow: 0 1px 15px #000 !important;\n }\n img[src*=\"images/modules/checks\"].box-shadow-large {\n box-shadow: 0 1px 15px #fff !important;\n }\n /* add rounded borders on bottom */\n body[data-render-url], .render-viewer, .comment-content, .more-repos,\n .comment table {\n border-radius: 0 0 3px 3px !important;\n }\n .dashboard-tabs a, .search-filters {\n border-radius: 0 !important;\n }\n /* repo labels, private repo lists */\n .repo-label span, .private .repo-list-item, .hook-delivery-guid {\n background: #222 !important;\n color: #777 !important;\n }\n .private .mini-repo-list-item .repo-icon {\n color: #777 !important;\n }\n .private .mini-repo-list-item {\n background: #221 !important;\n }\n .section-nav .active a, .js-current .standalone a, .sidebar-module .disable>a {\n border-radius: 0 !important;\n border-left: 2px solid #eee !important;\n }\n .dropdown-arrow {\n border-top-color: #eee !important;\n transition: none !important;\n }\n #com #header .top-nav .dropdown-caret {\n border-top-color: #ccc !important;\n }\n .js-menu-target:hover .dropdown-arrow {\n border-top-color: /*[[base-color]]*/ !important;\n }\n .bg-gray-dark, .CheckRun {\n background: #181818 !important;\n }\n /* Add border-top to PR checks results blank slate */\n aside.border-top + section.bg-gray-dark:not([class*=\"js-\"]) {\n border-top: 1px solid #343434;\n }\n /* Make it more apparent that
is clickable */\n .markdown-body details summary:not([aria-haspopup]):hover {\n background: #282828;\n box-shadow: 0 0 0 2px #282828;\n cursor: pointer;\n }\n /* https://github.com/about/diversity dots fix */\n .bg-hero-dots-gray::after {\n filter: brightness(50%);\n }\n /* GitHub Bug: Center discussion close icon vertically */\n .discussion-item-closed .octicon {\n position: relative !important;\n top: -1px;\n }\n /* GitHub Bug: Center counters vertically on the line */\n .boxed-group .counter, .reponav-item .counter, .boxed-group .Counter,\n .reponav-item .Counter {\n position: relative !important;\n top: -1px !important;\n }\n /* GitHub Bug: Fix image swipe handle misalignment */\n .swipe .swipe-frame .swipe-bar .top-handle,\n .swipe .swipe-frame .swipe-bar .bottom-handle {\n left: -6px !important;\n }\n /* GitHub Bug: Stop commit message field from resizing horizontally */\n #commit-description-textarea {\n resize: vertical !important;\n }\n /* GitHub Bug: Fix cut-off 'g' letters in box headers like on https://github.com/notifications */\n .boxed-group .heading, .boxed-group > h3 {\n padding: 7px 10px 8px;\n line-height: inherit;\n }\n /* GitHub Bug: Fix cut-off 'g' letters on user page timeline repo names */\n .profile-timeline .lh-condensed {\n line-height: 1.35rem !important;\n }\n /* GitHub Bug: Fix cut-off 'g' letters on action workflow list */\n [id^=\"check_suite\"] .lh-condensed {\n line-height: 1.35rem !important;\n }\n /* GitHub Bug: fix disabled dropdown entries bg hover see https://git.io/Jfjul */\n .btn-link:disabled:hover {\n background: none;\n }\n /* GitHub Bug: Fix .branch-action-state ::after border right color */\n .branch-action-state-clean .timeline-comment--caret::after,\n .branch-action-state-dirty .timeline-comment--caret::after,\n .branch-action-state-unknown .branch-action-body::after,\n .branch-action-state-unstable .branch-action-body::after {\n border-right-color: #181818;\n }\n /* GitHub Bug: Vertically center ... expander in box headers */\n .Box-header .Details .ellipsis-expander {\n position: relative;\n top: -1.5px;\n }\n /* GitHub Bug: Vertically center counters on issue list \"Labels\" button */\n .subnav-item .Counter {\n position: relative;\n top: -1.25px;\n }\n /* GitHub Bug: Make review comment file table full width */\n .comment-body .blob-wrapper > table {\n width: 100%;\n }\n /* GitHub Bug: Vertically center labels on issue lists and add some margin */\n .Box-row .labels {\n vertical-align: middle;\n margin-left: .25rem;\n }\n /* GitHub Bug: Remove vertical padding on code suggestions diffs */\n .js-comment-body .blob-code-inner.py-1 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n /* Opinionated: Remove excessive box padding and adjust avatars to match */\n .Box-row, .Box-header, .Box-body {\n padding: 8px 12px;\n }\n .file-header {\n padding: 4px 6px;\n }\n .js-code-editor .file-header {\n padding: 5px 10px;\n }\n /* https://github.com/vednoc/userstyles.world */\n /* https://github.com/vednoc/userstyles.world/blob/main/themes */\n /* https://github.com/vednoc/userstyles.world/blob/main/themes/.gitkeep */\n .avatar[width=\"24\"], .avatar-user[width=\"24\"] {\n width: 20px;\n height: 20px;\n }\n .AvatarStack .avatar {\n width: 20px !important;\n height: 20px !important;\n overflow: visible !important;\n }\n .Box-header .avatar[width=\"24\"], .Box-header .avatar-user[width=\"24\"] {\n position: relative;\n top: 2px;\n left: 2px;\n }\n .Box-header a[rel] .avatar[width=\"24\"],\n .Box-header a[rel] .avatar-user[width=\"24\"] {\n top: -1px;\n left: 2px;\n margin-right: 4px;\n }\n .Box-header .ml-n1 {\n margin-left: 0 !important;\n margin-right: -8px !important;\n }\n /* fix close icon when .m-0 class is applied */\n .Box-btn-octicon.btn-octicon.m-0 {\n margin: -8px !important;\n }\n /* Repo files table: Make first border blue */\n .repository-content .Box.mb-3 .Details .sr-only + .Box-row {\n border-top-color: #246 !important;\n }\n /* Various tweaks to own comments in discussion */\n .discussion-comment.current-user div.clearfix {\n border-radius: 3px 3px 0 0;\n }\n .discussion-comment .js-inline-comments-container,\n .discussion-comment .js-resolvable-timeline-thread-container {\n background: none;\n }\n .discussion-comment .review-thread-reply {\n border-radius: 0 0 5px 5px;\n }\n .discussion-comment.current-user .review-thread-reply {\n background: #182030;\n border-color: #246;\n }\n /* \"Code\" button on repo */\n .btn-primary .octicon {\n color: inherit;\n }\n .btn-primary.disabled, .btn-primary:disabled,\n .btn-primary[aria-disabled=\"true\"], .btn.disabled, .btn:disabled,\n .btn[aria-disabled=\"true\"] {\n color: var(--color-icon-tertiary);\n }\n /* topic tags */\n .topic-tag {\n box-shadow: inset 0 0 0 1px #246 !important;\n }\n .topic-tag.topic-tag-outline {\n box-shadow: inset 0 0 0 1px #6d7c9c !important;\n }\n /* user page sticky header */\n main > div.position-sticky.d-md-block.width-full {\n position: relative;\n }\n main > div.position-sticky.d-md-block.width-full:before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: -24px;\n height: 24px;\n background: #181818;\n }\n /* Add bottom border on subnav - https://github.com/topics */\n .site-subnav {\n box-shadow: 0 1px 0 #343434 !important;\n }\n @media screen and (min-width: 1024px) {\n .site-subnav .subnav-primary.selected, .site-subnav .subnav-primary:hover {\n border-bottom-color: #eee !important;\n }\n }\n @media screen and (max-width: 768px) {\n body .p-responsive .subnav-btn {\n background: transparent !important;\n }\n body .p-responsive .subnav-link[href=\"https://enterprise.github.com/contact\"] {\n border-bottom-color: transparent !important;\n color: #8e8e8e !important;\n }\n body .p-responsive .subnav-link[href=\"https://enterprise.github.com/contact\"]:hover {\n border-bottom-color: transparent !important;\n color: #c6c6c6 !important;\n }\n }\n /* invisible border */\n @media screen and (max-width: 768px) {\n body.page-responsive .site-subnav .subnav-primary.selected,\n body.page-responsive .site-subnav .subnav-primary:hover {\n border-bottom-color: transparent !important;\n color: #c6c6c6 !important;\n }\n }\n .avatar-stack .avatar, .tabs > a, .header .divider-vertical, .about-menu-link {\n border-color: transparent !important;\n }\n /* darken border */\n .wiki-wrapper .wiki-empty-box:hover, .about-menu-link:hover,\n .about-menu-link.selected, .pricing-table {\n border-color: #777 !important;\n }\n /* brighten border */\n .filter-item.selected .Label--outline-white {\n border-color: #fff;\n }\n .filter-tab.selected {\n border: 1px solid #444 !important;\n border-bottom: 1px solid #343434 !important;\n }\n .follow-list .follow-list-item {\n border-bottom: 1px solid #343434 !important;\n }\n .branch-action-body::after {\n border-right-color: #181818 !important;\n }\n .branch-action-state-closed-dirty .branch-action-icon,\n .branch-action-state-dirty .branch-action-icon,\n .is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-icon,\n .State[title*=\"draft\" i] {\n background: #484848;\n }\n /* https://github.com/mobile/ */\n .mobile-gradient-bg {\n display: none;\n }\n svg.mobile-hero {\n filter: invert(100%) hue-rotate(180deg);\n }\n /* discussion timeline tweaks */\n .closed-banner {\n display: none !important;\n }\n /* background image on https://github.com/stylishThemes/github-dark/actions/new */\n .repo-actions-hero {\n filter: invert(1) hue-rotate(180deg);\n mix-blend-mode: exclusion;\n }\n .actions-workflow-navigation .row-selected {\n background: #343434;\n }\n .release .markdown-body img {\n background: none;\n }\n .js-profile-timeline-year-list {\n background: none !important;\n }\n .contribution-activity-listing .Progress {\n background: none !important;\n }\n .contribution-activity-listing .Progress-item {\n background: /*[[base-color]]*/ !important;\n }\n .discussion-timeline-actions {\n border-top: 2px solid #383838 !important;\n background: none !important;\n }\n .discussion-timeline::before {\n margin-top: 2px !important;\n background: #383838 !important;\n height: calc(100% - 259px) !important;\n }\n .profile-timeline.discussion-timeline::before {\n height: 100% !important;\n }\n .listings div.listing {\n border-left: 2px solid #333 !important;\n border-right: 2px solid #333 !important;\n }\n #org-members .member-listing {\n border-left: 1px solid #333 !important;\n border-right: 1px solid #333 !important;\n }\n .MarketplaceSideNav, .plans-card-text:first-child {\n border-right-color: #484848 !important;\n }\n /* fix commit form bg color */\n .commit-form {\n background-color: var(--ghd-bg-color);\n }\n .Popover-message.Box {\n background-color: var(--ghd-bg-color);\n }\n .Popover-message.box-shadow-large {\n box-shadow: 0 8px 24px rgba(24, 24, 24, .8) !important;\n }\n .Popover-message--top-left::after {\n border-bottom-color: #181818 !important;\n }\n .word-upload-callout::before, .word-upload-callout::after,\n .select-menu-modal-arrow::after, .Popover-message--top-left::before {\n border-bottom-color: #343434 !important;\n }\n .repo-filterer .repo-filter:hover, .review-summary::before {\n border-bottom-color: #484848 !important;\n }\n .issue-head {\n border-bottom-width: 1px !important;\n }\n .context-button:hover::after, .switcher > span::before {\n border-color: #eee transparent transparent !important;\n }\n /* repo tab tweaks */\n .reponav-item {\n border-top-width: 1px !important;\n }\n .reponav-item.selected {\n border-color: #343434;\n }\n .pagehead-tabs-item {\n border-top-width: 1px !important;\n }\n .Header .header-search-wrapper, .Header .header-search-wrapper input {\n background: #202020 !important;\n }\n .file-header {\n background: #202020 !important;\n }\n .js-new-comment-form .previewable-comment-form .tabnav-tab.selected,\n .js-new-comment-form .previewable-comment-form .tabnav-tab[aria-current]:not([aria-current=\"false\"]),\n .js-new-comment-form .previewable-comment-form .tabnav-tab[aria-selected=\"true\"],\n .timeline-new-comment .timeline-comment,\n .timeline-new-comment .tabnav-tab.selected,\n .timeline-new-comment .tabnav-tab[aria-current]:not([aria-current=\"false\"]),\n .timeline-new-comment .tabnav-tab[aria-selected=\"true\"],\n .previewable-comment-form .comment-form-head.tabnav,\n .timeline-comment.current-user.is-comment-editing {\n background: #1b1b1b !important;\n }\n .new-discussion-timeline .composer .comment-form-head.tabnav {\n background: #202020;\n }\n .pagehead-tabs-item.selected, .reponav-item.selected, .tabnav-tab.selected {\n background: #202020;\n border-bottom-color: #202020 !important;\n }\n .branches .branch-summary + .branch-summary {\n border-top-color: #333 !important;\n }\n /* code */\n .linkable-line-number {\n border-right: 1px solid #484848 !important;\n }\n /* File listings - fix date truncation */\n table.files td.age .css-truncate {\n max-width: none !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/620 */\n .timeline-comment-header .css-truncate-target {\n max-width: 250px !important;\n }\n /* override wrong gen bg color and assign var */\n .timeline-comment-header, .dropdown-menu {\n background-color: var(--ghd-bg-color);\n }\n /* fix background on \"new issue\" form */\n .timeline-comment > div.p-0.mb-md-0 {\n background: var(--ghd-bg-color);\n border-radius: 3px 3px 0 0;\n }\n /* tooltip - tooltipped */\n .octotip {\n background-color: #003 !important;\n border-color: #006 !important;\n }\n .tooltipped::after {\n background: #343434 !important;\n }\n .tooltipped-n::before, .tooltipped-ne::before, .tooltipped-nw::before {\n border-top-color: #343434 !important;\n }\n .tooltipped-s::before, .tooltipped-se::before, .tooltipped-sw::before {\n border-bottom-color: #343434 !important;\n }\n .tooltipped-e::before {\n border-right-color: #343434 !important;\n }\n .tooltipped-w::before {\n border-left-color: #343434 !important;\n }\n .review-comment[aria-selected=true],\n .timeline-comment[aria-selected=true] .review-summary {\n background-color: #181818 !important;\n box-shadow: 0 0 0 .2em rgba(/*[[base-color-rgb]]*/, .3) !important;\n }\n .timeline-comment-group[aria-selected=true] .timeline-comment::before {\n border-right-color: /*[[base-color]]*/ !important;\n left: -17px !important;\n filter: none !important;\n }\n .timeline-comment:target .review-summary::after {\n top: -16px !important;\n filter: none !important;\n }\n .timeline-comment[aria-selected=true] .review-summary::before {\n border-bottom-color: rgba(/*[[base-color-rgb]]*/, .3) !important;\n top: -19.75px !important;\n filter: none !important;\n }\n /* fix .discussion-topic-header in first PR bg color match the arrow */\n .timeline-comment .discussion-topic-header {\n background-color: var(--ghd-bg-color);\n }\n /* search - language sidebar - https://github.com/StylishThemes/GitHub-Dark/search?q=markdown */\n div.container-lg > div.float-left.px-md-2 > .border.rounded-1.d-none.d-md-block {\n background: #181818;\n border-color: #484848 !important;\n }\n .dashboard-sidebar, .tint-box, .capped-card-content, .table-list-item,\n .pinned-issue-item, .line-comments, .js-notice > .border:not(.bg-blue-light),\n .js-notice.border, #projects-results, .pr-toolbar.is-stuck, .pinned-issue-item,\n .pinned-item-list-item, article.border.rounded-1, #search-member,\n .sidebar-progress-bar > .d-flex,\n .pagination-loader-container .discussion-item-header .border,\n #wiki-footer .border-dashed, #wiki-rightbar .border-dashed,\n .profile-timeline-card, .avatar-before-user-status,\n .graph-before-activity-overview, .access-form-wrapper,\n .border-right.border-bottom.border-left, .news .issues_labeled .border,\n table.pricing-table, .two-factor-steps, .project-column,\n .branch-action-item.js-transitionable, .prose-diff, .listgroup,\n .repository-og-image:not([style*=\"background-image\"]),\n .thread-subscription-status {\n background: #181818;\n }\n /* Expandable review boxes, rendered and loading */\n .js-inline-comments-container, .js-resolvable-timeline-thread-container {\n background: #181818;\n border-radius: 3px;\n }\n .js-diff-load-container, .file .data.empty {\n background-color: var(--ghd-code-background) !important;\n border-radius: 0 0 5px 5px !important;\n }\n /* unread notifications are darker bg than read issue #1095 */\n .blame-hunk .blame-commit, .notifications-list-item.notification-unread {\n background: #181818;\n }\n /* read notifications are lighter bg than read issue #1095 */\n .notifications-list .list-style-none.bg-gray {\n background: #1e1e1e !important;\n }\n .blame-hunk, .blame-hunk .blob-num, .render-container, .blob-wrapper {\n background-color: var(--ghd-code-background) !important;\n }\n .radio-label, [style*=\"background-color: #2f363d\"],\n .project-full-screen .project-header {\n background-color: #181818 !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/811 */\n .application-main > main .container-sm > .pt-4.bg-white.text-center {\n background: none !important;\n }\n /* Labels/Milestone links https://github.com/StylishThemes/Github-Dark/issues */\n .subnav-links {\n background: #181818;\n }\n /* blankslates */\n /* bordered: https://github.com/StylishThemes/GitHub-Dark/actions/runs/42585904 */\n /* bordered: https://github.com/StylishThemes/GitHub-Dark/network/alerts */\n /* unbordered: https://github.com/StylishThemes/GitHub-Dark/pull/1069/files/d0801046a22eaf88d9081de9c7d415825cb1f9fa..291b428577d344d54039de9aa0d8ed3a8fcfaebc */\n .blankslate {\n background: none !important;\n }\n .blankslate.border, .blankslate.border-gray-light,\n .js-updatable-content > .border.rounded-1 {\n background: #181818 !important;\n }\n /* add background to pagination active states and remove transitions */\n .pagination a:active, .pagination a:focus, .pagination a:hover,\n .pagination em:active, .pagination em:focus, .pagination em:hover,\n .pagination span:active, .pagination span:focus, .pagination span:hover {\n background: #181818;\n transition: none !important;\n }\n .pagination a, .pagination em, .pagination span {\n transition: none !important;\n }\n /* add background to discussions sidebar box */\n .repository-content > .js-check-all-container .d-none.d-lg-block > .border {\n background: #181818;\n }\n /* add background to packages page */\n /* https://github.com/yarnpkg/berry/packages/19319 */\n .repository-content .border.rounded-1.px-3.py-4.mb-6 {\n background: #181818;\n }\n button.bg-white.subnav-link, main [style=\"background-color: #fcfdfd;\"],\n .repository-content > .bg-white:not(.card-filter-autocomplete-dropdown) {\n background-color: transparent !important;\n }\n .sidebar-module, div.search-form input, #search > input[name=\"q\"],\n .ais-SearchBox-input {\n background-color: #181818;\n border-color: #343434;\n }\n .blob-num-context, #user-content-toc td {\n background: #141414 !important;\n }\n .action-card::after, .action-card::before {\n background-color: #202020 !important;\n box-shadow: 0 0 0 1px #555 !important;\n }\n /* pseudo-transparent effects */\n .conversation-list-heading .inner, .profile-timeline-month-heading {\n background-color: var(--ghd-bg-color) !important;\n }\n /* Navigation focus */\n .list-browser-item.navigation-focus, .js-details-container.navigation-focus,\n .js-details-container.navigation-focus:nth-child(2n), .team-grid .team-members,\n .tree-browser tr.navigation-focus td,\n .issues-listing .table-list-issues .selectable:hover,\n .issues-listing .table-list-issues .navigation-focus, .setup-plans tr.selected,\n .notifications .navigation-focus, .sidebar-module ul ul li a:hover,\n .no-results, #gollum-editor-help-list, .owner-select-target,\n .divider .blob-code div.highlight,\n .oauth-org-access-details .boxed-group-list > li.on:hover, pre div:hover,\n .summary-stats li a:hover, .pinned-repos-selection-list-item.selected,\n .Box-body-row--highlight.navigation-focus, .Box-body-row--highlight:hover,\n .js-current .standalone a, .Box-row--focus-gray.navigation-focus,\n .team-listing .is-open.root-team, .Box-row--hover-gray:hover,\n .label-select-menu .select-menu-item.navigation-focus,\n .label-select-menu .select-menu-item:focus,\n .label-select-menu .select-menu-item:hover {\n background: #222 !important;\n }\n .search-result-group {\n background: #282828 !important;\n border-color: rgba(68, 68, 68, .5) !important;\n color: #555 !important;\n }\n .blame-commit-next .blame-commit-info, .blame-commit-next + .blame-line,\n .ScreenshotCarousel-nav {\n box-shadow: inset 0 1px 0 #343434 !important;\n }\n /* semi-transparent */\n .context-loader.large-format-loader, #graphs .loader, .org-header,\n .illflow-item:not(.selected):hover, .orghead, .dropdown-toggle:hover,\n .dropdown-toggle.selected {\n background: rgba(20, 20, 20, .4) !important;\n }\n /* repo/page header */\n .page-responsive .repohead, .page-responsive .pagehead,\n .repohead.bg-gray-light, .pagehead.bg-gray-light, main > .bg-gray-light,\n .application-main > .bg-gray-light {\n background: rgba(20, 20, 20, .4) !important;\n }\n main > .bg-gray-light nav.bg-gray-light {\n background: none !important;\n }\n .explore-signup-entice-inner {\n background: rgba(20, 20, 20, .9) !important;\n }\n .starred-repo.navigation-focus, .marketing-section-stripe,\n .blob-expanded .blob-num, .blob-expanded .blob-code, .migration-section-grey {\n background: rgba(50, 50, 50, .5) !important;\n }\n .details-expanded-dark[open] > summary::before,\n .details-overlay-dark[open] > summary::before,\n body.status .details-overlay-dark[open] > summary::before,\n body[class=\"page-responsive\"] .details-overlay-dark[open] > summary::before,\n .SelectMenu::before {\n background: rgba(0, 0, 0, .5) !important;\n }\n .svg-tip {\n background: rgba(12, 12, 12, .8) !important;\n }\n .svg-tip::after {\n border-top-color: rgba(12, 12, 12, .9) !important;\n }\n .shelf {\n background-color: rgba(0, 0, 0, .2) !important;\n background-image: none !important;\n }\n /* page overlay */\n .select-menu-loading-overlay, .slow-loading-overlay,\n .branches .loading-overlay {\n background-color: rgba(24, 24, 24, .6) !important;\n }\n /* remove background */\n body > pre, .textographic a.repo, .stars-browser .filter-bar,\n .highlight .file-diff-line:hover pre, .gravatar, .topsearch span.search-input,\n p.meta, #facebox, .profilecols .filter-bar, .btn-group,\n div.content-header .search-form, .file-code, .org-header .edit-org:hover,\n #wrapper, .gravatar img, .commit-comments-header-sha, pre.headers code,\n .audit-search-form, .columns.equacols.bordered, .commits li img,\n a.minibutton code, .keyboard-mappings th, .api #header-wrapper .nav,\n .marketing-nav a.selected, #graph_data .tabs, .org-nav-item.selected,\n .edit-team-member:hover, tr.commit, .release-timeline .js-details-container,\n .section-heading-title a.js-selected-navigation-item,\n .featured-callout .screenshot, .timeline-commits .commit-meta .status,\n .theme-picker-spinner, .timeline-commits .commit-meta .octicon,\n .file .meta-divider, .avatar-stack.multiple-avatars::before, #feedHandler,\n .discussion-sidebar-item .thread-subscription-status,\n .boxed-group.application-show-group .logo-upload, .diagram-icon-small,\n #readme .highlight, .ace-github, .theme-picker, .avatar-stack .avatar,\n .boxed-group, .header .divider-vertical, .ace-github-base16,\n .markdown-body pre code, .markdown-body pre tt, #readme .plain pre,\n .uploaded-files, .input_area, #notebook .highlight, #notebook .highlight pre,\n .output_area pre, .delete-owners-button:hover, .avatar-child,\n .session-authentication .header-logged-out,\n .session-authentication .auth-form-header,\n .timeline-progressive-disclosure-items, #com #footer, .shade-gradient,\n #categories .list, .main-content, .showcase-page-header,\n .showcase-page-pattern::after, .description-inline, .result-group a,\n .border-wrap, a.feed-icon, .session-device,\n .boxed-group-list > li.session-device:hover,\n .merge-status-item .merge-status-icon, .project-columns, .project-header,\n .user-profile-nav, .profile-timeline-year-list.bg-white,\n .discussion-item-review .timeline-comment, .libraries-jumbotron,\n .bg-shade-gradient, .dev-hero,\n .render-container.is-render-ready.is-render-requested:not(.is-render-failed),\n .user-list li em, .api table, .dashboard-notice .coupon, .release-label,\n .oauth-org-access-details .oauth-org-item.on, .MarketplaceSideNav,\n .timeline-inline-comments, .AvatarStack-body, .team-discussions-container,\n .Collection ~ div[style*=\"linear-grad\"],\n .application-main > div[style*=\"background\"], .AvatarStack-body .avatar,\n .dropdown-toggle, ul.add-member-team-list.table-list, .gh-header,\n .enterprise-prompt, .enterprise-prompt *, .diffbar, .footer .bg-gray-light,\n button.btn-invisible, button.btn-invisible:hover, .btn.btn-invisible,\n .btn.btn-invisible:hover,\n .application-main [style*=\"background: linear-gradient(#ffffff, #fcfcfc)\"],\n section[style=\"background-color: #fafbfc;\"], div[style=\"background:#fafbfc;\"],\n .team-left-column, .render-container.js-actions-page,\n .deployments-timeline-icon, .TimelineItem--condensed .TimelineItem-badge,\n .notification-navigation, .check-annotation code pre,\n .merge-status-item > [style*=\"#fff\"], .pagehead, .pagehead nav {\n background: none !important;\n }\n @media (min-width: 1012px) {\n .file-commit-form--full {\n background: none !important;\n }\n }\n body[class=\"page-responsive\"] .repo-list .private {\n background-color: initial;\n }\n .select-menu-item:hover {\n background-color: /*[[base-color]]*/;\n }\n @media (hover: hover) {\n .SelectMenu-item:hover, body:not(.intent-mouse) .SelectMenu-item:focus {\n color: #c6c6c6;\n background-color: #202020;\n }\n .SelectMenu-item:active {\n color: #c0c0c0;\n background-color: #242424;\n }\n .SelectMenu-item[aria-checked=true]:active,\n .SelectMenu-item[aria-checked=true]:hover,\n body:not(.intent-mouse) .SelectMenu-item[aria-checked=true]:focus {\n color: #e0e0e0;\n }\n .SelectMenu-tab[aria-selected=true]:active,\n .SelectMenu-tab[aria-selected=true]:hover {\n color: #d2d2d2;\n background-color: #181818;\n }\n body:not(.intent-mouse) .SelectMenu-tab:focus {\n background-color: #182030;\n }\n .SelectMenu-tab:not([aria-checked=true]):not([aria-selected=true]):hover {\n color: #d2d2d2;\n background-color: #303030;\n }\n .SelectMenu-tab:not([aria-checked=true]):active {\n color: #d2d2d2;\n background-color: #181818;\n }\n }\n @media (hover: none) {\n .SelectMenu-item:active, .SelectMenu-item:focus {\n background-color: /*[[base-color]]*/;\n color: #fff;\n }\n .SelectMenu-item {\n -webkit-tap-highlight-color: /*[[base-color]]*/;\n }\n }\n /* org page graphs - https://github.com/StylishThemes */\n rect[style*=\"#gradient-\"] {\n fill: /*[[base-color]]*/ !important;\n }\n /* contribution progress bars on user page */\n .contribution-activity-listing .progress-bar[style*=\"7bc96f\"],\n .facebox-close:hover {\n opacity: 1 !important;\n }\n .contribution-activity-listing .progress-bar[style*=\"c6e48b\"], .facebox-close {\n opacity: .75 !important;\n }\n .notifications .read .avatar img {\n opacity: .7;\n }\n /* contribution calendar */\n .contribution-activity-listing .progress-bar[style*=\"background-color\"] {\n background-color: /*[[base-color]]*/ !important;\n fill: /*[[base-color]]*/ !important;\n }\n .contrib-legend .legend li {\n box-shadow: none !important;\n }\n .contrib-legend [style*=\"#ebedf0\"], .calendar-graph [fill=\"#ebedf0\"] {\n background: var(--color-calendar-graph-day-bg) !important;\n fill: var(--color-calendar-graph-day-bg) !important;\n }\n .contrib-legend [style*=\"#9be9a8\"], .calendar-graph [fill=\"#9be9a8\"] {\n background: var(--color-calendar-graph-day-L1-bg) !important;\n fill: var(--color-calendar-graph-day-L1-bg) !important;\n }\n .contrib-legend [style*=\"#40c463\"], .calendar-graph [fill=\"#40c463\"] {\n background: var(--color-calendar-graph-day-L2-bg) !important;\n fill: var(--color-calendar-graph-day-L2-bg) !important;\n }\n .contrib-legend [style*=\"#30a14e\"], .calendar-graph [fill=\"#30a14e\"] {\n background: var(--color-calendar-graph-day-L3-bg) !important;\n fill: var(--color-calendar-graph-day-L3-bg) !important;\n }\n .contrib-legend [style*=\"#216e39\"], .calendar-graph [fill=\"#216e39\"] {\n background: var(--color-calendar-graph-day-L4-bg) !important;\n fill: var(--color-calendar-graph-day-L4-bg) !important;\n }\n .calendar-graph .days-selected rect.day.active {\n stroke: #ddd !important;\n }\n .calendar-graph rect.day:hover {\n stroke: #fff !important;\n }\n .calendar-graph rect.day {\n outline: none !important;\n }\n .contrib-person path {\n fill-opacity: .6;\n }\n .progress-bar.anim-grow-x, .dev-hero, .header-search-key-slash,\n input[src$=\"with-facebook.png\"], #parallax_field, #parallax_illustration,\n figure .callout-permalink-big-image, figure .callout-permalink-stacked-image {\n filter: brightness(75%) !important;\n }\n img#parallax_error_text, div img[alt*=\"404\"] {\n filter: invert(100%) hue-rotate(180deg) brightness(120%) !important;\n }\n img[src*=\"data:image/jpeg;base64,/9j/4AAQSkZJRgA\"] {\n filter: brightness(90%);\n }\n img[src*=\"//render.githubusercontent.com/render/math\"] {\n filter: invert(90%);\n background-color: transparent;\n }\n .header-search-key-slash {\n filter: grayscale(100%) contrast(1.5) !important;\n }\n /* Activity Overview on userpage */\n .activity-overview-axis, .activity-overview-point {\n stroke: /*[[base-color]]*/ !important;\n }\n #user-activity-overview .js-highlight-blob {\n stroke: /*[[base-color]]*/ !important;\n fill: /*[[base-color]]*/ !important;\n opacity: .4 !important;\n }\n /* invert (rgb) */\n #header .logo, img[src=\"/images/logo@2x.png\"], .site-logo a,\n .github-jobs-promotion a.jobs-logo strong, iframe[src*=\"polldaddy.com\"],\n .jstree-node:not(.jstree-leaf) > .jstree-icon.jstree-ocl,\n .swipe .swipe-frame .swipe-bar .top-handle,\n .swipe .swipe-frame .swipe-bar .bottom-handle,\n .onion-skin .controls .transparent, .onion-skin .controls .opaque,\n .onion-skin .controls .slider .slider-track,\n .onion-skin .controls .slider .slider-track .dragger,\n img[src$=\"favicons.githubusercontent.com/github.com\"],\n img[src$=\"invertocat.png\"], .ghd-invert, #footer .github img,\n #com span.octicon:not(.octicon-comment-discussion),\n .developer-thanks-image img, img[alt=\"GitHub Support\"] {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n .code-navigation-banner .code-navigation-banner-illo {\n filter: invert(900%) hue-rotate(180deg) contrast(70%) brightness(110%) !important;\n }\n /* code coverage */\n /* example: https://github.com/go-gitea/gitea/pull/6969 */\n img[data-canonical-src^=\"https://codecov.io\"][alt=\"Impacted file tree graph\"] {\n filter: invert(92%) hue-rotate(180deg) saturate(250%) !important;\n }\n /* marketplace + help + feature img invert */\n img[src*=\"marketplace-illustration-01.svg\"],\n img[src*=\"marketplace-illustration-02.svg\"],\n svg [data-name=\"Layer 2\"] #Layer_5[data-name=\"Layer 5\"],\n .illoTeam svg [data-name=\"Layer 2\"], .illoIndiv #Layer_2[data-name=\"Layer 2\"],\n svg [data-name=\"Layer 2\"] g[data-name=\"octocat header\"],\n svg[viewBox=\"0 0 1461.5 677.84\"][width=\"700\"],\n .feature-preview-dialog svg[fill=\"none\"],\n div[data-url*=\"/notifications/beta\"] img[src*=\"-zero.svg\"],\n div[data-url*=\"/notifications/beta\"] img[src*=\"saved-blank.svg\"] {\n filter: invert(85%) hue-rotate(-180deg) brightness(125%) contrast(85%) !important;\n }\n .action-logo::after {\n filter: invert(100%) hue-rotate(180deg) brightness(350%) !important;\n }\n img[alt=\"FOSSA Status\"], img[data-canonical-src*=\"prod/timeseries/\"],\n a[href$=\"vote\"] img[data-canonical-src*=\"/poll/\"], #parallax_error_text:not(p),\n img[data-canonical-src*=\"img.shields.io\"][data-canonical-src*=\"style=social\"],\n img[alt=\"Mona Lisa\"] {\n filter: invert(90%) hue-rotate(180deg) !important;\n }\n /* prevent background color inverting to bright color on opaque images */\n /* example: social buttons on https://github.com/facebook/jest#readme */\n img[alt=\"FOSSA Status\"],\n img[data-canonical-src*=\"img.shields.io\"][data-canonical-src*=\"style=social\"] {\n background: none !important;\n }\n .container-xl[id] img {\n z-index: 100 !important;\n }\n /* GeoJSON maps */\n /* https://github.com/benbalter/dc-maps/blob/master/maps/embassies.geojson */\n /* https://github.com/colemanm/hurricanes/blob/master/fl_2004_hurricanes.geojson */\n .leaflet-tile-container img {\n filter: invert(100%) hue-rotate(180deg) brightness(150%) !important;\n }\n .leaflet-marker-pane img:not(.leaflet-marker-icon), .gundamcat {\n filter: brightness(.8) !important;\n }\n .leaflet-popup-content-wrapper, .map-legends, .map-tooltip {\n background: var(--color-bg-secondary);\n }\n .leaflet-container {\n color: var(--color-text-secondary);\n }\n .leaflet-popup-tip {\n border-top-color: var(--color-bg-secondary);\n }\n .marker-properties tr:nth-child(2n) th, .marker-properties tr:nth-child(2n) td {\n background-color: var(--color-bg-tertiary);\n }\n .marker-properties, .marker-properties th, .marker-properties td {\n border: 1px solid var(--color-border-primary);\n }\n /* invert #fff to #181818 */\n /* https://github.com/sujitpal/statlearning-notebooks/blob/master/src/chapter2.ipynb */\n .project-preview-img img, img[src$=\"bg-callout.svg\"],\n img[data-canonical-src*=\"saucelabs.com/browser-matrix\"],\n img[src*=\"images/modules/checks\"], img[src$=\"profile-first-pr.png\"],\n img[src$=\"profile-joined-github.png\"], img[src$=\"profile-first-repo.png\"],\n img[src$=\"profile-first-issue.png\"], .github-jobs-logo strong, .leaflet-bar,\n .leaflet-control-attribution {\n filter: invert(90.5%) hue-rotate(180deg) saturate(200%) !important;\n }\n /* workaround filter creating a stacking context */\n .contribution-first-issue, .contribution-first-pull-request,\n .contribution-first-repository {\n opacity: .999 !important;\n }\n /* brighten language colors */\n .language-color, .repo-language-color {\n filter: brightness(125%) !important;\n }\n /* soft badges */\n .box-title-count {\n background-color: #484848 !important;\n color: #ccc !important;\n }\n /* Unicorn page - https://github.com/azadkuh/sqlite-amalgamation/blame/master/sqlite3.c */\n body > .container > p {\n color: #ccc;\n }\n /* change foreground color of yellow boxes */\n .Toast--warning .Toast-icon {\n color: #222;\n }\n /* change forground color of disabled things */\n .btn-primary.disabled, .btn-primary:disabled,\n .btn-primary[aria-disabled=\"true\"], .btn.disabled, .btn:disabled,\n .btn[aria-disabled=\"true\"] {\n color: hsla(0, 0%, 100%, .3);\n }\n /* svg styling */\n line, rect, path {\n shape-rendering: geometricPrecision !important;\n }\n .js-graph-punchcard svg.viz {\n background: transparent !important;\n border: none !important;\n }\n .reorderable-task-lists .markdown-body .task-list-item .drag-handle {\n fill: #c0c0c0 !important;\n }\n /* Firefox: Exclude text inside an svg loaded through an img, as seen in svg badges */\n *:not(img) text, circle.day {\n fill: #ccc !important;\n }\n circle.day:hover {\n fill: #fff !important;\n }\n path.js-diff-placeholder {\n fill: #282828 !important;\n }\n .prose-diff .changed .added, .prose-diff .changed ins,\n .prose-diff .changed ins code, .prose-diff .changed ins pre {\n background: #002800;\n border-bottom: 1px solid #373;\n }\n #contributors-master svg.viz {\n display: block !important;\n }\n g.dots circle {\n stroke: #222 !important;\n }\n .traffic-graph g.axis:not(.views):not(.unique) g.tick:not(:nth-child(15)):not(:first-of-type) line,\n g.axis path, line.axis, svg:not(.vis) g.axis line {\n stroke: #444 !important;\n }\n svg .path:not(.total):not(.unique):not(.views) {\n stroke: #aaa !important;\n }\n .workflow-string--crossover svg path[stroke=\"#D1D5DA\"] {\n stroke: #404040 !important;\n }\n #commit-activity-detail path.path,\n .traffic-graph g.x.axis g.tick:first-of-type line {\n stroke: #1db34f !important;\n }\n [style*=\"stroke: #dbab09\"], [stroke=\"#dbab0a\"] {\n stroke: #cb4 !important;\n }\n .traffic-graph g.x.axis g.tick:nth-child(15) line {\n stroke: #1d7fb3 !important;\n }\n svg.tick {\n fill: #444 !important;\n }\n svg.arrow[stroke=\"#1277eb\"], svg path[stroke=\"#1074E7\"] {\n stroke: /*[[base-color]]*/ !important;\n }\n .features-branch-diagram path[stroke=\"#c6d9ed\"],\n .features-branch-diagram path[stroke=\"#4182C4\"],\n .features-branch-diagram div:not(.active) .mega-octicon {\n stroke: /*[[base-color]]*/ !important;\n color: /*[[base-color]]*/ !important;\n }\n .features-branch-diagram circle[fill=\"#4183c4\"],\n .repo-list-stats a.issues:hover svg {\n fill: /*[[base-color]]*/ !important;\n }\n .features-branch-diagram circle[stroke=\"#ffffff\"] {\n stroke: #222 !important;\n }\n rect.map-background, .audit-log-map {\n fill: #1e4062 !important;\n background: #1e4062 !important;\n }\n path.land {\n stroke: #17334f !important;\n }\n circle.audit-point {\n fill: #742d14 !important;\n stroke: #57210f !important;\n }\n .graphs .selection .selection {\n fill: #888 !important;\n stroke: #888 !important;\n }\n /* monochrome backgrounds */\n .label-select-menu div.labelstyle-000000.selected {\n background: #282828 !important;\n }\n div#common-issues ul li a:hover, .rss-subscribe:hover {\n background-color: #282828 !important;\n }\n .jumbotron-codelines {\n background-color: #222 !important;\n }\n .community-checklist .progress-bar .progress {\n background-color: #333;\n }\n .profile-timeline.discussion-timeline::before,\n .profile-timeline.discussion-timeline .profile-timeline-month-heading::after,\n div[style*=\"background-color: #eaecef\"] {\n background: #343434 !important;\n }\n .oauth-permissions-details .permission-summary em.highlight {\n background: rgba(68, 68, 68, .5);\n color: #c6c6c6;\n }\n .labels .label-neutral, li.ssh-key .ssh-key-state-indicator.not-recent {\n background: #666 !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/search?q=test&unscoped_q=test */\n .Counter--gray {\n background: #999;\n color: #000;\n }\n .diverge-widget .separator {\n background: #ccc !important;\n }\n .menu-item.selected::before {\n background: #eee !important;\n }\n .qr-code-table, .qr-code-table .white {\n background: #fff !important;\n }\n /* actions in issues - this style needs to be after .bubble */\n .action-bubble .bubble,\n /* https://github.com/StylishThemes/GitHub-Dark/community/license/new?branch=master&template=mit */\n body .CommunityTemplate-header,\n [data-url$=\"recently_touched_branches_list\"],\n .merge-status-list .status-actions:hover, body > .application-main > .bg-gray {\n background: transparent !important;\n }\n .btn-mktg {\n background-color: rgba(/*[[base-color-rgb]]*/, .8);\n border-color: /*[[base-color]]*/;\n }\n .btn-mktg:hover {\n background-color: rgba(/*[[base-color-rgb]]*/, 1);\n border-color: /*[[base-color]]*/;\n }\n .btn-outline-mktg {\n background-color: transparent;\n border-color: rgba(/*[[base-color-rgb]]*/, .9);\n color: rgba(/*[[base-color-rgb]]*/, .9);\n }\n .btn-outline-mktg:hover {\n background-color: transparent;\n border-color: rgba(/*[[base-color-rgb]]*/, 1);\n color: rgba(/*[[base-color-rgb]]*/, 1);\n }\n .MarketplaceAnnouncement .btn-outline-mktg {\n background-color: transparent;\n border-color: #eee;\n color: #eee;\n }\n .MarketplaceAnnouncement .btn-outline-mktg:hover {\n color: #fff;\n border-color: #fff;\n }\n .MarketplaceAnnouncement {\n color: #fff;\n }\n .full-commit p.commit-title {\n color: #c6c6c6;\n }\n .subnav-item.selected, .subnav-item[aria-current]:not([aria-current=false]),\n .subnav-item[aria-selected=true] {\n border-color: /*[[base-color]]*/;\n }\n /* blue box */\n .github-jobs-promotion p, .octotip, .bootcamp h1, .bootcamp-body,\n .owners-notice, .blob-history, .new-user-avatar-cta, .jstree-wholerow-clicked,\n .file-history-tease, .feature-banner, .hook-delivery-guid, .RecentBranches,\n .signup-prompt-bg, ul.search-results li .label,\n div[style*=\"background-color: #044d6e\"],\n body[class=\"page-responsive\"] .bg-blue-light,\n .repository-content > .Box--condensed > .Box-body.bg-blue-light,\n .timeline-comment.current-user .previewable-comment-form .comment-form-head.tabnav {\n background: #182030 !important;\n }\n .topic-tag-contrast, .topic-tag-contrast .delete-topic-link, .topic-tag {\n background: #182030;\n }\n .commit-ref, .branch-name {\n background: #182030;\n color: #9daccc;\n border: 1px solid #246;\n }\n aside [style*=\"background-color: #4764f1\"] .text-white {\n background-color: #182030 !important;\n }\n .repo-file-upload-progress .repo-file-upload-meter, .topic-tag-link:hover,\n .delete-topic-button:hover, .topic-tag-contrast .delete-topic-link:hover {\n background: #273045;\n }\n /* repo page last commit */\n .Box-header--blue {\n background-color: var(--color-bg-info);\n border-color: var(--color-box-blue-border);\n }\n .new-user-avatar-cta, .blob-history, .feature-banner,\n .recently-touched-branches, .recently-touched-branches li,\n .project-updated-message, .timeline-comment-label.collaborator-comment,\n .hook-delivery-guid .octicon, .hook-delivery-guid a, a.topic-tag,\n .RecentBranches, .RecentBranches-item-link, ul.search-results li .label,\n .markdown-format table th, div[style*=\"background-color: #044d6e\"],\n .subset-files-tab .stale-files-tab-link,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header .link-gray,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header .text-gray,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header .Link--secondary,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header-text code a,\n .timeline-comment.current-user:not(.is-internal) .color-text-secondary {\n color: #9daccc !important;\n }\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-action,\n .commit-ref a, a.branch-name {\n color: #9daccc;\n }\n .RecentBranches-item, .commit-ref .user {\n color: #6d7c9c;\n }\n .github-jobs-promotion p, .octotip, .bootcamp .bootcamp-body, .bootcamp h1,\n .owners-notice, .new-user-avatar-cta, .file-history-tease, .feature-banner,\n .recently-touched-branches, .timeline-progressive-disclosure-items button,\n .RecentBranches, .js-tag-input-tag, ul.search-results li .label,\n .topic-tag-action {\n border: 1px solid #246 !important;\n }\n .repo-file-upload-progress, .project-updated-message,\n .topic-tag-action .add-topic-button, .topic-tag-action .remove-topic-button,\n .commit-desc + .commit-branches,\n .pricing-matrix-table .pricing-matrix-table-dark,\n .repository-content > .Box--condensed:not(#readme):not(.file-holder),\n .border-blue, body[class=\"page-responsive\"] .border-blue,\n .timeline-comment.current-user .tabnav-tab.selected {\n border-color: #246 !important;\n }\n .topic-tag-contrast .delete-topic-link, .full-commit,\n .full-commit .commit-meta {\n border-color: #246;\n }\n .blob-history, .recently-touched-branches li {\n border-bottom-color: #246 !important;\n }\n .blob-history, .file-history-tease .participation {\n border-top: 1px solid #246 !important;\n }\n #new_hook .fields {\n border-width: 0 !important;\n }\n .commit-icon .octicon {\n border-radius: 100% !important;\n }\n /* original colors */\n .discussion-item-integrations-callout .discussion-item-icon {\n background: #4095c6 !important;\n }\n /* notebooks */\n .input_prompt {\n color: hsla(234, 100%, 65%, 1) !important;\n }\n .output_prompt {\n color: hsla(0, 100%, 65%, 1) !important;\n }\n /* gradient */\n /* file drag&drop overlay */\n .repo-file-upload-tree-target {\n background: radial-gradient(ellipse at center, #000 0%, rgba(0, 0, 0, .6) 65%, rgba(0, 0, 0, .6) 100%) !important;\n }\n .TimelineItem-break {\n background: linear-gradient(to bottom, var(--color-bg-canvas) 30%, transparent 80%) !important;\n }\n /* light grey gradient */\n .signup-button:hover, a.signin:hover, .hero .textographic,\n .hero .screenographic, .box-action:active,\n .clone-url-button.selected > .clone-url-link:hover, ul#bootcamp li a:hover h4 {\n background: linear-gradient(#303030, #282828) !important;\n border-color: #484848 !important;\n }\n .clone-url-button > .clone-url-link {\n border-color: #383838;\n }\n .project-issue-body-blur {\n background: linear-gradient(to top, #181818, rgba(0, 0, 0, 0)) !important;\n }\n .bg-custom-gradient {\n background-image: linear-gradient(180deg, #1c1c1c, rgba(0, 0, 0, 0)) !important;\n }\n .billing-per-seat-callout::after {\n box-shadow: 1px -1px 0 0 #343434 !important;\n }\n main [style=\"background: linear-gradient(to top, rgba(255,255,255,1), rgba(255,255,255,0));\"] {\n background: linear-gradient(to top, #181818, transparent) !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1205 */\n [style*=\"background: #DBEDFF\"] {\n background: rgba(255, 255, 255, .1) !important;\n }\n .ScreenshotCarousel-navitem.selected {\n box-shadow: inset 0 0 10px rgba(255, 255, 255, .05) !important;\n }\n /* commits page - committer icon */\n .commits-list-item .committer-avatar {\n box-shadow: -2px -2px 0 rgba(0, 0, 0, .4) !important;\n }\n .Header .header-search-wrapper.focus {\n box-shadow: none !important;\n }\n .box-shadow {\n box-shadow: none !important;\n }\n /* box shadow below attach box - https://github.com/StylishThemes/GitHub-Dark/releases/new */\n /* + remove box shadowns on buttons and the like */\n .upload-progress, .social-count, .btn, .btn-outline.disabled,\n .btn-outline:disabled, .btn-outline[aria-disabled=\"true\"], .btn:active,\n .btn-blue:active {\n box-shadow: none;\n }\n /* https://github.com/team inline HTML fixes */\n .bg-white[style*=\"box-shadow: 0 0 20px 20px #ffffff\"] {\n box-shadow: 0 0 20px 20px #181818 !important;\n }\n [href=\"#organizations\"][style*=\"background-color: #fff\"] {\n background-color: transparent !important;\n }\n .Box-header[style*=\"background-color: #FFF3FA\"] {\n background-color: #222 !important;\n }\n .Box-header[style*=\"border-color: #F9B3DD\"] {\n border-color: #343434 !important;\n }\n .Header-link {\n color: #c6c6c6;\n }\n .issues-reset-query-icon {\n color: #181818;\n background: #949494;\n }\n .donut-chart [style*=\"fill: none\"], .workflow-string svg,\n .workflow-success circle, .workflow-success path {\n fill: none !important;\n }\n /* Alerts and activity, remove background gradient */\n .metabox .editable-text:hover, #inbox .list .item .title span,\n .Subhead.border-bottom-0 {\n background-color: transparent !important;\n border: none !important;\n }\n /* Panels */\n #posts #rss, .signup-button, .hero h1, .plan.personal, .caption,\n .centered-graphic, .login_form h1 {\n background-color: /*[[base-color]]*/ !important;\n border-color: /*[[base-color]]*/ !important;\n }\n /* Red panel */\n .majorproblem .pageheader_wrap, .error_box, .btn-close-issue, .closed-issues,\n .topic-tag-action .remove-topic-button:hover,\n .menu-item-danger.navigation-focus, .menu-item-danger.selected:hover,\n .menu-item-danger.selected.navigation-focus {\n background-color: #d82828 !important;\n border-color: #383838 !important;\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=\"true\"] {\n background: #181818;\n color: rgba(216, 40, 40, .4);\n box-shadow: none;\n }\n .btn-close-issue:hover, .minibutton.danger:hover, .remove-topic-button:hover {\n background: #d82828;\n border-color: #b00;\n }\n .deprecation-banner {\n background: #200;\n border-color: #d82828;\n }\n .mergeable-dirty .bubble, .mergeable-dirty .merge-status-icon,\n .dangerzone > h3 {\n background: #d82828 !important;\n }\n .block-diff-deleted, .text-diff-deleted .block-diff-neutral {\n background: #b22 !important;\n }\n /* pink */\n /* https://github.com/StylishThemes/GitHub-Dark/issues/949 */\n /* Github uses !important inline styles on some of these elements which are\n impossible to overrides via userstyle */\n [style*=\"border-bottom: 1px solid #f9b3dd\"] {\n border-bottom: 1px solid #c49 !important;\n }\n [style*=\"border: 1px solid #f9b3dd\"], [style*=\"border: 1px solid #ec6cb9\"] {\n border: 1px solid #c49 !important;\n }\n [style*=\"border: 1px solid #f9b3dd\"] .text-gray-dark {\n color: #333 !important;\n }\n [style*=\"background: #ffeef8\"], [style*=\"background-color: #ffeef8\"] {\n background-color: #170711 !important;\n }\n /* brown */\n #feedHeaderContainer, .feedBackground, .infotip, .form-actions .tip,\n .mini-callout, .snippet em, #message .sent, .notification, .callout, .ejector,\n #issues_search .results em, .bootcamp-help ul li, .btn-download,\n .feature-tabs .tab-button, .plan.free, #message.minor, .chzn-results li em,\n #missing-readme, .page-notice, .facebox-alert, .deprecation-warning,\n .branch-status.status-pending .discussion-item-icon,\n .discussion-event-status-renamed .discussion-item-icon,\n .discussion-topic .branch-status.status-pending,\n .discussion-item-review.is-pending .file-header,\n .discussion-item-review.is-pending .comment-form-head.tabnav,\n .timeline-comment.unread-item .timeline-comment-header, .Label.bg-yellow,\n .code-list-item-private .blob-num {\n background-color: #261d08 !important;\n border-color: #542 !important;\n color: #ddd !important;\n }\n .discussion-item-review.is-pending .file, .timeline-comment.unread-item,\n .timeline-comment.unread-item .timeline-comment-label,\n .review-comment .pending-batched-suggestion-label,\n .is-pending .review-summary-form-wrapper, .code-list-item-private .file-box {\n border-color: #542 !important;\n }\n .timeline-comment-wrapper .timeline-comment.unread-item::before {\n border-right-color: #542 !important;\n }\n .timeline-comment-wrapper .timeline-comment.unread-item::after {\n border-right-color: #261d08 !important;\n }\n .timeline-comment-wrapper {\n border-top-color: transparent;\n border-bottom-color: transparent;\n }\n #toc .octicon-diff-modified, .secret .repo-label span, .api .s2 {\n color: #b74 !important;\n }\n .deprecation-warning a {\n color: #c97 !important;\n }\n .code-list-item-private .divider .blob-code,\n .code-list-item-private .divider .blob-num,\n .js-notification-search-autocomplete-results .bg-yellow-light,\n .card-filter-autocomplete-dropdown .bg-yellow-light {\n background-color: #261d08 !important;\n }\n /* semi-transparent brown */\n .compare-pr-placeholder, .compare-cutoff, .diff-cutoff,\n .markdown-body li.added.moved, .repo-private-label, .label-private,\n .signed-out-comment, .commits-list-item em, .unsupported-browser,\n .prereceive-feedback, .code-list em, .issue-list em, .user-list em,\n .wiki-list em, .blob-code .bg-yellow-light,\n .codesearch-results #code_search_results .bg-yellow-light {\n background: rgba(51, 34, 17, .4) !important;\n border: 1px solid #542 !important;\n color: #ddd !important;\n }\n .stale-files-tab {\n background-color: #261d08;\n border: 1px solid #542;\n }\n /* yellow text */\n /* inline style, note this does not work when color is not first */\n /* https://github.com/StylishThemes/GitHub-Dark/issues/952#issuecomment-501451675 */\n [style^=\"color: #d3ac3b\"] {\n color: #cb4 !important;\n }\n /* .bg-pending might be a GitHub bug as it sets the fg */\n .text-pending, .text-renamed, .bg-pending, .page-new-repo .octicon-lock,\n body[class=\"page-responsive\"] .repo-list .private .octicon-lock,\n .menu a .octicon.color-yellow-7 {\n color: #cb4;\n }\n .archived-project-cards-pane .project-card .archived-header {\n color: #fbca04;\n }\n /* yellow background */\n .Label--outline.bg-yellow-light,\n .review-comment .pending-batched-suggestion-label {\n background: #302808 !important;\n }\n .border-bottom.bg-yellow-light {\n background: #302808 !important;\n border-color: #542 !important;\n }\n /* green */\n /* labels */\n #forkqueue .legend .clean, #revisions ul li.current, .excerpt, .plan.business,\n .popout, #statusbar, .clean td, #download_button, .status-box.good a,\n .new-issues, .new-pulls, .mergeable-clean .merge-status-icon,\n .settings-email .default, .repo-owner-comment .comment-header-tag,\n .mergeable-clean .bubble, .gh-header-status.open,\n .branch-status.status-success .discussion-item-icon, .boxed-group-success,\n #message.good, .add-topic-button:hover,\n .topic-tag-action .add-topic-button:hover {\n background: #163 !important;\n border-color: #041 !important;\n }\n main .note.bg-green-light {\n background: #002800 !important;\n border-color: #060 !important;\n }\n /* Green border */\n .billing-confirmation-box {\n border-color: #083 !important;\n }\n .border.border-green {\n border-color: #060 !important;\n }\n /* Green text */\n /* inline style, note this does not work when color is not first */\n /* https://github.com/StylishThemes/GitHub-Dark/issues/952#issuecomment-501451675 */\n [style^=\"color: #28a745\"] {\n color: #6cc644 !important;\n }\n .text-open, .text-success, .insertions, .cadd, .gi .diff-line-num,\n .authors-and-code .insertions, ul.summary-stats li .octicon-git-branch-create,\n ul.summary-stats li .octicon-issue-opened, #toc .octicon-diff-added,\n .setup-info-module .features-list .octicon, .setup-form-container .secure,\n .highlight .gi, .type-icon-state-open, .release-label.latest a,\n .release .Label--latest a, .menu a .octicon.text-green {\n color: #6cc644 !important;\n }\n /* bright green background */\n .block-diff-added, .text-diff-added .block-diff-neutral {\n background: #6cc644 !important;\n }\n .noproblems .pageheader_wrap, a.new-repo:hover {\n background: #373 !important;\n }\n /* New additions */\n .repo-owner-tag .tag {\n background: #070 !important;\n color: #ddd !important;\n }\n /* orange */\n #user-links .unread_count, .minorproblem .pageheader_wrap {\n background: rgba(203, 108, 0, .8) !important;\n }\n .text-orange, .release-label.prerelease, .release .Label--prerelease {\n color: #f3582c !important;\n }\n .release-label.prerelease, .release .Label--prerelease {\n border-color: #f66a0a !important;\n }\n /* pjax loading */\n .pjax-loader-bar .progress {\n background: /*[[base-color]]*/ !important;\n box-shadow: 0 0 10px /*[[base-color]]*/ !important;\n }\n ul.view-modes-menu {\n background-image: url(\"data:image/gif;base64,R0lGODlhBwAEAIAAACIiIv///yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==\") !important;\n }\n .mini-icon-windows::before {\n background-position: -18px 0 !important;\n }\n /* Repo list (https://github.com/{user}?tab=repositories) */\n .repo-list-item p, .repo-list-item .repo-list-stats {\n position: relative !important;\n z-index: 1 !important;\n }\n /* GitHub Enterprise (GHE) stuff */\n body.enterprise .repohead.experiment-repo-nav {\n background: rgba(24, 24, 24, .4);\n }\n body.enterprise .timeline-comment-wrapper .timeline-comment.current-user::before {\n border-right-color: #246;\n }\n body.enterprise .timeline-comment-wrapper .timeline-comment.current-user::after {\n border-right-color: #182030;\n }\n body.enterprise .timeline-new-comment .timeline-comment::before {\n border-right-color: #404040;\n }\n body.enterprise .timeline-new-comment .timeline-comment::after {\n border-right-color: var(--ghd-bg-color);\n }\n body.enterprise .commit-tease {\n background-color: #182030;\n border-color: #246;\n }\n /* HACK: Fix review comment timeline */\n /* https://github.com/nodejs/node/pull/8519#r78637092 */\n .review-comment-contents::after, .review-comment.is-comment-editing::after {\n z-index: 0 !important;\n }\n .review-comment .avatar {\n position: relative !important;\n z-index: 1 !important;\n background: #181818 !important;\n box-shadow: 0 0 0 4px #181818 !important;\n }\n /* center the dot icon inside green discussion timeline icons */\n .discussion-item-reopened .discussion-item-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .flash-error {\n color: #d82828;\n }\n /* Make text selection work over file path separators because in Firefox */\n /* a text selection can not start over a pseudo element. The precise values */\n /* are to match the rendering of GitHub's single-space pseudo contents */\n .breadcrumb .separator {\n margin-left: .283em;\n margin-right: .283em;\n }\n .breadcrumb .separator::after, .breadcrumb .separator::before {\n content: none;\n }\n /* Hack to add a background to the sticky toolbar on the pr files tab when using unified diffs */\n body:not(.full-width) .pr-toolbar.is-stuck + .toolbar-shadow::before {\n content: \"\";\n position: absolute;\n top: -60px;\n left: 0;\n right: 0;\n height: 60px;\n background: #181818;\n box-shadow: 0 0 .75rem rgba(0, 0, 0, .7);\n }\n .gh-header-shadow {\n border: none !important;\n box-shadow: 0 0 .75rem rgba(0, 0, 0, .7) !important;\n }\n .participation-graph svg {\n background: transparent !important;\n opacity: .1 !important;\n z-index: 0 !important;\n }\n .inbox-zero-octocat, .network-graph-container, img.TenYears-hero {\n opacity: .6 !important;\n }\n .search .minibutton span {\n background-position: center -95px !important;\n }\n /* history expand buttons */\n .commit .minibutton.expander-minibutton span {\n background-position: 50% -45px !important;\n }\n .commit.open .minibutton.expander-minibutton span {\n background-position: 50% -145px !important;\n }\n /* pull request avatar bubble */\n .avatar-bubble::before, .discussion-bubble-content::before {\n border-color: transparent #333 transparent transparent !important;\n }\n /* octocat spinners */\n img[src*=\"octocat-spinner\"], img[src=\"/images/spinner.gif\"],\n .profile-picture-spinner {\n width: 0 !important;\n height: 0 !important;\n }\n img[src*=\"octocat-spinner\"], img[src=\"/images/spinner.gif\"], .facebox-loading,\n .branch-action-body .spinner, .status-indicator-loading,\n .ajax-pagination-form.loading .ajax-pagination-btn::after,\n .profile-picture-spinner, .more-repos-link.is-loading,\n auto-check .is-autocheck-loading {\n background-image: url('data:image/svg+xml;utf8,') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: 50% 50% !important;\n }\n .more-repos-link.is-loading {\n background-repeat: no-repeat !important;\n background-position: 50% 50% !important;\n background-size: 16px 16px !important;\n }\n auto-check .is-autocheck-loading {\n background-size: 16px 16px !important;\n background-position: 97% 50% !important;\n }\n /* Timeline Load More squiggly line */\n /* https://github.com/go-gitea/gitea/pull/8346#issuecomment-638578779 */\n /* https://github.com/swagger-api/swagger-ui/pull/6030#issuecomment-638412978 */\n .pagination-loader-container {\n background: transparent url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NHB4IiBoZWlnaHQ9IjM0cHgiIHZpZXdCb3g9IjAgMCA0NCAzNCI+PHBvbHlsaW5lIGZpbGw9IiM0NDQiIHBvaW50cz0iMCwyMSAyMiw4IDQ0LDIxIDQ0LDI2IDIyLDEzIDAsMjYiLz48L3N2Zz4NCg==\") repeat-x left center/22px 17px !important;\n }\n img[src*=\"octocat-spinner\"][width=\"128\"] {\n padding: 64px !important;\n }\n img[src*=\"octocat-spinner\"][width=\"64\"],\n .profile-picture-spinner\n img[src=\"/images/spinner.gif\"] {\n padding: 32px !important;\n }\n img[src*=\"octocat-spinner\"][width=\"32\"] {\n padding: 16px !important;\n }\n img[src*=\"octocat-spinner\"][width=\"16\"] {\n padding: 8px !important;\n }\n .sponsors-questions::after {\n opacity: .35;\n }\n /* remove code view padding */\n .Box-body.blob-wrapper {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n /* remove actions editor padding */\n form[action*=\"/.github/workflows/\"] .commit-create {\n padding-top: 0 !important;\n }\n #searchfield {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAMAAABFNRROAAAAM1BMVEUAAABKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkrmvr7+AAAAEXRSTlMAmEgOJpKQimpgRHVzVk8fFp8jXkwAAABRSURBVAjXVY1JDsAwCAMxhGxNl/+/toVEKpmLNcLCRJRqKTXRhOGwS4KyCCv8eoBnY1hkiIUgb6ah2THWly7SFS0uAKfZWm+mP59eUfNNgYdehjcBh7PIFcgAAAAASUVORK5CYII=\") !important;\n background-repeat: no-repeat !important;\n background-position: 8px center !important;\n }\n /* front page: 'more' spinner */\n .ajax-pagination-form.loading .ajax-pagination-btn {\n position: relative !important;\n border-color: #343434 !important;\n background: #181818 !important;\n }\n .ajax-pagination-form.loading .ajax-pagination-btn::after {\n content: \"\" !important;\n position: absolute !important;\n width: 16px !important;\n height: 16px !important;\n left: 50% !important;\n top: 50% !important;\n transform: translate(-50%, -50%) !important;\n }\n .branch-action-body .spinner, div.facebox-loading, .status-indicator-loading {\n background-position: center center !important;\n width: 100% !important;\n background-repeat: no-repeat !important;\n }\n /* dropdown arrows */\n /* https://github.com/account/upgrade */\n .form-select {\n background: #181818 url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAQAAAAua3X8AAAARklEQVR4AWNABWcazjQg8zGl/wNhA15piBL80gglmNKYSjClMZUgpDGVwKXxKBl4QNiRBLxJIKAIBzXhyCIc3YQTDMEkBwBplPJRxEMa4wAAAABJRU5ErkJggg==\") no-repeat right 8px center !important;\n background-size: 8px 10px !important;\n }\n .form-select:disabled {\n background-color: #282828 !important;\n color: #555 !important;\n }\n /* .coupon-form-body remove bg-img + tweak border color; issue #1199 */\n .coupons .coupon-form-body {\n background-image: none;\n border-color: #343434;\n }\n /* no border */\n .multiple-avatars, .multiple-avatars::before,\n .simple-conversation-list>li:first-child, .gobutton.with-comments .sha,\n .usage-bar dd, .setup-form-container .fieldgroup .fields,\n .inline-comments .line-comments, #adv_code_search .search-page-input,\n .fullscreen-overlay textarea, .file .image .border-wrap,\n .site-search .chromeless-input, .profile-timeline-card-wrapper,\n .AvatarStack--right .avatar, .AvatarStack-body .avatar,\n .sidebar-notifications .thread-subscription-status,\n .repository-lang-stats-graph .language-color:not(:first-child) {\n border: none !important;\n }\n .dashboard-tabs a {\n border-left: 0 !important;\n border-right: 0 !important;\n }\n .js-details-container.navigation-focus .gobutton {\n background: linear-gradient(#444, #222) !important;\n }\n /* no top border radius */\n table.files {\n border-top-left-radius: 0 !important;\n border-top-right-radius: 0 !important;\n }\n /* add border */\n .issues-list, .pulls-list-group, .branch-infobar,\n .pagehead.repohead h1 .repo-label span, .api pre, .coupon-icon {\n border: 1px solid #484848;\n }\n #graph-shots li > p, .logo-box, .branch-infobar,\n .discussion-item-body .outdated-comment .file-header,\n .repository-content > .Box--condensed > .Box-body.bg-blue-light {\n border-bottom: none !important;\n }\n .pull-info, .branch-link, .milestone-list .progress-bar {\n border: 1px solid #444 !important;\n }\n .more-repos {\n border-top: #484848 1px solid !important;\n }\n .pull-head, .capped-box {\n border-bottom: #484848 1px solid !important;\n }\n .tutorial-e::after, .file-commit-form .commit-form::before,\n .merge-branch-form .commit-form::before {\n border-right-color: #343434 !important;\n border-bottom-color: transparent !important;\n }\n .ScreenshotCarousel-navitem,\n .new-discussion-timeline .composer .timeline-comment::after {\n border-right-color: var(--ghd-bg-color);\n }\n /* toc in markdown, reset border-collaps so border-radius works */\n /* https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki */\n #user-content-toc {\n border-collapse: separate !important;\n }\n #facebox pre, #contributors-master svg.viz, #com .dropdown-menu {\n border: 1px solid #343434 !important;\n }\n /* orange rss icon */\n .dashboard-feed-icon.octicon-rss, .nav-rss a .octicon-rss, .feed-icon,\n #dashboard .octicon-rss {\n color: #f93 !important;\n }\n .featured-label {\n background: #f5b987 !important;\n border: none !important;\n padding: 6px !important;\n color: #ed7c21 !important;\n }\n .featured-label .octicon,\n .page-new-repo div.form-checkbox .octicon-lock::before {\n color: #ed7c21 !important;\n }\n /* diff highlighting (no syntax highlight) */\n /* main diff text color */\n .diff-line-pre {\n color: #ccc !important;\n }\n .diff-table .line-comments {\n border-top: 1px solid #333 !important;\n border-bottom: 1px solid #333 !important;\n }\n #header-wrapper, .menu li + li {\n border-bottom: 1px solid #333 !important;\n }\n .comment-reactions button.btn-link.user-has-reacted {\n background-color: rgba(79, 140, 201, .2);\n }\n .review-comment .comment-reactions {\n border-top: 0 !important;\n }\n .review-comment .reaction-summary-item:not(.add-reaction-btn) {\n border-color: rgba(79, 140, 201, .2);\n }\n /* light grey - breaks in diff (with line numbers) */\n .highlight .expandable-line-num, .highlight .diff-line-num-hunk,\n .highlight .diff-line-code-hunk, .highlight .expandable-line-code {\n background: #222 !important;\n color: #888 !important;\n }\n /* git diff line additions (dark green) */\n .blob-code-addition {\n background-color: #002800 !important;\n border-color: #060 !important;\n }\n .blob-num-addition {\n background-color: #0a320a !important;\n }\n /* git diff line deletions (dark red) */\n .blob-code-deletion, .conflict-gutter-marker {\n background-color: #380000 !important;\n border-color: #600 !important;\n }\n .blob-num-deletion {\n background-color: #420a0a !important;\n }\n /* code splitter in diffs */\n .blob-num-expandable, .blob-num-hunk {\n background: #2b2b2b;\n }\n .blob-code-hunk {\n background: #202020;\n }\n /* link target lines */\n .blob-code-inner.highlighted {\n background: rgba(255, 255, 255, .075) !important;\n }\n .selected-line::after {\n mix-blend-mode: normal !important;\n pointer-events: none;\n }\n /* custom hover highlight */\n .diff-table > tbody > tr[data-hunk]:hover > td,\n .highlight > tbody > tr:hover > td {\n position: relative;\n }\n .diff-table > tbody > tr[data-hunk]:hover > td::after,\n .highlight > tbody > tr:hover > td::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background: rgba(255, 255, 255, .075);\n pointer-events: none;\n }\n .diff-table > tbody > tr[data-hunk]:hover > td.selected-line::after,\n .highlight > tbody > tr:hover > td.blob-code-inner.highlighted::after {\n background: rgba(255, 255, 255, .15) !important;\n }\n /* custom hover highlight end */\n .blob-code-addition .x, .highlight .blob-code-addition .x {\n background: #252 !important;\n color: #eee !important;\n }\n .blob-code-deletion .x, .highlight .blob-code-deletion .x {\n background: #622 !important;\n color: #eee !important;\n }\n /* git diff line numbers (med green) */\n .gi .diff-line-num, .gi .diff-line-code, .gi .diff-line-pre {\n background: #020 !important;\n border-color: #040 !important;\n }\n /* git diff line deletions (med red) */\n .gd .diff-line-num, .highlight .err, .gd .diff-line-code, .gd .diff-line-pre {\n background: #300 !important;\n border-color: #500 !important;\n }\n textarea {\n cursor: auto !important;\n }\n /* rules for the new responsive layout */\n @media (min-width: 768px) {\n .release-main-section {\n border-left: 2px solid #343434 !important;\n }\n .release-entry {\n border-bottom: 0 !important;\n }\n }\n @media (max-width: 1012px) {\n .reponav-wrapper {\n background: #181818 !important;\n }\n }\n .Header, .Header-old {\n border-bottom: 1px solid #343434 !important;\n background: #181818 !important;\n }\n /* rules for help pages */\n .search-result-title .ais-Highlight-highlighted {\n color: #4f8cc9 !important;\n }\n .search-result-intro .ais-Highlight-highlighted {\n border-color: #4f8cc9 !important;\n }\n .ais-SearchBox-resetIcon, .octicon-logo-github {\n fill: #c0c0c0 !important;\n }\n /* Actions */\n .project-card code {\n background: #333 !important;\n }\n .commit-create .CodeMirror {\n padding-top: 0 !important;\n }", + "start": 186660, + "regexps": [ + "^https?://((education|graphql|guides|raw|resources|status|developer|support|vscode-auth)\\.)?github\\.com/((?!(sponsors)).)*$" + ], + "domains": [ + "githubusercontent.com", + "www.githubstatus.com" + ] + }, + { + "code": "/*! GitHub: Twilight */:root{--ghd-code-background:#141414;--ghd-code-color:#ccc}.pl-c,.pl-c span{color:#5f5a60!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#cf6a4c!important}.pl-cos{color:#8f9d6a!important}.pl-e,.pl-ef,.pl-en{color:#ac885b!important}.pl-enc{color:#cf6a4c!important}.pl-enf,.pl-enm{color:#ac885b!important}.pl-ens{color:#cf6a4c!important}.pl-ent{color:#cda869!important}.pl-entc,.pl-enti{color:#ac885b!important}.pl-entm{color:#7587a6!important}.pl-eoa{color:#cda869!important}.pl-eoac,.pl-eoac .pl-pde{color:#7587a6!important}.pl-eoai,.pl-eoai .pl-pde{color:#cda869!important}.pl-eoi{color:#ac885b!important}.pl-k{color:#cf6a4c!important}.pl-ko,.pl-kolp{color:#cda869!important}.pl-kos,.pl-kou{color:#cf6a4c!important}.pl-mai .pl-sf{color:#7587a6!important}.pl-mb{color:#8f9d6a!important}.pl-mc{color:#cda869!important}.pl-mh,.pl-mh .pl-pdh{color:#cf6a4c!important}.pl-mi{color:#cda869!important}.pl-ml{color:#8f9d6a!important}.pl-mm{color:#7587a6!important}.pl-mp{color:#c5af75!important}.pl-mp1 .pl-sf{color:#dad085!important}.pl-mq{color:#cf6a4c!important}.pl-mr,.pl-ms{color:#cda869!important}.pl-pdb{color:#8f9d6a!important}.pl-pdc{color:#5f5a60!important}.pl-pdc1,.pl-pde{color:#cf6a4c!important}.pl-pdi{color:#cda869!important}.pl-pds{color:#8f9d6a!important}.pl-pdv{color:#7587a6!important}.pl-pse,.pl-pse .pl-s2{color:#cf6a4c!important}.pl-s{color:#f9ee98!important}.pl-s1,.pl-s2{color:#ccc!important}.pl-mp .pl-s3{color:#cda869!important}.pl-s3,.pl-sc{color:#dad085!important}.pl-scp{color:#cf6a4c!important}.pl-sf{color:#dad085!important}.pl-smc{color:#ac885b!important}.pl-smi,.pl-smp{color:#ccc!important}.pl-sok{color:#cda869!important}.pl-sol{color:#8f9d6a!important}.pl-som,.pl-sr{color:#7587a6!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#cda869!important}.pl-stj{color:#7587a6!important}.pl-stp,.pl-sv,.pl-v{color:#9b859d!important}.pl-vi{color:#cf6a4c!important}.pl-vo{color:#ac885b!important}.pl-vpf{color:#7587a6!important}.pl-mdht,.pl-mi1{color:#55a532!important;background:#020!important}.pl-md,.pl-mdhf{color:#bd2c00!important;background:#200!important}.pl-mdr{color:#cf6a4c!important}.pl-mdh,.pl-mdi{color:#7587a6!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#df5000!important;color:#fff!important}.pl-mo{color:#969896!important}.pl-mri{color:teal!important}.pl-ms1{background-color:#f5f5f5!important}.pl-va,.pl-vpu{color:teal!important}.pl-entl{color:#ccc!important}.highlight .pl-corl span.x,.pl-corl{color:#f9ee98!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#ac885b!important;color:#ccc!important}/*! Jupyter: Twilight */#notebook div.output_stderr{background:#420e09!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#141414!important;color:#ccc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {border:#b22518!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#5f5a60!important;font-style:italic!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#cda869!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#141414!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#5f5a60!important;font-style:italic!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#5f5a60!important}.highlight code .c1,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cs, body.api .highlight .cs {color:#5f5a60!important;font-style:italic!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {background:#420e09!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {background:#b22518!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:navy!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {background:#253b22!important}.highlight code .gp,.highlight code .gs,#notebook .highlight .gp, body.api .highlight .gp, #notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:purple!important;font-weight:700!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#e9df8f!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#9b703f!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#f9ee98!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#cda869!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#9b859d!important;font-weight:700!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#9b859d!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#7587a6!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#cf6a4c!important;font-weight:700!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#9b703f!important;font-weight:700!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#9b859d!important;font-weight:700!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#cda869!important;font-weight:700!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#7587a6!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#a2f!important;font-weight:700!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#cf6a4c!important}.highlight code .sb,.highlight code .sc,#notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc {color:#8f9d6a!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#8f9d6a!important;font-style:italic!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#8f9d6a!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#f9ee98!important;font-weight:700!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#8f9d6a!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#daefa3!important;font-weight:700!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#8f9d6a!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#e9c062!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#8f9d6a!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#cf6a4c!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#0aa!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#7587a6!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#099!important}\n /* inline code - big blocks */\n .highlight {\n background-color: var(--ghd-code-background) !important;\n color: var(--ghd-code-color);\n }\n .markdown-format pre, .markdown-body pre, .highlight pre, .markdown-body pre,\n #facebox pre, .blob-expanded, .terminal, .copyable-terminal,\n #notebook .input_area, .blob-code-context, .markdown-format code, .api pre,\n .api li:not(a) code, .hook-delivery-details pre, .hook-delivery-container pre,\n .code-list .file-box, .highlight.bg-gray, .markdown-body table.highlight tr,\n .markdown-body table.highlight td {\n background-color: var(--ghd-code-background) !important;\n color: var(--ghd-code-color) !important;\n }\n .flash p code {\n background-color: inherit !important;\n }\n .blob-code, .blob-code-inner {\n color: var(--ghd-code-color) !important;\n }\n /* inline code*/\n .markdown-body code::before, .markdown-body code::after,\n .markdown-body tt::before, .markdown-body tt::after,\n .markdown-body pre code::before, .markdown-body pre code::after,\n .markdown-body pre tt::before, .markdown-body pre tt::after {\n display: none !important;\n }\n /* GitHub Bug: Center color preview in inline code tags */\n .markdown-body code .v-align-middle {\n position: relative;\n top: -1px;\n }\n .markdown-body code, .markdown-body tt, .markdown-format p > code,\n .markdown-format pre, .markdown-body pre, .markdown-format .highlight pre,\n .markdown-body .highlight pre, #user-content-toc td, .copyable-terminal,\n .project-card .highlight pre, .project-card code, .rgh-parse-backticks,\n .protip code, .content dl code, .content ul code,\n .content .sectionbody .dlist dt, .content p > tt, .commit-sha,\n .commit-preview .message pre, .rendered_html pre, .rendered_html code, p code {\n border: 1px solid rgba(255, 255, 255, .1) !important;\n }", + "start": 514014, + "regexps": [ + "^https?://((education|gist|graphql|guides|raw|resources|status|developer|support|vscode-auth)\\.)?github\\.com/((?!(sponsors)).)*$" + ], + "domains": [ + "githubusercontent.com", + "www.githubstatus.com" + ] + }, + { + "code": ".CodeMirror {\n background-color: var(--ghd-code-background) !important;\n color: var(--ghd-code-color) !important;\n }\n .CodeMirror-selected {\n background: rgba(255, 255, 255, .12) !important;\n }\n .CodeMirror ::selection {\n background: rgba(255, 255, 255, .12) !important;\n }\n .CodeMirror ::-moz-selection {\n background: rgba(255, 255, 255, .12) !important;\n }\n .CodeMirror-lines {\n background: none !important;\n }\n /* remove margin above codemirror */\n .file-header.mb-2 {\n margin-bottom: 0 !important;\n }\n .CodeMirror-linebackground.conflict-background,\n .conflict-background + .CodeMirror-gutter-wrapper .CodeMirror-linenumber {\n background-color: #380000 !important;\n border-color: #600 !important;\n }\n .CodeMirror-scrollbar-filler {\n background: #1d1d1d !important;\n }\n /* Styles auto-complete popups in the actions workflow editor */\n .CodeMirror-hints {\n background: #181818;\n border-color: #404040;\n box-shadow: 0 1px 5px #000;\n }\n .CodeMirror-hint {\n color: #d2d2d2;\n }\n .CodeMirror-hint-active {\n color: #f0f0f0;\n background-color: #4f8cc9;\n }\n .CodeMirror-hint-active .CodeMirror-hint-description {\n color: #f0f0f0 !important;\n }\n /*! CodeMirror: Twilight */.CodeMirror-gutters{background:#222!important;border-right:1px solid #484848!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#aaa!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.CodeMirror-activeline-background{background:#27282e!important}.CodeMirror-matchingbracket{outline:1px solid grey!important;color:#fff!important}.cm-keyword{color:#f9ee98!important}.cm-atom{color:#fc0!important}.cm-number{color:#ca7841!important}.cm-def{color:#8da6ce!important}.cm-variable-2,.cm-variable-3,span.cm-def,span.cm-tag{color:#607392!important}.cm-operator{color:#cda869!important}.cm-comment{color:#777!important;font-style:italic!important;font-weight:400!important}.cm-string{color:#8f9d6a!important}.cm-string-2{color:#bd6b18!important}.cm-meta{background-color:#141414!important;color:#f7f7f7!important}.cm-builtin{color:#cda869!important}.cm-tag{color:#997643!important}.cm-attribute{color:#d6bb6d!important}.cm-header{color:#ff6400!important}.cm-hr{color:#aeaeae!important}.cm-link{color:#ad9361!important;font-style:italic!important;text-decoration:none!important}.cm-error{border-bottom:1px solid red!important}", + "start": 523942, + "regexps": [ + "^https?://((education|gist|graphql|guides|raw|resources|status|developer|support|vscode-auth)\\.)?github\\.com/((?!(sponsors)).)*$" + ], + "domains": [ + "githubusercontent.com", + "www.githubstatus.com" + ] + }, + { + "code": "/* begin developer.github.com rules */\n a {\n background-color: transparent;\n }\n mark {\n color: #dcdcdc;\n }\n body {\n color: #c6c6c6;\n background-color: #181818;\n }\n a {\n color: #4f8cc9;\n }\n .rule {\n background-color: transparent;\n border-bottom-color: #343434;\n }\n kbd {\n color: #afafaf;\n box-shadow: inset 0 -1px 0 #343434;\n }\n .Box, kbd {\n background-color: #181818;\n border-color: #343434;\n }\n .Box-header {\n background-color: #222;\n border-color: #343434;\n }\n .Box-body {\n border-bottom-color: #343434;\n }\n .Box-row {\n border-top-color: #343434;\n }\n .Box-row.Box-row--unread, .Box-row.unread {\n box-shadow: 2px 0 0 #4f8cc9 inset;\n }\n .Box-row.navigation-focus .Box-row--drag-button {\n color: #4f8cc9;\n }\n .Box-row.navigation-focus.sortable-chosen {\n background-color: #181818;\n }\n .Box-row--focus-gray.navigation-focus,\n .Box-row.navigation-focus.sortable-ghost {\n background-color: #222;\n }\n .Box-row--focus-blue.navigation-focus {\n background-color: #182030;\n }\n .Box-row--hover-gray:hover {\n background-color: #222;\n }\n .Box-row--hover-blue:hover {\n background-color: #182030;\n }\n @media (min-width: 768px) {\n .Box-row-link {\n color: #c6c6c6;\n }\n .Box-row-link:hover {\n color: #4f8cc9;\n }\n }\n .Box-footer {\n border-top-color: #343434;\n }\n .Box--blue {\n border-color: #246;\n }\n .Box--blue .Box-header {\n background-color: #182030;\n border-color: #246;\n }\n .Box--blue .Box-body, .Box--blue .Box-footer, .Box--blue .Box-row {\n border-color: #246;\n }\n .Box--danger, .Box--danger .Box-body:last-of-type,\n .Box--danger .Box-row:first-of-type {\n border-color: #d82828;\n }\n .Box-header--blue {\n background-color: #182030;\n border-color: #246;\n }\n .Box-row--yellow {\n background-color: #261d08;\n }\n .Box-row--blue {\n background-color: #182030;\n }\n .Box-row--gray {\n background-color: #222;\n }\n .btn .octicon {\n color: #9b9b9b;\n }\n .btn .Counter {\n background-color: rgba(220, 220, 220, .15);\n }\n .btn {\n color: #c6c6c6;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn.hover, .btn:hover, [open] > .btn {\n background-color: #242424;\n }\n .btn.selected, .btn:active, .btn[aria-selected=true] {\n background-color: #2c2c2c;\n box-shadow: none;\n }\n .btn.disabled, .btn:disabled, .btn[aria-disabled=true] {\n color: #767676;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n }\n .btn.focus, .btn:focus {\n box-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n }\n .btn-primary {\n color: #fff;\n background-color: #373;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: 0 1px 0 #000, inset 0 1px 0 rgba(255, 255, 255, .03);\n }\n .btn-primary.hover, .btn-primary:hover, [open] > .btn-primary {\n background-color: #484;\n }\n .btn-primary.selected, .btn-primary:active, .btn-primary[aria-selected=true] {\n background-color: #595;\n }\n .btn-primary.disabled, .btn-primary:disabled,\n .btn-primary[aria-disabled=true] {\n color: hsla(0, 0%, 100%, .2);\n background-color: #040;\n border-color: rgba(220, 220, 220, .1);\n box-shadow: 0 1px 0 #000, inset 0 1px 0 rgba(255, 255, 255, .03);\n }\n .btn-primary .Counter {\n background-color: hsla(0, 0%, 0%, .2);\n }\n .btn-primary .octicon {\n color: hsla(0, 0%, 100%, .2);\n }\n .btn-danger {\n color: #d82828;\n }\n .btn-danger:hover, [open] > .btn-danger {\n color: #fff;\n background-color: #d82828;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: 0 1px 0 #000, inset 0 1px 0 rgba(255, 255, 255, .03);\n }\n .btn-danger:hover .Counter, [open] > .btn-danger .Counter {\n background-color: hsla(0, 0%, 0%, .2);\n }\n .btn-danger.selected, .btn-danger:active, .btn-danger[aria-selected=true] {\n color: #fff;\n border-color: rgba(220, 220, 220, .15);\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=true] {\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-danger:focus {\n box-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n }\n .btn-outline {\n color: #4f8cc9;\n }\n .btn-outline:hover, [open] > .btn-outline {\n color: #fff;\n background-color: #4f8cc9;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: 0 1px 0 #000, inset 0 1px 0 rgba(255, 255, 255, .03);\n }\n .btn-outline:hover .Counter, [open] > .btn-outline .Counter {\n background-color: hsla(0, 0%, 0%, .2);\n }\n .btn-outline.selected, .btn-outline:active, .btn-outline[aria-selected=true] {\n color: #fff;\n background-color: #4f8cc9;\n border-color: rgba(220, 220, 220, .15);\n }\n .btn-outline.disabled, .btn-outline:disabled,\n .btn-outline[aria-disabled=true] {\n color: rgba(79, 140, 201, .5);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-blue {\n color: #fff;\n background-color: #4f8cc9;\n background-image: linear-gradient(-180deg, #4f8cc9 0%, #4f8cc9 90%);\n }\n .btn-blue.hover, .btn-blue:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-blue.selected, .btn-blue:active, .btn-blue[aria-selected=true],\n [open] > .btn-blue {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-blue.disabled, .btn-blue:disabled, .btn-blue[aria-disabled=true] {\n background-image: none;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-blue .Counter {\n background-color: #181818;\n }\n .btn-blue .Counter, .btn-link {\n color: #4f8cc9;\n }\n .btn-link {\n background-color: transparent;\n }\n .btn-link:disabled, .btn-link:disabled:hover, .btn-link[aria-disabled=true],\n .btn-link[aria-disabled=true]:hover {\n color: rgba(148, 148, 148, .5);\n }\n .btn-invisible {\n color: #4f8cc9;\n background-color: transparent;\n box-shadow: none;\n }\n .btn-invisible.selected, .btn-invisible.zeroclipboard-is-active,\n .btn-invisible.zeroclipboard-is-hover, .btn-invisible:active,\n .btn-invisible:focus, .btn-invisible:hover,\n .btn-invisible[aria-selected=true] {\n color: #4f8cc9;\n background: none;\n box-shadow: none;\n }\n .btn-octicon {\n color: #afafaf;\n background-color: transparent;\n }\n .btn-octicon:hover {\n color: #4f8cc9;\n }\n .btn-octicon.disabled, .btn-octicon.disabled:hover,\n .btn-octicon[aria-disabled=true], .btn-octicon[aria-disabled=true]:hover {\n color: #767676;\n }\n .btn-octicon-danger:hover {\n color: #d82828;\n }\n .close-button {\n background-color: transparent;\n }\n .ellipsis-expander, .hidden-text-expander a {\n color: #afafaf;\n background-color: #343434;\n }\n .ellipsis-expander:hover, .hidden-text-expander a:hover {\n background-color: #767676;\n }\n .ellipsis-expander:active, .hidden-text-expander a:active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .social-count {\n color: #c6c6c6;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .social-count:hover {\n color: #4f8cc9;\n }\n .social-count:focus {\n box-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n }\n .pagination a, .pagination em, .pagination span {\n color: #c6c6c6;\n }\n .pagination a:focus, .pagination a:hover, .pagination em:focus,\n .pagination em:hover, .pagination span:focus, .pagination span:hover {\n border-color: #343434;\n }\n .pagination a:active, .pagination em:active, .pagination span:active {\n border-color: #2c2c2c;\n }\n .pagination .next_page, .pagination .previous_page {\n color: #4f8cc9;\n }\n .pagination .current, .pagination .current:hover,\n .pagination [aria-current]:not([aria-current=false]) {\n color: #fff;\n background-color: #4f8cc9;\n }\n .pagination .disabled, .pagination .disabled:hover, .pagination .gap,\n .pagination .gap:hover, .pagination [aria-disabled=true],\n .pagination [aria-disabled=true]:hover {\n color: #9b9b9b;\n }\n .tooltipped::after {\n color: #fff;\n background-color: #dcdcdc;\n }\n .tooltipped::before {\n color: #dcdcdc;\n }\n .tooltipped-s::before, .tooltipped-se::before, .tooltipped-sw::before {\n border-bottom-color: #dcdcdc;\n }\n .tooltipped-n::before, .tooltipped-ne::before, .tooltipped-nw::before {\n border-top-color: #dcdcdc;\n }\n .tooltipped-w::before {\n border-left-color: #dcdcdc;\n }\n .tooltipped-e::before {\n border-right-color: #dcdcdc;\n }\n .border-x {\n border-right-color: #343434 !important;\n border-left-color: #343434 !important;\n }\n .border-y {\n border-top-color: #343434 !important;\n border-bottom-color: #343434 !important;\n }\n .border {\n border-color: #343434 !important;\n }\n .border-top {\n border-top-color: #343434 !important;\n }\n .border-right {\n border-right-color: #343434 !important;\n }\n .border-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-left {\n border-left-color: #343434 !important;\n }\n @media (min-width: 544px) {\n .border-sm {\n border-color: #343434 !important;\n }\n .border-sm-top {\n border-top-color: #343434 !important;\n }\n .border-sm-right {\n border-right-color: #343434 !important;\n }\n .border-sm-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-sm-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 768px) {\n .border-md {\n border-color: #343434 !important;\n }\n .border-md-top {\n border-top-color: #343434 !important;\n }\n .border-md-right {\n border-right-color: #343434 !important;\n }\n .border-md-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-md-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1012px) {\n .border-lg {\n border-color: #343434 !important;\n }\n .border-lg-top {\n border-top-color: #343434 !important;\n }\n .border-lg-right {\n border-right-color: #343434 !important;\n }\n .border-lg-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-lg-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1280px) {\n .border-xl {\n border-color: #343434 !important;\n }\n .border-xl-top {\n border-top-color: #343434 !important;\n }\n .border-xl-right {\n border-right-color: #343434 !important;\n }\n .border-xl-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-xl-left {\n border-left-color: #343434 !important;\n }\n }\n .border-blue {\n border-color: #4f8cc9 !important;\n }\n .border-blue-light {\n border-color: #246 !important;\n }\n .border-green {\n border-color: #373 !important;\n }\n .border-green-light {\n border-color: #040 !important;\n }\n .border-red, .border-red-light {\n border-color: #d82828 !important;\n }\n .border-purple {\n border-color: #73589a !important;\n }\n .border-yellow {\n border-color: #cb4 !important;\n }\n .border-gray-light {\n border-color: #2c2c2c !important;\n }\n .border-gray-dark {\n border-color: #343434 !important;\n }\n .border-black-fade {\n border-color: rgba(220, 220, 220, .15) !important;\n }\n .border-white-fade, .border-white-fade-15 {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n .border-white-fade-30 {\n border-color: hsla(0, 0%, 0%, .3) !important;\n }\n .border-white-fade-50 {\n border-color: hsla(0, 0%, 0%, .5) !important;\n }\n .border-white-fade-70 {\n border-color: hsla(0, 0%, 0%, .7) !important;\n }\n .border-white-fade-85 {\n border-color: hsla(0, 0%, 0%, .85) !important;\n }\n .box-shadow {\n box-shadow: 0 1px 0 #000 !important;\n }\n .box-shadow-medium {\n box-shadow: 0 3px 6px rgba(0, 0, 0, .15) !important;\n }\n .box-shadow-large {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .2) !important;\n }\n .box-shadow-extra-large {\n box-shadow: 0 12px 48px rgba(0, 0, 0, .3) !important;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .bg-white {\n background-color: #181818 !important;\n }\n .bg-blue {\n background-color: #4f8cc9 !important;\n }\n .bg-blue-light {\n background-color: #182030 !important;\n }\n .bg-gray {\n background-color: #222 !important;\n }\n .bg-gray-light {\n background-color: #181818 !important;\n }\n .bg-green {\n background-color: #484 !important;\n }\n .bg-green-light {\n background-color: #002800 !important;\n }\n .bg-red {\n background-color: #d82828 !important;\n }\n .bg-red-light {\n background-color: #300 !important;\n }\n .bg-yellow {\n background-color: #cb4 !important;\n }\n .bg-yellow-light {\n background-color: #651 !important;\n }\n .bg-yellow-dark {\n background-color: #cb4 !important;\n }\n .bg-purple {\n background-color: #73589a !important;\n }\n .bg-pink {\n background-color: #c49 !important;\n }\n .bg-purple-light {\n background-color: #213 !important;\n }\n .bg-orange {\n background-color: #f3582c !important;\n }\n .color-gray-0 {\n color: #181818 !important;\n }\n .bg-gray-0 {\n background-color: #181818 !important;\n }\n .color-gray-1 {\n color: #202020 !important;\n }\n .bg-gray-1 {\n background-color: #222 !important;\n }\n .color-gray-2 {\n color: #343434 !important;\n }\n .bg-gray-2 {\n background-color: #343434 !important;\n }\n .color-gray-3 {\n color: #343434 !important;\n }\n .bg-gray-3 {\n background-color: #343434 !important;\n }\n .color-gray-4 {\n color: #767676 !important;\n }\n .bg-gray-4 {\n background-color: #767676 !important;\n }\n .color-gray-5 {\n color: #9b9b9b !important;\n }\n .bg-gray-5 {\n background-color: #444 !important;\n }\n .color-gray-6 {\n color: #afafaf !important;\n }\n .bg-gray-6 {\n background-color: #343434 !important;\n }\n .color-gray-7 {\n color: #afafaf !important;\n }\n .bg-gray-7 {\n background-color: #afafaf !important;\n }\n .color-gray-8 {\n color: #c6c6c6 !important;\n }\n .bg-gray-8 {\n background-color: #222 !important;\n }\n .color-gray-9 {\n color: #c6c6c6 !important;\n }\n .bg-gray-9 {\n background-color: #181818 !important;\n }\n .color-blue-0 {\n color: #182030 !important;\n }\n .bg-blue-0 {\n background-color: #182030 !important;\n }\n .color-blue-1 {\n color: #182030 !important;\n }\n .bg-blue-1 {\n background-color: #182030 !important;\n }\n .bg-blue-2 {\n background-color: #246 !important;\n }\n .color-blue-3 {\n color: #4f8cc9 !important;\n }\n .bg-blue-3 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-4 {\n color: #4f8cc9 !important;\n }\n .bg-blue-4 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-5 {\n color: #4f8cc9 !important;\n }\n .bg-blue-5 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-6 {\n color: #4f8cc9 !important;\n }\n .bg-blue-6 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-7 {\n color: rgba(79, 140, 201, .5) !important;\n }\n .bg-blue-7 {\n background-color: rgba(79, 140, 201, .5) !important;\n }\n .color-blue-8 {\n color: #9daccc !important;\n }\n .bg-blue-8 {\n background-color: #182030 !important;\n }\n .color-blue-9 {\n color: #c6c6c6 !important;\n }\n .bg-blue-9 {\n background-color: #182030 !important;\n }\n .color-green-0 {\n color: #002800 !important;\n }\n .bg-green-0 {\n background-color: #002800 !important;\n }\n .color-green-1 {\n color: #002800 !important;\n }\n .bg-green-1 {\n background-color: #002800 !important;\n }\n .color-green-2 {\n color: #040 !important;\n }\n .bg-green-2 {\n background-color: #040 !important;\n }\n .color-green-3 {\n color: #040 !important;\n }\n .bg-green-3 {\n background-color: #040 !important;\n }\n .color-green-4 {\n color: #373 !important;\n }\n .bg-green-4 {\n background-color: #373 !important;\n }\n .color-green-5 {\n color: #484 !important;\n }\n .bg-green-5 {\n background-color: #484 !important;\n }\n .color-green-6 {\n color: #6cc644 !important;\n }\n .bg-green-6 {\n background-color: #6cc644 !important;\n }\n .color-green-7 {\n color: #6cc644 !important;\n }\n .bg-green-7 {\n background-color: #6cc644 !important;\n }\n .color-green-8 {\n color: #6cc644 !important;\n }\n .bg-green-8 {\n background-color: #6cc644 !important;\n }\n .color-green-9 {\n color: #6cc644 !important;\n }\n .bg-green-9 {\n background-color: #6cc644 !important;\n }\n .color-yellow-0 {\n color: #261d08 !important;\n }\n .bg-yellow-0 {\n background-color: #261d08 !important;\n }\n .color-yellow-1 {\n color: #261d08 !important;\n }\n .bg-yellow-1 {\n background-color: #261d08 !important;\n }\n .color-yellow-2 {\n color: #651 !important;\n }\n .bg-yellow-2 {\n background-color: #651 !important;\n }\n .color-yellow-3 {\n color: #cb4 !important;\n }\n .bg-yellow-3 {\n background-color: #cb4 !important;\n }\n .color-yellow-4 {\n color: #cb4 !important;\n }\n .bg-yellow-4 {\n background-color: #cb4 !important;\n }\n .color-yellow-5 {\n color: #cb4 !important;\n }\n .bg-yellow-5 {\n background-color: #cb4 !important;\n }\n .color-yellow-6 {\n color: #cb4 !important;\n }\n .bg-yellow-6 {\n background-color: #cb4 !important;\n }\n .color-yellow-7 {\n color: #cb4 !important;\n }\n .bg-yellow-7 {\n background-color: #cb4 !important;\n }\n .color-yellow-8 {\n color: #cb4 !important;\n }\n .bg-yellow-8 {\n background-color: #cb4 !important;\n }\n .color-yellow-9 {\n color: #bba257 !important;\n }\n .bg-yellow-9 {\n background-color: #bba257 !important;\n }\n .color-orange-0 {\n color: #730 !important;\n }\n .bg-orange-0 {\n background-color: #730 !important;\n }\n .color-orange-1 {\n color: #730 !important;\n }\n .bg-orange-1 {\n background-color: #730 !important;\n }\n .color-orange-2 {\n color: #730 !important;\n }\n .bg-orange-2 {\n background-color: #730 !important;\n }\n .color-orange-3 {\n color: #730 !important;\n }\n .bg-orange-3 {\n background-color: #730 !important;\n }\n .color-orange-4 {\n color: #fb8532 !important;\n }\n .bg-orange-4 {\n background-color: #fb8532 !important;\n }\n .color-orange-5 {\n color: #fb8532 !important;\n }\n .bg-orange-5 {\n background-color: #fb8532 !important;\n }\n .color-orange-6 {\n color: #fb8532 !important;\n }\n .bg-orange-6 {\n background-color: #fb8532 !important;\n }\n .color-orange-7 {\n color: #f3582c !important;\n }\n .bg-orange-7 {\n background-color: #f3582c !important;\n }\n .color-orange-8 {\n color: #f3582c !important;\n }\n .bg-orange-8 {\n background-color: #f3582c !important;\n }\n .color-orange-9 {\n color: #f3582c !important;\n }\n .bg-orange-9 {\n background-color: #f3582c !important;\n }\n .color-red-0 {\n color: #300 !important;\n }\n .bg-red-0 {\n background-color: #300 !important;\n }\n .color-red-1 {\n color: #300 !important;\n }\n .bg-red-1 {\n background-color: #300 !important;\n }\n .color-red-2 {\n color: #d82828 !important;\n }\n .bg-red-2 {\n background-color: #d82828 !important;\n }\n .color-red-3 {\n color: #d82828 !important;\n }\n .bg-red-3 {\n background-color: #d82828 !important;\n }\n .color-red-4 {\n color: #d82828 !important;\n }\n .bg-red-4 {\n background-color: #d82828 !important;\n }\n .color-red-5 {\n color: #d82828 !important;\n }\n .bg-red-5 {\n background-color: #d82828 !important;\n }\n .color-red-6 {\n color: #d82828 !important;\n }\n .bg-red-6 {\n background-color: #d82828 !important;\n }\n .color-red-7 {\n color: #d82828 !important;\n }\n .bg-red-7 {\n background-color: #d82828 !important;\n }\n .color-red-8 {\n color: #f84848 !important;\n }\n .bg-red-8 {\n background-color: #f84848 !important;\n }\n .color-red-9 {\n color: #f84848 !important;\n }\n .bg-red-9 {\n background-color: #f84848 !important;\n }\n .color-purple-0 {\n color: #213 !important;\n }\n .bg-purple-0 {\n background-color: #213 !important;\n }\n .color-purple-1 {\n color: #53387a !important;\n }\n .bg-purple-1 {\n background-color: #53387a !important;\n }\n .color-purple-2 {\n color: #53387a !important;\n }\n .bg-purple-2 {\n background-color: #53387a !important;\n }\n .color-purple-3 {\n color: #53387a !important;\n }\n .bg-purple-3 {\n background-color: #53387a !important;\n }\n .color-purple-4 {\n color: #53387a !important;\n }\n .bg-purple-4 {\n background-color: #53387a !important;\n }\n .color-purple-5 {\n color: #73589a !important;\n }\n .bg-purple-5 {\n background-color: #73589a !important;\n }\n .color-purple-6 {\n color: #73589a !important;\n }\n .bg-purple-6 {\n background-color: #73589a !important;\n }\n .color-purple-7 {\n color: #9378ba !important;\n }\n .bg-purple-7 {\n background-color: #9378ba !important;\n }\n .color-purple-8 {\n color: #9378ba !important;\n }\n .bg-purple-8 {\n background-color: #9378ba !important;\n }\n .color-purple-9 {\n color: #9378ba !important;\n }\n .bg-purple-9 {\n background-color: #9378ba !important;\n }\n .color-pink-0 {\n color: #170711 !important;\n }\n .bg-pink-0 {\n background-color: #170711 !important;\n }\n .color-pink-1 {\n color: #170711 !important;\n }\n .bg-pink-1 {\n background-color: #170711 !important;\n }\n .color-pink-2 {\n color: #170711 !important;\n }\n .bg-pink-2 {\n background-color: #170711 !important;\n }\n .color-pink-3 {\n color: #c49 !important;\n }\n .bg-pink-3 {\n background-color: #c49 !important;\n }\n .color-pink-4 {\n color: #c49 !important;\n }\n .bg-pink-4 {\n background-color: #c49 !important;\n }\n .color-pink-5 {\n color: #c49 !important;\n }\n .bg-pink-5 {\n background-color: #c49 !important;\n }\n .color-pink-6 {\n color: #e6b !important;\n }\n .bg-pink-6 {\n background-color: #e6b !important;\n }\n .color-pink-7 {\n color: #e6b !important;\n }\n .bg-pink-7 {\n background-color: #e6b !important;\n }\n .color-pink-8 {\n color: #e6b !important;\n }\n .bg-pink-8 {\n background-color: #e6b !important;\n }\n .color-pink-9 {\n color: #e6b !important;\n }\n .bg-pink-9 {\n background-color: #e6b !important;\n }\n .text-blue {\n color: #4f8cc9 !important;\n }\n .text-red {\n color: #d82828 !important;\n }\n .text-gray-light {\n color: #9b9b9b !important;\n }\n .text-gray {\n color: #afafaf !important;\n }\n .text-gray-dark {\n color: #c6c6c6 !important;\n }\n .text-green {\n color: #6cc644 !important;\n }\n .text-yellow {\n color: #cb4 !important;\n }\n .text-orange {\n color: #f3582c !important;\n }\n .text-orange-light {\n color: #fb8532 !important;\n }\n .text-purple {\n color: #73589a !important;\n }\n .text-pink {\n color: #c49 !important;\n }\n .text-white {\n color: #fff !important;\n }\n .link-gray {\n color: #afafaf !important;\n }\n .link-gray:hover {\n color: #4f8cc9 !important;\n }\n .link-gray-dark {\n color: #c6c6c6 !important;\n }\n .link-gray-dark:hover, .link-hover-blue:hover {\n color: #4f8cc9 !important;\n }\n .muted-link {\n color: #afafaf !important;\n }\n .muted-link:hover {\n color: #4f8cc9 !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .details-overlay-dark[open] > summary::before {\n background-color: rgba(220, 220, 220, .5);\n }\n .lead {\n color: #afafaf;\n }\n .text-emphasized {\n color: #c6c6c6;\n }\n .text-shadow-dark {\n text-shadow: 0 1px 1px rgba(220, 220, 220, .25), 0 1px 25px rgba(27, 31, 35, .75);\n }\n .text-shadow-light {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n .avatar-child {\n box-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n }\n .avatar-child, .AvatarStack-body {\n background-color: #181818;\n }\n .AvatarStack-body .avatar {\n background-color: #181818;\n border-right-color: var(--ghd-bg-color);\n }\n .avatar.avatar-more {\n background-color: #222;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before {\n outline: 1px solid #181818;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before,\n .AvatarStack--right .avatar.avatar-more {\n background-color: #343434;\n }\n .AvatarStack--right .avatar.avatar-more::after {\n background-color: #222;\n }\n .AvatarStack--right .avatar {\n border-left-color: var(--ghd-bg-color);\n }\n .DashedConnection::before {\n border-bottom-color: #343434;\n }\n .markdown-body kbd {\n color: #afafaf;\n background-color: #181818;\n border-color: #343434;\n box-shadow: inset 0 -1px 0 #343434;\n }\n .markdown-body .absent {\n color: #d82828;\n }\n .markdown-body hr {\n background-color: #343434;\n }\n .markdown-body blockquote {\n color: #9b9b9b;\n border-left-color: #343434;\n }\n .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link,\n .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link,\n .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link {\n color: #dcdcdc;\n }\n .markdown-body h1, .markdown-body h2 {\n border-bottom-color: #2c2c2c;\n }\n .markdown-body h6 {\n color: #9b9b9b;\n }\n .markdown-body table td, .markdown-body table th {\n border-color: #343434;\n }\n .markdown-body table tr {\n background-color: #181818;\n border-top-color: #767676;\n }\n .markdown-body table tr:nth-child(2n) {\n background-color: #222;\n }\n .markdown-body table img {\n background-color: transparent;\n }\n .markdown-body img {\n background-color: #181818;\n }\n .markdown-body .emoji {\n background-color: transparent;\n }\n .markdown-body span.frame > span {\n border-color: #343434;\n }\n .markdown-body span.frame span span {\n color: #c6c6c6;\n }\n .markdown-body code, .markdown-body tt {\n background-color: rgba(220, 220, 220, .05);\n }\n .markdown-body pre > code {\n background-color: transparent;\n }\n .markdown-body .highlight pre, .markdown-body pre {\n background-color: #222;\n }\n .markdown-body pre code, .markdown-body pre tt {\n background-color: transparent;\n }\n .markdown-body .csv-data .blob-num {\n background-color: #181818;\n }\n .markdown-body .csv-data th {\n background-color: #222;\n }\n .ais-SearchBox-input, .form-control, .form-select {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n box-shadow: none;\n }\n .ais-SearchBox-input:focus, .focus.ais-SearchBox-input, .form-control.focus,\n .form-control:focus, .form-select.focus, .form-select:focus {\n border-color: #4f8cc9;\n box-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n }\n .form-control[disabled], .form-select[disabled],\n [disabled].ais-SearchBox-input {\n color: #767676;\n background-color: #242424;\n }\n .input-contrast, .input-contrast:focus {\n background-color: #181818;\n }\n .input-dark {\n color: #fff;\n background-color: hsla(0, 0%, 0%, .15);\n box-shadow: none;\n }\n .input-dark.focus, .input-dark:focus {\n border-color: rgba(220, 220, 220, .4);\n }\n ::placeholder {\n color: #9b9b9b;\n }\n .form-checkbox label em.highlight {\n background-color: #261d08;\n }\n .form-checkbox .note, .hfields .form-group .form-group-header label,\n .hfields .form-group dt label {\n color: #afafaf;\n }\n .form-warning {\n color: #bba257;\n background-color: #261d08;\n border-color: #cb4;\n }\n .form-group .ais-SearchBox-input, .form-group .ais-SearchBox-input:focus,\n .form-group .form-control, .form-group .form-control:focus, .form-select {\n background-color: #181818;\n }\n .form-group .form-group-body h4.is-error, .form-group dd h4.is-error {\n color: #d82828;\n }\n .form-group .form-group-body h4.is-success, .form-group dd h4.is-success {\n color: #6cc644;\n }\n .form-group.required .form-group-header label::after,\n .form-group.required dt label::after {\n color: #d82828;\n }\n .form-group.successful .success {\n color: #6cc644;\n }\n .form-group.successed .success {\n color: #6cc644;\n background-color: #002800;\n border-color: #373;\n }\n .form-group.successed .success::after {\n border-bottom-color: #002800;\n }\n .form-group.successed .success::before {\n border-bottom-color: #373;\n }\n .form-group.warn .ais-SearchBox-input, .form-group.warn .form-control {\n border-color: #cb4;\n }\n .form-group.warn .warning {\n background-color: #651;\n border-color: #cb4;\n }\n .form-group.warn .warning::after {\n border-bottom-color: #651;\n }\n .form-group.warn .warning::before {\n border-bottom-color: #cb4;\n }\n .form-group.errored .ais-SearchBox-input, .form-group.errored .form-control {\n border-color: #d82828;\n }\n .form-group.errored label {\n color: #d82828;\n }\n .form-group.errored .error {\n background-color: #300;\n border-color: #d82828;\n }\n .form-group.errored .error::after {\n border-bottom-color: #300;\n }\n .form-group.errored .error::before {\n border-bottom-color: #d82828;\n }\n .note {\n color: #afafaf;\n }\n .status-indicator-success .octicon-check {\n color: #484;\n fill: #484;\n }\n .status-indicator-failed .octicon-x {\n color: #d82828;\n fill: #d82828;\n }\n .inline-form .btn-plain {\n background-color: transparent;\n }\n .drag-and-drop {\n color: #afafaf;\n background-color: #181818;\n border-color: #484848;\n }\n .drag-and-drop .error {\n color: #d82828;\n }\n .drag-and-drop-error-info {\n color: #afafaf;\n }\n .drag-and-drop-error-info a {\n color: #4f8cc9;\n }\n .upload-enabled textarea {\n border-bottom-color: #343434;\n }\n .upload-enabled.focused {\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .upload-enabled.focused .ais-SearchBox-input,\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .upload-enabled.focused .drag-and-drop {\n border-color: #4f8cc9;\n }\n .previewable-comment-form .comment {\n border-color: #484848;\n }\n h2.account, p.explain {\n color: #afafaf;\n }\n p.explain strong {\n color: #c6c6c6;\n }\n p.explain .octicon {\n color: #767676;\n }\n .radio-label {\n color: #c6c6c6;\n border-color: #343434;\n }\n :checked + .radio-label {\n border-color: #4f8cc9;\n }\n .menu {\n background-color: #181818;\n border-color: #343434;\n }\n .menu-item {\n color: #dcdcdc;\n border-bottom-color: #2c2c2c;\n }\n .menu-item:focus, .menu-item:hover {\n background-color: #222;\n }\n .menu-item:active {\n background-color: #181818;\n }\n .menu-item.selected::before,\n .menu-item[aria-current]:not([aria-current=false])::before,\n .menu-item[aria-selected=true]::before {\n background-color: #fff;\n }\n .menu-item .octicon {\n color: #767676;\n }\n .menu-item .menu-warning {\n color: #f84848;\n }\n .menu-item.alert .Counter {\n color: #d82828;\n }\n .menu-heading {\n color: #dcdcdc;\n border-bottom-color: #2c2c2c;\n }\n .tabnav {\n border-bottom-color: #343434;\n }\n .tabnav-tab {\n color: #c6c6c6;\n background-color: transparent;\n }\n .tabnav-tab.selected, .tabnav-tab[aria-current]:not([aria-current=false]),\n .tabnav-tab[aria-selected=true] {\n background-color: #181818;\n border-color: #343434;\n }\n .tabnav-tab:focus, .tabnav-tab:hover {\n color: #afafaf;\n }\n .tabnav-tab:active {\n color: #9b9b9b;\n }\n .tabnav-tab .octicon {\n color: #767676;\n }\n .tabnav-extra {\n color: #afafaf;\n }\n a.tabnav-extra:hover {\n color: #4f8cc9;\n }\n .filter-list.pjax-active .filter-item {\n color: #afafaf;\n background-color: transparent;\n }\n .filter-list.pjax-active .filter-item.pjax-active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item {\n color: #afafaf;\n }\n .filter-item:hover {\n background-color: #222;\n }\n .filter-item.selected, .filter-item[aria-current]:not([aria-current=false]),\n .filter-item[aria-selected=true] {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item .bar {\n background-color: #242424;\n }\n .SideNav {\n background-color: #181818;\n }\n .SideNav-item {\n color: #dcdcdc;\n background-color: transparent;\n border-top-color: #2c2c2c;\n }\n .SideNav-item:last-child {\n box-shadow: 0 1px 0 #343434;\n }\n .SideNav-item:focus, .SideNav-item:hover {\n background-color: #222;\n }\n .SideNav-item:active, .SideNav-item[aria-current]:not([aria-current=false]),\n .SideNav-item[aria-selected=true] {\n background-color: #181818;\n }\n .SideNav-item[aria-current]:not([aria-current=false])::before,\n .SideNav-item[aria-selected=true]::before {\n background-color: #fff;\n }\n .SideNav-icon {\n color: #9b9b9b;\n }\n .SideNav-subItem {\n color: #4f8cc9;\n background-color: transparent;\n }\n .SideNav-subItem:focus, .SideNav-subItem:hover,\n .SideNav-subItem[aria-current]:not([aria-current=false]),\n .SideNav-subItem[aria-selected=true] {\n color: #c6c6c6;\n }\n .subnav-bordered {\n border-bottom-color: #2c2c2c;\n }\n .subnav-item {\n color: #c6c6c6;\n border-color: #343434;\n }\n .subnav-item:focus, .subnav-item:hover {\n background-color: #222;\n }\n .subnav-item.selected, .subnav-item[aria-current]:not([aria-current=false]),\n .subnav-item[aria-selected=true] {\n color: #fff;\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .subnav-search-input {\n color: #afafaf;\n }\n .subnav-search-icon {\n color: #767676;\n }\n .subnav-search-context .btn {\n color: #afafaf;\n }\n .UnderlineNav {\n box-shadow: inset 0 -1px 0 #343434;\n }\n .UnderlineNav-item {\n color: #dcdcdc;\n background-color: transparent;\n border-bottom-color: transparent;\n }\n .UnderlineNav-item:focus, .UnderlineNav-item:hover {\n border-bottom-color: #343434;\n }\n .UnderlineNav-item.selected,\n .UnderlineNav-item[aria-current]:not([aria-current=false]),\n .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: #fff;\n }\n .UnderlineNav-item.selected .UnderlineNav-octicon,\n .UnderlineNav-item[aria-current]:not([aria-current=false]) .UnderlineNav-octicon,\n .UnderlineNav-item[role=tab][aria-selected=true] .UnderlineNav-octicon {\n color: #afafaf;\n }\n .UnderlineNav-octicon {\n color: #767676;\n }\n .label, .Label {\n background-color: transparent !important;\n border-color: #343434;\n }\n .Label--gray, .Label--outline {\n color: #afafaf;\n border-color: #343434;\n }\n .Label--gray-darker {\n color: #c6c6c6;\n border-color: #9b9b9b;\n }\n .Label--yellow {\n color: #bba257;\n border-color: #cb4;\n }\n .Label--orange {\n color: #f3582c;\n border-color: #fb8532;\n }\n .Label--red {\n color: #d82828;\n border-color: #d82828;\n }\n .Label--green, .Label--outline-green {\n color: #6cc644;\n border-color: #484;\n }\n .Label--blue {\n color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .Label--purple {\n color: #73589a;\n border-color: #53387a;\n }\n .Label--pink {\n color: #e6b;\n border-color: #c49;\n }\n .state, .State {\n color: #fff;\n background-color: #444;\n }\n .State--green {\n background-color: #484;\n }\n .State--red {\n background-color: #d82828;\n }\n .State--purple {\n background-color: #73589a;\n }\n .Counter {\n color: #c6c6c6;\n background-color: rgba(90, 90, 90, .5);\n }\n .Counter--gray-light {\n color: #9b9b9b;\n }\n .Counter--gray {\n color: #fff;\n background-color: #444;\n }\n .diffstat {\n color: #afafaf;\n }\n .diffstat-block-deleted {\n background-color: #d82828;\n }\n .diffstat-block-added {\n background-color: #373;\n }\n .diffstat-block-neutral {\n background-color: #343434;\n }\n .pullquote {\n color: #afafaf;\n border-left-color: #343434;\n }\n .btn-mktg {\n color: #fff;\n border: 1px solid #4f8cc9;\n }\n .btn-mktg:hover {\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .btn-mktg:focus {\n box-shadow: 0 0 0 .2em rgba(79, 140, 201, .5);\n }\n .btn-primary-mktg:hover {\n background-color: #484;\n border-color: #484;\n }\n .btn-outline-mktg, .btn-outline-mktg:hover {\n background-color: transparent;\n }\n .btn-outline-mktg:hover {\n color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .btn-transparent {\n color: #fff;\n background-color: transparent;\n background-image: none;\n border-color: hsla(0, 0%, 0%, .5);\n }\n .btn-transparent:active, .btn-transparent:hover {\n color: #c6c6c6;\n background-color: #181818;\n background-image: none;\n border-color: var(--ghd-bg-color);\n }\n .text-blue-mktg {\n color: #4f8cc9 !important;\n }\n .text-white-fade {\n color: hsla(0, 0%, 0%, .7) !important;\n }\n .underline-dashed {\n background-image: linear-gradient(to right, #343434 50%, transparent 0%);\n }\n .bg-blue-dark {\n background-color: #182030 !important;\n }\n h1 a, h2 a, h3 a, h4 a {\n color: #c6c6c6;\n }\n h3 a {\n color: #4f8cc9;\n }\n .directory-toc h3 a {\n color: #c6c6c6;\n }\n .header-notifications a {\n color: #4f8cc9;\n }\n @media (max-width: 768px) {\n .nav-mobile-dropdown.js-open {\n background-color: #181818;\n box-shadow: 0 1px 15px #000;\n }\n }\n @media (min-width: 768px) {\n .nav-desktop-langDropdown, .nav-desktop-productDropdown {\n background-color: #181818;\n box-shadow: 0 1px 15px #000;\n }\n }\n @media (min-width: 768px) {\n details.close-when-clicked-outside[open] > summary::before {\n background-color: transparent;\n }\n }\n .directory-link-box.Box:hover, .directory-link-box:hover .Box {\n border: 1px solid #4f8cc9;\n }\n .breadcrumbs a:not(:last-child)::after,\n .breadcrumbs span:not(:last-child)::after {\n color: #767676;\n }\n .markdown-body ol > li {\n border-top-color: #2c2c2c;\n }\n .markdown-body ol > li::before {\n color: #767676;\n }\n .procedural-image-wrapper img {\n border-color: #2c2c2c;\n }\n .ais-SearchBox-input {\n background-color: #181818;\n }\n .ais-SearchBox-reset {\n background: none;\n }\n .ais-Hits-item.active, .ais-Hits-item:hover {\n background-color: #182030;\n }\n .ais-Highlight-highlighted, mark {\n background: none;\n }\n .search-result-title .ais-Highlight-highlighted, .search-result-title mark {\n color: #4f8cc9;\n }\n .search-result-intro .ais-Highlight-highlighted, .search-result-intro mark {\n border-bottom: 1px solid #4f8cc9;\n }\n .search-result-content .ais-Highlight-highlighted,\n .search-result-content mark {\n border-bottom-color: #9b9b9b;\n }\n @media (min-width: 768px) {\n header #search-results-container {\n background-color: #181818;\n box-shadow: 0 1px 15px #000;\n }\n header .search-overlay-desktop.js-open {\n background-color: rgba(220, 220, 220, .15);\n }\n }\n .markdown-body .lead-mktg p {\n color: #c6c6c6;\n }\n .extended-markdown.note pre {\n background: none;\n }\n .extended-markdown.note pre code, div.light-bg a, div.light-bg a h4 {\n color: #c6c6c6;\n }\n div.light-bg a p {\n color: #afafaf;\n }\n div.dark-bg a, div.dark-bg a h4 {\n color: #fff;\n }\n div.dark-bg a p {\n color: hsla(0, 0%, 0%, .7);\n }\n .btn-mktg {\n background-color: #4f8cc9;\n }\n .btn-outline-mktg {\n background-color: #181818;\n color: #4f8cc9;\n }\n .bg-red-light a {\n color: #4f8cc9;\n }\n .markdown-body .bg-blue-light blockquote {\n color: #afafaf;\n }\n :checked + .x-radio-label {\n background: #4f8cc9;\n }\n :checked + .x-radio-label svg {\n fill: #181818;\n }\n .sidebar, .sidebar-background-color {\n background-color: #182030;\n }\n .sidebar-products .arrow, .sidebar-products a {\n color: #fff;\n }\n .sidebar-article.is-current-page > a, .sidebar-category.is-current-page > a,\n .sidebar-maptopic.is-current-page > a, .sidebar-product.is-current-page > a,\n .sidebar-products .arrow:hover, .sidebar-products a:hover {\n color: #4f8cc9;\n }\n .sidebar-category.active {\n background-color: #182030;\n }\n .sidebar-maptopic .sidebar-article::before {\n border-left: 1px solid rgba(79, 140, 201, .5);\n }\n .sidebar-maptopic .sidebar-article.active::before {\n border-left: 3px solid rgba(79, 140, 201, .5);\n }\n button.arrow-for-scrolling-top {\n color: #fff;\n }\n iframe#graphiql {\n border-color: #343434;\n }\n .markdown-body .code-extra pre {\n border-left-color: #343434 !important;\n border-bottom-color: #343434 !important;\n border-right-color: #343434 !important;\n }\n .hljs {\n color: #c6c6c6;\n background-color: #181818;\n }\n .hljs-comment, .hljs-quote {\n color: #9b9b9b;\n }\n .hljs-keyword, .hljs-selector-tag, .hljs-subst {\n color: #c6c6c6;\n }\n .hljs-literal, .hljs-number, .hljs-tag .hljs-attr, .hljs-template-variable,\n .hljs-variable {\n color: #6cc644;\n }\n .hljs-doctag, .hljs-string {\n color: #4f8cc9;\n }\n .hljs-section, .hljs-selector-id, .hljs-title {\n color: #f84848;\n }\n .hljs-attribute, .hljs-class .hljs-title, .hljs-name, .hljs-tag, .hljs-type {\n color: rgba(79, 140, 201, .5);\n }\n .hljs-link, .hljs-regexp {\n color: #6cc644;\n }\n .hljs-bullet, .hljs-symbol {\n color: #73589a;\n }\n .hljs-built_in, .hljs-builtin-name {\n color: rgba(79, 140, 201, .5);\n }\n .hljs-meta {\n color: #9b9b9b;\n }\n .hljs-deletion {\n background-color: #d82828;\n }\n .hljs-addition {\n background-color: #040;\n }\n .markdown-body table code {\n background-color: rgba(220, 220, 220, .05);\n }\n .markdown-body table pre > code {\n background-color: transparent;\n }\n .markdown-body table th {\n background-color: #181818;\n box-shadow: 0 3px 0 0 #767676;\n }\n .markdown-body table tr:nth-child(2n) {\n background: none;\n }\n .hover-shadow:hover {\n box-shadow: 0 1px 0 #000 !important;\n }\n .hover-shadow-medium:hover {\n box-shadow: 0 3px 6px rgba(0, 0, 0, .15) !important;\n }\n .hover-shadow-large:hover {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .2) !important;\n }\n .hover-shadow-extra-large:hover {\n box-shadow: 0 12px 48px rgba(0, 0, 0, .3) !important;\n }\n .bg-guides-gradient {\n background: linear-gradient(0deg, rgba(33, 136, 255, .11) 0%, transparent 100%);\n }\n .bg-gradient--purple-pink {\n background: linear-gradient(135deg, #53387a 0%, #c49 100%);\n }\n .bg-gradient--blue-green {\n background: linear-gradient(-70deg, #4f8cc9 0%, #01a49e 100%);\n }\n .bg-gradient--blue-purple {\n background: linear-gradient(-70deg, #4f8cc9 0%, #804eda 100%);\n }\n .bg-gradient--pink-blue {\n background: linear-gradient(-70deg, #db469f 0%, #4f8cc9 100%);\n }\n .text-gradient--purple-pink {\n background-image: linear-gradient(135deg, #53387a 0%, #c49 100%);\n }\n .text-gradient--blue-green {\n background-image: linear-gradient(-70deg, #4f8cc9 0%, #01a49e 100%);\n }\n .text-gradient--blue-purple {\n background-image: linear-gradient(-70deg, #4f8cc9 0%, #804eda 100%);\n }\n .text-gradient--pink-blue {\n background-image: linear-gradient(-70deg, #db469f 0%, #4f8cc9 100%);\n }\n .border-gradient--purple-pink::before {\n background-color: #181818;\n }\n .border-gradient--purple-pink::after {\n background: linear-gradient(135deg, #53387a 0%, #c49 100%);\n }\n .border-gradient--aquamarine-mauve::before,\n .border-gradient--blue-green::before,\n .border-gradient--coral-yellow-dark::before,\n .border-gradient--coral-yellow::before, .border-gradient--dark-mint::before,\n .border-gradient--mint-blue-dark::before,\n .border-gradient--mint-blue::before,\n .border-gradient--purple-coral-dark::before,\n .border-gradient--purple-coral::before,\n .border-gradient--turq-purple-dark::before {\n background-color: #181818;\n }\n .border-gradient--blue-green::after {\n background: linear-gradient(-70deg, #4f8cc9 0%, #01a49e 100%);\n }\n .border-gradient--blue-purple::before, .border-gradient--red-orange::before {\n background-color: #181818;\n }\n .border-gradient--blue-purple::after {\n background: linear-gradient(-70deg, #4f8cc9 0%, #804eda 100%);\n }\n .border-gradient--pink-blue::before {\n background-color: #181818;\n }\n .border-gradient--pink-blue::after {\n background: linear-gradient(-70deg, #db469f 0%, #4f8cc9 100%);\n }\n .border-gradient--pink-blue-dark::before {\n background-color: #181818;\n }\n ul.release-notes-list li.release-notes-list-item::marker {\n color: #767676;\n }\n .js-release-notes-patch-link.selected {\n background-color: #182030;\n }\n /* end developer.github.com rules */\n table {\n background-color: transparent;\n }\n html[prefix] .deprecation-note, html[prefix] .deprecation-warning {\n text-shadow: none;\n }\n .sidebar-module .arrow-btn {\n background: url('data:image/svg+xml;utf8,') no-repeat 8px 10px;\n }\n .arrow-btn.collapsed:hover {\n background: url('data:image/svg+xml;utf8,') no-repeat 8px 10px;\n }\n .arrow-btn.expanded {\n background: url('data:image/svg+xml;utf8,') no-repeat 8px 10px;\n }\n .arrow-btn.expanded:hover {\n background: url('data:image/svg+xml;utf8,') no-repeat 8px 10px;\n }\n .btn-blue {\n color: #fff;\n background-color: #4f8cc9;\n background-image: linear-gradient(-180deg, #4f8cc9, #4f8cc9 90%);\n }\n .btn:active, .btn-blue:active {\n color: #fff;\n box-shadow: none;\n }\n .btn-blue, .btn-blue:hover {\n border-color: #4f8cc9;\n }\n .btn-blue:hover {\n color: #fff;\n background-image: linear-gradient(-180deg, rgba(79, 140, 201, .9), rgba(79, 140, 201, .9) 90%);\n }\n .btn.btn-blue.btn-block {\n border-color: #eee;\n }\n [class*=\"btn-outline\"] {\n color: #4f8cc9;\n background-color: transparent;\n background-image: none;\n border: 1px solid #343434;\n }\n [class*=\"btn-outline\"].selected,\n [class*=\"btn-outline\"].zeroclipboard-is-active,\n [class*=\"btn-outline\"].zeroclipboard-is-hover, [class*=\"btn-outline\"]:active,\n [class*=\"btn-outline\"]:hover {\n color: #fff;\n background-color: #4f8cc9;\n background-image: none;\n border-color: #4f8cc9;\n }\n .sub-nav ul a.active {\n color: #c6c6c6;\n }\n .content .sectionbody .dlist dt, .content .verseblock-content,\n .content dl code, .content h2 code, .content h3 code, .content h4 code,\n .content ol code, .content p > tt, .content table code, .content ul code,\n p code, pre {\n border: 1px solid #343434;\n }\n .product {\n color: #b186ee;\n }\n .pagination .disabled, .pagination .disabled:hover, .pagination .gap,\n .pagination .gap:hover, .pagination [aria-disabled=true],\n .pagination [aria-disabled=true]:hover {\n color: #404040;\n background-color: #181818;\n }\n .pagination a:focus, .pagination a:hover, .pagination em:focus,\n .pagination em:hover, .pagination > span:focus, .pagination > span:hover {\n background-color: #1e1e1e;\n border-color: #343434;\n text-decoration: none;\n }\n a.card.bg-gray-light:hover {\n background-color: var(--ghd-bg-color) !important;\n }", + "start": 526437, + "domains": [ + "developer.github.com" + ] + }, + { + "code": "/* begin docs.github.com rules */\n a {\n background-color: transparent;\n }\n mark {\n color: #dcdcdc;\n }\n body {\n color: #c6c6c6;\n background-color: #181818;\n }\n a {\n color: #4f8cc9;\n }\n .rule {\n background-color: transparent;\n border-bottom-color: #343434;\n }\n kbd {\n color: #afafaf;\n box-shadow: inset 0 -1px 0 #343434;\n }\n .Box, kbd {\n background-color: #181818;\n border-color: #343434;\n }\n .Box-header {\n background-color: #222;\n border-color: #343434;\n }\n .Box-body {\n border-bottom-color: #343434;\n }\n .Box-row {\n border-top-color: #343434;\n }\n .Box-row.Box-row--unread, .Box-row.unread {\n box-shadow: 2px 0 0 #4f8cc9 inset;\n }\n .Box-row.navigation-focus .Box-row--drag-button {\n color: #4f8cc9;\n }\n .Box-row.navigation-focus.sortable-chosen {\n background-color: #181818;\n }\n .Box-row--focus-gray.navigation-focus,\n .Box-row.navigation-focus.sortable-ghost {\n background-color: #222;\n }\n .Box-row--focus-blue.navigation-focus {\n background-color: #182030;\n }\n .Box-row--hover-gray:hover {\n background-color: #222;\n }\n .Box-row--hover-blue:hover {\n background-color: #182030;\n }\n @media (min-width: 768px) {\n .Box-row-link {\n color: #c6c6c6;\n }\n .Box-row-link:hover {\n color: #4f8cc9;\n }\n }\n .Box-footer {\n border-top-color: #343434;\n }\n .Box--blue {\n border-color: #246;\n }\n .Box--blue .Box-header {\n background-color: #182030;\n border-color: #246;\n }\n .Box--blue .Box-body, .Box--blue .Box-footer, .Box--blue .Box-row {\n border-color: #246;\n }\n .Box--danger, .Box--danger .Box-body:last-of-type,\n .Box--danger .Box-row:first-of-type {\n border-color: #d82828;\n }\n .Box-header--blue {\n background-color: #182030;\n border-color: #246;\n }\n .Box-row--yellow {\n background-color: #261d08;\n }\n .Box-row--blue {\n background-color: #182030;\n }\n .Box-row--gray {\n background-color: #222;\n }\n .btn .octicon {\n color: #9b9b9b;\n }\n .btn .Counter {\n background-color: rgba(220, 220, 220, .15);\n }\n .btn {\n color: #c6c6c6;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn.hover, .btn:hover, [open] > .btn {\n background-color: #242424;\n }\n .btn.selected, .btn:active, .btn[aria-selected=true] {\n background-color: #2c2c2c;\n box-shadow: none;\n }\n .btn.disabled, .btn:disabled, .btn[aria-disabled=true] {\n color: #767676;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n }\n .btn.focus, .btn:focus {\n box-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n }\n .btn-primary {\n color: #fff;\n background-color: #373;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: 0 1px 0 #000, inset 0 1px 0 rgba(255, 255, 255, .03);\n }\n .btn-primary.hover, .btn-primary:hover, [open] > .btn-primary {\n background-color: #484;\n }\n .btn-primary.selected, .btn-primary:active, .btn-primary[aria-selected=true] {\n background-color: #595;\n }\n .btn-primary.disabled, .btn-primary:disabled,\n .btn-primary[aria-disabled=true] {\n color: hsla(0, 0%, 100%, .2);\n background-color: #040;\n border-color: rgba(220, 220, 220, .1);\n box-shadow: 0 1px 0 #000, inset 0 1px 0 rgba(255, 255, 255, .03);\n }\n .btn-primary .Counter {\n background-color: hsla(0, 0%, 0%, .2);\n }\n .btn-primary .octicon {\n color: hsla(0, 0%, 100%, .2);\n }\n .btn-danger {\n color: #d82828;\n }\n .btn-danger:hover, [open] > .btn-danger {\n color: #fff;\n background-color: #d82828;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: 0 1px 0 #000, inset 0 1px 0 rgba(255, 255, 255, .03);\n }\n .btn-danger:hover .Counter, [open] > .btn-danger .Counter {\n background-color: hsla(0, 0%, 0%, .2);\n }\n .btn-danger.selected, .btn-danger:active, .btn-danger[aria-selected=true] {\n color: #fff;\n border-color: rgba(220, 220, 220, .15);\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=true] {\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-danger:focus {\n box-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n }\n .btn-outline {\n color: #4f8cc9;\n }\n .btn-outline:hover, [open] > .btn-outline {\n color: #fff;\n background-color: #4f8cc9;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: 0 1px 0 #000, inset 0 1px 0 rgba(255, 255, 255, .03);\n }\n .btn-outline:hover .Counter, [open] > .btn-outline .Counter {\n background-color: hsla(0, 0%, 0%, .2);\n }\n .btn-outline.selected, .btn-outline:active, .btn-outline[aria-selected=true] {\n color: #fff;\n background-color: #4f8cc9;\n border-color: rgba(220, 220, 220, .15);\n }\n .btn-outline.disabled, .btn-outline:disabled,\n .btn-outline[aria-disabled=true] {\n color: rgba(79, 140, 201, .5);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-blue {\n color: #fff;\n background-color: #4f8cc9;\n background-image: linear-gradient(-180deg, #4f8cc9 0%, #4f8cc9 90%);\n }\n .btn-blue.hover, .btn-blue:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-blue.selected, .btn-blue:active, .btn-blue[aria-selected=true],\n [open] > .btn-blue {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-blue.disabled, .btn-blue:disabled, .btn-blue[aria-disabled=true] {\n background-image: none;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-blue .Counter {\n background-color: #181818;\n }\n .btn-blue .Counter, .btn-link {\n color: #4f8cc9;\n }\n .btn-link {\n background-color: transparent;\n }\n .btn-link:disabled, .btn-link:disabled:hover, .btn-link[aria-disabled=true],\n .btn-link[aria-disabled=true]:hover {\n color: rgba(148, 148, 148, .5);\n }\n .btn-invisible {\n color: #4f8cc9;\n background-color: transparent;\n box-shadow: none;\n }\n .btn-invisible.selected, .btn-invisible.zeroclipboard-is-active,\n .btn-invisible.zeroclipboard-is-hover, .btn-invisible:active,\n .btn-invisible:focus, .btn-invisible:hover,\n .btn-invisible[aria-selected=true] {\n color: #4f8cc9;\n background: none;\n box-shadow: none;\n }\n .btn-octicon {\n color: #afafaf;\n background-color: transparent;\n }\n .btn-octicon:hover {\n color: #4f8cc9;\n }\n .btn-octicon.disabled, .btn-octicon.disabled:hover,\n .btn-octicon[aria-disabled=true], .btn-octicon[aria-disabled=true]:hover {\n color: #767676;\n }\n .btn-octicon-danger:hover {\n color: #d82828;\n }\n .close-button {\n background-color: transparent;\n }\n .ellipsis-expander, .hidden-text-expander a {\n color: #afafaf;\n background-color: #343434;\n }\n .ellipsis-expander:hover, .hidden-text-expander a:hover {\n background-color: #767676;\n }\n .ellipsis-expander:active, .hidden-text-expander a:active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .social-count {\n color: #c6c6c6;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .social-count:hover {\n color: #4f8cc9;\n }\n .social-count:focus {\n box-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n }\n .pagination a, .pagination em, .pagination span {\n color: #c6c6c6;\n }\n .pagination a:focus, .pagination a:hover, .pagination em:focus,\n .pagination em:hover, .pagination span:focus, .pagination span:hover {\n border-color: #343434;\n }\n .pagination a:active, .pagination em:active, .pagination span:active {\n border-color: #2c2c2c;\n }\n .pagination .next_page, .pagination .previous_page {\n color: #4f8cc9;\n }\n .pagination .current, .pagination .current:hover,\n .pagination [aria-current]:not([aria-current=false]) {\n color: #fff;\n background-color: #4f8cc9;\n }\n .pagination .disabled, .pagination .disabled:hover, .pagination .gap,\n .pagination .gap:hover, .pagination [aria-disabled=true],\n .pagination [aria-disabled=true]:hover {\n color: #9b9b9b;\n }\n .tooltipped::after {\n color: #fff;\n background-color: #dcdcdc;\n }\n .tooltipped::before {\n color: #dcdcdc;\n }\n .tooltipped-s::before, .tooltipped-se::before, .tooltipped-sw::before {\n border-bottom-color: #dcdcdc;\n }\n .tooltipped-n::before, .tooltipped-ne::before, .tooltipped-nw::before {\n border-top-color: #dcdcdc;\n }\n .tooltipped-w::before {\n border-left-color: #dcdcdc;\n }\n .tooltipped-e::before {\n border-right-color: #dcdcdc;\n }\n .border-x {\n border-right-color: #343434 !important;\n border-left-color: #343434 !important;\n }\n .border-y {\n border-top-color: #343434 !important;\n border-bottom-color: #343434 !important;\n }\n .border {\n border-color: #343434 !important;\n }\n .border-top {\n border-top-color: #343434 !important;\n }\n .border-right {\n border-right-color: #343434 !important;\n }\n .border-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-left {\n border-left-color: #343434 !important;\n }\n @media (min-width: 544px) {\n .border-sm {\n border-color: #343434 !important;\n }\n .border-sm-top {\n border-top-color: #343434 !important;\n }\n .border-sm-right {\n border-right-color: #343434 !important;\n }\n .border-sm-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-sm-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 768px) {\n .border-md {\n border-color: #343434 !important;\n }\n .border-md-top {\n border-top-color: #343434 !important;\n }\n .border-md-right {\n border-right-color: #343434 !important;\n }\n .border-md-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-md-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1012px) {\n .border-lg {\n border-color: #343434 !important;\n }\n .border-lg-top {\n border-top-color: #343434 !important;\n }\n .border-lg-right {\n border-right-color: #343434 !important;\n }\n .border-lg-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-lg-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1280px) {\n .border-xl {\n border-color: #343434 !important;\n }\n .border-xl-top {\n border-top-color: #343434 !important;\n }\n .border-xl-right {\n border-right-color: #343434 !important;\n }\n .border-xl-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-xl-left {\n border-left-color: #343434 !important;\n }\n }\n .border-blue {\n border-color: #4f8cc9 !important;\n }\n .border-blue-light {\n border-color: #246 !important;\n }\n .border-green {\n border-color: #373 !important;\n }\n .border-green-light {\n border-color: #040 !important;\n }\n .border-red, .border-red-light {\n border-color: #d82828 !important;\n }\n .border-purple {\n border-color: #73589a !important;\n }\n .border-yellow {\n border-color: #cb4 !important;\n }\n .border-gray-light {\n border-color: #2c2c2c !important;\n }\n .border-gray-dark {\n border-color: #343434 !important;\n }\n .border-black-fade {\n border-color: rgba(220, 220, 220, .15) !important;\n }\n .border-white-fade, .border-white-fade-15 {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n .border-white-fade-30 {\n border-color: hsla(0, 0%, 0%, .3) !important;\n }\n .border-white-fade-50 {\n border-color: hsla(0, 0%, 0%, .5) !important;\n }\n .border-white-fade-70 {\n border-color: hsla(0, 0%, 0%, .7) !important;\n }\n .border-white-fade-85 {\n border-color: hsla(0, 0%, 0%, .85) !important;\n }\n .box-shadow {\n box-shadow: 0 1px 0 #000 !important;\n }\n .box-shadow-medium {\n box-shadow: 0 3px 6px rgba(0, 0, 0, .15) !important;\n }\n .box-shadow-large {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .2) !important;\n }\n .box-shadow-extra-large {\n box-shadow: 0 12px 48px rgba(0, 0, 0, .3) !important;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .bg-white {\n background-color: #181818 !important;\n }\n .bg-blue {\n background-color: #4f8cc9 !important;\n }\n .bg-blue-light {\n background-color: #182030 !important;\n }\n .bg-gray {\n background-color: #222 !important;\n }\n .bg-gray-light {\n background-color: #181818 !important;\n }\n .bg-green {\n background-color: #484 !important;\n }\n .bg-green-light {\n background-color: #002800 !important;\n }\n .bg-red {\n background-color: #d82828 !important;\n }\n .bg-red-light {\n background-color: #300 !important;\n }\n .bg-yellow {\n background-color: #cb4 !important;\n }\n .bg-yellow-light {\n background-color: #651 !important;\n }\n .bg-yellow-dark {\n background-color: #cb4 !important;\n }\n .bg-purple {\n background-color: #73589a !important;\n }\n .bg-pink {\n background-color: #c49 !important;\n }\n .bg-purple-light {\n background-color: #213 !important;\n }\n .bg-orange {\n background-color: #f3582c !important;\n }\n .color-gray-0 {\n color: #181818 !important;\n }\n .bg-gray-0 {\n background-color: #181818 !important;\n }\n .color-gray-1 {\n color: #202020 !important;\n }\n .bg-gray-1 {\n background-color: #222 !important;\n }\n .color-gray-2 {\n color: #343434 !important;\n }\n .bg-gray-2 {\n background-color: #343434 !important;\n }\n .color-gray-3 {\n color: #343434 !important;\n }\n .bg-gray-3 {\n background-color: #343434 !important;\n }\n .color-gray-4 {\n color: #767676 !important;\n }\n .bg-gray-4 {\n background-color: #767676 !important;\n }\n .color-gray-5 {\n color: #9b9b9b !important;\n }\n .bg-gray-5 {\n background-color: #444 !important;\n }\n .color-gray-6 {\n color: #afafaf !important;\n }\n .bg-gray-6 {\n background-color: #343434 !important;\n }\n .color-gray-7 {\n color: #afafaf !important;\n }\n .bg-gray-7 {\n background-color: #afafaf !important;\n }\n .color-gray-8 {\n color: #c6c6c6 !important;\n }\n .bg-gray-8 {\n background-color: #222 !important;\n }\n .color-gray-9 {\n color: #c6c6c6 !important;\n }\n .bg-gray-9 {\n background-color: #181818 !important;\n }\n .color-blue-0 {\n color: #182030 !important;\n }\n .bg-blue-0 {\n background-color: #182030 !important;\n }\n .color-blue-1 {\n color: #182030 !important;\n }\n .bg-blue-1 {\n background-color: #182030 !important;\n }\n .bg-blue-2 {\n background-color: #246 !important;\n }\n .color-blue-3 {\n color: #4f8cc9 !important;\n }\n .bg-blue-3 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-4 {\n color: #4f8cc9 !important;\n }\n .bg-blue-4 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-5 {\n color: #4f8cc9 !important;\n }\n .bg-blue-5 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-6 {\n color: #4f8cc9 !important;\n }\n .bg-blue-6 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-7 {\n color: rgba(79, 140, 201, .5) !important;\n }\n .bg-blue-7 {\n background-color: rgba(79, 140, 201, .5) !important;\n }\n .color-blue-8 {\n color: #9daccc !important;\n }\n .bg-blue-8 {\n background-color: #182030 !important;\n }\n .color-blue-9 {\n color: #c6c6c6 !important;\n }\n .bg-blue-9 {\n background-color: #182030 !important;\n }\n .color-green-0 {\n color: #002800 !important;\n }\n .bg-green-0 {\n background-color: #002800 !important;\n }\n .color-green-1 {\n color: #002800 !important;\n }\n .bg-green-1 {\n background-color: #002800 !important;\n }\n .color-green-2 {\n color: #040 !important;\n }\n .bg-green-2 {\n background-color: #040 !important;\n }\n .color-green-3 {\n color: #040 !important;\n }\n .bg-green-3 {\n background-color: #040 !important;\n }\n .color-green-4 {\n color: #373 !important;\n }\n .bg-green-4 {\n background-color: #373 !important;\n }\n .color-green-5 {\n color: #484 !important;\n }\n .bg-green-5 {\n background-color: #484 !important;\n }\n .color-green-6 {\n color: #6cc644 !important;\n }\n .bg-green-6 {\n background-color: #6cc644 !important;\n }\n .color-green-7 {\n color: #6cc644 !important;\n }\n .bg-green-7 {\n background-color: #6cc644 !important;\n }\n .color-green-8 {\n color: #6cc644 !important;\n }\n .bg-green-8 {\n background-color: #6cc644 !important;\n }\n .color-green-9 {\n color: #6cc644 !important;\n }\n .bg-green-9 {\n background-color: #6cc644 !important;\n }\n .color-yellow-0 {\n color: #261d08 !important;\n }\n .bg-yellow-0 {\n background-color: #261d08 !important;\n }\n .color-yellow-1 {\n color: #261d08 !important;\n }\n .bg-yellow-1 {\n background-color: #261d08 !important;\n }\n .color-yellow-2 {\n color: #651 !important;\n }\n .bg-yellow-2 {\n background-color: #651 !important;\n }\n .color-yellow-3 {\n color: #cb4 !important;\n }\n .bg-yellow-3 {\n background-color: #cb4 !important;\n }\n .color-yellow-4 {\n color: #cb4 !important;\n }\n .bg-yellow-4 {\n background-color: #cb4 !important;\n }\n .color-yellow-5 {\n color: #cb4 !important;\n }\n .bg-yellow-5 {\n background-color: #cb4 !important;\n }\n .color-yellow-6 {\n color: #cb4 !important;\n }\n .bg-yellow-6 {\n background-color: #cb4 !important;\n }\n .color-yellow-7 {\n color: #cb4 !important;\n }\n .bg-yellow-7 {\n background-color: #cb4 !important;\n }\n .color-yellow-8 {\n color: #cb4 !important;\n }\n .bg-yellow-8 {\n background-color: #cb4 !important;\n }\n .color-yellow-9 {\n color: #bba257 !important;\n }\n .bg-yellow-9 {\n background-color: #bba257 !important;\n }\n .color-orange-0 {\n color: #730 !important;\n }\n .bg-orange-0 {\n background-color: #730 !important;\n }\n .color-orange-1 {\n color: #730 !important;\n }\n .bg-orange-1 {\n background-color: #730 !important;\n }\n .color-orange-2 {\n color: #730 !important;\n }\n .bg-orange-2 {\n background-color: #730 !important;\n }\n .color-orange-3 {\n color: #730 !important;\n }\n .bg-orange-3 {\n background-color: #730 !important;\n }\n .color-orange-4 {\n color: #fb8532 !important;\n }\n .bg-orange-4 {\n background-color: #fb8532 !important;\n }\n .color-orange-5 {\n color: #fb8532 !important;\n }\n .bg-orange-5 {\n background-color: #fb8532 !important;\n }\n .color-orange-6 {\n color: #fb8532 !important;\n }\n .bg-orange-6 {\n background-color: #fb8532 !important;\n }\n .color-orange-7 {\n color: #f3582c !important;\n }\n .bg-orange-7 {\n background-color: #f3582c !important;\n }\n .color-orange-8 {\n color: #f3582c !important;\n }\n .bg-orange-8 {\n background-color: #f3582c !important;\n }\n .color-orange-9 {\n color: #f3582c !important;\n }\n .bg-orange-9 {\n background-color: #f3582c !important;\n }\n .color-red-0 {\n color: #300 !important;\n }\n .bg-red-0 {\n background-color: #300 !important;\n }\n .color-red-1 {\n color: #300 !important;\n }\n .bg-red-1 {\n background-color: #300 !important;\n }\n .color-red-2 {\n color: #d82828 !important;\n }\n .bg-red-2 {\n background-color: #d82828 !important;\n }\n .color-red-3 {\n color: #d82828 !important;\n }\n .bg-red-3 {\n background-color: #d82828 !important;\n }\n .color-red-4 {\n color: #d82828 !important;\n }\n .bg-red-4 {\n background-color: #d82828 !important;\n }\n .color-red-5 {\n color: #d82828 !important;\n }\n .bg-red-5 {\n background-color: #d82828 !important;\n }\n .color-red-6 {\n color: #d82828 !important;\n }\n .bg-red-6 {\n background-color: #d82828 !important;\n }\n .color-red-7 {\n color: #d82828 !important;\n }\n .bg-red-7 {\n background-color: #d82828 !important;\n }\n .color-red-8 {\n color: #f84848 !important;\n }\n .bg-red-8 {\n background-color: #f84848 !important;\n }\n .color-red-9 {\n color: #f84848 !important;\n }\n .bg-red-9 {\n background-color: #f84848 !important;\n }\n .color-purple-0 {\n color: #213 !important;\n }\n .bg-purple-0 {\n background-color: #213 !important;\n }\n .color-purple-1 {\n color: #53387a !important;\n }\n .bg-purple-1 {\n background-color: #53387a !important;\n }\n .color-purple-2 {\n color: #53387a !important;\n }\n .bg-purple-2 {\n background-color: #53387a !important;\n }\n .color-purple-3 {\n color: #53387a !important;\n }\n .bg-purple-3 {\n background-color: #53387a !important;\n }\n .color-purple-4 {\n color: #53387a !important;\n }\n .bg-purple-4 {\n background-color: #53387a !important;\n }\n .color-purple-5 {\n color: #73589a !important;\n }\n .bg-purple-5 {\n background-color: #73589a !important;\n }\n .color-purple-6 {\n color: #73589a !important;\n }\n .bg-purple-6 {\n background-color: #73589a !important;\n }\n .color-purple-7 {\n color: #9378ba !important;\n }\n .bg-purple-7 {\n background-color: #9378ba !important;\n }\n .color-purple-8 {\n color: #9378ba !important;\n }\n .bg-purple-8 {\n background-color: #9378ba !important;\n }\n .color-purple-9 {\n color: #9378ba !important;\n }\n .bg-purple-9 {\n background-color: #9378ba !important;\n }\n .color-pink-0 {\n color: #170711 !important;\n }\n .bg-pink-0 {\n background-color: #170711 !important;\n }\n .color-pink-1 {\n color: #170711 !important;\n }\n .bg-pink-1 {\n background-color: #170711 !important;\n }\n .color-pink-2 {\n color: #170711 !important;\n }\n .bg-pink-2 {\n background-color: #170711 !important;\n }\n .color-pink-3 {\n color: #c49 !important;\n }\n .bg-pink-3 {\n background-color: #c49 !important;\n }\n .color-pink-4 {\n color: #c49 !important;\n }\n .bg-pink-4 {\n background-color: #c49 !important;\n }\n .color-pink-5 {\n color: #c49 !important;\n }\n .bg-pink-5 {\n background-color: #c49 !important;\n }\n .color-pink-6 {\n color: #e6b !important;\n }\n .bg-pink-6 {\n background-color: #e6b !important;\n }\n .color-pink-7 {\n color: #e6b !important;\n }\n .bg-pink-7 {\n background-color: #e6b !important;\n }\n .color-pink-8 {\n color: #e6b !important;\n }\n .bg-pink-8 {\n background-color: #e6b !important;\n }\n .color-pink-9 {\n color: #e6b !important;\n }\n .bg-pink-9 {\n background-color: #e6b !important;\n }\n .text-blue {\n color: #4f8cc9 !important;\n }\n .text-red {\n color: #d82828 !important;\n }\n .text-gray-light {\n color: #9b9b9b !important;\n }\n .text-gray {\n color: #afafaf !important;\n }\n .text-gray-dark {\n color: #c6c6c6 !important;\n }\n .text-green {\n color: #6cc644 !important;\n }\n .text-yellow {\n color: #cb4 !important;\n }\n .text-orange {\n color: #f3582c !important;\n }\n .text-orange-light {\n color: #fb8532 !important;\n }\n .text-purple {\n color: #73589a !important;\n }\n .text-pink {\n color: #c49 !important;\n }\n .text-white {\n color: #fff !important;\n }\n .link-gray {\n color: #afafaf !important;\n }\n .link-gray:hover {\n color: #4f8cc9 !important;\n }\n .link-gray-dark {\n color: #c6c6c6 !important;\n }\n .link-gray-dark:hover, .link-hover-blue:hover {\n color: #4f8cc9 !important;\n }\n .muted-link {\n color: #afafaf !important;\n }\n .muted-link:hover {\n color: #4f8cc9 !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .details-overlay-dark[open] > summary::before {\n background-color: rgba(220, 220, 220, .5);\n }\n .lead {\n color: #afafaf;\n }\n .text-emphasized {\n color: #c6c6c6;\n }\n .text-shadow-dark {\n text-shadow: 0 1px 1px rgba(220, 220, 220, .25), 0 1px 25px rgba(27, 31, 35, .75);\n }\n .text-shadow-light {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n .avatar-child {\n box-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n }\n .avatar-child, .AvatarStack-body {\n background-color: #181818;\n }\n .AvatarStack-body .avatar {\n background-color: #181818;\n border-right-color: var(--ghd-bg-color);\n }\n .avatar.avatar-more {\n background-color: #222;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before {\n outline: 1px solid #181818;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before,\n .AvatarStack--right .avatar.avatar-more {\n background-color: #343434;\n }\n .AvatarStack--right .avatar.avatar-more::after {\n background-color: #222;\n }\n .AvatarStack--right .avatar {\n border-left-color: var(--ghd-bg-color);\n }\n .DashedConnection::before {\n border-bottom-color: #343434;\n }\n .markdown-body kbd {\n color: #afafaf;\n background-color: #181818;\n border-color: #343434;\n box-shadow: inset 0 -1px 0 #343434;\n }\n .markdown-body .absent {\n color: #d82828;\n }\n .markdown-body hr {\n background-color: #343434;\n }\n .markdown-body blockquote {\n color: #9b9b9b;\n border-left-color: #343434;\n }\n .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link,\n .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link,\n .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link {\n color: #dcdcdc;\n }\n .markdown-body h1, .markdown-body h2 {\n border-bottom-color: #2c2c2c;\n }\n .markdown-body h6 {\n color: #9b9b9b;\n }\n .markdown-body table td, .markdown-body table th {\n border-color: #343434;\n }\n .markdown-body table tr {\n background-color: #181818;\n border-top-color: #767676;\n }\n .markdown-body table tr:nth-child(2n) {\n background-color: #222;\n }\n .markdown-body table img {\n background-color: transparent;\n }\n .markdown-body img {\n background-color: #181818;\n }\n .markdown-body .emoji {\n background-color: transparent;\n }\n .markdown-body span.frame > span {\n border-color: #343434;\n }\n .markdown-body span.frame span span {\n color: #c6c6c6;\n }\n .markdown-body code, .markdown-body tt {\n background-color: rgba(220, 220, 220, .05);\n }\n .markdown-body pre > code {\n background-color: transparent;\n }\n .markdown-body .highlight pre, .markdown-body pre {\n background-color: #222;\n }\n .markdown-body pre code, .markdown-body pre tt {\n background-color: transparent;\n }\n .markdown-body .csv-data .blob-num {\n background-color: #181818;\n }\n .markdown-body .csv-data th {\n background-color: #222;\n }\n .ais-SearchBox-input, .form-control, .form-select {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n box-shadow: none;\n }\n .ais-SearchBox-input:focus, .focus.ais-SearchBox-input, .form-control.focus,\n .form-control:focus, .form-select.focus, .form-select:focus {\n border-color: #4f8cc9;\n box-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n }\n .form-control[disabled], .form-select[disabled],\n [disabled].ais-SearchBox-input {\n color: #767676;\n background-color: #242424;\n }\n .input-contrast, .input-contrast:focus {\n background-color: #181818;\n }\n .input-dark {\n color: #fff;\n background-color: hsla(0, 0%, 0%, .15);\n box-shadow: none;\n }\n .input-dark.focus, .input-dark:focus {\n border-color: rgba(220, 220, 220, .4);\n }\n ::placeholder {\n color: #9b9b9b;\n }\n .form-checkbox label em.highlight {\n background-color: #261d08;\n }\n .form-checkbox .note, .hfields .form-group .form-group-header label,\n .hfields .form-group dt label {\n color: #afafaf;\n }\n .form-warning {\n color: #bba257;\n background-color: #261d08;\n border-color: #cb4;\n }\n .form-group .ais-SearchBox-input, .form-group .ais-SearchBox-input:focus,\n .form-group .form-control, .form-group .form-control:focus, .form-select {\n background-color: #181818;\n }\n .form-group .form-group-body h4.is-error, .form-group dd h4.is-error {\n color: #d82828;\n }\n .form-group .form-group-body h4.is-success, .form-group dd h4.is-success {\n color: #6cc644;\n }\n .form-group.required .form-group-header label::after,\n .form-group.required dt label::after {\n color: #d82828;\n }\n .form-group.successful .success {\n color: #6cc644;\n }\n .form-group.successed .success {\n color: #6cc644;\n background-color: #002800;\n border-color: #373;\n }\n .form-group.successed .success::after {\n border-bottom-color: #002800;\n }\n .form-group.successed .success::before {\n border-bottom-color: #373;\n }\n .form-group.warn .ais-SearchBox-input, .form-group.warn .form-control {\n border-color: #cb4;\n }\n .form-group.warn .warning {\n background-color: #651;\n border-color: #cb4;\n }\n .form-group.warn .warning::after {\n border-bottom-color: #651;\n }\n .form-group.warn .warning::before {\n border-bottom-color: #cb4;\n }\n .form-group.errored .ais-SearchBox-input, .form-group.errored .form-control {\n border-color: #d82828;\n }\n .form-group.errored label {\n color: #d82828;\n }\n .form-group.errored .error {\n background-color: #300;\n border-color: #d82828;\n }\n .form-group.errored .error::after {\n border-bottom-color: #300;\n }\n .form-group.errored .error::before {\n border-bottom-color: #d82828;\n }\n .note {\n color: #afafaf;\n }\n .status-indicator-success .octicon-check {\n color: #484;\n fill: #484;\n }\n .status-indicator-failed .octicon-x {\n color: #d82828;\n fill: #d82828;\n }\n .inline-form .btn-plain {\n background-color: transparent;\n }\n .drag-and-drop {\n color: #afafaf;\n background-color: #181818;\n border-color: #484848;\n }\n .drag-and-drop .error {\n color: #d82828;\n }\n .drag-and-drop-error-info {\n color: #afafaf;\n }\n .drag-and-drop-error-info a {\n color: #4f8cc9;\n }\n .upload-enabled textarea {\n border-bottom-color: #343434;\n }\n .upload-enabled.focused {\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .upload-enabled.focused .ais-SearchBox-input,\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .upload-enabled.focused .drag-and-drop {\n border-color: #4f8cc9;\n }\n .previewable-comment-form .comment {\n border-color: #484848;\n }\n h2.account, p.explain {\n color: #afafaf;\n }\n p.explain strong {\n color: #c6c6c6;\n }\n p.explain .octicon {\n color: #767676;\n }\n .radio-label {\n color: #c6c6c6;\n border-color: #343434;\n }\n :checked + .radio-label {\n border-color: #4f8cc9;\n }\n .menu {\n background-color: #181818;\n border-color: #343434;\n }\n .menu-item {\n color: #dcdcdc;\n border-bottom-color: #2c2c2c;\n }\n .menu-item:focus, .menu-item:hover {\n background-color: #222;\n }\n .menu-item:active {\n background-color: #181818;\n }\n .menu-item.selected::before,\n .menu-item[aria-current]:not([aria-current=false])::before,\n .menu-item[aria-selected=true]::before {\n background-color: #fff;\n }\n .menu-item .octicon {\n color: #767676;\n }\n .menu-item .menu-warning {\n color: #f84848;\n }\n .menu-item.alert .Counter {\n color: #d82828;\n }\n .menu-heading {\n color: #dcdcdc;\n border-bottom-color: #2c2c2c;\n }\n .tabnav {\n border-bottom-color: #343434;\n }\n .tabnav-tab {\n color: #c6c6c6;\n background-color: transparent;\n }\n .tabnav-tab.selected, .tabnav-tab[aria-current]:not([aria-current=false]),\n .tabnav-tab[aria-selected=true] {\n background-color: #181818;\n border-color: #343434;\n }\n .tabnav-tab:focus, .tabnav-tab:hover {\n color: #afafaf;\n }\n .tabnav-tab:active {\n color: #9b9b9b;\n }\n .tabnav-tab .octicon {\n color: #767676;\n }\n .tabnav-extra {\n color: #afafaf;\n }\n a.tabnav-extra:hover {\n color: #4f8cc9;\n }\n .filter-list.pjax-active .filter-item {\n color: #afafaf;\n background-color: transparent;\n }\n .filter-list.pjax-active .filter-item.pjax-active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item {\n color: #afafaf;\n }\n .filter-item:hover {\n background-color: #222;\n }\n .filter-item.selected, .filter-item[aria-current]:not([aria-current=false]),\n .filter-item[aria-selected=true] {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item .bar {\n background-color: #242424;\n }\n .SideNav {\n background-color: #181818;\n }\n .SideNav-item {\n color: #dcdcdc;\n background-color: transparent;\n border-top-color: #2c2c2c;\n }\n .SideNav-item:last-child {\n box-shadow: 0 1px 0 #343434;\n }\n .SideNav-item:focus, .SideNav-item:hover {\n background-color: #222;\n }\n .SideNav-item:active, .SideNav-item[aria-current]:not([aria-current=false]),\n .SideNav-item[aria-selected=true] {\n background-color: #181818;\n }\n .SideNav-item[aria-current]:not([aria-current=false])::before,\n .SideNav-item[aria-selected=true]::before {\n background-color: #fff;\n }\n .SideNav-icon {\n color: #9b9b9b;\n }\n .SideNav-subItem {\n color: #4f8cc9;\n background-color: transparent;\n }\n .SideNav-subItem:focus, .SideNav-subItem:hover,\n .SideNav-subItem[aria-current]:not([aria-current=false]),\n .SideNav-subItem[aria-selected=true] {\n color: #c6c6c6;\n }\n .subnav-bordered {\n border-bottom-color: #2c2c2c;\n }\n .subnav-item {\n color: #c6c6c6;\n border-color: #343434;\n }\n .subnav-item:focus, .subnav-item:hover {\n background-color: #222;\n }\n .subnav-item.selected, .subnav-item[aria-current]:not([aria-current=false]),\n .subnav-item[aria-selected=true] {\n color: #fff;\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .subnav-search-input {\n color: #afafaf;\n }\n .subnav-search-icon {\n color: #767676;\n }\n .subnav-search-context .btn {\n color: #afafaf;\n }\n .UnderlineNav {\n box-shadow: inset 0 -1px 0 #343434;\n }\n .UnderlineNav-item {\n color: #dcdcdc;\n background-color: transparent;\n border-bottom-color: transparent;\n }\n .UnderlineNav-item:focus, .UnderlineNav-item:hover {\n border-bottom-color: #343434;\n }\n .UnderlineNav-item.selected,\n .UnderlineNav-item[aria-current]:not([aria-current=false]),\n .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: #fff;\n }\n .UnderlineNav-item.selected .UnderlineNav-octicon,\n .UnderlineNav-item[aria-current]:not([aria-current=false]) .UnderlineNav-octicon,\n .UnderlineNav-item[role=tab][aria-selected=true] .UnderlineNav-octicon {\n color: #afafaf;\n }\n .UnderlineNav-octicon {\n color: #767676;\n }\n .label, .Label {\n background-color: transparent !important;\n border-color: #343434;\n }\n .Label--gray, .Label--outline {\n color: #afafaf;\n border-color: #343434;\n }\n .Label--gray-darker {\n color: #c6c6c6;\n border-color: #9b9b9b;\n }\n .Label--yellow {\n color: #bba257;\n border-color: #cb4;\n }\n .Label--orange {\n color: #f3582c;\n border-color: #fb8532;\n }\n .Label--red {\n color: #d82828;\n border-color: #d82828;\n }\n .Label--green, .Label--outline-green {\n color: #6cc644;\n border-color: #484;\n }\n .Label--blue {\n color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .Label--purple {\n color: #73589a;\n border-color: #53387a;\n }\n .Label--pink {\n color: #e6b;\n border-color: #c49;\n }\n .state, .State {\n color: #fff;\n background-color: #444;\n }\n .State--green {\n background-color: #484;\n }\n .State--red {\n background-color: #d82828;\n }\n .State--purple {\n background-color: #73589a;\n }\n .Counter {\n color: #c6c6c6;\n background-color: rgba(90, 90, 90, .5);\n }\n .Counter--gray-light {\n color: #9b9b9b;\n }\n .Counter--gray {\n color: #fff;\n background-color: #444;\n }\n .diffstat {\n color: #afafaf;\n }\n .diffstat-block-deleted {\n background-color: #d82828;\n }\n .diffstat-block-added {\n background-color: #373;\n }\n .diffstat-block-neutral {\n background-color: #343434;\n }\n .pullquote {\n color: #afafaf;\n border-left-color: #343434;\n }\n .btn-mktg {\n color: #fff;\n border: 1px solid #4f8cc9;\n }\n .btn-mktg:hover {\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .btn-mktg:focus {\n box-shadow: 0 0 0 .2em rgba(79, 140, 201, .5);\n }\n .btn-primary-mktg:hover {\n background-color: #484;\n border-color: #484;\n }\n .btn-outline-mktg, .btn-outline-mktg:hover {\n background-color: transparent;\n }\n .btn-outline-mktg:hover {\n color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .btn-transparent {\n color: #fff;\n background-color: transparent;\n background-image: none;\n border-color: hsla(0, 0%, 0%, .5);\n }\n .btn-transparent:active, .btn-transparent:hover {\n color: #c6c6c6;\n background-color: #181818;\n background-image: none;\n border-color: var(--ghd-bg-color);\n }\n .text-blue-mktg {\n color: #4f8cc9 !important;\n }\n .text-white-fade {\n color: hsla(0, 0%, 0%, .7) !important;\n }\n .underline-dashed {\n background-image: linear-gradient(to right, #343434 50%, transparent 0%);\n }\n .bg-blue-dark {\n background-color: #182030 !important;\n }\n h1 a, h2 a, h3 a, h4 a {\n color: #c6c6c6;\n }\n h3 a {\n color: #4f8cc9;\n }\n .directory-toc h3 a {\n color: #c6c6c6;\n }\n .header-notifications a {\n color: #4f8cc9;\n }\n @media (max-width: 768px) {\n .nav-mobile-dropdown.js-open {\n background-color: #181818;\n box-shadow: 0 1px 15px #000;\n }\n }\n @media (min-width: 768px) {\n .nav-desktop-langDropdown, .nav-desktop-productDropdown {\n background-color: #181818;\n box-shadow: 0 1px 15px #000;\n }\n }\n @media (min-width: 768px) {\n details.close-when-clicked-outside[open] > summary::before {\n background-color: transparent;\n }\n }\n .directory-link-box.Box:hover, .directory-link-box:hover .Box {\n border: 1px solid #4f8cc9;\n }\n .breadcrumbs a:not(:last-child)::after,\n .breadcrumbs span:not(:last-child)::after {\n color: #767676;\n }\n .markdown-body ol > li {\n border-top-color: #2c2c2c;\n }\n .markdown-body ol > li::before {\n color: #767676;\n }\n .procedural-image-wrapper img {\n border-color: #2c2c2c;\n }\n .ais-SearchBox-input {\n background-color: #181818;\n }\n .ais-SearchBox-reset {\n background: none;\n }\n .ais-Hits-item.active, .ais-Hits-item:hover {\n background-color: #182030;\n }\n .ais-Highlight-highlighted, mark {\n background: none;\n }\n .search-result-title .ais-Highlight-highlighted, .search-result-title mark {\n color: #4f8cc9;\n }\n .search-result-intro .ais-Highlight-highlighted, .search-result-intro mark {\n border-bottom: 1px solid #4f8cc9;\n }\n .search-result-content .ais-Highlight-highlighted,\n .search-result-content mark {\n border-bottom-color: #9b9b9b;\n }\n @media (min-width: 768px) {\n header #search-results-container {\n background-color: #181818;\n box-shadow: 0 1px 15px #000;\n }\n header .search-overlay-desktop.js-open {\n background-color: rgba(220, 220, 220, .15);\n }\n }\n .markdown-body .lead-mktg p {\n color: #c6c6c6;\n }\n .extended-markdown.note pre {\n background: none;\n }\n .extended-markdown.note pre code, div.light-bg a, div.light-bg a h4 {\n color: #c6c6c6;\n }\n div.light-bg a p {\n color: #afafaf;\n }\n div.dark-bg a, div.dark-bg a h4 {\n color: #fff;\n }\n div.dark-bg a p {\n color: hsla(0, 0%, 0%, .7);\n }\n .btn-mktg {\n background-color: #4f8cc9;\n }\n .btn-outline-mktg {\n background-color: #181818;\n color: #4f8cc9;\n }\n .bg-red-light a {\n color: #4f8cc9;\n }\n .markdown-body .bg-blue-light blockquote {\n color: #afafaf;\n }\n :checked + .x-radio-label {\n background: #4f8cc9;\n }\n :checked + .x-radio-label svg {\n fill: #181818;\n }\n .sidebar, .sidebar-background-color {\n background-color: #182030;\n }\n .sidebar-products .arrow, .sidebar-products a {\n color: #fff;\n }\n .sidebar-article.is-current-page > a, .sidebar-category.is-current-page > a,\n .sidebar-maptopic.is-current-page > a, .sidebar-product.is-current-page > a,\n .sidebar-products .arrow:hover, .sidebar-products a:hover {\n color: #4f8cc9;\n }\n .sidebar-category.active {\n background-color: #182030;\n }\n .sidebar-maptopic .sidebar-article::before {\n border-left: 1px solid rgba(79, 140, 201, .5);\n }\n .sidebar-maptopic .sidebar-article.active::before {\n border-left: 3px solid rgba(79, 140, 201, .5);\n }\n button.arrow-for-scrolling-top {\n color: #fff;\n }\n iframe#graphiql {\n border-color: #343434;\n }\n .markdown-body .code-extra pre {\n border-left-color: #343434 !important;\n border-bottom-color: #343434 !important;\n border-right-color: #343434 !important;\n }\n .hljs {\n color: #c6c6c6;\n background-color: #181818;\n }\n .hljs-comment, .hljs-quote {\n color: #9b9b9b;\n }\n .hljs-keyword, .hljs-selector-tag, .hljs-subst {\n color: #c6c6c6;\n }\n .hljs-literal, .hljs-number, .hljs-tag .hljs-attr, .hljs-template-variable,\n .hljs-variable {\n color: #6cc644;\n }\n .hljs-doctag, .hljs-string {\n color: #4f8cc9;\n }\n .hljs-section, .hljs-selector-id, .hljs-title {\n color: #f84848;\n }\n .hljs-attribute, .hljs-class .hljs-title, .hljs-name, .hljs-tag, .hljs-type {\n color: rgba(79, 140, 201, .5);\n }\n .hljs-link, .hljs-regexp {\n color: #6cc644;\n }\n .hljs-bullet, .hljs-symbol {\n color: #73589a;\n }\n .hljs-built_in, .hljs-builtin-name {\n color: rgba(79, 140, 201, .5);\n }\n .hljs-meta {\n color: #9b9b9b;\n }\n .hljs-deletion {\n background-color: #d82828;\n }\n .hljs-addition {\n background-color: #040;\n }\n .markdown-body table code {\n background-color: rgba(220, 220, 220, .05);\n }\n .markdown-body table pre > code {\n background-color: transparent;\n }\n .markdown-body table th {\n background-color: #181818;\n box-shadow: 0 3px 0 0 #767676;\n }\n .markdown-body table tr:nth-child(2n) {\n background: none;\n }\n .hover-shadow:hover {\n box-shadow: 0 1px 0 #000 !important;\n }\n .hover-shadow-medium:hover {\n box-shadow: 0 3px 6px rgba(0, 0, 0, .15) !important;\n }\n .hover-shadow-large:hover {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .2) !important;\n }\n .hover-shadow-extra-large:hover {\n box-shadow: 0 12px 48px rgba(0, 0, 0, .3) !important;\n }\n .bg-guides-gradient {\n background: linear-gradient(0deg, rgba(33, 136, 255, .11) 0%, transparent 100%);\n }\n .bg-gradient--purple-pink {\n background: linear-gradient(135deg, #53387a 0%, #c49 100%);\n }\n .bg-gradient--blue-green {\n background: linear-gradient(-70deg, #4f8cc9 0%, #01a49e 100%);\n }\n .bg-gradient--blue-purple {\n background: linear-gradient(-70deg, #4f8cc9 0%, #804eda 100%);\n }\n .bg-gradient--pink-blue {\n background: linear-gradient(-70deg, #db469f 0%, #4f8cc9 100%);\n }\n .text-gradient--purple-pink {\n background-image: linear-gradient(135deg, #53387a 0%, #c49 100%);\n }\n .text-gradient--blue-green {\n background-image: linear-gradient(-70deg, #4f8cc9 0%, #01a49e 100%);\n }\n .text-gradient--blue-purple {\n background-image: linear-gradient(-70deg, #4f8cc9 0%, #804eda 100%);\n }\n .text-gradient--pink-blue {\n background-image: linear-gradient(-70deg, #db469f 0%, #4f8cc9 100%);\n }\n .border-gradient--purple-pink::before {\n background-color: #181818;\n }\n .border-gradient--purple-pink::after {\n background: linear-gradient(135deg, #53387a 0%, #c49 100%);\n }\n .border-gradient--aquamarine-mauve::before,\n .border-gradient--blue-green::before,\n .border-gradient--coral-yellow-dark::before,\n .border-gradient--coral-yellow::before, .border-gradient--dark-mint::before,\n .border-gradient--mint-blue-dark::before,\n .border-gradient--mint-blue::before,\n .border-gradient--purple-coral-dark::before,\n .border-gradient--purple-coral::before,\n .border-gradient--turq-purple-dark::before {\n background-color: #181818;\n }\n .border-gradient--blue-green::after {\n background: linear-gradient(-70deg, #4f8cc9 0%, #01a49e 100%);\n }\n .border-gradient--blue-purple::before, .border-gradient--red-orange::before {\n background-color: #181818;\n }\n .border-gradient--blue-purple::after {\n background: linear-gradient(-70deg, #4f8cc9 0%, #804eda 100%);\n }\n .border-gradient--pink-blue::before {\n background-color: #181818;\n }\n .border-gradient--pink-blue::after {\n background: linear-gradient(-70deg, #db469f 0%, #4f8cc9 100%);\n }\n .border-gradient--pink-blue-dark::before {\n background-color: #181818;\n }\n ul.release-notes-list li.release-notes-list-item::marker {\n color: #767676;\n }\n .js-release-notes-patch-link.selected {\n background-color: #182030;\n }\n /* end docs.github.com rules */\n h4 a > strong code {\n color: #bebebe;\n }\n .directory-toc h3 a {\n color: #bebebe;\n }\n .nav-mobile-burgerIcon {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n /* Using #fff over currentColor because GH relies on browser default #000 */\n .hljs {\n color: var(--ghd-code-color);\n }\n .extended-markdown p code {\n background-color: #1e293c;\n }\n .extended-markdown.warning p code {\n background-color: #500;\n }\n .octicon-mark-github {\n color: currentcolor;\n }\n body.d-lg-flex .sidebar-products a:hover {\n opacity: 1;\n }\n .btn-blue.hover, .btn.btn-blue:hover {\n background-image: linear-gradient(-180deg, rgba(79, 140, 201, .9), rgba(79, 140, 201, .8) 90%) !important;\n border-color: rgba(79, 140, 201, .3) !important;\n }\n [style*=\"background-color: #fafbfc\"] {\n background: none !important;\n }\n .border-blue, .border-blue-light {\n border-color: #246 !important;\n }\n .btn-mktg {\n background-color: rgba(79, 140, 201, 1);\n border-color: #4f8cc9;\n color: #ddd;\n }\n .btn-mktg:hover {\n background-color: rgba(79, 140, 201, .9);\n border-color: #4f8cc9;\n color: #eee;\n }\n .btn-outline-mktg {\n background-color: transparent;\n color: rgba(79, 140, 201, 1);\n }\n .btn-outline-mktg:hover {\n color: rgba(79, 140, 201, .9);\n border-color: rgba(79, 140, 201, .9);\n background-color: transparent;\n }\n [stroke=\"#1277eb\"] {\n stroke: #4f8cc9;\n }\n .sidebar-category.active {\n background: rgba(255, 255, 255, .04);\n }\n .search-overlay-desktop.js-open {\n background: rgba(0, 0, 0, .4) !important;\n }\n g.octocat.header {\n filter: invert(100%) hue-rotate(180deg);\n }\n [style*=\"background:#fafbfc\"] {\n background: none !important;\n }", + "start": 573433, + "domains": [ + "docs.github.com" + ] + }, + { + "code": "/* begin refined-github rules */\n html.refined-github {\n --github-green: var(--color-text-success, #484);\n --github-red: var(--color-text-danger, #d82828);\n --github-border-color: var(--color-border-primary, #343434);\n }\n html.refined-github .markdown-body del,\n html.refined-github body > .footer li .btn-link,\n html.refined-github body > .footer li a {\n color: #9b9b9b;\n }\n html.refined-github .repository-content #readme:not(.blob) .Box-header {\n background-color: transparent !important;\n }\n html.refined-github .js-issue-row [aria-label=\"Open draft pull request\"] svg {\n stroke: var(--color-text-secondary, #afafaf);\n color: var(--color-bg-canvas, #181818) !important;\n }\n html.refined-github .rgh-clean-dashboard .dashboard .js-all-activity-header + div {\n background-color: var(--color-bg-canvas, #181818);\n }\n html.refined-github .rgh-clean-dashboard .dashboard .js-all-activity-header + div .Box {\n background: none;\n }\n html.refined-github .rgh-no-navigation-highlight .Box-row.navigation-focus,\n html.refined-github .rgh-no-navigation-highlight .list-group-item.navigation-focus,\n html.refined-github .rgh-no-navigation-highlight .navigation-focus td {\n background: none !important;\n }\n html.refined-github .rgh-useless-comments-note {\n color: #afafaf;\n }\n html.refined-github .reaction-summary-item a {\n background-color: var(--color-bg-canvas-inset, #202020);\n box-shadow: 0 0 0 2px var(--color-bg-info, var(--ghd-bg-color));\n }\n html.refined-github .reaction-summary-item a img {\n background-color: var(--color-bg-info, #181818);\n }\n html.refined-github .js-expandable-line:hover .blob-num:not(:hover) + .blob-code,\n html.refined-github .js-expandable-line:hover .blob-num:not(:hover) .directional-expander:first-child {\n border-color: #4f8cc9;\n color: #fff;\n background: #4f8cc9;\n }\n html.refined-github .rgh-private-org svg {\n fill: #c6c6c6;\n stroke: #181818;\n }\n html.refined-github .menu-item.selected.rgh-split-issue-pr-combined {\n background-color: initial;\n }\n html.refined-github .menu-item.selected.rgh-split-issue-pr-combined:hover {\n background-color: var(--color-menu-bg-active, #222);\n }\n html.refined-github a.rgh-highest-rated-comment {\n border-color: #373 !important;\n }\n html.refined-github .rgh-collaborator {\n border-color: var(--color-border-tertiary, #246);\n }\n html.refined-github .rgh-conflict-marker svg {\n color: var(--color-icon-tertiary, #5a5a5a);\n }\n html.refined-github .rgh-clean-conversation-headers-non-default-branch {\n background-color: #4f8cc9;\n }\n html.refined-github .rgh-clean-conversation-headers-non-default-branch a {\n color: #fff;\n }\n html.refined-github .rgh-table-input:hover .selected div {\n border-color: #4f8cc9;\n background-color: var(--color-diff-blob-hunk-num-bg, #182030);\n }\n html.refined-github .rgh-hide-markdown-diff .markdown-body :is(ins, html.refined-github .added, html.refined-github .changed) {\n background: none !important;\n box-shadow: none !important;\n }\n html.refined-github .rgh-hide-markdown-diff .markdown-body pre code {\n background: none !important;\n }\n /* end refined-github rules */\n /* begin zenhub rules */\n body.zh_logged_in #new_issue .discussion-sidebar h3 {\n border-top-color: #2c2c2c;\n }\n body.zh_logged_in .zh-app--dark.zh-app--visible .zh-app::after,\n body.zh_logged_in .zh-app--fixed-layout .zh-app--is-fullscreen {\n background-color: #181818;\n }\n body.zh_logged_in .zh-app--dark .zhc-collapsible-control.zhc-collapsible-control--border {\n background: none !important;\n }\n body.zh_logged_in .zh-app--dark .js-issue-connector-container .zhc-button--color-primary.zhc-button--variant-text:disabled {\n background: none;\n }\n body.zh_logged_in .zh-discussion-item .zh-estimate-is,\n body.zh_logged_in .zh-discussion-item .zh-estimate-was,\n body.zh_logged_in .zh-discussion-item .zh-issue,\n body.zh_logged_in .zh-discussion-item .zh-issue-event-workspace-name,\n body.zh_logged_in .zh-discussion-item .zh-pipeline-is,\n body.zh_logged_in .zh-discussion-item .zh-pipeline-was,\n body.zh_logged_in .zh-discussion-item .zh-release,\n body.zh_logged_in .zh-discussion-item strong {\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-issue-event-item-icon .zh-icon-issue-added,\n body.zh_logged_in .zh-issue-event-item-icon .zh-icon-issue-removed {\n border-color: var(--ghd-bg-color);\n background-color: #181818;\n }\n body.zh_logged_in .zh-issue-event-toggle:hover {\n color: #f0f0f0;\n }\n body.zh_logged_in .zh-issue-event-dark {\n color: #c6c6c6;\n }\n body.zh_logged_in .sidebar-zh-epic .discussion-sidebar-toggle:hover,\n body.zh_logged_in .sidebar-zh-epic .zh-discussion-sidebar-toggle:hover,\n body.zh_logged_in .sidebar-zh-estimate .discussion-sidebar-toggle:hover,\n body.zh_logged_in .sidebar-zh-estimate .zh-discussion-sidebar-toggle:hover {\n color: #5560d2;\n }\n body.zh_logged_in .zh-estimate-create-item {\n border-top-color: #343434;\n }\n body.zh_logged_in .zh-topbar-item.UnderlineNav-item.selected {\n background: none;\n border-bottom-color: #fff;\n }\n body.zh_logged_in .zh-topbar-item.UnderlineNav-item .zh-icon-zenhub {\n background-image: none;\n }\n body.zh_logged_in .zh-board-menu-itemgroup .zh-select-menu-item.navigation-focus,\n body.zh_logged_in .zh-board-menu-itemgroup .zh-select-menu-item.navigation-focus.selected {\n background-color: #242424;\n }\n body.zh_logged_in .zh-connect-repository-container {\n background-color: #222;\n }\n body.zh_logged_in .zh-connect-repository-container a {\n color: #c6c6c6;\n text-shadow: 0 1px 0 #181818;\n }\n body.zh_logged_in .zh-toggle-button {\n background-color: #181818;\n }\n body.zh_logged_in .zh-toggle-button.selected:active,\n body.zh_logged_in .zh-toggle-button:active {\n -webkit-box-shadow: inset 0 1px 3px rgba(255, 255, 255, .7);\n box-shadow: inset 0 1px 3px rgba(255, 255, 255, .7);\n }\n body.zh_logged_in .horizontal-scrollbar::-webkit-scrollbar-track {\n background-color: #242424;\n }\n body.zh_logged_in .horizontal-scrollbar::-webkit-scrollbar-thumb {\n background-color: #343434;\n }\n body.zh_logged_in .zh-pipeline {\n background-color: #222;\n border-color: #343434;\n }\n body.zh_logged_in .zh-pipeline-heading-container {\n background-color: #242424;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zh-pipeline-heading-edit {\n box-shadow: none !important;\n }\n body.zh_logged_in .zh-pipeline-options .zh-pipeline-button:focus {\n outline: 0 none #f0f0f0;\n }\n body.zh_logged_in .zh-power .zh-pipeline-options {\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-pipeline-issues::-webkit-scrollbar {\n background-color: #343434;\n }\n body.zh_logged_in .zh-pipeline-issues::-webkit-scrollbar-track {\n background-color: #222;\n }\n body.zh_logged_in .zh-pipeline-issues::-webkit-scrollbar-thumb {\n background-color: #343434;\n }\n body.zh_logged_in .zh-pipeline-issue {\n background-color: #343434;\n }\n body.zh_logged_in .zh-pipeline-issue-content {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zh-pipeline-issue-toggler {\n color: #343434;\n }\n body.zh_logged_in .zh-pipeline-issue-toggler:hover {\n color: #4f8cc9 !important;\n }\n body.zh_logged_in .zh-pipeline-issue-heading {\n border-bottom-color: #202020;\n }\n body.zh_logged_in .zh-issue-placeholder,\n body.zh_logged_in .zh-pipeline-placeholder {\n background-color: #202020;\n }\n body.zh_logged_in .zh-issue-meta {\n background-color: transparent;\n }\n body.zh_logged_in .zh-issue-label.dark {\n color: #fff;\n text-shadow: 0 1px 0 rgba(255, 255, 255, .7);\n }\n body.zh_logged_in .zh-issue-estimate-badge {\n color: #fff;\n }\n body.zh_logged_in .zh-overlay {\n background-color: #181818;\n }\n body.zh_logged_in .zh-overlay-body {\n color: #f0f0f0;\n }\n body.zh_logged_in .new-pipeline-column {\n background-color: #181818;\n }\n body.zh_logged_in .zh-board-menu-item .btn {\n background: -webkit-linear-gradient(#1d1d1d, #2c2c2c);\n background: -moz-linear-gradient(#1d1d1d, #2c2c2c);\n background: -o-linear-gradient(#1d1d1d, #2c2c2c);\n background: linear-gradient(#1d1d1d, #2c2c2c);\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-board-menu-item .btn.disabled,\n body.zh_logged_in .zh-board-menu-item .btn.disabled:hover {\n background-color: #181818;\n background-image: none;\n }\n body.zh_logged_in .zh-pipeline-collapsed .zh-pipeline-heading-container {\n border-right-color: #343434;\n }\n body.zh_logged_in .zh-pipeline-collapsed .zh-pipeline-options.zh-pipeline-icon {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zh-pipeline-expanded .zh-issue-meta {\n background-image: -webkit-linear-gradient(left, transparent 90%, #181818 99%);\n background-image: -moz-linear-gradient(left, transparent 90%, #181818 99%);\n background-image: -o-linear-gradient(left, transparent 90%, #181818 99%);\n background-image: linear-gradient(to right, transparent 90%, #181818 99%);\n }\n body.zh_logged_in .zh-epic-filter-container .btn {\n background: -webkit-linear-gradient(#1d1d1d, #2c2c2c) !important;\n background: -moz-linear-gradient(#1d1d1d, #2c2c2c) !important;\n background: -o-linear-gradient(#1d1d1d, #2c2c2c) !important;\n background: linear-gradient(#1d1d1d, #2c2c2c) !important;\n }\n body.zh_logged_in .search-query {\n background-color: #222;\n }\n body.zh_logged_in .search-query:focus,\n body.zh_logged_in .zh-overlay-loading-board {\n background-color: #181818;\n }\n body.zh_logged_in .zh-board-loading-message {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zh-board-readonly-banner {\n color: #fff;\n }\n body.zh_logged_in .zh-markdown-body {\n color: #767676;\n }\n body.zh_logged_in .zh-milestone-dates {\n border-color: #343434;\n background-color: #202020;\n }\n body.zh_logged_in .zh-milestone-dates .milestone-start-calendar-container {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zh-burndown-chart-container {\n border-left-color: #343434;\n border-right-color: #343434;\n }\n body.zh_logged_in .burndown-chart-tip {\n color: #9b9b9b;\n }\n body.zh_logged_in .zh-reports .stats-container {\n border-color: #343434;\n }\n body.zh_logged_in .zh-reports .stats-item {\n border-right-color: #343434;\n }\n body.zh_logged_in .zh-reports .stats-item--issues .zh-estimate-badge {\n background-color: #767676;\n border-color: #767676;\n }\n body.zh_logged_in .zh-reports .stats-item--issues .zh-estimate-badge-closed {\n color: #767676;\n border-color: #767676;\n }\n body.zh_logged_in .zh-reports .stats-item--issues strong,\n body.zh_logged_in .zh-reports .stats-label {\n color: #767676;\n }\n body.zh_logged_in .zh-issue-list .table-list-title {\n border-color: #343434;\n }\n body.zh_logged_in .zh-issue-list .table-list-header {\n color: #9b9b9b;\n }\n body.zh_logged_in .zh-burndown-repo-selector {\n border-color: #343434;\n }\n body.zh_logged_in .zh-reports .btn {\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-reports .btn:hover {\n background: -webkit-linear-gradient(#2c2c2c, #343434);\n background: -moz-linear-gradient(#2c2c2c, #343434);\n background: -o-linear-gradient(#2c2c2c, #343434);\n background: linear-gradient(#2c2c2c, #343434);\n color: #c6c6c6;\n }\n body.zh_logged_in .horizonal-grid-line {\n stroke: #2c2c2c;\n }\n body.zh_logged_in .zh-repo-switcher .zh-repo-switcher-btn,\n body.zh_logged_in .zh-repo-switcher .zh-repo-switcher-btn:hover {\n background-color: transparent;\n background-image: none;\n }\n body.zh_logged_in .zh-repo-switcher .zh-repo-switcher-btn.selected,\n body.zh_logged_in .zh-repo-switcher .zh-repo-switcher-btn:hover {\n background-color: #181818;\n border-color: #343434;\n box-shadow: none;\n }\n body.zh_logged_in .zh-state {\n background-color: #767676;\n color: #fff;\n }\n body.zh_logged_in .zh-timeline-comment {\n background-color: #181818;\n }\n body.zh_logged_in .zh-timeline-comment-header {\n color: #afafaf;\n background-color: #202020;\n border-color: #343434 #343434 #2c2c2c;\n }\n body.zh_logged_in .zh-timeline-comment-header-text {\n color: #afafaf;\n }\n body.zh_logged_in .zh-dependency-manager-container.TimelineItem .zhc-dependency,\n body.zh_logged_in .zh-epic-issue-container.TimelineItem .zhc-epic-issue-list__container,\n body.zh_logged_in .zh-epic-issue-container.TimelineItem .zhc-epic-list {\n background-color: #181818;\n }\n body.zh_logged_in .zh-collapse-manager-container--isExpanded .discussion-item:last-child {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zh-collapse-control-container {\n background-color: transparent;\n }\n body.zh_logged_in .zh-collapse-control {\n color: #5560d2;\n }\n body.zh_logged_in .zh-collapse-control:hover,\n body.zh_logged_in .zh-collapse-control__main-icon {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zh-collapse-control__second-text {\n color: #767676;\n }\n body.zh_logged_in .zh-issuecard-container {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zh-issuecard-placeholder {\n background-color: #202020;\n }\n body.zh_logged_in .zh-issuecard-avatar-container .zh-issuecard-assignees {\n color: #fff;\n }\n body.zh_logged_in .zh-pipeline-action,\n body.zh_logged_in .zh-pipeline-issue-action {\n background-color: #181818;\n }\n body.zh_logged_in .zh-pipeline-action:hover,\n body.zh_logged_in .zh-pipeline-issue-action:hover {\n background-color: #2c2c2c;\n }\n body.zh_logged_in .zh-issuecard-meta {\n border-top-color: #343434;\n }\n body.zh_logged_in .zh-issuecard-label.dark {\n color: #fff;\n text-shadow: 0 1px 0 rgba(255, 255, 255, .7);\n }\n body.zh_logged_in .zh-top-banner, body.zh_logged_in .zh-top-banner a {\n color: #fff;\n }\n body.zh_logged_in .zh-merge-repository-body {\n background-color: transparent;\n }\n body.zh_logged_in .zh-merge-repository-body .zh-open-cross-organization-btn {\n color: #767676;\n }\n body.zh_logged_in .zh-merge-repository-body .zh-open-cross-organization-btn:hover {\n color: #4f8cc9 !important;\n }\n body.zh_logged_in .zh-mergetool-pipelines-dialog {\n background-color: #181818;\n }\n body.zh_logged_in .zh-mergetool-pipelines-dialog .zh-mergetool-info {\n background-color: #222;\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-mergetool-pipelines-dialog .zh-miniboard-wrapper .zh-miniboard-pipeline {\n background-color: #181818;\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-mergetool-pipelines-dialog .zh-miniboard-wrapper .zh-miniboard-pipeline-target {\n background-color: #222;\n }\n body.zh_logged_in .zh-mergetool-pipelines-dialog .zh-miniboard-source-pipeline-placeholder,\n body.zh_logged_in .zh-mergetool-pipelines-dialog .zh-miniboard-wrapper .zh-miniboard-pipeline-target.zh-miniboard-new-pipeline {\n background-color: #181818;\n }\n body.zh_logged_in .btn.zh-multi-repo-show-all-btn,\n body.zh_logged_in .btn.zh-multi-repo-show-one-btn {\n background-image: none;\n }\n body.zh_logged_in .btn.zh-multi-repo-show-all-btn:hover,\n body.zh_logged_in .btn.zh-multi-repo-show-one-btn:hover {\n background-color: #181818;\n background-image: none;\n }\n body.zh_logged_in .zh-select-menu-modal-body .zh-select-menu-modal {\n background-color: #181818;\n }\n body.zh_logged_in .zhe .zh-onboarding-highlighted {\n background-color: #181818 !important;\n }\n body.zh_logged_in .zhe .zh-onboarding-highlighted .header-nav-link {\n color: #f0f0f0;\n }\n body.zh_logged_in .zh-onboarding-modal {\n background-color: #181818;\n color: #9b9b9b;\n }\n body.zh_logged_in .zh-onboarding-modal__title {\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-onboarding-modal__buttons .btn.btn--onboarding-cta {\n background-image: none;\n color: #fff;\n }\n body.zh_logged_in .zh-epic-issue-header {\n color: #afafaf;\n }\n body.zh_logged_in .zh-epic-issue-header-title,\n body.zh_logged_in .zh-epic-issue-header strong {\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-epic-issue-progress-text {\n color: #afafaf;\n }\n body.zh_logged_in .zh-epic-issue-progress-text strong {\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-select-menu-item {\n border-bottom-color: #2c2c2c;\n }\n body.zh_logged_in .zh-select-menu-item.navigation-focus,\n body.zh_logged_in .zh-select-menu-item:hover {\n background-color: #4f8cc9;\n color: #fff;\n }\n body.zh_logged_in .zh-select-menu-header {\n background-color: #242424;\n }\n body.zh_logged_in .zh-select-menu-header .zh-select-menu-title {\n color: #c6c6c6;\n text-shadow: 0 1px 0 #181818;\n }\n body.zh_logged_in .zh-discussion-sidebar-heading {\n color: #afafaf;\n }\n body.zh_logged_in .zh-discussion-sidebar-toggle {\n background: none;\n }\n body.zh_logged_in .zh-discussion-sidebar-toggle .octicon {\n color: #5a5a5a;\n }\n body.zh_logged_in .zh-discussion-sidebar-toggle .zhc-svg-icon--extension {\n color: #767676;\n }\n body.zh_logged_in .zh-discussion-sidebar-toggle:hover .zhc-svg-icon--extension {\n color: #5560d2;\n }\n body.zh_logged_in .zh-select-menu-footer {\n background-color: #222;\n }\n body.zh_logged_in .zh-select-menu-modal {\n color: #9b9b9b;\n background-color: #181818;\n }\n body.zh_logged_in .zh-select-menu-filters {\n background-color: #202020;\n }\n body.zh_logged_in .zh-select-menu-text-filter {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zh-select-menu-text-filter input {\n border-color: #343434;\n }\n body.zh_logged_in .gh-2019-ui .zh-discussion-sidebar-toggle .zhc-svg-icon--gear-github {\n color: #767676;\n }\n body.zh_logged_in .zh-reload-update-prompt-container {\n background-color: #181818;\n }\n body.zh_logged_in .zh-reload-update-prompt-content {\n color: #afafaf;\n }\n body.zh_logged_in .zh-issue-counter {\n background-color: #343434;\n }\n body.zh_logged_in .zh-progress-bar__background.zh-progress-bar__background--secondary {\n background-color: #767676;\n }\n body.zh_logged_in .zh-progress-bar__completed {\n background-color: #181818;\n }\n body.zh_logged_in .zh-chart .marker {\n stroke: #181818;\n }\n body.zh_logged_in .zh-tooltip {\n background-color: #f0f0f0;\n color: #fff;\n }\n body.zh_logged_in .zh-tooltip-filter-n::before {\n border-top-color: #f0f0f0;\n }\n body.zh_logged_in .zh-tooltip-help-w::before {\n border-right-color: #f0f0f0;\n }\n body.zh_logged_in .zh-d3-tooltip .zh-tooltip-content {\n background-color: #c6c6c6;\n color: #fff;\n }\n body.zh_logged_in .zh-d3-tooltip .zh-tooltip-triangle {\n border-top-color: #c6c6c6;\n }\n body.zh_logged_in .zh-epic-creator-page-visible .zh-epic-creator-container--fullscreen {\n background-color: #181818;\n }\n body.zh_logged_in .zh-epic-header .zh-estimate-is,\n body.zh_logged_in .zh-epic-header .zh-estimate-was,\n body.zh_logged_in .zh-epic-header .zh-issue,\n body.zh_logged_in .zh-epic-header .zh-pipeline-is,\n body.zh_logged_in .zh-epic-header .zh-pipeline-was {\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-epic-issue-list-item-md,\n body.zh_logged_in .zh-epic-issue-list-item-sm {\n background-color: #181818;\n }\n body.zh_logged_in .zh-epic-issue-list-item-md:hover {\n background-color: #242424;\n }\n body.zh_logged_in .zh-epic-issue-list-item-lg {\n background-color: #181818;\n }\n body.zh_logged_in .zh-epic-issue-list-item-lg:hover {\n background-color: #242424;\n }\n body.zh_logged_in .zh-epic-issue-list-item-title-link {\n color: #c6c6c6;\n }\n body.zh_logged_in .zh-epic-issue-list-item-title-link:hover {\n color: #4f8cc9;\n }\n body.zh_logged_in .zh-epic-issue-label.dark {\n color: #fff;\n }\n body.zh_logged_in .zh-epic-issue-list-item-number,\n body.zh_logged_in .zh-epic-issue-list-item-status {\n color: #767676;\n }\n body.zh_logged_in .zh-pipeline-badge-light {\n background-color: #343434;\n background-color: #242424;\n }\n body.zh_logged_in .zh-pipeline-badge {\n background-color: #343434;\n }\n body.zh_logged_in .zh-epic-creator-header-label {\n color: #767676;\n }\n body.zh_logged_in .zh-epic-creator-header-repo a {\n color: #4f8cc9;\n }\n body.zh_logged_in .zh-epic-creator-title input {\n background-color: #181818;\n }\n body.zh_logged_in .zh-epic-creator-nav {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zh-epic-creator-tab {\n background-color: initial;\n color: #f0f0f0;\n }\n body.zh_logged_in .zh-epic-creator-tab.selected {\n background-color: #181818;\n border-color: #3e4b9e #343434 transparent;\n border-bottom-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zh-epic-creator-issue-list .zh-epic-creator-issue-list-not-in-workspace {\n color: #c6c6c6;\n background-color: #222;\n border-bottom-color: #343434;\n border-top-color: #343434;\n }\n body.zh_logged_in .zh-progress-title {\n color: #767676;\n }\n body.zh_logged_in .zh-epic-creator-progress-bar {\n background-color: #2c2c2c;\n }\n body.zh_logged_in .zh-epic-creator-empty span {\n color: #767676;\n }\n body.zh_logged_in .zh-epic-creator-placeholder-bottom a {\n color: #9b9b9b;\n }\n body.zh_logged_in .zh-board-menu {\n border-bottom-color: #2c2c2c;\n }\n body.zh_logged_in .zh-new-issue-button {\n color: #fff;\n }\n body.zh_logged_in .zh-epic-pipeline-selector-name {\n color: #767676;\n }\n body.zh_logged_in .zh-epic-issues-picker-new-issue {\n border-color: #343434;\n }\n body.zh_logged_in .zh-epic-picker-issue-placeholder:hover {\n background-color: #181818;\n }\n body.zh_logged_in .zh-epic-issue-list-container,\n body.zh_logged_in .zh-epic-issue-list-footer {\n border-color: #343434;\n }\n body.zh_logged_in .zh-epic-issue-list-empty span {\n color: #767676;\n }\n body.zh_logged_in .zh-epic-btn {\n color: #fff;\n background-color: #2c2c2c;\n }\n body.zh_logged_in .zh-epic-btn:active {\n background-image: none;\n }\n body.zh_logged_in .zh-epic-form-control,\n body.zh_logged_in .zh-epic-form-control-small {\n color: #c6c6c6;\n border-color: #343434;\n }\n body.zh_logged_in .zh-epic-form-control-small:focus,\n body.zh_logged_in .zh-epic-form-control:focus {\n background-color: #181818;\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .btn {\n border-color: rgba(220, 220, 220, .2);\n color: #c6c6c6;\n background-color: #242424;\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .btn:hover {\n background-color: #444;\n background-image: -webkit-linear-gradient(270deg, #242424 0%, #444 90%);\n background-image: -moz-linear-gradient(270deg, #242424 0%, #444 90%);\n background-image: -o-linear-gradient(270deg, #242424 0%, #444 90%);\n background-image: linear-gradient(-180deg, #242424 0%, #444 90%);\n border-color: rgba(220, 220, 220, .35);\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .btn:active {\n background-color: #404040;\n background-image: none;\n border-color: rgba(220, 220, 220, .35);\n -webkit-box-shadow: inset 0 .15em .3em rgba(220, 220, 220, .15);\n box-shadow: inset 0 .15em .3em #000;\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .btn-primary {\n color: #fff;\n background-color: #484;\n background-image: -webkit-linear-gradient(270deg, #373 0%, #484 90%);\n background-image: -moz-linear-gradient(270deg, #373 0%, #484 90%);\n background-image: -o-linear-gradient(270deg, #373 0%, #484 90%);\n background-image: linear-gradient(-180deg, #373 0%, #484 90%);\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .btn-primary:hover {\n background-color: #595;\n background-image: -webkit-linear-gradient(270deg, #373 0%, #595 90%);\n background-image: -moz-linear-gradient(270deg, #373 0%, #595 90%);\n background-image: -o-linear-gradient(270deg, #373 0%, #595 90%);\n background-image: linear-gradient(-180deg, #373 0%, #595 90%);\n border-color: rgba(220, 220, 220, .5);\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .btn-primary:active {\n background-color: #595;\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n -webkit-box-shadow: inset 0 .15em .3em rgba(220, 220, 220, .15);\n box-shadow: inset 0 .15em .3em #000;\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .table-list-header {\n background-color: #222;\n border-color: #343434;\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .zh-board-menu-itemgroup .zh-select-menu-item.navigation-focus,\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .zh-board-menu-itemgroup .zh-select-menu-item.navigation-focus.selected {\n background-color: #242424;\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .search-query {\n background-color: #222;\n }\n body.zh_logged_in .zh-webapp.zh-epic-creator-page-visible .search-query:focus {\n background-color: #181818;\n }\n body.zh_logged_in .zh-estimate-badge {\n color: #fff;\n }\n body.zh_logged_in .zh-estimate-badge-closed {\n color: #fff;\n background-color: transparent;\n }\n body.zh_logged_in .zh-estimate-badge--epic-points {\n color: #fff;\n background-color: #343434;\n border-color: #343434;\n }\n body.zh_logged_in .zh-badge-value {\n color: #f0f0f0;\n }\n body.zh_logged_in .PresetDateRangePicker_button__selected {\n color: #fff;\n }\n body.zh_logged_in .SingleDatePicker_picker,\n body.zh_logged_in .SingleDatePicker_picker__fullScreenPortal,\n body.zh_logged_in .SingleDatePickerInput {\n background-color: #181818;\n }\n body.zh_logged_in .DayPickerKeyboardShortcuts_showSpan {\n color: #fff;\n }\n body.zh_logged_in .DayPickerKeyboardShortcuts_panel {\n background-color: #181818;\n }\n body.zh_logged_in .CalendarDay__default {\n color: #afafaf;\n background-color: #181818;\n }\n body.zh_logged_in .CalendarDay__hovered_offset {\n background-color: #242424;\n }\n body.zh_logged_in .CalendarDay__outside {\n background-color: #181818;\n color: #afafaf;\n }\n body.zh_logged_in .CalendarDay__blocked_minimum_nights,\n body.zh_logged_in .CalendarDay__blocked_minimum_nights:active,\n body.zh_logged_in .CalendarDay__blocked_minimum_nights:hover {\n background-color: #181818;\n }\n body.zh_logged_in .CalendarDay__highlighted_calendar,\n body.zh_logged_in .CalendarDay__highlighted_calendar:active,\n body.zh_logged_in .CalendarDay__highlighted_calendar:hover {\n color: #afafaf;\n }\n body.zh_logged_in .CalendarDay__selected,\n body.zh_logged_in .CalendarDay__selected:active,\n body.zh_logged_in .CalendarDay__selected:hover,\n body.zh_logged_in .CalendarDay__selected_span,\n body.zh_logged_in .CalendarDay__selected_span:active,\n body.zh_logged_in .CalendarDay__selected_span:hover {\n color: #fff;\n }\n body.zh_logged_in .CalendarDay__blocked_out_of_range,\n body.zh_logged_in .CalendarDay__blocked_out_of_range:active,\n body.zh_logged_in .CalendarDay__blocked_out_of_range:hover,\n body.zh_logged_in .CalendarMonth {\n background-color: #181818;\n }\n body.zh_logged_in .CalendarMonth_caption {\n color: #afafaf;\n }\n body.zh_logged_in .CalendarMonthGrid,\n body.zh_logged_in .DayPickerNavigation_button__default,\n body.zh_logged_in .DayPickerNavigation_button__verticalDefault {\n background-color: #181818;\n }\n body.zh_logged_in .DayPickerNavigation_svg__vertical {\n fill: #afafaf;\n }\n body.zh_logged_in .DayPicker, body.zh_logged_in .DayPicker__horizontal {\n background-color: #181818;\n }\n body.zh_logged_in .DayPicker_portal__horizontal {\n box-shadow: none;\n }\n body.zh_logged_in .DateInput,\n body.zh_logged_in .DayPicker_weekHeader__verticalScrollable {\n background-color: #181818;\n }\n body.zh_logged_in .DateInput_input {\n color: #afafaf;\n background-color: #181818;\n }\n body.zh_logged_in .DateInput_input__focused {\n background-color: #181818;\n }\n body.zh_logged_in .DateInput_fangShape {\n fill: #181818;\n }\n body.zh_logged_in .DateRangePickerInput {\n background-color: #181818;\n }\n body.zh_logged_in .DateRangePickerInput_arrow {\n color: #afafaf;\n }\n body.zh_logged_in .DateRangePickerInput_arrow_svg {\n fill: #afafaf;\n }\n body.zh_logged_in .DateRangePicker_picker,\n body.zh_logged_in .DateRangePicker_picker__fullScreenPortal {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-markdown a {\n color: #5560d2;\n }\n body.zh_logged_in .zhc-markdown h1, body.zh_logged_in .zhc-markdown h2 {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-markdown hr {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-markdown blockquote {\n border-left-color: #343434;\n }\n body.zh_logged_in .zhc-markdown table td,\n body.zh_logged_in .zhc-markdown table th,\n body.zh_logged_in .zhc-markdown table tr {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-markdown table tr {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-markdown pre,\n body.zh_logged_in .zhc-markdown table tr:nth-child(2n) {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-markdown pre code {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-markdown img {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-markdown kbd {\n color: #afafaf;\n background-color: #1d1d1d;\n border-color: #767676 #767676 #484848;\n -webkit-box-shadow: inset 0 -1px 0 #767676;\n box-shadow: inset 0 -2px 0 #383838;\n }\n body.zh_logged_in img.gh-emoji {\n background-color: transparent;\n }\n body.zh_logged_in .hljs {\n color: #c6c6c6;\n background-color: #202020;\n }\n body.zh_logged_in .hljs-keyword, body.zh_logged_in .hljs-selector-tag,\n body.zh_logged_in .hljs-subst {\n color: #c6c6c6;\n }\n body.zh_logged_in .hljs-meta {\n color: #767676;\n }\n body.zh_logged_in .zhc-btn {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-btn, body.zh_logged_in .zhc-btn.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn[disabled],\n body.zh_logged_in .zhc-btn[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn[disabled]:active,\n body.zh_logged_in .zhc-btn[disabled]:focus,\n body.zh_logged_in .zhc-btn[disabled]:hover {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn:active, body.zh_logged_in .zhc-btn:focus,\n body.zh_logged_in .zhc-btn:hover {\n background-color: #181818;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-btn.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn:active {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn .zhc-btn__tag {\n color: #fff;\n }\n body.zh_logged_in .zhc-btn--default,\n body.zh_logged_in .zhc-btn--default.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--default.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--default.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--default.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--default.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--default[disabled],\n body.zh_logged_in .zhc-btn--default[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--default[disabled]:active,\n body.zh_logged_in .zhc-btn--default[disabled]:focus,\n body.zh_logged_in .zhc-btn--default[disabled]:hover {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn--default.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--default:active,\n body.zh_logged_in .zhc-btn--default:focus,\n body.zh_logged_in .zhc-btn--default:hover {\n background-color: #181818;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-btn--default.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--default:active {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn--action {\n color: #fff;\n }\n body.zh_logged_in .zhc-btn--action.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--action.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--action.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--action.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--action.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--action[disabled],\n body.zh_logged_in .zhc-btn--action[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--action[disabled]:active,\n body.zh_logged_in .zhc-btn--action[disabled]:focus,\n body.zh_logged_in .zhc-btn--action[disabled]:hover {\n color: #767676;\n background-color: #343434;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-btn--danger {\n color: #fff;\n background-image: none !important;\n }\n body.zh_logged_in .zhc-btn--danger-bordered {\n background-color: #181818;\n background-image: none !important;\n }\n body.zh_logged_in .zhc-btn--danger-bordered.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--danger-bordered.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--danger-bordered.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--danger-bordered.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--danger-bordered.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--danger-bordered.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--danger-bordered:active,\n body.zh_logged_in .zhc-btn--danger-bordered:focus,\n body.zh_logged_in .zhc-btn--danger-bordered:hover,\n body.zh_logged_in .zhc-btn--danger-bordered[disabled],\n body.zh_logged_in .zhc-btn--danger-bordered[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--danger-bordered[disabled]:active,\n body.zh_logged_in .zhc-btn--danger-bordered[disabled]:focus,\n body.zh_logged_in .zhc-btn--danger-bordered[disabled]:hover {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-btn--minimal,\n body.zh_logged_in .zhc-btn--minimal.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--minimal.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--minimal.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--minimal.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--minimal.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--minimal.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--minimal:active,\n body.zh_logged_in .zhc-btn--minimal:focus,\n body.zh_logged_in .zhc-btn--minimal:hover,\n body.zh_logged_in .zhc-btn--minimal[disabled],\n body.zh_logged_in .zhc-btn--minimal[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--minimal[disabled]:active,\n body.zh_logged_in .zhc-btn--minimal[disabled]:focus,\n body.zh_logged_in .zhc-btn--minimal[disabled]:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-btn--primary {\n color: #fff;\n }\n body.zh_logged_in .zhc-btn--primary.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--primary.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--primary.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--primary.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--primary.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--primary[disabled],\n body.zh_logged_in .zhc-btn--primary[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--primary[disabled]:active,\n body.zh_logged_in .zhc-btn--primary[disabled]:focus,\n body.zh_logged_in .zhc-btn--primary[disabled]:hover {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn--primary-bordered,\n body.zh_logged_in .zhc-btn--primary-bordered.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--primary-bordered.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--primary-bordered.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--primary-bordered.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--primary-bordered.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--primary-bordered.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--primary-bordered:active,\n body.zh_logged_in .zhc-btn--primary-bordered:focus,\n body.zh_logged_in .zhc-btn--primary-bordered:hover,\n body.zh_logged_in .zhc-btn--primary-bordered[disabled],\n body.zh_logged_in .zhc-btn--primary-bordered[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--primary-bordered[disabled]:active,\n body.zh_logged_in .zhc-btn--primary-bordered[disabled]:focus,\n body.zh_logged_in .zhc-btn--primary-bordered[disabled]:hover {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-btn--secondary {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-btn--secondary,\n body.zh_logged_in .zhc-btn--secondary.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--secondary.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--secondary.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--secondary.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--secondary[disabled],\n body.zh_logged_in .zhc-btn--secondary[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary[disabled]:active,\n body.zh_logged_in .zhc-btn--secondary[disabled]:focus,\n body.zh_logged_in .zhc-btn--secondary[disabled]:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn--secondary.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary:active,\n body.zh_logged_in .zhc-btn--secondary:focus,\n body.zh_logged_in .zhc-btn--secondary:hover {\n background-color: #343434;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-btn--secondary-bordered {\n background-color: #181818;\n border-color: #343434;\n color: #9b9b9b;\n background-color: transparent;\n }\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled],\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled]:active,\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled]:focus,\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled]:hover {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary-bordered:active,\n body.zh_logged_in .zhc-btn--secondary-bordered:focus,\n body.zh_logged_in .zhc-btn--secondary-bordered:hover {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary-bordered:active {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary-bordered:active,\n body.zh_logged_in .zhc-btn--secondary-bordered:focus,\n body.zh_logged_in .zhc-btn--secondary-bordered:hover {\n background-color: #202020;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--secondary-bordered.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled],\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled]:active,\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled]:focus,\n body.zh_logged_in .zhc-btn--secondary-bordered[disabled]:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-btn--topbar:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn--text {\n background-color: transparent !important;\n }\n body.zh_logged_in .zhc-btn--text.zhc-btn--disabled,\n body.zh_logged_in .zhc-btn--text.zhc-btn--disabled.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--text.zhc-btn--disabled:active,\n body.zh_logged_in .zhc-btn--text.zhc-btn--disabled:focus,\n body.zh_logged_in .zhc-btn--text.zhc-btn--disabled:hover,\n body.zh_logged_in .zhc-btn--text[disabled],\n body.zh_logged_in .zhc-btn--text[disabled].zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--text[disabled]:active,\n body.zh_logged_in .zhc-btn--text[disabled]:focus,\n body.zh_logged_in .zhc-btn--text[disabled]:hover {\n background-color: transparent !important;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-btn--text-secondary-dark {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-btn--text-secondary,\n body.zh_logged_in .zhc-btn--text-secondary-dark:hover {\n color: #767676;\n }\n body.zh_logged_in .zhc-btn--border-hover-only.zhc-btn--is-active,\n body.zh_logged_in .zhc-btn--border-hover-only:active,\n body.zh_logged_in .zhc-btn--border-hover-only:focus,\n body.zh_logged_in .zhc-btn--border-hover-only:hover,\n body.zh_logged_in .zhc-confirm-dialog {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-confirm-dialog__subtitle {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-confirm-dialog__actions .zhc-btn--text {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-confirm-dialog__footer {\n border-top-color: #343434;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-input {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-input::placeholder {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-input--disabled {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-input--error:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhu-blankslate {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhu-checkbox {\n border-color: #343434;\n }\n body.zh_logged_in .zhu-checkbox:checked::after {\n color: #fff;\n }\n body.zh_logged_in .zhu-checkbox:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhu-color-white {\n color: #fff !important;\n }\n body.zh_logged_in .zhu-color-grey-light {\n color: #343434;\n }\n body.zh_logged_in .zhu-color-grey {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhu-color-text {\n color: #c6c6c6 !important;\n }\n body.zh_logged_in .zhu-color-text-secondary {\n color: #767676 !important;\n }\n body.zh_logged_in .zhu-color-text-secondary-dark {\n color: #9b9b9b !important;\n }\n body.zh_logged_in .zhu-panel {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhu-tag-default {\n border-color: #5a5a5a;\n background-color: #343434;\n color: #767676;\n }\n body.zh_logged_in .zhu-text-important {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhu-text-light {\n color: #fff !important;\n }\n body.zh_logged_in .zhu-text-secondary {\n color: #767676 !important;\n }\n body.zh_logged_in .zhu-text-secondary-dark {\n color: #9b9b9b !important;\n }\n body.zh_logged_in .zhu-text-grey-dark {\n color: #767676 !important;\n }\n body.zh_logged_in .zhc-account-details__section {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-account-details__item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-account-details__item--edit input {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-account-details__item--edit__info-message {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-billing-history__item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-billing-history__item:first-child {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-billing-invoice__content__title {\n border-bottom-color: #f0f0f0;\n }\n body.zh_logged_in .zhc-cancel-subscription-modal {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-cancel-subscription-modal__cancellation-reason {\n color: #c6c6c6;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-cancel-subscription-modal__missing-features {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-cancel-subscription-modal__missing-features__feature .zhu-checkbox:not(:checked) {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-cancel-subscription-modal__feedback,\n body.zh_logged_in .zhc-cancel-subscription-modal__note {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-cancel-subscription-modal__other-comments__input {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-cancel-subscription-modal__warning,\n body.zh_logged_in .zhc-cancel-subscription-page__text {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-cancel-subscription-page__subtext {\n color: #767676;\n }\n body.zh_logged_in .zhc-remove-licenses {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-remove-licenses__section {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-remove-licenses__subtext {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-remove-licenses__quantity {\n color: #9b9b9b;\n border-color: #343434;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-account-settings__section {\n background-color: #181818;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-account-settings__section h3,\n body.zh_logged_in .zhc-account-settings__section strong {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-account-settings__link {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-account-settings__link .zhu-panel {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-account-settings__link .zhu-panel:hover {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-account-settings__summary--warning {\n background-color: #261d08;\n border-color: #261d08;\n }\n body.zh_logged_in .zhc-account-settings__icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-organization-admin-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-organization-admin-item__username {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-organization-admin-item__display-name {\n color: #767676;\n }\n body.zh_logged_in .zhc-organization-admin-item__admin-tag {\n color: #fff;\n }\n body.zh_logged_in .zhc-avatar {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-badge {\n color: #fff;\n }\n body.zh_logged_in .zhc-badge--estimate-closed {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-badge--estimate-average {\n background-color: transparent;\n border-color: #343434;\n color: #767676;\n }\n body.zh_logged_in .zhc-badge--issue-count {\n color: #767676;\n background-color: #343434;\n }\n body.zh_logged_in .zhc-badge--epic-points {\n color: #767676;\n background-color: transparent;\n }\n body.zh_logged_in .zhc-badge--epic-points .zhc-badge__value {\n color: #f0f0f0;\n }\n body.zh_logged_in .zhc-banner {\n color: #9b9b9b;\n background-color: #261d08;\n border-color: #261d08;\n }\n body.zh_logged_in .zhc-banner strong {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-banner--neutral {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-blocking-notice-title {\n color: #767676;\n }\n body.zh_logged_in .zhc-board-loading__pipeline-section {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-board-loading__message {\n color: #9b9b9b;\n background-color: #181818;\n border-color: #343434;\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n body.zh_logged_in .zhc-board-loading__message .zhc-spinner-outline {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-board-loading__content {\n color: #767676;\n }\n body.zh_logged_in .zhc-branding {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-breadcrumbs--default .zhc-breadcrumbs__button--active,\n body.zh_logged_in .zhc-breadcrumbs--default .zhc-breadcrumbs__button:hover {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-breadcrumbs--extension-topbar .zhc-breadcrumbs__button:hover {\n border-color: #343434;\n background-color: #242424;\n }\n body.zh_logged_in .zhc-breadcrumbs--extension-topbar .zhc-breadcrumbs__button.zhc-breadcrumbs__button--untitled-workspace:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-breadcrumbs--extension-topbar .zhc-breadcrumbs__button--active {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-breadcrumbs--extension-topbar .zhc-breadcrumbs__button__untitled-tag:hover {\n background-color: #767676;\n }\n body.zh_logged_in .zhc-breadcrumbs__button__untitled-tag {\n background-color: #5a5a5a;\n color: #fff;\n }\n body.zh_logged_in .zhc-breadcrumbs__copy {\n color: #767676;\n }\n body.zh_logged_in .zhc-breadcrumbs__divider {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-breadcrumbs--workspace-phase-3-off.zhc-breadcrumbs--extension-topbar .zhc-breadcrumbs__button:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-burndown-chart__placeholder {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-burndown-chart__placeholder__message {\n color: #767676;\n background-color: #181818;\n border-color: #343434;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-burndown-chart__stats {\n border-left-color: #343434;\n }\n @media (max-width: 759px) {\n body.zh_logged_in .zhc-burndown-chart__stats:first-child {\n border-bottom-color: #343434;\n }\n }\n body.zh_logged_in .zhc-burndown-chart__stats__detail {\n color: #767676;\n }\n body.zh_logged_in .zhc-burndown-chart__stats__detail strong {\n color: #9b9b9b;\n }\n body.zh_logged_in .horizonal-grid-line,\n body.zh_logged_in .reference-line .line {\n stroke: #343434;\n }\n body.zh_logged_in .zhc-chart-tooltip--burndown .zhu-font-bold {\n color: #343434;\n }\n body.zh_logged_in .zhc-button {\n color: #fff;\n background-color: #181818;\n border-color: #343434;\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-button:active, body.zh_logged_in .zhc-button:focus,\n body.zh_logged_in .zhc-button:hover {\n background-color: #181818;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button[disabled],\n body.zh_logged_in .zhc-button[disabled]:active,\n body.zh_logged_in .zhc-button[disabled]:focus,\n body.zh_logged_in .zhc-button[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button.zhc-button--variant-text {\n color: #c6c6c6;\n background-color: transparent;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button.zhc-button--variant-text:active,\n body.zh_logged_in .zhc-button.zhc-button--variant-text:hover {\n color: #c6c6c6;\n background-color: transparent;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-button.zhc-button--variant-text:focus {\n background-color: transparent;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-button.zhc-button--variant-text[disabled] {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button--color-primary {\n color: #fff;\n }\n body.zh_logged_in .zhc-button--color-primary[disabled],\n body.zh_logged_in .zhc-button--color-primary[disabled]:active,\n body.zh_logged_in .zhc-button--color-primary[disabled]:focus,\n body.zh_logged_in .zhc-button--color-primary[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-text {\n background-color: transparent;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-text:active,\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-text:focus,\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-text:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-text[disabled] {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-outlined {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-outlined[disabled],\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-outlined[disabled]:active,\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-outlined[disabled]:focus,\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-outlined[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-outlined:active,\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-outlined:focus,\n body.zh_logged_in .zhc-button--color-primary.zhc-button--variant-outlined:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-secondary {\n color: #fff;\n background-color: #202020;\n border-color: #343434;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-button--color-secondary:active,\n body.zh_logged_in .zhc-button--color-secondary:focus,\n body.zh_logged_in .zhc-button--color-secondary:hover {\n background-color: #343434;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button--color-secondary[disabled],\n body.zh_logged_in .zhc-button--color-secondary[disabled]:active,\n body.zh_logged_in .zhc-button--color-secondary[disabled]:focus,\n body.zh_logged_in .zhc-button--color-secondary[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-text {\n color: #9b9b9b;\n background-color: transparent;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-text:active,\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-text:hover {\n color: #c6c6c6;\n background-color: transparent;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-text:focus {\n background-color: transparent;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-text[disabled] {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-outlined {\n background-color: transparent;\n background-color: #181818;\n color: #c6c6c6;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-outlined[disabled],\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-outlined[disabled]:active,\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-outlined[disabled]:focus,\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-outlined[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-outlined:active,\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-outlined:focus,\n body.zh_logged_in .zhc-button--color-secondary.zhc-button--variant-outlined:hover {\n background-color: transparent;\n border-color: #c6c6c6;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button--color-action {\n color: #fff;\n }\n body.zh_logged_in .zhc-button--color-action[disabled],\n body.zh_logged_in .zhc-button--color-action[disabled]:active,\n body.zh_logged_in .zhc-button--color-action[disabled]:focus,\n body.zh_logged_in .zhc-button--color-action[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-text {\n background-color: transparent;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-text:active,\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-text:focus,\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-text:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-text[disabled] {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-outlined {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-outlined[disabled],\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-outlined[disabled]:active,\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-outlined[disabled]:focus,\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-outlined[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-outlined:active,\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-outlined:focus,\n body.zh_logged_in .zhc-button--color-action.zhc-button--variant-outlined:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-danger {\n color: #fff;\n }\n body.zh_logged_in .zhc-button--color-danger[disabled],\n body.zh_logged_in .zhc-button--color-danger[disabled]:active,\n body.zh_logged_in .zhc-button--color-danger[disabled]:focus,\n body.zh_logged_in .zhc-button--color-danger[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-text {\n background-color: transparent;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-text:active,\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-text:focus,\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-text:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-text[disabled] {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-outlined {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-outlined[disabled],\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-outlined[disabled]:active,\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-outlined[disabled]:focus,\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-outlined[disabled]:hover {\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-outlined:active,\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-outlined:focus,\n body.zh_logged_in .zhc-button--color-danger.zhc-button--variant-outlined:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-button--color-inactive {\n color: #fff;\n background-color: #181818;\n color: #c6c6c6;\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button--color-inactive:active,\n body.zh_logged_in .zhc-button--color-inactive:focus,\n body.zh_logged_in .zhc-button--color-inactive:hover {\n background-color: #181818;\n border-color: #5a5a5a;\n background-color: #202020;\n border-color: #343434;\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-button-group > *,\n body.zh_logged_in .zhc-calendar.zhc-popover .DateRangePicker .DateRangePicker_picker .DayPicker.DayPicker__horizontal {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-cancellation-notice__text {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-cancellation-notice__small-text,\n body.zh_logged_in .zhc-cannot-create-workspace__msg {\n color: #767676;\n }\n body.zh_logged_in .zhc-chart-container {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-chart-container__header {\n background-color: #242424;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-chart-container__info-toggle {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-chart-annotation {\n color: #767676;\n }\n body.zh_logged_in .zhc-chart-container__footer {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-chart-legend__item {\n border-bottom-color: #343434;\n }\n @media (max-width: 759px) {\n body.zh_logged_in .zhc-chart-legend__item:nth-child(even) {\n border-left-color: #343434;\n }\n }\n @media (min-width: 760px) and (max-width: 1019px) {\n body.zh_logged_in .zhc-chart-legend__item:not(:nth-child(4n)) {\n border-right-color: #343434;\n }\n }\n @media (min-width: 1020px) {\n body.zh_logged_in .zhc-chart-legend__item:not(:nth-child(5n)) {\n border-right-color: #343434;\n }\n }\n body.zh_logged_in .zhc-chart-legend__item-label {\n color: #767676;\n }\n body.zh_logged_in .zhc-chart-stats__stat {\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-chart-info__wrapper {\n background-color: #202020;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-chart-info__close {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-chart-axis line,\n body.zh_logged_in .zhc-chart-axis path {\n stroke: #343434;\n }\n body.zh_logged_in .zhc-chart-barchart__bar {\n fill: #343434;\n }\n body.zh_logged_in .zhc-chart-legend::after {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-chart-legend .zhc-dropdown,\n body.zh_logged_in .zhc-chart-legend display flex {\n border-bottom-color: #343434;\n }\n @media (max-width: 759px) {\n body.zh_logged_in .zhc-chart-legend .zhc-dropdown:nth-child(odd),\n body.zh_logged_in .zhc-chart-legend display flex:nth-child(odd) {\n border-right-color: #343434;\n }\n }\n @media (min-width: 760px) and (max-width: 1019px) {\n body.zh_logged_in .zhc-chart-legend .zhc-dropdown:not(:nth-child(4n)),\n body.zh_logged_in .zhc-chart-legend display flex:not(:nth-child(4n)) {\n border-right-color: #343434;\n }\n }\n @media (min-width: 1020px) {\n body.zh_logged_in .zhc-chart-legend .zhc-dropdown:not(:nth-child(5n)),\n body.zh_logged_in .zhc-chart-legend display flex:not(:nth-child(5n)) {\n border-right-color: #343434;\n }\n }\n body.zh_logged_in .zhc-chart-legend .zhc-dropdown .zhc-selection-button {\n background-image: none;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-chart-legend-icon--check::after {\n border-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-chart-legend-icon--disabled {\n border-color: #5a5a5a;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-chart-legend__labels {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-chart-legend__labels--notselected {\n color: #767676;\n background-color: #202020;\n }\n @media (max-width: 759px) {\n body.zh_logged_in .zhc-chart-legend__labels:nth-child(odd) {\n border-right-color: #343434;\n }\n }\n @media (min-width: 760px) and (max-width: 1019px) {\n body.zh_logged_in .zhc-chart-legend__labels:not(:nth-child(4n)) {\n border-right-color: #343434;\n }\n }\n @media (min-width: 1020px) {\n body.zh_logged_in .zhc-chart-legend__labels:not(:nth-child(5n)) {\n border-right-color: #343434;\n }\n }\n body.zh_logged_in .zhc-chart-legend__labels-label-item:hover {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-chart-legend__labels-x {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-chart-date-marker text {\n fill: #c6c6c6;\n }\n body.zh_logged_in .zhc-chart-date-marker .zhc-chart-linechart__path {\n stroke: #f0f0f0;\n }\n body.zh_logged_in .zhc-release-report-chart__completion .zhc-chart-linechart__path,\n body.zh_logged_in .zhc-release-report-chart__today .zhc-chart-linechart__path {\n stroke: #c6c6c6;\n }\n body.zh_logged_in .zhc-svg-tooltip {\n background-color: #c6c6c6;\n color: #343434;\n }\n body.zh_logged_in .zhc-svg-tooltip--control-chart {\n background-color: #c6c6c6;\n }\n body.zh_logged_in .zhc-svg-tooltip--control-chart .zhc-svg-tooltip__title {\n color: #242424;\n }\n body.zh_logged_in .zhc-chart-tooltip,\n body.zh_logged_in .zhc-chart-tooltip__section--title {\n color: #343434;\n }\n body.zh_logged_in .zhc-checkable {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-checkbox-custom input {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-checkbox-custom input:focus {\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-checkbox {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-checkbox__organization {\n color: #767676;\n }\n body.zh_logged_in .zhc-checkbox-toggle::before {\n background-color: #5a5a5a;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-checkbox-toggle::after {\n background-color: #181818;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-checkout-box__title input[type=\"radio\"] {\n box-shadow: 0 0 0 1px #6061be, inset 0 0 0 3px var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-checkout-box__input {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-checkout-box__input:hover {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-checkout-box__input input:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-checkout-box__input-button {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-checkout-box__plan--active {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-checkout-box__cancel,\n body.zh_logged_in .zhc-checkout-box__card-number,\n body.zh_logged_in .zhc-checkout-box__meta {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-chip {\n color: #fff;\n }\n body.zh_logged_in .zhc-chip--outlined {\n background-color: #181818;\n color: #767676;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-choose-organization {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-choose-organization__count {\n color: #767676;\n }\n body.zh_logged_in .zhc-choose-organization__learn-more,\n body.zh_logged_in .zhc-choose-organization__section + .zhc-choose-organization__section {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-organization-item:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-organization-item__content .zhc-avatar {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-organization-item__name {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-organization-item__personal {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-click-text-item--secondary,\n body.zh_logged_in .zhc-click-text-item.zhc-click-text-item--disabled {\n color: #767676;\n }\n body.zh_logged_in .zhc-collapsible__content {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-collapsible-control--grey {\n color: #767676;\n }\n body.zh_logged_in .zhc-collapsible-control--button {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-collapsible-control:hover.zhc-collapsible-control--grey:not(.zhc-collapsible-control--border) {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-collapsible-control:hover.zhc-collapsible-control--border {\n border-color: #343434;\n background-color: #181818;\n }\n @media (max-width: 759px) {\n body.zh_logged_in .zhc-collapsible-control {\n border-color: #343434;\n }\n }\n body.zh_logged_in .zhc-collapsible-control__main-icon {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-collapsible-control__second-toggle-text {\n color: #767676;\n }\n body.zh_logged_in .zhc-confirmation-modal {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-consent-form {\n background: #181818 url(\"data:image/svg+xml;charset=utf-8,%3Csvg width=%22834%22 height=%22828%22 xmlns=%22http://www.w3.org/2000/svg%22 xmlns:xlink=%22http://www.w3.org/1999/xlink%22%3E%3Cdefs%3E%3ClinearGradient x1=%2280.027%25%22 y1=%2247.832%25%22 x2=%229.586%25%22 y2=%2255.167%25%22 id=%22c%22%3E%3Cstop stop-color=%22%235F7EFC%22 offset=%220%25%22/%3E%3Cstop stop-color=%22%237000E3%22 offset=%22100%25%22/%3E%3C/linearGradient%3E%3ClinearGradient x1=%2292.374%25%22 y1=%2255.364%25%22 x2=%2217.484%25%22 y2=%2250%25%22 id=%22e%22%3E%3Cstop stop-color=%22%23926BFF%22 offset=%220%25%22/%3E%3Cstop stop-color=%22%232041F4%22 offset=%22100%25%22/%3E%3C/linearGradient%3E%3ClinearGradient x1=%2296.881%25%22 y1=%2248.867%25%22 x2=%220%25%22 y2=%2258.824%25%22 id=%22f%22%3E%3Cstop stop-color=%22%236341FA%22 offset=%220%25%22/%3E%3Cstop stop-color=%22%23674BF6%22 offset=%22100%25%22/%3E%3C/linearGradient%3E%3ClinearGradient x1=%2296.881%25%22 y1=%2249.135%25%22 x2=%220%25%22 y2=%2256.734%25%22 id=%22g%22%3E%3Cstop stop-color=%22%236341FA%22 offset=%220%25%22/%3E%3Cstop stop-color=%22%23674BF6%22 offset=%22100%25%22/%3E%3C/linearGradient%3E%3Cfilter x=%22-21.1%25%22 y=%22-21.3%25%22 width=%22142.1%25%22 height=%22142.5%25%22 filterUnits=%22objectBoundingBox%22 id=%22a%22%3E%3CfeOffset in=%22SourceAlpha%22 result=%22shadowOffsetOuter1%22/%3E%3CfeGaussianBlur stdDeviation=%2235%22 in=%22shadowOffsetOuter1%22 result=%22shadowBlurOuter1%22/%3E%3CfeColorMatrix values=%220 0 0 0 0.0745098039 0 0 0 0 0.152941176 0 0 0 0 0.894117647 0 0 0 0.4 0%22 in=%22shadowBlurOuter1%22 result=%22shadowMatrixOuter1%22/%3E%3CfeMerge%3E%3CfeMergeNode in=%22shadowMatrixOuter1%22/%3E%3CfeMergeNode in=%22SourceGraphic%22/%3E%3C/feMerge%3E%3C/filter%3E%3Cpath d=%22M358.656 626.313c270.632-27.386 282.42-346.078 276.148-540.827-6.272-194.75-136.748 0-326.256 32.514C119.04 150.514 0 227.77 0 370.03S88.024 653.7 358.656 626.313z%22 id=%22b%22/%3E%3C/defs%3E%3Cg filter=%22url(%23a)%22 transform=%22translate(99 99)%22 fill=%22none%22 fill-rule=%22evenodd%22%3E%3Cmask id=%22d%22 fill=%22%23fff%22%3E%3Cuse xlink:href=%22%23b%22/%3E%3C/mask%3E%3Cuse fill=%22%236450F0%22 xlink:href=%22%23b%22/%3E%3Cpath d=%22M454.907 357.964c-.096-142.362-133.914-183.517-214.264-200.92-37.886-8.205-76.855 8.82-110.283 24.655-47.39 22.45 21.808 123.896 143.503 121.512 121.694-2.384 181.087 119.692 181.044 54.753z%22 fill=%22url(%23c)%22 opacity=%22.718%22 mask=%22url(%23d)%22 transform=%22rotate(-47 285.115 265.965)%22/%3E%3Cpath d=%22M.193 390.372c36.666 38.169 70.469 57.543 101.408 58.122 65.685 1.231 111.554-28.572 166.782-31.708 61.68-3.501 115.674 9.082 145.696 31.708 51.178 38.573 7.579 71.923 7.579 117.081 0 30.106 12.271 53.383 36.813 69.832H.193V390.372z%22 fill=%22url(%23e)%22 mask=%22url(%23d)%22/%3E%3Cpath d=%22M6.372 493.286c19.112-14.197 41.68-20.19 67.704-17.981 44.428 3.772 55.024 51.37 94.732 51.233 47.647-.163 69.098-25.232 123.82-14.74 54.72 10.49 73.831 40.158 80.1 49.802 4.18 6.43 13.113 30.063 26.801 70.902L6.372 640.02V493.286z%22 fill=%22url(%23f)%22 opacity=%22.366%22 mask=%22url(%23d)%22/%3E%3Cpath d=%22M-24.975 236.106c22.889-14.19 49.92-20.17 81.096-17.944 53.223 3.8 65.941 51.416 113.509 51.305 57.077-.135 82.76-25.197 148.319-14.669 65.557 10.528 110.828 42.355 118.342 52.005 5.01 6.433 31.673 31.554 79.988 75.36-108.887 22.04-187.45 33.433-235.689 34.179-29.005.448-112.357-32.833-182.306-41.242-30.924-3.717-71.985-1.125-123.183 7.777l-.076-146.771z%22 fill=%22url(%23g)%22 opacity=%22.366%22 mask=%22url(%23d)%22 transform=%22rotate(155 245.652 317.028)%22/%3E%3C/g%3E%3C/svg%3E\") 280px -75px no-repeat;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-consent-form__title {\n border-top-color: #343434;\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-consent-form__checkbox input {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-consent-form__checkbox input:focus {\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-consent-form__policy,\n body.zh_logged_in .zhc-contact-support {\n color: #767676;\n }\n @media (min-width: 1020px) {\n body.zh_logged_in .zhc-control-chart .zhc-control-chart__left-axis {\n box-shadow: none;\n }\n }\n @media (min-width: 980px) {\n body.zh_logged_in .zhc-control-chart-report .zhc-reports-repos-scale-wrapper::before {\n border-right-color: #5a5a5a;\n }\n }\n body.zh_logged_in .zhc-control-chart-report .zhc-dropdown--ccr-pipelines .zhc-selection-list-deprecated__description {\n color: #767676;\n }\n body.zh_logged_in .zhc-control-chart-report .zhc-dropdown--ccr-pipelines .zhc-selection-item--is-disabled {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-control-chart-report__chart_stat .zhc-chart-stat-title {\n color: #767676;\n }\n body.zh_logged_in .zhc-control-chart-report__chart_stat .zhc-chart-emphasis {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-cumulative-chart__left-axis {\n box-shadow: 0 -8px 8px 0 rgba(255, 255, 255, .7);\n }\n @media (min-width: 1020px) {\n body.zh_logged_in .zhc-cumulative-chart__left-axis {\n box-shadow: none;\n }\n }\n body.zh_logged_in .zhc-cumulative-chart__chart__dot {\n stroke: #181818;\n }\n body.zh_logged_in .zhc-color-square--disabled {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-api-tokens__instruction {\n color: #767676;\n }\n body.zh_logged_in .zhc-api-tokens__form .zhc-icon {\n color: #fff;\n }\n body.zh_logged_in .zhc-api-tokens__warning {\n color: #767676;\n }\n body.zh_logged_in .zhc-billing {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-billing__period,\n body.zh_logged_in .zhc-billing__title {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-billing__stripe-icon {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-dashboard-nav .zhc-org-dropdown__toggle-button {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-dashboard-nav .zhc-org-dropdown__toggle-button:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-dashboard-nav .zhc-mail-to {\n color: #767676;\n }\n body.zh_logged_in .zhc-dashboard-nav__section {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-dashboard-nav__item--secondary {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-dashboard-nav__item--info {\n color: #767676;\n }\n body.zh_logged_in .zhc-dashboard-topbar {\n background-color: #181818;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .DateRangePickerInput {\n border-color: #343434;\n }\n body.zh_logged_in .DateRangePickerInput:active,\n body.zh_logged_in .DateRangePickerInput:focus,\n body.zh_logged_in .DateRangePickerInput:hover {\n border-color: #5a5a5a;\n }\n @media (min-width: 760px) {\n body.zh_logged_in .DateRangePickerInput .DateRangePicker_picker {\n border-color: #343434;\n }\n }\n body.zh_logged_in .DateRangePickerInput_arrow::after {\n color: #c6c6c6;\n }\n body.zh_logged_in .DateInput {\n background: none;\n color: #9b9b9b;\n }\n body.zh_logged_in .DateInput .DateInput_input {\n background: none;\n }\n body.zh_logged_in .DateInput .DateInput_input.DateInput_input__focused {\n color: #fff;\n }\n body.zh_logged_in .DateInput .DateInput_input.DateInput_input__focused::placeholder {\n color: #fff;\n }\n body.zh_logged_in .DateInput .DateInput_displayText__has-input {\n color: #9b9b9b;\n }\n body.zh_logged_in .DayPicker__horizontal .DayPicker_nav__next,\n body.zh_logged_in .DayPicker__horizontal .DayPicker_nav__prev {\n color: #9b9b9b;\n border-color: #343434;\n }\n body.zh_logged_in .DayPickerNavigation_button__horizontalDefault .DayPickerNavigation_svg__horizontal {\n fill: #c6c6c6;\n stroke: #c6c6c6;\n }\n body.zh_logged_in .CalendarMonth_caption {\n color: #c6c6c6;\n }\n body.zh_logged_in .CalendarDay {\n border-color: #343434;\n }\n body.zh_logged_in .CalendarDay__blocked_out_of_range,\n body.zh_logged_in .CalendarDay__blocked_out_of_range:hover {\n color: #767676;\n }\n body.zh_logged_in .CalendarDay__outside {\n border-color: #343434;\n color: #343434;\n }\n body.zh_logged_in .CalendarDay.CalendarDay__selected:not(.CalendarDay__blocked_out_of_range),\n body.zh_logged_in .CalendarDay.CalendarDay__selected_end:not(.CalendarDay__blocked_out_of_range),\n body.zh_logged_in .CalendarDay:not(.CalendarDay__blocked_out_of_range).CalendarDay__selected,\n body.zh_logged_in .CalendarDay:not(.CalendarDay__blocked_out_of_range).CalendarDay__selected_start,\n body.zh_logged_in .CalendarDay__hovered_span,\n body.zh_logged_in .CalendarDay__hovered_span.active,\n body.zh_logged_in .CalendarDay__hovered_span:hover,\n body.zh_logged_in .CalendarDay__selected_end,\n body.zh_logged_in .CalendarDay__selected_end.active,\n body.zh_logged_in .CalendarDay__selected_end:active,\n body.zh_logged_in .CalendarDay__selected_end:hover,\n body.zh_logged_in .CalendarDay__selected_span,\n body.zh_logged_in .CalendarDay__selected_span.active,\n body.zh_logged_in .CalendarDay__selected_span:hover,\n body.zh_logged_in .CalendarDay__selected_start,\n body.zh_logged_in .CalendarDay__selected_start.active,\n body.zh_logged_in .CalendarDay__selected_start:active,\n body.zh_logged_in .CalendarDay__selected_start:hover,\n body.zh_logged_in .CalenderDay__selected_span,\n body.zh_logged_in .CalenderDay__selected_span:active,\n body.zh_logged_in .CalenderDay__selected_span:hover {\n color: #fff;\n }\n body.zh_logged_in .DayPicker_weekHeader {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-date-selector .DayPicker,\n body.zh_logged_in .zhc-date-selector .DayPicker--horizontal {\n background-color: #181818;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-date-selector .CalendarDay--selected,\n body.zh_logged_in .zhc-date-selector .CalendarDay--selected-end,\n body.zh_logged_in .zhc-date-selector .CalendarDay--selected-start,\n body.zh_logged_in .zhc-date-selector .CalendarDay__button:active,\n body.zh_logged_in .zhc-date-selector .CalendarDay__button:hover {\n color: #fff;\n }\n body.zh_logged_in .zhc-dropdown__clear-filter {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-dropdown__clear-filter:hover {\n background-image: none;\n }\n body.zh_logged_in .zhc-dropdown-switch-item__switch {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-dropdown-switch-item__description {\n color: #767676;\n }\n body.zh_logged_in .zhc-empty-state h1 {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-epic-summary {\n color: #767676;\n }\n body.zh_logged_in .zhc-error-page__header__description,\n body.zh_logged_in .zhc-error-page__header__title {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-error-page__separator {\n border-color: #c6c6c6;\n background-color: #c6c6c6;\n }\n body.zh_logged_in .zhc-external-video-embed {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-feature-alert,\n body.zh_logged_in .zhc-feature-alert__footer a {\n color: #fff;\n }\n body.zh_logged_in .zhc-feature-alert__dismiss_icon {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-feature-announcement {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-feature-announcement__x {\n color: #767676;\n }\n body.zh_logged_in .zhc-feature-announcement__x:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-feature-announcement__image {\n background-color: #202020;\n border-left-color: #343434;\n }\n body.zh_logged_in .zhc-filter-expand-button {\n border-color: #343434;\n background-color: #181818;\n color: #767676;\n }\n body.zh_logged_in .zhc-filter-expand-button:hover {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-filter-tag {\n color: #9b9b9b;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-filter-tag:hover {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-filter-tag__text {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-filter-tags .zhc-svg-icon--estimate mask {\n fill: #181818;\n }\n body.zh_logged_in .zhc-filter-tags .zhc-svg-icon--estimate g path:last-of-type {\n fill: #1d1d1d;\n }\n body.zh_logged_in .zhc-filter-tags--disabled,\n body.zh_logged_in .zhc-filter-tags--disabled:hover {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-filter-tags__options {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-floating-tooltip {\n color: #fff;\n }\n body.zh_logged_in .zhc-floating-tooltip__popover {\n background: none;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-footer__wrapper {\n border-top-color: #343434;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-footer__terms a {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-grid-table {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-grid-table__row--is-data-row td {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-grid-table__cell {\n background-color: #242424;\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-grid-table__first-col {\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-highlight-arrow__arrow-icon {\n color: #fff;\n }\n body.zh_logged_in .zhc-info-alert {\n background-color: #181818;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-info-alert__close {\n color: #767676;\n }\n body.zh_logged_in .zhc-info-alert--pointer--left::after {\n border-right-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-info-alert--pointer--right::after {\n border-left-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-info-alert--pointer--top::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-info-alert--pointer--bottom::after {\n border-top-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-integration-repo-selector__repos__container {\n background-color: #181818;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-integration-repo-selector__error {\n color: #767676;\n }\n body.zh_logged_in .zhc-integrations .zhc-integrations-section {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-integrations .zhc-integrations-section input {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-integrations-section .zhc-integrations-section__form--error input:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-integrations-section .zhc-integrations-section__form-label {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-integrations-section .zhc-integrations-section__form-error {\n color: #767676;\n }\n body.zh_logged_in .zhc-integrations-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-integrations-item .zhc-integrations__hook:first-child:not(:last-child),\n body.zh_logged_in .zhc-integrations-item .zhc-integrations__repo,\n body.zh_logged_in .zhc-integrations-item .zhc-integrations__service {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-integrations-item .zhc-integrations__hook-link {\n color: #767676;\n }\n body.zh_logged_in .zhc-integrations-list__header {\n border-bottom-color: #343434;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-invite-link-modal {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-invite-link-modal__sharing-link {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-invite-link-modal__icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .invite-link-footer {\n background-color: #202020;\n }\n body.zh_logged_in .invite-link-footer__link .zhc-input {\n color: #9b9b9b;\n }\n body.zh_logged_in .invite-link-footer__info {\n color: #767676;\n }\n body.zh_logged_in .zhc-invite-your-team {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-invite-your-team__no-results-description {\n color: #767676;\n }\n body.zh_logged_in .zhc-invite-your-team__scrollable-section {\n background: -webkit-linear-gradient(#181818 30%, transparent), -webkit-linear-gradient(transparent, #181818 70%) 0 100%, -webkit-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -webkit-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: -moz-linear-gradient(#181818 30%, transparent), -moz-linear-gradient(transparent, #181818 70%) 0 100%, -moz-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -moz-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: -o-linear-gradient(#181818 30%, transparent), -o-linear-gradient(transparent, #181818 70%) 0 100%, -o-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -o-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: linear-gradient(#181818 30%, transparent), linear-gradient(transparent, #181818 70%) 0 100%, radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n }\n body.zh_logged_in .zhc-invite-your-team-section--suggested:not(.zhc-invite-your-team-section--empty) {\n background-color: #202020;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-invite-your-team__controls {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-invite-your-team-section__empty-state {\n color: #767676;\n }\n body.zh_logged_in .zhc-invite-your-team-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-invite-your-team-item--toggle-text {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-invite-your-team-item__display-name,\n body.zh_logged_in .zhc-invite-your-team-item__email {\n color: #767676;\n }\n body.zh_logged_in .zhc-invite-your-team__remove-pending .zhc-click-text-item {\n color: #767676 !important;\n }\n body.zh_logged_in .zhc-invitees-list {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-invitees-list input:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-invitee-input {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-invitee-input::placeholder {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-dependency-item-simple .zhc-selection-item:hover {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-dependency-item-simple a {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-dependency-item-simple__header {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-issue-card {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-issue-card .zhc-icon.zhc-issue-card-epic-filter__icon,\n body.zh_logged_in .zhc-issue-card .zhc-svg-icon.zhc-issue-card-epic-filter__icon {\n color: #767676;\n }\n body.zh_logged_in .zhc-issue-card .zhc-icon--issue-closed-red,\n body.zh_logged_in .zhc-issue-card .zhc-svg-icon--issue-closed {\n color: #d82828;\n }\n body.zh_logged_in .zhc-issue-card .zhc-icon--pull-request,\n body.zh_logged_in .zhc-issue-card .zhc-svg-icon--git-pull-request {\n color: #767676;\n }\n body.zh_logged_in .zhc-issue-card__action-notification {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-issue-card__action-notification .zhc-icon--has-notification::after,\n body.zh_logged_in .zhc-issue-card__action-notification .zhc-icon--notification::after,\n body.zh_logged_in .zhc-issue-card__action-notification .zhc-issue-card__action-notification__has-notification::after {\n border-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-issue-card--is-dragging {\n background-color: #343434;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-issue-card__main {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-issue-card__meta {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-issue-card__issue-title {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-issue-card__assignees .zhc-avatar,\n body.zh_logged_in .zhc-issue-card__assignees .zhc-issue-card__multiple-assignees {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-issue-card__multiple-assignees {\n color: #fff;\n }\n body.zh_logged_in .zhc-issue-card__heading__main {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-issue-card__select-icon--hovered circle {\n fill: #181818;\n }\n body.zh_logged_in .zhc-issue-card__select-icon--selected path {\n stroke: #181818;\n }\n body.zh_logged_in .zhc-issue-card__actions .zhc-icon--has-notification::after {\n border-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-issue-card__actions__btn {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-issue-card__actions__btn--is-disabled {\n color: #c6c6c6 !important;\n background-color: #181818 !important;\n }\n body.zh_logged_in .zhc-issue-card__actions__btn:focus:not(.zhc-issue-card__actions__btn--is-disabled),\n body.zh_logged_in .zhc-issue-card__actions__btn:hover:not(.zhc-issue-card__actions__btn--is-disabled) {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-issue-card__epic-filter {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-issue-card__connected-pull-request {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-issue-card-actions-content__single-item {\n color: #767676;\n }\n body.zh_logged_in .zhc-issue-card__priority--is-closed {\n --priority-color: #767676;\n }\n body.zh_logged_in .zhc-selection-list-deprecated--issue-card-actions .zhc-selection-list-deprecated__body .zhc-selection-list-deprecated__list {\n background: -webkit-linear-gradient(#181818 30%, transparent), -webkit-linear-gradient(transparent, #181818 70%) 0 100%, -webkit-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -webkit-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: -moz-linear-gradient(#181818 30%, transparent), -moz-linear-gradient(transparent, #181818 70%) 0 100%, -moz-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -moz-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: -o-linear-gradient(#181818 30%, transparent), -o-linear-gradient(transparent, #181818 70%) 0 100%, -o-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -o-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: linear-gradient(#181818 30%, transparent), linear-gradient(transparent, #181818 70%) 0 100%, radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n }\n body.zh_logged_in .zhc-issue-cards:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-issue-cards::-webkit-scrollbar,\n body.zh_logged_in .zhc-issue-cards::-webkit-scrollbar-thumb {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-issue-cards::-webkit-scrollbar-track {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-add-comment {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-add-comment__username {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-add-comment__actions__buttons .zhc-svg-icon--issue-closed {\n color: #d82828;\n }\n body.zh_logged_in .zhc-add-comment__actions__markdown-message .zhc-svg-icon,\n body.zh_logged_in .zhc-add-comment__actions__markdown-message a {\n color: #767676;\n }\n body.zh_logged_in .zhc-comment {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-comment__username {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-comment__timestamp,\n body.zh_logged_in .zhc-comment__timestamp a {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-comment__actions__markdown-message a {\n color: #767676;\n }\n body.zh_logged_in .zhc-edit-comment__bottom-bar,\n body.zh_logged_in .zhc-edit-comment__preview,\n body.zh_logged_in .zhc-edit-comment__textarea {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-edit-comment__bottom-bar,\n body.zh_logged_in .zhc-edit-comment__bottom-bar .zhc-svg-icon {\n color: #767676;\n }\n body.zh_logged_in .zhc-edit-comment__tag-loading {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-edit-comment__markdown-toolbar {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-discussion-events__body {\n color: #767676;\n }\n body.zh_logged_in .zhc-discussion-events__icon {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-discussion-events__icon .zhc-svg-icon--pin-grey,\n body.zh_logged_in .zhc-discussion-events__icon .zhc-svg-icon--unpin-dark-grey {\n color: #767676;\n }\n body.zh_logged_in .zhc-discussion-events__icon--grey,\n body.zh_logged_in .zhc-discussion-events__icon--grey-dark {\n background-color: #444;\n }\n body.zh_logged_in .zhc-discussion-events__icon--grey-darker {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-discussion-events__icon--red {\n background-color: #d82828;\n }\n body.zh_logged_in .zhc-discussion-events__icon--green {\n background-color: #484;\n }\n body.zh_logged_in .zhc-discussion-events__icon--purple {\n background-color: #73589a;\n }\n body.zh_logged_in .zhc-edit-issue__title-input {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-edit-issue__actions__markdown-message {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-edit-issue__actions__markdown-message .zhc-icon,\n body.zh_logged_in .zhc-edit-issue__actions__markdown-message .zhc-svg-icon--markdown,\n body.zh_logged_in .zhc-edit-issue__actions__markdown-message a {\n color: #767676;\n }\n body.zh_logged_in .zhc-issue-badge {\n color: #fff;\n }\n body.zh_logged_in .zhc-issue-badge--issue-open,\n body.zh_logged_in .zhc-issue-badge--pr-open {\n background-color: #484;\n }\n body.zh_logged_in .zhc-issue-badge--epic {\n background-color: #5560d2;\n }\n body.zh_logged_in .zhc-issue-badge--pr-merged {\n background-color: #73589a;\n }\n body.zh_logged_in .zhc-issue-badge--pr-draft {\n background-color: #444;\n }\n body.zh_logged_in .zhc-issue-badge--issue-closed,\n body.zh_logged_in .zhc-issue-badge--pr-closed {\n background-color: #d82828;\n }\n body.zh_logged_in .zhc-issue-description {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-issue-description .zhc-markdown pre {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-issue-description__number {\n color: #767676;\n }\n body.zh_logged_in .zhc-issue-meta {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-issue-meta__username {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-issue-meta__comment-count,\n body.zh_logged_in .zhc-issue-meta__timestamp {\n color: #767676;\n }\n body.zh_logged_in .zhc-issue-meta__actions .zhc-svg-icon--issue-closed {\n color: #d82828;\n }\n body.zh_logged_in .zhc-modal__body.zhc-issue-modal__body--extension {\n background-color: #181818;\n }\n body.zh_logged_in .issue-page-skeleton hr {\n color: #343434;\n }\n body.zh_logged_in .zhc-issue-sidebar .zhc-sidebar-selector {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-issue-type-selection-list__item__content span {\n color: #767676;\n }\n body.zh_logged_in .zhc-new-issue-body__username {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-new-issue-body__title-input {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-new-issue-body__actions__markdown-message {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-new-issue-body__actions__markdown-message .zhc-icon,\n body.zh_logged_in .zhc-new-issue-body__actions__markdown-message .zhc-svg-icon,\n body.zh_logged_in .zhc-new-issue-body__actions__markdown-message a {\n color: #767676;\n }\n body.zh_logged_in .zhc-new-issue-body__dropdown-divider {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-new-issue-body__template_selector-item-description,\n body.zh_logged_in .zhc-new-issue-body__template_selector-title {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-assignee-selector .zhc-sidebar-assignee-selector_active_assignees {\n background: none;\n }\n body.zh_logged_in .zhc-sidebar-assign-yourself--read-only:hover {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-sidebar-selector {\n background: none;\n }\n body.zh_logged_in .zhc-sidebar-selector .zhc-collapsible-control__main-toggle-text {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-epic-selector .zhc-sidebar-active-epics a {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-create-estimate-item__content .zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sidebar-milestone-selector .zhc-sidebar-active-milestone__due,\n body.zh_logged_in .zhc-sidebar-pipeline-selector .zhc-collapsible-control__main-toggle-text {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-pipeline-selector__label {\n color: #c6c6c6;\n }\n body.zh_logged_in .discussion-sidebar-item .zhc-sidebar-pipeline-selector__label {\n color: #afafaf;\n }\n body.zh_logged_in .zhc-sidebar-active-pipeline__name {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-sidebar-active-pipeline__direction .zhc-svg-icon--top-bottom:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button {\n color: #c6c6c6;\n background: none;\n }\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button .zhc-svg-icon--gear,\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button .zhc-svg-icon--gear-github {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button .zhc-svg-icon--gear-github:hover,\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button .zhc-svg-icon--gear:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button--disabled:active,\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button--disabled:active .zhc-sidebar-active-pipeline__name,\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button--disabled:focus,\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button--disabled:focus .zhc-sidebar-active-pipeline__name,\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button--disabled:hover,\n body.zh_logged_in .zhc-sidebar-pipeline-selector__button--disabled:hover .zhc-sidebar-active-pipeline__name {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-sidebar-active-pipeline__direction .zhc-priority-icon--hovered:not(.zhc-priority-icon--has-priority) .zhc-priority-icon__pin-icon,\n body.zh_logged_in .zhc-sidebar-active-pipeline__direction .zhc-priority-icon:hover:not(.zhc-priority-icon--has-priority) .zhc-priority-icon__pin-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .discussion-sidebar-item .zhc-sidebar-selector-button {\n color: #afafaf;\n }\n body.zh_logged_in .zhc-sidebar-selector-button {\n color: #c6c6c6;\n background: none;\n }\n body.zh_logged_in .zhc-sidebar-selector-button:active:disabled .zhc-sidebar-selector-button__heading,\n body.zh_logged_in .zhc-sidebar-selector-button:focus:disabled .zhc-sidebar-selector-button__heading,\n body.zh_logged_in .zhc-sidebar-selector-button:hover:disabled .zhc-sidebar-selector-button__heading {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-sidebar-selector-button .zhc-svg-icon--gear,\n body.zh_logged_in .zhc-sidebar-selector-button .zhc-svg-icon--gear-github {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-selector-button .zhc-svg-icon--gear:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sidebar-selector-button--no-hover:active .zhc-sidebar-selector-button__heading,\n body.zh_logged_in .zhc-sidebar-selector-button--no-hover:focus .zhc-sidebar-selector-button__heading,\n body.zh_logged_in .zhc-sidebar-selector-button--no-hover:hover .zhc-sidebar-selector-button__heading {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-issues-list {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-issues-list__header {\n background-color: #242424;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-issues-list-item__wrapper {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-issues-list-item {\n background-color: #181818;\n color: #767676;\n }\n body.zh_logged_in .zhc-issues-list-item:hover {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-issues-list-item__issue-icon .zhc-svg-icon--git-pull-request,\n body.zh_logged_in .zhc-issues-list-item__issue-icon .zhc-svg-icon--issue-opened {\n color: #484;\n }\n body.zh_logged_in .zhc-issues-list-item__issue-icon .zhc-svg-icon--epic-completed,\n body.zh_logged_in .zhc-issues-list-item__issue-icon .zhc-svg-icon--git-pull-request-closed,\n body.zh_logged_in .zhc-issues-list-item__issue-icon .zhc-svg-icon--issue-closed {\n color: #d82828;\n }\n body.zh_logged_in .zhc-issues-list-item__title a {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-issues-list-item__action-link .zhc-click-text-item {\n color: #767676;\n }\n body.zh_logged_in .zhc-issues-list-item__pull_request_open {\n color: #484;\n }\n body.zh_logged_in .zhc-issues-list-item__pull_request_closed {\n color: #d82828;\n }\n body.zh_logged_in .zhc-item-table {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-item-table__header {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-item-table__cell,\n body.zh_logged_in .zhc-item-table__column-title {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-item-table__row--closed {\n color: #767676;\n background-color: #202020;\n }\n body.zh_logged_in .zhc-item-table__row--closed .zhc-item-table__meta-title,\n body.zh_logged_in .zhc-item-table__row--closed a {\n color: #767676;\n }\n body.zh_logged_in .zhc-item-table__meta-title {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-item-table__cell--story-points {\n color: #767676;\n }\n body.zh_logged_in .zhc-link-button:active,\n body.zh_logged_in .zhc-link-button:focus,\n body.zh_logged_in .zhc-link-button:hover {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-loading__header {\n color: #f0f0f0;\n }\n body.zh_logged_in .zhc-loading__msg, body.zh_logged_in .zhc-login__content {\n color: #767676;\n }\n body.zh_logged_in .zhc-manage-plan__offer,\n body.zh_logged_in .zhc-manage-plan__summary {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-manage-plan__renewal-date,\n body.zh_logged_in .zhc-manage-plan__subtitle {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-manage-plan__renewal-date strong {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-manage-plan__team-members {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-manage-plan__team-members-header {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-manage-plan__member-section-subtitle {\n color: #767676;\n }\n body.zh_logged_in .zhc-manage-plan__licensed-members {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-team-member__options-icon-wrapper--active,\n body.zh_logged_in .zhc-team-member__options-icon-wrapper:hover {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-manage-plan__non-licensed-members {\n background-color: #261d08;\n border-color: #261d08;\n }\n body.zh_logged_in .zhc-team-member__remove-license {\n color: #767676;\n }\n body.zh_logged_in .zhc-markdown-info {\n color: #767676;\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-markdown-info .zhc-svg-icon,\n body.zh_logged_in .zhc-markdown-info a,\n body.zh_logged_in .zhc-markdown-toolbar__item {\n color: #767676;\n }\n body.zh_logged_in .zhc-markdown-toolbar__item:active,\n body.zh_logged_in .zhc-markdown-toolbar__item:focus,\n body.zh_logged_in .zhc-markdown-toolbar__item:hover {\n color: #9b9b9b;\n }\n @media (max-width: 759px) {\n body.zh_logged_in .zhc-menu-bar-item--search-bar {\n border-top-color: #343434;\n }\n }\n @media (max-width: 759px) {\n body.zh_logged_in .zhc-menu-container__modal--is-open .zhc-menu-container__modal-wrapper {\n background-color: #181818;\n }\n }\n body.zh_logged_in .zhc-menu-container__header,\n body.zh_logged_in .zhc-menu-container__modal--is-open .zhc-menu-bar-item:not(.zhc-menu-bar-item--filter-tags) .zhc-btn:not(.zhc-btn--action),\n body.zh_logged_in .zhc-menu-container__modal--is-open .zhc-menu-bar-item:not(.zhc-menu-bar-item--filter-tags) .zhc-btn:not(.zhc-btn--action):hover {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-merge-repo-finder {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-merge-repo-finder__container {\n background-color: #181818;\n border-color: #343434;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-merge-repo-finder__header,\n body.zh_logged_in .zhc-merge-repo-finder__header__text {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-merge-repo-finder__cancel {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-merge-repo-finder__cancel .zhc-svg-icon--x {\n color: #767676;\n }\n body.zh_logged_in .zhc-merge-repo-finder__cancel .zhc-svg-icon--x:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-merge-repo-finder-input__label {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-merge-repo-finder-input__text-input {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-milestone-item__due-date {\n color: #767676;\n }\n body.zh_logged_in .zhc-milestone-modal__characters-left {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-milestone-modal__connected-repos__select-repos {\n color: #4f8cc9;\n }\n body.zh_logged_in .zhc-milestone-modal__info input,\n body.zh_logged_in .zhc-milestone-modal__info textarea {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-milestone-modal__info input {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-milestone-panel {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-milestone-panel__title,\n body.zh_logged_in .zhc-milestone-start-date__date {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-milestone-title h1 .zhc-svg-icon {\n color: #d82828;\n }\n body.zh_logged_in .zhc-milestone-title__description {\n color: #9b9b9b;\n }\n body.zh_logged_in .zh-tooltip-content.zhc-milestone-tooltip,\n body.zh_logged_in .zhc-milestone-tooltip {\n color: #767676;\n }\n body.zh_logged_in .zhc-milestone-tooltip__meta-value,\n body.zh_logged_in .zhc-milestone-tooltip__point {\n color: #343434;\n }\n body.zh_logged_in .zhc-modal__header {\n background-color: #181818;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-modal__header--no-title {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-modal__header__close {\n color: #767676;\n }\n body.zh_logged_in .zhc-modal__header__close:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-modal__header__close .zhc-svg-icon:hover {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-modal__body {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-multi-action-footer {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-multi-action-placeholder__primary-text {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-multi-action-status {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-my-info__gh-sync-date {\n color: #767676;\n }\n body.zh_logged_in .zhc-my-info__gh-info-text {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-my-info__gh-info-value {\n color: #767676;\n }\n body.zh_logged_in .zhc-my-info__delete p,\n body.zh_logged_in .zhc-my-info__terms {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-app-notification {\n border-bottom-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-app-notification:hover {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-app-notification:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-app-notification__title {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-app-notification__date {\n color: #767676;\n }\n body.zh_logged_in .zhc-notifications-body__header__title {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-notifications-body__header__count {\n color: #767676;\n }\n body.zh_logged_in .zhc-notifications-body__manage {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-notifications-empty__msg__content {\n color: #767676;\n }\n body.zh_logged_in .zhc-notifications-manager__item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-notifications-manager__item-name {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-notifications-manager__item-status {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-notifications-manager__header {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-subscription-menu__item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-subscription-menu__item:hover {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-subscription-menu-item__title,\n body.zh_logged_in .zhc-subscription-menu__item-title {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-subscription-menu-item__detail {\n color: #767676;\n }\n body.zh_logged_in .zhc-notifications-sidebar__item {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-notifications-sidebar__item:hover {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-notifications-sidebar__item--active {\n color: #fff !important;\n }\n body.zh_logged_in .zhc-notifications-sidebar__header {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-repo-notifications {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-repo-notifications__header {\n background-color: #242424;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-repo-notifications--single-repo .zhc-repo-notifications__header {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-repo-notifications--single-repo .zhc-repo-notifications__load-more,\n body.zh_logged_in .zhc-repo-notifications--single-repo .zhc-repo-notifications__notification-list {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-repo-notifications__count {\n color: #767676;\n }\n body.zh_logged_in .zhc-repo-notifications__load-more {\n border-top-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-onboarding-page .zhc-sidebar-container {\n background-color: #181818;\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-org-dropdown__toggle-button .zhc-svg-icon--chevron-down-white {\n color: #fff;\n }\n body.zh_logged_in .zhc-org-dropdown__toggle-button--bordered {\n border-color: #343434;\n }\n @media (max-width: 759px) {\n body.zh_logged_in .zhc-page-container {\n background-image: none;\n }\n }\n body.zh_logged_in .zhc-pipeline {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-pipeline--add__input {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-pipeline--add-placeholder .zhc-pipeline-header__main {\n background-color: transparent;\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-pipeline--add-placeholder .zhc-pipeline-header__info,\n body.zh_logged_in .zhc-pipeline__title {\n color: #767676;\n }\n body.zh_logged_in .zhc-pipeline--is-collapsed .zhc-pipeline-header__collapsed-actions {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-pipeline__load-more {\n color: #4f8cc9;\n }\n body.zh_logged_in .zhc-pipeline__load-more--is-loading {\n color: #767676;\n }\n body.zh_logged_in .zhc-pipeline__button {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-pipeline-body {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-pipeline-sorted-placeholder {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-pipeline-sorted-placeholder__content {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-pipeline-sorted-placeholder__content__text__info {\n color: #767676;\n }\n body.zh_logged_in .zhc-pipeline-form {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-pipeline-form__input,\n body.zh_logged_in .zhc-pipeline-form__text-area {\n border-color: #343434;\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-pipeline-header {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-pipeline-header__view .zhc-svg-icon--issue-closed-red {\n color: #d82828;\n }\n body.zh_logged_in .zhc-pipeline-header__form__edit {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-pipeline-header__actions .zhc-svg-icon--gear:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-pipeline-header__info--is-disabled {\n color: #767676;\n }\n body.zh_logged_in .zhc-pipeline-header__meta {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-pipeline-header__story-points {\n color: #767676;\n }\n body.zh_logged_in .zhc-pipeline-sort-status {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-pipeline-item .zhc-svg-icon {\n color: #d82828;\n }\n body.zh_logged_in .zhc-popover--deprecated_with_borders {\n border-color: #343434;\n box-shadow: 0 3px 12px #000;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-progress-bar {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-progress-dot,\n body.zh_logged_in .zhu-radio-button__container:hover input {\n background-color: #5a5a5a;\n }\n body.zh_logged_in .zhu-radio-button__container input:checked {\n box-shadow: inset 0 0 0 1px var(--ghd-bg-color), inset 0 0 0 8px #6061be;\n }\n body.zh_logged_in .zhu-radio-button__container input:focus {\n box-shadow: inset 0 0 0 1px var(--ghd-bg-color), inset 0 0 0 8px #6061be, 0 0 5px 2px #5e9ed6;\n }\n body.zh_logged_in .zhc-readonly-banner {\n color: #fff;\n }\n body.zh_logged_in .zhc-release-item__due_date {\n color: #767676;\n }\n body.zh_logged_in .zhc-release-add-repos-dropdown__repo-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-release-add-repos-dropdown__repo-item:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-release-add-repos-dropdown__repo-item:hover:first-child {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-release-add-repos-dropdown__repo-item:hover:last-child {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-release-connected-repos-dropdown__repo-item {\n border-bottom-color: #343434;\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-release-event {\n border-bottom-color: #343434;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-release-event-link a,\n body.zh_logged_in .zhc-release-event__item--date--highlighted,\n body.zh_logged_in .zhc-release-event__item.zhc-release-event__item--author,\n body.zh_logged_in .zhc-release-event__item.zhc-release-event__item--scope {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-release-chart-completed-points .zhc-chart-scatterchart-plot,\n body.zh_logged_in .zhc-release-chart-desired-velocity .zhc-chart-scatterchart-plot,\n body.zh_logged_in .zhc-release-chart-estimated-scope .zhc-chart-scatterchart-plot,\n body.zh_logged_in .zhc-release-chart-predicted-velocity .zhc-chart-scatterchart-plot,\n body.zh_logged_in .zhc-release-chart-total-scope .zhc-chart-scatterchart-plot {\n stroke: #181818;\n }\n body.zh_logged_in .zhc-release-progress .zhc-svg-icon--info {\n color: #767676;\n }\n body.zh_logged_in .zhc-release-progress__header {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-release-progress--diff,\n body.zh_logged_in .zhc-release-progress--no-prediction {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-release-progress__section {\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-release-progress__stats {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-release-issues .zhc-release-issues__info-alert {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-chart-tooltip__content {\n color: #767676;\n }\n body.zh_logged_in .zhc-chart-tooltip__issue-title {\n color: #343434;\n }\n body.zh_logged_in .zhc-release--total-scope-tooltip .zhc-chart-tooltip__issue-title {\n color: #767676;\n }\n body.zh_logged_in .zhc-release--no-issues {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-release--no-issues__content h2 {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-release-report__release-title .zhc-svg-icon {\n color: #d82828;\n }\n body.zh_logged_in .zhc-release-report__date {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-release-report__date .zhc-due-date,\n body.zh_logged_in .zhc-release-report__date .zhc-release-report__date__value {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-release-report-create__info,\n body.zh_logged_in .zhc-release-report__description {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-release-report-form__desc-textarea,\n body.zh_logged_in .zhc-release-report-form__markdown-toolbar,\n body.zh_logged_in .zhc-release-report-form__title-input {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-remove-filter-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-remove-filter-item--is-disabled,\n body.zh_logged_in .zhc-remove-filter-item--is-disabled:hover {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-repo-item__description {\n color: #767676;\n }\n body.zh_logged_in .zhc-repo-item__lock .zhc-svg-icon {\n color: #f0f0f0;\n }\n body.zh_logged_in .zhc-repo-overlay {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-report--empty-state--description,\n body.zh_logged_in .zhc-report--empty-state h2,\n body.zh_logged_in .zhc-report-loading {\n color: #767676;\n }\n body.zh_logged_in .zhc-report-loading__title {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-reports-date-range .zhc-reports-date-range__date-range {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-reports-date-range .zhc-dropdown--reports-dates .zhc-selection-button__title,\n body.zh_logged_in .zhc-reports-date-range .zhc-dropdown--reports-dates .zhc-selection-list-deprecated {\n color: #767676;\n }\n body.zh_logged_in .zhc-reports-date-range .zhc-dropdown--reports-dates .zhc-selection-list-deprecated .zhc-reports-date-range__date-range {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-reports-date-range .zhc-dropdown--reports-dates .zhc-selection-button__title .zhc-reports-date-range__date-range {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-reports-date-range .DateRangePickerInput {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-reports-date-range .DateRangePickerInput .DateInput .DateInput_input {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-reports-date-range .DateRangePickerInput .DateInput .DateInput_input__focused,\n body.zh_logged_in .zhc-reports-date-range .DateRangePickerInput .DateInput .DateInput_input__focused::placeholder {\n color: #fff;\n }\n body.zh_logged_in .zhc-reports-date-range .CalendarMonth_caption,\n body.zh_logged_in .zhc-reports-date-range .DayPicker_weekHeader {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-reports-date-range .CalendarDay.CalendarDay__hovered_span,\n body.zh_logged_in .zhc-reports-date-range .CalendarDay .CalendarDay__selected_start {\n color: #fff;\n }\n body.zh_logged_in .zhc-report-card {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-report-card__title {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-report-card__secondary-cta,\n body.zh_logged_in .zhc-report-card__section {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-report-tabs {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-report-tabs__nav {\n border-bottom-color: #343434;\n color: #9b9b9b;\n background-color: #242424;\n }\n body.zh_logged_in .zhc-report-tabs__nav .zhc-report-tabs__nav__item--active,\n body.zh_logged_in .zhc-report-tabs__nav .zhc-report-tabs__nav__item:hover {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-report-tabs__nav .zhc-report-tabs__nav__item--active:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-report-tabs__filters {\n border-bottom-color: #343434;\n color: #9b9b9b;\n background-color: #202020;\n }\n body.zh_logged_in .zhc-request-license-text {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-request-license__admin-list-container::after,\n body.zh_logged_in .zhc-request-license__admin-list-container::before {\n background-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-highlighter {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-search {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-search__input {\n background-color: transparent;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-search--with-icon {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-search--with-icon input::-webkit-input-placeholder {\n color: #767676;\n }\n body.zh_logged_in .zhc-search--with-icon input::-moz-placeholder {\n color: #767676;\n }\n body.zh_logged_in .zhc-search--with-icon input:-ms-input-placeholder {\n color: #767676;\n }\n body.zh_logged_in .zhc-search--with-icon input:-moz-placeholder {\n color: #767676;\n }\n body.zh_logged_in .zhc-search-bar .zhc-svg-icon--search {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-search-bar__input {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-button__container .zhc-svg-icon--estimate g path:last-of-type,\n body.zh_logged_in .zhc-selection-button__container .zhc-svg-icon--estimate mask {\n fill: #181818;\n }\n body.zh_logged_in .zhc-selectable-selection-item__icon .zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-selection-item--is-active {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-item--is-disabled,\n body.zh_logged_in .zhc-selection-item--is-disabled.zhc-selection-item--is-active,\n body.zh_logged_in .zhc-selection-item--is-disabled:hover,\n body.zh_logged_in .zhc-selection-item:disabled,\n body.zh_logged_in .zhc-selection-item:disabled.zhc-selection-item--is-active,\n body.zh_logged_in .zhc-selection-item:disabled:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-selection-list-action-modifier--has-border {\n border-color: transparent transparent #343434;\n }\n body.zh_logged_in .zhc-selection-list-action-modifier--is-hoverable:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list__item__label__name {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-selection-list__item__user__text {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-selection-list__item__user__name {\n color: #767676;\n }\n body.zh_logged_in .zhc-selection-list__layout {\n border-color: #343434;\n box-shadow: 0 3px 12px #000;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-selection-list__loadable-content__fallback {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-selection-list__item {\n background-color: #181818;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-selection-list__item__selection-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-selection-list__item--has-item-border {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list__item--is-highlighted {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list__item--is-highlighted:first-child {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list__footer {\n border-top-color: #f0f0f0;\n }\n body.zh_logged_in .zhc-selection-list__header {\n color: #c6c6c6;\n text-shadow: #181818 0 1px 0;\n }\n body.zh_logged_in .zhc-selection-list__header__close {\n color: #767676;\n }\n body.zh_logged_in .zhc-selection-list__header__close:hover {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-selection-list__search-bar .zhc-selection-list__search-bar__content {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list__search-bar .zhc-selection-list__search-bar__content input {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-selection-list__search-bar .zhc-selection-list__search-bar__content input::-webkit-input-placeholder {\n color: #767676;\n }\n body.zh_logged_in .zhc-selection-list__search-bar .zhc-selection-list__search-bar__content input::-moz-placeholder {\n color: #767676;\n }\n body.zh_logged_in .zhc-selection-list__search-bar .zhc-selection-list__search-bar__content input:-ms-input-placeholder {\n color: #767676;\n }\n body.zh_logged_in .zhc-selection-list__search-bar .zhc-selection-list__search-bar__content input:-moz-placeholder {\n color: #767676;\n }\n body.zh_logged_in .zhc-selection-list__tab-container {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list__tab-item {\n color: #767676;\n background-color: transparent;\n }\n body.zh_logged_in .zhc-selection-list__tab-item:hover {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-selection-list__tab-item--is-active {\n color: #c6c6c6;\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-selection-list-deprecated--footer,\n body.zh_logged_in .zhc-selection-list__footer {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated-header {\n color: #c6c6c6;\n text-shadow: #181818 0 1px 0;\n }\n body.zh_logged_in .zhc-seleciton-list-action-modifier {\n border-color: transparent transparent #343434;\n }\n body.zh_logged_in .zhc-seleciton-list-action-modifier:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-icon-item__content span {\n color: #767676;\n }\n body.zh_logged_in .zhnc-selection-list-item {\n border-color: transparent transparent #343434;\n }\n body.zh_logged_in .zhnc-selection-list-item--is-hovering,\n body.zh_logged_in .zhnc-selection-list-item:not(.zhnc-selection-list-item--disable-hover):hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-filter {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-selection-filter__input {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-selection-list-deprecated .zhc-banner + .zhc-selection-item--is-active {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated--simple .zhc-selection-list-item:hover:not(.zhc-selection-item--is-disabled) {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated--issue-card-actions .zhc-issue-card__actions__dependency-section {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated--issue-card-actions .zhc-issue-card__actions__quick-action-section {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated:not(.zhc-selection-list-deprecated--has-search) .zhc-selectable-selection-item:hover:not(.zhc-selection-item--is-disabled),\n body.zh_logged_in .zhc-selection-list-deprecated:not(.zhc-selection-list-deprecated--has-search) .zhc-selection-list-item:hover:not(.zhc-selection-item--is-disabled) {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__body {\n background-color: #181818;\n border-color: #343434;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__list-container--items-underlined .zhc-selection-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__list-container--items-underlined .zhc-selection-item--is-active {\n background-color: #242424;\n border-left-color: #343434;\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__list-container--items-underlined .zhc-selection-item--is-active:first-child {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__list-container--items-underlined .zhc-selection-item--is-active {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__list-container--items-underlined .zhc-selection-item--is-active:last-child {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__list-container--items-underlined .zhc-selection-item--is-active:not(:first-child)::after,\n body.zh_logged_in .zhc-selection-list-deprecated__list-container--items-underlined .zhc-selection-item--is-active:not(:first-child)::before {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__header {\n color: #c6c6c6;\n text-shadow: #181818 0 1px 0;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__header--light {\n background-color: initial;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__header__text {\n color: #c6c6c6;\n text-shadow: #181818 0 1px 0;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__cancel {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__cancel:hover {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__cancel .zhc-svg-icon--x {\n color: #767676;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__cancel .zhc-svg-icon--x:hover {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__list .zhc-selection-list-deprecated__header {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__footer {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__footer--items-underlined .zhc-selection-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__footer--items-underlined .zhc-selection-item--is-active {\n background-color: #242424;\n border-left-color: #343434;\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-selection-list-deprecated__footer--items-underlined .zhc-selection-item--is-active:first-child,\n body.zh_logged_in .zhc-selection-list-deprecated__footer:not(.zhc-selection-list-deprecated__footer--items-underlined) .zhc-dependency-banner + .zhc-selection-item--is-active:nth-child(2),\n body.zh_logged_in .zhc-selection-list-deprecated__footer:not(.zhc-selection-list-deprecated__footer--items-underlined) .zhc-dependency-banner + .zhc-selection-item:hover:nth-child(2),\n body.zh_logged_in .zhc-selection-list-deprecated__footer:not(.zhc-selection-list-deprecated__footer--items-underlined) .zhc-issue-card__action-notification {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-shortcut-indicator {\n border-color: #343434;\n background-color: #181818;\n box-shadow: 0 1px 0 0 #5a5a5a;\n }\n body.zh_logged_in .zhc-shortcut-indicators,\n body.zh_logged_in .zhc-shortcuts-guide__nav-item {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-shortcuts-guide__nav-item:hover {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-shortcuts-guide__nav-item:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-shortcuts-guide__section {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-shortcuts-guide__section h2 {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-shortcuts-guide__shortcuts-list {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-board-settings-item,\n body.zh_logged_in .zhc-board-settings-item .zhc-svg-icon.zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-board-settings-item:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-collapse-toggle--is-active {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-collapse-toggle--is-active:hover,\n body.zh_logged_in .zhc-sidebar-divider__bar {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar-link-item .zhc-sidebar-link-item__label a {\n color: #767676;\n }\n body.zh_logged_in .user-has-feelings .zhc-sidebar-nav-item:not(.zhc-sidebar-nav-item--is-active):hover {\n background-color: initial;\n }\n body.zh_logged_in .zhc-sidebar-nav-item {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-sidebar-nav-item--is-active,\n body.zh_logged_in .zhc-sidebar-nav-item:hover {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-sidebar-nav-item__link {\n color: #c6c6c6;\n background-color: transparent;\n }\n body.zh_logged_in .zhc-sidebar-nav-item__action.zhc-sidebar-nav-item__action .zhc-svg-icon {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-nav-item__action.zhc-sidebar-nav-item__action--is-active,\n body.zh_logged_in .zhc-sidebar-nav-item__action.zhc-sidebar-nav-item__action:hover {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-sidebar-nav-item__action.zhc-sidebar-nav-item__action--is-active .zhc-svg-icon,\n body.zh_logged_in .zhc-sidebar-nav-item__action.zhc-sidebar-nav-item__action:hover .zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sidebar-nav-item__sub-item {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-nav-item__sub-item:hover {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-sidebar-profile {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-sidebar-profile--is-active .zhc-sidebar-profile__toggle,\n body.zh_logged_in .zhc-sidebar-profile__toggle:hover {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-sidebar-profile__header {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar-profile__name {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-sidebar-profile__company {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-profile__item {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sidebar-profile__item:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-sidebar-profile__item:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar-warning {\n background-color: #261d08;\n border-color: #261d08;\n }\n body.zh_logged_in .zhc-tutorial-tooltip {\n box-shadow: 0 3px 12px #000;\n color: #fff;\n }\n body.zh_logged_in .zhc-workspace-header:hover {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-sidebar--is-dropdown-open .zhc-sidebar__navigation,\n body.zh_logged_in .zhc-sidebar--is-full-width .zhc-sidebar__navigation,\n body.zh_logged_in .zhc-sidebar--is-hovered .zhc-sidebar__navigation {\n background: -webkit-linear-gradient(#181818 30%, transparent), -webkit-linear-gradient(transparent, #181818 70%) 0 100%, -webkit-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -webkit-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: -moz-linear-gradient(#181818 30%, transparent), -moz-linear-gradient(transparent, #181818 70%) 0 100%, -moz-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -moz-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: -o-linear-gradient(#181818 30%, transparent), -o-linear-gradient(transparent, #181818 70%) 0 100%, -o-radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), -o-radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n background: linear-gradient(#181818 30%, transparent), linear-gradient(transparent, #181818 70%) 0 100%, radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n }\n body.zh_logged_in .zhc-sidebar--is-dropdown-open .zhc-sidebar__container .zhc-sidebar__container__inner,\n body.zh_logged_in .zhc-sidebar--is-full-width .zhc-sidebar__container .zhc-sidebar__container__inner,\n body.zh_logged_in .zhc-sidebar--is-hovered .zhc-sidebar__container .zhc-sidebar__container__inner {\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar--is-wide-screen .zhc-sidebar__footer,\n body.zh_logged_in .zhc-sidebar:not(.zhc-sidebar--is-wide-screen):hover .zhc-sidebar__footer {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar a:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-sidebar__overlay {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-sidebar__container {\n background-color: #181818;\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar__container__inner {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-sidebar__footer-left {\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-skeleton-avatar, body.zh_logged_in .zhc-skeleton-row,\n body.zh_logged_in .zhc-skeleton-text {\n background-image: -webkit-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: -moz-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: -o-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: linear-gradient(90deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n }\n body.zh_logged_in .zhc-skeleton-avatar-description-container--with-border,\n body.zh_logged_in .zhc-skeleton-paragraph--with-border {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-skeleton-content-box {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-skeleton-title {\n background-image: -webkit-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: -moz-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: -o-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: linear-gradient(90deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n }\n body.zh_logged_in .zhc-skeleton-input-box {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-skeleton-board-issue-item .zhc-skeleton-board-issue-item__title {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-skeleton-connected-issue-item__icon,\n body.zh_logged_in .zhc-skeleton-estimate {\n background-image: -webkit-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: -moz-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: -o-linear-gradient(0deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n background-image: linear-gradient(90deg, #343434 0, rgba(0, 0, 0, .15) 40px, #343434 80px);\n }\n body.zh_logged_in .zhc-spinner:not(.zhc-spinner--no-outline) {\n background-color: #181818;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-spinner--purple {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-status-tag {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-status-tag strong {\n color: #f0f0f0;\n }\n body.zh_logged_in .zhc-status-tag button {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-stripe-billing .StripeElement,\n body.zh_logged_in .zhc-stripe-billing input {\n color: #767676;\n border-color: #343434;\n background-color: #242424;\n }\n body.zh_logged_in .zhc-sub-item-button {\n background-color: transparent;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-sub-item-button--collapsed {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-table {\n border-top-color: #343434;\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-table .zhc-table__cell {\n border-bottom-color: #343434;\n border-left-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-table .zhc-table__cell--header {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-table-expand-button {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-table-expand-button .zhc-btn:active {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-tabs-nav--dropdown {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-tab-navitem {\n background-color: transparent;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-tab-navitem--large--active,\n body.zh_logged_in .zhc-tab-navitem--large:hover,\n body.zh_logged_in .zhc-tab-navitem--lined--active,\n body.zh_logged_in .zhc-tab-navitem--lined:hover {\n background-color: transparent;\n color: #f0f0f0;\n }\n body.zh_logged_in .zhc-tab-navitem--full {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-tab-navitem--full:hover {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-tab-navitem--full--active,\n body.zh_logged_in .zhc-tab-navitem--full--active:hover {\n color: #fff;\n }\n body.zh_logged_in .zhc-tab-navitem--dropdown,\n body.zh_logged_in .zhc-tab-navitem--dropdown:hover {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-tab-navitem--dropdown--active,\n body.zh_logged_in .zhc-tab-navitem--dropdown--active:hover {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n border-bottom-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-tag {\n border-color: #343434;\n color: #767676;\n }\n body.zh_logged_in .zhc-team-member-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-team-member-item__secondary {\n color: #767676;\n }\n body.zh_logged_in .zhc-team-members .zhc-svg-icon--check-green {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-team-members__content {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-team-members__searchbar {\n border-color: #343434;\n background-color: #202020;\n }\n body.zh_logged_in .zhc-team-members__searchbar input {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-team-members__searchbar input:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-team-members__searchbar .zhc-svg-icon--search {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-team-member {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-team-member__display-name {\n color: #767676;\n }\n body.zh_logged_in .zhc-team-member__admin-tag {\n color: #fff;\n }\n body.zh_logged_in .zhc-tooltip__content {\n background-color: #c6c6c6;\n color: #fff;\n }\n body.zh_logged_in .zhc-tooltip__content::before {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-tooltip--right .zhc-tooltip__content::before {\n border-right-color: #c6c6c6;\n }\n body.zh_logged_in .zhc-tooltip--left .zhc-tooltip__content::before {\n border-left-color: #c6c6c6;\n }\n body.zh_logged_in .zhc-tooltip--top-left .zhc-tooltip__content::before,\n body.zh_logged_in .zhc-tooltip--top .zhc-tooltip__content::before {\n border-top-color: #c6c6c6;\n }\n body.zh_logged_in .zhc-tooltip--bottom-left .zhc-tooltip__content::before,\n body.zh_logged_in .zhc-tooltip--bottom .zhc-tooltip__content::before {\n border-bottom-color: #c6c6c6;\n }\n body.zh_logged_in .zhc-tooltip--info-tip .zhc-tooltip__content {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-tooltip--info-tip.zhc-tooltip--right .zhc-tooltip__content::before {\n border-right-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-tooltip--info-tip.zhc-tooltip--left .zhc-tooltip__content::before {\n border-left-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-tooltip--info-tip.zhc-tooltip--top .zhc-tooltip__content::before {\n border-top-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-tooltip--info-tip.zhc-tooltip--bottom .zhc-tooltip__content::before {\n border-bottom-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .tooltip-items__truncation-text {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-topbar {\n background-color: #181818;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-topbar__sidebar-toggle {\n border-right-color: #343434;\n }\n body.zh_logged_in .zhc-untitled-tag {\n background-color: #5a5a5a;\n color: #fff;\n }\n body.zh_logged_in .zhc-upgrade-to-growth__list,\n body.zh_logged_in .zhc-upgrade-to-growth__subtext {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-upgrade-to-growth__footer,\n body.zh_logged_in .zhc-user-load-failed__msg {\n color: #767676;\n }\n body.zh_logged_in .zhc-username {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-chart-axis--bottom--velocity-chart text {\n fill: #767676;\n }\n body.zh_logged_in .zhc-chart-velocity__left-axis {\n box-shadow: 0 0 8px 0 rgba(255, 255, 255, .7);\n }\n @media (min-width: 1020px) {\n body.zh_logged_in .zhc-chart-velocity__left-axis {\n box-shadow: none;\n }\n }\n body.zh_logged_in .zhc-chart-tooltip__section--lead .zhc-chart-tooltip__section__column,\n body.zh_logged_in .zhc-chart-tooltip__story-points,\n body.zh_logged_in .zhc-toggle-chart-info-icon .zhc-svg-icon {\n color: #767676;\n }\n body.zh_logged_in .zhc-chart-tooltip__bold {\n color: #343434;\n }\n body.zh_logged_in .zhu-svg-icon--closed {\n color: #d82828;\n }\n body.zh_logged_in .zhc-workspace-form-input {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-workspace-form-input__text-input {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form-input__text-input::placeholder {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-workspace-form-input__character-count {\n color: #767676;\n }\n body.zh_logged_in .zhc-workspace-form-input__icon-right--check .zhc-svg-icon {\n color: #fff;\n }\n body.zh_logged_in .zhc-workspace-form-input__icon-right--lock .zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-form-label-filter {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form-label-filter__controls {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form-label-filter__subtitle,\n body.zh_logged_in .zhc-workspace-form-loading__header {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-form-loading__subtext {\n color: #767676;\n }\n body.zh_logged_in .zhc-workspace-form-repo-item {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form-repo-item__contents .zhc-svg-icon--dots-vertical {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-workspace-form-repo-item__contents .zhc-button:hover {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-workspace-form-repo-item__name {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-form-repo-item__description,\n body.zh_logged_in .zhc-workspace-form-repo-item__subtext {\n color: #767676;\n }\n body.zh_logged_in .zhc-workspace-form-section--connected-repos {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form-section__tip {\n color: #9b9b9b;\n background-color: #202020;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form-section__title {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-workspace-form__subtext {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-form__load-warning--moderate {\n color: #767676;\n }\n body.zh_logged_in .zhc-workspace-form__load-warning--moderate .zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-form__load-info {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form__load-info .zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-form__close:hover {\n border-color: #343434;\n background-color: #242424;\n }\n body.zh_logged_in .zhc-workspace-form__footer {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-workspace-form__footer__actions {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-form__footer__actions-learn-link .zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-switcher__x:hover {\n border-color: #343434;\n background-color: #242424;\n }\n body.zh_logged_in .zhc-workspace-form__empty-subtext,\n body.zh_logged_in .zhc-workspace-switcher__x .zhc-svg-icon {\n color: #767676;\n }\n body.zh_logged_in .zhc-workspace-import {\n background-color: #181818;\n border-color: #343434;\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n body.zh_logged_in .zhc-workspace-import__header {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-import__valid-icon .zhc-svg-icon {\n color: #fff;\n }\n body.zh_logged_in .zhc-workspace-import-sidebar__main .zhc-svg-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-load-failed__msg {\n color: #767676;\n }\n body.zh_logged_in .zhc-current-workspace__description {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-switcher-search__input {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-switcher-search__input:focus {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-workspace-switcher-query-info,\n body.zh_logged_in .zhc-workspace-switcher-search-results__no-results__header,\n body.zh_logged_in .zhc-workspace-switcher-search__icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-switcher-search-results__no-results__description {\n color: #767676;\n }\n body.zh_logged_in .zhc-workspace-switcher-empty__title {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-workspace-switcher-empty__body {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-switcher__header {\n background-color: #181818;\n box-shadow: 0 0 4px 4px var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-workspace-switcher__close:hover,\n body.zh_logged_in .zhc-workspace-switcher__header .zhc-org-dropdown:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-switcher-item {\n border-color: transparent transparent #343434;\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-workspace-switcher-item:hover {\n border-color: #343434;\n background-color: #202020;\n }\n body.zh_logged_in .zhc-workspace-switcher-item__subtitle {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-switcher-item__footer {\n color: #767676;\n }\n body.zh_logged_in .zhc-workspace-switcher-item__search-terms {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-workspace-switcher {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-milestone-selector__item-due-date,\n body.zh_logged_in .zhc-workspace-auth-failed__msg {\n color: #767676;\n }\n body.zh_logged_in .zhc-burndown-report-header__divider-icon {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-account-settings__arrow {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-dashboard-enterprise-integrations-page .zhc-org-dropdown__toggle-button:hover {\n background-color: #242424;\n box-shadow: inset 0 0 1px 1px #343434;\n }\n body.zh_logged_in .zhc-enterprise-manage-plan__section {\n background-color: #181818;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-enterprise-manage-plan__section h3 {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-enterprise-manage-plan__header,\n body.zh_logged_in .zhc-enterprise-manage-plan__item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-enterprise-manage-plan__item .zhu-font-bold,\n body.zh_logged_in .zhc-enterprise-manage-plan__radio label {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-enterprise-manage-plan__radio-description {\n color: #767676;\n }\n body.zh_logged_in .zhc-no-access-container__icon-container {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-no-access-container h3 {\n color: #767676;\n }\n body.zh_logged_in .zhc-dashboard-enterprise-container .zhu-font-bold {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-seated-user-options-button--is-open.zhc-seated-user-options-button--is-open,\n body.zh_logged_in .zhc-seated-user-options-button:hover {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-seated-user-options-list {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-banner--zhc-renewal-notice-section {\n border-top-color: #343434;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-collapsible-team-member-list__header,\n body.zh_logged_in .zhc-team-members-page__container {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-collapsible-team-member-list__header__secondary-info {\n color: #767676;\n }\n body.zh_logged_in .zhc-unlicensed-team-list {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-unlicensed-team-list > .zhc-collapsible-team-member-list__header {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-unlicensed-team-list__requested-team-list {\n background-color: #261d08;\n border-color: #261d08;\n }\n body.zh_logged_in .zhc-unlicensed-team-list__requested-team-list .zhc-collapsible-team-member-list__header {\n background-color: #261d08;\n }\n body.zh_logged_in .zhc-unlicensed-team-list__default-team-list {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-team-members-page__search {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-assignee-cell__count {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-epic-builder__date-range-button__text-container {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-options-dropdown-item {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-epic-issue-list {\n background-color: #181818;\n border-top-color: #343434;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-epic-issue-list__container {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-epic-issue-list__footer,\n body.zh_logged_in .zhc-epic-issue-list__header {\n color: #767676;\n }\n body.zh_logged_in .zhc-epic-issue-list-table__cell--dark {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-epic-issue-list-table__cell--light {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-epic-issue-list-table__row--child .zhc-grid-table__cell {\n background-color: #242424;\n }\n body.zh_logged_in .zhc-epic-builder__issue-cell__name-container .zhc-icon--closed,\n body.zh_logged_in .zhc-epic-builder__issue-cell__name-container .zhc-icon--priority {\n color: #d82828;\n }\n body.zh_logged_in .zhc-label-cell__count {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-epic-builder-pipeline-cell {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-button.zhc-modal-close-button {\n color: #343434;\n }\n body.zh_logged_in .zhc-button.zhc-modal-close-button:hover {\n color: #fff;\n }\n body.zh_logged_in .zhc-onboarding-tutorials {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-onboarding-tutorials > .zhc-onboarding-tutorials__header {\n background-color: #202020;\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-onboarding-tutorials > .zhc-onboarding-tutorials__header.zhc-onboarding-tutorials__header--is-minimized {\n background: none;\n }\n body.zh_logged_in .zhc-onboarding-tutorials > .zhc-onboarding-tutorials__header .zhc-onboarding-tutorials__subhead {\n color: #767676;\n }\n body.zh_logged_in .zhc-onboarding-tutorials__launch-button {\n background: none;\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-onboarding-tutorials__launch-button:hover {\n border-color: #343434;\n background-color: #202020;\n }\n body.zh_logged_in .zhc-onboarding-tutorials__help-link {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-pipeline-mapping-welcome-toast {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-pipeline-mapping-welcome-toast .zhc-pipeline-mapping-welcome-toast__subhead {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-pipeline-mapping-welcome-toast .zhc-pipeline-mapping-welcome-toast__rule:not(:last-child) {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-pipeline-mapping-welcome-toast .zhc-pipeline-mapping-welcome-toast__rule__description {\n color: #9b9b9b;\n }\n body.zh_logged_in .color-indicator-content-label__color {\n color: #343434;\n }\n body.zh_logged_in .zhc-body__roadmap-item {\n box-shadow: 0 1px 1px 0 rgba(255, 255, 255, .7);\n }\n body.zh_logged_in .zhc-body__roadmap-item--complete-top-level {\n --primary-color: #343434;\n --text-color: #767676;\n }\n body.zh_logged_in .zhc-body__roadmap-item--complete-sub-colorless {\n background-image: -webkit-repeating-linear-gradient(135deg, #343434, #343434 10px, #202020 10px, #202020 20px);\n background-image: -moz-repeating-linear-gradient(135deg, #343434, #343434 10px, #202020 10px, #202020 20px);\n background-image: -o-repeating-linear-gradient(135deg, #343434, #343434 10px, #202020 10px, #202020 20px);\n background-image: repeating-linear-gradient(-45deg, #343434, #343434 10px, #202020 10px, #202020 20px);\n --text-color: #c6c6c6;\n }\n body.zh_logged_in .zhc-roadmap-item-title__no-epics-string {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-roadmap-item-predicted-end-date .zhc-roadmap-predicted-end-date-clock-icon__wrapper {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-roadmap-temp-project-overlay {\n color: #767676;\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-temp-project__item {\n background-color: #343434;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-roadmap {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-roadmap .zhc-roadmap-header {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap .zhc-roadmap-content .zhc-roadmap-body,\n body.zh_logged_in .zhc-roadmap .zhc-roadmap-content .zhc-roadmap-body-view--root,\n body.zh_logged_in .zhc-roadmap .zhc-roadmap-content .zhc-roadmap-body__subheader {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-roadmap .zhc-roadmap-content .zhc-roadmap-body-view--sub-item {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-options-selector-section {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-options-selector-predicted-end-date__container .description {\n color: #767676;\n }\n body.zh_logged_in .zhc-roadmap-options-dropdown-wrapper .zhc-svg-icon--gear {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-roadmap-row {\n background-color: #181818;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-row.zhc-roadmap-row--color-secondary {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-row.zhc-roadmap-row--color-primary {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-roadmap-row.zhc-roadmap-row--modifier-last-sub-item {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-row.zhc-roadmap-row--size-large {\n border-bottom-color: #343434;\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-row.zhc-roadmap-row--modifier-striped::before {\n background-image: -webkit-repeating-linear-gradient(135deg, #767676, #767676 10px, transparent 10px, transparent 20px);\n background-image: -moz-repeating-linear-gradient(135deg, #767676, #767676 10px, transparent 10px, transparent 20px);\n background-image: -o-repeating-linear-gradient(135deg, #767676, #767676 10px, transparent 10px, transparent 20px);\n background-image: repeating-linear-gradient(-45deg, #767676, #767676 10px, transparent 10px, transparent 20px);\n }\n body.zh_logged_in .zhc-roadmap-selection-item {\n border-color: transparent transparent #343434;\n }\n body.zh_logged_in .zhc-roadmap-selection-item--is-active {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-add-epics-dropdown__no-items {\n color: #767676;\n }\n body.zh_logged_in .zhc-roadmap-add-epics-dropdown__footer {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar-item-add-to-project {\n background-color: #202020;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-add-panel {\n color: #fff;\n }\n body.zh_logged_in .zhc-add-panel__divider {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar-item-add {\n background-color: #181818;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar-epic-display--completed .zhc-sidebar-epic-display__content,\n body.zh_logged_in .zhc-sidebar-item-date {\n color: #767676;\n }\n body.zh_logged_in .zhc-sidebar-expand-toggle {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-sidebar-expand-toggle--enabled:hover,\n body.zh_logged_in .zhc-sidebar-expand-toggle--enabled:hover .zhc-sidebar-expand-toggle__title {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar-input__char-count {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sidebar-input__input {\n border-color: #343434;\n }\n body.zh_logged_in .zhc-options-panel {\n background-color: #181818;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-options-panel:focus,\n body.zh_logged_in .zhc-options-panel:hover {\n border-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-options-panel__actions-section {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-sidebar-project-display--completed__content {\n color: #767676;\n }\n body.zh_logged_in .zhc-roadmap-add-epic-item__title {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-roadmap-add-epic-item__subtitle {\n color: #767676;\n }\n body.zh_logged_in .zhc-roadmap-sidebar {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-roadmap-sidebar__body {\n border-color: #343434;\n box-shadow: -5px 0 30px 0 rgba(255, 255, 255, .7);\n }\n body.zh_logged_in .zhc-roadmap-sidebar__body--empty {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-roadmap-title--color-default {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-roadmap-title--color-primary {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-roadmap-title--color-secondary {\n color: #767676;\n }\n body.zh_logged_in .zhc-roadmap__title {\n background-color: #202020;\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap__title--secondary {\n background-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-date-strip {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-roadmap-date-strip__debug i,\n body.zh_logged_in .zhc-roadmap-date-strip__debug i::before {\n border-left-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-roadmap-date-strip__unit-top {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-roadmap-date-strip__unit-bottom {\n color: #767676;\n }\n body.zh_logged_in .zhc-roadmap-subheader {\n border-bottom-color: #2c2c2c;\n background-color: #202020;\n }\n body.zh_logged_in .zhc-roadmap-today-indicator__label {\n color: #fff;\n }\n body.zh_logged_in .zhc-date-preview {\n background-color: #c6c6c6;\n color: #fff;\n }\n body.zh_logged_in .zhc-roadmap-track::after {\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-roadmap-track--expandable:not(.react-draggable-dragging):not(.zhc-roadmap-track--resizable):hover .zhc-roadmap-track__drag-handle,\n body.zh_logged_in .zhc-roadmap-track__drag-handle--has-background,\n body.zh_logged_in .zhc-roadmap-track__drag-handle:hover {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-roadmap-warning-body {\n border-color: #261d08;\n background-color: #261d08;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-roadmap-warning-body .zhc-roadmap-warning-body__warning {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-roadmap-warning {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-sprint-calendar .DayPicker__withBorder {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-sprint-calendar tr {\n border-bottom-color: var(--ghd-bg-color);\n }\n body.zh_logged_in .zhc-sprint-calendar .DayPickerNavigation_svg__horizontal {\n fill: #c6c6c6;\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__outside {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__selected {\n color: #fff;\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__hovered_span,\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__selected_span {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__highlighted_calendar {\n background-color: #343434;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__selected_start::before,\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__selected--start::before {\n background: -webkit-linear-gradient(left, #181818 50%, #f1f1f9 50%);\n background: -moz-linear-gradient(left, #181818 50%, #f1f1f9 50%);\n background: -o-linear-gradient(left, #181818 50%, #f1f1f9 50%);\n background: linear-gradient(to right, #181818 50%, #f1f1f9 50%);\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__selected_start::after,\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__selected--start::after {\n color: #fff;\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__selected_end::before,\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__selected--end::before {\n background: -webkit-linear-gradient(right, #181818 50%, #f1f1f9 50%);\n background: -moz-linear-gradient(right, #181818 50%, #f1f1f9 50%);\n background: -o-linear-gradient(right, #181818 50%, #f1f1f9 50%);\n background: linear-gradient(to left, #181818 50%, #f1f1f9 50%);\n }\n body.zh_logged_in .zhc-sprint-calendar .CalendarDay__selected_end::after,\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__selected--end::after {\n color: #fff;\n }\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__highlighted--start {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__highlighted--start::before {\n background: -webkit-linear-gradient(left, #181818 50%, #343434 50%);\n background: -moz-linear-gradient(left, #181818 50%, #343434 50%);\n background: -o-linear-gradient(left, #181818 50%, #343434 50%);\n background: linear-gradient(to right, #181818 50%, #343434 50%);\n }\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__highlighted--start::after {\n background-color: #5a5a5a;\n }\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__highlighted--end {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__highlighted--end::before {\n background: -webkit-linear-gradient(right, #181818 50%, #343434 50%);\n background: -moz-linear-gradient(right, #181818 50%, #343434 50%);\n background: -o-linear-gradient(right, #181818 50%, #343434 50%);\n background: linear-gradient(to left, #181818 50%, #343434 50%);\n }\n body.zh_logged_in .zhc-sprint-calendar .zh-CalendarDay_container__highlighted--end::after {\n background-color: #5a5a5a;\n }\n body.zh_logged_in .zh-CalendarDay_container__selected--end.zh-CalendarDay_container__highlighted--start {\n color: #fff;\n }\n body.zh_logged_in .zh-CalendarDay_container__selected--end.zh-CalendarDay_container__highlighted--start::before {\n background: -webkit-linear-gradient(right, #343434 50%, #f1f1f9 50%);\n background: -moz-linear-gradient(right, #343434 50%, #f1f1f9 50%);\n background: -o-linear-gradient(right, #343434 50%, #f1f1f9 50%);\n background: linear-gradient(to left, #343434 50%, #f1f1f9 50%);\n }\n body.zh_logged_in .zh-CalendarDay_container__highlighted--start.zh-CalendarDay_container__highlighted--end::before {\n background: -webkit-linear-gradient(right, #343434 50%, #343434 50%);\n background: -moz-linear-gradient(right, #343434 50%, #343434 50%);\n background: -o-linear-gradient(right, #343434 50%, #343434 50%);\n background: linear-gradient(to left, #343434 50%, #343434 50%);\n }\n body.zh_logged_in .zhc-sprint-info-box {\n border-color: #343434;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sprint-issue-settings__option {\n border-color: #343434;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-sprint-preview {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-sprint-preview__content span {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-sprint-settings__dates-section,\n body.zh_logged_in .zhc-sprint-settings__sprint-preview-section {\n background-color: #181818;\n border-left-color: #343434;\n }\n body.zh_logged_in .zhc-sprint-settings__footer {\n background-color: #181818;\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-sprint-settings__calendar-validation {\n color: #d82828;\n }\n body.zh_logged_in .zhc-sprint-suffix-input__button {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-toast-checkmark-icon {\n color: #fff;\n }\n body.zh_logged_in .zhc-large-toast-card-controls button {\n background-color: #181818;\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-large-toast-card-controls button:hover {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-large-card-toast {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-toast {\n color: #767676;\n background-color: #c6c6c6;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-toast--info-message, body.zh_logged_in .zhc-toast b {\n color: #fff;\n }\n body.zh_logged_in .zhc-toast .zhc-btn--zhc-toast__button {\n background-color: transparent;\n }\n body.zh_logged_in .zhc-toast--no-background {\n background: none;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-toast-action,\n body.zh_logged_in .zhc-toast-dependency-fetch-error,\n body.zh_logged_in .zhc-toast-heading, body.zh_logged_in .zhc-toast-loading {\n color: #fff;\n }\n body.zh_logged_in .zhc-progress-update__content {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-progress-update__bar {\n background-color: #9b9b9b;\n }\n body.zh_logged_in .zhc-tutorial-progress-footer__action-buttons {\n box-shadow: none;\n }\n body.zh_logged_in .zhc-toast-tutorial-card__content h3 {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-toast-tutorial-card__content p {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workflows-connection-bar {\n background-color: #181818;\n box-shadow: 0 3px 12px #000;\n }\n body.zh_logged_in .zhc-workflows-connection-bar__bottom {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-workflows-connection-bar .zhc-button--variant-contained {\n background: none;\n box-shadow: none;\n }\n body.zh_logged_in .zhc-workflows-connection-bar .zhc-button--variant-contained:hover {\n border-color: #343434;\n background-color: #202020;\n }\n body.zh_logged_in .zhc-workflows-connection-bar__close-button .zhc-button {\n color: #767676;\n }\n body.zh_logged_in .workflows-destination-pipeline-icon {\n color: #fff;\n }\n body.zh_logged_in .zhc-workflows-pipeline--disabled .zhc-workflows-pipeline__button {\n color: #c6c6c6;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-workflows-pipeline__selected-icon {\n color: #fff;\n }\n body.zh_logged_in .workflows-skeleton-workspace {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .workflows-skeleton-workspace__pipeline,\n body.zh_logged_in .workflows-source-pipeline-icon {\n background-color: #181818;\n }\n body.zh_logged_in .zhc-workflows-workspace {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-creator__repo-list-item__label {\n border-bottom-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-creator__wrapper {\n background-color: #202020;\n }\n body.zh_logged_in .zhc-workspace-creator__wrapper h1 {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-workspace-creator {\n border-color: #343434;\n box-shadow: 0 3px 12px #000;\n background-color: #181818;\n }\n body.zh_logged_in .zhc-workspace-creator h3 {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-workspace-creator p {\n color: #9b9b9b;\n }\n body.zh_logged_in .zhc-workspace-creator-form .zhc-workspace-creator-form__text-input {\n background-color: #202020;\n border-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-creator-form .zhc-workspace-creator-form__text-input::placeholder {\n color: #5a5a5a;\n }\n body.zh_logged_in .zhc-workspace-creator-form__character-count {\n color: #767676;\n }\n body.zh_logged_in .zhc-workspace-creator-list-header p {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-workspace-creator__footer {\n border-top-color: #343434;\n }\n body.zh_logged_in .zhc-workspace-creator__footer .zhc-workspace-creator__back-button {\n color: #c6c6c6;\n }\n body.zh_logged_in .zhc-workspace-filter-label-picker__remove-label {\n background: none;\n }\n body.zh_logged_in .zhc-workspace-filter-sidebar-status {\n background-color: #181818;\n }\n body.zh_logged_in .zh-form-control, body.zh_logged_in .zh-form-control-small {\n color: #c6c6c6;\n border-color: #343434;\n }\n body.zh_logged_in .zh-form-control-small:focus,\n body.zh_logged_in .zh-form-control:focus {\n background-color: #181818;\n }\n @media only screen and (max-width: 768px) {\n body.zh_logged_in .zh-logo {\n color: #fff;\n }\n }\n body.zh_logged_in .zh-logo.short {\n color: #fff;\n }\n body.zh_logged_in .zh-boxie-modal {\n background-color: #242424 !important;\n }\n body.zh_logged_in .zh-muted-link {\n color: #afafaf !important;\n }\n body.zh_logged_in .zh-muted-link:hover {\n color: #4f8cc9 !important;\n }\n body.zh_logged_in .zh-text-muted {\n color: #afafaf !important;\n }\n body.zh_logged_in .icon-muted {\n color: #2c2c2c;\n }\n body.zh_logged_in .icon-light {\n color: #fff;\n }\n body.zh_logged_in .icon-dark {\n color: #c6c6c6;\n }\n body.zh_logged_in .icon-border {\n border-color: #2c2c2c;\n }\n body.zh_logged_in .dropdown-menu > .active > a > [class*=\" icon-\"],\n body.zh_logged_in .dropdown-menu > .active > a > [class^=\"icon-\"],\n body.zh_logged_in .dropdown-menu > li > a:hover > [class*=\" icon-\"],\n body.zh_logged_in .dropdown-menu > li > a:hover > [class^=\"icon-\"],\n body.zh_logged_in .dropdown-submenu:hover > a > [class*=\" icon-\"],\n body.zh_logged_in .dropdown-submenu:hover > a > [class^=\"icon-\"],\n body.zh_logged_in .icon-white,\n body.zh_logged_in .nav-list > .active > a > [class*=\" icon-\"],\n body.zh_logged_in .nav-list > .active > a > [class^=\"icon-\"],\n body.zh_logged_in .nav-pills > .active > a > [class*=\" icon-\"],\n body.zh_logged_in .nav-pills > .active > a > [class^=\"icon-\"],\n body.zh_logged_in .navbar-inverse .nav > .active > a > [class*=\" icon-\"],\n body.zh_logged_in .navbar-inverse .nav > .active > a > [class^=\"icon-\"],\n body.zh_logged_in [class*=\" icon-\"], body.zh_logged_in [class^=\"icon-\"] {\n background-image: none;\n }\n body.zh_logged_in .zh-menu-header {\n background-color: #181818;\n color: #fff;\n }\n body.zh_logged_in .zh-btn {\n color: #fff;\n background-color: #2c2c2c;\n }\n body.zh_logged_in .zh-btn:active {\n background-image: none;\n }\n body.zh_logged_in .disabled {\n background-color: #343434;\n }\n body.zh_logged_in .zh-menu-content__item {\n color: #9b9b9b;\n }\n body.zh_logged_in .zh-menu-content__item:hover {\n background-color: #242424;\n border-color: #343434;\n }\n body.zh_logged_in .zh-menu-content__item--disabled:hover {\n background-color: transparent;\n }\n body.zh_logged_in .addButton, body.zh_logged_in .mTsMGKGfZQ8olIRsI8B7W {\n background: none;\n }\n body.zh_logged_in ._16iMYDvEo7_GWkmrvtfs_2,\n body.zh_logged_in .tooltipOverflow {\n background-color: transparent;\n }\n /* end zenhub rules */\n /* begin github-hovercard rules */\n html[class*=\"ghh-\"] .tooltipster-box,\n html[class*=\"ghh-\"] .tooltipster-content {\n color: #fff;\n }\n html[class*=\"ghh-\"] .ghh a {\n color: #4f8cc9;\n }\n html[class*=\"ghh-\"] .windows .ghh ::-webkit-scrollbar {\n background-color: transparent;\n }\n html[class*=\"ghh-\"] .windows .ghh ::-webkit-scrollbar-thumb {\n background-color: hsla(0, 0%, 0%, .15);\n }\n html[class*=\"ghh-\"] .windows .ghh ::-webkit-scrollbar-corner {\n background-color: transparent;\n }\n html[class*=\"ghh-\"] .ghh-issue-body, html[class*=\"ghh-\"] .ghh-readme {\n background-color: hsla(0, 0%, 0%, .15);\n }\n html[class*=\"ghh-\"] .ghh-issue-body blockquote,\n html[class*=\"ghh-\"] .ghh-readme blockquote {\n border-left-color: #343434;\n color: #9b9b9b;\n }\n html[class*=\"ghh-\"] .ghh-issue-body code,\n html[class*=\"ghh-\"] .ghh-issue-body tt, html[class*=\"ghh-\"] .ghh-readme code,\n html[class*=\"ghh-\"] .ghh-readme tt {\n background-color: rgba(220, 220, 220, .05);\n }\n html[class*=\"ghh-\"] .ghh-issue-body pre, html[class*=\"ghh-\"] .ghh-readme pre {\n background-color: #222;\n }\n html[class*=\"ghh-\"] .ghh-issue-body pre code,\n html[class*=\"ghh-\"] .ghh-issue-body pre tt,\n html[class*=\"ghh-\"] .ghh-readme pre code,\n html[class*=\"ghh-\"] .ghh-readme pre tt {\n background-color: transparent;\n }\n html[class*=\"ghh-\"] .ghh-issue-body a[href^=\"https://saucelabs.com/\"] img,\n html[class*=\"ghh-\"] .ghh-readme a[href^=\"https://saucelabs.com/\"] img {\n background-color: #181818;\n }\n .ghh-theme-github .ghh-issue-body h1, .ghh-theme-github .ghh-issue-body h2,\n .ghh-theme-github .ghh-readme h1, .ghh-theme-github .ghh-readme h2 {\n border-bottom-color: #2c2c2c;\n }\n .ghh-theme-github .ghh-issue-body tr, .ghh-theme-github .ghh-readme tr {\n background-color: #181818;\n border-top-color: #767676;\n }\n .ghh-theme-github .ghh-issue-body tr:nth-child(2n),\n .ghh-theme-github .ghh-readme tr:nth-child(2n) {\n background-color: #222;\n }\n .ghh-theme-github .ghh-issue-body td, .ghh-theme-github .ghh-issue-body th,\n .ghh-theme-github .ghh-readme td, .ghh-theme-github .ghh-readme th {\n border-color: #343434;\n }\n .ghh-theme-github .ghh .ghh-issue-body a,\n .ghh-theme-github .ghh .ghh-readme a {\n color: #4f8cc9;\n }\n .ghh-theme-github .ghh .ghh-issue-body .user-mention,\n .ghh-theme-github .ghh .ghh-readme .user-mention {\n color: #c6c6c6;\n }\n .ghh-theme-classic .ghh-issue-body hr, .ghh-theme-classic .ghh-readme hr {\n border-bottom-color: hsla(0, 0%, 0%, .2);\n }\n .ghh-theme-classic .ghh-issue-body blockquote,\n .ghh-theme-classic .ghh-readme blockquote {\n border-left-color: #5a5a5a;\n }\n .ghh-theme-classic .ghh-issue-body code,\n .ghh-theme-classic .ghh-issue-body tt, .ghh-theme-classic .ghh-readme code,\n .ghh-theme-classic .ghh-readme tt {\n background-color: hsla(0, 0%, 0%, .15);\n }\n .ghh-theme-classic .ghh-issue-body pre code,\n .ghh-theme-classic .ghh-issue-body pre tt,\n .ghh-theme-classic .ghh-readme pre code,\n .ghh-theme-classic .ghh-readme pre tt {\n background-color: transparent;\n }\n .ghh-theme-classic .ghh-issue-body .border,\n .ghh-theme-classic .ghh-readme .border {\n border-color: hsla(0, 0%, 0%, .2) !important;\n }\n .ghh-theme-classic .ghh-issue-body .border-bottom,\n .ghh-theme-classic .ghh-readme .border-bottom {\n border-bottom-color: hsla(0, 0%, 0%, .1) !important;\n }\n .ghh-theme-classic .ghh-issue-body .text-gray-light,\n .ghh-theme-classic .ghh-readme .text-gray-light {\n color: #fff !important;\n }\n .ghh-theme-classic .ghh-issue-body .bg-gray-light,\n .ghh-theme-classic .ghh-readme .bg-gray-light {\n background-color: hsla(0, 0%, 0%, .15) !important;\n }\n .ghh-theme-classic .ghh-issue-body .bg-white,\n .ghh-theme-classic .ghh-readme .bg-white {\n background-color: transparent !important;\n }\n .ghh-theme-classic .ghh-issue-body .blob-num,\n .ghh-theme-classic .ghh-readme .blob-num {\n color: hsla(0, 0%, 0%, .5) !important;\n }\n .ghh-theme-classic .ghh-issue-body .blob-code-inner,\n .ghh-theme-classic .ghh-readme .blob-code-inner {\n color: #fff !important;\n }\n html[class*=\"ghh-\"] .ghh-commit-meta .commit-ref,\n html[class*=\"ghh-\"] .ghh-pull-meta .commit-ref {\n background-color: hsla(0, 0%, 0%, .15);\n }\n html[class*=\"ghh-\"] .ghh button {\n color: #fff;\n }\n html[class*=\"ghh-\"] .ghh button.ghh-primary:hover {\n background-color: #4f8cc9;\n }\n html[class*=\"ghh-\"] .ghh button.ghh-aux {\n background-color: hsla(0, 0%, 0%, .2);\n color: hsla(0, 0%, 100%, .2);\n }\n html[class*=\"ghh-\"] .ghh button.ghh-aux:hover {\n background-color: hsla(0, 0%, 0%, .3);\n color: #fff;\n }\n html[class*=\"ghh-\"] .ghh .ghh-state {\n color: #fff;\n }\n html[class*=\"ghh-\"] .ghh .ghh-state-open {\n background-color: #373;\n }\n html[class*=\"ghh-\"] .ghh .ghh-state-closed {\n background-color: #d82828;\n }\n html[class*=\"ghh-\"] .ghh .ghh-state-merged {\n background-color: #73589a;\n }\n html[class*=\"ghh-\"] .ghh .ghh-state-draft {\n background-color: #444;\n }\n html[class*=\"ghh-\"] .ghh .ghh-state-warning {\n color: #cb4;\n }\n html[class*=\"ghh-\"] .ghh .ghh-state-verified {\n background-color: #484;\n }\n html[class*=\"ghh-\"] .ghh-more-separator {\n border-bottom-color: hsla(0, 0%, 0%, .2);\n }\n html[class*=\"ghh-\"] .ghh-avatar {\n border-color: hsla(0, 0%, 0%, .1);\n background-color: #181818;\n }\n html[class*=\"ghh-\"] .ghh-topic {\n color: #fff;\n }\n html[class*=\"ghh-\"] .ghh-stats, html[class*=\"ghh-\"] .ghh-topic {\n background-color: hsla(0, 0%, 0%, .15);\n }\n html[class*=\"ghh-\"] .ghh-stats span {\n color: #fff;\n }\n html[class*=\"ghh-\"] .ghh-pull-meta .ghh-reviews li {\n background-color: hsla(0, 0%, 0%, .15);\n }\n html[class*=\"ghh-\"] .ghh-pull-meta .ghh-reviews .ghh-state-icon {\n color: #fff;\n }\n html[class*=\"ghh-\"] .ghh-pull-meta .ghh-reviews .ghh-state-icon-warning {\n background-color: #cb4;\n }\n html[class*=\"ghh-\"] .ghh-pull-meta .ghh-reviews .ghh-state-icon-problem {\n background-color: #444;\n }\n html[class*=\"ghh-\"] .ghh-commit-body {\n background-color: hsla(0, 0%, 0%, .15);\n }\n html[class*=\"ghh-\"] .ghh-overlay form {\n background-color: #181818;\n }\n html[class*=\"ghh-\"] .ghh-overlay form h3 {\n border-bottom-color: #2c2c2c;\n }\n .ghh-theme-github .tooltipster-box .tooltipster-content {\n box-shadow: 0 1px 15px #000;\n background-color: #181818;\n border-color: #343434;\n color: #afafaf;\n }\n .ghh-theme-github .tooltipster-right .tooltipster-arrow-background {\n border-right-color: var(--ghd-bg-color);\n }\n .ghh-theme-github .tooltipster-right .tooltipster-arrow-border {\n border-right-color: #343434;\n }\n .ghh-theme-github .tooltipster-left .tooltipster-arrow-background {\n border-left-color: var(--ghd-bg-color);\n }\n .ghh-theme-github .tooltipster-left .tooltipster-arrow-border {\n border-left-color: #343434;\n }\n .ghh-theme-github .tooltipster-top .tooltipster-arrow-background {\n border-top-color: var(--ghd-bg-color);\n }\n .ghh-theme-github .tooltipster-top .tooltipster-arrow-border {\n border-top-color: #343434;\n }\n .ghh-theme-github .tooltipster-bottom .tooltipster-arrow-background {\n border-bottom-color: var(--ghd-bg-color);\n }\n .ghh-theme-github .tooltipster-bottom .tooltipster-arrow-border {\n border-bottom-color: #343434;\n }\n .ghh-theme-github .ghh a {\n color: #c6c6c6;\n }\n .ghh-theme-github .ghh a:hover {\n color: #4f8cc9;\n }\n .ghh-theme-github .ghh button.ghh-aux, .ghh-theme-github .ghh button:hover {\n color: #fff;\n }\n .ghh-theme-github .ghh-markdown-separator {\n border-bottom-color: #343434;\n }\n .ghh-theme-github .ghh .ghh-stats > a + a {\n border-left-color: #343434;\n }\n .ghh-theme-github .ghh .ghh-stats span {\n color: #c6c6c6;\n }\n .ghh-theme-github .ghh .ghh-more-separator {\n border-bottom-color: #343434;\n }\n .ghh-theme-github .ghh .ghh-state-verified {\n color: #6cc644;\n border-color: #343434;\n background-color: #181818;\n }\n .ghh-theme-github .ghh-commit-meta .text-diff-added,\n .ghh-theme-github .ghh-pull-meta .text-diff-added {\n color: #373 !important;\n }\n .ghh-theme-github .ghh-commit-meta .text-diff-deleted,\n .ghh-theme-github .ghh-pull-meta .text-diff-deleted {\n color: #d82828 !important;\n }\n .ghh-theme-github .ghh-reviews .ghh-state-alert {\n color: #d82828;\n }\n .ghh-theme-github .ghh-reviews .ghh-state-success {\n color: #373;\n }\n .ghh-theme-github .ghh-reviews .ghh-state-warning {\n color: #cb4;\n }\n .ghh-theme-github .ghh-reviews .ghh-state-icon-alert {\n background-color: #d82828;\n }\n .ghh-theme-github .ghh-reviews .ghh-state-icon-success {\n background-color: #373;\n }\n .ghh-theme-github .ghh-reviews .ghh-state-icon-warning {\n background-color: #cb4;\n }\n .ghh-theme-github .ghh-reviews .ghh-state-icon-problem {\n background-color: #444;\n }\n .ghh-theme-one-dark .tooltipster-box .tooltipster-content {\n box-shadow: 0 1px 15px #000;\n }\n .ghh-theme-one-dark .ghh a:hover {\n color: #4f8cc9;\n }\n .ghh-theme-one-dark .ghh button.ghh-aux,\n .ghh-theme-one-dark .ghh button:hover {\n color: #fff;\n }\n .ghh-theme-one-dark .ghh .ghh-state-verified {\n color: #6cc644;\n background-color: transparent;\n }\n .ghh-theme-one-dark .ghh-commit-meta .text-diff-added,\n .ghh-theme-one-dark .ghh-pull-meta .text-diff-added {\n color: #373 !important;\n }\n .ghh-theme-one-dark .ghh-commit-meta .text-diff-deleted,\n .ghh-theme-one-dark .ghh-pull-meta .text-diff-deleted {\n color: #d82828 !important;\n }\n .ghh-theme-one-dark .ghh-reviews .ghh-state-alert {\n color: #d82828;\n }\n .ghh-theme-one-dark .ghh-reviews .ghh-state-success {\n color: #373;\n }\n .ghh-theme-one-dark .ghh-reviews .ghh-state-warning {\n color: #cb4;\n }\n .ghh-theme-one-dark .ghh-reviews .ghh-state-icon-alert {\n background-color: #d82828;\n }\n .ghh-theme-one-dark .ghh-reviews .ghh-state-icon-success {\n background-color: #373;\n }\n .ghh-theme-one-dark .ghh-reviews .ghh-state-icon-warning {\n background-color: #cb4;\n }\n .ghh-theme-one-dark .ghh-reviews .ghh-state-icon-problem {\n background-color: #444;\n }\n .ghh-theme-github-dark .tooltipster-box .tooltipster-content {\n box-shadow: 0 1px 15px #000;\n }\n .ghh-theme-github-dark .ghh .ghh-state-verified {\n color: #6cc644;\n background-color: transparent;\n }\n .ghh-theme-github-dark .ghh-commit-meta .text-diff-added,\n .ghh-theme-github-dark .ghh-pull-meta .text-diff-added {\n color: #373 !important;\n }\n .ghh-theme-github-dark .ghh-commit-meta .text-diff-deleted,\n .ghh-theme-github-dark .ghh-pull-meta .text-diff-deleted {\n color: #d82828 !important;\n }\n .ghh-theme-github-dark .ghh-reviews .ghh-state-alert {\n color: #d82828;\n }\n .ghh-theme-github-dark .ghh-reviews .ghh-state-success {\n color: #373;\n }\n .ghh-theme-github-dark .ghh-reviews .ghh-state-warning {\n color: #cb4;\n }\n .ghh-theme-github-dark .ghh-reviews .ghh-state-icon-alert {\n background-color: #d82828;\n }\n .ghh-theme-github-dark .ghh-reviews .ghh-state-icon-success {\n background-color: #373;\n }\n .ghh-theme-github-dark .ghh-reviews .ghh-state-icon-warning {\n background-color: #cb4;\n }\n .ghh-theme-github-dark .ghh-reviews .ghh-state-icon-problem {\n background-color: #444;\n }\n /* end github-hovercard rules */\n /* begin gitako rules */\n @media (prefers-color-scheme: dark) {\n body.gitako-ready :root[data-color-mode=auto] {\n --gitako-auto-purple-3: #73589a;\n --gitako-auto-purple-4: #53387a;\n --gitako-btn-primary-text: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l4-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l3-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l2-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l1-border: rgba(220, 220, 220, .06);\n }\n }\n body.gitako-ready :root[data-color-mode=dark] {\n --gitako-auto-purple-3: #73589a;\n --gitako-auto-purple-4: #53387a;\n --gitako-btn-primary-text: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l4-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l3-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l2-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l1-border: rgba(220, 220, 220, .06);\n }\n body.gitako-ready :root {\n --gitako-auto-black: #dcdcdc;\n --gitako-auto-white: #181818;\n --gitako-auto-gray-0: #181818;\n --gitako-auto-gray-1: #202020;\n --gitako-auto-gray-2: #343434;\n --gitako-auto-gray-3: #343434;\n --gitako-auto-gray-4: #767676;\n --gitako-auto-gray-5: #9b9b9b;\n --gitako-auto-gray-6: #afafaf;\n --gitako-auto-gray-7: #afafaf;\n --gitako-auto-gray-8: #c6c6c6;\n --gitako-auto-gray-9: #c6c6c6;\n --gitako-auto-blue-0: #182030;\n --gitako-auto-blue-1: #182030;\n --gitako-auto-blue-2: #246;\n --gitako-auto-blue-3: #4f8cc9;\n --gitako-auto-blue-4: #4f8cc9;\n --gitako-auto-blue-5: #4f8cc9;\n --gitako-auto-blue-6: #4f8cc9;\n --gitako-auto-blue-7: rgba(79, 140, 201, .5);\n --gitako-auto-blue-8: #9daccc;\n --gitako-auto-blue-9: #9daccc;\n --gitako-auto-green-0: #002800;\n --gitako-auto-green-1: #002800;\n --gitako-auto-green-2: #040;\n --gitako-auto-green-3: #040;\n --gitako-auto-green-4: #373;\n --gitako-auto-green-5: #484;\n --gitako-auto-green-6: #6cc644;\n --gitako-auto-green-7: #6cc644;\n --gitako-auto-green-8: #6cc644;\n --gitako-auto-green-9: #6cc644;\n --gitako-auto-yellow-0: #261d08;\n --gitako-auto-yellow-1: #261d08;\n --gitako-auto-yellow-2: #651;\n --gitako-auto-yellow-3: #cb4;\n --gitako-auto-yellow-4: #cb4;\n --gitako-auto-yellow-5: #cb4;\n --gitako-auto-yellow-6: #cb4;\n --gitako-auto-yellow-7: #cb4;\n --gitako-auto-yellow-8: #cb4;\n --gitako-auto-yellow-9: #bba257;\n --gitako-auto-orange-0: #730;\n --gitako-auto-orange-1: #730;\n --gitako-auto-orange-2: #730;\n --gitako-auto-orange-3: #730;\n --gitako-auto-orange-4: #fb8532;\n --gitako-auto-orange-5: #fb8532;\n --gitako-auto-orange-6: #fb8532;\n --gitako-auto-orange-7: #f3582c;\n --gitako-auto-orange-8: #f3582c;\n --gitako-auto-orange-9: #f3582c;\n --gitako-auto-red-0: #300;\n --gitako-auto-red-1: #300;\n --gitako-auto-red-2: #d82828;\n --gitako-auto-red-3: #d82828;\n --gitako-auto-red-4: #d82828;\n --gitako-auto-red-5: #d82828;\n --gitako-auto-red-6: #d82828;\n --gitako-auto-red-7: #d82828;\n --gitako-auto-red-8: #f84848;\n --gitako-auto-red-9: #f84848;\n --gitako-auto-purple-0: #213;\n --gitako-auto-purple-1: #53387a;\n --gitako-auto-purple-2: #53387a;\n --gitako-auto-purple-3: #53387a;\n --gitako-auto-purple-4: #53387a;\n --gitako-auto-purple-5: #73589a;\n --gitako-auto-purple-6: #73589a;\n --gitako-auto-purple-7: #9378ba;\n --gitako-auto-purple-8: #9378ba;\n --gitako-auto-purple-9: #9378ba;\n --gitako-auto-pink-0: #170711;\n --gitako-auto-pink-1: #170711;\n --gitako-auto-pink-2: #170711;\n --gitako-auto-pink-3: #c49;\n --gitako-auto-pink-4: #c49;\n --gitako-auto-pink-5: #c49;\n --gitako-auto-pink-6: #e6b;\n --gitako-auto-pink-7: #e6b;\n --gitako-auto-pink-8: #e6b;\n --gitako-auto-pink-9: #e6b;\n --gitako-text-primary: #c6c6c6;\n --gitako-text-secondary: #afafaf;\n --gitako-text-tertiary: #9b9b9b;\n --gitako-text-placeholder: #9b9b9b;\n --gitako-text-disabled: #9b9b9b;\n --gitako-text-inverse: #181818;\n --gitako-text-link: #4f8cc9;\n --gitako-text-danger: #d82828;\n --gitako-text-success: #6cc644;\n --gitako-text-warning: #cb4;\n --gitako-text-white: #181818;\n --gitako-icon-primary: #c6c6c6;\n --gitako-icon-secondary: #afafaf;\n --gitako-icon-tertiary: #767676;\n --gitako-icon-info: #4f8cc9;\n --gitako-icon-danger: #d82828;\n --gitako-icon-success: #6cc644;\n --gitako-icon-warning: #cb4;\n --gitako-border-primary: #343434;\n --gitako-border-secondary: #2c2c2c;\n --gitako-border-tertiary: #343434;\n --gitako-border-overlay: #343434;\n --gitako-border-inverse: #181818;\n --gitako-border-info: #4f8cc9;\n --gitako-border-danger: #d82828;\n --gitako-border-success: #373;\n --gitako-border-warning: #cb4;\n --gitako-bg-canvas: #181818;\n --gitako-bg-canvas-mobile: #181818;\n --gitako-bg-canvas-inverse: #c6c6c6;\n --gitako-bg-canvas-inset: #202020;\n --gitako-bg-primary: #181818;\n --gitako-bg-secondary: #181818;\n --gitako-bg-tertiary: #202020;\n --gitako-bg-overlay: #181818;\n --gitako-bg-info: #182030;\n --gitako-bg-info-inverse: #4f8cc9;\n --gitako-bg-danger: #300;\n --gitako-bg-danger-inverse: #d82828;\n --gitako-bg-success: #002800;\n --gitako-bg-success-inverse: #484;\n --gitako-bg-warning: #651;\n --gitako-bg-warning-inverse: #cb4;\n --gitako-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --gitako-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --gitako-state-hover-primary-bg: #4f8cc9;\n --gitako-state-hover-primary-border: #4f8cc9;\n --gitako-state-hover-primary-text: #181818;\n --gitako-state-hover-primary-icon: #181818;\n --gitako-state-hover-secondary-bg: #202020;\n --gitako-state-hover-secondary-border: #202020;\n --gitako-state-selected-primary-bg: #4f8cc9;\n --gitako-state-selected-primary-border: #4f8cc9;\n --gitako-state-selected-primary-text: #181818;\n --gitako-state-selected-primary-icon: #181818;\n --gitako-state-focus-border: #4f8cc9;\n --gitako-fade-fg-15: rgba(220, 220, 220, .15);\n --gitako-fade-black-15: rgba(220, 220, 220, .15);\n --gitako-fade-white-15: hsla(0, 0%, 0%, .15);\n --gitako-alert-info-text: #c6c6c6;\n --gitako-alert-info-icon: #4f8cc9;\n --gitako-alert-info-bg: #182030;\n --gitako-alert-info-border: #246;\n --gitako-alert-warn-text: #c6c6c6;\n --gitako-alert-warn-icon: #cb4;\n --gitako-alert-warn-bg: #261d08;\n --gitako-alert-error-text: #c6c6c6;\n --gitako-alert-error-icon: rgba(255, 68, 68, .6);\n --gitako-alert-error-bg: #300;\n --gitako-alert-error-border: rgba(255, 68, 68, .2);\n --gitako-alert-success-text: #c6c6c6;\n --gitako-alert-success-icon: #3737;\n --gitako-alert-success-bg: #002800;\n --gitako-alert-success-border: #6cc64450;\n --gitako-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --gitako-autocomplete-row-border: #2c2c2c;\n --gitako-blankslate-icon: #767676;\n --gitako-btn-text: #c6c6c6;\n --gitako-btn-bg: #181818;\n --gitako-btn-border: rgba(220, 220, 220, .15);\n --gitako-btn-hover-bg: #242424;\n --gitako-btn-hover-border: rgba(220, 220, 220, .15);\n --gitako-btn-selected-bg: #2c2c2c;\n --gitako-btn-focus-bg: #181818;\n --gitako-btn-focus-border: rgba(220, 220, 220, .15);\n --gitako-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --gitako-btn-primary-text: #181818;\n --gitako-btn-primary-bg: #373;\n --gitako-btn-primary-border: rgba(220, 220, 220, .15);\n --gitako-btn-primary-hover-bg: #484;\n --gitako-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --gitako-btn-primary-selected-bg: #595;\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-disabled-bg: #040;\n --gitako-btn-primary-focus-bg: #373;\n --gitako-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-text: #4f8cc9;\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-hover-bg: #4f8cc9;\n --gitako-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-outline-selected-bg: #4f8cc9;\n --gitako-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --gitako-btn-outline-disabled-bg: #181818;\n --gitako-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --gitako-btn-danger-text: #d82828;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-hover-bg: #d82828;\n --gitako-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --gitako-btn-danger-disabled-bg: #181818;\n --gitako-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --gitako-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --gitako-btn-counter-bg: rgba(220, 220, 220, .15);\n --gitako-counter-text: #c6c6c6;\n --gitako-counter-primary-text: #181818;\n --gitako-counter-primary-bg: #9b9b9b;\n --gitako-counter-secondary-text: #9b9b9b;\n --gitako-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --gitako-label-border: #343434;\n --gitako-label-primary-text: #c6c6c6;\n --gitako-label-primary-border: #9b9b9b;\n --gitako-label-secondary-text: #afafaf;\n --gitako-label-secondary-border: #343434;\n --gitako-label-info-text: #4f8cc9;\n --gitako-label-info-border: #4f8cc9;\n --gitako-label-success-text: #6cc644;\n --gitako-label-success-border: #484;\n --gitako-label-warning-text: #bba257;\n --gitako-label-warning-border: #cb4;\n --gitako-label-danger-text: #d82828;\n --gitako-label-danger-border: #d82828;\n --gitako-label-orange-text: #f3582c;\n --gitako-label-orange-border: #fb8532;\n --gitako-input-bg: #181818;\n --gitako-input-contrast-bg: #181818;\n --gitako-input-border: #343434;\n --gitako-input-disabled-bg: #181818;\n --gitako-input-disabled-border: #343434;\n --gitako-input-warning-border: #cb4;\n --gitako-input-error-border: #d82828;\n --gitako-input-tooltip-success-text: #6cc644;\n --gitako-input-tooltip-success-bg: #002800;\n --gitako-input-tooltip-success-border: #373;\n --gitako-input-tooltip-warning-text: #bba257;\n --gitako-input-tooltip-warning-bg: #651;\n --gitako-input-tooltip-warning-border: #cb4;\n --gitako-input-tooltip-error-text: #f84848;\n --gitako-input-tooltip-error-bg: #300;\n --gitako-input-tooltip-error-border: #d82828;\n --gitako-avatar-bg: #181818;\n --gitako-avatar-stack-fade: #343434;\n --gitako-avatar-stack-fade-more: #343434;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-toast-text: #c6c6c6;\n --gitako-toast-bg: #181818;\n --gitako-toast-border: #343434;\n --gitako-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --gitako-toast-icon: #181818;\n --gitako-toast-icon-bg: #4f8cc9;\n --gitako-toast-success-text: #c6c6c6;\n --gitako-toast-success-border: #343434;\n --gitako-toast-success-icon: #181818;\n --gitako-toast-success-icon-bg: #484;\n --gitako-toast-warning-text: #c6c6c6;\n --gitako-toast-warning-border: #343434;\n --gitako-toast-warning-icon: #c6c6c6;\n --gitako-toast-warning-icon-bg: #cb4;\n --gitako-toast-danger-text: #c6c6c6;\n --gitako-toast-danger-border: #343434;\n --gitako-toast-danger-icon: #181818;\n --gitako-toast-danger-icon-bg: #d82828;\n --gitako-toast-loading-text: #c6c6c6;\n --gitako-toast-loading-border: #343434;\n --gitako-toast-loading-icon: #181818;\n --gitako-toast-loading-icon-bg: #afafaf;\n --gitako-timeline-text: #afafaf;\n --gitako-timeline-badge-bg: #343434;\n --gitako-timeline-target-badge-border: #4f8cc9;\n --gitako-timeline-target-badge-shadow: #246;\n --gitako-select-menu-border-secondary: #2c2c2c;\n --gitako-select-menu-tap-focus-bg: #182030;\n --gitako-box-blue-border: #246;\n --gitako-box-row-yellow-bg: #261d08;\n --gitako-box-row-blue-bg: #182030;\n --gitako-box-header-blue-bg: #182030;\n --gitako-box-header-blue-border: #246;\n --gitako-box-bg-info: #182030;\n --gitako-box-bg-warning: #261d08;\n --gitako-branch-name-text: rgba(220, 220, 220, .6);\n --gitako-branch-name-icon: #767676;\n --gitako-branch-name-bg: #182030;\n --gitako-branch-name-link-text: #4f8cc9;\n --gitako-branch-name-link-icon: #767676;\n --gitako-branch-name-link-bg: #182030;\n --gitako-markdown-frame-border: #343434;\n --gitako-markdown-blockquote-border: #343434;\n --gitako-markdown-table-border: #343434;\n --gitako-markdown-table-tr-border: #767676;\n --gitako-menu-heading-text: #c6c6c6;\n --gitako-menu-border-active: #fff;\n --gitako-sidenav-selected-bg: #181818;\n --gitako-sidenav-border-active: #fff;\n --gitako-header-bg: #c6c6c6;\n --gitako-header-logo: #181818;\n --gitako-filter-item-bar-bg: #242424;\n --gitako-hidden-text-expander-bg: #343434;\n --gitako-hidden-text-expander-bg-hover: #767676;\n --gitako-drag-and-drop-border: #767676;\n --gitako-upload-enabled-border: #343434;\n --gitako-upload-enabled-border-focused: #4f8cc9;\n --gitako-previewable-comment-form-border: #767676;\n --gitako-underlinenav-border-hover: #343434;\n --gitako-underlinenav-border-active: #fff;\n --gitako-underlinenav-text: #c6c6c6;\n --gitako-underlinenav-text-hover: #c6c6c6;\n --gitako-underlinenav-text-active: #c6c6c6;\n --gitako-underlinenav-icon: #767676;\n --gitako-underlinenav-icon-hover: #767676;\n --gitako-underlinenav-icon-active: #c6c6c6;\n --gitako-underlinenav-counter-text: #c6c6c6;\n --gitako-verified-badge-text: #6cc644;\n --gitako-verified-badge-bg: #181818;\n --gitako-verified-badge-border: #343434;\n --gitako-social-count-bg: #181818;\n --gitako-tooltip-text: #181818;\n --gitako-tooltip-bg: #c6c6c6;\n --gitako-header-search-bg: #c6c6c6;\n --gitako-header-search-border: #afafaf;\n --gitako-search-keyword-hl: #261d08;\n --gitako-diffstat-neutral-bg: #343434;\n --gitako-diffstat-neutral-border: #343434;\n --gitako-diffstat-deletion-bg: #d82828;\n --gitako-diffstat-deletion-border: #d82828;\n --gitako-diffstat-addition-bg: #484;\n --gitako-diffstat-addition-border: #484;\n --gitako-files-explorer-icon: #4f8cc9;\n --gitako-hl-author-bg: #182030;\n --gitako-hl-author-border: #246;\n --gitako-logo-subdued: #343434;\n --gitako-discussion-border: #040;\n --gitako-discussion-bg-success: #484;\n --gitako-code-selection-bg: #246;\n --gitako-blob-line-highlight-bg: #261d08;\n --gitako-diff-addition-text: #6cc644;\n --gitako-diff-addition-bg: #002800;\n --gitako-diff-addition-border: #373;\n --gitako-diff-deletion-text: #d82828;\n --gitako-diff-deletion-bg: #300;\n --gitako-diff-deletion-border: #d82828;\n --gitako-diff-change-text: #cb4;\n --gitako-diff-change-bg: #651;\n --gitako-diff-change-border: #cb4;\n --gitako-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --gitako-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --gitako-diff-blob-addition-line-bg: #002800;\n --gitako-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --gitako-diff-blob-deletion-num-bg: #300;\n --gitako-diff-blob-deletion-line-bg: #300;\n --gitako-diff-blob-hunk-num-bg: #182030;\n --gitako-diff-blob-hunk-line-bg: #182030;\n --gitako-diff-blob-empty-block-bg: #181818;\n --gitako-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --gitako-diff-blob-selected-line-highlight-border: #cb4;\n --gitako-diff-blob-expander-icon: #afafaf;\n --gitako-diff-blob-expander-hover-icon: #181818;\n --gitako-diff-blob-expander-hover-bg: #4f8cc9;\n --gitako-diff-blob-comment-button-icon: #181818;\n --gitako-diff-blob-comment-button-bg: #4f8cc9;\n --gitako-global-nav-logo: #181818;\n --gitako-global-nav-bg: #c6c6c6;\n --gitako-global-nav-text: #181818;\n --gitako-global-nav-icon: #181818;\n --gitako-global-nav-input-bg: #181818;\n --gitako-global-nav-input-border: #181818;\n --gitako-global-nav-input-icon: #343434;\n --gitako-global-nav-input-placeholder: #767676;\n --gitako-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l4-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l3-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l2-border: rgba(220, 220, 220, .06);\n --gitako-calendar-graph-day-l1-border: rgba(220, 220, 220, .06);\n --gitako-footer-invertocat-octicon: #343434;\n --gitako-footer-invertocat-octicon-hover: #9b9b9b;\n --gitako-pr-state-draft-text: #181818;\n --gitako-pr-state-draft-bg: #9b9b9b;\n --gitako-pr-state-open-text: #181818;\n --gitako-pr-state-open-bg: #484;\n --gitako-pr-state-merged-text: #181818;\n --gitako-pr-state-merged-bg: #73589a;\n --gitako-pr-state-closed-text: #181818;\n --gitako-pr-state-closed-bg: #d82828;\n --gitako-topic-tag-text: #4f8cc9;\n --gitako-topic-tag-bg: #182030;\n --gitako-merge-box-success-icon-bg: #484;\n --gitako-merge-box-success-icon-text: #181818;\n --gitako-merge-box-success-indicator-bg: #484;\n --gitako-merge-box-merged-icon-bg: #73589a;\n --gitako-merge-box-merged-icon-text: #181818;\n --gitako-merge-box-merged-box-border: #73589a;\n --gitako-merge-box-neutral-icon-bg: #9b9b9b;\n --gitako-merge-box-neutral-icon-text: #181818;\n --gitako-merge-box-neutral-indicator-bg: #9b9b9b;\n --gitako-merge-box-warning-icon-bg: #cb4;\n --gitako-merge-box-warning-icon-text: #181818;\n --gitako-merge-box-warning-box-border: #cb4;\n --gitako-merge-box-error-icon-bg: #d82828;\n --gitako-merge-box-error-icon-text: #181818;\n --gitako-merge-box-error-indicator-bg: #d82828;\n --gitako-project-card-bg: #181818;\n --gitako-project-header-bg: #c6c6c6;\n --gitako-project-sidebar-bg: #181818;\n --gitako-project-gradient-in: #181818;\n --gitako-marketing-icon-primary: #4f8cc9;\n --gitako-marketing-icon-secondary: #4f8cc9;\n --gitako-prettylights-syntax-comment: #9b9b9b;\n --gitako-prettylights-syntax-constant: #4f8cc9;\n --gitako-prettylights-syntax-entity: #73589a;\n --gitako-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --gitako-prettylights-syntax-entity-tag: #6cc644;\n --gitako-prettylights-syntax-keyword: #d82828;\n --gitako-prettylights-syntax-string: #9daccc;\n --gitako-prettylights-syntax-variable: #fb8532;\n --gitako-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --gitako-prettylights-syntax-invalid-illegal-text: #181818;\n --gitako-prettylights-syntax-invalid-illegal-bg: #d82828;\n --gitako-prettylights-syntax-carriage-return-text: #181818;\n --gitako-prettylights-syntax-carriage-return-bg: #d82828;\n --gitako-prettylights-syntax-string-regexp: #6cc644;\n --gitako-prettylights-syntax-markup-list: #bba257;\n --gitako-prettylights-syntax-markup-heading: #4f8cc9;\n --gitako-prettylights-syntax-markup-italic: #c6c6c6;\n --gitako-prettylights-syntax-markup-bold: #c6c6c6;\n --gitako-prettylights-syntax-markup-deleted-text: #d82828;\n --gitako-prettylights-syntax-markup-deleted-bg: #300;\n --gitako-prettylights-syntax-markup-inserted-text: #6cc644;\n --gitako-prettylights-syntax-markup-inserted-bg: #002800;\n --gitako-prettylights-syntax-markup-changed-text: #fb8532;\n --gitako-prettylights-syntax-markup-changed-bg: #730;\n --gitako-prettylights-syntax-markup-ignored-text: #202020;\n --gitako-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --gitako-prettylights-syntax-meta-diff-range: #73589a;\n --gitako-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --gitako-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --gitako-prettylights-syntax-constant-other-reference-link: #9daccc;\n --gitako-codemirror-text: #c6c6c6;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-guttermarker-subtle-text: #343434;\n --gitako-codemirror-linenumber-text: #767676;\n --gitako-codemirror-cursor: #c6c6c6;\n --gitako-codemirror-selection-bg: #246;\n --gitako-codemirror-activeline-bg: #181818;\n --gitako-codemirror-matchingbracket-text: #c6c6c6;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-codemirror-syntax-comment: #9b9b9b;\n --gitako-codemirror-syntax-constant: #4f8cc9;\n --gitako-codemirror-syntax-entity: #73589a;\n --gitako-codemirror-syntax-keyword: #d82828;\n --gitako-codemirror-syntax-storage: #d82828;\n --gitako-codemirror-syntax-string: #9daccc;\n --gitako-codemirror-syntax-support: #4f8cc9;\n --gitako-codemirror-syntax-variable: #fb8532;\n --gitako-ansi-black: #c6c6c6;\n --gitako-ansi-black-bright: #c6c6c6;\n --gitako-ansi-white: #343434;\n --gitako-ansi-white-bright: #343434;\n --gitako-ansi-gray: #767676;\n --gitako-ansi-red: #d82828;\n --gitako-ansi-red-bright: #d82828;\n --gitako-ansi-green: #040;\n --gitako-ansi-green-bright: #040;\n --gitako-ansi-yellow: #cb4;\n --gitako-ansi-yellow-bright: #651;\n --gitako-ansi-blue: #4f8cc9;\n --gitako-ansi-blue-bright: #246;\n --gitako-ansi-magenta: #53387a;\n --gitako-ansi-magenta-bright: #53387a;\n }\n body.gitako-ready .gitako-side-bar a,\n body.gitako-ready .gitako-toggle-show-button-wrapper .gitako-toggle-show-button {\n background-color: transparent;\n }\n body.gitako-ready .gitako-side-bar mark {\n color: #dcdcdc;\n }\n body.gitako-ready .gitako-side-bar body {\n color: #c6c6c6;\n background-color: #181818;\n }\n body.gitako-ready .gitako-side-bar a {\n color: #4f8cc9;\n }\n body.gitako-ready .gitako-side-bar .rule,\n body.gitako-ready .gitako-side-bar hr {\n background-color: transparent;\n border-bottom-color: #343434;\n }\n body.gitako-ready .gitako-side-bar kbd {\n color: #afafaf;\n background-color: #181818;\n border-color: #343434;\n box-shadow: inset 0 -1px 0 #343434;\n }\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .close-side-bar-button-position .close-side-bar-button {\n background-color: transparent;\n }\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-side-bar-content .file-explorer .search-input-wrapper .search-input {\n box-shadow: none;\n }\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-settings-bar .header-row .settings-button,\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-side-bar-content .file-explorer .node-item .find-in-folder-button,\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-side-bar-content .file-explorer .node-item .go-to-button {\n background-color: transparent;\n }\n /* end gitako rules */\n /* generated npmhub rules */\n /* begin notifications-preview rules */\n html:root .NPG-dropdown {\n color: rgb(210, 210, 210) !important;\n }\n html:root .participating .js-notifications-browser::before {\n background-color: #444;\n }\n html:root .mark-all-as-read-confirmed label {\n background-color: transparent;\n }\n html:root .NPG-dropdown .notifications-list-item:hover .notification-list-item-actions .btn {\n background-color: #343434 !important;\n }\n /* end notifications-preview rules */\n /* begin octotree rules */\n html.octotree-gh[data-octotree-theme] a[href^=\"https://apps.apple.com\"] svg {\n fill: #f0f0f0;\n }\n html.octotree-gh[data-octotree-theme].refined-github .repository-content #readme:not(.blob) .Box-header {\n background-color: transparent !important;\n }\n html.octotree-gh[data-octotree-theme].refined-github .js-issue-row [aria-label=\"Open draft pull request\"] svg {\n color: #fff !important;\n }\n html.octotree-gh[data-octotree-theme] .btn-danger.disabled,\n html.octotree-gh[data-octotree-theme] .btn-danger:disabled,\n html.octotree-gh[data-octotree-theme] .btn-danger[aria-disabled=true],\n html.octotree-gh[data-octotree-theme] .btn-invisible,\n html.octotree-gh[data-octotree-theme] .btn-outline.disabled,\n html.octotree-gh[data-octotree-theme] .btn-outline:disabled,\n html.octotree-gh[data-octotree-theme] .btn-outline[aria-disabled=true],\n html.octotree-gh[data-octotree-theme] .input-dark,\n html.octotree-gh[data-octotree-theme] .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme].refined-github .js-expandable-line:hover .blob-num:not(:hover) + .blob-code,\n html.octotree-gh[data-octotree-theme].refined-github .js-expandable-line:hover .blob-num:not(:hover) .directional-expander:first-child,\n html.octotree-gh[data-octotree-theme].refined-github .rgh-clean-conversation-headers-non-default-branch a {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] a {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme]:root {\n --color-scale-gray-4: #767676;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-auto-gray-4: #767676;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-icon-tertiary: #767676;\n --color-blankslate-icon: #767676;\n --color-label-orange-border: #fb8532;\n --color-branch-name-icon: #767676;\n --color-branch-name-link-icon: #767676;\n --color-markdown-table-tr-border: #767676;\n --color-menu-border-active: #181818;\n --color-sidenav-border-active: #181818;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border-active: #181818;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-global-nav-input-placeholder: #767676;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-syntax-variable: #fb8532;\n --ghd-code-color: #5a5a5a;\n --ghd-body-color: #5a5a5a;\n --color-ansi-blue-bright: #246;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-gray: #767676;\n --color-ansi-green-bright: #040;\n --color-ansi-green: #040;\n --color-ansi-magenta-bright: #53387a;\n --color-ansi-magenta: #53387a;\n --color-ansi-red-bright: #d82828;\n --color-ansi-red: #d82828;\n --color-ansi-white-bright: #343434;\n --color-ansi-white: #343434;\n --color-ansi-yellow-bright: #651;\n --color-ansi-yellow: #cb4;\n --color-border-tertiary: #afafaf;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-selected-text: #181818;\n --color-btn-outline-hover-text: #181818;\n --color-btn-primary-text: #181818;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #afafaf;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-warning-icon-text: #181818;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-open-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-selected-primary-text: #181818;\n --color-text-inverse: #181818;\n --color-text-white: #181818;\n }\n html.octotree-gh[data-octotree-theme] .rule,\n html.octotree-gh[data-octotree-theme] hr {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .btn-invisible,\n html.octotree-gh[data-octotree-theme] .btn-link {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .btn-invisible.selected,\n html.octotree-gh[data-octotree-theme] .btn-invisible.zeroclipboard-is-active,\n html.octotree-gh[data-octotree-theme] .btn-invisible.zeroclipboard-is-hover,\n html.octotree-gh[data-octotree-theme] .btn-invisible:active,\n html.octotree-gh[data-octotree-theme] .btn-invisible:focus,\n html.octotree-gh[data-octotree-theme] .btn-invisible:hover,\n html.octotree-gh[data-octotree-theme] .btn-invisible[aria-selected=true] {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .btn-invisible.disabled,\n html.octotree-gh[data-octotree-theme] .btn-invisible:disabled,\n html.octotree-gh[data-octotree-theme] .btn-invisible[aria-disabled=true] {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .btn-octicon,\n html.octotree-gh[data-octotree-theme] .close-button {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .filter-list.pjax-active .filter-item,\n html.octotree-gh[data-octotree-theme] .inline-form .btn-plain,\n html.octotree-gh[data-octotree-theme] .SideNav-item,\n html.octotree-gh[data-octotree-theme] .SideNav-subItem,\n html.octotree-gh[data-octotree-theme] .tabnav-tab,\n html.octotree-gh[data-octotree-theme] .UnderlineNav-item {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .UnderlineNav-item.selected,\n html.octotree-gh[data-octotree-theme] .UnderlineNav-item[aria-current]:not([aria-current=false]),\n html.octotree-gh[data-octotree-theme] .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: var(--ghd-bg-color);\n }\n html.octotree-gh[data-octotree-theme] .box-shadow-none {\n box-shadow: none !important;\n }\n html.octotree-gh[data-octotree-theme] .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] image-crop .handle::before {\n border-color: #767676;\n }\n html.octotree-gh[data-octotree-theme] body.intent-mouse [role=button]:focus,\n html.octotree-gh[data-octotree-theme] body.intent-mouse [role=tabpanel][tabindex=\"0\"]:focus,\n html.octotree-gh[data-octotree-theme] body.intent-mouse a:focus,\n html.octotree-gh[data-octotree-theme] body.intent-mouse button:focus,\n html.octotree-gh[data-octotree-theme] body.intent-mouse summary:focus {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .session-authentication .auth-form-header,\n html.octotree-gh[data-octotree-theme] .session-authentication.enterprise .header-logged-out,\n html.octotree-gh[data-octotree-theme] .session-authentication .header-logged-out,\n html.octotree-gh[data-octotree-theme] .session-authentication.hosted .header-logged-out {\n background-color: initial;\n }\n @media (min-width:1012px) {\n html.octotree-gh[data-octotree-theme] .page-responsive .HeaderMenu--logged-out {\n background-color: initial;\n box-shadow: none;\n }\n }\n html.octotree-gh[data-octotree-theme] .HeaderMenu-link,\n html.octotree-gh[data-octotree-theme] .page-responsive .HeaderMenu-link {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: none;\n }\n @media (min-width:1012px) {\n html.octotree-gh[data-octotree-theme] .page-responsive .HeaderMenu-link .icon-chevon-down-mktg {\n background-color: transparent;\n }\n }\n html.octotree-gh[data-octotree-theme] .header-search-input,\n html.octotree-gh[data-octotree-theme] .header-search-input:focus,\n html.octotree-gh[data-octotree-theme] .header-search-wrapper,\n html.octotree-gh[data-octotree-theme] .header-search-wrapper.focus {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .jump-to-suggestions-path mark {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .Label,\n html.octotree-gh[data-octotree-theme] .label {\n background-color: initial !important;\n }\n html.octotree-gh[data-octotree-theme] .markdown-body .emoji,\n html.octotree-gh[data-octotree-theme] .markdown-body table img {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .markdown-body pre > code {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .markdown-body pre code,\n html.octotree-gh[data-octotree-theme] .markdown-body pre tt,\n html.octotree-gh[data-octotree-theme] .SelectMenu-closeButton,\n html.octotree-gh[data-octotree-theme] .SelectMenu-tab,\n html.octotree-gh[data-octotree-theme] .Toast-dismissButton {\n background-color: initial;\n }\n @media (min-width:544px) {\n html.octotree-gh[data-octotree-theme] .SelectMenu-tab[aria-selected=true] {\n box-shadow: none;\n }\n }\n html.octotree-gh[data-octotree-theme] .select-menu-button::after {\n border-top-color: currentcolor;\n }\n html.octotree-gh[data-octotree-theme] .select-menu-header .close-button,\n html.octotree-gh[data-octotree-theme] .select-menu-header .octicon {\n color: var(--color-icon-tertiary, #767676);\n }\n html.octotree-gh[data-octotree-theme] .select-menu-text-filter input:-ms-input-placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n html.octotree-gh[data-octotree-theme] .select-menu-text-filter input::-ms-input-placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n html.octotree-gh[data-octotree-theme] .locked-conversation .preview-tab,\n html.octotree-gh[data-octotree-theme] .locked-conversation .write-tab,\n html.octotree-gh[data-octotree-theme] .table-of-contents .toc-diff-stats .octicon {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .select-menu-tabs .select-menu-tab-nav,\n html.octotree-gh[data-octotree-theme] .select-menu-tabs a {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .select-menu.label-select-menu .select-menu-item:active {\n background-color: initial !important;\n }\n html.octotree-gh[data-octotree-theme] .Box--overlay {\n box-shadow: 0 0 18px #f0f0f0;\n }\n html.octotree-gh[data-octotree-theme] .comment-body .highlight {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .full-commit .sha-block > a {\n border-bottom-color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .branches-tag-list li .ellipsis-expander:hover {\n background-color: #afafaf;\n }\n html.octotree-gh[data-octotree-theme] .signed-commit-badge:hover {\n border-color: #767676;\n }\n @media (min-width:1012px) {\n html.octotree-gh[data-octotree-theme] .page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting {\n background-color: transparent;\n }\n }\n html.octotree-gh[data-octotree-theme] .previewable-comment-form .comment-body {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .notifications-component-dialog:not([hidden]) + .notifications-component-dialog-overlay {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .reponav-wrapper .reponav-item.selected {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .steps li {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .max--md .content-attachment-content--gradient {\n background: linear-gradient(180deg, transparent, #181818 calc(100% - 28px));\n }\n html.octotree-gh[data-octotree-theme] .subtasks-add {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .integrations-install-target .flash,\n html.octotree-gh[data-octotree-theme] .integrations-install-target .flash-error {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .credit-card.normal .signature,\n html.octotree-gh[data-octotree-theme] .link-small {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .blame-commit[data-heat=\"1\"] {\n border-right-color: #fb8532;\n }\n html.octotree-gh[data-octotree-theme] .heat[data-heat=\"1\"] {\n background-color: #fb8532;\n }\n html.octotree-gh[data-octotree-theme] .branch-a-b-count .meter {\n background-color: var(--color-auto-gray-3, #767676);\n }\n html.octotree-gh[data-octotree-theme] .branch-a-b-count .meter.zero {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .CheckStep-header-dropdown-menu {\n box-shadow: 0 8px 24px #000 !important;\n }\n html.octotree-gh[data-octotree-theme] .CheckRun-search .btn {\n background-color: rgba(220, 220, 220, .125);\n background-image: none;\n }\n html.octotree-gh[data-octotree-theme] .CheckRun-search .btn[disabled] {\n background-image: none;\n }\n html.octotree-gh[data-octotree-theme] .CheckRun-header .btn-link:hover:not([disabled]),\n html.octotree-gh[data-octotree-theme] .CheckRun-header .btn.btn-link:hover:not([disabled]) .octicon,\n html.octotree-gh[data-octotree-theme] .CheckRun-search-input {\n background-color: rgba(220, 220, 220, .125);\n }\n html.octotree-gh[data-octotree-theme] [data-color-mode=dark] .CheckRun-header-counter {\n background-color: initial;\n }\n @media (prefers-color-scheme:dark) {\n html.octotree-gh[data-octotree-theme] [data-color-mode=auto] .CheckRun-header-counter {\n background-color: initial;\n }\n }\n html.octotree-gh[data-octotree-theme] .search-form-fluid .search-page-input {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .community-checklist .progress-bar,\n html.octotree-gh[data-octotree-theme] .emoji-picker-tab .btn-outline:not(:hover) {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .dashboards-overview-cards .blankslate,\n html.octotree-gh[data-octotree-theme] .search-form-fluid .search-page-input:focus,\n html.octotree-gh[data-octotree-theme] :target .discussion-nested-comment-group .timeline-comment,\n html.octotree-gh[data-octotree-theme] :target .nested-discussion-timeline-comment {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .topic-input-container .tag-input .tag-input-inner {\n background-image: none;\n }\n html.octotree-gh[data-octotree-theme] .team-discussions .previewable-comment-form .toolbar-commenting.toolbar-commenting.toolbar-commenting {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .team-discussion-new-post .review-thread-reply-button:disabled {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .team-project-suggestion-number {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .hook-deliveries-list .hook-delivery-item:hover {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .integrations-select-repos::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .task-progress .octicon {\n color: var(--color-icon-tertiary, #767676);\n }\n html.octotree-gh[data-octotree-theme] .label-select-menu .selected:active,\n html.octotree-gh[data-octotree-theme] .label-select-menu [aria-checked=mixed]:active,\n html.octotree-gh[data-octotree-theme] .label-select-menu [aria-checked=true]:active {\n background-color: initial !important;\n }\n html.octotree-gh[data-octotree-theme] .repository-lang-stats ol.repository-lang-stats-numbers li a:hover {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .MarketplaceEdit-body .CircleIcon {\n background-color: #afafaf;\n }\n html.octotree-gh[data-octotree-theme] .MarketplaceAnnouncement .btn-outline-mktg {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .merge-branch-manually {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .notifications-v2 .thread-subscription-status {\n background-color: initial !important;\n }\n html.octotree-gh[data-octotree-theme] .oauth-permissions-details.open a.btn-sm {\n background-image: none;\n }\n html.octotree-gh[data-octotree-theme] .reinstate-org-member .reinstate-title .octicon {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .progress-pjax-loader {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .avatar-upload .flash,\n html.octotree-gh[data-octotree-theme] .user-profile-nav {\n box-shadow: none;\n }\n @media (min-width:544px) {\n html.octotree-gh[data-octotree-theme] .project-full-screen .card-filter-input {\n background-color: rgba(220, 220, 220, .125);\n box-shadow: none;\n }\n }\n html.octotree-gh[data-octotree-theme] .application-show-group .drag-and-drop,\n html.octotree-gh[data-octotree-theme] .saved-reply-form .comment-body,\n html.octotree-gh[data-octotree-theme] .timeout {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .session-device .session-icon,\n html.octotree-gh[data-octotree-theme] .two-factor-recovery-code-mark {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .qr-code-table tr {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .hx_badge-search-container .hx_badge-input,\n html.octotree-gh[data-octotree-theme] .hx_flex-avatar-stack-item .avatar,\n html.octotree-gh[data-octotree-theme] .tag-input input:focus,\n html.octotree-gh[data-octotree-theme] .team-label-ldap,\n html.octotree-gh[data-octotree-theme] .tree-finder-input,\n html.octotree-gh[data-octotree-theme] .tree-finder-input:focus {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .repository-merge-features .form-group.errored .error {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .setup-header h1 .octicon {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .intro-shelf {\n background-image: linear-gradient(180deg, transparent 60%, var(--color-bg-primary)), linear-gradient(70deg, var(--color-bg-info) 32%, var(--color-bg-success));\n }\n html.octotree-gh[data-octotree-theme] .tag-input input {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .actions-workflow-navigation .row-section {\n background-color: transparent !important;\n }\n html.octotree-gh[data-octotree-theme] .actions-workflow-navigation .row-parent {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .actions-workflow-navigation .row-parent:hover {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .ActionsApprovalOverlay-environment .AvatarStack-body {\n background-color: transparent !important;\n }\n html.octotree-gh[data-octotree-theme] .AvatarStack-body:not(:hover),\n html.octotree-gh[data-octotree-theme] .Header-button:active,\n html.octotree-gh[data-octotree-theme] .Header-button:focus,\n html.octotree-gh[data-octotree-theme] .Header-button:hover,\n html.octotree-gh[data-octotree-theme] [data-color-mode-unset=true] .promo-color-modes {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .hx_badge-search-container .hx_badge-input:focus {\n box-shadow: none !important;\n }\n html.octotree-gh[data-octotree-theme] .Box--responsive .Box-row--unread,\n html.octotree-gh[data-octotree-theme] .Header-button:active .octicon,\n html.octotree-gh[data-octotree-theme] .Header-button:focus .octicon,\n html.octotree-gh[data-octotree-theme] .Header-button:hover .octicon,\n html.octotree-gh[data-octotree-theme] .notification-list-item-actions .btn {\n box-shadow: none;\n }\n @media (prefers-color-scheme:light) {\n html.octotree-gh[data-octotree-theme] [data-color-mode=auto] {\n --color-scale-gray-4: #767676;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-auto-gray-4: #767676;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-icon-tertiary: #767676;\n --color-blankslate-icon: #767676;\n --color-label-orange-border: #fb8532;\n --color-branch-name-icon: #767676;\n --color-branch-name-link-icon: #767676;\n --color-markdown-table-tr-border: #767676;\n --color-menu-border-active: #181818;\n --color-sidenav-border-active: #181818;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border-active: #181818;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-global-nav-input-placeholder: #767676;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-gray: #767676;\n }\n }\n html.octotree-gh[data-octotree-theme] .hx_breadcrumb-header .feature-preview-indicator,\n html.octotree-gh[data-octotree-theme] .hx_breadcrumb-header .notification-indicator .mail-status {\n background-image: none;\n }\n html.octotree-gh[data-octotree-theme] .hx_button-transparent {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .autocomplete-item {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .select-menu-item:hover .Label {\n border-color: currentcolor;\n }\n html.octotree-gh[data-octotree-theme] .pagehead-tabs-item.selected,\n html.octotree-gh[data-octotree-theme] .reponav-item.selected {\n border-top-color: var(--ghd-bg-color);\n }\n html.octotree-gh[data-octotree-theme] .btn-mktg {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .btn-outline-mktg,\n html.octotree-gh[data-octotree-theme] .btn-outline-mktg:hover {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .btn-transparent {\n color: #fff;\n background-color: initial;\n background-image: none;\n }\n html.octotree-gh[data-octotree-theme] .btn-transparent:active,\n html.octotree-gh[data-octotree-theme] .btn-transparent:hover {\n background-image: none;\n }\n html.octotree-gh[data-octotree-theme] .btn-black-mktg-fluid,\n html.octotree-gh[data-octotree-theme] .btn-green-mktg-fluid,\n html.octotree-gh[data-octotree-theme] .btn-lg-mktg-fluid,\n html.octotree-gh[data-octotree-theme] .btn-mktg-fluid,\n html.octotree-gh[data-octotree-theme] .btn-purple-mktg-fluid,\n html.octotree-gh[data-octotree-theme] .btn-white-outline-mktg-fluid,\n html.octotree-gh[data-octotree-theme] .btn-white-outline-mktg-fluid.hover,\n html.octotree-gh[data-octotree-theme] .btn-white-outline-mktg-fluid.selected,\n html.octotree-gh[data-octotree-theme] .btn-white-outline-mktg-fluid:active,\n html.octotree-gh[data-octotree-theme] .btn-white-outline-mktg-fluid:hover,\n html.octotree-gh[data-octotree-theme] .btn-white-outline-mktg-fluid[aria-selected=true],\n html.octotree-gh[data-octotree-theme] [open] > .btn-white-outline-mktg-fluid {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .btn-invisible-mktg-fluid.focus,\n html.octotree-gh[data-octotree-theme] .btn-invisible-mktg-fluid:focus,\n html.octotree-gh[data-octotree-theme] .btn-lg-invisible-mktg-fluid.focus,\n html.octotree-gh[data-octotree-theme] .btn-lg-invisible-mktg-fluid:focus {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .btn-invisible-mktg-fluid.text-underline,\n html.octotree-gh[data-octotree-theme] .btn-lg-invisible-mktg-fluid.text-underline {\n background-color: initial !important;\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .customer-story-overlay {\n background-image: linear-gradient(180deg, #f0f0f0 -5%, transparent 50%);\n }\n html.octotree-gh[data-octotree-theme] .bg-orange {\n background-color: #fb8532 !important;\n }\n html.octotree-gh[data-octotree-theme] .text-gray-light-ultra {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .underline-dashed {\n background-image: linear-gradient(90deg, #343434 50%, transparent 0);\n }\n html.octotree-gh[data-octotree-theme] .link-white-mktg {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .particle-circle-orange,\n html.octotree-gh[data-octotree-theme] .particle-circle-orange-2 {\n background-color: #fb8532;\n }\n html.octotree-gh[data-octotree-theme] .subnav-btn {\n background-color: transparent;\n }\n @media (min-width:768px) {\n html.octotree-gh[data-octotree-theme] .subnav-btn {\n color: #fff;\n }\n }\n html.octotree-gh[data-octotree-theme] .subnav-btn:hover {\n background-color: transparent;\n }\n @media (min-width:768px) {\n html.octotree-gh[data-octotree-theme] .subnav-btn:hover {\n color: #fff;\n }\n }\n html.octotree-gh[data-octotree-theme] .fade-img-to-white-bg::before {\n background: linear-gradient(180deg, #181818 0, transparent);\n }\n html.octotree-gh[data-octotree-theme] .fade-img-to-white-bg::after {\n background: linear-gradient(0deg, #181818 0, transparent);\n }\n html.octotree-gh[data-octotree-theme] .pricing-plan-tab {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .pricing-matrix-row-button,\n html.octotree-gh[data-octotree-theme] .pricing-testimonial-logo {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .codespaces-subtitle {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .section-codespaces-develop-night .codespaces-develop-header {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .section-codespaces-develop-night .codespaces-develop-text {\n color: hsla(0, 0%, 0%, .2) !important;\n }\n html.octotree-gh[data-octotree-theme] .section-codespaces-develop-night .codespaces-sun {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .jumbotron-link {\n border-bottom-color: rgba(220, 220, 220, .125);\n }\n html.octotree-gh[data-octotree-theme] .home-hero-signup .form-control-note .notice-highlight {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .customer-story-card {\n box-shadow: 0 2px 4px #f0f0f0;\n }\n html.octotree-gh[data-octotree-theme] .card-mktg {\n box-shadow: 0 1px 15px #f0f0f0, 0 0 1px rgba(106, 115, 125, .35);\n }\n html.octotree-gh[data-octotree-theme] .border-orange {\n border-color: #fb8532 !important;\n }\n html.octotree-gh[data-octotree-theme] .actions-event-token,\n html.octotree-gh[data-octotree-theme] .actions-template-repo {\n color: #767676;\n }\n html.octotree-gh[data-octotree-theme] .insights-hero-text::after {\n background-image: linear-gradient(rgba(0, 0, 0, .85), transparent);\n }\n @media (min-width:1012px) {\n html.octotree-gh[data-octotree-theme] .insights-hero-text {\n background-color: initial;\n }\n }\n html.octotree-gh[data-octotree-theme] .header-white .Header-old .HeaderMenu-link.border,\n html.octotree-gh[data-octotree-theme] .header-white .Header-old a.border,\n html.octotree-gh[data-octotree-theme] .header-white .header-search-wrapper .text-white,\n html.octotree-gh[data-octotree-theme] .header-white .Header .HeaderMenu-link.border,\n html.octotree-gh[data-octotree-theme] .header-white .Header a.border {\n color: #fff !important;\n }\n html.octotree-gh[data-octotree-theme] .features-btn-clear-bg,\n html.octotree-gh[data-octotree-theme] .features-btn-clear-bg::before {\n background-image: none !important;\n }\n html.octotree-gh[data-octotree-theme] .features-category--dark .features--color-title {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .features-category--apps-illo1-inner2 {\n background: linear-gradient(167.44deg, rgba(0, 0, 0, .7) 38.78%, transparent 125.06%);\n }\n html.octotree-gh[data-octotree-theme] .readme-project #js-flash-container .flash,\n html.octotree-gh[data-octotree-theme] .readme-project #js-flash-container .octicon,\n html.octotree-gh[data-octotree-theme] .readme-underline--blue,\n html.octotree-gh[data-octotree-theme] .readme-underline--blue:focus,\n html.octotree-gh[data-octotree-theme] .readme-underline--blue:hover,\n html.octotree-gh[data-octotree-theme] .readme-underline--green,\n html.octotree-gh[data-octotree-theme] .readme-underline--green:focus,\n html.octotree-gh[data-octotree-theme] .readme-underline--green:hover {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .gpr-cli-tab {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .readme-underline--blue span {\n background-image: linear-gradient(180deg, transparent 98.5%, #4f80f9 0);\n }\n html.octotree-gh[data-octotree-theme] .readme-underline--green span {\n background-image: linear-gradient(180deg, transparent 98.5%, #6ddb90 0);\n }\n html.octotree-gh[data-octotree-theme] .readme-project .Header,\n html.octotree-gh[data-octotree-theme] .readme-project .Header-old {\n background-color: initial !important;\n background-image: linear-gradient(0deg, transparent, rgba(0, 0, 0, .7)) !important;\n }\n html.octotree-gh[data-octotree-theme] .readme-btn-outline {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] .readme-project-content--editorial h3,\n html.octotree-gh[data-octotree-theme] .readme-project-content--editorial strong,\n html.octotree-gh[data-octotree-theme] .readme-social-link:focus,\n html.octotree-gh[data-octotree-theme] .readme-social-link:hover {\n color: #fff !important;\n }\n html.octotree-gh[data-octotree-theme] [name=user-content-code-link]::after {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .readme-input,\n html.octotree-gh[data-octotree-theme] .readme-textarea {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .mobile-particle-circle-orange,\n html.octotree-gh[data-octotree-theme] .mobile-particle-square-orange {\n background-color: #fb8532;\n }\n @media (min-width:544px) {\n html.octotree-gh[data-octotree-theme] .summarylink:active .summarylink-btn,\n html.octotree-gh[data-octotree-theme] .summarylink:hover .summarylink-btn {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n }\n html.octotree-gh[data-octotree-theme] .communitystats .summary-circle.bg-orange {\n background-color: #fb8532 !important;\n }\n @media (min-width:768px) {\n html.octotree-gh[data-octotree-theme] .DeveloperVideo-data {\n background-image: linear-gradient(transparent, rgba(27, 31, 35, .95));\n }\n }\n html.octotree-gh[data-octotree-theme] .signup-prompt-bg {\n background-image: linear-gradient(180deg, transparent 50%, #181818), linear-gradient(70deg, #182030 32%, #f6fff8);\n }\n html.octotree-gh[data-octotree-theme] .SegmentedNav .subnav-item.selected {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .header-overlay .Header,\n html.octotree-gh[data-octotree-theme] .header-overlay .header-logged-out {\n background-color: initial;\n }\n html.octotree-gh[data-octotree-theme] .choose-team-lp .hero-form .tooltipped {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .choose-team-lp .customer-quote {\n box-shadow: 0 4px 12px #f0f0f0;\n }\n html.octotree-gh[data-octotree-theme] ::selection {\n color: #fff !important;\n }\n html.octotree-gh[data-octotree-theme] ::-moz-selection {\n color: #fff !important;\n }\n html.octotree-gh[data-octotree-theme] ::-webkit-input-placeholder {\n color: #9b9b9b !important;\n }\n html.octotree-gh[data-octotree-theme] ::-moz-placeholder {\n color: #9b9b9b !important;\n }\n html.octotree-gh[data-octotree-theme] ::placeholder {\n color: #9b9b9b !important;\n }\n html.octotree-gh[data-octotree-theme] .select-menu-text-filter input::-webkit-input-placeholder {\n color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .select-menu-text-filter input::-moz-placeholder {\n color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .select-menu-text-filter input::placeholder {\n color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] ::-webkit-calendar-picker-indicator:hover {\n color: #9b9b9b;\n }\n html.octotree-gh[data-octotree-theme] input[type=checkbox],\n html.octotree-gh[data-octotree-theme] input[type=checkbox]:disabled,\n html.octotree-gh[data-octotree-theme] input[type=checkbox]:focus,\n html.octotree-gh[data-octotree-theme] input[type=checkbox]:hover:active,\n html.octotree-gh[data-octotree-theme] input[type=checkbox]:hover:active:disabled,\n html.octotree-gh[data-octotree-theme] input[type=checkbox]:hover:disabled,\n html.octotree-gh[data-octotree-theme] input[type=radio],\n html.octotree-gh[data-octotree-theme] input[type=radio]:focus,\n html.octotree-gh[data-octotree-theme] input[type=radio]:hover:active {\n border-color: #afafaf;\n color: #2c2c2c;\n }\n html.octotree-gh[data-octotree-theme] input[type=checkbox]:disabled,\n html.octotree-gh[data-octotree-theme] input[type=checkbox]:hover:active:disabled,\n html.octotree-gh[data-octotree-theme] input[type=checkbox]:hover:disabled,\n html.octotree-gh[data-octotree-theme] input[type=radio]:disabled {\n color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .Label--gray-darker {\n border-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .CircleBadge--github::after {\n background-color: #181818;\n }\n html.octotree-gh[data-octotree-theme] input.tree-finder-input,\n html.octotree-gh[data-octotree-theme] input.tree-finder-input:focus {\n box-shadow: none !important;\n }\n html.octotree-gh[data-octotree-theme] .dropdown-menu,\n html.octotree-gh[data-octotree-theme] .select-menu-modal,\n html.octotree-gh[data-octotree-theme] .word-upload-callout {\n box-shadow: 0 3px 12px #000;\n }\n html.octotree-gh[data-octotree-theme] .exploregrid-item:hover {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n html.octotree-gh[data-octotree-theme] .box-shadow-large,\n html.octotree-gh[data-octotree-theme] html[class*=ghh-] .tooltipster-box {\n box-shadow: 0 1px 15px #f0f0f0 !important;\n }\n html.octotree-gh[data-octotree-theme] img[src*=\"images/modules/checks\"].box-shadow-large {\n box-shadow: 0 1px 15px var(--ghd-bg-color) !important;\n }\n html.octotree-gh[data-octotree-theme] .js-current .standalone a,\n html.octotree-gh[data-octotree-theme] .section-nav .active a,\n html.octotree-gh[data-octotree-theme] .sidebar-module .disable > a {\n border-left-color: #2c2c2c !important;\n }\n html.octotree-gh[data-octotree-theme] .dropdown-arrow {\n border-top-color: #2c2c2c !important;\n }\n html.octotree-gh[data-octotree-theme] #com #header .top-nav .dropdown-caret {\n border-top-color: #5a5a5a !important;\n }\n @media screen and (min-width:1024px) {\n html.octotree-gh[data-octotree-theme] .site-subnav .subnav-primary.selected,\n html.octotree-gh[data-octotree-theme] .site-subnav .subnav-primary:hover {\n border-bottom-color: #2c2c2c !important;\n }\n }\n html.octotree-gh[data-octotree-theme] .filter-item.selected .Label--outline-white {\n border-color: var(--ghd-bg-color);\n }\n html.octotree-gh[data-octotree-theme] .filter-tab.selected {\n border-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .branch-action-state-closed-dirty .branch-action-icon,\n html.octotree-gh[data-octotree-theme] .branch-action-state-dirty .branch-action-icon,\n html.octotree-gh[data-octotree-theme] .is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-icon,\n html.octotree-gh[data-octotree-theme] .State[title*=drafti] {\n background-color: #afafaf;\n }\n html.octotree-gh[data-octotree-theme] #org-members .member-listing,\n html.octotree-gh[data-octotree-theme] .listings div.listing {\n border-left-color: #c6c6c6 !important;\n border-right-color: #c6c6c6 !important;\n }\n html.octotree-gh[data-octotree-theme] .MarketplaceSideNav,\n html.octotree-gh[data-octotree-theme] .plans-card-text:first-child {\n border-right-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .repo-filterer .repo-filter:hover,\n html.octotree-gh[data-octotree-theme] .review-summary::before {\n border-bottom-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .context-button:hover::after,\n html.octotree-gh[data-octotree-theme] .switcher > span::before {\n border-color: #2c2c2c transparent transparent !important;\n }\n html.octotree-gh[data-octotree-theme] .branches .branch-summary + .branch-summary {\n border-top-color: #c6c6c6 !important;\n }\n html.octotree-gh[data-octotree-theme] .linkable-line-number {\n border-right-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] div.container-lg > div.float-left.px-md-2 > .border.rounded-1.d-none.d-md-block {\n border-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .repository-content > .bg-white:not(.card-filter-autocomplete-dropdown),\n html.octotree-gh[data-octotree-theme] button.bg-white.subnav-link,\n html.octotree-gh[data-octotree-theme] main [style=\"background-color: #fcfdfd;\"] {\n background-color: transparent !important;\n }\n html.octotree-gh[data-octotree-theme] .action-card::after,\n html.octotree-gh[data-octotree-theme] .action-card::before {\n box-shadow: 0 0 0 1px #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .search-result-group {\n color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .shelf {\n background-image: none !important;\n }\n html.octotree-gh[data-octotree-theme] body[class=page-responsive] .repo-list .private {\n background-color: initial;\n }\n @media (hover:hover) {\n html.octotree-gh[data-octotree-theme] .SelectMenu-item[aria-checked=true]:active,\n html.octotree-gh[data-octotree-theme] .SelectMenu-item[aria-checked=true]:hover,\n html.octotree-gh[data-octotree-theme] body:not(.intent-mouse) .SelectMenu-item[aria-checked=true]:focus {\n color: #343434;\n }\n }\n @media (hover:none) {\n html.octotree-gh[data-octotree-theme] .SelectMenu-item:active,\n html.octotree-gh[data-octotree-theme] .SelectMenu-item:focus {\n color: #fff;\n }\n }\n html.octotree-gh[data-octotree-theme] .contrib-legend .legend li {\n box-shadow: none !important;\n }\n html.octotree-gh[data-octotree-theme] .calendar-graph .days-selected rect.day.active {\n stroke: #343434 !important;\n }\n html.octotree-gh[data-octotree-theme] .calendar-graph rect.day:hover {\n stroke: #181818 !important;\n }\n html.octotree-gh[data-octotree-theme] img[src*=\"//render.githubusercontent.com/render/math\"] {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .box-title-count {\n background-color: #afafaf !important;\n color: #5a5a5a !important;\n }\n html.octotree-gh[data-octotree-theme] body > .container > p {\n color: #5a5a5a;\n }\n html.octotree-gh[data-octotree-theme] .btn-primary.disabled,\n html.octotree-gh[data-octotree-theme] .btn-primary:disabled,\n html.octotree-gh[data-octotree-theme] .btn-primary[aria-disabled=true],\n html.octotree-gh[data-octotree-theme] .btn.disabled,\n html.octotree-gh[data-octotree-theme] .btn:disabled,\n html.octotree-gh[data-octotree-theme] .btn[aria-disabled=true] {\n color: hsla(0, 0%, 0%, .3);\n }\n html.octotree-gh[data-octotree-theme] :not(img) text,\n html.octotree-gh[data-octotree-theme] circle.day {\n fill: #5a5a5a !important;\n }\n html.octotree-gh[data-octotree-theme] circle.day:hover {\n fill: #181818 !important;\n }\n html.octotree-gh[data-octotree-theme] .traffic-graph g.axis:not(.views):not(.unique) g.tick:not(:nth-child(15)):not(:first-of-type) line,\n html.octotree-gh[data-octotree-theme] g.axis path,\n html.octotree-gh[data-octotree-theme] line.axis,\n html.octotree-gh[data-octotree-theme] svg:not(.vis) g.axis line {\n stroke: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] svg.tick {\n fill: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .community-checklist .progress-bar .progress {\n background-color: #c6c6c6;\n }\n html.octotree-gh[data-octotree-theme] .labels .label-neutral,\n html.octotree-gh[data-octotree-theme] li.ssh-key .ssh-key-state-indicator.not-recent {\n background-color: #9b9b9b !important;\n }\n html.octotree-gh[data-octotree-theme] .Counter--gray {\n background-color: #767676;\n color: #f0f0f0;\n }\n html.octotree-gh[data-octotree-theme] .diverge-widget .separator {\n background-color: #5a5a5a !important;\n }\n html.octotree-gh[data-octotree-theme] .menu-item.selected::before {\n background-color: #2c2c2c !important;\n }\n html.octotree-gh[data-octotree-theme] #network canvas,\n html.octotree-gh[data-octotree-theme] .qr-code-table,\n html.octotree-gh[data-octotree-theme] .qr-code-table .white {\n background-color: #181818 !important;\n }\n html.octotree-gh[data-octotree-theme] .btn-outline-mktg,\n html.octotree-gh[data-octotree-theme] .btn-outline-mktg:hover {\n background-color: transparent;\n }\n html.octotree-gh[data-octotree-theme] .MarketplaceAnnouncement .btn-outline-mktg {\n border-color: #2c2c2c;\n color: #2c2c2c;\n }\n html.octotree-gh[data-octotree-theme] .MarketplaceAnnouncement .btn-outline-mktg:hover {\n color: #fff;\n border-color: var(--ghd-bg-color);\n }\n html.octotree-gh[data-octotree-theme] .MarketplaceAnnouncement {\n color: #fff;\n }\n html.octotree-gh[data-octotree-theme] .repo-file-upload-tree-target {\n background: radial-gradient(ellipse at center, #f0f0f0 0, rgba(0, 0, 0, .6) 65%, rgba(0, 0, 0, .6) 100%) !important;\n }\n html.octotree-gh[data-octotree-theme] .TimelineItem-break {\n background: linear-gradient(to bottom, rgba(25, 25, 25, .8) 1%, transparent 80%) !important;\n }\n html.octotree-gh[data-octotree-theme] .box-action:active,\n html.octotree-gh[data-octotree-theme] .clone-url-button.selected > .clone-url-link:hover,\n html.octotree-gh[data-octotree-theme] .hero .screenographic,\n html.octotree-gh[data-octotree-theme] .hero .textographic,\n html.octotree-gh[data-octotree-theme] .signup-button:hover,\n html.octotree-gh[data-octotree-theme] a.signin:hover,\n html.octotree-gh[data-octotree-theme] ul#bootcamp li a:hover h4 {\n border-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] main [style=\"background: linear-gradient(to top, rgba(255,255,255,1), rgba(255,255,255,0));\"] {\n background: linear-gradient(to top, #181818, transparent) !important;\n }\n html.octotree-gh[data-octotree-theme] [style*=\"background: #DBEDFF\"] {\n background-color: hsla(0, 0%, 0%, .1) !important;\n }\n html.octotree-gh[data-octotree-theme] .ScreenshotCarousel-navitem.selected {\n box-shadow: inset 0 0 10px hsla(0, 0%, 0%, .05) !important;\n }\n html.octotree-gh[data-octotree-theme] .commits-list-item .committer-avatar {\n box-shadow: -2px -2px 0 #000 !important;\n }\n html.octotree-gh[data-octotree-theme] .box-shadow,\n html.octotree-gh[data-octotree-theme] .Header .header-search-wrapper.focus {\n box-shadow: none !important;\n }\n html.octotree-gh[data-octotree-theme] .btn,\n html.octotree-gh[data-octotree-theme] .btn-blue:active,\n html.octotree-gh[data-octotree-theme] .btn-outline.disabled,\n html.octotree-gh[data-octotree-theme] .btn-outline:disabled,\n html.octotree-gh[data-octotree-theme] .btn-outline[aria-disabled=true],\n html.octotree-gh[data-octotree-theme] .btn:active,\n html.octotree-gh[data-octotree-theme] .social-count,\n html.octotree-gh[data-octotree-theme] .upload-progress {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] #inbox .list .item .title span,\n html.octotree-gh[data-octotree-theme] .metabox .editable-text:hover,\n html.octotree-gh[data-octotree-theme] .Subhead.border-bottom-0,\n html.octotree-gh[data-octotree-theme] [href=\"#organizations\"][style*=\"background-color: #fff\"] {\n background-color: transparent !important;\n }\n html.octotree-gh[data-octotree-theme] .btn-danger.disabled,\n html.octotree-gh[data-octotree-theme] .btn-danger:disabled,\n html.octotree-gh[data-octotree-theme] .btn-danger[aria-disabled=true] {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] [style*=\"border: 1px solid #f9b3dd\"] .text-gray-dark {\n color: #c6c6c6 !important;\n }\n html.octotree-gh[data-octotree-theme] #feedHeaderContainer,\n html.octotree-gh[data-octotree-theme] #issues_search .results em,\n html.octotree-gh[data-octotree-theme] #message.minor,\n html.octotree-gh[data-octotree-theme] #message .sent,\n html.octotree-gh[data-octotree-theme] #missing-readme,\n html.octotree-gh[data-octotree-theme] .blob-code .bg-yellow-light,\n html.octotree-gh[data-octotree-theme] .bootcamp-help ul li,\n html.octotree-gh[data-octotree-theme] .branch-status.status-pending .discussion-item-icon,\n html.octotree-gh[data-octotree-theme] .btn-download,\n html.octotree-gh[data-octotree-theme] .callout,\n html.octotree-gh[data-octotree-theme] .chzn-results li em,\n html.octotree-gh[data-octotree-theme] .code-list-item-private .blob-num,\n html.octotree-gh[data-octotree-theme] .code-list em,\n html.octotree-gh[data-octotree-theme] .codesearch-results #code_search_results .bg-yellow-light,\n html.octotree-gh[data-octotree-theme] .commits-list-item em,\n html.octotree-gh[data-octotree-theme] .compare-cutoff,\n html.octotree-gh[data-octotree-theme] .compare-pr-placeholder,\n html.octotree-gh[data-octotree-theme] .deprecation-warning,\n html.octotree-gh[data-octotree-theme] .diff-cutoff,\n html.octotree-gh[data-octotree-theme] .discussion-event-status-renamed .discussion-item-icon,\n html.octotree-gh[data-octotree-theme] .discussion-item-review.is-pending .comment-form-head.tabnav,\n html.octotree-gh[data-octotree-theme] .discussion-item-review.is-pending .file-header,\n html.octotree-gh[data-octotree-theme] .discussion-topic .branch-status.status-pending,\n html.octotree-gh[data-octotree-theme] .ejector,\n html.octotree-gh[data-octotree-theme] .facebox-alert,\n html.octotree-gh[data-octotree-theme] .feature-tabs .tab-button,\n html.octotree-gh[data-octotree-theme] .feedBackground,\n html.octotree-gh[data-octotree-theme] .form-actions .tip,\n html.octotree-gh[data-octotree-theme] .infotip,\n html.octotree-gh[data-octotree-theme] .issue-list em,\n html.octotree-gh[data-octotree-theme] .label-private,\n html.octotree-gh[data-octotree-theme] .Label.bg-yellow,\n html.octotree-gh[data-octotree-theme] .markdown-body li.added.moved,\n html.octotree-gh[data-octotree-theme] .mini-callout,\n html.octotree-gh[data-octotree-theme] .notification,\n html.octotree-gh[data-octotree-theme] .page-notice,\n html.octotree-gh[data-octotree-theme] .plan.free,\n html.octotree-gh[data-octotree-theme] .prereceive-feedback,\n html.octotree-gh[data-octotree-theme] .repo-owner-tag .tag,\n html.octotree-gh[data-octotree-theme] .repo-private-label,\n html.octotree-gh[data-octotree-theme] .signed-out-comment,\n html.octotree-gh[data-octotree-theme] .snippet em,\n html.octotree-gh[data-octotree-theme] .timeline-comment.unread-item .timeline-comment-header,\n html.octotree-gh[data-octotree-theme] .unsupported-browser,\n html.octotree-gh[data-octotree-theme] .user-list em,\n html.octotree-gh[data-octotree-theme] .wiki-list em {\n color: #343434 !important;\n }\n html.octotree-gh[data-octotree-theme] .release-label.prerelease,\n html.octotree-gh[data-octotree-theme] .release .Label--prerelease {\n border-color: #fb8532 !important;\n }\n html.octotree-gh[data-octotree-theme] .avatar-bubble::before,\n html.octotree-gh[data-octotree-theme] .discussion-bubble-content::before {\n border-color: transparent #c6c6c6 transparent transparent !important;\n }\n html.octotree-gh[data-octotree-theme] .form-select:disabled {\n color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .coupons .coupon-form-body {\n background-image: none;\n }\n html.octotree-gh[data-octotree-theme] .js-details-container.navigation-focus .gobutton {\n background: linear-gradient(#afafaf, #222) !important;\n }\n html.octotree-gh[data-octotree-theme] .api pre,\n html.octotree-gh[data-octotree-theme] .branch-infobar,\n html.octotree-gh[data-octotree-theme] .coupon-icon,\n html.octotree-gh[data-octotree-theme] .issues-list,\n html.octotree-gh[data-octotree-theme] .pagehead.repohead h1 .repo-label span,\n html.octotree-gh[data-octotree-theme] .pulls-list-group {\n border-color: #afafaf;\n }\n html.octotree-gh[data-octotree-theme] .branch-link,\n html.octotree-gh[data-octotree-theme] .milestone-list .progress-bar,\n html.octotree-gh[data-octotree-theme] .pull-info {\n border-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .more-repos {\n border-top-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] .capped-box,\n html.octotree-gh[data-octotree-theme] .pull-head {\n border-bottom-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] #user-content-toc td,\n html.octotree-gh[data-octotree-theme] .copyable-terminal,\n html.octotree-gh[data-octotree-theme] .markdown-body .highlight pre,\n html.octotree-gh[data-octotree-theme] .markdown-body code,\n html.octotree-gh[data-octotree-theme] .markdown-body pre,\n html.octotree-gh[data-octotree-theme] .markdown-body tt,\n html.octotree-gh[data-octotree-theme] .markdown-format .highlight pre,\n html.octotree-gh[data-octotree-theme] .markdown-format p > code,\n html.octotree-gh[data-octotree-theme] .markdown-format pre,\n html.octotree-gh[data-octotree-theme] .project-card .highlight pre,\n html.octotree-gh[data-octotree-theme] .project-card code,\n html.octotree-gh[data-octotree-theme] .rgh-parse-backticks {\n border-color: hsla(0, 0%, 0%, .1) !important;\n }\n html.octotree-gh[data-octotree-theme] .diff-line-pre {\n color: #5a5a5a !important;\n }\n html.octotree-gh[data-octotree-theme] .diff-table .line-comments {\n border-top-color: #c6c6c6 !important;\n border-bottom-color: #c6c6c6 !important;\n }\n html.octotree-gh[data-octotree-theme] #header-wrapper,\n html.octotree-gh[data-octotree-theme] .menu li + li {\n border-bottom-color: #c6c6c6 !important;\n }\n html.octotree-gh[data-octotree-theme] .diff-table > tbody > tr[data-hunk]:hover > td.selected-line::after,\n html.octotree-gh[data-octotree-theme] .highlight > tbody > tr:hover > td.blob-code-inner.highlighted::after {\n background-color: hsla(0, 0%, 0%, .15) !important;\n }\n html.octotree-gh[data-octotree-theme] .blob-code-addition .x,\n html.octotree-gh[data-octotree-theme] .blob-code-deletion .x,\n html.octotree-gh[data-octotree-theme] .highlight .blob-code-addition .x,\n html.octotree-gh[data-octotree-theme] .highlight .blob-code-deletion .x {\n color: #2c2c2c !important;\n }\n html.octotree-gh[data-octotree-theme] .CheckRun-header-counter,\n html.octotree-gh[data-octotree-theme] .CheckRun-header .btn-link:hover:not([disabled]),\n html.octotree-gh[data-octotree-theme] .CheckRun-header .btn-link:not([disabled]),\n html.octotree-gh[data-octotree-theme] .CheckRun-header .btn-link:not([disabled]) .octicon,\n html.octotree-gh[data-octotree-theme] .CheckRun-header .btn.btn-link:hover:not([disabled]) .octicon,\n html.octotree-gh[data-octotree-theme] .CheckRun-header .btn.btn-link:not([disabled]) .octicon,\n html.octotree-gh[data-octotree-theme] .CheckRun-search-icon,\n html.octotree-gh[data-octotree-theme] .CheckStep-header-label,\n html.octotree-gh[data-octotree-theme] .CheckStep-line:hover,\n html.octotree-gh[data-octotree-theme] .CheckStep .log-download-error,\n html.octotree-gh[data-octotree-theme] .CheckStep .log-line-error-next .CheckStep-line-content,\n html.octotree-gh[data-octotree-theme] .CheckStep .log-line-error .CheckStep-line-content,\n html.octotree-gh[data-octotree-theme] .CheckStep[open] .CheckStep-header,\n html.octotree-gh[data-octotree-theme] .CheckStep[open] .CheckStep-header-label {\n color: #5a5a5a !important;\n }\n html.octotree-gh[data-octotree-theme] .CheckStep-header {\n box-shadow: none !important;\n }\n html.octotree-gh[data-octotree-theme] .CheckRun-header .CheckRun-search-input {\n color: #2c2c2c;\n }\n html.octotree-gh[data-octotree-theme] .CheckRun-header-counter {\n background-color: #c6c6c6;\n }\n html.octotree-gh[data-octotree-theme] .project-card code {\n background-color: #c6c6c6 !important;\n }\n html.octotree-gh[data-octotree-theme] .refined-github .reaction-summary-item a {\n box-shadow: none;\n }\n html.octotree-gh[data-octotree-theme] body.zh_logged_in .zh-login-status {\n border-color: #afafaf !important;\n }\n html.octotree-gh[data-octotree-theme] body.zh_logged_in .zhc-workspace-switcher__header {\n box-shadow: none !important;\n }\n html.octotree-gh[data-octotree-theme] .notifications-dropdown-arrow {\n border-bottom-color: #c6c6c6 !important;\n }\n html.octotree-gh[data-octotree-theme=cobalt]:root,\n html.octotree-gh[data-octotree-theme=idle-fingers]:root {\n --ghd-code-color: #181818 !important;\n }\n html.octotree-gh[data-octotree-theme=monokai-spacegray-eighties]:root {\n --ghd-code-color: #1d1d1d !important;\n }\n html.octotree-gh[data-octotree-theme=terminal]:root {\n --ghd-code-background: #f0f0f0 !important;\n }\n html.octotree-gh[data-octotree-theme=tomorrow-night-blue]:root {\n --ghd-code-color: #181818 !important;\n }\n html.octotree-gh[data-octotree-theme=tomorrow-night-eighties]:root {\n --ghd-code-background: #f0f0f0 !important;\n --ghd-code-color: #5a5a5a !important;\n }\n html.octotree-gh[data-octotree-theme=twilight]:root {\n --ghd-code-color: #5a5a5a !important;\n }\n html.octotree-gh[data-octotree-theme=vibrant-ink]:root {\n --ghd-code-color: #181818 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]):root {\n --ghd-code-color: #5a5a5a;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) a[href^=\"https://apps.apple.com\"] svg {\n fill: #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .repository-content #readme:not(.blob) .Box-header {\n background-color: transparent !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .js-issue-row [aria-label=\"Open draft pull request\"] svg {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches .Header .RecentBranches,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches [data-url$=recently_touched_branches_list] .Box {\n border-color: currentcolor !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches .Header .RecentBranches-item-link,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches [data-url$=recently_touched_branches_list] .btn-link,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches [data-url$=recently_touched_branches_list] .link-gray-dark {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .js-expandable-line:hover .blob-num:not(:hover) + .blob-code,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .js-expandable-line:hover .blob-num:not(:hover) .directional-expander:first-child,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-clean-conversation-headers-non-default-branch a {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) a {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .rule,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) hr {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn[aria-selected=true] {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn[aria-disabled=true] {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary {\n color: #fff;\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary[aria-disabled=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-danger {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-danger {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-outline {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-outline {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-blue {\n background-image: none;\n box-shadow: inset 0 .15em .3em #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue[aria-disabled=true] {\n background-image: none;\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-link {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible {\n background-color: initial;\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible.zeroclipboard-is-active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible.zeroclipboard-is-hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible[aria-selected=true] {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon.disabled:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon[aria-disabled=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon[aria-disabled=true]:hover {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .close-button {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .ellipsis-expander:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hidden-text-expander a:active {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-control,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-select {\n box-shadow: none !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-control[disabled],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-select[disabled] {\n color: #767676 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .input-dark {\n color: #fff;\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .inline-form .btn-plain {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .previewable-comment-form .comment {\n border-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) p.explain .octicon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item.selected::before,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item[aria-current]:not([aria-current=false])::before,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item[aria-selected=true]::before {\n background-color: #181818;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item .octicon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tabnav-tab {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tabnav-tab .octicon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-list.pjax-active .filter-item {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item[aria-current]:not([aria-current=false]),\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-list.pjax-active .filter-item.pjax-active {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SideNav-item {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SideNav-item[aria-current]:not([aria-current=false])::before,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SideNav-item[aria-selected=true]::before {\n background-color: #181818;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SideNav-subItem {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-item.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-item[aria-current]:not([aria-current=false]),\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-item[aria-selected=true] {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-search-icon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-item {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-item.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-item[aria-current]:not([aria-current=false]),\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: var(--ghd-bg-color);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-octicon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagination .current,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagination .current:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagination [aria-current]:not([aria-current=false]),\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tooltipped::after {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-shadow-none {\n box-shadow: none !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .color-gray-4 {\n color: #767676 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bg-gray-5 {\n background-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .color-orange-4,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .color-orange-6 {\n color: #fb8532 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bg-orange-4,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bg-orange-6 {\n background-color: #fb8532 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .text-orange-light {\n color: #fb8532 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .text-white {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n @keyframes blink {\n 50% {\n background-color: initial;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse [role=button]:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse [role=tabpanel][tabindex=\"0\"]:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse a:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse button:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse summary:focus {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-group:hover .form-field-hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .placeholder-box {\n border-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .auth-form-header,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .auth-form-header h1 a {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .session-authentication .auth-form-header,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .session-authentication.enterprise .header-logged-out,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .session-authentication .header-logged-out,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .session-authentication.hosted .header-logged-out {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px #f0f0f0, 0 0 1px rgba(220, 220, 220, .2);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu--logged-out {\n box-shadow: 0 10px 50px #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: none;\n }\n @media (min-width:1012px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu--logged-out {\n background-color: initial;\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px #f0f0f0, 0 0 1px rgba(220, 220, 220, .2);\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu-link {\n background-color: transparent;\n }\n @media (min-width:1012px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu-link,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu-link:hover {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu-link .icon-chevon-down-mktg {\n background-color: transparent;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .HeaderMenu-link {\n color: #fff;\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .feature-preview-indicator,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-logo-invertocat,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-logo-invertocat:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .HeaderMenu-link:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notification-indicator .mail-status {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-global-search .clear-button {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-form-control {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-global-search .global-search-form-control,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .state-asleep .global-search-form-control {\n background-color: rgba(220, 220, 220, .125);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-global-search-input {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-global-search .header-global-search-input,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:focus .global-search-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:focus .jump-to-anchor,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:focus .qualifier-description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:hover .global-search-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:hover .jump-to-anchor,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:hover .qualifier-description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option[aria-selected=true] .global-search-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option[aria-selected=true] .jump-to-anchor,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option[aria-selected=true] .qualifier-description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-scope:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-wrapper.focus .header-search-scope,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .state-asleep .header-global-search-input {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-wrapper {\n color: #fff;\n background-color: rgba(220, 220, 220, .125);\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-input,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-input:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-wrapper.focus {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-path mark {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container .navigation-focus .jump-to-octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container .navigation-focus .jump-to-suggestions-path,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container .navigation-focus mark,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container [aria-selected=true] .jump-to-octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container [aria-selected=true] .jump-to-suggestions-path,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container [aria-selected=true] mark {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-wrapper {\n color: #fff;\n background-color: rgba(220, 220, 220, .125);\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-wrapper:focus-within {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-wrapper:focus-within .header-search-scope {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-input,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-input:focus {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-scope:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container .navigation-focus .jump-to-octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container .navigation-focus mark,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container [aria-selected=true] .jump-to-octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container [aria-selected=true] mark,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .site-search-close-button .site-search-close-x {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-path mark {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item.navigation-focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container .navigation-focus .jump-to-suggestions-path,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container [aria-selected=true] .jump-to-suggestions-path,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li.navigation-focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li.navigation-focus small,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li:hover small,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li[aria-selected=true] small {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blankslate-icon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-item:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-item:hover {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-menu-dark {\n color: #fff;\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Label,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label {\n background-color: initial !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .State,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .state {\n color: #fff;\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Counter--gray {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body .emoji,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body table img {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body pre > code {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body pre code,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body pre tt {\n background-color: initial;\n }\n @media (min-width:544px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-modal {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-closeButton {\n color: #767676;\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-tab {\n background-color: initial;\n }\n @media (min-width:544px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-tab[aria-selected=true] {\n box-shadow: none;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .TimelineItem--condensed .TimelineItem-badge {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Toast-icon {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Toast-dismissButton {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Toast-dismissButton:active {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .boxed-group .Counter,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .boxed-group.dangerzone > h3 {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .reverse-progress-container {\n background-image: linear-gradient(90deg, #484, #4f8cc9, #9378ba, #d82828, #fb8532);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-button::after {\n border-color: currentcolor transparent transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input:-ms-input-placeholder {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input::-ms-input-placeholder {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-tabs .select-menu-tab-nav,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-tabs a {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true] .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true] .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true] .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true] > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus > .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover .description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover .description-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover .select-menu-item-heading-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover > .octicon {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu.label-select-menu .select-menu-item:active {\n background-color: initial !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Box--overlay {\n box-shadow: 0 0 18px #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .comment-body .highlight {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .email-format .email-hidden-toggle a:active {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branches-tag-list li .ellipsis-expander:hover {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signed-commit-header .octicon-unverified {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .diffstat,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .octicon-diff-added,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .octicon-diff-modified,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .octicon-diff-removed,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .octicon-diff-renamed,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .select-menu-item-heading,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .select-menu-item-text,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .text-gray-light,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .text-green,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .text-red,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .diffstat,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .octicon-diff-added,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .octicon-diff-modified,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .octicon-diff-removed,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .octicon-diff-renamed,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .select-menu-item-heading,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .select-menu-item-text,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .text-gray-light,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .text-green,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .text-red,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .diffstat,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .octicon-diff-added,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .octicon-diff-modified,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .octicon-diff-removed,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .octicon-diff-renamed,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .select-menu-item-heading,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .select-menu-item-text,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .text-gray-light,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .text-green,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .text-red,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .diffstat,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .octicon-diff-added,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .octicon-diff-modified,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .octicon-diff-removed,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .octicon-diff-renamed,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .select-menu-item-heading,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .select-menu-item-text,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .text-gray-light,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .text-green,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .text-red {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-num-expandable .diff-expander:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-num-expandable .directional-expander:hover {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .add-line-comment {\n color: #fff;\n box-shadow: 0 1px 4px #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-sidebar-item .muted-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-sidebar-toggle .octicon {\n color: #767676;\n }\n @media (min-width:1012px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting {\n background-color: transparent;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .previewable-comment-form .comment-body {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .footer-octicon:hover {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagehead-tabs-item.selected {\n border-color: #fb8532 #343434 transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .reponav-wrapper .reponav-item.selected {\n color: #fff;\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .max--md .content-attachment-content--gradient {\n background: linear-gradient(180deg, transparent, #181818 calc(100% - 28px));\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple {\n color: #fff;\n background-color: #4550c2;\n background-image: linear-gradient(-180deg, #4550c2, #4550c2 90%);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-blurple {\n background-image: none;\n box-shadow: inset 0 .15em .3em #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple[aria-disabled=true] {\n background-image: none;\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .integrations-breadcrumb-link:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgr-admin-link.draft-tag .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgr-admin-link.draft-tag:hover .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgr-feat-header .intgr-admin-link:hover .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgr-feat-header h2,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgrs-dir-intro .directory-header-back,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgrs-dir-intro .directory-tag-line {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .integrations-install-target .flash,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .integrations-install-target .flash-error {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .link-small {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .alert-label,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .billing-plans .coupon td {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .credit-card.normal .signature {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-choice--experiment.open,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-choice--experiment.selected {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-choice--experiment.open .plan-choice-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-choice--experiment.selected .plan-choice-icon {\n box-shadow: 0 1px 0 #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-action-icon {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-action-state-closed-dirty .branch-action-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-action-state-dirty .branch-action-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-icon {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .completeness-indicator-error,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .completeness-indicator-success {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .completeness-indicator-problem {\n color: #fff;\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-a-b-count .count-half:last-child {\n border-left-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-a-b-count .meter.zero {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .checks-list-item.selected .selected-color-white {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep-header,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .neutral-check {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep-header-dropdown-menu-next {\n box-shadow: 0 8px 24px hsla(0, 0%, 0%, .7) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search .btn {\n color: #fff;\n background-color: rgba(220, 220, 220, .125);\n background-image: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search .btn[disabled] {\n background-image: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-header-next .btn-link:hover:not([disabled]),\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-header-next .btn.btn-link:hover:not([disabled]) .octicon {\n background-color: rgba(220, 220, 220, .125);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-header-timestamp {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search-input:-ms-input-placeholder {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search-input::-ms-input-placeholder {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search-input::placeholder {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-header-counter,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep-line .CheckStep-line-timestamp {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep-line .dt-fm.select {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .ansifg-gr,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .log-line-info,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .log-line-info a,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .log-line-verbose,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .log-line-verbose a {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .search-form-fluid .search-page-input,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .search-form-fluid .search-page-input:focus {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) g.mini {\n fill: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CommunityTemplate-highlight--focus {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .community-checklist .progress-bar {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .contrib-legend .legend li {\n box-shadow: inset 0 0 0 1px #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .contrib-person path {\n fill: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dashboard-notice .dismiss {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dashboards-overview-cards .blankslate,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) :target .discussion-nested-comment-group .timeline-comment,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) :target .nested-discussion-timeline-comment {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .icon-discussion-white {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussions-activity-indicator {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .emoji-tab[role=tab][aria-selected=true] {\n border-bottom-color: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .emoji-picker-tab .btn-outline:not(:hover) {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .newsletter-frequency-choice:hover h3 {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .newsletter-frequency-choice.selected {\n box-shadow: 0 0 5px hsla(0, 0%, 0%, .7);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .ghpi-bootstrap-complete-step,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .newsletter-frequency-choice.selected h3,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .topic-tag-action .add-topic-button:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .topic-tag-action .remove-topic-button:hover {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .topic-input-container .tag-input .tag-input-inner {\n background-image: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-discussion-new-post .review-thread-reply-button:disabled {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-project-suggestion-number {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hook-deliveries-list .hook-delivery-item:hover {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hook-delivery-container h4.remote-call-header {\n border-bottom-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hook-delivery-response-status {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .integrations-select-repos::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .issues-reset-query-icon {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label-select-menu .selected:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label-select-menu [aria-checked=mixed]:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label-select-menu [aria-checked=true]:active {\n background-color: initial !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .issue-keyword {\n border-bottom-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repository-lang-stats ol.repository-lang-stats-numbers li a:hover {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .map-point:hover {\n fill: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceFeature-link:hover .CircleBadge--feature {\n box-shadow: 0 3px 8px 0 hsla(0, 0%, 0%, .7);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item.selected .Label--gray,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .selected .marketplace-plan-emphasis {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceEdit-body .CircleIcon {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .BarChart-bar--orange {\n background-color: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .muted-link.filter-item.selected {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceAnnouncement .btn-outline-mktg {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .merge-branch-manually {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .navigation-focus.disabled .unavailable-merge-method,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [aria-selected=true].disabled .unavailable-merge-method {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .news .alert .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .news .alert .time,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .news .alert .title .subtle,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-new-repo .octicon-repo {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notifications-list .mark-all-as-read {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notifications-v2 .thread-subscription-status {\n background-color: initial !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notifications-list-item:hover .notification-list-item-actions .btn {\n background-color: transparent !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .oauth-permissions-details.open a.btn-sm {\n background-image: none;\n box-shadow: inset 0 2px 4px #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-card-legend .metric-2 {\n color: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-graph-canvas .metric-2 circle,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-graph-canvas path.metric-2,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-svg-tip .metric-2 .legend {\n stroke: #fb8532;\n background-color: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-cards .org-insights-card-legend {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .saml-settings-form .test-status-indicator-error,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .saml-settings-form .test-status-indicator-success {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-member-list .invite-icon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger.navigation-focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger.selected.navigation-focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger.selected:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger.selected[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger[aria-selected=true] {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-member-list-avatar .octicon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .progress-pjax-loader {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-full-screen .project-header .project-header-link:hover {\n color: #fff !important;\n }\n @media (min-width:544px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-full-screen .card-filter-input {\n color: #fff;\n background-color: rgba(220, 220, 220, .125);\n box-shadow: none;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .new-project-column {\n border-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-pane .redacted-activity {\n border-bottom-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-filter-autocomplete-dropdown .navigation-focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-filter-autocomplete-dropdown .navigation-focus .autocomplete-text-qualifier,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-filter-autocomplete-dropdown [aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-filter-autocomplete-dropdown [aria-selected=true] .autocomplete-text-qualifier {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .projects-reset-query-icon {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-profile-nav {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toolbar-shadow {\n background: linear-gradient(rgba(0, 0, 0, .075), transparent) repeat-x;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diffbar [role^=menuitem]:focus:not(.is-range-selected) .text-emphasized,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diffbar [role^=menuitem]:hover:not(.is-range-selected) .text-emphasized {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .uploaded-files.not-populated + .drop-target .drop-target-label {\n border-top-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .timeout {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .avatar-upload .flash {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .application-show-group .drag-and-drop,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .saved-reply-form .comment-body {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .two-factor-toggle .two-factor-on {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .qr-code-table tr {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-already-added::after {\n color: #fff;\n }\n @keyframes toggle-color {\n 0%, to {\n background-color: initial;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repository-merge-features .form-group.errored .error {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repository-settings-actions [role=tab][aria-selected=true] {\n border-bottom-color: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .shelf-dismiss {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intro-shelf {\n background-image: linear-gradient(180deg, transparent 60%, #181818), linear-gradient(70deg, #182030 32%, #ebfff0);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signup-plan-card:hover {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-category-tab[aria-selected=true] {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-category-tab[aria-selected=true] .tab-title {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .showcase-page-pattern::after {\n background-image: linear-gradient(180deg, hsla(0, 0%, 0%, .85), #181818);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .sponsors-goal-completed-bar,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .sponsors-goal-progress-bar:hover {\n background: linear-gradient(90deg, #cb4, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tag-input input,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tag-input input:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-label-ldap {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .token-scanning-reset-query-icon {\n background-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .svg-tip .date {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tree-finder-input,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tree-finder-input:focus {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .already-member-note,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .member-email,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .member-name,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .non-member-action,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .non-member-note,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .already-member-note,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .member-email,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .member-name,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .non-member-action,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .non-member-note,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .already-member-note,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .member-email,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .member-name,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .non-member-action,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .non-member-note,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-suggestion.navigation-focus .team-description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-suggestion.navigation-focus .team-size,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-suggestion[aria-selected=true] .team-description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-suggestion[aria-selected=true] .team-size,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result.navigation-focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result.navigation-focus .octicon-plus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result:hover .octicon-plus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result[aria-selected=true] .octicon-plus {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .email-suggestion .octicon-mail {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .follow-list .flagged-banner,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-access-add-team.navigation-focus .team-description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-access-add-team.navigation-focus .team-size,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-access-add-team[aria-selected=true] .team-description,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-access-add-team[aria-selected=true] .team-size,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-org-button.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-org-button.selected .user-status-org-detail,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-org-button:focus .user-status-org-detail,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-org-button:hover .user-status-org-detail {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-circle-badge {\n box-shadow: 0 1px 0 #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hx_badge-search-container .hx_badge-input {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hx_badge-search-container .hx_badge-input:focus {\n box-shadow: none !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hx_badge[aria-pressed=true] {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item[aria-disabled=true] {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Box--responsive .Box-row--unread {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Box--responsive .Box-row--unread::before {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .radio-label .octicon {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .Label {\n border-color: currentcolor;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notification-list-item-actions .btn {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagehead-tabs-item.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .reponav-item.selected {\n border-top-color: var(--ghd-bg-color);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-mktg {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline-mktg,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline-mktg:hover {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-transparent {\n color: #fff;\n background-color: initial;\n background-image: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-transparent:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-transparent:hover {\n background-image: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-black-mktg-fluid,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-green-mktg-fluid,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-lg-mktg-fluid,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-mktg-fluid,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-purple-mktg-fluid,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid.hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid[aria-selected=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-white-outline-mktg-fluid {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible-mktg-fluid.focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible-mktg-fluid.text-underline,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible-mktg-fluid:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-lg-invisible-mktg-fluid.focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-lg-invisible-mktg-fluid.text-underline,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-lg-invisible-mktg-fluid:focus {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .customer-story-overlay {\n background-image: linear-gradient(180deg, #f0f0f0 -5%, transparent 50%);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bg-orange {\n background-color: #fb8532 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .text-gray-light-ultra {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .underline-dashed {\n background-image: linear-gradient(90deg, #404040 50%, transparent 0);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .link-white-mktg {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .particle-circle-orange,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .particle-circle-orange-2 {\n background-color: #fb8532;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-btn {\n background-color: transparent;\n }\n @media (min-width:768px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-btn {\n color: #fff;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-btn:hover {\n background-color: transparent;\n }\n @media (min-width:768px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-btn:hover {\n color: #fff;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .fade-img-to-white-bg::before {\n background: linear-gradient(180deg, #181818 0, transparent);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .fade-img-to-white-bg::after {\n background: linear-gradient(0deg, #181818 0, transparent);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pricing-plan-tab {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pricing-matrix-row-button,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pricing-testimonial-logo {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .codespaces-subtitle {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .section-codespaces-develop-night .codespaces-develop-header {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .section-codespaces-develop-night .codespaces-develop-text {\n color: hsla(0, 0%, 0%, .2) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .section-codespaces-develop-night .codespaces-sun {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .jumbotron-link {\n border-bottom-color: rgba(220, 220, 220, .125);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .home-hero-signup .form-control-note .notice-highlight {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .customer-story-card {\n box-shadow: 0 2px 4px #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-mktg {\n box-shadow: 0 1px 15px #f0f0f0, 0 0 1px rgba(106, 115, 125, .35);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .border-orange {\n border-color: #fb8532 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .actions-event-token,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .actions-template-repo {\n color: #767676;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .insights-hero-text::after {\n background-image: linear-gradient(hsla(0, 0%, 0%, .85), transparent);\n }\n @media (min-width:1012px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .insights-hero-text {\n background-color: initial;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .Header-old .HeaderMenu-link.border,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .Header-old a.border,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .header-search-wrapper .text-white,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .Header .HeaderMenu-link.border,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .Header a.border {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .features-btn-clear-bg,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .features-btn-clear-bg::before {\n background-image: none !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .features-category--dark .features--color-title {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .features-category--apps-illo1-inner2 {\n background: linear-gradient(167.44deg, hsla(0, 0%, 0%, .7) 38.78%, transparent 125.06%);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-project #js-flash-container .flash,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-project #js-flash-container .octicon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--blue,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--blue:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--blue:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--green,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--green:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--green:hover {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gpr-cli-tab {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--blue span {\n background-image: linear-gradient(180deg, transparent 98.5%, #3e74f9 0);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--green span {\n background-image: linear-gradient(180deg, transparent 98.5%, #6ddb90 0);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-project .Header,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-project .Header-old {\n background-color: initial !important;\n background-image: linear-gradient(0deg, transparent, rgba(0, 0, 0, .7)) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-btn-outline {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-social-link:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-social-link:hover {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [name=user-content-code-link]::after {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-input,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-textarea {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .phone-background {\n box-shadow: 0 2px 30px #f0f0f0, inset 30px 0 20px 20px rgba(0, 0, 0, .01);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .mobile-particle-circle-orange,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .mobile-particle-square-orange {\n background-color: #fb8532;\n }\n @media (min-width:544px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .summarylink:active .summarylink-btn,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .summarylink:hover .summarylink-btn {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .apps-cluster .CircleBadge.tooltipped:hover {\n box-shadow: 0 3px 8px 0 hsla(0, 0%, 0%, .7);\n }\n @media (min-width:768px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .DeveloperVideo-data {\n background-image: linear-gradient(transparent, rgba(27, 31, 35, .95));\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signup-prompt-bg {\n background-image: linear-gradient(180deg, transparent 50%, #181818), linear-gradient(70deg, #182030 32%, #f6fff8);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-overlay .header-logged-in,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-overlay .header-logged-out {\n background-color: initial;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .choose-team-lp .hero-form .tooltipped {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .choose-team-lp .customer-quote {\n box-shadow: 0 4px 12px #f0f0f0;\n }\n @keyframes autofill {\n to {\n background-image: none;\n color: #343434;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::selection {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::-moz-selection {\n color: #fff !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::-webkit-input-placeholder {\n color: #9b9b9b !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::-moz-placeholder {\n color: #9b9b9b !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::placeholder {\n color: #9b9b9b !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input::-webkit-input-placeholder {\n color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input::-moz-placeholder {\n color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input::placeholder {\n color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::-webkit-calendar-picker-indicator:hover {\n color: #9b9b9b;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:active:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=radio],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=radio]:focus,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=radio]:hover:active {\n border-color: #afafaf;\n color: #2c2c2c;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:active:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=radio]:disabled {\n color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CircleBadge--github::after {\n background-color: #181818;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input.tree-finder-input,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) input.tree-finder-input:focus {\n box-shadow: none !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-menu,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-modal,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .word-upload-callout {\n box-shadow: 0 3px 12px #000;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .exploregrid-item:hover {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-shadow-large,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) html[class*=ghh-] .tooltipster-box {\n box-shadow: 0 1px 15px #f0f0f0 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) img[src*=\"images/modules/checks\"].box-shadow-large {\n box-shadow: 0 1px 15px var(--ghd-bg-color) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .js-current .standalone a,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .section-nav .active a,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .sidebar-module .disable > a {\n border-left-color: #2c2c2c !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-arrow {\n border-top-color: #2c2c2c !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #com #header .top-nav .dropdown-caret {\n border-top-color: #5a5a5a !important;\n }\n @media screen and (min-width:1024px) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .site-subnav .subnav-primary.selected,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .site-subnav .subnav-primary:hover {\n border-bottom-color: #2c2c2c !important;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item.selected .Label--outline-white {\n border-color: var(--ghd-bg-color);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-tab.selected {\n border-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #org-members .member-listing,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .listings div.listing {\n border-left-color: #c6c6c6 !important;\n border-right-color: #c6c6c6 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-action-body::before,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceSideNav,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plans-card-text:first-child {\n border-right-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-filterer .repo-filter:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .review-summary::before {\n border-bottom-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .context-button:hover::after,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .switcher > span::before {\n border-color: #2c2c2c transparent transparent !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branches .branch-summary + .branch-summary {\n border-top-color: #c6c6c6 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .linkable-line-number {\n border-right-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) div.container-lg > div.float-left.px-md-2 > .border.rounded-1.d-none.d-md-block {\n border-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repository-content > .bg-white:not(.card-filter-autocomplete-dropdown),\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) button.bg-white.subnav-link,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) main [style=\"background-color: #fcfdfd;\"] {\n background-color: transparent !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .action-card::after,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .action-card::before {\n box-shadow: 0 0 0 1px #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-quicksearch-result-group,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .search-result-group {\n color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .shelf {\n background-image: none !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body[class=page-responsive] .repo-list .private {\n background-color: initial;\n }\n @media (hover:hover) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item[aria-checked=true]:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item[aria-checked=true]:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body:not(.intent-mouse) .SelectMenu-item[aria-checked=true]:focus {\n color: #343434;\n }\n }\n @media (hover:none) {\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item:focus {\n color: #fff;\n }\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .calendar-graph .days-selected rect.day.active {\n stroke: #343434 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .calendar-graph rect.day:hover {\n stroke: #181818 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-title-count {\n background-color: #afafaf !important;\n color: #5a5a5a !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body > .container > p {\n color: #5a5a5a;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary[aria-disabled=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn[aria-disabled=true] {\n color: hsla(0, 0%, 0%, .3);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) :not(img) text,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) circle.day {\n fill: #5a5a5a !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) circle.day:hover {\n fill: #181818 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .traffic-graph g.axis:not(.views):not(.unique) g.tick:not(:nth-child(15)):not(:first-of-type) line,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) g.axis path,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) line.axis,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) svg:not(.vis) g.axis line {\n stroke: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) svg.tick {\n fill: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .community-checklist .progress-bar .progress {\n background-color: #c6c6c6;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .labels .label-neutral,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) li.ssh-key .ssh-key-state-indicator.not-recent {\n background-color: #9b9b9b !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Counter--gray {\n background-color: #767676;\n color: #f0f0f0;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diverge-widget .separator {\n background-color: #5a5a5a !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item.selected::before {\n background-color: #2c2c2c !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #network canvas,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .qr-code-table,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .qr-code-table .white {\n background-color: #181818 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline-mktg,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline-mktg:hover {\n background-color: transparent;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceAnnouncement .btn-outline-mktg {\n border-color: #2c2c2c;\n color: #2c2c2c;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceAnnouncement .btn-outline-mktg:hover {\n color: #fff;\n border-color: var(--ghd-bg-color);\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceAnnouncement {\n color: #fff;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-file-upload-tree-target {\n background: radial-gradient(ellipse at center, #f0f0f0 0, rgba(0, 0, 0, .6) 65%, rgba(0, 0, 0, .6) 100%) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .TimelineItem-break {\n background: linear-gradient(to bottom, rgba(25, 25, 25, .8) 1%, transparent 80%) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-action:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .clone-url-button.selected > .clone-url-link:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hero .screenographic,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hero .textographic,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signup-button:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) a.signin:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) ul#bootcamp li a:hover h4 {\n border-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) main [style=\"background: linear-gradient(to top, rgba(255,255,255,1), rgba(255,255,255,0));\"] {\n background: linear-gradient(to top, #181818, transparent) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [style*=\"background: #DBEDFF\"] {\n background-color: hsla(0, 0%, 0%, .1) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .ScreenshotCarousel-navitem.selected {\n box-shadow: inset 0 0 10px hsla(0, 0%, 0%, .05) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .commits-list-item .committer-avatar {\n box-shadow: -2px -2px 0 #000 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-shadow,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Header .header-search-wrapper.focus {\n box-shadow: none !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline[aria-disabled=true],\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn:active,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .social-count,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .upload-progress {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #inbox .list .item .title span,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .metabox .editable-text:hover,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Subhead.border-bottom-0,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [href=\"#organizations\"][style*=\"background-color: #fff\"] {\n background-color: transparent !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger.disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger:disabled,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger[aria-disabled=true] {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) [style*=\"border: 1px solid #f9b3dd\"] .text-gray-dark {\n color: #c6c6c6 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #feedHeaderContainer,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #issues_search .results em,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #message.minor,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #message .sent,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #missing-readme,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-code .bg-yellow-light,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bootcamp-help ul li,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-status.status-pending .discussion-item-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-download,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .callout,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .chzn-results li em,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .code-list-item-private .blob-num,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .code-list em,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .codesearch-results #code_search_results .bg-yellow-light,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .commits-list-item em,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .compare-cutoff,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .compare-pr-placeholder,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .deprecation-warning,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diff-cutoff,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-event-status-renamed .discussion-item-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-item-review.is-pending .comment-form-head.tabnav,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-item-review.is-pending .file-header,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-topic .branch-status.status-pending,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .ejector,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .facebox-alert,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .feature-tabs .tab-button,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .feedBackground,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-actions .tip,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-owner-tag .tag,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-secret-label,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .infotip,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .issue-list em,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label-private,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Label.bg-yellow,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body li.added.moved,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .mini-callout,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notification,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-notice,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan.free,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .prereceive-feedback,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-owner-tag .tag,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-private-label,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signed-out-comment,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .snippet em,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .timeline-comment.unread-item .timeline-comment-header,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .unsupported-browser,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-list em,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .wiki-list em {\n color: #343434 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .release-label.prerelease,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .release .Label--prerelease {\n border-color: #fb8532 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .avatar-bubble::before,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-bubble-content::before {\n border-color: transparent #c6c6c6 transparent transparent !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-select:disabled {\n color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .coupons .coupon-form-body {\n background-image: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .js-details-container.navigation-focus .gobutton {\n background: linear-gradient(#afafaf, #222) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .api pre,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-infobar,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .coupon-icon,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .issues-list,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagehead.repohead h1 .repo-label span,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pulls-list-group {\n border-color: #afafaf;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-link,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .milestone-list .progress-bar,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pull-info {\n border-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .more-repos {\n border-top-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .capped-box,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pull-head {\n border-bottom-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #user-content-toc td,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .copyable-terminal,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body .highlight pre,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body code,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body pre,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body tt,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-format .highlight pre,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-format p > code,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-format pre,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-card .highlight pre,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-card code,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .rgh-parse-backticks {\n border-color: hsla(0, 0%, 0%, .1) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diff-line-pre {\n color: #5a5a5a !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diff-table .line-comments {\n border-top-color: #c6c6c6 !important;\n border-bottom-color: #c6c6c6 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) #header-wrapper,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu li + li {\n border-bottom-color: #c6c6c6 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diff-table > tbody > tr[data-hunk]:hover > td.selected-line::after,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .highlight > tbody > tr:hover > td.blob-code-inner.highlighted::after {\n background-color: hsla(0, 0%, 0%, .15) !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-code-addition .x,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-code-deletion .x,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .highlight .blob-code-addition .x,\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .highlight .blob-code-deletion .x {\n color: #2c2c2c !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-card code {\n background-color: #c6c6c6 !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .refined-github .reaction-summary-item a {\n box-shadow: none;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.zh_logged_in .zh-login-status {\n border-color: #afafaf !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.zh_logged_in .zhc-workspace-switcher__header {\n box-shadow: none !important;\n }\n html.octotree-ghe[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notifications-dropdown-arrow {\n border-bottom-color: #c6c6c6 !important;\n }\n html.octotree-ghe[data-octotree-theme=cobalt]:root {\n --ghd-code-color: #181818 !important;\n }\n html.octotree-ghe[data-octotree-theme=github-dark]:root {\n --base-color: #d82828 !important;\n --ghd-code-color: #5a5a5a !important;\n }\n html.octotree-ghe[data-octotree-theme=idle-fingers]:root {\n --ghd-code-color: #181818 !important;\n }\n html.octotree-ghe[data-octotree-theme=monokai-spacegray-eighties]:root {\n --ghd-code-color: #1d1d1d !important;\n }\n html.octotree-ghe[data-octotree-theme=terminal]:root {\n --ghd-code-background: #f0f0f0 !important;\n }\n html.octotree-ghe[data-octotree-theme=tomorrow-night-blue]:root {\n --ghd-code-color: #181818 !important;\n }\n html.octotree-ghe[data-octotree-theme=tomorrow-night-eighties]:root {\n --ghd-code-background: #f0f0f0 !important;\n --ghd-code-color: #5a5a5a !important;\n }\n html.octotree-ghe[data-octotree-theme=twilight]:root {\n --ghd-code-color: #5a5a5a !important;\n }\n html.octotree-ghe[data-octotree-theme=vibrant-ink]:root {\n --ghd-code-color: #181818 !important;\n }\n html.octotree .theme-colour-check {\n background-color: #181818;\n }\n html.octotree .vakata-context, html.octotree .vakata-context ul {\n background-color: #222;\n box-shadow: 2px 2px 2px #767676;\n }\n html.octotree .vakata-context li > a {\n color: #f0f0f0;\n text-shadow: 1px 1px 0 #181818;\n }\n html.octotree .vakata-context .vakata-context-separator > a,\n html.octotree .vakata-context .vakata-context-separator > a:hover {\n background-color: #181818;\n border-left-color: #343434;\n }\n html.octotree .vakata-context .vakata-contextmenu-disabled a,\n html.octotree .vakata-context .vakata-contextmenu-disabled a:hover {\n background-color: transparent;\n }\n html.octotree .vakata-context li > a .vakata-contextmenu-sep {\n background-color: #181818;\n }\n html.octotree .vakata-context-rtl li > a .vakata-contextmenu-sep {\n border-left-color: var(--ghd-bg-color);\n }\n html.octotree .jstree-default .jstree-icon,\n html.octotree .jstree-default .jstree-node {\n background-color: transparent;\n }\n html.octotree .jstree-default .jstree-context,\n html.octotree .jstree-default .jstree-hovered {\n box-shadow: inset 0 0 1px #5a5a5a;\n }\n html.octotree .jstree-default .jstree-clicked {\n box-shadow: inset 0 0 1px #767676;\n }\n html.octotree .jstree-default .jstree-disabled {\n color: #9b9b9b;\n }\n html.octotree .jstree-default.jstree-checkbox-no-clicked .jstree-clicked,\n html.octotree .jstree-default .jstree-disabled.jstree-hovered,\n html.octotree .jstree-default > .jstree-wholerow-ul .jstree-clicked,\n html.octotree .jstree-default > .jstree-wholerow-ul .jstree-hovered {\n box-shadow: none;\n }\n html.octotree .jstree-default .jstree-disabled.jstree-clicked {\n background-color: #202020;\n }\n html.octotree .jstree-default .jstree-themeicon-custom {\n background-color: transparent;\n background-image: none;\n }\n html.octotree #jstree-dnd.jstree-default .jstree-er,\n html.octotree #jstree-dnd.jstree-default .jstree-ok {\n background-color: transparent;\n }\n html.octotree .jstree-default-small .jstree-disabled.jstree-clicked {\n background-color: #202020;\n }\n html.octotree .jstree-default-small .jstree-themeicon-custom {\n background-color: transparent;\n background-image: none;\n }\n html.octotree #jstree-dnd.jstree-default-small .jstree-er,\n html.octotree #jstree-dnd.jstree-default-small .jstree-ok {\n background-color: transparent;\n }\n html.octotree .jstree-default-large .jstree-disabled.jstree-clicked {\n background-color: #202020;\n }\n html.octotree .jstree-default-large .jstree-themeicon-custom {\n background-color: transparent;\n background-image: none;\n }\n html.octotree #jstree-dnd.jstree-default-large .jstree-er,\n html.octotree #jstree-dnd.jstree-default-large .jstree-ok {\n background-color: transparent;\n }\n @media (max-width:768px) {\n html.octotree #jstree-dnd.jstree-dnd-responsive,\n html.octotree .jstree-default-responsive .jstree-anchor {\n text-shadow: 1px 1px #181818;\n }\n html.octotree .jstree-default-responsive .jstree-wholerow {\n border-top-color: hsla(0, 0%, 0%, .7);\n }\n html.octotree .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {\n box-shadow: inset 0 -6px 3px -5px #9b9b9b;\n }\n html.octotree .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {\n box-shadow: inset 0 6px 3px -5px #9b9b9b;\n }\n html.octotree .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {\n box-shadow: none;\n }\n html.octotree .jstree-default-responsive .jstree-themeicon-custom {\n background-color: transparent;\n background-image: none;\n }\n }\n html.octotree .octotree-announcement {\n background-color: #261d08;\n color: #c6c6c6;\n border-bottom-color: rgba(220, 220, 220, .15);\n }\n html.octotree .octotree-announcement-popover .octotree-announcement__features-list li:not(:last-child) {\n border-bottom-color: #2c2c2c;\n }\n html.octotree .octotree-author-fork i:hover::before,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-bookmark-toggle.selected i::before,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-bookmark-toggle i:hover::before {\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler.active,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler:hover {\n background-color: #343434;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__remove i:hover::before {\n color: #4f8cc9;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__search__icon i::before {\n color: #9b9b9b;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler.active i::before,\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler:hover i::before,\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__anchor > div {\n color: #fff;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filters {\n border-bottom-color: #afafaf;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item:hover {\n background-color: #c6c6c6;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__name {\n color: #fff;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__icon i::before,\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__remove i::before {\n color: #9b9b9b !important;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__remove:hover i::before {\n color: #fff !important;\n }\n html.octotree .octotree-reload-cache i:hover::before,\n html.octotree .octotree-storage-exceeds {\n color: #fff;\n }\n html.octotree .octotree-storage-exceeds a {\n color: #fff !important;\n }\n html.octotree .octotree-collapse-tree i:hover::before,\n html.octotree .octotree-storage-exceeds i.octotree-icon-x-error::before {\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-toggle-dock-button .octotree-icon-dock:hover::before {\n color: #4f8cc9;\n }\n html.octotree .octotree-dock-right .octotree-sidebar.octotree-github-sidebar .octotree-views {\n border-left-color: #343434;\n }\n html.octotree .octotree-dock-right .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view .octotree-view-header {\n border-left: 1px solid #4f8cc9;\n }\n html.octotree .octotree-diff-popup__close::before {\n color: #9b9b9b;\n }\n html.octotree .octotree-diff-popup__loading i {\n border-color: #9b9b9b;\n }\n html.octotree .octotree-lazyload-toggle.octotree-lazyload-active i::before,\n html.octotree .octotree-lazyload-toggle i:hover::before {\n color: #fff;\n }\n html[data-octotree-theme] .octotree-settings-view .octotree-view-body .octotree-ma .octotree-ma-add:hover::before {\n color: #202020;\n }\n html.octotree .octotree-tabs-nav__bar .octotree-tabs-nav__item.active::before {\n background-color: #fff;\n }\n html.octotree .octotree-tabs-nav__bar .octotree-tabs-nav__item__close i::before {\n color: #9b9b9b;\n }\n html.octotree .octotree-tabs-nav__bar .octotree-tabs-nav__item__close i:hover::before {\n color: #4f8cc9;\n }\n html[data-octotree-theme] .octotree-tabs-nav__bar::before {\n background-color: #c6c6c6;\n }\n html[data-octotree-theme] .octotree-tabs-nav__bar .octotree-tabs-nav__item.active {\n border-top-color: #c6c6c6;\n border-right-color: #c6c6c6;\n }\n html[data-octotree-theme] .octotree-tabs-nav__bar .octotree-tabs-nav__item::after {\n background-color: #c6c6c6;\n }\n html[data-octotree-theme] .octotree-tabs-nav__bar .octotree-tabs-nav__item__close:hover i::before {\n color: #fff !important;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-pr-tree__promo {\n background-color: #261d08;\n color: #c6c6c6 !important;\n border-color: rgba(220, 220, 220, .15);\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-pr-tree__promo a {\n color: #c6c6c6 !important;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-pr-tree__promo__close i::before {\n color: #c6c6c6;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon:hover,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon:hover::before {\n color: #4f8cc9;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon.octotree-comment-has-new,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon.octotree-comment-has-new::before,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon.octotree-comment-has-new:hover {\n color: #d82828;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-file-view-icon::before {\n color: #484;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-comment-thread .octotree-highlight,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-comment-thread a {\n color: #4f8cc9 !important;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-comment-thread .octotree-comment-bullet.octotree-comment-bullet-has-new::before {\n color: #d82828;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon:hover {\n color: #202020;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon.octotree-comment-has-new,\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon.octotree-comment-has-new::before,\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon.octotree-comment-has-new:hover {\n color: #d82828;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar ul.octotree-threads-container li.octotree-comment-thread {\n border-color: #afafaf;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar ul.octotree-threads-container li.octotree-comment-thread:hover {\n background-color: #c6c6c6 !important;\n }\n html.octotree .octotree-sidebar li[role].jstree-node .jstree-anchor .octotree-search-match {\n background-color: #651 !important;\n }\n html.octotree .octotree-sidebar .octotree-search i:hover::before {\n color: #fff;\n }\n html.octotree .octotree-sidebar .octotree-search-bar input {\n box-shadow: none;\n }\n html[data-octotree-theme] .octotree-sidebar .octotree-close-search i:hover::before {\n color: #fff !important;\n }\n html.octotree .searchGitHubDarkStyles .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n html[data-octotree-theme] .octotree-sidebar li[role].jstree-node .jstree-anchor .octotree-search-match,\n html[data-octotree-theme] .octotree-views .octotree-tree-view .jstree-default .jstree-search {\n color: #343434 !important;\n }\n @media (prefers-color-scheme:dark) {\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match {\n color: #343434 !important;\n }\n }\n html[data-octotree-theme].octotree-pinned main > .hide-full-screen > nav,\n html[data-octotree-theme][data-octotree-shrinked] main > .hide-full-screen > nav {\n box-shadow: none;\n }\n html[data-octotree-theme] .btn {\n background-image: none;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-themes .octotree-darkmode-button .octotree-icon-darkmode:hover::before {\n color: #4f8cc9;\n }\n html[data-octotree-tree-icons=classic] .octotree-sidebar.octotree-github-sidebar .octotree-views,\n html[data-octotree-tree-icons=vscode] .octotree-sidebar.octotree-github-sidebar .octotree-views,\n html[data-octotree-tree-icons=vscodemat] .octotree-sidebar.octotree-github-sidebar .octotree-views {\n background-color: #181818;\n }\n html.octotree .octotree-toast-warn {\n color: #bba257;\n background-color: #261d08;\n }\n html.octotree .octotree-toast-info {\n background-color: #182030;\n border-color: #246;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n background-color: #343434;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views {\n border-right-color: #343434;\n background-color: #181818;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view {\n color: #4f8cc9;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view .octotree-view-header {\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-bg: #181818;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar a.octotree-pin .octotree-icon-pin:hover::before,\n html.octotree .octotree-sidebar.octotree-github-sidebar a.octotree-settings .octotree-icon-settings:hover::before,\n html.octotree .octotree-sidebar.octotree-github-sidebar a.octotree-settings.selected .octotree-icon-settings::before {\n color: #fff;\n }\n html.octotree .octotree-show .octotree-sidebar.octotree-github-sidebar .octotree-spin .octotree-spin--loader {\n border-color: #9b9b9b;\n }\n html.octotree-pinned .octotree-sidebar.octotree-github-sidebar a.octotree-pin .octotree-icon-pin::before {\n color: #fff;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar {\n color: #343434 !important;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n box-shadow: 0 1px 1px hsla(0, 0%, 0%, .5) !important;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-text: #181818;\n box-shadow: none;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-footer-user-profile i:hover::before {\n color: #4f8cc9;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-footer-user-profile .octotree-footer-user-profile__email {\n color: #343434;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-footer-user-profile .octotree-footer-user-profile__email a {\n color: #343434 !important;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-footer-user-profile .octotree-footer-user-profile__email a:hover {\n color: #4f8cc9 !important;\n }\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n box-shadow: none !important;\n }\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=text],\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar select {\n box-shadow: none !important;\n }\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled {\n color: #2c2c2c;\n border-color: #afafaf;\n }\n html.octotree .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-text: #181818;\n box-shadow: none;\n }\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n box-shadow: none !important;\n }\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=text],\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar select {\n box-shadow: none !important;\n }\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled {\n color: #2c2c2c;\n border-color: #afafaf;\n }\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-text: #181818;\n box-shadow: none;\n }\n @media (prefers-color-scheme:dark) {\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n box-shadow: none !important;\n }\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar input[type=text],\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar select {\n box-shadow: none !important;\n }\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled {\n color: #2c2c2c;\n border-color: #afafaf;\n }\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-text: #181818;\n box-shadow: none;\n }\n }\n html.octotree .octotree-icon-file-directory::before,\n html.octotree .octotree-icon-file-submodule::before {\n color: #4f8cc9;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-repo,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-repo .octotree-icon-repo::before {\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-repo a,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-repo a:hover {\n color: #fff !important;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-branch,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-branch .octotree-icon-branch::before {\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-anchor,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-anchor > span {\n color: #4f8cc9 !important;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-default .jstree-no-dots .jstree-closed > .jstree-ocl::before,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-default .jstree-no-dots .jstree-open > .jstree-ocl::before {\n color: #4f8cc9;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-node.jstree-leaf:hover .jstree-icon.blob::before {\n background-image: none;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header i::before {\n color: #343434 !important;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header a,\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header a:hover {\n color: #202020 !important;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-wholerow-hovered {\n background-color: #c6c6c6 !important;\n }\n html.octotree .treeViewGitHubDarkStyles .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .jstree-ocl::before {\n color: #343434 !important;\n }\n @media (prefers-color-scheme:dark) {\n html:not([data-octotree-theme])[data-color-mode=auto] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before {\n color: #343434 !important;\n }\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view {\n color: #dcdcdc;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view > form label {\n color: #c6c6c6;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view > form label.disabled {\n color: #343434;\n }\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view .octotree-icon-help:hover::before,\n html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view .octotree-icon-key:hover::before {\n color: #202020;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-help-popup:hover {\n color: #f0f0f0;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-ads {\n background-color: #4f8cc9;\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-ads a {\n color: #fff !important;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-trial-expired-ads {\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-trial-expired-ads__align_left_text a,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-trial-expired-ads__downgrade,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-trial-expired-ads__text a {\n color: #fff !important;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-auth-view .octotree-auth-view-login form .octotree-auth-view-login__submit .octotree-icon-back::before,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-auth-view__github-btn i::before {\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-footer {\n background-color: #202020;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-trial-info__logout i:hover::before,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile i:hover::before {\n color: #4f8cc9;\n }\n html.octotree .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-trial-info__logout i::before,\n html.octotree .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile i::before {\n color: #343434;\n }\n html.octotree .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-trial-info__logout i:hover::before,\n html.octotree .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile i:hover::before {\n color: #4f8cc9;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile .octotree-footer-user-profile__email a:hover {\n color: #4f8cc9 !important;\n }\n html.octotree .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile .octotree-footer-user-profile__email a {\n color: #343434 !important;\n }\n html.octotree .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile .octotree-footer-user-profile__email a:hover {\n color: #4f8cc9 !important;\n }\n html.octotree .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile {\n color: #343434;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-ghe-error {\n color: #fff;\n }\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-ghe-error__align_left_text a,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-ghe-error__downgrade,\n html.octotree .octotree-sidebar.octotree-github-sidebar .octotree-ghe-error__text a {\n color: #fff !important;\n }\n /* end octotree rules */\n /* Refined GitHub - https://github.com/sindresorhus/refined-github\n * See #540\n * See #881 */\n .refined-github-diff-signs .blob-code-addition::before,\n .refined-github-diff-signs .blob-code-deletion::before {\n color: #7b7b7b !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1035 */\n .refined-github .reaction-summary-item.user-has-reacted {\n --background: transparent !important;\n }\n .refined-github .reaction-summary-item a {\n box-shadow: none;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1271 */\n .refined-github [data-rgh-whitespace=\"tab\"] {\n background-image: url('data:image/svg+xml,%3Csvg preserveAspectRatio=\"xMinYMid meet\" viewBox=\"0 0 12 24\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Cpath d=\"M9.5 10.44L6.62 8.12L7.32 7.26L12.04 11V11.44L7.28 14.9L6.62 13.9L9.48 11.78H0V10.44H9.5Z\" fill=\"rgba(95,90,96,60%)\"/%3E%3C/svg%3E');\n }\n .refined-github [data-rgh-whitespace=\"space\"] {\n background-image: url('data:image/svg+xml,%3Csvg preserveAspectRatio=\"xMinYMid meet\" viewBox=\"0 0 12 24\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Cpath d=\"M4.5 11C4.5 10.1716 5.17157 9.5 6 9.5C6.82843 9.5 7.5 10.1716 7.5 11C7.5 11.8284 6.82843 12.5 6 12.5C5.17157 12.5 4.5 11.8284 4.5 11Z\" fill=\"rgba(95,90,96,60%)\"/%3E%3C/svg%3E');\n }\n /* https://github.com/musically-ut/lovely-forks */\n .lovely-forks-addon {\n color: #808080 !important;\n }\n /* https://github.com/npmhub/npmhub */\n .npmhub-deps > li {\n border-color: #343434 !important;\n }\n /* ZenHub */\n body.zh_logged_in .zh-login-status {\n background: #181818 !important;\n border-color: #484848 !important;\n color: #bebebe !important;\n }\n body.zh_logged_in [style*=\"background-color: rgb(244, 244, 244)\"] {\n background: #222 !important;\n }\n /* zenhub gradients */\n body.zh_logged_in .zhc-sidebar__navigation {\n background: none !important;\n }\n body.zh_logged_in .zhc-workspace-switcher__header {\n box-shadow: none !important;\n }\n body.zh_logged_in .zhc-btn--minimal {\n background: none !important;\n border: none !important;\n }\n body.zh_logged_in .zh-icon-circled-bolt, body.zh_logged_in .zh-icon-bolt,\n body.zh_logged_in .zh-octicon-x {\n filter: invert(40%) brightness(120%) !important;\n }\n body.zh_logged_in a.zh-topbar-item.selected .zh-icon-zenhub {\n filter: invert(40%) brightness(169%) !important;\n }\n body.zh_logged_in a.zh-topbar-item .zh-icon-zenhub {\n filter: brightness(64%) !important;\n }\n body.zh_logged_in .zhc-icon:not([class$=\"-red\"]):not([class$=\"-white\"]):not([class$=\"-light\"]):not([class$=\"-purple\"]),\n body.zh_logged_in [class*=\"zh-octicon\"],\n body.zh_logged_in .zh-epic-creator-tab-icon,\n body.zh_logged_in .zhc-burndown-chart__placeholder,\n body.zh_logged_in .zhc-selection-button__container::after,\n body.zh_logged_in .zhc-icon--grey-light {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n body.zh_logged_in .zhc-selection-item:hover .zhc-icon:not([class$=\"-red\"]):not([class$=\"-white\"]):not([class$=\"-light\"]):not([class$=\"-purple\"]),\n body.zh_logged_in [class*=\"zhc-image--placeholder\"] {\n filter: invert(100%) brightness(1.4) !important;\n }\n body.zh_logged_in .zhc-info-alert img {\n filter: invert(96%) hue-rotate(180deg);\n }\n /* move expanded zenhub board toolbar when octotree exists\n * see https://github.com/buunguyen/octotree/issues/242 */\n html.octotree:not(.octotree-show) .zhc-board--is-fullscreen .zhc-menu-bar {\n margin-left: 30px;\n margin-top: -8px;\n }\n /* octotree */\n .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view .octotree-view-header {\n background: #181818 !important;\n border-right-color: #343434 !important;\n border-bottom: 1px solid #343434 !important;\n }\n .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n box-shadow: none !important;\n }\n /* Github User Info userscript - see #481 */\n .GithubUserInfo, .GithubUserInfo > div {\n background: #202020 !important;\n border-color: #343434 !important;\n }\n /* GitHub Notifications Dropdown userscript - see #478 */\n .notifications-dropdown {\n background: #202020 !important;\n border: 1px solid #343434 !important;\n }\n a.notifications-dropdown-see-all {\n background: #242424 !important;\n color: #4f8cc9 !important;\n }\n a.notifications-dropdown-see-all:hover, .top-nav .dropdown-menu a:hover {\n background: #4f8cc9 !important;\n color: #e2e2e2 !important;\n }\n .notifications-dropdown-arrow {\n border-bottom-color: #333 !important;\n }\n /* Notification-preview */\n .NPG-dropdown .notifications-list-item.notification-unread {\n background: #181818 !important;\n }\n :root:root .NPG-dropdown .notifications-list-item:hover .notification-list-item-actions .btn:hover {\n background: #4f8cc9 !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1198 */\n .overall-summary {\n background: #181818;\n }\n /* Sourcegraph - CodeLine Hover Color In Blob */\n table > tbody > tr > td[style=\"background-color: khaki;\"] {\n background-color: #ffcc0050 !important;\n }", + "start": 619263, + "regexps": [ + "^https?://((education|graphql|guides|raw|resources|status|developer|support|vscode-auth)\\.)?github\\.com/((?!(sponsors)).)*$" + ], + "domains": [ + "gist.github.com" + ] + }, + { + "code": "/* begin gist.github.com rules */\n a {\n background-color: initial;\n }\n :root, [data-color-mode=light][data-light-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: #4f8cc9;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: #4f8cc9;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: #4f8cc9;\n --color-mktg-btn-hover-border: #4f8cc9;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: #4f8cc9;\n --color-mktg-btn-outline-hover-text: #4f8cc9;\n --color-mktg-btn-outline-hover-icon: #4f8cc9;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n @media (prefers-color-scheme:light) {\n [data-color-mode=auto][data-light-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: #4f8cc9;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: #4f8cc9;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: #4f8cc9;\n --color-mktg-btn-hover-border: #4f8cc9;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: #4f8cc9;\n --color-mktg-btn-outline-hover-text: #4f8cc9;\n --color-mktg-btn-outline-hover-icon: #4f8cc9;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n @media (prefers-color-scheme:dark) {\n [data-color-mode=auto][data-dark-theme=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: #4f8cc9;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: #4f8cc9;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: #4f8cc9;\n --color-mktg-btn-hover-border: #4f8cc9;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: #4f8cc9;\n --color-mktg-btn-outline-hover-text: #4f8cc9;\n --color-mktg-btn-outline-hover-icon: #4f8cc9;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n [data-color-mode=dark][data-dark-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme:light) {\n [data-color-mode=auto][data-light-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme:dark) {\n [data-color-mode=auto][data-dark-theme=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n [data-color-mode=dark][data-dark-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme:light) {\n [data-color-mode=auto][data-light-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme:dark) {\n [data-color-mode=auto][data-dark-theme=dark_dimmed] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n .rule {\n background-color: transparent;\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=true],\n .btn-outline.disabled, .btn-outline:disabled,\n .btn-outline[aria-disabled=true] {\n box-shadow: none;\n }\n .btn-invisible, .btn-link {\n background-color: initial;\n }\n .btn-invisible {\n box-shadow: none;\n }\n .btn-invisible.selected, .btn-invisible.zeroclipboard-is-active,\n .btn-invisible.zeroclipboard-is-hover, .btn-invisible:active,\n .btn-invisible:focus, .btn-invisible:hover,\n .btn-invisible[aria-selected=true] {\n background: none;\n box-shadow: none;\n }\n .btn-invisible.disabled, .btn-invisible:disabled,\n .btn-invisible[aria-disabled=true] {\n background-color: initial;\n }\n .btn-octicon, .close-button {\n background-color: transparent;\n }\n .inline-form .btn-plain {\n background-color: initial;\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .filter-list.pjax-active .filter-item, .SideNav-item, .SideNav-subItem,\n .tabnav-tab, .UnderlineNav-item {\n background-color: initial;\n }\n .UnderlineNav-item.selected,\n .UnderlineNav-item[aria-current]:not([aria-current=false]),\n .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: #fff;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .input-dark {\n box-shadow: none;\n }\n @keyframes blink {\n 50% {\n background-color: initial;\n }\n }\n image-crop .crop-box {\n border-color: var(--ghd-bg-color);\n }\n image-crop .handle::before {\n background-color: #181818;\n border-color: #767676;\n }\n body.intent-mouse [role=button]:focus,\n body.intent-mouse [role=tabpanel][tabindex=\"0\"]:focus,\n body.intent-mouse a:focus, body.intent-mouse button:focus,\n body.intent-mouse summary:focus {\n box-shadow: none;\n }\n .zeroclipboard-link {\n background: none;\n }\n .auth-form-header .octicon {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .1);\n }\n .session-authentication .auth-form-header,\n .session-authentication.enterprise .header-logged-out,\n .session-authentication .header-logged-out,\n .session-authentication.hosted .header-logged-out {\n background-color: initial;\n }\n .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px var(--color-fade-black-15), 0 0 1px rgba(220, 220, 220, .2);\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu--logged-out {\n background-color: initial;\n box-shadow: none;\n }\n }\n .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: none;\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px var(--color-fade-black-15), 0 0 1px rgba(220, 220, 220, .2);\n }\n }\n .page-responsive .HeaderMenu-link {\n background-color: transparent;\n }\n @media (min-width:1012px) {\n .page-responsive .HeaderMenu-link .icon-chevon-down-mktg {\n stroke: hsla(0, 0%, 0%, .5);\n background-color: transparent;\n }\n }\n .HeaderMenu-link {\n background-color: transparent;\n }\n .HeaderMenu-link .icon-chevon-down-mktg {\n stroke: hsla(0, 0%, 0%, .5);\n }\n .feature-preview-indicator, .notification-indicator .mail-status {\n background-image: linear-gradient(#4f8cc9, #4f8cc9);\n }\n .header-search-wrapper, .header-search-wrapper.focus {\n box-shadow: none;\n }\n .header-search-input {\n background: none;\n box-shadow: none;\n }\n .header-search-input:focus {\n box-shadow: none;\n }\n .jump-to-suggestions-path mark {\n background-color: initial;\n }\n .btn-black-mktg-fluid, .btn-black-mktg-fluid.hover,\n .btn-black-mktg-fluid.selected, .btn-black-mktg-fluid:active,\n .btn-black-mktg-fluid:hover, .btn-black-mktg-fluid[aria-selected=true],\n [open] > .btn-black-mktg-fluid {\n background-color: rgba(220, 220, 220, .5);\n background-image: linear-gradient(-180deg, rgba(220, 220, 220, .5), rgba(220, 220, 220, .5));\n }\n .btn-outline-mktg-fluid, .btn-outline-mktg-fluid.hover,\n .btn-outline-mktg-fluid.selected, .btn-outline-mktg-fluid:active,\n .btn-outline-mktg-fluid:hover, .btn-outline-mktg-fluid[aria-selected=true],\n [open] > .btn-outline-mktg-fluid {\n background: none;\n }\n .btn-white-outline-mktg-fluid {\n color: #fff;\n background: none;\n box-shadow: inset 0 0 0 1px hsla(0, 0%, 0%, .3);\n }\n .btn-white-outline-mktg-fluid.hover, .btn-white-outline-mktg-fluid.selected,\n .btn-white-outline-mktg-fluid:active, .btn-white-outline-mktg-fluid:hover,\n .btn-white-outline-mktg-fluid[aria-selected=true],\n [open] > .btn-white-outline-mktg-fluid {\n color: #fff;\n background: none;\n box-shadow: inset 0 0 0 2px hsla(0, 0%, 0%, .5);\n }\n .btn-white-outline-mktg-fluid.focus, .btn-white-outline-mktg-fluid:focus {\n box-shadow: inset 0 0 0 2px var(--ghd-bg-color), 0 0 0 4px hsla(0, 0%, 0%, .5);\n }\n .btn-invisible-mktg-fluid, .btn-invisible-mktg-fluid::before,\n .btn-invisible-mktg-fluid:hover, .btn-lg-invisible-mktg-fluid,\n .btn-lg-invisible-mktg-fluid::before, .btn-lg-invisible-mktg-fluid:hover {\n background: none !important;\n }\n .btn-invisible-mktg-fluid.focus, .btn-invisible-mktg-fluid:focus,\n .btn-lg-invisible-mktg-fluid.focus, .btn-lg-invisible-mktg-fluid:focus {\n box-shadow: none;\n }\n .btn-invisible-mktg-fluid.text-underline,\n .btn-lg-invisible-mktg-fluid.text-underline {\n background-color: initial !important;\n box-shadow: none;\n }\n .link-blue-light-mktg {\n color: #4f8cc9 !important;\n }\n .text-gradient-blue-green {\n background: -webkit-linear-gradient(-70deg, #4f8cc9, #01a49e);\n }\n .text-gradient-blue-purple {\n background: -webkit-linear-gradient(-70deg, #4f8cc9, #804eda);\n }\n .text-gradient-pink-blue {\n background: -webkit-linear-gradient(-70deg, #db469f, #4f8cc9);\n }\n .box-shadow-active-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 2px 2px rgba(0, 0, 0, .0274351), 0 4px 4px rgba(0, 0, 0, .0400741), 0 10px 8px rgba(0, 0, 0, .0499982), 0 15px 15px rgba(0, 0, 0, .0596004), 0 30px 30px rgba(0, 0, 0, .0709366), 0 70px 65px rgba(0, 0, 0, .09) !important;\n }\n .box-shadow-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1) !important;\n }\n .box-shadow-card-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 3px 2px rgba(0, 0, 0, .04), 0 7px 5px rgba(0, 0, 0, .02), 0 13px 10px rgba(0, 0, 0, .02), 0 22px 17px rgba(0, 0, 0, .02) !important;\n }\n .testimonial-avatar {\n border-color: var(--ghd-bg-color);\n }\n .customer-story-overlay {\n background-image: linear-gradient(180deg, #f0f0f0 -5%, transparent 50%);\n }\n .page-nav .page-nav-trigger {\n background: none;\n }\n .btn-green-mktg-fluid {\n background-color: #373;\n background-image: linear-gradient(-180deg, #34b859, #373);\n }\n .btn-green-mktg-fluid::before {\n background-image: linear-gradient(-180deg, #279a43, #6cc644);\n }\n .btn-green-mktg-fluid.hover, .btn-green-mktg-fluid.selected,\n .btn-green-mktg-fluid:active, .btn-green-mktg-fluid:hover,\n .btn-green-mktg-fluid[aria-selected=true], [open] > .btn-green-mktg-fluid {\n background-color: #373;\n background-image: linear-gradient(-180deg, #34b859, #373);\n }\n .bg-gradient-gray {\n background-image: linear-gradient(175.44deg, #383838 1.44%, #181818 96.23%);\n }\n .bg-radial-white {\n background: radial-gradient(145.3% 145.3% at 65.91% 0, #181818 0, #f0f0f0 100%);\n }\n .text-blue-mktg {\n color: #4f8cc9 !important;\n }\n .text-gray-light-ultra {\n color: #767676;\n }\n .underline-dashed {\n background-image: linear-gradient(90deg, var(--color-auto-gray-3) 50%, transparent 0);\n }\n .link-mktg {\n color: #4f8cc9;\n box-shadow: 0 1px 0 0 rgba(79, 140, 201, .5);\n }\n .link-mktg:hover {\n box-shadow: 0 1px 0 0 #4f8cc9;\n }\n .link-white-mktg {\n box-shadow: 0 1px 0 0 hsla(0, 0%, 0%, .5);\n }\n .link-white-mktg:hover {\n box-shadow: 0 1px 0 0 var(--ghd-bg-color);\n }\n .card-mktg {\n box-shadow: 0 1px 15px #000, 0 0 1px rgba(106, 115, 125, .35);\n }\n .animation-is-typing::before {\n color: hsla(0, 0%, 100%, .4);\n }\n .subnav-link.selected {\n border-bottom-color: #4f8cc9;\n }\n @media (min-width:768px) {\n .subnav-primary.selected {\n border-bottom-color: #4f8cc9;\n }\n }\n .fade-img-to-white-bg::before {\n background: linear-gradient(180deg, var(--color-auto-white) 0, transparent);\n }\n .fade-img-to-white-bg::after {\n background: linear-gradient(0deg, var(--color-auto-white) 0, transparent);\n }\n .exploregrid-item {\n color: #afafaf;\n border-bottom-color: rgba(220, 220, 220, .125);\n }\n .exploregrid-item-header {\n background-color: #222;\n }\n .dropdown-signout, .flash-close {\n background: none;\n }\n .label, .Label {\n background-color: initial !important;\n }\n .markdown-body .emoji, .markdown-body table img {\n background-color: initial;\n }\n .markdown-body pre > code {\n background-color: transparent;\n }\n .markdown-body pre code, .markdown-body pre tt, .SelectMenu-closeButton,\n .SelectMenu-tab {\n background-color: initial;\n }\n @media (min-width:544px) {\n .SelectMenu-tab[aria-selected=true] {\n box-shadow: none;\n }\n }\n .Toast-dismissButton {\n background-color: initial;\n }\n .select-menu-button::after {\n border-top-color: currentcolor;\n }\n .select-menu-header .close-button, .select-menu-header .octicon {\n color: var(--color-icon-tertiary, #767676);\n }\n .select-menu-text-filter input:-ms-input-placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n .select-menu-text-filter input::-ms-input-placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n .select-menu-text-filter input::placeholder {\n color: var(--color-text-placeholder, #767676);\n }\n .select-menu-tabs .select-menu-tab-nav, .select-menu-tabs a {\n background-color: transparent;\n }\n .select-menu.label-select-menu .select-menu-item:active {\n background-color: initial !important;\n }\n .Box--overlay {\n box-shadow: 0 0 18px #000;\n }\n .capped-card {\n border-color: #343434;\n }\n .comment-body .highlight {\n background-color: initial;\n }\n .locked-conversation .preview-tab, .locked-conversation .write-tab {\n color: #767676;\n }\n .commit-form {\n border-color: #343434;\n }\n .commit-form::before {\n background-color: #343434;\n }\n .full-commit {\n background-color: var(--color-bg-info, #182030);\n }\n .full-commit .sha-block > a {\n border-bottom-color: #767676;\n }\n .branches-tag-list li .ellipsis-expander {\n background-color: #383838;\n }\n .branches-tag-list li .ellipsis-expander:hover {\n background-color: #444;\n }\n .signed-commit-badge {\n background: none;\n }\n .signed-commit-badge:hover {\n border-color: #767676;\n }\n .signed-commit-badge.unverified {\n background: none;\n }\n .table-of-contents .toc-diff-stats .octicon {\n color: #767676;\n }\n .blob-wrapper table tr:nth-child(2n) {\n background-color: initial;\n }\n .add-line-comment.octicon-check {\n background-color: #c6c6c6;\n }\n .inline-comment-form {\n border-color: #343434;\n }\n button.discussion-sidebar-toggle {\n background: none;\n }\n @media (min-width:1012px) {\n .page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting {\n background-color: transparent;\n }\n }\n .previewable-comment-form .comment-body {\n background-color: initial;\n }\n .notifications-component-dialog:not([hidden]) + .notifications-component-dialog-overlay {\n background-color: transparent;\n }\n .reponav-wrapper .reponav-item.selected {\n background-color: initial;\n }\n .steps {\n border-color: #343434;\n box-shadow: 0 1px 3px rgba(220, 220, 220, .05);\n }\n .steps li {\n color: #767676;\n border-left-color: #343434;\n }\n .render-container.is-render-ready.is-render-requested:not(.is-render-failed) {\n background: none;\n }\n .content-attachment {\n border-left-color: #343434;\n }\n .max--md .content-attachment-content--gradient {\n background: linear-gradient(180deg, transparent, #181818 calc(100% - 28px));\n }\n .content-attachment-details[open] .max--md .content-attachment-content--gradient {\n background: none;\n }\n .emoji-picker-tab .btn-outline:not(:hover) {\n background-color: initial;\n }\n @media (max-width:767px) {\n .notifications-v2 .AvatarStack-body .avatar {\n border-right-color: var(--ghd-bg-color) !important;\n }\n }\n .notifications-v2 .thread-subscription-status {\n background-color: initial !important;\n }\n .notifications-list-item .notification-list-item-unread-indicator {\n background: none;\n }\n .progress-pjax-loader {\n background-color: transparent;\n }\n .progress-pjax-loader > .progress-pjax-loader-bar {\n box-shadow: 0 0 10px rgba(79, 140, 201, .3);\n }\n .tag-input input {\n background: none;\n box-shadow: none;\n }\n .tag-input input:focus {\n box-shadow: none;\n }\n .toolbar-commenting .dropdown-item, .toolbar-item,\n .toolbar-item .menu-target {\n background: none;\n }\n .topic-input-container .tag-input .tag-input-inner {\n background-image: none;\n }\n .hx_flex-avatar-stack-item .avatar {\n box-shadow: none;\n }\n .AvatarStack-body:not(:hover) {\n background-color: initial;\n }\n .hx_badge-search-container .hx_badge-input {\n box-shadow: none;\n }\n .hx_badge-search-container .hx_badge-input:focus {\n box-shadow: none !important;\n }\n :root, [data-color-mode=light][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n @media (prefers-color-scheme:light) {\n [data-color-mode=auto][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n }\n @media (prefers-color-scheme:dark) {\n [data-color-mode=auto][data-dark-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n }\n }\n .hx_breadcrumb-header .feature-preview-indicator,\n .hx_breadcrumb-header .notification-indicator .mail-status {\n background-image: none;\n }\n .Header-button:active, .Header-button:focus, .Header-button:hover {\n background-color: initial;\n }\n .Box--responsive .Box-row--unread, .Header-button:active .octicon,\n .Header-button:focus .octicon, .Header-button:hover .octicon {\n box-shadow: none;\n }\n .Box--responsive .Box-row--unread::before {\n background-image: linear-gradient(#4f8cc9, #4f8cc9);\n }\n .autocomplete-item {\n background-color: initial;\n }\n .radio-input:disabled + .radio-label {\n background-color: #242424;\n }\n .hx_status-indicator.status-indicator-loading {\n background-image: none;\n }\n .select-menu-item:hover .Label {\n border-color: currentcolor;\n }\n .notification-list-item-actions .btn {\n box-shadow: none;\n }\n .pagehead-tabs-item.selected, .reponav-item.selected {\n border-top-color: #fff;\n }\n .intgrs-lstng-item-description::after {\n background-image: linear-gradient(90deg, transparent, #181818 80%);\n }\n .intgr-admin-link.draft-tag:hover {\n background-color: #f0f0f0;\n }\n .integrations-install-target .flash,\n .integrations-install-target .flash-error {\n background-color: initial;\n }\n .not-found-octocat-wrapper::after {\n box-shadow: 0 4px 0 var(--ghd-bg-color), 0 8px 0 var(--ghd-bg-color), 0 12px 0 var(--ghd-bg-color), 0 16px 0 var(--ghd-bg-color), 0 20px 0 var(--ghd-bg-color);\n }\n .usage-bar {\n background-color: #2c2c2c;\n }\n .blame-commit[data-heat=\"1\"] {\n border-right-color: #fb8532;\n }\n .heat[data-heat=\"1\"] {\n background-color: #fb8532;\n }\n .blame-commit-date[data-heat=\"1\"] {\n color: #f3582c;\n }\n .blame-commit-date[data-heat=\"10\"] {\n color: #9b9b9b;\n }\n .commit-form::after {\n background-image: linear-gradient(var(--color-bg-primary, #181818), var(--color-bg-primary, #181818));\n }\n .commit-form::before {\n background-color: var(--color-border-primary, #343434);\n }\n .status-meta-file-name {\n background-color: rgba(220, 220, 220, .05);\n }\n .RecentBranches-item + .RecentBranches-item {\n border-top-color: rgba(220, 220, 220, .05);\n }\n .branch-a-b-count .meter.zero {\n background-color: initial;\n }\n .branch-a-b-count .bar-ahead.even, .branch-a-b-count .bar-behind.even {\n background-color: #2c2c2c;\n }\n .code-frequency .addition {\n fill: #373;\n }\n .search-form-fluid .search-page-input {\n background: none;\n box-shadow: none;\n }\n .search-form-fluid .search-page-input:focus {\n box-shadow: none;\n }\n .community-checklist .progress-bar {\n background-color: initial;\n }\n .dashboards-overview-cards .blankslate {\n box-shadow: none;\n }\n .dashboards-overview-cards .dots.metric-1 circle,\n .dashboards-overview-cards .metric-0 circle {\n stroke: #181818;\n }\n :target .discussion-nested-comment-group .timeline-comment,\n :target .nested-discussion-timeline-comment {\n box-shadow: none;\n }\n .discussion-comment .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n .discussion-spotlights-sortable .sortable-drag {\n background-color: initial;\n }\n .discussion-spotlight-gradient[aria-selected=true] {\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .file {\n border-color: var(--color-border-primary, #343434);\n }\n .file .image {\n background-color: #343434;\n }\n .file .image canvas, .file .image img {\n background-color: #2c2c2c;\n border-color: var(--ghd-bg-color);\n }\n .file .image .view canvas, .file .image .view img {\n background-color: #2c2c2c;\n }\n .file .empty {\n background: none;\n }\n .svg-tip {\n background-color: #242424;\n }\n .svg-tip strong {\n color: #343434;\n }\n .svg-tip::after {\n border-top-color: #242424;\n }\n .team-discussions .previewable-comment-form .toolbar-commenting.toolbar-commenting.toolbar-commenting {\n background-color: transparent;\n }\n .discussion-post .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n .team-discussion-new-post .review-thread-reply-button:disabled {\n box-shadow: none;\n }\n .team-project-suggestion-number {\n color: #767676;\n }\n .hook-deliveries-list .hook-delivery-item:hover {\n background-color: initial;\n }\n .integrations-select-repos::-webkit-scrollbar-thumb {\n box-shadow: 0 0 1px hsla(0, 0%, 0%, .5);\n }\n .integrations-select-repos::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n .table-list-milestones .stat {\n color: var(--color-text-primary, #afafaf);\n }\n .milestone-title-link a {\n color: var(--color-text-primary, #c6c6c6);\n }\n .task-progress .octicon {\n color: var(--color-icon-tertiary, #767676);\n }\n .issue-meta-section .octicon {\n color: var(--color-icon-tertiary, #5a5a5a);\n }\n .label-select-menu .selected:active,\n .label-select-menu [aria-checked=mixed]:active,\n .label-select-menu [aria-checked=true]:active {\n background-color: initial !important;\n }\n .label-select-menu .select-menu-item.navigation-focus,\n .label-select-menu .select-menu-item:focus,\n .label-select-menu .select-menu-item:hover,\n .label-select-menu .select-menu-item[aria-selected=true] {\n background-color: var(--color-bg-secondary, #242424);\n }\n .repository-lang-stats ol.repository-lang-stats-numbers li a:hover {\n background-color: transparent;\n }\n .MarketplaceEdit-body .CircleIcon {\n background-color: #444;\n }\n .ClipboardButton.ClipboardButton--success,\n .ClipboardButton.ClipboardButton--success:focus {\n box-shadow: 0 0 0 .2em #3737;\n }\n .MarketplaceAnnouncement {\n background: linear-gradient(90deg, #4f8cc9, #2426ca);\n }\n .MarketplaceAnnouncement .btn-outline-mktg {\n background-color: transparent;\n }\n .merge-branch-manually {\n background-color: initial;\n }\n .news .alert {\n border-top-color: #242424;\n }\n .oauth-permissions-details.open a.btn-sm {\n background-image: none;\n }\n .org-insights-graph-canvas .axis line {\n stroke: rgba(220, 220, 220, .1);\n }\n .org-insights-svg-tip::after {\n border-color: transparent;\n }\n .theme-toggle {\n background: none;\n }\n @media print {\n .btn:not(.btn-outline), .State {\n background: none;\n }\n .State--open {\n border-color: #373;\n }\n }\n @media (min-width:544px) {\n .project-full-screen .card-filter-input {\n background-color: hsla(0, 0%, 0%, .125);\n box-shadow: none;\n }\n }\n .pending-cards-status {\n background-image: linear-gradient(#4f8cc9, #4f8cc9);\n }\n .user-profile-nav {\n box-shadow: none;\n }\n .review-comment .reaction-summary-item:not(.add-reaction-btn) {\n border-color: var(--color-border-primary, #246);\n }\n .release-timeline-tags .tag-timeline-date::after {\n border-color: var(--ghd-bg-color);\n }\n .timeout {\n background-color: initial;\n }\n .prereceive-feedback {\n border-color: #343434;\n }\n .avatar-upload .flash {\n box-shadow: none;\n }\n .saved-reply-form .comment-body {\n background-color: initial;\n }\n .access-token.new-token {\n background-color: #6cc64450;\n }\n .application-show-group .drag-and-drop {\n background-color: initial;\n }\n .qr-code-table tr {\n background-color: transparent;\n }\n .qr-code-table .black {\n background-color: #f0f0f0;\n }\n .qr-code-table .white {\n background-color: #181818;\n }\n .session-device .session-state-indicator.not-recent {\n background-image: linear-gradient(#aaa, #5a5a5a);\n box-shadow: 0 1px 0 var(--ghd-bg-color);\n }\n .oauth-pending-deletion-list-item {\n box-shadow: inset 0 0 8px #2c2c2c;\n }\n .form-hr {\n border-bottom-color: var(--color-border-primary, #343434);\n }\n .listgroup {\n border-color: var(--color-border-primary, #343434);\n }\n .listgroup-item + .listgroup-item {\n border-top-color: var(--color-border-primary, #343434);\n }\n .listgroup-header {\n border-bottom-color: var(--color-border-primary, #343434);\n }\n .listgroup-overflow {\n background-color: var(--color-bg-secondary, #222);\n }\n @keyframes toggle-color {\n 0% {\n background-color: initial;\n }\n to {\n background-color: initial;\n }\n }\n .repository-merge-features .form-group.errored .error {\n background-color: transparent;\n }\n .user-identification-questions.redesign .topic-input-container .tag-input {\n border-bottom-color: #f0f0f0;\n }\n .draft-tag {\n color: #2c2c2c;\n }\n .showcase-page-pattern::after {\n background-image: linear-gradient(180deg, hsla(0, 0%, 0%, .85), #181818);\n }\n .sponsors-goal-progress-bar {\n background-color: #c49;\n }\n .sponsors-goal-completed-bar, .sponsors-goal-progress-bar:hover {\n background: linear-gradient(90deg, #cb4, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff);\n }\n .team-label-ldap, .tree-finder-input, .tree-finder-input:focus {\n box-shadow: none;\n }\n .tree-browser-result mark, .wiki-footer .markdown-body img {\n background: none;\n }\n .WorkflowGraph.dragging .WorkflowJob:hover {\n background: none !important;\n }\n .WorkflowJob-deployment-progress .Progress {\n background: none;\n }\n .actions-workflow-navigation .row-section {\n background-color: transparent !important;\n }\n .actions-workflow-navigation .row-parent {\n background-color: transparent;\n }\n .actions-workflow-navigation .row-parent:hover {\n background-color: initial;\n }\n .ActionsApprovalOverlay-environment .AvatarStack-body {\n background-color: transparent !important;\n }\n .page-gist-edit .octicon-gist {\n color: #767676;\n }\n .user-list li em {\n background: none;\n }\n .gist-banner {\n border-bottom-color: var(--ghd-bg-color);\n }\n /* end gist.github.com rules */\n body {\n background-color: var(--ghd-bg-color) !important;\n background-image: var(--ghd-bg-img) !important;\n background-clip: border-box !important;\n background-origin: padding-box !important;\n background-attachment: scroll !important;\n background-repeat: repeat !important;\n background-size: auto !important;\n background-position: left top !important;\n }\n /* text selection */\n ::selection {\n background-color: #4f8cc9 !important;\n color: #fff !important;\n }\n ::-moz-selection {\n background-color: #4f8cc9 !important;\n color: #fff !important;\n }\n /* placeholder */\n ::-webkit-input-placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n ::-moz-placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n ::placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n .select-menu-text-filter input::-webkit-input-placeholder {\n color: #555 !important;\n }\n .select-menu-text-filter input::-moz-placeholder {\n color: #555 !important;\n }\n .select-menu-text-filter input::placeholder {\n color: #555 !important;\n }\n ::-webkit-calendar-picker-indicator {\n background-color: #181818;\n color: #c9c9c9;\n }\n ::-webkit-calendar-picker-indicator:hover {\n color: #666;\n }\n .Header, .Header-old {\n border-bottom: 1px solid #343434 !important;\n background: #181818 !important;\n }\n .Header-link {\n color: #c6c6c6;\n }\n .Header-link[data-ga-click]:focus, .Header-link[data-ga-click]:hover,\n .btn-link .octicon-kebab-horizontal:hover {\n color: #4f8cc9;\n }\n .gisthead {\n background: rgba(20, 20, 20, .4) !important;\n }\n .discussion-timeline-actions {\n background: none !important;\n }\n .notification-indicator .mail-status {\n border-color: #181818;\n }\n .social-count {\n box-shadow: none;\n }\n .gist-content .file-box {\n background: #181818;\n }\n .gist-quicksearch-result-group {\n background: #282828 !important;\n border-color: rgba(68, 68, 68, .5) !important;\n color: #555 !important;\n }\n img[src$=\"favicons.githubusercontent.com/gist.github.com\"] {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n .gist-secret-label {\n background: rgba(51, 34, 17, .4) !important;\n border: 1px solid #542 !important;\n color: #ddd !important;\n }\n .gist-owner-tag .tag {\n background: #070 !important;\n color: #ddd !important;\n }\n .btn {\n box-shadow: none !important;\n }\n .gist-banner {\n background: rgba(20, 20, 20, .4) !important;\n }", + "start": 1036593, + "domains": [ + "gist.github.com" + ] + }, + { + "code": "/* begin graphql.github.com rules */\n .graphiql-container, .graphiql-container button, .graphiql-container input {\n color: #dcdcdc;\n }\n .graphiql-container .topBar {\n background-color: #222;\n border-bottom-color: #343434;\n }\n .graphiql-container .docExplorerShow, .graphiql-container .historyShow {\n background-color: #222;\n border-bottom-color: #343434;\n color: #4f8cc9;\n }\n .graphiql-container .docExplorerShow {\n border-left-color: rgba(255, 255, 255, .7);\n }\n .graphiql-container .historyShow {\n border-right-color: rgba(255, 255, 255, .7);\n }\n .graphiql-container .docExplorerShow::before {\n border-left: 2px solid #4f8cc9;\n border-top: 2px solid #4f8cc9;\n }\n .graphiql-container .resultWrap {\n border-left-color: #343434;\n }\n .graphiql-container .docExplorerWrap, .graphiql-container .historyPaneWrap {\n background-color: #181818;\n }\n .graphiql-container .variable-editor-title {\n background-color: #2c2c2c;\n border-bottom-color: #343434;\n border-top-color: #343434;\n }\n .graphiql-container .footer {\n border-left-color: #343434;\n border-top-color: #343434;\n }\n .graphiql-container .footer::before {\n background-color: #2c2c2c;\n }\n .graphiql-container .toolbar-button {\n background-color: #181818;\n background: linear-gradient(#303030, #282828);\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .7), 0 1px 0 hsla(0, 0%, 0%, .7), inset 0 1px var(--ghd-bg-color);\n color: #afafaf;\n }\n .graphiql-container .toolbar-button:active {\n background: linear-gradient(#404040, #383838);\n box-shadow: 0 0 0 1px #484848;\n }\n .graphiql-container .execute-button {\n background: linear-gradient(#303030, #282828);\n box-shadow: 0 1px 0 var(--ghd-bg-color);\n fill: #afafaf;\n }\n .graphiql-container .execute-button:active {\n background: linear-gradient(#404040, #383838);\n box-shadow: 0 1px 0 var(--ghd-bg-color), inset 0 0 2px rgba(255, 255, 255, .7), inset 0 0 6px rgba(0, 0, 0, .1);\n }\n .graphiql-container .execute-options,\n .graphiql-container .toolbar-menu-items,\n .graphiql-container .toolbar-select-options {\n background-color: #181818;\n }\n .graphiql-container .execute-options > li.selected,\n .graphiql-container .history-contents > li:active,\n .graphiql-container .history-contents > li:hover,\n .graphiql-container .toolbar-menu-items > li.hover,\n .graphiql-container .toolbar-menu-items > li:active,\n .graphiql-container .toolbar-menu-items > li:hover,\n .graphiql-container .toolbar-select-options > li.hover,\n .graphiql-container .toolbar-select-options > li:active,\n .graphiql-container .toolbar-select-options > li:hover {\n color: #fff;\n }\n .graphiql-container .toolbar-select-options > li > svg {\n fill: #9b9b9b;\n }\n .graphiql-container .toolbar-select-options > li.hover > svg,\n .graphiql-container .toolbar-select-options > li:active > svg,\n .graphiql-container .toolbar-select-options > li:hover > svg {\n fill: #181818;\n }\n @keyframes insertionFade {\n from, to {\n background-color: transparent;\n border-color: transparent;\n }\n }\n @keyframes blink {\n 50% {\n background: none;\n }\n }\n .graphiql-container .doc-explorer {\n background-color: #181818;\n }\n .graphiql-container .doc-explorer-back {\n color: #4f8cc9;\n }\n .graphiql-container .doc-explorer-back::before {\n border-left: 2px solid #4f8cc9;\n border-top: 2px solid #4f8cc9;\n }\n .graphiql-container .doc-explorer-contents,\n .graphiql-container .history-contents {\n background-color: #181818;\n border-top-color: #343434;\n }\n .graphiql-container .doc-category code,\n .graphiql-container .doc-type-description code {\n background-color: #181818;\n }\n .graphiql-container .doc-category-title {\n border-bottom-color: #343434;\n }\n .graphiql-container .doc-category-item {\n color: #afafaf;\n }\n .graphiql-container .keyword {\n color: #d82828;\n }\n .graphiql-container .type-name {\n color: #cb4;\n }\n .graphiql-container .field-name {\n color: #4f8cc9;\n }\n .graphiql-container .field-short-description {\n color: #767676;\n }\n .graphiql-container .arg-name {\n color: #53387a;\n }\n .graphiql-container .show-btn {\n border-color: #5a5a5a;\n color: #afafaf;\n }\n .graphiql-container .search-box {\n border-bottom-color: #343434;\n }\n .graphiql-container .search-box .search-box-clear {\n background-color: #343434;\n color: #fff;\n }\n .graphiql-container .history-contents li {\n border-bottom-color: #343434;\n }\n a {\n background-color: transparent;\n }\n mark {\n color: #f0f0f0;\n }\n body {\n color: #c6c6c6;\n background-color: #181818;\n }\n a {\n color: #4f8cc9;\n }\n .rule {\n background-color: transparent;\n border-bottom-color: #343434;\n }\n kbd {\n color: #afafaf;\n box-shadow: inset 0 -1px 0 #343434;\n }\n .Box, kbd {\n background-color: #181818;\n border-color: #343434;\n }\n .Box-header {\n background-color: #222;\n border-color: #343434;\n }\n .Box-body {\n border-bottom-color: #343434;\n }\n .Box-row {\n border-top-color: #343434;\n }\n .Box-row.Box-row--unread, .Box-row.unread {\n box-shadow: 2px 0 0 #4f8cc9 inset;\n }\n .Box-row.navigation-focus .Box-row--drag-button {\n color: #4f8cc9;\n }\n .Box-row.navigation-focus.sortable-chosen {\n background-color: #181818;\n }\n .Box-row--focus-gray.navigation-focus,\n .Box-row.navigation-focus.sortable-ghost {\n background-color: #222;\n }\n .Box-row--focus-blue.navigation-focus {\n background-color: #182030;\n }\n .Box-row--hover-gray:hover {\n background-color: #222;\n }\n .Box-row--hover-blue:hover {\n background-color: #182030;\n }\n @media (min-width: 768px) {\n .Box-row-link {\n color: #c6c6c6;\n }\n .Box-row-link:hover {\n color: #4f8cc9;\n }\n }\n .Box-footer {\n border-top-color: #343434;\n }\n .Box--blue {\n border-color: #246;\n }\n .Box--blue .Box-header {\n background-color: #182030;\n border-color: #246;\n }\n .Box--blue .Box-body, .Box--blue .Box-footer, .Box--blue .Box-row {\n border-color: #246;\n }\n .Box--danger, .Box--danger .Box-body:last-of-type,\n .Box--danger .Box-row:first-of-type {\n border-color: #d82828;\n }\n .Box-header--blue {\n background-color: #182030;\n border-color: #246;\n }\n .Box-row--yellow {\n background-color: #261d08;\n }\n .Box-row--blue {\n background-color: #182030;\n }\n .Box-row--gray {\n background-color: #222;\n }\n .breadcrumb-item::after {\n color: #343434;\n }\n .btn {\n border-color: rgba(220, 220, 220, .2);\n }\n .btn .Counter {\n color: #afafaf;\n background-color: rgba(220, 220, 220, .1);\n }\n .btn.selected, .btn:active {\n background-image: none;\n }\n .btn {\n color: #c6c6c6;\n background-color: #242424;\n background-image: linear-gradient(-180deg, #202020 0%, #181818 90%);\n }\n .btn.focus, .btn:focus {\n box-shadow: 0 0 0 .2em rgba(79, 140, 201, .5);\n }\n .btn.hover, .btn:hover {\n background-color: #444;\n background-image: linear-gradient(-180deg, #242424 0%, #444 90%);\n border-color: rgba(220, 220, 220, .35);\n }\n .btn.selected, .btn:active, [open] > .btn {\n background-color: #404040;\n background-image: none;\n border-color: rgba(220, 220, 220, .35);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn.disabled, .btn:disabled {\n color: rgba(210, 210, 210, .4);\n background-color: #242424;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-primary {\n color: #fff;\n background-color: #484;\n background-image: linear-gradient(-180deg, #373 0%, #484 90%);\n }\n .btn-primary.focus, .btn-primary:focus {\n box-shadow: 0 0 0 .2em #3737;\n }\n .btn-primary.hover, .btn-primary:hover {\n background-color: #595;\n background-image: linear-gradient(-180deg, #373 0%, #595 90%);\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-primary.selected, .btn-primary:active, [open] > .btn-primary {\n background-color: #595;\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-primary.disabled, .btn-primary:disabled {\n background-color: #040;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-primary .Counter {\n background-color: #181818;\n }\n .btn-blue {\n color: #fff;\n background-color: #4f8cc9;\n background-image: linear-gradient(-180deg, #4f8cc9 0%, #4f8cc9 90%);\n }\n .btn-blue.hover, .btn-blue:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-blue.selected, .btn-blue:active, [open] > .btn-blue {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-blue.disabled, .btn-blue:disabled {\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-blue .Counter {\n color: #4f8cc9;\n background-color: #181818;\n }\n .btn-danger {\n color: #d82828;\n background-color: #181818;\n background-image: linear-gradient(-180deg, #202020 0%, #181818 90%);\n }\n .btn-danger:focus {\n box-shadow: 0 0 0 .2em rgba(255, 68, 68, .4);\n }\n .btn-danger:hover {\n color: #fff;\n background-color: #d82828;\n background-image: linear-gradient(-180deg, #de4450 0%, #d82828 90%);\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-danger:hover .Counter {\n color: #fff;\n }\n .btn-danger.selected, .btn-danger:active, [open] > .btn-danger {\n color: #fff;\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-danger.disabled, .btn-danger:disabled {\n color: rgba(255, 68, 68, .4);\n background-color: #242424;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-outline {\n color: #4f8cc9;\n background-color: #181818;\n background-image: none;\n }\n .btn-outline.selected, .btn-outline:active, .btn-outline:hover,\n [open] > .btn-outline {\n color: #fff;\n background-color: #4f8cc9;\n background-image: none;\n border-color: #4f8cc9;\n }\n .btn-outline.selected .Counter, .btn-outline:active .Counter,\n .btn-outline:hover .Counter, [open] > .btn-outline .Counter {\n color: #4f8cc9;\n background-color: #181818;\n }\n .btn-outline:focus {\n border-color: #4f8cc9;\n }\n .btn-outline.disabled, .btn-outline:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-link {\n color: #4f8cc9;\n background-color: transparent;\n }\n .btn-link:disabled, .btn-link:disabled:hover {\n color: rgba(148, 148, 148, .5);\n }\n .btn-invisible {\n color: #4f8cc9;\n background-color: #181818;\n background-image: none;\n }\n .btn-invisible.selected, .btn-invisible.zeroclipboard-is-active,\n .btn-invisible.zeroclipboard-is-hover, .btn-invisible:active,\n .btn-invisible:focus, .btn-invisible:hover {\n color: #4f8cc9;\n background: none;\n box-shadow: none;\n }\n .btn-octicon {\n color: #afafaf;\n background-color: transparent;\n }\n .btn-octicon:hover {\n color: #4f8cc9;\n }\n .btn-octicon.disabled, .btn-octicon.disabled:hover {\n color: #767676;\n }\n .btn-octicon-danger:hover {\n color: #d82828;\n }\n .close-button {\n background-color: transparent;\n }\n .ellipsis-expander, .hidden-text-expander a {\n color: #afafaf;\n background-color: #343434;\n }\n .ellipsis-expander:hover, .hidden-text-expander a:hover {\n background-color: #767676;\n }\n .ellipsis-expander:active, .hidden-text-expander a:active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .social-count {\n color: #c6c6c6;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .2);\n }\n .social-count:hover {\n color: #4f8cc9;\n }\n .form-control, .form-select {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n }\n .form-control.focus, .form-control:focus, .form-select.focus,\n .form-select:focus {\n border-color: #4f8cc9;\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .input-contrast, .input-contrast:focus {\n background-color: #181818;\n }\n .input-dark {\n color: #fff;\n background-color: hsla(0, 0%, 0%, .15);\n }\n .input-dark.focus, .input-dark:focus {\n border-color: rgba(220, 220, 220, .4);\n }\n ::placeholder {\n color: #9b9b9b;\n }\n .form-checkbox label em.highlight {\n background-color: #261d08;\n }\n .form-checkbox .note, .hfields .form-group dt label {\n color: #afafaf;\n }\n .form-warning {\n color: #bba257;\n background-color: #261d08;\n border-color: #cb4;\n }\n .form-group .form-control, .form-group .form-control:focus, .form-select {\n background-color: #181818;\n }\n .form-group dd h4.is-error {\n color: #d82828;\n }\n .form-group dd h4.is-success {\n color: #484;\n }\n .form-group.required dt label::after {\n color: #d82828;\n }\n .form-group.successful .success {\n color: #484;\n }\n .form-group.warn .warning {\n color: #bba257;\n background-color: #261d08;\n border-color: #cb4;\n }\n .form-group.warn .warning::after {\n border-bottom-color: #261d08;\n }\n .form-group.warn .warning::before {\n border-bottom-color: #cb4;\n }\n .form-group.errored label {\n color: #d82828;\n }\n .form-group.errored .error {\n color: #f84848;\n background-color: #300;\n border-color: #d82828;\n }\n .form-group.errored .error::after {\n border-bottom-color: #300;\n }\n .form-group.errored .error::before {\n border-bottom-color: #d82828;\n }\n .note {\n color: #afafaf;\n }\n .status-indicator-success .octicon-check {\n color: #484;\n fill: #484;\n }\n .status-indicator-failed .octicon-x {\n color: #d82828;\n fill: #d82828;\n }\n .inline-form .btn-plain {\n background-color: transparent;\n }\n .drag-and-drop {\n color: #afafaf;\n background-color: #181818;\n border-color: #484848;\n }\n .drag-and-drop .error {\n color: #d82828;\n }\n .drag-and-drop-error-info {\n color: #afafaf;\n }\n .drag-and-drop-error-info a {\n color: #4f8cc9;\n }\n .upload-enabled textarea {\n border-bottom-color: #343434;\n }\n .upload-enabled.focused {\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .upload-enabled.focused .drag-and-drop {\n border-color: #4f8cc9;\n }\n .previewable-comment-form .comment {\n border-color: #484848;\n }\n h2.account, p.explain {\n color: #afafaf;\n }\n p.explain strong {\n color: #c6c6c6;\n }\n p.explain .octicon {\n color: #767676;\n }\n .menu {\n background-color: #181818;\n border-color: #343434;\n }\n .menu-item {\n border-bottom-color: #343434;\n }\n .menu-item:hover {\n background-color: #222;\n }\n .menu-item.selected {\n color: #c6c6c6;\n background-color: #181818;\n }\n .menu-item.selected::before {\n background-color: #fb8532;\n }\n .menu-item .octicon {\n color: #c6c6c6;\n }\n .menu-item .menu-warning {\n color: #f84848;\n }\n .menu-item.alert .Counter {\n color: #d82828;\n }\n .menu-heading {\n color: #afafaf;\n }\n .menu-heading, .tabnav {\n border-bottom-color: #343434;\n }\n .tabnav-tab {\n color: #afafaf;\n background-color: transparent;\n }\n .tabnav-tab.selected, .tabnav-tab[aria-selected=true] {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n }\n .tabnav-tab:focus, .tabnav-tab:hover {\n color: #c6c6c6;\n }\n .tabnav-extra {\n color: #afafaf;\n }\n a.tabnav-extra:hover {\n color: #4f8cc9;\n }\n .filter-list.pjax-active .filter-item {\n color: #afafaf;\n background-color: transparent;\n }\n .filter-list.pjax-active .filter-item.pjax-active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item {\n color: #afafaf;\n }\n .filter-item:hover {\n background-color: #2c2c2c;\n }\n .filter-item.selected {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item .bar {\n background-color: #242424;\n }\n .SideNav {\n background-color: #181818;\n }\n .SideNav-item {\n color: #afafaf;\n background-color: transparent;\n border-top-color: #343434;\n }\n .SideNav-item:last-child {\n box-shadow: 0 1px 0 #343434;\n }\n .SideNav-item:focus, .SideNav-item:hover {\n color: #c6c6c6;\n background-color: #222;\n }\n .SideNav-item:focus::before, .SideNav-item:hover::before {\n background-color: #343434;\n }\n .SideNav-item:active {\n background-color: #181818;\n }\n .SideNav-item[aria-current=\"page\"], .SideNav-item[aria-selected=\"true\"] {\n color: #c6c6c6;\n background-color: #181818;\n }\n .SideNav-item[aria-current=\"page\"]::before,\n .SideNav-item[aria-selected=\"true\"]::before {\n background-color: #fb8532;\n }\n .SideNav-icon {\n color: #9b9b9b;\n }\n .SideNav-subItem {\n color: #4f8cc9;\n background-color: transparent;\n }\n .SideNav-subItem:focus, .SideNav-subItem:hover,\n .SideNav-subItem[aria-current=\"page\"],\n .SideNav-subItem[aria-selected=\"true\"] {\n color: #c6c6c6;\n }\n .subnav-bordered {\n border-bottom-color: #2c2c2c;\n }\n .subnav-item {\n color: #afafaf;\n border-color: #343434;\n }\n .subnav-item:focus, .subnav-item:hover {\n background-color: #222;\n }\n .subnav-item.selected, .subnav-item.selected:focus,\n .subnav-item.selected:hover {\n color: #fff;\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .subnav-search-input {\n color: #afafaf;\n }\n .subnav-search-icon {\n color: #767676;\n }\n .subnav-search-context .btn {\n color: #afafaf;\n }\n .UnderlineNav {\n border-bottom-color: #343434;\n }\n .UnderlineNav-item {\n color: #afafaf;\n }\n .UnderlineNav-item:focus, .UnderlineNav-item:hover {\n color: #c6c6c6;\n border-bottom-color: #343434;\n }\n .UnderlineNav-item:focus .UnderlineNav-octicon,\n .UnderlineNav-item:hover .UnderlineNav-octicon {\n color: #9b9b9b;\n }\n .UnderlineNav-item.selected, .UnderlineNav-item[aria-current],\n .UnderlineNav-item[role=tab][aria-selected=true] {\n color: #c6c6c6;\n border-bottom-color: #fb8532;\n }\n .UnderlineNav-item.selected .UnderlineNav-octicon,\n .UnderlineNav-item[aria-current] .UnderlineNav-octicon,\n .UnderlineNav-item[role=tab][aria-selected=true] .UnderlineNav-octicon {\n color: #9b9b9b;\n }\n .UnderlineNav-octicon {\n color: #767676;\n }\n .pagination a, .pagination em, .pagination span {\n color: #4f8cc9;\n background-color: #181818;\n border-color: #343434;\n }\n .pagination a:focus, .pagination a:hover, .pagination em:focus,\n .pagination em:hover, .pagination span:focus, .pagination span:hover {\n background-color: #242424;\n border-color: #343434;\n }\n .pagination .current, .pagination .current:hover {\n color: #fff;\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .pagination .disabled, .pagination .disabled:hover, .pagination .gap,\n .pagination .gap:hover {\n color: #343434;\n background-color: #181818;\n }\n .tooltipped::after {\n color: #fff;\n background-color: #dcdcdc;\n }\n .tooltipped::before {\n color: #dcdcdc;\n }\n .tooltipped-s::before, .tooltipped-se::before, .tooltipped-sw::before {\n border-bottom-color: #dcdcdc;\n }\n .tooltipped-n::before, .tooltipped-ne::before, .tooltipped-nw::before {\n border-top-color: #dcdcdc;\n }\n .tooltipped-w::before {\n border-left-color: #dcdcdc;\n }\n .tooltipped-e::before {\n border-right-color: #dcdcdc;\n }\n .border-x {\n border-right-color: #343434 !important;\n border-left-color: #343434 !important;\n }\n .border-y {\n border-top-color: #343434 !important;\n border-bottom-color: #343434 !important;\n }\n .border {\n border-color: #343434 !important;\n }\n .border-top {\n border-top-color: #343434 !important;\n }\n .border-right {\n border-right-color: #343434 !important;\n }\n .border-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-left {\n border-left-color: #343434 !important;\n }\n @media (min-width: 544px) {\n .border-sm {\n border-color: #343434 !important;\n }\n .border-sm-top {\n border-top-color: #343434 !important;\n }\n .border-sm-right {\n border-right-color: #343434 !important;\n }\n .border-sm-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-sm-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 768px) {\n .border-md {\n border-color: #343434 !important;\n }\n .border-md-top {\n border-top-color: #343434 !important;\n }\n .border-md-right {\n border-right-color: #343434 !important;\n }\n .border-md-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-md-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1012px) {\n .border-lg {\n border-color: #343434 !important;\n }\n .border-lg-top {\n border-top-color: #343434 !important;\n }\n .border-lg-right {\n border-right-color: #343434 !important;\n }\n .border-lg-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-lg-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1280px) {\n .border-xl {\n border-color: #343434 !important;\n }\n .border-xl-top {\n border-top-color: #343434 !important;\n }\n .border-xl-right {\n border-right-color: #343434 !important;\n }\n .border-xl-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-xl-left {\n border-left-color: #343434 !important;\n }\n }\n .border-blue {\n border-color: #4f8cc9 !important;\n }\n .border-blue-light {\n border-color: #246 !important;\n }\n .border-green {\n border-color: #373 !important;\n }\n .border-green-light {\n border-color: #040 !important;\n }\n .border-red, .border-red-light {\n border-color: #d82828 !important;\n }\n .border-purple {\n border-color: #73589a !important;\n }\n .border-yellow {\n border-color: #cb4 !important;\n }\n .border-gray-light {\n border-color: #2c2c2c !important;\n }\n .border-gray-dark {\n border-color: #343434 !important;\n }\n .border-black-fade {\n border-color: rgba(220, 220, 220, .15) !important;\n }\n .border-white-fade, .border-white-fade-15 {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n .border-white-fade-30 {\n border-color: hsla(0, 0%, 0%, .3) !important;\n }\n .border-white-fade-50 {\n border-color: hsla(0, 0%, 0%, .5) !important;\n }\n .border-white-fade-70 {\n border-color: hsla(0, 0%, 0%, .7) !important;\n }\n .border-white-fade-85 {\n border-color: hsla(0, 0%, 0%, .85) !important;\n }\n .box-shadow {\n box-shadow: 0 1px 1px #000 !important;\n }\n .box-shadow-medium {\n box-shadow: 0 1px 5px #000 !important;\n }\n .box-shadow-large {\n box-shadow: 0 1px 15px #000 !important;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .bg-white {\n background-color: #181818 !important;\n }\n .bg-blue {\n background-color: #4f8cc9 !important;\n }\n .bg-blue-light {\n background-color: #182030 !important;\n }\n .bg-gray {\n background-color: #222 !important;\n }\n .bg-gray-light {\n background-color: #181818 !important;\n }\n .bg-green {\n background-color: #484 !important;\n }\n .bg-green-light {\n background-color: #002800 !important;\n }\n .bg-red {\n background-color: #d82828 !important;\n }\n .bg-red-light {\n background-color: #300 !important;\n }\n .bg-yellow {\n background-color: #cb4 !important;\n }\n .bg-yellow-light {\n background-color: #651 !important;\n }\n .bg-yellow-dark {\n background-color: #cb4 !important;\n }\n .bg-purple {\n background-color: #73589a !important;\n }\n .bg-pink {\n background-color: #c49 !important;\n }\n .bg-purple-light {\n background-color: #213 !important;\n }\n .color-gray-0 {\n color: #181818 !important;\n }\n .bg-gray-0 {\n background-color: #181818 !important;\n }\n .color-gray-1 {\n color: #202020 !important;\n }\n .bg-gray-1 {\n background-color: #222 !important;\n }\n .color-gray-2 {\n color: #343434 !important;\n }\n .bg-gray-2 {\n background-color: #343434 !important;\n }\n .color-gray-3 {\n color: #343434 !important;\n }\n .bg-gray-3 {\n background-color: #343434 !important;\n }\n .color-gray-4 {\n color: #767676 !important;\n }\n .bg-gray-4 {\n background-color: #767676 !important;\n }\n .color-gray-5 {\n color: #9b9b9b !important;\n }\n .bg-gray-5 {\n background-color: #444 !important;\n }\n .color-gray-6 {\n color: #afafaf !important;\n }\n .bg-gray-6 {\n background-color: #343434 !important;\n }\n .color-gray-7 {\n color: #afafaf !important;\n }\n .bg-gray-7 {\n background-color: #afafaf !important;\n }\n .color-gray-8 {\n color: #c6c6c6 !important;\n }\n .bg-gray-8 {\n background-color: #222 !important;\n }\n .color-gray-9 {\n color: #c6c6c6 !important;\n }\n .bg-gray-9 {\n background-color: #181818 !important;\n }\n .color-blue-0 {\n color: #182030 !important;\n }\n .bg-blue-0 {\n background-color: #182030 !important;\n }\n .color-blue-1 {\n color: #182030 !important;\n }\n .bg-blue-1 {\n background-color: #182030 !important;\n }\n .bg-blue-2 {\n background-color: #246 !important;\n }\n .color-blue-3 {\n color: #4f8cc9 !important;\n }\n .bg-blue-3 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-4 {\n color: #4f8cc9 !important;\n }\n .bg-blue-4 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-5 {\n color: #4f8cc9 !important;\n }\n .bg-blue-5 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-6 {\n color: #4f8cc9 !important;\n }\n .bg-blue-6 {\n background-color: #4f8cc9 !important;\n }\n .color-blue-7 {\n color: rgba(79, 140, 201, .5) !important;\n }\n .bg-blue-7 {\n background-color: rgba(79, 140, 201, .5) !important;\n }\n .color-blue-8 {\n color: #9daccc !important;\n }\n .bg-blue-8 {\n background-color: #182030 !important;\n }\n .color-blue-9 {\n color: #c6c6c6 !important;\n }\n .bg-blue-9 {\n background-color: #182030 !important;\n }\n .color-green-0 {\n color: #002800 !important;\n }\n .bg-green-0 {\n background-color: #002800 !important;\n }\n .color-green-1 {\n color: #002800 !important;\n }\n .bg-green-1 {\n background-color: #002800 !important;\n }\n .color-green-2 {\n color: #040 !important;\n }\n .bg-green-2 {\n background-color: #040 !important;\n }\n .color-green-3 {\n color: #040 !important;\n }\n .bg-green-3 {\n background-color: #040 !important;\n }\n .color-green-4 {\n color: #373 !important;\n }\n .bg-green-4 {\n background-color: #373 !important;\n }\n .color-green-5 {\n color: #484 !important;\n }\n .bg-green-5 {\n background-color: #484 !important;\n }\n .color-green-6 {\n color: #6cc644 !important;\n }\n .bg-green-6 {\n background-color: #6cc644 !important;\n }\n .color-green-7 {\n color: #6cc644 !important;\n }\n .bg-green-7 {\n background-color: #6cc644 !important;\n }\n .color-green-8 {\n color: #6cc644 !important;\n }\n .bg-green-8 {\n background-color: #6cc644 !important;\n }\n .color-green-9 {\n color: #6cc644 !important;\n }\n .bg-green-9 {\n background-color: #6cc644 !important;\n }\n .color-yellow-0 {\n color: #261d08 !important;\n }\n .bg-yellow-0 {\n background-color: #261d08 !important;\n }\n .color-yellow-1 {\n color: #261d08 !important;\n }\n .bg-yellow-1 {\n background-color: #261d08 !important;\n }\n .color-yellow-2 {\n color: #651 !important;\n }\n .bg-yellow-2 {\n background-color: #651 !important;\n }\n .color-yellow-3 {\n color: #cb4 !important;\n }\n .bg-yellow-3 {\n background-color: #cb4 !important;\n }\n .color-yellow-4 {\n color: #cb4 !important;\n }\n .bg-yellow-4 {\n background-color: #cb4 !important;\n }\n .color-yellow-5 {\n color: #cb4 !important;\n }\n .bg-yellow-5 {\n background-color: #cb4 !important;\n }\n .color-yellow-6 {\n color: #cb4 !important;\n }\n .bg-yellow-6 {\n background-color: #cb4 !important;\n }\n .color-yellow-7 {\n color: #cb4 !important;\n }\n .bg-yellow-7 {\n background-color: #cb4 !important;\n }\n .color-yellow-8 {\n color: #cb4 !important;\n }\n .bg-yellow-8 {\n background-color: #cb4 !important;\n }\n .color-yellow-9 {\n color: #bba257 !important;\n }\n .bg-yellow-9 {\n background-color: #bba257 !important;\n }\n .color-orange-0 {\n color: #730 !important;\n }\n .bg-orange-0 {\n background-color: #730 !important;\n }\n .color-orange-1 {\n color: #730 !important;\n }\n .bg-orange-1 {\n background-color: #730 !important;\n }\n .color-orange-2 {\n color: #730 !important;\n }\n .bg-orange-2 {\n background-color: #730 !important;\n }\n .color-orange-3 {\n color: #730 !important;\n }\n .bg-orange-3 {\n background-color: #730 !important;\n }\n .color-orange-4 {\n color: #fb8532 !important;\n }\n .bg-orange-4 {\n background-color: #fb8532 !important;\n }\n .color-orange-5 {\n color: #fb8532 !important;\n }\n .bg-orange-5 {\n background-color: #fb8532 !important;\n }\n .color-orange-6 {\n color: #fb8532 !important;\n }\n .bg-orange-6 {\n background-color: #fb8532 !important;\n }\n .color-orange-7 {\n color: #f3582c !important;\n }\n .bg-orange-7 {\n background-color: #f3582c !important;\n }\n .color-orange-8 {\n color: #f3582c !important;\n }\n .bg-orange-8 {\n background-color: #f3582c !important;\n }\n .color-orange-9 {\n color: #f3582c !important;\n }\n .bg-orange-9 {\n background-color: #f3582c !important;\n }\n .color-red-0 {\n color: #300 !important;\n }\n .bg-red-0 {\n background-color: #300 !important;\n }\n .color-red-1 {\n color: #300 !important;\n }\n .bg-red-1 {\n background-color: #300 !important;\n }\n .color-red-2 {\n color: #d82828 !important;\n }\n .bg-red-2 {\n background-color: #d82828 !important;\n }\n .color-red-3 {\n color: #d82828 !important;\n }\n .bg-red-3 {\n background-color: #d82828 !important;\n }\n .color-red-4 {\n color: #d82828 !important;\n }\n .bg-red-4 {\n background-color: #d82828 !important;\n }\n .color-red-5 {\n color: #d82828 !important;\n }\n .bg-red-5 {\n background-color: #d82828 !important;\n }\n .color-red-6 {\n color: #d82828 !important;\n }\n .bg-red-6 {\n background-color: #d82828 !important;\n }\n .color-red-7 {\n color: #d82828 !important;\n }\n .bg-red-7 {\n background-color: #d82828 !important;\n }\n .color-red-8 {\n color: #f84848 !important;\n }\n .bg-red-8 {\n background-color: #f84848 !important;\n }\n .color-red-9 {\n color: #f84848 !important;\n }\n .bg-red-9 {\n background-color: #f84848 !important;\n }\n .color-purple-0 {\n color: #213 !important;\n }\n .bg-purple-0 {\n background-color: #213 !important;\n }\n .color-purple-1 {\n color: #53387a !important;\n }\n .bg-purple-1 {\n background-color: #53387a !important;\n }\n .color-purple-2 {\n color: #53387a !important;\n }\n .bg-purple-2 {\n background-color: #53387a !important;\n }\n .color-purple-3 {\n color: #53387a !important;\n }\n .bg-purple-3 {\n background-color: #53387a !important;\n }\n .color-purple-4 {\n color: #53387a !important;\n }\n .bg-purple-4 {\n background-color: #53387a !important;\n }\n .color-purple-5 {\n color: #73589a !important;\n }\n .bg-purple-5 {\n background-color: #73589a !important;\n }\n .color-purple-6 {\n color: #73589a !important;\n }\n .bg-purple-6 {\n background-color: #73589a !important;\n }\n .color-purple-7 {\n color: #9378ba !important;\n }\n .bg-purple-7 {\n background-color: #9378ba !important;\n }\n .color-purple-8 {\n color: #9378ba !important;\n }\n .bg-purple-8 {\n background-color: #9378ba !important;\n }\n .color-purple-9 {\n color: #9378ba !important;\n }\n .bg-purple-9 {\n background-color: #9378ba !important;\n }\n .color-pink-0 {\n color: #170711 !important;\n }\n .bg-pink-0 {\n background-color: #170711 !important;\n }\n .color-pink-1 {\n color: #170711 !important;\n }\n .bg-pink-1 {\n background-color: #170711 !important;\n }\n .color-pink-2 {\n color: #170711 !important;\n }\n .bg-pink-2 {\n background-color: #170711 !important;\n }\n .color-pink-3 {\n color: #c49 !important;\n }\n .bg-pink-3 {\n background-color: #c49 !important;\n }\n .color-pink-4 {\n color: #c49 !important;\n }\n .bg-pink-4 {\n background-color: #c49 !important;\n }\n .color-pink-5 {\n color: #c49 !important;\n }\n .bg-pink-5 {\n background-color: #c49 !important;\n }\n .color-pink-6 {\n color: #e6b !important;\n }\n .bg-pink-6 {\n background-color: #e6b !important;\n }\n .color-pink-7 {\n color: #e6b !important;\n }\n .bg-pink-7 {\n background-color: #e6b !important;\n }\n .color-pink-8 {\n color: #e6b !important;\n }\n .bg-pink-8 {\n background-color: #e6b !important;\n }\n .color-pink-9 {\n color: #e6b !important;\n }\n .bg-pink-9 {\n background-color: #e6b !important;\n }\n .text-blue {\n color: #4f8cc9 !important;\n }\n .text-red {\n color: #d82828 !important;\n }\n .text-gray-light {\n color: #9b9b9b !important;\n }\n .text-gray {\n color: #afafaf !important;\n }\n .text-gray-dark {\n color: #c6c6c6 !important;\n }\n .text-green {\n color: #484 !important;\n }\n .text-yellow {\n color: #cb4 !important;\n }\n .text-orange {\n color: #f3582c !important;\n }\n .text-orange-light {\n color: #fb8532 !important;\n }\n .text-purple {\n color: #73589a !important;\n }\n .text-pink {\n color: #c49 !important;\n }\n .text-white {\n color: #fff !important;\n }\n .link-gray {\n color: #afafaf !important;\n }\n .link-gray:hover {\n color: #4f8cc9 !important;\n }\n .link-gray-dark {\n color: #c6c6c6 !important;\n }\n .link-gray-dark:hover, .link-hover-blue:hover {\n color: #4f8cc9 !important;\n }\n .muted-link {\n color: #afafaf !important;\n }\n .muted-link:hover {\n color: #4f8cc9 !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .details-overlay-dark[open] > summary::before {\n background-color: rgba(220, 220, 220, .5);\n }\n .lead {\n color: #afafaf;\n }\n .text-emphasized {\n color: #c6c6c6;\n }\n .text-shadow-dark {\n text-shadow: 0 1px 1px rgba(220, 220, 220, .25), 0 1px 25px rgba(27, 31, 35, .75);\n }\n .text-shadow-light {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n .flash {\n color: #9daccc;\n background-color: #182030;\n border-color: rgba(220, 220, 220, .15);\n }\n .flash-close {\n background: none;\n }\n .flash-warn {\n color: #bba257;\n background-color: #261d08;\n }\n .flash-error, .flash-warn {\n border-color: rgba(220, 220, 220, .15);\n }\n .flash-error {\n color: #f84848;\n background-color: #300;\n }\n .flash-success {\n color: #6cc644;\n background-color: #002800;\n border-color: rgba(220, 220, 220, .15);\n }\n .warning {\n background-color: #261d08;\n }\n .avatar-child {\n box-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n }\n .avatar-child, .AvatarStack-body {\n background-color: #181818;\n }\n .AvatarStack-body .avatar {\n background-color: #181818;\n border-right-color: var(--ghd-bg-color);\n }\n .avatar.avatar-more {\n background-color: #222;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before {\n outline: 1px solid #181818;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before,\n .AvatarStack--right .avatar.avatar-more {\n background-color: #343434;\n }\n .AvatarStack--right .avatar.avatar-more::after {\n background-color: #222;\n }\n .AvatarStack--right .avatar {\n border-left-color: var(--ghd-bg-color);\n }\n .DashedConnection::before {\n border-bottom-color: #343434;\n }\n .blankslate code {\n background-color: #181818;\n border-color: #2c2c2c;\n }\n .blankslate-icon {\n color: #767676;\n }\n .branch-name {\n color: rgba(230, 230, 230, .6);\n background-color: #182030;\n }\n .branch-name .octicon {\n color: #767676;\n }\n a.branch-name {\n color: #4f8cc9;\n }\n .dropdown-menu {\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: 0 1px 15px #000;\n }\n .dropdown-menu::before {\n border-bottom-color: rgba(220, 220, 220, .15);\n }\n .dropdown-menu::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .dropdown-item {\n color: #c6c6c6;\n }\n .dropdown-item:focus, .dropdown-item:hover {\n color: #fff;\n background-color: #4f8cc9;\n }\n .dropdown-signout {\n background: none;\n }\n .dropdown-divider {\n border-top-color: #343434;\n }\n .dropdown-header {\n color: #afafaf;\n }\n .dropdown-menu-w::before {\n border-left-color: rgba(220, 220, 220, .15);\n }\n .dropdown-menu-w::after {\n border-left-color: var(--ghd-bg-color);\n }\n .dropdown-menu-e::before {\n border-right-color: rgba(220, 220, 220, .15);\n }\n .dropdown-menu-e::after {\n border-right-color: var(--ghd-bg-color);\n }\n .dropdown-menu-ne::before {\n border-top-color: rgba(220, 220, 220, .15);\n }\n .dropdown-menu-ne::after {\n border-top-color: var(--ghd-bg-color);\n }\n .dropdown-menu-dark {\n color: #fff;\n background-color: #222;\n border-color: #afafaf;\n box-shadow: 0 1px 15px #000;\n }\n .dropdown-menu-dark::before {\n border-bottom-color: #afafaf;\n }\n .dropdown-menu-dark::after {\n border-bottom-color: #282828;\n }\n .dropdown-menu-dark .dropdown-header {\n color: #343434;\n }\n .dropdown-menu-dark .dropdown-divider {\n border-top-color: #afafaf;\n }\n .dropdown-menu-dark.dropdown-menu-w::before {\n border-color: transparent transparent transparent #afafaf;\n }\n .dropdown-menu-dark.dropdown-menu-w::after {\n border-color: transparent transparent transparent #282828;\n }\n .dropdown-menu-dark.dropdown-menu-e::before {\n border-color: transparent #afafaf transparent transparent;\n }\n .dropdown-menu-dark.dropdown-menu-e::after {\n border-color: transparent #282828 transparent transparent;\n }\n .dropdown-menu-dark.dropdown-menu-ne::before {\n border-color: #afafaf transparent transparent;\n }\n .dropdown-menu-dark.dropdown-menu-ne::after {\n border-color: #282828 transparent transparent;\n }\n .Header-link {\n color: #fff;\n }\n .Header-link:focus, .Header-link:hover {\n color: hsla(0, 0%, 0%, .7);\n }\n .label, .Label {\n color: #fff;\n }\n .Label--gray {\n color: #afafaf;\n background-color: #2c2c2c;\n }\n .Label--outline {\n color: #afafaf;\n background-color: transparent;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .Label--outline-green {\n color: #484;\n border-color: #373;\n }\n .Label--gray-darker {\n background-color: #444;\n }\n .Label--orange {\n background-color: #f3582c;\n }\n .state, .State {\n color: #fff;\n background-color: #444;\n }\n .State--green {\n background-color: #373;\n }\n .State--purple {\n background-color: #73589a;\n }\n .State--red {\n background-color: #d82828;\n }\n .Counter {\n color: #afafaf;\n }\n .Counter, .Counter--gray-light {\n background-color: rgba(220, 220, 220, .15);\n }\n .Counter--gray-light {\n color: #c6c6c6;\n }\n .Counter--gray {\n color: #fff;\n background-color: #444;\n }\n .diffstat {\n color: #afafaf;\n }\n .diffstat-block-deleted {\n background-color: #d82828;\n }\n .diffstat-block-added {\n background-color: #373;\n }\n .diffstat-block-neutral {\n background-color: #343434;\n }\n .markdown-body kbd {\n color: #afafaf;\n background-color: #181818;\n border-color: #343434;\n box-shadow: inset 0 -1px 0 #343434;\n }\n .markdown-body .absent {\n color: #d82828;\n }\n .markdown-body hr {\n background-color: #343434;\n }\n .markdown-body blockquote {\n color: #9b9b9b;\n border-left-color: #343434;\n }\n .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link,\n .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link,\n .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link {\n color: #dcdcdc;\n }\n .markdown-body h1, .markdown-body h2 {\n border-bottom-color: #2c2c2c;\n }\n .markdown-body h6 {\n color: #9b9b9b;\n }\n .markdown-body table td, .markdown-body table th {\n border-color: #343434;\n }\n .markdown-body table tr {\n background-color: #181818;\n border-top-color: #767676;\n }\n .markdown-body table tr:nth-child(2n) {\n background-color: #222;\n }\n .markdown-body table img {\n background-color: transparent;\n }\n .markdown-body img {\n background-color: #181818;\n }\n .markdown-body .emoji {\n background-color: transparent;\n }\n .markdown-body span.frame > span {\n border-color: #343434;\n }\n .markdown-body span.frame span span {\n color: #c6c6c6;\n }\n .markdown-body code, .markdown-body tt {\n background-color: rgba(220, 220, 220, .05);\n }\n .markdown-body pre > code {\n background-color: transparent;\n }\n .markdown-body .highlight pre, .markdown-body pre {\n background-color: #222;\n }\n .markdown-body pre code, .markdown-body pre tt {\n background-color: transparent;\n }\n .markdown-body .csv-data .blob-num {\n background-color: #181818;\n }\n .markdown-body .csv-data th {\n background-color: #222;\n }\n .Popover-message::before {\n border-bottom-color: rgba(220, 220, 220, .15);\n }\n .Popover-message::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .Popover-message--bottom-left::before,\n .Popover-message--bottom-right::before, .Popover-message--bottom::before {\n border-top-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--bottom-left::after, .Popover-message--bottom-right::after,\n .Popover-message--bottom::after {\n border-top-color: var(--ghd-bg-color);\n }\n .Popover-message--right-bottom::before, .Popover-message--right-top::before,\n .Popover-message--right::before {\n border-left-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--right-bottom::after, .Popover-message--right-top::after,\n .Popover-message--right::after {\n border-left-color: var(--ghd-bg-color);\n }\n .Popover-message--left-bottom::before, .Popover-message--left-top::before,\n .Popover-message--left::before {\n border-right-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--left-bottom::after, .Popover-message--left-top::after,\n .Popover-message--left::after {\n border-right-color: var(--ghd-bg-color);\n }\n .Progress {\n background-color: #343434;\n }\n .SelectMenu::before {\n background-color: rgba(220, 220, 220, .5);\n }\n .SelectMenu-modal {\n background-color: #222;\n }\n @media (min-width: 544px) {\n .SelectMenu-modal {\n border-color: #343434;\n box-shadow: 0 1px 5px #000;\n }\n }\n .SelectMenu-closeButton {\n color: #9b9b9b;\n background-color: transparent;\n }\n .SelectMenu-filter, .SelectMenu-list {\n border-top-color: #343434;\n }\n .SelectMenu-item, .SelectMenu-list {\n background-color: #181818;\n }\n .SelectMenu-item {\n color: #afafaf;\n }\n .SelectMenu-item + .SelectMenu-item {\n border-top-color: #2c2c2c;\n }\n .SelectMenu-tabs {\n border-top-color: #343434;\n }\n .SelectMenu-tab {\n color: #9b9b9b;\n background-color: transparent;\n box-shadow: inset 0 -1px 0 #343434;\n }\n .SelectMenu-tab[aria-selected=\"true\"] {\n color: #c6c6c6;\n background-color: #181818;\n box-shadow: 0 0 0 1px #343434;\n }\n @media (min-width: 544px) {\n .SelectMenu-tab[aria-selected=\"true\"] {\n border-color: #343434;\n box-shadow: none;\n }\n }\n .SelectMenu-blankslate, .SelectMenu-loading, .SelectMenu-message {\n background-color: #181818;\n }\n .SelectMenu-divider {\n background-color: #222;\n border-bottom-color: #343434;\n }\n .SelectMenu-divider, .SelectMenu-footer {\n color: #9b9b9b;\n border-top-color: #343434;\n }\n .SelectMenu--hasFilter .SelectMenu-item:last-child {\n box-shadow: 0 1px 0 #2c2c2c;\n }\n .SelectMenu-item[aria-checked=\"true\"] {\n color: #c6c6c6;\n }\n @media (hover: hover) {\n .SelectMenu-item:hover, body:not(.intent-mouse) .SelectMenu-item:focus {\n color: #fff;\n background-color: #4f8cc9;\n }\n .SelectMenu-item:active {\n color: #fff;\n background-color: #4f8cc9;\n }\n body:not(.intent-mouse) .SelectMenu-tab:focus {\n background-color: #182030;\n }\n .SelectMenu-tab:not([aria-checked=\"true\"]):hover {\n color: #c6c6c6;\n background-color: #343434;\n }\n .SelectMenu-tab:not([aria-checked=\"true\"]):active {\n color: #c6c6c6;\n background-color: #222;\n }\n }\n @media (hover: none) {\n .SelectMenu-item:active, .SelectMenu-item:focus {\n background-color: #181818;\n }\n .SelectMenu-item {\n -webkit-tap-highlight-color: rgba(90, 90, 90, .5);\n }\n }\n .Subhead {\n border-bottom-color: #343434;\n }\n .Subhead-heading--danger {\n color: #d82828;\n }\n .Subhead-description {\n color: #afafaf;\n }\n .TimelineItem::before {\n background-color: #343434;\n }\n .TimelineItem:target .TimelineItem-badge {\n border-color: #4f8cc9;\n box-shadow: 0 0 .2em #246;\n }\n .TimelineItem-badge {\n color: #afafaf;\n background-color: #343434;\n border-color: var(--ghd-bg-color);\n }\n .TimelineItem-body {\n color: #afafaf;\n }\n .TimelineItem-break {\n background-color: #181818;\n border-top-color: #343434;\n }\n .TimelineItem--condensed .TimelineItem-badge {\n color: #767676;\n background-color: #181818;\n }\n .Toast {\n color: #dcdcdc;\n background-color: #181818;\n box-shadow: inset 0 0 0 1px #343434, 0 1px 5px #000;\n }\n .Toast-icon {\n color: #fff;\n background-color: #4f8cc9;\n }\n .Toast-dismissButton {\n background-color: transparent;\n }\n .Toast-dismissButton:focus, .Toast-dismissButton:hover {\n color: #afafaf;\n }\n .Toast-dismissButton:active {\n color: #767676;\n }\n .Toast--error .Toast-icon {\n background-color: #d82828;\n }\n .Toast--warning .Toast-icon {\n color: #c6c6c6;\n background-color: #cb4;\n }\n .Toast--success .Toast-icon {\n background-color: #484;\n }\n .Toast--loading .Toast-icon {\n background-color: #343434;\n }\n .pullquote {\n color: #afafaf;\n border-left-color: #343434;\n }\n .btn-mktg {\n color: #fff;\n border: 1px solid #4f8cc9;\n }\n .btn-mktg, .btn-mktg:hover {\n background-color: #4f8cc9;\n }\n .btn-mktg:hover {\n border-color: #4f8cc9;\n }\n .btn-mktg:focus {\n box-shadow: 0 0 0 .2em rgba(79, 140, 201, .5);\n }\n .btn-primary-mktg:hover {\n background-color: #484;\n border-color: #484;\n }\n .btn-outline-mktg, .btn-outline-mktg:hover {\n color: #4f8cc9;\n background-color: transparent;\n }\n .btn-outline-mktg:hover {\n border-color: #4f8cc9;\n }\n .btn-transparent {\n color: #fff;\n background-color: transparent;\n background-image: none;\n border-color: hsla(0, 0%, 0%, .5);\n }\n .btn-transparent:active, .btn-transparent:hover {\n color: #c6c6c6;\n background-color: #181818;\n background-image: none;\n border-color: var(--ghd-bg-color);\n }\n .alpha-badge {\n color: #fff;\n background-color: #4f8cc9;\n }\n .graphiql-ide {\n border-top-color: #343434;\n }\n .graphiql-ide.signed-out::after {\n background-color: #343434;\n }\n /* end graphql.github.com rules */\n /* manual overrides */\n .btn.hover, .btn:hover {\n background-color: #282828;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n }\n .graphiql-container .show-btn {\n border: solid 1px #343434;\n background: #222;\n color: #c6c6c6;\n }\n .graphiql-container .doc-deprecation {\n box-shadow: inset 0 0 1px #cb4;\n background: #261d08;\n color: #ddd;\n }\n .graphiql-container .doc-deprecation::before {\n color: #cb4;\n }\n .graphiql-container .docExplorerShow, .graphiql-container .historyShow,\n .graphiql-container .topBar {\n background: #222;\n }\n .graphiql-container .docExplorerShow {\n border-left: 1px solid #444;\n }\n .graphiql-container .toolbar-button, .graphiql-container .execute-button {\n box-shadow: none;\n }\n .graphiql-container .toolbar-button:hover,\n .graphiql-container .execute-button:hover {\n background: #343434;\n }\n .graphiql-explorer-root input[style*=\"color: rgb(210, 5, 78)\"] {\n border-color: currentcolor currentcolor #999 !important;\n background-color: #181818;\n }\n .graphiql-container .search-box input {\n background-color: #181818;\n }\n .graphiql-explorer-node span[style*=\"color: rgb(31, 97, 160)\"] {\n color: #4f8cc9 !important;\n }\n .graphiql-explorer-node span[style*=\"color: rgb(139, 43, 185)\"] {\n color: #9a6cdf !important;\n }\n #graphiql svg path[d*=\"2V16H2V2H16ZM16\"][fill=\"#CCC\"] {\n fill: #444;\n }\n #graphiql svg path[d*=\"0H2C0.9\"][fill=\"#666\"] {\n fill: #777;\n }\n .graphiql-ide.signed-out::after {\n background: #333;\n }\n .graphiql-container .CodeMirror-foldmarker {\n background: #4f8cc9 !important;\n }\n .graphiql-container .execute-button svg {\n fill: currentColor !important;\n }\n .graphiql-container div[style*=\"color: rgb(177, 26, 4)\"] {\n color: rgb(215, 38, 13) !important;\n }\n .graphiql-explorer-root input[style*=\"border-color: currentcolor currentcolor rgb(136, 136, 136)\"] {\n border-color: currentcolor currentcolor #999 !important;\n background-color: #000 !important;\n }\n .graphiql-container select[style*=\"background-color: white;\"] {\n background-color: #181818 !important;\n border-color: #444;\n }", + "start": 1155265, + "domains": [ + "graphql.github.com" + ] + }, + { + "code": "img[src*=\"security-vulnerability.svg\"],\n img[src*=\"security-vulnerability-alert.svg\"], img[src*=\"security-policy.svg\"],\n img[src*=\"security-workspace-bg.svg\"],\n img[src*=\"security-workspace-comment-1.svg\"],\n img[src*=\"security-workspace-comment-2.svg\"],\n img[src*=\"security-workspace-changes.svg\"],\n img[src*=\"security-workspace-merge.svg\"], .section-security-alerts svg,\n img[src*=\"security-dependabot.svg\"], img.security-pr-merge,\n .section-security-patches-graph, img[src*=\"security-token-scanning.svg\"],\n img[src*=\"security-lgtm-vulnerability.svg\"],\n img[src*=\"security-lgtm-alert.svg\"], .actions-pr-checks {\n filter: invert(90%) hue-rotate(-180deg) !important;\n }\n .section-actions-hero .actions-hero-bg, .section-actions-hero .actions-hero {\n filter: invert(1) contrast(70%) brightness(80%);\n }\n .section-security-alerts-graph svg, .section-security-patches-graph {\n filter: none !important;\n }\n [style=\"background: #fff; box-shadow: 0 10px 50px 30px #fff;\"] {\n background: none !important;\n box-shadow: none !important;\n }\n [stroke=\"#E1E4E8\"] {\n stroke: #484848;\n }\n [stroke=\"#B08800\"] {\n stroke: #652;\n }\n [fill=\"#FFFDEF\"] {\n fill: #321;\n }\n [fill=\"#6A737D\"] {\n fill: #444;\n }\n [fill=\"white\"]:not([d*=\"M279.27\"]) {\n fill: #111;\n }\n [fill=\"black\"] {\n fill: #eee;\n }\n svg.security-hero, .actions-hero {\n filter: brightness(200%) contrast(80%);\n }\n .section-actions-workflow-logs::before, .actions-pricing-private::before {\n filter: brightness(60%);\n }", + "start": 1204445, + "regexps": [ + "^https?://github\\.com/features/(security|actions)" + ] + }, + { + "code": "img[src*=\"img-\"], img[src*=\"security\"] {\n filter: invert(90%) hue-rotate(-180deg) !important;\n }\n img[src*=\"img-share-achievements.png\"] {\n filter: invert(100%) hue-rotate(-85deg) !important;\n }\n .jumbotron-codelines {\n color: #dcdcdc;\n }", + "start": 1206050, + "regexps": [ + "^https?://github\\.com/(features|security).*" + ] + }, + { + "code": "h1, h2, h3, h4, h5, h6 {\n color: #c6c6c6;\n }\n .bg-dots-gray {\n opacity: .2;\n }", + "start": 1206355, + "domains": [ + "resources.github.com" + ] + }, + { + "code": "header img[src*=\"logo\"] {\n opacity: .7;\n }\n article h2 {\n color: #c6c6c6;\n }\n ol.toc > li a.active {\n color: #aaa;\n }", + "start": 1206492, + "domains": [ + "guides.github.com" + ] + }, + { + "code": "* {\n box-sizing: border-box;\n }\n body {\n color: #e0e0e0;\n background-color: #202020;\n background-image: var(--ghd-bg-img);\n background-clip: border-box;\n background-origin: padding-box;\n background-attachment: scroll;\n background-repeat: repeat !important;\n background-size: auto !important;\n background-position: left top !important;\n }\n .markdown-body img {\n background-color: #181818;\n background: none;\n }\n a {\n color: #4f8cc9;\n background-color: transparent;\n }\n .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4,\n .markdown-body h5, .markdown-body h6 {\n border-bottom: 1px solid #444;\n }\n .border-gray-light, hr {\n border-color: #444 !important;\n }\n .markdown-body table th, .markdown-body table td {\n border: 1px solid #444;\n }\n .text-gray {\n color: #aaa !important;\n }\n .markdown-body table tr {\n background-color: #181818;\n border-top: 1px solid #444;\n }\n .markdown-body table tr:nth-child(2n) {\n background-color: #202020;\n }\n /* style 404 page e.g. http://stylishthemes.github.io/ */\n p {\n color: #bebebe;\n }\n #suggestions a {\n color: #9e9e9e;\n }", + "start": 1206679, + "domains": [ + "stylishthemes.github.io" + ] + }, + { + "code": ".bg-blue-4, .illflow-blue .selected {\n background: #182030 !important;\n }", + "start": 1207916, + "urlPrefixes": [ + "https?://github.com/personal" + ] + }, + { + "code": ".btn-blue {\n background-image: linear-gradient(-180deg, rgba(79, 140, 201, 1), rgba(79, 140, 201, .9) 90%) !important;\n }\n .btn-blue.hover, .btn.btn-blue:hover {\n background-image: linear-gradient(-180deg, rgba(79, 140, 201, .9), rgba(79, 140, 201, .8) 90%) !important;\n border-color: rgba(79, 140, 201, .3) !important;\n }", + "start": 1208064, + "regexps": [ + "^https?://(education|lab)\\.github\\.com" + ] + }, + { + "code": "svg {\n background: var(--ghd-code-background);\n }\n svg #surface1 g[style*=\"fill\"] {\n fill: var(--ghd-code-color) !important;\n }", + "start": 1208489, + "regexps": [ + "^https?://(render)\\.githubusercontent\\.com\\/render\\/math.*" + ] + }, + { + "code": "svg {\n background: var(--ghd-code-background);\n }", + "start": 1208684, + "domains": [ + "camo.githubusercontent.com" + ] + }, + { + "code": "/* Styles the payment form iframe */\n body, label {\n background: transparent !important;\n color: #bebebe !important;\n }\n input, select {\n background: #181818 !important;\n color: #bebebe !important;\n border-color: #343434 !important;\n }\n select {\n background: #181818 url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAQAAAAua3X8AAAARklEQVR4AWNABWcazjQg8zGl/wNhA15piBL80gglmNKYSjClMZUgpDGVwKXxKBl4QNiRBLxJIKAIBzXhyCIc3YQTDMEkBwBplPJRxEMa4wAAAABJRU5ErkJggg==\") no-repeat right 8px center !important;\n background-size: 8px 10px !important;\n }\n input:focus, select:focus {\n border-color: #4f8cc9 !important;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075), 0 0 2px #4f8cc9 !important;\n outline-color: #4f8cc9 !important;\n }\n .btn-submit {\n background-color: #373;\n background-image: none;\n border-color: rgba(220, 220, 220, .15);\n }\n .btn-submit:hover {\n background-color: #484;\n background-image: none;\n }\n .popup, #z_hppm_iframe {\n background-color: var(--ghd-bg-color);\n }\n /* fix top white line */\n .whitespace {\n margin: -1px !important;\n }", + "start": 1208810, + "regexps": [ + "^https?://www\\.zuora\\.com.*github\\.com.*" + ] + }, + { + "code": "/* begin render.githubusercontent.com rules */\n .slider .slider-track {\n border-top-color: var(--ghd-bg-color);\n }\n .slider .dragger:active, .slider .dragger:hover {\n color: #2c2c2c;\n }\n .swipe .swipe-frame .swipe-shell {\n border-left-color: #767676;\n }\n .onion-skin .controls .slider {\n background-color: transparent;\n }\n :root, [data-color-mode=light] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #9b9b9b;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #181818;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: rgba(220, 220, 220, .6);\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: #4f8cc9;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-tabnav-selected-bg: #181818;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: #4f8cc9;\n --color-previewable-comment-form-border: #767676;\n --color-previewable-comment-form-bg: #181818;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #9b9b9b;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #181818;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: rgba(220, 220, 220, .6);\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: #4f8cc9;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-tabnav-selected-bg: #181818;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: #4f8cc9;\n --color-previewable-comment-form-border: #767676;\n --color-previewable-comment-form-bg: #181818;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n [data-color-mode=dark] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n }\n }\n .render-view-modes, .render-view-modes li {\n background: none;\n }\n .hide-text {\n background-color: transparent;\n }\n @media print {\n * {\n color: #f0f0f0 !important;\n background-color: transparent !important;\n box-shadow: none !important;\n }\n blockquote, pre {\n border-color: #767676;\n }\n }\n body {\n color: #f0f0f0;\n }\n .img-polaroid {\n background-color: #181818;\n }\n .muted, h1 small, h2 small, h3 small, h4 small, h5 small, h6 small {\n color: #767676;\n }\n .page-header {\n border-bottom-color: #2c2c2c;\n }\n abbr[data-original-title], abbr[title] {\n border-bottom-color: #767676;\n }\n blockquote {\n border-left-color: #2c2c2c;\n }\n blockquote small {\n color: #767676;\n }\n blockquote.pull-right {\n border-right-color: #2c2c2c;\n }\n code, pre {\n color: #c6c6c6;\n }\n pre {\n background-color: #222;\n }\n pre code {\n background-color: transparent;\n }\n legend {\n color: #c6c6c6;\n border-bottom-color: #343434;\n }\n legend small {\n color: #767676;\n }\n .uneditable-input, input[type=color], input[type=date],\n input[type=datetime-local], input[type=datetime], input[type=email],\n input[type=month], input[type=number], input[type=password],\n input[type=search], input[type=tel], input[type=text], input[type=time],\n input[type=url], input[type=week], select, textarea {\n color: #afafaf;\n }\n .uneditable-input, input[type=color], input[type=date],\n input[type=datetime-local], input[type=datetime], input[type=email],\n input[type=month], input[type=number], input[type=password],\n input[type=search], input[type=tel], input[type=text], input[type=time],\n input[type=url], input[type=week], select, textarea {\n background-color: #181818;\n border-color: #5a5a5a;\n }\n .uneditable-input, .uneditable-textarea {\n color: #767676;\n background-color: #1d1d1d;\n border-color: #5a5a5a;\n }\n input:-moz-placeholder, textarea:-moz-placeholder {\n color: #767676;\n }\n input:-ms-input-placeholder, textarea:-ms-input-placeholder {\n color: #767676;\n }\n input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {\n color: #767676;\n }\n input[disabled], input[readonly], select[disabled], select[readonly],\n textarea[disabled], textarea[readonly] {\n background-color: #2c2c2c;\n }\n input[type=checkbox][disabled], input[type=checkbox][readonly],\n input[type=radio][disabled], input[type=radio][readonly] {\n background-color: transparent;\n }\n .form-actions {\n background-color: #222;\n border-top-color: #343434;\n }\n .input-append .add-on, .input-prepend .add-on {\n text-shadow: 0 1px 0 #181818;\n background-color: #2c2c2c;\n border-color: #5a5a5a;\n }\n table {\n background-color: transparent;\n }\n .table tbody + tbody, .table td, .table th {\n border-top-color: #343434;\n }\n .table .table {\n background-color: #181818;\n }\n .table-bordered {\n border-color: #343434;\n }\n .table-bordered td, .table-bordered th {\n border-left-color: #343434;\n }\n .table-striped tbody > tr:nth-child(odd) > td,\n .table-striped tbody > tr:nth-child(odd) > th {\n background-color: #181818;\n }\n .table-hover tbody tr:hover > td, .table-hover tbody tr:hover > th {\n background-color: #222;\n }\n .caret {\n border-top-color: #f0f0f0;\n }\n .dropdown-menu {\n background-color: #181818;\n }\n .dropdown-menu .divider {\n background-color: #343434;\n border-bottom-color: var(--ghd-bg-color);\n }\n .dropdown-menu > li > a {\n color: #c6c6c6;\n }\n .dropdown-menu > .active > a, .dropdown-menu > .active > a:focus,\n .dropdown-menu > .active > a:hover, .dropdown-menu > li > a:focus,\n .dropdown-menu > li > a:hover, .dropdown-submenu:focus > a,\n .dropdown-submenu:hover > a {\n color: #fff;\n }\n .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:focus,\n .dropdown-menu > .disabled > a:hover {\n color: #767676;\n }\n .dropdown-menu > .disabled > a:focus, .dropdown-menu > .disabled > a:hover {\n background-color: transparent;\n background-image: none;\n }\n .dropup .caret, .navbar-fixed-bottom .dropdown .caret {\n border-bottom-color: #f0f0f0;\n }\n .dropdown-submenu > a::after {\n border-left-color: #5a5a5a;\n }\n .dropdown-submenu:hover > a::after {\n border-left-color: var(--ghd-bg-color);\n }\n .well {\n background-color: #222;\n }\n .close {\n text-shadow: 0 1px 0 #181818;\n }\n .close, .close:focus, .close:hover {\n color: #f0f0f0;\n }\n button.close {\n background-color: transparent;\n }\n .btn {\n background-color: #222;\n background-image: linear-gradient(to bottom, #181818, #e6e6e6);\n border-color: #5a5a5a;\n -webkit-box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .2), 0 1px 2px rgba(0, 0, 0, .05);\n -moz-box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .2), 0 1px 2px rgba(0, 0, 0, .05);\n box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .2), 0 1px 2px rgba(0, 0, 0, .05);\n }\n .btn, .btn.active, .btn.disabled, .btn:active, .btn:focus, .btn:hover,\n .btn[disabled] {\n color: #c6c6c6;\n }\n .btn.active, .btn:active {\n background-image: none;\n box-shadow: inset 0 2px 4px #000, 0 1px 2px rgba(0, 0, 0, .05);\n }\n .btn.disabled, .btn[disabled] {\n background-image: none;\n box-shadow: none;\n }\n .btn-danger, .btn-danger.active, .btn-danger.disabled, .btn-danger:active,\n .btn-danger:focus, .btn-danger:hover, .btn-danger[disabled], .btn-info,\n .btn-info.active, .btn-info.disabled, .btn-info:active, .btn-info:focus,\n .btn-info:hover, .btn-info[disabled], .btn-primary, .btn-primary.active,\n .btn-primary.disabled, .btn-primary:active, .btn-primary:focus,\n .btn-primary:hover, .btn-primary[disabled], .btn-success,\n .btn-success.active, .btn-success.disabled, .btn-success:active,\n .btn-success:focus, .btn-success:hover, .btn-success[disabled], .btn-warning,\n .btn-warning.active, .btn-warning.disabled, .btn-warning:active,\n .btn-warning:focus, .btn-warning:hover, .btn-warning[disabled] {\n color: #fff;\n }\n .btn-inverse {\n color: #fff;\n background-image: linear-gradient(to bottom, #afafaf, #222);\n }\n .btn-inverse.active, .btn-inverse.disabled, .btn-inverse:active,\n .btn-inverse:focus, .btn-inverse:hover, .btn-inverse[disabled] {\n color: #fff;\n }\n .btn-link, .btn-link:active, .btn-link[disabled] {\n background-color: transparent;\n background-image: none;\n box-shadow: none;\n }\n .btn-link:focus, .btn-link:hover {\n background-color: transparent;\n }\n .btn-link[disabled]:focus, .btn-link[disabled]:hover {\n color: #c6c6c6;\n }\n .btn-group > .btn + .dropdown-toggle {\n -webkit-box-shadow: inset 1px 0 0 hsla(0, 0%, 0%, .125), inset 0 1px 0 hsla(0, 0%, 0%, .2), 0 1px 2px rgba(0, 0, 0, .05);\n -moz-box-shadow: inset 1px 0 0 hsla(0, 0%, 0%, .125), inset 0 1px 0 hsla(0, 0%, 0%, .2), 0 1px 2px rgba(0, 0, 0, .05);\n box-shadow: inset 1px 0 0 hsla(0, 0%, 0%, .125), inset 0 1px 0 hsla(0, 0%, 0%, .2), 0 1px 2px rgba(0, 0, 0, .05);\n }\n .btn-group.open .dropdown-toggle {\n background-image: none;\n box-shadow: inset 0 2px 4px #000, 0 1px 2px rgba(0, 0, 0, .05);\n }\n .btn-danger .caret, .btn-info .caret, .btn-inverse .caret,\n .btn-primary .caret, .btn-success .caret, .btn-warning .caret {\n border-top-color: var(--ghd-bg-color);\n border-bottom-color: var(--ghd-bg-color);\n }\n .alert {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n .nav > li > a:focus, .nav > li > a:hover {\n background-color: #2c2c2c;\n }\n .nav-header {\n color: #767676;\n }\n .nav-header, .nav-list .nav-header, .nav-list > li > a {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n .nav-list > .active > a, .nav-list > .active > a:focus,\n .nav-list > .active > a:hover {\n color: #fff;\n }\n .nav-list .divider {\n background-color: #343434;\n border-bottom-color: var(--ghd-bg-color);\n }\n .nav-tabs {\n border-bottom-color: #343434;\n }\n .nav-tabs > li > a:focus, .nav-tabs > li > a:hover {\n border-color: #2c2c2c #2c2c2c #343434;\n }\n .nav-tabs > .active > a, .nav-tabs > .active > a:focus,\n .nav-tabs > .active > a:hover {\n color: #afafaf;\n background-color: #181818;\n border-color: #343434;\n }\n .nav-pills > .active > a, .nav-pills > .active > a:focus,\n .nav-pills > .active > a:hover {\n color: #fff;\n }\n .nav-tabs.nav-stacked > li > a, .nav-tabs.nav-stacked > li > a:focus,\n .nav-tabs.nav-stacked > li > a:hover {\n border-color: #343434;\n }\n .nav .active .dropdown-toggle .caret {\n border-top-color: var(--ghd-bg-color);\n border-bottom-color: var(--ghd-bg-color);\n }\n .nav-tabs .active .dropdown-toggle .caret {\n border-top-color: #afafaf;\n border-bottom-color: #afafaf;\n }\n .nav-pills .open .dropdown-toggle, .nav-tabs .open .dropdown-toggle,\n .nav > li.dropdown.open.active > a:focus,\n .nav > li.dropdown.open.active > a:hover {\n color: #fff;\n background-color: #767676;\n border-color: #767676;\n }\n .nav li.dropdown.open.active .caret, .nav li.dropdown.open .caret,\n .nav li.dropdown.open a:focus .caret, .nav li.dropdown.open a:hover .caret {\n border-top-color: var(--ghd-bg-color);\n border-bottom-color: var(--ghd-bg-color);\n }\n .tabs-stacked .open > a:focus, .tabs-stacked .open > a:hover {\n border-color: #767676;\n }\n .tabs-below > .nav-tabs, .tabs-below > .nav-tabs > li > a:focus,\n .tabs-below > .nav-tabs > li > a:hover {\n border-top-color: #343434;\n }\n .tabs-below > .nav-tabs > .active > a,\n .tabs-below > .nav-tabs > .active > a:focus,\n .tabs-below > .nav-tabs > .active > a:hover {\n border-color: transparent #343434 #343434;\n }\n .tabs-left > .nav-tabs {\n border-right-color: #343434;\n }\n .tabs-left > .nav-tabs > li > a:focus, .tabs-left > .nav-tabs > li > a:hover {\n border-color: #2c2c2c #343434 #2c2c2c #2c2c2c;\n }\n .tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:focus,\n .tabs-left > .nav-tabs .active > a:hover {\n border-color: #343434 transparent #343434 #343434;\n }\n .tabs-right > .nav-tabs {\n border-left-color: #343434;\n }\n .tabs-right > .nav-tabs > li > a:focus,\n .tabs-right > .nav-tabs > li > a:hover {\n border-color: #2c2c2c #2c2c2c #2c2c2c #343434;\n }\n .tabs-right > .nav-tabs .active > a,\n .tabs-right > .nav-tabs .active > a:focus,\n .tabs-right > .nav-tabs .active > a:hover {\n border-color: #343434 #343434 #343434 transparent;\n }\n .nav > .disabled > a {\n color: #767676;\n }\n .nav > .disabled > a:focus, .nav > .disabled > a:hover {\n background-color: transparent;\n }\n .navbar-inner {\n background-image: linear-gradient(to bottom, #181818, #f2f2f2);\n }\n .navbar .brand {\n text-shadow: 0 1px 0 #181818;\n }\n .navbar-link:focus, .navbar-link:hover {\n color: #c6c6c6;\n }\n .navbar .divider-vertical {\n border-right-color: var(--ghd-bg-color);\n }\n .navbar .nav > li > a {\n text-shadow: 0 1px 0 #181818;\n }\n .navbar .nav > li > a:focus, .navbar .nav > li > a:hover {\n background-color: transparent;\n color: #c6c6c6;\n }\n .navbar .nav > .active > a, .navbar .nav > .active > a:focus,\n .navbar .nav > .active > a:hover {\n color: #afafaf;\n background-color: #343434;\n }\n .navbar .btn-navbar {\n color: #fff;\n background-image: linear-gradient(to bottom, #f2f2f2, #343434);\n -webkit-box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .1), 0 1px 0 rgba(255, 255, 255, .075);\n -moz-box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .1), 0 1px 0 rgba(255, 255, 255, .075);\n box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .1), 0 1px 0 rgba(255, 255, 255, .075);\n }\n .navbar .btn-navbar.active, .navbar .btn-navbar.disabled,\n .navbar .btn-navbar:active, .navbar .btn-navbar:focus,\n .navbar .btn-navbar:hover, .navbar .btn-navbar[disabled] {\n color: #fff;\n background-color: #343434;\n }\n .navbar .btn-navbar .icon-bar {\n background-color: #222;\n }\n .navbar .nav > li > .dropdown-menu::before {\n border-bottom-color: #5a5a5a;\n }\n .navbar .nav > li > .dropdown-menu::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .navbar-fixed-bottom .nav > li > .dropdown-menu::before {\n border-top-color: #5a5a5a;\n }\n .navbar-fixed-bottom .nav > li > .dropdown-menu::after {\n border-top-color: var(--ghd-bg-color);\n }\n .navbar .nav li.dropdown > a:focus .caret,\n .navbar .nav li.dropdown > a:hover .caret {\n border-top-color: #c6c6c6;\n border-bottom-color: #c6c6c6;\n }\n .navbar .nav li.dropdown.active > .dropdown-toggle,\n .navbar .nav li.dropdown.open.active > .dropdown-toggle,\n .navbar .nav li.dropdown.open > .dropdown-toggle {\n background-color: #343434;\n color: #afafaf;\n }\n .navbar .nav li.dropdown.active > .dropdown-toggle .caret,\n .navbar .nav li.dropdown.open.active > .dropdown-toggle .caret,\n .navbar .nav li.dropdown.open > .dropdown-toggle .caret {\n border-top-color: #afafaf;\n border-bottom-color: #afafaf;\n }\n .navbar-inverse .brand, .navbar-inverse .nav > li > a {\n color: #767676;\n }\n .navbar-inverse .brand:focus, .navbar-inverse .brand:hover,\n .navbar-inverse .nav > li > a:focus, .navbar-inverse .nav > li > a:hover {\n color: #fff;\n }\n .navbar-inverse .brand, .navbar-inverse .navbar-text {\n color: #767676;\n }\n .navbar-inverse .nav > li > a:focus, .navbar-inverse .nav > li > a:hover {\n background-color: transparent;\n color: #fff;\n }\n .navbar-inverse .nav .active > a, .navbar-inverse .nav .active > a:focus,\n .navbar-inverse .nav .active > a:hover {\n color: #fff;\n }\n .navbar-inverse .navbar-link {\n color: #767676;\n }\n .navbar-inverse .navbar-link:focus, .navbar-inverse .navbar-link:hover,\n .navbar-inverse .nav li.dropdown.active > .dropdown-toggle,\n .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle,\n .navbar-inverse .nav li.dropdown.open > .dropdown-toggle {\n color: #fff;\n }\n .navbar-inverse .nav li.dropdown > a:focus .caret,\n .navbar-inverse .nav li.dropdown > a:hover .caret {\n border-top-color: var(--ghd-bg-color);\n border-bottom-color: var(--ghd-bg-color);\n }\n .navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {\n border-top-color: #767676;\n border-bottom-color: #767676;\n }\n .navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,\n .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret,\n .navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret {\n border-top-color: var(--ghd-bg-color);\n border-bottom-color: var(--ghd-bg-color);\n }\n .navbar-inverse .navbar-search .search-query {\n color: #fff;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1), 0 1px 0 hsla(0, 0%, 0%, .15);\n -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1), 0 1px 0 hsla(0, 0%, 0%, .15);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1), 0 1px 0 hsla(0, 0%, 0%, .15);\n }\n .navbar-inverse .navbar-search .search-query:-moz-placeholder {\n color: #5a5a5a;\n }\n .navbar-inverse .navbar-search .search-query:-ms-input-placeholder {\n color: #5a5a5a;\n }\n .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {\n color: #5a5a5a;\n }\n .navbar-inverse .navbar-search .search-query.focused,\n .navbar-inverse .navbar-search .search-query:focus {\n color: #c6c6c6;\n text-shadow: 0 1px 0 #181818;\n background-color: #181818;\n box-shadow: 0 0 3px #000;\n }\n .navbar-inverse .btn-navbar, .navbar-inverse .btn-navbar.active,\n .navbar-inverse .btn-navbar.disabled, .navbar-inverse .btn-navbar:active,\n .navbar-inverse .btn-navbar:focus, .navbar-inverse .btn-navbar:hover,\n .navbar-inverse .btn-navbar[disabled] {\n color: #fff;\n }\n .breadcrumb {\n background-color: #222;\n }\n .breadcrumb > li {\n text-shadow: 0 1px 0 #181818;\n }\n .breadcrumb > li > .divider {\n color: #5a5a5a;\n }\n .breadcrumb > .active {\n color: #767676;\n }\n .pagination ul > li > a, .pagination ul > li > span {\n background-color: #181818;\n border-color: #343434;\n }\n .pagination ul > .active > a, .pagination ul > .active > span,\n .pagination ul > li > a:focus, .pagination ul > li > a:hover {\n background-color: #222;\n }\n .pagination ul > .active > a, .pagination ul > .active > span {\n color: #767676;\n }\n .pagination ul > .disabled > a, .pagination ul > .disabled > a:focus,\n .pagination ul > .disabled > a:hover, .pagination ul > .disabled > span {\n color: #767676;\n background-color: transparent;\n }\n .pager li > a, .pager li > span {\n background-color: #181818;\n border-color: #343434;\n }\n .pager li > a:focus, .pager li > a:hover {\n background-color: #222;\n }\n .pager .disabled > a, .pager .disabled > a:focus, .pager .disabled > a:hover,\n .pager .disabled > span {\n color: #767676;\n background-color: #181818;\n }\n .modal-backdrop {\n background-color: #f0f0f0;\n }\n .modal {\n background-color: #181818;\n }\n .modal-header {\n border-bottom-color: #2c2c2c;\n }\n .modal-footer {\n background-color: #222;\n border-top-color: #343434;\n -webkit-box-shadow: inset 0 1px 0 #181818;\n -moz-box-shadow: inset 0 1px 0 #181818;\n box-shadow: inset 0 1px 0 var(--ghd-bg-color);\n }\n .tooltip-inner {\n color: #fff;\n background-color: #f0f0f0;\n }\n .tooltip.top .tooltip-arrow {\n border-top-color: #f0f0f0;\n }\n .tooltip.right .tooltip-arrow {\n border-right-color: #f0f0f0;\n }\n .tooltip.left .tooltip-arrow {\n border-left-color: #f0f0f0;\n }\n .tooltip.bottom .tooltip-arrow {\n border-bottom-color: #f0f0f0;\n }\n .popover {\n background-color: #181818;\n }\n .popover-title {\n background-color: #202020;\n }\n .popover.top .arrow::after {\n border-top-color: var(--ghd-bg-color);\n }\n .popover.right .arrow::after {\n border-right-color: var(--ghd-bg-color);\n }\n .popover.bottom .arrow::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .popover.left .arrow::after {\n border-left-color: var(--ghd-bg-color);\n }\n .thumbnail {\n border-color: #343434;\n }\n .thumbnail .caption {\n color: #afafaf;\n }\n .badge, .label {\n color: #fff;\n background-color: #767676;\n }\n a.badge:focus, a.badge:hover, a.label:focus, a.label:hover {\n color: #fff;\n }\n .badge-inverse, .label-inverse {\n background-color: #c6c6c6;\n }\n .progress {\n background-color: #202020;\n background-image: linear-gradient(to bottom, #222, #181818);\n }\n .progress .bar {\n color: #fff;\n box-shadow: inset 0 -1px 0 #000;\n }\n .progress .bar + .bar {\n box-shadow: inset 1px 0 0 #000, inset 0 -1px 0 #000;\n }\n .progress-danger.progress-striped .bar, .progress-info.progress-striped .bar,\n .progress-striped .bar, .progress-striped .bar-danger,\n .progress-striped .bar-info, .progress-striped .bar-success,\n .progress-striped .bar-warning, .progress-success.progress-striped .bar,\n .progress-warning.progress-striped .bar {\n background-image: linear-gradient(45deg, hsla(0, 0%, 0%, .15) 25%, transparent 25%, transparent 50%, hsla(0, 0%, 0%, .15) 50%, hsla(0, 0%, 0%, .15) 75%, transparent 75%, transparent);\n }\n .accordion-group {\n border-color: #343434;\n }\n .accordion-inner {\n border-top-color: #343434;\n }\n .carousel-control {\n color: #fff;\n border-color: var(--ghd-bg-color);\n }\n .carousel-control:focus, .carousel-control:hover {\n color: #fff;\n }\n .carousel-indicators .active {\n background-color: #181818;\n }\n .carousel-caption h4, .carousel-caption p {\n color: #fff;\n }\n .hero-unit {\n background-color: #2c2c2c;\n }\n @media (max-width: 480px) {\n input[type=checkbox], input[type=radio] {\n border-color: #5a5a5a;\n }\n }\n @media (max-width: 979px) {\n .navbar-inverse .nav-collapse .dropdown-menu a,\n .navbar-inverse .nav-collapse .nav > li > a {\n color: #767676;\n }\n .nav-collapse .dropdown-menu {\n background-color: transparent;\n box-shadow: none;\n }\n .nav-collapse .navbar-form, .nav-collapse .navbar-search {\n -webkit-box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .1), 0 1px 0 hsla(0, 0%, 0%, .1);\n -moz-box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .1), 0 1px 0 hsla(0, 0%, 0%, .1);\n box-shadow: inset 0 1px 0 hsla(0, 0%, 0%, .1), 0 1px 0 hsla(0, 0%, 0%, .1);\n }\n }\n .icon-muted {\n color: #2c2c2c;\n }\n .icon-light {\n color: #fff;\n }\n .icon-dark {\n color: #c6c6c6;\n }\n .icon-border {\n border-color: #2c2c2c;\n }\n .dropdown-menu > .active > a > [class*=\" icon-\"],\n .dropdown-menu > .active > a > [class^=icon-],\n .dropdown-menu > li > a:hover > [class*=\" icon-\"],\n .dropdown-menu > li > a:hover > [class^=icon-],\n .dropdown-submenu:hover > a > [class*=\" icon-\"],\n .dropdown-submenu:hover > a > [class^=icon-], .icon-white,\n .nav-list > .active > a > [class*=\" icon-\"],\n .nav-list > .active > a > [class^=icon-],\n .nav-pills > .active > a > [class*=\" icon-\"],\n .nav-pills > .active > a > [class^=icon-],\n .navbar-inverse .nav > .active > a > [class*=\" icon-\"],\n .navbar-inverse .nav > .active > a > [class^=icon-], [class*=\" icon-\"],\n [class^=icon-] {\n background-image: none;\n }\n #ipython_notebook img, code {\n color: #f0f0f0;\n }\n .navbar-nobg {\n background-color: transparent;\n background-image: none;\n }\n .list_item:hover .list_item {\n background-color: #343434;\n }\n #project_name > .breadcrumb {\n background-color: transparent;\n }\n .ansiblack {\n color: #f0f0f0;\n }\n .ansibgblack {\n background-color: #f0f0f0;\n }\n div.input_area {\n border-color: #5a5a5a;\n background-color: #202020;\n }\n div.input_area > div.highlight, div.input_area > div.highlight > pre {\n background-color: transparent;\n }\n .highlight-base, pre .clojure .built_in, pre .lisp .title, pre .nginx .title,\n pre .subst, pre .tag .title, pre code {\n color: #f0f0f0;\n }\n div.out_prompt_overlay:hover {\n -webkit-box-shadow: inset 0 0 1px #f0f0f0;\n -moz-box-shadow: inset 0 0 1px #f0f0f0;\n box-shadow: inset 0 0 1px #f0f0f0;\n }\n div.output_area pre {\n color: #f0f0f0;\n background-color: transparent;\n }\n div.output_text {\n color: #f0f0f0;\n }\n input.raw_input:focus {\n box-shadow: none;\n }\n .rendered_html {\n color: #f0f0f0;\n }\n .rendered_html hr {\n color: #f0f0f0;\n background-color: #f0f0f0;\n }\n .rendered_html code, .rendered_html pre {\n background-color: #181818;\n color: #f0f0f0;\n }\n .rendered_html table, .rendered_html td, .rendered_html th,\n .rendered_html tr {\n border-color: #f0f0f0;\n }\n div.text_cell_render {\n color: #f0f0f0;\n }\n .slide-track, .widget-hslider {\n border-color: #5a5a5a;\n background-color: #181818;\n }\n .widget-hslider .ui-slider {\n background: none !important;\n }\n .widget-vslider {\n border-color: #5a5a5a;\n background-color: #181818;\n }\n .widget-vslider .ui-slider {\n background: none !important;\n }\n pre.dialog {\n background-color: #202020;\n border-color: #343434;\n }\n .celltoolbar {\n border-color: #5a5a5a;\n background-color: #2c2c2c;\n }\n .completions select {\n background-color: #181818;\n color: #f0f0f0;\n }\n .notification_widget {\n border-color: #5a5a5a;\n }\n div#pager pre {\n color: #f0f0f0;\n background-color: #202020;\n }\n .toolbar-inner {\n box-shadow: none !important;\n }\n .highlight, .ipython_tooltip, .ipython_tooltip .tooltiptext pre,\n .pretooltiparrow::before {\n background-color: #202020;\n }\n .highlight .m, .highlight .o {\n color: #9b9b9b;\n }\n .highlight .ni, .highlight .w {\n color: #767676;\n }\n .highlight .il, .highlight .mf, .highlight .mh, .highlight .mi,\n .highlight .mo {\n color: #9b9b9b;\n }\n body, div#notebook {\n background-color: #181818;\n }\n /* end render.githubusercontent.com rules */\n body, .render-shell {\n background: var(--ghd-code-background) !important;\n }\n .render-shell img.math {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n .render-shell .output_area .output_png img {\n filter: invert(90.5%) hue-rotate(180deg) saturate(200%) brightness(85%) !important;\n }\n .render-shell .output_area .output_png:hover img {\n filter: none !important;\n }\n .render-shell .added-frame, .render-shell .deleted-frame {\n box-sizing: border-box !important;\n }\n .render-shell .swipe-frame .deleted-frame {\n margin-left: 2px !important;\n }\n .render-shell:not([data-document-path]) img, .render-shell canvas {\n border: none !important;\n background-image: url(\"data:image/gif;base64,R0lGODlhCgAKAIAAABoaGgAAACwAAAAACgAKAAACEYQdmYcaDNxjEspKndVZbc8UADs=\") !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1209 */\n .render-shell:not([data-document-path]) img:not([src$=\".svg\" i]):not(.leaflet-tile):not(.leaflet-marker-icon) {\n width: 100% !important;\n height: 100% !important;\n }\n img.leaflet-marker-icon, img.leaflet-marker-icon:hover {\n background: none !important;\n }\n .render-shell:not([data-document-path]) img:not(.leaflet-tile):not(.leaflet-marker-icon):hover,\n .render-shell:not([data-document-path]) canvas:hover {\n background-image: url(\"data:image/gif;base64,R0lGODlhCgAKAIAAAOXl5f///yH5BAAAAAAALAAAAAAKAAoAAAIRhB2ZhxoM3GMSykqd1VltzxQAOw==\") !important;\n }", + "start": 1209991, + "domains": [ + "render.githubusercontent.com" + ] + }, + { + "code": "/* begin githubstatus.com rules */\n ._2NFgh0Z6tkGorUToiId47k [class^=\"Content__ChildWrapper\"] > [class^=\"Content\"],\n ._3c5eahGieigDTmRHO-d7l3 [class^=\"Content__ChildWrapper\"] > [class^=\"Content\"] {\n border-color: #767676;\n background-color: #181818;\n }\n ._2NFgh0Z6tkGorUToiId47k .status-dropdown__option::before,\n ._3c5eahGieigDTmRHO-d7l3 .status-dropdown__option::before {\n background-color: #181818;\n }\n .ak-editor-wrapper pre, .markdown-display pre {\n background-color: #222;\n }\n .ak-editor-wrapper pre code, .markdown-display pre code {\n background-color: transparent;\n }\n .ak-editor-wrapper table, .markdown-display table {\n border-color: #343434;\n }\n .ak-editor-wrapper table td, .markdown-display table td {\n border-top-color: #343434;\n }\n .ak-editor-wrapper table td + td, .ak-editor-wrapper table th + th,\n .markdown-display table td + td, .markdown-display table th + th {\n border-left-color: #343434;\n }\n ._3DswDMo3rPhwmGGm-RnGoI td[aria-selected=\"true\"] div {\n color: #fff;\n }\n ._2-I6T1F9kpUp2j9G31LMYN {\n border-color: #343434;\n }\n ._1JN3aEKlPD7X5jqB1dXYzx input {\n border-color: #767676;\n }\n ._2dv0LNfUzjAAPh-wPACjXb {\n background-color: #181818;\n }\n .wPHh9nW_2p42Vk16HDf2n {\n color: #fff;\n }\n abbr, address, article, aside, audio, b, blockquote, body, canvas, caption,\n cite, code, dd, del, details, dfn, div, dl, dt, em, fieldset, figcaption,\n figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i,\n iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, p,\n pre, q, samp, section, small, span, strong, sub, summary, sup, time, ul, var,\n video {\n background-color: transparent;\n }\n textarea::placeholder {\n color: #767676;\n }\n .caret {\n border-top-color: #f0f0f0;\n }\n .well {\n border-color: #343434;\n }\n abbr {\n border-bottom-color: #343434;\n }\n pre.code-display {\n background-color: #222;\n }\n pre.code-display code {\n background-color: transparent;\n }\n input::-webkit-input-placeholder {\n color: #767676;\n }\n input:-moz-placeholder {\n color: #767676;\n }\n .chzn-container-single .chzn-single, input[type=\"email\"],\n input[type=\"number\"], input[type=\"password\"], input[type=\"text\"], select,\n textarea {\n border-color: #767676;\n }\n .chzn-container-single .chzn-single, input[type=\"email\"],\n input[type=\"password\"], input[type=\"text\"], textarea {\n color: #9b9b9b;\n }\n input[disabled], select[disabled], select[readonly], textarea[disabled] {\n background-color: #222;\n border-color: #343434;\n }\n input[disabled]:hover, select[disabled]:hover, select[readonly]:hover,\n textarea[disabled]:hover {\n border-color: #343434;\n }\n .controls.append label, .controls.prepend label {\n box-shadow: 0 1px 0 var(--ghd-bg-color) inset;\n -moz-box-shadow: 0 1px 0 #181818 inset;\n -webkit-box-shadow: 0 1px 0 #181818 inset;\n background-color: #242424;\n color: #9b9b9b;\n }\n .controls.append label.prepender, .controls.prepend label.prepender {\n border-right-color: #5a5a5a;\n }\n .controls.append label.appender, .controls.prepend label.appender {\n border-left-color: #5a5a5a;\n }\n .form-bordered .control-group {\n border-bottom-color: #343434;\n }\n .form-bordered .control-group.first-border {\n border-top-color: #343434;\n }\n .fa-border {\n border-color: #2c2c2c;\n }\n .fa-inverse {\n color: #fff;\n }\n .tooltipster-sidetip .tooltipster-box {\n border-color: #f0f0f0;\n }\n .tooltipster-sidetip .tooltipster-content {\n color: #fff;\n }\n .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border {\n border-bottom-color: #f0f0f0;\n }\n .tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border {\n border-left-color: #f0f0f0;\n }\n .tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border {\n border-right-color: #f0f0f0;\n }\n .tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border {\n border-top-color: #f0f0f0;\n }\n .cpt-admin-callout.uptime-edit .label.set {\n color: #fff;\n }\n .cpt-admin-simple-search-form button {\n border-color: #767676;\n }\n .carousel-control {\n color: #fff;\n border-color: var(--ghd-bg-color);\n }\n .carousel-control:hover {\n color: #fff;\n }\n .carousel-caption {\n background-color: #c6c6c6;\n }\n .carousel-caption h4, .carousel-caption p {\n color: #fff;\n }\n .component-statuses .component-status-container .component-dropdown-selector.dropdown-open .component-status-display {\n background-color: #202020;\n }\n .component-statuses .component-status-container .component-dropdown-selector .status-dropdown {\n border-color: #343434;\n background-color: #181818;\n }\n .component-statuses .component-status-container .component-dropdown-selector .status-dropdown .status-option:hover,\n .datepicker {\n background-color: #181818;\n }\n .datepicker {\n box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n border-color: rgba(255, 255, 255, .7);\n }\n .datepicker::before {\n border-bottom-color: #5a5a5a;\n border-bottom-color: rgba(255, 255, 255, .7);\n }\n .datepicker::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .datepicker td.day:hover {\n background-color: #2c2c2c;\n }\n .datepicker td.active, .datepicker td.active:hover {\n color: #fff;\n }\n .datepicker td span:hover {\n background-color: #2c2c2c;\n }\n .datepicker td span.active {\n color: #fff;\n }\n .datepicker thead tr:first-child th:hover {\n background-color: #2c2c2c;\n }\n .dropdown .dropdown-menu {\n box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n background-color: #181818;\n border-color: rgba(255, 255, 255, .7);\n }\n .dropdown .dropdown-menu li:hover {\n background-color: #202020;\n }\n .dropdown .dropdown-menu li a {\n color: #c6c6c6;\n }\n .dropdown .dropdown-menu li.divider {\n background-color: #343434;\n }\n .search-bar i.fa-times, .search-bar i.mag-glass {\n color: #5a5a5a;\n }\n .es-menu {\n background-color: #181818;\n }\n .es-menu .item div .fa, .es-menu .item div i.component-status {\n color: #c6c6c6;\n }\n .es-highlight {\n color: #9b9b9b;\n }\n #es-search-field {\n box-shadow: none !important;\n }\n .grouped-items-selector {\n border-color: #767676;\n }\n .grouped-items-selector.inline {\n box-shadow: none;\n }\n .grouped-items-selector.inline .border-color {\n border-color: #343434;\n }\n .grouped-items-selector.inline .grouped-item.active {\n color: #c6c6c6;\n }\n .grouped-items-selector .body .grouped-items .grouped-item,\n .grouped-items-selector .body .grouped-items .grouped-item.open {\n border-color: #343434;\n }\n .grouped-items-selector .footer .close-button {\n background-color: #343434;\n }\n .loader-overlay {\n background-color: hsla(0, 0%, 0%, .8);\n }\n .sk-fading-circle .sk-circle::before {\n background-color: #c6c6c6;\n }\n .modal {\n background-color: #181818;\n border-color: #767676;\n }\n .modal hr {\n background-color: #343434;\n }\n .modal .headless-close {\n color: #f0f0f0;\n text-shadow: 0 1px 0 #181818;\n }\n .modal .headless-close:hover {\n color: #f0f0f0;\n }\n .modal .modal-header {\n border-bottom-color: #343434;\n }\n .modal .modal-header .close {\n color: #f0f0f0;\n text-shadow: 0 1px 0 #181818;\n }\n .modal .modal-header .close:hover {\n color: #f0f0f0;\n }\n .modal .modal-footer {\n background-color: #222;\n border-top-color: #343434;\n }\n .modal-backdrop {\n background-image: -moz-radial-gradient(50% 50%, circle closest-corner, rgba(0, 0, 0, .7), #f0f0f0 100%);\n background-image: -webkit-radial-gradient(50% 50%, circle closest-corner, rgba(0, 0, 0, .7), #f0f0f0 100%);\n background-image: -o-radial-gradient(50% 50%, circle closest-corner, rgba(0, 0, 0, .7), #f0f0f0 100%);\n }\n .cpt-notification {\n color: #fff;\n }\n .cpt-notification .close {\n color: hsla(0, 0%, 100%, .2);\n }\n .cpt-notification .close:hover, .cpt-notification a:not(.close),\n .cpt-notification a:not(.close):hover {\n color: #fff;\n }\n .cpt-notification.dotted, .cpt-notification.dotted a,\n .cpt-notification.dotted a:hover {\n color: #767676;\n }\n .panel {\n background-color: #181818;\n }\n .panel.panel-default {\n border-color: #343434;\n }\n .panel.panel-default .panel-heading {\n color: #c6c6c6;\n background-color: #222;\n border-color: #343434;\n }\n .popover {\n box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n background-color: #181818;\n border-color: rgba(255, 255, 255, .7);\n }\n .popover.top .arrow {\n border-top-color: #767676;\n }\n .popover.top .arrow::after {\n border-top-color: var(--ghd-bg-color);\n }\n .popover.right .arrow {\n border-right-color: #767676;\n }\n .popover.right .arrow::after {\n border-right-color: var(--ghd-bg-color);\n }\n .popover.bottom .arrow {\n border-bottom-color: #767676;\n }\n .popover.bottom .arrow::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .popover.left .arrow {\n border-left-color: #767676;\n }\n .popover.left .arrow::after {\n border-left-color: var(--ghd-bg-color);\n }\n .popover .popover-title {\n background-color: #222;\n border-bottom-color: #2c2c2c;\n }\n .cpt-progress {\n background-color: #202020;\n }\n .cpt-progress .bar {\n color: #fff;\n }\n .cpt-table .content {\n background-color: #181818;\n }\n .cpt-table .content .table-row.blank-state {\n border-color: #343434 !important;\n }\n .cpt-tabular-table {\n border-color: #343434;\n }\n .cpt-tabular-table td {\n border-top-color: #343434;\n }\n .cpt-tabular-table td + td, .cpt-tabular-table th + th {\n border-left-color: #343434;\n }\n .cpt-tabular-table.striped tbody tr:nth-child(odd) td,\n .cpt-tabular-table .table-striped tbody tr:nth-child(odd) th {\n background-color: #181818;\n }\n .cpt-tabs:not(.unstyled) {\n border-bottom-color: #343434;\n }\n .cpt-tabs:not(.unstyled) li:not(.active) a:hover {\n background-color: #2c2c2c;\n color: #9b9b9b;\n }\n .cpt-tabs:not(.unstyled) li:not(.active) a:hover.disabled {\n background-color: transparent;\n }\n .cpt-tabs:not(.unstyled) li.active a {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n }\n .cpt-tabs:not(.unstyled).mobile {\n border-color: #343434;\n }\n .cpt-tabs:not(.unstyled).mobile::after {\n color: #5a5a5a;\n }\n .cpt-tabs:not(.unstyled).mobile.open li:last-of-type {\n border-bottom-color: #343434;\n }\n .cpt-tabs:not(.unstyled).mobile.open li a {\n border-left-color: #343434;\n border-right-color: #343434;\n }\n .cpt-tabs:not(.unstyled).mobile li.active a,\n .cpt-tabs:not(.unstyled).mobile li:not(.active) a:hover,\n .cpt-tabs:not(.unstyled).mobile li a {\n background-color: #181818;\n }\n .cpt-toggle {\n box-shadow: none;\n background: none;\n background-color: #343434;\n }\n .cpt-toggle .bubble {\n background-color: #181818;\n }\n .cpt-toggle.on .text {\n color: #fff;\n }\n .tooltip-base {\n color: #9b9b9b;\n border-color: #343434;\n }\n .tooltip-base:hover {\n color: #9b9b9b;\n }\n .tooltip.top .tooltip-arrow {\n border-top-color: #f0f0f0;\n }\n .tooltip.right .tooltip-arrow {\n border-right-color: #f0f0f0;\n }\n .tooltip.bottom .tooltip-arrow {\n border-bottom-color: #f0f0f0;\n }\n .tooltip.left .tooltip-arrow {\n border-left-color: #f0f0f0;\n }\n .tooltip .tooltip-inner {\n color: #fff;\n }\n .cpt-button {\n color: #fff;\n color: #fff !important;\n }\n .cpt-button:hover {\n color: #fff;\n }\n .cpt-button .caret {\n border-top-color: var(--ghd-bg-color);\n }\n .cpt-button.style-outline {\n box-shadow: none;\n background-color: transparent;\n border-color: hsla(0, 0%, 0%, .8);\n }\n .cpt-button.style-outline:hover {\n border-color: var(--ghd-bg-color);\n }\n .cpt-button.style-outline.color-grey {\n border-color: #767676;\n }\n .cpt-button.disabled {\n box-shadow: none;\n }\n .cpt-button.pressed, .cpt-button:active {\n box-shadow: inset 0 0 5px rgba(255, 255, 255, .7);\n -moz-box-shadow: inset 0 0 5px rgba(255, 255, 255, .7);\n -webkit-box-shadow: inset 0 0 5px rgba(255, 255, 255, .7);\n }\n .domain-helper .domain-content.domain-unset {\n border-color: #5a5a5a;\n }\n .domain-helper .domain-header.domain-unset {\n background-color: #5a5a5a;\n }\n .domain-helper .domain-header.domain-deprecated,\n .domain-helper .domain-header.domain-invalid,\n .domain-helper .domain-header.domain-valid {\n color: #fff;\n }\n .domain-helper .dns-records {\n border-bottom-color: #2c2c2c;\n }\n .domain-helper .dns-records .dns-records-header {\n background-color: #2c2c2c;\n }\n .domain-helper .dns-records .dns-records-row {\n border-color: #2c2c2c;\n }\n .cpt-pill-group button.pill {\n background-color: #181818;\n }\n .cpt-pill-group button.pill.active {\n border-color: #343434;\n color: #c6c6c6;\n }\n .updates-dropdown-container .updates-dropdown {\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-nav {\n border-color: rgba(255, 255, 255, .7);\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-nav a {\n background-color: #202020;\n border-right-color: #343434;\n border-bottom-color: #343434;\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-nav a:last-of-type {\n color: #9b9b9b !important;\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-nav a.active {\n background-color: #9b9b9b;\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-section {\n border-color: rgba(255, 255, 255, .7);\n background-color: #181818;\n }\n .activate-page-prompt, .activate-page-prompt a, .flat-button,\n .flat-button:hover,\n .layout-content.status .masthead-container.premium .masthead .text-container .page-name,\n .layout-content.status .masthead-container.premium .masthead .text-container .page-name a,\n .layout-content.status .masthead-container .updates-dropdown-container .show-updates-dropdown,\n .layout-content.status .masthead-container .updates-dropdown-container .show-updates-dropdown:hover,\n .pau-preview {\n color: #fff;\n }\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident.impact-none .incident-title {\n background-color: #c6c6c6;\n }\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident.impact-none .updates {\n border-color: #5a5a5a;\n }\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident .incident-title {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .7);\n }\n .layout-content.status.status-index .page-status .status,\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident .incident-title a,\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident .incident-title a:hover {\n color: #fff;\n }\n .layout-content.status.status-index .page-status .last-updated-stamp {\n color: hsla(0, 0%, 100%, .2);\n }\n .layout-content.status.status-full-history .show-filter.open {\n color: #fff;\n }\n .layout-content.status.status-full-history .uptime-calendar #uptime-tooltip {\n background-color: #181818;\n border-color: rgba(255, 255, 255, .7);\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n .layout-content.status.status-full-history .uptime-calendar #uptime-tooltip #box-arrow {\n background-color: #181818;\n border-left-color: rgba(255, 255, 255, .7);\n border-top-color: rgba(255, 255, 255, .7);\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n .layout-content.status.status-full-history .uptime-calendar #uptime-tooltip .tooltip-box {\n box-shadow: none;\n }\n .layout-content.status-internal {\n border-color: #343434;\n color: #c6c6c6;\n }\n .layout-content.status-internal .message-container {\n box-shadow: 0 0 25px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 0 25px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 0 25px rgba(255, 255, 255, .7);\n background-color: #181818;\n }\n .layout-content.status-internal .powered-by-container,\n .layout-content.status-internal .powered-by-container a,\n .layout-content.status-internal .powered-by-container a:hover {\n color: #fff;\n color: hsla(0, 0%, 0%, .85);\n }\n #uptime-tooltip .pointer-smaller {\n border-bottom-color: var(--ghd-bg-color);\n }\n #uptime-tooltip .tooltip-box {\n border-color: rgba(255, 255, 255, .7);\n background-color: #181818;\n }\n #uptime-tooltip .tooltip-close i {\n color: #5a5a5a;\n }\n #uptime-tooltip .outage-field {\n border-color: transparent;\n }\n #uptime-tooltip .related-events .related-event .related-event-link {\n color: #c6c6c6;\n }\n a {\n background-color: transparent;\n color: #4f8cc9;\n }\n mark {\n color: #f0f0f0;\n }\n body {\n color: #c6c6c6;\n background-color: #181818;\n }\n .rule {\n border-bottom-color: #343434;\n }\n .border {\n border-color: #343434 !important;\n }\n .border-y {\n border-top-color: #343434 !important;\n border-bottom-color: #343434 !important;\n }\n .border-blue {\n border-color: #4f8cc9 !important;\n }\n .border-blue-light {\n border-color: #246 !important;\n }\n .border-green {\n border-color: #373 !important;\n }\n .border-green-light {\n border-color: #040 !important;\n }\n .border-red, .border-red-light {\n border-color: #d82828 !important;\n }\n .border-purple {\n border-color: #73589a !important;\n }\n .border-yellow {\n border-color: #cb4 !important;\n }\n .border-gray-light {\n border-color: #2c2c2c !important;\n }\n .border-gray-dark {\n border-color: #343434 !important;\n }\n .border-black-fade {\n border-color: rgba(220, 220, 220, .15) !important;\n }\n .border-top {\n border-top-color: #343434 !important;\n }\n .border-right {\n border-right-color: #343434 !important;\n }\n .border-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-left {\n border-left-color: #343434 !important;\n }\n .box-shadow {\n box-shadow: 0 1px 1px #000 !important;\n }\n .box-shadow-medium {\n box-shadow: 0 1px 5px #000 !important;\n }\n .box-shadow-large {\n box-shadow: 0 1px 15px #000 !important;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .bg-white {\n background-color: #181818 !important;\n }\n .bg-blue {\n background-color: #4f8cc9 !important;\n }\n .bg-blue-light {\n background-color: #182030 !important;\n }\n .bg-gray {\n background-color: #222 !important;\n }\n .bg-gray-light {\n background-color: #181818 !important;\n }\n .bg-green {\n background-color: #484 !important;\n }\n .bg-green-light {\n background-color: #002800 !important;\n }\n .bg-red {\n background-color: #d82828 !important;\n }\n .bg-red-light {\n background-color: #300 !important;\n }\n .bg-yellow {\n background-color: #cb4 !important;\n }\n .bg-yellow-light {\n background-color: #651 !important;\n }\n .bg-purple {\n background-color: #73589a !important;\n }\n .bg-purple-light {\n background-color: #213 !important;\n }\n .text-blue {\n color: #4f8cc9 !important;\n }\n .text-red {\n color: #d82828 !important;\n }\n .text-gray-light {\n color: #9b9b9b !important;\n }\n .text-gray {\n color: #afafaf !important;\n }\n .text-gray-dark {\n color: #c6c6c6 !important;\n }\n .text-green {\n color: #484 !important;\n }\n .text-orange {\n color: #f3582c !important;\n }\n .text-orange-light {\n color: #fb8532 !important;\n }\n .text-purple {\n color: #73589a !important;\n }\n .text-white {\n color: #fff !important;\n }\n .bg-pending, .text-pending {\n color: #cb4 !important;\n }\n .link-gray {\n color: #afafaf !important;\n }\n .link-gray:hover {\n color: #4f8cc9 !important;\n }\n .link-gray-dark {\n color: #c6c6c6 !important;\n }\n .link-gray-dark:hover, .link-hover-blue:hover {\n color: #4f8cc9 !important;\n }\n .muted-link {\n color: #afafaf !important;\n }\n .muted-link:hover {\n color: #4f8cc9 !important;\n }\n .details-overlay-dark[open] > summary::before {\n background-color: rgba(220, 220, 220, .5);\n }\n .lead {\n color: #afafaf;\n }\n .text-emphasized {\n color: #c6c6c6;\n }\n .text-shadow-dark {\n text-shadow: 0 1px 1px rgba(220, 220, 220, .25), 0 1px 25px rgba(27, 31, 35, .75);\n }\n .text-shadow-light {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n body {\n background-color: #222;\n }\n .component-container, .components-container {\n background-color: #181818;\n }\n .component-container .status-msg {\n color: #9b9b9b;\n }\n .incident-title + .updates {\n background-color: #181818;\n }\n .page-footer {\n border-top-color: #343434 !important;\n }\n body.history .history-backpage {\n background-color: #181818;\n }\n .component-items-selector .grouped-item:hover {\n background-color: #222;\n }\n .component-items-selector .active, .component-items-selector .active:hover {\n color: #fff;\n background-color: #4f8cc9;\n }\n .incident-list::before, .status-day::before {\n background-color: #444;\n }\n .status-day > .date::before {\n background-color: #181818;\n }\n .month-title {\n border-bottom-color: #343434 !important;\n }\n .incident-container::before {\n background-color: #444;\n }\n .incident-container .incident-title::before {\n background-color: #444;\n border-color: #202020;\n }\n .update.investigating > strong {\n color: #cb4;\n }\n .update.resolved > strong {\n color: #484;\n }\n .flat-button, .history-header .show-filter {\n background-color: #242424 !important;\n background-image: linear-gradient(-180deg, #202020 0%, #181818 90%) !important;\n border-color: rgba(220, 220, 220, .2) !important;\n color: #c6c6c6 !important;\n box-shadow: #000 0 0 0 inset !important;\n }\n .updates-dropdown-container .updates-dropdown {\n background-color: #181818;\n }\n .updates-dropdown-container .updates-dropdown-nav::before {\n color: #c6c6c6;\n }\n .updates-dropdown-container #updates-dropdown-close-btn {\n background-color: transparent;\n }\n #uptime-tooltip .tooltip-box, .grouped-items-selector,\n .layout-content.status.status-api .section .example-container .example-opener .color-secondary,\n .layout-content.status.status-full-history .history-nav a.current, body,\n div[id^=\"subscribe-modal\"], div[id^=\"subscribe-modal\"] .modal-footer {\n background-color: #181818;\n }\n #uptime-tooltip .pointer-container .pointer-smaller {\n border-bottom-color: var(--ghd-bg-color);\n }\n #uptime-tooltip .tooltip-box .tooltip-content .related-events .related-event a.related-event-link,\n .color-primary, .color-primary:hover, .grouped-item-label,\n .incident-history .impact-none,\n .layout-content.status-full-history .month .incident-container .impact-none,\n .layout-content.status-index .status-day .update-title.impact-none a,\n .layout-content.status-index .status-day .update-title.impact-none a:hover,\n .layout-content.status-index .timeframes-container .timeframe.active,\n .layout-content.status .grouped-items-selector.inline .grouped-item.active,\n .layout-content.status.status-full-history .history-nav a.current,\n .layout-content.status.status-full-history .history-nav a:not(.current):hover,\n .layout-content.status.status-index .components-statuses .component-container .name,\n .layout-content.status.status-index .incidents-list .incident-title.impact-none a,\n body.status, div[id^=\"subscribe-modal\"] .modal-header .close {\n color: #c6c6c6;\n }\n #uptime-tooltip .tooltip-box .tooltip-content .related-events #related-event-header,\n .color-secondary,\n .layout-content.status .grouped-items-selector.inline .grouped-item,\n .layout-content.status.status-full-history .history-footer .pagination a.disabled,\n .layout-content.status.status-full-history .history-nav a,\n .layout-content.status .table-row .date, small {\n color: #9b9b9b;\n }\n #uptime-tooltip .tooltip-box, .markdown-display table, .tooltip-base,\n body.status .layout-content.status .border-color, div[id^=\"subscribe-modal\"] {\n border-color: #343434;\n }\n .markdown-display table td, div[id^=\"subscribe-modal\"] .modal-footer {\n border-top-color: #343434;\n }\n div[id^=\"subscribe-modal\"] .modal-header .close:hover {\n color: #343434;\n }\n .markdown-display table td + td, .markdown-display table th + th {\n border-left-color: #343434;\n }\n #uptime-tooltip .pointer-container .pointer-larger,\n div[id^=\"subscribe-modal\"] .modal-header {\n border-bottom-color: #343434;\n }\n #uptime-tooltip .tooltip-box .outage-field {\n background-color: #282828;\n }\n .layout-content.status.status-index .page-status.status-major,\n .layout-content.status.status-index .status-day .update-title.impact-major a,\n .layout-content.status.status-index .status-day .update-title.impact-major a:hover,\n .layout-content.status.status-index .unresolved-incident.impact-major .incident-title {\n background-color: #fb8532;\n }\n .components-container .component-inner-container.status-orange .component-status,\n .components-container .component-inner-container.status-orange .icon-indicator,\n .incident-history .impact-major,\n .layout-content.status-full-history .month .incident-container .impact-major,\n .layout-content.status-incident .incident-name.impact-major,\n .layout-content.status-index .components-statuses .component-container.status-orange::after,\n .layout-content.status.status-index .incidents-list .incident-title.impact-major a,\n .status-orange .icon-indicator {\n color: #fb8532;\n }\n .layout-content.status.status-index .unresolved-incident.impact-major .updates {\n border-color: #fb8532;\n }\n .layout-content.status.status-index .page-status.status-minor,\n .layout-content.status.status-index .scheduled-incidents-container .tab,\n .layout-content.status.status-index .status-day .update-title.impact-minor a,\n .layout-content.status.status-index .status-day .update-title.impact-minor a:hover,\n .layout-content.status.status-index .unresolved-incident.impact-minor .incident-title {\n background-color: #cb4;\n }\n .components-container .component-inner-container.status-yellow .component-status,\n .components-container .component-inner-container.status-yellow .icon-indicator,\n .incident-history .impact-minor,\n .layout-content.status-full-history .month .incident-container .impact-minor,\n .layout-content.status-incident .incident-name.impact-minor,\n .layout-content.status-index .components-statuses .component-container.status-yellow::after,\n .layout-content.status.manage-subscriptions .confirmation-infobox .fa,\n .layout-content.status.status-index .incidents-list .incident-title.impact-minor a,\n .status-yellow .icon-indicator {\n color: #cb4;\n }\n .layout-content.status.status-index .scheduled-incidents-container,\n .layout-content.status.status-index .unresolved-incident.impact-minor .updates {\n border-color: #cb4;\n }\n .layout-content.status.status-index .page-status.status-maintenance,\n .layout-content.status.status-index .scheduled-incidents-container .tab,\n .layout-content.status.status-index .status-day .update-title.impact-maintenance a,\n .layout-content.status.status-index .status-day .update-title.impact-maintenance a:hover,\n .layout-content.status.status-index .unresolved-incident.impact-maintenance .incident-title {\n background-color: #4f8cc9;\n }\n .components-container .component-inner-container.status-blue .component-status,\n .components-container .component-inner-container.status-blue .icon-indicator,\n .incident-history .impact-maintenance,\n .layout-content.status-full-history .month .incident-container .impact-maintenance,\n .layout-content.status-incident .incident-name.impact-maintenance,\n .layout-content.status-index .components-statuses .component-container.status-blue::after,\n .layout-content.status.status-index .incidents-list .incident-title.impact-maintenance a,\n .status-blue .icon-indicator {\n color: #4f8cc9;\n }\n .layout-content.status.status-index .scheduled-incidents-container,\n .layout-content.status.status-index .unresolved-incident.impact-maintenance .updates {\n border-color: #4f8cc9;\n }\n .layout-content.status.status-index .page-status.status-none {\n background-color: #484;\n }\n .components-container .component-inner-container.status-green .component-status,\n .components-container .component-inner-container.status-green .icon-indicator,\n .layout-content.status-index .components-statuses .component-container.status-green::after,\n .status-green .icon-indicator {\n color: #484;\n }\n .layout-content.status-incident .subheader a:hover,\n .layout-content.status-index .page-footer span a:hover,\n .layout-content.status-index .timeframes-container .timeframe:not(.active):hover,\n a, a:hover {\n color: #4f8cc9;\n }\n .flat-button, .layout-content.status-full-history .show-filter.open,\n .masthead .updates-dropdown-container .show-updates-dropdown {\n background-color: #4f8cc9;\n }\n .components-section .components-uptime-link,\n .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item,\n .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light {\n color: #9b9b9b;\n }\n .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .spacer {\n background-color: #444;\n }\n /* end githubstatus.com rules */\n .illo-desktop-header {\n filter: invert(90%) hue-rotate(-180deg) !important;\n }\n .status-day > .date::before {\n background-color: #444 !important;\n }\n .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light {\n opacity: .7;\n }\n .page-title .impact-minor::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.89307 1.50072C8.70961 1.19027 8.37325 1 8.00632 1C7.63938 1 7.30302 1.19027 7.11956 1.50072L0.137601 13.4979C-0.0458669 13.8083 -0.0458669 14.1888 0.137601 14.4993C0.331261 14.8097 0.667618 15 1.02436 15H14.9883C15.3552 15 15.6916 14.8097 15.8648 14.4993C16.0381 14.1888 16.0483 13.8083 15.875 13.4979L8.89307 1.50072ZM9.02558 12.9971H6.98705V10.9943H9.02558V12.9971ZM9.02558 9.99285H6.98705V5.98712H9.02558V9.99285Z' fill='%23cb4'/%3E%3C/svg%3e\");\n }\n .page-title .impact-major::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.89307 1.50072C8.70961 1.19027 8.37325 1 8.00632 1C7.63938 1 7.30302 1.19027 7.11956 1.50072L0.137601 13.4979C-0.0458669 13.8083 -0.0458669 14.1888 0.137601 14.4993C0.331261 14.8097 0.667618 15 1.02436 15H14.9883C15.3552 15 15.6916 14.8097 15.8648 14.4993C16.0381 14.1888 16.0483 13.8083 15.875 13.4979L8.89307 1.50072ZM9.02558 12.9971H6.98705V10.9943H9.02558V12.9971ZM9.02558 9.99285H6.98705V5.98712H9.02558V9.99285Z' fill='%23f3582c'/%3E%3C/svg%3e\");\n }\n .page-title .impact-critical::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.89307 1.50072C8.70961 1.19027 8.37325 1 8.00632 1C7.63938 1 7.30302 1.19027 7.11956 1.50072L0.137601 13.4979C-0.0458669 13.8083 -0.0458669 14.1888 0.137601 14.4993C0.331261 14.8097 0.667618 15 1.02436 15H14.9883C15.3552 15 15.6916 14.8097 15.8648 14.4993C16.0381 14.1888 16.0483 13.8083 15.875 13.4979L8.89307 1.50072ZM9.02558 12.9971H6.98705V10.9943H9.02558V12.9971ZM9.02558 9.99285H6.98705V5.98712H9.02558V9.99285Z' fill='%23f44'/%3E%3C/svg%3e\");\n }\n .page-title .impact-maintenance::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M4.48 7.27001C4.74 7.53001 5.76 8.60001 5.76 8.60001L6.32 8.02001L5.44 7.11001L7.13 5.31001C7.13 5.31001 6.37 4.57001 6.7 4.86001C7.02 3.67001 6.73 2.35001 5.83 1.42001C4.93 0.500006 3.66 0.200006 2.52 0.510006L4.45 2.51001L3.94 4.47001L2.05 4.99001L0.12 2.99001C-0.19 4.17001 0.1 5.48001 1 6.40001C1.94 7.38001 3.29 7.66001 4.48 7.27001ZM10.92 9.21001L8.59 11.51L12.43 15.49C12.74 15.82 13.16 15.98 13.57 15.98C13.98 15.98 14.39 15.82 14.71 15.49C15.34 14.84 15.34 13.79 14.71 13.14L10.92 9.21001ZM16 2.53L13.55 0L6.33 7.46L7.21 8.37L2.9 12.83L1.91 13.36L0.519998 15.63L0.869998 16L3.07 14.56L3.58 13.54L7.9 9.08L8.78 9.99L16 2.53Z' fill='rgb(79, 140, 201)'/%3E%3C/svg%3e\");\n }\n .page-footer > a:first-child::before {\n background: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='8' height='16' viewBox='0 0 8 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M5.5 3L7 4.5L3.25 8L7 11.5L5.5 13L0.5 8L5.5 3Z' fill='rgb(79, 140, 201)'/%3E%3C/svg%3e\") no-repeat center center !important;\n }\n .incident-container .incident-title::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='14' height='16' viewBox='0 0 14 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6.99999 2.3C10.14 2.3 12.7 4.86 12.7 8C12.7 11.14 10.14 13.7 6.99999 13.7C3.85999 13.7 1.29999 11.14 1.29999 8C1.29999 4.86 3.85999 2.3 6.99999 2.3ZM7 1C3.14 1 0 4.14 0 8C0 11.86 3.14 15 7 15C10.86 15 14 11.86 14 8C14 4.14 10.86 1 7 1ZM8 4H6V9H8V4ZM8 10H6V12H8V10Z' fill='%23bebebe'/%3E%3C/svg%3e\");\n }\n .select-input__control[class*=\"css-\"] {\n background-color: #181818;\n border-color: #333;\n }\n .select-input__single-value[class*=\"css-\"] {\n color: #bebebe;\n }\n body.status div[class*=\"css-\"] {\n background-color: #181818;\n }\n .layout-content.status.status-full-history .history-nav a.current.border-color {\n margin-top: 1px;\n border-bottom: 1px solid transparent !important;\n }\n .layout-content.status.status-full-history .history-nav a.button.border-color:not(.current) {\n border-bottom: 1px solid #333 !important;\n margin-top: 1px;\n }\n .select-input__option:not(.select-input__option--is-selected):hover {\n background-color: #282828;\n color: #eee;\n }\n .select-input__option--is-selected[class*=\"css-\"] {\n background-color: #182030 !important;\n }\n svg [fill=\"#EAEAEA\"] {\n fill: #555;\n }\n .pagination .current, .pagination .current:hover {\n background-color: initial;\n }", + "start": 1286284, + "domains": [ + "githubstatus.com" + ] + }, + { + "code": "/* begin support.github.com rules */\n a {\n background-color: transparent;\n }\n :root, [data-color-mode=\"light\"][data-light-theme=\"light\"] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: #4f8cc9;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: #4f8cc9;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: #4f8cc9;\n --color-mktg-btn-hover-border: #4f8cc9;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: #4f8cc9;\n --color-mktg-btn-outline-hover-text: #4f8cc9;\n --color-mktg-btn-outline-hover-icon: #4f8cc9;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"light\"] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: #4f8cc9;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: #4f8cc9;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: #4f8cc9;\n --color-mktg-btn-hover-border: #4f8cc9;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: #4f8cc9;\n --color-mktg-btn-outline-hover-text: #4f8cc9;\n --color-mktg-btn-outline-hover-icon: #4f8cc9;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"light\"] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #73589a;\n --color-scale-purple-6: #73589a;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #73589a;\n --color-auto-purple-6: #73589a;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-secondary: #2c2c2c;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-autocomplete-row-border: #2c2c2c;\n --color-blankslate-icon: #767676;\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-selected-bg: #2c2c2c;\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-selected-bg: #595;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-border-secondary: #2c2c2c;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-icon: #767676;\n --color-branch-name-bg: #182030;\n --color-branch-name-link-text: #4f8cc9;\n --color-branch-name-link-icon: #767676;\n --color-branch-name-link-bg: #182030;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-markdown-frame-border: #343434;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-table-border: #343434;\n --color-markdown-table-tr-border: #767676;\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-filter-item-bar-bg: #242424;\n --color-hidden-text-expander-bg: #343434;\n --color-hidden-text-expander-bg-hover: #767676;\n --color-drag-and-drop-border: #767676;\n --color-upload-enabled-border: #343434;\n --color-upload-enabled-border-focused: #4f8cc9;\n --color-previewable-comment-form-border: #767676;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-icon: #181818;\n --color-mktg-btn-hover-bg: #4f8cc9;\n --color-mktg-btn-hover-border: #4f8cc9;\n --color-mktg-btn-disabled-text: #181818;\n --color-mktg-btn-disabled-icon: #181818;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-primary-icon: #181818;\n --color-mktg-btn-primary-hover-bg: #484;\n --color-mktg-btn-primary-hover-border: #484;\n --color-mktg-btn-primary-disabled-text: #181818;\n --color-mktg-btn-primary-disabled-icon: #181818;\n --color-mktg-btn-outline-hover-border: #4f8cc9;\n --color-mktg-btn-outline-hover-text: #4f8cc9;\n --color-mktg-btn-outline-hover-icon: #4f8cc9;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-icon: #181818;\n --color-mktg-btn-dark-focus-shadow: 0 0 0 3px hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-bg: #181818;\n --color-mktg-btn-dark-hover-border: #181818;\n --color-mktg-btn-dark-hover-text: #afafaf;\n --color-mktg-btn-dark-hover-icon: #afafaf;\n --color-mktg-btn-dark-disabled-border: hsla(0, 0%, 0%, .2);\n --color-mktg-btn-dark-disabled-text: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-disabled-icon: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-border: #040;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-bg: #002800;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #73589a;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #73589a;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #73589a;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #73589a;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #73589a;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #c6c6c6;\n --color-ansi-white: #343434;\n --color-ansi-white-bright: #343434;\n --color-ansi-gray: #767676;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #040;\n --color-ansi-green-bright: #040;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #651;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #246;\n --color-ansi-magenta: #53387a;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"dark\"] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"dark\"] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"dark\"] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #73589a;\n --color-auto-purple-3: #73589a;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"dark_dimmed\"] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"dark_dimmed\"] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"dark_dimmed\"] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n }\n }\n .rule {\n background-color: transparent;\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=true],\n .btn-outline.disabled, .btn-outline:disabled,\n .btn-outline[aria-disabled=true] {\n box-shadow: none;\n }\n .btn-invisible, .btn-link {\n background-color: transparent;\n }\n .btn-invisible {\n box-shadow: none;\n }\n .btn-invisible.selected, .btn-invisible.zeroclipboard-is-active,\n .btn-invisible.zeroclipboard-is-hover, .btn-invisible:active,\n .btn-invisible:focus, .btn-invisible:hover,\n .btn-invisible[aria-selected=true] {\n background: none;\n box-shadow: none;\n }\n .btn-invisible.disabled, .btn-invisible:disabled,\n .btn-invisible[aria-disabled=true], .btn-octicon, .close-button,\n .inline-form .btn-plain {\n background-color: transparent;\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .filter-list.pjax-active .filter-item, .SideNav-item, .SideNav-subItem,\n .tabnav-tab, .UnderlineNav-item {\n background-color: transparent;\n }\n .UnderlineNav-item.selected,\n .UnderlineNav-item[aria-current]:not([aria-current=false]),\n .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: #fff;\n }\n .flash-close {\n background: none;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .dropdown-signout {\n background: none;\n }\n .label, .Label {\n background-color: transparent !important;\n }\n .SelectMenu-closeButton, .SelectMenu-tab {\n background-color: transparent;\n }\n @media (min-width: 544px) {\n .SelectMenu-tab[aria-selected=\"true\"] {\n box-shadow: none;\n }\n }\n .markdown-body .emoji, .markdown-body pre > code, .markdown-body pre code,\n .markdown-body pre tt, .markdown-body table img {\n background-color: transparent;\n }\n .progress-bar-processing .Progress-item {\n background-image: linear-gradient(45deg, hsla(0, 0%, 0%, .15) 25%, transparent 25%, transparent 50%, hsla(0, 0%, 0%, .15) 50%, hsla(0, 0%, 0%, .15) 75%, transparent 75%, transparent);\n }\n .toolbar-item {\n background: none;\n }\n .toolbar-item:disabled {\n color: #343434;\n }\n .timeline-comment .comment + .comment {\n border-top-color: #343434;\n }\n :root, [data-color-mode=\"light\"][data-light-theme*=\"light\"] {\n --color-placeholder-gradient: #242424;\n --color-placeholder-gradient-from: #343434;\n --color-placeholder-gradient-to: #242424;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme*=\"light\"] {\n --color-placeholder-gradient: #242424;\n --color-placeholder-gradient-from: #343434;\n --color-placeholder-gradient-to: #242424;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme*=\"light\"] {\n --color-placeholder-gradient: #242424;\n --color-placeholder-gradient-from: #343434;\n --color-placeholder-gradient-to: #242424;\n }\n }\n .taggle_list .taggle .close {\n color: #5a5a5a;\n color: rgba(255, 255, 255, .7);\n background: none;\n }\n .taggle_list .taggle:hover {\n background-color: #5a5a5a;\n }\n .taggle_placeholder {\n color: #5a5a5a;\n }\n .taggle_input {\n background: none;\n }\n #ticket-comments .attachment-name a, .attachment-name a:hover,\n .attachment-upload-preview .link, .link:hover {\n color: #c6c6c6;\n }\n .not-found-octocat-wrapper::after {\n box-shadow: 0 4px 0 var(--ghd-bg-color), 0 8px 0 var(--ghd-bg-color), 0 12px 0 var(--ghd-bg-color), 0 16px 0 var(--ghd-bg-color), 0 20px 0 var(--ghd-bg-color);\n }\n /* end support.github.com rules */\n .input-block #query {\n background: url('data:image/svg+xml;utf8,') no-repeat 6px;\n }\n #q {\n background: url('data:image/svg+xml;utf8,') no-repeat 6px;\n }", + "start": 1321178, + "domains": [ + "support.github.com" + ] + }, + { + "code": "/* begin vscode-auth.github.com rules */\n a {\n background-color: transparent;\n }\n mark {\n color: #f0f0f0;\n }\n body {\n color: #c6c6c6;\n background-color: #181818;\n }\n a {\n color: #4f8cc9;\n }\n .rule {\n background-color: transparent;\n border-bottom-color: #343434;\n }\n .Box {\n background-color: #181818;\n }\n .Box, .Box-header {\n border-color: #343434;\n }\n .Box-header {\n background-color: #222;\n }\n .Box-body {\n border-bottom-color: #343434;\n }\n .Box-row {\n border-top-color: #343434;\n }\n .Box-row.Box-row--unread, .Box-row.unread {\n box-shadow: 2px 0 0 #4f8cc9 inset;\n }\n .Box-row.navigation-focus .Box-row--drag-button {\n color: #4f8cc9;\n }\n .Box-row.navigation-focus.sortable-chosen {\n background-color: #181818;\n }\n .Box-row--focus-gray.navigation-focus,\n .Box-row.navigation-focus.sortable-ghost {\n background-color: #222;\n }\n .Box-row--focus-blue.navigation-focus {\n background-color: #182030;\n }\n .Box-row--hover-gray:hover {\n background-color: #222;\n }\n .Box-row--hover-blue:hover {\n background-color: #182030;\n }\n @media (min-width: 768px) {\n .Box-row-link {\n color: #c6c6c6;\n }\n .Box-row-link:hover {\n color: #4f8cc9;\n }\n }\n .Box-footer {\n border-top-color: #343434;\n }\n .Box--blue {\n border-color: #246;\n }\n .Box--blue .Box-header {\n background-color: #182030;\n border-color: #246;\n }\n .Box--blue .Box-body, .Box--blue .Box-footer, .Box--blue .Box-row {\n border-color: #246;\n }\n .Box--danger, .Box--danger .Box-body:last-of-type,\n .Box--danger .Box-row:first-of-type {\n border-color: #d82828;\n }\n .Box-header--blue {\n background-color: #182030;\n border-color: #246;\n }\n .Box-row--yellow {\n background-color: #261d08;\n }\n .Box-row--blue {\n background-color: #182030;\n }\n .Box-row--gray {\n background-color: #222;\n }\n .breadcrumb-item::after {\n color: #343434;\n }\n .btn {\n border-color: rgba(220, 220, 220, .2);\n }\n .btn .Counter {\n color: #afafaf;\n background-color: rgba(220, 220, 220, .1);\n }\n .btn.selected, .btn:active {\n background-image: none;\n }\n .btn {\n color: #c6c6c6;\n background-color: #242424;\n background-image: linear-gradient(-180deg, #202020 0%, #181818 90%);\n }\n .btn.focus, .btn:focus {\n box-shadow: 0 0 0 .2em rgba(79, 140, 201, .5);\n }\n .btn.hover, .btn:hover {\n background-color: #444;\n background-image: linear-gradient(-180deg, #242424 0%, #444 90%);\n border-color: rgba(220, 220, 220, .35);\n }\n .btn.selected, .btn:active, [open] > .btn {\n background-color: #404040;\n background-image: none;\n border-color: rgba(220, 220, 220, .35);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn.disabled, .btn:disabled {\n color: rgba(210, 210, 210, .4);\n background-color: #242424;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-primary {\n color: #fff;\n background-color: #484;\n background-image: linear-gradient(-180deg, #373 0%, #484 90%);\n }\n .btn-primary.focus, .btn-primary:focus {\n box-shadow: 0 0 0 .2em #3737;\n }\n .btn-primary.hover, .btn-primary:hover {\n background-color: #595;\n background-image: linear-gradient(-180deg, #373 0%, #595 90%);\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-primary.selected, .btn-primary:active, [open] > .btn-primary {\n background-color: #595;\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-primary.disabled, .btn-primary:disabled {\n background-color: #040;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-primary .Counter {\n background-color: #181818;\n }\n .btn-purple {\n color: #fff;\n }\n .btn-purple.hover, .btn-purple:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-purple.selected, .btn-purple:active, [open] > .btn-purple {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-purple.disabled, .btn-purple:disabled {\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-purple .Counter {\n background-color: #181818;\n }\n .btn-blue {\n color: #fff;\n background-color: #4f8cc9;\n background-image: linear-gradient(-180deg, #4f8cc9 0%, #4f8cc9 90%);\n }\n .btn-blue.hover, .btn-blue:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-blue.selected, .btn-blue:active, [open] > .btn-blue {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-blue.disabled, .btn-blue:disabled {\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-blue .Counter {\n color: #4f8cc9;\n background-color: #181818;\n }\n .btn-danger {\n color: #d82828;\n background-color: #181818;\n background-image: linear-gradient(-180deg, #202020 0%, #181818 90%);\n }\n .btn-danger:focus {\n box-shadow: 0 0 0 .2em rgba(255, 68, 68, .4);\n }\n .btn-danger:hover {\n color: #fff;\n background-color: #d82828;\n background-image: linear-gradient(-180deg, #de4450 0%, #d82828 90%);\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-danger:hover .Counter {\n color: #fff;\n }\n .btn-danger.selected, .btn-danger:active, [open] > .btn-danger {\n color: #fff;\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-danger.disabled, .btn-danger:disabled {\n color: rgba(255, 68, 68, .4);\n background-color: #242424;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-outline {\n color: #4f8cc9;\n background-color: #181818;\n background-image: none;\n }\n .btn-outline.selected, .btn-outline:active, .btn-outline:hover,\n [open] > .btn-outline {\n color: #fff;\n background-color: #4f8cc9;\n background-image: none;\n border-color: #4f8cc9;\n }\n .btn-outline.selected .Counter, .btn-outline:active .Counter,\n .btn-outline:hover .Counter, [open] > .btn-outline .Counter {\n color: #4f8cc9;\n background-color: #181818;\n }\n .btn-outline:focus {\n border-color: #4f8cc9;\n }\n .btn-outline.disabled, .btn-outline:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .ellipsis-expander, .hidden-text-expander a {\n color: #afafaf;\n background-color: #343434;\n }\n .ellipsis-expander:hover, .hidden-text-expander a:hover {\n background-color: #767676;\n }\n .ellipsis-expander:active, .hidden-text-expander a:active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .social-count {\n color: #c6c6c6;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .2);\n }\n .btn-link, .social-count:hover {\n color: #4f8cc9;\n }\n .btn-link {\n background-color: transparent;\n }\n .btn-link:disabled, .btn-link:disabled:hover {\n color: rgba(148, 148, 148, .5);\n }\n .form-control, .form-select {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n }\n .form-control.focus, .form-control:focus, .form-select.focus,\n .form-select:focus {\n border-color: #4f8cc9;\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .input-contrast, .input-contrast:focus {\n background-color: #181818;\n }\n :-ms-input-placeholder {\n color: #9b9b9b;\n }\n ::placeholder {\n color: #9b9b9b;\n }\n .form-checkbox label em.highlight {\n background-color: #261d08;\n }\n .form-checkbox .note, .hfields .form-group dt label {\n color: #afafaf;\n }\n .form-warning {\n color: #bba257;\n background-color: #261d08;\n border-color: #cb4;\n }\n .form-select {\n background-image: none \\9;\n }\n .form-group .form-control, .form-group .form-control:focus, .form-select {\n background-color: #181818;\n }\n .form-group dd h4.is-error {\n color: #d82828;\n }\n .form-group dd h4.is-success {\n color: #484;\n }\n .form-group.required dt label::after {\n color: #d82828;\n }\n .form-group.successful .success {\n color: #484;\n }\n .form-group.warn .warning {\n color: #bba257;\n background-color: #261d08;\n border-color: #cb4;\n }\n .form-group.warn .warning::after {\n border-bottom-color: #261d08;\n }\n .form-group.warn .warning::before {\n border-bottom-color: #cb4;\n }\n .form-group.errored label {\n color: #d82828;\n }\n .form-group.errored .error {\n color: #f84848;\n background-color: #300;\n border-color: #d82828;\n }\n .form-group.errored .error::after {\n border-bottom-color: #300;\n }\n .form-group.errored .error::before {\n border-bottom-color: #d82828;\n }\n .note {\n color: #afafaf;\n }\n .status-indicator-success .octicon-check {\n color: #484;\n fill: #484;\n }\n .status-indicator-failed .octicon-x {\n color: #d82828;\n fill: #d82828;\n }\n .inline-form .btn-plain {\n background-color: transparent;\n }\n .drag-and-drop {\n color: #afafaf;\n background-color: #181818;\n border-color: #484848;\n }\n .drag-and-drop .error {\n color: #d82828;\n }\n .drag-and-drop-error-info {\n color: #afafaf;\n }\n .drag-and-drop-error-info a {\n color: #4f8cc9;\n }\n .upload-enabled textarea {\n border-bottom-color: #343434;\n }\n .upload-enabled.focused {\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .upload-enabled.focused .drag-and-drop {\n border-color: #4f8cc9;\n }\n .previewable-comment-form .comment {\n border-color: #484848;\n }\n h2.account, p.explain {\n color: #afafaf;\n }\n p.explain strong {\n color: #c6c6c6;\n }\n p.explain .octicon {\n color: #767676;\n }\n .menu {\n background-color: #181818;\n border-color: #343434;\n }\n .menu-item {\n border-bottom-color: #343434;\n }\n .menu-item:hover {\n background-color: #222;\n }\n .menu-item.selected {\n color: #c6c6c6;\n background-color: #181818;\n }\n .menu-item.selected::before {\n background-color: #fb8532;\n }\n .menu-item .octicon {\n color: #c6c6c6;\n }\n .menu-item .menu-warning {\n color: #f84848;\n }\n .menu-item.alert .Counter {\n color: #d82828;\n }\n .menu-heading {\n color: #afafaf;\n }\n .menu-heading, .tabnav {\n border-bottom-color: #343434;\n }\n .tabnav-tab {\n color: #afafaf;\n background-color: transparent;\n }\n .tabnav-tab.selected {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n }\n .tabnav-tab:focus, .tabnav-tab:hover {\n color: #c6c6c6;\n }\n .tabnav-extra {\n color: #afafaf;\n }\n a.tabnav-extra:hover {\n color: #4f8cc9;\n }\n .filter-list.pjax-active .filter-item {\n color: #afafaf;\n background-color: transparent;\n }\n .filter-list.pjax-active .filter-item.pjax-active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item {\n color: #afafaf;\n }\n .filter-item:hover {\n background-color: #2c2c2c;\n }\n .filter-item.selected {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item .bar {\n background-color: #242424;\n }\n .subnav-bordered {\n border-bottom-color: #2c2c2c;\n }\n .subnav-item {\n color: #afafaf;\n border-color: #343434;\n }\n .subnav-item:focus, .subnav-item:hover {\n background-color: #222;\n }\n .subnav-item.selected, .subnav-item.selected:focus,\n .subnav-item.selected:hover {\n color: #fff;\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .subnav-search-input {\n color: #afafaf;\n }\n .subnav-search-icon {\n color: #767676;\n }\n .subnav-search-context .btn {\n color: #afafaf;\n }\n .UnderlineNav {\n border-bottom-color: #343434;\n }\n .UnderlineNav-item {\n color: #afafaf;\n }\n .UnderlineNav-item:focus, .UnderlineNav-item:hover {\n color: #c6c6c6;\n border-bottom-color: #343434;\n }\n .UnderlineNav-item:focus .UnderlineNav-octicon,\n .UnderlineNav-item:hover .UnderlineNav-octicon {\n color: #9b9b9b;\n }\n .UnderlineNav-item.selected {\n color: #c6c6c6;\n border-bottom-color: #fb8532;\n }\n .UnderlineNav-item.selected .UnderlineNav-octicon {\n color: #9b9b9b;\n }\n .UnderlineNav-octicon {\n color: #767676;\n }\n .pagination a, .pagination em, .pagination span {\n color: #4f8cc9;\n background-color: #181818;\n border-color: #343434;\n }\n .pagination a:focus, .pagination a:hover, .pagination em:focus,\n .pagination em:hover, .pagination span:focus, .pagination span:hover {\n background-color: #242424;\n border-color: #343434;\n }\n .pagination .current, .pagination .current:hover {\n color: #fff;\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .pagination .disabled, .pagination .disabled:hover, .pagination .gap,\n .pagination .gap:hover {\n color: #343434;\n background-color: #181818;\n }\n .tooltipped::after {\n color: #fff;\n background-color: #dcdcdc;\n }\n .tooltipped::before {\n color: #dcdcdc;\n }\n .tooltipped-s::before, .tooltipped-se::before, .tooltipped-sw::before {\n border-bottom-color: #dcdcdc;\n }\n .tooltipped-n::before, .tooltipped-ne::before, .tooltipped-nw::before {\n border-top-color: #dcdcdc;\n }\n .tooltipped-w::before {\n border-left-color: #dcdcdc;\n }\n .tooltipped-e::before {\n border-right-color: #dcdcdc;\n }\n .border {\n border-color: #343434 !important;\n }\n .border-y {\n border-top-color: #343434 !important;\n border-bottom-color: #343434 !important;\n }\n .border-blue {\n border-color: #4f8cc9 !important;\n }\n .border-blue-light {\n border-color: #246 !important;\n }\n .border-green {\n border-color: #373 !important;\n }\n .border-green-light {\n border-color: #040 !important;\n }\n .border-red, .border-red-light {\n border-color: #d82828 !important;\n }\n .border-purple {\n border-color: #73589a !important;\n }\n .border-yellow {\n border-color: #cb4 !important;\n }\n .border-gray-light {\n border-color: #2c2c2c !important;\n }\n .border-gray-dark {\n border-color: #343434 !important;\n }\n .border-black-fade {\n border-color: rgba(220, 220, 220, .15) !important;\n }\n .border-top {\n border-top-color: #343434 !important;\n }\n .border-right {\n border-right-color: #343434 !important;\n }\n .border-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-left {\n border-left-color: #343434 !important;\n }\n @media (min-width: 544px) {\n .border-sm-top {\n border-top-color: #343434 !important;\n }\n .border-sm-right {\n border-right-color: #343434 !important;\n }\n .border-sm-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-sm-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 768px) {\n .border-md-top {\n border-top-color: #343434 !important;\n }\n .border-md-right {\n border-right-color: #343434 !important;\n }\n .border-md-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-md-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1012px) {\n .border-lg-top {\n border-top-color: #343434 !important;\n }\n .border-lg-right {\n border-right-color: #343434 !important;\n }\n .border-lg-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-lg-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1280px) {\n .border-xl-top {\n border-top-color: #343434 !important;\n }\n .border-xl-right {\n border-right-color: #343434 !important;\n }\n .border-xl-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-xl-left {\n border-left-color: #343434 !important;\n }\n }\n .box-shadow {\n box-shadow: 0 1px 1px #000 !important;\n }\n .box-shadow-medium {\n box-shadow: 0 1px 5px #000 !important;\n }\n .box-shadow-large {\n box-shadow: 0 1px 15px #000 !important;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .bg-white {\n background-color: #181818 !important;\n }\n .bg-blue {\n background-color: #4f8cc9 !important;\n }\n .bg-blue-light {\n background-color: #182030 !important;\n }\n .bg-gray {\n background-color: #222 !important;\n }\n .bg-gray-light {\n background-color: #181818 !important;\n }\n .bg-green {\n background-color: #484 !important;\n }\n .bg-green-light {\n background-color: #002800 !important;\n }\n .bg-red {\n background-color: #d82828 !important;\n }\n .bg-red-light {\n background-color: #300 !important;\n }\n .bg-yellow {\n background-color: #cb4 !important;\n }\n .bg-yellow-light {\n background-color: #651 !important;\n }\n .bg-purple {\n background-color: #73589a !important;\n }\n .bg-purple-light {\n background-color: #213 !important;\n }\n .text-blue {\n color: #4f8cc9 !important;\n }\n .text-red {\n color: #d82828 !important;\n }\n .text-gray-light {\n color: #9b9b9b !important;\n }\n .text-gray {\n color: #afafaf !important;\n }\n .text-gray-dark {\n color: #c6c6c6 !important;\n }\n .text-green {\n color: #484 !important;\n }\n .text-orange {\n color: #f3582c !important;\n }\n .text-orange-light {\n color: #fb8532 !important;\n }\n .text-purple {\n color: #73589a !important;\n }\n .text-white {\n color: #fff !important;\n }\n .bg-pending, .text-pending {\n color: #cb4 !important;\n }\n .link-gray {\n color: #afafaf !important;\n }\n .link-gray:hover {\n color: #4f8cc9 !important;\n }\n .link-gray-dark {\n color: #c6c6c6 !important;\n }\n .link-gray-dark:hover, .link-hover-blue:hover {\n color: #4f8cc9 !important;\n }\n .muted-link {\n color: #afafaf !important;\n }\n .muted-link:hover {\n color: #4f8cc9 !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .details-overlay-dark[open] > summary::before {\n background-color: rgba(220, 220, 220, .5);\n }\n .lead {\n color: #afafaf;\n }\n .text-emphasized {\n color: #c6c6c6;\n }\n .text-shadow-dark {\n text-shadow: 0 1px 1px rgba(220, 220, 220, .25), 0 1px 25px rgba(27, 31, 35, .75);\n }\n .text-shadow-light {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n .flash {\n color: #9daccc;\n background-color: #182030;\n border-color: rgba(220, 220, 220, .15);\n }\n .flash-close {\n background: none;\n }\n .flash-warn {\n color: #bba257;\n background-color: #261d08;\n }\n .flash-error, .flash-warn {\n border-color: rgba(220, 220, 220, .15);\n }\n .flash-error {\n color: #f84848;\n background-color: #300;\n }\n .flash-success {\n color: #6cc644;\n background-color: #002800;\n border-color: rgba(220, 220, 220, .15);\n }\n .warning {\n background-color: #261d08;\n }\n .avatar-child {\n background-color: #181818;\n box-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n }\n .avatar-stack .avatar {\n background-color: #181818;\n border-right-color: var(--ghd-bg-color);\n }\n .avatar-stack .avatar:only-child {\n background-color: transparent;\n }\n .AvatarStack-body {\n background-color: #181818;\n }\n .AvatarStack-body .avatar {\n background-color: #181818;\n border-right-color: var(--ghd-bg-color);\n }\n .avatar.avatar-more {\n background-color: #222;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before {\n outline: 1px solid #181818;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before,\n .AvatarStack--right .avatar.avatar-more {\n background-color: #343434;\n }\n .AvatarStack--right .avatar.avatar-more::after {\n background-color: #222;\n }\n .AvatarStack--right .avatar {\n border-left-color: var(--ghd-bg-color);\n }\n .DashedConnection::before {\n border-bottom-color: #343434;\n }\n .blankslate {\n background-color: #181818;\n border-color: #343434;\n box-shadow: inset 0 0 10px rgba(220, 220, 220, .05);\n }\n .blankslate code {\n background-color: #181818;\n border-color: #2c2c2c;\n }\n .blankslate-icon {\n color: #767676;\n }\n .blankslate-clean-background {\n background: none;\n box-shadow: none;\n }\n .branch-name {\n color: rgba(230, 230, 230, .6);\n background-color: #182030;\n }\n .branch-name .octicon {\n color: #767676;\n }\n a.branch-name {\n color: #4f8cc9;\n }\n .label, .Label {\n color: #fff;\n }\n .Label--gray {\n color: #afafaf;\n background-color: #2c2c2c;\n }\n .Label--outline {\n color: #afafaf;\n background-color: transparent;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .Label--outline-green {\n color: #484;\n border-color: #373;\n }\n .Label--gray-darker {\n background-color: #444;\n }\n .Label--orange {\n background-color: #f3582c;\n }\n .state, .State {\n color: #fff;\n background-color: #444;\n }\n .State--green {\n background-color: #373;\n }\n .State--purple {\n background-color: #73589a;\n }\n .State--red {\n background-color: #d82828;\n }\n .Counter {\n color: #afafaf;\n }\n .Counter, .Counter--gray-light {\n background-color: rgba(220, 220, 220, .15);\n }\n .Counter--gray-light {\n color: #c6c6c6;\n }\n .Counter--gray {\n color: #fff;\n background-color: #444;\n }\n .markdown-body .absent {\n color: #d82828;\n }\n .markdown-body hr {\n background-color: #343434;\n }\n .markdown-body blockquote {\n color: #9b9b9b;\n border-left-color: #343434;\n }\n .markdown-body kbd {\n color: #afafaf;\n background-color: #181818;\n border-color: #767676 #767676 #484848;\n box-shadow: inset 0 -2px 0 #383838;\n }\n .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link,\n .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link,\n .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link {\n color: #dcdcdc;\n }\n .markdown-body h1, .markdown-body h2 {\n border-bottom-color: #2c2c2c;\n }\n .markdown-body h6 {\n color: #9b9b9b;\n }\n .markdown-body table td, .markdown-body table th {\n border-color: #343434;\n }\n .markdown-body table tr {\n background-color: #181818;\n border-top-color: #767676;\n }\n .markdown-body table tr:nth-child(2n) {\n background-color: #222;\n }\n .markdown-body table img {\n background-color: transparent;\n }\n .markdown-body img {\n background-color: #181818;\n }\n .markdown-body .emoji {\n background-color: transparent;\n }\n .markdown-body span.frame > span {\n border-color: #343434;\n }\n .markdown-body span.frame span span {\n color: #c6c6c6;\n }\n .markdown-body code, .markdown-body tt {\n background-color: rgba(220, 220, 220, .05);\n }\n .markdown-body pre > code {\n background-color: transparent;\n }\n .markdown-body .highlight pre, .markdown-body pre {\n background-color: #222;\n }\n .markdown-body pre code, .markdown-body pre tt {\n background-color: transparent;\n }\n .markdown-body .csv-data .blob-num {\n background-color: #181818;\n }\n .markdown-body .csv-data th {\n background-color: #222;\n }\n .Popover-message::before {\n border-bottom-color: rgba(220, 220, 220, .15);\n }\n .Popover-message::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .Popover-message--bottom-left::before,\n .Popover-message--bottom-right::before, .Popover-message--bottom::before {\n border-top-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--bottom-left::after, .Popover-message--bottom-right::after,\n .Popover-message--bottom::after {\n border-top-color: var(--ghd-bg-color);\n }\n .Popover-message--right-bottom::before, .Popover-message--right-top::before,\n .Popover-message--right::before {\n border-left-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--right-bottom::after, .Popover-message--right-top::after,\n .Popover-message--right::after {\n border-left-color: var(--ghd-bg-color);\n }\n .Popover-message--left-bottom::before, .Popover-message--left-top::before,\n .Popover-message--left::before {\n border-right-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--left-bottom::after, .Popover-message--left-top::after,\n .Popover-message--left::after {\n border-right-color: var(--ghd-bg-color);\n }\n .Progress {\n background-color: #343434;\n }\n .Subhead {\n border-bottom-color: #343434;\n }\n .Subhead-heading--danger {\n color: #d82828;\n }\n .pullquote, .Subhead-description {\n color: #afafaf;\n }\n .pullquote {\n border-left-color: #343434;\n }\n .btn-orange {\n color: #fff;\n }\n .btn-orange.hover, .btn-orange:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-orange.selected, .btn-orange:active, [open] > .btn-orange {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-orange.disabled, .btn-orange:disabled {\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-orange .Counter, .btn-outline-purple {\n background-color: #181818;\n }\n .btn-outline-purple {\n color: #73589a;\n background-image: none;\n }\n .btn-outline-purple.selected, .btn-outline-purple:active,\n .btn-outline-purple:hover, [open] > .btn-outline-purple {\n color: #fff;\n background-color: #73589a;\n background-image: none;\n border-color: #73589a;\n }\n .btn-outline-purple.selected .Counter, .btn-outline-purple:active .Counter,\n .btn-outline-purple:hover .Counter, [open] > .btn-outline-purple .Counter {\n color: #73589a;\n background-color: #181818;\n }\n .btn-outline-purple:focus {\n border-color: #73589a;\n }\n .btn-outline-purple.disabled, .btn-outline-purple:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-outline-orange {\n color: #fb8532;\n background-color: #181818;\n background-image: none;\n }\n .btn-outline-orange.selected, .btn-outline-orange:active,\n .btn-outline-orange:hover, [open] > .btn-outline-orange {\n color: #fff;\n background-color: #fb8532;\n background-image: none;\n border-color: #fb8532;\n }\n .btn-outline-orange.selected .Counter, .btn-outline-orange:active .Counter,\n .btn-outline-orange:hover .Counter, [open] > .btn-outline-orange .Counter {\n color: #fb8532;\n background-color: #181818;\n }\n .btn-outline-orange:focus {\n border-color: #fb8532;\n }\n .btn-outline-orange.disabled, .btn-outline-orange:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-outline-green {\n color: #484;\n background-color: #181818;\n background-image: none;\n }\n .btn-outline-green.selected, .btn-outline-green:active,\n .btn-outline-green:hover, [open] > .btn-outline-green {\n color: #fff;\n background-color: #484;\n background-image: none;\n border-color: #484;\n }\n .btn-outline-green.selected .Counter, .btn-outline-green:active .Counter,\n .btn-outline-green:hover .Counter, [open] > .btn-outline-green .Counter {\n color: #484;\n background-color: #181818;\n }\n .btn-outline-green:focus {\n border-color: #484;\n }\n .btn-outline-green.disabled, .btn-outline-green:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-transparent {\n color: #fff;\n background-color: transparent;\n background-image: none;\n border-color: hsla(0, 0%, 0%, .5);\n }\n .btn-transparent:active, .btn-transparent:hover {\n color: #c6c6c6;\n background-color: #181818;\n background-image: none;\n border-color: var(--ghd-bg-color);\n }\n .jumbotron-shadow::after {\n background-color: transparent;\n }\n .jumbotron-photo {\n background-color: #181818;\n }\n .data-table {\n border-color: #343434;\n box-shadow: 0 1px 1px rgba(220, 220, 220, .05);\n }\n .data-table td, .data-table th {\n border-right-color: #343434;\n border-bottom-color: #343434;\n }\n .data-table tbody td, .data-table tbody th,\n .data-table tbody tr:last-child td, .data-table tbody tr:last-child th {\n border-bottom-color: #343434;\n }\n .border-white-fade {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n .footer {\n background-color: #222;\n }\n #token {\n color: #fff;\n }\n .token-did-copy {\n background-color: #181818;\n }\n /* end vscode-auth.github.com rules */\n .footer {\n background: #202020;\n }\n #token {\n background: #182030;\n border-color: #343434;\n }\n .token-did-copy {\n background: #181818;\n }\n .failed {\n border-color: #343434;\n }", + "start": 1418346, + "domains": [ + "vscode-auth.github.com" + ] + }, + { + "code": ":root:root {\n /* github dark vars */\n --ghd-bg-custom: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAAAAABURb1YAAAFnklEQVR4AWWXCY4cwXbE6h4JMhCvMPc/ov+3Ox9QsLCGpKlFHILd+UQ559AGDkBSFXWmomonqkL/XuUcIPUcONjHCJyE36KaqNiaRnVCG9TGpgIU9hIfohCBVGj24ammo04lU3Fy0NZDAyZi5AElHjgEGlRbG1WjraIt7TmADQkAaoEHsOXAAaeqat9RVTqjosyEH5W+DQCQt8BzIJMfXJI3e5tGRefSlRn3NrO3scnvNl26FN5RITGNfjm3GM/+FhQgnlQeImC+dEm8rzHVTNGL9EADVsTAIfGJBziRy7RlmcZU1IYpHIj+4JrWym8/XSwzompmFNVOFdTOAAfs61KZ6eXcp57fykQUOxNBmTesz2HpCnCg3UV/bA7VRpWGNqKtrYLTs0ilCjgxiZxjeLC5dDPBFn4Pn2ja6BRUL10DTgET4Focq8rn8casxV4E5tIlZvytqtfivCOKZrqc38G7egnkXecyPZdzubc57VtUnbfL+a0u3b1N3d9Mci7cKocHoh3xihLQ6fXUlgTOOfVkXSUFINoWHhqxE23RTmCqtoEJaITkIrUCkU9fnqpqm+40VSXS3CLaSzfGBb4rPuOSfN0ylLve6/jpcrbL2dTlnOdv5AamKjLvLN1XruMNS/cul/hx8twKpKYRaE2DOp8+c+lW7uVXVQ7Vx0x1G3HXjNocsHCac7NbWc6egwJVHu2kRTVNC2pqv2U4XNsv5/yWJlV9+NJ1C7xluInlcr7rK+Kg+qy7onQqgnbi7UHcS3qXjdw3bO5tumycYlVssMI5EXXpRnatPK362KodtVU60cm+eQT10sVLFwJYlVaf7UGSoi5dQF3DvnTX3UvXTPO8quKH7jsXhm/PxfKWZXqBM5sS33kmKtC31Q05fI095i5IPpyzRXqSy1Sr17p1F7NE8vMtnNbLpVVtk8c0OrfF0sKxHnIpYgHW4puMomTz8mgmrSjpvrxhX97l7LqLpl7bW9BH9/MNzF8XwRqL8/m7c30eFYV5VX3QTquK06XbLt16F4ks+8Z9m6gPtpcuk3OvibCekng4lzMHi9MoqZmKj9tdbQCbc7bcEA+oEJduRNNL1waf1tuI9MDBUK8t3k9uFz3rrqadO9Ln9TL/ezlwDvky3TW7ZmXfpc77TN0yhOXnP939LvVDV9s+tgLTm0TqYd1lea3PRFuVjLa562HdPbCfascGrvO3DMeIATVqVRO8vfHrbupdfo1dzlXUdkVLZsS1mLPG3rWcl+4B1l1537h0VXzU1tyLG7cCu+LSrSqo06hocy3WCcil65qHDbuEYzQN2HpT3jFt9LEFvHTP1nxbXOEkbhkKmd+6BTfVZ/I143z/Fyz6Za92o0I7I6gzfeYAHPwy/Rb43L9TLtMt8CtwW1xvQvbR1g9n7qJRNN1kdxcdH7cM58Szxq679MdLOhE72t6VNEpHHkzwRyjBcGth+dE99pIkVbWaEWmvnQ8Yl7Mp59zpRWXdNo6odrO754Zzvxf/010nP7onb1TR+bgbVPB9PcADJvH/043Kvk0UzLRxQ6UiaeTAcyxYl2lyrrvZv8v2wE7U1uVcST0821jJeIDKWuyxiqnuko7q3+zJYXJ46nV3D67EyL+lQ9F2qkr+3kUafQpwYE8T329p6y7OX1TF97fQv/c+l87zj7Hsgpig4qRLd9fMPs74rLGyCzRbhmVqpy7nqvPmTD1gvKe7b2U8u1QzmtuDuEtbgT3c8QBJveo6cueFkUwv59nVmfFw1jl4/unuOT9qERV76ers8n23z/c8/Xy7a4lwwLplmGusbRp33Up13+ZDN3KPxNVMhY62vUQyRTse6+cKHtZYjIfDh260Cjbb3Vy6R8H8SMBzqSwrsB1UTacoknlnOb8V4JD9Njfpwz/fHjpBUeevcAtcl65sqXPX9D87RUTLc/dfOgAAAABJRU5ErkJggg==);\n --ghd-bg-img: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAAAAABURb1YAAAFoUlEQVR4AWXWCY7kMJcDYd9DiCD4jLr/EWezJOT8vbMXy8ZngpVPlLUWbWABJFVRZyqqdqIq9O9V1gJS14KFfYzASvgS1UTF1jSqE9qgNjYVoNxLfIhCBFKhOTdPNR11KpmKk4W2LhowESMPKHHBItCg2tqoGm0VbWnXAmxIAFALPIAtCxY4VVX7jqrSGRVlJnwqfRsAIG+BZ0EmHy7Jm3NMo6KzdWXGc8ycY2zyHdOrW3hHhcQ0+uvcYlz3LQgQVyrPp2t+dUncjzHVTNFNuvhwK2Jgkfh856/INm05pjEVtWEKC6IfrmmtfPnpYZkRVTPjFztVUDsDLLCvR2WmX6RPXV/KRBQ7E0GZN5w+5+rKd2J7Ev1sFtVGlYY2oq2tgtN1SakCTkwiaxkebLZuJtjCd/OvyY1OQXXrGnAKfE67xbGq/NzemNviTWC2LjHjl6ruFucdUTTT4/wO7tQtkPd0LtO1ncs+ZrVvUXXeHue3Xt1zTD1vJlkbt8rigWhH3EUJ6HT31JYE1lp15XY1BSDaFh4asRNt0U5gqraB+UyFZJNagXh/qTxV1TY90VSVSLMX0W7dGA/4SfEZj+R7l6Hs9O6Orx5ne51Tj3Oev5E9MFWReefovrI73lzdnTziy8mTRjU1jZ99GtT52We2bmVfvqvKovqYqZ6N2GlGbRZYWM3CRKzX2bVQoMqjnbSopmlBTe3vMix227dzvqRJVR9+dT0LfJZhTyzbeaffIg6qz+muKJ2KoJ249yD3ku5kI/sJm31Mj41TrIoNVlgrolc33nTK06qPrdpRW6UTnZwnj6BuXdy6EMCqtPqcPUhS9OoC6mnYr+7p7tY10zyfLv7ovrMxfLs2y9trusGZMyW+80zU7z9Wz5D//8YusxMkP845i/Qk21Sru3W3u+aI5OtbWK3bpVVtk8c0OnuLpYVlXWQrYgFui0nAouTMy6OZtKKk5+EN9+GPs6e7aOpuewv6eL++gfnrIbiNdX7+bu0+j4rCvKo+aKdVxenV7dGtO3F1aRrP00R9sN26TNa+JsLpKYmLtZ1ZWJxGSc1UfDy7q/1Ms9ZdbuICFXJ1I5puXRt8WlXTpAsWhrrb4v7K7e3N7a5pZ4f0ed3mfy8L1iLzr3PmpDllv0nnfaaeZcj185/d/U3qj662fWwFpnsSqYvb3eN1+ky0Vclom50eTncXxA9x2cDu/F6GZcSAGrWqCe698be7qTv529jjXEVtT9GSGbktZp3G7nScj+4CTnflfXN1VXzU1uyLG88KnBSPblVBnUZFm91inYBsXW/zbG4SltE0YKtp1I5po4/tbWxYZ83PFldYiWcZCpkvaUc11Weu7iYwhltZfu3VnlGhnRHUmT6zABb+mv4u8Np/p1xTVd9XYG9x3RNybm39cWYnGkXTO9kn0fG5y7BWXKexp7v085JOxI62OyWN0pEHE/yEEgx7LSyf7rJbklTVakak3e18wHicTVlrRzeV9WzjiGrP7NqZAmt/Lv5nd518uitvVNH56W5Qwfd1AQ+YxP/UjXqfJgpm2tyhUpE0suBZFqzHNFm7uzl/l7sHnajtdf68Fs/ZWMm4gHpb/OliqjfRUf2bmBGYLJ66u5vJrpqRf5cORdupKvl7D2n06VdiMl3/sbvrdBfnL6ri+yX07933pfP801huIiaoOLm6J82c2xkfb2NPAs1Zhmva6XWuOm/W1P0+Hmz4XRnXTWpGs/cgN2nvZwsiPEBSd3Ud2XFjJNPtPCd1Zlys2zmef3Z3rU8tomK3rs5N73v3+ZXd4uY6E2GB9SzD7MbaprkJYN1rn1/dSCJrWc1U6GjbLZIp2nFZf67g4e6ucbH40Y1WwebsbrbuUjCfxGdzG/uldlA1naJI5p3j/FaARdxvZtKHfz49dIKizl9hL3Cvruf/3Sum/w07RUTLccAlwgAAAABJRU5ErkJggg==);\n --ghd-bg-color: #202020;\n --ghd-code-background: #141414;\n --ghd-main-background: #181818;\n --ghd-border-color: #343434;\n --ghd-code-color: #ccc;\n --ghd-body-color: #ccc;\n /* github vars */\n --color-alert-error-bg: #341414;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-info-icon: #9daccc;\n --color-alert-info-text: #9daccc;\n --color-alert-warn-bg: #241c10;\n --color-ansi-black-bright: #282828;\n --color-ansi-black: #181818;\n --color-ansi-blue-bright: #c8e1ff;\n --color-ansi-blue: #79b8ff;\n --color-ansi-cyan-bright: #b3f0ff;\n --color-ansi-cyan: #76e3ea;\n --color-ansi-gray: #959da5;\n --color-ansi-green-bright: #bef5cb;\n --color-ansi-green: #85e89d;\n --color-ansi-magenta-bright: #d1bcf9;\n --color-ansi-magenta: #b392f0;\n --color-ansi-red-bright: #fdaeb7;\n --color-ansi-red: #f97583;\n --color-ansi-white-bright: #e1e4e8;\n --color-ansi-white: #e1e4e8;\n --color-ansi-yellow-bright: #fff5b1;\n --color-ansi-yellow: #ffea7f;\n --color-auto-blue-2: rgba(79, 140, 201, .25);\n --color-auto-blue-3: rgba(79, 140, 201, .5);\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-gray-1: #212121;\n --color-auto-gray-2: #282828;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #606060;\n --color-auto-gray-5: #767676;\n --color-auto-gray-6: #9b9b9b;\n --color-auto-gray-7: #afafaf;\n --color-auto-white: #181818;\n --color-autocomplete-bg: #181818;\n --color-autocomplete-border: #343434;\n --color-autocomplete-row-border: #181818;\n --color-avatar-bg: none;\n --color-avatar-border: none;\n --color-bg-canvas-inset: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-mobile: var(--ghd-bg-color);\n --color-bg-canvas: var(--ghd-bg-color);\n --color-bg-discussions-row-emoji-box: #343434;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-info: #182030;\n --color-bg-overlay: #181818;\n --color-bg-primary: #181818;\n --color-bg-secondary: #1c1c1c;\n --color-bg-tertiary: #212121;\n --color-blankslate-icon: #afafaf;\n --color-border-inverse: #343434;\n --color-border-overlay: #343434;\n --color-border-primary: #343434;\n --color-border-secondary: #343434;\n --color-border-tertiary: #484848;\n --color-box-bg-info: #182030;\n --color-box-blue-border: #246;\n --color-box-border-info: #246;\n --color-btn-bg-hover: #222;\n --color-btn-bg: #181818;\n --color-btn-border: #343434;\n --color-btn-danger-hover-text: #fff;\n --color-btn-danger-selected-text: #fff;\n --color-btn-danger-shadow: none;\n --color-btn-focus-border: #484848;\n --color-btn-focus-shadow: none;\n --color-btn-hover-bg: #222;\n --color-btn-hover-border: #484848;\n --color-btn-inverse-on-hover-shadow-inset: none;\n --color-btn-outline-disabled-bg: #242424;\n --color-btn-outline-focus-border: #4f8cc9;\n --color-btn-outline-focus-shadow: none;\n --color-btn-outline-hover-bg: #222;\n --color-btn-outline-hover-border: #4f8cc9;\n --color-btn-outline-hover-inset-shadow: none;\n --color-btn-outline-hover-shadow: none;\n --color-btn-outline-hover-text: #4f8cc9;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: #4f8cc9;\n --color-btn-outline-selected-text: #fff;\n --color-btn-outline-shadow-focus: none;\n --color-btn-outline-shadow: none;\n --color-btn-outline-text: #4f8cc9;\n --color-btn-primary-disabled-shadow: none;\n --color-btn-primary-shadow-highlight: none;\n --color-btn-primary-shadow-selected: none;\n --color-btn-primary-text: #fff;\n --color-btn-selected-bg: #282828;\n --color-btn-shadow-input-focus: none;\n --color-btn-text: #c6c6c6;\n --color-calendar-graph-day-bg: #282828;\n --color-calendar-graph-day-L1-bg: rgba(79, 140, 201, .25);\n --color-calendar-graph-day-L2-bg: rgba(79, 140, 201, .5);\n --color-calendar-graph-day-L3-bg: rgba(79, 140, 201, .75);\n --color-calendar-graph-day-L4-bg: #4f8cc9;\n --color-checks-bg: #181818;\n --color-checks-btn-hover-bg: #343434;\n --color-checks-btn-hover-icon: #afafaf;\n --color-checks-btn-icon: #606060;\n --color-checks-dropdown-bg: #343434;\n --color-checks-dropdown-border: #484848;\n --color-checks-dropdown-btn-hover-bg: #282828;\n --color-checks-dropdown-btn-hover-text: #c6c6c6;\n --color-checks-dropdown-hover-bg: #4f8cc9;\n --color-checks-dropdown-hover-text: #fff;\n --color-checks-dropdown-text: #afafaf;\n --color-checks-gate-text: #767676;\n --color-checks-header-border: #343434;\n --color-checks-header-icon: #606060;\n --color-checks-header-label-open-text: #afafaf;\n --color-checks-header-label-text: #afafaf;\n --color-checks-input-bg: #282828;\n --color-checks-input-focus-text: #afafaf;\n --color-checks-input-placeholder-text: #565656;\n --color-checks-input-shadow: none;\n --color-checks-input-text: #767676;\n --color-checks-line-dt-fm-text: #222;\n --color-checks-line-hover-bg: #242424;\n --color-checks-line-num-text: #606060;\n --color-checks-line-selected-bg: #242424;\n --color-checks-line-text: #9b9b9b;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-logline-error-num-text: #767676;\n --color-checks-logline-error-text: #767676;\n --color-checks-logline-num-text: #767676;\n --color-checks-logline-text: #606060;\n --color-checks-logline-warning-text: #767676;\n --color-checks-scrollbar-thumb-bg: #484848;\n --color-checks-step-header-open-bg: #282828;\n --color-checks-text-link: #4f8cc9;\n --color-checks-text-primary: #afafaf;\n --color-checks-text-secondary: #767676;\n --color-counter-bg: #343434;\n --color-counter-primary-bg: #484848;\n --color-counter-primary-text: #bfbfbf;\n --color-counter-secondary-text: #9b9b9b;\n --color-counter-text: #afafaf;\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-addition-num-bg: #0a320a;\n --color-diff-blob-addition-word-bg: #252;\n --color-diff-blob-comment-button-icon: #fff;\n --color-diff-blob-deletion-line-bg: #380000;\n --color-diff-blob-deletion-num-bg: #420a0a;\n --color-diff-blob-deletion-word-bg: #622;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-expander-hover-icon: #fff;\n --color-diff-blob-expander-icon: #9b9b9b;\n --color-diff-blob-hunk-line-bg: #202020;\n --color-diff-blob-hunk-num-bg: #2b2b2b;\n --color-diff-blob-hunk-text: #9b9b9b;\n --color-diff-blob-num-hover-text: #c6c6c6;\n --color-diff-blob-num-text: #767676;\n --color-diffstat-addition-bg: #6cc644;\n --color-diffstat-addition-border: #6cc644;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-neutral-bg: #484848;\n --color-diffstat-neutral-border: #484848;\n --color-files-explorer-icon: #4f8cc9;\n --color-footer-invertocat-octicon: #484848;\n --color-global-nav-icon: none;\n --color-global-nav-logo: none;\n --color-global-nav-text: none;\n --color-header-search-bg: #202020;\n --color-header-search-border: #343434;\n --color-header-text: #c6c6c6;\n --color-hidden-text-expander-bg-hover: #484848;\n --color-hidden-text-expander-bg: #343434;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-input-bg: #181818;\n --color-input-border: #343434;\n --color-input-contrast-bg: #181818;\n --color-input-disabled-bg: #343434;\n --color-input-disabled-border: #484848;\n --color-input-shadow-focus: none;\n --color-input-shadow: none;\n --color-label-primary-border: #484848;\n --color-label-primary-text: #9b9b9b;\n --color-label-secondary-border: #343434;\n --color-label-secondary-text: #767676;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-code-bg: #222;\n --color-markdown-table-border: #343434;\n --color-menu-bg-active: #242424;\n --color-menu-heading-text: #767676;\n --color-mktg-btn-text: #fff;\n --color-merge-box-error-icon-text: #fff;\n --color-merge-box-merged-icon-text: #fff;\n --color-merge-box-neutral-icon-border: transparent;\n --color-merge-box-neutral-icon-text: #fff;\n --color-merge-box-neutral-indicator-bg: #484848;\n --color-merge-box-success-icon-text: #fff;\n --color-merge-box-warning-icon-text: #fff;\n --color-pr-state-closed-bg: #d82828;\n --color-pr-state-closed-border: transparent;\n --color-pr-state-closed-text: #fff;\n --color-pr-state-draft-bg: #484848;\n --color-pr-state-draft-border: transparent;\n --color-pr-state-draft-text: #fff;\n --color-pr-state-merged-bg: #73589a;\n --color-pr-state-merged-border: transparent;\n --color-pr-state-merged-text: #fff;\n --color-pr-state-open-bg: #484;\n --color-pr-state-open-border: transparent;\n --color-pr-state-open-text: #fff;\n --color-project-card-bg: #202020;\n --color-project-sidebar-bg: #202020;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #606060;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #bfbfbf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #dfdfdf;\n --color-scale-white: #181818;\n --color-search-hover-hl: #242424;\n --color-select-menu-backdrop-border: #343434;\n --color-select-menu-border-secondary: #343434;\n --color-select-menu-shadow: none;\n --color-shadow-highlight: none;\n --color-shadow-inset: none;\n --color-shadow-large: none;\n --color-shadow-medium: none;\n --color-shadow-small: none;\n --color-sidenav-selected-bg: #343434;\n --color-social-count-bg: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-icon: #fff;\n --color-state-hover-primary-text: #fff;\n --color-state-hover-secondary-bg: #242424;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-icon: #fff;\n --color-state-selected-primary-text: #fff;\n --color-text-disabled: #707070;\n --color-text-inverse: #000;\n --color-text-link: #4f8cc9;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-white: #fff;\n --color-timeline-badge-bg: #383838;\n --color-timeline-text: #c6c6c6;\n --color-tooltip-text: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-icon: #afafaf;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text: #afafaf;\n --color-upload-enabled-border: #343434;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-verified-badge-text: #6cc644;\n --color-workflow-card-bg: #303030;\n }", + "start": 1447113, + "regexps": [ + "^https?://((education|graphql|gist|guides|raw|resources|status|developer|support|vscode-auth)\\.)?github\\.com/((?!(sponsors)).)*$", + "^https?://www\\.zuora\\.com.*github\\.com.*" + ], + "domains": [ + "githubusercontent.com", + "www.githubstatus.com", + "stylishthemes.github.io" + ] + } + ], + "usercssData": { + "name": "GitHub Dark", + "namespace": "StylishThemes", + "version": "4.2.244", + "homepageURL": "https://github.com/StylishThemes/GitHub-Dark", + "updateURL": "https://stylishthemes.github.io/GitHub-Dark/github-dark.user.css", + "license": "BSD-2-Clause", + "author": "StylishThemes", + "vars": { + "base-color": { + "type": "color", + "label": "Base color", + "name": "base-color", + "value": null, + "default": "rgb(79, 140, 201)", + "options": null + }, + "bg-color": { + "type": "color", + "label": "Background Color", + "name": "bg-color", + "value": null, + "default": "rgb(32, 32, 32)", + "options": null + }, + "bg-choice": { + "type": "select", + "label": "Background", + "name": "bg-choice", + "value": null, + "default": "crosshatch", + "options": [ + { + "name": "crosshatch", + "label": "Cross-Hatch", + "value": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAAAAABURb1YAAAFoUlEQVR4AWXWCY7kMJcDYd9DiCD4jLr/EWezJOT8vbMXy8ZngpVPlLUWbWABJFVRZyqqdqIq9O9V1gJS14KFfYzASvgS1UTF1jSqE9qgNjYVoNxLfIhCBFKhOTdPNR11KpmKk4W2LhowESMPKHHBItCg2tqoGm0VbWnXAmxIAFALPIAtCxY4VVX7jqrSGRVlJnwqfRsAIG+BZ0EmHy7Jm3NMo6KzdWXGc8ycY2zyHdOrW3hHhcQ0+uvcYlz3LQgQVyrPp2t+dUncjzHVTNFNuvhwK2Jgkfh856/INm05pjEVtWEKC6IfrmmtfPnpYZkRVTPjFztVUDsDLLCvR2WmX6RPXV/KRBQ7E0GZN5w+5+rKd2J7Ev1sFtVGlYY2oq2tgtN1SakCTkwiaxkebLZuJtjCd/OvyY1OQXXrGnAKfE67xbGq/NzemNviTWC2LjHjl6ruFucdUTTT4/wO7tQtkPd0LtO1ncs+ZrVvUXXeHue3Xt1zTD1vJlkbt8rigWhH3EUJ6HT31JYE1lp15XY1BSDaFh4asRNt0U5gqraB+UyFZJNagXh/qTxV1TY90VSVSLMX0W7dGA/4SfEZj+R7l6Hs9O6Orx5ne51Tj3Oev5E9MFWReefovrI73lzdnTziy8mTRjU1jZ99GtT52We2bmVfvqvKovqYqZ6N2GlGbRZYWM3CRKzX2bVQoMqjnbSopmlBTe3vMix227dzvqRJVR9+dT0LfJZhTyzbeaffIg6qz+muKJ2KoJ249yD3ku5kI/sJm31Mj41TrIoNVlgrolc33nTK06qPrdpRW6UTnZwnj6BuXdy6EMCqtPqcPUhS9OoC6mnYr+7p7tY10zyfLv7ovrMxfLs2y9trusGZMyW+80zU7z9Wz5D//8YusxMkP845i/Qk21Sru3W3u+aI5OtbWK3bpVVtk8c0OnuLpYVlXWQrYgFui0nAouTMy6OZtKKk5+EN9+GPs6e7aOpuewv6eL++gfnrIbiNdX7+bu0+j4rCvKo+aKdVxenV7dGtO3F1aRrP00R9sN26TNa+JsLpKYmLtZ1ZWJxGSc1UfDy7q/1Ms9ZdbuICFXJ1I5puXRt8WlXTpAsWhrrb4v7K7e3N7a5pZ4f0ed3mfy8L1iLzr3PmpDllv0nnfaaeZcj185/d/U3qj662fWwFpnsSqYvb3eN1+ky0Vclom50eTncXxA9x2cDu/F6GZcSAGrWqCe698be7qTv529jjXEVtT9GSGbktZp3G7nScj+4CTnflfXN1VXzU1uyLG88KnBSPblVBnUZFm91inYBsXW/zbG4SltE0YKtp1I5po4/tbWxYZ83PFldYiWcZCpkvaUc11Weu7iYwhltZfu3VnlGhnRHUmT6zABb+mv4u8Np/p1xTVd9XYG9x3RNybm39cWYnGkXTO9kn0fG5y7BWXKexp7v085JOxI62OyWN0pEHE/yEEgx7LSyf7rJbklTVakak3e18wHicTVlrRzeV9WzjiGrP7NqZAmt/Lv5nd518uitvVNH56W5Qwfd1AQ+YxP/UjXqfJgpm2tyhUpE0suBZFqzHNFm7uzl/l7sHnajtdf68Fs/ZWMm4gHpb/OliqjfRUf2bmBGYLJ66u5vJrpqRf5cORdupKvl7D2n06VdiMl3/sbvrdBfnL6ri+yX07933pfP801huIiaoOLm6J82c2xkfb2NPAs1Zhmva6XWuOm/W1P0+Hmz4XRnXTWpGs/cgN2nvZwsiPEBSd3Ud2XFjJNPtPCd1Zlys2zmef3Z3rU8tomK3rs5N73v3+ZXd4uY6E2GB9SzD7MbaprkJYN1rn1/dSCJrWc1U6GjbLZIp2nFZf67g4e6ucbH40Y1WwebsbrbuUjCfxGdzG/uldlA1naJI5p3j/FaARdxvZtKHfz49dIKizl9hL3Cvruf/3Sum/w07RUTLccAlwgAAAABJRU5ErkJggg==)" + }, + { + "name": "uniform", + "label": "Uniform Tile", + "value": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAQMAAABKLAcXAAAABlBMVEUfHx8aGhrh02scAAAAH0lEQVR4AWMQRAICeHn/kcAH8vSN6hvVN6pvVN+oPgAPQ4LItqOMdQAAAABJRU5ErkJggg==)" + }, + { + "name": "random", + "label": "Random Tile", + "value": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAgMAAAANjH3HAAAACVBMVEUaGhohISElJSUh9lebAAABwElEQVR4AY3Vua3gOBgGQQXZhgKYgwHJYAA0Ksu9CAh6hxbTbvFzfx6rNEGlHY6z5KvMw4s43mN2Z5fqYLzKyrfyXhXKnKBdD9n58UWW3Vlb3mOCmWoHHZbdV5lv8t7Ver6ldsfqumVAdbblxxcZVcd7QWq2Y6VsadS4ZTzFDbFa5XivqlxVUFG1Jd6k66u8x0RIOw0cXAiNW2z58bJ5r1LTQtVVuy1x2jK+yLTlxy3v5RogszEXSB0ZF4iYWLbMMUBGPDbvpRQUVUV9kvGU6ynrIe9FOqssJcQ4oqurCjV6ytmqco4SwvGeNCoJaphwSHoK13cyuuU9ZaQI0lB1qB8zT3GL2XjKueU9pR+gH0OlqvGUzHWLQ81O0Dg95L3Uj9qxKx0pr3LdYrnlvQKlUEnV/8v4Xt6bThZROwaO5QfTUyY4GCBWu8Wf/nO4ULtj/li3mE9Z47zlx/WU94Iq7RD5XuZ6ynjIGn9yr1VhFaq2NH9s4bP4Rt5j2NFO5MBXGVsmsD5v3gslYORsd8R1i1rrIUoLKLXlvVhgKH7ApToyhk21TJhbLDvdN151vEetJtKdOtYo4SmnOvhGpjpe+xuj3X723ghdygAAAABJRU5ErkJggg==)" + }, + { + "name": "custom", + "label": "Custom", + "value": "var(--ghd-bg-custom)" + }, + { + "name": "none", + "label": "None", + "value": "none" + } + ] + }, + "bg-custom": { + "type": "text", + "label": "Custom Background", + "name": "bg-custom", + "value": null, + "default": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAAAAABURb1YAAAFnklEQVR4AWWXCY4cwXbE6h4JMhCvMPc/ov+3Ox9QsLCGpKlFHILd+UQ559AGDkBSFXWmomonqkL/XuUcIPUcONjHCJyE36KaqNiaRnVCG9TGpgIU9hIfohCBVGj24ammo04lU3Fy0NZDAyZi5AElHjgEGlRbG1WjraIt7TmADQkAaoEHsOXAAaeqat9RVTqjosyEH5W+DQCQt8BzIJMfXJI3e5tGRefSlRn3NrO3scnvNl26FN5RITGNfjm3GM/+FhQgnlQeImC+dEm8rzHVTNGL9EADVsTAIfGJBziRy7RlmcZU1IYpHIj+4JrWym8/XSwzompmFNVOFdTOAAfs61KZ6eXcp57fykQUOxNBmTesz2HpCnCg3UV/bA7VRpWGNqKtrYLTs0ilCjgxiZxjeLC5dDPBFn4Pn2ja6BRUL10DTgET4Focq8rn8casxV4E5tIlZvytqtfivCOKZrqc38G7egnkXecyPZdzubc57VtUnbfL+a0u3b1N3d9Mci7cKocHoh3xihLQ6fXUlgTOOfVkXSUFINoWHhqxE23RTmCqtoEJaITkIrUCkU9fnqpqm+40VSXS3CLaSzfGBb4rPuOSfN0ylLve6/jpcrbL2dTlnOdv5AamKjLvLN1XruMNS/cul/hx8twKpKYRaE2DOp8+c+lW7uVXVQ7Vx0x1G3HXjNocsHCac7NbWc6egwJVHu2kRTVNC2pqv2U4XNsv5/yWJlV9+NJ1C7xluInlcr7rK+Kg+qy7onQqgnbi7UHcS3qXjdw3bO5tumycYlVssMI5EXXpRnatPK362KodtVU60cm+eQT10sVLFwJYlVaf7UGSoi5dQF3DvnTX3UvXTPO8quKH7jsXhm/PxfKWZXqBM5sS33kmKtC31Q05fI095i5IPpyzRXqSy1Sr17p1F7NE8vMtnNbLpVVtk8c0OrfF0sKxHnIpYgHW4puMomTz8mgmrSjpvrxhX97l7LqLpl7bW9BH9/MNzF8XwRqL8/m7c30eFYV5VX3QTquK06XbLt16F4ks+8Z9m6gPtpcuk3OvibCekng4lzMHi9MoqZmKj9tdbQCbc7bcEA+oEJduRNNL1waf1tuI9MDBUK8t3k9uFz3rrqadO9Ln9TL/ezlwDvky3TW7ZmXfpc77TN0yhOXnP939LvVDV9s+tgLTm0TqYd1lea3PRFuVjLa562HdPbCfascGrvO3DMeIATVqVRO8vfHrbupdfo1dzlXUdkVLZsS1mLPG3rWcl+4B1l1537h0VXzU1tyLG7cCu+LSrSqo06hocy3WCcil65qHDbuEYzQN2HpT3jFt9LEFvHTP1nxbXOEkbhkKmd+6BTfVZ/I143z/Fyz6Za92o0I7I6gzfeYAHPwy/Rb43L9TLtMt8CtwW1xvQvbR1g9n7qJRNN1kdxcdH7cM58Szxq679MdLOhE72t6VNEpHHkzwRyjBcGth+dE99pIkVbWaEWmvnQ8Yl7Mp59zpRWXdNo6odrO754Zzvxf/010nP7onb1TR+bgbVPB9PcADJvH/043Kvk0UzLRxQ6UiaeTAcyxYl2lyrrvZv8v2wE7U1uVcST0821jJeIDKWuyxiqnuko7q3+zJYXJ46nV3D67EyL+lQ9F2qkr+3kUafQpwYE8T329p6y7OX1TF97fQv/c+l87zj7Hsgpig4qRLd9fMPs74rLGyCzRbhmVqpy7nqvPmTD1gvKe7b2U8u1QzmtuDuEtbgT3c8QBJveo6cueFkUwv59nVmfFw1jl4/unuOT9qERV76ers8n23z/c8/Xy7a4lwwLplmGusbRp33Up13+ZDN3KPxNVMhY62vUQyRTse6+cKHtZYjIfDh260Cjbb3Vy6R8H8SMBzqSwrsB1UTacoknlnOb8V4JD9Njfpwz/fHjpBUeevcAtcl65sqXPX9D87RUTLc/dfOgAAAABJRU5ErkJggg==)", + "options": null + }, + "bg-options": { + "type": "select", + "label": "Background image type", + "name": "bg-options", + "value": null, + "default": "Tiled", + "options": [ + { + "name": "Tiled", + "label": "Tiled", + "value": "background-repeat: repeat !important;\n background-size: auto !important;\n background-position: left top !important;" + }, + { + "name": "Fit-window-size", + "label": "Fit window size", + "value": "background-repeat: no-repeat !important;\n background-size: cover !important;\n background-position: center top !important;" + } + ] + }, + "bg-attachment": { + "type": "select", + "label": "Background image attachment", + "name": "bg-attachment", + "value": null, + "default": "Scroll", + "options": [ + { + "name": "Scroll", + "label": "Scroll", + "value": "scroll" + }, + { + "name": "Fixed", + "label": "Fixed", + "value": "fixed" + } + ] + }, + "syntax-theme": { + "type": "select", + "label": "Github syntax theme", + "name": "syntax-theme", + "value": null, + "default": "Twilight", + "options": [ + { + "name": "Twilight", + "label": "Twilight", + "value": "/*! GitHub: Twilight */:root{--ghd-code-background:#141414;--ghd-code-color:#ccc}.pl-c,.pl-c span{color:#5f5a60!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#cf6a4c!important}.pl-cos{color:#8f9d6a!important}.pl-e,.pl-ef,.pl-en{color:#ac885b!important}.pl-enc{color:#cf6a4c!important}.pl-enf,.pl-enm{color:#ac885b!important}.pl-ens{color:#cf6a4c!important}.pl-ent{color:#cda869!important}.pl-entc,.pl-enti{color:#ac885b!important}.pl-entm{color:#7587a6!important}.pl-eoa{color:#cda869!important}.pl-eoac,.pl-eoac .pl-pde{color:#7587a6!important}.pl-eoai,.pl-eoai .pl-pde{color:#cda869!important}.pl-eoi{color:#ac885b!important}.pl-k{color:#cf6a4c!important}.pl-ko,.pl-kolp{color:#cda869!important}.pl-kos,.pl-kou{color:#cf6a4c!important}.pl-mai .pl-sf{color:#7587a6!important}.pl-mb{color:#8f9d6a!important}.pl-mc{color:#cda869!important}.pl-mh,.pl-mh .pl-pdh{color:#cf6a4c!important}.pl-mi{color:#cda869!important}.pl-ml{color:#8f9d6a!important}.pl-mm{color:#7587a6!important}.pl-mp{color:#c5af75!important}.pl-mp1 .pl-sf{color:#dad085!important}.pl-mq{color:#cf6a4c!important}.pl-mr,.pl-ms{color:#cda869!important}.pl-pdb{color:#8f9d6a!important}.pl-pdc{color:#5f5a60!important}.pl-pdc1,.pl-pde{color:#cf6a4c!important}.pl-pdi{color:#cda869!important}.pl-pds{color:#8f9d6a!important}.pl-pdv{color:#7587a6!important}.pl-pse,.pl-pse .pl-s2{color:#cf6a4c!important}.pl-s{color:#f9ee98!important}.pl-s1,.pl-s2{color:#ccc!important}.pl-mp .pl-s3{color:#cda869!important}.pl-s3,.pl-sc{color:#dad085!important}.pl-scp{color:#cf6a4c!important}.pl-sf{color:#dad085!important}.pl-smc{color:#ac885b!important}.pl-smi,.pl-smp{color:#ccc!important}.pl-sok{color:#cda869!important}.pl-sol{color:#8f9d6a!important}.pl-som,.pl-sr{color:#7587a6!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#cda869!important}.pl-stj{color:#7587a6!important}.pl-stp,.pl-sv,.pl-v{color:#9b859d!important}.pl-vi{color:#cf6a4c!important}.pl-vo{color:#ac885b!important}.pl-vpf{color:#7587a6!important}.pl-mdht,.pl-mi1{color:#55a532!important;background:#020!important}.pl-md,.pl-mdhf{color:#bd2c00!important;background:#200!important}.pl-mdr{color:#cf6a4c!important}.pl-mdh,.pl-mdi{color:#7587a6!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#df5000!important;color:#fff!important}.pl-mo{color:#969896!important}.pl-mri{color:teal!important}.pl-ms1{background-color:#f5f5f5!important}.pl-va,.pl-vpu{color:teal!important}.pl-entl{color:#ccc!important}.highlight .pl-corl span.x,.pl-corl{color:#f9ee98!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#ac885b!important;color:#ccc!important}" + }, + { + "name": "Ambiance", + "label": "Ambiance", + "value": "/*! GitHub: Ambiance */:root{--ghd-code-background:#202020;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#555!important;font-style:italic!important}.pl-c1{color:#cf7ea9!important}.pl-e,.pl-en,.pl-ent{color:#aac6e3!important}.pl-k{color:#fa8d6a!important}.pl-mb{color:#cf7ea9!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#cda869!important}.pl-mh,.pl-mh .pl-en{color:#9b859d!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#cda869!important}.pl-mq{color:#555!important}.pl-mr,.pl-ms{color:#cda869!important}.pl-pds{color:#8f9d6a!important}.pl-s{color:#aac6e3!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#8f9d6a!important}.pl-s1 .pl-s2{color:#99c!important}.pl-s1 .pl-v,.pl-s3{color:#cda869!important}.pl-sc{color:#9b859d!important}.pl-smi,.pl-smp{color:#99c!important}.pl-sr .pl-cce{color:#9b859d!important}.pl-sr,.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#dad085!important}.pl-st{color:#aac6e3!important}.pl-stj{color:#99c!important}.pl-sv{color:#cf7ea9!important}.pl-v{color:#aac6e3!important}.pl-vo,.pl-vpf{color:#99c!important}.pl-mdht,.pl-mi1{color:#f8f8f8!important;background:rgba(0,64,0,.5)!important}.pl-bu,.pl-ii,.pl-md,.pl-mdhf{color:#f8f8f8!important;background:rgba(86,45,86,.75)!important}.highlight .pl-corl span.x,.pl-corl{color:#aac6e3!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#fa8d6a!important;color:#e6e1dc!important}" + }, + { + "name": "Ayu-Mirage", + "label": "Ayu Mirage", + "value": "/*! GitHub: Ayu Mirage */:root{--ghd-code-background:#1f2430;--ghd-code-color:#cbccc6}.pl-c,.pl-c span{color:#5c6773!important;font-style:italic!important}.pl-c1{color:#ffa759!important}.pl-cce{color:#95e6cb!important}.pl-cn{color:#fc6!important}.pl-coc,.pl-cos{color:#bae67e!important}.pl-e,.pl-ef,.pl-en{color:#ffd580!important}.pl-enc{color:#5ccfe6!important}.pl-enf,.pl-enm{color:#ffd580!important}.pl-ens{color:#cbccc6!important}.pl-ent,.pl-entc,.pl-enti{color:#5ccfe6!important}.pl-enti{font-weight:700!important}.pl-entm{color:#bae67e!important}.pl-eoa{color:#ffd580!important}.pl-eoac{color:#5ccfe6!important}.pl-eoac .pl-pde{color:rgba(92,207,230,.5)!important}.pl-eoai{color:#ffd580!important}.pl-eoai .pl-pde{color:#cbccc6!important}.pl-eoi{color:#5ccfe6!important}.pl-k{color:#ffa759!important}.pl-ko{color:#f29e74!important}.pl-kolp{color:rgba(203,204,198,.7)!important}.pl-kos{color:#cbccc6!important}.pl-kou{color:#95e6cb!important}.pl-mai .pl-sf,.pl-mb{color:#f28779!important}.pl-mb{font-weight:700!important}.pl-mc{color:#77a8d9!important}.pl-mh .pl-pdh{color:#bae67e!important}.pl-mi{color:#f28779!important;font-style:italic!important}.pl-ml{color:#ffd580!important}.pl-mm{color:#ffe6b3!important}.pl-mp{color:#5ccfe6!important}.pl-mp1 .pl-sf{color:#f28779!important}.pl-mq{color:#95e6cb!important}.pl-mr{color:#ffd580!important}.pl-ms{color:#f29e74!important}.pl-pdb{color:#bae67e!important;font-weight:700!important}.pl-pdc{color:#5c6773!important;font-style:italic!important}.pl-pdc1{color:#bae67e!important}.pl-pde{color:rgba(92,207,230,.5)!important}.pl-pdi{color:#f28779!important;font-style:italic!important}.pl-pds{color:#bae67e!important}.pl-pdv,.pl-pse,.pl-pse .pl-s2{color:#cbccc6!important}.pl-s{color:#bae67e!important}.pl-s1{color:#cbccc6!important}.pl-s2{color:#73d0ff!important}.pl-mp .pl-s3,.pl-s3{color:#f28779!important}.pl-sc{color:#5ccfe6!important}.pl-scp{color:#bae67e!important}.pl-sf{color:#ffa759!important}.pl-smc{color:#73d0ff!important}.pl-smi{color:#5ccfe6!important}.pl-smp{color:#bae67e!important}.pl-sok{color:#ffa759!important}.pl-sol{color:#5ccfe6!important}.pl-som{color:#bae67e!important}.pl-sr,.pl-sra,.pl-src,.pl-sre{color:#95e6cb!important}.pl-st,.pl-stj{color:#73d0ff!important}.pl-stp{color:#5ccfe6!important}.pl-sv,.pl-v,.pl-vi{color:#cbccc6!important}.pl-vo{color:#5ccfe6!important}.pl-vpf{color:#d4bfff!important}.pl-mi1{color:#a6cc70!important}.pl-mdht,.pl-mi1{background:rgba(186,230,126,.15)!important}.pl-mdht{color:#c594c5!important}.pl-md{color:#f27983!important}.pl-md,.pl-mdhf{background:rgba(242,158,116,.15)!important}.pl-mdhf{color:#c594c5!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c594c5!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{color:#f33!important}.pl-mo{color:#d4bfff!important}.pl-mri{color:rgba(203,204,198,.02)!important}.pl-ms1{background-color:rgba(203,204,198,.06)!important;color:#5c6773!important;font-weight:700!important}.pl-va{color:#ffd580!important}.pl-vpu{color:#5ccfe6!important}.pl-entl{color:#707a8c!important}.highlight .pl-corl span.x,.pl-corl{color:#5ccfe6!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#232834!important;color:#fc6!important}" + }, + { + "name": "Chaos", + "label": "Chaos", + "value": "/*! GitHub: Chaos */:root{--ghd-code-background:#161616;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#555!important;font-style:italic!important}.pl-c1{color:#fdc251!important}.pl-e,.pl-en,.pl-ent{color:#974!important}.pl-k{color:#00698f!important}.pl-mb{color:#1edafb!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#00698f!important}.pl-mh,.pl-mh .pl-en{color:#fdc251!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#00698f!important}.pl-mq{color:#555!important}.pl-mr,.pl-ms{color:#00698f!important}.pl-pds{color:#58c554!important}.pl-s{color:#974!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#58c554!important}.pl-s1 .pl-s2{color:#1edafb!important}.pl-s1 .pl-v,.pl-s3{color:#00698f!important}.pl-sc{color:#999!important}.pl-smi,.pl-smp{color:#be53e6!important}.pl-sr{color:#ff308f!important}.pl-sr .pl-cce{color:#fdc251!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#ff308f!important}.pl-st{color:#e6e1dc!important}.pl-stj{color:#be53e6!important}.pl-sv{color:#1edafb!important}.pl-v{color:#974!important}.pl-vo{color:#be53e6!important}.pl-vpf{color:#974!important}.pl-mdht,.pl-mi1{color:#fff!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#fff!important;background:#900!important}.pl-bu,.pl-ii{color:#999!important;background:#900!important}.highlight .pl-corl span.x,.pl-corl{color:#974!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#974!important;color:#e6e1dc!important}" + }, + { + "name": "Clouds_Midnight", + "label": "Clouds_Midnight", + "value": "/*! GitHub: Clouds_Midnight */:root{--ghd-code-background:#191919;--ghd-code-color:#929292}.pl-c,.pl-c span{color:#3c403b!important;font-style:italic!important}.pl-c1{color:#39946a!important}.pl-e,.pl-en,.pl-ent{color:#929292!important}.pl-k{color:#927c5d!important}.pl-mb{color:#39946a!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#927c5d!important}.pl-mh,.pl-mh .pl-en{color:#366f1a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#927c5d!important}.pl-mq{color:#3c403b!important}.pl-mr,.pl-ms{color:#927c5d!important}.pl-pds{color:#5d90cd!important}.pl-s{color:#e92e2e!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#5d90cd!important}.pl-s1 .pl-s2{color:#606060!important}.pl-s1 .pl-v,.pl-s3{color:#927c5d!important}.pl-sc{color:#366f1a!important}.pl-smi,.pl-smp{color:#606060!important}.pl-sr{color:#e92e2e!important}.pl-sr .pl-cce{color:#366f1a!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src,.pl-st{color:#e92e2e!important}.pl-stj{color:#606060!important}.pl-sv{color:#39946a!important}.pl-v{color:#5d90cd!important}.pl-vo,.pl-vpf{color:#606060!important}.pl-mdht,.pl-mi1{color:#fff!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#fff!important;background:#e92e2e!important}.pl-bu,.pl-ii{color:#ddd!important;background:#e92e2e!important}.highlight .pl-corl span.x,.pl-corl{color:#e92e2e!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#929292!important;color:#191919!important}" + }, + { + "name": "Cobalt", + "label": "Cobalt", + "value": "/*! GitHub: Cobalt */:root{--ghd-code-background:#002240;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#08f!important;font-style:italic!important}.pl-c1{color:#ff628c!important}.pl-e,.pl-en{color:#ff9d00!important}.pl-ent{color:#fd0!important}.pl-k{color:#eb939a!important}.pl-mb{color:#ff628c!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#ff9d00!important}.pl-mh,.pl-mh .pl-en{color:#eb939a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#ff9d00!important}.pl-mq{color:#08f!important}.pl-mr,.pl-ms{color:#ff9d00!important}.pl-pds,.pl-s,.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#3ad900!important}.pl-s1 .pl-s2{color:#ccc!important}.pl-s1 .pl-v{color:#3ad900!important}.pl-s3,.pl-sc{color:#ffb054!important}.pl-smi,.pl-smp{color:#ccc!important}.pl-sr{color:#80ffc2!important}.pl-sr .pl-cce{color:#eb939a!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#80ffc2!important}.pl-st{color:#ff9d00!important}.pl-stj{color:#ccc!important}.pl-sv{color:#ff628c!important}.pl-v{color:#fd0!important}.pl-vo,.pl-vpf{color:#ccc!important}.pl-mdht,.pl-mi1{color:#f8f8f8!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#f8f8f8!important;background:#800f00!important}.pl-bu,.pl-ii{color:#ff628c!important;background:#800f00!important}.highlight .pl-corl span.x,.pl-corl{color:#3ad900!important;text-decoration:underline!important}.highlight-source-js .pl-st{color:#ffee80!important}.highlight-source-css .pl-s3{color:#80ffbb!important}.highlight-text-html-basic .pl-ent{color:#9effff!important}.pl-token.active,.pl-token:hover{background:#fff!important;color:#002240!important}" + }, + { + "name": "Dracula", + "label": "Dracula", + "value": "/*! GitHub: Dracula */:root{--ghd-code-background:#282a36;--ghd-code-color:#f8f8f2}.pl-c,.pl-c span{color:#6272a4!important}.pl-c1{color:#bd93f9!important}.pl-cce{color:#ff79c6!important}.pl-cn,.pl-coc{color:#bd93f9!important}.pl-cos{color:#f1fa8c!important}.pl-e,.pl-ef,.pl-en{color:#50fa7b!important}.pl-enc{color:#8be9fd!important}.pl-enf,.pl-enm{color:#50fa7b!important}.pl-ens{color:#8be9fd!important}.pl-ent,.pl-entc{color:#ff79c6!important}.pl-entc{font-style:italic!important}.pl-enti{font-weight:italic!important}.pl-enti,.pl-entm{color:#8be9fd!important}.pl-eoa,.pl-eoac,.pl-eoac .pl-pde,.pl-eoai,.pl-eoai .pl-pde{color:#50fa7b!important}.pl-eoi{color:#8be9fd!important;font-style:italic}.pl-k,.pl-ko,.pl-kolp{color:#ff79c6!important}.pl-kos,.pl-kou,.pl-mai .pl-sf{color:#8be9fd!important}.pl-mb{color:#ffb86c!important;font-weight:700!important}.pl-mc{color:#e6db74!important}.pl-mh .pl-pdh{color:#8be9fd!important}.pl-mi{color:#ffb86c!important;font-style:italic!important}.pl-ml,.pl-mm{color:#ff79c6!important}.pl-mp,.pl-mp1 .pl-sf{color:#8be9fd!important}.pl-mq{color:#6272a4!important;font-style:italic}.pl-mr,.pl-ms{color:#ff79c6!important}.pl-pdb{color:#ffb86c!important;font-weight:700!important}.pl-pdc{color:#6272a4!important;font-style:italic!important}.pl-pdc1{color:#bd93f9!important}.pl-pde{color:#8be9fd!important}.pl-pdi{color:#ffb86c!important;font-style:italic!important}.pl-pds,.pl-pdv{color:#f8f8f2!important}.pl-pse,.pl-pse .pl-s2{color:#ff79c6!important}.pl-s{color:#f1fa8c!important}.pl-s1{color:#f8f8f2!important}.pl-mp .pl-s3,.pl-s3,.pl-sc,.pl-scp{color:#66d9ef!important;font-style:italic!important}.pl-sf{color:#8be9fd!important}.pl-smc{color:#ff79c6!important}.pl-smi{color:#f8f8f2!important}.pl-smp,.pl-sok{color:#ff79c6!important}.pl-sol{color:#effb7b!important}.pl-som{color:#50fa7b!important}.pl-sr,.pl-sra,.pl-src,.pl-sre{color:#f55!important}.pl-st{color:#66d9ef!important}.pl-st,.pl-stj{font-style:italic!important}.pl-stj,.pl-stp,.pl-sv{color:#f8f8f2!important}.pl-v{color:#bd93f9!important}.pl-vi{color:#ff79c6!important}.pl-vo{color:#fff!important}.pl-vpf{color:#ffb86c!important;font-style:italic!important}.pl-mdht,.pl-mi1{color:#50fa7b!important;background:rgba(80,250,123,.25)!important}.pl-md,.pl-mdhf{color:#ff79c6!important;background:rgba(255,121,198,.25)!important}.pl-mdh,.pl-mdi,.pl-mdr{color:#6272a4!important;font-weight:400!important}.pl-bu{background-color:#bd93f9!important;color:#f8f8f2!important}.pl-ii,.pl-ii .pl-cce{background-color:#ff79c6!important;color:#f8f8f2!important}.pl-mo{color:#ffb86c!important}.pl-mri{color:#50fa7b!important}.pl-ms1{color:#6272a4!important}.pl-va,.pl-vpu{color:#66d9ef!important}.pl-entl{color:#ffb86c!important}.highlight .pl-corl span.x,.pl-corl{color:#effb7b!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#50fa7b!important;color:#282a36!important}" + }, + { + "name": "GitHub-Dark", + "label": "GitHub Dark", + "value": "/*! GitHub: GitHub Dark */:root{--ghd-code-background:#141414;--ghd-code-color:#ccc}/*!\n * GitHub Dark v0.5.0\n * Copyright (c) 2012 - 2017 GitHub, Inc.\n * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE)\n */.pl-c{color:#959da5}.pl-c1,.pl-s .pl-v{color:#c8e1ff}.pl-e,.pl-en{color:#b392f0}.pl-s .pl-s1,.pl-smi{color:#f6f8fa}.pl-ent{color:#7bcc72}.pl-k{color:#ea4a5a}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#79b8ff}.pl-ml,.pl-v{color:#fb8532}.pl-bu{color:#d73a49}.pl-c2,.pl-ii{color:#fafbfc;background-color:#d73a49}.pl-c2:before{content:\"^M\"}.pl-sr .pl-cce{font-weight:700;color:#7bcc72}.pl-mh,.pl-mh .pl-en,.pl-ms{font-weight:700;color:#0366d6}.pl-mi{font-style:italic;color:#f6f8fa}.pl-mb{font-weight:700;color:#f6f8fa}.pl-md{color:#d73a49;background-color:#300}.pl-mi1{color:#7bcc72;background-color:#121}.pl-mc{color:#b08800;background-color:#261d08}.pl-mi2{color:#2f363d;background-color:#959da5}.pl-mdr{font-weight:700;color:#b392f0}.pl-mo{color:#0366d6}.pl-ba{color:#ffeef0}.pl-sg{color:#6a737d}.pl-corl{text-decoration:underline;color:#79b8ff}.pl-token.active,.pl-token:hover{background:#b392f0;color:#141414}" + }, + { + "name": "Idle-Fingers", + "label": "Idle Fingers", + "value": "/*! GitHub: Idle Fingers */:root{--ghd-code-background:#323232;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#bc9458!important;font-style:italic!important}.pl-c1{color:#6c99bb!important}.pl-cce,.pl-cn,.pl-coc{color:#cc7833!important}.pl-cos{color:#a5c261!important}.pl-e{color:#ffc66d!important}.pl-ef{color:#b83426!important}.pl-en{color:#ffc66d!important}.pl-enc{color:#cc7833!important}.pl-enf,.pl-enm{color:#b83426!important}.pl-ens{color:#cc7833!important}.pl-ent{color:#ffe5bb!important}.pl-entc,.pl-enti{color:#b83426!important}.pl-enti{font-weight:700!important}.pl-entm{color:#b83426!important}.pl-eoa{color:#ffe5bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#b83426!important}.pl-eoai,.pl-eoai .pl-pde{color:#ffe5bb!important}.pl-eoi{color:#b83426!important}.pl-k{color:#cc7833!important}.pl-ko,.pl-kolp{color:#ffe5bb!important}.pl-kos,.pl-kou{color:#cc7833!important}.pl-mai .pl-sf{color:#b83426!important}.pl-mb{color:#a5c261!important;font-weight:700!important}.pl-mc{color:#ffe5bb!important}.pl-mh .pl-pdh{color:#cc7833!important}.pl-mi{color:#ffe5bb!important;font-style:italic!important}.pl-ml{color:#a5c261!important}.pl-mm{color:#b83426!important}.pl-mp,.pl-mp1 .pl-sf,.pl-mq{color:#cc7833!important}.pl-mr,.pl-ms{color:#ffe5bb!important}.pl-pdb{color:#a5c261!important;font-weight:700!important}.pl-pdc{color:#bc9458!important;font-style:italic!important}.pl-pdc1{color:#6c99bb!important}.pl-pde{color:#cc7833!important}.pl-pdi{color:#ffe5bb!important;font-style:italic!important}.pl-pds{color:#a5c261!important}.pl-pdv{color:#b83426!important}.pl-pse,.pl-pse .pl-s2,.pl-s{color:#cc7833!important}.pl-s1{color:#a5c261!important}.pl-s2{color:#fff!important}.pl-mp .pl-s3{color:#cc7833!important}.pl-s3{color:#ffe5bb!important}.pl-sc{color:#ffc66d!important}.pl-scp{color:#6c99bb!important}.pl-sf{color:#ffc66d!important}.pl-smc{color:#b83426!important}.pl-smi,.pl-smp{color:#ffc66d!important}.pl-sok{color:#ffe5bb!important}.pl-sol{color:#a5c261!important}.pl-som,.pl-sr{color:#b83426!important}.pl-sra,.pl-src,.pl-sre{color:#cc3!important}.pl-st{color:#cc7833!important}.pl-stj{color:#fff!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#cc7833!important}.pl-vo{color:#fff!important}.pl-vpf{color:#cc7833!important}.pl-mdht,.pl-mi1{color:#a5c261!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#b83426!important;background:rgba(64,0,0,.5)!important}.pl-mdr{color:#cc7833!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#ffc66d!important;font-weight:400!important}.pl-bu,.pl-ii{background-color:#b83426!important;color:#fff!important}.pl-mo{color:#ffc66d!important}.pl-mri{color:#cc7833!important}.pl-ms1{background-color:#ffc66d!important}.pl-va,.pl-vpu{color:#cc7833!important}.pl-entl{color:#ffc66d!important}.highlight .pl-corl span.x,.pl-corl{color:#cc7833!important;text-decoration:underline!important}.highlight-text-html-basic .pl-ent{color:#cc7833!important}.pl-token.active,.pl-token:hover{background:#ffc66f!important;color:#323232!important}" + }, + { + "name": "KR-theme", + "label": "KR theme", + "value": "/*! GitHub: KR theme */:root{--ghd-code-background:#0b0a09;--ghd-code-color:#fcffe0}.pl-c,.pl-c span{color:#706d5b!important;font-style:italic!important}.pl-c1{color:rgba(210,117,24,.76)!important}.pl-e,.pl-en{color:#fcffe0!important}.pl-ent{color:#babd9c!important}.pl-k{color:#949c8b!important}.pl-mb{color:rgba(210,117,24,.76)!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#949c8b!important}.pl-mh,.pl-mh .pl-en{color:#9fc28a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#949c8b!important}.pl-mq{color:#706d5b!important}.pl-mr,.pl-ms{color:#949c8b!important}.pl-pds{color:rgba(164,161,181,.8)!important}.pl-s{color:#949c8b!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:rgba(164,161,181,.8)!important}.pl-s1 .pl-s2{color:#babd9c!important}.pl-s1 .pl-v{color:#949c8b!important}.pl-s3{color:#85873a!important}.pl-sc{color:#fcffe0!important}.pl-smi,.pl-smp{color:#babd9c!important}.pl-sr{color:rgba(125,255,192,.65)!important}.pl-sr .pl-cce{color:#9fc28a!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:rgba(125,255,192,.65)!important}.pl-st{color:#949c8b!important}.pl-stj{color:#babd9c!important}.pl-sv{color:rgba(210,117,24,.76)!important}.pl-v{color:#fcffe0!important}.pl-vo,.pl-vpf{color:#d1a796!important}.pl-mdht,.pl-mi1{color:#f8f8f8!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#f8f8f8!important;background:#a41300!important}.pl-bu,.pl-ii{color:#d1a796!important;background:#a41300!important}.highlight .pl-corl span.x,.pl-corl{color:#949c8b!important;text-decoration:underline!important}.highlight-source-js .pl-s3,.highlight-source-js .pl-v{color:#ff80e1!important}.highlight-source-js .pl-st{color:#ffee80!important}.pl-token.active,.pl-token:hover{background:#fcffe0!important;color:#0b0a09!important}" + }, + { + "name": "Merbivore-Soft", + "label": "Merbivore Soft", + "value": "/*! GitHub: Merbivore Soft */:root{--ghd-code-background:#1c1c1c;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#ad2ea4!important;font-style:italic!important}.pl-c1{color:#b3e5b4!important}.pl-e,.pl-en{color:#e1c582!important}.pl-ent{font-style:italic!important}.pl-ent,.pl-k{color:#fc6f09!important}.pl-mb{color:#8ec65f!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#fc6f09!important}.pl-mh,.pl-mh .pl-en{color:#8ec65f!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#fc6f09!important}.pl-mq{color:#ad2ea4!important}.pl-mr,.pl-ms{color:#fc6f09!important}.pl-pds{color:#8ec65f!important}.pl-s{color:#fc6f09!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#8ec65f!important}.pl-s1 .pl-s2,.pl-s1 .pl-v{color:#fc6f09!important}.pl-s3{color:#e6e1dc!important}.pl-sc{color:#68c1d8!important}.pl-smi,.pl-smp,.pl-sr{color:#fc6f09!important}.pl-sr .pl-cce{color:#b3e5b4!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#e1c582!important}.pl-st,.pl-stj{color:#fc6f09!important}.pl-sv{color:#8ec65f!important}.pl-v{color:#fc6f09!important}.pl-vo,.pl-vpf{color:#e6e1dc!important}.pl-mdht,.pl-mi1{color:#e6e1dc!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#e6e1dc!important;background:#fe3838!important}.pl-bu,.pl-ii{color:#fff!important;background:#fe3838!important}.highlight .pl-corl span.x,.pl-corl{color:#fc6f09!important;text-decoration:underline!important}.highlight-source-css .pl-e{color:#e6e1dc!important}.highlight-source-js .pl-c1{color:#e1c582!important}.highlight-source-js .pl-sc{color:#e6e1dc!important}.highlight-text-html-php .pl-s3{color:#fc6f09!important}.highlight-source-css .pl-s3{color:#68c1d8!important}.highlight-source-python .pl-c1{color:#e1c582!important}.pl-token.active,.pl-token:hover{background:#fc6f09!important;color:#e6e1dc!important}" + }, + { + "name": "Merbivore", + "label": "Merbivore", + "value": "/*! GitHub: Merbivore */:root{--ghd-code-background:#161616;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#ad2ea4!important;font-style:italic!important}.pl-c1{color:#519f50!important}.pl-e,.pl-en{color:#fdc251!important}.pl-ent,.pl-k{color:#fc6f09!important}.pl-mb{color:#8dff0a!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#fc6f09!important}.pl-mh,.pl-mh .pl-en{color:#8dff0a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#fc6f09!important}.pl-mq{color:#ad2ea4!important}.pl-mr,.pl-ms{color:#fc6f09!important}.pl-pds{color:#8dff0a!important}.pl-s{color:#fc6f09!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#8dff0a!important}.pl-s1 .pl-s2,.pl-s1 .pl-v{color:#fc6f09!important}.pl-s3{color:#e6e1dc!important}.pl-sc{color:#1edafb!important}.pl-smi,.pl-smp,.pl-sr{color:#fc6f09!important}.pl-sr .pl-cce{color:#519f50!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#fdc251!important}.pl-st,.pl-stj{color:#fc6f09!important}.pl-sv{color:#8dff0a!important}.pl-v{color:#fc6f09!important}.pl-vo,.pl-vpf{color:#e6e1dc!important}.pl-mdht,.pl-mi1{color:#e6e1dc!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#e6e1dc!important;background:#900!important}.pl-bu,.pl-ii{color:#fff!important;background:#900!important}.highlight .pl-corl span.x,.pl-corl{color:#fc6f09!important;text-decoration:underline!important}.highlight-source-css .pl-e{color:#e6e1dc!important}.highlight-source-js .pl-c1{color:#fdc251!important}.highlight-source-js .pl-sc{color:#e6e1dc!important}.highlight-text-html-php .pl-s3{color:#fc6f09!important}.highlight-source-css .pl-s3{color:#1edafb!important}.highlight-source-python .pl-c1{color:#fdc251!important}.pl-token.active,.pl-token:hover{background:#fc6f09!important;color:#e6e1dc!important}" + }, + { + "name": "Mono-Industrial-clear", + "label": "Mono Industrial clear", + "value": "/*! GitHub: Mono Industrial clear */:root{--ghd-code-background:#222c28;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#666c68!important;background-color:#304830!important}.pl-c1{color:#e98800!important}.pl-e,.pl-en{color:#a8b3ab!important}.pl-ent,.pl-k{color:#a39e64!important}.pl-mb{color:#e98800!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#a39e64!important}.pl-mh,.pl-mh .pl-en{color:#5778b6!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#a39e64!important}.pl-mq{color:#666c68!important}.pl-mr,.pl-ms{color:#a39e64!important}.pl-pds{color:#fff!important}.pl-s{color:#c23b00!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#fff!important}.pl-s1 .pl-s2{color:#c23b00!important}.pl-s1 .pl-v{color:#a39e64!important}.pl-s3{color:#5778b6!important}.pl-sc{color:#fff!important}.pl-smi,.pl-smp{color:#c23b00!important}.pl-sr{color:#fff!important;background-color:#151c19!important}.pl-sr .pl-cce{color:#5778b6!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src,.pl-st,.pl-stj{color:#c23b00!important}.pl-sv{color:#e98800!important}.pl-v{color:#5778b6!important}.pl-vo{color:#a8b3ab!important}.pl-vpf{color:#5778b6!important}.pl-mi1{background:rgba(0,150,0,.68)!important}.pl-mdht,.pl-mi1{color:#fff!important}.pl-mdht{background:rgba(0,153,0,.68)!important}.pl-md,.pl-mdhf{color:#fff!important;background:rgba(153,0,0,.68)!important}.pl-bu,.pl-ii{color:#fff!important;background:#c23b00!important}.highlight .pl-corl span.x,.pl-corl{color:#c23b00!important;text-decoration:underline!important}.highlight-source-css .pl-ent{color:#e98800!important}.highlight-text-html-php .pl-s,.highlight-text-html-php .pl-st{color:#a39e64!important}.highlight-text-html-php .pl-s3{color:#588e60!important}.highlight-source-python .pl-st{color:#a39e64!important}.pl-token.active,.pl-token:hover{background:#fff!important;color:#222c28!important}" + }, + { + "name": "Mono-Industrial", + "label": "Mono Industrial", + "value": "/*! GitHub: Mono Industrial */:root{--ghd-code-background:#222c28;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#666c68!important;background-color:#151c19!important}.pl-c1{color:#e98800!important}.pl-e,.pl-en{color:#a8b3ab!important}.pl-ent,.pl-k{color:#a39e64!important}.pl-mb{color:#e98800!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#a39e64!important}.pl-mh,.pl-mh .pl-en{color:#5778b6!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#a39e64!important}.pl-mq{color:#666c68!important}.pl-mr,.pl-ms{color:#a39e64!important}.pl-pds{color:#fff!important}.pl-s{color:#c23b00!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#fff!important}.pl-s1 .pl-s2{color:#c23b00!important}.pl-s1 .pl-v{color:#a39e64!important}.pl-s3{color:#5778b6!important}.pl-sc{color:#fff!important}.pl-smi,.pl-smp{color:#c23b00!important}.pl-sr{color:#fff!important;background-color:#151c19!important}.pl-sr .pl-cce{color:#5778b6!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src,.pl-st,.pl-stj{color:#c23b00!important}.pl-sv{color:#e98800!important}.pl-v{color:#5778b6!important}.pl-vo{color:#a8b3ab!important}.pl-vpf{color:#5778b6!important}.pl-mdht,.pl-mi1{color:#fff!important;background:rgba(0,153,0,.68)!important}.pl-md,.pl-mdhf{color:#fff!important;background:rgba(153,0,0,.68)!important}.pl-bu,.pl-ii{color:#fff!important;background:#c23b00!important}.highlight .pl-corl span.x,.pl-corl{color:#c23b00!important;text-decoration:underline!important}.highlight-source-css .pl-ent{color:#e98800!important}.highlight-text-html-php .pl-s,.highlight-text-html-php .pl-st{color:#a39e64!important}.highlight-text-html-php .pl-s3{color:#588e60!important}.highlight-source-python .pl-st{color:#a39e64!important}.pl-token.active,.pl-token:hover{background:#fff!important;color:#222c28!important}" + }, + { + "name": "Monokai---Spacegray-Eighties", + "label": "Monokai - Spacegray Eighties", + "value": "/*! GitHub: Monokai - Spacegray Eighties */:root{--ghd-code-background:#1c1c1c;--ghd-code-color:#f8f8f8}.pl-c,.pl-c span{color:grey!important}.pl-c1,.pl-cce{color:#66d9ef!important}.pl-cn,.pl-coc{color:#ae81ff!important}.pl-cos{color:#e6db74!important}.pl-e{color:#f92672!important}.pl-ef{color:#a6e22e!important}.pl-en{color:#f92672!important}.pl-enc{color:#66d9ef!important}.pl-enf,.pl-enm{color:#a6e22e!important}.pl-ens{color:#66d9ef!important}.pl-ent{color:#f92672!important}.pl-entc,.pl-enti{color:#a6e22e!important}.pl-enti{font-weight:700!important}.pl-entm{color:#a6e22e!important}.pl-eoa{color:#f92672!important}.pl-eoac,.pl-eoac .pl-pde{color:#a6e22e!important}.pl-eoai,.pl-eoai .pl-pde{color:#f92672!important}.pl-eoi,.pl-k{color:#a6e22e!important}.pl-ko,.pl-kolp{color:#f92672!important}.pl-kos,.pl-kou{color:#66d9ef!important}.pl-mai .pl-sf{color:#a6e22e!important}.pl-mb{color:#e6db74!important;font-weight:700!important}.pl-mc{color:#f92672!important}.pl-mh .pl-pdh{color:#66d9ef!important}.pl-mi{color:#f92672!important;font-style:italic!important}.pl-ml{color:#e6db74!important}.pl-mm{color:#a6e22e!important}.pl-mp,.pl-mp1 .pl-sf,.pl-mq{color:#66d9ef!important}.pl-mr,.pl-ms{color:#f92672!important}.pl-pdb{color:#e6db74!important;font-weight:700!important}.pl-pdc{color:#75715e!important;font-style:italic!important}.pl-pdc1{color:#ae81ff!important}.pl-pde{color:#66d9ef!important}.pl-pdi{color:#f92672!important;font-style:italic!important}.pl-pds{color:#f8f8f8!important}.pl-pdv{color:#a6e22e!important}.pl-pse,.pl-pse .pl-s2{color:#66d9ef!important}.pl-s,.pl-s1{color:#e6db74!important}.pl-s2{color:#f8f8f8!important}.pl-mp .pl-s3{color:#66d9ef!important}.pl-s3{color:#f92672!important}.pl-sc{color:#fd971f!important}.pl-scp{color:#ae81ff!important}.pl-sf{color:#fd971f!important}.pl-smc{color:#f92672!important}.pl-smi{color:#fd971f!important}.pl-smp,.pl-sok{color:#f92672!important}.pl-sol{color:#e6db74!important}.pl-som,.pl-sr{color:#a6e22e!important}.pl-sra,.pl-src,.pl-sre{color:#f92672!important}.pl-st{color:#66d9ef!important}.pl-stj{color:#f8f8f8!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#f92672!important}.pl-vo{color:#a6e22e!important}.pl-vpf{color:#f92672!important}.pl-mdht,.pl-mi1{color:#a6e22e!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#f92672!important;background:rgba(64,0,0,.5)!important}.pl-mdr{color:#66d9ef!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#a6e22e!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#f92672!important;color:#272822!important}.pl-mo{color:#fd971f!important}.pl-mri{color:#66d9ef!important}.pl-ms1{background-color:#fd971f!important}.pl-va,.pl-vpu{color:#66d9ef!important}.pl-entl{color:#fd971f!important}.highlight .pl-corl span.x,.pl-corl{color:#e6db74!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#a6e22e!important;color:#1c1c1c!important}" + }, + { + "name": "Monokai", + "label": "Monokai", + "value": "/*! GitHub: Monokai */:root{--ghd-code-background:#272822;--ghd-code-color:#f8f8f2}.pl-c,.pl-c span{color:#75715e!important;font-style:italic!important}.pl-c1{color:#ae81ff!important}.pl-cce,.pl-cn,.pl-coc{color:#66d9ef!important}.pl-cos{color:#e6db74!important}.pl-e,.pl-ef,.pl-en{color:#a6e22e!important}.pl-enc{color:#66d9ef!important}.pl-enf,.pl-enm{color:#a6e22e!important}.pl-ens{color:#66d9ef!important}.pl-ent{color:#f92672!important}.pl-entc,.pl-enti{color:#a6e22e!important}.pl-enti{font-weight:700!important}.pl-entm{color:#a6e22e!important}.pl-eoa{color:#f92672!important}.pl-eoac,.pl-eoac .pl-pde{color:#a6e22e!important}.pl-eoai,.pl-eoai .pl-pde{color:#f92672!important}.pl-eoi{color:#a6e22e!important}.pl-k,.pl-ko,.pl-kolp{color:#f92672!important}.pl-kos,.pl-kou{color:#66d9ef!important}.pl-mai .pl-sf{color:#a6e22e!important}.pl-mb{color:#e6db74!important;font-weight:700!important}.pl-mc{color:#f92672!important}.pl-mh .pl-pdh{color:#66d9ef!important}.pl-mi{color:#f92672!important;font-style:italic!important}.pl-ml{color:#e6db74!important}.pl-mm{color:#a6e22e!important}.pl-mp,.pl-mp1 .pl-sf,.pl-mq{color:#66d9ef!important}.pl-mr,.pl-ms{color:#f92672!important}.pl-pdb{color:#e6db74!important;font-weight:700!important}.pl-pdc{color:#75715e!important;font-style:italic!important}.pl-pdc1{color:#ae81ff!important}.pl-pde{color:#66d9ef!important}.pl-pdi{color:#f92672!important;font-style:italic!important}.pl-pds{color:#e6db74!important}.pl-pdv{color:#a6e22e!important}.pl-pse,.pl-pse .pl-s2{color:#66d9ef!important}.pl-s,.pl-s1{color:#e6db74!important}.pl-s2{color:#f8f8f2!important}.pl-mp .pl-s3{color:#66d9ef!important}.pl-s3{color:#f92672!important}.pl-sc{color:#fd971f!important}.pl-scp{color:#ae81ff!important}.pl-sf{color:#fd971f!important}.pl-smc{color:#f92672!important}.pl-smi{color:#66d9ef!important}.pl-smp,.pl-sok{color:#f92672!important}.pl-sol{color:#e6db74!important}.pl-som,.pl-sr{color:#a6e22e!important}.pl-sra,.pl-src,.pl-sre{color:#f92672!important}.pl-st{color:#66d9ef!important}.pl-stj{color:#f8f8f2!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#66d9ef!important}.pl-vo{color:#a6e22e!important}.pl-vpf{color:#66d9ef!important}.pl-mdht,.pl-mi1{color:#a6e22e!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#f92672!important;background:rgba(64,0,0,.5)!important}.pl-mdr{color:#66d9ef!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#a6e22e!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#a6e22e!important;color:#272822!important}.pl-mo{color:#fd971f!important}.pl-mri{color:#66d9ef!important}.pl-ms1{background-color:#fd971f!important}.pl-va,.pl-vpu{color:#66d9ef!important}.pl-entl{color:#fd971f!important}.highlight .pl-corl span.x,.pl-corl{color:#e6db74!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#a6e22e!important;color:#272822!important}" + }, + { + "name": "Obsidian", + "label": "Obsidian", + "value": "/*! GitHub: Obsidian */:root{--ghd-code-background:#293134;--ghd-code-color:#e0e2e4}.pl-c,.pl-c span{color:#66747b!important;font-style:italic!important}.pl-c1{color:#ffcd22!important}.pl-e,.pl-en{color:#93c763!important}.pl-ent,.pl-k{color:#e0e2e4!important}.pl-mb{color:#ec7600!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#93c763!important}.pl-mh,.pl-mh .pl-en{color:#66747b!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#93c763!important}.pl-mq{color:#66747b!important}.pl-mr,.pl-ms{color:#93c763!important}.pl-pds,.pl-s{color:#ec7600!important}.pl-s1{color:#e0e2e4!important}.pl-s1 .pl-pse .pl-s2{color:#ec7600!important}.pl-s1 .pl-s2{color:#e0e2e4!important}.pl-s1 .pl-v,.pl-s3{color:#93c763!important}.pl-sc{color:#96989a!important}.pl-smi,.pl-smp{color:#e0e2e4!important}.pl-sr{color:#d39745!important}.pl-sr .pl-cce{color:#ffcd22!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#d39745!important}.pl-st{color:#da4236!important}.pl-stj{color:#e0e2e4!important}.pl-sv{color:#ec7600!important}.pl-v{color:#678cb1!important}.pl-vo,.pl-vpf{color:#e0e2e4!important}.pl-mdht,.pl-mi1{color:#e0e2e4!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#e0e2e4!important;background:rgba(64,0,0,.5)!important}.pl-bu,.pl-ii{color:#da4236!important;background:#400000!important}.highlight .pl-corl span.x,.pl-corl{color:#ec7600!important;text-decoration:underline!important}.pl-c1>.pl-c1{color:#678cb1!important}.pl-token.active,.pl-token:hover{background:#678cb1!important;color:#e0e2e4!important}" + }, + { + "name": "One-Dark", + "label": "One Dark", + "value": "/*! GitHub: One Dark */:root{--ghd-code-background:#141414;--ghd-code-color:#abb2bf}.pl-c,.pl-c span{color:#5c6370!important;font-style:italic!important}.pl-c1{color:#d19a66!important}.pl-sr .pl-cce{color:#56b6c2!important;font-weight:400!important}.pl-cn,.pl-e{color:#d19a66!important}.pl-ef{color:#61afef!important}.pl-en{color:#d19a66!important}.pl-enc{color:#e5c07b!important}.pl-enf{color:#61afef!important}.pl-enm{color:#abb2bf!important}.pl-ens{color:#be5046!important}.pl-ent{color:#e06c75!important}.pl-entc{color:#e5c07b!important}.pl-enti{color:#56b6c2!important}.pl-entm{color:#e06c75!important}.pl-eoa,.pl-eoac,.pl-eoac .pl-pde{color:#d19a66!important}.pl-eoai{color:#61afef!important}.pl-eoi{color:#98c379!important}.pl-k{color:#c678dd!important}.pl-ko{color:#abb2bf!important}.pl-kolp{color:#c678dd!important}.pl-kos{color:#61afef!important}.pl-kou{color:#d19a66!important}.pl-mai .pl-sf{color:#56b6c2!important}.pl-mb{color:#d19a66!important;font-weight:700!important}.pl-mc{color:#c678dd!important}.pl-mh{color:#e06c75!important}.pl-mh .pl-pdh{color:#61afef!important}.pl-mi{color:#c678dd!important;font-style:italic!important}.pl-ml{color:#56b6c2!important}.pl-mm{color:#d19a66!important}.pl-mp{color:#828997!important}.pl-mp1 .pl-sf{color:#abb2bf!important}.pl-mq{color:#d19a66!important}.pl-mr{color:#61afef!important}.pl-ms{color:#abb2bf!important}.pl-pdb{color:#e5c07b!important;font-weight:700!important}.pl-pdc{color:#5c6370!important;font-style:italic!important}.pl-pdc1{color:#abb2bf!important}.pl-pde,.pl-pdi{color:#c678dd!important}.pl-pdi{font-style:italic!important}.pl-pds{color:#98c379!important}.pl-pdv{color:#e06c75!important}.pl-pse .pl-s1{color:#98c379!important}.pl-pse .pl-s2{color:#e5c07b!important}.pl-s,.pl-s1{color:#98c379!important}.pl-s2{color:#e5c07b!important}.pl-mp .pl-s3,.pl-s3{color:#d19a66!important}.pl-sc{color:#e5c07b!important}.pl-scp{color:#abb2bf!important}.pl-sf{color:#56b6c2!important}.pl-smc{color:#abb2bf!important}.pl-smi{color:#e06c75!important}.pl-smp{color:#e5c07b!important}.pl-sok{color:#d19a66!important}.pl-sol{color:#e06c75!important}.pl-som{color:#abb2bf!important}.pl-sr,.pl-sr .pl-sra,.pl-src{color:#56b6c2!important}.pl-sr .pl-sre{color:#e5c07b!important}.pl-st{color:#56b6c2!important}.pl-stj{color:#e5c07b!important}.pl-stp{color:#828997!important}.pl-sv{color:#d19a66!important}.pl-v{color:#e5c07b!important}.pl-vi{color:#be5046!important}.pl-vo{color:#56b6c2!important}.pl-vpf{color:#abb2bf!important}.pl-mdht,.pl-mi1{color:#98c379!important;background:#020!important}.pl-md,.pl-mdhf{color:#e06c75!important;background:#200!important}.pl-mdr{color:#abb2bf!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#e06c75!important;font-weight:400!important}.pl-corl{color:#e06c75!important;text-decoration:underline!important}.pl-ib{background-color:#e06c75!important}.pl-bu,.pl-ii{background-color:#e05252!important}.pl-mo{color:#abb2bf!important}.pl-mri{color:#98c379!important}.pl-ms1{background-color:#373b41!important}.pl-ms1,.pl-va,.pl-vpu{color:#abb2bf!important}.pl-entl{color:#e06c75!important}.pl-token.active,.pl-token:hover{background:#61afef!important;color:#141414!important}" + }, + { + "name": "Pastel-on-Dark", + "label": "Pastel on Dark", + "value": "/*! GitHub: Pastel on Dark */:root{--ghd-code-background:#2c2828;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#a6c6ff!important;font-style:italic!important}.pl-c1{color:#a5c261!important}.pl-cce{color:#afa472!important}.pl-cn{color:#ccc!important}.pl-coc{color:#757ad8!important}.pl-cos{color:#66a968!important}.pl-e{color:#e6e1dc!important}.pl-ef{color:#aeb2f8!important}.pl-en{color:#e6e1dc!important}.pl-enc{color:#757ad8!important}.pl-enf,.pl-enm{color:#aeb2f8!important}.pl-ens{color:#757ad8!important}.pl-ent{color:#6782d3!important}.pl-entc,.pl-enti{color:#aeb2f8!important}.pl-enti{font-weight:700!important}.pl-entm{color:#aeb2f8!important}.pl-eoa{color:#e6e1dc!important}.pl-eoac,.pl-eoac .pl-pde{color:#aeb2f8!important}.pl-eoai,.pl-eoai .pl-pde{color:#e6e1dc!important}.pl-eoi{color:#aeb2f8!important}.pl-k{color:#757ad8!important}.pl-ko,.pl-kolp{color:#e6e1dc!important}.pl-kos,.pl-kou{color:#757ad8!important}.pl-mai .pl-sf{color:#aeb2f8!important}.pl-mb{color:#66a968!important;font-weight:700!important}.pl-mc{color:#e6e1dc!important}.pl-mh .pl-pdh{color:#757ad8!important}.pl-mi{color:#e6e1dc!important;font-style:italic!important}.pl-ml{color:#66a968!important}.pl-mm{color:#aeb2f8!important}.pl-mp,.pl-mp1 .pl-sf,.pl-mq{color:#757ad8!important}.pl-mr,.pl-ms{color:#e6e1dc!important}.pl-pdb{color:#66a968!important;font-weight:700!important}.pl-pdc{color:#a6c6ff!important;font-style:italic!important}.pl-pdc1{color:#4fb7c5!important}.pl-pde{color:#757ad8!important}.pl-pdi{color:#e6e1dc!important;font-style:italic!important}.pl-pds{color:#ad9361!important}.pl-pdv{color:#aeb2f8!important}.pl-pse,.pl-pse .pl-s2,.pl-s{color:#757ad8!important}.pl-s1{color:#ad9361!important}.pl-s2{color:#8f938f!important}.pl-mp .pl-s3{color:#757ad8!important}.pl-s3{color:#e6e1dc!important}.pl-sc{color:#757ad8!important}.pl-scp{color:#4fb7c5!important}.pl-sf{color:#bebf55!important}.pl-smc{color:#aeb2f8!important}.pl-smi,.pl-smp{color:#bebf55!important}.pl-sok{color:#e6e1dc!important}.pl-sol{color:#66a968!important}.pl-som,.pl-sr{color:#aeb2f8!important}.pl-sra{color:#797878!important}.pl-src,.pl-sre{color:#e9c062!important}.pl-st{color:#a5c261!important}.pl-stj{color:#8f938f!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#757ad8!important}.pl-vo{color:#a5c261!important}.pl-vpf{color:#757ad8!important}.pl-mdht,.pl-mi1{color:#66a968!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#aeb2f8!important;background:rgba(64,0,0,.5)!important}.pl-mdr{color:#757ad8!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#bebf55!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#aeb2f8!important;color:#fff!important}.pl-mo{color:#bebf55!important}.pl-mri{color:#757ad8!important}.pl-ms1{background-color:#bebf55!important}.pl-va,.pl-vpu{color:#757ad8!important}.pl-entl{color:#bebf55!important}.highlight .pl-corl span.x,.pl-corl{color:#757ad8!important;text-decoration:underline!important}.highlight-source-css .pl-v{color:#ad9361!important}.highlight-text-html-basic .pl-e{color:#6782d3!important}.highlight-text-tex .pl-s3{color:#757ad8!important}.pl-token.active,.pl-token:hover{background:#757ad8!important;color:#e6e1dc!important}" + }, + { + "name": "Railscasts", + "label": "Railscasts", + "value": "/*! GitHub: Railscasts */:root{--ghd-code-background:#282828;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#bc9458!important;font-style:italic!important}.pl-c1{color:#6d9cbe!important}.pl-sr .pl-cce{font-weight:400!important}.pl-cn,.pl-sr .pl-cce{color:#a5c261!important}.pl-coc{color:#6d9cbe!important}.pl-cos{color:#cc7833!important}.pl-e,.pl-ef,.pl-en{color:#ffc66d!important}.pl-enc{color:#fff!important}.pl-enf,.pl-enm{color:#ffc66d!important}.pl-ens,.pl-ent{color:#fff!important}.pl-entc,.pl-enti{color:#ffc66d!important}.pl-enti{font-weight:700!important}.pl-entm{color:#ffc66d!important}.pl-eoa{color:#fff!important}.pl-eoac,.pl-eoac .pl-pde{color:#ffc66d!important}.pl-eoai,.pl-eoai .pl-pde{color:#fff!important}.pl-eoi{color:#ffc66d!important}.pl-k,.pl-ko,.pl-kolp{color:#cc7833!important}.pl-kos,.pl-kou{color:#6d9cbe!important}.pl-mai .pl-sf{color:#ffc66d!important}.pl-mb{color:#cc7833!important;font-weight:700!important}.pl-mc,.pl-mh{color:#fff!important}.pl-mh{font-weight:400!important}.pl-mh .pl-pdh{color:#fff!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml{color:#cc7833!important}.pl-mm{color:#ffc66d!important}.pl-mp{color:#fff!important}.pl-mp1 .pl-sf{color:#ffc66d!important}.pl-mq{color:#fff!important}.pl-mr,.pl-ms,.pl-pdb{color:#cc7833!important}.pl-pdb{font-weight:700!important}.pl-pdc{color:#bc9458!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#fff!important}.pl-pdi{font-style:italic!important}.pl-pdi,.pl-pds{color:#cc7833!important}.pl-pdv{color:#ffc66d!important}.pl-pse,.pl-pse .pl-s1{color:#a5c261!important}.pl-pse .pl-s2{color:#e6e1dc!important}.pl-s{color:#a5c261!important}.pl-s1{color:#cc7833!important}.pl-s2{color:#ccc!important}.pl-mp .pl-s3,.pl-s3,.pl-sc{color:#cc7833!important}.pl-scp{color:#fff!important}.pl-sf{color:#cc7833!important}.pl-smc{color:#da4939!important}.pl-smi{color:#d0d0ff!important}.pl-smp{color:#ccc!important}.pl-sok{color:#da4939!important}.pl-sol{color:#cc7833!important}.pl-som,.pl-sr{color:#ffc66d!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#da4939!important}.pl-st{color:#cc7833!important}.pl-stj{color:#ccc!important}.pl-stp,.pl-sv{color:#cc7833!important}.pl-v{color:#d0d0ff!important}.pl-vi{color:#cc7833!important}.pl-vo{color:#ffc66d!important}.pl-vpf{color:#cc7833!important}.pl-mi1{color:#a6e22e!important;background:#200!important}.pl-mdht{color:#e6e1dc!important;background:#2f33ab!important}.pl-md{color:#f92672!important;background:#200!important}.pl-mdhf{color:#e6e1dc!important;background:#2f33ab!important}.pl-mdr{color:#fff!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#ffc66d!important;font-weight:400!important}.pl-corl{text-decoration:underline!important}.pl-bu,.pl-ii{background-color:#900!important;color:#fff!important}.pl-mo{color:#969896!important}.pl-mri{color:teal!important}.pl-ms1{background-color:#f5f5f5!important}.pl-va,.pl-vpu{color:teal!important}.pl-entl{color:#ccc!important}.highlight .pl-corl span.x,.pl-corl{color:#a5c261!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#ffc66d!important;color:#282828!important}" + }, + { + "name": "Solarized-Dark", + "label": "Solarized Dark", + "value": "/*! GitHub: Solarized Dark */:root{--ghd-code-background:#002b36;--ghd-code-color:#839496}.pl-c,.pl-c span{color:#586e75!important;font-style:italic!important}.pl-c1{color:#2aa198!important}.pl-e,.pl-en,.pl-ent{color:#268bd2!important}.pl-k{color:#859900!important}.pl-mb{color:#2aa198!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#859900!important}.pl-mh,.pl-mh .pl-en{color:#cb4b16!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#859900!important}.pl-mq{color:#586e75!important}.pl-mr,.pl-ms{color:#859900!important}.pl-pds{color:#2aa198!important}.pl-s{color:#268bd2!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#2aa198!important}.pl-s1 .pl-s2{color:#839496!important}.pl-s1 .pl-v,.pl-s3{color:#859900!important}.pl-sc{color:#cb4b16!important}.pl-smi,.pl-smp{color:#839496!important}.pl-sr{color:#d30102!important}.pl-sr .pl-cce{color:#cb4b16!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#d30102!important}.pl-st{color:#dc322f!important}.pl-stj{color:#839496!important}.pl-sv{color:#2aa198!important}.pl-v{color:#268bd2!important}.pl-vo,.pl-vpf{color:#839496!important}.pl-mdht,.pl-mi1{color:#839496!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#839496!important;background:rgba(64,0,0,.5)!important}.pl-bu,.pl-ii{color:#839496!important;background:#400000!important}.highlight .pl-corl span.x,.pl-corl{color:#268bd2!important;text-decoration:underline!important}.highlight-source-css .pl-k{color:#586e75!important}.highlight-source-c\\+\\+ .pl-s{color:#dc322f!important}.pl-token.active,.pl-token:hover{background:#268bd2!important;color:#002b36!important}" + }, + { + "name": "Terminal", + "label": "Terminal", + "value": "/*! GitHub: Terminal */:root{--ghd-code-background:#000;--ghd-code-color:#dedede}.pl-c,.pl-c span{color:#ff4500!important;font-style:italic!important}.pl-c1{color:#e78c45!important}.pl-e,.pl-en{color:#d54e53!important}.pl-ent,.pl-k{color:tomato!important}.pl-mb{color:#e78c45!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:tomato!important}.pl-mh,.pl-mh .pl-en{color:#b9ca4a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:tomato!important}.pl-mq{color:#ff4500!important}.pl-mr,.pl-ms{color:tomato!important}.pl-pds{color:#b9ca4a!important}.pl-s{color:tomato!important}.pl-s1{color:#b9ca4a!important}.pl-s1 .pl-pse .pl-s2{color:#e78c45!important}.pl-s1 .pl-s2{color:#7aa6da!important}.pl-s1 .pl-v{color:tomato!important}.pl-s3{color:#d54e53!important}.pl-sc{color:#dedede!important}.pl-smi,.pl-smp{color:#7aa6da!important}.pl-sr{color:#d54e53!important}.pl-sr .pl-cce{color:#b9ca4a!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#d54e53!important}.pl-st{color:tomato!important}.pl-stj{color:#7aa6da!important}.pl-sv{color:#e78c45!important}.pl-v{color:#d54e53!important}.pl-vo{color:#7aa6da!important}.pl-vpf{color:#e78c45!important}.pl-mdht,.pl-mi1{color:#dedede!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#dedede!important;background:red!important}.pl-bu,.pl-ii{color:tomato!important;background:#900!important}.highlight .pl-corl span.x,.pl-corl{color:tomato!important;text-decoration:underline!important}.highlight-source-css .pl-k{color:#dedede!important}.highlight-source-css .pl-s3,.highlight-source-css .pl-sc{color:#e7c547!important}.highlight-source-css .pl-ent{color:#dedede!important}.highlight-text-html-basic .pl-ent{color:#d54e53!important}.highlight-source-js .pl-k{color:#ff1493!important}.highlight-text-html-php .pl-s3{color:#7aa6da!important}.highlight-text-html-php .pl-vo{color:#d54e53!important}.highlight-source-python .pl-s3{color:#7aa6da!important}.pl-token.active,.pl-token:hover{background:#dedede!important;color:tomato!important}" + }, + { + "name": "Tomorrow-Night-Blue", + "label": "Tomorrow Night Blue", + "value": "/*! GitHub: Tomorrow Night Blue */:root{--ghd-code-background:#002451;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#969896!important;font-style:italic!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#de935f!important}.pl-cos{color:#b5bd68!important}.pl-e,.pl-ef,.pl-en{color:#f0c674!important}.pl-enc{color:#de935f!important}.pl-enf,.pl-enm{color:#f0c674!important}.pl-ens{color:#de935f!important}.pl-ent{color:#b294bb!important}.pl-entc,.pl-enti{color:#f0c674!important}.pl-enti{font-weight:700!important}.pl-entm{color:#c66!important}.pl-eoa{color:#b294bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#c66!important}.pl-eoai,.pl-eoai .pl-pde{color:#b294bb!important}.pl-eoi{color:#f0c674!important}.pl-k,.pl-ko,.pl-kolp{color:#b294bb!important}.pl-kos,.pl-kou{color:#de935f!important}.pl-mai .pl-sf{color:#c66!important}.pl-mb{color:#b5bd68!important;font-weight:700!important}.pl-mc{color:#b294bb!important}.pl-mh .pl-pdh{color:#de935f!important}.pl-mi{color:#b294bb!important;font-style:italic!important}.pl-ml{color:#b5bd68!important}.pl-mm{color:#c66!important}.pl-mp,.pl-mp1 .pl-sf{color:#81a2be!important}.pl-mq{color:#de935f!important}.pl-mr,.pl-ms{color:#b294bb!important}.pl-pdb{color:#b5bd68!important;font-weight:700!important}.pl-pdc{color:#969896!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#de935f!important}.pl-pdi{color:#b294bb!important;font-style:italic!important}.pl-pds{color:#b5bd68!important}.pl-pdv{color:#c66!important}.pl-pse,.pl-pse .pl-s2{color:#de935f!important}.pl-s{color:#b294bb!important}.pl-s1{color:#b5bd68!important}.pl-s2{color:#c5c8c6!important}.pl-mp .pl-s3{color:#b294bb!important}.pl-s3{color:#81a2be!important}.pl-sc{color:#c5c8c6!important}.pl-scp{color:#de935f!important}.pl-sf{color:#dad085!important}.pl-smc{color:#f0c674!important}.pl-smi,.pl-smp{color:#c5c8c6!important}.pl-sok{color:#b294bb!important}.pl-sol{color:#b5bd68!important}.pl-som,.pl-sr{color:#c66!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#b294bb!important}.pl-stj{color:#c5c8c6!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#de935f!important}.pl-vo{color:#c66!important}.pl-vpf{color:#de935f!important}.pl-mdht,.pl-mi1{color:#8f9d6a!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#c66!important;background:rgba(64,0,0,.5)!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c66!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#c66!important;color:#fff!important}.pl-mo{color:#c5c8c6!important}.pl-mri{color:#de935f!important}.pl-ms1{background-color:#c5c8c6!important}.pl-va,.pl-vpu{color:#de935f!important}.pl-entl{color:#c5c8c6!important}.highlight .pl-corl span.x,.pl-corl{color:#b294bb!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#f0c674!important;color:#000!important}" + }, + { + "name": "Tomorrow-Night-Bright", + "label": "Tomorrow Night Bright", + "value": "/*! GitHub: Tomorrow Night Bright */:root{--ghd-code-background:#000;--ghd-code-color:#dedede}.pl-c,.pl-c span{color:#969896!important;font-style:italic!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#de935f!important}.pl-cos{color:#b5bd68!important}.pl-e,.pl-ef,.pl-en{color:#f0c674!important}.pl-enc{color:#de935f!important}.pl-enf,.pl-enm{color:#f0c674!important}.pl-ens{color:#de935f!important}.pl-ent{color:#b294bb!important}.pl-entc,.pl-enti{color:#f0c674!important}.pl-enti{font-weight:700!important}.pl-entm{color:#c66!important}.pl-eoa{color:#b294bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#c66!important}.pl-eoai,.pl-eoai .pl-pde{color:#b294bb!important}.pl-eoi{color:#f0c674!important}.pl-k,.pl-ko,.pl-kolp{color:#b294bb!important}.pl-kos,.pl-kou{color:#de935f!important}.pl-mai .pl-sf{color:#c66!important}.pl-mb{color:#b5bd68!important;font-weight:700!important}.pl-mc{color:#b294bb!important}.pl-mh .pl-pdh{color:#de935f!important}.pl-mi{color:#b294bb!important;font-style:italic!important}.pl-ml{color:#b5bd68!important}.pl-mm{color:#c66!important}.pl-mp,.pl-mp1 .pl-sf{color:#81a2be!important}.pl-mq{color:#de935f!important}.pl-mr,.pl-ms{color:#b294bb!important}.pl-pdb{color:#b5bd68!important;font-weight:700!important}.pl-pdc{color:#969896!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#de935f!important}.pl-pdi{color:#b294bb!important;font-style:italic!important}.pl-pds{color:#b5bd68!important}.pl-pdv{color:#c66!important}.pl-pse,.pl-pse .pl-s2{color:#de935f!important}.pl-s{color:#b294bb!important}.pl-s1{color:#b5bd68!important}.pl-s2{color:#c5c8c6!important}.pl-mp .pl-s3{color:#b294bb!important}.pl-s3{color:#81a2be!important}.pl-sc{color:#c5c8c6!important}.pl-scp{color:#de935f!important}.pl-sf{color:#dad085!important}.pl-smc{color:#f0c674!important}.pl-smi,.pl-smp{color:#c5c8c6!important}.pl-sok{color:#b294bb!important}.pl-sol{color:#b5bd68!important}.pl-som,.pl-sr{color:#c66!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#b294bb!important}.pl-stj{color:#c5c8c6!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#de935f!important}.pl-vo{color:#c66!important}.pl-vpf{color:#de935f!important}.pl-mdht,.pl-mi1{color:#8f9d6a!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#c66!important;background:rgba(64,0,0,.5)!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c66!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#c66!important;color:#fff!important}.pl-mo{color:#c5c8c6!important}.pl-mri{color:#de935f!important}.pl-ms1{background-color:#c5c8c6!important}.pl-va,.pl-vpu{color:#de935f!important}.pl-entl{color:#c5c8c6!important}.highlight .pl-corl span.x,.pl-corl{color:#b294bb!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#f0c674!important;color:#000!important}" + }, + { + "name": "Tomorrow-Night-Eighties", + "label": "Tomorrow Night Eighties", + "value": "/*! GitHub: Tomorrow Night Eighties */:root{--ghd-code-background:#000;--ghd-code-color:#ccc}.pl-c,.pl-c span{color:#969896!important;font-style:italic!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#de935f!important}.pl-cos{color:#b5bd68!important}.pl-e,.pl-ef,.pl-en{color:#f0c674!important}.pl-enc{color:#de935f!important}.pl-enf,.pl-enm{color:#f0c674!important}.pl-ens{color:#de935f!important}.pl-ent{color:#b294bb!important}.pl-entc,.pl-enti{color:#f0c674!important}.pl-enti{font-weight:700!important}.pl-entm{color:#c66!important}.pl-eoa{color:#b294bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#c66!important}.pl-eoai,.pl-eoai .pl-pde{color:#b294bb!important}.pl-eoi{color:#f0c674!important}.pl-k,.pl-ko,.pl-kolp{color:#b294bb!important}.pl-kos,.pl-kou{color:#de935f!important}.pl-mai .pl-sf{color:#c66!important}.pl-mb{color:#b5bd68!important;font-weight:700!important}.pl-mc{color:#b294bb!important}.pl-mh .pl-pdh{color:#de935f!important}.pl-mi{color:#b294bb!important;font-style:italic!important}.pl-ml{color:#b5bd68!important}.pl-mm{color:#c66!important}.pl-mp,.pl-mp1 .pl-sf{color:#81a2be!important}.pl-mq{color:#de935f!important}.pl-mr,.pl-ms{color:#b294bb!important}.pl-pdb{color:#b5bd68!important;font-weight:700!important}.pl-pdc{color:#969896!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#de935f!important}.pl-pdi{color:#b294bb!important;font-style:italic!important}.pl-pds{color:#b5bd68!important}.pl-pdv{color:#c66!important}.pl-pse,.pl-pse .pl-s2{color:#de935f!important}.pl-s{color:#b294bb!important}.pl-s1{color:#b5bd68!important}.pl-s2{color:#c5c8c6!important}.pl-mp .pl-s3{color:#b294bb!important}.pl-s3{color:#81a2be!important}.pl-sc{color:#c5c8c6!important}.pl-scp{color:#de935f!important}.pl-sf{color:#dad085!important}.pl-smc{color:#f0c674!important}.pl-smi,.pl-smp{color:#c5c8c6!important}.pl-sok{color:#b294bb!important}.pl-sol{color:#b5bd68!important}.pl-som,.pl-sr{color:#c66!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#b294bb!important}.pl-stj{color:#c5c8c6!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#de935f!important}.pl-vo{color:#c66!important}.pl-vpf{color:#de935f!important}.pl-mdht,.pl-mi1{color:#8f9d6a!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#c66!important;background:rgba(64,0,0,.5)!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c66!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#c66!important;color:#fff!important}.pl-mo{color:#c5c8c6!important}.pl-mri{color:#de935f!important}.pl-ms1{background-color:#c5c8c6!important}.pl-va,.pl-vpu{color:#de935f!important}.pl-entl{color:#c5c8c6!important}.highlight .pl-corl span.x,.pl-corl{color:#b294bb!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#f0c674!important;color:#000!important}" + }, + { + "name": "Tomorrow-Night", + "label": "Tomorrow Night", + "value": "/*! GitHub: Tomorrow Night */:root{--ghd-code-background:#1d1f21;--ghd-code-color:#c5c8c6}.pl-c,.pl-c span{color:#969896!important;font-style:italic!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#de935f!important}.pl-cos{color:#b5bd68!important}.pl-e,.pl-ef,.pl-en{color:#f0c674!important}.pl-enc{color:#de935f!important}.pl-enf,.pl-enm{color:#f0c674!important}.pl-ens{color:#de935f!important}.pl-ent{color:#b294bb!important}.pl-entc,.pl-enti{color:#f0c674!important}.pl-enti{font-weight:700!important}.pl-entm{color:#c66!important}.pl-eoa{color:#b294bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#c66!important}.pl-eoai,.pl-eoai .pl-pde{color:#b294bb!important}.pl-eoi{color:#f0c674!important}.pl-k,.pl-ko,.pl-kolp{color:#b294bb!important}.pl-kos,.pl-kou{color:#de935f!important}.pl-mai .pl-sf{color:#c66!important}.pl-mb{color:#b5bd68!important;font-weight:700!important}.pl-mc{color:#b294bb!important}.pl-mh .pl-pdh{color:#de935f!important}.pl-mi{color:#b294bb!important;font-style:italic!important}.pl-ml{color:#b5bd68!important}.pl-mm{color:#c66!important}.pl-mp,.pl-mp1 .pl-sf{color:#81a2be!important}.pl-mq{color:#de935f!important}.pl-mr,.pl-ms{color:#b294bb!important}.pl-pdb{color:#b5bd68!important;font-weight:700!important}.pl-pdc{color:#969896!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#de935f!important}.pl-pdi{color:#b294bb!important;font-style:italic!important}.pl-pds{color:#b5bd68!important}.pl-pdv{color:#c66!important}.pl-pse,.pl-pse .pl-s2{color:#de935f!important}.pl-s{color:#b294bb!important}.pl-s1{color:#b5bd68!important}.pl-s2{color:#c5c8c6!important}.pl-mp .pl-s3{color:#b294bb!important}.pl-s3{color:#81a2be!important}.pl-sc{color:#c5c8c6!important}.pl-scp{color:#de935f!important}.pl-sf{color:#dad085!important}.pl-smc{color:#f0c674!important}.pl-smi,.pl-smp{color:#c5c8c6!important}.pl-sok{color:#b294bb!important}.pl-sol{color:#b5bd68!important}.pl-som,.pl-sr{color:#c66!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#b294bb!important}.pl-stj{color:#c5c8c6!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#de935f!important}.pl-vo{color:#c66!important}.pl-vpf{color:#de935f!important}.pl-mdht,.pl-mi1{color:#8f9d6a!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#c66!important;background:rgba(64,0,0,.5)!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c66!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#c66!important;color:#fff!important}.pl-mo{color:#c5c8c6!important}.pl-mri{color:#de935f!important}.pl-ms1{background-color:#c5c8c6!important}.pl-va,.pl-vpu{color:#de935f!important}.pl-entl{color:#c5c8c6!important}.highlight .pl-corl span.x,.pl-corl{color:#b294bb!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#f0c674!important;color:#1d1f21!important}" + }, + { + "name": "Vibrant-Ink", + "label": "Vibrant Ink", + "value": "/*! GitHub: Vibrant Ink */:root{--ghd-code-background:#0f0f0f;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#93c!important;font-style:italic!important}.pl-c1{color:#399!important}.pl-e,.pl-en{color:#f60!important}.pl-ent{color:#fc0!important}.pl-k{color:#9c9!important}.pl-mb{color:#6f0!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#f60!important}.pl-mh,.pl-mh .pl-en{color:#9c9!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#f60!important}.pl-mq{color:#93c!important}.pl-mr,.pl-ms{color:#f60!important}.pl-pds{color:#6f0!important}.pl-s{color:#fc0!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#6f0!important}.pl-s1 .pl-s2{color:#399!important}.pl-s1 .pl-v{color:#f60!important}.pl-s3{color:#fc0!important}.pl-sc{color:#fff!important}.pl-smi,.pl-smp{color:#399!important}.pl-sr{color:#44b4cc!important}.pl-sr .pl-cce{color:#9c9!important}.pl-sr .pl-sra,.pl-sr .pl-sre{color:#44b4cc!important}.pl-src{color:#6f0!important}.pl-st{color:#f60!important}.pl-stj{color:#399!important}.pl-sv{color:#6f0!important}.pl-v{color:#fc0!important}.pl-vo{color:#399!important}.pl-vpf{color:#fff!important}.pl-mdht,.pl-mi1{color:#fff!important;background:rgba(0,64,0,.5)!important}.pl-md,.pl-mdhf{color:#fff!important;background:rgba(64,0,0,.5)!important}.pl-bu,.pl-ii{color:#f60!important;background:#400000!important}.highlight .pl-corl span.x,.pl-corl{color:#fc0!important;text-decoration:underline!important}.highlight-source-css .pl-c1{color:#9c9!important}.highlight-source-css .pl-ent{color:#399!important}.highlight-source-css .pl-s3{color:#fff!important}.highlight-source-css .pl-sc{color:#399!important}.highlight-text-html-basic .pl-ent{color:#f60!important}.highlight-text-html-basic .pl-e{color:#9c9!important}.highlight-source-js .pl-vpf{color:#fc0!important}.highlight-text-html-php .pl-s,.highlight-text-html-php .pl-s3{color:#f60!important}.highlight-text-html-php .pl-vo{color:#fc0!important}.highlight-source-c\\+\\+ .pl-s3{color:#fff!important}.pl-token.active,.pl-token:hover{background:#fff!important;color:#f60!important}" + } + ] + }, + "syntax-codemirror": { + "type": "select", + "label": "CodeMirror syntax theme", + "name": "syntax-codemirror", + "value": null, + "default": "Twilight", + "options": [ + { + "name": "Twilight", + "label": "Twilight", + "value": "/*! CodeMirror: Twilight */.CodeMirror-gutters{background:#222!important;border-right:1px solid #484848!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#aaa!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.CodeMirror-activeline-background{background:#27282e!important}.CodeMirror-matchingbracket{outline:1px solid grey!important;color:#fff!important}.cm-keyword{color:#f9ee98!important}.cm-atom{color:#fc0!important}.cm-number{color:#ca7841!important}.cm-def{color:#8da6ce!important}.cm-variable-2,.cm-variable-3,span.cm-def,span.cm-tag{color:#607392!important}.cm-operator{color:#cda869!important}.cm-comment{color:#777!important;font-style:italic!important;font-weight:400!important}.cm-string{color:#8f9d6a!important}.cm-string-2{color:#bd6b18!important}.cm-meta{background-color:#141414!important;color:#f7f7f7!important}.cm-builtin{color:#cda869!important}.cm-tag{color:#997643!important}.cm-attribute{color:#d6bb6d!important}.cm-header{color:#ff6400!important}.cm-hr{color:#aeaeae!important}.cm-link{color:#ad9361!important;font-style:italic!important;text-decoration:none!important}.cm-error{border-bottom:1px solid red!important}" + }, + { + "name": "Ambiance", + "label": "Ambiance", + "value": "/*! CodeMirror: Ambiance */.cm-header{color:#00f!important}.cm-quote{color:#24c2c7!important}.cm-keyword{color:#cda869!important}.cm-atom{color:#cf7ea9!important}.cm-number{color:#78cf8a!important}.cm-def{color:#aac6e3!important}.cm-variable{color:#ffb795!important}.cm-variable-2{color:#eed1b3!important}.cm-variable-3{color:#faded3!important}.cm-property{color:#eed1b3!important}.cm-operator{color:#fa8d6a!important}.cm-comment{color:#555!important;font-style:italic!important}.cm-string{color:#8f9d6a!important}.cm-string-2{color:#9d937c!important}.cm-meta{color:#d2a8a1!important}.cm-qualifier{color:#ff0!important}.cm-builtin{color:#99c!important}.cm-bracket{color:#24c2c7!important}.cm-tag{color:#fee4ff!important}.cm-attribute{color:#9b859d!important}.cm-hr{color:pink!important}.cm-link{color:#f4c20b!important}.cm-special{color:#ff9d00!important}.cm-error{color:#af2018!important}.CodeMirror-matchingbracket{color:#0f0!important}.CodeMirror-nonmatchingbracket{color:#f22!important}.CodeMirror-selected{background:hsla(0,0%,100%,.15)!important}.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror{line-height:1.4em!important;color:#e6e1dc!important;background-color:#202020!important;-webkit-box-shadow:inset 0 0 10px #000!important;-moz-box-shadow:inset 0 0 10px #000!important;box-shadow:inset 0 0 10px #000!important}.CodeMirror-gutters{background:#3d3d3d!important;border-right:1px solid #4d4d4d!important;box-shadow:0 10px 20px #000!important}.CodeMirror-linenumber{text-shadow:0 1px 1px #4d4d4d!important;color:#111!important;padding:0 5px!important}.CodeMirror-guttermarker{color:#aaa!important}.CodeMirror-guttermarker-subtle{color:#111!important}.CodeMirror-cursor{border-left:1px solid #7991e8!important}.CodeMirror-activeline-background{background:none repeat scroll 0 0 hsla(0,0%,100%,.031)!important}" + }, + { + "name": "Base16-Ocean-Dark", + "label": "Base16 Ocean Dark", + "value": "/*! CodeMirror: Base16 Ocean Dark */.CodeMirror{background:#2b303b!important;color:#dfe1e8!important}div.CodeMirror-selected{background:#343d46!important}.CodeMirror-gutters{background:#2b303b!important;border-right:0!important}.CodeMirror-linenumber{color:#65737e!important}.CodeMirror-cursor{border-left:1px solid #a7adba!important}span.cm-comment{color:#ab7967!important}span.cm-atom,span.cm-number{color:#b48ead!important}span.cm-attribute,span.cm-property{color:#a3be8c!important}span.cm-keyword{color:#bf616a!important}span.cm-string{color:#ebcb8b!important}span.cm-variable{color:#a3be8c!important}span.cm-variable-2{color:#8fa1b3!important}span.cm-def{color:#d08770!important}span.cm-error{background:#bf616a!important;color:#a7adba!important}span.cm-bracket{color:#dfe1e8!important}span.cm-tag{color:#bf616a!important}span.cm-link{color:#b48ead!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important}" + }, + { + "name": "Cobalt", + "label": "Cobalt", + "value": "/*! CodeMirror: Cobalt */.CodeMirror{background:#002240!important;color:#fff!important}div.CodeMirror-selected{background:#b36539!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(179,101,57,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(179,101,57,.99)!important}.CodeMirror-gutters{background:#002240!important;border-right:1px solid #aaa!important}.CodeMirror-guttermarker{color:#ffee80!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.cm-comment{color:#08f!important}.cm-atom{color:#845dc4!important}.cm-number,span.cm-attribute{color:#ff80e1!important}.cm-keyword{color:#ffee80!important}.cm-string{color:#3ad900!important}.cm-meta{color:#ff9d00!important}.cm-variable-2,span.cm-tag{color:#9effff!important}.cm-variable-3,span.cm-def{color:#fff!important}.cm-bracket{color:#d8d8d8!important}.cm-builtin,span.cm-special{color:#ff9e59!important}.cm-link{color:#845dc4!important}.cm-error{color:#9d1e15!important}.CodeMirror-activeline-background{background:#002d57!important}.CodeMirror-matchingbracket{outline:1px solid grey!important;color:#fff!important}" + }, + { + "name": "Dracula", + "label": "Dracula", + "value": "/*! CodeMirror: Dracula */.CodeMirror,.CodeMirror-gutters{background-color:#282a36!important;color:#f8f8f2!important;border:none!important}.CodeMirror-gutters{color:#282a36!important}.CodeMirror-cursor{border-left:thin solid #f8f8f0!important}.CodeMirror-linenumber{color:#6d8a88!important}.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}span.cm-comment{color:#6272a4!important}span.cm-string,span.cm-string-2{color:#f1fa8c!important}span.cm-number{color:#bd93f9!important}span.cm-variable{color:#50fa7b!important}span.cm-variable-2{color:#fff!important}span.cm-def{color:#ffb86c!important}span.cm-keyword,span.cm-operator{color:#ff79c6!important}span.cm-atom{color:#bd93f9!important}span.cm-meta{color:#f8f8f2!important}span.cm-tag{color:#ff79c6!important}span.cm-attribute,span.cm-qualifier{color:#50fa7b!important}span.cm-property{color:#66d9ef!important}span.cm-builtin,span.cm-variable-3{color:#50fa7b!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important}" + }, + { + "name": "Material", + "label": "Material", + "value": "/*! CodeMirror: Material */.CodeMirror{background-color:#263238!important;color:#e9eded!important}.CodeMirror-gutters{background:#263238!important;border:none!important}.CodeMirror-guttermarker,.CodeMirror-guttermarker-subtle,.CodeMirror-gutters,.CodeMirror-linenumber{color:#537f7e!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}div.CodeMirror-selected{background:hsla(0,0%,100%,.15)!important}.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-activeline-background{background:transparent!important}.cm-keyword{color:#c792ea!important}.cm-operator{color:#e9eded!important}.cm-variable-2{color:#80cbc4!important}.cm-type,.cm-variable-3{color:#82b1ff!important}.cm-builtin{color:#decb6b!important}.cm-atom,.cm-number{color:#f77669!important}.cm-def{color:#e9eded!important}.cm-string{color:#c3e88d!important}.cm-string-2{color:#80cbc4!important}.cm-comment{color:#546e7a!important}.cm-variable{color:#82b1ff!important}.cm-meta,.cm-tag{color:#80cbc4!important}.cm-attribute{color:#ffcb6b!important}.cm-property{color:#80cbae!important}.cm-qualifier,.cm-type,.cm-variable-3{color:#decb6b!important}.cm-tag{color:#ff5370!important}.cm-error{color:#fff!important;background-color:#ec5f67!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important}" + }, + { + "name": "Monokai---Spacegray-Eighties", + "label": "Monokai - Spacegray Eighties", + "value": "/*! CodeMirror: Monokai - Spacegray Eighties */.CodeMirror{background:#1c1c1c!important;color:#f8f8f8!important}.CodeMirror-selected{background:#3c3c3c!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(44,44,44,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(44,44,44,.99)!important}.CodeMirror-gutters{background:#1c1c1c!important;border-right:0!important}.CodeMirror-guttermarker{color:#b9b9b9!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#8a8a8a!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}.cm-comment{color:grey!important}.cm-atom,.cm-number{color:#ae81ff!important}.cm-property,span.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#66d9ef!important;font-style:italic!important}.cm-builtin{color:#f8f8f8!important}.cm-string{color:#e6db74!important}.cm-variable{color:#f8f8f8!important}.cm-variable-2{color:#9effff!important}.cm-variable-3{color:#ae81ff!important}.cm-def{color:#66d9ef!important;font-style:italic!important}.cm-bracket{color:#f8f8f8!important}.cm-tag{color:#f92672!important}.cm-header,.cm-link{color:#ae81ff!important}.cm-error{background:#1e0010!important;color:#960050!important}.CodeMirror-activeline-background{background:#2c2c2c!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#f8f8f8!important}" + }, + { + "name": "Monokai", + "label": "Monokai", + "value": "/*! CodeMirror: Monokai */.CodeMirror{background:#272822!important;color:#f8f8f2!important}.CodeMirror-selected{background:#49483e!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)!important}.CodeMirror-gutters{background:#272822!important;border-right:0!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}.cm-comment{color:#75715e!important}.cm-atom,.cm-number{color:#ae81ff!important}.cm-property,span.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#f92672!important}.cm-builtin{color:#66d9ef!important}.cm-string{color:#e6db74!important}.cm-variable{color:#f8f8f2!important}.cm-variable-2{color:#9effff!important}.cm-variable-3{color:#66d9ef!important}.cm-def{color:#fd971f!important}.cm-bracket{color:#f8f8f2!important}.cm-tag{color:#f92672!important}.cm-header,.cm-link{color:#ae81ff!important}.cm-error{background:#f92672!important;color:#f8f8f0!important}.CodeMirror-activeline-background{background:#373831!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important}" + }, + { + "name": "One-Dark", + "label": "One Dark", + "value": "/*! CodeMirror: One Dark */.CodeMirror,.CodeMirror-scroll{font-weight:300;background-color:#141414!important;color:#abb2bf!important}.CodeMirror-matchingbracket{color:#abb2bf!important;background-color:rgba(204,217,255,.09)!important;border-bottom:1px solid #528bff!important}.CodeMirror-selected{background:rgba(204,217,255,.05)!important}.CodeMirror-focused .CodeMirror-selected{background:rgba(204,217,255,.09)!important}.CodeMirror-lines{padding:4px 0!important}.CodeMirror pre{padding:0 4px!important}.CodeMirror-gutter,.CodeMirror-gutters{white-space:nowrap!important;border:none!important;background:transparent!important}.CodeMirror-linenumber{padding:0 30px!important;min-width:20px!important;text-align:right!important;white-space:nowrap!important;color:#393e46!important}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#ccc!important}.CodeMirror-cursor{border-left:2px solid #528bff!important}.CodeMirror-activeline{color:#5c6370!important}.CodeMirror-overwrite .CodeMirror-cursor{border-left:none!important;border-bottom:1px solid #abb2bf!important}.cm-header{color:#e06c75!important}.cm-header .cm-em{color:#c678dd!important;font-style:italic!important}.cm-header .cm-strong{color:#d19a66!important;font-weight:700!important}.cm-quote{color:#d19a66!important;font-style:italic!important}.cm-keyword{color:#c678dd!important}.cm-atom,.cm-number{color:#d19a66!important}.cm-def{color:#e06c75!important}.cm-variable{color:#e5c07b!important}.cm-variable-2{color:#d19a66!important}.cm-variable-3{color:#56b6c2!important}.cm-property{color:#d19a66!important}.cm-operator{color:#abb2bf!important}.cm-comment{color:#5c6370!important;font-style:italic!important}.cm-string,.cm-string-2{color:#98c379!important}.cm-meta,.cm-qualifier{color:#d19a66!important}.cm-builtin{color:#61afef!important}.cm-bracket{color:#abb2bf!important}.cm-tag{color:#e06c75!important}.cm-attribute{color:#d19a66!important}.cm-link{color:#e06c75!important;border-bottom:1px solid #e06c75!important;cursor:pointer!important}.cm-em{color:#c678dd!important;font-style:italic}.cm-strong{color:#e5c07b!important;font-weight:700}.cm-punctuation{color:#5c6370!important}.cm-positive{color:#98c379!important}.cm-negative{color:#e06c75!important}" + }, + { + "name": "Pastel-on-Dark", + "label": "Pastel on Dark", + "value": "/*! CodeMirror: Pastel on Dark */.CodeMirror-selected{background:rgba(221,240,255,.2)!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(221,240,255,.2)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(221,240,255,.2)!important}.CodeMirror-gutters{background:#34302f!important;border-right:0!important;padding:0 3px!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#8f938f!important}.CodeMirror-cursor{border-left:1px solid #a7a7a7!important}.cm-comment{color:#a6c6ff!important}.cm-atom{color:#de8e30!important}.cm-number{color:#ccc!important}.cm-property{color:#8f938f!important}.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#aeb2f8!important}.cm-string{color:#66a968!important}.cm-variable{color:#aeb2f8!important}.cm-variable-2{color:#bebf55!important}.cm-variable-3{color:#de8e30!important}.cm-def{color:#757ad8!important}.cm-bracket{color:#f8f8f2!important}.cm-tag{color:#c1c144!important}.cm-link{color:#ae81ff!important}.cm-qualifier,span.cm-builtin{color:#c1c144!important}.cm-error{background:#757ad8!important;color:#f8f8f0!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.031)!important}.CodeMirror-matchingbracket{border:1px solid hsla(0,0%,100%,.25)!important;color:#8f938f!important;margin:-1px -1px 0!important}" + }, + { + "name": "Railscasts", + "label": "Railscasts", + "value": "/*! CodeMirror: Railscasts */.CodeMirror{background:#2b2b2b!important;color:#f4f1ed!important}.CodeMirror-selected{background:#272935!important}.CodeMirror-gutters{background:#2b2b2b!important;border-right:0!important}.CodeMirror-linenumber{color:#5a647e!important}.CodeMirror-cursor{border-left:1px solid #d4cfc9!important}.cm-comment{color:#bc9458!important}.cm-atom,.cm-number{color:#b6b3eb!important}.cm-attribute,.cm-property{color:#a5c261!important}.cm-keyword{color:#da4939!important}.cm-string{color:#ffc66d!important}.cm-variable{color:#a5c261!important}.cm-variable-2{color:#6d9cbe!important}.cm-def{color:#cc7833!important}.cm-error{background:#da4939!important;color:#d4cfc9!important}.cm-bracket{color:#f4f1ed!important}.cm-tag{color:#da4939!important}.cm-link{color:#b6b3eb!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important}.CodeMirror-activeline-background{background:#303040!important}" + }, + { + "name": "Solarized-Dark", + "label": "Solarized Dark", + "value": "/*! CodeMirror: Solarized Dark */.CodeMirror-widget{text-shadow:none!important}.cm-header{color:#586e75!important}.cm-quote{color:#93a1a1!important}.cm-keyword{color:#cb4b16!important}.cm-atom,.cm-number{color:#d33682!important}.cm-def{color:#2aa198!important}.cm-variable{color:#839496!important}.cm-variable-2{color:#b58900!important}.cm-variable-3{color:#6c71c4!important}.cm-property{color:#2aa198!important}.cm-operator{color:#6c71c4!important}.cm-comment{color:#586e75!important;font-style:italic!important}.cm-string{color:#859900!important}.cm-string-2{color:#b58900!important}.cm-meta{color:#859900!important}.cm-qualifier{color:#b58900!important}.cm-builtin{color:#d33682!important}.cm-bracket{color:#cb4b16!important}.CodeMirror-matchingbracket{color:#859900!important}.CodeMirror-nonmatchingbracket{color:#dc322f!important}.cm-tag{color:#93a1a1!important}.cm-attribute{color:#2aa198!important}.cm-hr{color:transparent!important;border-top:1px solid #586e75!important;display:block!important}.cm-link{color:#93a1a1!important;cursor:pointer!important}.cm-special{color:#6c71c4!important}.cm-em{color:#999!important;text-decoration:underline!important;text-decoration-style:dotted!important}.cm-strong{color:#eee!important}.cm-error,.cm-invalidchar{color:#586e75!important;border-bottom:1px dotted #dc322f!important}.CodeMirror-selected{background:#073642!important}.cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)!important}.cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000!important;-webkit-box-shadow:inset 7px 0 12px -6px #000!important;box-shadow:inset 7px 0 12px -6px #000!important}.CodeMirror-gutters{border-right:0!important;background-color:#073642!important}.CodeMirror-linenumber{text-shadow:#021014 0 -1px!important;padding:0 5px!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#586e75!important}.CodeMirror-guttermarker{color:#ddd!important}.CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75!important}.CodeMirror-cursor{border-left:1px solid #819090!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.06)!important}" + }, + { + "name": "Tomorrow-Night-Bright", + "label": "Tomorrow Night Bright", + "value": "/*! CodeMirror: Tomorrow Night Bright */.CodeMirror-selected{background:#424242!important}.CodeMirror-gutters{background:#000!important;border-right:0!important}.CodeMirror-guttermarker{color:#e78c45!important}.CodeMirror-guttermarker-subtle{color:#777!important}.CodeMirror-linenumber{color:#424242!important}.CodeMirror-cursor{border-left:1px solid #6a6a6a!important}.cm-comment{color:#d27b53!important}.cm-atom,.cm-number{color:#a16a94!important}.cm-property,span.cm-attribute{color:#9c9!important}.cm-keyword{color:#d54e53!important}.cm-string{color:#e7c547!important}.cm-variable{color:#b9ca4a!important}.cm-variable-2{color:#7aa6da!important}.cm-def{color:#e78c45!important}.cm-bracket{color:#eaeaea!important}.cm-tag{color:#d54e53!important}.cm-link{color:#a16a94!important}.cm-error{background:#d54e53!important;color:#6a6a6a!important}.CodeMirror-activeline-background{background:#2a2a2a!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important}" + }, + { + "name": "Tomorrow-Night-Eighties", + "label": "Tomorrow Night Eighties", + "value": "/*! CodeMirror: Tomorrow Night Eighties */.CodeMirror-selected{background:#2d2d2d!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)!important}.CodeMirror-gutters{background:#000!important;border-right:0!important}.CodeMirror-guttermarker{color:#f2777a!important}.CodeMirror-guttermarker-subtle{color:#777!important}.CodeMirror-linenumber{color:#515151!important}.CodeMirror-cursor{border-left:1px solid #6a6a6a!important}.cm-comment{color:#d27b53!important}.cm-atom,.cm-number{color:#a16a94!important}.cm-property,span.cm-attribute{color:#9c9!important}.cm-keyword{color:#f2777a!important}.cm-string{color:#fc6!important}.cm-variable{color:#9c9!important}.cm-variable-2{color:#69c!important}.cm-def{color:#f99157!important}.cm-bracket{color:#ccc!important}.cm-tag{color:#f2777a!important}.cm-link{color:#a16a94!important}.cm-error{background:#f2777a!important;color:#6a6a6a!important}.CodeMirror-activeline-background{background:#343600!important}.CodeMirror-matchingbracket{text-decoration:underline!important;color:#fff!important}" + }, + { + "name": "Vibrant-Ink", + "label": "Vibrant Ink", + "value": "/*! CodeMirror: Vibrant Ink */.CodeMirror-selected{background:#35493c!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(53,73,60,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(53,73,60,.99)!important}.CodeMirror-gutters{background:#002240!important;border-right:1px solid #aaa!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.cm-keyword{color:#cc7832!important}.cm-atom{color:#fc0!important}.cm-number{color:#ffee98!important}.cm-def{color:#8da6ce!important}.cm-s-vibrant span.cm-def,.cm-s-vibrant span.cm-tag,.cm-variable-2,.cm-variable-3{color:#ffc66d!important}.cm-operator{color:#888!important}.cm-comment{color:grey!important;font-weight:700!important}.cm-string{color:#a5c25c!important}.cm-string-2{color:red!important}.cm-meta{color:#d8fa3c!important}.cm-attribute,.cm-builtin,.cm-tag{color:#8da6ce!important}.cm-header{color:#ff6400!important}.cm-hr{color:#aeaeae!important}.cm-link{color:#00f!important}.cm-error{border-bottom:1px solid red!important}.CodeMirror-activeline-background{background:#27282e!important}.CodeMirror-matchingbracket{outline:1px solid grey!important;color:#fff!important}" + } + ] + }, + "syntax-jupyter": { + "type": "select", + "label": "Jupyter syntax theme", + "name": "syntax-jupyter", + "value": null, + "default": "Twilight", + "options": [ + { + "name": "Twilight", + "label": "Twilight", + "value": "/*! Jupyter: Twilight */#notebook div.output_stderr{background:#420e09!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#141414!important;color:#ccc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {border:#b22518!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#5f5a60!important;font-style:italic!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#cda869!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#141414!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#5f5a60!important;font-style:italic!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#5f5a60!important}.highlight code .c1,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cs, body.api .highlight .cs {color:#5f5a60!important;font-style:italic!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {background:#420e09!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {background:#b22518!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:navy!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {background:#253b22!important}.highlight code .gp,.highlight code .gs,#notebook .highlight .gp, body.api .highlight .gp, #notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:purple!important;font-weight:700!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#e9df8f!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#9b703f!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#f9ee98!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#cda869!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#9b859d!important;font-weight:700!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#9b859d!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#7587a6!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#cf6a4c!important;font-weight:700!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#9b703f!important;font-weight:700!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#9b859d!important;font-weight:700!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#cda869!important;font-weight:700!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#7587a6!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#a2f!important;font-weight:700!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#cf6a4c!important}.highlight code .sb,.highlight code .sc,#notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc {color:#8f9d6a!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#8f9d6a!important;font-style:italic!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#8f9d6a!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#f9ee98!important;font-weight:700!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#8f9d6a!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#daefa3!important;font-weight:700!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#8f9d6a!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#e9c062!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#8f9d6a!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#cf6a4c!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#0aa!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#7587a6!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#099!important}" + }, + { + "name": "Base16-Ocean-Dark", + "label": "Base16 Ocean Dark", + "value": "/*! Jupyter: Base16 Ocean Dark */#notebook div.output_stderr{background:#bf616a!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#2b303b!important;color:#eff1f5!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#4f5b66!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#bf616a!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#65737e!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#b48ead!important}.highlight code .l,.highlight code .m,#notebook .highlight .l, body.api .highlight .l, #notebook .highlight .m, body.api .highlight .m {color:#d08770!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#eff1f5!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#96b5b4!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#eff1f5!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#a3be8c!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#eff1f5!important}.highlight code .c1,.highlight code .cm,.highlight code .cp,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cm, body.api .highlight .cm, #notebook .highlight .cp, body.api .highlight .cp, #notebook .highlight .cs, body.api .highlight .cs {color:#65737e!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#bf616a!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#eff1f5!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#a3be8c!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#65737e!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#96b5b4!important;font-weight:700!important}.highlight code .kc,.highlight code .kd,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd {color:#b48ead!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#96b5b4!important}.highlight code .kp,.highlight code .kr,#notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#b48ead!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#ebcb8b!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#a3be8c!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#8fa1b3!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#eff1f5!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#ebcb8b!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#bf616a!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#96b5b4!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#eff1f5!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#bf616a!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#8fa1b3!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#eff1f5!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#ebcb8b!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#8fa1b3!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#eff1f5!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#96b5b4!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#bf616a!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#96b5b4!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#d08770!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#a3be8c!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#eff1f5!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#65737e!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#a3be8c!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#d08770!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#a3be8c!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#d08770!important}.highlight code .s1,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#a3be8c!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#eff1f5!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#bf616a!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#d08770!important}" + }, + { + "name": "Dracula-theme", + "label": "Dracula theme", + "value": "/*! Jupyter: Dracula theme */#notebook div.output_stderr{background:#8b080b!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#282a36!important;color:#f8f8f2!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#f8f8f2!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#6272a4!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#f8f8f2!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#ff79c6!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#f8f8f2!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#bd93f9!important}.highlight code .h,.highlight code .n,.highlight code .o,.highlight code .p,#notebook .highlight .h, body.api .highlight .h, #notebook .highlight .n, body.api .highlight .n, #notebook .highlight .o, body.api .highlight .o, #notebook .highlight .p, body.api .highlight .p {color:#f8f8f2!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#f1fa8c!important}.highlight code .w,.highlight code .x,#notebook .highlight .w, body.api .highlight .w, #notebook .highlight .x, body.api .highlight .x {color:#f8f8f2!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#6272a4!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#ff79c6!important}.highlight code .c1,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cs, body.api .highlight .cs {color:#6272a4!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#8b080b!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#f8f8f2!important;text-decoration:underline!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#f8f8f2!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#f8f8f2!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#f8f8f2!important;font-weight:700!important;background-color:#468410!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {color:#3b3a32!important;background-color:#32343f!important}.highlight code .gp,.highlight code .gs,#notebook .highlight .gp, body.api .highlight .gp, #notebook .highlight .gs, body.api .highlight .gs {color:#f8f8f2!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#f8f8f2!important;font-weight:700!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#f8f8f0!important;background-color:#ff79c6!important}.highlight code .kc,.highlight code .kd,.highlight code .kn,.highlight code .kp,.highlight code .kr,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd, #notebook .highlight .kn, body.api .highlight .kn, #notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#ff79c6!important}.highlight code .kt,.highlight code .ld,#notebook .highlight .kt, body.api .highlight .kt, #notebook .highlight .ld, body.api .highlight .ld {color:#f8f8f2!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#50fa7b!important}.highlight code .nb,.highlight code .nd,.highlight code .ne,.highlight code .ni,.highlight code .no,#notebook .highlight .nb, body.api .highlight .nb, #notebook .highlight .nc, body.api .highlight .nc, #notebook .highlight .nd, body.api .highlight .nd, #notebook .highlight .ne, body.api .highlight .ne, #notebook .highlight .ni, body.api .highlight .ni, #notebook .highlight .no, body.api .highlight .no {color:#f8f8f2!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#50fa7b!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#f1fa8c!important}.highlight code .nn,.highlight code .nx,.highlight code .py,#notebook .highlight .nn, body.api .highlight .nn, #notebook .highlight .nx, body.api .highlight .nx, #notebook .highlight .py, body.api .highlight .py {color:#f8f8f2!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#ff79c6!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#8be9fd!important;font-style:italic!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#ff79c6!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#bd93f9!important}.highlight code .s1,.highlight code .s2,.highlight code .sb,.highlight code .sc,.highlight code .sd,.highlight code .se,.highlight code .sh,.highlight code .si,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .s2, body.api .highlight .s2, #notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc, #notebook .highlight .sd, body.api .highlight .sd, #notebook .highlight .se, body.api .highlight .se, #notebook .highlight .sh, body.api .highlight .sh, #notebook .highlight .si, body.api .highlight .si, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#f1fa8c!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#f8f8f2!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#8be9fd!important;font-style:italic!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#bd93f9!important}" + }, + { + "name": "Github-Dark-(Native-mod)-theme", + "label": "Github Dark (Native mod) theme", + "value": "/*! Jupyter: Github Dark (Native mod) theme */#notebook div.output_stderr{background:#a61717!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#111!important;color:#d0d0d0!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#404040!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#a61717!important;background-color:#311!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#3677a9!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#d0d0d0!important}.highlight code .h,.highlight code .k,#notebook .highlight .h, body.api .highlight .h, #notebook .highlight .k, body.api .highlight .k {color:#ccc!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#d0d0d0!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#cd2828!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#ccc!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#777!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#e9b96e!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#d2691e!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#666!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#d0d0d0!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#3677a9!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#d2691e!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#3677a9!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#e50808!important;background-color:#520000!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#d22323!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#d0d0d0!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#d22323!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#589819!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {color:#ccc!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#aaa!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#d0d0d0!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#fff!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#d22323!important}.highlight code .kc,.highlight code .kd,.highlight code .kn,.highlight code .kp,.highlight code .kr,.highlight code .kt,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd, #notebook .highlight .kn, body.api .highlight .kn, #notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr, #notebook .highlight .kt, body.api .highlight .kt {color:#6ab825!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#d0d0d0!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#bbb!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#24909d!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#447fcf!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#4ca!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:orange!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#d0d0d0!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#bbb!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#098!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#d0d0d0!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#447fcf!important}.highlight code .nx,.highlight code .py,#notebook .highlight .nx, body.api .highlight .nx, #notebook .highlight .py, body.api .highlight .py {color:#d0d0d0!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#6ab825!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#4ca!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#6ab825!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#cd2828!important}.highlight code .s2,.highlight code .sb,.highlight code .sc,.highlight code .sd,.highlight code .se,.highlight code .sh,.highlight code .si,#notebook .highlight .s2, body.api .highlight .s2, #notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc, #notebook .highlight .sd, body.api .highlight .sd, #notebook .highlight .se, body.api .highlight .se, #notebook .highlight .sh, body.api .highlight .sh, #notebook .highlight .si, body.api .highlight .si {color:#d2691e!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:orange!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#cd2828!important}.highlight code .s1,.highlight code .ss,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .ss, body.api .highlight .ss {color:#d2691e!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#24909d!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#4ca!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#cd2828!important}" + }, + { + "name": "Idle-Fingers", + "label": "Idle Fingers", + "value": "/*! Jupyter: Idle Fingers */#notebook div.output_stderr{background:#cc7833!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#323232!important;color:#fff!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#fff!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#bc9458!important;font-style:italic!important}.highlight code .g,.highlight code .h,#notebook .highlight .g, body.api .highlight .g, #notebook .highlight .h, body.api .highlight .h {color:#fff!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#cc7833!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#fff!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#6c99bb!important}.highlight code .n,.highlight code .o,.highlight code .p,#notebook .highlight .n, body.api .highlight .n, #notebook .highlight .o, body.api .highlight .o, #notebook .highlight .p, body.api .highlight .p {color:#fff!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#a5c261!important}.highlight code .w,.highlight code .x,#notebook .highlight .w, body.api .highlight .w, #notebook .highlight .x, body.api .highlight .x {color:#fff!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#bc9458!important;font-style:italic!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#cc7833!important}.highlight code .c1,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cs, body.api .highlight .cs {color:#bc9458!important;font-style:italic!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#fff!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#fff!important;text-decoration:underline!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#fff!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#fff!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {color:#404040!important;background:#353637!important}.highlight code .gp,.highlight code .gs,#notebook .highlight .gp, body.api .highlight .gp, #notebook .highlight .gs, body.api .highlight .gs {color:#fff!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#fff!important;font-weight:700!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#fff!important;background:red!important}.highlight code .kc,.highlight code .kd,.highlight code .kn,.highlight code .kp,.highlight code .kr,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd, #notebook .highlight .kn, body.api .highlight .kn, #notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#cc7833!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#ffc66d!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#fff!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#ffc66d!important}.highlight code .nb,.highlight code .nc,#notebook .highlight .nb, body.api .highlight .nb, #notebook .highlight .nc, body.api .highlight .nc {color:#fff!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#6c99bb!important}.highlight code .nd,.highlight code .ne,.highlight code .ni,#notebook .highlight .nd, body.api .highlight .nd, #notebook .highlight .ne, body.api .highlight .ne, #notebook .highlight .ni, body.api .highlight .ni {color:#fff!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#ffc66d!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#a5c261!important}.highlight code .nn,.highlight code .nx,.highlight code .py,#notebook .highlight .nn, body.api .highlight .nn, #notebook .highlight .nx, body.api .highlight .nx, #notebook .highlight .py, body.api .highlight .py {color:#fff!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#cc7833!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#fff!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#cc7833!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#6c99bb!important}.highlight code .s1,.highlight code .s2,.highlight code .sb,.highlight code .sd,.highlight code .se,.highlight code .sh,.highlight code .si,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .s2, body.api .highlight .s2, #notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc, #notebook .highlight .sd, body.api .highlight .sd, #notebook .highlight .se, body.api .highlight .se, #notebook .highlight .sh, body.api .highlight .sh, #notebook .highlight .si, body.api .highlight .si, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#a5c261!important}.highlight code .bp,.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .bp, body.api .highlight .bp, #notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#fff!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#6c99bb!important}" + }, + { + "name": "Monokai---Spacegray-Eighties", + "label": "Monokai - Spacegray Eighties", + "value": "/*! Jupyter: Monokai - Spacegray Eighties */#notebook div.output_stderr{background:#960050!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background-color:#1c1c1c!important;color:#f8f8f8!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#2c2c2c!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#960050!important;background-color:#1e0010!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:grey!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#f8f8f8!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#66d9ef!important;font-style:italic!important}.highlight code .l,.highlight code .m,#notebook .highlight .l, body.api .highlight .l, #notebook .highlight .m, body.api .highlight .m {color:#ae81ff!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#f8f8f8!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#f92672!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#f8f8f8!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#e6db74!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#f8f8f8!important}.highlight code .c1,.highlight code .cm,.highlight code .cp,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cm, body.api .highlight .cm, #notebook .highlight .cp, body.api .highlight .cp, #notebook .highlight .cs, body.api .highlight .cs {color:grey!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#ae81ff!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#66d9ef!important;font-style:italic!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#f92672!important}.highlight code .kp,.highlight code .kr,#notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#ae81ff!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#66d9ef!important;font-style:italic!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e6db74!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#a6e22e!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#f8f8f8!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#a6e22e!important;font-style:italic!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#ae81ff!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#a6e22e!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#f92672!important}.highlight code .ne,.highlight code .nf,#notebook .highlight .ne, body.api .highlight .ne, #notebook .highlight .nf, body.api .highlight .nf {color:#a6e22e!important}.highlight code .nl,.highlight code .nn,.highlight code .nx,#notebook .highlight .nl, body.api .highlight .nl, #notebook .highlight .nn, body.api .highlight .nn, #notebook .highlight .nx, body.api .highlight .nx {color:#f8f8f8!important}.highlight code .nt,.highlight code .nv,.highlight code .ow,.highlight code .py,#notebook .highlight .nt, body.api .highlight .nt, #notebook .highlight .nv, body.api .highlight .nv, #notebook .highlight .ow, body.api .highlight .ow, #notebook .highlight .py, body.api .highlight .py {color:#f92672!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#ae81ff!important}.highlight code .s2,.highlight code .sb,.highlight code .sc,.highlight code .sd,#notebook .highlight .s2, body.api .highlight .s2, #notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc, #notebook .highlight .sd, body.api .highlight .sd {color:#e6db74!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#ae81ff!important}.highlight code .s1,.highlight code .sh,.highlight code .si,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .sh, body.api .highlight .sh, #notebook .highlight .si, body.api .highlight .si, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#e6db74!important}.highlight code .bp,.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .bp, body.api .highlight .bp, #notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#f92672!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#ae81ff!important}" + }, + { + "name": "Monokai", + "label": "Monokai", + "value": "/*! Jupyter: Monokai */#notebook div.output_stderr{background:#960050!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#272822!important;color:#f8f8f2!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#49483e!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#960050!important;background-color:#1e0010!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#75715e!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#f8f8f2!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#66d9ef!important}.highlight code .l,.highlight code .m,#notebook .highlight .l, body.api .highlight .l, #notebook .highlight .m, body.api .highlight .m {color:#ae81ff!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#f8f8f2!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#f92672!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#f8f8f2!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#e6db74!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#f8f8f2!important}.highlight code .c1,.highlight code .cm,.highlight code .cp,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cm, body.api .highlight .cm, #notebook .highlight .cp, body.api .highlight .cp, #notebook .highlight .cs, body.api .highlight .cs {color:#75715e!important}.highlight code .kc,.highlight code .kd,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd {color:#66d9ef!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#f92672!important}.highlight code .kp,.highlight code .kr,.highlight code .kt,#notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr, #notebook .highlight .kt, body.api .highlight .kt {color:#66d9ef!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e6db74!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#a6e22e!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#f8f8f2!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#a6e22e!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#66d9ef!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#a6e22e!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#f8f8f2!important}.highlight code .ne,.highlight code .nf,#notebook .highlight .ne, body.api .highlight .ne, #notebook .highlight .nf, body.api .highlight .nf {color:#a6e22e!important}.highlight code .nl,.highlight code .nn,#notebook .highlight .nl, body.api .highlight .nl, #notebook .highlight .nn, body.api .highlight .nn {color:#f8f8f2!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#a6e22e!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#f8f8f2!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#f92672!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#f8f8f2!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#f92672!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#ae81ff!important}.highlight code .s2,.highlight code .sb,.highlight code .sc,.highlight code .sd,#notebook .highlight .s2, body.api .highlight .s2, #notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc, #notebook .highlight .sd, body.api .highlight .sd {color:#e6db74!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#ae81ff!important}.highlight code .s1,.highlight code .sh,.highlight code .si,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .sh, body.api .highlight .sh, #notebook .highlight .si, body.api .highlight .si, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#e6db74!important}.highlight code .bp,.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .bp, body.api .highlight .bp, #notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#f8f8f2!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#ae81ff!important}" + }, + { + "name": "Obsidian", + "label": "Obsidian", + "value": "/*! Jupyter: Obsidian */#notebook div.output_stderr{background:#da4236!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background-color:#293134!important;color:#e0e2e4!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#e0e2e4!important;background-color:#da4236!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#66747b!important}.highlight code .g,.highlight code .h,#notebook .highlight .g, body.api .highlight .g, #notebook .highlight .h, body.api .highlight .h {color:#e0e2e4!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#93c763!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#e0e2e4!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#ec7600!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#e0e2e4!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#93c763!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#e0e2e4!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#ec7600!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#96989a!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#e0e2e4!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#66747b!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#93c763!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#66747b!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#93c763!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#ec7600!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#e0e2e4!important;font-style:italic!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#da4236!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#66747b!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#93c763!important}.highlight code .go,.highlight code .gp,#notebook .highlight .go, body.api .highlight .go, #notebook .highlight .gp, body.api .highlight .gp {color:#e0e2e4!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#e0e2e4!important;font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#66747b!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#e0e2e4!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#96989a!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#678cb1!important}.highlight code .kn,.highlight code .kp,#notebook .highlight .kn, body.api .highlight .kn, #notebook .highlight .kp, body.api .highlight .kp {color:#93c763!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#678cb1!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#da4236!important}.highlight code .ld,.highlight code .na,#notebook .highlight .ld, body.api .highlight .ld, #notebook .highlight .na, body.api .highlight .na {color:#e0e2e4!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#93c763!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#678cb1!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#96989a!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#678cb1!important}.highlight code .ne,.highlight code .ni,#notebook .highlight .ne, body.api .highlight .ne, #notebook .highlight .ni, body.api .highlight .ni {color:#96989a!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#678cb1!important}.highlight code .nl,.highlight code .nn,.highlight code .nx,.highlight code .py,#notebook .highlight .nl, body.api .highlight .nl, #notebook .highlight .nn, body.api .highlight .nn, #notebook .highlight .nx, body.api .highlight .nx, #notebook .highlight .py, body.api .highlight .py {color:#e0e2e4!important}.highlight code .nt,.highlight code .nv,#notebook .highlight .nt, body.api .highlight .nt, #notebook .highlight .nv, body.api .highlight .nv {color:#678cb1!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#93c763!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#ec7600!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#66747b!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#ec7600!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#e0e2e4!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#ec7600!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#96989a!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#e0e2e4!important}.highlight code .si,.highlight code .sx,#notebook .highlight .si, body.api .highlight .si, #notebook .highlight .sx, body.api .highlight .sx {color:#ec7600!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#d39745!important}.highlight code .s1,.highlight code .ss,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .ss, body.api .highlight .ss {color:#ec7600!important}.highlight code .bp,.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .bp, body.api .highlight .bp, #notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#678cb1!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#ec7600!important}" + }, + { + "name": "Pastel-on-Dark", + "label": "Pastel on Dark", + "value": "/*! Jupyter: Pastel on Dark */#notebook div.output_stderr{background:#600!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#2b2b2b!important;color:#e6e1dc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#e6e1dc!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#555!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#e6e1dc!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#4d74d0!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#e6e1dc!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#a5c261!important}.highlight code .h,.highlight code .n,.highlight code .o,.highlight code .p,#notebook .highlight .h, body.api .highlight .h, #notebook .highlight .n, body.api .highlight .n, #notebook .highlight .o, body.api .highlight .o, #notebook .highlight .p, body.api .highlight .p {color:#e6e1dc!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#ad9361!important}.highlight code .w,.highlight code .x,#notebook .highlight .w, body.api .highlight .w, #notebook .highlight .x, body.api .highlight .x {color:#e6e1dc!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#555!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#e6e1dc!important}.highlight code .c1,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cs, body.api .highlight .cs {color:#555!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#e6e1dc!important;background:#600!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#e6e1dc!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#ffc66d!important;background:#900!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#e6e1dc!important;background:#519f50!important}.highlight code .go,.highlight code .gp,.highlight code .gs,#notebook .highlight .go, body.api .highlight .go, #notebook .highlight .gp, body.api .highlight .gp, #notebook .highlight .gs, body.api .highlight .gs {color:#e6e1dc!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#fff!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#e6e1dc!important}.highlight code .kc,.highlight code .kd,.highlight code .kn,.highlight code .kp,.highlight code .kr,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd, #notebook .highlight .kn, body.api .highlight .kn, #notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#4d74d0!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#c1c144!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e6e1dc!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#6782d3!important}.highlight code .nb,.highlight code .nc,#notebook .highlight .nb, body.api .highlight .nb, #notebook .highlight .nc, body.api .highlight .nc {color:#e6e1dc!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#a1a1ff!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#e6e1dc!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#47b8d6!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#e6e1dc!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#6782d3!important}.highlight code .nl,.highlight code .nn,.highlight code .nx,.highlight code .py,#notebook .highlight .nl, body.api .highlight .nl, #notebook .highlight .nn, body.api .highlight .nn, #notebook .highlight .nx, body.api .highlight .nx, #notebook .highlight .py, body.api .highlight .py {color:#e6e1dc!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#4d74d0!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#c1c144!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#e6e1dc!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#a5c261!important}.highlight code .s1,.highlight code .s2,.highlight code .sb,.highlight code .sc,.highlight code .sd,.highlight code .se,.highlight code .sh,.highlight code .si,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .s2, body.api .highlight .s2, #notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc, #notebook .highlight .sd, body.api .highlight .sd, #notebook .highlight .se, body.api .highlight .se, #notebook .highlight .sh, body.api .highlight .sh, #notebook .highlight .si, body.api .highlight .si, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#ad9361!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#e6e1dc!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#c1c144!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#a5c261!important}" + }, + { + "name": "Railscasts", + "label": "Railscasts", + "value": "/*! Jupyter: Railscasts */#notebook div.output_stderr{background:#600!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#2b2b2b!important;color:#e6e1dc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#ffc!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#bc9458!important;font-style:italic!important}.highlight code .err,.highlight code .g,.highlight code .h,#notebook .highlight .err, body.api .highlight .err, #notebook .highlight .g, body.api .highlight .g, #notebook .highlight .h, body.api .highlight .h {color:#e6e1dc!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#cc7833!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#e6e1dc!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#a5c261!important}.highlight code .n,.highlight code .o,.highlight code .p,#notebook .highlight .n, body.api .highlight .n, #notebook .highlight .o, body.api .highlight .o, #notebook .highlight .p, body.api .highlight .p {color:#e6e1dc!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#a5c261!important}.highlight code .w,.highlight code .x,#notebook .highlight .w, body.api .highlight .w, #notebook .highlight .x, body.api .highlight .x {color:#e6e1dc!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#bc9458!important;font-style:italic!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#cc7833!important}.highlight code .c1,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cs, body.api .highlight .cs {color:#bc9458!important;font-style:italic!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#e6e1dc!important;background-color:#600!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#e6e1dc!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#fff!important;background-color:#900!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#e6e1dc!important;background-color:#144212!important}.highlight code .go,.highlight code .gp,.highlight code .gs,#notebook .highlight .go, body.api .highlight .go, #notebook .highlight .gp, body.api .highlight .gp, #notebook .highlight .gs, body.api .highlight .gs {color:#e6e1dc!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#fff!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#e6e1dc!important}.highlight code .kc,.highlight code .kd,.highlight code .kn,.highlight code .kp,.highlight code .kr,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd, #notebook .highlight .kn, body.api .highlight .kn, #notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#cc7833!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#da4939!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e6e1dc!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#ffc66d!important}.highlight code .nb,.highlight code .nc,#notebook .highlight .nb, body.api .highlight .nb, #notebook .highlight .nc, body.api .highlight .nc {color:#e6e1dc!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#6d9cbe!important}.highlight code .nd,.highlight code .ne,.highlight code .ni,#notebook .highlight .nd, body.api .highlight .nd, #notebook .highlight .ne, body.api .highlight .ne, #notebook .highlight .ni, body.api .highlight .ni {color:#e6e1dc!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#ffc66d!important}.highlight code .nl,.highlight code .nn,.highlight code .nx,.highlight code .py,#notebook .highlight .nl, body.api .highlight .nl, #notebook .highlight .nn, body.api .highlight .nn, #notebook .highlight .nx, body.api .highlight .nx, #notebook .highlight .py, body.api .highlight .py {color:#e6e1dc!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#cc7833!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#d0d0ff!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#e6e1dc!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,.highlight code .s1,.highlight code .s2,.highlight code .sb,.highlight code .sc,.highlight code .sd,.highlight code .se,.highlight code .sh,.highlight code .si,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo, #notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .s2, body.api .highlight .s2, #notebook .highlight .sb, body.api .highlight .sb, #notebook .highlight .sc, body.api .highlight .sc, #notebook .highlight .sd, body.api .highlight .sd, #notebook .highlight .se, body.api .highlight .se, #notebook .highlight .sh, body.api .highlight .sh, #notebook .highlight .si, body.api .highlight .si, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#a5c261!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#e6e1dc!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#d0d0ff!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#a5c261!important}" + }, + { + "name": "Solarized-Dark", + "label": "Solarized Dark", + "value": "/*! Jupyter: Solarized Dark */#notebook div.output_stderr{background:#dc322f!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background-color:#002b36!important;color:#839496!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#49483e!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#dc322f!important;background-color:#fdf6e3!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#586e75!important}.highlight code .g,.highlight code .h,#notebook .highlight .g, body.api .highlight .g, #notebook .highlight .h, body.api .highlight .h {color:#839496!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#859900!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#839496!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#2aa198!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#839496!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#859900!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#839496!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#2aa198!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#839496!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#cb4b16!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#586e75!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#859900!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#586e75!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#859900!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#2aa198!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#839496!important;font-style:italic!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#dc322f!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#cb4b16!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#859900!important}.highlight code .go,.highlight code .gp,#notebook .highlight .go, body.api .highlight .go, #notebook .highlight .gp, body.api .highlight .gp {color:#839496!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#839496!important;font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#cb4b16!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#839496!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#cb4b16!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#268bd2!important}.highlight code .kn,.highlight code .kp,#notebook .highlight .kn, body.api .highlight .kn, #notebook .highlight .kp, body.api .highlight .kp {color:#859900!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#268bd2!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#dc322f!important}.highlight code .ld,.highlight code .na,#notebook .highlight .ld, body.api .highlight .ld, #notebook .highlight .na, body.api .highlight .na {color:#839496!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#b58900!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#268bd2!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#cb4b16!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#268bd2!important}.highlight code .ne,.highlight code .ni,#notebook .highlight .ne, body.api .highlight .ne, #notebook .highlight .ni, body.api .highlight .ni {color:#cb4b16!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#268bd2!important}.highlight code .nl,.highlight code .nn,.highlight code .nx,.highlight code .py,#notebook .highlight .nl, body.api .highlight .nl, #notebook .highlight .nn, body.api .highlight .nn, #notebook .highlight .nx, body.api .highlight .nx, #notebook .highlight .py, body.api .highlight .py {color:#839496!important}.highlight code .nt,.highlight code .nv,#notebook .highlight .nt, body.api .highlight .nt, #notebook .highlight .nv, body.api .highlight .nv {color:#268bd2!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#859900!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#2aa198!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#586e75!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#2aa198!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#839496!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#2aa198!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#cb4b16!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#839496!important}.highlight code .si,.highlight code .sx,#notebook .highlight .si, body.api .highlight .si, #notebook .highlight .sx, body.api .highlight .sx {color:#2aa198!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#dc322f!important}.highlight code .s1,.highlight code .ss,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .ss, body.api .highlight .ss {color:#2aa198!important}.highlight code .bp,.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .bp, body.api .highlight .bp, #notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#268bd2!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#2aa198!important}" + }, + { + "name": "Tomorrow-Night-Blue", + "label": "Tomorrow Night Blue", + "value": "/*! Jupyter: Tomorrow Night Blue */#notebook div.output_stderr{background:#002451!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#002451!important;color:#fff!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#003f8e!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#ff9da4!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#7285b7!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#fff!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#ebbbff!important}.highlight code .l,.highlight code .m,#notebook .highlight .l, body.api .highlight .l, #notebook .highlight .m, body.api .highlight .m {color:#ffc58f!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#fff!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#9ff!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#fff!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#d1f1a9!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#fff!important}.highlight code .c1,.highlight code .cm,.highlight code .cp,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cm, body.api .highlight .cm, #notebook .highlight .cp, body.api .highlight .cp, #notebook .highlight .cs, body.api .highlight .cs {color:#7285b7!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#ff9da4!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#d1f1a9!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#7285b7!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#9ff!important;font-weight:700!important}.highlight code .kc,.highlight code .kd,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd {color:#ebbbff!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#9ff!important}.highlight code .kp,.highlight code .kr,#notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#ebbbff!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#ffeead!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#d1f1a9!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#bbdaff!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#fff!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#ffeead!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#ff9da4!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#9ff!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#fff!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#ff9da4!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#bbdaff!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#fff!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#ffeead!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#bbdaff!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#fff!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#9ff!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#ff9da4!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#9ff!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#ffc58f!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#d1f1a9!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#fff!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#7285b7!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#d1f1a9!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#ffc58f!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#d1f1a9!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#ffc58f!important}.highlight code .s1,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#d1f1a9!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#fff!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#ff9da4!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#ffc58f!important}" + }, + { + "name": "Tomorrow-Night-Bright", + "label": "Tomorrow Night Bright", + "value": "/*! Jupyter: Tomorrow Night Bright */#notebook div.output_stderr{background:#d54e53!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#000!important;color:#eaeaea!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#424242!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#d54e53!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#969896!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#eaeaea!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#c397d8!important}.highlight code .l,.highlight code .m,#notebook .highlight .l, body.api .highlight .l, #notebook .highlight .m, body.api .highlight .m {color:#e78c45!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#eaeaea!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#70c0b1!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#eaeaea!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#b9ca4a!important}.highlight code .c1,.highlight code .cm,.highlight code .cp,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cm, body.api .highlight .cm, #notebook .highlight .cp, body.api .highlight .cp, #notebook .highlight .cs, body.api .highlight .cs {color:#969896!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#d54e53!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#eaeaea!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#b9ca4a!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#969896!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#70c0b1!important;font-weight:700!important}.highlight code .kc,.highlight code .kd,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd {color:#c397d8!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#70c0b1!important}.highlight code .kp,.highlight code .kr,#notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#c397d8!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#e7c547!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#b9ca4a!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#7aa6da!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#eaeaea!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#e7c547!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#d54e53!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#70c0b1!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#eaeaea!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#d54e53!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#7aa6da!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#eaeaea!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#e7c547!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#7aa6da!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#eaeaea!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#70c0b1!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#d54e53!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#70c0b1!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#eaeaea!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#e78c45!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#b9ca4a!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#eaeaea!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#969896!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#b9ca4a!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#e78c45!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#b9ca4a!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#e78c45!important}.highlight code .s1,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#b9ca4a!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#eaeaea!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#d54e53!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#e78c45!important}" + }, + { + "name": "Tomorrow-Night-Eighties", + "label": "Tomorrow Night Eighties", + "value": "/*! Jupyter: Tomorrow Night Eighties */#notebook div.output_stderr{background:#f2777a!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#2d2d2d!important;color:#ccc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#515151!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#f2777a!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#999!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#ccc!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#c9c!important}.highlight code .l,.highlight code .m,#notebook .highlight .l, body.api .highlight .l, #notebook .highlight .m, body.api .highlight .m {color:#f99157!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#ccc!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#6cc!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#ccc!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#9c9!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#ccc!important}.highlight code .c1,.highlight code .cm,.highlight code .cp,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cm, body.api .highlight .cm, #notebook .highlight .cp, body.api .highlight .cp, #notebook .highlight .cs, body.api .highlight .cs {color:#999!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#f2777a!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#ccc!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#9c9!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#999!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#6cc!important;font-weight:700!important}.highlight code .kc,.highlight code .kd,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd {color:#c9c!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#6cc!important}.highlight code .kp,.highlight code .kr,#notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#c9c!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#fc6!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#9c9!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#69c!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#ccc!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#fc6!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#f2777a!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#6cc!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#ccc!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#f2777a!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#69c!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#ccc!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#fc6!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#69c!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#ccc!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#6cc!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#f2777a!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#6cc!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#f99157!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#9c9!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#ccc!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#999!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#9c9!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#f99157!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#9c9!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#f99157!important}.highlight code .s1,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#9c9!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#ccc!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#f2777a!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#f99157!important}" + }, + { + "name": "Tomorrow-Night", + "label": "Tomorrow Night", + "value": "/*! Jupyter: Tomorrow Night */#notebook div.output_stderr{background:#c66!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#1d1f21!important;color:#c5c8c6!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#373b41!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#c66!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#969896!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#c5c8c6!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#b294bb!important}.highlight code .l,.highlight code .m,#notebook .highlight .l, body.api .highlight .l, #notebook .highlight .m, body.api .highlight .m {color:#de935f!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#c5c8c6!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#8abeb7!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#c5c8c6!important}.highlight code .c1,.highlight code .cm,.highlight code .cp,.highlight code .cs,#notebook .highlight .c1, body.api .highlight .c1, #notebook .highlight .cm, body.api .highlight .cm, #notebook .highlight .cp, body.api .highlight .cp, #notebook .highlight .cs, body.api .highlight .cs {color:#969896!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#c66!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#c5c8c6!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#b5bd68!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#969896!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#8abeb7!important;font-weight:700!important}.highlight code .kc,.highlight code .kd,#notebook .highlight .kc, body.api .highlight .kc, #notebook .highlight .kd, body.api .highlight .kd {color:#b294bb!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#8abeb7!important}.highlight code .kp,.highlight code .kr,#notebook .highlight .kp, body.api .highlight .kp, #notebook .highlight .kr, body.api .highlight .kr {color:#b294bb!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#f0c674!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#b5bd68!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#81a2be!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#c5c8c6!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#f0c674!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#c66!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#8abeb7!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#c5c8c6!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#c66!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#81a2be!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#c5c8c6!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#f0c674!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#81a2be!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#c5c8c6!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#8abeb7!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#c66!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#8abeb7!important}.highlight code .mf,.highlight code .mh,.highlight code .mi,.highlight code .mo,#notebook .highlight .mf, body.api .highlight .mf, #notebook .highlight .mh, body.api .highlight .mh, #notebook .highlight .mi, body.api .highlight .mi, #notebook .highlight .mo, body.api .highlight .mo {color:#de935f!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#b5bd68!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#c5c8c6!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#969896!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#b5bd68!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#de935f!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#b5bd68!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#de935f!important}.highlight code .s2,.highlight code .sr,.highlight code .ss,.highlight code .sx,#notebook .highlight .s1, body.api .highlight .s1, #notebook .highlight .sr, body.api .highlight .sr, #notebook .highlight .ss, body.api .highlight .ss, #notebook .highlight .sx, body.api .highlight .sx {color:#b5bd68!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#c5c8c6!important}.highlight code .vc,.highlight code .vg,.highlight code .vi,#notebook .highlight .vc, body.api .highlight .vc, #notebook .highlight .vg, body.api .highlight .vg, #notebook .highlight .vi, body.api .highlight .vi {color:#c66!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#de935f!important}" + } + ] + }, + "tab-size": { + "type": "select", + "label": "Code Tab size", + "name": "tab-size", + "value": null, + "default": "2", + "options": [ + { + "name": "2", + "label": "2", + "value": "pre, .highlight, .diff-table, .tab-size {\n tab-size: 2 !important;\n -moz-tab-size: 2 !important;\n }" + }, + { + "name": "4", + "label": "4", + "value": "pre, .highlight, .diff-table, .tab-size {\n tab-size: 4 !important;\n -moz-tab-size: 4 !important;\n }" + }, + { + "name": "8", + "label": "8", + "value": "pre, .highlight, .diff-table, .tab-size {\n tab-size: 8 !important;\n -moz-tab-size: 8 !important;\n }" + } + ] + } + }, + "preprocessor": "uso" + }, + "author": "StylishThemes", + "name": "GitHub Dark", + "originalDigest": "cbfcfa783e5b19e53ea9733b34cfd62f938ec589", + "id": 24, + "updateDate": 1616852194152, + "_id": "d0b3d033-8bd1-44e1-9b21-9e936e44c4e7", + "_rev": 1616852194284, + "etag": "W/\"605e64d1-16473c\"" + }, + { + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1548344858060, + "name": "Fixes", + "sections": [ + { + "code": "#wrapper-shadow {\n width: 90%;\n}\n#wrapper-content {\n width: 100%;\n}\n.column-wide {\n width: 800px;\n}", + "domains": [ + "spiegel.de" + ] + } + ], + "id": 25, + "_id": "863489d7-72f9-40f2-a3aa-0b7b203e7789", + "_rev": 1580730543289 + }, + { + "updateUrl": "https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/usercss/167450.user.css", + "url": "https://33kk.github.io/uso-archive/?style=167450", + "installDate": 1565033218134, + "sections": [ + { + "code": "#like-bar.ytd-sentiment-bar-renderer { background: #009900!important; } /* Like bar */\n#container.ytd-sentiment-bar-renderer { background: #ff2929!important; } /* Dislike bar */\nytd-menu-renderer ytd-toggle-button-renderer.style-default-active[is-icon-button]:nth-of-type(1) { color: #009900; } /* Liked button */\nytd-menu-renderer ytd-toggle-button-renderer.style-default-active[is-icon-button]:nth-of-type(2) { color: #ff2929; } /* Disliked button */", + "start": 473, + "domains": [ + "www.youtube.com", + "youtube.com" + ] + } + ], + "name": "Colourful YouTube Ratings", + "originalDigest": "f2d43c8b4dc5591f96857f03169898e83fe29455", + "id": 26, + "_id": "45a90ce2-624b-40d2-9534-1ccabd967413", + "_rev": 1615723396510, + "etag": "W/\"6e48bd661699d5cb4a310ab2832f8f0a765c3d87ce92a0405e11989f3f1d142d\"", + "sourceCode": "/* ==UserStyle==\n@name Colourful YouTube Ratings\n@namespace USO Archive\n@author InvoxiPlayGames\n@description `Gives colour to the YouTube rating bar and like/dislike buttons.`\n@version 20190104.9.5\n@license NO-REDISTRIBUTION\n@preprocessor uso\n@advanced color likecolour \"Like Colour\" #009900\n@advanced color dislikecolour \"Dislike Colour\" #FF2929\n\n==/UserStyle== */\n@-moz-document domain(\"www.youtube.com\"), domain(\"youtube.com\") {\n#like-bar.ytd-sentiment-bar-renderer { background: /*[[likecolour]]*/!important; } /* Like bar */\n#container.ytd-sentiment-bar-renderer { background: /*[[dislikecolour]]*/!important; } /* Dislike bar */\nytd-menu-renderer ytd-toggle-button-renderer.style-default-active[is-icon-button]:nth-of-type(1) { color: /*[[likecolour]]*/; } /* Liked button */\nytd-menu-renderer ytd-toggle-button-renderer.style-default-active[is-icon-button]:nth-of-type(2) { color: /*[[dislikecolour]]*/; } /* Disliked button */\n}", + "usercssData": { + "name": "Colourful YouTube Ratings", + "namespace": "USO Archive", + "author": "InvoxiPlayGames", + "description": "Gives colour to the YouTube rating bar and like/dislike buttons.", + "version": "20190104.9.5", + "license": "NO-REDISTRIBUTION", + "preprocessor": "uso", + "vars": { + "likecolour": { + "type": "color", + "label": "Like Colour", + "name": "likecolour", + "value": "#009900", + "default": "rgb(0, 153, 0)", + "options": null + }, + "dislikecolour": { + "type": "color", + "label": "Dislike Colour", + "name": "dislikecolour", + "value": "#FF2929", + "default": "rgb(255, 41, 41)", + "options": null + } + } + }, + "author": "InvoxiPlayGames", + "description": "Gives colour to the YouTube rating bar and like/dislike buttons.", + "updateDate": 1615723396509 + }, + { + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1595356944329, + "name": "YouTube Like/Dislike Bar Colored", + "sections": [ + { + "code": "#like-bar {\n background: #009900 !important;\n}\n\n#container.ytd-sentiment-bar-renderer {\n background: #FF2929;\n}" + } + ], + "updateDate": 1595356981175, + "_id": "093c85f0-f960-453a-a37a-c4a12bd01092", + "_rev": 1595356981175, + "id": 30 + }, + { + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1596207515029, + "name": "gelbooru.com no blur", + "sections": [ + { + "code": "#image {\n filter: none !important;\n}", + "domains": [ + "gelbooru.com" + ] + } + ], + "updateDate": 1596207552735, + "_id": "f8e0ed65-ee16-413e-97b9-61cab6e544cf", + "_rev": 1596207552735, + "id": 31 + }, + { + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1596382549154, + "name": "Show hidden comment on Sankaku", + "sections": [ + { + "code": ".comment .comment-body.hidden > * {\n display: block;\n}\n\n.cq-plachld {\n display: none !important;\n}", + "domains": [ + "www.sankakucomplex.com" + ] + } + ], + "updateDate": 1596382549154, + "_id": "5260fcda-6762-4a54-8901-33ff79714477", + "_rev": 1596382549154, + "id": 32 + }, + { + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1602853551346, + "name": "MyAnimeList Tweaks", + "sections": [ + { + "code": ".user-favorites-outer.js-truncate-outer {\n max-height: 730px; padding-bottom: 60px;\n}\n\n.btn-truncate.js-btn-truncate {\n display: none !important;\n}\n\n.btn-profile-submit.fl-r {\n display: none !important;\n}\n\n.user-profile .user-button .btn-profile-submit {\n width: 220px;\n font-size: 20px;\n}\n\n.stats.manga {\n display: none !important;\n}\n\n.updates.manga {\n display: none !important;\n}\n\n.user-comments {\n display: none !important;\n}\n", + "domains": [ + "myanimelist.net" + ] + } + ], + "updateDate": 1603551750976, + "_id": "1c9a4d6a-ff2e-409c-804b-16cc4ba51f2e", + "_rev": 1603551750976, + "id": 33 + }, + { + "enabled": true, + "updateUrl": "https://greasyfork.org/scripts/424062-plex-custom-background/code/Plex%20Custom%20Background.user.css", + "url": "https://greasyfork.org/scripts/424062", + "installDate": 1616864371369, + "sections": [ + { + "code": ":root {\n --bg-custom: url(https://img.ponywave.de/images/2020/11/01/Shimakaze-Wallpaper.jpg);\n --opacity: 0.2;\n}\nbody {\n background-color: #000000de;\n }\n\n #plex > div[class|=\"FullPageBackground\"] {\n opacity: var(--opacity);\n transition: opacity .5s;\n }\n\n #plex > div[class|=\"FullPageBackground\"] div[class|=\"CrossFadeImage\"] {\n background-image: var(--bg-custom) !important;\n background-size: cover !important;\n background-repeat: no-repeat;\n }", + "start": 477, + "domains": [ + "app.plex.tv" + ] + } + ], + "sourceCode": "/* ==UserStyle==\n@name Plex Custom Background\n@namespace github.com/Brawl345\n@version 1.0.0\n@description Custom background image for Plex Web\n@author Brawl (https://github.com/Brawl345)\n@license Unlicense\n@preprocessor default\n\n@var text bg-custom \"Background URL (include it with apostrophes inside url()):\" \"url()\"\n@var range opacity \"Opacity (default 0.2);\" [0.2, 0, 1, 0.01]\n==/UserStyle== */\n@-moz-document domain(\"app.plex.tv\") {\n body {\n background-color: #000000de;\n }\n\n #plex > div[class|=\"FullPageBackground\"] {\n opacity: var(--opacity);\n transition: opacity .5s;\n }\n\n #plex > div[class|=\"FullPageBackground\"] div[class|=\"CrossFadeImage\"] {\n background-image: var(--bg-custom) !important;\n background-size: cover !important;\n background-repeat: no-repeat;\n }\n}", + "usercssData": { + "name": "Plex Custom Background", + "namespace": "github.com/Brawl345", + "version": "1.0.0", + "description": "Custom background image for Plex Web", + "author": "Brawl (https://github.com/Brawl345)", + "license": "Unlicense", + "preprocessor": "default", + "vars": { + "bg-custom": { + "type": "text", + "label": "Background URL (include it with apostrophes inside url()):", + "name": "bg-custom", + "value": "url(https://img.ponywave.de/images/2020/11/01/Shimakaze-Wallpaper.jpg)", + "default": "url()", + "options": null + }, + "opacity": { + "type": "range", + "label": "Opacity (default 0.2);", + "name": "opacity", + "value": 0.2, + "default": 0.2, + "options": null, + "min": 0, + "max": 1, + "step": 0.01, + "units": null + } + } + }, + "author": "Brawl (https://github.com/Brawl345)", + "description": "Custom background image for Plex Web", + "name": "Plex Custom Background", + "installationUrl": "https://greasyfork.org/scripts/424062", + "originalDigest": "270b5fc46930fd059bca0b0c2c84bd7b447be070", + "_id": "46f2b4d3-f874-43ae-9609-ae7b0f550557", + "_rev": 1616864411499, + "id": 34, + "etag": "W/\"7f80eb82ed407497330ff576aefd9719\"" + } +] \ No newline at end of file diff --git a/Stylus/stylus-2022-04-15.json b/Stylus/stylus-2022-04-15.json new file mode 100644 index 0000000..fd8c423 --- /dev/null +++ b/Stylus/stylus-2022-04-15.json @@ -0,0 +1,1484 @@ +[ + { + "settings": { + "openEditInWindow": false, + "openEditInWindow.popup": false, + "windowPosition": { + "height": 568, + "left": 234, + "top": 97, + "width": 968 + }, + "show-badge": true, + "disableAll": false, + "exposeIframes": false, + "newStyleAsUsercss": false, + "styleViaXhr": false, + "patchCsp": false, + "config.autosave": true, + "popup.breadcrumbs": true, + "popup.breadcrumbs.usePath": false, + "popup.enabledFirst": true, + "popup.stylesFirst": true, + "popup.autoResort": false, + "popup.borders": false, + "popup.findStylesInline": true, + "popup.findSort": "u", + "manage.onlyEnabled": false, + "manage.onlyLocal": false, + "manage.onlyUsercss": false, + "manage.onlyEnabled.invert": false, + "manage.onlyLocal.invert": false, + "manage.onlyUsercss.invert": false, + "manage.actions.expanded": true, + "manage.backup.expanded": true, + "manage.filters.expanded": true, + "manage.newUI": false, + "manage.newUI.favicons": false, + "manage.newUI.faviconsGray": true, + "manage.newUI.targets": 3, + "manage.newUI.sort": "title,asc", + "editor.options": {}, + "editor.toc.expanded": true, + "editor.options.expanded": true, + "editor.lint.expanded": true, + "editor.publish.expanded": true, + "editor.lineWrapping": true, + "editor.smartIndent": true, + "editor.indentWithTabs": false, + "editor.tabSize": 4, + "editor.keyMap": "sublime", + "editor.theme": "default", + "editor.beautify": { + "end_with_newline": false, + "newline_after_open_brace": true, + "newline_before_close_brace": true, + "newline_before_open_brace": false, + "newline_between_properties": true, + "newline_between_rules": false, + "selector_separator_newline": true, + "space_around_selector_separator": true + }, + "editor.beautify.hotkey": "", + "editor.lintDelay": 300, + "editor.linter": "csslint", + "editor.lintReportDelay": 500, + "editor.matchHighlight": "token", + "editor.autoCloseBrackets": false, + "editor.autocompleteOnTyping": false, + "editor.contextDelete": true, + "editor.selectByTokens": true, + "editor.appliesToLineWidget": true, + "editor.livePreview": true, + "editor.colorpicker": true, + "editor.colorpicker.hexUppercase": false, + "editor.colorpicker.hotkey": "", + "editor.colorpicker.color": "#000000d4", + "editor.colorpicker.maxHeight": 300, + "hotkey._execute_browser_action": "", + "hotkey.openManage": "", + "hotkey.styleDisableAll": "", + "sync.enabled": "none", + "iconset": 0, + "badgeDisabled": "#8B0000", + "badgeNormal": "#006666", + "popupWidth": 246, + "updateInterval": 24 + } + }, + { + "sections": [ + { + "code": "#header {\n background: none repeat scroll 0% 0% #242424;\n border-bottom: 1px solid #050505;\n}\n \n #header .logo a {\n border-bottom: 2px solid #242424;\n}\n \n #session a, #session input, #session button {\n background: none repeat scroll 0% 0% rgba(0,0,0,0);\n }\n \n #session h2 img {\n border: 1px solid #050505;\n}\n \n body.nofooter {\n border-bottom: 1px solid #050505;\n}\n \n body {\n background: none repeat scroll 0% 0% #161616;\n}\n\n #char-count {\n border: 0px none !important;\n background: none repeat scroll 0% 0% #242424 !important; \n }\n \n html {\n background: none repeat scroll 0% 0% #101010; \n }\n\n .footer {\n background: #161616 none repeat scroll 0% 0%;\n border-top: 1px solid #050505;\n}\n\n .subject h2 a {\n color: #CCCCCC;\n }\n \n .subject .note {\n color: #CCCCCC;\n }\n \n a.tweet-screen-name {\n color: #CCCCCC;\n}\n\n\n .js #session .user-menu {\n background: none repeat scroll 0% 0% #161616;\n }\n \n .user-menu .break-before {\n border-top: 1px solid #050505;\n} \n \n input.textual, button.textual {\n border: 0px none !important;\n}\n\n .button:hover {\n color: #aaa;\n background-color: #050505;\n background-image: linear-gradient(#1a1a1a, #242424);\n border-color: #050505;\n}\n\n .button {\n color: #aaa !important;\n background-color: #050505;\n background-image: linear-gradient(#242424, #1a1a1a);\n border: 1px solid #050505;\n}\n\n .facepile li img {\n border: 1px solid #050505;\n}\n \n .tweet-image img {\n border: 1px solid #050505;\n}", + "urls": [], + "urlPrefixes": [ + "https://twitter.com/intent" + ], + "domains": [], + "regexps": [] + }, + { + "code": "/* TweetDeck */\n \n .column-header, .column-header-temp {\n color: #BBB !important;\n background-color: #242424 !important;\n border-bottom: 1px solid #060606 !important;\n}\n \n .with-column-divider-bottom {\n border-bottom: 0px solid #060606 !important;\n}\n \n .column {\n background-color: #161616 !important;\n}\n \n .app-content {\n background-color: #161616 !important;\n}\n \n .dropdown-menu [data-action] {\n color: #BBB !important;\n}\n \n .compose {\n background-color: #161616 !important;\n color: #BBB !important;\n}\n \n .app-header {\n background-color: #242424 !important;\n}\n \n.app-navigator {\n background-color: #242424 !important;\n}\n \n .column-nav-item {\n background-color: #242424 !important;\n}\n \n .list-item:hover, .list-item:active, .list-item.is-selected {\n background-color: #1B1B1B !important;\n color: #BBB !important;\n}\n \n .popover {\n background-color: #1B1B1B !important;\n}\n \n .list-item {\n color: #BBB !important;\n}\n \n .list-item-button {\n color: #BBB !important;\n background-color: #060606 !important;\n}\n \n.column-background-fill {\n background-color: #060606 !important;\n}\n\n.app-title {\n background-color: #242424;\n}\n \n .column-options .button-tray {\n background-color: #191919 !important;\n}\n.accordion-divider-t {\n border-top: 1px solid #060606 !important;\n}\n\n.column-options {\n background-color: #1B1B1B !important;\n}\n\n.facet-type {\n border-bottom: 1px solid #060606 !important;\n}\n\n.tweet-btn, .tweet-btn:active, .tweet-btn.active {\n background-color: #09181D !important;\n}\n\n.is-options-open .column-settings-link {\n background-color: #1B1B1B !important;\n border-color: #060606 #060606 -moz-use-text-color;\n}\n\n.mdl {\n background-color: #1B1B1B !important;\n}\n\n.mdl-content {\n border: 1px solid #060606 !important;\n background: none repeat scroll 0% 0% padding-box #161616!important;\n}\n\n.mdl-col-settings {\n background-color: #161616 !important;\n}\n\n.QuoteTweet {\n border: 1px solid #666 !important;\n}\n\n.QuoteTweet .tweet-content, .QuoteTweet-text a, .QuoteTweet-text a:hover, .QuoteTweet-text a:focus, .QuoteTweet-text a:active, .QuoteTweet-text .pretty-link b, .QuoteTweet-text .pretty-link b:hover, .QuoteTweet-text .pretty-link b:focus, .QuoteTweet-text .pretty-link b:active, .QuoteTweet-text .pretty-link s {\n color: #BBB !important;\n}\n\n.tweet {\n border-bottom: 0px solid #060606 !important;\n}\n\n.character-count-compose:disabled {\n background-color: transparent !important;\n}", + "urls": [], + "urlPrefixes": [ + "https://tweetdeck.twitter.com/", + "http://tweetdeck.twitter.com/" + ], + "domains": [], + "regexps": [] + }, + { + "code": "/* here you can change the loading thumb, the first one is of the nav bar, the second is of the footer */\n\n.pushstate-spinner {\n background-image: url(\"http://i570.photobucket.com/albums/ss143/stbinan/1665_zpsjgoesfr2.png\") !important;\n margin-bottom: 5px;\n }\n\n .spinner {\n background: url(\"http://i570.photobucket.com/albums/ss143/stbinan/379_zpsbepu58zc.png\") no-repeat !important;\n margin-top: 6px;\n}\n\n .tweet-form .spinner {\n background-image: url(\"http://i570.photobucket.com/albums/ss143/stbinan/329_zpslswkgcny.png\") !important;\n }\n\n .PermalinkOverlay-spinner {\n background: transparent no-repeat scroll 0px center;\n }\n\n .wtf-module.has-content {\n display: block;\n} \n \n .WhoToFollow.is-visible {\n display: block;\n}\n\n.DashboardProfileCard {\n border: 1px solid #060606 !important;\n background: none repeat scroll 0% 0% #161616 !important;\n border-radius: 6px;\n}\n\n .Trends {\n background-color: #161616 !important;\n}\n\n.module .flex-module, .dashboard .stats {\n background-color: #161616 !important;\n}\n\n.tweet:hover {\n background-color: #1B1B1B !important;\n}\n\n.simple-tweet:hover {\n background-color: #1B1B1B !important;\n}\n\nbody {\n color: #CCCCCC !important;\n background-color: #101010 !important;\n}\n\n .permalink-tweet {\n background-color: #161616 !important;\n}\n\n.GalleryTweet--new .simple-tweet {\n background-color: #060606 !important;\n}\n\n .GalleryTweet--new .simple-tweet:hover {\n background-color: #050505 !important;\n}\n\n.content-main .expansion-container .tweet.ancestor, .content-main .expansion-container .tweet.descendant, .content-main .expansion-container .view-more-container, .content-main .expansion-container .inline-reply-tweetbox {\n background: none repeat scroll 0% 0% #1B1B1B;\n}\n\n.new-tweets-bar {\n\tbackground-color: #161616 !important;\n\tborder-top: 1px solid #000 !important;\n\tborder-bottom: 1px solid #000 !important;\n}\n\n.new-tweets-bar:hover {\n\tbackground-color: #1B1B1B !important;\n}\n\n\n.content-header .header-inner, .content-no-header .no-header-inner {\n\tbackground-color: #161616 !important;\n\tborder-bottom: 1px solid #000!important;\n}\n\n\n.DMInboxItem-snippet {\n color: #CCCCCC;\n}\n\n.ProfileHeaderCard-locationText, .ProfileHeaderCard-joinDateText, .ProfileHeaderCard-birthdateText {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsLargeImageHeadline-body {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.AdaptiveNewsLargeImageHeadline-image {\n background-color: #161616;\n}\n\n.AdaptiveNewsLargeImageHeadline-title {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsLargeImageHeadline-description {\n color: #CCCCCC;\n}\n\n.TwitterCard-container:hover { \n background-color: #1B1B1B;\n}\n\n.TwitterCard .SummaryCard-image {\n background-color: #161616;\n}\n\n.global-nav-inner {\n background-color: #242424 !important;\n border-bottom: 1px solid #000 !important;\n}\n\n.permalink-tweet:hover, .permalink-tweet.focus, .stream-item.open .original-tweet:hover, .stream-item.open .original-tweet.focus {\n background-color: #1B1B1B !important;\n}\n\n.module .list-link {\n\tbackground-color: #161616;\n\tborder-top: 1px solid #000;\n\t-webkit-box-shadow: none!important;\n\tbox-shadow: none!important;\n}\n\n.module .list-link:hover, .module .active .list-link {\n background-color: #1B1B1B;\n}\n\n.module .list-link:hover {\n background-color: #1B1B1B;\n}\n\n.follow-card .follow-bar {\n background-color: #161616;\n background-image: none !important;\n border-top: 0px solid rgb(6, 6, 6)!important;\n box-shadow: 0px 1px 0px rgb(6,6,6) inset !important;\n}\n\n.follow-card {\n background-color: #161616;\n}\n\n#global-tweet-dialog .modal-tweet-form-container {\n background-color: #242424 !important;\n border-radius: 6px;\n}\n\n.AdaptiveNewsTextHeadline-body {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n .AdaptiveNewsTextHeadline-title {\n color: #CCCCCC;\n}\n \n .AdaptiveNewsTextHeadline-description {\n color: #CCCCCC;\n}\n\n .MomentCapsuleList-featured .MomentCapsuleSummary {\n border-top: 1px solid #050505;\n}\n \n .MomentCapsuleSummary {\n background: none repeat scroll 0% 0% #161616;\n border: 1px solid #050505;\n }\n\n .MomentCapsuleList-list .MomentCapsuleSummary:first-child {\n border-top: 1px solid #050505;\n }\n\n .MomentCapsuleList-title {\n background-color: #161616;\n border-left: 1px solid #050505;\n border-right: 1px solid #050505;\n border-top: 1px solid #050505;\n }\n \n.EmojiBar-keyboardEntry {\n background-color: rgba(0,0,0,0);\n}\n\n .EmojiBar-suggestions {\n background-color: rgba(0,0,0,0);\n }\n\n .DMPopover-content.Caret:after {\n border-color: #333;\n}\n\n.inline-reply-tweetbox {\n background-color: #242424 !important;\n}\n\n.inline-reply-tweetbox, .content-main .conversations-enabled .expansion-container .inline-reply-tweetbox, .content-main .expansion-container .inline-reply-tweetbox {\n\tbackground-color: #242424;\n \tborder-top: none!important;\n}\n\n.ProfileSidebar .TweetImpressionsModule, .ProfileSidebar .ProfileLifelineInfo, .ProfileSidebar .RelatedUsers {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.DirectMessage-tweet .QuoteTweet {\n background-color: #161616;\n}\n\n\n\n\n\n.tweet {\n border-bottom: 1px solid #060606;\n}\n\n.opened-tweet .content .cards-media-container, .opened-tweet .content .expanded-content {\n\tdisplay: inline!important;\n}\n\n.wrapper.white {\n\tbackground: rgba(36,36,36,0.75)!important;\n}\n\n.tweet-counter, .modal-header .modal-title, .dashboard .tweet-box-title h2 {\n\ttext-shadow: none!important;\n}\n\n.module {\n\ttext-shadow: none!important;\n border: 1px solid #000!important;\n}\n \n.tweet-user {\n\tbackground-color: rgb(36,36,36)!important;\n}\n \n.stats {\n\tborder-top: 1px solid #000!important;\n\tborder-bottom: 1px solid #000!important;\n}\n \n.profile-card .stats {\n\tborder-top: 0!important;\n\tborder-bottom: 0!important;\n}\n\n.profile-card.profile-header .profile-picture {\n\tborder: 4px solid #000!important;\n\tbackground-color: #000!important;\n}\n\n.btn, .primary-btn, .following.first-hover .follow-btn:hover, .following .follow-btn, .following .follow-button.cancel-hover-style:hover, .following .follow-button, .email-following .email-follow-button.cancel-hover-style:hover, .email-following .email-follow-button, .email-follow-enabled .email-follow-state-button, .button-group-item .content.selected {\n\tcolor: #777!important;\n\ttext-shadow: none!important;\n\tbackground-color: rgb(25,25,25)!important;\n\tbackground-image: -moz-linear-gradient(rgb(36,36,36),rgb(26,26,26))!important;\n\tbackground-image: linear-gradient(rgb(36,36,36),rgb(26,26,26))!important;\n\tborder-color: #000!important;\n\t-webkit-box-shadow: none!important;\n\tbox-shadow: none!important;\n \toutline: none!important;\n}\n \n.btn:hover, .primary-btn:hover, .following.first-hover .follow-btn:hover, .following .follow-btn:hover, .following .follow-button.cancel-hover-style:hover, .following .follow-button:hover, .email-following .email-follow-button.cancel-hover-style:hover, .email-following .email-follow-button:hover, .email-follow-enabled .email-follow-state-button:hover, .button-group-item .content.selected:hover, .btn:hover, .btn:focus, .photo-selector:not(.disabled):hover .btn {\n\tcolor: #FFF!important;\n\tbackground-color: rgb(45,45,45)!important;\n\tbackground-image: -moz-linear-gradient(rgb(26,26,26),rgb(36,36,36))!important;\n\tbackground-image: linear-gradient(rgb(26,26,26),rgb(36,36,36))!important;\n}\n\n\ninput, textarea, div[contenteditable=\"true\"], select {\n\tbackground-color: rgb(16,16,16)!important;\n \tcolor: #BBB!important;\n\tborder: 1px solid #333;\n}\n\ninput:focus, textarea:focus, div[contenteditable=\"true\"]:focus, div[contenteditable=\"true\"].fake-focus {\n \tbox-shadow: none!important;\n}\n\n.topbar {\n\t-webkit-box-shadow: none!important;\n\tbox-shadow: none!important;\n border-bottom: 1px solid #000!important;\n}\n\n.global-nav {\n border-bottom: 0px !important;\n}\n\n\n.content-header, .content-no-header {\n\tborder: 1px solid #000!important;\n \tborder-bottom: none!important;\n}\n\n.stream-item {\n\tbackground: #161616;\n}\n\n.stream-item-activity-me {\n border-bottom: 1px solid rgb(5,3,7)!important;\n}\n\n.stream-item-activity-me .latest-tweet {\n border-bottom: 0px none!important;\n}\n\n.tweet-actions {\n\tbackground-color: #161616;\n\tbox-shadow: none!important;\n \tpadding: 2px 12px 1px 5px!important;\n}\n\n.vellip, .vellip:before, .vellip:after, .conversation-module > li:after, .conversation-module > li:before {\n\tbackground-color: #999!important;\n}\n\n.modal-close {\n border-left: 0px solid #000;\n border-bottom: none;\n border-radius: 0!important;\n -webkit-box-shadow: none!important;\n box-shadow: none!important;\n}\n \n.modal-close:hover {\n \tborder: 1px solid #000;\n\tbackground: rgb(36,36,36)!important;\n}\n \n.modal-btn {\n outline: none!important;\n}\n\n.module.profile-card.component.profile-header {\n\tborder:0!important;\n}\n\n.dropdown-menu {\n background-color: #161616;\n border-color: #000!important;\n border: 1px solid #000;\n box-shadow: none!important;\n}\n\n.dropdown-caret .caret-inner {\n\tborder-bottom: 6px solid rgb(16,16,16)!important;\n}\n \n.dropdown-caret .caret-outer {\n\tborder-bottom: 7px solid #000!important;\n}\n \n.dropdown-divider {\n\tborder-bottom: 1px solid #000!important;\n}\n\n\n.content-inner {\n background-color: rgb(36,36,36)!important;\n border-left: 1px solid #000!important;\n border-right: 1px solid #000!important;\n \tborder-bottom: 1px solid #000!important;\n}\n\n.conversation-collapse-btn {\n background-color: rgb(16,16,16)!important;\n border: 1px solid #000!important;\n border-left: none!important;\n border-radius: 0!important;\n outline: none!important;\n}\n\n.conversation-collapse-btn:hover {\n background-color: rgb(36,36,36)!important;\n}\n\n.profile-social-proof {\n\tbackground-color: rgb(36,36,36)!important;\n\tborder-top: 1px solid #000!important;\n}\n\n\n.promptbird-below-black-bar, .promptbird-dashboard-narrow, .promptbird-wide-above-timeline {\n border: 1px solid #000!important;\n background-color: rgb(16,16,16)!important;\n}\n\n.content-main .conversations-enabled .expansion-container .inline-reply-tweetbox {\n background-color: rgb(35, 35, 35);\n}\n\n\n\n.modal-close {\n border-left: 1px solid rgb(1, 1, 1)!important;\n}\n\n.module .flex-module {\n border: 0px solid rgb(5, 2, 7)!important;\n}\n\n.dashboard .stats {\n border: 0px solid rgb(5, 2, 7)!important;\n}\n\n.stream-item, .stream-item.open, .unfocusable-stream-item {\n border-color: rgb(5, 2, 7)!important;\n}\n\n.stream-end-item, .stream-end, .stream-loading, .stream-placeholder {\n border-right: 1px solid rgb(5, 2, 7)!important;\n border-left:1px solid rgb(5, 2, 7)!important;\n border-bottom: 1px solid rgb(5, 2, 7)!important;\n}\n\n.message {\n background: none repeat scroll 0% 0% rgba(16, 16, 16, 0.97)!important;\n}\n\n.user-dropdown {\n padding: 0px 5px 0px 5px !important;\n}\n\n.module .list-link, .search-more-options .btn-link {\n border-right: 0px solid rgb(6,6,6)!important;\n border-width: 0px 0px 0px!important;\n border-color: -moz-use-text-color rgb(6,6,6) rgb(6,6,6)!important;\n}\n\n.module li:first-child .list-link {\n border-top: 0px solid rgb(6,6,6)!important;\n}\n\n.search {\n background-color: rgba(36,36,36,0.75)!important;\n text-shadow: none !important;\n}\n\n.media-not-displayed {\n background: none repeat scroll 0% 0% rgb(6,6,6)!important;\n}\n \n.stats a {\n border-left: 0px solid #E8E8E8 !important;\n}\n\n.stream-item .stats .avatar-row a:first-child {\n border-left: 1px solid rgb(5,3,7) !important;\n padding-left: 5px !important;\n} \n\n.tweet .stats .avatar-row a {\n padding: 13px 0px !important;\n}\n\n.content-main .expansion-container > li:last-child:first-child .tweet {\n border-bottom: 0px solid #DDD !important;\n}\n\n.modal-footer {\n text-align: right;\n border-top: 1px solid #FEF6F8;\n border-radius: 0px 0px 7px !important;\n border-left: 1px solid #050307 !important;\n border-right: 1px solid #050307 !important;\n} \n\n .tweet-form .thumbnail-container {\n background-color: #060606 !important;\n} \n\n.content-searchbar {\n background-color: #242424 !important;\n border-bottom: 1px solid #060606 !important;\n}\n \n.content-searchbar .search-query {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 0px 0px #FFF !important;\n} \n \n.stream-item-activity-network .stream-item-activity-header {\n padding: 8px 8px 8px 12px;\n margin: 0px 12px;\n background-color: #060606 !important;\n border-color: #060606 #060606 #060606 !important;\n}\n \n.stream-item-activity-network .supplement, .stream-item-activity-network .follow-more-than-two, .stream-item-activity-network .follow-exactly-two, .stream-item-activity-network .activity-secondary-supplement {\n border-right: 1px solid #060606 !important;\n border-width: 0px 1px 1px !important;\n border-color: -moz-use-text-color #060606 #060606 !important;\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.08) !important;\n} \n \n.stream-item-activity .account, .stream-item-activity .list {\n border-bottom: 0px none !important;\n}\n \n.find-friends-top-subheader, .find-friends-bottom-subheader {\n background-color: #060606 !important;\n} \n \n.find-friends-list li:hover {\n background-color: #060606 !important;\n}\n \n.find-friends-list li {\n border-bottom: 1px solid #060606 !important;\n} \n\n.find-friends-bottom-subheader {\n border-top: 1px solid #060606 !important;\n}\n \n.find-friends-top-subheader, .find-friends-bottom-subheader {\n background-color: #242424 !important;\n} \n \n.find-friends-search form {\n background-color: #242424 !important;\n border-bottom: 1px solid #060606 !important;\n}\n\n.content-main .expansion-container > .original-tweet-container, .content-main .expansion-container > li .tweet, .content-main .expansion-container > li .inline-reply-tweetbox, .content-main .expansion-container > li + li:last-child .tweet.original-tweet, .content-main .stream-items > .stream-item:last-child .expansion-container > li .tweet, .content-main .stream-items > .stream-item:last-child .expansion-container > li .inline-reply-tweetbox, .content-main .stream-items > .stream-item:last-child .expansion-container > li .view-more-container {\n border-bottom: 1px solid #060606;\n}\n\n.tweet-translation {\n border-top: 1px solid #666 !important;\n}\n\n.typeahead .dropdown-inner > .has-results ~ .has-results, .typeahead .dropdown-inner > .has-items ~ .has-items {\n border-top: 1px solid #666 !important;\n}\n\n.cards-base {\n border-color: #060606 !important;\n}\n\n.DashboardProfileCard-avatarLink {\n background: none !important;\n}\n\n.DashboardProfileCard-avatarImage {\n border: 1px solid #060606 !important\n}\n\n.DashboardProfileCard-bg {\n border-bottom: 1px solid #060606 !important;\n}\n\n.DashboardProfileCard-tweetbox {\n border: 1px solid #060606 !important;\n}\n\n.ProfileListItem {\n border-bottom: 1px solid #060606 !important;\n}\n\nbody.user-style-MeetAnimals {\n background-color: #242424;\n}\n\n.top-timeline-tweetbox .timeline-tweet-box {\n border: 1px solid #060606 !important;\n}\n\n\n\n\n \n \n/* New Page style */\n \n\n.ProfileHeaderCard-bio {\n color: #CCCCCC;\n} \n\n.ProfileTweet-text {\n color: #CCCCCC;\n} \n \n.ProfileHeaderCard-locationText, .ProfileHeaderCard-joinDateText {\n color: #CCCCCC;\n} \n\n.StreamToggler {\n border-bottom: 1px solid #060606 !important;\n} \n\n.ProfileTweet-fullname {\n color: #CCCCCC;\n} \n \n.StreamToggler-link.is-active, .StreamToggler-link.is-active:hover .StreamToggler-link.is-active:focus {\n color: #8899A6;\n} \n\n.permalink.has-replies .inline-reply-tweetbox, .permalink.stream-uncapped .replies-to li:last-child .tweet {\n border-bottom: 1px solid #060606;\n} \n \n.u-borderUserColorLight, .u-borderUserColorLightFocus:focus, .u-borderUserColorLightHover:hover, .u-borderUserColorLightHover:focus {\n border-color: #060606 !important;\n} \n\n.ProfileNav-item.is-active .ProfileNav-value, .ProfileNav-item.is-active:hover .ProfileNav-value {\n color: #CCCCCC;\n}\n \n\n.ProfileClusterFollow {\n border-top: 1px solid #060606 !important;\n border-bottom: 1px solid #060606 !important;\n background-color: rgba(36,36,36,0.0) !important;\n}\n\n.ProfileCard-userFields {\n color: #CCCCCC;\n}\n\n.GridTimeline-footer:before {\n background: none repeat scroll 0% 0% #060606 !important;\n}\n\n.GridTimeline-footerIcon {\n background-color: rgba(0,0,0,0) !important;\n}\n\n.TwitterPhoto-media {\n background-color: #060606 !important;\n border: 0px solid #060606 !important;\n}\n\n.ProfileListItem {\n border-top: 0px solid #E1E8ED !important;\n}\n\n.stream-item-header .avatar, .permalink-header .avatar {\n margin-left: -58px ;\n}\n\n.conversation-module .conversation-tweet-item .stream-item-header .avatar {\n margin-left: -58px;\n}\n\n.wtf-module .import-prompt .cta {\n border-bottom: 1px solid #060606 !important;\n}\n\n.style-element-7 {\n color: #CCCCCC;\n}\n\n.style-element-71 {\n background: linear-gradient(0rad, #111, #222) repeat scroll 0% 0% transparent !important;\n border-color: #666 !important;\n}\n\n.style-element-85 {\n color: #CCCCCC;\n}\n \n\n.dm-to {\n background-color: #060606 !important;\n border-bottom: 1px solid #060606 !important;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset !important;\n} \n\n.dm-thread:hover {\n background-color: rgb(6,6,6)!important;\n background-image: none !important;\n}\n\n.dm-thread {\n background-color: rgb(16,16,16)!important;\n border-bottom: 1px solid rgb(5,3,7)!important;\n}\n\n.dm-dialog .twttr-dialog-footer {\n text-shadow: 0px 0px 0px #FFF !important;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset !important;\n}\n \n.twttr-dialog-footer {\n background-color: rgb(6,6,6)!important;\n border-top: 0px solid!important;\n} \n\n.tweet .stats {\n padding-left: 1px !important;\n}\n\n.dm-dialog .twttr-dialog-header {\n border-bottom: 0px solid #050307 !important;\n}\n\n.dm-dialog .twttr-dialog-body { \n border-left: 1px solid #050307 !important;\n border-right: 1px solid #050307 !important;\n border-radius: 6px !important;\n } \n\n .dm-convo {\n background-color: #101010 !important;\n}\n \n.dm-message {\n\n background-color: #060606 !important;\n border: 1px solid #555 !important;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.4) inset, 0px 0px 0px rgba(0, 0, 0, 0.05) !important;\n} \n \n.dm-caret-outer {\n border-right: 5px solid #555 !important;\n}\n\n\n.dm-caret-inner {\n border-right: 4px solid #555 !important;\n}\n\n .t1-label {\n background-color: #161616;\n}\n .t1-legend {\n color: #CCCCCC;\n}\n \n.list-editor .options label b {\n color: #CCCCCC;\n}\n\n.dm-participant-container {\n border-top: 0px solid #060606 !important;\n} \n \n .dm-participant-container .typeahead-item {\n border-bottom: 1px solid #777 !important;\n}\n \n .user-select-controls input {\n border: 0px none !important;\n} \n \n.ep-AggregateMetric {\n color: #8899A6;\n}\n \n .DirectMessage--received .DirectMessage-text {\n color: #CCCCCC !important;\n} \n .TwitterCard {\n color: #CCCCCC;\n}\n\n\n\n .icon-btn {\n background: none repeat scroll 0% 0% transparent !important;\n border: 1px solid transparent !important;\n}\n\n.ProfilePopupContainer--bellbird .ProfileHeader .profile-header-inner {\n border-bottom: 1px solid #060606 !important;\n}\n\n.recent-tweets .tweet {\n border-top: 1px solid #060606 !important;\n}\n\n.SiderailRelatedTweets {\n background-color: #060606 !important;\n}\n\n.SiderailRelatedTweets-header {\n border-bottom: 1px solid #060606 !important;\n}\n\n.SiderailRelatedTweets-viewMore {\n border-top: 1px solid #060606 !important;\n}\n\n.SiderailRelatedTweet-authorFullName {\n color: #CCCCCC;\n}\n\n.AdaptiveSearchPage {\n background-color: #101010 !important;\n}\n\n.AdaptiveFiltersBar {\n border-bottom: 0px solid #E1E8ED ;\n\n}\n\n.stream-item-activity-notification {\n border-bottom: 1px solid #060606 !important;\n}\n\n .simple-tweet:hover, .recent-tweets .tweet:hover, .stream-item-activity .tweet:hover, .twttr-dialog-reply-footer:hover {\n background-color: transparent !important;\n}\n\n .ThreadedConversation, .ThreadedConversation-showMore, .ThreadedConversation-showMore:after, .ThreadedConversation + .ThreadedConversation--loneTweet, :not(.ThreadedConversation--ownReply) + .ThreadedConversation--ownReply, .ThreadedConversation--ownReply + .ThreadedConversation--loneTweet:not(.ThreadedConversation--ownReply), .ThreadedConversation--loneTweet:first-child {\n border-top: 0px solid #E1E8ED;\n}\n\n .ThreadedConversation, .ThreadedConversation--loneTweet {\n background-color: #060606;\n}\n\n.tweet-form .thumbnail-container {\n box-shadow: 0px 1px 0px #666 inset;\n}\n\n.TwitterCard-container {\n border-color: #666;\n}\n\n.QuoteTweet-fullname {\n color: #CCCCCC;\n}\n\n.ThreadedConversation, .ThreadedConversation-showMore:after, .ThreadedConversation-viewOther .view-other-link {\n border-bottom: 1px solid #060606;\n}\n\n.stream-item.separated-module.before-expanded .original-tweet {\n border-bottom: 1px solid #060606;\n} \n\n.DMTokenizedMultiselectSuggestion {\n border-bottom: 1px solid #050505;\n} \n\n .u-borderUserColorLighter {\n border-color: #050505 !important;\n} \n\n.DMComposer {\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset; \n}\n\n.hovercard.profile-card.profile-header .DashboardProfileCard-stats {\n border-top: 1px solid #050505;\n}\n\n\n.QuoteTweet--unavailable {\n background: none repeat scroll 0% 0% #060606;\n}\n\n.disabled, .disabled:hover, .disabled:focus, .disabled:active, input[disabled], .t1-select[disabled], textarea[disabled], input[readonly], .t1-select[readonly], textarea[readonly], div[contenteditable=\"false\"], div[contenteditable=\"true\"][readonly] {\n background: none repeat scroll 0% 0% #242424;\n border-color: #050505;\n}\n\n\n\n\n\n\n .fullname {\n color: #CCCCCC !important;\n} \n\n .stream-item:not(.no-header-background-module) {\n background: none repeat scroll 0% 0% padding-box #161616 !important;\n}\n\n.ProfileSidebar .ProfileSignupCallOut, .ProfileSidebar .ProfileLifelineInfo, .ProfileSidebar .WhoToFollow, .ProfileSidebar .Trends {\n background-color: #161616 !important;\n border: 1px solid #060606 !important;\n} \n\n.ProfileCanopy-navBar {\n background-color: #161616 !important;\n border-bottom: 1px solid #060606 !important;\n}\n \n.ProfileTweet {\n background-color: #161616 !important;\n border: 1px solid #060606 !important;\n} \n \n \n.ProfileSidebar .Footer {\n background-color: #161616 !important;\n}\n\n.Grid--withInnerPadding > .Grid-cell {\n border-radius: 0px 0px 5px 5px !important;\n background-color: rgba(36,36,36,0.75) !important;\n}\n\n.ProfilePage {\n background-color: #101010 !important;\n}\n\n.ProfileNav-item--userActions {\n background-color: #161616 !important;\n}\n\n.ProfileHeading-content {\n background-color: #161616 !important;\n border: 1px solid #060606 !important;\n}\n\n.ProfileCard {\n background-color: #161616 !important;\n border: 1px solid #060606 !important;\n}\n\n.ProfileCard-bio {\n color: #CCCCCC;\n}\n\n.TwitterPhoto-media {\n background-color: #161616 !important;\n border-top: 1px solid #060606 !important;\n border-bottom: 1px solid #060606 !important;\n}\n\n .DMInboxItem {\n background-color: #161616;\n} \n\n .DMInboxItem.is-unread {\n background-color: #1B1B1B;\n}\n\n.DMInboxItem:hover {\n background-color: #1B1B1B !important;\n} \n\n.DMInbox .DMInboxItem {\n border-bottom: 1px solid #060606 !important;\n} \n\n.DMConversation-scrollContainer {\n background-color: #101010 !important;\n}\n\n.DirectMessage--sent .DirectMessage-message{\n background-color: #161616 !important;\n border-color: #333 !important;\n}\n\n.DirectMessage--received .DirectMessage-message {\n background-color: #161616 !important;\n border-color: #333 !important;\n}\n\n .DirectMessage--sent .DirectMessage-text {\n color: #CCCCCC !important;\n}\n\n .DirectMessage--received .DirectMessage-text {\n color: #CCCCCC !important;\n} \n\n .DMTokenizedMultiselectSuggestion.is-highlighted {\n background-color: #161616;\n}\n\n.stream-end-inner {\n background-color: #161616 !important;\n}\n\n.ThreadedConversation-showMore {\n background: none repeat scroll 0% 0% #161616;\n}\n\n.ThreadedConversation-viewOther {\n background: none repeat scroll 0% 0% #161616;\n}\n\n.DMActivity-header {\n background-color: #161616;\n border-bottom: 1px solid #333; \n}\n\n\n.home-tweet-box, .rosetta .dm-tweetbox, .rosetta .WebNotification-buffer--altColor, .content-main .conversations-enabled .expansion-container .inline-reply-tweetbox {\n background-color: #242424 !important;\n}\n\n.dm-tweetbox {\n border-top: 1px solid #050307 !important;\n background-color: #242424 !important;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset !important;\n}\n\n\n .home-tweet-box, .dm-tweetbox, .RetweetDialog-commentBox, .WebToast-box--altColor, .content-main .conversations-enabled .expansion-container .inline-reply-tweetbox {\n background-color: #242424;\n}\n\n .u-bgUserColorLightest {\n background-color: #242424 !important;\n}\n\n.DMButtonBar {\n background-color: #161616;\n border-top: 1px solid #050505;\n}\n\n.activity-content .account, .modal-footer, hr, #profile_popup .go-to-profile {\n \tbackground: #161616;\n\tborder-top: 1px solid #000!important;\n}\n\n\n.modal-content {\n\tbackground-color: #161616 !important;\n\tborder-radius: 6px !important;\n border-bottom: 1px solid #050307 !important;\n\t-webkit-box-shadow: none!important;\n box-shadow: none!important;\n}\n\n.modal .modal-tweet .tweet {\n background-color: #161616 !important;\n border-bottom: 0px solid #060606 !important;\n border-left: 0px solid #050307;\n border-right: 0px solid #050307;\n}\n \n.modal .modal-tweet .tweet:hover {\n background-color: #161616;\n} \n\n .modal .modal-tweet {\n background-color: #161616 !important;\n}\n\n.AdaptiveNewsSmallImageHeadline-body {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.AdaptiveNewsRelatedHeadlines-title {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsSmallImageHeadline-title:focus, .AdaptiveNewsSmallImageHeadline-title:hover {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsSmallImageHeadline-title {\n color: #CCCCCC;\n}\n\n.AdaptiveNewsSmallImageHeadline-description {\n color: #CCCCCC;\n}\n\n .AdaptiveNewsSmallImageHeadline-description:hover {\n color: #CCCCCC;\n}\n\n.InputToken {\n background-color: #1B1B1B;\n border: 1px solid #333;\n}\n \n .empty-timeline-section, .empty-timeline-footer {\n background-color: #161616;\n}\n \n .PromptbirdPrompt {\n background: #161616;\n }\n\n.WebToast {\n background: none repeat scroll 0% 0% #161616 !important;\n border: 1px solid #050505 !important;\n}\n \n.WebToast-line {\n border-top: 1px solid #050505; \n} \n\n .WebToast-accountLink {\n color: #CCCCCC;\n} \n\n .WebToast-tweetExcerpt {\n color: #CCCCCC;\n}\n\n .ProfilePrefilledTweet .tweet .tweet-text {\n color: #CCCCCC;\n}\n\n\n\n.OldMedia-attributionName {\n color: #CCCCCC;\n}\n\n.ProfileHeading-toggleItem.is-active, .ProfileHeading-toggleItem.is-active:hover, .ProfileHeading-toggleItem.is-active:focus {\n color: #CCCCCC;\n}\n\n.ProfileNav-item.is-active .ProfileNav-label, .ProfileNav-item.is-active:hover .ProfileNav-label {\n color: #CCCCCC !important;\n}\n\n.ProfileNav-label {\n color: #CCCCCC;\n}\n\n.ProfileHeaderCard-screennameLink, .ProfileHeaderCard-screennameLink:hover {\n color: #8899A6;\n}\n\n.username, .time, .time a, .metadata, .metadata button.btn-link, .metadata a {\n color: #8899A6;\n}\n\n.username s, .account-group-inner s {\n color: #8899A6;\n}\n\n.WhoToFollow-users .username {\n color: #8899A6;\n}\n\n.TweetImpressionsModule-heading {\n color: #8899A6;\n}\n\n.ProfileHeaderCard-location, .ProfileHeaderCard-url, .ProfileHeaderCard-vineProfile, .ProfileHeaderCard-joinDate, .ProfileHeaderCard-birthdate {\n color: #8899A6;\n}\n\n.account-summary .dismiss {\n color: #8899A6;\n}\n\n.dm-thread-snippet {\n color: #CCCCCC !important;\n}\n\n .typeahead .selected a, .typeahead .selected strong, .typeahead .selected .fullname, .typeahead .selected .username, .typeahead .selected .typeahead-social-context, .typeahead .selected .Icon--close, .typeahead a:hover, .typeahead a:hover strong, .typeahead a:hover .fullname, .typeahead a:hover .username, .typeahead a:hover .typeahead-social-context {\n color: #CCCCCC;\n}\n\n.typeahead strong {\n color: #CCCCCC;\n}\n\n.TwitterCard .Button--smallGray {\n color: #CCCCCC;\n}\n\n.find-friends-list .source {\n color: #CCCCCC;\n} \n\n .GalleryTweet .pretty-link b, .GalleryTweet .pretty-link:hover s, .GalleryTweet .pretty-link:hover b, .GalleryTweet .pretty-link:focus s, .GalleryTweet .pretty-link:focus b, .GalleryTweet .tweet-actions > li b {\n color: #8899A6;\n}\n\n .GalleryTweet {\n color: #CCCCCC;\n}\n\nlabel {\n color: #CCCCCC;\n}\n\n\n.message .message-text {\n color: #CCCCCC;\n}\n\n.dropdown-menu li>a:hover, .dropdown-menu li>a:focus, .dropdown-menu .dropdown-link:hover, .dropdown-menu .dropdown-link:focus, .dropdown-menu .typeahead-recent-search-item.selected, .dropdown-menu .typeahead-saved-search-item.selected, .dropdown-menu .selected a, .dropdown-menu .dropdown-link.selected {\n background-color: #161616;\n color: #CCCCCC;\n}\n\n.profile-header .profile-card-inner h1, .profile-header .profile-card-inner h2, .profile-header .profile-card-inner p, .profile-header .profile-card-inner s, .profile-header .profile-card-inner a, .profile-header .profile-card-inner a b, .profile-header .profile-card-inner a:hover s, .profile-header .profile-card-inner a:hover b {\t\n\tcolor: #8899A6;\n}\n\nh1, h2, h3, h4, h5, h6, .fullname {\n\tcolor: #CCCCCC;\n}\n\n.stats a strong, .modal-body p {\n\tcolor: #CCCCCC;\n}\n\n .DMPopoverMenu {\n background-color: #161616;\n border: 1px solid #333;\n color: #CCCCCC;\n}\n\n\n .AdaptiveNewsTextHeadline-title:focus, .AdaptiveNewsTextHeadline-title:hover {\n color: #8899A6;\n}\n\n.AdaptiveNewsHeadlineDetails-user, .AdaptiveNewsHeadlineDetails-user:focus, .AdaptiveNewsHeadlineDetails-user:hover {\n color: #8899A6;\n}\n\n.WhoToFollow-title {\n color: #8899A6;\n}\n\n.nav > li {\n color: #8899A6;\n}\n\n.Trends .trend-location {\n color: #8899A6;\n}\n\n.ProfileUserList-heading {\n color: #8899A6;\n}\n\n.PhotoRail-heading {\n color: #8899A6;\n}\n\n.Footer--blankBackground .Footer-item, .Footer--blankBackground .Footer-link {\n color: #8899A6;\n}\n\n.ProfileCard .ProfileCard-screennameLink, .ProfileCard .ProfileCard-screennameLink:hover, .ProfileCard .ProfileCard-screennameLink:focus {\n color: #8899A6;\n}\n\n.ScrollBump-title {\n color: #CCCCCC;\n}\n\n.ScrollBump-title a, .ScrollBump-title a:hover, .ScrollBump-title a:focus, .ScrollBump-title a:active {\n color: #8899A6;\n}\n\n.ProfileTweet-actionCount {\n color: #8899A6;\n}\n\n.dropdown-menu li > a, .dropdown-menu .dropdown-link {\n color: #8899A6;\n}\n\n.dropdown-menu li > a:hover, .dropdown-menu li > a:focus, .dropdown-menu .dropdown-link:hover, .dropdown-menu .dropdown-link:focus, .dropdown-menu .dropdown-link.is-focused, .dropdown-menu li:hover .dropdown-link, .dropdown-menu li:focus .dropdown-link, .dropdown-menu .typeahead-recent-search-item.selected, .dropdown-menu .typeahead-saved-search-item.selected, .dropdown-menu .selected a, .dropdown-menu .dropdown-link.selected {\n background-color: #1B1B1B !important;\n}\n\n.typeahead-items li > a {\n color: #8899A6;\n}\n\n.typeahead-recent-search-item .Icon--close, .typeahead-saved-search-item .Icon--close {\n color: #8899A6;\n}\n\n.DMActivity-title {\n color: #8899A6;\n}\n\n.DMActivity-header {\n color: #8899A6;\n}\n\n.DMInboxItem-timestamp {\n color: #8899A6;\n}\n\n.DMActivity-body {\n background-color: #101010;\n}\n\n.QuoteTweet-screenname {\n color: #8899A6;\n}\n\n.QuoteTweet .tweet-content, .QuoteTweet-text a, .QuoteTweet-text a:hover, .QuoteTweet-text a:focus, .QuoteTweet-text a:active, .QuoteTweet-text .pretty-link b, .QuoteTweet-text .pretty-link s, .QuoteTweet-text .pretty-link:hover b, .QuoteTweet-text .pretty-link:hover s, .QuoteTweet-text .pretty-link:focus b, .QuoteTweet-text .pretty-link:focus s, .QuoteTweet-text .pretty-link:active b, .QuoteTweet-text .pretty-link:active s {\n color: #CCCCCC;\n}\n\n.module .list-link {\n color: #8899A6;\n}\n\n.t1-label {\n color: #CCCCCC;\n}\n\n.settings-header {\n color: #8899A6;\n}\n\n.form-horizontal .controls p {\n color: #8899A6;\n}\n\n.Footer-item, .Footer-link {\n color: #8899A6;\n}\n\n.tweet .context .pretty-link s, .tweet .context .pretty-link b {\n color: #8899A6;\n}\n\n.with-icn {\n color: #8899A6;\n}\n\n.PermalinkOverlay-spinnerContainer {\n background-color: #161616;\n}\n\n.ep-Header .ep-Title {\n color: #CCCCCC;\n}\n\n.ep-TweetPerformance.ep-Section .ep-Metric .ep-MetricTopContainer {\n color: #CCCCCC;\n}\n\n.ep-Header {\n border-bottom: 1px solid #333;\n}\n\n.bird-topbar-etched {\n color: #8899A6;\n}\n\n.FoundMediaSearch-query {\n background-color: #242424;\n background-image: none;\n border-bottom: 1px solid #050505;\n}\n\n.Caret--top::before, .Caret--top.Caret--stroked::after {\n border-bottom-color: #050505;\n}\n\n.ProfileCardStats-statLabel {\n color: #8899A6;\n}\n\n.DashboardProfileCard-screennameLink {\n color: #8899A6;\n}\n\n.Trends .context-trend-item .trend-item-stats {\n color: #8899A6;\n}\n\n.tweet .context a {\n color: #8899A6;\n}\n\n.AdaptiveSearchPage-moduleTitle {\n color: #8899A6;\n}\n\n.stats a {\n color: #8899A6;\n}\n\n.flex-module-header p {\n color: #8899A6;\n}\n\n.ProfileListItem-memberCount {\n color: #8899A6;\n}\n\n.ListCreationModule-description {\n color: #8899A6;\n}\n\n.ListCreationModule-title {\n color: #8899A6;\n}\n\n.NotificationsHeadingContent {\n background-color: #161616;\n border-bottom: 1px solid #050505;\n}\n\nli.stream-item.highlighted {\n background-color: #1B1B1B !important;\n}\n\n\n\n\n\n\n\n\n .TwitterCard [data-poll-vote-majority*=\"1\"] .PollXChoice-optionContainer[data-poll-index=\"1\"] .PollXChoice-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"2\"] .PollXChoice-optionContainer[data-poll-index=\"2\"] .PollXChoice-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"3\"] .PollXChoice-optionContainer[data-poll-index=\"3\"] .PollXChoice-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"4\"] .PollXChoice-optionContainer[data-poll-index=\"4\"] .PollXChoice-choice--chart {\n background: #333 none repeat scroll 0% 0%;\n}\n\n .TwitterCard .PollXChoice-optionContainer .PollXChoice-choice--chart {\n background: #333 none repeat scroll 0% 0%;\n }\n\n .PollXChoiceTextOnly-choice--chart{\n background-color: #333 !important;\n}\n\n.TwitterCard [data-poll-vote-majority*=\"1\"] .PollXChoiceTextOnly-optionContainer[data-poll-index=\"1\"] .PollXChoiceTextOnly-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"2\"] .PollXChoiceTextOnly-optionContainer[data-poll-index=\"2\"] .PollXChoiceTextOnly-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"3\"] .PollXChoiceTextOnly-optionContainer[data-poll-index=\"3\"] .PollXChoiceTextOnly-choice--chart,\n.TwitterCard [data-poll-vote-majority*=\"4\"] .PollXChoiceTextOnly-optionContainer[data-poll-index=\"4\"] .PollXChoiceTextOnly-choice--chart {\n background-color: #333 !important;\n}\n\n\n\n.content-main .stream-items > .stream-item > .expansion-container > .stream-item:not(.open) > .expansion-container:first-child:last-child .tweet:first-child:last-child {\n border-bottom: 1px solid #050505 !important;\n}\n\n .PromptbirdPrompt--inline, .PromptbirdPrompt--inlinePointer {\n border: 1px solid #050505;\n }\n\n .tweet .account-in-timeline-blk {\n border-top: 1px solid #050505;\n }\n\n .ProfilePrefilledTweet .tweet {\n border: 1px solid #050505; \n background-color: #161616;\n }\n\n.content-header, .content-no-header {\n border: 1px solid #050505 !important;\n}\n \n.global-dm-nav.new.with-count .dm-new .count-inner {\n border: 2px solid #bbb;\n}\n \n.global-dm-nav.new.with-count .dm-new {\n color: #CCCCCC;\n} \n \n.DMDivider:before {\n border-bottom: 1px solid #333; \n}\n \n .DMDivider {\n background-color: #101010;\n}\n\n.AdaptiveNewsRelatedHeadlines-headline {\n border-bottom: 1px solid #050505;\n}\n\n.DMConversation-composer {\n border-top: 0px solid #060606;\n box-shadow: 0px 0px 0px rgba(255, 255, 255, 0.5) inset;\n}\n\n.DMComposer-container {\n background-color: #242424;\n}\n\n.input-group-addon {\n text-shadow: 0px 0px 0px #FFF;\n border-color: #060606 !important;\n}\n\n .DirectMessage--received .Caret:before {\n border-color: #333;\n}\n\n.DirectMessage--sent .Caret:before {\n border-color: #333;\n}\n\n .TokenizedMultiselect-inputContainer {\n border: 1px solid #333;\n}\n\n.TokenizedMultiselect-input {\n border: 0px none !important;\n}\n\n .permalink.standard-tweets .ThreadedConversation .ThreadedConversation-tweet .stream-item .tweet, .ThreadedPermalinkOverlay .ThreadedConversation .ThreadedConversation-tweet .stream-item .tweet, .ThreadedPermalinkOverlay .ThreadedConversation .ThreadedConversation-tweet .stream-item.open {\n border: 0px none !important;\n }\n\n.account, .tweet, .app {\n border-bottom: 1px solid #050505;\n}\n\n.logged-out .permalink-replies {\n border-top: 1px solid #050505;\n}\n\n.content-header, .content-no-header {\n border: 1px solid #000 !important;\n}\n\n.TwitterCard .Button--smallGray {\n background-image: linear-gradient(0rad, #1a1a1a, #242424);\n border: 1px solid #050505; \n}\n\n .TwitterCard .Button--smallGray:hover:not([disabled]), .TwitterCard .Button--smallGray:focus:not([disabled]), .TwitterCard .Button--smallGray:active:not([disabled]) {\n border: 1px solid #050505;\n background-image: linear-gradient(0rad, #242424, #1a1a1a);\n} \n \n .TwitterCard a.u-buttonLabel, .TwitterCard a.u-buttonLabel:hover, .TwitterCard a.u-buttonLabel:focus, .TwitterCard a.u-buttonLabel:active {\n color: #8899A6;\n}\n\n.input-prepend .add-on, .input-append .add-on {\n text-shadow: 0px 0px 0px #FFF;\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.DMActivity {\n border: 0px solid #CCD6DD;\n}\n\n.EmojiBar-icon {\n background-color: rgba(0,0,0,0);\n}\n\n\n.TwitterCard .PollXChoiceTextOnly-footer {\n border-color: #666\n}\n\n.module .active .list-link, label {\n\tcolor: #CCCCCC;\n}\n\n.TweetWithPivotModule-header a {\n color: #CCCCCC;\n}\n\n.conversations-enabled .inline-reply-caret .caret-inner {\n border-bottom-color: #aaa;\n border-color: transparent transparent #aaa;\n}\n\n.conversations-enabled .inline-reply-caret {\n border-color: transparent transparent #aaa;\n}\n\n.permalink .in-reply-to .tweet, .permalink .replies-to .tweet {\n border-bottom: 1px solid #050505;\n}\n\n.ProfileCard-bg {\n border-bottom: 0px solid #E1E8ED;\n}\n\n.AdaptiveFiltersBar-label {\n border-right: 1px solid #050505;\n}\n\n.find-friends-sources {\n background-color: #101010;\n padding: 0px 0px 12px;\n}\n.stream-media-grid-items.media-grid {\n background: none repeat scroll 0% 0% padding-box content-box #101010;\n border-left: 1px solid rgb(0, 0, 0) !important;\n border-right: 1px solid rgb(0, 0, 0) !important;\n} \n\n.Gallery-content {\n background-color: #101010;\n}\n.dm-convo-placeholder {\n background-color: #101010;\n} \n .user-select-controls {\n border: 1px solid #777 !important;\n background-color: #101010;\n}\n.SiderailRelatedTweets-viewMore:hover {\n background-color: #101010 !important;\n}\n .permalink {\n background-color: #101010;\n border: 1px solid #050505;\n}\n .InputToken {\n background-color: #101010;\n}\n .DMComposer .tweet-content {\n background-color: #101010;\n} \n.DMActivity-container {\n background-color: #101010;\n} \n .DMTypeaheadHeader {\n color: #CCCCCC;\n background-color: #101010;\n border-bottom: 1px solid #050505;\n border-top: 1px solid #333 !important;\n}\n\n.modal-header {\n background-color: #101010 !important;\n \tborder: 1px solid #000!important;\n border-radius: 0!important;\n -webkit-box-shadow: none!important;\n box-shadow: none!important;\n}\n\n.PollingCardComposer {\n background-color: #101010;\n box-shadow: inset 0 1px 0 #333;\n}\n\n.ProfileAvatar {\n background: #101010 none repeat scroll 0% 0%;\n border: 0px solid #FFF;\n left: 5px;\n top: -5px;\n}\n\n.DMComposer-attachment {\n border-bottom: 1px solid #050505;\n}\n\n.DirectMessage--sent .DirectMessage-text a, .DirectMessage--sent .DirectMessage-text .pretty-link b, .DirectMessage--sent .DirectMessage-text .pretty-link s {\n color: #8899A6 !important;\n}\n \n.has-scroll-bump {\n background: transparent none repeat scroll 0px center !important;\n}\n\n.DirectMessage--sent .QuoteTweet, .DirectMessage--sent .QuoteTweet:hover {\n border-color: #333;\n}\n\n.Caret--right::before, .Caret--right.Caret--stroked::after {\n border-left-color: #333;\n}\n\n.PollingCardComposer .PollingCardComposer-pollDuration {\n border-top: 1px solid #333;\n}\n\n.tweet-box[contenteditable=\"true\"] {\n border-color: #050505 !important;\n}\n\n.global-nav .search-input {\n border: 1px solid #050505;\n}\n\n.QuoteTweet {\n border: 1px solid #666;\n}\n\n.RichEditor-scrollContainer {\n border: 1px solid #050505;\n}\n\n.tweet-box textarea:focus, .tweet-box input[type=\"text\"], .currently-dragging .tweet-form.is-droppable .tweet-drag-help, .tweet-box[contenteditable=\"true\"]:focus, .RichEditor-scrollContainer.is-fakeFocus {\n border-color: #050505;\n}\n\n.RichEditor {\n border: 1px solid #101010 !important;\n}\n\n.tweet-box textarea:focus, .tweet-box input[type=\"text\"], .currently-dragging .tweet-form.is-droppable .tweet-drag-help, .tweet-box[contenteditable=\"true\"]:focus, .RichEditor.is-fakeFocus {\n border-color: #101010;\n}\n\n.TwitterCard .PlayerCard--video .PlayerCard-videoContainer {\n border-bottom: 1px solid #666;\n}\n\n.tweet-form .thumbnail-container .previews .preview {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 0px 0px rgba(255, 255, 255, 0.6);\n background-color: rgba(0,0,0,0);\n}\n\n.tweet-form .thumbnail-container .preview {\n border: 1px solid #333;\n}\n\n .button.selected, .follow-button .unfollow .button {\n border-color: #050505;\n} \n \n .button.selected:hover {\n border-color: #333;\n} \n\n input:focus, textarea:focus, div[contenteditable=\"true\"]:focus, div[contenteditable=\"true\"].fake-focus {\n \tborder: 1px solid #333;\n}\n\n .ThreadedConversation .ThreadedConversation-tweet .stream-item .tweet, .ThreadedPermalinkOverlay .ThreadedConversation .ThreadedConversation-tweet .stream-item .tweet, .ThreadedPermalinkOverlay .ThreadedConversation .ThreadedConversation-tweet .stream-item.open {\n border-bottom: 0px solid #050505 !important;\n}\n\ninput, textarea, div[contenteditable], .t1-select {\n border: 1px solid #050505;\n}\n\n.Streams .TweetForwardTimeline .AdaptiveMedia {\n border: 1px solid #050505;\n}\n\n.Streams .TweetForwardTimeline .tweet {\n border: 1px solid #050505;\n}\n\n.ComposerThumbnail {\n background-color: #333;\n border: 1px solid #333;\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.05) inset, 0px 0px 0px rgba(255, 255, 255, 0.6);\n}\n\n.ProfileCard--wide .ProfileCard-bio {\n color: #CCCCCC;\n}\n\n.ProfileCard a, .ProfileCard a:hover, .ProfileCard a:focus, .ProfileCard a:active, .ProfileCard .pretty-link, .ProfileCard .pretty-link:hover, .ProfileCard .pretty-link:focus, .ProfileCard .pretty-link:active {\n color: #8899A6;\n}\n\n.TwitterCard .MomentCard {\n background-color: #161616;\n}\n\n.TwitterCard .MomentCard:hover {\n background-color: #1B1B1B;\n}\n\n.TwitterCard .MomentCard-authorName {\n color: #CCCCCC;\n}\n\n .TwitterCard {\n background-color: #161616;\n}\n\n .TwitterCard:hover {\n background-color: #1B1B1B;\n}\n\n .TwitterCard .PlayerCard--video .SummaryCard-contentContainer:hover {\n background-color: #1B1B1B;\n }\n\n.t1-legend {\n border-bottom: 1px solid #060606;\n}\n\n.dismiss-module .dismiss-confirmation, .dismiss-module .feedback-action {\n border-bottom: 1px solid #060606;\n}\n\n.GalleryTweet {\n background: #161616 none repeat scroll 0% 0%;\n}\n\n.login-responsive .page-canvas {\n background-color: #161616;\n}\n\n.login-responsive .mobile, .route-resend-password .mobile, .contact-support {\n background-color: #242424;\n}\n\n.signin .remember {\n color: #CCCCCC;\n}\n \n .global-nav--newLoggedOut #signin-dropdown {\n background-color: #161616;\n display: block;\n}\n \n .SignupCallOut {\n display: block !important;\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.ProfileSidebar .TweetImpressionsModule, .ProfileSidebar .ProfileLifelineInfo, .ProfileSidebar .RelatedUsers {\n display: block;\n}\n\n#auto-close p {\n color:#8899A6;\n background: #161616 none repeat scroll 0% 0%;\n}\n\n.ListCreationModule {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.ProfileUserMomentsTimeline .GridTimeline-items {\n border: 1px solid #050505;\n}\n\n.ProfileUserMomentsTimeline .MomentGuideVTwoCapsuleSummary {\n background: #161616 none repeat scroll 0% 0%;\n border-bottom: 1px solid #050505;\n}\n\n.ProfileUserMomentsTimeline .GridTimeline-items {\n border: 1px solid #050505;\n}\n\n.MomentGuideVTwoCapsuleSummary-cover {\n background-color: #161616;\n}\n\n.MomentGuideVTwoCapsuleSummary-title {\n color: #8899A6;\n}\n\n.front-page-photo-set .front-signin {\n background: #161616 none repeat scroll 0% 0%;\n}\n\n.front-page-photo-set .front-signin, .front-page-photo-set .front-signup {\n border: 1px solid #050505;\n}\n\n.front-card .text-input {\n border: 1px solid #050505;\n box-shadow: 0px 0px 0px #EEE inset, 0px 0px 0px #FFF;\n}\n\n.front-page-photo-set .front-signin .text-input, .front-page-photo-set .front-signup .text-input {\n border: 1px solid #050505;\n}\n\n.front-page-photo-set .front-signup {\n background: #161616 none repeat scroll 0% 0%;\n}\n\n.front-signup h2, .front-signin h2 {\n text-shadow: 0px 0px 0px rgba(255, 255, 255, 0.6);\n}\n\n.front-signup h2 strong, .front-signin h2 strong {\n color: #CCCCCC;\n}\n\n.front-signup h2, .front-signin h2 {\n border-bottom: 1px solid #050505;\n box-shadow: 0px 0px 0px #FFF;\n}\n\n.PageContainer {\n background: transparent;\n}\n\n.Form-textbox, .Button {\n border: 1px solid #333;\n}\n\n.TopNav {\n color: #8899A6;\n background: #242424;\n border-bottom: 1px solid #050505 !important;\n box-shadow: 0 0 0px #aaa;\n}\n\n.TopNav-title {\n color: #8899A6;\n}\n\n.content-inner {\n background-color: #161616 !important;\n}\n\n.field-highlight, .alert {\n background-color: #333;\n background-image: none !important;\n}\n\n.alert {\n text-shadow: 0 0px 0px rgba(255,255,255,0.25);\n}\n\n.Form-textbox:focus {\n border-color: #444;\n}\n\n.backup-code-display {\n border: 1px solid #333;\n}\n\n.MomentMakerHomeModule {\n background-color: #161616;\n border: 1px solid #050505;\n}\n\n.RichEditor, .TweetBoxAttachments {\n border-color: #050505 !important;\n}\n\n .twitter-timeline-link[class*=\"u-hidden\"] {\n width: auto !important;\n height: auto !important;\n display: inline !important;\n position: static !important;\n margin-left: 0.3em !important;\n}\n\n .ProfileListItem {\n background-color: #161616;\n border-bottom: 1px solid #050505;\n }\n .ProfileListsTimeline .GridTimeline-items.has-items {\n border: 1px solid #050505;\n }", + "urls": [], + "urlPrefixes": [ + "http://twitter.com", + "https://twitter.com", + "https://tweetdeck.twitter.com/", + "http://tweetdeck.twitter.com/" + ], + "domains": [], + "regexps": [] + } + ], + "url": "http://userstyles.org/styles/97767", + "updateUrl": "https://userstyles.org/styles/chrome/97767.json?ik-avatarMarginValue=ik-With+Avatar&ik-notlogin=ik-Display&ik-hpbackground=%23101010&ik-tweetbgcolor=%23161616&ik-tweetbghovercolor=%231B1B1B&ik-navbarbgcolor=%23242424&ik-tweetfontcolor=%23CCCCCC&ik-darkerfontcolor=%238899A6", + "md5Url": "https://update.userstyles.org/97767.md5", + "originalMd5": "638920b1602105b86af58523e42811a2", + "name": "Dark Twitter Customizable", + "enabled": false, + "id": 2, + "_id": "cfa8790e-2f77-404b-9529-3cb7a195ab0a", + "_rev": 1580730543288, + "_usw": {} + }, + { + "installDate": 1519587024929, + "name": "Linkwarner", + "sections": [ + { + "code": "/* ==UserStyle==\n@name Linkwarner\n@namespace PonyWave\n@version 0.11\n@homepageURL https://git.ponywave.de/Akamaru/Linkwarner\n@updateURL https://git.ponywave.de/Akamaru/Linkwarner/raw/branch/master/linkwarner.user.css\n@author Akamaru\n==/UserStyle== */\n\n/*Positive Links*/\n\na[href*=\"foldr.us/\"]:after {\n content: \" (foldr.us)\";\n}\na[href*=\"filecrypt.cc/\"]:after {\n content: \" (Filecrypt.cc)\";\n}\na[href*=\"download.serienjunkies.org/\"]:after {\n content: \" (Serienjunkies.org)\";\n}\na[href*=\"uploaded.net/\"]:after {\n content: \" (Uploaded.net)\";\n}\na[href*=\"ul.to/\"]:after {\n content: \" (Uploaded.net)\";\n}\na[href*=\"uploadboy.com/\"]:after {\n content: \" (UploadBoy.com)\";\n}\na[href*=\"1fichier.com/\"]:after {\n content: \" (1fichier.com)\";\n}\na[href*=\"mega.co.nz/\"]:after {\n content: \" (MEGA.co.nz)\";\n}\na[href*=\"mega.nz/\"]:after {\n content: \" (MEGA.nz)\";\n}\na[href*=\"zippyshare.com/\"]:after {\n content: \" (Zippyshare.com)\";\n}\na[href*=\"mediafire.com/\"]:after {\n content: \" (Mediafire.com)\";\n}\na[href*=\"file-upload.net/\"]:after {\n content: \" (File-Upload.net)\";\n}\na[href*=\"dailyuploads.net/\"]:after {\n content: \" (DailyUploads.net)\";\n}\na[href*=\"turbobit.net/\"]:after {\n content: \" (Turbobit.net)\";\n}\na[href*=\"filepup.net/\"]:after {\n content: \" (FilePup.net)\";\n}\na[href*=\"multiup.org/\"]:after {\n content: \" (MultiUp.org)\";\n}\na[href*=\"jheberg.net/\"]:after {\n content: \" (Jheberg.net)\";\n}\na[href*=\"hitfile.net/\"]:after {\n content: \" (hitFile.net)\";\n}\na[href*=\"oboom.com/\"]:after {\n content: \" (Oboom.com)\";\n}\na[href*=\"linky.club/\"]:after {\n content: \" (Linky.Club)\";\n}\na[href*=\"yadi.sk/\"]:after {\n content: \" (Yandex Disk)\";\n}\na[href*=\"uptobox.com/\"]:after {\n content: \" (UpToBox.com)\";\n}\na[href*=\"dropapk.to/\"]:after {\n content: \" (Drop APK)\";\n}\n\n/*Down Links*/\n\na[href*=\"boerse.to/posts/11816261/\"]:after {\n content: \" [Down!]\";\n}\na[href*=\"boerse.to/posts/12556308/\"]:after {\n content: \" [Down!]\";\n}\na[href*=\"ncrypt.in/\"]:after {\n content: \" [Down! (nCrypt.in)]\";\n}\na[href*=\"cryptor.to/\"]:after {\n content: \" [Down! (Cryptor.to)]\";\n}\na[href*=\"rapidshare.com/\"]:after {\n content: \" [Down! (RapidShare.com)]\";\n}\na[href*=\"streamcloud.eu/\"]:after {\n content: \" [Down! (StreamCloud.eu)]\";\n}\na[href*=\"share-online.biz/\"]:after {\n content: \" [Down! (Share-Online.biz)]\";\n}\na[href*=\"share-links.biz/\"]:after {\n content: \" [Down! (Share-Links.biz)]\";\n}\na[href*=\"s2l.biz/\"]:after {\n content: \" [Down! (Share-Links.biz)]\";\n}\n\n/*Negative Links*/\n\na[href*=\"adf.ly/\"]:after {\n content: \" [Achtung! AdF.ly!]\";\n}\na[href*=\"j.gs/\"]:after {\n content: \" [Achtung! AdF.ly!]\";\n}\na[href*=\"linkcrypt.ws/\"]:after {\n content: \" [Achtung! LinkCrypt.ws!]\";\n}\na[href*=\"linksave.in/\"]:after {\n content: \" [Achtung! Linksave.in!]\";\n}\na[href*=\"smoozed.com/\"]:after {\n content: \" [Achtung! Smoozed.com!]\";\n}\na[href*=\"crypt.to/\"]:after {\n content: \" [Achtung! Crypt.to!]\";\n}\na[href*=\"relink.to/\"]:after {\n content: \" [Achtung! relink.to]\";\n}\na[href*=\"relink.us/\"]:after {\n content: \" [Achtung! relink.us]\";\n}", + "domains": [ + "boerse.to", + "3dsiso.com", + "wiiuiso.com", + "serienjunkies.org", + "download.serienjunkies.org", + "dokujunkies.org", + "romshepherd.com", + "movie-blog.to", + "skidrowreloaded.com" + ] + } + ], + "updateUrl": null, + "url": null, + "id": 4, + "updateDate": 1637684630222, + "_id": "9c6b47a5-97db-4532-ae26-8d9160a4dea7", + "_rev": 1637684964331, + "_usw": {} + }, + { + "installDate": 1518796682661, + "sections": [ + { + "code": ".html5-play-progress, .ytp-play-progress {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAMCAIAAAAs6UAAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUNCQzIyREQ0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUNCQzIyREU0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQ0JDMjJEQjRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQ0JDMjJEQzRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PovDFgYAAAAmSURBVHjaYvjPwMAAxjMZmBhA9H8INv4P4TPM/A+m04zBNECAAQBCWQv9SUQpVgAAAABJRU5ErkJggg==\") repeat-x !important; \nbackground: linear-gradient(to bottom, #FF0000 0%, #FF0000 16.5%, #FF9900 16.5%, #FF9900 33%, #FFFF00 33%, #FFFF00 50%, #33FF00 50%, #33FF00 66%, #0099FF 66%, #0099FF 83.5%, #6633ff 83.5%, #6633ff 100%) !important;\nbackground: -webkit-linear-gradient(top, #FF0000 0%, #FF0000 16.5%, #FF9900 16.5%, #FF9900 33%, #FFFF00 33%, #FFFF00 50%, #33FF00 50%, #33FF00 66%, #0099FF 66%, #0099FF 83.5%, #6633ff 83.5%, #6633ff 100%) !important;\nbackground: -moz-linear-gradient(top, #FF0000 0%, #FF0000 16.5%, #FF9900 16.5%, #FF9900 33%, #FFFF00 33%, #FFFF00 50%, #33FF00 50%, #33FF00 66%, #0099FF 66%, #0099FF 83.5%, #6633ff 83.5%, #6633ff 100%) !important;\n}\n\n.html5-load-progress, .ytp-load-progress {\n background: url(\"data:image/gif;base64,R0lGODlhMAAMAIAAAAxBd////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQECgAAACwAAAAAMAAMAAACJYSPqcvtD6MKstpLr24Z9A2GYvJ544mhXQmxoesElIyCcB3dRgEAIfkEBAoAAAAsAQACAC0ACgAAAiGEj6nLHG0enNQdWbPefOHYhSLydVhJoSYXPO04qrAmJwUAIfkEBAoAAAAsBQABACkACwAAAiGEj6nLwQ8jcC5ViW3evHt1GaE0flxpphn6BNTEqvI8dQUAIfkEBAoAAAAsAQABACoACwAAAiGEj6nLwQ+jcU5VidPNvPtvad0GfmSJeicUUECbxnK0RgUAIfkEBAoAAAAsAAAAACcADAAAAiCEj6mbwQ+ji5QGd6t+c/v2hZzYiVpXmuoKIikLm6hXAAAh+QQECgAAACwAAAAALQAMAAACI4SPqQvBD6NysloTXL480g4uX0iW1Wg21oem7ismLUy/LFwAACH5BAQKAAAALAkAAAAkAAwAAAIghI8Joe0Po0yBWTaz3g/z7UXhMX7kYmplmo0rC8cyUgAAIfkEBAoAAAAsBQAAACUACgAAAh2Ejwmh7Q+jbIFZNrPeEXPudU74IVa5kSiYqOtRAAAh+QQECgAAACwEAAAAIgAKAAACHISPELfpD6OcqTGKs4bWRp+B36YFi0mGaVmtWQEAIfkEBAoAAAAsAAAAACMACgAAAh2EjxC36Q+jnK8xirOW1kavgd+2BYtJhmnpiGtUAAAh+QQECgAAACwAAAAALgALAAACIYSPqcvtD+MKicqLn82c7e6BIhZQ5jem6oVKbfdqQLzKBQAh+QQECgAAACwCAAIALAAJAAACHQx+hsvtD2OStDplKc68r2CEm0eW5uSN6aqe1lgAADs=\") !important;\n}\n\n.html5-scrubber-button, .ytp-scrubber-button {\n background: url(\"data:image/gif;base64,R0lGODlhIgAVAKIHAL3/9/+Zmf8zmf/MmZmZmf+Z/wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMkJBNjY5RTU1NEJFMzExOUM4QUM2MDAwNDQzRERBQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCREIzOEIzMzRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCREIzOEIzMjRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM1QkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMyQkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkECQcABwAsAAAAACIAFQAAA6J4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93bqCA7f7TFaYoIFAMMwczB5EkTzJllEUttmIGoG5bfPBjDawD7CsJC67uWcv2CRov929C/q2ZpcBbYBmLGk6W1BRY4MUDnMvJEsBAXdlknk2fCeRk2iJliAijpBlEmigjR0plKSgpKWvEUheF4tUZqZID1RHjEe8PsDBBwkAIfkECQcABwAsAAAAACIAFQAAA6B4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93TqS40XiKSYgTLBgIBAMqE/zmQSaZEzns+jQ9pC/5dQJ0VIv5KMVWxqb36opxHrNvu9ptPfGbmsBbgSAeRdydCdjXWRPchQPh1hNAQF4TpM9NnwukpRyi5chGjqJEoSOIh0plaYsZBKvsCuNjY5ptElgDyFIuj6+vwcJACH5BAkHAAcALAAAAAAiABUAAAOfeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GKifWaddvNQAtszXYCxgR/Zy5jYTFeXmSDiIZGdQEBd06QSBQ5e4cEkE9nnZQaG2J4F4MSLx8rkqUSZBeurhlTUqsLsi60DpZxSWBJugcJACH5BAkHAAcALAAAAAAiABUAAAOgeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GuifWaddvNwMkZtmY7AWMEgGcKY2ExXl5khFMVc0Z1AQF3TpJShDl8iASST2efloV5JTyJFpgOch8dgW9KZxexshGNLqgLtbW0SXFwvaJfCQAh+QQJBwAHACwAAAAAIgAVAAADoXi63P7wmUmrnVGOzbvfRsYYXGGe6MmF4kEOaSGYMwq2LizHfDGwIlLPNKGZfi6gZmggEAy2iVPZEKZqzakq+1xUFFYe90lxTsHmim6HGpvf3eR7skYJ3PC5tyystc0AboFnVXQ9XFJTZIQOYUYFTQEBeWaSVF4bbCeRk1meBJYSL3WbaReMIxQfHXh6jaYXsbEQni6oaF21ERR7l0ksvA0JACH5BAkHAAcALAAAAAAiABUAAAOeeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMfFlA4hTITEMxkIBMOuADwmhzqeM6mashTCXKw2TVKQyKuTRSx2wegnNkyJ1ozpOFiMLqcEU8BZHx6NYW8nVlZefQ1tZgQBAXJIi1eHUTRwi0lhl48QL0sogxaGDhMlUo2gh14fHhcVmnOrrxNqrU9joX21Q0IUElm7DQkAIfkECQcABwAsAAAAACIAFQAAA6J4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93bqCA7f7TFaYoIFAMMwczB5EkTzJllEUttmIGoG5bfPBjDawD7CsJC67uWcv2CRov929C/q2ZpcBbYBmLGk6W1BRY4MUDnMvJEsBAXdlknk2fCeRk2iJliAijpBlEmigjR0plKSgpKWvEUheF4tUZqZID1RHjEe8PsDBBwkAIfkECQcABwAsAAAAACIAFQAAA6B4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93TqS40XiKSYgTLBgIBAMqE/zmQSaZEzns+jQ9pC/5dQJ0VIv5KMVWxqb36opxHrNvu9ptPfGbmsBbgSAeRdydCdjXWRPchQPh1hNAQF4TpM9NnwukpRyi5chGjqJEoSOIh0plaYsZBKvsCuNjY5ptElgDyFIuj6+vwcJACH5BAkHAAcALAAAAAAiABUAAAOfeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GKifWaddvNQAtszXYCxgR/Zy5jYTFeXmSDiIZGdQEBd06QSBQ5e4cEkE9nnZQaG2J4F4MSLx8rkqUSZBeurhlTUqsLsi60DpZxSWBJugcJACH5BAkHAAcALAAAAAAiABUAAAOgeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GuifWaddvNwMkZtmY7AWMEgGcKY2ExXl5khFMVc0Z1AQF3TpJShDl8iASST2efloV5JTyJFpgOch8dgW9KZxexshGNLqgLtbW0SXFwvaJfCQAh+QQJBwAHACwAAAAAIgAVAAADoXi63P7wmUmrnVGOzbvfRsYYXGGe6MmF4kEOaSGYMwq2LizHfDGwIlLPNKGZfi6gZmggEAy2iVPZEKZqzakq+1xUFFYe90lxTsHmim6HGpvf3eR7skYJ3PC5tyystc0AboFnVXQ9XFJTZIQOYUYFTQEBeWaSVF4bbCeRk1meBJYSL3WbaReMIxQfHXh6jaYXsbEQni6oaF21ERR7l0ksvA0JACH5BAkHAAcALAAAAAAiABUAAAOeeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMfFlA4hTITEMxkIBMOuADwmhzqeM6mashTCXKw2TVKQyKuTRSx2wegnNkyJ1ozpOFiMLqcEU8BZHx6NYW8nVlZefQ1tZgQBAXJIi1eHUTRwi0lhl48QL0sogxaGDhMlUo2gh14fHhcVmnOrrxNqrU9joX21Q0IUElm7DQkAOw==\") !important;\n width: 34px !important;\n height: 21px !important;\n border: none !important;\n margin-left: -18px !important;\n margin-top: 0px !important;\n transform: scale(0.8);\n-webkit-transform: scale(0.8);\n-moz-transform: scale(0.8);\n-ms-transform: scale(0.8);\n}\n.ytp-progress-bar-container:hover .ytp-scrubber-button,\n.ytp-progress-bar-container:hover .ytp-load-progress{\n\timage-rendering: pixelated;\n}\n.html5-progress-bar-container, .ytp-progress-bar-container {\n height: 12px !important;\n}\n.html5-progress-bar, .ytp-progress-bar {\n margin-top: 12px !important;\n}\n.html5-progress-list, .ytp-progress-list, .video-ads .html5-progress-list.html5-ad-progress-list, .video-ads .ytp-progress-list.ytp-ad-progress-list {\n height: 12px !important;\n}\n.ytp-volume-slider-track {\n background: #0C4177 !important;\n}", + "start": 3485, + "domains": [ + "youtube.com" + ] + } + ], + "url": "https://33kk.github.io/uso-archive/?style=95033", + "updateUrl": "https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/usercss/95033.user.css", + "name": "YouTube - Nyan Cat progress bar video player theme", + "enabled": true, + "id": 7, + "originalDigest": "cfb38a924c3c23928728e45c54d09aec9bc73f74", + "updateDate": 1615723396513, + "_id": "979a8182-360f-45d3-91ee-872f41b52e22", + "_rev": 1615723396513, + "etag": "W/\"aae0b30205a4aa86ea01aa8e83f2efd810025cbf66ee7d0c0e6a1ddc6a6366d6\"", + "sourceCode": "/* ==UserStyle==\n@name YouTube - Nyan Cat progress bar video player theme\n@namespace USO Archive\n@author zoid\n@description `Bring Nyan Cat to your YouTube videos with this custom video progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!If Nyan Cat's not to your tastes, check out this customisable style: YouTube - Custom colors video progress bar.
`\n@version 20180627.19.1\n@license CC-BY-NC-4.0\n@preprocessor uso\n@advanced dropdown show_nyan \"Show Nyan Cat\" {\n\tshow_nyan_always \"Always (default)*\" <<YouTube - Custom colors video progress bar.
", + "version": "20180627.19.1", + "license": "CC-BY-NC-4.0", + "preprocessor": "uso", + "vars": { + "show_nyan": { + "type": "select", + "label": "Show Nyan Cat", + "name": "show_nyan", + "value": null, + "default": "show_nyan_always", + "options": [ + { + "name": "show_nyan_always", + "label": "Always (default)*", + "value": "transform: scale(0.8);\n-webkit-transform: scale(0.8);\n-moz-transform: scale(0.8);\n-ms-transform: scale(0.8);" + }, + { + "name": "show_nyan_mouseover", + "label": "Only on mouseover", + "value": "" + } + ] + }, + "stars": { + "type": "select", + "label": "Stars", + "name": "stars", + "value": null, + "default": "stars_animated", + "options": [ + { + "name": "stars_animated", + "label": "Animated (default)*", + "value": "data:image/gif;base64,R0lGODlhMAAMAIAAAAxBd////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQECgAAACwAAAAAMAAMAAACJYSPqcvtD6MKstpLr24Z9A2GYvJ544mhXQmxoesElIyCcB3dRgEAIfkEBAoAAAAsAQACAC0ACgAAAiGEj6nLHG0enNQdWbPefOHYhSLydVhJoSYXPO04qrAmJwUAIfkEBAoAAAAsBQABACkACwAAAiGEj6nLwQ8jcC5ViW3evHt1GaE0flxpphn6BNTEqvI8dQUAIfkEBAoAAAAsAQABACoACwAAAiGEj6nLwQ+jcU5VidPNvPtvad0GfmSJeicUUECbxnK0RgUAIfkEBAoAAAAsAAAAACcADAAAAiCEj6mbwQ+ji5QGd6t+c/v2hZzYiVpXmuoKIikLm6hXAAAh+QQECgAAACwAAAAALQAMAAACI4SPqQvBD6NysloTXL480g4uX0iW1Wg21oem7ismLUy/LFwAACH5BAQKAAAALAkAAAAkAAwAAAIghI8Joe0Po0yBWTaz3g/z7UXhMX7kYmplmo0rC8cyUgAAIfkEBAoAAAAsBQAAACUACgAAAh2Ejwmh7Q+jbIFZNrPeEXPudU74IVa5kSiYqOtRAAAh+QQECgAAACwEAAAAIgAKAAACHISPELfpD6OcqTGKs4bWRp+B36YFi0mGaVmtWQEAIfkEBAoAAAAsAAAAACMACgAAAh2EjxC36Q+jnK8xirOW1kavgd+2BYtJhmnpiGtUAAAh+QQECgAAACwAAAAALgALAAACIYSPqcvtD+MKicqLn82c7e6BIhZQ5jem6oVKbfdqQLzKBQAh+QQECgAAACwCAAIALAAJAAACHQx+hsvtD2OStDplKc68r2CEm0eW5uSN6aqe1lgAADs=" + }, + { + "name": "stars_static", + "label": "Static", + "value": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAkCAIAAABE0v5gAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDBCQzQ5NUQ0QjgwMTFFMzgzMjlFRUMwNEE5QTFEODMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDBCQzQ5NUU0QjgwMTFFMzgzMjlFRUMwNEE5QTFEODMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEMEJDNDk1QjRCODAxMUUzODMyOUVFQzA0QTlBMUQ4MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpEMEJDNDk1QzRCODAxMUUzODMyOUVFQzA0QTlBMUQ4MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsJssJMAAADHSURBVHja7JfBDYAgDEWFsw6lS+kITuVSLiCmxjQhgbaB0kOJBw6A7/82hYZ53Sd7I04mx4t1X6dFrGU7yov0uSMFCLibwxUOrGBhI6umKrmVq2llWDonfUknTPIFYWCBADJ5brGsauIoya2CrJHlVJnJdpV3LMdyLMdyLMdSfUZH2c8ElzdLiUYQBQ3B9976d+IjxudW4gAmmHRtbyiGdQ9iLpIiOyq8QgUNgUbK42QnKtcrp6xQ+OXDSUFDWDjKHkTOeAQYAIkcV+RUQwO/AAAAAElFTkSuQmCC" + } + ] + } + } + }, + "author": "zoid", + "description": "Bring Nyan Cat to your YouTube videos with this custom video progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!If Nyan Cat's not to your tastes, check out this customisable style: YouTube - Custom colors video progress bar.
", + "_usw": {} + }, + { + "installDate": 1518796679892, + "sections": [ + { + "code": "/*================================================================\n\n Youtube Umbra Theme\n by Andy Cormack\n\n http://ac-design.co.uk/\n @groundxaero\n\n v1.1.9\n\t Last updated: 2017/02/17\n\n ================================================================*/\n\t:root {\n\t\t--selection-bg-color: #8ea2cb;\n\t\t--selection-text-color: #dde;\n\t\t--body-font: 'Open Sans', sans-serif;\n\t\t--bg-color: #1b1b1d;\n\t\t--main-text-color: #aaaab6;\n\t\t--main-faded-text-color: #66666c;\n\t\t--author-highlight-bg-color: #445;\n\t\t--sep-line-color: #36363f;\n\t\t--card-bg-color: #222225;\n\t\t--card-dark-bg-color: #1e1e20;\n\t\t--card-light-bg-color: #2a2a2d;\n\t\t--card-border-color: #2f2f34;\n\t\t--card-hover-bg-color: #2a2a2d;\n\t\t--card-light-hover-bg-color: #303034;\n\t\t--card-light-hover-border-color: #404044;\n\t\t--menu-bg-color: #2a2a2e;\n\t\t--menu-hover-bg-color: #2f2f34;\n\t\t--menu-border-color: #36363f;\n\t\t--menu-light-bg-color: #3a3a44;\n\t\t--menu-light-hover-bg-color: #3f3f48;\n\t\t--menu-light-active-bg-color: #46464f;\n\t\t--menu-light-border-color: #46464f;\n\t\t--link-color: #ddd;\n\t\t--link-hover-color: #fff;\n\t\t--input-box-bg-color: #171719;\n\t\t--input-checkbox-toggle-bg-color: #54545a;\n\t\t--input-checkbox-active-bg-color: #3a3a44;\n\t\t--input-checkbox-inactive-bg-color: #222225\n\t}\n\t::-moz-selection {\n\t\tbackground: var(--selection-bg-color);\n\t\tcolor: var(--selection-text-color)\n\t}\n\t::selection {\n\t\tbackground: var(--selection-bg-color);\n\t\tcolor: var(--selection-text-color)\n\t}\n\tbody {\n\t\tfont-family: var(--body-font);\n\t\tbackground: var(--bg-color)\n\t}\n\t.yt-default p,\n\tbody,\n\tp.yt {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#action-panel-details a,\n\t#pl-header .pl-header-details a,\n\t#watch-header .yt-user-info a,\n\t.HPHGCHB-b-c a,\n\t.HPHGCHB-p-a,\n\t.branded-page-module-title a,\n\t.branded-page-module-title a:visited,\n\t.branded-page-related-channels h3,\n\t.branded-page-related-channels h3 a,\n\t.c4-checklist-module .checklist-item-title-text,\n\t.comment-renderer-header .comment-author-text,\n\t.comment-renderer-like-count,\n\t.comment-replies-renderer-hide,\n\t.comment-replies-renderer-paginator,\n\t.comment-replies-renderer-view,\n\t.creator-editor-title a,\n\t.dashboard-widget-comments .comment-header a,\n\t.dashboard-widget-comments .selectable-item:hover .vm-link a,\n\t.dashboard-widget-videos .video-list-item .video-title a,\n\t.feed-item-main .feed-item-header a,\n\t.feed-item-main a.yt-user-name,\n\t.filter,\n\t.filter-sort.filter-selected,\n\t.lohp-video-link,\n\t.lohp-video-metadata .yt-user-name,\n\t.multirow-shelf .yt-uix-expander-head,\n\t.shared-conversation-title,\n\t.video-player-view-component .video-detail a,\n\t.vm-list-view .vm-video-side-notification-text a,\n\t.vm-list-view .vm-video-side-view-count a,\n\t.vm-list-view .vm-video-title .vm-video-title-content,\n\t.yt-advertise-sidebar a,\n\t.yt-alert-naked .yt-alert-content a,\n\t.yt-card-light .yt-card-title a,\n\t.yt-card-light a,\n\t.yt-creator-benefits-table a,\n\t.yt-dev-showcase-external-link-msg-container:hover a,\n\t.yt-lockup-title a,\n\t.yt-lockup:hover .yt-lockup-description a,\n\t.yt-lockup:hover .yt-lockup-meta a,\n\t.yt-lockup:hover a,\n\t.yt-tile-default:hover a,\n\t.yt-tile-static a,\n\t.yt-tile-visible:hover a,\n\t.yt-uix-button-link,\n\ta {\n\t\tcolor: var(--link-color)\n\t}\n\t.video-list .video-list-item .title {\n\t\tcolor: var(--link-color)!important\n\t}\n\t.video-list .video-list-item:hover .title {\n\t\tcolor: var(--link-hover-color)!important\n\t}\n\t#action-panel-details:hover a,\n\t#pl-header .pl-header-details a:hover,\n\t#watch7-sidebar .video-list-item:hover .title,\n\t#watch7-sidebar .video-list-item:hover .title .yt-deemphasized-text,\n\t.HPHGCHB-b-c a:hover,\n\t.HPHGCHB-d-a .HPHGCHB-d-c:hover,\n\t.branded-page-module-title a.branded-page-module-title-link:hover,\n\t.branded-page-related-channels h3 a:hover,\n\t.branded-page-related-channels-item .yt-uix-button-link:hover,\n\t.c4-checklist-module .checklist-item-title-text:hover,\n\t.c4-checklist-module .checklist-item.done .checklist-item-title-text:hover,\n\t.c4-checklist-module .checklist-item:hover .checklist-item-title-text .todo-title-text,\n\t.c4-checklist-module .view-all-link a:hover,\n\t.creator-editor-title a:hover,\n\t.dashboard-widget-comments .comment-header a:hover,\n\t.dashboard-widget-comments .selectable-item:hover .vm-link a:hover,\n\t.dashboard-widget-videos .video-list-item .video-title a:hover,\n\t.feed-item-container:hover .feed-item-header a,\n\t.feed-item-container:hover a.yt-user-name,\n\t.filter:hover,\n\t.lohp-video-metadata .yt-user-name:hover,\n\t.multirow-shelf .compact-shelf-view-all-card-link:hover a,\n\t.multirow-shelf .compact-shelf-view-all-card-link:hover h4,\n\t.video-player-view-component .video-detail a:hover,\n\t.vm-list-view .vm-video-title a.vm-video-title-content:hover,\n\t.yt-alert-naked .yt-alert-content a:hover,\n\ta:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t#footer-logo .footer-logo-icon,\n\t#masthead-logo,\n\t#yt-masthead #logo-container .logo,\n\t.footer-logo {\n\t\tbackground: no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAA8CAYAAACEhkNqAAAF/UlEQVR4nO2d3ZWCMBCFtwRLoARLSAlbAiVYAh1sCZZgCZRgCZRACXcfQMXJHfIDEdT5zuHBk8mQTK4kkBB+fgzDMAzDMHQAuPGoATST4w9Aqxw9tuUKXq4LnuvQ4FG/w9ax/ngwiOjyWi3sgg7DH6baug0+CgDHMbgG0GzdHh8BhquU8cwV1kXmg2GMYXDardvnbYF1fyHqrdvo7YB1gTF0W7fT24FhHGGEcaUawJHjOGNfKXl2Mxgcy2jEcS7VCB052XXG/k8poCrGVwO9G2R/iJRjDU7C52klv7mU6Q6hC6VS7FkXs6u+GsCZVWgFv2vghM893LlWS2PDgnVUTlYTW62L+Vu9YAvAMM3hsYLfNXDC5x6E5XiNlweMzYF5fS/0LmY33eDPjy6AUn4TccLnHoR1WhobLWBncjKve4u12xoteqX8JuKEzz0Iq1kaGy1gv8oJj8KuIzZl7ioyQfodYUN8NIk+UnAvPFcs5YYy4N3haZKujcV+ixUqA6RfARri49uEVW56B3w5yWWSzm6L+2IFygQmrByKCosNzPtJOhMe7QYxdK0NHgvR/kb/6kNUDF2YXKxWCxsXYaN16xoNKcuWwrrisdgwhQ75ixKLCuugnNSN6aygslFD6556mWeSl11pWmHDGjzGZo6GlIX5YHZthI3EKee6krQK4akpL98kf404gZXtecCvSg307uUwyXuMrATAn5F9s7DU9VHQx7ZAxI0ThgtGcN405GcR4OOoK3igLyJv6qRvJfJ/q7AcAvOs4H94ddqN5K8Q+NPH+soC+q06E009yZc6rgHEvw1fKixRfyoy8D+852fio4qs0x1WplVB/JWnmuRh841XDEI9gD9Y7cV5v1JY8MdR3pUIfmzYw2vZBuw8KtLf6iButv0q8rTEpp6kazcG1cTmW4XF6i0fTMtxlvdAE35Xx8qidofSdnVIJRgnkYcV2AkbdiV0k3QTlmJD/MScx3uEQMp7R9oWAeG14lWgUiyAzKebpJuwFBvix5vtID52KSxtjRbA+3eGS7GBCUu1IX5C6cBOhcUqe4P17wyXYqOc04TF/bD0VhysnWR570jbYkAf6HlrrxQ7l2KjBNiExf146TGQ8t7J8ZcFEtZeKWV1KTZKgL9BWOwZoAv48dJjIOW9k+MvCyW4dLJSKatLscH3CoudywX8eOkxkPLeyfGXhVJhE9azXRthI5FxWUVY8Fd9sKPTgiD9FUOpsAnr2a6NsJHIuKwlrEVIf8VQKmzCerZrI2wkMi4mLJiwpF0bYSORcSklrB4JOxJKf8VQKmzCerZrI2wkMi6lhJXygPR1S8yVCi8R1qvmCkstTWZ2bYSNRMYlR1hrT+m8bq8spcKasLqIAM7aIE5Y5wgb5meOJrLuzK4VNt6Ln8SPjEuOsFhZJB8hLFbgZpJeKRWaLm1mgrhO0uuYoCh+5mh+BMgTVuzV3Il0tkzpIGzkipOn1bujjVxlykTeKTHYrbCYbY9BDL+I2EgEuiBqxT8tE8q9sMq2HLhN1p+hr1mXOOV83Ux5ZGy8MRGeX2RpZXkCcXnd3htKcDVhpTamF0ASvFjYJT+7HKl1l3GIKIsL+SE+2FUtab8FpU5qDIqRGlzML7WRdOBru0OwK9+rhDV75zTmYb4kTqQ7BPYCBR9q9IjcjAXhxZtlNgVRCpP8r4WyL5Wg0wISyK91iUnrjghNZN0BpQEm5Wa+JE6k367UteJ77i43KK7Rf+i1PDfnY1WU4MZ0BzX4ILHHcFWbexv6AF8U7S14sWVCnMBvnPF4u+V2aPl7DN3SYTyPHD8yX5K5Hf0uGB8l4PFmeGwdfiflOoy/tXpIqkyZvB4Ml997ADPzVpnn3nr7xXdid9tQ7RbY5rYp7Gobqt0D2447ll1tQ7V7YB8QiMG6wRxgnzwJUW/dRm8J8vaU+BbsI01LgHWJDPus3BpgeHTRbduWu2H2WaKRAYau8YLtv+38anoMD0urrdvg48HjY1O3qaIG8x8a3wtsyXEL/4Pjtyf8u/q4g7EA6F9ImztMAIZhGKvyD107xTs8H96dAAAAAElFTkSuQmCC);\n\t\tbackground-size: 100%;\n\t\topacity: .65\n\t}\n\t#masthead-logo img,\n\t.footer-logo img {\n\t\tvisibility: hidden\n\t}\n\t@media (max-width:704px) {\n\t\t.exp-responsive #yt-masthead #logo-container {\n\t\t\tfilter: invert(.88) saturate(0)\n\t\t}\n\t}\n\t.footer-logo {\n\t\tmargin-top: 15px;\n\t\tdisplay: inline-block\n\t}\n\t.yt-thumb {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#audio-tab img,\n\t#cc-tab img,\n\t#images-tab img,\n\t#keyboard-help-tab img,\n\t#masthead-search .search-btn-component .yt-uix-button-content,\n\t#search-btn span,\n\t#text-tab img,\n\t#transition-tab img,\n\t#video-tab img,\n\t#watch8-action-buttons .yt-uix-button,\n\t#yt-masthead-user .yt-uix-button-icon-bell,\n\t.HPHGCHB-H-i img,\n\t.HPHGCHB-L-c,\n\t.HPHGCHB-W-s,\n\t.HPHGCHB-Y-u,\n\t.HPHGCHB-eb-a img,\n\t.HPHGCHB-g-d,\n\t.HPHGCHB-h-n,\n\t.HPHGCHB-n-c,\n\t.HPHGCHB-nb-b,\n\t.HPHGCHB-x-a,\n\t.add-to-widget .addto-search-playlist-section .search-icon,\n\t.add-to-widget .yt-sprite,\n\t.audiolibrary-track-head .favorite-button .track-action-icon,\n\t.box-close-link img,\n\t.c4-editor-edit::before,\n\t.c4-featured-content-editor .question-mark-icon,\n\t.close-small,\n\t.comments .mod-button,\n\t.copynotice-info-target,\n\t.create-playlist-widget-form .has-icon::before,\n\t.create-playlist-widget-form .yt-uix-button-has-icon::before,\n\t.creator-editor-nav-tabs li a .yt-sprite,\n\t.creator-editor-nav-tabs li>span .yt-sprite,\n\t.creator-heart-big-unhearted,\n\t.flag-channel-abuse-form .report-question-mark,\n\t.footer-help-btn-img-container,\n\t.icon-annotation-anchored,\n\t.icon-annotation-highlight,\n\t.icon-annotation-label,\n\t.icon-annotation-popup,\n\t.icon-annotation-title,\n\t.live-chat-widget .live-comments-emoji-picker-open::before,\n\t.live-chat-widget .overflow-menu-button::before,\n\t.live-chat-widget .post-button::before,\n\t.mediapicker-audio .audio-monetized-badge-container img,\n\t.pl-header-title-icon,\n\t.track.attribution .license-button .track-action-icon,\n\t.vm-list-view .vm-video-metric .yt-sprite,\n\t.vm-search-btn .yt-uix-button-content,\n\t.yt-card a.yt-action:not([style-scope]):not(.style-scope):after,\n\t.yt-close-img,\n\t.yt-help-icon,\n\t.yt-ui-menu-item.has-icon::before,\n\t.yt-uix-button .yt-uix-button-arrow,\n\t.yt-uix-button .yt-uix-button-icon,\n\t.yt-uix-button-icon-annotation-anchored,\n\t.yt-uix-button-icon-annotation-highlight,\n\t.yt-uix-button-icon-annotation-label,\n\t.yt-uix-button-icon-annotation-popup,\n\t.yt-uix-button-icon-annotation-title,\n\t.yt-uix-button-icon-icon-account-settings,\n\t.yt-uix-button-menu-item-icon-annotation-anchored,\n\t.yt-uix-button-menu-item-icon-annotation-highlight,\n\t.yt-uix-button-menu-item-icon-annotation-label,\n\t.yt-uix-button-menu-item-icon-annotation-popup,\n\t.yt-uix-button-menu-item-icon-annotation-title,\n\t.yt-uix-clickcard-close,\n\t.yt-uix-form-input-checkbox-element,\n\t.ytch-search-container .search-btn-component .yt-uix-button-content,\n\tbutton.audio-add img,\n\tbutton.expand-button,\n\tbutton.play-pause-button,\n\timg.storyboard-icon.audio-icon,\n\timg.storyboard-icon.video-icon {\n\t\tfilter: invert(100%)\n\t}\n\t.timeline-zoomslider .slider-icon {\n\t\tfilter: invert(100%) brightness(200%)\n\t}\n\tbutton.thumb-add img,\n\tbutton.thumb-remove img {\n\t\tfilter: invert(100%) saturate(0)\n\t}\n\t#player-playlist .yt-uix-button-icon.yt-sprite {\n\t\tfilter: invert(0)\n\t}\n\t.add-segment-button-icon,\n\t.c4-checklist-module .checklist-item.active .todo-icon,\n\t.delete-segment-button-icon,\n\t.live-dashboard .yt-sprite,\n\t.vm-list-view .vm-video-indicators,\n\t.yt-sprite.vm-video-privacy {\n\t\tfilter: brightness(120%) saturate(5%)\n\t}\n\t.video-unlisted-icon {\n\t\tbackground: no-repeat url(http://s.ytimg.com/yts/imgbin/www-hitchhiker-2x-vflMlDDAN.png) -285px -221px;\n\t\tbackground-size: 419px 399px;\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tfilter: invert(50%)\n\t}\n\t.yt-uix-form-input-checkbox-container input:checked+.yt-uix-form-input-checkbox-element {\n\t\tborder-color: #777;\n\t\topacity: .7\n\t}\n\t.comment-renderer.channel-owner .comment-author-text {\n\t\tbackground-color: var(--author-highlight-bg-color);\n\t\tpadding-left: .5em;\n\t\tpadding-right: .5em\n\t}\n\t.yt-ui-ellipsis {\n\t\tbackground: 0 0!important\n\t}\n\t#masthead-appbar,\n\t#masthead-container,\n\t#yt-masthead-container,\n\t.footer-container,\n\t.yt-card,\n\tbody #footer-container {\n\t\tbackground: var(--card-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder: none\n\t}\n\t.yt-uix-checkbox-on-off .toggle {\n\t\tbackground: var(--input-checkbox-toggle-bg-color)\n\t}\n\t.yt-uix-checkbox-on-off label {\n\t\tbackground-color: var(--input-checkbox-inactive-bg-color)\n\t}\n\t.yt-uix-checkbox-on-off input[type=checkbox]:checked+label {\n\t\tbackground-color: var(--input-checkbox-active-bg-color)\n\t}\n\t.yt-consent-banner {\n\t\tbackground: var(--card-light-bg-color);\n\t\tborder: none\n\t}\n\t.yt-alert-actionable.yt-alert-success,\n\t.yt-alert-default.yt-alert-success,\n\t.yt-alert-naked.yt-alert-success .yt-alert-icon,\n\t.yt-alert-small.yt-alert-success {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.yt-consent-banner .yt-consent-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-consent-banner .consent-close {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-consent-banner .consent-close:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.yt-alert-actionable.yt-alert-info,\n\t.yt-alert-default.yt-alert-info,\n\t.yt-alert-naked.yt-alert-info .yt-alert-icon,\n\t.yt-alert-small.yt-alert-info {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.yt-alert-panel {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-F-e.HPHGCHB-F-m,\n\t.HPHGCHB-F-k.HPHGCHB-F-m,\n\t.yt-alert-actionable.yt-alert-warn,\n\t.yt-alert-default.yt-alert-warn,\n\t.yt-alert-naked.yt-alert-warn .yt-alert-icon,\n\t.yt-alert-small.yt-alert-warn {\n\t\tbackground-color: #ffbd59;\n\t\tmargin-bottom: 1em\n\t}\n\t.HPHGCHB-s-n,\n\t.picker.modal-dialog-bg,\n\t.yt-dialog-bg,\n\t.yt-uix-overlay-bg {\n\t\tbackground-color: #000\n\t}\n\t.HPHGCHB-s-n {\n\t\topacity: .6\n\t}\n\t.HPHGCHB-s-f,\n\t.HPHGCHB-s-g,\n\t.no-focus-outline .yt-dialog-fg:focus,\n\t.yt-dialog-fg,\n\t.yt-uix-overlay-fg {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.yt-uix-overlay-actions {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.HPHGCHB-s-f .HPHGCHB-s-p {\n\t\tbackground-color: var(--menu-light-bg-color);\n\t\tcolor: var(--link-color)\n\t}\n\t.HPHGCHB-f-c:focus .HPHGCHB-f-f,\n\t.HPHGCHB-f-c:hover .HPHGCHB-f-f,\n\t.HPHGCHB-f-h .HPHGCHB-f-f,\n\t.HPHGCHB-h-q li a,\n\t.yt-dialog-fg-content .yt-dialog-title,\n\t.yt-uix-overlay-fg-content .yt-dialog-title {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-dialog-fg-content,\n\t.yt-uix-overlay-fg-content,\n\tinput.HPHGCHB-l-f.HPHGCHB-h-o {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.overlay-confirmation-preferences-dialog .overlay-confirmation-delivery-method,\n\t.share-email label {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#playlist-settings-editor .yt-uix-tabs,\n\t.HPHGCHB-f-a,\n\t.HPHGCHB-s-f .HPHGCHB-s-p,\n\t.flag-channel-abuse-form hr {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.HPHGCHB-h-i {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#collaboration-settings .yt-uix-button.create-invite-link-button,\n\t.HPHGCHB-r-a {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-r-e,\n\t.HPHGCHB-r-e strong {\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t.yt-channel-msg-dialog .user-box {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.yt-channel-msg-dialog .compose-message {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-s-f .HPHGCHB-s-i,\n\t.create-playlist-widget-form .create-playlist-bottom-section,\n\t.yt-channel-msg-dialog .yt-dialog-footer {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.yt-uix-form-label,\n\t.yt-uix-form-legend,\n\tli.guide-section h3 a {\n\t\tcolor: var(--link-color)\n\t}\n\t#playlist-settings-editor .yt-dialog-footer {\n\t\tbackground-color: var(--card-bg-color);\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#collaboration-settings .collaboration-settings-invite-link.disabled::before {\n\t\topacity: .05;\n\t\tpointer-events: none\n\t}\n\t.yt-card .yt-uix-tabs {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.pl-header-sharepanel-content .share-panel-url,\n\t.share-panel,\n\t.yt-masthead-account-picker.yt-uix-clickcard-card-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.share-email-preview-container {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#masthead-container,\n\t#yt-masthead-container {\n\t\tbackground: var(--card-dark-bg-color)\n\t}\n\t#masthead-search-term,\n\t#masthead-search-terms {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tbox-shadow: none;\n\t\tborder: 1px solid var(--menu-border-color)\n\t}\n\t#masthead-search-term input,\n\t#masthead-search-term input:focus,\n\t#masthead-search-terms input {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#masthead-search-term:hover,\n\t#masthead-search-terms:hover {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.gssb_m {\n\t\tcolor: var(--main-text-color);\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.gssb_e {\n\t\tborder: none\n\t}\n\t.gssb_i,\n\t.gssb_i td {\n\t\tbackground: var(--card-light-bg-color)\n\t}\n\t#appbar-nav .yt-uix-button.yt-uix-button-epic-nav-item,\n\t.yt-masthead-picker-account-subtitle {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.yt-masthead-picker-footer {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.yt-uix-button-default.yt-masthead-picker-button-primary,\n\t.yt-uix-button-default.yt-masthead-picker-settings-button {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.yt-uix-button-default:hover.yt-masthead-picker-button-primary,\n\t.yt-uix-button-default:hover.yt-masthead-picker-settings-button {\n\t\tbackground: var(--menu-light-hover-bg-color)\n\t}\n\t.yt-uix-button-default.yt-masthead-picker-settings-button .yt-uix-button-icon {\n\t\topacity: .7\n\t}\n\t.yt-uix-button-default:hover.yt-masthead-picker-settings-button .yt-uix-button-icon {\n\t\topacity: .9\n\t}\n\t#yt-masthead-notifications-title,\n\t.epic-nav-item-heading,\n\t.epic-nav-item.selected,\n\t.epic-nav-item.yt-uix-button-toggled,\n\t.yt-ui-menu-content,\n\ta.yt-uix-button-epic-nav-item.selected,\n\ta.yt-uix-button-epic-nav-item.yt-uix-button-toggled,\n\tbutton.yt-uix-button-epic-nav-item.selected,\n\tbutton.yt-uix-button-epic-nav-item.yt-uix-button-toggled {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yt-masthead-notifications-content .item-section>li>.yt-lockup-tile,\n\t#yt-masthead-notifications-content .yt-ui-ellipsis {\n\t\tbackground: var(--card-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yt-masthead-notifications-content .item-section>li>.yt-lockup-tile:hover,\n\t#yt-masthead-notifications-content .yt-lockup-tile:hover .yt-ui-ellipsis {\n\t\tbackground: var(--card-hover-bg-color)\n\t}\n\t.yt-ui-menu-content {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#creator-subheader #creator-subheader-item-count,\n\t.HPHGCHB-g-q,\n\t.business-email-container .business-email-button,\n\t.comment-section-renderer-paginator,\n\t.yt-form-input-select-container,\n\t.yt-uix-button-dark,\n\t.yt-uix-button-dark[disabled],\n\t.yt-uix-button-dark[disabled]:active,\n\t.yt-uix-button-dark[disabled]:focus,\n\t.yt-uix-button-dark[disabled]:hover,\n\t.yt-uix-button-default,\n\t.yt-uix-button-default[disabled],\n\t.yt-uix-button-default[disabled]:active,\n\t.yt-uix-button-default[disabled]:focus,\n\t.yt-uix-button-default[disabled]:hover,\n\t.yt-uix-button-panel:hover .creator-bar-item .yt-uix-button-text-dark,\n\t.yt-uix-button-subscribe-unbranded,\n\t.yt-uix-button-subscribe-unbranded[disabled],\n\t.yt-uix-button-subscribe-unbranded[disabled]:active,\n\t.yt-uix-button-subscribe-unbranded[disabled]:focus,\n\t.yt-uix-button-subscribe-unbranded[disabled]:hover,\n\t.yt-uix-button-subscribed-branded,\n\t.yt-uix-button-subscribed-branded[disabled],\n\t.yt-uix-button-subscribed-unbranded,\n\t.yt-uix-button-subscribed-unbranded[disabled],\n\t.yt-uix-button-text {\n\t\tbackground: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-border-color);\n\t\topacity: 1\n\t}\n\t.yt-uix-button-c4-view-action {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-g-q:hover,\n\t.yt-uix-button-dark:hover,\n\t.yt-uix-button-default.yt-uix-button-active,\n\t.yt-uix-button-default.yt-uix-button-active:focus,\n\t.yt-uix-button-default.yt-uix-button-toggled,\n\t.yt-uix-button-default:active,\n\t.yt-uix-button-text:active {\n\t\tbackground-color: var(--menu-hover-bg-color);\n\t\tborder-color: var(--menu-border-color);\n\t\tbox-shadow: none\n\t}\n\t.HPHGCHB-g-f,\n\t.HPHGCHB-g-f.HPHGCHB-g-y,\n\t.HPHGCHB-g-f:active,\n\t.HPHGCHB-g-v:active,\n\t.HPHGCHB-g-w:active {\n\t\tbackground-image: none;\n\t\tbackground-color: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color);\n\t\tbox-shadow: none\n\t}\n\t.HPHGCHB-g-f:hover {\n\t\tbackground-image: none;\n\t\tbackground-color: var(--menu-light-hover-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t#comment-section-renderer .comment-section-renderer-paginator:hover,\n\t.yt-uix-button-default.yt-uix-button-toggled:hover,\n\t.yt-uix-button-default:hover,\n\t.yt-uix-button-panel .creator-bar-item .yt-uix-button-text-dark:hover,\n\t.yt-uix-button-subscribe-unbranded:hover,\n\t.yt-uix-button-subscribed-branded[disabled]:active,\n\t.yt-uix-button-subscribed-branded[disabled]:focus,\n\t.yt-uix-button-subscribed-branded[disabled]:hover,\n\t.yt-uix-button-subscribed-unbranded[disabled]:active,\n\t.yt-uix-button-subscribed-unbranded[disabled]:focus,\n\t.yt-uix-button-subscribed-unbranded[disabled]:hover,\n\t.yt-uix-button-text:hover {\n\t\tbackground: var(--menu-light-hover-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-light-border-color);\n\t\tbox-shadow: none\n\t}\n\t.HPHGCHB-g-f[disabled],\n\t.HPHGCHB-g-f[disabled]:active,\n\t.HPHGCHB-g-f[disabled]:hover,\n\t.yt-uix-button.yt-uix-button-subscribed-unbranded {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.HPHGCHB-g-f[disabled],\n\t.HPHGCHB-g-f[disabled]:active,\n\t.HPHGCHB-g-f[disabled]:hover,\n\t.yt-uix-button-menu {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.yt-ui-menu-item,\n\t.yt-uix-button-menu .yt-uix-button-menu-item {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-uix-button-menu .yt-uix-button-menu-item-highlight .yt-uix-button-menu-item,\n\t.yt-uix-button-menu .yt-uix-button-menu-item.selected,\n\t.yt-uix-button-menu .yt-uix-button-menu-item:hover {\n\t\tcolor: var(--link-hover-color);\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.yt-ui-menu-item:hover {\n\t\tbackground: rgba(255, 255, 255, .02)\n\t}\n\t.yt-ui-menu-item:focus {\n\t\tbackground: rgba(255, 255, 255, .05)\n\t}\n\t.yt-uix-clickcard-card-border,\n\t.yt-uix-hovercard-card-border {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-E-g {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-E-l .HPHGCHB-E-e {\n\t\tborder-right-color: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-E-l .HPHGCHB-E-h {\n\t\tborder-right-color: #66666f\n\t}\n\t.HPHGCHB-E-e {\n\t\tborder-left-color: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-E-h {\n\t\tborder-left-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-p-c,\n\t.yt-uix-clickcard-card-body,\n\t.yt-uix-hovercard-card-body {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-uix-clickcard-card-flip .yt-uix-card-body-arrow-horizontal,\n\t.yt-uix-hovercard-card-flip .yt-uix-card-body-arrow-horizontal {\n\t\tborder-right-color: var(--menu-bg-color)\n\t}\n\t.yt-uix-clickcard-card-reverse .yt-uix-card-body-arrow-vertical,\n\t.yt-uix-hovercard-card-reverse .yt-uix-card-body-arrow-vertical {\n\t\tborder-bottom-color: var(--menu-bg-color)\n\t}\n\t.yt-uix-button-arrow {\n\t\tborder-top-color: var(--main-text-color)\n\t}\n\t.yt-uix-clickcard-card-flip .yt-uix-card-border-arrow-horizontal,\n\t.yt-uix-hovercard-card-flip .yt-uix-card-border-arrow-horizontal {\n\t\tborder-right-color: var(--menu-border-color)\n\t}\n\t.yt-uix-clickcard-card-reverse .yt-uix-card-border-arrow-vertical,\n\t.yt-uix-hovercard-card-reverse .yt-uix-card-border-arrow-vertical {\n\t\tborder-bottom-color: var(--menu-border-color)\n\t}\n\t#appbar-guide-menu,\n\t.guide-flyout {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#appbar-guide-button {\n\t\tbackground: 0 0;\n\t\tborder: none\n\t}\n\t#appbar-guide-button .yt-uix-button-icon {\n\t\tfilter: invert(.4)\n\t}\n\t#masthead-positioner:hover .yt-uix-button-icon-appbar-guide {\n\t\tfilter: brightness(2)\n\t}\n\t.guide-pinned .guide-pinning-enabled #appbar-guide-menu {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.guide-collapsible-item .yt-uix-expander-head:hover,\n\t.guide-flyout-trigger.on-hover,\n\t.guide-item:hover,\n\t.guide-item:hover .yt-deemphasized-text {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.guide-item,\n\t.question-shelf-heading h4 {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-lockup-notifications-container {\n\t\tborder-color: var(--sep-line-color);\n\t}\n\t.service-endpoint-replace-enclosing-action-notification {\n\t\tcolor: var(--main-text-color);\n\t}\n\t.guide-item .guide-count,\n\t.guide-item-subtitle,\n\t.guide-view-more {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.guide-item .yt-sprite {\n\t\tfilter: brightness(200%);\n\t\topacity: .65\n\t}\n\t.guide-item.guide-item-selected .yt-sprite,\n\t.guide-item:hover .yt-sprite {\n\t\topacity: 1\n\t}\n\t.guide-section-separator,\n\t.search-header,\n\t.yt-lockup-playlist-item {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.compact-shelf .yt-uix-button-shelf-slider-pager {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.browse-list-item-container:hover .compact-shelf .yt-uix-button-shelf-slider-pager,\n\t.compact-shelf:hover .yt-uix-button-shelf-slider-pager {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.compact-shelf .yt-uix-shelfslider-next-arrow,\n\t.compact-shelf .yt-uix-shelfslider-prev-arrow,\n\t.rtl .compact-shelf .yt-uix-shelfslider-next-arrow,\n\t.rtl .compact-shelf .yt-uix-shelfslider-prev-arrow {\n\t\tfilter: invert(100%)\n\t}\n\t.addto-watch-later-button-sign-in::before,\n\t.addto-watch-later-button::before {\n\t\tfilter: invert(100%) brightness(70%)\n\t}\n\t.lohp-video-metadata .yt-user-name {\n\t\topacity: .7\n\t}\n\t.search-header {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.filter-col-title,\n\t.search-header .yt-uix-button-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.filter {\n\t\topacity: .75\n\t}\n\t.filter-selected {\n\t\topacity: 1\n\t}\n\t.search-header .num-results,\n\t.search-header .num-results strong {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#browse-items-primary .item-section>li>.yt-lockup-tile,\n\t.branded-page-v2-primary-col .branded-page-box,\n\t.section-list li .item-section .branded-page-box {\n\t\tborder-color: var(--sep-line-color)!important;\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.search-pager button {\n\t\tbackground-color: var(--menu-light-hover-bg-color) !important;\n\t}\n\t.feed-header,\n\t.comment-history-block-header {\n\t\tborder-color: var(--sep-line-color);\n\t}\n\t#history-search .history-search-field {\n\t\tborder-color: var(--menu-border-color);\n\t}\n\t.yt-lockup,\n\t.comment-history-entry-renderer-content {\n\t\tcolor: var(--main-text-color);\n\t}\n\t#upload-button-text,\n\t.upload-footer-header,\n\t.upload-sidebar-header {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.upload-other-options-list .upload-option-text {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#view-as-notification,\n\t.channel-header .secondary-header-contents {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.secondary-header-contents .nav-text {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.channel-header .about-custom-links,\n\t.channel-header .about-secondary-links {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.branded-page-module-title,\n\t.channel-header .branded-page-header-title .branded-page-header-title-link {\n\t\tcolor: var(--link-color)\n\t}\n\t.primary-header-contents .view-as-menu .view-as-menu-trigger {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#channel-search .show-search .search-icon,\n\t.c4-button-opacity::before,\n\t.secondary-header-action .header-action-icon,\n\t.yt-uix-button [class*=material],\n\t.yt-uix-button-default .yt-uix-button-icon,\n\t.yt-uix-button-default::before {\n\t\tfilter: invert(60%) brightness(150%)\n\t}\n\t.epic-nav-item,\n\t.lohp-video-metadata,\n\t.lohp-video-metadata .view-count,\n\t.video-player-view-component .view-count .content-item-time-created,\n\t.video-player-view-component .view-count .count,\n\ta.yt-uix-button.yt-uix-button-epic-nav-item,\n\tbutton.yt-uix-button-epic-nav-item {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#c4-spotlight-editor .spotlight-editor-tab {\n\t\tborder-color: var(--card-hover-bg-color)\n\t}\n\t.video-player-view-component {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-uix-expander-ellipsis {\n\t\tbackground-color: transparent\n\t}\n\t.pl-header-thumb .pl-header-play-all-overlay,\n\t.yt-pl-thumb .sidebar,\n\t.yt-pl-thumb-link .yt-pl-thumb-overlay {\n\t\tbackground: rgba(22, 22, 25, .92)\n\t}\n\t.watched-badge {\n\t\tbackground-color: var(--card-bg-color);\n\t\tpadding-top: 25%;\n\t\tfont-size: 1.5em\n\t}\n\t.resume-playback-background:before,\n\t.resume-playback-background,\n\t.resume-playback-background:after {\n\t\tposition: absolute;\n\t\twidth: 100%;\n\t\tleft: 0;\n\t}\n\t.resume-playback-background:before {\n\t\tcontent: '';\n\t\tbottom: 0;\n\t\theight: 4px;\n\t\tbackground-color: rgba(128, 128, 128, 0.3);\n\t}\n\t.resume-playback-background {\n\t\tbackground-color: rgba(34, 34, 37, 0.9);\n\t\ttop: 0;\n\t\theight: 100%;\n\t\topacity: 1;\n\t\tpointer-events: none;\n\t\tcolor: var(--main-text-color);\n\t\ttransition: 0.2s;\n\t}\n\t.resume-playback-background:after {\n\t\tcontent: 'Watched';\n\t\tz-index: 20000;\n\t\ttop: 47.5%;\n\t\tfont-size: 1rem;\n\t\ttext-align: center;\n\t\ttext-transform: uppercase;\n\t}\n\t.thumb-wrapper .resume-playback-background:after {\n\t\ttop: 35%;\n\t}\n\t.pl-video-thumb .resume-playback-background:after {\n\t\ttop: 25%;\n\t\tfont-size: 0.8rem;\n\t}\n\t.yt-lockup-thumbnail:hover .resume-playback-background,\n\t.thumb-wrapper:hover .resume-playback-background,\n\t.pl-video-thumb:hover .resume-playback-background {\n\t\topacity: 0;\n\t}\n\t.resume-playback-progress-bar,\n\t.video-time {\n\t\tz-index: 2;\n\t}\n\t.contains-percent-duration-watched + .yt-lockup-content {\n\t\topacity: 0.3;\n\t}\n\t.yt-lockup-grid:hover .yt-lockup-content {\n\t\topacity: 1;\n\t}\n\t.ltr .watched-badge,\n\t.pl-video .pl-video-thumbnail .watched-badge,\n\t.watched-badge {\n\t\ttop: 0!important;\n\t\tleft: 0!important;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\tmax-width: 100%;\n\t\ttext-align: center;\n\t\topacity: .8;\n\t\ttransition: opacity .15s ease\n\t}\n\t.pl-video .pl-video-thumbnail:hover .watched-badge,\n\t.watched-badge:hover {\n\t\topacity: 0\n\t}\n\t.shelf-annotation,\n\t.shelf-description {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#c4-header-bg-container,\n\t.branded-page-v2-primary-col .branded-page-box.c4-featured-content-editor:last-child,\n\t.branded-page-v2-primary-col .branded-page-box.c4-featured-content:last-child,\n\t.branded-page-v2-primary-col .branded-page-box.video-player-view-component:last-child,\n\t.branded-page-v2-primary-col .branded-page-box.welcome:last-child,\n\t.branded-page-v2-primary-col .yt-uix-inlineedit-view-container .branded-page-box,\n\t.branded-page-v2-subnav-container,\n\t.channel-header .secondary-header-contents {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#other-channels-sidebar:hover,\n\t.related-channels-editor:hover {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t#pl-header .pl-header-add-description-button:hover,\n\t.yt-uix-button-c4-view-action.yt-uix-button-destructive {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.about-stats .about-stat {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.about-metadata-container,\n\t.c4-module-editor-form .yt-uix-form-input-select,\n\t.c4-module-editor-form .yt-uix-form-input-text,\n\t.c4-module-editor-form .yt-uix-form-input-textarea {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#pl-header .privacy-icon-present .pl-header-details::before,\n\t.about-metadata-label-border-top {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.about-business-email-editor .c4-module-is-editable:hover,\n\t.about-description-editor .c4-module-is-editable:hover,\n\t.about-metadata-editor .c4-module-is-editable:hover {\n\t\tbackground-color: var(--card-dark-bg-color)\n\t}\n\t.yt-uix-form-input-select,\n\t.yt-uix-form-input-text,\n\t.yt-uix-form-input-textarea {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#pl-header {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#pl-header .pl-header-add-description-button,\n\t#pl-header .pl-header-title {\n\t\tcolor: var(--link-color)\n\t}\n\t.pl-header-inlineedit .c4-module-is-editable:hover {\n\t\tbackground-color: var(--input-box-bg-color)\n\t}\n\t.c4-module-editor-form .yt-uix-form-input-select,\n\t.c4-module-editor-form .yt-uix-form-input-text,\n\t.c4-module-editor-form .yt-uix-form-input-textarea,\n\t.pl-header-inlineedit .yt-uix-button-c4-view-action {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.c4-module-editor-form {\n\t\tbackground-color: transparent\n\t}\n\t.pl-message-panel .yt-alert-default {\n\t\tborder-color: var(--sep-line-color);\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.pl-message-panel .yt-alert-default .yt-alert-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.pl-video {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.pl-video:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.yt-uix-dragdrop-cursor-follower {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.pl-video-list-editable .pl-video:hover .pl-video-handle,\n\t.yt-uix-dragdrop-cursor-follower .pl-video-handle {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tborder: none;\n\t\tpadding: 0 .2em\n\t}\n\t#footer-links-primary a,\n\t#yt-uix-videoactionmenu-menu h3,\n\t.pl-video-title-link {\n\t\tcolor: var(--link-color)\n\t}\n\t.pl-video:hover .pl-video-owner a,\n\t.pl-video:hover .pl-video-title-link {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t#watch7-sidebar .watch-sidebar-head {\n\t\tcolor: inherit\n\t}\n\t.autoplay-bar .autoplay-info-icon {\n\t\tfilter: invert(100%)\n\t}\n\t#watch7-sidebar .video-list-item a:hover .title,\n\t#watch7-sidebar .video-list-item a:hover .title .yt-deemphasized-text,\n\t.video-list .video-list-item .title,\n\t.video-list-item a,\n\t.yt-badge {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.video-list .video-list-item .description,\n\t.video-list .video-list-item .stat {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#watch7-sidebar .watch-sidebar-separation-line {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.yt-badge {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#watch7-creator-bar {\n\t\tbackground: var(--card-light-bg-color);\n\t\tborder-color: var(--card-border-color)\n\t}\n\t.creator-bar-item [class*=yt-uix-button-icon] {\n\t\tfilter: invert(50%) brightness(150%)\n\t}\n\t.ytp-probably-keyboard-focus .ytp-progress-bar:focus,\n\t.ytp-keyboard-focus .ytp-progress-bar:focus {\n\t\tbox-shadow: none;\n\t}\n\t#watch8-action-buttons {\n\t\tborder-top-color: var(--sep-line-color)\n\t}\n\t.watch-editable:hover {\n\t\tbackground: var(--bg-color)\n\t}\n\t.yt-uix-button-default .yt-uix-button-icon,\n\t.yt-uix-button-default::before {\n\t\topacity: 1\n\t}\n\t.yt-uix-button-default:hover .yt-uix-button-icon,\n\t.yt-uix-button-default:hover::before {\n\t\topacity: .4;\n\t\tfilter: invert(100%)\n\t}\n\t.yt-subscription-button-subscriber-count-branded-horizontal,\n\t.yt-subscription-button-subscriber-count-unbranded-horizontal {\n\t\tcolor: var(--main-text-color);\n\t\tbackground: transparent;\n\t\tborder: none;\n\t\tborder-left: 1px solid var(--menu-border-color)\n\t}\n\t.yt-commentbox-text:hover,\n\t.yt-uix-form-input-select:hover,\n\t.yt-uix-form-input-text:hover,\n\t.yt-uix-form-input-textarea:hover {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.add-to-widget .addto-playlist-item {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.like-button-renderer-like-button.yt-uix-button:active:before,\n\t.like-button-renderer-like-button.yt-uix-button.yt-uix-button-toggled:before,\n\t.like-button-renderer-like-button:active .yt-uix-button-content,\n\t.like-button-renderer-like-button.yt-uix-button-toggled .yt-uix-button-content {\n\t\tfilter: hue-rotate(180deg);\n\t}\n\t#creator-sidebar>.creator-sidebar-section.selected>h3 a,\n\t#player-playlist .playlist-videos-list>li:hover,\n\t.add-to-widget .addto-playlist-item.yt-uix-kbd-nav-highlight,\n\t.add-to-widget .addto-playlist-item:hover,\n\t.add-to-widget .create-playlist-item:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.add-to-widget .contains-all-selected-videos.to-be-removed .playlist-status,\n\t.add-to-widget .contains-some-selected-videos.to-be-removed .playlist-status,\n\t.add-to-widget .playlist-status {\n\t\topacity: 1;\n\t\tfilter: invert(.6)\n\t}\n\t.add-to-widget .playlists {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#watch-description,\n\t.add-to-widget .create-playlist-item,\n\t.watch-playlist {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-card .yt-uix-button-expander {\n\t\tborder-top-color: var(--sep-line-color);\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.watch-playlist {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#player-playlist .playlist-videos-list {\n\t\tbackground-color: var(--card-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t#player-playlist:not(.watch-queue-nav) .playlist-videos-list>li.currently-playing {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t#player-playlist .playlist-video h4 {\n\t\tcolor: var(--main-text-color);\n\t\tbackground-color: transparent\n\t}\n\t#player-playlist .video-uploader-byline {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.comment-simplebox-arrow,\n\t.sharing-balloon::after,\n\t.sharing-balloon::before {\n\t\tdisplay: none\n\t}\n\t.comment-simplebox-renderer-collapsed-content,\n\t.sharing-balloon {\n\t\tborder: 1px solid var(--menu-border-color);\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.comment-simplebox {\n\t\tbackground-color: transparent\n\t}\n\t.comment-simplebox-frame {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--input-box-bg-color)\n\t}\n\t.comment-simplebox-prompt,\n\t.comment-simplebox-text {\n\t\tcolor: var(--main-text-color);\n\t\tbackground-color: transparent\n\t}\n\t.comment-simplebox-renderer {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.comment-renderer-header .comment-renderer-linked-comment {\n\t\tbackground: var(--sep-line-color);\n\t\tborder-color: var(--sep-line-color);\n\t\tcolor: var(--main-text-color);\n\t\tpadding: .2em 1em\n\t}\n\t.sprite-like[aria-checked=\"true\"]::before {\n\t\tfilter: hue-rotate(0deg);\n\t}\n\t.sprite-like[aria-checked=\"true\"]:hover::before {\n\t\tfilter: hue-rotate(0deg) brightness(1.35);\n\t}\n\n\t.sprite-dislike[aria-checked=\"true\"]::before {\n\t\tfilter: hue-rotate(140deg);\n\t}\n\t.sprite-dislike[aria-checked=\"true\"]:hover::before {\n\t\tfilter: hue-rotate(140deg) brightness(1.35);\n\t}\n\t#footer .yt-uix-button-icon {\n\t\tfilter: invert(100%);\n\t\topacity: .5\n\t}\n\t#yt-picker-country-footer,\n\t#yt-picker-language-footer,\n\t#yt-picker-safetymode-footer {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#footer .yt-close-img {\n\t\tfilter: invert(100%);\n\t\topacity: 1\n\t}\n\t.yt-default h1,\n\t.yt-default h2,\n\t.yt-default h3,\n\t.yt-default h4,\n\t.yt-default h5,\n\t.yt-default h6,\n\t.yt-picker-region-name,\n\th1.yt,\n\th2.yt,\n\th3.yt,\n\th4.yt,\n\th5.yt,\n\th6.yt {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#footer-links-secondary .copyright,\n\t#footer-links-secondary a,\n\t.yt-default .yt-notes,\n\tp.yt-notes {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#dashboard-header h2 a:hover,\n\t#footer-links-primary a:hover,\n\t.yt-picker-content strong,\n\t.yt-picker-content strong .yt-picker-region-name {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t#footer-links-secondary a:hover,\n\t.account-header h1,\n\th3.account-section-header {\n\t\tcolor: var(--link-color)\n\t}\n\t#footer-main,\n\t#safety-form p.safety-submit,\n\t.yt-picker-header,\n\t.yt-picker-hr {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#creator-sidebar .creator-sidebar-section a:hover {\n\t\tbackground: var(--card-dark-bg-color);\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.account-container {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#creator-sidebar .creator-sidebar-section a,\n\t#creator-sidebar h3,\n\t#creator-sidebar h3 a,\n\t#safety-form,\n\t.account-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.setting-reminder {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#dashboard-header-stats li,\n\t.add-widget-menu-content li,\n\t.yt-horizontal-rule {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.yt-commentbox-text {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.yt-commentbox-text,\n\t.yt-uix-form-input-select-content,\n\t.yt-uix-form-input-select-element {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\ttext-shadow: none\n\t}\n\t.social-connector {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.howto-promo-container {\n\t\tbackground-image: none\n\t}\n\t.howto-circle {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder: 1px solid var(--menu-border-color)\n\t}\n\t.remote-icon {\n\t\tfilter: invert(92%) brightness(200%)\n\t}\n\t.yt-uix-form-input-select,\n\t.yt-uix-form-input-text,\n\t.yt-uix-form-input-textarea {\n\t\tbackground: var(--input-box-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#creator-sidebar .creator-sidebar-branding h1,\n\t#dashboard-header h2 a,\n\t.add-widget-menu-content h3,\n\t.dashboard-widget-header h2 a,\n\t.dashboard-widget-header:hover h2 a {\n\t\tcolor: var(--link-color)\n\t}\n\t#dashboard-header .add-widget-button-label,\n\t#dashboard-header .dashboard-stat-name,\n\t#dashboard-header .dashboard-stat-value,\n\t#dashboard-header h2,\n\t#dashboard-header h3 {\n\t\ttext-shadow: none\n\t}\n\t.HPHGCHB-c-b {\n\t\tbackground: var(--menu-light-hover-bg-color)\n\t}\n\t.HPHGCHB-c-e {\n\t\tbox-shadow: 0 2px 8px #111\n\t}\n\t.dashboard-widget .dashboard-widget-config,\n\t.dashboard-widget .dashboard-widget-content,\n\t.dashboard-widget.notification,\n\t.yt-form-input-select-container select {\n\t\tbackground-color: var(--card-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.dashboard-widget .dashboard-widget-config .dashboard-widget-header,\n\t.dashboard-widget-header:hover,\n\t.dashboard-widget.yt-uix-dragdrop-cursor-follower .dashboard-widget-header,\n\t.dashboard-widget.yt-uix-dragdrop-dragged-item .dashboard-widget-header {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.dashboard-widget-header:hover .dashboard-widget-overlay-icon,\n\t.dashboard-widget.yt-uix-dragdrop-cursor-follower .dashboard-widget-display-title,\n\t.dashboard-widget.yt-uix-dragdrop-cursor-follower .dashboard-widget-header .dashboard-widget-header-controls,\n\t.dashboard-widget.yt-uix-dragdrop-dragged-item .dashboard-widget-display-title,\n\t.dashboard-widget.yt-uix-dragdrop-dragged-item .dashboard-widget-header .dashboard-widget-header-controls,\n\t.dashboard-widget:hover .dashboard-widget-display-title {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.yt-uix-button-icon-dashboard-widget-config,\n\t.yt-uix-button-icon-dashboard-widget-remove {\n\t\tfilter: invert(100%) brightness(200%)\n\t}\n\t#dashboard-header .dashboard-stat-value {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#dashboard-header .add-widget-button-label,\n\t#dashboard-header .dashboard-stat-name {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.add-widget-button {\n\t\tbackground: no-repeat url(http://s.ytimg.com/yts/imgbin/www-videomanager-2x-vflI4gnrL.png) -26px -631px;\n\t\tbackground-size: 70px 705px;\n\t\tfilter: brightness(150%)\n\t}\n\t.add-widget-button:focus,\n\t.add-widget-button:hover {\n\t\tbackground: no-repeat url(http://s.ytimg.com/yts/imgbin/www-videomanager-2x-vflI4gnrL.png) 0 -665px;\n\t\tbackground-size: 70px 705px;\n\t\tfilter: invert(.7)\n\t}\n\t.add-widget-menu-content.widget-limit .add-widget-menu-item:hover,\n\t.add-widget-menu-item,\n\t.add-widget-menu-item.added:hover {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#annotator-select-menu tr.yt-uix-button-menu-item:hover,\n\t.add-widget-menu-item:hover .add-widget-menu-item-contents {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t#creator-sidebar .studio-icon {\n\t\tfilter: invert(1)\n\t}\n\t#creator-sidebar .studio-icon.selected,\n\t#creator-sidebar a:hover .studio-icon.creator-sidebar-dashboard.selected {\n\t\tfilter: none\n\t}\n\t.dashboard-widget-todos .todo-item {\n\t\tborder: 1px solid transparent\n\t}\n\t.dashboard-widget-footer .dashboard-widget-view-all-link:hover,\n\t.dashboard-widget-todos .todo-item:hover {\n\t\tbackground-color: var(--card-hover-bg-color)\n\t}\n\t#vm-myvideos-search-box,\n\t#vm-playlists-search-box,\n\t#vm-tags-search-box,\n\t.dashboard-widget-todos .todo-description {\n\t\tborder-color: var(--card-border-color)\n\t}\n\t#creator-subheader h2,\n\t.dashboard-widget-footer .dashboard-widget-view-all-link,\n\t.yt-creator-notifications .yt-creator-notifications-header h2 {\n\t\tcolor: var(--link-color)\n\t}\n\t#advanced-search-button-menu,\n\t.analytics-sparkline-card .infos .title,\n\t.dashboard-widget-comments .comment-comment,\n\t.yt-creator-notifications .yt-creator-tip-list tr {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.analytics-sparkline-card:hover,\n\t.vm-list-view .vm-video-list .vm-video-item.selected {\n\t\tbackground: var(--card-hover-bg-color)\n\t}\n\t.analytics-sparkline-card .infos .total {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.video-list-item a:hover {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.yt-creator-notifications .yt-creator-tip-list tr {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.yt-creator-notifications .yt-creator-tip-list .inactive {\n\t\tbackground: var(--card-dark-bg-color)\n\t}\n\t.advanced-search-footer {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#non-appbar-vm-video-actions-bar,\n\t#non-appbar-vm-video-actions-bar .vm-video-actions-bar,\n\t#vm-pagination {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.yt-ui-menu-content .yt-ui-menu-item.menu-subheading,\n\t.yt-ui-menu-content .yt-ui-menu-item.menu-subheading-notice {\n\t\tbackground: var(--card-bg-color);\n\t\tborder-color: var(--menu-border-color);\n\t\tborder-bottom: 1px solid var(--menu-border-color);\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.vm-list-view .vm-video-list .vm-video-item,\n\t.vm-list-view .vm-video-metrics a:hover {\n\t\tbackground: 0 0\n\t}\n\t.vm-list-view .vm-video-list .vm-video-item:hover {\n\t\tbackground: var(--card-light-hover-bg-color)\n\t}\n\t#non-appbar-vm-video-actions-bar .vm-video-actions-inner #vm-view-filter-label,\n\t.vm-copyright-filter-wrapper {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#non-appbar-vm-video-actions-bar .vm-video-actions-inner,\n\t.menu-item-top-divider {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.vm-list-view .vm-video-item-content-horizontal-divider {\n\t\tbackground: var(--sep-line-color)\n\t}\n\t#creator-editor-container {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#inline-editor-main,\n\t.metadata-container,\n\t.metadata-editor-container .video-settings-form {\n\t\tbackground: 0 0\n\t}\n\t.creator-editor-nav-tabs li a,\n\t.creator-editor-nav-tabs li>span,\n\t.tabs .tab-header a:focus,\n\t.tabs .tab-header a:hover,\n\t.tabs .tab-header.selected a,\n\t.tabs .tab-header:hover a {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#add-captions-section,\n\t#annotator-add-div,\n\t#annotator-select-div,\n\t#annotator-select-menu .yt-uix-button-menu-item td,\n\t#audio-ui-pagefold,\n\t#audio-ui-wfe .audio-ui-wfe-section,\n\t#audio-ui-wfe table,\n\t#audio-ui-wfe-nonmuting .audio-ui-wfe-rowgroup,\n\t#bottom-notes-section,\n\t#enhance-footer,\n\t#event-line-editor,\n\t#video-settings-section,\n\t.annotation-details-container li.annotation-time-pair,\n\t.annotation-link,\n\t.blur-effect-entry,\n\t.copynotice-claim-details-table tr,\n\t.creator-editor-content #inline-editor-header,\n\t.creator-editor-header,\n\t.creator-editor-nav,\n\t.metadata-editor-container .subnav,\n\t.tab-container,\n\t.timed-event-line,\n\t.translation-editor-header .translation-editor-column-divider,\n\t.translation-editor-header .translation-editor-column-half {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.yt-uix-card-body-arrow-vertical {\n\t\tborder-top-color: var(--menu-bg-color)\n\t}\n\t#player-and-info-pane #video-info dd,\n\t.blur-effect-entry .blur-effect-title,\n\t.copynotice-claim-info,\n\t.copynotice-top-section,\n\t.enhance-effect .property-title,\n\t.enhance-effect .slider-readout,\n\t.menu-tab.selected,\n\t.menu-tab:hover,\n\t.metadata-container h3,\n\t.single-field,\n\t.video-info-text,\n\t.yt-alert-naked .yt-alert-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.blur-effect-entry .blur-effect-explanation,\n\t.blur-effect-footnote {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.video-settings-tag-chips-container {\n\t\tbackground: var(--card-dark-bg-color);\n\t\tborder-color: var(--card-border-color)\n\t}\n\t.yt-chip {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-border-color);\n\t\tbox-shadow: none\n\t}\n\t.translation-editor-original-input,\n\t.translation-editor-original-input:focus,\n\t.translation-editor-original-input:hover,\n\t.video-settings-add-tag {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tborder: 1px solid var(--menu-border-color)!important;\n\t\tcolor: var(--main-text-color)\n\t}\n\t#annotator-select-menu tr.yt-uix-button-menu-item,\n\t#featured-tracks-header {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t#audio-ui {\n\t\tcolor: var(--link-color)\n\t}\n\t#audio-ui-featured-table,\n\t#featured-tracks-header {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.audio-ui-featured-row {\n\t\tbackground-color: var(--card-dark-bg-color);\n\t\tborder-color: var(--card-border-color);\n\t\tbox-shadow: none;\n\t\tcolor: var(--main-text-color)\n\t}\n\t#audio-ui-search-input-field {\n\t\tbackground-color: transparent;\n\t\tborder: none\n\t}\n\t.searchfield input {\n\t\tborder-color: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.searchfield input:focus {\n\t\tborder-color: var(--menu-light-bg-color)\n\t}\n\t#annotator-div {\n\t\tbackground: var(--card-dark-bg-color);\n\t\tborder-color: transparent\n\t}\n\t.time-field-nudge-container .time-field-nudge-down,\n\t.time-field-nudge-container .time-field-nudge-up {\n\t\tbackground-image: none\n\t}\n\t.annotator-clickcard-item .annotator-clickcard-title {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.annotator-clickcard-item .annotator-clickcard-subtitle {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.annotator-overlay-content,\n\t.yt-video-picker-scroll-container {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.annotator-clickcard-item .annotator-clickcard-right .yt-uix-clickcard-close {\n\t\tfilter: invert(.05)\n\t}\n\t.multitrack-timeline {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.timeline-row {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.timeline-ruler .hline,\n\t.timeline-ruler .mtick,\n\t.timeline-ruler .stick {\n\t\tbackground-color: var(--main-text-color)\n\t}\n\t.timedtext-content {\n\t\tbackground-color: transparent\n\t}\n\t#empty-editor-placeholder,\n\t#empty-editor-placeholder h3,\n\t#video-settings-section,\n\t.auto-pause-checkbox-section,\n\t.timeline-ruler .rulabel {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.waveform-player,\n\t.zoom-slider {\n\t\tbackground-color: transparent\n\t}\n\t.timed-event-line.timed-event-line-focused {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.timed-event-line:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.event-text:hover,\n\t.event-time-field:hover {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.zoom-slider {\n\t\tfilter: invert(.95)\n\t}\n\t.live-dashboard .player-controls-buttons {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.live-dashboard-status-bar {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t#verify-phone-page,\n\t.live-chat-widget #comments-scroller,\n\t.live-dashboard .checklist-item,\n\t.live-dashboard .checklist-remove-container,\n\t.live-dashboard-status-bar,\n\t.live-dashboard-status-bar-container {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.live-chat-widget .byline a,\n\t.live-dashboard .more-actions-buttons a,\n\t.live-dashboard .strong-text,\n\t.yt-card .yt-uix-button-expander:hover {\n\t\tcolor: var(--link-color)\n\t}\n\t.live-chat-widget .byline,\n\t.live-dashboard .checklist-item,\n\t.live-dashboard .yt-uix-tabs .yt-uix-button-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.live-chat-widget .comments-textarea-label {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#player .player-dragdrop-handle-container .yt-uix-dragdrop-drag-handle,\n\t.live-dashboard .yt-uix-dragdrop-drag-handle {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder: 1px solid var(--menu-border-color)\n\t}\n\t.yt-uix-button-icon.yt-uix-button-icon-settings.yt-sprite {\n\t\tfilter: invert(100%)\n\t}\n\t.yt-help-icon.yt-sprite {\n\t\tfilter: invert(100%)!important\n\t}\n\t.live-rtd-info-chart-group {\n\t\tfilter: invert(.9) saturate(0);\n\t\tmargin: 1em 0\n\t}\n\t.live-comments-emoji-picker-tab-row {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.gwt-viz-container text,\n\t.live-comments-emoji-picker-tab-cell {\n\t\tfilter: invert(1)\n\t}\n\t.live-chat-page {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.live-chat-widget .comment {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.live-chat-widget .comment.alternate-row {\n\t\tbackground-color: var(--card-dark-bg-color)\n\t}\n\t.live-chat-widget .comment-text {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.stream-health-item {\n\t\tbackground-color: transparent\n\t}\n\t.live-welcome-intro {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.live-welcome-features .yt-sprite {\n\t\tfilter: invert(.87)\n\t}\n\t.caption-queue .contribution-title a,\n\t.comments .comment-footer-action,\n\t.comments .comment-header .user-name,\n\t.comments .thumb-title,\n\t.subscribers-table .description-text a {\n\t\tcolor: var(--link-color)\n\t}\n\t.comments .comment-entry:hover .thumb-title,\n\t.comments .comment-entry:hover .vis-inspect-link,\n\t.subscribers-table .description-text a:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.comments .channel-owner .comment-header .user-name {\n\t\tbackground-color: transparent;\n\t\tfont-weight: 700\n\t}\n\t.comments .feedback-banner,\n\t.feedback-banner {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.tabbed-page .tabs-wrapper {\n\t\tborder-left: none\n\t}\n\t.tabbed-page .tab,\n\t.tabbed-page .tab.active {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.tabbed-page .tab {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.tabbed-page .tab.active {\n\t\tborder-bottom-color: var(--menu-border-color);\n\t\tborder-left-color: var(--menu-border-color);\n\t\tborder-right-color: var(--menu-border-color)\n\t}\n\t.tabbed-page .tab:hover,\n\t.video-dds .entry:hover .highlight {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.caption-queue td,\n\t.caption-queue th,\n\t.subscribers-table .subscribers-table-header,\n\t.subscribers-table td,\n\t.tabbed-page .options-bar,\n\t.tabbed-page .tabs-area {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.video-dds,\n\t.video-dds.open,\n\t.video-dds:hover {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.video-dds .list,\n\t.video-dds .topline {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.video-dds.open .topline {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.video-dds .list {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.video-dds .entry:hover .highlight {\n\t\tcolor: var(--link-color)\n\t}\n\t.video-dds .highlight {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.comments .comment-item:hover .mod-buttonbar,\n\t.comments .comment-item:hover .mod-buttonbar .mod-button {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.commenthub .comments .mod-buttonbar .mod-button-content:hover {\n\t\tbackground: #ccccc6\n\t}\n\t.comments .mod-list,\n\t.comments .mod-list-button {\n\t\tbackground-color: #ccccc4\n\t}\n\t.comments .paginator,\n\t.comments .paginator:hover {\n\t\tbackground-image: none;\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.comments .paginator:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.caption-queue,\n\t.comments .paginator,\n\t.subscribers-table .subscribed-since,\n\t.subscribers-table .subscribers-table-header,\n\t.tabbed-page .tab.active a {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-P-g h2 a:hover,\n\t.HPHGCHB-R-g h2 a:hover,\n\t.caption-queue .contribution-title a:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.waveform-container,\n\t.waveform-slider-container,\n\t.zoom-icon-container,\n\t.zoom-slider-container {\n\t\tfilter: invert(.92) saturate(0)\n\t}\n\t.captions-credits-opt-in-box {\n\t\tbackground: var(--card-bg-color);\n\t\tborder-color: var(--card-border-color)\n\t}\n\t#comment-settings .comment-settings-section {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t#comment-settings .comment-settings-header {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t#comment-settings .comment-settings-label,\n\t#comment-settings .comment-settings-title,\n\t.account-feature-v2-grid-items .account-features-v2-grid-item-description a {\n\t\tcolor: var(--link-color)\n\t}\n\t#comment-settings .comment-settings-control-info,\n\t#comment-settings .comment-settings-subtitle,\n\t#comment-settings label {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.acl-target-list-container .none-defined-text {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.acl-target-list-container[data-which=moderator] {\n\t\tborder-color: var(--menu-border-color);\n\t\tbackground-color: var(--input-box-bg-color)\n\t}\n\t.account-features-v2-content,\n\t.acl-target-list-container .target-search,\n\t.channel-watermark-uploader-content .upload-guidelines {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#creator-subheader,\n\t.HPHGCHB-T-e,\n\t.HPHGCHB-T-n tr,\n\t.HPHGCHB-q-h,\n\t.HPHGCHB-t-a,\n\t.account-content .account-section.account-bordered-section,\n\t.account-feature-v2-grid-items .account-features-v2-grid-item-title,\n\t.account-status-scales,\n\t.account-status-v2 {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.HPHGCHB-r-h {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-cb-e.HPHGCHB-a-a {\n\t\tborder-color: var(--sep-line-color)!important\n\t}\n\t.HPHGCHB-R-C .HPHGCHB-R-x,\n\t.HPHGCHB-R-c,\n\t.HPHGCHB-R-x,\n\t.HPHGCHB-R-z,\n\t.account-feature-v2-grid-items li {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-T-n td:nth-child(3):hover,\n\t.HPHGCHB-T-n td:nth-child(4):hover {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.featured-programming-editor .overview {\n\t\tborder-color: var(--card-border-color)\n\t}\n\t#creator-subheader,\n\t.HPHGCHB-N-c,\n\t.HPHGCHB-R-D,\n\t.HPHGCHB-R-h,\n\t.HPHGCHB-b-d,\n\t.HPHGCHB-b-l,\n\t.channel-watermark-uploader-content .watermark-example-container,\n\t.featured-programming-editor .overview {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.HPHGCHB-H-a a,\n\t.HPHGCHB-P-g h2 a,\n\t.HPHGCHB-R-g h2 a,\n\t.HPHGCHB-R-s .HPHGCHB-R-B,\n\t.HPHGCHB-T-e,\n\t.HPHGCHB-T-s .HPHGCHB-T-B,\n\t.HPHGCHB-T-v .HPHGCHB-T-B,\n\t.HPHGCHB-d-a .HPHGCHB-d-b,\n\t.HPHGCHB-pb-d,\n\t.gwt-Label.HPHGCHB-nb-A.HPHGCHB-nb-j.HPHGCHB-nb-C.HPHGCHB-nb-B {\n\t\tcolor: var(--link-color)\n\t}\n\t.HPHGCHB-T-b,\n\t.HPHGCHB-T-l .HPHGCHB-f-c:hover .HPHGCHB-f-f,\n\t.HPHGCHB-T-l .HPHGCHB-f-h .HPHGCHB-f-f,\n\t.HPHGCHB-T-w,\n\t.HPHGCHB-b-c,\n\t.HPHGCHB-d-a .HPHGCHB-d-b {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-R-b,\n\t.HPHGCHB-R-e h3,\n\t.HPHGCHB-R-j,\n\t.HPHGCHB-R-w {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.HPHGCHB-P-j {\n\t\topacity: 1\n\t}\n\t.HPHGCHB-P-g h2 .HPHGCHB-P-j {\n\t\tfilter: saturate(0) invert(100%) brightness(300%)\n\t}\n\t.HPHGCHB-R-d li,\n\t.HPHGCHB-R-e,\n\t.HPHGCHB-R-l .HPHGCHB-f-c:hover .HPHGCHB-f-f,\n\t.HPHGCHB-R-l .HPHGCHB-f-h .HPHGCHB-f-f,\n\t.HPHGCHB-g-f,\n\t.HPHGCHB-r-f {\n\t\tcolor: var(--main-text-color);\n\t\ttext-shadow: none\n\t}\n\t.HPHGCHB-g-f .HPHGCHB-g-c,\n\t.HPHGCHB-g-w .HPHGCHB-g-c {\n\t\tborder-top-color: var(--main-text-color)\n\t}\n\t.HPHGCHB-g-q,\n\t.HPHGCHB-g-q:hover {\n\t\tborder-width: 1px;\n\t\tborder-style: solid\n\t}\n\t.HPHGCHB-g-f:focus,\n\t.HPHGCHB-g-v:focus,\n\t.HPHGCHB-g-w:focus {\n\t\tbox-shadow: none\n\t}\n\t.HPHGCHB-H-g .HPHGCHB-H-d.HPHGCHB-H-e,\n\tinput.HPHGCHB-l-f {\n\t\tcolor: var(--main-text-color)\n\t}\n\tinput.HPHGCHB-l-f {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-N-b,\n\t.HPHGCHB-N-c,\n\t.HPHGCHB-N-g,\n\t.HPHGCHB-N-h,\n\t.HPHGCHB-R-m,\n\t.HPHGCHB-T-d,\n\t.HPHGCHB-T-k tr,\n\t.HPHGCHB-Z-a:first-child>ul {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-ab-e {\n\t\tborder-color: var(--menu-light-border-color)!important\n\t}\n\t.HPHGCHB-K-h {\n\t\tcolor: var(--main-text-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-K-h,\n\t.HPHGCHB-K-h .datePickerMonthSelector {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-K-h .datePickerWeekdayLabel,\n\t.HPHGCHB-K-h .datePickerWeekendLabel {\n\t\tbackground-color: var(--menu-hover-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-K-h .datePickerNextButton,\n\t.HPHGCHB-K-h .datePickerPreviousButton {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-K-h .datePickerDayIsWeekend {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.HPHGCHB-K-h .datePickerDayIsValue {\n\t\tbox-shadow: inset 0 0 .1em var(--main-text-color);\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t.HPHGCHB-K-h .datePickerDay:hover,\n\t.HPHGCHB-K-h .datePickerWeekdayLabel:hover,\n\t.HPHGCHB-K-h .datePickerWeekendLabel:hover {\n\t\tbackground-color: var(--menu-light-hover-bg-color);\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.HPHGCHB-K-c,\n\t.HPHGCHB-W-u,\n\t.HPHGCHB-kb-b,\n\t.HPHGCHB-r-b .HPHGCHB-r-g,\n\t.HPHGCHB-r-b .HPHGCHB-r-g .HPHGCHB-g-f,\n\t.HPHGCHB-r-b .HPHGCHB-r-g .HPHGCHB-r-f {\n\t\tfilter: invert(100%)\n\t}\n\t.HPHGCHB-r-b .HPHGCHB-r-g.HPHGCHB-r-e {\n\t\tbackground-color: var(--menu-light-hover-bg-color);\n\t\tfilter: invert(0%)\n\t}\n\t.HPHGCHB-r-b .HPHGCHB-r-g.HPHGCHB-r-e a {\n\t\tcolor: #000\n\t}\n\t.HPHGCHB-b-s {\n\t\tmargin-top: 0\n\t}\n\t.HPHGCHB-b-s .HPHGCHB-a-a {\n\t\tpadding-top: 20px\n\t}\n\t.HPHGCHB-P-b {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-N-h,\n\t.HPHGCHB-T-D,\n\t.HPHGCHB-T-h {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-R-c:hover,\n\t.HPHGCHB-R-p:hover {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.HPHGCHB-T-C .HPHGCHB-T-x,\n\t.HPHGCHB-T-c,\n\t.HPHGCHB-T-m,\n\t.HPHGCHB-T-x,\n\t.HPHGCHB-T-z {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-f-a {\n\t\tbackground: 0 0\n\t}\n\t.HPHGCHB-kb-m,\n\t.HPHGCHB-kb-p {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-kb-e {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-kb-y,\n\t.HPHGCHB-kb-y tr {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-kb-r,\n\t.HPHGCHB-q-b:hover,\n\t.HPHGCHB-q-q:hover,\n\t.HPHGCHB-q-s:hover {\n\t\tbackground: var(--menu-hover-bg-color)\n\t}\n\t.HPHGCHB-f-i {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-q-b,\n\t.HPHGCHB-q-q {\n\t\tbackground: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.HPHGCHB-q-a,\n\t.HPHGCHB-q-h,\n\t.HPHGCHB-s-f {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-q-u:hover,\n\t.footer-secondary .footer-secondary-info a:hover,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #info.yt-creator-hub-card a:hover,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card .link.yt-creator-hub-card a:hover,\n\t.yt-creator-hub-event-0 a.yt-creator-hub-event:hover,\n\t.yt-creator-hub-social-nav-0 li.yt-creator-hub-social-nav:hover a {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.HPHGCHB-M-e {\n\t\tbackground: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-L-i,\n\t.HPHGCHB-L-j,\n\t.HPHGCHB-M-b {\n\t\tbackground: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.HPHGCHB-L-j.HPHGCHB-g-y,\n\t.HPHGCHB-L-j.HPHGCHB-g-y:hover,\n\t.HPHGCHB-L-j:hover,\n\t.HPHGCHB-eb-a {\n\t\tbackground: var(--menu-light-hover-bg-color)\n\t}\n\t.HPHGCHB-L-n {\n\t\tcolor: var(--link-color)\n\t}\n\t.HPHGCHB-L-p {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.HPHGCHB-M-a,\n\t.HPHGCHB-M-e,\n\t.HPHGCHB-W-c td,\n\t.HPHGCHB-W-c th,\n\t.HPHGCHB-W-o td,\n\t.HPHGCHB-W-o th,\n\t.HPHGCHB-eb-a,\n\t.HPHGCHB-eb-a li {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t#gwt-debug-date-range-slider,\n\t#gwt-debug-performanceChart {\n\t\tfilter: invert(.9)\n\t}\n\t.HPHGCHB-eb-a {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-eb-a li {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.HPHGCHB-eb-a li:hover {\n\t\tbackground-image: none;\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t.HPHGCHB-eb-a li.HPHGCHB-eb-b {\n\t\tbackground-color: var(--menu-light-active-bg-color)\n\t}\n\t.HPHGCHB-W-c,\n\t.HPHGCHB-W-o,\n\t.HPHGCHB-W-o tr:nth-child(2n) {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.HPHGCHB-W-H,\n\t.HPHGCHB-W-o .HPHGCHB-W-w td {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t#yt-editor-project-menu div.project-menu-item.selected,\n\t#yt-editor-project-menu div.project-menu-item:hover,\n\t.HPHGCHB-W-o tr:hover,\n\tpaper-item:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.HPHGCHB-W-o .HPHGCHB-W-H:hover,\n\t.track.expanded .audiolibrary-track-head .audiolibrary-column .popularity-bar,\n\t.track.loading .audiolibrary-track-head .audiolibrary-column .popularity-bar,\n\t.track:hover .audiolibrary-track-head .audiolibrary-column .popularity-bar {\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t#main-title,\n\t.HPHGCHB-W-F,\n\t.HPHGCHB-W-q .HPHGCHB-W-F,\n\tbutton.track-selection-menu-button {\n\t\tcolor: var(--link-color)\n\t}\n\t.HPHGCHB-W-g {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t.top-menu,\n\t.track-filter-selection-list .track-filter.all,\n\t.track-list li.track,\n\t.track-list li.track.expanded {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.track-list li.track {\n\t\tbackground-color: var(--card-dark-bg-color)\n\t}\n\t.track-list li.track.expanded,\n\t.track-list li.track:hover {\n\t\tbackground-color: var(--card-hover-bg-color)\n\t}\n\t.track-list li.track.loading {\n\t\tbackground-color: var(--card-light-hover-bg-color)\n\t}\n\t.audiolibrary-column-genre-and-mood a:hover,\n\t.audiolibrary-column-title,\n\t.audiolibrary-column-title-expand,\n\t.track.expanded .audiolibrary-track-head .audiolibrary-column,\n\t.track.loading .audiolibrary-track-head .audiolibrary-column,\n\t.track:hover .audiolibrary-track-head .audiolibrary-column {\n\t\tcolor: var(--link-color)\n\t}\n\t.audiolibrary-column-album,\n\t.audiolibrary-column-artist,\n\t.audiolibrary-column-duration,\n\t.audiolibrary-column-genre-and-mood a {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.asset-composition-section,\n\t.asset-sound-recording-section,\n\t.music-attribution-monetization-section,\n\t.music-attribution-no-monetization-section,\n\t.music-no-attribution-monetization-section,\n\t.music-no-attribution-no-monetization-section {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#video-title,\n\t.asset-monetization-header,\n\t.asset-monetization-list div,\n\t.asset-restrictions-header,\n\t.asset-restrictions-list div,\n\t.asset-stores-header,\n\t.asset-stores-list div,\n\t.drag-to-begin-audio-message p,\n\t.drag-to-begin-message p,\n\t.editor-slider .slider-readout,\n\t.editor-timeline .timeline-ruler .rulabel,\n\t.text-property-panel .property-title {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yt-editor-project-menu .project-menu-header {\n\t\tbackground-color: var(--menu-light-bg-color);\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t#video-title {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tbox-shadow: none;\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t#video-title:focus {\n\t\tcolor: var(--main-text-color);\n\t\toutline: 1px solid var(--menu-light-border-color)\n\t}\n\t.infobox-body {\n\t\tbackground: var(--menu-bg-color)\n\t}\n\t#storyboard {\n\t\tbackground-color: var(--menu-bg-color);\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.timeline-audio-clip .audio-overflow-mask {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t#advertising-note,\n\t#top-bar,\n\t.image-media #infobox-options-container,\n\t.video-media #infobox-options-container {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t.editor-timeline .timeline-ruler .hline,\n\t.editor-timeline .timeline-ruler .mtick .base,\n\t.editor-timeline .timeline-ruler .stick {\n\t\tbackground-color: var(--menu-light-border-color)\n\t}\n\t#mediapicker .video-original.selected .video-title,\n\t.dragging .video-title,\n\t.editor-thumb:hover .video-title,\n\t.media-list .editor-thumb .video-title {\n\t\tbackground: var(--menu-bg-color);\n\t\tcolor: var(--link-color);\n\t\topacity: .8\n\t}\n\t.editor-thumb-body,\n\t.editor-thumb-body:hover,\n\t.ghost {\n\t\toutline-color: var(--menu-light-border-color)\n\t}\n\t.editor-thumb-body {\n\t\tbackground-color: var(--menu-light-bg-color)\n\t}\n\t.editor-thumb-body:hover {\n\t\tbackground-color: var(--menu-light-hover-bg-color)\n\t}\n\t.mediapicker-audio.audio-track .audio-title,\n\t.mediapicker-audio.audio-track .editor-thumb-time {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.mediapicker-audio.audio-track .audio-artist,\n\t.mediapicker-audio.audio-track .audio-genre {\n\t\tcolor: var(--main-faded-text-color)\n\t}\n\t#audio-media-list .scroll-content .audio-original.selected,\n\t#audio-media-list .scroll-content .audio-original:hover {\n\t\tbox-shadow: 0 1px 0 0 var(--menu-light-border-color);\n\t\tborder-color: var(--menu-light-border-color);\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t#creator-sidebar>#creator-sidebar-section-id-dashboard.selected>h3 a,\n\t#creator-sidebar>#creator-sidebar-section-id-your-contributions.selected>h3 a {\n\t\tbackground-color: var(--menu-hover-bg-color);\n\t\tcolor: #cc181e\n\t}\n\t#yt-main-nav-container,\n\t.yt-nav-dark {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t#yt-microsite .yt-card-light .yt-card-title h2,\n\t#yt-microsite .yt-card-light h2.yt-card-title,\n\t#yt-microsite-features .yt-microsite-feature strong,\n\t#yt-microsite-features .yt-microsite-features strong,\n\t.footer-secondary a,\n\t.yt-testtube-card-light .yt-testtube-card-title,\n\t.yt-testtube-card-title {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-testtube-card-dark .yt-testtube-card-content,\n\t.yt-testtube-card-light .yt-testtube-card-content {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yt-main-nav .yt-nav-element.active,\n\t#yt-main-nav .yt-nav-element.yt-nav-navmenu-container.yt-collapsed.active-nav,\n\t#yt-main-nav .yt-nav-element:active,\n\t#yt-main-nav .yt-nav-element:hover,\n\t#yt-main-nav a.active,\n\t#yt-main-nav a:active,\n\t#yt-main-nav a:hover,\n\t#yt-main-nav>a.active,\n\t#yt-main-nav>a:active,\n\t#yt-main-nav>a:hover,\n\t.nav-container>a.active,\n\t.nav-container>a:active,\n\t.nav-container>a:hover,\n\t.yt-nav-navmenu-container.yt-expanded {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.page-header {\n\t\tbackground: var(--bg-color)\n\t}\n\t#yt-microsite h2,\n\t#yt-microsite h3,\n\t#yt-microsite h4,\n\t#yt-microsite h5,\n\t#yt-sidebar h2 a,\n\t#yts-nav ol li.top-level a,\n\t.yt-text h1,\n\t.yt-text h2,\n\t.yt-text h3,\n\th1.yt,\n\th2.yt,\n\th3.yt {\n\t\ttext-shadow: none;\n\t\tcolor: var(--link-color)\n\t}\n\t#yt-microsite .yt-card-dark .yt-card-text p,\n\t#yt-microsite .yt-card-light .yt-card-text,\n\t#yt-microsite .yt-card-light .yt-card-text .yt-policyandsafety-col,\n\t#yt-microsite .yt-card-light .yt-card-text .yt-policyandsafety-col p,\n\t#yt-microsite .yt-card-light .yt-card-text p,\n\t#yt-microsite .yt-policyandsafety-content-container p,\n\t#yt-microsite-features p,\n\t#yt-sidebar ul a,\n\t#yts-article,\n\t#yts-nav .indented .sub-level a,\n\t.yt-text ol,\n\t.yt-text ul,\n\tol.yt,\n\tul.yt {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#yts-nav .indented .sub-level a:hover {\n\t\tbackground: var(--menu-hover-bg-color);\n\t\tbackground-image: none\n\t}\n\t#yts-article #header,\n\t#yts-article .with-separator,\n\t#yts-nav,\n\t.header,\n\t.separator,\n\t.with-divider {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#yts-article::after,\n\t.yt-card-light,\n\t.yt-tile-default:hover,\n\t.yt-tile-static,\n\t.yt-tile-visible {\n\t\tbackground: var(--card-bg-color);\n\t\tborder-color: var(--card-light-bg-color);\n\t\tbox-shadow: none\n\t}\n\t.yt-sidebar-border,\n\thr.yt-advertise-sidebar-rule {\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#yt-sidebar li.selected a,\n\t.footer-secondary .footer-secondary-info a,\n\t.footer-secondary a {\n\t\tfont-weight: 400\n\t}\n\t.yt-cardified #page {\n\t\tbackground-color: var(--bg-color)\n\t}\n\t#yt-jobs-search-form .yt-jobs-searchbox {\n\t\tbackground-color: var(--input-box-bg-color);\n\t\tborder-color: var(--card-light-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.footer-secondary li,\n\t.yt-form-input-select-container {\n\t\ttext-shadow: none\n\t}\n\t.yt-form-input-select-container:hover {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.yt-form-input-select-value {\n\t\tcolor: var(--main-text-color)\n\t}\n\t#content.yt-creator-hub-page,\n\tbody:not([style-scope]):not(.style-scope) {\n\t\tbackground-color: var(--bg-color)!important\n\t}\n\t#yt-dev-nav-container,\n\t.yt-creator-hub-page-0 #masthead.yt-creator-hub-page {\n\t\tbackground: var(--card-dark-bg-color)\n\t}\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #info.yt-creator-hub-card p,\n\t.yt-creator-hub-page-0 #hamburger.yt-creator-hub-page {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-creator-hub-logo-0 {\n\t\tbackground-color: transparent\n\t}\n\t.iron-image-0 #img.iron-image {\n\t\tvisibility: hidden;\n\t\twidth: 72px;\n\t\theight: 32px\n\t}\n\t.yt-creator-hub-logo-0 #logo.yt-creator-hub-logo {\n\t\tbackground: no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAA8CAYAAACEhkNqAAAF/UlEQVR4nO2d3ZWCMBCFtwRLoARLSAlbAiVYAh1sCZZgCZRgCZRACXcfQMXJHfIDEdT5zuHBk8mQTK4kkBB+fgzDMAzDMHQAuPGoATST4w9Aqxw9tuUKXq4LnuvQ4FG/w9ax/ngwiOjyWi3sgg7DH6baug0+CgDHMbgG0GzdHh8BhquU8cwV1kXmg2GMYXDardvnbYF1fyHqrdvo7YB1gTF0W7fT24FhHGGEcaUawJHjOGNfKXl2Mxgcy2jEcS7VCB052XXG/k8poCrGVwO9G2R/iJRjDU7C52klv7mU6Q6hC6VS7FkXs6u+GsCZVWgFv2vghM893LlWS2PDgnVUTlYTW62L+Vu9YAvAMM3hsYLfNXDC5x6E5XiNlweMzYF5fS/0LmY33eDPjy6AUn4TccLnHoR1WhobLWBncjKve4u12xoteqX8JuKEzz0Iq1kaGy1gv8oJj8KuIzZl7ioyQfodYUN8NIk+UnAvPFcs5YYy4N3haZKujcV+ixUqA6RfARri49uEVW56B3w5yWWSzm6L+2IFygQmrByKCosNzPtJOhMe7QYxdK0NHgvR/kb/6kNUDF2YXKxWCxsXYaN16xoNKcuWwrrisdgwhQ75ixKLCuugnNSN6aygslFD6556mWeSl11pWmHDGjzGZo6GlIX5YHZthI3EKee6krQK4akpL98kf404gZXtecCvSg307uUwyXuMrATAn5F9s7DU9VHQx7ZAxI0ThgtGcN405GcR4OOoK3igLyJv6qRvJfJ/q7AcAvOs4H94ddqN5K8Q+NPH+soC+q06E009yZc6rgHEvw1fKixRfyoy8D+852fio4qs0x1WplVB/JWnmuRh841XDEI9gD9Y7cV5v1JY8MdR3pUIfmzYw2vZBuw8KtLf6iButv0q8rTEpp6kazcG1cTmW4XF6i0fTMtxlvdAE35Xx8qidofSdnVIJRgnkYcV2AkbdiV0k3QTlmJD/MScx3uEQMp7R9oWAeG14lWgUiyAzKebpJuwFBvix5vtID52KSxtjRbA+3eGS7GBCUu1IX5C6cBOhcUqe4P17wyXYqOc04TF/bD0VhysnWR570jbYkAf6HlrrxQ7l2KjBNiExf146TGQ8t7J8ZcFEtZeKWV1KTZKgL9BWOwZoAv48dJjIOW9k+MvCyW4dLJSKatLscH3CoudywX8eOkxkPLeyfGXhVJhE9azXRthI5FxWUVY8Fd9sKPTgiD9FUOpsAnr2a6NsJHIuKwlrEVIf8VQKmzCerZrI2wkMi4mLJiwpF0bYSORcSklrB4JOxJKf8VQKmzCerZrI2wkMi6lhJXygPR1S8yVCi8R1qvmCkstTWZ2bYSNRMYlR1hrT+m8bq8spcKasLqIAM7aIE5Y5wgb5meOJrLuzK4VNt6Ln8SPjEuOsFhZJB8hLFbgZpJeKRWaLm1mgrhO0uuYoCh+5mh+BMgTVuzV3Il0tkzpIGzkipOn1bujjVxlykTeKTHYrbCYbY9BDL+I2EgEuiBqxT8tE8q9sMq2HLhN1p+hr1mXOOV83Ux5ZGy8MRGeX2RpZXkCcXnd3htKcDVhpTamF0ASvFjYJT+7HKl1l3GIKIsL+SE+2FUtab8FpU5qDIqRGlzML7WRdOBru0OwK9+rhDV75zTmYb4kTqQ7BPYCBR9q9IjcjAXhxZtlNgVRCpP8r4WyL5Wg0wISyK91iUnrjghNZN0BpQEm5Wa+JE6k367UteJ77i43KK7Rf+i1PDfnY1WU4MZ0BzX4ILHHcFWbexv6AF8U7S14sWVCnMBvnPF4u+V2aPl7DN3SYTyPHD8yX5K5Hf0uGB8l4PFmeGwdfiflOoy/tXpIqkyZvB4Ml997ADPzVpnn3nr7xXdid9tQ7RbY5rYp7Gobqt0D2447ll1tQ7V7YB8QiMG6wRxgnzwJUW/dRm8J8vaU+BbsI01LgHWJDPus3BpgeHTRbduWu2H2WaKRAYau8YLtv+38anoMD0urrdvg48HjY1O3qaIG8x8a3wtsyXEL/4Pjtyf8u/q4g7EA6F9ImztMAIZhGKvyD107xTs8H96dAAAAAElFTkSuQmCC);\n\t\tbackground-size: 100%;\n\t\topacity: .65\n\t}\n\t.yt-creator-hub-logo .iron-image-0 #img.iron-image {\n\t\tvisibility: hidden\n\t}\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #title.yt-creator-hub-card h1,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #title.yt-creator-hub-card h2,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #title.yt-creator-hub-card h3,\n\t.yt-creator-hub-card-0.yt-benefit-layout #content.yt-creator-hub-card #title.yt-creator-hub-card h1,\n\t.yt-creator-hub-card-0.yt-home-layout #content.yt-creator-hub-card #title.yt-creator-hub-card h1,\n\t.yt-creator-hub-card-0.yt-home-layout #content.yt-creator-hub-card #title.yt-creator-hub-card h2,\n\t.yt-creator-hub-events-filter-0 #label-container.yt-creator-hub-events-filter h2#heading.yt-creator-hub-events-filter,\n\t.yt-creator-hub-logo-0 #link.yt-creator-hub-logo a,\n\t.yt-creator-hub-page-0 #menu.yt-creator-hub-page a {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-creator-hub-page-0 #nav.yt-creator-hub-page {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.yt-creator-hub-page-0 #nav.yt-creator-hub-page>div a.active,\n\t.yt-creator-hub-page-0 #nav.yt-creator-hub-page>div a:active,\n\t.yt-creator-hub-page-0 #nav.yt-creator-hub-page>div a:hover {\n\t\tcolor: var(--link-color);\n\t\tfont-weight: 400\n\t}\n\t.yt-creator-hub-drawer-0 #content.yt-creator-hub-drawer {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.yt-creator-hub-page-0 #menu.yt-creator-hub-page a.active,\n\t.yt-creator-hub-page-0 #menu.yt-creator-hub-page a:hover {\n\t\tbackground: var(--menu-hover-bg-color);\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.yt-creator-hub-card-0 {\n\t\tbackground-color: var(--light-bg-color)\n\t}\n\t.yt-creator-hub-spotlight-0,\n\t.yt-creator-hub-spotlights-0 {\n\t\tbackground: 0 0\n\t}\n\t.yt-card a.yt-action:not([style-scope]):not(.style-scope),\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card #info.yt-creator-hub-card a,\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card .link.yt-creator-hub-card a,\n\t.yt-creator-hub-event-0 a.yt-creator-hub-event,\n\t.yt-creator-hub-social-nav-0 a {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-creator-hub-card-0 #content.yt-creator-hub-card .link.yt-creator-hub-card a::after,\n\t.yt-creator-hub-event-0 a.yt-creator-hub-event::after {\n\t\tfilter: invert(60%)\n\t}\n\t.yt-creator-hub-dropdown-0 {\n\t\tbackground-color: transparent\n\t}\n\t#yt-microsite .yt-card-light,\n\t.yt-advertise-sidebar p,\n\t.yt-creator-hub-dropdown-0 #label.yt-creator-hub-dropdown,\n\t.yt-creator-hub-event-0 h2.yt-creator-hub-event {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.paper-input-container-0 .input-content.paper-input-container .paper-input-input,\n\t.paper-input-container-0 .input-content.paper-input-container input,\n\t.paper-input-container-0 .input-content.paper-input-container iron-autogrow-textarea,\n\t.paper-input-container-0 .input-content.paper-input-container textarea,\n\tpaper-item {\n\t\tcolor: var(--main-text-color);\n\t\tcursor: pointer\n\t}\n\t.paper-dropdown-menu,\n\t.paper-listbox-0,\n\t.paper-menu-button-0 .dropdown-content.paper-menu-button,\n\tmd-sidenav {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.paper-input-container-0 {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.paper-input-container-0 .unfocused-line.paper-input-container {\n\t\tbackground: var(--menu-border-color)\n\t}\n\t.yt-creator-hub-events-filter-0,\n\tmd-content.md-default-theme {\n\t\tbackground-color: transparent\n\t}\n\t.make-video-director-adwords-banner a.adwords-cta-banner,\n\t.make-video-grid-steps,\n\t.yt-creator-hub-event-0 .card.yt-creator-hub-event,\n\t.yt-dev-footer,\n\ta.adwords-cta-banner {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.yt-creator-hub-event-0 h1.yt-creator-hub-event {\n\t\tcolor: var(--link-color);\n\t\tborder-color: var(--sep-line-color)\n\t}\n\t#yt-dev-nav a.active,\n\t#yt-dev-nav a:active,\n\t#yt-dev-nav a:hover {\n\t\tbackground-color: var(--menu-hover-bg-color)\n\t}\n\t.yt-toggle-dev-demos-sidebar-button {\n\t\tbackground: var(--menu-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t#menu-arrow {\n\t\tfill: var(--main-text-color)\n\t}\n\t.yt-dev-demos-sidebar {\n\t\tbackground-color: var(--menu-bg-color)\n\t}\n\t.yt-dev-demos-sidebar-title,\n\t.yt-dev-demos-tab .yt-dev-demos-tab-text {\n\t\tcolor: var(--link-color)\n\t}\n\t#error-page-content p,\n\t.yt-dev-demos-sidebar-resources-title {\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-dev-demos-tab.yt-dev-demos-sidebar-tabs-highlighted,\n\t.yt-dev-demos-tab.yt-dev-demos-sidebar-tabs-highlighted:hover,\n\t.yt-dev-demos-tab:hover {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.yt-dev-demos-tab:hover {\n\t\tborder-color: var(--menu-light-border-color)\n\t}\n\t.yt-dev-demos-sidebar-resources-container,\n\t.yt-dev-demos-sidebar-tabs-container {\n\t\tborder-color: var(--sep-line-color);\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.yt-dev-showcase-external-link-msg-container:hover .yt-dev-showcase-external-link-img {\n\t\tfilter: saturate(0) brightness(250%)\n\t}\n\t#error-page-content p {\n\t\ttext-shadow: none\n\t}\n\t.sb-card-arrow {\n\t\tborder-bottom-color: var(--sep-line-color)\n\t}\n\t.sb-card-body-arrow {\n\t\tborder-bottom-color: var(--card-light-bg-color)\n\t}\n\t.sb-card-border {\n\t\tborder-color: var(--sep-line-color);\n\t\tbox-shadow: none;\n\t\tbackground: 0 0\n\t}\n\t.sb-on {\n\t\tbox-shadow: 0 2px 1px #1a1a1a\n\t}\n\t#chat-messages yt-live-chat-header-renderer {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\tiron-dropdown paper-menu#items {\n\t\tbackground: var(--card-light-bg-color)\n\t}\n\tiron-dropdown #items ytd-menu-service-item-renderer:hover,\n\tiron-dropdown #items a.ytd-menu-navigation-item-renderer:hover {\n\t\tbackground-color: var(--card-light-hover-bg-color)\n\t}\n\t.yt-live-chat-renderer-0 {\n\t\tbackground: var(--card-dark-bg-color)\n\t}\n\tiron-dropdown #items yt-formatted-string,\n\t#chat-messages yt-live-chat-header-renderer,\n\t#chat-messages iron-icon,\n\t.yt-live-chat-renderer-0 #message,\n\t.yt-live-chat-renderer-0 #deleted-state,\n\t.yt-live-chat-renderer-0 #label,\n\t.yt-live-chat-renderer-0 #input,\n\t.yt-live-chat-renderer-0 #count,\n\t.yt-live-chat-renderer-0,\n\t.yt-live-chat-text-message-renderer-0 #timestamp.yt-live-chat-text-message-renderer {\n\t\tcolor: var(--main-text-color)!important\n\t}\n\t.yt-live-chat-renderer-0 #author-name {\n\t\tcolor: var(--main-faded-text-color)!important\n\t}\n\t.yt-live-chat-renderer-0 #menu {\n\t\tbackground: transparent!important\n\t}\n\t.yt-live-chat-renderer-0 a {\n\t\tcolor: var(--link-color)\n\t}\n\t.yt-live-chat-renderer-0 a:hover {\n\t\tcolor: var(--link-hover-color)\n\t}\n\t.yt-live-chat-renderer-0 yt-formatted-string.yt-emoji-picker-category-renderer {\n\t\tbackground-color: var(--card-light-bg-color);\n\t\tcolor: var(--main-text-color)\n\t}\n\t.yt-live-chat-message-input-renderer-0,\n\t#watch-sidebar-live-chat,\n\t#watch-sidebar-live-chat .yt-uix-expander-collapsed {\n\t\tbackground: var(--card-bg-color)\n\t}\n\t.exp-searchbox-redesign #masthead-search {\n\t\tbackground-color: var(--card-dark-bg-color)\n\t}\n\t.exp-searchbox-redesign #masthead-search-terms input {\n\t\tpadding: 5px\n\t}\n\t.mc-actions,\n\t.mc-channel-footer,\n\t.mc-channel-item {\n\t\tbackground-color: var(--card-bg-color);\n\t\tborder-color: var(--card-light-bg-color);\n\t\tcolor: var(--main-text-color)!important\n\t}\n\t.mc-channel-title-content {\n\t\tcolor: var(--main-text-color)!important\n\t}\n\t.yt-card .yt-uix-tabs .yt-uix-button {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.monetize-with-ads.monetize-options-box {\n\t\tbackground-color: var(--card-bg-color);\n\t\tbox-shadow: none\n\t}\n\t.basic-info-tab .custom-thumb-area,\n\t.upload-thumb,\n\thr.metadata-separator-line {\n\t\tborder-bottom: none;\n\t\tborder-color: var(--card-light-bg-color)\n\t}\n\t.item-title,\n\t.monetize-with-ads.monetize-options-box h3 {\n\t\tcolor: var(--main-text-color)!important;\n\t\tfont-weight: 600\n\t}\n\t#channel-switcher-content,\n\t.yt-masthead-account-picker-option,\n\t.yt-masthead-picker-photo-wrapper {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.not-yt-legacy-css .yt-masthead-picker-photo-wrapper .yt-thumb,\n\t.yt-masthead-account-picker-option:hover,\n\t.yt-masthead-account-picker-option:hover .yt-masthead-picker-photo-wrapper,\n\t.yt-masthead-picker-body .yt-masthead-picker-photo-wrapper,\n\t.yt-uix-clickcard-card.yt-masthead-multilogin .yt-masthead-multilogin-users-header,\n\t.yt-uix-clickcard-card.yt-masthead-multilogin .yt-masthead-picker-header {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.yt-masthead-account-picker-option .yt-masthead-picker-name {\n\t\tcolor: var(--main-text-color)!important\n\t}\n\t.yt-uix-clickcard-card.yt-masthead-multilogin .yt-uix-card-body-arrow {\n\t\tborder-bottom-color: var(--card-light-bg-color)\n\t}\n\t.channel-switcher-button .yt-uix-button,\n\t.social-connector.connected,\n\t.ytp-ce-expanding-overlay-background {\n\t\tbackground-color: var(--card-light-bg-color)\n\t}\n\t.channel-switcher-button:hover .yt-uix-button {\n\t\tbackground-color: var(--card-bg-color)\n\t}\n\t.social-connector .connection-settings-container,\n\t.ytp-ce-channel-this .ytp-ce-channel-metadata {\n\t\tborder-color: var(--menu-border-color)\n\t}\n\t.watch-stage-mode #theater-background {\n\t\tdisplay: none\n\t}\n\t/* Dark subscribe button instead of YT red */\n\t/*\n\t.yt-uix-button-subscribe-branded, .yt-uix-button-subscribe-branded[disabled], .yt-uix-button-subscribe-branded[disabled]:hover, .yt-uix-button-subscribe-branded[disabled]:active, .yt-uix-button-subscribe-branded[disabled]:focus {\n\t\tfilter: saturate(0.075) hue-rotate(240deg);\n\t}\n\t*/", + "urls": [], + "urlPrefixes": [], + "domains": [ + "youtube.com" + ], + "regexps": [] + }, + { + "code": ".nbc {\n\t\tbackground-color: #2a2a2e;\n\t\tborder-color: #36363f\n\t}\n\t.nbc a {\n\t\tcolor: #aaaab6\n\t}\nbody {\n background: url(https://akamaru.de/wp-content/uploads/2017/01/shimakaze.png) no-repeat center center fixed;\n -webkit-background-size: cover;\n -moz-background-size: cover;\n -o-background-size: cover;\n background-size: cover;\n}", + "urls": [], + "urlPrefixes": [], + "domains": [ + "apis.google.com" + ], + "regexps": [] + }, + { + "code": ".Lub,\n\t.TC,\n\t.TR,\n\t.WR,\n\t.Xa,\n\t.bS,\n\t.l4a,\n\t.vy {\n\t\tbackground-color: transparent\n\t}\n\t.IO,\n\t.WdjWF,\n\t.WpuQke,\n\t.aac,\n\t.cp,\n\t.tQb,\n\t.ve,\n\t.wu,\n\t.xac {\n\t\tbackground-color: #2a2a2d\n\t}\n\t.fr,\n\t.qac {\n\t\tbackground-color: #222225\n\t}\n\t.Fr+.bj,\n\t.Fr>.Qp,\n\t.IO,\n\t.cp,\n\t.fr>.vt,\n\t.wu {\n\t\tborder-color: #3a3a40\n\t}\n\t.Kza,\n\t.MNn0h,\n\t.d-r,\n\t.f4a.tta,\n\t.nfe {\n\t\tbackground-color: #3a3a40\n\t}\n\t.d-A-u,\n\t.d-A-yb,\n\t.l4a:active .f4a {\n\t\tbackground-color: #4a4a50\n\t}\n\t.Gc.esw,\n\t.Id>.eswd {\n\t\tbackground-color: #3a3a40\n\t}\n\t.Id>.eswd {\n\t\tcolor: #ccc;\n\t\tborder-color: #4a4a50\n\t}\n\t.Gc.esw {\n\t\tborder-color: #46464f\n\t}\n\t.Dg:hover,\n\t.Gc.eswd:hover {\n\t\tborder-color: #52525f\n\t}\n\t.Iac,\n\t.Oub.d-r-Gk .d-A,\n\t.Ub,\n\t.bS,\n\t.cp,\n\t.d-A-u .d-A-B,\n\t.d-A-yb .d-A-B,\n\t.k4a,\n\t.ot-hashtag,\n\t.proflink,\n\t.sQb:link,\n\t.sQb:visited,\n\t.tta .Jub,\n\t.vy,\n\t.xQb {\n\t\tcolor: #ccc\n\t}\n\t.Aq,\n\t.MNn0h.RATVS .YGETNc,\n\t.MNn0h:hover .YGETNc,\n\t.SR,\n\t.YGETNc,\n\t.bhsVm,\n\t.dR.d-s,\n\t.dn,\n\t.nYXukb,\n\t.tf,\n\t.tta .Gub,\n\t.tta .Hub,\n\t.y9fV .YGETNc {\n\t\tcolor: #999\n\t}\n\t.MNn0h.RATVS,\n\t.MNn0h:hover {\n\t\tbackground-color: #3c3c42\n\t}\n\t.TR,\n\t.bxpCne,\n\t.eswd .sm,\n\t.gr,\n\t.hhb,\n\t.khb,\n\t.nV46l,\n\t.tubEcf,\n\t.vwa {\n\t\tfilter: invert(.7) brightness(3)\n\t}", + "urls": [], + "urlPrefixes": [ + "https://plus.google.com/_/notifications/frame?origin=https%3A%2F%2Fwww.youtube.com&source=yt" + ], + "domains": [], + "regexps": [] + } + ], + "url": "http://userstyles.org/styles/130610", + "updateUrl": "https://userstyles.org/styles/chrome/130610.json", + "md5Url": "https://update.userstyles.org/130610.md5", + "originalMd5": "7a78b5ef99141cd88cd04fc42d3a5934", + "name": "Youtube Umbra", + "enabled": false, + "id": 9, + "_id": "990ab9a4-99b4-4164-a413-19008babbff5", + "_rev": 1580730543288, + "_usw": {} + }, + { + "installDate": 1518796677333, + "name": "YT Background", + "sections": [ + { + "code": "html:not(#⁠)\n {\n background: url(https://img.ponywave.de/di/DIQT/jibril_wallpaper_by_tk77185_da5kxqc.png)fixed no-repeat #000!important;\n background-size: cover!important;\n }\n\n :not([class*=\"video-extras-sparkbar\"])\n {\n background-color: #00000061!important;\n }\n\n :not(#dismissable):not(#content):not(#container):not(#search-form)\n {\n background-color: rgba(0, 0, 0, 0)!important;\n }\n", + "regexps": [ + "https?://www.youtube.com?/(?!my_videos|ad_companion|subscribe_embed|account|yt|red).*" + ] + } + ], + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "id": 10, + "updateDate": 1565035216567, + "_id": "d0081f1b-a993-4299-a5a7-b53f09e2c4fa", + "_rev": 1580730543289, + "_usw": {} + }, + { + "installDate": 1514224592103, + "sections": [ + { + "code": "/* ++----------------------------------------------------------------------------------++ */\r\n/* || || */\r\n/* ||* Name : Plex Fixes || */\r\n/* || || */\r\n/* ||* Author : JourneyOver || */\r\n/* || || */\r\n/* ||* Created : 03 / 10 / 2017 || */\r\n/* || || */\r\n/* ||* Updated : 07 / 26 / 2018 || */\r\n/* || || */\r\n/* ||* Version : 1.0.6 || */\r\n/* || || */\r\n/* ||* Copyright : 2017-2018 || */\r\n/* || || */\r\n/* ++----------------------------------------------------------------------------------++ */", + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [ + "https?://app.plex.tv/.*", + "https?://.*:32400/.*", + "https://example.com/.*" + ] + }, + { + "code": "/*::::::::::::::::::::::::::::::::::::::::::::::::::::::: Pre 3.0.0 Fixes :::::::::::::::::::::::::::::::::::::::::::::::::::::::*/\r\n\r\na {\r\n user-select: all !important;\r\n}\r\n\r\n/*::: Main Background Image :::*/\r\n.background-container > [class^=\"FullPage-container-\"] div > div {\r\n background: rgba(31, 31, 31, 1);\r\n background-image: url(\"https://example.com/example.jpg\") !important;\r\n background-position: center center;\r\n background-size: 100% 100% !important;\r\n\r\n image-rendering: auto;\r\n}\r\n\r\n/*::: Image Container :::*/\r\ndiv[class^=\"PrePlayArtwork-imageContainer-\"],\r\ndiv[class*=\"3dXG6\"] {\r\n position: fixed !important;\r\n top: 0 !important;\r\n right: 0 !important;\r\n bottom: 0 !important;\r\n left: 0 !important;\r\n z-index: -1 !important;\r\n\r\n margin: 0 !important;\r\n width: 100% !important;\r\n height: 100% !important;\r\n\r\n background: #1f1f1f !important;\r\n\r\n -webkit-animation: plexbgfadein .6s ease-in;\r\n}\r\n\r\n/*::: Image :::*/\r\ndiv[class^=\"PrePlayArtwork-imageContainer-\"] > div,\r\ndiv[class*=\"3dXG6\"] > div {\r\n position: fixed !important;\r\n\r\n width: 100% !important;\r\n height: 100% !important;\r\n\r\n background-repeat: no-repeat !important;\r\n background-size: 100% 100% !important;\r\n\r\n opacity: .25 !important;\r\n}\r\n\r\n/*::: Resizing adds extra divs :::*/\r\ndiv[class^=\"PrePlayArtwork-imageContainer-\"] > div + div,\r\ndiv[class*=\"3dXG6\"] > div + div {\r\n display: none !important;\r\n}\r\n\r\n/*::: Item Thumbnail :::*/\r\ndiv[class^=\"PrePlayArtwork-imageContainer-\"] + div,\r\ndiv[class*=\"3dXG6\"] + div {\r\n position: fixed !important;\r\n top: 180px !important;\r\n\r\n background-position: center !important;\r\n}\r\n\r\n/*::: Background Fade-in :::*/\r\n@-webkit-keyframes plexbgfadein {\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n}\r\n\r\n/*::::::::::::::::::::::::::::::::::::::::::::::::::::::: NEW ADDITIONS :::::::::::::::::::::::::::::::::::::::::::::::::::::::*/\r\n\r\n/*::: Max Width Of Summary Container :::*/\r\ndiv[class^=\"PrePlaySummary-summary-\"],\r\ndiv[class*=\"1NL8g\"] {\r\n margin-bottom: 5px;\r\n max-width: none !important;\r\n\r\n font-size: 15px;\r\n}\r\n\r\n/*::: Make Sure Overflow Of Summary Container is always visible :::*/\r\ndiv[class^=\"PrePlaySummary-summary-\"] > div,\r\ndiv[class*=\"1NL8g\"] > div {\r\n overflow: visible !important;\r\n\r\n max-height: none !important;\r\n}\r\n\r\n/*::: Hide Read More Button Since It's Useless Now :::*/\r\n[class^=\"CollapsibleText-readMore-\"],\r\n[class*=\"1bRJm\"] {\r\n display: none !important;\r\n}\r\n\r\n/*::: Hide The Go Premium Button :::*/\r\n.plex-pass-label {\r\n display: none !important;\r\n}\r\n\r\n/*::: Plex Fixes Version :::*/\r\n[class=\"version-title\"]::after {\r\n white-space: pre;\r\n\r\n content: \"\\A Plex Fixes Ver. 1.0.3\";\r\n}\r\n\r\n/*::: Make Users pic square :::*/\r\n[class^=\"dropdown-poster-\"] > div,\r\n[class^=\"card-poster\"],\r\n[class^=\"AvatarImg-avatar-\"],\r\n[class*=\"3Op56\"] {\r\n border-radius: 0;\r\n}\r\n\r\n/*::: Move dashboard down slightly :::*/\r\n[class^=\"DashboardPage-dashboardPageContent-\"],\r\n[class*=\"2rN8X\"] {\r\n padding: 15px 55px 60px !important;\r\n}\r\n\r\n/*::: make continue watching title containers a bit smaller :::*/\r\ndiv[class*=\"MetadataPosterCell-continueWatchingTitleContainer-\"],\r\ndiv[class*=\"3yCAY\"] {\r\n padding: 4px 5px !important;\r\n\r\n background-color: rgba(0, 0, 0, .35);\r\n}\r\n\r\n/*::: shorten the padding on headers on dashboard to bring inline with being closer to continue watching title container :::*/\r\ndiv[class*=\"HubCellHeader-hubCellHeader-\"],\r\ndiv[class*=\"2pvYN\"] {\r\n padding: 4px 0 0 5px !important;\r\n}\r\n\r\n/*::: Make cast pictures square :::*/\r\na[class^=\"PrePlayCastCell-cardLink-\"],\r\ndiv[class^=\"TagPosterCard-card-\"],\r\na[class*=\"Tndv5\"],\r\ndiv[class*=\"RVD0D\"] {\r\n border-radius: 0 !important;\r\n}\r\n\r\n/*::: lower actors faces a bit :::*/\r\ndiv[class^=\"TagPosterCard-card-\"] [class^=\"PosterCardImg-imageContainer-\"] > div,\r\ndiv[class*=\"RVD0D\"] [class*=\"1Ar4M\"] > div {\r\n background-position: 100% 30% !important;\r\n}\r\n\r\n/*::: Pulsate Status :::*/ /*::: Credits to @IanCeling :::*/\r\n.nav-bar li.active i {\r\n opacity: .1;\r\n\r\n -webkit-animation: pulsate 5s ease-out;\r\n -webkit-animation-iteration-count: infinite;\r\n}\r\n\r\n@-webkit-keyframes pulsate {\r\n 0% {\r\n opacity: 1;\r\n\r\n -webkit-transform: scale(1.7, 1);\r\n }\r\n 50% {\r\n opacity: .3;\r\n\r\n -webkit-transform: scale(.85, .85);\r\n }\r\n 100% {\r\n opacity: 1;\r\n\r\n -webkit-transform: scale(1.7, 1);\r\n }\r\n}\r\n\r\n/*::: Hover effect on CAST cards :::*/\r\na[class^=\"PrePlayCastCell-cardLink-\"]:hover,\r\na[class^=\"PrePlayCastCell-cardLink-\"]:hover > div,\r\na[class*=\"Tndv5\"]:hover,\r\na[class*=\"Tndv5\"]:hover > div {\r\n transform: scale(1.07);\r\n}\r\n\r\n/*::: Expand 'Extras' display for movies (shows as grid instead of scroller) :::*/\r\n[class^=\"PrePlayExtrasList-extrasHubCell-\"] > div:nth-child(2),\r\n[class^=\"PrePlayExtrasList-extrasHubCell-\"] > div:nth-child(2) > [class^=\"Measure-container-\"] > div > div,\r\n[class*=\"2NcGK\"] > div:nth-child(2),\r\n[class*=\"2NcGK\"] > div:nth-child(2) > [class*=\"2XznZ\"] > div > div {\r\n width: auto !important;\r\n height: auto !important;\r\n}\r\n\r\n[class^=\"PrePlayExtrasList-extrasHubCell-\"] > div:nth-child(2) > [class^=\"Measure-container-\"] > div > div > div,\r\n[class*=\"2NcGK\"] > div:nth-child(2) > [class*=\"2XznZ\"] > div > div > div {\r\n display: inline-block;\r\n\r\n position: relative !important;\r\n\r\n margin: 10px;\r\n\r\n transform: translate3d(10px, 10px, 0) !important;\r\n}\r\n\r\n\r\n\r\n/*::: Posters Hover Effects :::*/ /*::: Credits to @IanCeling :::*/\r\n\r\n/* Poster Shadow */\r\ndiv[class^=\"MetadataPosterCard-cardContainer-\"],\r\ndiv[class*=\"2gRcQ\"] {\r\n box-shadow: 0 6px 26px -2px #000;\r\n\r\n transition: all 350ms;\r\n\r\n -webkit-perspective: 500px;\r\n perspective: 500px;\r\n}\r\n\r\n/* Poster Hover */\r\ndiv[class^=\"MetadataPosterCard-cardContainer-\"]:hover,\r\ndiv[class*=\"2gRcQ\"]:hover {\r\n box-shadow: 0 0 0 0 #000;\r\n\r\n transform: scale(.95) translateY(0);\r\n}\r\n\r\n/* Continue Watching poster hover */\r\ndiv[data-qa-id=\"hub--home.continue\"] div[class^=\"MetadataPosterCard-cardContainer-\"]:hover,\r\ndiv[data-qa-id=\"hub--home.continue\"] div[class*=\"2gRcQ\"]:hover {\r\n transform: scale(.97) translateY(-5px);\r\n}\r\n\r\n/*::: Photo Card Hover :::*/\r\n[class^=\"MetadataPhotoCell-photoContainer-\"],\r\n[class*=\"1HkmQ\"] {\r\n transition: all 350ms;\r\n\r\n -webkit-perspective: 500px;\r\n perspective: 500px;\r\n}\r\n\r\n[class^=\"MetadataPhotoCell-photoContainer-\"]:hover,\r\n[class*=\"1HkmQ\"] {\r\n transform: scale(.95) translateY(0);\r\n}\r\n\r\n[class^=\"MetadataPhotoCell-photo-\"]:hover,\r\n[class*=\"Po3Kx\"]:hover {\r\n box-shadow: none;\r\n\r\n transform: scale(1.02);\r\n}\r\n\r\n/*::: Poster Play Button :::*/\r\ndiv[class^=\"MetadataPosterCardOverlay-playCircle-\"],\r\ndiv[class*=\"M67q6\"] {\r\n border-radius: 50%;\r\n width: 50px;\r\n height: 50px;\r\n\r\n font-size: 18px;\r\n line-height: 48px;\r\n\r\n color: hsla(0, 0%, 100%, .7);\r\n\r\n box-shadow: 0 4px 16px -2px #000;\r\n\r\n transition: all 350ms;\r\n transform: translate(-50%, -50%) scale(.1);\r\n}\r\n\r\ndiv[class^=\"MetadataPosterCard-cardContainer-\"]:hover div[class^=\"MetadataPosterCardOverlay-playCircle-\"],\r\ndiv[class*=\"2gRcQ\"]:hover div[class*=\"M67q6\"] {\r\n transform: translate(-50%, -50%) scale(1.2);\r\n}\r\n\r\ndiv[class^=\"MetadataPosterCard-cardContainer-\"]:hover [class^=plex-icon-play-],\r\ndiv[class*=\"2gRcQ\"]:hover [class^=plex-icon-play-] {\r\n font-size: 30px;\r\n}\r\n\r\n/*::: kill container margin and add transition speed :::*/\r\n/*::: Contract the sidebar to save screen space [Expands back out on hovering over the sidebar] :::*/\r\n.page-container {\r\n margin-left: 0 !important;\r\n}\r\n\r\ndiv[role=navigation] div a {\r\n overflow: visible;\r\n}\r\n\r\ndiv[role=navigation] div {\r\n padding-right: 0;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-] {\r\n width: 55px !important;\r\n max-width: 55px !important;\r\n\r\n transition: all .5s ease !important;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-]:hover {\r\n width: 240px !important;\r\n max-width: 240px !important;\r\n\r\n transition: all 1.5s ease !important;\r\n}\r\n\r\n[class^=SidebarLink-title],\r\n[class^=SidebarList-sidebarListHeader],\r\n[class^=SidebarServerLibraries-librariesTitle],\r\nbutton[data-qa-id=serverMenuButton] div span,\r\ndiv[role=navigation] div a div:nth-child(2),\r\ndiv[role=navigation] div[role=header] {\r\n font-size: 0 !important;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarLink-title],\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarList-sidebarListHeader],\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarServerLibraries-librariesTitle],\r\n[class^=SidebarContainer-sidebarContainer-]:hover div[role=navigation] div a div:nth-child(2),\r\n[class^=SidebarContainer-sidebarContainer-]:hover div[role=navigation] div[role=header] {\r\n font-size: 12px !important;\r\n\r\n transition: all 2s ease !important;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-]:hover button[data-qa-id=serverMenuButton] div span {\r\n font-size: 14px !important;\r\n\r\n transition: all 2s ease !important;\r\n}\r\n\r\n[class^=DisclosureArrow-disclosureArrow-],\r\n[class^=SidebarLibrariesActions-actions],\r\n[class^=SidebarLink-children] {\r\n display: none !important;\r\n}\r\n\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=DisclosureArrow-disclosureArrow],\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarLibrariesActions-actions],\r\n[class^=SidebarContainer-sidebarContainer-]:hover [class^=SidebarLink-children] {\r\n display: inline-block !important;\r\n\r\n transition: all 2s ease !important;\r\n}\r\n\r\n[class^=SidebarLibraryItem-action] {\r\n width: 0 !important;\r\n}", + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [ + "https?://app.plex.tv/.*", + "https?://.*:32400/.*", + "https://example.com/.*" + ] + } + ], + "url": "http://userstyles.org/styles/139979", + "updateUrl": "https://userstyles.org/styles/chrome/139979.json?ik-RelatedL=ik-RLN&ik-PosterHE=ik-PHEY&ik-CompactSB=ik-CSY&ik-PORT=32400&ik-CastL=ik-CLY&ik-ExtrasM=ik-EEY", + "md5Url": "https://update.userstyles.org/139979.md5", + "originalMd5": "bce6c77be04bfe0740670a9577973521", + "name": "Plex Fixes", + "enabled": false, + "id": 11, + "originalDigest": "cb169174e50e2af75a681014615650210bd2dee0", + "updateDate": 1534175987340, + "_id": "c2484d66-aa44-4c4d-bd10-b381c8f0eab2", + "_rev": 1580730543289, + "_usw": {} + }, + { + "installDate": 1520008447897, + "enabled": true, + "updateUrl": "https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/usercss/126572.user.css", + "url": "https://33kk.github.io/uso-archive/?style=126572", + "sections": [ + { + "code": ".player-slider__left {\n background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAMCAIAAAAs6UAAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUNCQzIyREQ0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUNCQzIyREU0QjdEMTFFMzlEMDM4Qzc3MEY0NzdGMDgiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQ0JDMjJEQjRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQ0JDMjJEQzRCN0QxMUUzOUQwMzhDNzcwRjQ3N0YwOCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PovDFgYAAAAmSURBVHjaYvjPwMAAxjMZmBhA9H8INv4P4TPM/A+m04zBNECAAQBCWQv9SUQpVgAAAABJRU5ErkJggg==\") repeat-x !important; \n height: 12px !important;box-shadow: 0px 0px 10px #5099FF, 0px 0px 10px #5099FF, 0px 0px 10px #5099FF !important;\n}\n.player-slider:before {\n background: url(\"data:image/gif;base64,R0lGODlhMAAMAIAAAAxBd////yH/C05FVFNDQVBFMi4wAwEAAAAh+QQECgAAACwAAAAAMAAMAAACJYSPqcvtD6MKstpLr24Z9A2GYvJ544mhXQmxoesElIyCcB3dRgEAIfkEBAoAAAAsAQACAC0ACgAAAiGEj6nLHG0enNQdWbPefOHYhSLydVhJoSYXPO04qrAmJwUAIfkEBAoAAAAsBQABACkACwAAAiGEj6nLwQ8jcC5ViW3evHt1GaE0flxpphn6BNTEqvI8dQUAIfkEBAoAAAAsAQABACoACwAAAiGEj6nLwQ+jcU5VidPNvPtvad0GfmSJeicUUECbxnK0RgUAIfkEBAoAAAAsAAAAACcADAAAAiCEj6mbwQ+ji5QGd6t+c/v2hZzYiVpXmuoKIikLm6hXAAAh+QQECgAAACwAAAAALQAMAAACI4SPqQvBD6NysloTXL480g4uX0iW1Wg21oem7ismLUy/LFwAACH5BAQKAAAALAkAAAAkAAwAAAIghI8Joe0Po0yBWTaz3g/z7UXhMX7kYmplmo0rC8cyUgAAIfkEBAoAAAAsBQAAACUACgAAAh2Ejwmh7Q+jbIFZNrPeEXPudU74IVa5kSiYqOtRAAAh+QQECgAAACwEAAAAIgAKAAACHISPELfpD6OcqTGKs4bWRp+B36YFi0mGaVmtWQEAIfkEBAoAAAAsAAAAACMACgAAAh2EjxC36Q+jnK8xirOW1kavgd+2BYtJhmnpiGtUAAAh+QQECgAAACwAAAAALgALAAACIYSPqcvtD+MKicqLn82c7e6BIhZQ5jem6oVKbfdqQLzKBQAh+QQECgAAACwCAAIALAAJAAACHQx+hsvtD2OStDplKc68r2CEm0eW5uSN6aqe1lgAADs=\") !important\n}\n.player-volume__slider-thumb {\n background: url(\"data:image/gif;base64,R0lGODlhIgAVAKIHAL3/9/+Zmf8zmf/MmZmZmf+Z/wAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpDMkJBNjY5RTU1NEJFMzExOUM4QUM2MDAwNDQzRERBQyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCREIzOEIzMzRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCREIzOEIzMjRCN0IxMUUzODhEQjgwOTYzMTgyNTE0QiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM1QkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkMyQkE2NjlFNTU0QkUzMTE5QzhBQzYwMDA0NDNEREFDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkECQcABwAsAAAAACIAFQAAA6J4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93bqCA7f7TFaYoIFAMMwczB5EkTzJllEUttmIGoG5bfPBjDawD7CsJC67uWcv2CRov929C/q2ZpcBbYBmLGk6W1BRY4MUDnMvJEsBAXdlknk2fCeRk2iJliAijpBlEmigjR0plKSgpKWvEUheF4tUZqZID1RHjEe8PsDBBwkAIfkECQcABwAsAAAAACIAFQAAA6B4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93TqS40XiKSYgTLBgIBAMqE/zmQSaZEzns+jQ9pC/5dQJ0VIv5KMVWxqb36opxHrNvu9ptPfGbmsBbgSAeRdydCdjXWRPchQPh1hNAQF4TpM9NnwukpRyi5chGjqJEoSOIh0plaYsZBKvsCuNjY5ptElgDyFIuj6+vwcJACH5BAkHAAcALAAAAAAiABUAAAOfeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GKifWaddvNQAtszXYCxgR/Zy5jYTFeXmSDiIZGdQEBd06QSBQ5e4cEkE9nnZQaG2J4F4MSLx8rkqUSZBeurhlTUqsLsi60DpZxSWBJugcJACH5BAkHAAcALAAAAAAiABUAAAOgeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GuifWaddvNwMkZtmY7AWMEgGcKY2ExXl5khFMVc0Z1AQF3TpJShDl8iASST2efloV5JTyJFpgOch8dgW9KZxexshGNLqgLtbW0SXFwvaJfCQAh+QQJBwAHACwAAAAAIgAVAAADoXi63P7wmUmrnVGOzbvfRsYYXGGe6MmF4kEOaSGYMwq2LizHfDGwIlLPNKGZfi6gZmggEAy2iVPZEKZqzakq+1xUFFYe90lxTsHmim6HGpvf3eR7skYJ3PC5tyystc0AboFnVXQ9XFJTZIQOYUYFTQEBeWaSVF4bbCeRk1meBJYSL3WbaReMIxQfHXh6jaYXsbEQni6oaF21ERR7l0ksvA0JACH5BAkHAAcALAAAAAAiABUAAAOeeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMfFlA4hTITEMxkIBMOuADwmhzqeM6mashTCXKw2TVKQyKuTRSx2wegnNkyJ1ozpOFiMLqcEU8BZHx6NYW8nVlZefQ1tZgQBAXJIi1eHUTRwi0lhl48QL0sogxaGDhMlUo2gh14fHhcVmnOrrxNqrU9joX21Q0IUElm7DQkAIfkECQcABwAsAAAAACIAFQAAA6J4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93bqCA7f7TFaYoIFAMMwczB5EkTzJllEUttmIGoG5bfPBjDawD7CsJC67uWcv2CRov929C/q2ZpcBbYBmLGk6W1BRY4MUDnMvJEsBAXdlknk2fCeRk2iJliAijpBlEmigjR0plKSgpKWvEUheF4tUZqZID1RHjEe8PsDBBwkAIfkECQcABwAsAAAAACIAFQAAA6B4umv+MDpG6zEj682zsRaWFWRpltoHMuJZCCRseis7xG5eDGp93TqS40XiKSYgTLBgIBAMqE/zmQSaZEzns+jQ9pC/5dQJ0VIv5KMVWxqb36opxHrNvu9ptPfGbmsBbgSAeRdydCdjXWRPchQPh1hNAQF4TpM9NnwukpRyi5chGjqJEoSOIh0plaYsZBKvsCuNjY5ptElgDyFIuj6+vwcJACH5BAkHAAcALAAAAAAiABUAAAOfeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GKifWaddvNQAtszXYCxgR/Zy5jYTFeXmSDiIZGdQEBd06QSBQ5e4cEkE9nnZQaG2J4F4MSLx8rkqUSZBeurhlTUqsLsi60DpZxSWBJugcJACH5BAkHAAcALAAAAAAiABUAAAOgeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMd8MbAiUu802flYGIhwaCAQDKpQ86nUoWqF6dP00wIby572SXE6vyMrlmhuu9GuifWaddvNwMkZtmY7AWMEgGcKY2ExXl5khFMVc0Z1AQF3TpJShDl8iASST2efloV5JTyJFpgOch8dgW9KZxexshGNLqgLtbW0SXFwvaJfCQAh+QQJBwAHACwAAAAAIgAVAAADoXi63P7wmUmrnVGOzbvfRsYYXGGe6MmF4kEOaSGYMwq2LizHfDGwIlLPNKGZfi6gZmggEAy2iVPZEKZqzakq+1xUFFYe90lxTsHmim6HGpvf3eR7skYJ3PC5tyystc0AboFnVXQ9XFJTZIQOYUYFTQEBeWaSVF4bbCeRk1meBJYSL3WbaReMIxQfHXh6jaYXsbEQni6oaF21ERR7l0ksvA0JACH5BAkHAAcALAAAAAAiABUAAAOeeLrc/vCZSaudUY7Nu99GxhhcYZ7oyYXiQQ5pIZgzCrYuLMfFlA4hTITEMxkIBMOuADwmhzqeM6mashTCXKw2TVKQyKuTRSx2wegnNkyJ1ozpOFiMLqcEU8BZHx6NYW8nVlZefQ1tZgQBAXJIi1eHUTRwi0lhl48QL0sogxaGDhMlUo2gh14fHhcVmnOrrxNqrU9joX21Q0IUElm7DQkAOw==\") !important;\n width: 34px !important;\n height: 21px !important;\n border: none !important;\n margin-left: -18px !important;\n margin-top: 0px !important;\n}\n.player-slider:before, .player-slider__muted-segments, .player-slider__muted {\n height: 12px !important;\n}\n.player-seek > .player-slider {\n transform: scaleY(0.6);\n transition: transform .1s cubic-bezier(0.4,0.0,1,1);\n padding-top: inherit;\n}\n.player-seek > .player-slider:hover {\n transform: scaleY(1);\n}\n.player-button {\n margin-top: .4em\n}\n.player-quality {\n margin-top: .4em;\n}\n.player-slider__buffer {\n background: none !important;\n}\n.player-volume__slider-container {\n padding: .35em 0 .3em !important;\n}\n.player-hover p, .player-hover span {\n cursor: pointer !important;\n}\n.player-slider--roundhandle .ui-slider-handle {\n transition: opacity .2s ease !important;\n}\n.player-seek__time-container{\n margin-bottom: .5em !important;\n}\ndiv#player {\n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5);\n}\n.has-player-mini>.tse-content>.ember-view>.ember-view>.content>#channel>.ember-view>.player-column>.player-placeholder { \n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5); \n}", + "start": 1013, + "domains": [ + "twitch.tv" + ] + } + ], + "name": "Twitch - Nyan Cat progress bar video player theme", + "originalDigest": "4304bea21601d61d25e2c0a65f57c21b8d468e66", + "id": 12, + "updateDate": 1615723396511, + "_id": "597b538f-68f5-4bfd-9903-f5fff6c8d7f9", + "_rev": 1615723396512, + "etag": "W/\"9f39d20ab094e1c3a6fcc39f3b09aadb72ad50f25584dfdc6387fd95f103021a\"", + "sourceCode": "/* ==UserStyle==\n@name Twitch - Nyan Cat progress bar video player theme\n@namespace USO Archive\n@author badjokr\n@description `Bring Nyan Cat to your Twitch VODs and streams with this custom progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!`\n@version 20180302.2.25\n@license NO-REDISTRIBUTION\n@preprocessor uso\n@advanced dropdown glow \"Progress bar glow\" {\n\tglow1 \"Yes*\" <<.tse-content>.ember-view>.ember-view>.content>#channel>.ember-view>.player-column>.player-placeholder { \n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5); \n} EOT;\nplayerglow2 \"No\" << .player-slider {\n transform: scaleY(0.6);\n transition: transform .1s cubic-bezier(0.4,0.0,1,1);\n padding-top: inherit;\n}\n.player-seek > .player-slider:hover {\n transform: scaleY(1);\n}\n.player-button {\n margin-top: .4em\n}\n.player-quality {\n margin-top: .4em;\n}\n.player-slider__buffer {\n background: none !important;\n}\n.player-volume__slider-container {\n padding: .35em 0 .3em !important;\n}\n.player-hover p, .player-hover span {\n cursor: pointer !important;\n}\n.player-slider--roundhandle .ui-slider-handle {\n transition: opacity .2s ease !important;\n}\n.player-seek__time-container{\n margin-bottom: .5em !important;\n}\n/*[[playerglow]]*/\n}", + "usercssData": { + "name": "Twitch - Nyan Cat progress bar video player theme", + "namespace": "USO Archive", + "author": "badjokr", + "description": "Bring Nyan Cat to your Twitch VODs and streams with this custom progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!", + "version": "20180302.2.25", + "license": "NO-REDISTRIBUTION", + "preprocessor": "uso", + "vars": { + "glow": { + "type": "select", + "label": "Progress bar glow", + "name": "glow", + "value": "glow1", + "default": "glow1", + "options": [ + { + "name": "glow1", + "label": "Yes*", + "value": "box-shadow: 0px 0px 10px #5099FF, 0px 0px 10px #5099FF, 0px 0px 10px #5099FF !important;" + }, + { + "name": "glow2", + "label": "No", + "value": "" + } + ] + }, + "playerglow": { + "type": "select", + "label": "Purple glow under player", + "name": "playerglow", + "value": "playerglow1", + "default": "playerglow1", + "options": [ + { + "name": "playerglow1", + "label": "Yes*", + "value": "div#player {\n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5);\n}\n.has-player-mini>.tse-content>.ember-view>.ember-view>.content>#channel>.ember-view>.player-column>.player-placeholder { \n box-shadow: 0 10px 20px -9px rgba(100,65,164,.5); \n}" + }, + { + "name": "playerglow2", + "label": "No", + "value": "" + } + ] + } + } + }, + "author": "badjokr", + "description": "Bring Nyan Cat to your Twitch VODs and streams with this custom progress bar! Animated Nyan Cat leaves a rainbow trail behind her as she flies through space!", + "_usw": {} + }, + { + "installDate": 1530455075022, + "enabled": true, + "updateUrl": null, + "url": null, + "name": "Jetpack Fix", + "sections": [ + { + "code": "#jp-stats-wrap, #jp-plugin-container.is-wide .wrap {\n max-width: 100%;\n}", + "domains": [ + "akamaru.de", + "gibmirspiele.de" + ] + } + ], + "id": 14, + "_id": "bed9b946-1e63-4374-981f-8012658569e5", + "_rev": 1629210478149, + "updateDate": 1617651708754, + "_usw": {} + }, + { + "installDate": 1531140041462, + "enabled": false, + "updateUrl": "https://raw.githubusercontent.com/Athari/CssGitHubWindows/master/GitHubWindows.user.css", + "md5Url": null, + "url": "https://github.com/Athari/CssGitHubWindows", + "originalMd5": null, + "sourceCode": "/* ==UserStyle==\n@name GitHub Windows Edition [Ath]\n@namespace https://github.com/Athari\n@version 0.6.0\n@description Transforms GitHub's pages into a GUI resembling Windows 9x.\n@author Athari\n@homepageURL https://github.com/Athari/CssGitHubWindows\n@license MIT\n==/UserStyle== */\n\n@-moz-document domain(\"github.com\") {\n :root {\n --color-button-text: rgb(0, 0, 0);\n --color-button-face: rgb(192, 192, 192);\n --color-button-highlight: rgb(255, 255, 255);\n --color-button-shadow: rgb(128, 128, 128);\n --color-button-shadow-dark: rgb(0, 0, 0);\n --color-button-checked: rgb(223, 223, 223);\n --color-window-text: rgb(0, 0, 0);\n --color-window: rgb(255, 255, 255);\n --color-active-caption-text: rgb(255, 255, 255);\n --color-active-caption: rgb(0, 0, 128);\n --color-info-background: rgb(255, 255, 192);\n --color-highlight-text: rgb(255, 255, 255);\n --color-highlight: rgb(0, 0, 128);\n --color-gray-text: rgb(128, 128, 128);\n --color-gray-text-dark: rgb(64, 64, 64);\n --color-link: rgb(0, 0, 255);\n --color-hover: rgb(223, 223, 255);\n\n --font-family: MS Sans Serif, MS Reference Sans Serif, Liberation Sans, Tahoma, sans-serif;\n --font-size: 12px;\n --font-size-text: 14px;\n --font-size-bigger: 13px;\n --font-size-header: 14px;\n --font-line: 1.2;\n --font-line-text: 1.2;\n --font: var(--font-size)/var(--font-line) var(--font-family);\n --font-text: var(--font-size-text)/var(--font-line-text) var(--font-family);\n --font-header: var(--font-size-header)/var(--font-line) var(--font-family);\n\n --button-3d-border-color-exact: var(--color-button-face) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-face);\n --button-3d-box-shadow-exact:\n 0 -1px 0 0 var(--color-button-highlight),\n -1px 0 0 0 var(--color-button-highlight),\n -1px -1px 0 0 var(--color-button-highlight),\n -1px 1px 0 0 var(--color-button-shadow-dark),\n 1px 0 0 0 var(--color-button-shadow-dark),\n 1px 1px 0 0 var(--color-button-shadow-dark);\n --button-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight);\n --button-3d-border-color-inverted: var(--color-button-shadow) var(--color-button-highlight) var(--color-button-highlight) var(--color-button-shadow);\n --button-3d-box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-shadow-dark),\n 1px 1px 0 var(--color-button-shadow-dark);\n --box-3d-border-color: var(--color-button-shadow-dark) var(--color-button-face) var(--color-button-face) var(--color-button-shadow-dark);\n --box-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-shadow),\n -1px 0 0 0 var(--color-button-shadow),\n -1px -1px 0 0 var(--color-button-shadow),\n -1px 1px 0 0 var(--color-button-highlight),\n 1px 0 0 0 var(--color-button-highlight),\n 1px 1px 0 0 var(--color-button-highlight);\n --group-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight);\n --group-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-shadow),\n -1px 0 0 0 var(--color-button-shadow),\n -1px -1px 0 0 var(--color-button-shadow),\n -1px 1px 0 0 var(--color-button-highlight),\n 1px 0 0 0 var(--color-button-highlight),\n 1px 1px 0 0 var(--color-button-highlight);\n --window-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-face),\n -1px 0 0 0 var(--color-button-face),\n -1px -1px 0 0 var(--color-button-face),\n -1px 1px 0 0 var(--color-button-shadow-dark),\n 1px 0 0 0 var(--color-button-shadow-dark),\n 1px 1px 0 0 var(--color-button-shadow-dark);\n\n --image-folder: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAD//5nMzGYAAAD/zJmZmQD//8zx8fEIMK00AAAAAXRSTlMAQObYZgAAAE5JREFUCNdjQIDQ0GAwzVqWKGoAYgQpKSmFhoYyMISlgYCQAUOYIAg4QRgiIjARR4iICFzEESIiAgQghiMQuAAZQUpgYMDAbAwGBgwYAABoaBIom9Nm3gAAAABJRU5ErkJggg==');\n --image-folder-documents: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAACZmQD//5n/zJn///8zMwDn59aGhobMzGZVVVUAM5mAgADx8fH/+/Dq6upNTU2p3qmcAAAAAXRSTlMAQObYZgAAAGlJREFUCNdjAIECBghgfwmmGAVLrn0AMSTaXY68BDNKXNYem72BgUE8LSsrLXMDgyAYpH1gEHEBAguxTAYRJSUlZWWxAAZGJWUlI+NGIAMkoGwIZAAFjIyADAZhZYgIVD+QwRoKAgxwAADcLBkG7Oto1QAAAABJRU5ErkJggg==');\n --image-file-text: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD///8AAADAwMCAgIA71crUAAAAAXRSTlMAQObYZgAAADdJREFUCNdjYFAAAQYGBiYRIBACMhwVQUAByBAEAmEUhpCSkCK6iBLJIgiGszEIABlMSiDAwAAAbdoMvcC7PKEAAAAASUVORK5CYII=');\n --image-file-script: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEX///8AAACAgIDAwMAAAP9P8fJzAAAAUUlEQVQI11WLyRHAMAgDGTsFgCsAuwKGEkL/NYVj8rBeC1rB7ggwBDNowADQAvZ3YUA+TsHjRFmV8jt4r7b4LHkuLGDlroaJtUxEqR+raNydD4tEDMx2wEOBAAAAAElFTkSuQmCC');\n --image-drive-network: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAADAwMAAAACAgID///+AgAD//wAA/wAAgACrI+ZSAAAAAXRSTlMAQObYZgAAAEpJREFUCNdjwAKMwcCAgVkQDIwYTFxAwNmIwRDElyiGMgSFgQywWhADrEZYgYFJCQzAJjEpQI1kBDOAWkKDgAQDUD4lCKoIRCIAANMFDQmCUWfHAAAAAElFTkSuQmCC');\n --image-help: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAACAAIDMAMwAAABmAGbAwMCZAJn/mf/n59aZmZn//wDWAJNmZmaZZjPMZsytqZD/zDOGhobMmTM1eNxEAAAAAXRSTlMAQObYZgAAAG5JREFUGNNVzVEOhSAMRFGHtjzoE1H3v1iHWDFOwse5IekSgyyf4ZdUvk4pRwq3poDKtLufLCJhbneFYNp9b5AVYSojy1p5HQAPZD76GKEa0+1OMxTr4P+jGs3w30oxQ+3DY6pMbOGZwm8Kv+nxBbR5A2SXmbJNAAAAAElFTkSuQmCC');\n --image-files: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD///8AAADAwMCAgIA71crUAAAAAXRSTlMAQObYZgAAADpJREFUCNdjYGBwcXFxUgDSLMbGxspKUAEjI6CQo6CgiLIylCEEFRFSgooIClOB4WwMBCBLlUBAgQEAR6QOgOgRPP8AAAAASUVORK5CYII=');\n --image-tree: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAAAAgAAAAAAA/wCAAACAgAD//wD////AwMCATq9oAAAAAXRSTlMAQObYZgAAAF5JREFUCNd1irENgDAMBJ9I9DguaBOLgtYpqBEzZIGMwP4Nb1HHhe91OgDCQ/AdqlzLuFRcNuyEChVfMDN199YyUmNRqwFmmVeA9TYzEuj9fAiqfoQIxfIfZTaSRfMBdb8LBoGZClYAAAAASUVORK5CYII=');\n --image-install: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIVBMVEUAAACAgIAAAADAwMD///8AAIAA//8AAP8AgID//wAA/wB9pF0iAAAAAXRSTlMAQObYZgAAAIBJREFUCNdjAAJGQUFBARBDxMXFWQjMCA0NBjEERYKTm4EMRheVMAsgg1FQSCW4o1iIQcRRRdnY2BgoIuSuBATKDIxO5YrCgoKGDIxFxSqOM40FgQxjZbFMEyOglLGiVKIxmKEkbCQMYhgxCDtPSwIyFBgYja2UGZiUgNYpKRkAAHKUFEgKyHHMAAAAAElFTkSuQmCC');\n --image-users: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAAAAAAD////AwMAAAICAAAAAAP+AgID/AACUdQtdAAAAAXRSTlMAQObYZgAAAGdJREFUCNctzcEJgDAMBdAIDtCkE5jgAGnBBSy9K3QALy7gBG5u0vov/8GHBCwTYgAPoslrYOqdf/DSl6h8OaJElmCgjcaURVkdKREGPytCagBUPMXxCLb1BZhL0tYOgHrvtf8uFscH72MNfQW7pXEAAAAASUVORK5CYII=');\n --image-lock: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAAAAAACAgAD//wDAwMCZmQD4+PjMzACGhoYAAP+ysrIAmTMICAj/AAB3d3fMADNdKQKAAAAAAXRSTlMAQObYZgAAAGpJREFUCNdjAAIOAQYIaHOE0HwZUgIQAemNYCGOlL/FQCEQQ3JiCpiR6ygGkXKZBhZgUBRxAQswSRkJggWURY2VlJQUgAxFYWNjY0MgQ028NDy0XIBBvag85qhgIFBxaKgAIwNIuaAg2EYAxGwRy03mvagAAAAASUVORK5CYII=');\n --image-message-warning: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD//wAAAACAgICAgAD7lZT4AAAAAXRSTlMAQObYZgAAAFFJREFUCNc9zNENgCAMhOE+sEA7gcICVRYQ4/4z+bcELn34krtUyPdIpqhteGKoHhOmbTb1tA2PBjAKvIMRjRqXIIz4cl98WmiABErNdJGe8R94Ngsp7z6ySgAAAABJRU5ErkJggg==');\n --image-hierarchy: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAAAAAD////AwMD/AAAA/////wAA/wC2MU76AAAAAXRSTlMAQObYZgAAAE9JREFUCNc9ytERgDAIA1BwgxRPv8ENigt4xwLuv4xVsPl6l4QYihEivs+IuAZQWKSbmb5AS2CThCPBpo6WwC5/U+iHF+ZnzckcBcsPvtADzokMhSp6+fAAAAAASUVORK5CYII=');\n --image-graph: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAAAAAACAAID///8A//+AgIDAwMAGyj3KAAAAAXRSTlMAQObYZgAAAFlJREFUCNdVy7ENwDAIRFGa9AGb9LCB5Qks3QoZII33HyHYFFFe9cUJ4nRS6Zt+cc1nhrg0KTmJW+usxO4u7Eriyz8sth1VbKxgDIPEF4CKoVSxxSUpHXd6AVDAE78kckOGAAAAAElFTkSuQmCC');\n --image-config: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAM1BMVEUAAABmZgCZmZn/+/Dn59aZmQD//5kzMwAcHBzAwMDMzGZNTU0AAADq6upmZmYzAACtqZA/egufAAAAAXRSTlMAQObYZgAAAHJJREFUGNNNzVESgyAMRVEu8QVLBdz/aosU1DvDzyGThPgURtG22XfBZ9/3uJU3mMU18QC8oC/EjBvOlE5cBGleoegCGQvEBWhCcneycDcGkPAM2cUETG6eZceAgolmudElhForJOBooPCP1F//XLBw9APHJgNeldevuwAAAABJRU5ErkJggg==');\n }\n\n body {\n background: var(--color-button-face) !important;\n font: var(--font) !important;\n color: var(--color-button-text) !important;\n }\n a {\n color: var(--color-link);\n }\n ::-moz-selection {\n color: var(--color-highlight-text) !important;\n background: var(--color-highlight) !important;\n }\n ::selection {\n color: var(--color-highlight-text) !important;\n background: var(--color-highlight) !important;\n }\n\n .markdown-body {\n font: var(--font-text) !important;\n }\n .markdown-body pre,\n .markdown-body .highlight pre,\n .markdown-body code {\n background: #eee !important;\n }\n\n .avatar,\n .gravatar {\n border-radius: 0 !important;\n }\n\n label {\n font: inherit !important;\n color: inherit !important;\n }\n .note,\n .info,\n .text-gray,\n .text-gray-light {\n font: inherit !important;\n color: var(--color-gray-text-dark) !important;\n }\n\n .Header {\n background: var(--color-active-caption) !important;\n font: inherit !important;\n }\n .HeaderNavlink {\n color: var(--color-active-caption-text) !important;\n font-weight: normal !important;\n }\n .HeaderNavlink:hover {\n text-decoration: underline !important;\n }\n .header-search-key-slash {\n display: none !important;\n }\n h1, h2, h3, h4, h5, h6 {\n border: none !important;\n }\n\n .footer .pt-6 {\n margin: 8px 0 0 0 !important;\n padding: 0 !important;\n border: none !important;\n }\n .footer .pb-6 {\n padding: 0 0 8px 0 !important;\n }\n\n .repohead {\n background: var(--color-button-face) !important;\n margin: 0;\n }\n .pagehead {\n border: none !important;\n }\n .pagehead *,\n .file-wrap * {\n font-size: inherit !important;\n }\n .numbers-summary a,\n .numbers-summary .nolink,\n .reponav-item {\n color: inherit;\n }\n .numbers-summary a:hover {\n text-decoration: underline !important;\n }\n\n .social-count {\n font: inherit !important;\n color: var(--color-link) !important;\n background: inherit !important;\n border: none !important;\n padding: 6px;\n }\n .social-count:hover {\n text-decoration: underline !important;\n }\n\n .topic-tag {\n color: inherit;\n background: var(--color-button-checked) !important;\n border: solid 1px transparent !important;\n border-color: var(--color-button-shadow) var(--color-button-highlight) var(--color-button-highlight) var(--color-button-shadow) !important;\n border-radius: 0 !important;\n }\n .topic-tag:hover {\n color: var(--color-link) !important;\n }\n\n .repository-meta:not(.open) {\n font-size: inherit !important;\n font-weight: bold !important;\n margin: 6px 0;\n }\n .repository-meta .repo-description-field {\n width: 490px;\n }\n .topic-input-container .tag-input {\n width: 880px;\n }\n .container.experiment-repo-nav {\n padding: 8px;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n box-shadow: var(--button-3d-box-shadow) !important;\n width: 1000px;\n }\n\n .commit-tease {\n margin: 0 0 8px 0 !important;\n }\n .commit-tease-contributors {\n background: transparent !important;\n border: none !important;\n margin: 8px -10px 0 -10px !important;\n }\n\n .pr-toolbar {\n background: var(--color-button-face) !important;\n margin: 1px -20px !important;\n }\n .pr-toolbar.is-stuck {\n border-bottom: solid 1px var(--color-button-shadow) !important;\n box-shadow: 0 1px 0 0 var(--color-button-shadow-dark) !important;\n }\n .pr-toolbar-shadow {\n display: none !important;\n }\n .diffbar {\n background: inherit !important;\n }\n\n .file-wrap,\n .blob-wrapper,\n .menu,\n .network,\n #readme,\n .overall-summary,\n .summary-stats,\n .pulse-section .simple-conversation-list,\n .capped-list,\n .issues-listing > div[class^=border] {\n background: var(--color-window) !important;\n border: solid 1px black !important;\n border-color: var(--box-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--box-3d-box-shadow) !important;\n }\n .network {\n padding: 4px !important;\n }\n .file {\n border: none !important;\n margin: 0 !important;\n }\n .file-header {\n background: transparent !important;\n }\n .menu-item {\n font: inherit !important;\n border: none !important;\n border-radius: 0 !important;\n color: inherit !important;\n }\n .menu-item:hover {\n background: var(--color-hover) !important;\n }\n .menu-item.selected {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .menu-item::before {\n display: none !important;\n }\n .network .current-repository,\n .network .current-repository a {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .network .current-repository {\n padding: 0px 4px 1px !important;\n }\n table.files td a,\n table.files td span {\n color: var(--color-window-text) !important;\n }\n table.files tr.navigation-focus td {\n background: var(--color-highlight) !important;\n }\n table.files tr.navigation-focus td a,\n table.files tr.navigation-focus td span {\n color: var(--color-highlight-text) !important;\n }\n .Box-row.navigation-focus {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .Box-row.navigation-focus * {\n color: inherit !important;\n }\n .Box-row {\n margin: 0 !important;\n }\n .overall-summary {\n height: 60px;\n padding: 8px;\n }\n .numbers-summary a,\n .numbers-summary .nolink {\n padding: 0;\n }\n .repository-lang-stats * {\n font: inherit !important;\n }\n .repository-lang-stats .language-color {\n width: 16px !important;\n height: 16px !important;\n border-radius: 0 !important;\n vertical-align: -4px;\n }\n .repository-lang-stats a:hover,\n .repository-lang-stats a:hover span {\n color: var(--color-link) !important;\n text-decoration: underline !important;\n }\n .IssueLabel {\n font: inherit !important;\n line-height: 13px !important;\n border: none !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n height: 18px !important;\n }\n .capped-list th {\n background: var(--color-button-face) !important;\n }\n .capped-list tbody {\n background: var(--color-window) !important;\n }\n\n .repository-lang-stats-graph {\n border: solid 1px var(--color-button-shadow-dark) !important;\n border-radius: 0 !important;\n height: 16px !important;\n margin: 6px 0 -6px 0 !important;\n pointer-events: none !important;\n }\n .repository-lang-stats-graph .language-color {\n border-radius: 0 !important;\n }\n\n .table-list-header {\n background: inherit !important;\n border: none !important;\n margin: 4px 0 !important;\n }\n .table-list-header .btn-link {\n padding: 6px 8px !important;\n }\n\n .issues-listing .h4 {\n font: inherit !important;\n font-size: var(--font-size-bigger) !important;\n }\n\n .discussion-timeline,\n .timeline-comment-wrapper,\n .timeline-comment,\n .timeline-comment-header,\n .discussion-timeline-actions {\n background: inherit !important;\n border: none !important;\n }\n .discussion-timeline::before {\n display: none !important;\n }\n .discussion-item + .discussion-item,\n .discussion-item-review + .discussion-item,\n .discussion-sidebar-item + .discussion-sidebar-item {\n border-top: solid 1px var(--color-button-highlight) !important;\n box-shadow: 0 -1px 0 0 var(--color-button-shadow) !important;\n }\n .discussion-sidebar-item {\n color: inherit !important;\n }\n .comment-reactions.has-reactions {\n border: none !important;\n }\n .gh-header-meta {\n border-bottom: solid 1px var(--color-button-shadow) !important;\n box-shadow: 0 1px 0 0 var(--color-button-highlight) !important;\n }\n\n .UnderlineNav,\n .tabnav {\n margin: 0 !important;\n background: inherit !important;\n border: none !important;\n }\n .select-menu-tabs {\n font-size: 0;\n }\n .reponav {\n width: 1000px;\n }\n .reponav > span,\n .select-menu-tabs ul,\n .select-menu-tab {\n display: contents !important;\n }\n .UnderlineNav-item,\n .pagehead-tabs-item,\n .tabnav-tabs a,\n .tabnav-tabs span:not(.Counter),\n .reponav-item,\n .select-menu-tab a {\n font-size: var(--font-size);\n font-weight: normal !important;\n color: var(--color-button-text) !important;\n background: var(--color-button-face) !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n border-bottom: none !important;\n border-radius: 2px 2px 0 0 !important;\n box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-highlight)\n !important;\n margin: 0 1px -1px 0 !important;\n padding: 4px 6px !important;\n min-height: 26px;\n }\n .UnderlineNav-item.selected,\n .pagehead-tabs-item.selected,\n .tabnav-tabs a.selected,\n .tabnav-tabs span:not(.Counter).selected,\n .reponav-item.selected,\n .select-menu-tab a.selected {\n box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-face)\n !important;\n margin: -2px 1px 1px 0 !important;\n min-height: 28px;\n }\n .tabnav-tabs span:not(.Counter) {\n color: var(--color-gray-text) !important;\n }\n\n .Counter {\n background: inherit !important;\n font: inherit !important;\n color: inherit !important;\n padding: 0 !important;\n }\n .Counter::before {\n content: \"(\";\n }\n .Counter::after {\n content: \")\";\n }\n\n .auth-form-body,\n .select-menu-modal,\n .dropdown-menu {\n background: var(--color-button-face) !important;\n color: inherit !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--window-3d-box-shadow) !important;\n padding: 0 !important;\n }\n\n .dropdown-menu::before,\n .dropdown-menu::after {\n display: none !important;\n }\n .dropdown-item:hover {\n background: var(--color-highlight) !important;\n }\n .dropdown-divider {\n height: 0 !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color-inverted) !important;\n }\n\n .select-menu-header {\n background: var(--color-active-caption) !important;\n padding: 4px 6px !important;\n }\n .select-menu-title {\n color: var(--color-active-caption-text) !important;\n }\n .select-menu-filters {\n background: inherit !important;\n }\n .select-menu-item.navigation-focus {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .select-menu-item .text-gray {\n color: var(--color-gray-text) !important;\n }\n .select-menu-item.navigation-focus .text-gray {\n color: inherit !important;\n }\n\n .tooltipped::before {\n display: none !important;\n }\n .Popover-message,\n .tooltipped::after {\n font: inherit !important;\n color: var(--color-window-text) !important;\n background: var(--color-info-background) !important;\n border: solid 1px var(--color-button-shadow-dark) !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n .Popover-message::before,\n .Popover-message::after {\n display: none !important;\n }\n\n .btn-link,\n .btn,\n .btn:hover,\n .subnav-item,\n .pagination > :not(.gap),\n #user-links .dropdown,\n .js-menu-close {\n font: var(--font) !important;\n font-weight: normal !important;\n background: var(--color-button-face) !important;\n color: var(--color-button-text) !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color-exact) !important;\n border-radius: 0 !important;\n box-shadow: var(--button-3d-box-shadow-exact) !important;\n margin: 1px 2px !important;\n }\n .btn-link svg,\n .btn svg,\n .btn:hover svg,\n .subnav-item svg,\n #user-links .dropdown svg,\n .js-menu-close svg {\n fill: var(--color-window-text) !important;\n }\n .pagination .disabled {\n color: var(--color-gray-text) !important;\n }\n .pagination .current {\n font-weight: bold !important;\n }\n .pagination > .gap {\n background: inherit !important;\n border: none !important;\n color: inherit !important;\n }\n .btn-link .dropdown-caret,\n .btn .dropdown-caret,\n .btn:hover .dropdown-caret,\n .subnav-item .dropdown-caret,\n #user-links .dropdown .dropdown-caret {\n color: var(--color-window-text) !important;\n border-top-color: var(--color-window-text) !important;\n }\n .btn-link:active,\n .btn:active,\n .btn.selected,\n [open] > .btn,\n .subnav-item:active,\n .pagination > :not(.gap):not(.disabled):active,\n #user-links .dropdown:active,\n .js-menu-close:active {\n border-color: var(--color-button-shadow) !important;\n box-shadow:\n 0 0 0 1px var(--color-button-shadow-dark)\n !important;\n }\n .btn-link:focus,\n .btn:focus,\n .subnav-item:focus {\n outline: dotted 1px var(--color-button-text) !important;\n outline-offset: -4px !important;\n }\n\n input:not([type]),\n input[type=text],\n input[type=search],\n input[type=password],\n input[type=url],\n .tag-input,\n textarea {\n color: var(--color-window-text) !important;\n background: var(--color-window) !important;\n border: solid 1px black !important;\n border-color: var(--box-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--box-3d-box-shadow) !important;\n margin: 0 2px !important;\n padding-top: 4px !important;\n padding-bottom: 4px !important;\n min-height: 0 !important;\n }\n input::placeholder {\n color: var(--color-gray-text) !important;\n opacity: 1 !important;\n }\n\n .btn-link {\n padding: 4px 6px;\n text-decoration: none !important;\n }\n .milestone-action .btn-link {\n border: none !important;\n box-shadow: none !important;\n padding: 0 !important;\n }\n .js-menu-close {\n width: 16px !important;\n height: 14px !important;\n }\n\n #user-links .dropdown {\n height: 22px !important;\n margin: 0 0 0 8px !important;\n }\n #user-links .dropdown > * {\n height: 20px !important;\n line-height: 20px !important;\n margin: 0 2px !important;\n padding: 0 4px 0 0 !important;\n }\n #user-links .dropdown details summary {\n margin: 0 !important;\n }\n #user-links .mail-status.unread {\n position: static !important;\n display: inline !important;\n width: 0 !important;\n height: 0 !important;\n background: transparent !important;\n border: none !important;\n white-space: nowrap;\n }\n #user-links .notification-indicator .mail-status.unread::after {\n color: var(--color-button-text) !important;\n content: \"(unread)\";\n }\n\n .Box:not(.position-absolute):not(.Popover-message):not(.js-network-graph-container),\n #user-repositories-list li,\n .user-profile-nav + .position-relative > .d-block,\n .blankslate,\n .border,\n .timeline-comment,\n .commit-tease {\n font: inherit !important;\n color: inherit !important;\n line-height: 20px !important;\n background: var(--color-button-face) !important;\n border: solid 1px black !important;\n border-color: var(--group-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--group-3d-box-shadow) !important;\n position: relative !important;\n padding: 12px 8px 4px 8px;\n margin-top: 2px !important;\n }\n #user-repositories-list li > .d-inline-block,\n .user-profile-nav + .position-relative > .d-block > .d-inline-block,\n .js-notice > .border::before,\n .commit-tease::before {\n color: var(--color-button-text) !important;\n background: var(--color-button-face) !important;\n position: absolute;\n left: 6px;\n top: -11px;\n padding: 0 3px;\n }\n .js-notice > .border::before {\n content: \"Notice\";\n }\n .commit-tease::before {\n content: \"Last commit\";\n }\n\n .Box.Box.Box.Box.Box.Box.Box--danger {\n background: red !important;\n }\n .Box-row {\n border-top: solid 1px var(--color-button-highlight) !important;\n box-shadow: 0 -1px 0 0 var(--color-button-shadow) !important;\n }\n .Box-row:first-of-type {\n border: none !important;\n box-shadow: none !important;\n }\n .Box-header {\n background: inherit !important;\n border: none !important;\n padding: 0 8px !important;\n }\n .Box h3 {\n font: var(--font-header) !important;\n border: none !important;\n }\n\n .Subhead {\n border: none !important;\n font-size: var(--font-size-header) !important;\n margin: 0 0 6px 0 !important;\n }\n .Subhead h2,\n .Subhead-heading {\n font-size: var(--font-size-header) !important;\n font-weight: bold !important;\n }\n .Subhead--spacious {\n margin: 12px 0 0 0 !important;\n }\n\n .boxed-group > h3,\n .boxed-group .heading {\n background: none !important;\n }\n\n #user-repositories-list li,\n .user-profile-nav + .position-relative > .d-block {\n margin: 0 0 16px 0 !important;\n padding: 12px 8px 8px 8px !important;\n }\n #user-repositories-list li > .d-inline-block,\n .user-profile-nav + .position-relative > .d-block > .d-inline-block {\n display: flex !important;\n flex-flow: row !important;\n margin: 2px 0 0 0;\n }\n #user-repositories-list li > .d-inline-block > span::before {\n content: \" (\";\n }\n #user-repositories-list li > .d-inline-block > span::after {\n content: \")\";\n }\n #user-repositories-list li > .my-1,\n #user-repositories-list li > .mt-2,\n .user-profile-nav + .position-relative > .d-block > .mt-2 {\n margin: 0 !important;\n }\n #user-repositories-list h3,\n .user-profile-nav + .position-relative > .d-block h3 {\n font: bold var(--font) !important;\n }\n #user-repositories-list h3 + span {\n font: var(--font) !important;\n }\n #user-repositories-list h3 + span a {\n color: var(--color-link) !important;\n }\n #user-repositories-list h3 + span a:hover {\n text-decoration: underline !important;\n }\n #user-repositories-list .text-gray,\n .user-profile-nav + .position-relative > .d-block .text-gray {\n color: inherit !important;\n }\n .repo-language-color {\n width: 16px !important;\n height: 16px !important;\n border-radius: 0 !important;\n margin: 2px 4px -2px 0 !important;\n }\n\n .summary-stats {\n margin: -2px 0 4px 0 !important;\n }\n .summary-stats li {\n border: none !important;\n color: inherit !important;\n }\n .summary-stats li a {\n background: inherit !important;\n color: inherit !important;\n }\n .summary-stats li a:hover {\n color: var(--color-link) !important;\n text-decoration: underline !important;\n }\n .summary-stats li a .num {\n font: bold var(--font) !important;\n text-decoration-color: transparent !important;\n }\n .diffstat-summary {\n font: inherit !important;\n line-height: 166% !important;\n color: inherit !important;\n padding: 32px 48px 0 8px !important;\n }\n .pulse-section {\n font: inherit !important;\n color: inherit !important;\n }\n .pulse-section h3 {\n color: inherit !important;\n }\n .pulse-section h3 span {\n background: none !important;\n font: var(--font-header) !important;\n }\n .pulse-section h3 .text-emphasized {\n font-weight: bold !important;\n }\n .simple-conversation-list {\n font: inherit !important;\n color: inherit !important;\n }\n .simple-conversation-list > li {\n border: none !important;\n padding: 2px 0 !important;\n }\n .simple-conversation-list > li .num {\n color: var(--color-gray-text) !important;\n }\n .pulse-section .simple-conversation-list {\n padding: 4px 8px !important;\n }\n\n .Box.d-block svg {\n margin: 0 0 -8px -8px;\n }\n .tint-box,\n .capped-card-content {\n background: transparent !important;\n }\n svg .tick text {\n fill: var(--color-button-text) !important;\n }\n svg .tick line {\n stroke: var(--color-gray-text) !important;\n }\n\n .js-edit-repo-container dl {\n margin: 0 !important;\n }\n .boxed-group-inner,\n .access-form-wrapper {\n background: none !important;\n color: inherit !important;\n border: none !important;\n }\n .settings-next {\n font: inherit !important;\n }\n\n .auth-form-header {\n display: none !important;\n }\n .auth-form-body {\n position: relative !important;\n padding: 32px 8px 8px 8px !important;\n font: inherit !important;\n }\n .auth-form-body::before {\n display: block;\n position: absolute;\n height: 24px;\n left: 0;\n right: 0;\n margin: -32px 0 0 0;\n padding: 0 10px;\n background: var(--color-active-caption) !important;\n color: var(--color-active-caption-text) !important;\n font: bold var(--font-size)/24px var(--font-family);\n content: \"Confirm password to continue\";\n }\n .auth-form-body .btn {\n margin: 8px 2px 0 2px !important;\n }\n\n .octicon-file-directory, .octicon-file, .octicon-book, .octicon-history, .octicon-git-branch, .octicon-tag, .octicon-organization, .octicon-law, .octicon-code,\n .octicon-issue-opened, .octicon-git-pull-request, .octicon-project, .octicon-graph, .octicon-gear, .octicon-repo {\n fill: transparent !important;\n width: 16px !important;\n height: 16px !important;\n }\n .octicon-file-directory { background: var(--image-folder) !important; }\n .octicon-file { background: var(--image-file-text) !important; }\n .octicon-book { background: var(--image-help) !important; }\n .octicon-history { background: var(--image-files) !important; }\n .octicon-git-branch { background: var(--image-tree) !important; }\n .octicon-tag { background: var(--image-install) !important; }\n .octicon-organization { background: var(--image-users) !important; }\n .octicon-law { background: var(--image-lock) !important; }\n .octicon-code { background: var(--image-file-script) !important; }\n .octicon-issue-opened { background: var(--image-message-warning) !important; }\n .octicon-git-pull-request { background: var(--image-drive-network) !important; }\n .octicon-project { background: var(--image-hierarchy) !important; }\n .octicon-graph { background: var(--image-graph) !important; }\n .octicon-gear { background: var(--image-config) !important; }\n .octicon-repo { background: var(--image-folder-documents) !important; }\n}", + "sections": [ + { + "code": "/* ==UserStyle==\n@name GitHub Windows Edition [Ath]\n@namespace https://github.com/Athari\n@version 0.6.0\n@description Transforms GitHub's pages into a GUI resembling Windows 9x.\n@author Athari\n@homepageURL https://github.com/Athari/CssGitHubWindows\n@license MIT\n==/UserStyle== */", + "urls": [], + "urlPrefixes": [], + "domains": [], + "regexps": [] + }, + { + "code": ":root {\n --color-button-text: rgb(0, 0, 0);\n --color-button-face: rgb(192, 192, 192);\n --color-button-highlight: rgb(255, 255, 255);\n --color-button-shadow: rgb(128, 128, 128);\n --color-button-shadow-dark: rgb(0, 0, 0);\n --color-button-checked: rgb(223, 223, 223);\n --color-window-text: rgb(0, 0, 0);\n --color-window: rgb(255, 255, 255);\n --color-active-caption-text: rgb(255, 255, 255);\n --color-active-caption: rgb(0, 0, 128);\n --color-info-background: rgb(255, 255, 192);\n --color-highlight-text: rgb(255, 255, 255);\n --color-highlight: rgb(0, 0, 128);\n --color-gray-text: rgb(128, 128, 128);\n --color-gray-text-dark: rgb(64, 64, 64);\n --color-link: rgb(0, 0, 255);\n --color-hover: rgb(223, 223, 255);\n\n --font-family: MS Sans Serif, MS Reference Sans Serif, Liberation Sans, Tahoma, sans-serif;\n --font-size: 12px;\n --font-size-text: 14px;\n --font-size-bigger: 13px;\n --font-size-header: 14px;\n --font-line: 1.2;\n --font-line-text: 1.2;\n --font: var(--font-size)/var(--font-line) var(--font-family);\n --font-text: var(--font-size-text)/var(--font-line-text) var(--font-family);\n --font-header: var(--font-size-header)/var(--font-line) var(--font-family);\n\n --button-3d-border-color-exact: var(--color-button-face) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-face);\n --button-3d-box-shadow-exact:\n 0 -1px 0 0 var(--color-button-highlight),\n -1px 0 0 0 var(--color-button-highlight),\n -1px -1px 0 0 var(--color-button-highlight),\n -1px 1px 0 0 var(--color-button-shadow-dark),\n 1px 0 0 0 var(--color-button-shadow-dark),\n 1px 1px 0 0 var(--color-button-shadow-dark);\n --button-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight);\n --button-3d-border-color-inverted: var(--color-button-shadow) var(--color-button-highlight) var(--color-button-highlight) var(--color-button-shadow);\n --button-3d-box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-shadow-dark),\n 1px 1px 0 var(--color-button-shadow-dark);\n --box-3d-border-color: var(--color-button-shadow-dark) var(--color-button-face) var(--color-button-face) var(--color-button-shadow-dark);\n --box-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-shadow),\n -1px 0 0 0 var(--color-button-shadow),\n -1px -1px 0 0 var(--color-button-shadow),\n -1px 1px 0 0 var(--color-button-highlight),\n 1px 0 0 0 var(--color-button-highlight),\n 1px 1px 0 0 var(--color-button-highlight);\n --group-3d-border-color: var(--color-button-highlight) var(--color-button-shadow) var(--color-button-shadow) var(--color-button-highlight);\n --group-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-shadow),\n -1px 0 0 0 var(--color-button-shadow),\n -1px -1px 0 0 var(--color-button-shadow),\n -1px 1px 0 0 var(--color-button-highlight),\n 1px 0 0 0 var(--color-button-highlight),\n 1px 1px 0 0 var(--color-button-highlight);\n --window-3d-box-shadow:\n 0 -1px 0 0 var(--color-button-face),\n -1px 0 0 0 var(--color-button-face),\n -1px -1px 0 0 var(--color-button-face),\n -1px 1px 0 0 var(--color-button-shadow-dark),\n 1px 0 0 0 var(--color-button-shadow-dark),\n 1px 1px 0 0 var(--color-button-shadow-dark);\n\n --image-folder: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAD//5nMzGYAAAD/zJmZmQD//8zx8fEIMK00AAAAAXRSTlMAQObYZgAAAE5JREFUCNdjQIDQ0GAwzVqWKGoAYgQpKSmFhoYyMISlgYCQAUOYIAg4QRgiIjARR4iICFzEESIiAgQghiMQuAAZQUpgYMDAbAwGBgwYAABoaBIom9Nm3gAAAABJRU5ErkJggg==');\n --image-folder-documents: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAACZmQD//5n/zJn///8zMwDn59aGhobMzGZVVVUAM5mAgADx8fH/+/Dq6upNTU2p3qmcAAAAAXRSTlMAQObYZgAAAGlJREFUCNdjAIECBghgfwmmGAVLrn0AMSTaXY68BDNKXNYem72BgUE8LSsrLXMDgyAYpH1gEHEBAguxTAYRJSUlZWWxAAZGJWUlI+NGIAMkoGwIZAAFjIyADAZhZYgIVD+QwRoKAgxwAADcLBkG7Oto1QAAAABJRU5ErkJggg==');\n --image-file-text: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD///8AAADAwMCAgIA71crUAAAAAXRSTlMAQObYZgAAADdJREFUCNdjYFAAAQYGBiYRIBACMhwVQUAByBAEAmEUhpCSkCK6iBLJIgiGszEIABlMSiDAwAAAbdoMvcC7PKEAAAAASUVORK5CYII=');\n --image-file-script: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEX///8AAACAgIDAwMAAAP9P8fJzAAAAUUlEQVQI11WLyRHAMAgDGTsFgCsAuwKGEkL/NYVj8rBeC1rB7ggwBDNowADQAvZ3YUA+TsHjRFmV8jt4r7b4LHkuLGDlroaJtUxEqR+raNydD4tEDMx2wEOBAAAAAElFTkSuQmCC');\n --image-drive-network: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAADAwMAAAACAgID///+AgAD//wAA/wAAgACrI+ZSAAAAAXRSTlMAQObYZgAAAEpJREFUCNdjwAKMwcCAgVkQDIwYTFxAwNmIwRDElyiGMgSFgQywWhADrEZYgYFJCQzAJjEpQI1kBDOAWkKDgAQDUD4lCKoIRCIAANMFDQmCUWfHAAAAAElFTkSuQmCC');\n --image-help: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAACAAIDMAMwAAABmAGbAwMCZAJn/mf/n59aZmZn//wDWAJNmZmaZZjPMZsytqZD/zDOGhobMmTM1eNxEAAAAAXRSTlMAQObYZgAAAG5JREFUGNNVzVEOhSAMRFGHtjzoE1H3v1iHWDFOwse5IekSgyyf4ZdUvk4pRwq3poDKtLufLCJhbneFYNp9b5AVYSojy1p5HQAPZD76GKEa0+1OMxTr4P+jGs3w30oxQ+3DY6pMbOGZwm8Kv+nxBbR5A2SXmbJNAAAAAElFTkSuQmCC');\n --image-files: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD///8AAADAwMCAgIA71crUAAAAAXRSTlMAQObYZgAAADpJREFUCNdjYGBwcXFxUgDSLMbGxspKUAEjI6CQo6CgiLIylCEEFRFSgooIClOB4WwMBCBLlUBAgQEAR6QOgOgRPP8AAAAASUVORK5CYII=');\n --image-tree: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAAAAgAAAAAAA/wCAAACAgAD//wD////AwMCATq9oAAAAAXRSTlMAQObYZgAAAF5JREFUCNd1irENgDAMBJ9I9DguaBOLgtYpqBEzZIGMwP4Nb1HHhe91OgDCQ/AdqlzLuFRcNuyEChVfMDN199YyUmNRqwFmmVeA9TYzEuj9fAiqfoQIxfIfZTaSRfMBdb8LBoGZClYAAAAASUVORK5CYII=');\n --image-install: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIVBMVEUAAACAgIAAAADAwMD///8AAIAA//8AAP8AgID//wAA/wB9pF0iAAAAAXRSTlMAQObYZgAAAIBJREFUCNdjAAJGQUFBARBDxMXFWQjMCA0NBjEERYKTm4EMRheVMAsgg1FQSCW4o1iIQcRRRdnY2BgoIuSuBATKDIxO5YrCgoKGDIxFxSqOM40FgQxjZbFMEyOglLGiVKIxmKEkbCQMYhgxCDtPSwIyFBgYja2UGZiUgNYpKRkAAHKUFEgKyHHMAAAAAElFTkSuQmCC');\n --image-users: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAG1BMVEUAAAAAAAD////AwMAAAICAAAAAAP+AgID/AACUdQtdAAAAAXRSTlMAQObYZgAAAGdJREFUCNctzcEJgDAMBdAIDtCkE5jgAGnBBSy9K3QALy7gBG5u0vov/8GHBCwTYgAPoslrYOqdf/DSl6h8OaJElmCgjcaURVkdKREGPytCagBUPMXxCLb1BZhL0tYOgHrvtf8uFscH72MNfQW7pXEAAAAASUVORK5CYII=');\n --image-lock: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEUAAAAAAACAgAD//wDAwMCZmQD4+PjMzACGhoYAAP+ysrIAmTMICAj/AAB3d3fMADNdKQKAAAAAAXRSTlMAQObYZgAAAGpJREFUCNdjAAIOAQYIaHOE0HwZUgIQAemNYCGOlL/FQCEQQ3JiCpiR6ygGkXKZBhZgUBRxAQswSRkJggWURY2VlJQUgAxFYWNjY0MgQ028NDy0XIBBvag85qhgIFBxaKgAIwNIuaAg2EYAxGwRy03mvagAAAAASUVORK5CYII=');\n --image-message-warning: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAD1BMVEUAAAD//wAAAACAgICAgAD7lZT4AAAAAXRSTlMAQObYZgAAAFFJREFUCNc9zNENgCAMhOE+sEA7gcICVRYQ4/4z+bcELn34krtUyPdIpqhteGKoHhOmbTb1tA2PBjAKvIMRjRqXIIz4cl98WmiABErNdJGe8R94Ngsp7z6ySgAAAABJRU5ErkJggg==');\n --image-hierarchy: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEUAAAAAAAD////AwMD/AAAA/////wAA/wC2MU76AAAAAXRSTlMAQObYZgAAAE9JREFUCNc9ytERgDAIA1BwgxRPv8ENigt4xwLuv4xVsPl6l4QYihEivs+IuAZQWKSbmb5AS2CThCPBpo6WwC5/U+iHF+ZnzckcBcsPvtADzokMhSp6+fAAAAAASUVORK5CYII=');\n --image-graph: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAAAAAACAAID///8A//+AgIDAwMAGyj3KAAAAAXRSTlMAQObYZgAAAFlJREFUCNdVy7ENwDAIRFGa9AGb9LCB5Qks3QoZII33HyHYFFFe9cUJ4nRS6Zt+cc1nhrg0KTmJW+usxO4u7Eriyz8sth1VbKxgDIPEF4CKoVSxxSUpHXd6AVDAE78kckOGAAAAAElFTkSuQmCC');\n --image-config: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAM1BMVEUAAABmZgCZmZn/+/Dn59aZmQD//5kzMwAcHBzAwMDMzGZNTU0AAADq6upmZmYzAACtqZA/egufAAAAAXRSTlMAQObYZgAAAHJJREFUGNNNzVESgyAMRVEu8QVLBdz/aosU1DvDzyGThPgURtG22XfBZ9/3uJU3mMU18QC8oC/EjBvOlE5cBGleoegCGQvEBWhCcneycDcGkPAM2cUETG6eZceAgolmudElhForJOBooPCP1F//XLBw9APHJgNeldevuwAAAABJRU5ErkJggg==');\n }\n\n body {\n background: var(--color-button-face) !important;\n font: var(--font) !important;\n color: var(--color-button-text) !important;\n }\n a {\n color: var(--color-link);\n }\n ::-moz-selection {\n color: var(--color-highlight-text) !important;\n background: var(--color-highlight) !important;\n }\n ::selection {\n color: var(--color-highlight-text) !important;\n background: var(--color-highlight) !important;\n }\n\n .markdown-body {\n font: var(--font-text) !important;\n }\n .markdown-body pre,\n .markdown-body .highlight pre,\n .markdown-body code {\n background: #eee !important;\n }\n\n .avatar,\n .gravatar {\n border-radius: 0 !important;\n }\n\n label {\n font: inherit !important;\n color: inherit !important;\n }\n .note,\n .info,\n .text-gray,\n .text-gray-light {\n font: inherit !important;\n color: var(--color-gray-text-dark) !important;\n }\n\n .Header {\n background: var(--color-active-caption) !important;\n font: inherit !important;\n }\n .HeaderNavlink {\n color: var(--color-active-caption-text) !important;\n font-weight: normal !important;\n }\n .HeaderNavlink:hover {\n text-decoration: underline !important;\n }\n .header-search-key-slash {\n display: none !important;\n }\n h1, h2, h3, h4, h5, h6 {\n border: none !important;\n }\n\n .footer .pt-6 {\n margin: 8px 0 0 0 !important;\n padding: 0 !important;\n border: none !important;\n }\n .footer .pb-6 {\n padding: 0 0 8px 0 !important;\n }\n\n .repohead {\n background: var(--color-button-face) !important;\n margin: 0;\n }\n .pagehead {\n border: none !important;\n }\n .pagehead *,\n .file-wrap * {\n font-size: inherit !important;\n }\n .numbers-summary a,\n .numbers-summary .nolink,\n .reponav-item {\n color: inherit;\n }\n .numbers-summary a:hover {\n text-decoration: underline !important;\n }\n\n .social-count {\n font: inherit !important;\n color: var(--color-link) !important;\n background: inherit !important;\n border: none !important;\n padding: 6px;\n }\n .social-count:hover {\n text-decoration: underline !important;\n }\n\n .topic-tag {\n color: inherit;\n background: var(--color-button-checked) !important;\n border: solid 1px transparent !important;\n border-color: var(--color-button-shadow) var(--color-button-highlight) var(--color-button-highlight) var(--color-button-shadow) !important;\n border-radius: 0 !important;\n }\n .topic-tag:hover {\n color: var(--color-link) !important;\n }\n\n .repository-meta:not(.open) {\n font-size: inherit !important;\n font-weight: bold !important;\n margin: 6px 0;\n }\n .repository-meta .repo-description-field {\n width: 490px;\n }\n .topic-input-container .tag-input {\n width: 880px;\n }\n .container.experiment-repo-nav {\n padding: 8px;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n box-shadow: var(--button-3d-box-shadow) !important;\n width: 1000px;\n }\n\n .commit-tease {\n margin: 0 0 8px 0 !important;\n }\n .commit-tease-contributors {\n background: transparent !important;\n border: none !important;\n margin: 8px -10px 0 -10px !important;\n }\n\n .pr-toolbar {\n background: var(--color-button-face) !important;\n margin: 1px -20px !important;\n }\n .pr-toolbar.is-stuck {\n border-bottom: solid 1px var(--color-button-shadow) !important;\n box-shadow: 0 1px 0 0 var(--color-button-shadow-dark) !important;\n }\n .pr-toolbar-shadow {\n display: none !important;\n }\n .diffbar {\n background: inherit !important;\n }\n\n .file-wrap,\n .blob-wrapper,\n .menu,\n .network,\n #readme,\n .overall-summary,\n .summary-stats,\n .pulse-section .simple-conversation-list,\n .capped-list,\n .issues-listing > div[class^=border] {\n background: var(--color-window) !important;\n border: solid 1px black !important;\n border-color: var(--box-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--box-3d-box-shadow) !important;\n }\n .network {\n padding: 4px !important;\n }\n .file {\n border: none !important;\n margin: 0 !important;\n }\n .file-header {\n background: transparent !important;\n }\n .menu-item {\n font: inherit !important;\n border: none !important;\n border-radius: 0 !important;\n color: inherit !important;\n }\n .menu-item:hover {\n background: var(--color-hover) !important;\n }\n .menu-item.selected {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .menu-item::before {\n display: none !important;\n }\n .network .current-repository,\n .network .current-repository a {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .network .current-repository {\n padding: 0px 4px 1px !important;\n }\n table.files td a,\n table.files td span {\n color: var(--color-window-text) !important;\n }\n table.files tr.navigation-focus td {\n background: var(--color-highlight) !important;\n }\n table.files tr.navigation-focus td a,\n table.files tr.navigation-focus td span {\n color: var(--color-highlight-text) !important;\n }\n .Box-row.navigation-focus {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .Box-row.navigation-focus * {\n color: inherit !important;\n }\n .Box-row {\n margin: 0 !important;\n }\n .overall-summary {\n height: 60px;\n padding: 8px;\n }\n .numbers-summary a,\n .numbers-summary .nolink {\n padding: 0;\n }\n .repository-lang-stats * {\n font: inherit !important;\n }\n .repository-lang-stats .language-color {\n width: 16px !important;\n height: 16px !important;\n border-radius: 0 !important;\n vertical-align: -4px;\n }\n .repository-lang-stats a:hover,\n .repository-lang-stats a:hover span {\n color: var(--color-link) !important;\n text-decoration: underline !important;\n }\n .IssueLabel {\n font: inherit !important;\n line-height: 13px !important;\n border: none !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n height: 18px !important;\n }\n .capped-list th {\n background: var(--color-button-face) !important;\n }\n .capped-list tbody {\n background: var(--color-window) !important;\n }\n\n .repository-lang-stats-graph {\n border: solid 1px var(--color-button-shadow-dark) !important;\n border-radius: 0 !important;\n height: 16px !important;\n margin: 6px 0 -6px 0 !important;\n pointer-events: none !important;\n }\n .repository-lang-stats-graph .language-color {\n border-radius: 0 !important;\n }\n\n .table-list-header {\n background: inherit !important;\n border: none !important;\n margin: 4px 0 !important;\n }\n .table-list-header .btn-link {\n padding: 6px 8px !important;\n }\n\n .issues-listing .h4 {\n font: inherit !important;\n font-size: var(--font-size-bigger) !important;\n }\n\n .discussion-timeline,\n .timeline-comment-wrapper,\n .timeline-comment,\n .timeline-comment-header,\n .discussion-timeline-actions {\n background: inherit !important;\n border: none !important;\n }\n .discussion-timeline::before {\n display: none !important;\n }\n .discussion-item + .discussion-item,\n .discussion-item-review + .discussion-item,\n .discussion-sidebar-item + .discussion-sidebar-item {\n border-top: solid 1px var(--color-button-highlight) !important;\n box-shadow: 0 -1px 0 0 var(--color-button-shadow) !important;\n }\n .discussion-sidebar-item {\n color: inherit !important;\n }\n .comment-reactions.has-reactions {\n border: none !important;\n }\n .gh-header-meta {\n border-bottom: solid 1px var(--color-button-shadow) !important;\n box-shadow: 0 1px 0 0 var(--color-button-highlight) !important;\n }\n\n .UnderlineNav,\n .tabnav {\n margin: 0 !important;\n background: inherit !important;\n border: none !important;\n }\n .select-menu-tabs {\n font-size: 0;\n }\n .reponav {\n width: 1000px;\n }\n .reponav > span,\n .select-menu-tabs ul,\n .select-menu-tab {\n display: contents !important;\n }\n .UnderlineNav-item,\n .pagehead-tabs-item,\n .tabnav-tabs a,\n .tabnav-tabs span:not(.Counter),\n .reponav-item,\n .select-menu-tab a {\n font-size: var(--font-size);\n font-weight: normal !important;\n color: var(--color-button-text) !important;\n background: var(--color-button-face) !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n border-bottom: none !important;\n border-radius: 2px 2px 0 0 !important;\n box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-highlight)\n !important;\n margin: 0 1px -1px 0 !important;\n padding: 4px 6px !important;\n min-height: 26px;\n }\n .UnderlineNav-item.selected,\n .pagehead-tabs-item.selected,\n .tabnav-tabs a.selected,\n .tabnav-tabs span:not(.Counter).selected,\n .reponav-item.selected,\n .select-menu-tab a.selected {\n box-shadow:\n 1px 0 0 var(--color-button-shadow-dark),\n 0 1px 0 var(--color-button-face)\n !important;\n margin: -2px 1px 1px 0 !important;\n min-height: 28px;\n }\n .tabnav-tabs span:not(.Counter) {\n color: var(--color-gray-text) !important;\n }\n\n .Counter {\n background: inherit !important;\n font: inherit !important;\n color: inherit !important;\n padding: 0 !important;\n }\n .Counter::before {\n content: \"(\";\n }\n .Counter::after {\n content: \")\";\n }\n\n .auth-form-body,\n .select-menu-modal,\n .dropdown-menu {\n background: var(--color-button-face) !important;\n color: inherit !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--window-3d-box-shadow) !important;\n padding: 0 !important;\n }\n\n .dropdown-menu::before,\n .dropdown-menu::after {\n display: none !important;\n }\n .dropdown-item:hover {\n background: var(--color-highlight) !important;\n }\n .dropdown-divider {\n height: 0 !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color-inverted) !important;\n }\n\n .select-menu-header {\n background: var(--color-active-caption) !important;\n padding: 4px 6px !important;\n }\n .select-menu-title {\n color: var(--color-active-caption-text) !important;\n }\n .select-menu-filters {\n background: inherit !important;\n }\n .select-menu-item.navigation-focus {\n background: var(--color-highlight) !important;\n color: var(--color-highlight-text) !important;\n }\n .select-menu-item .text-gray {\n color: var(--color-gray-text) !important;\n }\n .select-menu-item.navigation-focus .text-gray {\n color: inherit !important;\n }\n\n .tooltipped::before {\n display: none !important;\n }\n .Popover-message,\n .tooltipped::after {\n font: inherit !important;\n color: var(--color-window-text) !important;\n background: var(--color-info-background) !important;\n border: solid 1px var(--color-button-shadow-dark) !important;\n border-radius: 0 !important;\n box-shadow: none !important;\n }\n .Popover-message::before,\n .Popover-message::after {\n display: none !important;\n }\n\n .btn-link,\n .btn,\n .btn:hover,\n .subnav-item,\n .pagination > :not(.gap),\n #user-links .dropdown,\n .js-menu-close {\n font: var(--font) !important;\n font-weight: normal !important;\n background: var(--color-button-face) !important;\n color: var(--color-button-text) !important;\n border: solid 1px transparent !important;\n border-color: var(--button-3d-border-color-exact) !important;\n border-radius: 0 !important;\n box-shadow: var(--button-3d-box-shadow-exact) !important;\n margin: 1px 2px !important;\n }\n .btn-link svg,\n .btn svg,\n .btn:hover svg,\n .subnav-item svg,\n #user-links .dropdown svg,\n .js-menu-close svg {\n fill: var(--color-window-text) !important;\n }\n .pagination .disabled {\n color: var(--color-gray-text) !important;\n }\n .pagination .current {\n font-weight: bold !important;\n }\n .pagination > .gap {\n background: inherit !important;\n border: none !important;\n color: inherit !important;\n }\n .btn-link .dropdown-caret,\n .btn .dropdown-caret,\n .btn:hover .dropdown-caret,\n .subnav-item .dropdown-caret,\n #user-links .dropdown .dropdown-caret {\n color: var(--color-window-text) !important;\n border-top-color: var(--color-window-text) !important;\n }\n .btn-link:active,\n .btn:active,\n .btn.selected,\n [open] > .btn,\n .subnav-item:active,\n .pagination > :not(.gap):not(.disabled):active,\n #user-links .dropdown:active,\n .js-menu-close:active {\n border-color: var(--color-button-shadow) !important;\n box-shadow:\n 0 0 0 1px var(--color-button-shadow-dark)\n !important;\n }\n .btn-link:focus,\n .btn:focus,\n .subnav-item:focus {\n outline: dotted 1px var(--color-button-text) !important;\n outline-offset: -4px !important;\n }\n\n input:not([type]),\n input[type=text],\n input[type=search],\n input[type=password],\n input[type=url],\n .tag-input,\n textarea {\n color: var(--color-window-text) !important;\n background: var(--color-window) !important;\n border: solid 1px black !important;\n border-color: var(--box-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--box-3d-box-shadow) !important;\n margin: 0 2px !important;\n padding-top: 4px !important;\n padding-bottom: 4px !important;\n min-height: 0 !important;\n }\n input::placeholder {\n color: var(--color-gray-text) !important;\n opacity: 1 !important;\n }\n\n .btn-link {\n padding: 4px 6px;\n text-decoration: none !important;\n }\n .milestone-action .btn-link {\n border: none !important;\n box-shadow: none !important;\n padding: 0 !important;\n }\n .js-menu-close {\n width: 16px !important;\n height: 14px !important;\n }\n\n #user-links .dropdown {\n height: 22px !important;\n margin: 0 0 0 8px !important;\n }\n #user-links .dropdown > * {\n height: 20px !important;\n line-height: 20px !important;\n margin: 0 2px !important;\n padding: 0 4px 0 0 !important;\n }\n #user-links .dropdown details summary {\n margin: 0 !important;\n }\n #user-links .mail-status.unread {\n position: static !important;\n display: inline !important;\n width: 0 !important;\n height: 0 !important;\n background: transparent !important;\n border: none !important;\n white-space: nowrap;\n }\n #user-links .notification-indicator .mail-status.unread::after {\n color: var(--color-button-text) !important;\n content: \"(unread)\";\n }\n\n .Box:not(.position-absolute):not(.Popover-message):not(.js-network-graph-container),\n #user-repositories-list li,\n .user-profile-nav + .position-relative > .d-block,\n .blankslate,\n .border,\n .timeline-comment,\n .commit-tease {\n font: inherit !important;\n color: inherit !important;\n line-height: 20px !important;\n background: var(--color-button-face) !important;\n border: solid 1px black !important;\n border-color: var(--group-3d-border-color) !important;\n border-radius: 0 !important;\n box-shadow: var(--group-3d-box-shadow) !important;\n position: relative !important;\n padding: 12px 8px 4px 8px;\n margin-top: 2px !important;\n }\n #user-repositories-list li > .d-inline-block,\n .user-profile-nav + .position-relative > .d-block > .d-inline-block,\n .js-notice > .border::before,\n .commit-tease::before {\n color: var(--color-button-text) !important;\n background: var(--color-button-face) !important;\n position: absolute;\n left: 6px;\n top: -11px;\n padding: 0 3px;\n }\n .js-notice > .border::before {\n content: \"Notice\";\n }\n .commit-tease::before {\n content: \"Last commit\";\n }\n\n .Box.Box.Box.Box.Box.Box.Box--danger {\n background: red !important;\n }\n .Box-row {\n border-top: solid 1px var(--color-button-highlight) !important;\n box-shadow: 0 -1px 0 0 var(--color-button-shadow) !important;\n }\n .Box-row:first-of-type {\n border: none !important;\n box-shadow: none !important;\n }\n .Box-header {\n background: inherit !important;\n border: none !important;\n padding: 0 8px !important;\n }\n .Box h3 {\n font: var(--font-header) !important;\n border: none !important;\n }\n\n .Subhead {\n border: none !important;\n font-size: var(--font-size-header) !important;\n margin: 0 0 6px 0 !important;\n }\n .Subhead h2,\n .Subhead-heading {\n font-size: var(--font-size-header) !important;\n font-weight: bold !important;\n }\n .Subhead--spacious {\n margin: 12px 0 0 0 !important;\n }\n\n .boxed-group > h3,\n .boxed-group .heading {\n background: none !important;\n }\n\n #user-repositories-list li,\n .user-profile-nav + .position-relative > .d-block {\n margin: 0 0 16px 0 !important;\n padding: 12px 8px 8px 8px !important;\n }\n #user-repositories-list li > .d-inline-block,\n .user-profile-nav + .position-relative > .d-block > .d-inline-block {\n display: flex !important;\n flex-flow: row !important;\n margin: 2px 0 0 0;\n }\n #user-repositories-list li > .d-inline-block > span::before {\n content: \" (\";\n }\n #user-repositories-list li > .d-inline-block > span::after {\n content: \")\";\n }\n #user-repositories-list li > .my-1,\n #user-repositories-list li > .mt-2,\n .user-profile-nav + .position-relative > .d-block > .mt-2 {\n margin: 0 !important;\n }\n #user-repositories-list h3,\n .user-profile-nav + .position-relative > .d-block h3 {\n font: bold var(--font) !important;\n }\n #user-repositories-list h3 + span {\n font: var(--font) !important;\n }\n #user-repositories-list h3 + span a {\n color: var(--color-link) !important;\n }\n #user-repositories-list h3 + span a:hover {\n text-decoration: underline !important;\n }\n #user-repositories-list .text-gray,\n .user-profile-nav + .position-relative > .d-block .text-gray {\n color: inherit !important;\n }\n .repo-language-color {\n width: 16px !important;\n height: 16px !important;\n border-radius: 0 !important;\n margin: 2px 4px -2px 0 !important;\n }\n\n .summary-stats {\n margin: -2px 0 4px 0 !important;\n }\n .summary-stats li {\n border: none !important;\n color: inherit !important;\n }\n .summary-stats li a {\n background: inherit !important;\n color: inherit !important;\n }\n .summary-stats li a:hover {\n color: var(--color-link) !important;\n text-decoration: underline !important;\n }\n .summary-stats li a .num {\n font: bold var(--font) !important;\n text-decoration-color: transparent !important;\n }\n .diffstat-summary {\n font: inherit !important;\n line-height: 166% !important;\n color: inherit !important;\n padding: 32px 48px 0 8px !important;\n }\n .pulse-section {\n font: inherit !important;\n color: inherit !important;\n }\n .pulse-section h3 {\n color: inherit !important;\n }\n .pulse-section h3 span {\n background: none !important;\n font: var(--font-header) !important;\n }\n .pulse-section h3 .text-emphasized {\n font-weight: bold !important;\n }\n .simple-conversation-list {\n font: inherit !important;\n color: inherit !important;\n }\n .simple-conversation-list > li {\n border: none !important;\n padding: 2px 0 !important;\n }\n .simple-conversation-list > li .num {\n color: var(--color-gray-text) !important;\n }\n .pulse-section .simple-conversation-list {\n padding: 4px 8px !important;\n }\n\n .Box.d-block svg {\n margin: 0 0 -8px -8px;\n }\n .tint-box,\n .capped-card-content {\n background: transparent !important;\n }\n svg .tick text {\n fill: var(--color-button-text) !important;\n }\n svg .tick line {\n stroke: var(--color-gray-text) !important;\n }\n\n .js-edit-repo-container dl {\n margin: 0 !important;\n }\n .boxed-group-inner,\n .access-form-wrapper {\n background: none !important;\n color: inherit !important;\n border: none !important;\n }\n .settings-next {\n font: inherit !important;\n }\n\n .auth-form-header {\n display: none !important;\n }\n .auth-form-body {\n position: relative !important;\n padding: 32px 8px 8px 8px !important;\n font: inherit !important;\n }\n .auth-form-body::before {\n display: block;\n position: absolute;\n height: 24px;\n left: 0;\n right: 0;\n margin: -32px 0 0 0;\n padding: 0 10px;\n background: var(--color-active-caption) !important;\n color: var(--color-active-caption-text) !important;\n font: bold var(--font-size)/24px var(--font-family);\n content: \"Confirm password to continue\";\n }\n .auth-form-body .btn {\n margin: 8px 2px 0 2px !important;\n }\n\n .octicon-file-directory, .octicon-file, .octicon-book, .octicon-history, .octicon-git-branch, .octicon-tag, .octicon-organization, .octicon-law, .octicon-code,\n .octicon-issue-opened, .octicon-git-pull-request, .octicon-project, .octicon-graph, .octicon-gear, .octicon-repo {\n fill: transparent !important;\n width: 16px !important;\n height: 16px !important;\n }\n .octicon-file-directory { background: var(--image-folder) !important; }\n .octicon-file { background: var(--image-file-text) !important; }\n .octicon-book { background: var(--image-help) !important; }\n .octicon-history { background: var(--image-files) !important; }\n .octicon-git-branch { background: var(--image-tree) !important; }\n .octicon-tag { background: var(--image-install) !important; }\n .octicon-organization { background: var(--image-users) !important; }\n .octicon-law { background: var(--image-lock) !important; }\n .octicon-code { background: var(--image-file-script) !important; }\n .octicon-issue-opened { background: var(--image-message-warning) !important; }\n .octicon-git-pull-request { background: var(--image-drive-network) !important; }\n .octicon-project { background: var(--image-hierarchy) !important; }\n .octicon-graph { background: var(--image-graph) !important; }\n .octicon-gear { background: var(--image-config) !important; }\n .octicon-repo { background: var(--image-folder-documents) !important; }", + "urls": [], + "urlPrefixes": [], + "domains": [ + "github.com" + ], + "regexps": [] + } + ], + "usercssData": { + "vars": {}, + "name": "GitHub Windows Edition [Ath]", + "namespace": "https://github.com/Athari", + "version": "0.6.0", + "description": "Transforms GitHub's pages into a GUI resembling Windows 9x.", + "author": "Athari", + "homepageURL": "https://github.com/Athari/CssGitHubWindows", + "license": "MIT" + }, + "name": "GitHub Windows Edition [Ath]", + "description": "Transforms GitHub's pages into a GUI resembling Windows 9x.", + "author": "Athari", + "originalDigest": "17f37e4697df092b2fb98fb37cbd0740e6769a53", + "id": 15, + "updateDate": 1534175986776, + "_id": "ed6368eb-01f6-4624-922a-6844a88b08ad", + "_rev": 1580730543289, + "etag": "W/\"f81c396b14660923c8b9cb817cfcf223a54e234054e2eb51b36f603a4817727e\"", + "_usw": {} + }, + { + "installDate": 1536263450643, + "enabled": true, + "updateUrl": "https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/usercss/146429.user.css", + "url": "https://33kk.github.io/uso-archive/?style=146429", + "sections": [ + { + "code": "/* ==UserStyle==\n@name MyAnimeList DeepDark\n@namespace github.com/RaitaroH/MyAnimeList-DeepDark\n@homepageURL https://github.com/RaitaroH/MyAnimeList-DeepDark\n@version 1.4.7\n@updateURL https://rawgit.com/RaitaroH/MyAnimeList-DeepDark/master/MyAnimeListDeepDark.user.css\n@description Satisfy thy craving for anime and organization. May the dark be kinder on thine eyes. (MyAnimeList Dark Theme)\n@author RaitaroH\n@license GNU-V3.0\n\n@preprocessor uso\n@var select mainColor 'Main color' {\n\t\"DeepDark\": \"#00adee\",\n\t\"BreezeDark\": \"#3DAEE9\",\n\t\"Vertex Dark\": \"#4080fb\",\n\t\"Arc Dark\": \"#5294E2\",\n\t\"Firefox Dark\": \"#5675B9\",\n\t\"Firefox57\": \"#4080FB\",\n\t\"Discord\": \"#7289DA\",\n\t\"YouTubeDark\": \"#E52117\",\n\t\"Mint-Y-Dark\": \"#9AB87C\",\n\t\"9anime\": \"#723f8c\",\n\t\"Black&White\": \"#ffffff\",\n\t\"Yellow_petrocompletions\": \"#FFC700\",\n\t\"Yellow2\": \"#FFC700\",\n\t\"Ubuntu_grey\": \"#EF7847\",\n\t\"Ubuntu_purple\": \"#EF7847\",\n\t\"Orange\": \"#ff6905\",\n\t\"Jisho_夜明け\": \"#EF7D6C\",\n\t\"Custom\": \"/*[[custom-main-color]]*\\/\"\n}\n@var color custom-main-color \"Custom main color\" #00adee\"\n\n@var select mainBackground 'Main background color' {\n\t\"DeepDark\": \"#111111\",\n\t\"BreezeDark\": \"#232629\",\n\t\"Vertex Dark\": \"#2B2B2C\",\n\t\"Arc Dark\": \"#343944\",\n\t\"Firefox Dark\": \"#272B35\",\n\t\"Firefox57\": \"#0C0C0D\",\n\t\"Discord\": \"#1E2124\",\n\t\"YouTubeDark\": \"#111111\",\n\t\"Mint-Y-Dark\": \"#2F2F2F\",\n\t\"9anime\": \"#0B0A0D\",\n\t\"Black&White\": \"#000000\",\n\t\"Yellow_petrocompletions\": \"#141414\",\n\t\"Yellow2\": \"#0a0800\",\n\t\"Ubuntu_grey\": \"#312D2A\",\n\t\"Ubuntu_purple\": \"#2C071A\",\n\t\"Orange\": \"#0a0400\",\n\t\"Jisho_夜明け\": \"#332222\",\n\t\"Custom\": \"/*[[custom-main-background]]*\\/\"\n}\n@var color custom-main-background \"Custom main background\" \"#111111\"\n\n@var select secondBackground 'Second background color' {\n\t\"DeepDark\": \"#181818\",\n\t\"BreezeDark\": \"#2a2e32\",\n\t\"Vertex Dark\": \"#353638\",\n\t\"Arc Dark\": \"#383C4A\",\n\t\"Firefox Dark\": \"#181D20\",\n\t\"Firefox57\": \"#252526\",\n\t\"Discord\": \"#2F3136\",\n\t\"YouTubeDark\": \"#232323\",\n\t\"Mint-Y-Dark\": \"#383838\",\n\t\"9anime\": \"#17151C\",\n\t\"Black&White\": \"#0a0a0a\",\n\t\"Yellow_petrocompletions\": \"#202222\",\n\t\"Yellow2\": \"#0c0a04\",\n\t\"Ubuntu_grey\": \"#3D3C38\",\n\t\"Ubuntu_purple\": \"#430B28\",\n\t\"Orange\": \"#0e0702\",\n\t\"Jisho_夜明け\": \"#2A1B1B\",\n\t\"Custom\": \"/*[[custom-second-background]]*\\/\"\n}\n@var color custom-second-background \"Custom second background\" \"#181818\"\n\n@var select hoverBackground 'Hover background color' {\n\t\"DeepDark\": \"#232323\",\n\t\"BreezeDark\": \"#31363b\",\n\t\"Vertex Dark\": \"#515254\",\n\t\"Arc Dark\": \"#414A59\",\n\t\"Firefox Dark\": \"#353A44\",\n\t\"Firefox57\": \"#323234\",\n\t\"Discord\": \"#484B51\",\n\t\"YouTubeDark\": \"#343434\",\n\t\"Mint-Y-Dark\": \"#404040\",\n\t\"9anime\": \"#1E1C25\",\n\t\"Black&White\": \"#0f0f0f\",\n\t\"Yellow_petrocompletions\": \"#353838\",\n\t\"Yellow2\": \"#0f0d05\",\n\t\"Ubuntu_grey\": \"#59564D\",\n\t\"Ubuntu_purple\": \"#520D30\",\n\t\"Orange\": \"#110903\",\n\t\"Jisho_夜明け\": \"#863B2F\",\n\t\"Custom\": \"/*[[custom-hover-background]]*\\/\"\n}\n@var color custom-hover-background \"Custom hover background\" \"#232323\"\n\n@var select mainText 'Main text color' {\n\t\"DeepDark\": \"#eff0f1\",\n\t\"BreezeDark\": \"#eff0f1\",\n\t\"Vertex Dark\": \"#F3F3F5\",\n\t\"Arc Dark\": \"#C1C8D1\",\n\t\"Firefox Dark\": \"#E3EEF9\",\n\t\"Firefox57\": \"#F9F9FA\",\n\t\"Discord\": \"#FFFFFF\",\n\t\"YouTubeDark\": \"#E1E1E1\",\n\t\"Mint-Y-Dark\": \"#FFFFFF\",\n\t\"9anime\": \"#B4B4B4\",\n\t\"Black&White\": \"#b4b4b4\",\n\t\"Yellow_petrocompletions\": \"#EFF0F1\",\n\t\"Yellow2\": \"#fffdf5\",\n\t\"Ubuntu_grey\": \"#F2F1EF\",\n\t\"Ubuntu_purple\": \"#F2F1EF\",\n\t\"Orange\": \"#fff9f5\",\n\t\"Jisho_夜明け\": \"#EFB26C\",\n\t\"Custom\": \"/*[[custom-main-text]]*\\/\"\n}\n@var color custom-main-text \"main-text\" \"#eff0f1\"\n\n@var select dimmerText 'Secondary text color' {\n\t\"DeepDark\": \"#CCCCCC\",\n\t\"BreezeDark\": \"#bdc3c7\",\n\t\"Vertex Dark\": \"#AEAFB0\",\n\t\"Arc Dark\": \"#B3BAC5\",\n\t\"Firefox Dark\": \"#606376\",\n\t\"Firefox57\": \"#D0D0D0\",\n\t\"Discord\": \"#ADA8AA\",\n\t\"YouTubeDark\": \"#7F7F7F\",\n\t\"Mint-Y-Dark\": \"#D5DADA\",\n\t\"9anime\": \"#747474\",\n\t\"Black&White\": \"#828282\",\n\t\"Yellow_petrocompletions\": \"#9F9999\",\n\t\"Yellow2\": \"#fff8e1\",\n\t\"Ubuntu_grey\": \"#E6E5E3\",\n\t\"Ubuntu_purple\": \"#E6E5E3\",\n\t\"Orange\": \"#ffede1\",\n\t\"Jisho_夜明け\": \"#986E3F\",\n\t\"Custom\": \"/*[[custom-dimmer-text]]*\\/\"\n}\n@var color custom-dimmer-text \"dimmer-text\" \"#CCCCCC\"\n\n@advanced dropdown progress \"Custom progress colors\" {\n normal \"No\" << div\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common p, .page-common .textReadability, .page-common span, .page-common td, .page-common .dark_text, .page-common .dark_text:hover, .page-common .dark_text:visited\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common #profileRows a:hover, .page-common .profileRows a:hover, .detail-characters-list .left-column table:nth-of-type(2n), .detail-characters-list .left-right table:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t/*Recent forum discussion*/\n\t.page-forum .forum_boardrow2, .page-forum .forum_boardrow1\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Text in polls*/\n\t.page-forum .forum_boardrow1\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\n\n\t/*Videos*/\n\t.video-block.episode-video .outside-region .outside-region-block\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/arrows.png\") !important;\n\t}\n\n\n\t/*Episodes*/\n\t.episode_list .episode-list-header td, .episode_list .episode-list-data:nth-of-type(2n+1) td, .episode_list .episode-list-header td:last-of-type\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.episode_list .episode-list-header, .episode_list .episode-list-data:nth-of-type(2n+1) td, .di-t, .contents-video-embed .episode-information\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.episode_list .episode-list-header .episode-number .btn-sort-outer\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-sort-triangle.png\") !important;\n\t}\n\t.episode_list .episode-list-data:nth-of-type(2n) td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .fn-grey2\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.user-status-block .btn-forum-episode, .contents-video-embed .btn-rect\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\topacity: .9;\n\t}\n\t.user-status-block .btn-forum-episode:hover, .contents-video-embed .btn-rect:hover\n\t{\n\t\topacity: 1;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.contents-video-embed .btn-video-anime-slide.hori, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.contents-video-embed .btn-video-anime-slide.hori:hover, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime.play .link, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime:hover .link\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.contents-video-embed .video-anime-slide-block.hori\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime .link .text\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\n\n\t/*Reviews*/\n\t.reviews-horiznav-nav-sort-block, .page-common .border_bottom, .js-scrollfix-bottom-rel > div\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .button_form\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .button_form:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Recommendations*/\n\t.page-common .bgColor1\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.btn-detail-recommendations-view-all\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.btn-detail-recommendations-view-all:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Stats*/\n\t.page-common div.updatesBar\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.table-recently-updated tr:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.table-recently-updated tr:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.statistics-info\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.statistics-info::after, .statistics-info::before\n\t{\n\t\tborder-top-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Characters & Voice Actors*/\n\t.page-common .bgColor2\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Forum*/\n\t.page-common .normal_header, .page-forum .forum-table-header, .page-common .quotetext, .page-common .codetext\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\ta.icon-team-title.manga_db_moderator,.icon-team-title.social_media_moderator, .icon-team-title.social_media_moderator:hover, a.icon-team-title.forum_moderator, a.icon-team-title.review_recommendation_moderator, .icon-team-title.database_administrator, .icon-team-title.news_moderator\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t}\n\t.page-forum .sig\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-forum .forum_boardrowspacer\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.page-forum .forum_category\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-forum .forum_locheader, #content > div, .page-common .fn-grey5\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-forum .btn-forum, .page-forum .btn-forum, .btn-rect-grey1, .page-common .forum-topic-sort\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: transparent !important;\n\t}\n\t.page-forum .btn-forum:hover, .page-forum .btn-forum:hover, .btn-rect-grey1:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\t/*Top anime page*/\n\t.top-ranking-table .table-header td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t/*Buttons*/\n\t.page-common .pagination .link-blue-box\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.notinmylist\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.completed, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.dropped, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantoread, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantowatch, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.reading, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.watching, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.on-hold\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.completed\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.dropped\n\t{\n\t\tbackground-color: var(--red) !important;\n\t\tborder-color: var(--red) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantoread, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantowatch\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t\tborder-color: var(--gray) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.reading, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.watching\n\t{\n\t\tbackground-color: var(--green) !important;\n\t\tborder-color: var(--green) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.on-hold\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t\tborder-color: var(--yellow) !important;\n\t}\n\n\t.top-ranking-table .icon-score-star\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-rank-stars.png\") !important;\n\t}\n\n\t.icon-top-ranking-page .prev:hover, .icon-top-ranking-page .next:hover, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.notinmylist:hover, .page-common .pagination .link-blue-box:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.icon-top-ranking-page .prev, .icon-top-ranking-page .next\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t/*Rows odd*/\n\t.top-ranking-table tr.ranking-list:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Rows even*/\n\t.top-ranking-table tr.ranking-list:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.top-ranking-table .title .information\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.top-ranking-table tr:last-of-type\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Seasonal anime*/\n\t.navi-seasonal\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a:hover, .navi-seasonal .horiznav_nav ul li a.horiznav_active, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type:hover, .navi-seasonal .horiznav_nav ul li a.on:hover, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type.on:hover, .page-common .inputButton:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\ttransition: none !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a.on, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type.on\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav-nav-seasonal, .navi-seasonal .horiznav_nav\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.page-common .inputtext\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .inputtext:active, .page-common .inputtext:focus, .page-common .inputtext:hover\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.season .btn-show-sort:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.season .btn-show-kids, .season .btn-show-r18\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.page-common .inputButton, .seasonal-anime-list .anime-header\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Episode*/\n\t.watch .video-menu-category .btn-category.on\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.watch .video-menu-category .btn-category:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\ttransition: none !important;\n\t}\n\t.watch .video-menu-category .btn-category\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.video-menu-category\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.watch .video-menu-category .btn-hide-blocked-video\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.video-block .video-list.episode a\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.video-block .video-list.episode a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Industry forums*/\n\t.forum .forum-header\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-board:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.forum .forum-board, .forum .content-container .container-left, .forum .forum-side-block .header, .forum .forum-side-block .forum-side-list .forum-post\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .fn-grey4\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common .fn-blue1\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t.forum .forum-search-side .forum-search-select\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-triangles.png\") !important;\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-search-side .forum-search-input-text, .forum .forum-search-side .forum-search-input-submit.notActive, .forum .forum-search-side .forum-search-input-submit\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-search-side .forum-search-input-text:hover, .forum .forum-search-side .forum-search-input-text:active, .forum .forum-search-side .forum-search-input-text:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Login page*/\n\t#dialog, #dialog td, .page-common .social-login-block, .page-common .login-inputtext\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .social-login-block::after\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .icon-social-login.icon-fb, .page-common .icon-social-login.icon-tw, .page-common .icon-social-login.icon-gp\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .login-inputtext:hover, .page-common .login-inputtext:active, .page-common .login-inputtext:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*User name*/\n\t.page-common .header-profile.link-bg\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\n\n\t/*SVGs*/\n\t.page-common .header-list-button .fa, .page-common .header-message-button .fa, .page-common .header-notification-button .fa, a.header-message-button, a.header-list-button, a.header-notification-button\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\topacity: 1 !important;\n\t}\n\t.page-common .header-list-button .fa:hover, .page-common .header-message-button .fa:hover, .page-common .header-notification-button .fa:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t/*Dropdown menu*/\n\t.page-common .header-profile .header-profile-dropdown ul li a, .page-common .header-profile .header-profile-dropdown, .page-common .header-list .header-list-dropdown ul li a, .page-common .header-list .header-list-dropdown\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .header-profile .header-profile-dropdown ul li a:hover, .page-common .header-list .header-list-dropdown ul li a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\ttransition: none !important;\n\t}\n\n\n\t/*Icon borders near username*/\n\t.page-common #header-menu > .border::before\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Notifications*/\n\n\t/*Dropdown*/\n\t.page-common .header-notification-dropdown .arrow_box, .page-common .header-notification-view-all a\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-dropdown-inner h3, .page-common .header-notification-item\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item:hover, .page-common .header-notification-view-all a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-button.new::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.page-common .header-notification-button.has-unread::after, .page-common .header-notification-button.has-unread::after\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item.new\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .header-notification-item.new:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item-header .is-read .fa-check-circle\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*Notification page*/\n\tbody.notification .notificaiton-category-nav a.active\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a.active:hover, body.notification .notificaiton-category-nav a:hover, body.notification .notification-item:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav li, body.notification .notification-item, body.notification .notification-header h3, .page-common #content.container--small-left .left-column\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a .counter\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a .counter.zero\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tbox-shadow: var(--shadow) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a, body.notification .notification-header.simple h3\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a:hover, body.notification .notification-header .right-menu .item:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\tbody.notification .notification-item-layout .is-read .fa-check-circle\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t/*Notification settings*/\n\t.notification_settings .notification-setting-content .settings-notification .setting.header td, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"]:checked + label\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.label, .notification_settings .notification-setting-content .settings-notification .setting td.button\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::before, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::after\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\n\n\t/*Messages*/\n\t.message-container, .total_messages\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read > .mym\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read:hover > .mym, .private-message-content .message.selected:first-of-type > .mym, .pmessage-checked-action .pmessage-checked-action-button, .private-message-content .message.selected > .mym, .pmessage-checkbox-block .mym-checkbox-pulldown-button.on\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read .mym_subject > a.subject-link .text\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.pmessage-checkbox-block, .pmessage-select > a\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.mym_checkboxes input[type=\"checkbox\"] + label\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-checkbox-set2.png\") !important;\n\t}\n\t.pmessage-select > a, .total_messages\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.message.read .mym_date\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common .textarea\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .textarea:hover, .page-common .textarea:active, .page-common .textarea:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.page-common .bgbdrContainer\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-message-button.has-unread::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\t/*My Panel*/\n\t.page-common table.forum-topics tr td:nth-child(2n+1)\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.page-common table.forum-topics tr td:nth-child(2n+1), .page-common table.forum-topics tr td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Image and code taken from https://userstyles.org/styles/120493/dark-night-myanimelist*/\n\timg[src*=\"ignorethread.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/ignorethread.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 12px;\n\t\theight: 12px;\n\t\tpadding-left: 12px;\n\t}\n\t/*Image and code taken from https://userstyles.org/styles/120493/dark-night-myanimelist*/\n\timg[src*=\"watch_y.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/watch_y.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tpadding-left: 15px;\n\t}\n\timg[src*=\"watch_n.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/watch_n.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tpadding-left: 15px;\n\t}\n\timg[src*=\"images/bad-off.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/bad-off.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\timg[src*=\"images/cancel-fsg.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/cancel-fsg.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\timg[src*=\"images/good-off.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/good-off.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\t.page-common .quote-inline-text\n\t{\n\t\tbackground-color: transparent !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.show_button, .hide_button, .button.expand_quote, select[name=\"uloc\"]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder: 1px solid var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.show_button:hover, .hide_button:hover, .button.expand_quote:hover, select[name=\"uloc\"]:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\t.page-common .badresult\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t.icon-about-recommendations\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.icon-about-recommendations::after\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Image borders*/\n\t.page-common div.picSurround img, .profile .user-favorites .favorites-list .list .image, .profile .user-comments .comment .image img, .page-common .header-profile-button, .profile .statistics-updates .image, .forum .forum-side-block .forum-side-list img.thumbs\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.ranking-digest .ranking-unit .image, .user-profile .user-friends .icon-friend, .page-common .header-profile-button\n\t{\n\t\tbox-shadow: 0 0 0 1px var(--hover-background),0 0 0 2px var(--hover-background) !important;\n\t}\n\n\n\t/*Profile page*/\n\t.user-profile .user-function .icon-user-function, .profile .statistics-updates .data .graph-content, .page-common .content-container .container-right h5, .page-common .pt8\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.user-profile .user-function .icon-user-function, .user-profile .user-status.border-top, .user-profile h4, .page-common .content-container .container-left, .page-common .content-container .container-right h5, .profile .statistics-updates .data .graph, .user-profile .user-compatability-graph .bar-outer\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.user-profile .user-function .icon-user-function:hover, .profile .statistics-updates .data .graph\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.user-profile .user-function .icon-user-function\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon_profile_sprite2.png\") !important;\n\t}\n\t.user-profile .user-status li, .user-profile .user-compatability-graph .bar-outer\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.user-profile h4, .page-common .content-container .container-right h5, .page-common .content-container .container-right .fw-b, .user-profile .user-compatability-graph .bar-outer .bar-outer-positive .bar-inner, div.user-profile-sns\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.user-profile .user-button .btn-profile-submit, .user-profile .user-button .btn-profile-submit:hover\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.js-truncate-outer .btn-truncate\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/arrows.png\") !important;\n\t}\n\t.js-truncate-outer, .profile .user-favorites, .profile .user-favorites .favorites-list .list\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t/*User image links*/\n\t.word-break > a[rel=\"nofollow\"]\n\t{\n\t\topacity: 1 !important;\n\t}\n\t.word-break > a[rel=\"nofollow\"]:hover\n\t{\n\t\tfilter: brightness(110%);\n\t}\n\t/*Comments*/\n\t.profile .user-comments .comment .text .comment-text\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.profile .user-comments .comment:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.profile .user-comments .comment:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .content-container .container-right a.fw-b\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.page-common .btn-form-submit\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.page-common .btn-form-submit:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .floatRightHeader\n\t{\n\t\tcolor: var(--hover-background) !important;\n\t}\n\t.page-common a.floatRightHeader\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*Also available at*/\n\t.user-profile .user-profile-sns .icon-profile-sns.icon-url::after\n\t{\n\t\tfilter: invert(100%) !important;\n\t}\n\t/*RSS*/\n\t.user-profile h4.icon-rss::after\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/rss.png\") !important;\n\t}\n\n\t/*Manga and anime history*/\n\t#content > div:nth-child(2)\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Clubs*/\n\t.club-search-form-search .select\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.club-search-form-search .inputtext, .page-common .word-break\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.club-list .table-data td .informantion\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.club-list .table-data td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.club-list .table-data:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.club-list .btn-club-join:hover\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.club-list .btn-club-join\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Account settings*/\n\t.page-common .login-form-header-text\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .icon-sns-connect\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.setting-row.locate-right, .setting-row.show-hidden\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.settings-cunstom-forum-title input:disabled, .sns-setting .table tr:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tul.ignored-user-list, .sns-setting .cell-border-vertical, .sns-setting .cell-border-vertical, .sns-setting .sns-setting-default, .sns-setting .cell-border-vertical, .sns-setting, .ownlist_style .style-setting .style-setting-form-button\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-sns-setting, .btn-sns-setting span, .sns-setting .setting-input-button, .ownlist_style .style-setting .setting-switch input[type=\"radio\"]:checked + label\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .style-setting .setting-switch input[type=\"radio\"] + label, .ownlist_style #new-style .info\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .new-theme-list .new-theme-unit.selected, #dialog > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > textarea:nth-child(8)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .new-theme-list .new-theme-unit\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\t.membership .about-membership .plan-header, .membership .about-membership .plan, .membership .about-membership .about-new-feature, .membership .about-membership .about-no-ads\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.membership .about-membership .plan .plan-monthly .button, .membership .about-membership .plan .plan-annually .button, .membership .about-membership .about-new-feature .new, .membership .about-membership .btn-subscription\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.membership .about-membership .about-extras .about-extras-content .header\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\t/*Favorites*/\n\t.page-common .normal_header\n\t{\n\t\tpadding-left: 5px !important;\n\t}\n\t.page-common .draggable_list li:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Anime & Manga News and Featured Articles*/\n\tbody.news .menu-category, body.news .content-left, body.news .news-side-block .header, body.news .featured-side-block .header, body.news .news-side-block .news-list .news, body.news .news-side-block .news-list .featured, body.news .news-side-block .featured-list .news, body.news .news-side-block .featured-list .featured, body.news .featured-side-block .news-list .news, body.news .featured-side-block .news-list .featured, body.news .featured-side-block .featured-list .news, body.news .featured-side-block .featured-list .featured, body.news .tag-side-block .header, body.news .columnist-side-block .header, body.news .news-content-block.news-tags h2.news-tags-header, body.news .news-content-block.news-tags .news-tags-table.news td, body.news .news-breadcrumbs, .featured-pickup .featured-pickup-unit .information .pv, .featured-pickup .featured-pickup-unit .information .tags, .featured-content-block-outer\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.news .menu-category .btn-category.selected\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\tbody.news .menu-category .btn-category\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.news .menu-category .btn-category:hover\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t#all > svg:nth-child(1) > circle:nth-child(1)\n\t{\n\t\tfill: var(--main-color) !important;\n\t}\n\tbody.news .news-container .content, body.news .news-container .information, .news-list .comment-list .quotetext\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\tbody.news .news-container .tags, .news-list .comment-list:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\tbody.news .news-container .tags .tag, .news-list .comment-list .quotetext\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\tbody.news .news-container .tags .tag, .news-list .comment-list:nth-of-type(2n), body.news .news-content-block .news-related-database tr td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Tags*/\n\tbody.news .menu-category .btn-edit-tags\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color1, .news-list .news-unit .information .tags .tag.tag-color1, body.news .tag-side-block .tag-cloud .tag.tag-color1, .featured-pickup .featured-pickup-unit .information .tags .tag.tag-color-feature-spoiler, body.news .news-side-block .news-list .text-color-spoiler, body.news .news-side-block .featured-list .text-color-spoiler, body.news .featured-side-block .news-list .text-color-spoiler, body.news .featured-side-block .featured-list .text-color-spoiler\n\t{\n\t\tbackground-color: var(--red) !important;\n\t\tborder-color: var(--red) !important;\n\t\tcolor: #fff !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color4, .news-list .news-unit .information .tags .tag.tag-color4, body.news .tag-side-block .tag-cloud .tag.tag-color4, .featured-pickup .featured-pickup-unit .information .tags .tag.tag-color-feature-advertorial\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color6, .news-list .news-unit .information .tags .tag.tag-color6, body.news .tag-side-block .tag-cloud .tag.tag-color6, body.news .tag-side-block .tag-cloud .tag, .news-list .comment-list .information .tags .tag, .news-list .news-unit .information .tags .tag\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t\tborder-color: var(--gray) !important;\n\t\tcolor: var(--main-background) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color2, .news-list .news-unit .information .tags .tag.tag-color2, body.news .tag-side-block .tag-cloud .tag.tag-color2\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t\tborder-color: var(--yellow) !important;\n\t\tcolor: #fff !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color3, .news-list .news-unit .information .tags .tag.tag-color3, body.news .tag-side-block .tag-cloud .tag.tag-color3\n\t{\n\t\tbackground-color: var(--green) !important;\n\t\tborder-color: var(--green) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color5, .news-list .news-unit .information .tags .tag.tag-color5, body.news .tag-side-block .tag-cloud .tag.tag-color5\n\t{\n\t\tbackground-color: var(--purple) !important;\n\t\tborder-color: var(--purple) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color1, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color2, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color3, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color4, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color5, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color6, .page-common .fn-black\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*Image border*/\n\tbody.news .columnist-side-block .columnist-list .columnists-unit-side .image\n\t{\n\t\t-webkit-box-shadow: var(--hover-background) 0 0 2px,var(--hover-background) 0 0 0 1px\n\t}\n\tbody.news .news-side-block .news-list img.thumbs, body.news .news-side-block .featured-list img.thumbs, body.news .featured-side-block .news-list img.thumbs, body.news .featured-side-block .featured-list img.thumbs, .news-list .comment-list .image-link, .news-list .news-unit .image-link, body.news .news-content-block.news-tags .news-tags-table.news tr:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.featured-pickup .featured-pickup-unit .image\n\t{\n\t\tbox-shadow: var(--hover-background) 0 0 2px,var(--hover-background) 0 0 0 1px;\n\t}\n\n\n\t/*People and Characters */\n\t.people-favorites-ranking-table tr.ranking-list:nth-of-type(2n+1) td, .people-favorites-ranking-table .table-header td, .characters-favorites-ranking-table tr.ranking-list:nth-of-type(2n+1) td, .characters-favorites-ranking-table .table-header td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--second-background) !important;\n\t}\n\t.people-favorites-ranking-table tr.ranking-list:nth-of-type(2n) td, .characters-favorites-ranking-table tr.ranking-list:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-choose-your-own\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-choose-your-own:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.people-search-form-search .inputtext, .characters-search-form-search .inputtext\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.people-favorites-ranking-table tr:last-of-type, .characters-favorites-ranking-table tr:last-of-type, .page-common .incrementalSearchResultList .list .image\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Help*/\n\t.about-content-box.l, .about-content-box.r\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.about-content.content-bg-grey, .page-advertising #ad_menu, .page-advertising section.ad_section:nth-of-type(2n) div.ad_section\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.pt16, .page-advertising .ad_form_content label.required, .page-advertising .ad_form_content label\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.btn-switch-lang\n\t{\n\t\tcolor: var(--hover-background) !important;\n\t}\n\t.page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell.on, .page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell:hover\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell, .page-advertising .ad_form_content .ad_select\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-advertising .ad-spec-sample-list\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .mauto, .btn-switch-lang, .membership .about-membership .about-extras\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.membership .membership-faq .question, .membership .membership-faq .answer, .membership .membership-faq .answer .answer-detail, .membership .membership-faq .faq-img\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.membership .membership-faq .question:hover, .membership .membership-faq .question.on\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/* Thanks to Dark/Night MyAnimeList for the following code */\n\t.page-common #headerSmall .banner-header-anime-straming {\n\t\tdisplay: none !important;\n\t}\n\t*[id*=div-gpt-ad] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Panel */\n\t.widget.right_top_ad.right, .widget.left_bottom_ad.left {\n\t\tdisplay: none !important;\n\t}\n\t.page-common.ad-skin #myanimelist .ad-skin-side-outer.bg-left, .page-common.ad-skin #myanimelist .ad-skin-side-outer.bg-right {\n\t\tdisplay: none !important;\n\t}\n\t/* > Browse Anime */\n\t.side-ad.side-ad--l, .side-ad.side-ad--r {\n\t\tdisplay: none !important;\n\t}\n\t/* > View Anime/Manga */\n\tdiv[style=\"padding: 20px 0 20px 40px; float: left; position: relative; z-index: 1;\"], div[style=\"padding: 20px 40px 20px 0; float: right; position: relative;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"padding: 20px 0 20px 40px; float: left;\"], div[style=\"padding: 20px 40px 20px 0; float: right;\"], div[style=\"padding: 20px 40px;display: inline-block;\"], div[style=\"padding: 20px 0px;display: inline-block;\"], div[class=\"mauto clearfix pt24\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[class=\"clearfix mauto mt16\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"padding:16px 0px 0px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.amazon-ads {\n\t\tdisplay: none !important;\n\t}\n\t.kskdDiv {\n\t\tdisplay: none !important;\n\t}\n\t/* > Add/Edit detailed info */\n\t.vrl-unit-container {\n\t\tdisplay: none !important;\n\t}\n\t/* > Reviews */\n\tdiv[style=\"width:728px; margin:0 auto\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"overflow: hidden; padding: 10px 0; border-bottom: solid #cdcdcd 1px\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[class=\"borderDark pt4 pb8 pl4 pr4 mb8\"] + div[class=\"border_bottom pt12 pb12 mb4\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Recommendations */\n\t.border_bottom[style=\"padding:8px 0px 8px 0px;margin:0px 0px 8px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Watch Videos */\n\t.clearfix[style=\"padding:16px 3px 20px 100px;width:880px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Watch Episode */\n\tdiv[style=\"padding:16px 0px 0px 0px;margin:14px 0px 0px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"float:left; padding:25px 25px 10px;\"], div[style=\"float:right; padding:25px 25px 10px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Forums */\n\t._unit[style=\"width:300px; height:250px; display: block !important;\"] {\n\t\theight: 0px !important;\n\t}\n\ttable[style=\"width:100%;height:100%;text-align:center;border-collapse:collapse;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix.pt24[style=\"width:720px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t#pc_forum_top_middle_rec_l {\n\t\tdisplay: none !important;\n\t}\n\t#pc_forum_top_middle_rec_r {\n\t\tdisplay: none !important;\n\t}\n\t.forum_boardrowspacer + .di-t {\n\t\tdisplay: none !important;\n\t}\n\t/* > Profile */\n\t.clearfix[style=\"padding:16px 3px 20px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Users */\n\t.clearfix[style=\"padding:16px 3px 20px 10px;width:100%;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > News */\n\ttable[style=\"width:160px;height:100%;text-align:center;border-collapse:collapse;margin:auto;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix[style=\"padding:16px 24px 20px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix[style=\"padding:16px 8px 20px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t#pc_news_top_1st_rec, #pc_news_top_2nd_rec {\n\t\tdisplay: none !important;\n\t}\n\t.js-scrollfix-bottom div[style=\"margin-top: 8px; text-align: center;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"margin-top: 24px;\"] > div[style=\"width: 300px; display: block !important; height: 600px;\"]\n\t{\n\t\tdisplay: none !important;\n\t}\n\t/* Social buttons hidden */\n\t.page-common .icon-block .icon-social {\n\t\tdisplay: none !important;\n\t}\n\t*[class*=PIN] {\n\t\tdisplay: none !important;\n\t}\n\tbody.news .news-container .news-info-block .sns-unit .sprite-icon-social.rect.icon-social {\n\t\tdisplay: none !important;\n\t}\n\t.page-common .sprite-icon-social.rect.wide.icon-social {\n\t\tdisplay: none !important;\n\t}\n\tbody.news .news-container .news-info-block {\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.js-sns-icon-container.icon-block-small {\n\t\tdisplay: none !important;\n\t}\n\t.fb-page, .page-common iframe[src*=\"facebook\"]\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.left-column > article:nth-child(5) > .clearfix[style=\"margin: 0 0 20px;\"], .widget.right_middle_ad.right\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.js-scrollfix-bottom ._unit, .js-scrollfix-bottom ._unit table {\n\t\tdisplay: none !important;\n\t\theight: 0 !important;\n\t}\n\n\n\t/*Search all*/\n\t#pc_search_1st_rec\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.search_all .result-header, .search_all .btn-search-more, .search_all .link-content-jump .link.on, .search_all .link-content-jump .link:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.search_all .content-result .list:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.search_all .content-result .list:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.search_all .content-result .list, .search_all .content-result .content-left\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Editing anime entires*/\n\t#fancybox-outer\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t#fancybox-close\n\t{\n\t\tbackground: url(https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/close_sprite.png) no-repeat !important;\n\t\theight: 24px !important;\n\t\twidth: 24px !important;\n\t\tposition: absolute !important;\n\t\tright: -15px !important;\n\t\ttop: -16px !important;\n\t}\n\t#fancybox-close:hover\n\t{\n\t\tbackground-position-y: -24px !important;\n\t\ttransition: none !important;\n\t}\n\n\t/*Modern list settings*/\n\t.ownlist_style_theme .customize-content-left .theme-custom-content, .ownlist_style_theme .customize-content-left .theme-custom-content, .ownlist_style_theme .customize-content-left h3.theme-custom-header, .ace_editor.ace_autocomplete, .ace_editor.ace_autocomplete .ace_line-hover\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left h2.theme-custom-header, .ace_editor.ace_autocomplete\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line, .ace_editor.ace_autocomplete .ace_line-hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left h3.theme-custom-header, .ownlist_style_theme .customize-content-left .header, .ownlist_style_theme .customize-content-left .header .header-text, .ace_editor.ace_autocomplete, .ace_gutter-cell\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left .header\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\n\n\t/*Friends*/\n\t.majorPad .bgLightBlue, .majorPad .friendHolder\n\t{\n\t\tbackground: var(--second-background) !important;\n\t}\n\t.page-common .profile_leftcell\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Hover details for anime*/\n\t.page-common .hoverinfo\n\t{\n\t\tbackground: var(--main-background) !important;\n\t}\n\t.page-common .hoverinfo::after\n\t{\n\t\tbackground: none !important;\n\t}\n\n\n\t/*Shared anime list*/\n\t.borderClass[style=\"background-color: #f6f6f6;\"]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Set to completed warning*/\n\t#fancybox-inner\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Missing content*/\n\t.borderDark.pt8.pb8.pl4.pr4.mb8\n\t{\n\t\tdisplay: block !important;\n\t}\n\n\t\t/*Manga store*/\n\t.manga-store *, .manga-store .section-title, .detail-preview-container.hasPreview[data-v-8dc9b7cc]::after,\n\t.manga-store-preview\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.manga-store .comics-list-tab-area::before\n\t{\n\t\tbackground: var(--hover-background) !important;\n\t}\n\ta.manga-store-genre-list-toggle, a[data-v-2617fe40], .manga-store .btn-link-detail,\n\t.manga-store .detail-card .detail-infoList-item .tag,\n\t.manga-store .comics-list-tab-item.is-active,\n\t.manga-store-preview-info a.manga-store-preview-button\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.manga-store .comics-list-tab-item.is-active\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*checkout*/\n\ta[data-v-135eaa16]\n\t{\n\t\tbackground: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\ta[data-v-135eaa16]:hover\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*Manga preview*/\n\t.header[data-v-65e5eae6], .footer[data-v-65e5eae6]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.button-buy[data-v-65e5eae6]\n\t{\n\t\tbackground: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*titles*/\n\t.title[data-v-8a87ff5a]\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\t/*Info warning*/\n\t.initialize-tutorial\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t.page-common.announcement .announce-sitemap, .page-common.announcement .announce-header\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Sitemap*/\n\t.sitemap__category, .sitemap__category__title\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}", + "start": 11737, + "domains": [ + "myanimelist.net" + ] + } + ], + "name": "MyAnimeList DeepDark", + "originalDigest": "e7e65baa7e320355cb131c6e5b5c39f4dcbdbe2c", + "id": 17, + "_id": "36f89a04-99de-4992-ace3-140bc923af07", + "_rev": 1615723396764, + "etag": "W/\"1c685b28d6a12d620f3aa459a2e2d4176437a3ee9314c0e8293dfb2e7d74a4fb\"", + "sourceCode": "/* ==UserStyle==\n@name MyAnimeList DeepDark\n@namespace USO Archive\n@author RaitaroH\n@description `

Satisfy thy craving for anime and organization. May the dark be kinder on thine eyes. (MyAnimeList Dark Theme)

This is a dark theme for MyAnimeList inspired by FT DeepDark.

Credit for some images and code (ads removal) to dark-night-myanimelist.

Also, credit where credit is due for the color palettes. (@KDE, @horst3180, @linuxmint, Firefox, YouTube and Discord)

Official GitHub page, with screenshots, available here.

`\n@version 20180902.18.41\n@license NO-REDISTRIBUTION\n@preprocessor uso\n@advanced color mainColor \"Main highlight color\" #00ADEE\n@advanced color mainBackground \"Main background color\" #111111\n@advanced color secondBackground \"Second background color\" #181818\n@advanced color hoverBackground \"Hover background color\" #232323\n@advanced color mainText \"Main text color\" #EFF0F1\n@advanced color dimmerText \"Dimmer text color\" #CCCCCC\n@advanced dropdown progress \"Progress custom colors\" {\n\tnormal \"No*\" << div\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common p, .page-common .textReadability, .page-common span, .page-common td, .page-common .dark_text, .page-common .dark_text:hover, .page-common .dark_text:visited\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common #profileRows a:hover, .page-common .profileRows a:hover, .detail-characters-list .left-column table:nth-of-type(2n), .detail-characters-list .left-right table:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t/*Recent forum discussion*/\n\t.page-forum .forum_boardrow2, .page-forum .forum_boardrow1\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Text in polls*/\n\t.page-forum .forum_boardrow1\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\n\n\t/*Videos*/\n\t.video-block.episode-video .outside-region .outside-region-block\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/arrows.png\") !important;\n\t}\n\n\n\t/*Episodes*/\n\t.episode_list .episode-list-header td, .episode_list .episode-list-data:nth-of-type(2n+1) td, .episode_list .episode-list-header td:last-of-type\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.episode_list .episode-list-header, .episode_list .episode-list-data:nth-of-type(2n+1) td, .di-t, .contents-video-embed .episode-information\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.episode_list .episode-list-header .episode-number .btn-sort-outer\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-sort-triangle.png\") !important;\n\t}\n\t.episode_list .episode-list-data:nth-of-type(2n) td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .fn-grey2\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.user-status-block .btn-forum-episode, .contents-video-embed .btn-rect\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\topacity: .9;\n\t}\n\t.user-status-block .btn-forum-episode:hover, .contents-video-embed .btn-rect:hover\n\t{\n\t\topacity: 1;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.contents-video-embed .btn-video-anime-slide.hori, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.contents-video-embed .btn-video-anime-slide.hori:hover, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime.play .link, .contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime:hover .link\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.contents-video-embed .video-anime-slide-block.hori\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.contents-video-embed .video-anime-slide-block.hori .video-anime-slide .btn-anime .link .text\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\n\n\t/*Reviews*/\n\t.reviews-horiznav-nav-sort-block, .page-common .border_bottom, .js-scrollfix-bottom-rel > div\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .button_form\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .button_form:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Recommendations*/\n\t.page-common .bgColor1\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.btn-detail-recommendations-view-all\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.btn-detail-recommendations-view-all:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Stats*/\n\t.page-common div.updatesBar\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.table-recently-updated tr:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.table-recently-updated tr:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.statistics-info\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.statistics-info::after, .statistics-info::before\n\t{\n\t\tborder-top-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Characters & Voice Actors*/\n\t.page-common .bgColor2\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Forum*/\n\t.page-common .normal_header, .page-forum .forum-table-header, .page-common .quotetext, .page-common .codetext\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\ta.icon-team-title.manga_db_moderator,.icon-team-title.social_media_moderator, .icon-team-title.social_media_moderator:hover, a.icon-team-title.forum_moderator, a.icon-team-title.review_recommendation_moderator, .icon-team-title.database_administrator, .icon-team-title.news_moderator\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t}\n\t.page-forum .sig\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-forum .forum_boardrowspacer\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.page-forum .forum_category\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-forum .forum_locheader, #content > div, .page-common .fn-grey5\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-forum .btn-forum, .page-forum .btn-forum, .btn-rect-grey1, .page-common .forum-topic-sort\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: transparent !important;\n\t}\n\t.page-forum .btn-forum:hover, .page-forum .btn-forum:hover, .btn-rect-grey1:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\t/*Top anime page*/\n\t.top-ranking-table .table-header td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t/*Buttons*/\n\t.page-common .pagination .link-blue-box\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.notinmylist\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.completed, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.dropped, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantoread, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantowatch, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.reading, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.watching, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.on-hold\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.completed\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.dropped\n\t{\n\t\tbackground-color: var(--red) !important;\n\t\tborder-color: var(--red) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantoread, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.plantowatch\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t\tborder-color: var(--gray) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.reading, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.watching\n\t{\n\t\tbackground-color: var(--green) !important;\n\t\tborder-color: var(--green) !important;\n\t}\n\t.top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.on-hold\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t\tborder-color: var(--yellow) !important;\n\t}\n\n\t.top-ranking-table .icon-score-star\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-rank-stars.png\") !important;\n\t}\n\n\t.icon-top-ranking-page .prev:hover, .icon-top-ranking-page .next:hover, .top-ranking-table .status .btn-addEdit-large.btn-anime-watch-status.notinmylist:hover, .page-common .pagination .link-blue-box:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.icon-top-ranking-page .prev, .icon-top-ranking-page .next\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t\ttransition: none !important;\n\t\topacity: 1 !important;\n\t}\n\t/*Rows odd*/\n\t.top-ranking-table tr.ranking-list:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Rows even*/\n\t.top-ranking-table tr.ranking-list:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.top-ranking-table .title .information\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.top-ranking-table tr:last-of-type\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Seasonal anime*/\n\t.navi-seasonal\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a:hover, .navi-seasonal .horiznav_nav ul li a.horiznav_active, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type:hover, .navi-seasonal .horiznav_nav ul li a.on:hover, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type.on:hover, .page-common .inputButton:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\ttransition: none !important;\n\t}\n\t.navi-seasonal .horiznav_nav ul li a.on, .navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type.on\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav-nav-seasonal .btn-seasonal .btn-type\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.navi-seasonal .horiznav-nav-seasonal, .navi-seasonal .horiznav_nav\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.page-common .inputtext\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .inputtext:active, .page-common .inputtext:focus, .page-common .inputtext:hover\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.season .btn-show-sort:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.season .btn-show-kids, .season .btn-show-r18\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.page-common .inputButton, .seasonal-anime-list .anime-header\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Episode*/\n\t.watch .video-menu-category .btn-category.on\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.watch .video-menu-category .btn-category:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\ttransition: none !important;\n\t}\n\t.watch .video-menu-category .btn-category\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.video-menu-category\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.watch .video-menu-category .btn-hide-blocked-video\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.video-block .video-list.episode a\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.video-block .video-list.episode a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Industry forums*/\n\t.forum .forum-header\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-board:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.forum .forum-board, .forum .content-container .container-left, .forum .forum-side-block .header, .forum .forum-side-block .forum-side-list .forum-post\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .fn-grey4\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common .fn-blue1\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t.forum .forum-search-side .forum-search-select\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-triangles.png\") !important;\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-search-side .forum-search-input-text, .forum .forum-search-side .forum-search-input-submit.notActive, .forum .forum-search-side .forum-search-input-submit\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.forum .forum-search-side .forum-search-input-text:hover, .forum .forum-search-side .forum-search-input-text:active, .forum .forum-search-side .forum-search-input-text:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Login page*/\n\t#dialog, #dialog td, .page-common .social-login-block, .page-common .login-inputtext\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .social-login-block::after\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .icon-social-login.icon-fb, .page-common .icon-social-login.icon-tw, .page-common .icon-social-login.icon-gp\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .login-inputtext:hover, .page-common .login-inputtext:active, .page-common .login-inputtext:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*User name*/\n\t.page-common .header-profile.link-bg\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\n\n\t/*SVGs*/\n\t.page-common .header-list-button .fa, .page-common .header-message-button .fa, .page-common .header-notification-button .fa, a.header-message-button, a.header-list-button, a.header-notification-button\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\topacity: 1 !important;\n\t}\n\t.page-common .header-list-button .fa:hover, .page-common .header-message-button .fa:hover, .page-common .header-notification-button .fa:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t/*Dropdown menu*/\n\t.page-common .header-profile .header-profile-dropdown ul li a, .page-common .header-profile .header-profile-dropdown, .page-common .header-list .header-list-dropdown ul li a, .page-common .header-list .header-list-dropdown\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .header-profile .header-profile-dropdown ul li a:hover, .page-common .header-list .header-list-dropdown ul li a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t\ttransition: none !important;\n\t}\n\n\n\t/*Icon borders near username*/\n\t.page-common #header-menu > .border::before\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Notifications*/\n\n\t/*Dropdown*/\n\t.page-common .header-notification-dropdown .arrow_box, .page-common .header-notification-view-all a\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-dropdown-inner h3, .page-common .header-notification-item\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item:hover, .page-common .header-notification-view-all a:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-button.new::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.page-common .header-notification-button.has-unread::after, .page-common .header-notification-button.has-unread::after\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item.new\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .header-notification-item.new:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-notification-item-header .is-read .fa-check-circle\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*Notification page*/\n\tbody.notification .notificaiton-category-nav a.active\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a.active:hover, body.notification .notificaiton-category-nav a:hover, body.notification .notification-item:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav li, body.notification .notification-item, body.notification .notification-header h3, .page-common #content.container--small-left .left-column\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a .counter\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a .counter.zero\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tbox-shadow: var(--shadow) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a, body.notification .notification-header.simple h3\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.notification .notificaiton-category-nav a:hover, body.notification .notification-header .right-menu .item:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\tbody.notification .notification-item-layout .is-read .fa-check-circle\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t/*Notification settings*/\n\t.notification_settings .notification-setting-content .settings-notification .setting.header td, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"]:checked + label\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.label, .notification_settings .notification-setting-content .settings-notification .setting td.button\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::before, .notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::after\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.notification_settings .notification-setting-content .settings-notification .setting td.button input[type=\"checkbox\"] + label::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\n\n\t/*Messages*/\n\t.message-container, .total_messages\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read > .mym\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read:hover > .mym, .private-message-content .message.selected:first-of-type > .mym, .pmessage-checked-action .pmessage-checked-action-button, .private-message-content .message.selected > .mym, .pmessage-checkbox-block .mym-checkbox-pulldown-button.on\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.message.read .mym_subject > a.subject-link .text\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.pmessage-checkbox-block, .pmessage-select > a\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.mym_checkboxes input[type=\"checkbox\"] + label\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon-checkbox-set2.png\") !important;\n\t}\n\t.pmessage-select > a, .total_messages\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.message.read .mym_date\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.page-common .textarea\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-common .textarea:hover, .page-common .textarea:active, .page-common .textarea:focus\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t.page-common .bgbdrContainer\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .header-message-button.has-unread::after\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\t/*My Panel*/\n\t.page-common table.forum-topics tr td:nth-child(2n+1)\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.page-common table.forum-topics tr td:nth-child(2n+1), .page-common table.forum-topics tr td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Image and code taken from https://userstyles.org/styles/120493/dark-night-myanimelist*/\n\timg[src*=\"ignorethread.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/ignorethread.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 12px;\n\t\theight: 12px;\n\t\tpadding-left: 12px;\n\t}\n\t/*Image and code taken from https://userstyles.org/styles/120493/dark-night-myanimelist*/\n\timg[src*=\"watch_y.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/watch_y.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tpadding-left: 15px;\n\t}\n\timg[src*=\"watch_n.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/watch_n.png\") !important;\n\t\tbox-sizing: border-box;\n\t\twidth: 15px;\n\t\theight: 15px;\n\t\tpadding-left: 15px;\n\t}\n\timg[src*=\"images/bad-off.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/bad-off.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\timg[src*=\"images/cancel-fsg.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/cancel-fsg.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\timg[src*=\"images/good-off.gif\"]\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/good-off.png\") !important;\n\t\theight: 0px;\n\t\twidth: 0px;\n\t\tmargin: 0px auto;\n\t\tpadding: 13px 13px 0px 0px;\n\t}\n\t.page-common .quote-inline-text\n\t{\n\t\tbackground-color: transparent !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.show_button, .hide_button, .button.expand_quote, select[name=\"uloc\"]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder: 1px solid var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.show_button:hover, .hide_button:hover, .button.expand_quote:hover, select[name=\"uloc\"]:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\t.page-common .badresult\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\n\t.icon-about-recommendations\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.icon-about-recommendations::after\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Image borders*/\n\t.page-common div.picSurround img, .profile .user-favorites .favorites-list .list .image, .profile .user-comments .comment .image img, .page-common .header-profile-button, .profile .statistics-updates .image, .forum .forum-side-block .forum-side-list img.thumbs\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.ranking-digest .ranking-unit .image, .user-profile .user-friends .icon-friend, .page-common .header-profile-button\n\t{\n\t\tbox-shadow: 0 0 0 1px var(--hover-background),0 0 0 2px var(--hover-background) !important;\n\t}\n\n\n\t/*Profile page*/\n\t.user-profile .user-function .icon-user-function, .profile .statistics-updates .data .graph-content, .page-common .content-container .container-right h5, .page-common .pt8\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.user-profile .user-function .icon-user-function, .user-profile .user-status.border-top, .user-profile h4, .page-common .content-container .container-left, .page-common .content-container .container-right h5, .profile .statistics-updates .data .graph, .user-profile .user-compatability-graph .bar-outer\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.user-profile .user-function .icon-user-function:hover, .profile .statistics-updates .data .graph\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.user-profile .user-function .icon-user-function\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/icon_profile_sprite2.png\") !important;\n\t}\n\t.user-profile .user-status li, .user-profile .user-compatability-graph .bar-outer\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.user-profile h4, .page-common .content-container .container-right h5, .page-common .content-container .container-right .fw-b, .user-profile .user-compatability-graph .bar-outer .bar-outer-positive .bar-inner, div.user-profile-sns\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.user-profile .user-button .btn-profile-submit, .user-profile .user-button .btn-profile-submit:hover\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.js-truncate-outer .btn-truncate\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/arrows.png\") !important;\n\t}\n\t.js-truncate-outer, .profile .user-favorites, .profile .user-favorites .favorites-list .list\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t/*User image links*/\n\t.word-break > a[rel=\"nofollow\"]\n\t{\n\t\topacity: 1 !important;\n\t}\n\t.word-break > a[rel=\"nofollow\"]:hover\n\t{\n\t\tfilter: brightness(110%);\n\t}\n\t/*Comments*/\n\t.profile .user-comments .comment .text .comment-text\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.profile .user-comments .comment:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.profile .user-comments .comment:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.page-common .content-container .container-right a.fw-b\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.page-common .btn-form-submit\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.page-common .btn-form-submit:hover\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.page-common .floatRightHeader\n\t{\n\t\tcolor: var(--hover-background) !important;\n\t}\n\t.page-common a.floatRightHeader\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*Also available at*/\n\t.user-profile .user-profile-sns .icon-profile-sns.icon-url::after\n\t{\n\t\tfilter: invert(100%) !important;\n\t}\n\t/*RSS*/\n\t.user-profile h4.icon-rss::after\n\t{\n\t\tbackground-image: url(\"https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/rss.png\") !important;\n\t}\n\n\t/*Manga and anime history*/\n\t#content > div:nth-child(2)\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Clubs*/\n\t.club-search-form-search .select\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.club-search-form-search .inputtext, .page-common .word-break\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.club-list .table-data td .informantion\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.club-list .table-data td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.club-list .table-data:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.club-list .btn-club-join:hover\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.club-list .btn-club-join\n\t{\n\t\tcolor: var(--main-color) !important;\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\n\n\t/*Account settings*/\n\t.page-common .login-form-header-text\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .icon-sns-connect\n\t{\n\t\tfilter: grayscale(100%);\n\t}\n\t.setting-row.locate-right, .setting-row.show-hidden\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.settings-cunstom-forum-title input:disabled, .sns-setting .table tr:nth-of-type(2n+1) td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tul.ignored-user-list, .sns-setting .cell-border-vertical, .sns-setting .cell-border-vertical, .sns-setting .sns-setting-default, .sns-setting .cell-border-vertical, .sns-setting, .ownlist_style .style-setting .style-setting-form-button\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-sns-setting, .btn-sns-setting span, .sns-setting .setting-input-button, .ownlist_style .style-setting .setting-switch input[type=\"radio\"]:checked + label\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .style-setting .setting-switch input[type=\"radio\"] + label, .ownlist_style #new-style .info\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .new-theme-list .new-theme-unit.selected, #dialog > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(1) > textarea:nth-child(8)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style .new-theme-list .new-theme-unit\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\t.membership .about-membership .plan-header, .membership .about-membership .plan, .membership .about-membership .about-new-feature, .membership .about-membership .about-no-ads\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.membership .about-membership .plan .plan-monthly .button, .membership .about-membership .plan .plan-annually .button, .membership .about-membership .about-new-feature .new, .membership .about-membership .btn-subscription\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.membership .about-membership .about-extras .about-extras-content .header\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\t/*Favorites*/\n\t.page-common .normal_header\n\t{\n\t\tpadding-left: 5px !important;\n\t}\n\t.page-common .draggable_list li:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Anime & Manga News and Featured Articles*/\n\tbody.news .menu-category, body.news .content-left, body.news .news-side-block .header, body.news .featured-side-block .header, body.news .news-side-block .news-list .news, body.news .news-side-block .news-list .featured, body.news .news-side-block .featured-list .news, body.news .news-side-block .featured-list .featured, body.news .featured-side-block .news-list .news, body.news .featured-side-block .news-list .featured, body.news .featured-side-block .featured-list .news, body.news .featured-side-block .featured-list .featured, body.news .tag-side-block .header, body.news .columnist-side-block .header, body.news .news-content-block.news-tags h2.news-tags-header, body.news .news-content-block.news-tags .news-tags-table.news td, body.news .news-breadcrumbs, .featured-pickup .featured-pickup-unit .information .pv, .featured-pickup .featured-pickup-unit .information .tags, .featured-content-block-outer\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.news .menu-category .btn-category.selected\n\t{\n\t\tcolor: var(--main-text) !important;\n\t\tborder-color: var(--main-color) !important;\n\t}\n\tbody.news .menu-category .btn-category\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\tbody.news .menu-category .btn-category:hover\n\t{\n\t\tborder-color: var(--main-color) !important;\n\t}\n\t#all > svg:nth-child(1) > circle:nth-child(1)\n\t{\n\t\tfill: var(--main-color) !important;\n\t}\n\tbody.news .news-container .content, body.news .news-container .information, .news-list .comment-list .quotetext\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\tbody.news .news-container .tags, .news-list .comment-list:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\tbody.news .news-container .tags .tag, .news-list .comment-list .quotetext\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\tbody.news .news-container .tags .tag, .news-list .comment-list:nth-of-type(2n), body.news .news-content-block .news-related-database tr td\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t/*Tags*/\n\tbody.news .menu-category .btn-edit-tags\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color1, .news-list .news-unit .information .tags .tag.tag-color1, body.news .tag-side-block .tag-cloud .tag.tag-color1, .featured-pickup .featured-pickup-unit .information .tags .tag.tag-color-feature-spoiler, body.news .news-side-block .news-list .text-color-spoiler, body.news .news-side-block .featured-list .text-color-spoiler, body.news .featured-side-block .news-list .text-color-spoiler, body.news .featured-side-block .featured-list .text-color-spoiler\n\t{\n\t\tbackground-color: var(--red) !important;\n\t\tborder-color: var(--red) !important;\n\t\tcolor: #fff !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color4, .news-list .news-unit .information .tags .tag.tag-color4, body.news .tag-side-block .tag-cloud .tag.tag-color4, .featured-pickup .featured-pickup-unit .information .tags .tag.tag-color-feature-advertorial\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color6, .news-list .news-unit .information .tags .tag.tag-color6, body.news .tag-side-block .tag-cloud .tag.tag-color6, body.news .tag-side-block .tag-cloud .tag, .news-list .comment-list .information .tags .tag, .news-list .news-unit .information .tags .tag\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t\tborder-color: var(--gray) !important;\n\t\tcolor: var(--main-background) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color2, .news-list .news-unit .information .tags .tag.tag-color2, body.news .tag-side-block .tag-cloud .tag.tag-color2\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t\tborder-color: var(--yellow) !important;\n\t\tcolor: #fff !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color3, .news-list .news-unit .information .tags .tag.tag-color3, body.news .tag-side-block .tag-cloud .tag.tag-color3\n\t{\n\t\tbackground-color: var(--green) !important;\n\t\tborder-color: var(--green) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.news-list .comment-list .information .tags .tag.tag-color5, .news-list .news-unit .information .tags .tag.tag-color5, body.news .tag-side-block .tag-cloud .tag.tag-color5\n\t{\n\t\tbackground-color: var(--purple) !important;\n\t\tborder-color: var(--purple) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\tbody.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color1, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color2, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color3, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color4, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color5, body.news .news-content-block.news-tags .menu-category-tags .btn-category.tag-color6, .page-common .fn-black\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*Image border*/\n\tbody.news .columnist-side-block .columnist-list .columnists-unit-side .image\n\t{\n\t\t-webkit-box-shadow: var(--hover-background) 0 0 2px,var(--hover-background) 0 0 0 1px\n\t}\n\tbody.news .news-side-block .news-list img.thumbs, body.news .news-side-block .featured-list img.thumbs, body.news .featured-side-block .news-list img.thumbs, body.news .featured-side-block .featured-list img.thumbs, .news-list .comment-list .image-link, .news-list .news-unit .image-link, body.news .news-content-block.news-tags .news-tags-table.news tr:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.featured-pickup .featured-pickup-unit .image\n\t{\n\t\tbox-shadow: var(--hover-background) 0 0 2px,var(--hover-background) 0 0 0 1px;\n\t}\n\n\n\t/*People and Characters */\n\t.people-favorites-ranking-table tr.ranking-list:nth-of-type(2n+1) td, .people-favorites-ranking-table .table-header td, .characters-favorites-ranking-table tr.ranking-list:nth-of-type(2n+1) td, .characters-favorites-ranking-table .table-header td\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--second-background) !important;\n\t}\n\t.people-favorites-ranking-table tr.ranking-list:nth-of-type(2n) td, .characters-favorites-ranking-table tr.ranking-list:nth-of-type(2n) td\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-choose-your-own\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.btn-choose-your-own:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.people-search-form-search .inputtext, .characters-search-form-search .inputtext\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.people-favorites-ranking-table tr:last-of-type, .characters-favorites-ranking-table tr:last-of-type, .page-common .incrementalSearchResultList .list .image\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Help*/\n\t.about-content-box.l, .about-content-box.r\n\t{\n\t\tbackground-color: transparent !important;\n\t}\n\t.about-content.content-bg-grey, .page-advertising #ad_menu, .page-advertising section.ad_section:nth-of-type(2n) div.ad_section\n\t{\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.pt16, .page-advertising .ad_form_content label.required, .page-advertising .ad_form_content label\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.btn-switch-lang\n\t{\n\t\tcolor: var(--hover-background) !important;\n\t}\n\t.page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell.on, .page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell:hover\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-advertising .ad-spec-sample-button-block .ad-spec-sample-button-cell, .page-advertising .ad_form_content .ad_select\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.page-advertising .ad-spec-sample-list\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.page-common .mauto, .btn-switch-lang, .membership .about-membership .about-extras\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.membership .membership-faq .question, .membership .membership-faq .answer, .membership .membership-faq .answer .answer-detail, .membership .membership-faq .faq-img\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.membership .membership-faq .question:hover, .membership .membership-faq .question.on\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\n\n\t/* Thanks to Dark/Night MyAnimeList for the following code */\n\t.page-common #headerSmall .banner-header-anime-straming {\n\t\tdisplay: none !important;\n\t}\n\t*[id*=div-gpt-ad] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Panel */\n\t.widget.right_top_ad.right, .widget.left_bottom_ad.left {\n\t\tdisplay: none !important;\n\t}\n\t.page-common.ad-skin #myanimelist .ad-skin-side-outer.bg-left, .page-common.ad-skin #myanimelist .ad-skin-side-outer.bg-right {\n\t\tdisplay: none !important;\n\t}\n\t/* > Browse Anime */\n\t.side-ad.side-ad--l, .side-ad.side-ad--r {\n\t\tdisplay: none !important;\n\t}\n\t/* > View Anime/Manga */\n\tdiv[style=\"padding: 20px 0 20px 40px; float: left; position: relative; z-index: 1;\"], div[style=\"padding: 20px 40px 20px 0; float: right; position: relative;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"padding: 20px 0 20px 40px; float: left;\"], div[style=\"padding: 20px 40px 20px 0; float: right;\"], div[style=\"padding: 20px 40px;display: inline-block;\"], div[style=\"padding: 20px 0px;display: inline-block;\"], div[class=\"mauto clearfix pt24\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[class=\"clearfix mauto mt16\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"padding:16px 0px 0px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.amazon-ads {\n\t\tdisplay: none !important;\n\t}\n\t.kskdDiv {\n\t\tdisplay: none !important;\n\t}\n\t/* > Add/Edit detailed info */\n\t.vrl-unit-container {\n\t\tdisplay: none !important;\n\t}\n\t/* > Reviews */\n\tdiv[style=\"width:728px; margin:0 auto\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"overflow: hidden; padding: 10px 0; border-bottom: solid #cdcdcd 1px\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[class=\"borderDark pt4 pb8 pl4 pr4 mb8\"] + div[class=\"border_bottom pt12 pb12 mb4\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Recommendations */\n\t.border_bottom[style=\"padding:8px 0px 8px 0px;margin:0px 0px 8px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Watch Videos */\n\t.clearfix[style=\"padding:16px 3px 20px 100px;width:880px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Watch Episode */\n\tdiv[style=\"padding:16px 0px 0px 0px;margin:14px 0px 0px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"float:left; padding:25px 25px 10px;\"], div[style=\"float:right; padding:25px 25px 10px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Forums */\n\t._unit[style=\"width:300px; height:250px; display: block !important;\"] {\n\t\theight: 0px !important;\n\t}\n\ttable[style=\"width:100%;height:100%;text-align:center;border-collapse:collapse;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix.pt24[style=\"width:720px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t#pc_forum_top_middle_rec_l {\n\t\tdisplay: none !important;\n\t}\n\t#pc_forum_top_middle_rec_r {\n\t\tdisplay: none !important;\n\t}\n\t.forum_boardrowspacer + .di-t {\n\t\tdisplay: none !important;\n\t}\n\t/* > Profile */\n\t.clearfix[style=\"padding:16px 3px 20px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > Users */\n\t.clearfix[style=\"padding:16px 3px 20px 10px;width:100%;\"] {\n\t\tdisplay: none !important;\n\t}\n\t/* > News */\n\ttable[style=\"width:160px;height:100%;text-align:center;border-collapse:collapse;margin:auto;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix[style=\"padding:16px 24px 20px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t.clearfix[style=\"padding:16px 8px 20px 0px;\"] {\n\t\tdisplay: none !important;\n\t}\n\t#pc_news_top_1st_rec, #pc_news_top_2nd_rec {\n\t\tdisplay: none !important;\n\t}\n\t.js-scrollfix-bottom div[style=\"margin-top: 8px; text-align: center;\"] {\n\t\tdisplay: none !important;\n\t}\n\tdiv[style=\"margin-top: 24px;\"] > div[style=\"width: 300px; display: block !important; height: 600px;\"]\n\t{\n\t\tdisplay: none !important;\n\t}\n\t/* Social buttons hidden */\n\t.page-common .icon-block .icon-social {\n\t\tdisplay: none !important;\n\t}\n\t*[class*=PIN] {\n\t\tdisplay: none !important;\n\t}\n\tbody.news .news-container .news-info-block .sns-unit .sprite-icon-social.rect.icon-social {\n\t\tdisplay: none !important;\n\t}\n\t.page-common .sprite-icon-social.rect.wide.icon-social {\n\t\tdisplay: none !important;\n\t}\n\tbody.news .news-container .news-info-block {\n\t\tbackground-color: var(--main-background) !important;\n\t}\n\t.js-sns-icon-container.icon-block-small {\n\t\tdisplay: none !important;\n\t}\n\t.fb-page, .page-common iframe[src*=\"facebook\"]\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.left-column > article:nth-child(5) > .clearfix[style=\"margin: 0 0 20px;\"], .widget.right_middle_ad.right\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.js-scrollfix-bottom ._unit, .js-scrollfix-bottom ._unit table {\n\t\tdisplay: none !important;\n\t\theight: 0 !important;\n\t}\n\n\n\t/*Search all*/\n\t#pc_search_1st_rec\n\t{\n\t\tdisplay: none !important;\n\t}\n\t.search_all .result-header, .search_all .btn-search-more, .search_all .link-content-jump .link.on, .search_all .link-content-jump .link:hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.search_all .content-result .list:nth-of-type(2n)\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.search_all .content-result .list:nth-of-type(2n+1)\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.search_all .content-result .list, .search_all .content-result .content-left\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Editing anime entires*/\n\t#fancybox-outer\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t#fancybox-close\n\t{\n\t\tbackground: url(https://raw.githubusercontent.com/RaitaroH/MyAnimeList-DeepDark/master/Images/close_sprite.png) no-repeat !important;\n\t\theight: 24px !important;\n\t\twidth: 24px !important;\n\t\tposition: absolute !important;\n\t\tright: -15px !important;\n\t\ttop: -16px !important;\n\t}\n\t#fancybox-close:hover\n\t{\n\t\tbackground-position-y: -24px !important;\n\t\ttransition: none !important;\n\t}\n\n\t/*Modern list settings*/\n\t.ownlist_style_theme .customize-content-left .theme-custom-content, .ownlist_style_theme .customize-content-left .theme-custom-content, .ownlist_style_theme .customize-content-left h3.theme-custom-header, .ace_editor.ace_autocomplete, .ace_editor.ace_autocomplete .ace_line-hover\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left h2.theme-custom-header, .ace_editor.ace_autocomplete\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t}\n\t.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line, .ace_editor.ace_autocomplete .ace_line-hover\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left h3.theme-custom-header, .ownlist_style_theme .customize-content-left .header, .ownlist_style_theme .customize-content-left .header .header-text, .ace_editor.ace_autocomplete, .ace_gutter-cell\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left\n\t{\n\t\tcolor: var(--dimmer-text) !important;\n\t}\n\t.ownlist_style_theme .customize-content-left .header\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\n\n\t/*Friends*/\n\t.majorPad .bgLightBlue, .majorPad .friendHolder\n\t{\n\t\tbackground: var(--second-background) !important;\n\t}\n\t.page-common .profile_leftcell\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Hover details for anime*/\n\t.page-common .hoverinfo\n\t{\n\t\tbackground: var(--main-background) !important;\n\t}\n\t.page-common .hoverinfo::after\n\t{\n\t\tbackground: none !important;\n\t}\n\n\n\t/*Shared anime list*/\n\t.borderClass[style=\"background-color: #f6f6f6;\"]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\n\t/*Set to completed warning*/\n\t#fancybox-inner\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\n\n\t/*Missing content*/\n\t.borderDark.pt8.pb8.pl4.pr4.mb8\n\t{\n\t\tdisplay: block !important;\n\t}\n\n\t\t/*Manga store*/\n\t.manga-store *, .manga-store .section-title, .detail-preview-container.hasPreview[data-v-8dc9b7cc]::after,\n\t.manga-store-preview\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.manga-store .comics-list-tab-area::before\n\t{\n\t\tbackground: var(--hover-background) !important;\n\t}\n\ta.manga-store-genre-list-toggle, a[data-v-2617fe40], .manga-store .btn-link-detail,\n\t.manga-store .detail-card .detail-infoList-item .tag,\n\t.manga-store .comics-list-tab-item.is-active,\n\t.manga-store-preview-info a.manga-store-preview-button\n\t{\n\t\tbackground-color: var(--hover-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.manga-store .comics-list-tab-item.is-active\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t/*checkout*/\n\ta[data-v-135eaa16]\n\t{\n\t\tbackground: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\ta[data-v-135eaa16]:hover\n\t{\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*Manga preview*/\n\t.header[data-v-65e5eae6], .footer[data-v-65e5eae6]\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\t.button-buy[data-v-65e5eae6]\n\t{\n\t\tbackground: var(--main-color) !important;\n\t\tborder-color: var(--main-color) !important;\n\t\tcolor: var(--main-text) !important;\n\t}\n\t/*titles*/\n\t.title[data-v-8a87ff5a]\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\n\t/*Info warning*/\n\t.initialize-tutorial\n\t{\n\t\tbackground-color: var(--second-background) !important;\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t.page-common.announcement .announce-sitemap, .page-common.announcement .announce-header\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n\n\t/*Sitemap*/\n\t.sitemap__category, .sitemap__category__title\n\t{\n\t\tborder-color: var(--hover-background) !important;\n\t}\n}", + "usercssData": { + "name": "MyAnimeList DeepDark", + "namespace": "USO Archive", + "author": "RaitaroH", + "description": "

Satisfy thy craving for anime and organization. May the dark be kinder on thine eyes. (MyAnimeList Dark Theme)

This is a dark theme for MyAnimeList inspired by FT DeepDark.

Credit for some images and code (ads removal) to dark-night-myanimelist.

Also, credit where credit is due for the color palettes. (@KDE, @horst3180, @linuxmint, Firefox, YouTube and Discord)

Official GitHub page, with screenshots, available here.

", + "version": "20180902.18.41", + "license": "NO-REDISTRIBUTION", + "preprocessor": "uso", + "vars": { + "mainColor": { + "type": "color", + "label": "Main highlight color", + "name": "mainColor", + "value": "#00ADEE", + "default": "rgb(0, 173, 238)", + "options": null + }, + "mainBackground": { + "type": "color", + "label": "Main background color", + "name": "mainBackground", + "value": "#111111", + "default": "rgb(17, 17, 17)", + "options": null + }, + "secondBackground": { + "type": "color", + "label": "Second background color", + "name": "secondBackground", + "value": "#181818", + "default": "rgb(24, 24, 24)", + "options": null + }, + "hoverBackground": { + "type": "color", + "label": "Hover background color", + "name": "hoverBackground", + "value": "#232323", + "default": "rgb(35, 35, 35)", + "options": null + }, + "mainText": { + "type": "color", + "label": "Main text color", + "name": "mainText", + "value": "#EFF0F1", + "default": "rgb(239, 240, 241)", + "options": null + }, + "dimmerText": { + "type": "color", + "label": "Dimmer text color", + "name": "dimmerText", + "value": "#CCCCCC", + "default": "rgb(204, 204, 204)", + "options": null + }, + "progress": { + "type": "select", + "label": "Progress custom colors", + "name": "progress", + "value": "normal", + "default": "normal", + "options": [ + { + "name": "normal", + "label": "No*", + "value": "" + }, + { + "name": "breeze", + "label": "Yes", + "value": ".profile .user-statistics .stats-graph .graph.watching, .profile .user-statistics .stats-graph .graph.reading, .profile .user-statistics .stats-status .circle.watching::after, .profile .user-statistics .stats-status .circle.reading::after\n\t{\n\t\tbackground-color: var(--green) !important;\n\t}\n\t.profile .user-statistics .stats-graph .graph.completed, .profile .user-statistics .stats-status .circle.completed::after, .profile .statistics-updates .data .graph .graph-inner.completed\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.profile .user-statistics .stats-graph .graph.on_hold, .profile .user-statistics .stats-status .circle.on_hold::after\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t}\n\t.profile .user-statistics .stats-graph .graph.dropped, .profile .user-statistics .stats-status .circle.dropped::after\n\t{\n\t\tbackground-color: var(--red) !important;\n\t}\n\t.profile .user-statistics .stats-graph, .profile .user-statistics .stats-graph .graph.plan_to_watch, .profile .user-statistics .stats-graph .graph.plan_to_read, .profile .user-statistics .stats-status .circle.plan_to_watch::after, .profile .user-statistics .stats-status .circle.plan_to_read::after\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.watching,.profile .statistics-updates .data .graph .graph-inner.re-watching,.profile .statistics-updates .data .graph .graph-inner.reading,.profile .statistics-updates .data .graph .graph-inner.re-reading\n\t{\n\t\tbackground-color: var(--green) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.completed\n\t{\n\t\tbackground-color: var(--main-color) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.on_hold\n\t{\n\t\tbackground-color: var(--yellow) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.dropped\n\t{\n\t\tbackground-color: var(--red) !important;\n\t}\n\t.profile .statistics-updates .data .graph .graph-inner.plan_to_watch,.profile .statistics-updates .data .graph .graph-inner.plan_to_read\n\t{\n\t\tbackground-color: var(--gray) !important;\n\t}\n\t.profile .statistics-updates .data .text.watching,.profile .statistics-updates .data .text.re-watching,.profile .statistics-updates .data .text.reading,.profile .statistics-updates .data .text.re-reading\n\t{\n\t\tcolor: var(--green) !important;\n\t}\n\t.profile .statistics-updates .data .text.completed\n\t{\n\t\tcolor: var(--main-color) !important;\n\t}\n\t.profile .statistics-updates .data .text.on_hold\n\t{\n\t\tcolor: var(--yellow) !important;\n\t}\n\t.profile .statistics-updates .data .text.dropped\n\t{\n\t\tcolor: var(--red) !important;\n\t}\n\t.profile .statistics-updates .data .text.plan_to_watch,.profile .statistics-updates .data .text.plan_to_read\n\t{\n\t\tcolor: var(--gray) !important;\n\t}" + } + ] + } + } + }, + "author": "RaitaroH", + "description": "

Satisfy thy craving for anime and organization. May the dark be kinder on thine eyes. (MyAnimeList Dark Theme)

This is a dark theme for MyAnimeList inspired by FT DeepDark.

Credit for some images and code (ads removal) to dark-night-myanimelist.

Also, credit where credit is due for the color palettes. (@KDE, @horst3180, @linuxmint, Firefox, YouTube and Discord)

Official GitHub page, with screenshots, available here.

", + "updateDate": 1615723396762, + "_usw": {} + }, + { + "installDate": 1536263867292, + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "name": "MyAnimeList Background", + "sections": [ + { + "code": " body {\n background: #222 url('https://img.ponywave.de/di/23GT/ef26dd416ebc9a68d8e67fedac3b2085e070c01d.jpg') no-repeat fixed center top !important;\n}", + "regexps": [ + ".*myanimelist\\.net/(?!animelist|mangalist).*" + ] + } + ], + "id": 19, + "updateDate": 1576531753416, + "_id": "d66dbd9d-51fd-4640-9669-151a83b0ff2f", + "_rev": 1580730543289, + "_usw": {} + }, + { + "enabled": true, + "updateUrl": "https://stylishthemes.github.io/GitHub-Dark/github-dark.user.css", + "url": "https://github.com/StylishThemes/GitHub-Dark", + "installDate": 1546688855246, + "sourceCode": "/* ==UserStyle==\n@name GitHub Dark\n@namespace StylishThemes\n@version 5.1.82\n@homepageURL https://github.com/StylishThemes/GitHub-Dark\n@updateURL https://stylishthemes.github.io/GitHub-Dark/github-dark.user.css\n@license BSD-2-Clause\n@author StylishThemes\n@advanced color base-color \"Base color\" #4f8cc9\n@advanced color bg-color \"Background Color\" #202020\n@advanced dropdown bg-choice \"Background\" {\n crosshatch \"Cross-Hatch\" <<.pl-c1{color:#678cb1!important}.pl-token.active,.pl-token:hover{background:#678cb1!important;color:#e0e2e4!important} EOT;\n One Dark \"One Dark\" <<span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror{background-color:#202020!important;-webkit-box-shadow:inset 0 0 10px #000!important;-moz-box-shadow:inset 0 0 10px #000!important;box-shadow:inset 0 0 10px #000!important;color:#e6e1dc!important;line-height:1.4em!important}.CodeMirror-gutters{background:#3d3d3d!important;border-right:1px solid #4d4d4d!important;box-shadow:0 10px 20px #000!important}.CodeMirror-linenumber{color:#111!important;padding:0 5px!important;text-shadow:0 1px 1px #4d4d4d!important}.CodeMirror-guttermarker{color:#aaa!important}.CodeMirror-guttermarker-subtle{color:#111!important}.CodeMirror-cursor{border-left:1px solid #7991e8!important}.CodeMirror-activeline-background{background:none repeat scroll 0 0 hsla(0,0%,100%,.031)!important} EOT;\n Base16 Ocean Dark \"Base16 Ocean Dark\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(179,101,57,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(179,101,57,.99)!important}.CodeMirror-gutters{background:#002240!important;border-right:1px solid #aaa!important}.CodeMirror-guttermarker{color:#ffee80!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.cm-comment{color:#08f!important}.cm-atom{color:#845dc4!important}.cm-number,span.cm-attribute{color:#ff80e1!important}.cm-keyword{color:#ffee80!important}.cm-string{color:#3ad900!important}.cm-meta{color:#ff9d00!important}.cm-variable-2,span.cm-tag{color:#9effff!important}.cm-variable-3,span.cm-def{color:#fff!important}.cm-bracket{color:#d8d8d8!important}.cm-builtin,span.cm-special{color:#ff9e59!important}.cm-link{color:#845dc4!important}.cm-error{color:#9d1e15!important}.CodeMirror-activeline-background{background:#002d57!important}.CodeMirror-matchingbracket{color:#fff!important;outline:1px solid grey!important} EOT;\n Dracula \"Dracula\" <<span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}span.cm-comment{color:#6272a4!important}span.cm-string,span.cm-string-2{color:#f1fa8c!important}span.cm-number{color:#bd93f9!important}span.cm-variable{color:#50fa7b!important}span.cm-variable-2{color:#fff!important}span.cm-def{color:#ffb86c!important}span.cm-keyword,span.cm-operator{color:#ff79c6!important}span.cm-atom{color:#bd93f9!important}span.cm-meta{color:#f8f8f2!important}span.cm-tag{color:#ff79c6!important}span.cm-attribute,span.cm-qualifier{color:#50fa7b!important}span.cm-property{color:#66d9ef!important}span.cm-builtin,span.cm-variable-3{color:#50fa7b!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important} EOT;\n Material \"Material\" <<span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-activeline-background{background:transparent!important}.cm-keyword{color:#c792ea!important}.cm-operator{color:#e9eded!important}.cm-variable-2{color:#80cbc4!important}.cm-type,.cm-variable-3{color:#82b1ff!important}.cm-builtin{color:#decb6b!important}.cm-atom,.cm-number{color:#f77669!important}.cm-def{color:#e9eded!important}.cm-string{color:#c3e88d!important}.cm-string-2{color:#80cbc4!important}.cm-comment{color:#546e7a!important}.cm-variable{color:#82b1ff!important}.cm-meta,.cm-tag{color:#80cbc4!important}.cm-attribute{color:#ffcb6b!important}.cm-property{color:#80cbae!important}.cm-qualifier,.cm-type,.cm-variable-3{color:#decb6b!important}.cm-tag{color:#ff5370!important}.cm-error{background-color:#ec5f67!important;color:#fff!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important} EOT;\n Monokai - Spacegray Eighties \"Monokai - Spacegray Eighties\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(44,44,44,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(44,44,44,.99)!important}.CodeMirror-gutters{background:#1c1c1c!important;border-right:0!important}.CodeMirror-guttermarker{color:#b9b9b9!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#8a8a8a!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}.cm-comment{color:grey!important}.cm-atom,.cm-number{color:#ae81ff!important}.cm-property,span.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#66d9ef!important;font-style:italic!important}.cm-builtin{color:#f8f8f8!important}.cm-string{color:#e6db74!important}.cm-variable{color:#f8f8f8!important}.cm-variable-2{color:#9effff!important}.cm-variable-3{color:#ae81ff!important}.cm-def{color:#66d9ef!important;font-style:italic!important}.cm-bracket{color:#f8f8f8!important}.cm-tag{color:#f92672!important}.cm-header,.cm-link{color:#ae81ff!important}.cm-error{background:#1e0010!important;color:#960050!important}.CodeMirror-activeline-background{background:#2c2c2c!important}.CodeMirror-matchingbracket{color:#f8f8f8!important;text-decoration:underline!important} EOT;\n Monokai \"Monokai\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)!important}.CodeMirror-gutters{background:#272822!important;border-right:0!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}.cm-comment{color:#75715e!important}.cm-atom,.cm-number{color:#ae81ff!important}.cm-property,span.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#f92672!important}.cm-builtin{color:#66d9ef!important}.cm-string{color:#e6db74!important}.cm-variable{color:#f8f8f2!important}.cm-variable-2{color:#9effff!important}.cm-variable-3{color:#66d9ef!important}.cm-def{color:#fd971f!important}.cm-bracket{color:#f8f8f2!important}.cm-tag{color:#f92672!important}.cm-header,.cm-link{color:#ae81ff!important}.cm-error{background:#f92672!important;color:#f8f8f0!important}.CodeMirror-activeline-background{background:#373831!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important} EOT;\n One Dark \"One Dark\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(221,240,255,.2)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(221,240,255,.2)!important}.CodeMirror-gutters{background:#34302f!important;border-right:0!important;padding:0 3px!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#8f938f!important}.CodeMirror-cursor{border-left:1px solid #a7a7a7!important}.cm-comment{color:#a6c6ff!important}.cm-atom{color:#de8e30!important}.cm-number{color:#ccc!important}.cm-property{color:#8f938f!important}.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#aeb2f8!important}.cm-string{color:#66a968!important}.cm-variable{color:#aeb2f8!important}.cm-variable-2{color:#bebf55!important}.cm-variable-3{color:#de8e30!important}.cm-def{color:#757ad8!important}.cm-bracket{color:#f8f8f2!important}.cm-tag{color:#c1c144!important}.cm-link{color:#ae81ff!important}.cm-qualifier,span.cm-builtin{color:#c1c144!important}.cm-error{background:#757ad8!important;color:#f8f8f0!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.031)!important}.CodeMirror-matchingbracket{border:1px solid hsla(0,0%,100%,.25)!important;color:#8f938f!important;margin:-1px -1px 0!important} EOT;\n Railscasts \"Railscasts\" <<span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)!important}.cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000!important;-webkit-box-shadow:inset 7px 0 12px -6px #000!important;box-shadow:inset 7px 0 12px -6px #000!important}.CodeMirror-gutters{background-color:#073642!important;border-right:0!important}.CodeMirror-linenumber{padding:0 5px!important;text-shadow:#021014 0 -1px!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#586e75!important}.CodeMirror-guttermarker{color:#ddd!important}.CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75!important}.CodeMirror-cursor{border-left:1px solid #819090!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.06)!important} EOT;\n Tomorrow Night Bright \"Tomorrow Night Bright\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)!important}.CodeMirror-gutters{background:#000!important;border-right:0!important}.CodeMirror-guttermarker{color:#f2777a!important}.CodeMirror-guttermarker-subtle{color:#777!important}.CodeMirror-linenumber{color:#515151!important}.CodeMirror-cursor{border-left:1px solid #6a6a6a!important}.cm-comment{color:#d27b53!important}.cm-atom,.cm-number{color:#a16a94!important}.cm-property,span.cm-attribute{color:#9c9!important}.cm-keyword{color:#f2777a!important}.cm-string{color:#fc6!important}.cm-variable{color:#9c9!important}.cm-variable-2{color:#69c!important}.cm-def{color:#f99157!important}.cm-bracket{color:#ccc!important}.cm-tag{color:#f2777a!important}.cm-link{color:#a16a94!important}.cm-error{background:#f2777a!important;color:#6a6a6a!important}.CodeMirror-activeline-background{background:#343600!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important} EOT;\n Vibrant Ink \"Vibrant Ink\" <<span::selection,.CodeMirror-line>span>span::selection{background:rgba(53,73,60,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(53,73,60,.99)!important}.CodeMirror-gutters{background:#002240!important;border-right:1px solid #aaa!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.cm-keyword{color:#cc7832!important}.cm-atom{color:#fc0!important}.cm-number{color:#ffee98!important}.cm-def{color:#8da6ce!important}.cm-s-vibrant span.cm-def,.cm-s-vibrant span.cm-tag,.cm-variable-2,.cm-variable-3{color:#ffc66d!important}.cm-operator{color:#888!important}.cm-comment{color:gray!important;font-weight:700!important}.cm-string{color:#a5c25c!important}.cm-string-2{color:red!important}.cm-meta{color:#d8fa3c!important}.cm-attribute,.cm-builtin,.cm-tag{color:#8da6ce!important}.cm-header{color:#ff6400!important}.cm-hr{color:#aeaeae!important}.cm-link{color:blue!important}.cm-error{border-bottom:1px solid red!important}.CodeMirror-activeline-background{background:#27282e!important}.CodeMirror-matchingbracket{color:#fff!important;outline:1px solid grey!important} EOT;\n}\n@advanced dropdown syntax-jupyter \"Jupyter syntax theme\" {\n Twilight \"Twilight\" << .octicon {\n color: #181818;\n }\n /* generated github-mobile rules */\n /* begin github.com rules */\n :root, [data-color-mode=dark][data-dark-theme=light],\n [data-color-mode=light][data-light-theme=light] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto][data-light-theme=light] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto][data-dark-theme=light] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n }\n [data-color-mode=dark][data-dark-theme=dark],\n [data-color-mode=light][data-light-theme=dark] {\n --color-checks-line-dt-fm-text: #181818;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-ansi-white-bright: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .5);\n --color-btn-primary-icon: #181818;\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-fg-on-emphasis: #181818;\n --color-done-emphasis: #53387a;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto][data-light-theme=dark] {\n --color-checks-line-dt-fm-text: #181818;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-ansi-white-bright: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .5);\n --color-btn-primary-icon: #181818;\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-fg-on-emphasis: #181818;\n --color-done-emphasis: #53387a;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto][data-dark-theme=dark] {\n --color-checks-line-dt-fm-text: #181818;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-ansi-white-bright: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .5);\n --color-btn-primary-icon: #181818;\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-fg-on-emphasis: #181818;\n --color-done-emphasis: #53387a;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n }\n .ActionList-content, .ActionList-item {\n background-color: transparent;\n }\n @media (hover: hover) {\n .ActionList-content[aria-disabled=true]:hover {\n background-color: transparent;\n }\n }\n .rule, a {\n background-color: transparent;\n }\n .Box--overlay {\n box-shadow: 0 0 18px #000;\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=true],\n .btn-outline.disabled, .btn-outline:disabled,\n .btn-outline[aria-disabled=true] {\n box-shadow: none;\n }\n .btn-invisible, .btn-link {\n background-color: transparent;\n }\n .btn-invisible, .btn-invisible.zeroclipboard-is-hover, .btn-invisible:hover {\n box-shadow: none;\n }\n .btn-invisible.disabled, .btn-invisible:disabled,\n .btn-invisible[aria-disabled=true], .btn-octicon {\n background-color: transparent;\n }\n .btn-octicon {\n box-shadow: none;\n }\n .close-button, .inline-form .btn-plain {\n background-color: transparent;\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .filter-list.pjax-active .filter-item, .SideNav-item, .SideNav-subItem,\n .tabnav-tab, .UnderlineNav-item {\n background-color: transparent;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .color-bg-transparent {\n background-color: transparent !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .border-white-fade {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n @keyframes blink {\n 50% {\n background-color: transparent;\n }\n }\n body.intent-mouse [role=button]:focus,\n body.intent-mouse [role=tabpanel][tabindex=\"0\"]:focus,\n body.intent-mouse a:focus, body.intent-mouse button:focus,\n body.intent-mouse summary:focus {\n box-shadow: none;\n }\n .auth-form-header, .auth-form-header h1 a {\n color: #fff;\n }\n .auth-form-header .octicon {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .1);\n }\n .session-authentication .auth-form-header,\n .session-authentication.enterprise .header-logged-out,\n .session-authentication .header-logged-out,\n .session-authentication.hosted .header-logged-out {\n background-color: transparent;\n }\n .Header-old {\n color: #fff;\n }\n .HeaderMenu--logged-out {\n box-shadow: 0 10px 50px #000;\n }\n @media (min-width: 1012px) {\n .HeaderMenu--logged-out {\n background-color: transparent;\n box-shadow: none;\n }\n }\n .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: none;\n }\n @media (min-width: 1012px) {\n .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px #000, 0 0 1px rgba(220, 220, 220, .2);\n }\n }\n .HeaderMenu-link {\n background-color: transparent;\n }\n @media (min-width: 1012px) {\n .HeaderMenu-link, .HeaderMenu-link:hover {\n color: #fff;\n }\n .HeaderMenu-link .icon-chevon-down-mktg {\n stroke: hsla(0, 0%, 0%, .5);\n background-color: transparent;\n }\n .HeaderMenu-details[open] .icon-chevon-down-mktg {\n stroke: #181818;\n }\n }\n @media (min-width: 1012px) {\n }\n @media (min-width: 1012px) {\n }\n .header-logo-invertocat, .header-logo-invertocat:hover {\n color: #fff;\n }\n .feature-preview-indicator, .notification-indicator .mail-status {\n color: #fff;\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n .header-search-wrapper, .header-search-wrapper.focus {\n box-shadow: none;\n }\n .header-search-input {\n background: none;\n box-shadow: none;\n }\n .header-search-input:focus {\n box-shadow: none;\n }\n .header-search-scope {\n color: hsla(0, 0%, 0%, .7);\n }\n .jump-to-suggestions-path mark {\n background-color: transparent;\n }\n .flash-close {\n background: none;\n }\n .autocomplete-embedded-icon-wrap .form-control,\n .autocomplete-embedded-icon-wrap .form-control:focus,\n .AvatarStack-body .avatar {\n box-shadow: none;\n }\n .dropdown-item:focus > .Label, .dropdown-item:hover > .Label {\n border-color: currentcolor;\n }\n .dropdown-signout {\n background: none;\n }\n .Header-input {\n box-shadow: none;\n }\n .markdown-body .emoji, .markdown-body pre > code, .markdown-body pre code,\n .markdown-body pre tt, .markdown-body table img, .SelectMenu-closeButton,\n .SelectMenu-tab {\n background-color: transparent;\n }\n @media (min-width: 544px) {\n .SelectMenu-tab[aria-selected=true] {\n box-shadow: none;\n }\n }\n .select-menu-tabs .select-menu-tab-nav, .select-menu-tabs a,\n .Toast-dismissButton {\n background-color: transparent;\n }\n .select-menu.label-select-menu .select-menu-item:active {\n background-color: transparent !important;\n }\n .select-menu-item:focus .Label, .select-menu-item:hover .Label {\n border-color: currentcolor;\n }\n .collapsible-sidebar-widget-button, .comment-body .highlight {\n background-color: transparent;\n }\n .locked-conversation .preview-tab, .locked-conversation .write-tab {\n color: #767676;\n }\n .signed-commit-badge {\n background: none;\n }\n .table-of-contents .toc-diff-stats .octicon {\n color: #767676;\n }\n .blob-wrapper table tr:nth-child(2n) {\n background-color: transparent;\n }\n .add-line-comment.octicon-check {\n background-color: #c6c6c6;\n }\n .inline-comment-form {\n border-color: #343434;\n }\n button.discussion-sidebar-toggle {\n background: none;\n }\n @media (min-width: 1012px) {\n .page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting {\n background-color: transparent;\n }\n }\n .notifications-component-dialog:not([hidden]) + .notifications-component-dialog-overlay,\n .previewable-comment-form .comment-body,\n .reponav-wrapper .reponav-item.selected {\n background-color: transparent;\n }\n @media (max-width: 768px) {\n .PageLayout--responsive-separateRegions.PageLayout--responsive-primary-pane .ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger) {\n background-color: transparent;\n }\n }\n .steps {\n border-color: #343434;\n box-shadow: 0 1px 3px rgba(220, 220, 220, .05);\n }\n .steps li {\n color: #767676;\n border-left-color: #343434;\n }\n .social-reaction-summary-item {\n background-color: transparent;\n }\n .reactions-with-gap .reaction-summary-item, .social-reaction-summary-item {\n border-color: var(--color-border-default, #246);\n }\n .new-reactions-dropdown .dropdown-menu-reactions::after,\n .new-reactions-dropdown .dropdown-menu-reactions::before {\n background-color: transparent;\n }\n .render-container.is-render-ready.is-render-requested:not(.is-render-failed) {\n background: none;\n }\n .emoji-picker-tab .btn-outline:not(:hover) {\n background-color: transparent;\n }\n @media (max-width: 767px) {\n .notifications-v2 .AvatarStack-body .avatar {\n border-right-color: var(--ghd-bg-color) !important;\n }\n }\n .notifications-v2 .thread-subscription-status {\n background-color: transparent !important;\n }\n .notifications-list-item .notification-list-item-unread-indicator {\n background: none;\n }\n .progress-pjax-loader {\n background-color: transparent;\n }\n .progress-pjax-loader > .progress-pjax-loader-bar {\n background-color: /*[[base-color]]*/;\n }\n .tag-input input {\n background: none;\n box-shadow: none;\n }\n .tag-input input:focus {\n box-shadow: none;\n }\n .toolbar-commenting .dropdown-item {\n background: none;\n }\n .topic-tag-outline {\n box-shadow: inset 0 0 0 1px #246;\n }\n .is-auto-complete-loading :not(input).form-control,\n .topic-input-container .tag-input .tag-input-inner {\n background-image: none;\n }\n .Overlay-closeButton {\n background-color: transparent;\n }\n .global-focus-styles [role=button]:focus, .global-focus-styles a:focus,\n .global-focus-styles button:focus,\n .global-focus-styles input[type=checkbox]:focus,\n .global-focus-styles input[type=radio]:focus {\n box-shadow: none;\n }\n .global-focus-styles [role=button]:focus-visible,\n .global-focus-styles a:focus-visible,\n .global-focus-styles button:focus-visible,\n .global-focus-styles input[type=checkbox]:focus-visible,\n .global-focus-styles input[type=radio]:focus-visible {\n box-shadow: none;\n }\n .global-focus-styles .details-overlay > summary:focus,\n .global-focus-styles .details-reset > summary:focus {\n box-shadow: none;\n }\n .global-focus-styles .details-overlay > summary:focus-visible,\n .global-focus-styles .details-reset > summary:focus-visible {\n box-shadow: none;\n }\n .global-focus-styles .ActionList-content:focus {\n box-shadow: none;\n }\n .global-focus-styles .ActionList-content:focus-visible {\n box-shadow: none;\n }\n .global-focus-styles .btn-mktg:focus:not(:focus-visible),\n .global-focus-styles .btn-primary:focus:not(:focus-visible),\n .global-focus-styles .btn-signup-mktg:focus:not(:focus-visible),\n .global-focus-styles a.btn-mktg:focus:not(:focus-visible),\n .global-focus-styles a.btn-primary:focus:not(:focus-visible),\n .global-focus-styles summary.btn-mktg:focus:not(:focus-visible),\n .global-focus-styles summary.btn-primary:focus:not(:focus-visible) {\n box-shadow: none;\n }\n .global-focus-styles .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .global-focus-styles .autocomplete-embedded-icon-wrap .form-control:focus-visible {\n box-shadow: none;\n }\n .hx_flex-avatar-stack-item .avatar {\n box-shadow: none;\n }\n .AvatarStack-body:not(:hover) {\n background-color: transparent;\n }\n .hx_badge-search-container .hx_badge-input {\n box-shadow: none;\n }\n .hx_badge-search-container .hx_badge-input:focus {\n box-shadow: none !important;\n }\n .dropdown-item.btn-link:disabled, .dropdown-item.btn-link:disabled:hover,\n .dropdown-item.btn-link[aria-disabled=true],\n .dropdown-item.btn-link[aria-disabled=true]:hover {\n background-color: transparent;\n }\n [data-color-mode=dark][data-dark-theme*=dark],\n [data-color-mode=light][data-light-theme*=dark] {\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto][data-light-theme*=dark] {\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto][data-dark-theme*=dark] {\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n }\n }\n :root, [data-color-mode=dark][data-dark-theme*=light],\n [data-color-mode=light][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto][data-dark-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n }\n }\n .hx_breadcrumb-header .feature-preview-indicator,\n .hx_breadcrumb-header .notification-indicator .mail-status {\n background-image: none;\n }\n .Header-button:active, .Header-button:focus, .Header-button:hover {\n background-color: transparent;\n }\n .Box--responsive .Box-row--unread, .Header-button:active .octicon,\n .Header-button:focus .octicon, .Header-button:hover .octicon, .hx_kbd {\n box-shadow: none;\n }\n .Box--responsive .Box-row--unread::before {\n color: #fff;\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n .autocomplete-item {\n background-color: transparent;\n }\n .hx_status-indicator.status-indicator-loading {\n background-image: none;\n }\n .topic-tag-outline {\n background-color: transparent;\n }\n .notification-list-item-actions .btn {\n box-shadow: none;\n }\n .pagehead-tabs-item.selected, .reponav-item.selected {\n border-top-color: #fff;\n }\n .hx_disabled-input .form-control[contenteditable=false],\n .hx_disabled-input input[disabled], .hx_disabled-input select[disabled] {\n background-color: transparent;\n box-shadow: none;\n }\n .hx_disabled-input .form-select {\n background-image: none !important;\n }\n .intgrs-dir-intro .directory-header-back,\n .intgrs-dir-intro .directory-tag-line {\n color: #fff;\n }\n .intgrs-lstng-item-description::after {\n background-image: linear-gradient(to right, transparent, #181818 80%);\n }\n .intgr-admin-link.draft-tag .octicon,\n .intgr-admin-link.draft-tag:hover .octicon {\n color: #fff;\n }\n .intgr-admin-link.draft-tag:hover {\n background-color: #f0f0f0;\n }\n .integrations-breadcrumb-link:hover,\n .intgr-feat-header .intgr-admin-link:hover .octicon, .intgr-feat-header h2 {\n color: #fff;\n }\n .integrations-install-target .flash,\n .integrations-install-target .flash-error {\n background-color: transparent;\n }\n .not-found-octocat-wrapper::after {\n box-shadow: 0 4px 0 var(--ghd-bg-color), 0 8px 0 var(--ghd-bg-color), 0 12px 0 var(--ghd-bg-color), 0 16px 0 var(--ghd-bg-color), 0 20px 0 var(--ghd-bg-color);\n }\n .usage-bar {\n background-color: #2c2c2c;\n }\n .blame-commit[data-heat=\"1\"] {\n border-right-color: #fb8532;\n }\n .heat[data-heat=\"1\"] {\n background-color: #fb8532;\n }\n .blame-commit-date[data-heat=\"1\"] {\n color: #f3582c;\n }\n .blame-commit-date[data-heat=\"10\"] {\n color: #9b9b9b;\n }\n .blob-code-content .error-highlight::before,\n .diff-table .error-highlight::before {\n background: linear-gradient(135deg, transparent, transparent 45%, var(--color-danger-fg), transparent 55%, transparent 100%), linear-gradient(45deg, transparent, transparent 45%, var(--color-danger-fg), transparent 55%, transparent 100%);\n }\n .status-meta-file-name {\n background-color: rgba(220, 220, 220, .05);\n }\n .branch-a-b-count .meter.zero {\n background-color: transparent;\n }\n .branch-a-b-count .bar-ahead.even, .branch-a-b-count .bar-behind.even {\n background-color: #2c2c2c;\n }\n .code-frequency .addition {\n fill: #373;\n }\n .search-form-fluid .search-page-input {\n background: none;\n box-shadow: none;\n }\n .search-form-fluid .search-page-input:focus {\n box-shadow: none;\n }\n .community-checklist .progress-bar {\n background-color: transparent;\n }\n .suggest-icon path, .suggest-icon svg {\n fill: #181818;\n }\n .dashboards-overview-cards .blankslate {\n box-shadow: none;\n }\n .dashboards-overview-cards .dots.metric-1 circle,\n .dashboards-overview-cards .metric-0 circle {\n stroke: #181818;\n }\n .discussion-nested-comment-paging-form::before {\n background-color: transparent;\n }\n :target .discussion-nested-comment-group .timeline-comment,\n :target .nested-discussion-timeline-comment {\n box-shadow: none;\n }\n .discussion-spotlights-sortable .sortable-drag {\n background-color: transparent;\n }\n .discussion-spotlight-gradient[aria-selected=true] {\n box-shadow: 0 0 0 2px rgba(/*[[base-color-rgb]]*/, .3);\n }\n .file {\n border-color: var(--color-border-default, #343434);\n }\n .file .image {\n background-color: #343434;\n }\n .file .image canvas, .file .image img {\n background-color: #2c2c2c;\n border-color: var(--ghd-bg-color);\n }\n .file .image .view canvas, .file .image .view img {\n background-color: #2c2c2c;\n }\n .file .empty {\n background: none;\n }\n .team-discussions .previewable-comment-form .toolbar-commenting.toolbar-commenting.toolbar-commenting {\n background-color: transparent;\n }\n .discussion-post .reaction-summary-item {\n border-color: var(--color-border-default, #246);\n }\n .team-discussion-new-post .review-thread-reply-button:disabled {\n box-shadow: none;\n }\n .team-project-suggestion-number {\n color: #767676;\n }\n .hook-deliveries-list .hook-delivery-item:hover {\n background-color: transparent;\n }\n .integrations-select-repos::-webkit-scrollbar-thumb {\n box-shadow: 0 0 1px hsla(0, 0%, 0%, .5);\n }\n .integrations-select-repos::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n .milestone-title-link a {\n color: var(--color-fg-default, #c6c6c6);\n }\n .task-progress .octicon {\n color: var(--color-fg-muted, #767676);\n }\n .issue-meta-section .octicon {\n color: var(--color-fg-muted, #5a5a5a);\n }\n .label-select-menu .selected:active,\n .label-select-menu [aria-checked=mixed]:active,\n .label-select-menu [aria-checked=true]:active {\n background-color: transparent !important;\n }\n .repository-lang-stats ol.repository-lang-stats-numbers li a:hover {\n background-color: transparent;\n }\n .map-background {\n fill: /*[[base-color]]*/;\n }\n .map-graticule, .map-legend .map-legend-circle {\n stroke: #181818;\n }\n .map-legend .map-legend-text {\n fill: #181818;\n }\n .map-legend .map-legend-link {\n stroke: #181818;\n }\n .map-point, .map-point:hover {\n fill: #fb8532;\n }\n .MarketplaceEdit-body .CircleIcon {\n background-color: #444;\n }\n .ClipboardButton.ClipboardButton--success,\n .ClipboardButton.ClipboardButton--success:focus {\n box-shadow: 0 0 0 .2em #3737;\n }\n .MarketplaceAnnouncement {\n color: #fff;\n background: linear-gradient(90deg, #4f8cc9, #2426ca);\n }\n .merge-branch-manually {\n background-color: transparent;\n }\n .news .alert {\n border-top-color: #242424;\n }\n .oauth-permissions-details.open a.btn-sm {\n background-image: none;\n }\n .org-insights-graph-canvas .axis line {\n stroke: rgba(220, 220, 220, .1);\n }\n .org-insights-svg-tip::after {\n border-color: transparent;\n }\n .trial-banner-notice {\n background-image: linear-gradient(180deg, /*[[base-color]]*/ 0%, #4f8cc9 100%);\n }\n .theme-toggle {\n background: none;\n }\n @media print {\n .btn:not(.btn-outline), .State {\n background: none;\n }\n .State--open {\n border-color: #373;\n }\n }\n .project-full-screen .project-header .project-header-link:hover {\n color: #fff !important;\n }\n @media (min-width: 544px) {\n .project-full-screen .card-filter-input {\n color: #fff;\n background-color: hsla(0, 0%, 0%, .125);\n box-shadow: none;\n }\n .project-full-screen .card-filter-input::placeholder {\n color: hsla(0, 0%, 0%, .7);\n }\n }\n .pending-cards-status {\n background-image: linear-gradient(/*[[base-color]]*/, /*[[base-color]]*/);\n }\n .user-profile-nav {\n box-shadow: none;\n }\n .review-comment .reaction-summary-item {\n border-color: var(--color-border-default, #246);\n }\n .timeout {\n background-color: transparent;\n }\n .prereceive-feedback {\n border-color: #343434;\n }\n .avatar-upload .flash {\n box-shadow: none;\n }\n .access-token.new-token {\n background-color: #6cc64450;\n }\n .application-show-group .drag-and-drop {\n background-color: transparent;\n }\n .session-device .session-state-indicator.not-recent {\n background-image: linear-gradient(#aaa, #5a5a5a);\n box-shadow: 0 1px 0 var(--ghd-bg-color);\n }\n .oauth-pending-deletion-list-item {\n box-shadow: inset 0 0 8px #2c2c2c;\n }\n .form-hr {\n border-bottom-color: var(--color-border-default, #343434);\n }\n .listgroup {\n border-color: var(--color-border-default, #343434);\n }\n .listgroup-item + .listgroup-item {\n border-top-color: var(--color-border-default, #343434);\n }\n .listgroup-header {\n border-bottom-color: var(--color-border-default, #343434);\n }\n .listgroup-overflow {\n background-color: var(--color-canvas-subtle, #222);\n }\n @keyframes toggle-color {\n 0% {\n background-color: transparent;\n }\n 100% {\n background-color: transparent;\n }\n }\n .repository-merge-features .form-group.errored .error {\n background-color: transparent;\n }\n .user-identification-questions.redesign .topic-input-container .tag-input {\n border-bottom-color: #f0f0f0;\n }\n .draft-tag {\n color: #2c2c2c;\n }\n .showcase-page-pattern::after {\n background-image: linear-gradient(180deg, hsla(0, 0%, 0%, .85), #181818);\n }\n .sponsors-goal-progress-bar {\n background-color: #c49;\n }\n @media (prefers-reduced-motion: no-preference) {\n .sponsors-goal-progress-bar:hover {\n background: linear-gradient(90deg, #cb4 0%, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff 100%);\n }\n }\n .sponsors-goal-completed-bar {\n background: linear-gradient(90deg, #cb4 0%, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff 100%);\n }\n .team-label-ldap, .tree-finder-input, .tree-finder-input:focus {\n box-shadow: none;\n }\n .tree-browser-result mark {\n background: none;\n }\n .WorkflowGraph.dragging .WorkflowJob:hover {\n background: none !important;\n }\n .WorkflowJob-deployment-progress .Progress {\n background: none;\n }\n .ActionsApprovalOverlay-environment .AvatarStack-body {\n background-color: transparent !important;\n }\n .btn-mktg {\n background: linear-gradient(180deg, hsla(0, 0%, 0%, .15) 0%, transparent 100%), var(--color-mktg-btn-bg) !important;\n }\n .btn-mktg::before {\n background: linear-gradient(180deg, hsla(0, 0%, 0%, .15) 0%, transparent 100%) !important;\n }\n .btn-mktg.focus:disabled, .btn-mktg:focus:disabled, .btn-mktg:hover:disabled {\n box-shadow: none !important;\n }\n .btn-muted-mktg, .btn-subtle-mktg {\n background: none !important;\n }\n .btn-subtle-mktg {\n box-shadow: none !important;\n }\n .btn-subtle-mktg::before {\n background: none !important;\n }\n .btn-signup-mktg {\n color: #fff;\n background: linear-gradient(180deg, rgba(52, 183, 89, .15) 0%, rgba(46, 164, 79, 0) 100%), #373 !important;\n }\n .box-shadow-active-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 2px 2px rgba(0, 0, 0, .03), 0 4px 4px rgba(0, 0, 0, .04), 0 10px 8px rgba(0, 0, 0, .05), 0 15px 15px rgba(0, 0, 0, .06), 0 30px 30px rgba(0, 0, 0, .07), 0 70px 65px rgba(0, 0, 0, .09) !important;\n }\n .box-shadow-card-border-light-mktg {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 3px 2px rgba(0, 0, 0, .04), 0 7px 5px rgba(0, 0, 0, .02), 0 13px 10px rgba(0, 0, 0, .02), 0 22px 17px rgba(0, 0, 0, .02) !important;\n }\n .box-shadow-card-dark-mktg {\n box-shadow: 0 0 0 1px #f0f0f0, 0 70px 65px rgba(0, 0, 0, .09), 0 30px 30px rgba(0, 0, 0, .07), 0 15px 15px rgba(0, 0, 0, .06), 0 10px 8px rgba(0, 0, 0, .05), 0 4px 4px rgba(0, 0, 0, .04), 0 2px 2px rgba(0, 0, 0, .03);\n }\n .box-shadow-card-dark-mktg::after {\n box-shadow: inset 0 1px 1px hsla(0, 0%, 0%, .1);\n }\n .text-white-fade {\n color: hsla(0, 0%, 0%, .7) !important;\n }\n .code-pink {\n color: #c49;\n }\n .bg-blue-dark {\n background-color: #182030 !important;\n }\n .bg-radial-white {\n background: radial-gradient(145.3% 145.3% at 65.91% 0%, #181818 0%, #f0f0f0 100%);\n }\n .text-gradient-blue-green {\n background: -webkit-linear-gradient(-70deg, #4f8cc9 0%, #01a49e 100%);\n }\n .text-gradient-blue-purple {\n background: -webkit-linear-gradient(-70deg, #4f8cc9 0%, #804eda 100%);\n }\n .text-gradient-pink-blue {\n background: -webkit-linear-gradient(-70deg, #db469f 0%, #4f8cc9 100%);\n }\n :root .font-mktg [data-color-mode=dark] {\n --color-fg-default: #181818 !important;\n }\n .header-white .Header, .header-white .Header-old {\n background-color: #181818 !important;\n }\n .header-white .Header-old .HeaderMenu-link.border,\n .header-white .Header-old a.border,\n .header-white .Header .HeaderMenu-link.border,\n .header-white .Header a.border {\n color: #fff !important;\n background-color: #181818 !important;\n border-color: #c6c6c6 !important;\n }\n .header-white .notification-indicator .mail-status {\n border-color: var(--ghd-bg-color) !important;\n }\n .header-white-transparent .Header, .header-white-transparent .Header-old {\n background-color: transparent !important;\n }\n .header-overlay .Header, .header-overlay .header-logged-out {\n background-color: transparent;\n }\n .testimonial-avatar {\n border-color: var(--ghd-bg-color);\n }\n .subnav-link.selected {\n border-bottom-color: /*[[base-color]]*/;\n }\n @media (min-width: 768px) {\n .subnav-primary.selected {\n border-bottom-color: /*[[base-color]]*/;\n }\n }\n .fade-img-to-white-bg::before {\n background: linear-gradient(to bottom, #181818 0%, transparent 100%);\n }\n .fade-img-to-white-bg::after {\n background: linear-gradient(to top, #181818 0%, transparent 100%);\n }\n .home-git-log-light .home-git-icon > circle,\n .home-git-log-light .home-git-icon > rect {\n fill: #181818;\n }\n .home-repo-editor, .package-registry {\n box-shadow: 0 0 0 1px hsla(0, 0%, 0%, .1), 0 34px 65px #040d21, 0 2.75px 2.21px rgba(0, 0, 0, .07), 0 6.65px 5.32px rgba(0, 0, 0, .043), 0 12.5px 10px rgba(0, 0, 0, .03), 0 22px 18px rgba(0, 0, 0, .03), 0 42px 33.4px rgba(0, 0, 0, .02), 0 100px 80px rgba(0, 0, 0, .017);\n }\n .build-in-animate .home-codeql-step-1, .home-secret-alert,\n .home-secret-comp.build-in-animate .home-secret-alert {\n box-shadow: 0 0 65px rgba(237, 78, 80, .4), 0 0 0 1px hsla(0, 0%, 0%, .1), 0 2px 2px rgba(0, 0, 0, .03), 0 4px 4px rgba(0, 0, 0, .04), 0 10px 8px rgba(0, 0, 0, .05), 0 15px 15px rgba(0, 0, 0, .06), 0 30px 30px rgba(0, 0, 0, .07), 0 70px 65px rgba(0, 0, 0, .09);\n }\n .home-discussions-comp.build-in-animate .home-discussions-answer {\n box-shadow: 0 0 0 2px #484;\n }\n .home-discussions-check-0 {\n border-color: var(--ghd-bg-color);\n }\n .password-validity-pill.password-validity-pill-close {\n background-color: #cb4;\n }\n .password-validity-summary.password-validity-summary-close {\n color: #cb4;\n }\n /* end github.com rules */\n body, body.bg-gray {\n color: var(--ghd-body-color);\n background-color: var(--ghd-bg-color) !important;\n background-image: var(--ghd-bg-img) !important;\n background-clip: border-box !important;\n background-origin: padding-box !important;\n background-attachment: /*[[bg-attachment]]*/ !important;\n /*[[bg-options]]*/\n }\n .application-main > .color-bg-canvas-inset {\n background: transparent !important;\n }\n /* Base link colors */\n .markdown-body a strong, .markdown-format a strong,\n .notifications.list-group a:hover, a.octolinker-link[href], .commit-id:hover,\n .timeline-comment-action:hover, .Header-link[data-ga-click]:focus,\n .Header-link[data-ga-click]:hover, .btn-link .octicon-kebab-horizontal:hover,\n .Header-link:hover, .Header-link:focus {\n color: /*[[base-color]]*/;\n }\n .text-gray-light.btn-octicon:hover .octicon-kebab-horizontal,\n [aria-labelledby=\"files\"] .Link--primary,\n [aria-labelledby=\"files\"] .Link--secondary {\n color: /*[[base-color]]*/ !important;\n }\n #notebook a:hover, #notebook a:focus {\n color: /*[[base-color]]*/;\n opacity: .8;\n }\n body.api li a code {\n color: rgba(/*[[base-color-rgb]]*/, .9) !important;\n }\n body.api li a:active code, body.api li a:hover code {\n color: rgba(/*[[base-color-rgb]]*/, 1) !important;\n }\n .hidden-text-expander .hx_bg-black-fade-15 {\n background: #343434;\n }\n /* Base color panel */\n option:hover, .listings-layout .nav li a:hover,\n #fork-select .target:not(.disabled):hover, table.upgrades tr:hover td,\n .dashboard-tabs a:hover, .documentation-results a:hover,\n .hidden-text-expander a:hover, .example-nav li a.selected,\n .issues-reset-query:hover .octicon-x, .segmented-nav li.active,\n .diff-expander:hover, .owner-select-target:hover,\n .release-timeline-tags .expander-text:hover .expander-dots,\n .search-result-item.navigation-focus, .pull-request-link:hover,\n .issues-reset-query:hover .issues-reset-query-block, .result.selected,\n .result:hover, .CommunityTemplate-highlight, .version-picker a:hover,\n .discussion-item-changes-marker.is-unread .discussion-item-icon {\n background: /*[[base-color]]*/ !important;\n }\n .diff-table button.add-line-comment, .add-line-comment,\n .email-format .email-hidden-toggle a:hover {\n background: /*[[base-color]]*/;\n }\n .context-button::after {\n border-color: /*[[base-color]]*/ transparent transparent !important;\n }\n .timeline-progressive-disclosure-button:hover,\n .release-timeline-tags .expander-text:hover .expander-dots,\n .review-comment[aria-selected=true],\n .timeline-comment[aria-selected=true] .review-summary .comment-body {\n border-color: /*[[base-color]]*/ !important;\n }\n /* pjax loader */\n [style*=\"background-color: rgb(121, 184, 255)\"] {\n background: /*[[base-color]]*/ !important;\n }\n @keyframes autofill {\n to {\n background-color: #181818;\n background-image: none;\n color: #ddd;\n }\n }\n input:-webkit-autofill, input:-webkit-autofill:hover,\n input:-webkit-autofill:focus, textarea:-webkit-autofill,\n textarea:-webkit-autofill:hover, textarea:-webkit-autofill:focus,\n select:-webkit-autofill, select:-webkit-autofill:hover,\n select:-webkit-autofill:focus {\n animation-name: autofill !important;\n animation-fill-mode: both !important;\n }\n #com #header .top-nav .dropdown-button:hover .dropdown-caret,\n .header-nav-link:hover .dropdown-caret, .header-nav-link:focus .dropdown-caret,\n .header-navlink:hover .dropdown-caret, .header-navlink:focus .dropdown-caret,\n .HeaderNavlink:hover .dropdown-caret, .HeaderNavlink:focus .dropdown-caret {\n border-top-color: /*[[base-color]]*/ !important;\n }\n .table-list .table-list-item.unread .table-list-cell-checkbox,\n .Box-row--unread, .Box-row.unread {\n border-left-color: /*[[base-color]]*/ !important;\n box-shadow: 2px 0 0 /*[[base-color]]*/ inset !important;\n }\n /* notification icon - \"transparent\" border */\n .notification-indicator .mail-status {\n border-color: #181818;\n }\n /* text selection */\n ::selection {\n background-color: /*[[base-color]]*/ !important;\n color: #fff !important;\n }\n ::-moz-selection {\n background-color: /*[[base-color]]*/ !important;\n color: #fff !important;\n }\n /* placeholder */\n ::-webkit-input-placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n ::-moz-placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n ::placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n .select-menu-text-filter input::-webkit-input-placeholder {\n color: #555 !important;\n }\n .select-menu-text-filter input::-moz-placeholder {\n color: #555 !important;\n }\n .select-menu-text-filter input::placeholder {\n color: #555 !important;\n }\n ::-webkit-calendar-picker-indicator {\n background-color: #181818;\n color: #c9c9c9;\n }\n ::-webkit-calendar-picker-indicator:hover {\n color: #666;\n }\n /* Remove dotted borders on already otherwise higlighted elements (Firefox) */\n .dropdown-item:focus, .details-dialog:focus {\n outline: none;\n }\n /* commit tease */\n .commit-tease, .commit-tease-sha, .commit-tease .commit-author {\n color: #c6c6c6 !important;\n }\n .tree-browser-result mark {\n color: #c6c6c6;\n }\n /* people panel org page issue #1041 */\n .auto-search-group input[type=\"text\"][aria-label] {\n background: #181818;\n }\n /* focus hightlight */\n a:focus, button:focus, [tabindex] {\n outline-color: /*[[base-color]]*/ !important;\n }\n input.focus[type=\"text\"], #adv_code_search .focus.search-page-label,\n .focused .drag-and-drop, #adv_code_search .search-page-label:focus,\n #q:focus ~ button, input.color-editor-input:focus, #ghd-settings select:focus,\n #ghd-settings input:focus, .intgrs-lstng-item:hover,\n .ajax-pagination-btn:focus, input[type=\"checkbox\"]:focus,\n div.search-form input:focus, #search > input[name=\"q\"]:focus {\n border-color: /*[[base-color]]*/ !important;\n outline-color: /*[[base-color]]*/ !important;\n }\n /* add border to site search field */\n .radio-group input[type=radio] {\n position: relative !important;\n }\n .dragover textarea, .dragover .drag-and-drop {\n box-shadow: 0 0 1px 1px /*[[base-color]]*/ !important;\n }\n /* remove background on frontpage */\n .application-main > .color-bg-inset {\n background: none !important;\n }\n .starred .starred-button-icon {\n color: var(--color-fg-muted);\n }\n /* below style is workaround for Firefox. */\n /* see: https://bugzilla.mozilla.org/show_bug.cgi?id=1394491 */\n optgroup::before {\n color: #888 !important;\n background-color: #181818 !important;\n }\n optgroup {\n background-color: #191919 !important;\n }\n /* custom checkboxes and radios */\n input[type=\"checkbox\"], input[type=\"checkbox\"]:focus, input[type=\"radio\"],\n input[type=\"radio\"]:focus, input[type=\"checkbox\"]:hover:active,\n input[type=\"radio\"]:hover:active, input[type=\"checkbox\"]:disabled,\n input[type=\"checkbox\"]:hover:disabled,\n input[type=\"checkbox\"]:hover:active:disabled {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n background-color: #181818;\n border: 1px solid #484848;\n color: #eee;\n height: 14px;\n width: 14px;\n }\n input[type=\"radio\"] {\n border-radius: 100% !important;\n }\n input[type=\"checkbox\"]:disabled, input[type=\"checkbox\"]:hover:disabled,\n input[type=\"checkbox\"]:hover:active:disabled, input[type=\"radio\"]:disabled {\n background-color: #282828 !important;\n color: #555 !important;\n }\n input[type=\"checkbox\"]:checked {\n background: url('data:image/svg+xml;utf8,') !important;\n background-size: cover !important;\n }\n input[type=\"checkbox\"]:checked:disabled {\n background: url('data:image/svg+xml;utf8,') !important;\n }\n input[type=\"checkbox\"]:indeterminate {\n background: url('data:image/svg+xml;utf8,') !important;\n background-size: cover !important;\n }\n input[type=\"checkbox\"]:indeterminate:disabled {\n background: url('data:image/svg+xml;utf8,') !important;\n }\n input[type=\"radio\"]:checked {\n background: url('data:image/svg+xml;utf8,') !important;\n background-size: cover !important;\n }\n input[type=\"radio\"]:checked:disabled {\n background: url('data:image/svg+xml;utf8,') !important;\n }\n /*[[tab-size]]*/\n /* User time line firsts */\n img[src$=\"profile-joined-github.png\"] {\n padding-bottom: 20px !important;\n }\n table.pricing-table td:first-child {\n text-indent: 9px;\n }\n /* HACK: Label colors */\n [class*=\"IssueLabel\"][style*=\" color: #f\"], .IssueLabel a[style*=\"color: #f\"],\n .issue-card-label[style*=\" color: #f\"] {\n color: #e8e8e8 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #e\"], .IssueLabel a[style*=\"color: #e\"],\n .issue-card-label[style*=\" color: #e\"] {\n color: #e8e8e8 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #d\"], .IssueLabel a[style*=\"color: #d\"],\n .issue-card-label[style*=\" color: #d\"] {\n color: #e8e8e8 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #c\"], .IssueLabel a[style*=\"color: #c\"],\n .issue-card-label[style*=\" color: #c\"] {\n color: #e8e8e8 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #3\"], .IssueLabel a[style*=\"color: 3\"],\n .issue-card-label[style*=\" color: #3\"] {\n color: #181818 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #2\"], .IssueLabel a[style*=\"color: #2\"],\n .issue-card-label[style*=\" color: #2\"] {\n color: #181818 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #1\"], .IssueLabel a[style*=\"color: #1\"],\n .issue-card-label[style*=\" color: #1\"] {\n color: #181818 !important;\n }\n [class*=\"IssueLabel\"][style*=\" color: #0\"], .IssueLabel a[style*=\"color: #0\"],\n .issue-card-label[style*=\" color: #0\"] {\n color: #181818 !important;\n }\n /* Fix GitHub's weird dark mode labels by reverting them to light mode values */\n .hx_IssueLabel {\n --lightness-threshold: .453 !important;\n --border-threshold: .96 !important;\n --border-alpha: max(0, min(calc((var(--perceived-lightness) - var(--border-threshold)) * 100), 1)) !important;\n background: rgb(var(--label-r), var(--label-g), var(--label-b)) !important;\n color: hsl(0, 0%, calc(var(--lightness-switch) * 100%)) !important;\n border-color: hsla(var(--label-h), calc(var(--label-s) * 1%), calc((var(--label-l) - 25) * 1%), var(--border-alpha)) !important;\n }\n /* Tooltip on contribution calendar */\n .svg-tip {\n color: #949494;\n }\n .svg-tip strong {\n color: #dcdcdc;\n }\n .Label--gray-darker {\n border-color: #484848 !important;\n }\n .project-card .highlight pre {\n padding: 1em;\n overflow: auto;\n white-space: pre;\n word-wrap: initial;\n }\n .project-card code {\n padding: .2em .4em;\n }\n .markdown-title code {\n background: #2d2d2d;\n }\n .intgrs-lstng-item-description::after {\n background-image: linear-gradient(to right, rgba(24, 24, 24, 0), #181818 80%) !important;\n }\n .marketplace-product-callout-bg {\n background-image: linear-gradient(to right, rgba(24, 24, 24, 0), #181818) !important;\n }\n .CircleBadge--github::after {\n background-color: #fff;\n }\n div[style*=\"background: linear-gradient(to bottom, rgba(246,248,250,0.5) 0%,rgba(246,248,250,1) 100%);\"] {\n background: linear-gradient(to bottom, rgba(32, 32, 32, .5) 0%, #202020 100%) !important;\n }\n .profile-timeline-month-heading {\n padding: 2px 5px !important;\n }\n input.tree-finder-input, input.tree-finder-input:focus {\n background: transparent !important;\n border: none !important;\n box-shadow: none !important;\n }\n .dropdown-menu, .word-upload-callout, .select-menu-modal {\n box-shadow: 0 3px 12px rgba(0, 0, 0, .4);\n }\n .dropdown-menu-dark::after {\n border-bottom-color: #343434 !important;\n }\n .exploregrid-item {\n border-color: rgba(255, 255, 255, .075) !important;\n box-shadow: 0 1px 2px rgba(0, 0, 0, .05), 0 5px 10px rgba(0, 0, 0, .05) !important;\n }\n .exploregrid-item:hover {\n border-color: rgba(255, 255, 255, .15) !important;\n box-shadow: 0 1px 3px rgba(0, 0, 0, .15), 0 8px 15px rgba(0, 0, 0, .3) !important;\n }\n .box-shadow-large, html[class*=\"ghh-\"] .tooltipster-box {\n box-shadow: 0 1px 15px #000 !important;\n }\n img[src*=\"images/modules/checks\"].box-shadow-large {\n box-shadow: 0 1px 15px #fff !important;\n }\n /* add rounded borders on bottom */\n body[data-render-url], .render-viewer, .comment-content, .more-repos,\n .comment table {\n border-radius: 0 0 3px 3px !important;\n }\n .dashboard-tabs a, .search-filters {\n border-radius: 0 !important;\n }\n /* repo labels, private repo lists */\n .repo-label span, .private .repo-list-item, .hook-delivery-guid {\n background: #222 !important;\n color: #777 !important;\n }\n .private .mini-repo-list-item .repo-icon {\n color: #777 !important;\n }\n .private .mini-repo-list-item {\n background: #221 !important;\n }\n .section-nav .active a, .js-current .standalone a, .sidebar-module .disable>a {\n border-radius: 0 !important;\n border-left: 2px solid #eee !important;\n }\n .dropdown-arrow {\n border-top-color: #eee !important;\n transition: none !important;\n }\n #com #header .top-nav .dropdown-caret {\n border-top-color: #ccc !important;\n }\n .js-menu-target:hover .dropdown-arrow {\n border-top-color: /*[[base-color]]*/ !important;\n }\n .bg-gray-dark, .CheckRun {\n background: #181818 !important;\n }\n /* Add border-top to PR checks results blank slate */\n aside.border-top + section.bg-gray-dark:not([class*=\"js-\"]) {\n border-top: 1px solid #343434;\n }\n /* Make it more apparent that
is clickable */\n .markdown-body details summary:not([aria-haspopup]):hover {\n background: #282828;\n box-shadow: 0 0 0 2px #282828;\n cursor: pointer;\n }\n /* https://github.com/about/diversity dots fix */\n .bg-hero-dots-gray::after {\n filter: brightness(50%);\n }\n /* GitHub Bug: Center discussion close icon vertically */\n .discussion-item-closed .octicon {\n position: relative !important;\n top: -1px;\n }\n /* GitHub Bug: Center counters vertically on the line */\n .boxed-group .counter, .reponav-item .counter, .boxed-group .Counter,\n .reponav-item .Counter {\n position: relative !important;\n top: -1px !important;\n }\n /* GitHub Bug: Fix image swipe handle misalignment */\n .swipe .swipe-frame .swipe-bar .top-handle,\n .swipe .swipe-frame .swipe-bar .bottom-handle {\n left: -6px !important;\n }\n /* GitHub Bug: Stop commit message field from resizing horizontally */\n #commit-description-textarea {\n resize: vertical !important;\n }\n /* GitHub Bug: Fix cut-off 'g' letters in box headers like on https://github.com/notifications */\n .boxed-group .heading, .boxed-group > h3 {\n padding: 7px 10px 8px;\n line-height: inherit;\n }\n /* GitHub Bug: Fix cut-off 'g' letters on user page timeline repo names */\n .profile-timeline .lh-condensed {\n line-height: 1.35rem !important;\n }\n /* GitHub Bug: Fix cut-off 'g' letters on action workflow list */\n [id^=\"check_suite\"] .lh-condensed {\n line-height: 1.35rem !important;\n }\n /* GitHub Bug: fix disabled dropdown entries bg hover see https://git.io/Jfjul */\n .btn-link:disabled:hover {\n background: none;\n }\n /* GitHub Bug: Fix .branch-action-state ::after border right color */\n .branch-action-state-clean .timeline-comment--caret::after,\n .branch-action-state-dirty .timeline-comment--caret::after,\n .branch-action-state-unknown .branch-action-body::after,\n .branch-action-state-unstable .branch-action-body::after {\n border-right-color: #181818;\n }\n /* GitHub Bug: Vertically center ... expander in box headers */\n .Box-header .Details .ellipsis-expander {\n position: relative;\n top: -1.5px;\n }\n /* GitHub Bug: Vertically center counters on issue list \"Labels\" button */\n .subnav-item .Counter {\n position: relative;\n top: -1.25px;\n }\n /* GitHub Bug: Make review comment file table full width */\n .comment-body .blob-wrapper > table {\n width: 100%;\n }\n /* GitHub Bug: Vertically center labels on issue lists and add some margin */\n .Box-row .labels {\n vertical-align: middle;\n margin-left: .25rem;\n }\n /* GitHub Bug: Remove vertical padding on code suggestions diffs */\n .js-comment-body .blob-code-inner.py-1 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n /* GitHub Bug: Fix cut-off actions sidebar */\n .js-check-suites-sidebar {\n height: auto !important;\n }\n /* GitHub Bug: Fix link color in markdown comments */\n .reorderable-task-lists .markdown-body .issue-link {\n color: var(--color-text-link);\n font-weight: inherit;\n }\n /* GitHub Bug: Ensure body covers viewport height */\n body {\n min-height: 100vh;\n }\n /* GitHub Bug: Fix margin imbalance in issue comments */\n .edit-comment-hide > .mb-2 {\n margin-bottom: 0 !important;\n }\n .edit-comment-hide > .mb-2 .comment-reactions {\n margin-bottom: 8px !important;\n }\n /* Opinionated: Remove excessive box padding and adjust avatars to match */\n .Box-row, .Box-header, .Box-body {\n padding: 8px 12px;\n }\n .file-header {\n padding: 4px 6px;\n }\n .js-code-editor .file-header {\n padding: 5px 10px;\n }\n /* https://github.com/vednoc/userstyles.world */\n /* https://github.com/vednoc/userstyles.world/blob/main/themes */\n /* https://github.com/vednoc/userstyles.world/blob/main/themes/.gitkeep */\n .avatar[width=\"24\"], .avatar-user[width=\"24\"] {\n width: 20px;\n height: 20px;\n }\n .AvatarStack .avatar {\n width: 20px !important;\n height: 20px !important;\n overflow: visible !important;\n }\n .Box-header .avatar[width=\"24\"], .Box-header .avatar-user[width=\"24\"] {\n position: relative;\n top: 2px;\n left: 2px;\n }\n .Box-header a[rel] .avatar[width=\"24\"],\n .Box-header a[rel] .avatar-user[width=\"24\"] {\n top: -1px;\n left: 2px;\n margin-right: 4px;\n }\n .Box-header .ml-n1 {\n margin-left: 0 !important;\n margin-right: -8px !important;\n }\n /* fix close icon when .m-0 class is applied */\n .Box-btn-octicon.btn-octicon.m-0 {\n margin: -8px !important;\n }\n /* Repo files table: Make first border blue */\n .repository-content .Box.mb-3 .Details .sr-only + .Box-row {\n border-top-color: #246 !important;\n }\n /* Various tweaks to own comments in discussion */\n .discussion-comment.current-user div.clearfix {\n border-radius: 3px 3px 0 0;\n }\n .discussion-comment .js-inline-comments-container,\n .discussion-comment .js-resolvable-timeline-thread-container {\n background: none;\n }\n .discussion-comment .review-thread-reply {\n border-radius: 0 0 5px 5px;\n }\n .discussion-comment.current-user .review-thread-reply {\n background: #182030;\n border-color: #246;\n }\n /* Monochrome Issue progress icon */\n tracked-issues-progress circle[stroke] {\n --color-accent-fg: #ccc;\n }\n /* \"Code\" button on repo */\n .btn-primary .octicon {\n color: inherit;\n }\n .btn-primary.disabled, .btn-primary:disabled,\n .btn-primary[aria-disabled=\"true\"], .btn.disabled, .btn:disabled,\n .btn[aria-disabled=\"true\"] {\n color: var(--color-icon-tertiary);\n }\n /* topic tags */\n .topic-tag {\n box-shadow: inset 0 0 0 1px #246 !important;\n }\n .topic-tag.topic-tag-outline {\n box-shadow: inset 0 0 0 1px #6d7c9c !important;\n }\n /* user page sticky header */\n main > div.position-sticky.d-md-block.width-full {\n position: relative;\n }\n main > div.position-sticky.d-md-block.width-full:before {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: -24px;\n height: 24px;\n background: #181818;\n }\n /* Add bottom border on subnav - https://github.com/topics */\n .site-subnav {\n box-shadow: 0 1px 0 #343434 !important;\n }\n @media screen and (min-width: 1024px) {\n .site-subnav .subnav-primary.selected, .site-subnav .subnav-primary:hover {\n border-bottom-color: #eee !important;\n }\n }\n @media screen and (max-width: 768px) {\n body .p-responsive .subnav-btn {\n background: transparent !important;\n }\n body .p-responsive .subnav-link[href=\"https://enterprise.github.com/contact\"] {\n border-bottom-color: transparent !important;\n color: #8e8e8e !important;\n }\n body .p-responsive .subnav-link[href=\"https://enterprise.github.com/contact\"]:hover {\n border-bottom-color: transparent !important;\n color: #c6c6c6 !important;\n }\n }\n /* invisible border */\n @media screen and (max-width: 768px) {\n body.page-responsive .site-subnav .subnav-primary.selected,\n body.page-responsive .site-subnav .subnav-primary:hover {\n border-bottom-color: transparent !important;\n color: #c6c6c6 !important;\n }\n }\n .avatar-stack .avatar, .tabs > a, .header .divider-vertical, .about-menu-link {\n border-color: transparent !important;\n }\n /* darken border */\n .wiki-wrapper .wiki-empty-box:hover, .about-menu-link:hover,\n .about-menu-link.selected, .pricing-table {\n border-color: #777 !important;\n }\n /* brighten border */\n .filter-item.selected .Label--outline-white {\n border-color: #fff;\n }\n .filter-tab.selected {\n border: 1px solid #444 !important;\n border-bottom: 1px solid #343434 !important;\n }\n .follow-list .follow-list-item {\n border-bottom: 1px solid #343434 !important;\n }\n .branch-action-body::after {\n border-right-color: #181818 !important;\n }\n .branch-action-state-closed-dirty .branch-action-icon,\n .branch-action-state-dirty .branch-action-icon,\n .is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-icon,\n .State[title*=\"draft\" i] {\n background: #484848;\n }\n /* https://github.com/mobile/ */\n .mobile-gradient-bg {\n display: none;\n }\n svg.mobile-hero {\n filter: invert(100%) hue-rotate(180deg);\n }\n /* discussion timeline tweaks */\n .closed-banner {\n display: none !important;\n }\n /* background image on https://github.com/stylishThemes/github-dark/actions/new */\n .repo-actions-hero {\n filter: invert(1) hue-rotate(180deg);\n mix-blend-mode: exclusion;\n }\n .release .markdown-body img {\n background: none;\n }\n .js-profile-timeline-year-list {\n background: none !important;\n }\n .contribution-activity-listing .Progress {\n background: none !important;\n }\n .contribution-activity-listing .Progress-item {\n background: /*[[base-color]]*/ !important;\n }\n .discussion-timeline-actions {\n border-top: 2px solid #383838 !important;\n background: none !important;\n }\n .discussion-timeline::before {\n margin-top: 2px !important;\n background: #383838 !important;\n height: calc(100% - 259px) !important;\n }\n .profile-timeline.discussion-timeline::before {\n height: 100% !important;\n }\n .listings div.listing {\n border-left: 2px solid #333 !important;\n border-right: 2px solid #333 !important;\n }\n #org-members .member-listing {\n border-left: 1px solid #333 !important;\n border-right: 1px solid #333 !important;\n }\n .MarketplaceSideNav, .plans-card-text:first-child {\n border-right-color: #484848 !important;\n }\n /* fix commit form bg color */\n .commit-form {\n background-color: var(--ghd-bg-color);\n }\n .Popover-message.Box {\n background-color: var(--ghd-bg-color);\n }\n .Popover-message.box-shadow-large {\n box-shadow: 0 8px 24px rgba(24, 24, 24, .8) !important;\n }\n .Popover-message--top-left::after {\n border-bottom-color: #181818 !important;\n }\n .word-upload-callout::before, .word-upload-callout::after,\n .select-menu-modal-arrow::after, .Popover-message--top-left::before {\n border-bottom-color: #343434 !important;\n }\n .repo-filterer .repo-filter:hover, .review-summary::before {\n border-bottom-color: #484848 !important;\n }\n .issue-head {\n border-bottom-width: 1px !important;\n }\n .context-button:hover::after, .switcher > span::before {\n border-color: #eee transparent transparent !important;\n }\n /* repo tab tweaks */\n .reponav-item {\n border-top-width: 1px !important;\n }\n .reponav-item.selected {\n border-color: #343434;\n }\n .pagehead-tabs-item {\n border-top-width: 1px !important;\n }\n .Header .header-search-wrapper, .Header .header-search-wrapper input {\n background: #202020 !important;\n }\n .file-header {\n background: #202020 !important;\n }\n .js-new-comment-form .previewable-comment-form .tabnav-tab.selected,\n .js-new-comment-form .previewable-comment-form .tabnav-tab[aria-current]:not([aria-current=\"false\"]),\n .js-new-comment-form .previewable-comment-form .tabnav-tab[aria-selected=\"true\"],\n .timeline-new-comment .timeline-comment,\n .timeline-new-comment .tabnav-tab.selected,\n .timeline-new-comment .tabnav-tab[aria-current]:not([aria-current=\"false\"]),\n .timeline-new-comment .tabnav-tab[aria-selected=\"true\"],\n .previewable-comment-form .comment-form-head.tabnav,\n .timeline-comment.current-user.is-comment-editing {\n background: #1b1b1b !important;\n }\n .new-discussion-timeline .composer .comment-form-head.tabnav {\n background: #202020;\n }\n .pagehead-tabs-item.selected, .reponav-item.selected, .tabnav-tab.selected {\n background: #202020;\n border-bottom-color: #202020 !important;\n }\n .branches .branch-summary + .branch-summary {\n border-top-color: #333 !important;\n }\n /* code */\n .linkable-line-number {\n border-right: 1px solid #484848 !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/620 */\n .timeline-comment-header .css-truncate-target {\n max-width: 250px !important;\n }\n /* override wrong gen bg color and assign var */\n .timeline-comment-header {\n background-color: var(--ghd-bg-color);\n }\n /* fix background on \"new issue\" form */\n .timeline-comment > div.p-0.mb-md-0 {\n background: var(--ghd-bg-color);\n border-radius: 3px 3px 0 0;\n }\n /* tooltip - tooltipped */\n .octotip {\n background-color: #003 !important;\n border-color: #006 !important;\n }\n .tooltipped::after {\n background: #343434 !important;\n }\n .tooltipped-n::before, .tooltipped-ne::before, .tooltipped-nw::before {\n border-top-color: #343434 !important;\n }\n .tooltipped-s::before, .tooltipped-se::before, .tooltipped-sw::before {\n border-bottom-color: #343434 !important;\n }\n .tooltipped-e::before {\n border-right-color: #343434 !important;\n }\n .tooltipped-w::before {\n border-left-color: #343434 !important;\n }\n .review-comment[aria-selected=true],\n .timeline-comment[aria-selected=true] .review-summary {\n background-color: #181818 !important;\n box-shadow: 0 0 0 .2em rgba(/*[[base-color-rgb]]*/, .3) !important;\n }\n .timeline-comment-group[aria-selected=true] .timeline-comment::before {\n border-right-color: /*[[base-color]]*/ !important;\n left: -17px !important;\n filter: none !important;\n }\n .timeline-comment:target .review-summary::after {\n top: -16px !important;\n filter: none !important;\n }\n .timeline-comment[aria-selected=true] .review-summary::before {\n border-bottom-color: rgba(/*[[base-color-rgb]]*/, .3) !important;\n top: -19.75px !important;\n filter: none !important;\n }\n /* fix .discussion-topic-header in first PR bg color match the arrow */\n .timeline-comment .discussion-topic-header {\n background-color: var(--ghd-bg-color);\n }\n /* search - language sidebar - https://github.com/StylishThemes/GitHub-Dark/search?q=markdown */\n div.container-lg > div.float-left.px-md-2 > .border.rounded-1.d-none.d-md-block {\n background: #181818;\n border-color: #484848 !important;\n }\n .dashboard-sidebar, .tint-box, .capped-card-content, .table-list-item,\n .pinned-issue-item, .line-comments, .js-notice > .border:not(.bg-blue-light),\n .js-notice.border, #projects-results, .pr-toolbar.is-stuck, .pinned-issue-item,\n .pinned-item-list-item, article.border.rounded-1, #search-member,\n .sidebar-progress-bar > .d-flex,\n .pagination-loader-container .discussion-item-header .border,\n #wiki-footer .border-dashed, #wiki-rightbar .border-dashed,\n .profile-timeline-card, .avatar-before-user-status,\n .graph-before-activity-overview, .access-form-wrapper,\n .border-right.border-bottom.border-left, .news .issues_labeled .border,\n table.pricing-table, .two-factor-steps, .project-column,\n .branch-action-item.js-transitionable, .prose-diff, .listgroup,\n .repository-og-image:not([style*=\"background-image\"]),\n .thread-subscription-status {\n background: #181818;\n }\n /* Expandable review boxes, rendered and loading */\n .js-inline-comments-container, .js-resolvable-timeline-thread-container {\n background: #181818;\n border-radius: 3px;\n }\n .js-diff-load-container, .file .data.empty {\n background-color: var(--ghd-code-background) !important;\n border-radius: 0 0 5px 5px !important;\n }\n /* unread notifications are darker bg than read issue #1095 */\n .blame-hunk .blame-commit, .notifications-list-item.notification-unread {\n background: #181818;\n }\n /* read notifications are lighter bg than read issue #1095 */\n .notifications-list .list-style-none.bg-gray {\n background: #1e1e1e !important;\n }\n .blame-hunk, .blame-hunk .blob-num, .render-container, .blob-wrapper {\n background-color: var(--ghd-code-background) !important;\n }\n .radio-label, [style*=\"background-color: #2f363d\"],\n .project-full-screen .project-header {\n background-color: #181818 !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/811 */\n .application-main > main .container-sm > .pt-4.bg-white.text-center {\n background: none !important;\n }\n /* Labels/Milestone links https://github.com/StylishThemes/Github-Dark/issues */\n .subnav-links {\n background: #181818;\n }\n /* blankslates */\n /* bordered: https://github.com/StylishThemes/GitHub-Dark/actions/runs/42585904 */\n /* bordered: https://github.com/StylishThemes/GitHub-Dark/network/alerts */\n /* unbordered: https://github.com/StylishThemes/GitHub-Dark/pull/1069/files/d0801046a22eaf88d9081de9c7d415825cb1f9fa..291b428577d344d54039de9aa0d8ed3a8fcfaebc */\n .blankslate {\n background: none !important;\n }\n .blankslate.border, .blankslate.border-gray-light,\n .js-updatable-content > .border.rounded-1 {\n background: #181818 !important;\n }\n /* add background to pagination active states and remove transitions */\n .pagination a:active, .pagination a:focus, .pagination a:hover,\n .pagination em:active, .pagination em:focus, .pagination em:hover,\n .pagination span:active, .pagination span:focus, .pagination span:hover {\n background: #181818;\n transition: none !important;\n }\n .pagination a, .pagination em, .pagination span {\n transition: none !important;\n }\n /* add background to discussions sidebar box */\n .repository-content > .js-check-all-container .d-none.d-lg-block > .border {\n background: #181818;\n }\n /* add background to packages page */\n /* https://github.com/yarnpkg/berry/packages/19319 */\n .repository-content .border.rounded-1.px-3.py-4.mb-6 {\n background: #181818;\n }\n button.bg-white.subnav-link, main [style=\"background-color: #fcfdfd;\"],\n .repository-content > .bg-white:not(.card-filter-autocomplete-dropdown) {\n background-color: transparent !important;\n }\n .sidebar-module, div.search-form input, #search > input[name=\"q\"],\n .ais-SearchBox-input {\n background-color: #181818;\n border-color: #343434;\n }\n .blob-num-context, #user-content-toc td {\n background: #141414 !important;\n }\n .action-card::after, .action-card::before {\n background-color: #202020 !important;\n box-shadow: 0 0 0 1px #555 !important;\n }\n /* pseudo-transparent effects */\n .conversation-list-heading .inner, .profile-timeline-month-heading {\n background-color: var(--ghd-bg-color) !important;\n }\n /* Navigation focus */\n .list-browser-item.navigation-focus, .js-details-container.navigation-focus,\n .js-details-container.navigation-focus:nth-child(2n), .team-grid .team-members,\n .tree-browser tr.navigation-focus td,\n .issues-listing .table-list-issues .selectable:hover,\n .issues-listing .table-list-issues .navigation-focus, .setup-plans tr.selected,\n .notifications .navigation-focus, .sidebar-module ul ul li a:hover,\n .no-results, #gollum-editor-help-list, .owner-select-target,\n .divider .blob-code div.highlight,\n .oauth-org-access-details .boxed-group-list > li.on:hover, pre div:hover,\n .summary-stats li a:hover, .pinned-repos-selection-list-item.selected,\n .Box-body-row--highlight.navigation-focus, .Box-body-row--highlight:hover,\n .js-current .standalone a, .Box-row--focus-gray.navigation-focus,\n .team-listing .is-open.root-team, .Box-row--hover-gray:hover,\n .label-select-menu .select-menu-item.navigation-focus,\n .label-select-menu .select-menu-item:focus,\n .label-select-menu .select-menu-item:hover {\n background: #222 !important;\n }\n .search-result-group {\n background: #282828 !important;\n border-color: rgba(68, 68, 68, .5) !important;\n color: #555 !important;\n }\n .blame-commit-next .blame-commit-info, .blame-commit-next + .blame-line,\n .ScreenshotCarousel-nav {\n box-shadow: inset 0 1px 0 #343434 !important;\n }\n /* semi-transparent */\n .context-loader.large-format-loader, #graphs .loader, .org-header,\n .illflow-item:not(.selected):hover, .orghead, .dropdown-toggle:hover,\n .dropdown-toggle.selected {\n background: rgba(20, 20, 20, .4) !important;\n }\n /* repo/page header */\n .page-responsive .repohead, .page-responsive .pagehead,\n .repohead.bg-gray-light, .pagehead.bg-gray-light, main > .bg-gray-light,\n .application-main > .bg-gray-light {\n background: rgba(20, 20, 20, .4) !important;\n }\n main > .bg-gray-light nav.bg-gray-light {\n background: none !important;\n }\n .explore-signup-entice-inner {\n background: rgba(20, 20, 20, .9) !important;\n }\n .starred-repo.navigation-focus, .marketing-section-stripe,\n .blob-expanded .blob-num, .blob-expanded .blob-code, .migration-section-grey {\n background: rgba(50, 50, 50, .5) !important;\n }\n .details-expanded-dark[open] > summary::before,\n .details-overlay-dark[open] > summary::before,\n body.status .details-overlay-dark[open] > summary::before,\n body[class=\"page-responsive\"] .details-overlay-dark[open] > summary::before,\n .SelectMenu::before {\n background: rgba(0, 0, 0, .5) !important;\n }\n .svg-tip {\n background: rgba(12, 12, 12, .8) !important;\n }\n .svg-tip::after {\n border-top-color: rgba(12, 12, 12, .9) !important;\n }\n .shelf {\n background-color: rgba(0, 0, 0, .2) !important;\n background-image: none !important;\n }\n /* page overlay */\n .select-menu-loading-overlay, .slow-loading-overlay,\n .branches .loading-overlay {\n background-color: rgba(24, 24, 24, .6) !important;\n }\n /* remove background */\n body > pre, .textographic a.repo, .stars-browser .filter-bar,\n .highlight .file-diff-line:hover pre, .gravatar, .topsearch span.search-input,\n p.meta, #facebox, .profilecols .filter-bar, .btn-group,\n div.content-header .search-form, .file-code, .org-header .edit-org:hover,\n #wrapper, .gravatar img, .commit-comments-header-sha, pre.headers code,\n .audit-search-form, .columns.equacols.bordered, .commits li img,\n a.minibutton code, .keyboard-mappings th, .api #header-wrapper .nav,\n .marketing-nav a.selected, #graph_data .tabs, .org-nav-item.selected,\n .edit-team-member:hover, tr.commit, .release-timeline .js-details-container,\n .section-heading-title a.js-selected-navigation-item,\n .featured-callout .screenshot, .timeline-commits .commit-meta .status,\n .theme-picker-spinner, .timeline-commits .commit-meta .octicon,\n .file .meta-divider, .avatar-stack.multiple-avatars::before, #feedHandler,\n .discussion-sidebar-item .thread-subscription-status,\n .boxed-group.application-show-group .logo-upload, .diagram-icon-small,\n #readme .highlight, .ace-github, .theme-picker, .avatar-stack .avatar,\n .boxed-group, .header .divider-vertical, .ace-github-base16,\n .markdown-body pre code, .markdown-body pre tt, #readme .plain pre,\n .uploaded-files, .input_area, #notebook .highlight, #notebook .highlight pre,\n .output_area pre, .delete-owners-button:hover, .avatar-child,\n .session-authentication .header-logged-out,\n .session-authentication .auth-form-header,\n .timeline-progressive-disclosure-items, #com #footer, .shade-gradient,\n #categories .list, .main-content, .showcase-page-header,\n .showcase-page-pattern::after, .description-inline, .result-group a,\n .border-wrap, a.feed-icon, .session-device,\n .boxed-group-list > li.session-device:hover,\n .merge-status-item .merge-status-icon, .project-columns, .project-header,\n .user-profile-nav, .profile-timeline-year-list.bg-white,\n .discussion-item-review .timeline-comment, .libraries-jumbotron,\n .bg-shade-gradient, .dev-hero,\n .render-container.is-render-ready.is-render-requested:not(.is-render-failed),\n .user-list li em, .api table, .dashboard-notice .coupon, .release-label,\n .oauth-org-access-details .oauth-org-item.on, .MarketplaceSideNav,\n .timeline-inline-comments, .AvatarStack-body, .team-discussions-container,\n .Collection ~ div[style*=\"linear-grad\"],\n .application-main > div[style*=\"background\"], .AvatarStack-body .avatar,\n .dropdown-toggle, ul.add-member-team-list.table-list, .gh-header,\n .enterprise-prompt, .enterprise-prompt *, .diffbar, .footer .bg-gray-light,\n .application-main [style*=\"background: linear-gradient(#ffffff, #fcfcfc)\"],\n section[style=\"background-color: #fafbfc;\"], div[style=\"background:#fafbfc;\"],\n .team-left-column, .render-container.js-actions-page,\n .deployments-timeline-icon, .TimelineItem--condensed .TimelineItem-badge,\n .notification-navigation, .check-annotation code pre,\n .merge-status-item > [style*=\"#fff\"], .pagehead, .pagehead nav {\n background: none !important;\n }\n @media (min-width: 1012px) {\n .file-commit-form--full {\n background: none !important;\n }\n }\n body[class=\"page-responsive\"] .repo-list .private {\n background-color: initial;\n }\n .TimelineItem-badge {\n border-color: var(--ghd-bg-color);\n }\n /* org page graphs - https://github.com/StylishThemes */\n rect[style*=\"#gradient-\"] {\n fill: /*[[base-color]]*/ !important;\n }\n /* contribution progress bars on user page */\n .contribution-activity-listing .progress-bar[style*=\"7bc96f\"],\n .facebox-close:hover {\n opacity: 1 !important;\n }\n .contribution-activity-listing .progress-bar[style*=\"c6e48b\"], .facebox-close {\n opacity: .75 !important;\n }\n .notifications .read .avatar img {\n opacity: .7;\n }\n /* contribution calendar */\n .contribution-activity-listing .progress-bar[style*=\"background-color\"] {\n background-color: /*[[base-color]]*/ !important;\n fill: /*[[base-color]]*/ !important;\n }\n .contrib-legend .legend li {\n box-shadow: none !important;\n }\n .contrib-legend [style*=\"#ebedf0\"], .calendar-graph [fill=\"#ebedf0\"] {\n background: var(--color-calendar-graph-day-bg) !important;\n fill: var(--color-calendar-graph-day-bg) !important;\n }\n .contrib-legend [style*=\"#9be9a8\"], .calendar-graph [fill=\"#9be9a8\"] {\n background: var(--color-calendar-graph-day-L1-bg) !important;\n fill: var(--color-calendar-graph-day-L1-bg) !important;\n }\n .contrib-legend [style*=\"#40c463\"], .calendar-graph [fill=\"#40c463\"] {\n background: var(--color-calendar-graph-day-L2-bg) !important;\n fill: var(--color-calendar-graph-day-L2-bg) !important;\n }\n .contrib-legend [style*=\"#30a14e\"], .calendar-graph [fill=\"#30a14e\"] {\n background: var(--color-calendar-graph-day-L3-bg) !important;\n fill: var(--color-calendar-graph-day-L3-bg) !important;\n }\n .contrib-legend [style*=\"#216e39\"], .calendar-graph [fill=\"#216e39\"] {\n background: var(--color-calendar-graph-day-L4-bg) !important;\n fill: var(--color-calendar-graph-day-L4-bg) !important;\n }\n .calendar-graph .days-selected rect.day.active {\n stroke: #ddd !important;\n }\n .calendar-graph rect.day:hover {\n stroke: #fff !important;\n }\n .calendar-graph rect.day {\n outline: none !important;\n }\n .contrib-person path {\n fill-opacity: .6;\n }\n .progress-bar.anim-grow-x, .dev-hero, .header-search-key-slash,\n input[src$=\"with-facebook.png\"], #parallax_field, #parallax_illustration,\n figure .callout-permalink-big-image, figure .callout-permalink-stacked-image {\n filter: brightness(75%) !important;\n }\n img#parallax_error_text, div img[alt*=\"404\"] {\n filter: invert(100%) hue-rotate(180deg) brightness(120%) !important;\n }\n img[src*=\"data:image/jpeg;base64,/9j/4AAQSkZJRgA\"] {\n filter: brightness(90%);\n }\n img[src*=\"//render.githubusercontent.com/render/math\"] {\n filter: invert(90%);\n background-color: transparent;\n }\n .header-search-key-slash {\n filter: grayscale(100%) contrast(1.5) !important;\n }\n /* Activity Overview on userpage */\n .activity-overview-axis, .activity-overview-point {\n stroke: /*[[base-color]]*/ !important;\n }\n #user-activity-overview .js-highlight-blob {\n stroke: /*[[base-color]]*/ !important;\n fill: /*[[base-color]]*/ !important;\n opacity: .4 !important;\n }\n /* invert (rgb) */\n #header .logo, img[src=\"/images/logo@2x.png\"], .site-logo a,\n .github-jobs-promotion a.jobs-logo strong, iframe[src*=\"polldaddy.com\"],\n .swipe .swipe-frame .swipe-bar .top-handle,\n .swipe .swipe-frame .swipe-bar .bottom-handle,\n .onion-skin .controls .transparent, .onion-skin .controls .opaque,\n .onion-skin .controls .slider .slider-track,\n .onion-skin .controls .slider .slider-track .dragger,\n img[src$=\"favicons.githubusercontent.com/github.com\"],\n img[src$=\"invertocat.png\"], .ghd-invert, #footer .github img,\n #com span.octicon:not(.octicon-comment-discussion),\n .developer-thanks-image img, img[alt=\"GitHub Support\"] {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n .code-navigation-banner .code-navigation-banner-illo {\n filter: invert(900%) hue-rotate(180deg) contrast(70%) brightness(110%) !important;\n }\n /* code coverage */\n /* example: https://github.com/go-gitea/gitea/pull/6969 */\n img[data-canonical-src^=\"https://codecov.io\"][alt=\"Impacted file tree graph\"] {\n filter: invert(92%) hue-rotate(180deg) saturate(250%) !important;\n }\n /* marketplace + help + feature img invert */\n img[src*=\"marketplace-illustration-01.svg\"],\n img[src*=\"marketplace-illustration-02.svg\"],\n svg [data-name=\"Layer 2\"] #Layer_5[data-name=\"Layer 5\"],\n .illoTeam svg [data-name=\"Layer 2\"], .illoIndiv #Layer_2[data-name=\"Layer 2\"],\n svg [data-name=\"Layer 2\"] g[data-name=\"octocat header\"],\n svg[viewBox=\"0 0 1461.5 677.84\"][width=\"700\"],\n .feature-preview-dialog svg[fill=\"none\"],\n div[data-url*=\"/notifications/beta\"] img[src*=\"-zero.svg\"],\n div[data-url*=\"/notifications/beta\"] img[src*=\"saved-blank.svg\"] {\n filter: invert(85%) hue-rotate(-180deg) brightness(125%) contrast(85%) !important;\n }\n .action-logo::after {\n filter: invert(100%) hue-rotate(180deg) brightness(350%) !important;\n }\n img[alt=\"FOSSA Status\"], img[data-canonical-src*=\"prod/timeseries/\"],\n a[href$=\"vote\"] img[data-canonical-src*=\"/poll/\"], #parallax_error_text:not(p),\n img[data-canonical-src*=\"img.shields.io\"][data-canonical-src*=\"style=social\"],\n img[alt=\"Mona Lisa\"] {\n filter: invert(90%) hue-rotate(180deg) !important;\n }\n /* prevent background color inverting to bright color on opaque images */\n /* example: social buttons on https://github.com/facebook/jest#readme */\n img[alt=\"FOSSA Status\"],\n img[data-canonical-src*=\"img.shields.io\"][data-canonical-src*=\"style=social\"] {\n background: none !important;\n }\n .container-xl[id] img {\n z-index: 100 !important;\n }\n /* GeoJSON maps */\n /* https://github.com/benbalter/dc-maps/blob/master/maps/embassies.geojson */\n /* https://github.com/colemanm/hurricanes/blob/master/fl_2004_hurricanes.geojson */\n .leaflet-tile-container img {\n filter: invert(100%) hue-rotate(180deg) brightness(150%) !important;\n }\n .leaflet-marker-pane img:not(.leaflet-marker-icon), .gundamcat {\n filter: brightness(.8) !important;\n }\n .leaflet-popup-content-wrapper, .map-legends, .map-tooltip {\n background: var(--color-bg-secondary);\n }\n .leaflet-container {\n color: var(--color-text-secondary);\n }\n .leaflet-popup-tip {\n border-top-color: var(--color-bg-secondary);\n }\n .marker-properties tr:nth-child(2n) th, .marker-properties tr:nth-child(2n) td {\n background-color: var(--color-bg-tertiary);\n }\n .marker-properties, .marker-properties th, .marker-properties td {\n border: 1px solid var(--color-border-primary);\n }\n /* invert #fff to #181818 */\n /* https://github.com/sujitpal/statlearning-notebooks/blob/master/src/chapter2.ipynb */\n .project-preview-img img, img[src$=\"bg-callout.svg\"],\n img[data-canonical-src*=\"saucelabs.com/browser-matrix\"],\n img[src*=\"images/modules/checks\"], img[src$=\"profile-first-pr.png\"],\n img[src$=\"profile-joined-github.png\"], img[src$=\"profile-first-repo.png\"],\n img[src$=\"profile-first-issue.png\"], .github-jobs-logo strong, .leaflet-bar,\n .leaflet-control-attribution {\n filter: invert(90.5%) hue-rotate(180deg) saturate(200%) !important;\n }\n /* workaround filter creating a stacking context */\n .contribution-first-issue, .contribution-first-pull-request,\n .contribution-first-repository {\n opacity: .999 !important;\n }\n /* brighten language colors */\n .language-color, .repo-language-color {\n filter: brightness(125%) !important;\n }\n /* soft badges */\n .box-title-count {\n background-color: #484848 !important;\n color: #ccc !important;\n }\n /* Unicorn page - https://github.com/azadkuh/sqlite-amalgamation/blame/master/sqlite3.c */\n body > .container > p {\n color: #ccc;\n }\n /* change foreground color of yellow boxes */\n .Toast--warning .Toast-icon {\n color: #222;\n }\n /* change forground color of disabled things */\n .btn-primary.disabled, .btn-primary:disabled,\n .btn-primary[aria-disabled=\"true\"], .btn.disabled, .btn:disabled,\n .btn[aria-disabled=\"true\"] {\n color: hsla(0, 0%, 100%, .3);\n }\n /* svg styling */\n line, rect, path {\n shape-rendering: geometricPrecision !important;\n }\n .js-graph-punchcard svg.viz {\n background: transparent !important;\n border: none !important;\n }\n .reorderable-task-lists .markdown-body .task-list-item .drag-handle {\n fill: #c0c0c0 !important;\n }\n /* Firefox: Exclude text inside an svg loaded through an img, as seen in svg badges */\n *:not(img) text, circle.day {\n fill: #ccc !important;\n }\n circle.day:hover {\n fill: #fff !important;\n }\n path.js-diff-placeholder {\n fill: #282828 !important;\n }\n .prose-diff .changed .added, .prose-diff .changed ins,\n .prose-diff .changed ins code, .prose-diff .changed ins pre {\n background: #002800;\n border-bottom: 1px solid #373;\n }\n #contributors-master svg.viz {\n display: block !important;\n }\n g.dots circle {\n stroke: #222 !important;\n }\n .traffic-graph g.axis:not(.views):not(.unique) g.tick:not(:nth-child(15)):not(:first-of-type) line,\n g.axis path, line.axis, svg:not(.vis) g.axis line {\n stroke: #444 !important;\n }\n svg .path:not(.total):not(.unique):not(.views) {\n stroke: #aaa !important;\n }\n .workflow-string--crossover svg path[stroke=\"#D1D5DA\"] {\n stroke: #404040 !important;\n }\n #commit-activity-detail path.path,\n .traffic-graph g.x.axis g.tick:first-of-type line {\n stroke: #1db34f !important;\n }\n [style*=\"stroke: #dbab09\"], [stroke=\"#dbab0a\"] {\n stroke: #cb4 !important;\n }\n .traffic-graph g.x.axis g.tick:nth-child(15) line {\n stroke: #1d7fb3 !important;\n }\n svg.tick {\n fill: #444 !important;\n }\n svg.arrow[stroke=\"#1277eb\"], svg path[stroke=\"#1074E7\"] {\n stroke: /*[[base-color]]*/ !important;\n }\n .features-branch-diagram path[stroke=\"#c6d9ed\"],\n .features-branch-diagram path[stroke=\"#4182C4\"],\n .features-branch-diagram div:not(.active) .mega-octicon {\n stroke: /*[[base-color]]*/ !important;\n color: /*[[base-color]]*/ !important;\n }\n .features-branch-diagram circle[fill=\"#4183c4\"],\n .repo-list-stats a.issues:hover svg {\n fill: /*[[base-color]]*/ !important;\n }\n .features-branch-diagram circle[stroke=\"#ffffff\"] {\n stroke: #222 !important;\n }\n rect.map-background, .audit-log-map {\n fill: #1e4062 !important;\n background: #1e4062 !important;\n }\n path.land {\n stroke: #17334f !important;\n }\n circle.audit-point {\n fill: #742d14 !important;\n stroke: #57210f !important;\n }\n .graphs .selection .selection {\n fill: #888 !important;\n stroke: #888 !important;\n }\n /* monochrome backgrounds */\n .label-select-menu div.labelstyle-000000.selected {\n background: #282828 !important;\n }\n div#common-issues ul li a:hover, .rss-subscribe:hover {\n background-color: #282828 !important;\n }\n .jumbotron-codelines {\n background-color: #222 !important;\n }\n .community-checklist .progress-bar .progress {\n background-color: #333;\n }\n .profile-timeline.discussion-timeline::before,\n .profile-timeline.discussion-timeline .profile-timeline-month-heading::after,\n div[style*=\"background-color: #eaecef\"] {\n background: #343434 !important;\n }\n .oauth-permissions-details .permission-summary em.highlight {\n background: rgba(68, 68, 68, .5);\n color: #c6c6c6;\n }\n .labels .label-neutral, li.ssh-key .ssh-key-state-indicator.not-recent {\n background: #666 !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/search?q=test&unscoped_q=test */\n .Counter--gray {\n background: #999;\n color: #000;\n }\n .diverge-widget .separator {\n background: #ccc !important;\n }\n .menu-item.selected::before {\n background: #eee !important;\n }\n .qr-code-table, .qr-code-table .white {\n background: #fff !important;\n }\n /* actions in issues - this style needs to be after .bubble */\n .action-bubble .bubble,\n /* https://github.com/StylishThemes/GitHub-Dark/community/license/new?branch=master&template=mit */\n body .CommunityTemplate-header,\n [data-url$=\"recently_touched_branches_list\"],\n .merge-status-list .status-actions:hover, body > .application-main > .bg-gray {\n background: transparent !important;\n }\n .btn-mktg {\n background-color: rgba(/*[[base-color-rgb]]*/, .8);\n border-color: /*[[base-color]]*/;\n }\n .btn-mktg:hover {\n background-color: rgba(/*[[base-color-rgb]]*/, 1);\n border-color: /*[[base-color]]*/;\n }\n .btn-outline-mktg {\n background-color: transparent;\n border-color: rgba(/*[[base-color-rgb]]*/, .9);\n color: rgba(/*[[base-color-rgb]]*/, .9);\n }\n .btn-outline-mktg:hover {\n background-color: transparent;\n border-color: rgba(/*[[base-color-rgb]]*/, 1);\n color: rgba(/*[[base-color-rgb]]*/, 1);\n }\n .MarketplaceAnnouncement .btn-outline-mktg {\n background-color: transparent;\n border-color: #eee;\n color: #eee;\n }\n .MarketplaceAnnouncement .btn-outline-mktg:hover {\n color: #fff;\n border-color: #fff;\n }\n .MarketplaceAnnouncement {\n color: #fff;\n }\n .full-commit p.commit-title {\n color: #c6c6c6;\n }\n .subnav-item.selected, .subnav-item[aria-current]:not([aria-current=false]),\n .subnav-item[aria-selected=true] {\n border-color: /*[[base-color]]*/;\n }\n /* blue box */\n .github-jobs-promotion p, .octotip, .bootcamp h1, .bootcamp-body,\n .owners-notice, .blob-history, .new-user-avatar-cta, .jstree-wholerow-clicked,\n .file-history-tease, .feature-banner, .hook-delivery-guid, .RecentBranches,\n .signup-prompt-bg, ul.search-results li .label,\n div[style*=\"background-color: #044d6e\"],\n body[class=\"page-responsive\"] .bg-blue-light,\n .timeline-comment.current-user .previewable-comment-form .comment-form-head.tabnav,\n .hx_commit-tease, .full-commit {\n background: #182030 !important;\n }\n .topic-tag-contrast, .topic-tag-contrast .delete-topic-link, .topic-tag {\n background: #182030;\n }\n .commit-ref, .branch-name {\n background: #182030;\n color: #9daccc;\n border: 1px solid #246;\n }\n aside [style*=\"background-color: #4764f1\"] .text-white {\n background-color: #182030 !important;\n }\n .repo-file-upload-progress .repo-file-upload-meter, .topic-tag-link:hover,\n .delete-topic-button:hover, .topic-tag-contrast .delete-topic-link:hover {\n background: #273045;\n }\n /* repo page last commit */\n .Box-header--blue, .repository-content .Box-header.position-relative {\n background-color: var(--color-bg-info);\n border-color: var(--color-box-blue-border);\n }\n /* commit page latest commit */\n .repository-content .Box-header.Details {\n background-color: var(--color-bg-info);\n }\n .repository-content .Box-header.Details,\n .repository-content .Box.d-flex.flex-column.flex-shrink-0.mb-3 {\n border-color: var(--color-box-blue-border);\n }\n .new-user-avatar-cta, .blob-history, .feature-banner,\n .recently-touched-branches, .recently-touched-branches li,\n .project-updated-message, .timeline-comment-label.collaborator-comment,\n .hook-delivery-guid .octicon, .hook-delivery-guid a, a.topic-tag,\n .RecentBranches, .RecentBranches-item-link, ul.search-results li .label,\n .markdown-format table th, div[style*=\"background-color: #044d6e\"],\n .subset-files-tab .stale-files-tab-link,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header .link-gray,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header .text-gray,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header .Link--secondary,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header-text code a,\n .timeline-comment.current-user:not(.is-internal) .color-text-secondary,\n .timeline-comment.current-user:not(.is-internal) .btn-link[aria-haspopup] {\n color: #9daccc !important;\n }\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-header,\n .timeline-comment.current-user:not(.is-internal) .timeline-comment-action,\n .commit-ref a, a.branch-name {\n color: #9daccc;\n }\n .RecentBranches-item, .commit-ref .user {\n color: #6d7c9c;\n }\n .github-jobs-promotion p, .octotip, .bootcamp .bootcamp-body, .bootcamp h1,\n .owners-notice, .new-user-avatar-cta, .file-history-tease, .feature-banner,\n .recently-touched-branches, .timeline-progressive-disclosure-items button,\n .RecentBranches, .js-tag-input-tag, ul.search-results li .label,\n .topic-tag-action {\n border: 1px solid #246 !important;\n }\n .repo-file-upload-progress, .project-updated-message,\n .topic-tag-action .add-topic-button, .topic-tag-action .remove-topic-button,\n .commit-desc + .commit-branches,\n .pricing-matrix-table .pricing-matrix-table-dark,\n .repository-content > .Box--condensed:not(#readme):not(.file-holder),\n .border-blue, body[class=\"page-responsive\"] .border-blue,\n .timeline-comment.current-user .tabnav-tab.selected, .hx_commit-tease,\n .full-commit {\n border-color: #246 !important;\n }\n .topic-tag-contrast .delete-topic-link, .full-commit,\n .full-commit .commit-meta {\n border-color: #246;\n }\n .blob-history, .recently-touched-branches li {\n border-bottom-color: #246 !important;\n }\n .blob-history, .file-history-tease .participation {\n border-top: 1px solid #246 !important;\n }\n #new_hook .fields {\n border-width: 0 !important;\n }\n .commit-icon .octicon {\n border-radius: 100% !important;\n }\n /* original colors */\n .discussion-item-integrations-callout .discussion-item-icon {\n background: #4095c6 !important;\n }\n /* notebooks */\n .input_prompt {\n color: hsla(234, 100%, 65%, 1) !important;\n }\n .output_prompt {\n color: hsla(0, 100%, 65%, 1) !important;\n }\n /* gradient */\n /* file drag&drop overlay */\n .repo-file-upload-tree-target {\n background: radial-gradient(ellipse at center, #000 0%, rgba(0, 0, 0, .6) 65%, rgba(0, 0, 0, .6) 100%) !important;\n }\n .TimelineItem-break {\n background: linear-gradient(to bottom, var(--color-bg-canvas) 30%, transparent 80%) !important;\n }\n /* light grey gradient */\n .signup-button:hover, a.signin:hover, .hero .textographic,\n .hero .screenographic, .box-action:active,\n .clone-url-button.selected > .clone-url-link:hover, ul#bootcamp li a:hover h4 {\n background: linear-gradient(#303030, #282828) !important;\n border-color: #484848 !important;\n }\n .clone-url-button > .clone-url-link {\n border-color: #383838;\n }\n .project-issue-body-blur {\n background: linear-gradient(to top, #181818, rgba(0, 0, 0, 0)) !important;\n }\n .bg-custom-gradient {\n background-image: linear-gradient(180deg, #1c1c1c, rgba(0, 0, 0, 0)) !important;\n }\n .billing-per-seat-callout::after {\n box-shadow: 1px -1px 0 0 #343434 !important;\n }\n main [style=\"background: linear-gradient(to top, rgba(255,255,255,1), rgba(255,255,255,0));\"] {\n background: linear-gradient(to top, #181818, transparent) !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1205 */\n [style*=\"background: #DBEDFF\"] {\n background: rgba(255, 255, 255, .1) !important;\n }\n .ScreenshotCarousel-navitem.selected {\n box-shadow: inset 0 0 10px rgba(255, 255, 255, .05) !important;\n }\n /* commits page - committer icon */\n .commits-list-item .committer-avatar {\n box-shadow: -2px -2px 0 rgba(0, 0, 0, .4) !important;\n }\n .Header .header-search-wrapper.focus {\n box-shadow: none !important;\n }\n .box-shadow {\n box-shadow: none !important;\n }\n /* box shadow below attach box - https://github.com/StylishThemes/GitHub-Dark/releases/new */\n /* + remove box shadowns on buttons and the like */\n .upload-progress, .social-count, .btn, .btn-outline.disabled,\n .btn-outline:disabled, .btn-outline[aria-disabled=\"true\"], .btn:active,\n .btn-blue:active {\n box-shadow: none;\n }\n /* https://github.com/team inline HTML fixes */\n .bg-white[style*=\"box-shadow: 0 0 20px 20px #ffffff\"] {\n box-shadow: 0 0 20px 20px #181818 !important;\n }\n [href=\"#organizations\"][style*=\"background-color: #fff\"] {\n background-color: transparent !important;\n }\n .Box-header[style*=\"background-color: #FFF3FA\"] {\n background-color: #222 !important;\n }\n .Box-header[style*=\"border-color: #F9B3DD\"] {\n border-color: #343434 !important;\n }\n .Header-link {\n color: #c6c6c6;\n }\n .full-commit div.commit-title {\n color: #c6c6c6;\n }\n .issues-reset-query-icon {\n color: #181818;\n background: #949494;\n }\n .donut-chart [style*=\"fill: none\"], .workflow-string svg,\n .workflow-success circle, .workflow-success path {\n fill: none !important;\n }\n /* Alerts and activity, remove background gradient */\n .metabox .editable-text:hover, #inbox .list .item .title span,\n .Subhead.border-bottom-0 {\n background-color: transparent !important;\n border: none !important;\n }\n /* Panels */\n #posts #rss, .signup-button, .hero h1, .plan.personal, .caption,\n .centered-graphic, .login_form h1 {\n background-color: /*[[base-color]]*/ !important;\n border-color: /*[[base-color]]*/ !important;\n }\n /* Red panel */\n .majorproblem .pageheader_wrap, .error_box, .btn-close-issue, .closed-issues,\n .topic-tag-action .remove-topic-button:hover,\n .menu-item-danger.navigation-focus, .menu-item-danger.selected:hover,\n .menu-item-danger.selected.navigation-focus {\n background-color: #d82828 !important;\n border-color: #383838 !important;\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=\"true\"] {\n background: #181818;\n color: rgba(216, 40, 40, .4);\n box-shadow: none;\n }\n .btn-close-issue:hover, .minibutton.danger:hover, .remove-topic-button:hover {\n background: #d82828;\n border-color: #b00;\n }\n .deprecation-banner {\n background: #200;\n border-color: #d82828;\n }\n .mergeable-dirty .bubble, .mergeable-dirty .merge-status-icon,\n .dangerzone > h3 {\n background: #d82828 !important;\n }\n .block-diff-deleted, .text-diff-deleted .block-diff-neutral {\n background: #b22 !important;\n }\n /* pink */\n /* https://github.com/StylishThemes/GitHub-Dark/issues/949 */\n /* Github uses !important inline styles on some of these elements which are\n impossible to overrides via userstyle */\n [style*=\"border-bottom: 1px solid #f9b3dd\"] {\n border-bottom: 1px solid #c49 !important;\n }\n [style*=\"border: 1px solid #f9b3dd\"], [style*=\"border: 1px solid #ec6cb9\"] {\n border: 1px solid #c49 !important;\n }\n [style*=\"border: 1px solid #f9b3dd\"] .text-gray-dark {\n color: #333 !important;\n }\n [style*=\"background: #ffeef8\"], [style*=\"background-color: #ffeef8\"] {\n background-color: #170711 !important;\n }\n /* brown */\n #feedHeaderContainer, .feedBackground, .infotip, .form-actions .tip,\n .mini-callout, .snippet em, #message .sent, .notification, .callout, .ejector,\n #issues_search .results em, .bootcamp-help ul li, .btn-download,\n .feature-tabs .tab-button, .plan.free, #message.minor, .chzn-results li em,\n #missing-readme, .page-notice, .facebox-alert, .deprecation-warning,\n .branch-status.status-pending .discussion-item-icon,\n .discussion-event-status-renamed .discussion-item-icon,\n .discussion-topic .branch-status.status-pending,\n .discussion-item-review.is-pending .file-header,\n .discussion-item-review.is-pending .comment-form-head.tabnav,\n .timeline-comment.unread-item .timeline-comment-header, .Label.bg-yellow,\n .code-list-item-private .blob-num {\n background-color: #261d08 !important;\n border-color: #542 !important;\n color: #ddd !important;\n }\n .discussion-item-review.is-pending .file, .timeline-comment.unread-item,\n .timeline-comment.unread-item .timeline-comment-label,\n .review-comment .pending-batched-suggestion-label,\n .is-pending .review-summary-form-wrapper, .code-list-item-private .file-box {\n border-color: #542 !important;\n }\n .timeline-comment-wrapper .timeline-comment.unread-item::before {\n border-right-color: #542 !important;\n }\n .timeline-comment-wrapper .timeline-comment.unread-item::after {\n border-right-color: #261d08 !important;\n }\n .timeline-comment-wrapper {\n border-top-color: transparent;\n border-bottom-color: transparent;\n }\n #toc .octicon-diff-modified, .secret .repo-label span, .api .s2 {\n color: #b74 !important;\n }\n .deprecation-warning a {\n color: #c97 !important;\n }\n .code-list-item-private .divider .blob-code,\n .code-list-item-private .divider .blob-num,\n .js-notification-search-autocomplete-results .bg-yellow-light,\n .card-filter-autocomplete-dropdown .bg-yellow-light {\n background-color: #261d08 !important;\n }\n /* semi-transparent brown */\n .compare-pr-placeholder, .compare-cutoff, .diff-cutoff,\n .markdown-body li.added.moved, .repo-private-label, .label-private,\n .signed-out-comment, .commits-list-item em, .unsupported-browser,\n .prereceive-feedback, .code-list em, .issue-list em, .user-list em,\n .wiki-list em, .blob-code .bg-yellow-light,\n .codesearch-results #code_search_results .bg-yellow-light {\n background: rgba(51, 34, 17, .4) !important;\n border: 1px solid #542 !important;\n color: #ddd !important;\n }\n .stale-files-tab {\n background-color: #261d08;\n border: 1px solid #542;\n }\n /* yellow text */\n /* inline style, note this does not work when color is not first */\n /* https://github.com/StylishThemes/GitHub-Dark/issues/952#issuecomment-501451675 */\n [style^=\"color: #d3ac3b\"] {\n color: #cb4 !important;\n }\n /* .bg-pending might be a GitHub bug as it sets the fg */\n .text-pending, .text-renamed, .bg-pending, .page-new-repo .octicon-lock,\n body[class=\"page-responsive\"] .repo-list .private .octicon-lock,\n .menu a .octicon.color-yellow-7 {\n color: #cb4;\n }\n .archived-project-cards-pane .project-card .archived-header {\n color: #fbca04;\n }\n /* yellow background */\n .Label--outline.bg-yellow-light,\n .review-comment .pending-batched-suggestion-label {\n background: #302808 !important;\n }\n .border-bottom.bg-yellow-light {\n background: #302808 !important;\n border-color: #542 !important;\n }\n /* green */\n /* labels */\n #forkqueue .legend .clean, #revisions ul li.current, .excerpt, .plan.business,\n .popout, #statusbar, .clean td, #download_button, .status-box.good a,\n .new-issues, .new-pulls, .mergeable-clean .merge-status-icon,\n .settings-email .default, .repo-owner-comment .comment-header-tag,\n .mergeable-clean .bubble, .gh-header-status.open,\n .branch-status.status-success .discussion-item-icon, .boxed-group-success,\n #message.good, .add-topic-button:hover,\n .topic-tag-action .add-topic-button:hover {\n background: #163 !important;\n border-color: #041 !important;\n }\n main .note.bg-green-light {\n background: #002800 !important;\n border-color: #060 !important;\n }\n /* Green border */\n .billing-confirmation-box {\n border-color: #083 !important;\n }\n .border.border-green {\n border-color: #060 !important;\n }\n /* Green text */\n /* inline style, note this does not work when color is not first */\n /* https://github.com/StylishThemes/GitHub-Dark/issues/952#issuecomment-501451675 */\n [style^=\"color: #28a745\"] {\n color: #6cc644 !important;\n }\n .text-open, .text-success, .insertions, .cadd, .gi .diff-line-num,\n .authors-and-code .insertions, ul.summary-stats li .octicon-git-branch-create,\n ul.summary-stats li .octicon-issue-opened, #toc .octicon-diff-added,\n .setup-info-module .features-list .octicon, .setup-form-container .secure,\n .highlight .gi, .type-icon-state-open, .release-label.latest a,\n .release .Label--latest a, .menu a .octicon.text-green {\n color: #6cc644 !important;\n }\n /* bright green background */\n .block-diff-added, .text-diff-added .block-diff-neutral {\n background: #6cc644 !important;\n }\n .noproblems .pageheader_wrap, a.new-repo:hover {\n background: #373 !important;\n }\n /* New additions */\n .repo-owner-tag .tag {\n background: #070 !important;\n color: #ddd !important;\n }\n /* orange */\n #user-links .unread_count, .minorproblem .pageheader_wrap {\n background: rgba(203, 108, 0, .8) !important;\n }\n .text-orange, .release-label.prerelease, .release .Label--prerelease {\n color: #f3582c !important;\n }\n .release-label.prerelease, .release .Label--prerelease {\n border-color: #f66a0a !important;\n }\n /* pjax loading */\n .pjax-loader-bar .progress {\n background: /*[[base-color]]*/ !important;\n box-shadow: 0 0 10px /*[[base-color]]*/ !important;\n }\n ul.view-modes-menu {\n background-image: url(\"data:image/gif;base64,R0lGODlhBwAEAIAAACIiIv///yH5BAEAAAEALAAAAAAHAAQAAAIIhA+BGWoNWSgAOw==\") !important;\n }\n .mini-icon-windows::before {\n background-position: -18px 0 !important;\n }\n /* Repo list (https://github.com/{user}?tab=repositories) */\n .repo-list-item p, .repo-list-item .repo-list-stats {\n position: relative !important;\n z-index: 1 !important;\n }\n /* GitHub Enterprise (GHE) stuff */\n body.enterprise .repohead.experiment-repo-nav {\n background: rgba(24, 24, 24, .4);\n }\n body.enterprise .timeline-comment-wrapper .timeline-comment.current-user::before {\n border-right-color: #246;\n }\n body.enterprise .timeline-comment-wrapper .timeline-comment.current-user::after {\n border-right-color: #182030;\n }\n body.enterprise .timeline-new-comment .timeline-comment::before {\n border-right-color: #404040;\n }\n body.enterprise .timeline-new-comment .timeline-comment::after {\n border-right-color: var(--ghd-bg-color);\n }\n body.enterprise .commit-tease {\n background-color: #182030;\n border-color: #246;\n }\n /* HACK: Fix review comment timeline */\n /* https://github.com/nodejs/node/pull/8519#r78637092 */\n .review-comment-contents::after, .review-comment.is-comment-editing::after {\n z-index: 0 !important;\n }\n .review-comment .avatar {\n position: relative !important;\n z-index: 1 !important;\n background: #181818 !important;\n box-shadow: 0 0 0 4px #181818 !important;\n }\n /* center the dot icon inside green discussion timeline icons */\n .discussion-item-reopened .discussion-item-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n }\n .flash-error {\n color: #d82828;\n }\n /* Make text selection work over file path separators because in Firefox */\n /* a text selection can not start over a pseudo element. The precise values */\n /* are to match the rendering of GitHub's single-space pseudo contents */\n .breadcrumb .separator {\n margin-left: .283em;\n margin-right: .283em;\n }\n .breadcrumb .separator::after, .breadcrumb .separator::before {\n content: none;\n }\n /* Hack to add a background to the sticky toolbar on the pr files tab when using unified diffs */\n body:not(.full-width) .pr-toolbar.is-stuck + .toolbar-shadow::before {\n content: \"\";\n position: absolute;\n top: -60px;\n left: 0;\n right: 0;\n height: 60px;\n background: #181818;\n box-shadow: 0 0 .75rem rgba(0, 0, 0, .7);\n }\n .gh-header-shadow {\n border: none !important;\n box-shadow: 0 0 .75rem rgba(0, 0, 0, .7) !important;\n }\n .participation-graph svg {\n background: transparent !important;\n opacity: .1 !important;\n z-index: 0 !important;\n }\n .inbox-zero-octocat, .network-graph-container, img.TenYears-hero {\n opacity: .6 !important;\n }\n .search .minibutton span {\n background-position: center -95px !important;\n }\n /* history expand buttons */\n .commit .minibutton.expander-minibutton span {\n background-position: 50% -45px !important;\n }\n .commit.open .minibutton.expander-minibutton span {\n background-position: 50% -145px !important;\n }\n /* pull request avatar bubble */\n .avatar-bubble::before, .discussion-bubble-content::before {\n border-color: transparent #333 transparent transparent !important;\n }\n /* octocat spinners */\n img[src*=\"octocat-spinner\"], img[src=\"/images/spinner.gif\"],\n .profile-picture-spinner {\n width: 0 !important;\n height: 0 !important;\n }\n img[src*=\"octocat-spinner\"], img[src=\"/images/spinner.gif\"], .facebox-loading,\n .branch-action-body .spinner, .status-indicator-loading,\n .ajax-pagination-form.loading .ajax-pagination-btn::after,\n .profile-picture-spinner, .more-repos-link.is-loading,\n auto-check .is-autocheck-loading {\n background-image: url('data:image/svg+xml;utf8,') !important;\n background-size: contain !important;\n background-repeat: no-repeat !important;\n background-position: 50% 50% !important;\n }\n .more-repos-link.is-loading {\n background-repeat: no-repeat !important;\n background-position: 50% 50% !important;\n background-size: 16px 16px !important;\n }\n auto-check .is-autocheck-loading {\n background-size: 16px 16px !important;\n background-position: 97% 50% !important;\n }\n /* Timeline Load More squiggly line */\n /* https://github.com/go-gitea/gitea/pull/8346#issuecomment-638578779 */\n /* https://github.com/swagger-api/swagger-ui/pull/6030#issuecomment-638412978 */\n .pagination-loader-container {\n background: transparent url(\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0NHB4IiBoZWlnaHQ9IjM0cHgiIHZpZXdCb3g9IjAgMCA0NCAzNCI+PHBvbHlsaW5lIGZpbGw9IiM0NDQiIHBvaW50cz0iMCwyMSAyMiw4IDQ0LDIxIDQ0LDI2IDIyLDEzIDAsMjYiLz48L3N2Zz4NCg==\") repeat-x left center/22px 17px !important;\n }\n img[src*=\"octocat-spinner\"][width=\"128\"] {\n padding: 64px !important;\n }\n img[src*=\"octocat-spinner\"][width=\"64\"],\n .profile-picture-spinner\n img[src=\"/images/spinner.gif\"] {\n padding: 32px !important;\n }\n img[src*=\"octocat-spinner\"][width=\"32\"] {\n padding: 16px !important;\n }\n img[src*=\"octocat-spinner\"][width=\"16\"] {\n padding: 8px !important;\n }\n .sponsors-questions::after {\n opacity: .35;\n }\n /* remove code view padding */\n .Box-body.blob-wrapper {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n /* remove actions editor padding */\n form[action*=\"/.github/workflows/\"] .commit-create {\n padding-top: 0 !important;\n }\n #searchfield {\n background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAMAAABFNRROAAAAM1BMVEUAAABKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkrmvr7+AAAAEXRSTlMAmEgOJpKQimpgRHVzVk8fFp8jXkwAAABRSURBVAjXVY1JDsAwCAMxhGxNl/+/toVEKpmLNcLCRJRqKTXRhOGwS4KyCCv8eoBnY1hkiIUgb6ah2THWly7SFS0uAKfZWm+mP59eUfNNgYdehjcBh7PIFcgAAAAASUVORK5CYII=\") !important;\n background-repeat: no-repeat !important;\n background-position: 8px center !important;\n }\n /* front page: 'more' spinner */\n .ajax-pagination-form.loading .ajax-pagination-btn {\n position: relative !important;\n border-color: #343434 !important;\n background: #181818 !important;\n }\n .ajax-pagination-form.loading .ajax-pagination-btn::after {\n content: \"\" !important;\n position: absolute !important;\n width: 16px !important;\n height: 16px !important;\n left: 50% !important;\n top: 50% !important;\n transform: translate(-50%, -50%) !important;\n }\n .branch-action-body .spinner, div.facebox-loading, .status-indicator-loading {\n background-position: center center !important;\n width: 100% !important;\n background-repeat: no-repeat !important;\n }\n /* dropdown arrows */\n /* https://github.com/account/upgrade */\n .form-select {\n background: #181818 url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAQAAAAua3X8AAAARklEQVR4AWNABWcazjQg8zGl/wNhA15piBL80gglmNKYSjClMZUgpDGVwKXxKBl4QNiRBLxJIKAIBzXhyCIc3YQTDMEkBwBplPJRxEMa4wAAAABJRU5ErkJggg==\") no-repeat right 8px center !important;\n background-size: 8px 10px !important;\n }\n .form-select:disabled {\n background-color: #282828 !important;\n color: #555 !important;\n }\n /* .coupon-form-body remove bg-img + tweak border color; issue #1199 */\n .coupons .coupon-form-body {\n background-image: none;\n border-color: #343434;\n }\n /* no border */\n .multiple-avatars, .multiple-avatars::before,\n .simple-conversation-list>li:first-child, .gobutton.with-comments .sha,\n .usage-bar dd, .setup-form-container .fieldgroup .fields,\n .inline-comments .line-comments, #adv_code_search .search-page-input,\n .fullscreen-overlay textarea, .file .image .border-wrap,\n .site-search .chromeless-input, .profile-timeline-card-wrapper,\n .AvatarStack--right .avatar, .AvatarStack-body .avatar,\n .sidebar-notifications .thread-subscription-status,\n .repository-lang-stats-graph .language-color:not(:first-child) {\n border: none !important;\n }\n .dashboard-tabs a {\n border-left: 0 !important;\n border-right: 0 !important;\n }\n .js-details-container.navigation-focus .gobutton {\n background: linear-gradient(#444, #222) !important;\n }\n /* add border */\n .issues-list, .pulls-list-group, .branch-infobar,\n .pagehead.repohead h1 .repo-label span, .api pre, .coupon-icon {\n border: 1px solid #484848;\n }\n #graph-shots li > p, .logo-box, .branch-infobar,\n .discussion-item-body .outdated-comment .file-header,\n .repository-content > .Box--condensed > .Box-body.bg-blue-light {\n border-bottom: none !important;\n }\n .pull-info, .branch-link, .milestone-list .progress-bar {\n border: 1px solid #444 !important;\n }\n .more-repos {\n border-top: #484848 1px solid !important;\n }\n .pull-head, .capped-box {\n border-bottom: #484848 1px solid !important;\n }\n .tutorial-e::after, .file-commit-form .commit-form::before,\n .merge-branch-form .commit-form::before {\n border-right-color: #343434 !important;\n border-bottom-color: transparent !important;\n }\n .ScreenshotCarousel-navitem,\n .new-discussion-timeline .composer .timeline-comment::after {\n border-right-color: var(--ghd-bg-color);\n }\n /* toc in markdown, reset border-collapse so border-radius works */\n /* https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki */\n #user-content-toc {\n border-collapse: separate !important;\n }\n #facebox pre, #contributors-master svg.viz, #com .dropdown-menu {\n border: 1px solid #343434 !important;\n }\n /* orange rss icon */\n .dashboard-feed-icon.octicon-rss, .nav-rss a .octicon-rss, .feed-icon,\n #dashboard .octicon-rss {\n color: #f93 !important;\n }\n .featured-label {\n background: #f5b987 !important;\n border: none !important;\n padding: 6px !important;\n color: #ed7c21 !important;\n }\n .featured-label .octicon,\n .page-new-repo div.form-checkbox .octicon-lock::before {\n color: #ed7c21 !important;\n }\n /* diff highlighting (no syntax highlight) */\n /* main diff text color */\n .diff-line-pre {\n color: #ccc !important;\n }\n .diff-table .line-comments {\n border-top: 1px solid #333 !important;\n border-bottom: 1px solid #333 !important;\n }\n #header-wrapper, .menu li + li {\n border-bottom: 1px solid #333 !important;\n }\n .comment-reactions button.btn-link.user-has-reacted {\n background-color: rgba(79, 140, 201, .2);\n }\n .review-comment .comment-reactions {\n border-top: 0 !important;\n }\n .review-comment .reaction-summary-item:not(.add-reaction-btn) {\n border-color: rgba(79, 140, 201, .2);\n }\n /* light grey - breaks in diff (with line numbers) */\n .highlight .expandable-line-num, .highlight .diff-line-num-hunk,\n .highlight .diff-line-code-hunk, .highlight .expandable-line-code {\n background: #222 !important;\n color: #888 !important;\n }\n /* git diff line additions (dark green) */\n .blob-code-addition {\n background-color: #002800 !important;\n border-color: #060 !important;\n }\n .blob-num-addition {\n background-color: #0a320a !important;\n }\n /* git diff line deletions (dark red) */\n .blob-code-deletion, .conflict-gutter-marker {\n background-color: #380000 !important;\n border-color: #600 !important;\n }\n .blob-num-deletion {\n background-color: #420a0a !important;\n }\n /* code splitter in diffs */\n .blob-num-expandable, .blob-num-hunk {\n background: #2b2b2b;\n }\n .blob-code-hunk {\n background: #202020;\n }\n /* link target lines */\n .blob-code-inner.highlighted {\n background: rgba(255, 255, 255, .075) !important;\n }\n .selected-line::after {\n mix-blend-mode: normal !important;\n pointer-events: none;\n }\n /* custom hover highlight */\n .diff-table > tbody > tr[data-hunk]:hover > td,\n .highlight > tbody > tr:hover > td {\n position: relative;\n }\n .diff-table > tbody > tr[data-hunk]:hover > td::after,\n .highlight > tbody > tr:hover > td::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n background: rgba(255, 255, 255, .075);\n pointer-events: none;\n }\n .diff-table > tbody > tr[data-hunk]:hover > td.selected-line::after,\n .highlight > tbody > tr:hover > td.blob-code-inner.highlighted::after {\n background: rgba(255, 255, 255, .15) !important;\n }\n /* custom hover highlight end */\n .blob-code-addition .x, .highlight .blob-code-addition .x {\n background: #252 !important;\n color: #eee !important;\n }\n .blob-code-deletion .x, .highlight .blob-code-deletion .x {\n background: #622 !important;\n color: #eee !important;\n }\n /* git diff line numbers (med green) */\n .gi .diff-line-num, .gi .diff-line-code, .gi .diff-line-pre {\n background: #020 !important;\n border-color: #040 !important;\n }\n /* git diff line deletions (med red) */\n .gd .diff-line-num, .highlight .err, .gd .diff-line-code, .gd .diff-line-pre {\n background: #300 !important;\n border-color: #500 !important;\n }\n textarea {\n cursor: auto !important;\n }\n /* rules for the new responsive layout */\n @media (min-width: 768px) {\n .release-main-section {\n border-left: 2px solid #343434 !important;\n }\n .release-entry {\n border-bottom: 0 !important;\n }\n }\n @media (max-width: 1012px) {\n .reponav-wrapper {\n background: #181818 !important;\n }\n }\n .Header, .Header-old {\n border-bottom: 1px solid #343434 !important;\n background: #181818 !important;\n }\n /* rules for help pages */\n .search-result-title .ais-Highlight-highlighted {\n color: #4f8cc9 !important;\n }\n .search-result-intro .ais-Highlight-highlighted {\n border-color: #4f8cc9 !important;\n }\n .ais-SearchBox-resetIcon, .octicon-logo-github {\n fill: #c0c0c0 !important;\n }\n /* Actions */\n .project-card code {\n background: #333 !important;\n }\n .commit-create .CodeMirror {\n padding-top: 0 !important;\n }", + "start": 194040, + "regexps": [ + "^https?://((education|graphql|guides|raw|resources|status|support|vscode-auth)\\.)?github\\.com((?!(/(sponsors|readme)$)).)*$" + ], + "domains": [ + "githubusercontent.com", + "www.githubstatus.com" + ] + }, + { + "code": "/*! GitHub: Twilight */:root{--ghd-code-background:#141414;--ghd-code-color:#ccc}.pl-c,.pl-c span{color:#5f5a60!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#cf6a4c!important}.pl-cos{color:#8f9d6a!important}.pl-e,.pl-ef,.pl-en{color:#ac885b!important}.pl-enc{color:#cf6a4c!important}.pl-enf,.pl-enm{color:#ac885b!important}.pl-ens{color:#cf6a4c!important}.pl-ent{color:#cda869!important}.pl-entc,.pl-enti{color:#ac885b!important}.pl-entm{color:#7587a6!important}.pl-eoa{color:#cda869!important}.pl-eoac,.pl-eoac .pl-pde{color:#7587a6!important}.pl-eoai,.pl-eoai .pl-pde{color:#cda869!important}.pl-eoi{color:#ac885b!important}.pl-k{color:#cf6a4c!important}.pl-ko,.pl-kolp{color:#cda869!important}.pl-kos,.pl-kou{color:#cf6a4c!important}.pl-mai .pl-sf{color:#7587a6!important}.pl-mb{color:#8f9d6a!important}.pl-mc{color:#cda869!important}.pl-mh,.pl-mh .pl-pdh{color:#cf6a4c!important}.pl-mi{color:#cda869!important}.pl-ml{color:#8f9d6a!important}.pl-mm{color:#7587a6!important}.pl-mp{color:#c5af75!important}.pl-mp1 .pl-sf{color:#dad085!important}.pl-mq{color:#cf6a4c!important}.pl-mr,.pl-ms{color:#cda869!important}.pl-pdb{color:#8f9d6a!important}.pl-pdc{color:#5f5a60!important}.pl-pdc1,.pl-pde{color:#cf6a4c!important}.pl-pdi{color:#cda869!important}.pl-pds{color:#8f9d6a!important}.pl-pdv{color:#7587a6!important}.pl-pse,.pl-pse .pl-s2{color:#cf6a4c!important}.pl-s{color:#f9ee98!important}.pl-s1,.pl-s2{color:#ccc!important}.pl-mp .pl-s3{color:#cda869!important}.pl-s3,.pl-sc{color:#dad085!important}.pl-scp{color:#cf6a4c!important}.pl-sf{color:#dad085!important}.pl-smc{color:#ac885b!important}.pl-smi,.pl-smp{color:#ccc!important}.pl-sok{color:#cda869!important}.pl-sol{color:#8f9d6a!important}.pl-som,.pl-sr{color:#7587a6!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#cda869!important}.pl-stj{color:#7587a6!important}.pl-stp,.pl-sv,.pl-v{color:#9b859d!important}.pl-vi{color:#cf6a4c!important}.pl-vo{color:#ac885b!important}.pl-vpf{color:#7587a6!important}.pl-mdht,.pl-mi1{background:#020!important;color:#55a532!important}.pl-md,.pl-mdhf{background:#200!important;color:#bd2c00!important}.pl-mdr{color:#cf6a4c!important}.pl-mdh,.pl-mdi{color:#7587a6!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#df5000!important;color:#fff!important}.pl-mo{color:#969896!important}.pl-mri{color:teal!important}.pl-ms1{background-color:#f5f5f5!important}.pl-va,.pl-vpu{color:teal!important}.pl-entl{color:#ccc!important}.highlight .pl-corl span.x,.pl-corl{color:#f9ee98!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#ac885b!important;color:#ccc!important}/*! Jupyter: Twilight */#notebook div.output_stderr{background:#420e09!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#141414!important;color:#ccc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {border:#b22518!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#5f5a60!important;font-style:italic!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#cda869!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#141414!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#5f5a60!important;font-style:italic!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#5f5a60!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#5f5a60!important;font-style:italic!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#5f5a60!important;font-style:italic!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {background:#420e09!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {background:#b22518!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:navy!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {background:#253b22!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:purple!important;font-weight:700!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#e9df8f!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#9b703f!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#f9ee98!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#cda869!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#9b859d!important;font-weight:700!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#9b859d!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#7587a6!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#cf6a4c!important;font-weight:700!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#9b703f!important;font-weight:700!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#9b859d!important;font-weight:700!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#cda869!important;font-weight:700!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#7587a6!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#a2f!important;font-weight:700!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#cf6a4c!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#cf6a4c!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#cf6a4c!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#cf6a4c!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#8f9d6a!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#8f9d6a!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#8f9d6a!important;font-style:italic!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#8f9d6a!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#f9ee98!important;font-weight:700!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#8f9d6a!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#daefa3!important;font-weight:700!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#8f9d6a!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#e9c062!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#8f9d6a!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#cf6a4c!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#0aa!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#7587a6!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#7587a6!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#7587a6!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#099!important}\n /* inline code - big blocks */\n .highlight {\n background-color: var(--ghd-code-background) !important;\n color: var(--ghd-code-color);\n }\n .markdown-format pre, .markdown-body pre, .highlight pre, .markdown-body pre,\n #facebox pre, .blob-expanded, .terminal, .copyable-terminal,\n #notebook .input_area, .blob-code-context, .markdown-format code, .api pre,\n .api li:not(a) code, .hook-delivery-details pre, .hook-delivery-container pre,\n .code-list .file-box, .highlight.bg-gray, .markdown-body table.highlight tr,\n .markdown-body table.highlight td {\n background-color: var(--ghd-code-background) !important;\n color: var(--ghd-code-color) !important;\n }\n .markdown-body pre code, .markdown-body pre tt {\n border: none !important;\n }\n .flash p code {\n background-color: inherit !important;\n }\n .blob-code, .blob-code-inner {\n color: var(--ghd-code-color) !important;\n }\n /* inline code*/\n .markdown-body code, .markdown-body tt {\n border-radius: 4px;\n }\n .markdown-body code::before, .markdown-body code::after,\n .markdown-body tt::before, .markdown-body tt::after,\n .markdown-body pre code::before, .markdown-body pre code::after,\n .markdown-body pre tt::before, .markdown-body pre tt::after {\n display: none !important;\n }\n /* GitHub Bug: Center color preview in inline code tags */\n .markdown-body code .v-align-middle {\n position: relative;\n top: -1px;\n }\n .markdown-body code, .markdown-body tt, .markdown-format p > code,\n .markdown-format pre, .markdown-body pre, .markdown-format .highlight pre,\n .markdown-body .highlight pre, #user-content-toc td, .copyable-terminal,\n .project-card .highlight pre, .project-card code, .rgh-parse-backticks,\n .protip code, .content dl code, .content ul code,\n .content .sectionbody .dlist dt, .content p > tt, .commit-sha,\n .commit-preview .message pre, .rendered_html pre, .rendered_html code, p code {\n border: 1px solid rgba(255, 255, 255, .1) !important;\n }", + "start": 314591, + "regexps": [ + "^https?://((education|gist|graphql|guides|raw|resources|status|support|vscode-auth)\\.)?github\\.com((?!(/(sponsors|readme)$)).)*$" + ], + "domains": [ + "githubusercontent.com", + "www.githubstatus.com" + ] + }, + { + "code": ".CodeMirror {\n background-color: var(--ghd-code-background) !important;\n color: var(--ghd-code-color) !important;\n }\n .CodeMirror-selected {\n background: rgba(255, 255, 255, .12) !important;\n }\n .CodeMirror ::selection {\n background: rgba(255, 255, 255, .12) !important;\n }\n .CodeMirror ::-moz-selection {\n background: rgba(255, 255, 255, .12) !important;\n }\n .CodeMirror-lines {\n background: none !important;\n }\n /* remove margin above codemirror */\n .file-header.mb-2 {\n margin-bottom: 0 !important;\n }\n .CodeMirror-linebackground.conflict-background,\n .conflict-background + .CodeMirror-gutter-wrapper .CodeMirror-linenumber {\n background-color: #380000 !important;\n border-color: #600 !important;\n }\n .CodeMirror-scrollbar-filler {\n background: #1d1d1d !important;\n }\n /* Styles auto-complete popups in the actions workflow editor */\n .CodeMirror-hints {\n background: #181818;\n border-color: #404040;\n box-shadow: 0 1px 5px #000;\n }\n .CodeMirror-hint {\n color: #d2d2d2;\n }\n .CodeMirror-hint-active {\n color: #f0f0f0;\n background-color: #4f8cc9;\n }\n .CodeMirror-hint-active .CodeMirror-hint-description {\n color: #f0f0f0 !important;\n }\n /*! CodeMirror: Twilight */.CodeMirror-gutters{background:#222!important;border-right:1px solid #484848!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#aaa!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.CodeMirror-activeline-background{background:#27282e!important}.CodeMirror-matchingbracket{color:#fff!important;outline:1px solid grey!important}.cm-keyword{color:#f9ee98!important}.cm-atom{color:#fc0!important}.cm-number{color:#ca7841!important}.cm-def{color:#8da6ce!important}.cm-variable-2,.cm-variable-3,span.cm-def,span.cm-tag{color:#607392!important}.cm-operator{color:#cda869!important}.cm-comment{color:#777!important;font-style:italic!important;font-weight:400!important}.cm-string{color:#8f9d6a!important}.cm-string-2{color:#bd6b18!important}.cm-meta{background-color:#141414!important;color:#f7f7f7!important}.cm-builtin{color:#cda869!important}.cm-tag{color:#997643!important}.cm-attribute{color:#d6bb6d!important}.cm-header{color:#ff6400!important}.cm-hr{color:#aeaeae!important}.cm-link{color:#ad9361!important;font-style:italic!important;text-decoration:none!important}.cm-error{border-bottom:1px solid red!important}", + "start": 324896, + "regexps": [ + "^https?://((education|gist|graphql|guides|raw|resources|status|support|vscode-auth)\\.)?github\\.com((?!(/(sponsors|readme)$)).)*$" + ], + "domains": [ + "githubusercontent.com", + "www.githubstatus.com" + ] + }, + { + "code": "/* begin refined-github rules */\n html.refined-github {\n --rgh-background: var(--color-canvas-default, var(--color-bg-canvas, #181818));\n }\n html.refined-github .footer > div:nth-last-child(2) a {\n color: var(--color-text-disabled, #9b9b9b);\n }\n @media (-webkit-min-device-pixel-ratio: 2) {\n html.refined-github .js-issue-row [aria-label=\"Open draft pull request\"] svg {\n stroke: var(--color-fg-muted, var(--color-text-secondary, #afafaf));\n }\n }\n html.refined-github .rgh-clean-dashboard .news .body .Box {\n background: none;\n }\n html.refined-github .rgh-no-navigation-highlight .Box-row.navigation-focus,\n html.refined-github .rgh-no-navigation-highlight .list-group-item.navigation-focus,\n html.refined-github .rgh-no-navigation-highlight .navigation-focus td {\n background: none !important;\n }\n html.refined-github .js-expandable-line:hover .blob-num:not(:hover) + .blob-code,\n html.refined-github .js-expandable-line:hover .blob-num:not(:hover) .directional-expander:first-child {\n color: var(--color-state-hover-primary-text, #181818);\n background: var(--color-state-hover-primary-bg, #4f8cc9);\n border-color: var(--color-state-hover-primary-border, #4f8cc9);\n }\n html.refined-github .rgh-private-org svg {\n fill: #c6c6c6;\n stroke: #181818;\n }\n html.refined-github .menu-item.selected.rgh-split-issue-pr-combined {\n background-color: initial;\n }\n html.refined-github .menu-item.selected.rgh-split-issue-pr-combined:hover {\n background-color: var(--color-menu-bg-active, #222);\n }\n html.refined-github .rgh-low-quality-comments-note {\n color: var(--color-fg-muted, var(--color-text-secondary, #afafaf));\n }\n html.refined-github .rgh-collaborator {\n border: 1px solid var(--color-border-default, var(--color-border-tertiary, #246));\n }\n html.refined-github [data-color-mode=\"light\"] .rgh-conflict-marker svg {\n color: #5a5a5a;\n }\n html.refined-github .rgh-clean-conversation-headers-non-default-branch {\n background-color: var(--color-state-hover-primary-bg, #4f8cc9);\n }\n html.refined-github .rgh-clean-conversation-headers-non-default-branch a {\n color: var(--color-state-hover-primary-text, #181818);\n }\n html.refined-github .rgh-table-input:hover .selected div {\n border-color: #4f8cc9;\n background-color: var(--color-diff-blob-hunk-num-bg, #182030);\n }\n /* end refined-github rules */\n /* begin zenhub rules */\n html[class*=\"zh-\"] #new_issue .discussion-sidebar h3 {\n border-top-color: #2c2c2c;\n }\n html[class*=\"zh-\"] .zh-estimate-create-item {\n border-top-color: #343434;\n }\n html[class*=\"zh-\"] .zh-topbar-item.UnderlineNav-item.selected {\n background: none;\n border-bottom-color: #fff;\n }\n html[class*=\"zh-\"] .zh-topbar-item.UnderlineNav-item .zh-icon-zenhub {\n background-image: none;\n }\n html[class*=\"zh-\"] .zh-board-menu-itemgroup .zh-select-menu-item.navigation-focus,\n html[class*=\"zh-\"] .zh-board-menu-itemgroup .zh-select-menu-item.navigation-focus.selected {\n background-color: #242424;\n }\n html[class*=\"zh-\"] .zh-connect-repository-container {\n background-color: #222;\n }\n html[class*=\"zh-\"] .zh-connect-repository-container a {\n color: #c6c6c6;\n text-shadow: 0 1px 0 #181818;\n }\n html[class*=\"zh-\"] .zh-toggle-button {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-toggle-button.selected:active,\n html[class*=\"zh-\"] .zh-toggle-button:active {\n -webkit-box-shadow: inset 0 1px 3px rgba(255, 255, 255, .7);\n box-shadow: inset 0 1px 3px rgba(255, 255, 255, .7);\n }\n html[class*=\"zh-\"] .horizontal-scrollbar::-webkit-scrollbar-track {\n background-color: #242424;\n }\n html[class*=\"zh-\"] .horizontal-scrollbar::-webkit-scrollbar-thumb {\n background-color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline {\n background-color: #222;\n border-color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline-heading-container {\n background-color: #242424;\n border-bottom-color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline-heading-edit {\n box-shadow: none !important;\n }\n html[class*=\"zh-\"] .zh-pipeline-options .zh-pipeline-button:focus {\n outline: 0 none #f0f0f0;\n }\n html[class*=\"zh-\"] .zh-power .zh-pipeline-options {\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] .zh-pipeline-issues::-webkit-scrollbar {\n background-color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline-issues::-webkit-scrollbar-track {\n background-color: #222;\n }\n html[class*=\"zh-\"] .zh-pipeline-issues::-webkit-scrollbar-thumb {\n background-color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline-issue {\n background-color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline-issue-content {\n border-color: #343434;\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-pipeline-issue-toggler {\n color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline-issue-toggler:hover {\n color: #4f8cc9 !important;\n }\n html[class*=\"zh-\"] .zh-pipeline-issue-heading {\n border-bottom-color: #202020;\n }\n html[class*=\"zh-\"] .zh-issue-placeholder,\n html[class*=\"zh-\"] .zh-pipeline-placeholder {\n background-color: #202020;\n }\n html[class*=\"zh-\"] .zh-issue-meta {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zh-issue-label.dark {\n color: #fff;\n text-shadow: 0 1px 0 rgba(255, 255, 255, .7);\n }\n html[class*=\"zh-\"] .zh-issue-estimate-badge {\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-overlay {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-overlay-body {\n color: #f0f0f0;\n }\n html[class*=\"zh-\"] .new-pipeline-column {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-board-menu-item .btn {\n background: -webkit-linear-gradient(#1d1d1d, #2c2c2c);\n background: -moz-linear-gradient(#1d1d1d, #2c2c2c);\n background: -o-linear-gradient(#1d1d1d, #2c2c2c);\n background: linear-gradient(#1d1d1d, #2c2c2c);\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] .zh-board-menu-item .btn.disabled,\n html[class*=\"zh-\"] .zh-board-menu-item .btn.disabled:hover {\n background-color: #181818;\n background-image: none;\n }\n html[class*=\"zh-\"] .zh-pipeline-collapsed .zh-pipeline-heading-container {\n border-right-color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline-collapsed .zh-pipeline-options.zh-pipeline-icon {\n border-bottom-color: #343434;\n }\n html[class*=\"zh-\"] .zh-pipeline-expanded .zh-issue-meta {\n background-image: -webkit-linear-gradient(left, transparent 90%, #181818 99%);\n background-image: -moz-linear-gradient(left, transparent 90%, #181818 99%);\n background-image: -o-linear-gradient(left, transparent 90%, #181818 99%);\n background-image: linear-gradient(to right, transparent 90%, #181818 99%);\n }\n html[class*=\"zh-\"] .zh-overlay-loading-board {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-board-loading-message {\n background-color: #181818;\n border-color: #343434;\n }\n html[class*=\"zh-\"] .zh-board-readonly-banner {\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-markdown-body {\n color: #767676;\n }\n html[class*=\"zh-\"] .zh-milestone-dates {\n border-color: #343434;\n background-color: #202020;\n }\n html[class*=\"zh-\"] .zh-milestone-dates .milestone-start-calendar-container {\n border-color: #343434;\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-burndown-chart-container {\n border-left-color: #343434;\n border-right-color: #343434;\n }\n html[class*=\"zh-\"] .burndown-chart-tip {\n color: #9b9b9b;\n }\n html[class*=\"zh-\"] .zh-reports .stats-container {\n border-color: #343434;\n }\n html[class*=\"zh-\"] .zh-reports .stats-item {\n border-right-color: #343434;\n }\n html[class*=\"zh-\"] .zh-reports .stats-item--issues .zh-estimate-badge {\n background-color: #767676;\n border-color: #767676;\n }\n html[class*=\"zh-\"] .zh-reports .stats-item--issues .zh-estimate-badge-closed {\n color: #767676;\n border-color: #767676;\n }\n html[class*=\"zh-\"] .zh-reports .stats-item--issues strong,\n html[class*=\"zh-\"] .zh-reports .stats-label {\n color: #767676;\n }\n html[class*=\"zh-\"] .zh-issue-list .table-list-title {\n border-color: #343434;\n }\n html[class*=\"zh-\"] .zh-issue-list .table-list-header {\n color: #9b9b9b;\n }\n html[class*=\"zh-\"] .zh-burndown-repo-selector {\n border-color: #343434;\n }\n html[class*=\"zh-\"] .zh-reports .btn {\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] .zh-reports .btn:hover {\n background: -webkit-linear-gradient(#2c2c2c, #343434);\n background: -moz-linear-gradient(#2c2c2c, #343434);\n background: -o-linear-gradient(#2c2c2c, #343434);\n background: linear-gradient(#2c2c2c, #343434);\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] .horizonal-grid-line {\n stroke: #2c2c2c;\n }\n html[class*=\"zh-\"] .zh-repo-switcher .zh-repo-switcher-btn,\n html[class*=\"zh-\"] .zh-repo-switcher .zh-repo-switcher-btn:hover {\n background-color: transparent;\n background-image: none;\n }\n html[class*=\"zh-\"] .zh-repo-switcher .zh-repo-switcher-btn.selected,\n html[class*=\"zh-\"] .zh-repo-switcher .zh-repo-switcher-btn:hover {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zh-state {\n background-color: #767676;\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-timeline-comment {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-timeline-comment-header {\n color: #afafaf;\n background-color: #202020;\n border-color: #343434 #343434 #2c2c2c;\n }\n html[class*=\"zh-\"] .zh-timeline-comment-header-text {\n color: #afafaf;\n }\n html[class*=\"zh-\"] .zh-collapse-manager-container--isExpanded .discussion-item:last-child {\n border-bottom-color: #343434;\n }\n html[class*=\"zh-\"] .zh-collapse-control-container {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zh-collapse-control {\n color: #5560d2;\n }\n html[class*=\"zh-\"] .zh-collapse-control:hover,\n html[class*=\"zh-\"] .zh-collapse-control__main-icon {\n border-color: #343434;\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-collapse-control__second-text {\n color: #767676;\n }\n html[class*=\"zh-\"] .zh-issuecard-container {\n border-color: #343434;\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-issuecard-placeholder {\n background-color: #202020;\n }\n html[class*=\"zh-\"] .zh-issuecard-avatar-container .zh-issuecard-assignees {\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-pipeline-action,\n html[class*=\"zh-\"] .zh-pipeline-issue-action {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-pipeline-action:hover,\n html[class*=\"zh-\"] .zh-pipeline-issue-action:hover {\n background-color: #2c2c2c;\n }\n html[class*=\"zh-\"] .zh-issuecard-meta {\n border-top-color: #343434;\n }\n html[class*=\"zh-\"] .zh-issuecard-label.dark {\n color: #fff;\n text-shadow: 0 1px 0 rgba(255, 255, 255, .7);\n }\n html[class*=\"zh-\"] .zh-top-banner, html[class*=\"zh-\"] .zh-top-banner a {\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-merge-repository-body {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zh-merge-repository-body .zh-open-cross-organization-btn {\n color: #767676;\n }\n html[class*=\"zh-\"] .zh-merge-repository-body .zh-open-cross-organization-btn:hover {\n color: #4f8cc9 !important;\n }\n html[class*=\"zh-\"] .zh-mergetool-pipelines-dialog {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-mergetool-pipelines-dialog .zh-mergetool-info {\n background-color: #222;\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] .zh-mergetool-pipelines-dialog .zh-miniboard-wrapper .zh-miniboard-pipeline {\n background-color: #181818;\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] .zh-mergetool-pipelines-dialog .zh-miniboard-wrapper .zh-miniboard-pipeline-target {\n background-color: #222;\n }\n html[class*=\"zh-\"] .zh-mergetool-pipelines-dialog .zh-miniboard-source-pipeline-placeholder,\n html[class*=\"zh-\"] .zh-mergetool-pipelines-dialog .zh-miniboard-wrapper .zh-miniboard-pipeline-target.zh-miniboard-new-pipeline {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .btn.zh-multi-repo-show-all-btn,\n html[class*=\"zh-\"] .btn.zh-multi-repo-show-one-btn {\n background-image: none;\n }\n html[class*=\"zh-\"] .btn.zh-multi-repo-show-all-btn:hover,\n html[class*=\"zh-\"] .btn.zh-multi-repo-show-one-btn:hover {\n background-color: #181818;\n background-image: none;\n }\n html[class*=\"zh-\"] .zhe .zh-onboarding-highlighted {\n background-color: #181818 !important;\n }\n html[class*=\"zh-\"] .zhe .zh-onboarding-highlighted .header-nav-link {\n color: #f0f0f0;\n }\n html[class*=\"zh-\"] .zh-onboarding-modal {\n background-color: #181818;\n color: #9b9b9b;\n }\n html[class*=\"zh-\"] .zh-onboarding-modal__title {\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] .zh-onboarding-modal__buttons .btn.btn--onboarding-cta {\n background-image: none;\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-select-menu-item.navigation-focus,\n html[class*=\"zh-\"] .zh-select-menu-item:hover {\n background-color: #4f8cc9;\n }\n html[class*=\"zh-\"] .zh-discussion-sidebar-toggle {\n background: none;\n }\n html[class*=\"zh-\"] .gh-2019-ui .zh-discussion-sidebar-toggle .zhc-svg-icon--gear-github {\n color: #767676;\n }\n html[class*=\"zh-\"] .zh-reload-update-prompt-container {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-reload-update-prompt-content {\n color: #afafaf;\n }\n html[class*=\"zh-\"] .zh-issue-counter {\n background-color: #343434;\n }\n html[class*=\"zh-\"] .zh-progress-bar__background.zh-progress-bar__background--secondary {\n background-color: #767676;\n }\n html[class*=\"zh-\"] .zh-progress-bar__completed {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zh-chart .marker {\n stroke: #181818;\n }\n html[class*=\"zh-\"] .zh-tooltip {\n background-color: #f0f0f0;\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-tooltip-filter-n::before {\n border-top-color: #f0f0f0;\n }\n html[class*=\"zh-\"] .zh-tooltip-help-w::before {\n border-right-color: #f0f0f0;\n }\n html[class*=\"zh-\"] .zh-d3-tooltip .zh-tooltip-content {\n background-color: #c6c6c6;\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-d3-tooltip .zh-tooltip-triangle {\n border-top-color: #c6c6c6;\n }\n html[class*=\"zh-\"] .PresetDateRangePicker_button__selected {\n color: #fff;\n }\n html[class*=\"zh-\"] .SingleDatePicker_picker,\n html[class*=\"zh-\"] .SingleDatePicker_picker__fullScreenPortal,\n html[class*=\"zh-\"] .SingleDatePickerInput {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .DayPickerKeyboardShortcuts_showSpan {\n color: #fff;\n }\n html[class*=\"zh-\"] .DayPickerKeyboardShortcuts_panel {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .CalendarDay__default {\n color: #afafaf;\n background-color: #181818;\n }\n html[class*=\"zh-\"] .CalendarDay__hovered_offset {\n background-color: #242424;\n }\n html[class*=\"zh-\"] .CalendarDay__outside {\n background-color: #181818;\n color: #afafaf;\n }\n html[class*=\"zh-\"] .CalendarDay__blocked_minimum_nights,\n html[class*=\"zh-\"] .CalendarDay__blocked_minimum_nights:active,\n html[class*=\"zh-\"] .CalendarDay__blocked_minimum_nights:hover {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .CalendarDay__highlighted_calendar,\n html[class*=\"zh-\"] .CalendarDay__highlighted_calendar:active,\n html[class*=\"zh-\"] .CalendarDay__highlighted_calendar:hover {\n color: #afafaf;\n }\n html[class*=\"zh-\"] .CalendarDay__selected,\n html[class*=\"zh-\"] .CalendarDay__selected:active,\n html[class*=\"zh-\"] .CalendarDay__selected:hover,\n html[class*=\"zh-\"] .CalendarDay__selected_span,\n html[class*=\"zh-\"] .CalendarDay__selected_span:active,\n html[class*=\"zh-\"] .CalendarDay__selected_span:hover {\n color: #fff;\n }\n html[class*=\"zh-\"] .CalendarDay__blocked_out_of_range,\n html[class*=\"zh-\"] .CalendarDay__blocked_out_of_range:active,\n html[class*=\"zh-\"] .CalendarDay__blocked_out_of_range:hover,\n html[class*=\"zh-\"] .CalendarMonth {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .CalendarMonth_caption {\n color: #afafaf;\n }\n html[class*=\"zh-\"] .CalendarMonthGrid,\n html[class*=\"zh-\"] .DayPickerNavigation_button__default,\n html[class*=\"zh-\"] .DayPickerNavigation_button__verticalDefault {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .DayPickerNavigation_svg__vertical {\n fill: #afafaf;\n }\n html[class*=\"zh-\"] .DayPicker, html[class*=\"zh-\"] .DayPicker__horizontal {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .DayPicker_portal__horizontal {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .DateInput,\n html[class*=\"zh-\"] .DayPicker_weekHeader__verticalScrollable {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .DateInput_input {\n color: #afafaf;\n background-color: #181818;\n }\n html[class*=\"zh-\"] .DateInput_input__focused {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .DateInput_fangShape {\n fill: #181818;\n }\n html[class*=\"zh-\"] .DateRangePickerInput {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .DateRangePickerInput_arrow {\n color: #afafaf;\n }\n html[class*=\"zh-\"] .DateRangePickerInput_arrow_svg {\n fill: #afafaf;\n }\n html[class*=\"zh-\"] .DateRangePicker_picker,\n html[class*=\"zh-\"] .DateRangePicker_picker__fullScreenPortal {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zhc-btn--danger {\n background-image: none !important;\n }\n html[class*=\"zh-\"] .zhc-btn--danger-bordered {\n background-color: transparent;\n background-image: none !important;\n }\n html[class*=\"zh-\"] .zhc-btn--danger-bordered.zhc-btn--is-active,\n html[class*=\"zh-\"] .zhc-btn--danger-bordered.zhc-btn--is-disabled,\n html[class*=\"zh-\"] .zhc-btn--danger-bordered:active,\n html[class*=\"zh-\"] .zhc-btn--danger-bordered:focus,\n html[class*=\"zh-\"] .zhc-btn--danger-bordered:hover,\n html[class*=\"zh-\"] .zhc-btn--danger-bordered[disabled] {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-btn--minimal {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-btn--minimal.zhc-btn--disabled,\n html[class*=\"zh-\"] .zhc-btn--minimal.zhc-btn--disabled.zhc-btn--is-active,\n html[class*=\"zh-\"] .zhc-btn--minimal.zhc-btn--disabled:active,\n html[class*=\"zh-\"] .zhc-btn--minimal.zhc-btn--disabled:focus,\n html[class*=\"zh-\"] .zhc-btn--minimal.zhc-btn--disabled:hover,\n html[class*=\"zh-\"] .zhc-btn--minimal.zhc-btn--is-active,\n html[class*=\"zh-\"] .zhc-btn--minimal:active,\n html[class*=\"zh-\"] .zhc-btn--minimal:focus,\n html[class*=\"zh-\"] .zhc-btn--minimal:hover,\n html[class*=\"zh-\"] .zhc-btn--minimal[disabled],\n html[class*=\"zh-\"] .zhc-btn--minimal[disabled].zhc-btn--is-active,\n html[class*=\"zh-\"] .zhc-btn--minimal[disabled]:active,\n html[class*=\"zh-\"] .zhc-btn--minimal[disabled]:focus,\n html[class*=\"zh-\"] .zhc-btn--minimal[disabled]:hover,\n html[class*=\"zh-\"] .zhc-btn--primary-bordered,\n html[class*=\"zh-\"] .zhc-btn--primary-bordered.zhc-btn--is-active,\n html[class*=\"zh-\"] .zhc-btn--primary-bordered:active,\n html[class*=\"zh-\"] .zhc-btn--primary-bordered:focus,\n html[class*=\"zh-\"] .zhc-btn--primary-bordered:hover,\n html[class*=\"zh-\"] .zhc-btn--secondary-bordered,\n html[class*=\"zh-\"] .zhc-btn--secondary-bordered.zhc-btn--is-active,\n html[class*=\"zh-\"] .zhc-btn--secondary-bordered:active,\n html[class*=\"zh-\"] .zhc-btn--secondary-bordered:focus,\n html[class*=\"zh-\"] .zhc-btn--secondary-bordered:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-btn--text {\n background-color: transparent !important;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-input--error:focus,\n html[class*=\"zh-\"] .zhu-checkbox:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhu-text-grey-dark {\n color: #767676 !important;\n }\n html[class*=\"zh-\"] .zhc-billing-invoice__content__title {\n border-bottom-color: #f0f0f0;\n }\n html[class*=\"zh-\"] .zhc-remove-licenses__quantity {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-board-loading__message {\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n html[class*=\"zh-\"] .zhc-board-loading__message .zhc-spinner-outline {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-breadcrumbs--extension-topbar .zhc-breadcrumbs__button.zhc-breadcrumbs__button--untitled-workspace:hover,\n html[class*=\"zh-\"] .zhc-breadcrumbs--workspace-phase-3-off.zhc-breadcrumbs--extension-topbar .zhc-breadcrumbs__button:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-burndown-chart__placeholder__message {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-button[disabled],\n html[class*=\"zh-\"] .zhc-button[disabled]:active,\n html[class*=\"zh-\"] .zhc-button[disabled]:focus,\n html[class*=\"zh-\"] .zhc-button[disabled]:hover {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-text {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-text:active,\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-text:focus,\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-text:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-icon-only {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-icon-only:active,\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-icon-only:focus,\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-icon-only:hover,\n html[class*=\"zh-\"] .zhc-button.zhc-button--variant-icon-only[disabled] {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-button--color-primary[disabled],\n html[class*=\"zh-\"] .zhc-button--color-primary[disabled]:active,\n html[class*=\"zh-\"] .zhc-button--color-primary[disabled]:focus,\n html[class*=\"zh-\"] .zhc-button--color-primary[disabled]:hover {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button--color-primary.zhc-button--variant-text {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button--color-primary.zhc-button--variant-outlined,\n html[class*=\"zh-\"] .zhc-button--color-primary.zhc-button--variant-outlined:active,\n html[class*=\"zh-\"] .zhc-button--color-primary.zhc-button--variant-outlined:focus,\n html[class*=\"zh-\"] .zhc-button--color-primary.zhc-button--variant-outlined:hover,\n html[class*=\"zh-\"] .zhc-button--color-primary.zhc-button--variant-text:active,\n html[class*=\"zh-\"] .zhc-button--color-primary.zhc-button--variant-text:focus,\n html[class*=\"zh-\"] .zhc-button--color-primary.zhc-button--variant-text:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-button--color-secondary[disabled],\n html[class*=\"zh-\"] .zhc-button--color-secondary[disabled]:active,\n html[class*=\"zh-\"] .zhc-button--color-secondary[disabled]:focus,\n html[class*=\"zh-\"] .zhc-button--color-secondary[disabled]:hover {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button--color-secondary.zhc-button--variant-text {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button--color-secondary.zhc-button--variant-outlined,\n html[class*=\"zh-\"] .zhc-button--color-secondary.zhc-button--variant-outlined:active,\n html[class*=\"zh-\"] .zhc-button--color-secondary.zhc-button--variant-outlined:focus,\n html[class*=\"zh-\"] .zhc-button--color-secondary.zhc-button--variant-outlined:hover,\n html[class*=\"zh-\"] .zhc-button--color-secondary.zhc-button--variant-text:active,\n html[class*=\"zh-\"] .zhc-button--color-secondary.zhc-button--variant-text:focus,\n html[class*=\"zh-\"] .zhc-button--color-secondary.zhc-button--variant-text:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-button--color-action[disabled],\n html[class*=\"zh-\"] .zhc-button--color-action[disabled]:active,\n html[class*=\"zh-\"] .zhc-button--color-action[disabled]:focus,\n html[class*=\"zh-\"] .zhc-button--color-action[disabled]:hover {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button--color-action.zhc-button--variant-text {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button--color-action.zhc-button--variant-outlined,\n html[class*=\"zh-\"] .zhc-button--color-action.zhc-button--variant-outlined:active,\n html[class*=\"zh-\"] .zhc-button--color-action.zhc-button--variant-outlined:focus,\n html[class*=\"zh-\"] .zhc-button--color-action.zhc-button--variant-outlined:hover,\n html[class*=\"zh-\"] .zhc-button--color-action.zhc-button--variant-text:active,\n html[class*=\"zh-\"] .zhc-button--color-action.zhc-button--variant-text:focus,\n html[class*=\"zh-\"] .zhc-button--color-action.zhc-button--variant-text:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-button--color-danger[disabled],\n html[class*=\"zh-\"] .zhc-button--color-danger[disabled]:active,\n html[class*=\"zh-\"] .zhc-button--color-danger[disabled]:focus,\n html[class*=\"zh-\"] .zhc-button--color-danger[disabled]:hover {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button--color-danger.zhc-button--variant-text {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-button--color-danger.zhc-button--variant-outlined,\n html[class*=\"zh-\"] .zhc-button--color-danger.zhc-button--variant-outlined:active,\n html[class*=\"zh-\"] .zhc-button--color-danger.zhc-button--variant-outlined:focus,\n html[class*=\"zh-\"] .zhc-button--color-danger.zhc-button--variant-outlined:hover,\n html[class*=\"zh-\"] .zhc-button--color-danger.zhc-button--variant-text:active,\n html[class*=\"zh-\"] .zhc-button--color-danger.zhc-button--variant-text:focus,\n html[class*=\"zh-\"] .zhc-button--color-danger.zhc-button--variant-text:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-button--spinner,\n html[class*=\"zh-\"] .zhc-button-group > *,\n html[class*=\"zh-\"] .zhc-calendar.zhc-popover .DateRangePicker .DateRangePicker_picker .DayPicker.DayPicker__horizontal {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-chart-legend .zhc-dropdown .zhc-selection-button {\n box-shadow: none;\n background-image: none;\n }\n html[class*=\"zh-\"] .zhc-release-report-chart__completion .zhc-chart-linechart__path {\n stroke: #c6c6c6;\n }\n html[class*=\"zh-\"] .zhc-checkable {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-checkbox-custom input:focus {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-checkout-box__input input:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-collapsible-control--button {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-consent-form__checkbox input:focus {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .DateInput,\n html[class*=\"zh-\"] .DateInput .DateInput_input {\n background: none;\n }\n html[class*=\"zh-\"] .DayPickerNavigation_button__horizontalDefault .DayPickerNavigation_svg__horizontal {\n fill: #c6c6c6;\n stroke: #c6c6c6;\n }\n html[class*=\"zh-\"] .zhc-date-selector .DayPicker,\n html[class*=\"zh-\"] .zhc-date-selector .DayPicker--horizontal {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-dropdown__clear-filter {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-dropdown__clear-filter:hover {\n background-image: none;\n }\n html[class*=\"zh-\"] .zhc-filter-tag__text {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-filter-tags .zhc-svg-icon--estimate mask {\n fill: #181818;\n }\n html[class*=\"zh-\"] .zhc-integration-repo-selector__repos__container {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-integrations-section .zhc-integrations-section__form--error input:focus,\n html[class*=\"zh-\"] .zhc-invitees-list input:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-invitee-input::placeholder {\n color: #5a5a5a;\n }\n html[class*=\"zh-\"] .zhc-issue-card__action-notification .zhc-icon--has-notification::after,\n html[class*=\"zh-\"] .zhc-issue-card__action-notification .zhc-icon--notification::after,\n html[class*=\"zh-\"] .zhc-issue-card__action-notification .zhc-issue-card__action-notification__has-notification::after,\n html[class*=\"zh-\"] .zhc-issue-card__actions .zhc-icon--has-notification::after {\n border-color: var(--ghd-bg-color);\n }\n html[class*=\"zh-\"] .zhc-issue-card__epic-filter__btn.zhc-button--variant-outlined:disabled {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-issue-cards:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-sidebar-assignee-selector .zhc-sidebar-assignee-selector_active_assignees,\n html[class*=\"zh-\"] .zhc-sidebar-pipeline-selector__button,\n html[class*=\"zh-\"] .zhc-sidebar-selector {\n background: none;\n }\n html[class*=\"zh-\"] .zhc-sidebar-pipeline-selector__high-priority {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-sidebar-selector-button {\n background: none;\n }\n html[class*=\"zh-\"] [data-theme=\"night\"] .zhc-label-item__color {\n border-color: hsla(0, 0%, 0%, .1);\n }\n html[class*=\"zh-\"] .zhc-merge-repo-finder__container {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-merge-repo-finder__cancel {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-milestone-modal__connected-repos__select-repos {\n color: #4f8cc9;\n }\n html[class*=\"zh-\"] .zhc-app-notification:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-repo-notifications--single-repo .zhc-repo-notifications__header {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-page-container--signup {\n background-image: none;\n }\n html[class*=\"zh-\"] .zhc-page-container--signup .zhc-page-container__page-section {\n background-color: transparent;\n }\n @media (min-width: 760px) {\n html[class*=\"zh-\"] .zhc-page-container__page-section {\n background-color: transparent;\n }\n }\n html[class*=\"zh-\"] .zhc-pipeline--add-placeholder .zhc-pipeline-header__main {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-pipeline--is-collapsed .zhc-pipeline-header__info:hover {\n background: none;\n }\n html[class*=\"zh-\"] .zhc-pipeline__button {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-pipeline-header--is-closed .zhc-pipeline-header__info:hover,\n html[class*=\"zh-\"] .zhc-pipeline-header--is-collapsed .zhc-pipeline-header__info:hover {\n background: none;\n }\n html[class*=\"zh-\"] .zhc-pipeline-header__expand-btn-container,\n html[class*=\"zh-\"] .zhc-pipeline-header__form__edit {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-popover--deprecated_with_borders {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhu-radio-button__container:hover input {\n background-color: #5a5a5a;\n }\n html[class*=\"zh-\"] .zhu-radio-button__container input:checked {\n box-shadow: inset 0 0 0 1px var(--ghd-bg-color), inset 0 0 0 8px var(--zh-theme-color-brand-blue-primary);\n }\n html[class*=\"zh-\"] .zhu-radio-button__container input:focus {\n box-shadow: inset 0 0 0 1px var(--ghd-bg-color), inset 0 0 0 8px var(--zh-theme-color-brand-blue-primary), 0 0 5px 2px #5e9ed6;\n }\n html[class*=\"zh-\"] .zhc-release-chart-desired-velocity .zhc-chart-scatterchart-plot,\n html[class*=\"zh-\"] .zhc-release-chart-predicted-velocity .zhc-chart-scatterchart-plot {\n stroke: #181818;\n }\n html[class*=\"zh-\"] .zhc-selection-button--active-filter,\n html[class*=\"zh-\"] .zhc-selection-button--active-filter.zhc-selection-button--active-filter {\n border-color: currentcolor;\n }\n html[class*=\"zh-\"] .zhc-selection-button__container .zhc-svg-icon--estimate mask {\n fill: #181818;\n }\n html[class*=\"zh-\"] .zhc-selection-item--is-disabled,\n html[class*=\"zh-\"] .zhc-selection-item--is-disabled.zhc-selection-item--is-active,\n html[class*=\"zh-\"] .zhc-selection-item--is-disabled:hover,\n html[class*=\"zh-\"] .zhc-selection-item:disabled,\n html[class*=\"zh-\"] .zhc-selection-item:disabled.zhc-selection-item--is-active,\n html[class*=\"zh-\"] .zhc-selection-item:disabled:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-selection-list__footer {\n border-top-color: #f0f0f0;\n }\n html[class*=\"zh-\"] .zhc-selection-list__tab-item {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-selection-list-deprecated__header--light {\n background-color: initial;\n }\n html[class*=\"zh-\"] .zhc-selection-list-deprecated__cancel,\n html[class*=\"zh-\"] .zhc-selection-list-deprecated__list .zhc-selection-list-deprecated__header {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-shortcuts-guide__nav-item:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-collapse-toggle--is-active {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .user-has-feelings .zhc-sidebar-nav-item:not(.zhc-sidebar-nav-item--is-active):hover {\n background-color: initial;\n }\n html[class*=\"zh-\"] .zhc-sidebar-nav-item__link {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-sidebar-profile__item:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-tutorial-tooltip {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-sidebar a:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-sidebar__overlay {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-spinner:not(.zhc-spinner--no-outline) {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-spinner--no-color-change,\n html[class*=\"zh-\"] .zhc-spinner--purple {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-status-tag button {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-sub-item-button {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-sub-item-button:active {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-team-members__searchbar input:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-tooltip__content::before {\n background-color: transparent;\n }\n @media (min-width: 1020px) {\n html[class*=\"zh-\"] .zhc-chart-velocity__left-axis {\n box-shadow: none;\n }\n }\n html[class*=\"zh-\"] .zhc-workspace-import {\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n html[class*=\"zh-\"] .zhc-workspace-import__valid-icon .zhc-svg-icon {\n color: #fff;\n }\n html[class*=\"zh-\"] .zhc-workspace-switcher-search__input:focus {\n box-shadow: none;\n }\n @media (min-width: 1020px) {\n html[class*=\"zh-\"] .zhc-control-chart .zhc-control-chart__left-axis {\n box-shadow: none;\n }\n }\n html[class*=\"zh-\"] .zhc-control-chart-report .zhc-dropdown--ccr-pipelines .zhc-selection-item--is-disabled {\n background-color: transparent;\n }\n @media (min-width: 1020px) {\n html[class*=\"zh-\"] .zhc-cumulative-chart__left-axis {\n box-shadow: none;\n }\n }\n html[class*=\"zh-\"] .zhc-cumulative-chart__chart__dot {\n stroke: #181818;\n }\n html[class*=\"zh-\"] .zhc-discussion-events__icon--grey {\n background-color: #444;\n }\n html[class*=\"zh-\"] .zhc-discussion-events__icon--grey-darker {\n background-color: #181818;\n }\n html[class*=\"zh-\"] .zhc-discussion-events__icon--purple,\n html[class*=\"zh-\"] .zhc-issue-badge--pr-merged {\n background-color: #8348af;\n }\n html[class*=\"zh-\"] .zhc-onboarding-tutorials > .zhc-onboarding-tutorials__header.zhc-onboarding-tutorials__header--is-minimized,\n html[class*=\"zh-\"] .zhc-onboarding-tutorials__launch-button {\n background: none;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .zhc-body__roadmap-item--complete {\n --predicted-end-date-color: #222;\n }\n html[class*=\"zh-\"] .zhc-body__roadmap-item {\n box-shadow: 0 1px 1px 0 rgba(255, 255, 255, .7);\n }\n html[class*=\"zh-\"] .zhc-roadmap-temp-project__item {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-sidebar-expand-toggle {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .zhc-roadmap-date-strip__debug i,\n html[class*=\"zh-\"] .zhc-roadmap-date-strip__debug i::before {\n border-left-color: #5a5a5a;\n }\n html[class*=\"zh-\"] .zhc-roadmap-track::after {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-sprint-calendar .DayPicker__withBorder {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zh-CalendarDay_container__selected--end.zh-CalendarDay_container__highlighted--start,\n html[class*=\"zh-\"] .zhc-sprint-calendar .CalendarDay__selected,\n html[class*=\"zh-\"] .zhc-sprint-calendar .CalendarDay__selected_end::after,\n html[class*=\"zh-\"] .zhc-sprint-calendar .CalendarDay__selected_start::after,\n html[class*=\"zh-\"] .zhc-sprint-calendar .zh-CalendarDay_container__selected--end::after,\n html[class*=\"zh-\"] .zhc-sprint-calendar .zh-CalendarDay_container__selected--start::after {\n color: #fff;\n }\n html[class*=\"zh-\"] .zhc-sprint-suffix-input__button {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-toast--no-background {\n background: none;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-toast--no-border,\n html[class*=\"zh-\"] .zhc-tutorial-progress-footer__action-buttons {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-workflows-connection-bar .zhc-button--variant-contained {\n background: none;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .zhc-workspace-creator {\n box-shadow: 0 3px 12px #000;\n }\n html[class*=\"zh-\"] .zhc-workspace-filter-label-picker__remove-label {\n background: none;\n }\n html[class*=\"zh-\"] .zh-form-control,\n html[class*=\"zh-\"] .zh-form-control-small {\n color: #c6c6c6;\n border-color: #343434;\n }\n html[class*=\"zh-\"] .zh-form-control-small:focus,\n html[class*=\"zh-\"] .zh-form-control:focus {\n background-color: #181818;\n }\n @media only screen and (max-width: 768px) {\n html[class*=\"zh-\"] .zh-logo {\n color: #fff;\n }\n }\n html[class*=\"zh-\"] .zh-logo.short {\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-boxie-modal {\n background-color: #242424 !important;\n }\n html[class*=\"zh-\"] .zh-text-muted {\n color: #afafaf !important;\n }\n html[class*=\"zh-\"] .icon-muted {\n color: #2c2c2c;\n }\n html[class*=\"zh-\"] .icon-light {\n color: #fff;\n }\n html[class*=\"zh-\"] .icon-dark {\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] .icon-border {\n border-color: #2c2c2c;\n }\n html[class*=\"zh-\"] .dropdown-menu > .active > a > [class*=\" icon-\"],\n html[class*=\"zh-\"] .dropdown-menu > .active > a > [class^=\"icon-\"],\n html[class*=\"zh-\"] .dropdown-menu > li > a:hover > [class*=\" icon-\"],\n html[class*=\"zh-\"] .dropdown-menu > li > a:hover > [class^=\"icon-\"],\n html[class*=\"zh-\"] .dropdown-submenu:hover > a > [class*=\" icon-\"],\n html[class*=\"zh-\"] .dropdown-submenu:hover > a > [class^=\"icon-\"],\n html[class*=\"zh-\"] .icon-white,\n html[class*=\"zh-\"] .nav-list > .active > a > [class*=\" icon-\"],\n html[class*=\"zh-\"] .nav-list > .active > a > [class^=\"icon-\"],\n html[class*=\"zh-\"] .nav-pills > .active > a > [class*=\" icon-\"],\n html[class*=\"zh-\"] .nav-pills > .active > a > [class^=\"icon-\"],\n html[class*=\"zh-\"] .navbar-inverse .nav > .active > a > [class*=\" icon-\"],\n html[class*=\"zh-\"] .navbar-inverse .nav > .active > a > [class^=\"icon-\"],\n html[class*=\"zh-\"] [class*=\" icon-\"], html[class*=\"zh-\"] [class^=\"icon-\"] {\n background-image: none;\n }\n html[class*=\"zh-\"] .zh-menu-header {\n background-color: #181818;\n color: #fff;\n }\n html[class*=\"zh-\"] .zh-btn {\n color: #fff;\n background-color: #2c2c2c;\n }\n html[class*=\"zh-\"] .zh-btn:active {\n background-image: none;\n }\n html[class*=\"zh-\"] .disabled {\n background-color: #343434;\n }\n html[class*=\"zh-\"] .zh-menu-content__item {\n color: #9b9b9b;\n }\n html[class*=\"zh-\"] .zh-menu-content__item:hover {\n background-color: #242424;\n border-color: #343434;\n }\n html[class*=\"zh-\"] .zh-menu-content__item--disabled:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] {\n --zh-box-shadow: 0 3px 12px rgba(220, 220, 220, .15);\n }\n html[class*=\"zh-\"] [data-scale=\"light\"] {\n --zh-scale-white: #181818;\n --zh-scale-grey-0: #181818;\n --zh-scale-gh-green: #484;\n --zh-scale-gh-red: #d82828;\n --zh-scale-gh-purple: #8348af;\n --zh-scale-gh-yellow: #cb4;\n --zh-scale-gh-draft: #9b9b9b;\n }\n html[class*=\"zh-\"] [data-scale=\"dark\"] {\n --zh-scale-white: #181818;\n --zh-scale-gh-draft: #9b9b9b;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] {\n --zh-color-grey-light: #343434;\n --zh-theme-shadows-scroll-indicator-top: linear-gradient(#181818 30%, transparent), linear-gradient(transparent, #181818 70%) 0 100%, radial-gradient(50% 0, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), radial-gradient(50% 100%, farthest-side, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n --zh-theme-shadows-scroll-indicator-bottom: linear-gradient(#181818 30%, transparent), linear-gradient(transparent, #181818 70%) 0 100%, radial-gradient(farthest-side at 50% 0, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)), radial-gradient(farthest-side at 50% 100%, rgba(0, 0, 0, .15), rgba(0, 0, 0, 0)) 0 100%;\n }\n html[class*=\"zh-\"] [data-theme=\"night\"] {\n --zh-color-grey-light: #343434;\n }\n html[class*=\"zh-\"] .nn8Bgn0ciEnao9q22FnW {\n background: none;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .yXL23heAj8y1Y7OmTJpY {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .bb5aw1CRkQZNGPIYqUJF,\n html[class*=\"zh-\"] .lhZ6wUXJmCp8hZutwPBg {\n background: none;\n }\n html[class*=\"zh-\"] .C2AaO1o2VBsqREhUyJPK,\n html[class*=\"zh-\"] .cyP42oiIJOhCQfgWrb9K,\n html[class*=\"zh-\"] .fHRvGiERvvXOBHeELUmE.WmZtysZfXXLLm1k08zKp,\n html[class*=\"zh-\"] .fHRvGiERvvXOBHeELUmE:hover,\n html[class*=\"zh-\"] .IYifLeM5mExyjAABLgZq,\n html[class*=\"zh-\"] .IYifLeM5mExyjAABLgZq:hover,\n html[class*=\"zh-\"] .UZhF7dEMKIXt_N3y307G.WmZtysZfXXLLm1k08zKp,\n html[class*=\"zh-\"] .UZhF7dEMKIXt_N3y307G:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .S4JH9qk87EYIq9iUhzOg:focus:not(:focus-visible) + .LIcB5McKXuUb71lO9HaS {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .eY_hQhM7P2rxzmRV3BsA:first-of-type,\n html[class*=\"zh-\"] .khgu4GrgKvllZoNXVYfK .DayPicker__withBorder,\n html[class*=\"zh-\"] .XCffMohFUIb7VhkVMsSK {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .y2tW06zTjN3povI2uX8T {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] ._fMB4a0OEzjySoDFNXTi,\n html[class*=\"zh-\"] .dXdMdHoqRJpA5GO6Lh16,\n html[class*=\"zh-\"] .MDoKufV7fLGR3R6eT7jZ {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .hhDPZKAIDjbHIG8XOGno {\n background: none;\n }\n html[class*=\"zh-\"] .LFjBNE7QQd5KmutFquuf,\n html[class*=\"zh-\"] .LFjBNE7QQd5KmutFquuf:focus,\n html[class*=\"zh-\"] .LFjBNE7QQd5KmutFquuf:hover {\n border-color: currentcolor;\n }\n html[class*=\"zh-\"] .cnxQHzVGNmbfGCEUK1me,\n html[class*=\"zh-\"] .Ivpu1OC8dafJ_tr5eHGn,\n html[class*=\"zh-\"] .u3e6xVnA5ru1diMXwBax {\n background: none;\n }\n html[class*=\"zh-\"] .hykHZ5UVrXhZD_qZ0dt2 {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .B9rceRCMkAS_c7eb7ph9 {\n background: none;\n }\n html[class*=\"zh-\"] .VQgmVsZfzdVYb0gNMBn6 {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .ddgNnSVBmbb79a8Q8hEt,\n html[class*=\"zh-\"] .YKZI77Qbim2A0QlPo6tz {\n background: none;\n }\n html[class*=\"zh-\"] .wPO9wwKa7bAASOPscH0L {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .uZISPn8cnJ1nBD7t9Hdv {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .dxxvQQzBVsDIymUpKZuj,\n html[class*=\"zh-\"] .K6FWCUkT0pfnoZZoYK80,\n html[class*=\"zh-\"] .WjF0alQwjfuHIBnd0Jrx {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .ExyfZiWR0AZXYavkC_CG:disabled {\n background-color: transparent !important;\n }\n html[class*=\"zh-\"] .BZPEO3YsTcIw6kG9HAhK:focus {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .ZEIJaHCAP95ynw_F9dhD {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .jGCqYvpMEY2h7EL9ovRA,\n html[class*=\"zh-\"] .sveQ98WBpxybReovOfkD {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .jGCqYvpMEY2h7EL9ovRA:focus,\n html[class*=\"zh-\"] .jGCqYvpMEY2h7EL9ovRA:hover,\n html[class*=\"zh-\"] .sveQ98WBpxybReovOfkD:focus,\n html[class*=\"zh-\"] .sveQ98WBpxybReovOfkD:hover {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .U3WyLWv2BCuD8EuqabQx {\n box-shadow: none;\n }\n html[class*=\"zh-\"] .XvCAjfNplEpMBzHO4zaU {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .xrXYdjstNndz5FRcS9m7 {\n background: none;\n }\n html[class*=\"zh-\"] .oe6CL3SMzgYkYefmR_z6,\n html[class*=\"zh-\"] .rtqkeVCk8wZUdH_a6vHJ {\n background-color: transparent;\n }\n html[class*=\"zh-\"] .hRY4GLhaF1JuhrZoDSsW {\n background-color: transparent;\n box-shadow: none;\n }\n html[class*=\"zh-\"] .RWgqSAcgMWrQB8X9GdUr {\n border-color: currentcolor;\n }\n html[class*=\"zh-\"] .CEF8JglgeNKNKq_KY4sZ,\n html[class*=\"zh-\"] .trpAHrKY9RKLZOBffBCu {\n background: none;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs {\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-doctag,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-keyword,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-meta .ThmGMWhUdQPeuyz2S5DR,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-template-tag,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-template-variable,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-type,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-variable.language_ {\n color: #d82828;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-title,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-title.class_,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-title.class_.inherited__,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-title.function_ {\n color: #8348af;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-attr,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-attribute,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-literal,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-meta,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-number,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-operator,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-selector-attr,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-selector-class,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-selector-id,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-variable {\n color: #4f8cc9;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-meta .Lpn5q56kQlmpUJTGF5Mn,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-regexp,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-string {\n color: #9daccc;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-built_in,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-symbol {\n color: #fb8532;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-code,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-comment,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-formula {\n color: #9b9b9b;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-name,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-quote,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-selector-pseudo,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-selector-tag {\n color: #6cc644;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-subst {\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-section {\n color: #4f8cc9;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-bullet {\n color: #bba257;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-emphasis,\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-strong {\n color: #c6c6c6;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-addition {\n background-color: #002800;\n color: #6cc644;\n }\n html[class*=\"zh-\"] [data-theme=\"day\"] .hljs-deletion {\n background-color: #300;\n color: #d82828;\n }\n html[class*=\"zh-\"] .f4SCOPEz29ymWKvvzx6M pre code {\n background-color: transparent;\n }\n /* end zenhub rules */\n /* generated github-hovercard rules */\n /* begin gitako rules */\n body.gitako-ready :root,\n body.gitako-ready :root[data-color-mode=dark][data-dark-theme=light],\n body.gitako-ready :root[data-color-mode=light][data-light-theme=light] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-bg: #202020;\n --gitako-btn-danger-disabled-bg: #202020;\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-focus-bg: #202020;\n --gitako-btn-hover-bg: #242424;\n --gitako-btn-outline-disabled-bg: #202020;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-bg: #040;\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-hover-bg: #484;\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #202020;\n --gitako-canvas-overlay: #181818;\n --gitako-canvas-subtle: #202020;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #202020;\n --gitako-checks-dropdown-btn-hover-text: #202020;\n --gitako-checks-dropdown-hover-text: #202020;\n --gitako-checks-header-label-open-text: #202020;\n --gitako-checks-text-primary: #202020;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #202020;\n --gitako-prettylights-syntax-carriage-return-text: #202020;\n --gitako-prettylights-syntax-invalid-illegal-text: #202020;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #202020;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n @media (prefers-color-scheme: light) {\n body.gitako-ready :root[data-color-mode=auto][data-light-theme=light] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-bg: #202020;\n --gitako-btn-danger-disabled-bg: #202020;\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-focus-bg: #202020;\n --gitako-btn-hover-bg: #242424;\n --gitako-btn-outline-disabled-bg: #202020;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-bg: #040;\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-hover-bg: #484;\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #202020;\n --gitako-canvas-overlay: #181818;\n --gitako-canvas-subtle: #202020;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #202020;\n --gitako-checks-dropdown-btn-hover-text: #202020;\n --gitako-checks-dropdown-hover-text: #202020;\n --gitako-checks-header-label-open-text: #202020;\n --gitako-checks-text-primary: #202020;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #202020;\n --gitako-prettylights-syntax-carriage-return-text: #202020;\n --gitako-prettylights-syntax-invalid-illegal-text: #202020;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #202020;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n }\n @media (prefers-color-scheme: dark) {\n body.gitako-ready :root[data-color-mode=auto][data-dark-theme=light] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-bg: #202020;\n --gitako-btn-danger-disabled-bg: #202020;\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-focus-bg: #202020;\n --gitako-btn-hover-bg: #242424;\n --gitako-btn-outline-disabled-bg: #202020;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-bg: #040;\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-hover-bg: #484;\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #202020;\n --gitako-canvas-overlay: #181818;\n --gitako-canvas-subtle: #202020;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #202020;\n --gitako-checks-dropdown-btn-hover-text: #202020;\n --gitako-checks-dropdown-hover-text: #202020;\n --gitako-checks-header-label-open-text: #202020;\n --gitako-checks-text-primary: #202020;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #202020;\n --gitako-prettylights-syntax-carriage-return-text: #202020;\n --gitako-prettylights-syntax-invalid-illegal-text: #202020;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #202020;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n }\n body.gitako-ready :root[data-color-mode=dark][data-dark-theme=dark],\n body.gitako-ready :root[data-color-mode=light][data-light-theme=dark] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-done-emphasis: #53387a;\n --gitako-mktg-btn-bg: #202020;\n --gitako-scale-purple-5: #53387a;\n --gitako-scale-purple-6: #8348af;\n }\n @media (prefers-color-scheme: light) {\n body.gitako-ready :root[data-color-mode=auto][data-light-theme=dark] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-done-emphasis: #53387a;\n --gitako-mktg-btn-bg: #202020;\n --gitako-scale-purple-5: #53387a;\n --gitako-scale-purple-6: #8348af;\n }\n }\n @media (prefers-color-scheme: dark) {\n body.gitako-ready :root[data-color-mode=auto][data-dark-theme=dark] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-done-emphasis: #53387a;\n --gitako-mktg-btn-bg: #202020;\n --gitako-scale-purple-5: #53387a;\n --gitako-scale-purple-6: #8348af;\n }\n }\n body.gitako-ready :root[data-color-mode=dark][data-dark-theme=light_high_contrast],\n body.gitako-ready :root[data-color-mode=light][data-light-theme=light_high_contrast] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-bg: #040;\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #181818;\n --gitako-canvas-overlay: #181818;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #181818;\n --gitako-checks-dropdown-btn-hover-text: #181818;\n --gitako-checks-dropdown-hover-text: #181818;\n --gitako-checks-header-label-open-text: #181818;\n --gitako-checks-text-primary: #181818;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-diff-blob-addition-fg: #181818;\n --gitako-diff-blob-deletion-fg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #181818;\n --gitako-prettylights-syntax-carriage-return-text: #181818;\n --gitako-prettylights-syntax-invalid-illegal-text: #181818;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #181818;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n @media (prefers-color-scheme: light) {\n body.gitako-ready :root[data-color-mode=auto][data-light-theme=light_high_contrast] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-bg: #040;\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #181818;\n --gitako-canvas-overlay: #181818;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #181818;\n --gitako-checks-dropdown-btn-hover-text: #181818;\n --gitako-checks-dropdown-hover-text: #181818;\n --gitako-checks-header-label-open-text: #181818;\n --gitako-checks-text-primary: #181818;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-diff-blob-addition-fg: #181818;\n --gitako-diff-blob-deletion-fg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #181818;\n --gitako-prettylights-syntax-carriage-return-text: #181818;\n --gitako-prettylights-syntax-invalid-illegal-text: #181818;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #181818;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n }\n @media (prefers-color-scheme: dark) {\n body.gitako-ready :root[data-color-mode=auto][data-dark-theme=light_high_contrast] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-bg: #040;\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #181818;\n --gitako-canvas-overlay: #181818;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #181818;\n --gitako-checks-dropdown-btn-hover-text: #181818;\n --gitako-checks-dropdown-hover-text: #181818;\n --gitako-checks-header-label-open-text: #181818;\n --gitako-checks-text-primary: #181818;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-diff-blob-addition-fg: #181818;\n --gitako-diff-blob-deletion-fg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #181818;\n --gitako-prettylights-syntax-carriage-return-text: #181818;\n --gitako-prettylights-syntax-invalid-illegal-text: #181818;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #181818;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n }\n body.gitako-ready :root[data-color-mode=dark][data-dark-theme=dark_high_contrast],\n body.gitako-ready :root[data-color-mode=light][data-light-theme=dark_high_contrast] {\n --gitako-ansi-white-bright: #181818;\n --gitako-avatar-bg: hsla(0, 0%, 0%, .1);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-text: #242424;\n --gitako-checks-btn-hover-icon: #242424;\n --gitako-checks-btn-icon: #242424;\n --gitako-checks-dropdown-btn-hover-text: #242424;\n --gitako-checks-dropdown-hover-text: #242424;\n --gitako-checks-dropdown-text: #242424;\n --gitako-checks-gate-text: #242424;\n --gitako-checks-header-icon: #242424;\n --gitako-checks-header-label-open-text: #242424;\n --gitako-checks-header-label-text: #242424;\n --gitako-checks-input-focus-text: #242424;\n --gitako-checks-input-text: #242424;\n --gitako-checks-line-text: #242424;\n --gitako-checks-logline-error-text: #242424;\n --gitako-checks-logline-text: #242424;\n --gitako-checks-logline-warning-text: #242424;\n --gitako-checks-text-primary: #242424;\n --gitako-checks-text-secondary: #242424;\n --gitako-codemirror-cursor: #242424;\n --gitako-codemirror-linenumber-text: #242424;\n --gitako-codemirror-matchingbracket-text: #242424;\n --gitako-codemirror-text: #242424;\n --gitako-diff-blob-addition-num-text: #242424;\n --gitako-diff-blob-deletion-num-text: #242424;\n --gitako-diff-blob-expander-icon: #242424;\n --gitako-fg-default: #242424;\n --gitako-fg-muted: #242424;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #202020;\n --gitako-neutral-emphasis-plus: #181818;\n --gitako-prettylights-syntax-carriage-return-text: #181818;\n --gitako-prettylights-syntax-invalid-illegal-text: #181818;\n --gitako-prettylights-syntax-markup-bold: #242424;\n --gitako-prettylights-syntax-markup-ignored-text: #242424;\n --gitako-prettylights-syntax-markup-italic: #242424;\n --gitako-prettylights-syntax-storage-modifier-import: #242424;\n --gitako-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --gitako-scale-gray-0: #181818;\n --gitako-scale-gray-1: #242424;\n --gitako-scale-white: #181818;\n --gitako-underlinenav-icon: #242424;\n }\n @media (prefers-color-scheme: light) {\n body.gitako-ready :root[data-color-mode=auto][data-light-theme=dark_high_contrast] {\n --gitako-ansi-white-bright: #181818;\n --gitako-avatar-bg: hsla(0, 0%, 0%, .1);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-text: #242424;\n --gitako-checks-btn-hover-icon: #242424;\n --gitako-checks-btn-icon: #242424;\n --gitako-checks-dropdown-btn-hover-text: #242424;\n --gitako-checks-dropdown-hover-text: #242424;\n --gitako-checks-dropdown-text: #242424;\n --gitako-checks-gate-text: #242424;\n --gitako-checks-header-icon: #242424;\n --gitako-checks-header-label-open-text: #242424;\n --gitako-checks-header-label-text: #242424;\n --gitako-checks-input-focus-text: #242424;\n --gitako-checks-input-text: #242424;\n --gitako-checks-line-text: #242424;\n --gitako-checks-logline-error-text: #242424;\n --gitako-checks-logline-text: #242424;\n --gitako-checks-logline-warning-text: #242424;\n --gitako-checks-text-primary: #242424;\n --gitako-checks-text-secondary: #242424;\n --gitako-codemirror-cursor: #242424;\n --gitako-codemirror-linenumber-text: #242424;\n --gitako-codemirror-matchingbracket-text: #242424;\n --gitako-codemirror-text: #242424;\n --gitako-diff-blob-addition-num-text: #242424;\n --gitako-diff-blob-deletion-num-text: #242424;\n --gitako-diff-blob-expander-icon: #242424;\n --gitako-fg-default: #242424;\n --gitako-fg-muted: #242424;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #202020;\n --gitako-neutral-emphasis-plus: #181818;\n --gitako-prettylights-syntax-carriage-return-text: #181818;\n --gitako-prettylights-syntax-invalid-illegal-text: #181818;\n --gitako-prettylights-syntax-markup-bold: #242424;\n --gitako-prettylights-syntax-markup-ignored-text: #242424;\n --gitako-prettylights-syntax-markup-italic: #242424;\n --gitako-prettylights-syntax-storage-modifier-import: #242424;\n --gitako-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --gitako-scale-gray-0: #181818;\n --gitako-scale-gray-1: #242424;\n --gitako-scale-white: #181818;\n --gitako-underlinenav-icon: #242424;\n }\n }\n @media (prefers-color-scheme: dark) {\n body.gitako-ready :root[data-color-mode=auto][data-dark-theme=dark_high_contrast] {\n --gitako-ansi-white-bright: #181818;\n --gitako-avatar-bg: hsla(0, 0%, 0%, .1);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-text: #242424;\n --gitako-checks-btn-hover-icon: #242424;\n --gitako-checks-btn-icon: #242424;\n --gitako-checks-dropdown-btn-hover-text: #242424;\n --gitako-checks-dropdown-hover-text: #242424;\n --gitako-checks-dropdown-text: #242424;\n --gitako-checks-gate-text: #242424;\n --gitako-checks-header-icon: #242424;\n --gitako-checks-header-label-open-text: #242424;\n --gitako-checks-header-label-text: #242424;\n --gitako-checks-input-focus-text: #242424;\n --gitako-checks-input-text: #242424;\n --gitako-checks-line-text: #242424;\n --gitako-checks-logline-error-text: #242424;\n --gitako-checks-logline-text: #242424;\n --gitako-checks-logline-warning-text: #242424;\n --gitako-checks-text-primary: #242424;\n --gitako-checks-text-secondary: #242424;\n --gitako-codemirror-cursor: #242424;\n --gitako-codemirror-linenumber-text: #242424;\n --gitako-codemirror-matchingbracket-text: #242424;\n --gitako-codemirror-text: #242424;\n --gitako-diff-blob-addition-num-text: #242424;\n --gitako-diff-blob-deletion-num-text: #242424;\n --gitako-diff-blob-expander-icon: #242424;\n --gitako-fg-default: #242424;\n --gitako-fg-muted: #242424;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #202020;\n --gitako-neutral-emphasis-plus: #181818;\n --gitako-prettylights-syntax-carriage-return-text: #181818;\n --gitako-prettylights-syntax-invalid-illegal-text: #181818;\n --gitako-prettylights-syntax-markup-bold: #242424;\n --gitako-prettylights-syntax-markup-ignored-text: #242424;\n --gitako-prettylights-syntax-markup-italic: #242424;\n --gitako-prettylights-syntax-storage-modifier-import: #242424;\n --gitako-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --gitako-scale-gray-0: #181818;\n --gitako-scale-gray-1: #242424;\n --gitako-scale-white: #181818;\n --gitako-underlinenav-icon: #242424;\n }\n }\n body.gitako-ready :root[data-color-mode=dark][data-dark-theme=light_colorblind],\n body.gitako-ready :root[data-color-mode=light][data-light-theme=light_colorblind] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-bg: #202020;\n --gitako-btn-danger-disabled-bg: #202020;\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-focus-bg: #202020;\n --gitako-btn-hover-bg: #242424;\n --gitako-btn-outline-disabled-bg: #202020;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #202020;\n --gitako-canvas-overlay: #181818;\n --gitako-canvas-subtle: #202020;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #202020;\n --gitako-checks-dropdown-btn-hover-text: #202020;\n --gitako-checks-dropdown-hover-text: #202020;\n --gitako-checks-header-label-open-text: #202020;\n --gitako-checks-text-primary: #202020;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #202020;\n --gitako-prettylights-syntax-carriage-return-text: #202020;\n --gitako-prettylights-syntax-invalid-illegal-text: #202020;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #202020;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n @media (prefers-color-scheme: light) {\n body.gitako-ready :root[data-color-mode=auto][data-light-theme=light_colorblind] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-bg: #202020;\n --gitako-btn-danger-disabled-bg: #202020;\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-focus-bg: #202020;\n --gitako-btn-hover-bg: #242424;\n --gitako-btn-outline-disabled-bg: #202020;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #202020;\n --gitako-canvas-overlay: #181818;\n --gitako-canvas-subtle: #202020;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #202020;\n --gitako-checks-dropdown-btn-hover-text: #202020;\n --gitako-checks-dropdown-hover-text: #202020;\n --gitako-checks-header-label-open-text: #202020;\n --gitako-checks-text-primary: #202020;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #202020;\n --gitako-prettylights-syntax-carriage-return-text: #202020;\n --gitako-prettylights-syntax-invalid-illegal-text: #202020;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #202020;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n }\n @media (prefers-color-scheme: dark) {\n body.gitako-ready :root[data-color-mode=auto][data-dark-theme=light_colorblind] {\n --gitako-avatar-bg: #181818;\n --gitako-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --gitako-btn-bg: #202020;\n --gitako-btn-danger-disabled-bg: #202020;\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-hover-icon: #181818;\n --gitako-btn-danger-hover-text: #181818;\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-focus-bg: #202020;\n --gitako-btn-hover-bg: #242424;\n --gitako-btn-outline-disabled-bg: #202020;\n --gitako-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-outline-hover-text: #181818;\n --gitako-btn-outline-selected-text: #181818;\n --gitako-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --gitako-btn-primary-text: #181818;\n --gitako-canvas-default-transparent: transparent;\n --gitako-canvas-default: #181818;\n --gitako-canvas-inset: #202020;\n --gitako-canvas-overlay: #181818;\n --gitako-canvas-subtle: #202020;\n --gitako-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --gitako-checks-btn-hover-icon: #202020;\n --gitako-checks-dropdown-btn-hover-text: #202020;\n --gitako-checks-dropdown-hover-text: #202020;\n --gitako-checks-header-label-open-text: #202020;\n --gitako-checks-text-primary: #202020;\n --gitako-codemirror-bg: #181818;\n --gitako-codemirror-guttermarker-text: #181818;\n --gitako-codemirror-gutters-bg: #181818;\n --gitako-codemirror-lines-bg: #181818;\n --gitako-fg-on-emphasis: #181818;\n --gitako-header-logo: #181818;\n --gitako-header-text: hsla(0, 0%, 0%, .7);\n --gitako-mktg-btn-bg: #dcdcdc;\n --gitako-page-header-bg: #202020;\n --gitako-prettylights-syntax-carriage-return-text: #202020;\n --gitako-prettylights-syntax-invalid-illegal-text: #202020;\n --gitako-project-gradient-in: #181818;\n --gitako-project-gradient-out: transparent;\n --gitako-project-sidebar-bg: #181818;\n --gitako-scale-gray-0: #202020;\n --gitako-scale-white: #181818;\n --gitako-sidenav-selected-bg: #181818;\n }\n }\n body.gitako-ready :root[data-color-mode=dark][data-dark-theme=dark_colorblind],\n body.gitako-ready :root[data-color-mode=light][data-light-theme=dark_colorblind] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-done-emphasis: #53387a;\n --gitako-mktg-btn-bg: #202020;\n --gitako-scale-purple-5: #53387a;\n --gitako-scale-purple-6: #8348af;\n }\n @media (prefers-color-scheme: light) {\n body.gitako-ready :root[data-color-mode=auto][data-light-theme=dark_colorblind] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-done-emphasis: #53387a;\n --gitako-mktg-btn-bg: #202020;\n --gitako-scale-purple-5: #53387a;\n --gitako-scale-purple-6: #8348af;\n }\n }\n @media (prefers-color-scheme: dark) {\n body.gitako-ready :root[data-color-mode=auto][data-dark-theme=dark_colorblind] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-done-emphasis: #53387a;\n --gitako-mktg-btn-bg: #202020;\n --gitako-scale-purple-5: #53387a;\n --gitako-scale-purple-6: #8348af;\n }\n }\n body.gitako-ready :root[data-color-mode=dark][data-dark-theme=dark_dimmed],\n body.gitako-ready :root[data-color-mode=light][data-light-theme=dark_dimmed] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-mktg-btn-bg: #202020;\n }\n @media (prefers-color-scheme: light) {\n body.gitako-ready :root[data-color-mode=auto][data-light-theme=dark_dimmed] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-mktg-btn-bg: #202020;\n }\n }\n @media (prefers-color-scheme: dark) {\n body.gitako-ready :root[data-color-mode=auto][data-dark-theme=dark_dimmed] {\n --gitako-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --gitako-btn-danger-selected-text: #181818;\n --gitako-btn-primary-text: #181818;\n --gitako-mktg-btn-bg: #202020;\n }\n }\n body.gitako-ready .gitako-side-bar a,\n body.gitako-ready .gitako-toggle-show-button-wrapper .gitako-toggle-show-button,\n body.gitako-ready .gitako-toggle-show-button-wrapper .gitako-toggle-show-button:active,\n body.gitako-ready .gitako-toggle-show-button-wrapper .gitako-toggle-show-button:focus,\n body.gitako-ready .gitako-toggle-show-button-wrapper .gitako-toggle-show-button:hover {\n background-color: transparent;\n }\n body.gitako-ready .gitako-side-bar mark {\n color: #dcdcdc;\n }\n body.gitako-ready .gitako-side-bar body {\n color: #c6c6c6;\n background-color: #181818;\n }\n body.gitako-ready .gitako-side-bar a {\n color: #4f8cc9;\n }\n body.gitako-ready .gitako-side-bar .rule,\n body.gitako-ready .gitako-side-bar hr {\n background-color: transparent;\n border-bottom-color: #343434;\n }\n body.gitako-ready .gitako-side-bar kbd {\n color: #afafaf;\n background-color: #181818;\n border-color: #343434;\n box-shadow: inset 0 -1px 0 #343434;\n }\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-side-bar-content .header .close-side-bar-button-position .close-side-bar-button {\n background-color: transparent;\n }\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-side-bar-content .file-explorer .search-input-wrapper .search-input {\n box-shadow: none;\n }\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-settings-bar .header-row .settings-button,\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-side-bar-content .file-explorer .node-item .actions .find-in-folder-button,\n body.gitako-ready .gitako-side-bar .gitako-side-bar-body .gitako-side-bar-content .file-explorer .node-item .actions .go-to-button {\n background-color: transparent;\n }\n /* end gitako rules */\n /* generated npmhub rules */\n /* begin notifications-preview rules */\n html:root .NPG-dropdown {\n color: rgb(210, 210, 210) !important;\n }\n html:root .participating .js-notifications-browser::before {\n background-color: #444;\n }\n html:root .mark-all-as-read-confirmed label {\n background-color: transparent;\n }\n html:root .NPG-dropdown .notifications-list-item:hover .notification-list-item-actions .btn {\n background-color: #343434 !important;\n }\n /* end notifications-preview rules */\n /* begin octotree rules */\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]):root {\n --ghd-code-color: #5a5a5a;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) a[href^=\"https://apps.apple.com\"] svg {\n fill: #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .repository-content #readme:not(.blob) .Box-header {\n background-color: transparent !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .js-issue-row [aria-label=\"Open draft pull request\"] svg {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches .Header .RecentBranches,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches [data-url$=recently_touched_branches_list] .Box {\n border-color: currentcolor !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches .Header .RecentBranches-item-link,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches [data-url$=recently_touched_branches_list] .btn-link,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-recently-pushed-branches [data-url$=recently_touched_branches_list] .link-gray-dark {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .js-expandable-line:hover .blob-num:not(:hover) + .blob-code,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .js-expandable-line:hover .blob-num:not(:hover) .directional-expander:first-child,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]).refined-github .rgh-clean-conversation-headers-non-default-branch a {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) a {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .rule,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) hr {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn[aria-selected=true] {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn[aria-disabled=true] {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary {\n color: #fff;\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary[aria-disabled=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-danger {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-danger {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-outline {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-outline {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-blue {\n background-image: none;\n box-shadow: inset 0 .15em .3em #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue[aria-disabled=true] {\n background-image: none;\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-link {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible {\n background-color: initial;\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible.zeroclipboard-is-active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible.zeroclipboard-is-hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible[aria-selected=true] {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon.disabled:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon[aria-disabled=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-octicon[aria-disabled=true]:hover {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .close-button {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .ellipsis-expander:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hidden-text-expander a:active {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-control,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-select {\n box-shadow: none !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-control[disabled],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-select[disabled] {\n color: #767676 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .input-dark {\n color: #fff;\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .inline-form .btn-plain {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .previewable-comment-form .comment {\n border-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) p.explain .octicon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item.selected::before,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item[aria-current]:not([aria-current=false])::before,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item[aria-selected=true]::before {\n background-color: #181818;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item .octicon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tabnav-tab {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tabnav-tab .octicon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-list.pjax-active .filter-item {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item[aria-current]:not([aria-current=false]),\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-list.pjax-active .filter-item.pjax-active {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SideNav-item {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SideNav-item[aria-current]:not([aria-current=false])::before,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SideNav-item[aria-selected=true]::before {\n background-color: #181818;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SideNav-subItem {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-item.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-item[aria-current]:not([aria-current=false]),\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-item[aria-selected=true] {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-search-icon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-item {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-item.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-item[aria-current]:not([aria-current=false]),\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-item[role=tab][aria-selected=true] {\n border-bottom-color: var(--ghd-bg-color);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .UnderlineNav-octicon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagination .current,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagination .current:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagination [aria-current]:not([aria-current=false]),\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tooltipped::after {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-shadow-none {\n box-shadow: none !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .color-gray-4 {\n color: #767676 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bg-gray-5 {\n background-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .color-orange-4,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .color-orange-6 {\n color: #fb8532 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bg-orange-4,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bg-orange-6 {\n background-color: #fb8532 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .text-orange-light {\n color: #fb8532 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .text-white {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n @keyframes blink {\n 50% {\n background-color: initial;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse [role=button]:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse [role=tabpanel][tabindex=\"0\"]:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse a:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse button:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.intent-mouse summary:focus {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-group:hover .form-field-hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .placeholder-box {\n border-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .auth-form-header,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .auth-form-header h1 a {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .session-authentication .auth-form-header,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .session-authentication.enterprise .header-logged-out,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .session-authentication .header-logged-out,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .session-authentication.hosted .header-logged-out {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px #f0f0f0, 0 0 1px rgba(220, 220, 220, .2);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu--logged-out {\n box-shadow: 0 10px 50px #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: none;\n }\n @media (min-width:1012px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu--logged-out {\n background-color: initial;\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px #f0f0f0, 0 0 1px rgba(220, 220, 220, .2);\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu-link {\n background-color: transparent;\n }\n @media (min-width:1012px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu-link,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu-link:hover {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .HeaderMenu-link .icon-chevon-down-mktg {\n background-color: transparent;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .HeaderMenu-link {\n color: #fff;\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .feature-preview-indicator,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-logo-invertocat,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-logo-invertocat:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .HeaderMenu-link:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notification-indicator .mail-status {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-global-search .clear-button {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-form-control {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-global-search .global-search-form-control,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .state-asleep .global-search-form-control {\n background-color: rgba(220, 220, 220, .125);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-global-search-input {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-global-search .header-global-search-input,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:focus .global-search-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:focus .jump-to-anchor,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:focus .qualifier-description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:hover .global-search-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:hover .jump-to-anchor,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option:hover .qualifier-description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option[aria-selected=true] .global-search-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option[aria-selected=true] .jump-to-anchor,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .global-search-li-option[aria-selected=true] .qualifier-description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .state-asleep .header-global-search-input {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-wrapper {\n color: #fff;\n background-color: rgba(220, 220, 220, .125);\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-wrapper.focus {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-wrapper.focus .header-search-scope {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-input,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-input:focus {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .header-search-scope:hover {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-path mark {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container .navigation-focus .jump-to-octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container .navigation-focus .jump-to-suggestions-path,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container .navigation-focus mark,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container [aria-selected=true] .jump-to-octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container [aria-selected=true] .jump-to-suggestions-path,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-current .jump-to-suggestions-results-container [aria-selected=true] mark {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-wrapper {\n color: #fff;\n background-color: rgba(220, 220, 220, .125);\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-wrapper:focus-within {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-wrapper:focus-within .header-search-scope {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-input,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-input:focus {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .header-search-scope:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .site-search-close-button .site-search-close-x {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-path mark {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item.navigation-focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container .navigation-focus .jump-to-octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container .navigation-focus .jump-to-suggestions-path,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container .navigation-focus mark,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container [aria-selected=true] .jump-to-octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container [aria-selected=true] .jump-to-suggestions-path,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-search-prototype .jump-to-suggestions-results-container [aria-selected=true] mark,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li.navigation-focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li.navigation-focus small,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li:hover small,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .suggester li[aria-selected=true] small {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blankslate-icon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-item:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-item:hover {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-menu-dark {\n color: #fff;\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Label,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label {\n background-color: initial !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .State,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .state {\n color: #fff;\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Counter--gray {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body .emoji,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body table img {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body pre > code {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body pre code,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body pre tt {\n background-color: initial;\n }\n @media (min-width:544px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-modal {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-closeButton {\n color: #767676;\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-tab {\n background-color: initial;\n }\n @media (min-width:544px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-tab[aria-selected=true] {\n box-shadow: none;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .TimelineItem--condensed .TimelineItem-badge {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Toast-icon {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Toast-dismissButton {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Toast-dismissButton:active {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .boxed-group .Counter,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .boxed-group.dangerzone > h3 {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .reverse-progress-container {\n background-image: linear-gradient(90deg, #484, #4f8cc9, #9378ba, #d82828, #fb8532);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-button::after {\n border-color: currentcolor transparent transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input:-ms-input-placeholder {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input::-ms-input-placeholder {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-tabs .select-menu-tab-nav,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-tabs a {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-inline > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.select-menu-action > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus.selected > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true] .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true] .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true] .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item.navigation-focus[aria-checked=true] > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-inline > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.select-menu-action > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus.selected > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:focus > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-inline > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.select-menu-action > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover.selected > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:focus > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-checked=true]:hover > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true] .description-inline > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true].select-menu-action > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:focus > .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover .description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover .description-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover .select-menu-item-heading-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item[aria-selected=true]:hover > .octicon {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu.label-select-menu .select-menu-item:active {\n background-color: initial !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Box--overlay {\n box-shadow: 0 0 18px #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .comment-body .highlight {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .email-format .email-hidden-toggle a:active {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branches-tag-list li .ellipsis-expander:hover {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signed-commit-header .octicon-unverified {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .diffstat,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .octicon-diff-added,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .octicon-diff-modified,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .octicon-diff-removed,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .octicon-diff-renamed,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .select-menu-item-heading,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .select-menu-item-text,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .text-gray-light,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .text-green,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select .navigation-focus .text-red,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .diffstat,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .octicon-diff-added,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .octicon-diff-modified,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .octicon-diff-removed,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .octicon-diff-renamed,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .select-menu-item-heading,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .select-menu-item-text,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .text-gray-light,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .text-green,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select[aria-selected=true] .text-red,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .diffstat,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .octicon-diff-added,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .octicon-diff-modified,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .octicon-diff-removed,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .octicon-diff-renamed,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .select-menu-item-heading,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .select-menu-item-text,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .text-gray-light,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .text-green,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:focus .text-red,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .diffstat,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .octicon-diff-added,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .octicon-diff-modified,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .octicon-diff-removed,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .octicon-diff-renamed,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .select-menu-item-heading,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .select-menu-item-text,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .text-gray-light,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .text-green,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toc-select [role^=menuitem]:hover .text-red {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-num-expandable .diff-expander:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-num-expandable .directional-expander:hover {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .add-line-comment {\n color: #fff;\n box-shadow: 0 1px 4px #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-sidebar-item .muted-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-sidebar-toggle .octicon {\n color: #767676;\n }\n @media (min-width:1012px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting {\n background-color: transparent;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .previewable-comment-form .comment-body {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .footer-octicon:hover {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagehead-tabs-item.selected {\n border-color: #fb8532 #343434 transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .reponav-wrapper .reponav-item.selected {\n color: #fff;\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .max--md .content-attachment-content--gradient {\n background: linear-gradient(180deg, transparent, #181818 calc(100% - 28px));\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple {\n color: #fff;\n background-color: #4550c2;\n background-image: linear-gradient(-180deg, #4550c2, #4550c2 90%);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-blurple {\n background-image: none;\n box-shadow: inset 0 .15em .3em #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blurple[aria-disabled=true] {\n background-image: none;\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .integrations-breadcrumb-link:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgr-admin-link.draft-tag .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgr-admin-link.draft-tag:hover .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgr-feat-header .intgr-admin-link:hover .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgr-feat-header h2,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgrs-dir-intro .directory-header-back,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intgrs-dir-intro .directory-tag-line {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .integrations-install-target .flash,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .integrations-install-target .flash-error {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .link-small {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .alert-label,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .billing-plans .coupon td {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .credit-card.normal .signature {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-choice--experiment.open,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-choice--experiment.selected {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-choice--experiment.open .plan-choice-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-choice--experiment.selected .plan-choice-icon {\n box-shadow: 0 1px 0 #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-action-icon {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-action-state-closed-dirty .branch-action-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-action-state-dirty .branch-action-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .is-rebasing .branch-action-state-dirty-if-rebasing .branch-action-icon {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .completeness-indicator-error,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .completeness-indicator-success {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .completeness-indicator-problem {\n color: #fff;\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-a-b-count .count-half:last-child {\n border-left-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-a-b-count .meter.zero {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .checks-list-item.selected .selected-color-white {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep-header,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .neutral-check {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep-header-dropdown-menu-next {\n box-shadow: 0 8px 24px hsla(0, 0%, 0%, .7) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search .btn {\n color: #fff;\n background-color: rgba(220, 220, 220, .125);\n background-image: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search .btn[disabled] {\n background-image: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-header-next .btn-link:hover:not([disabled]),\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-header-next .btn.btn-link:hover:not([disabled]) .octicon {\n background-color: rgba(220, 220, 220, .125);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-header-timestamp {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search-input:-ms-input-placeholder {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search-input::-ms-input-placeholder {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search-input::placeholder {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-header-counter,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckRun-search-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep-line .CheckStep-line-timestamp {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep-line .dt-fm.select {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .ansifg-gr,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .log-line-info,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .log-line-info a,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .log-line-verbose,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CheckStep .log-line-verbose a {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .search-form-fluid .search-page-input,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .search-form-fluid .search-page-input:focus {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) g.mini {\n fill: #fb8532;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CommunityTemplate-highlight--focus {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .community-checklist .progress-bar {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .contrib-legend .legend li {\n box-shadow: inset 0 0 0 1px #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .contrib-person path,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .map-point:hover {\n fill: #fb8532;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dashboard-notice .dismiss {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dashboards-overview-cards .blankslate,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) :target .discussion-nested-comment-group .timeline-comment,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) :target .nested-discussion-timeline-comment {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .icon-discussion-white {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussions-activity-indicator {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .emoji-tab[role=tab][aria-selected=true] {\n border-bottom-color: #fb8532;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .emoji-picker-tab .btn-outline:not(:hover) {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .newsletter-frequency-choice:hover h3 {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .newsletter-frequency-choice.selected {\n box-shadow: 0 0 5px hsla(0, 0%, 0%, .7);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .ghpi-bootstrap-complete-step,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .newsletter-frequency-choice.selected h3,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .topic-tag-action .add-topic-button:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .topic-tag-action .remove-topic-button:hover {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .topic-input-container .tag-input .tag-input-inner {\n background-image: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-discussion-new-post .review-thread-reply-button:disabled {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-project-suggestion-number {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hook-deliveries-list .hook-delivery-item:hover {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hook-delivery-container h4.remote-call-header {\n border-bottom-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hook-delivery-response-status {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .integrations-select-repos::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .issues-reset-query-icon {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label-select-menu .selected:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label-select-menu [aria-checked=mixed]:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label-select-menu [aria-checked=true]:active {\n background-color: initial !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .issue-keyword {\n border-bottom-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repository-lang-stats ol.repository-lang-stats-numbers li a:hover {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceFeature-link:hover .CircleBadge--feature {\n box-shadow: 0 3px 8px 0 hsla(0, 0%, 0%, .7);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item.selected .Label--gray,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .selected .marketplace-plan-emphasis {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceEdit-body .CircleIcon {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .BarChart-bar--orange {\n background-color: #fb8532;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .muted-link.filter-item.selected {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceAnnouncement .btn-outline-mktg {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .merge-branch-manually {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .navigation-focus.disabled .unavailable-merge-method,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [aria-selected=true].disabled .unavailable-merge-method {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .news .alert .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .news .alert .time,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .news .alert .title .subtle,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-new-repo .octicon-repo {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notifications-list .mark-all-as-read {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notifications-v2 .thread-subscription-status {\n background-color: initial !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notifications-list-item:hover .notification-list-item-actions .btn {\n background-color: transparent !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .oauth-permissions-details.open a.btn-sm {\n background-image: none;\n box-shadow: inset 0 2px 4px #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-card-legend .metric-2 {\n color: #fb8532;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-graph-canvas .metric-2 circle,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-graph-canvas path.metric-2,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-svg-tip .metric-2 .legend {\n stroke: #fb8532;\n background-color: #fb8532;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .org-insights-cards .org-insights-card-legend {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .saml-settings-form .test-status-indicator-error,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .saml-settings-form .test-status-indicator-success {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-member-list .invite-icon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger.navigation-focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger.selected.navigation-focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger.selected:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger.selected[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item-danger[aria-selected=true] {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-member-list-avatar .octicon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .progress-pjax-loader {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-full-screen .project-header .project-header-link:hover {\n color: #fff !important;\n }\n @media (min-width:544px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-full-screen .card-filter-input {\n color: #fff;\n background-color: rgba(220, 220, 220, .125);\n box-shadow: none;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .new-project-column {\n border-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-pane .redacted-activity {\n border-bottom-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-filter-autocomplete-dropdown .navigation-focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-filter-autocomplete-dropdown .navigation-focus .autocomplete-text-qualifier,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-filter-autocomplete-dropdown [aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-filter-autocomplete-dropdown [aria-selected=true] .autocomplete-text-qualifier {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .projects-reset-query-icon {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-profile-nav {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .toolbar-shadow {\n background: linear-gradient(rgba(0, 0, 0, .075), transparent) repeat-x;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diffbar [role^=menuitem]:focus:not(.is-range-selected) .text-emphasized,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diffbar [role^=menuitem]:hover:not(.is-range-selected) .text-emphasized {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .uploaded-files.not-populated + .drop-target .drop-target-label {\n border-top-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .timeout {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .avatar-upload .flash {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .application-show-group .drag-and-drop,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .saved-reply-form .comment-body {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .two-factor-toggle .two-factor-on,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-already-added::after {\n color: #fff;\n }\n @keyframes toggle-color {\n 0%, to {\n background-color: initial;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repository-merge-features .form-group.errored .error {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repository-settings-actions [role=tab][aria-selected=true] {\n border-bottom-color: #fb8532;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .shelf-dismiss {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .intro-shelf {\n background-image: linear-gradient(180deg, transparent 60%, #181818), linear-gradient(70deg, #182030 32%, #ebfff0);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signup-plan-card:hover {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-category-tab[aria-selected=true] {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan-category-tab[aria-selected=true] .tab-title {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .showcase-page-pattern::after {\n background-image: linear-gradient(180deg, hsla(0, 0%, 0%, .85), #181818);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .sponsors-goal-completed-bar,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .sponsors-goal-progress-bar:hover {\n background: linear-gradient(90deg, #cb4, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tag-input input,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tag-input input:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-label-ldap {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .token-scanning-reset-query-icon {\n background-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .svg-tip .date {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tree-finder-input,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .tree-finder-input:focus {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .already-member-note,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .member-email,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .member-name,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .non-member-action,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .non-member-note,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion.navigation-focus .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .already-member-note,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .member-email,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .member-name,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .non-member-action,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .non-member-note,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion:hover .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .already-member-note,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .member-email,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .member-name,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .non-member-action,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .non-member-note,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .member-suggestion[aria-selected=true] .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-suggestion.navigation-focus .team-description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-suggestion.navigation-focus .team-size,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-suggestion[aria-selected=true] .team-description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .team-suggestion[aria-selected=true] .team-size,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result.navigation-focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result.navigation-focus .octicon-plus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result:hover .octicon-plus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .typeahead-result[aria-selected=true] .octicon-plus {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .email-suggestion .octicon-mail {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .follow-list .flagged-banner,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-access-add-team.navigation-focus .team-description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-access-add-team.navigation-focus .team-size,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-access-add-team[aria-selected=true] .team-description,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-access-add-team[aria-selected=true] .team-size,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-org-button.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-org-button.selected .user-status-org-detail,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-org-button:focus .user-status-org-detail,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-org-button:hover .user-status-org-detail {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-status-circle-badge {\n box-shadow: 0 1px 0 #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hx_badge-search-container .hx_badge-input {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hx_badge-search-container .hx_badge-input:focus {\n box-shadow: none !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hx_badge[aria-pressed=true] {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Box--responsive .Box-row--unread,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notification-list-item-actions .btn {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item[aria-disabled=true] {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Box--responsive .Box-row--unread::before {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .autocomplete-item {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .radio-label .octicon {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-item:hover .Label {\n border-color: currentcolor;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagehead-tabs-item.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .reponav-item.selected {\n border-top-color: var(--ghd-bg-color);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-mktg {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline-mktg,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline-mktg:hover {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-transparent {\n color: #fff;\n background-color: initial;\n background-image: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-transparent:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-transparent:hover {\n background-image: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-black-mktg-fluid,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-green-mktg-fluid,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-lg-mktg-fluid,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-mktg-fluid,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-purple-mktg-fluid,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid.hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-white-outline-mktg-fluid[aria-selected=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [open] > .btn-white-outline-mktg-fluid {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible-mktg-fluid.focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible-mktg-fluid.text-underline,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-invisible-mktg-fluid:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-lg-invisible-mktg-fluid.focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-lg-invisible-mktg-fluid.text-underline,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-lg-invisible-mktg-fluid:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .section-codespaces-develop-night .codespaces-sun {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .customer-story-overlay {\n background-image: linear-gradient(180deg, #f0f0f0 -5%, transparent 50%);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bg-orange {\n background-color: #fb8532 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .text-gray-light-ultra {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .underline-dashed {\n background-image: linear-gradient(90deg, #404040 50%, transparent 0);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .link-white-mktg {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .particle-circle-orange,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .particle-circle-orange-2 {\n background-color: #fb8532;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-btn {\n background-color: transparent;\n }\n @media (min-width:768px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-btn {\n color: #fff;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-btn:hover {\n background-color: transparent;\n }\n @media (min-width:768px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .subnav-btn:hover {\n color: #fff;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .fade-img-to-white-bg::before {\n background: linear-gradient(180deg, #181818 0, transparent);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .fade-img-to-white-bg::after {\n background: linear-gradient(0deg, #181818 0, transparent);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pricing-plan-tab {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pricing-matrix-row-button,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pricing-testimonial-logo {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .codespaces-subtitle {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .section-codespaces-develop-night .codespaces-develop-header {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .section-codespaces-develop-night .codespaces-develop-text {\n color: hsla(0, 0%, 0%, .2) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .jumbotron-link {\n border-bottom-color: rgba(220, 220, 220, .125);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .home-hero-signup .form-control-note .notice-highlight {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .customer-story-card {\n box-shadow: 0 2px 4px #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .card-mktg {\n box-shadow: 0 1px 15px #f0f0f0, 0 0 1px rgba(106, 115, 125, .35);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .border-orange {\n border-color: #fb8532 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .actions-event-token,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .actions-template-repo {\n color: #767676;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .insights-hero-text::after {\n background-image: linear-gradient(hsla(0, 0%, 0%, .85), transparent);\n }\n @media (min-width:1012px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .insights-hero-text {\n background-color: initial;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .Header-old .HeaderMenu-link.border,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .Header-old a.border,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .header-search-wrapper .text-white,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .Header .HeaderMenu-link.border,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-white .Header a.border {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .features-btn-clear-bg,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .features-btn-clear-bg::before {\n background-image: none !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .features-category--dark .features--color-title {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .features-category--apps-illo1-inner2 {\n background: linear-gradient(167.44deg, hsla(0, 0%, 0%, .7) 38.78%, transparent 125.06%);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-project #js-flash-container .flash,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-project #js-flash-container .octicon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--blue,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--blue:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--blue:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--green,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--green:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--green:hover {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gpr-cli-tab {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--blue span {\n background-image: linear-gradient(180deg, transparent 98.5%, #3e74f9 0);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-underline--green span {\n background-image: linear-gradient(180deg, transparent 98.5%, #6ddb90 0);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-project .Header,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-project .Header-old {\n background-color: initial !important;\n background-image: linear-gradient(0deg, transparent, rgba(0, 0, 0, .7)) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-btn-outline {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-social-link:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-social-link:hover {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [name=user-content-code-link]::after {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-input,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .readme-textarea {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .phone-background {\n box-shadow: 0 2px 30px #f0f0f0, inset 30px 0 20px 20px rgba(0, 0, 0, .01);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .mobile-particle-circle-orange,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .mobile-particle-square-orange {\n background-color: #fb8532;\n }\n @media (min-width:544px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .summarylink:active .summarylink-btn,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .summarylink:hover .summarylink-btn {\n box-shadow: 0 8px 24px rgba(0, 0, 0, .4);\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .apps-cluster .CircleBadge.tooltipped:hover {\n box-shadow: 0 3px 8px 0 hsla(0, 0%, 0%, .7);\n }\n @media (min-width:768px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .DeveloperVideo-data {\n background-image: linear-gradient(transparent, rgba(27, 31, 35, .95));\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signup-prompt-bg {\n background-image: linear-gradient(180deg, transparent 50%, #181818), linear-gradient(70deg, #182030 32%, #f6fff8);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-overlay .header-logged-in,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .header-overlay .header-logged-out {\n background-color: initial;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .choose-team-lp .hero-form .tooltipped {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .choose-team-lp .customer-quote {\n box-shadow: 0 4px 12px #f0f0f0;\n }\n @keyframes autofill {\n to {\n background-image: none;\n color: #343434;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::selection {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::-moz-selection {\n color: #fff !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::-webkit-input-placeholder {\n color: #9b9b9b !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::-moz-placeholder {\n color: #9b9b9b !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::placeholder {\n color: #9b9b9b !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input::-webkit-input-placeholder {\n color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input::-moz-placeholder {\n color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-text-filter input::placeholder {\n color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) ::-webkit-calendar-picker-indicator:hover {\n color: #9b9b9b;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=radio],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=radio]:focus,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=radio]:hover:active {\n border-color: #afafaf;\n color: #2c2c2c;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=checkbox]:hover:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input[type=radio]:disabled {\n color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .CircleBadge--github::after {\n background-color: #181818;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input.tree-finder-input,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) input.tree-finder-input:focus {\n box-shadow: none !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-menu,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .select-menu-modal,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .word-upload-callout {\n box-shadow: 0 3px 12px #000;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .exploregrid-item:hover {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-shadow-large,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) html[class*=ghh-] .tooltipster-box {\n box-shadow: 0 1px 15px #f0f0f0 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) img[src*=\"images/modules/checks\"].box-shadow-large {\n box-shadow: 0 1px 15px var(--ghd-bg-color) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .js-current .standalone a,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .section-nav .active a,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .sidebar-module .disable > a {\n border-left-color: #2c2c2c !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .dropdown-arrow {\n border-top-color: #2c2c2c !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #com #header .top-nav .dropdown-caret {\n border-top-color: #5a5a5a !important;\n }\n @media screen and (min-width:1024px) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .site-subnav .subnav-primary.selected,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .site-subnav .subnav-primary:hover {\n border-bottom-color: #2c2c2c !important;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-item.selected .Label--outline-white {\n border-color: var(--ghd-bg-color);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .filter-tab.selected {\n border-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #org-members .member-listing,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .listings div.listing {\n border-left-color: #c6c6c6 !important;\n border-right-color: #c6c6c6 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-action-body::before,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceSideNav,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plans-card-text:first-child {\n border-right-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-filterer .repo-filter:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .review-summary::before {\n border-bottom-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .context-button:hover::after,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .switcher > span::before {\n border-color: #2c2c2c transparent transparent !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branches .branch-summary + .branch-summary {\n border-top-color: #c6c6c6 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .linkable-line-number {\n border-right-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) div.container-lg > div.float-left.px-md-2 > .border.rounded-1.d-none.d-md-block {\n border-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repository-content > .bg-white:not(.card-filter-autocomplete-dropdown),\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) button.bg-white.subnav-link,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) main [style=\"background-color: #fcfdfd;\"] {\n background-color: transparent !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .action-card::after,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .action-card::before {\n box-shadow: 0 0 0 1px #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-quicksearch-result-group,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .search-result-group {\n color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .shelf {\n background-image: none !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body[class=page-responsive] .repo-list .private {\n background-color: initial;\n }\n @media (hover:hover) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item[aria-checked=true]:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item[aria-checked=true]:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body:not(.intent-mouse) .SelectMenu-item[aria-checked=true]:focus {\n color: #343434;\n }\n }\n @media (hover:none) {\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .SelectMenu-item:focus {\n color: #fff;\n }\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .calendar-graph .days-selected rect.day.active {\n stroke: #343434 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .calendar-graph rect.day:hover {\n stroke: #181818 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-title-count {\n background-color: #afafaf !important;\n color: #5a5a5a !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body > .container > p {\n color: #5a5a5a;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-primary[aria-disabled=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn[aria-disabled=true] {\n color: hsla(0, 0%, 0%, .3);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) :not(img) text,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) circle.day {\n fill: #5a5a5a !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) circle.day:hover {\n fill: #181818 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .traffic-graph g.axis:not(.views):not(.unique) g.tick:not(:nth-child(15)):not(:first-of-type) line,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) g.axis path,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) line.axis,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) svg:not(.vis) g.axis line {\n stroke: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) svg.tick {\n fill: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .community-checklist .progress-bar .progress {\n background-color: #c6c6c6;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .labels .label-neutral,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) li.ssh-key .ssh-key-state-indicator.not-recent {\n background-color: #9b9b9b !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Counter--gray {\n background-color: #767676;\n color: #f0f0f0;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diverge-widget .separator {\n background-color: #5a5a5a !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu-item.selected::before {\n background-color: #2c2c2c !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #network canvas {\n background-color: #181818 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline-mktg,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline-mktg:hover {\n background-color: transparent;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceAnnouncement .btn-outline-mktg {\n border-color: #2c2c2c;\n color: #2c2c2c;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceAnnouncement .btn-outline-mktg:hover {\n color: #fff;\n border-color: var(--ghd-bg-color);\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .MarketplaceAnnouncement {\n color: #fff;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-file-upload-tree-target {\n background: radial-gradient(ellipse at center, #f0f0f0 0, rgba(0, 0, 0, .6) 65%, rgba(0, 0, 0, .6) 100%) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .TimelineItem-break {\n background: linear-gradient(to bottom, rgba(25, 25, 25, .8) 1%, transparent 80%) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-action:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .clone-url-button.selected > .clone-url-link:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hero .screenographic,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .hero .textographic,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signup-button:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) a.signin:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) ul#bootcamp li a:hover h4 {\n border-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) main [style=\"background: linear-gradient(to top, rgba(255,255,255,1), rgba(255,255,255,0));\"] {\n background: linear-gradient(to top, #181818, transparent) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [style*=\"background: #DBEDFF\"] {\n background-color: hsla(0, 0%, 0%, .1) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .ScreenshotCarousel-navitem.selected {\n box-shadow: inset 0 0 10px hsla(0, 0%, 0%, .05) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .commits-list-item .committer-avatar {\n box-shadow: -2px -2px 0 #000 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .box-shadow,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Header .header-search-wrapper.focus {\n box-shadow: none !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-blue:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-outline[aria-disabled=true],\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn:active,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .social-count,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .upload-progress {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #inbox .list .item .title span,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .metabox .editable-text:hover,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Subhead.border-bottom-0,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [href=\"#organizations\"][style*=\"background-color: #fff\"] {\n background-color: transparent !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger.disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger:disabled,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-danger[aria-disabled=true] {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) [style*=\"border: 1px solid #f9b3dd\"] .text-gray-dark {\n color: #c6c6c6 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #feedHeaderContainer,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #issues_search .results em,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #message.minor,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #message .sent,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #missing-readme,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-code .bg-yellow-light,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .bootcamp-help ul li,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-status.status-pending .discussion-item-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .btn-download,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .callout,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .chzn-results li em,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .code-list-item-private .blob-num,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .code-list em,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .codesearch-results #code_search_results .bg-yellow-light,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .commits-list-item em,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .compare-cutoff,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .compare-pr-placeholder,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .deprecation-warning,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diff-cutoff,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-event-status-renamed .discussion-item-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-item-review.is-pending .comment-form-head.tabnav,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-item-review.is-pending .file-header,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-topic .branch-status.status-pending,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .ejector,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .facebox-alert,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .feature-tabs .tab-button,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .feedBackground,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-actions .tip,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-owner-tag .tag,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .gist-secret-label,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .infotip,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .issue-list em,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .label-private,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .Label.bg-yellow,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body li.added.moved,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .mini-callout,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notification,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .page-notice,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .plan.free,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .prereceive-feedback,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-owner-tag .tag,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .repo-private-label,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .signed-out-comment,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .snippet em,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .timeline-comment.unread-item .timeline-comment-header,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .unsupported-browser,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .user-list em,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .wiki-list em {\n color: #343434 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .release-label.prerelease,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .release .Label--prerelease {\n border-color: #fb8532 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .avatar-bubble::before,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .discussion-bubble-content::before {\n border-color: transparent #c6c6c6 transparent transparent !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .form-select:disabled {\n color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .coupons .coupon-form-body {\n background-image: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .js-details-container.navigation-focus .gobutton {\n background: linear-gradient(#afafaf, #222) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .api pre,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-infobar,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .coupon-icon,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .issues-list,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pagehead.repohead h1 .repo-label span,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pulls-list-group {\n border-color: #afafaf;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .branch-link,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .milestone-list .progress-bar,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pull-info {\n border-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .more-repos {\n border-top-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .capped-box,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .pull-head {\n border-bottom-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #user-content-toc td,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .copyable-terminal,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body .highlight pre,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body code,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body pre,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-body tt,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-format .highlight pre,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-format p > code,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .markdown-format pre,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-card .highlight pre,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-card code,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .rgh-parse-backticks {\n border-color: hsla(0, 0%, 0%, .1) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diff-line-pre {\n color: #5a5a5a !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diff-table .line-comments {\n border-top-color: #c6c6c6 !important;\n border-bottom-color: #c6c6c6 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) #header-wrapper,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .menu li + li {\n border-bottom-color: #c6c6c6 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .diff-table > tbody > tr[data-hunk]:hover > td.selected-line::after,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .highlight > tbody > tr:hover > td.blob-code-inner.highlighted::after {\n background-color: hsla(0, 0%, 0%, .15) !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-code-addition .x,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .blob-code-deletion .x,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .highlight .blob-code-addition .x,\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .highlight .blob-code-deletion .x {\n color: #2c2c2c !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .project-card code {\n background-color: #c6c6c6 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .refined-github .reaction-summary-item a {\n box-shadow: none;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.zh_logged_in .zh-login-status {\n border-color: #afafaf !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) body.zh_logged_in .zhc-workspace-switcher__header {\n box-shadow: none !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme]:not([data-octotree-theme=sidebar]) .notifications-dropdown-arrow {\n border-bottom-color: #c6c6c6 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=cobalt]:root {\n --ghd-code-color: #181818 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=github-dark]:root {\n --base-color: #d82828 !important;\n --ghd-code-color: #5a5a5a !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=idle-fingers]:root {\n --ghd-code-color: #181818 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=monokai-spacegray-eighties]:root {\n --ghd-code-color: #1d1d1d !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=terminal]:root {\n --ghd-code-background: #f0f0f0 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=tomorrow-night-blue]:root {\n --ghd-code-color: #181818 !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=tomorrow-night-eighties]:root {\n --ghd-code-background: #f0f0f0 !important;\n --ghd-code-color: #5a5a5a !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=twilight]:root {\n --ghd-code-color: #5a5a5a !important;\n }\n .octotree-sidebar html.octotree-gh-legacy[data-octotree-theme=vibrant-ink]:root {\n --ghd-code-color: #181818 !important;\n }\n .octotree-sidebar .theme-colour-check {\n background-color: #181818;\n }\n .octotree-sidebar .vakata-context, .octotree-sidebar .vakata-context ul {\n background-color: #222;\n box-shadow: 2px 2px 2px #767676;\n }\n .octotree-sidebar .vakata-context li > a {\n color: #f0f0f0;\n text-shadow: 1px 1px 0 #181818;\n }\n .octotree-sidebar .vakata-context .vakata-context-separator > a,\n .octotree-sidebar .vakata-context .vakata-context-separator > a:hover {\n background-color: #181818;\n border-left-color: #343434;\n }\n .octotree-sidebar .vakata-context .vakata-contextmenu-disabled a,\n .octotree-sidebar .vakata-context .vakata-contextmenu-disabled a:hover {\n background-color: transparent;\n }\n .octotree-sidebar .vakata-context li > a .vakata-contextmenu-sep {\n background-color: #181818;\n }\n .octotree-sidebar .vakata-context-rtl li > a .vakata-contextmenu-sep {\n border-left-color: var(--ghd-bg-color);\n }\n .octotree-sidebar .jstree-default .jstree-icon,\n .octotree-sidebar .jstree-default .jstree-node {\n background-color: transparent;\n }\n .octotree-sidebar .jstree-default .jstree-context,\n .octotree-sidebar .jstree-default .jstree-hovered {\n box-shadow: inset 0 0 1px #5a5a5a;\n }\n .octotree-sidebar .jstree-default .jstree-clicked {\n box-shadow: inset 0 0 1px #767676;\n }\n .octotree-sidebar .jstree-default .jstree-disabled {\n color: #9b9b9b;\n }\n .octotree-sidebar .jstree-default.jstree-checkbox-no-clicked .jstree-clicked,\n .octotree-sidebar .jstree-default .jstree-disabled.jstree-hovered,\n .octotree-sidebar .jstree-default > .jstree-wholerow-ul .jstree-clicked,\n .octotree-sidebar .jstree-default > .jstree-wholerow-ul .jstree-hovered {\n box-shadow: none;\n }\n .octotree-sidebar .jstree-default .jstree-disabled.jstree-clicked {\n background-color: #202020;\n }\n .octotree-sidebar .jstree-default .jstree-themeicon-custom {\n background-color: transparent;\n background-image: none;\n }\n .octotree-sidebar #jstree-dnd.jstree-default .jstree-er,\n .octotree-sidebar #jstree-dnd.jstree-default .jstree-ok {\n background-color: transparent;\n }\n .octotree-sidebar .jstree-default-small .jstree-disabled.jstree-clicked {\n background-color: #202020;\n }\n .octotree-sidebar .jstree-default-small .jstree-themeicon-custom {\n background-color: transparent;\n background-image: none;\n }\n .octotree-sidebar #jstree-dnd.jstree-default-small .jstree-er,\n .octotree-sidebar #jstree-dnd.jstree-default-small .jstree-ok {\n background-color: transparent;\n }\n .octotree-sidebar .jstree-default-large .jstree-disabled.jstree-clicked {\n background-color: #202020;\n }\n .octotree-sidebar .jstree-default-large .jstree-themeicon-custom {\n background-color: transparent;\n background-image: none;\n }\n .octotree-sidebar #jstree-dnd.jstree-default-large .jstree-er,\n .octotree-sidebar #jstree-dnd.jstree-default-large .jstree-ok {\n background-color: transparent;\n }\n @media (max-width:768px) {\n .octotree-sidebar #jstree-dnd.jstree-dnd-responsive,\n .octotree-sidebar .jstree-default-responsive .jstree-anchor {\n text-shadow: 1px 1px #181818;\n }\n .octotree-sidebar .jstree-default-responsive .jstree-wholerow {\n border-top-color: hsla(0, 0%, 0%, .7);\n }\n .octotree-sidebar .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow {\n box-shadow: inset 0 -6px 3px -5px #9b9b9b;\n }\n .octotree-sidebar .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow {\n box-shadow: inset 0 6px 3px -5px #9b9b9b;\n }\n .octotree-sidebar .jstree-default-responsive .jstree-children .jstree-open + .jstree-open {\n box-shadow: none;\n }\n .octotree-sidebar .jstree-default-responsive .jstree-themeicon-custom {\n background-color: transparent;\n background-image: none;\n }\n }\n .octotree-sidebar .octotree-announcement,\n .octotree-sidebar .octotree-promotion {\n border-bottom-color: rgba(220, 220, 220, .15);\n }\n .octotree-sidebar .octotree-announcement {\n background-color: #261d08;\n color: #c6c6c6;\n }\n .octotree-sidebar .octotree-announcement-popover .octotree-announcement__features-list li:not(:last-child) {\n border-bottom-color: #2c2c2c;\n }\n .octotree-sidebar .octotree-author-fork i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar .octotree-author-fork i:hover::before {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark-toggle i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark-toggle.selected i::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark-toggle i:hover::before {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler i::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__search__icon i::before {\n color: #9b9b9b;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler.active,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler:hover {\n background-color: #343434;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__icon.icon-file i::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__icon.icon-issue i::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__icon.icon-pr i::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__icon.icon-repo i::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__remove i::before,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__search__icon i::before {\n color: #9b9b9b;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler.active i::before,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filter-toggler:hover i::before,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__anchor > div {\n color: #fff;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__filters {\n border-bottom-color: #afafaf;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item:hover {\n background-color: #c6c6c6;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__name {\n color: #fff;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__icon i::before,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__remove i::before {\n color: #9b9b9b !important;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-bookmark__item__remove:hover i::before {\n color: #fff !important;\n }\n .octotree-sidebar .octotree-branches-activator:hover .octotree-branches-activator__icon i::before {\n color: #fff;\n }\n .octotree-sidebar .octotree-branches-activator__icon i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar .octotree-branches__header {\n border-bottom: 1px solid var(--color-border-default, var(--color-border-primary, #343434));\n }\n .octotree-sidebar .octotree-branches__loading i {\n border-color: #9b9b9b;\n }\n .octotree-sidebar .octotree-reload-cache i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar .octotree-reload-cache i:hover::before,\n .octotree-sidebar .octotree-storage-exceeds {\n color: #fff;\n }\n .octotree-sidebar .octotree-storage-exceeds a {\n color: #fff !important;\n }\n .octotree-sidebar .octotree-storage-exceeds i.octotree-icon-x-error::before {\n color: #fff;\n }\n .octotree-sidebar .octotree-collapse-tree i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar .octotree-collapse-tree i:hover::before {\n color: #fff;\n }\n .octotree-sidebar .octotree-collapse-tree.is-collapsed i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar .octotree-collapse-tree.is-collapsed i:hover::before {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-toggle-dock-button .octotree-icon-dock:hover::before {\n color: #4f8cc9;\n }\n .octotree-sidebar .octotree-dock-right .octotree-sidebar.octotree-github-sidebar .octotree-views {\n border-left: 1px solid var(--color-border-default, var(--color-border-primary, #343434));\n }\n .octotree-sidebar .octotree-dock-right .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view .octotree-view-header {\n border-left: 1px solid #4f8cc9;\n }\n .octotree-sidebar .octotree-diff-popup__close::before {\n color: #9b9b9b;\n }\n .octotree-sidebar .octotree-diff-popup__loading i {\n border-color: #9b9b9b;\n }\n .octotree-sidebar .octotree-lazyload-toggle i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar .octotree-lazyload-toggle.octotree-lazyload-active i::before,\n .octotree-sidebar .octotree-lazyload-toggle i:hover::before {\n color: #fff;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-settings-view .octotree-view-body .octotree-ma .octotree-ma-add:hover::before {\n color: #202020;\n }\n .octotree-sidebar .octotree-tabs-nav__bar .octotree-tabs-nav__item.active::before {\n background-color: #fff;\n }\n .octotree-sidebar .octotree-tabs-nav__bar .octotree-tabs-nav__item__close i::before {\n color: #9b9b9b;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-tabs-nav__bar::before {\n background-color: #c6c6c6;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-tabs-nav__bar .octotree-tabs-nav__item.active {\n border-top-color: #c6c6c6;\n border-right-color: #c6c6c6;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-tabs-nav__bar .octotree-tabs-nav__item::after {\n background-color: #c6c6c6;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-tabs-nav__bar .octotree-tabs-nav__item__close:hover i::before {\n color: #fff !important;\n }\n .octotree-sidebar .octotree-pr-list-activator i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar .octotree-pr-list-activator i:hover::before {\n color: #fff;\n }\n .octotree-sidebar .octotree-pr-list__header {\n border-bottom: 1px solid var(--color-border-default, var(--color-border-primary, #343434));\n }\n .octotree-sidebar .octotree-pr-list__status--draft i::before {\n color: #9b9b9b;\n }\n .octotree-sidebar .octotree-pr-list__label,\n .octotree-sidebar .octotree-pr-list__loading i {\n border-color: #9b9b9b;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-pr-tree__promo {\n background-color: #261d08;\n color: #c6c6c6 !important;\n border-color: rgba(220, 220, 220, .15);\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-pr-tree__promo a {\n color: #c6c6c6 !important;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-pr-tree__promo__close i::before {\n color: #c6c6c6;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon:hover,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon:hover::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-viewed-container .octotree-comment-icon:hover,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-viewed-container .octotree-comment-icon:hover::before {\n color: #4f8cc9;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-comment-thread .octotree-highlight,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-comment-thread a {\n color: #4f8cc9 !important;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-icons-container .octotree-comment-icon:hover,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-viewed-container .octotree-comment-icon:hover {\n color: #202020;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar ul.octotree-threads-container li.octotree-comment-thread {\n border-color: #afafaf;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar ul.octotree-threads-container li.octotree-comment-thread:hover {\n background-color: #c6c6c6 !important;\n }\n .octotree-sidebar .octotree-promotion {\n background-color: #261d08;\n }\n .octotree-sidebar .octotree-promotion .octotree-promotion-subtext,\n .octotree-sidebar .octotree-promotion .octotree-promotion-text {\n color: #c6c6c6;\n }\n .octotree-sidebar.octotree-sidebar li[role].jstree-node .jstree-anchor .octotree-search-match {\n background-color: #651 !important;\n }\n .octotree-sidebar.octotree-sidebar .octotree-search i::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar.octotree-sidebar .octotree-search i:hover::before {\n color: #fff;\n }\n .octotree-sidebar.octotree-sidebar .octotree-search-bar input {\n box-shadow: none;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar .octotree-close-search i:hover::before {\n color: #fff !important;\n }\n .octotree-sidebar .searchGitHubDarkStyles .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html[data-octotree-theme] .octotree-views .octotree-tree-view .jstree-default .jstree-search {\n color: #343434 !important;\n }\n @media (prefers-color-scheme:dark) {\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-anchor .octotree-search-match {\n color: #343434 !important;\n }\n }\n .octotree-sidebar html[data-octotree-theme].octotree-pinned main > .hide-full-screen > nav,\n .octotree-sidebar html[data-octotree-theme][data-octotree-shrinked] main > .hide-full-screen > nav {\n box-shadow: none;\n }\n .octotree-sidebar html[data-octotree-theme] .btn {\n background-image: none;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-themes .octotree-darkmode-button .octotree-icon-darkmode:hover::before {\n color: #4f8cc9;\n }\n .octotree-sidebar html[data-octotree-tree-icons=classic] .octotree-sidebar.octotree-github-sidebar .octotree-views,\n .octotree-sidebar html[data-octotree-tree-icons=vscode] .octotree-sidebar.octotree-github-sidebar .octotree-views,\n .octotree-sidebar html[data-octotree-tree-icons=vscodemat] .octotree-sidebar.octotree-github-sidebar .octotree-views {\n background-color: #181818;\n }\n .octotree-sidebar .octotree-toast-warn {\n color: #bba257;\n background-color: #261d08;\n }\n .octotree-sidebar .octotree-toast-info {\n background-color: #182030;\n border-color: #246;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n background-color: #343434;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views {\n border-right: 1px solid var(--color-border-default, var(--color-border-primary, #343434));\n background-color: #181818;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view .octotree-view-header {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-bg: #181818;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar a.octotree-pin .octotree-icon-pin::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar a.octotree-pin .octotree-icon-pin:hover::before {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar a.octotree-settings .octotree-icon-settings::before {\n color: hsla(0, 0%, 0%, .5);\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar a.octotree-settings .octotree-icon-settings:hover::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar a.octotree-settings.selected .octotree-icon-settings::before {\n color: #fff;\n }\n .octotree-sidebar .octotree-show .octotree-sidebar.octotree-github-sidebar .octotree-spin .octotree-spin--loader {\n border-color: #9b9b9b;\n }\n .octotree-sidebar html.octotree-pinned .octotree-sidebar.octotree-github-sidebar a.octotree-pin .octotree-icon-pin::before {\n color: #fff;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar {\n color: #343434 !important;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n box-shadow: 0 1px 1px hsla(0, 0%, 0%, .5) !important;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-text: #181818;\n box-shadow: none;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-footer-user-profile i:hover::before {\n color: #4f8cc9;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-footer-user-profile .octotree-footer-user-profile__email {\n color: #343434;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-footer-user-profile .octotree-footer-user-profile__email a {\n color: #343434 !important;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-footer-user-profile .octotree-footer-user-profile__email a:hover {\n color: #4f8cc9 !important;\n }\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n box-shadow: none !important;\n }\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar select {\n box-shadow: none !important;\n }\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled {\n color: #2c2c2c;\n border-color: #afafaf;\n }\n .octotree-sidebar .apply-sidebar-theme-for-github-dark .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-text: #181818;\n box-shadow: none;\n }\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n box-shadow: none !important;\n }\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar select {\n box-shadow: none !important;\n }\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled {\n color: #2c2c2c;\n border-color: #afafaf;\n }\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-text: #181818;\n box-shadow: none;\n }\n @media (prefers-color-scheme:dark) {\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar ::-webkit-scrollbar-thumb {\n box-shadow: none !important;\n }\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar select,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=text],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar select {\n box-shadow: none !important;\n }\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox],\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:focus,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:active:disabled,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar input[type=checkbox]:hover:disabled {\n color: #2c2c2c;\n border-color: #afafaf;\n }\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar .octotree-toggle,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n --toggler-color-text: #181818;\n box-shadow: none;\n }\n }\n .octotree-sidebar .octotree-icon-file-directory::before,\n .octotree-sidebar .octotree-icon-file-submodule::before {\n color: #4f8cc9;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-repo,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-repo .octotree-icon-repo::before {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-repo a,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-repo a:hover {\n color: #fff !important;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-branch,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header .octotree-header-branch .octotree-icon-branch::before {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-anchor > span {\n color: #4f8cc9 !important;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-default .jstree-no-dots .jstree-closed > .jstree-ocl::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-default .jstree-no-dots .jstree-open > .jstree-ocl::before {\n color: #4f8cc9;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-node.jstree-leaf:hover .jstree-icon.blob::before {\n background-image: none;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header i::before {\n color: #343434 !important;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header a,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .octotree-view-header a:hover {\n color: #202020 !important;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-wholerow-hovered {\n background-color: #c6c6c6 !important;\n }\n .octotree-sidebar .treeViewGitHubDarkStyles .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-light-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=dark] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view li[role].jstree-node .jstree-ocl::before {\n color: #343434 !important;\n }\n @media (prefers-color-scheme:dark) {\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto]:not([data-dark-theme]) .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_colorblind] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_dimmed] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_high_contrast] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before,\n .octotree-sidebar html:not([data-octotree-theme])[data-color-mode=auto][data-dark-theme=dark_protanopia] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-tree-view .jstree-ocl::before {\n color: #343434 !important;\n }\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view > form label {\n color: #c6c6c6;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view > form label.disabled {\n color: #343434;\n }\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view .octotree-icon-help:hover::before,\n .octotree-sidebar html[data-octotree-theme] .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view.octotree-settings-view .octotree-icon-key:hover::before {\n color: #202020;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-help-popup:hover {\n color: #f0f0f0;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-ads {\n background-color: #4f8cc9;\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-ads a {\n color: #fff !important;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-trial-expired-ads {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-trial-expired-ads__align_left_text a,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-trial-expired-ads__downgrade,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-trial-expired-ads__text a {\n color: #fff !important;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-auth-view .octotree-auth-view-login form .octotree-auth-view-login__submit .octotree-icon-back::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-auth-view__github-btn i::before {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-footer {\n background-color: #202020;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-trial-info__logout i:hover::before,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile i:hover::before {\n color: #4f8cc9;\n }\n .octotree-sidebar .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-trial-info__logout i::before,\n .octotree-sidebar .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile i::before {\n color: #343434;\n }\n .octotree-sidebar .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-trial-info__logout i:hover::before,\n .octotree-sidebar .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile i:hover::before {\n color: #4f8cc9;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile .octotree-footer-user-profile__email a:hover {\n color: #4f8cc9 !important;\n }\n .octotree-sidebar .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile .octotree-footer-user-profile__email a {\n color: #343434 !important;\n }\n .octotree-sidebar .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile .octotree-footer-user-profile__email a:hover {\n color: #4f8cc9 !important;\n }\n .octotree-sidebar .octotree-dark .octotree-sidebar.octotree-github-sidebar .octotree-footer .octotree-footer-user-profile {\n color: #343434;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-ghe-error {\n color: #fff;\n }\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-ghe-error__align_left_text a,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-ghe-error__downgrade,\n .octotree-sidebar.octotree-github-sidebar.octotree-sidebar.octotree-github-sidebar .octotree-ghe-error__text a {\n color: #fff !important;\n }\n /* end octotree rules */\n /* Refined GitHub - https://github.com/sindresorhus/refined-github\n * See #540\n * See #881 */\n .refined-github-diff-signs .blob-code-addition::before,\n .refined-github-diff-signs .blob-code-deletion::before {\n color: #7b7b7b !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1035 */\n .refined-github .reaction-summary-item.user-has-reacted {\n --background: transparent !important;\n }\n .refined-github .reaction-summary-item a {\n box-shadow: none;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1271 */\n .refined-github [data-rgh-whitespace=\"tab\"] {\n background-image: url('data:image/svg+xml,%3Csvg preserveAspectRatio=\"xMinYMid meet\" viewBox=\"0 0 12 24\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Cpath d=\"M9.5 10.44L6.62 8.12L7.32 7.26L12.04 11V11.44L7.28 14.9L6.62 13.9L9.48 11.78H0V10.44H9.5Z\" fill=\"rgba(95,90,96,60%)\"/%3E%3C/svg%3E');\n }\n .refined-github [data-rgh-whitespace=\"space\"] {\n background-image: url('data:image/svg+xml,%3Csvg preserveAspectRatio=\"xMinYMid meet\" viewBox=\"0 0 12 24\" xmlns=\"http://www.w3.org/2000/svg\"%3E%3Cpath d=\"M4.5 11C4.5 10.1716 5.17157 9.5 6 9.5C6.82843 9.5 7.5 10.1716 7.5 11C7.5 11.8284 6.82843 12.5 6 12.5C5.17157 12.5 4.5 11.8284 4.5 11Z\" fill=\"rgba(95,90,96,60%)\"/%3E%3C/svg%3E');\n }\n /* https://github.com/musically-ut/lovely-forks */\n .lovely-forks-addon {\n color: #808080 !important;\n }\n /* https://github.com/npmhub/npmhub */\n .npmhub-deps > li {\n border-color: #343434 !important;\n }\n /* ZenHub */\n body.zh_logged_in .zh-login-status {\n background: #181818 !important;\n border-color: #484848 !important;\n color: #bebebe !important;\n }\n body.zh_logged_in [style*=\"background-color: rgb(244, 244, 244)\"] {\n background: #222 !important;\n }\n /* zenhub gradients */\n body.zh_logged_in .zhc-sidebar__navigation {\n background: none !important;\n }\n body.zh_logged_in .zhc-workspace-switcher__header {\n box-shadow: none !important;\n }\n body.zh_logged_in .zhc-btn--minimal {\n background: none !important;\n border: none !important;\n }\n body.zh_logged_in .zh-icon-circled-bolt, body.zh_logged_in .zh-icon-bolt,\n body.zh_logged_in .zh-octicon-x {\n filter: invert(40%) brightness(120%) !important;\n }\n body.zh_logged_in a.zh-topbar-item.selected .zh-icon-zenhub {\n filter: invert(40%) brightness(169%) !important;\n }\n body.zh_logged_in a.zh-topbar-item .zh-icon-zenhub {\n filter: brightness(64%) !important;\n }\n body.zh_logged_in .zhc-icon:not([class$=\"-red\"]):not([class$=\"-white\"]):not([class$=\"-light\"]):not([class$=\"-purple\"]),\n body.zh_logged_in [class*=\"zh-octicon\"],\n body.zh_logged_in .zh-epic-creator-tab-icon,\n body.zh_logged_in .zhc-burndown-chart__placeholder,\n body.zh_logged_in .zhc-selection-button__container::after,\n body.zh_logged_in .zhc-icon--grey-light {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n body.zh_logged_in .zhc-selection-item:hover .zhc-icon:not([class$=\"-red\"]):not([class$=\"-white\"]):not([class$=\"-light\"]):not([class$=\"-purple\"]),\n body.zh_logged_in [class*=\"zhc-image--placeholder\"] {\n filter: invert(100%) brightness(1.4) !important;\n }\n body.zh_logged_in .zhc-info-alert img {\n filter: invert(96%) hue-rotate(180deg);\n }\n /* move expanded zenhub board toolbar when octotree exists\n * see https://github.com/buunguyen/octotree/issues/242 */\n html.octotree:not(.octotree-show) .zhc-board--is-fullscreen .zhc-menu-bar {\n margin-left: 30px;\n margin-top: -8px;\n }\n /* octotree */\n .octotree-sidebar.octotree-github-sidebar .octotree-views .octotree-view .octotree-view-header {\n background: #181818 !important;\n border-right-color: #343434 !important;\n border-bottom: 1px solid #343434 !important;\n }\n .octotree-sidebar.octotree-github-sidebar .octotree-toggle {\n box-shadow: none !important;\n }\n /* Github User Info userscript - see #481 */\n .GithubUserInfo, .GithubUserInfo > div {\n background: #202020 !important;\n border-color: #343434 !important;\n }\n /* GitHub Notifications Dropdown userscript - see #478 */\n .notifications-dropdown {\n background: #202020 !important;\n border: 1px solid #343434 !important;\n }\n a.notifications-dropdown-see-all {\n background: #242424 !important;\n color: #4f8cc9 !important;\n }\n a.notifications-dropdown-see-all:hover, .top-nav .dropdown-menu a:hover {\n background: #4f8cc9 !important;\n color: #e2e2e2 !important;\n }\n .notifications-dropdown-arrow {\n border-bottom-color: #333 !important;\n }\n /* Notification-preview */\n .NPG-dropdown .notifications-list-item.notification-unread {\n background: #181818 !important;\n }\n :root:root .NPG-dropdown .notifications-list-item:hover .notification-list-item-actions .btn:hover {\n background: #4f8cc9 !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1198 */\n .overall-summary {\n background: #181818;\n }\n /* Sourcegraph - CodeLine Hover Color In Blob */\n table > tbody > tr > td[style=\"background-color: khaki;\"] {\n background-color: #ffcc0050 !important;\n }", + "start": 327528, + "regexps": [ + "^https?://((education|gist|graphql|guides|raw|resources|status|support|vscode-auth)\\.)?github\\.com((?!(/(sponsors|readme)$)).)*$" + ], + "domains": [ + "gist.github.com" + ] + }, + { + "code": "/* begin gist.github.com rules */\n :root, [data-color-mode=dark][data-dark-theme=light],\n [data-color-mode=light][data-light-theme=light] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto][data-light-theme=light] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto][data-dark-theme=light] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n }\n [data-color-mode=dark][data-dark-theme=dark],\n [data-color-mode=light][data-light-theme=dark] {\n --color-checks-line-dt-fm-text: #181818;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-ansi-white-bright: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .5);\n --color-btn-primary-icon: #181818;\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-fg-on-emphasis: #181818;\n --color-done-emphasis: #53387a;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto][data-light-theme=dark] {\n --color-checks-line-dt-fm-text: #181818;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-ansi-white-bright: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .5);\n --color-btn-primary-icon: #181818;\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-fg-on-emphasis: #181818;\n --color-done-emphasis: #53387a;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto][data-dark-theme=dark] {\n --color-checks-line-dt-fm-text: #181818;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-ansi-white-bright: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .5);\n --color-btn-primary-icon: #181818;\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-fg-on-emphasis: #181818;\n --color-done-emphasis: #53387a;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n }\n .ActionList-content, .ActionList-item {\n background-color: transparent;\n }\n @media (hover: hover) {\n .ActionList-content[aria-disabled=true]:hover {\n background-color: transparent;\n }\n }\n .rule, a {\n background-color: transparent;\n }\n .Box--overlay {\n box-shadow: 0 0 18px #000;\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=true],\n .btn-outline.disabled, .btn-outline:disabled,\n .btn-outline[aria-disabled=true] {\n box-shadow: none;\n }\n .btn-invisible, .btn-link {\n background-color: transparent;\n }\n .btn-invisible, .btn-invisible.zeroclipboard-is-hover, .btn-invisible:hover {\n box-shadow: none;\n }\n .btn-invisible.disabled, .btn-invisible:disabled,\n .btn-invisible[aria-disabled=true], .btn-octicon {\n background-color: transparent;\n }\n .btn-octicon {\n box-shadow: none;\n }\n .close-button, .inline-form .btn-plain {\n background-color: transparent;\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .filter-list.pjax-active .filter-item, .SideNav-item, .SideNav-subItem,\n .tabnav-tab, .UnderlineNav-item {\n background-color: transparent;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .color-bg-transparent {\n background-color: transparent !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .border-white-fade {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n @keyframes blink {\n 50% {\n background-color: transparent;\n }\n }\n body.intent-mouse [role=button]:focus,\n body.intent-mouse [role=tabpanel][tabindex=\"0\"]:focus,\n body.intent-mouse a:focus, body.intent-mouse button:focus,\n body.intent-mouse summary:focus {\n box-shadow: none;\n }\n .auth-form-header, .auth-form-header h1 a {\n color: #fff;\n }\n .auth-form-header .octicon {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .1);\n }\n .session-authentication .auth-form-header,\n .session-authentication.enterprise .header-logged-out,\n .session-authentication .header-logged-out,\n .session-authentication.hosted .header-logged-out {\n background-color: transparent;\n }\n .Header-old {\n color: #fff;\n }\n .HeaderMenu--logged-out {\n box-shadow: 0 10px 50px #000;\n }\n @media (min-width: 1012px) {\n .HeaderMenu--logged-out {\n background-color: transparent;\n box-shadow: none;\n }\n }\n .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: none;\n }\n @media (min-width: 1012px) {\n .HeaderMenu--logged-out .dropdown-menu {\n box-shadow: 0 3px 12px #000, 0 0 1px rgba(220, 220, 220, .2);\n }\n }\n .HeaderMenu-link {\n background-color: transparent;\n }\n @media (min-width: 1012px) {\n .HeaderMenu-link, .HeaderMenu-link:hover {\n color: #fff;\n }\n .HeaderMenu-link .icon-chevon-down-mktg {\n stroke: hsla(0, 0%, 0%, .5);\n background-color: transparent;\n }\n .HeaderMenu-details[open] .icon-chevon-down-mktg {\n stroke: #181818;\n }\n }\n @media (min-width: 1012px) {\n }\n @media (min-width: 1012px) {\n }\n .header-logo-invertocat, .header-logo-invertocat:hover {\n color: #fff;\n }\n .feature-preview-indicator, .notification-indicator .mail-status {\n color: #fff;\n background-image: linear-gradient(#4f8cc9, #4f8cc9);\n }\n .header-search-wrapper, .header-search-wrapper.focus {\n box-shadow: none;\n }\n .header-search-input {\n background: none;\n box-shadow: none;\n }\n .header-search-input:focus {\n box-shadow: none;\n }\n .header-search-scope {\n color: hsla(0, 0%, 0%, .7);\n }\n .jump-to-suggestions-path mark {\n background-color: transparent;\n }\n .flash-close {\n background: none;\n }\n .autocomplete-embedded-icon-wrap .form-control,\n .autocomplete-embedded-icon-wrap .form-control:focus,\n .AvatarStack-body .avatar {\n box-shadow: none;\n }\n .dropdown-item:focus > .Label, .dropdown-item:hover > .Label {\n border-color: currentcolor;\n }\n .dropdown-signout {\n background: none;\n }\n .Header-input {\n box-shadow: none;\n }\n .markdown-body .emoji, .markdown-body pre > code, .markdown-body pre code,\n .markdown-body pre tt, .markdown-body table img, .SelectMenu-closeButton,\n .SelectMenu-tab {\n background-color: transparent;\n }\n @media (min-width: 544px) {\n .SelectMenu-tab[aria-selected=true] {\n box-shadow: none;\n }\n }\n .select-menu-tabs .select-menu-tab-nav, .select-menu-tabs a,\n .Toast-dismissButton {\n background-color: transparent;\n }\n .select-menu.label-select-menu .select-menu-item:active {\n background-color: transparent !important;\n }\n .select-menu-item:focus .Label, .select-menu-item:hover .Label {\n border-color: currentcolor;\n }\n .collapsible-sidebar-widget-button, .comment-body .highlight {\n background-color: transparent;\n }\n .locked-conversation .preview-tab, .locked-conversation .write-tab {\n color: #767676;\n }\n .signed-commit-badge {\n background: none;\n }\n .table-of-contents .toc-diff-stats .octicon {\n color: #767676;\n }\n .blob-wrapper table tr:nth-child(2n) {\n background-color: transparent;\n }\n .add-line-comment.octicon-check {\n background-color: #c6c6c6;\n }\n .inline-comment-form {\n border-color: #343434;\n }\n button.discussion-sidebar-toggle {\n background: none;\n }\n @media (min-width: 1012px) {\n .page-responsive .previewable-comment-form .comment-form-head.tabnav .toolbar-commenting {\n background-color: transparent;\n }\n }\n .notifications-component-dialog:not([hidden]) + .notifications-component-dialog-overlay,\n .previewable-comment-form .comment-body,\n .reponav-wrapper .reponav-item.selected {\n background-color: transparent;\n }\n @media (max-width: 768px) {\n .PageLayout--responsive-separateRegions.PageLayout--responsive-primary-pane .ActionList-item.ActionList-item--navActive:not(.ActionList-item--danger) {\n background-color: transparent;\n }\n }\n .steps {\n border-color: #343434;\n box-shadow: 0 1px 3px rgba(220, 220, 220, .05);\n }\n .steps li {\n color: #767676;\n border-left-color: #343434;\n }\n .social-reaction-summary-item {\n background-color: transparent;\n }\n .reactions-with-gap .reaction-summary-item, .social-reaction-summary-item {\n border-color: var(--color-border-default, #246);\n }\n .new-reactions-dropdown .dropdown-menu-reactions::after,\n .new-reactions-dropdown .dropdown-menu-reactions::before {\n background-color: transparent;\n }\n .render-container.is-render-ready.is-render-requested:not(.is-render-failed) {\n background: none;\n }\n .emoji-picker-tab .btn-outline:not(:hover) {\n background-color: transparent;\n }\n @media (max-width: 767px) {\n .notifications-v2 .AvatarStack-body .avatar {\n border-right-color: var(--ghd-bg-color) !important;\n }\n }\n .notifications-v2 .thread-subscription-status {\n background-color: transparent !important;\n }\n .notifications-list-item .notification-list-item-unread-indicator {\n background: none;\n }\n .progress-pjax-loader {\n background-color: transparent;\n }\n .progress-pjax-loader > .progress-pjax-loader-bar {\n background-color: #4f8cc9;\n }\n .tag-input input {\n background: none;\n box-shadow: none;\n }\n .tag-input input:focus {\n box-shadow: none;\n }\n .toolbar-commenting .dropdown-item {\n background: none;\n }\n .topic-tag-outline {\n box-shadow: inset 0 0 0 1px #246;\n }\n .is-auto-complete-loading :not(input).form-control,\n .topic-input-container .tag-input .tag-input-inner {\n background-image: none;\n }\n .Overlay-closeButton {\n background-color: transparent;\n }\n .global-focus-styles [role=button]:focus, .global-focus-styles a:focus,\n .global-focus-styles button:focus,\n .global-focus-styles input[type=checkbox]:focus,\n .global-focus-styles input[type=radio]:focus {\n box-shadow: none;\n }\n .global-focus-styles [role=button]:focus-visible,\n .global-focus-styles a:focus-visible,\n .global-focus-styles button:focus-visible,\n .global-focus-styles input[type=checkbox]:focus-visible,\n .global-focus-styles input[type=radio]:focus-visible {\n box-shadow: none;\n }\n .global-focus-styles .details-overlay > summary:focus,\n .global-focus-styles .details-reset > summary:focus {\n box-shadow: none;\n }\n .global-focus-styles .details-overlay > summary:focus-visible,\n .global-focus-styles .details-reset > summary:focus-visible {\n box-shadow: none;\n }\n .global-focus-styles .ActionList-content:focus {\n box-shadow: none;\n }\n .global-focus-styles .ActionList-content:focus-visible {\n box-shadow: none;\n }\n .global-focus-styles .btn-mktg:focus:not(:focus-visible),\n .global-focus-styles .btn-primary:focus:not(:focus-visible),\n .global-focus-styles .btn-signup-mktg:focus:not(:focus-visible),\n .global-focus-styles a.btn-mktg:focus:not(:focus-visible),\n .global-focus-styles a.btn-primary:focus:not(:focus-visible),\n .global-focus-styles summary.btn-mktg:focus:not(:focus-visible),\n .global-focus-styles summary.btn-primary:focus:not(:focus-visible) {\n box-shadow: none;\n }\n .global-focus-styles .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .global-focus-styles .autocomplete-embedded-icon-wrap .form-control:focus-visible {\n box-shadow: none;\n }\n .hx_flex-avatar-stack-item .avatar {\n box-shadow: none;\n }\n .AvatarStack-body:not(:hover) {\n background-color: transparent;\n }\n .hx_badge-search-container .hx_badge-input {\n box-shadow: none;\n }\n .hx_badge-search-container .hx_badge-input:focus {\n box-shadow: none !important;\n }\n .dropdown-item.btn-link:disabled, .dropdown-item.btn-link:disabled:hover,\n .dropdown-item.btn-link[aria-disabled=true],\n .dropdown-item.btn-link[aria-disabled=true]:hover {\n background-color: transparent;\n }\n [data-color-mode=dark][data-dark-theme*=dark],\n [data-color-mode=light][data-light-theme*=dark] {\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto][data-light-theme*=dark] {\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto][data-dark-theme*=dark] {\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L2-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L3-border: hsla(0, 0%, 0%, .05);\n --color-calendar-graph-day-L4-border: hsla(0, 0%, 0%, .05);\n }\n }\n :root, [data-color-mode=dark][data-dark-theme*=light],\n [data-color-mode=light][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=auto][data-light-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=auto][data-dark-theme*=light] {\n --color-bg-discussions-row-emoji-box: rgba(90, 90, 90, .5);\n --color-calendar-graph-day-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L1-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L2-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L3-border: rgba(220, 220, 220, .06);\n --color-calendar-graph-day-L4-border: rgba(220, 220, 220, .06);\n }\n }\n .hx_breadcrumb-header .feature-preview-indicator,\n .hx_breadcrumb-header .notification-indicator .mail-status {\n background-image: none;\n }\n .Header-button:active, .Header-button:focus, .Header-button:hover {\n background-color: transparent;\n }\n .Box--responsive .Box-row--unread, .Header-button:active .octicon,\n .Header-button:focus .octicon, .Header-button:hover .octicon, .hx_kbd {\n box-shadow: none;\n }\n .Box--responsive .Box-row--unread::before {\n color: #fff;\n background-image: linear-gradient(#4f8cc9, #4f8cc9);\n }\n .autocomplete-item {\n background-color: transparent;\n }\n .hx_status-indicator.status-indicator-loading {\n background-image: none;\n }\n .topic-tag-outline {\n background-color: transparent;\n }\n .notification-list-item-actions .btn {\n box-shadow: none;\n }\n .pagehead-tabs-item.selected, .reponav-item.selected {\n border-top-color: #fff;\n }\n .hx_disabled-input .form-control[contenteditable=false],\n .hx_disabled-input input[disabled], .hx_disabled-input select[disabled] {\n background-color: transparent;\n box-shadow: none;\n }\n .hx_disabled-input .form-select {\n background-image: none !important;\n }\n .intgrs-dir-intro .directory-header-back,\n .intgrs-dir-intro .directory-tag-line {\n color: #fff;\n }\n .intgrs-lstng-item-description::after {\n background-image: linear-gradient(to right, transparent, #181818 80%);\n }\n .intgr-admin-link.draft-tag .octicon,\n .intgr-admin-link.draft-tag:hover .octicon {\n color: #fff;\n }\n .intgr-admin-link.draft-tag:hover {\n background-color: #f0f0f0;\n }\n .integrations-breadcrumb-link:hover,\n .intgr-feat-header .intgr-admin-link:hover .octicon, .intgr-feat-header h2 {\n color: #fff;\n }\n .integrations-install-target .flash,\n .integrations-install-target .flash-error {\n background-color: transparent;\n }\n .not-found-octocat-wrapper::after {\n box-shadow: 0 4px 0 var(--ghd-bg-color), 0 8px 0 var(--ghd-bg-color), 0 12px 0 var(--ghd-bg-color), 0 16px 0 var(--ghd-bg-color), 0 20px 0 var(--ghd-bg-color);\n }\n .usage-bar {\n background-color: #2c2c2c;\n }\n .blame-commit[data-heat=\"1\"] {\n border-right-color: #fb8532;\n }\n .heat[data-heat=\"1\"] {\n background-color: #fb8532;\n }\n .blame-commit-date[data-heat=\"1\"] {\n color: #f3582c;\n }\n .blame-commit-date[data-heat=\"10\"] {\n color: #9b9b9b;\n }\n .blob-code-content .error-highlight::before,\n .diff-table .error-highlight::before {\n background: linear-gradient(135deg, transparent, transparent 45%, var(--color-danger-fg), transparent 55%, transparent 100%), linear-gradient(45deg, transparent, transparent 45%, var(--color-danger-fg), transparent 55%, transparent 100%);\n }\n .status-meta-file-name {\n background-color: rgba(220, 220, 220, .05);\n }\n .branch-a-b-count .meter.zero {\n background-color: transparent;\n }\n .branch-a-b-count .bar-ahead.even, .branch-a-b-count .bar-behind.even {\n background-color: #2c2c2c;\n }\n .code-frequency .addition {\n fill: #373;\n }\n .search-form-fluid .search-page-input {\n background: none;\n box-shadow: none;\n }\n .search-form-fluid .search-page-input:focus {\n box-shadow: none;\n }\n .community-checklist .progress-bar {\n background-color: transparent;\n }\n .suggest-icon path, .suggest-icon svg {\n fill: #181818;\n }\n .dashboards-overview-cards .blankslate {\n box-shadow: none;\n }\n .dashboards-overview-cards .dots.metric-1 circle,\n .dashboards-overview-cards .metric-0 circle {\n stroke: #181818;\n }\n .discussion-nested-comment-paging-form::before {\n background-color: transparent;\n }\n :target .discussion-nested-comment-group .timeline-comment,\n :target .nested-discussion-timeline-comment {\n box-shadow: none;\n }\n .discussion-spotlights-sortable .sortable-drag {\n background-color: transparent;\n }\n .discussion-spotlight-gradient[aria-selected=true] {\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .file {\n border-color: var(--color-border-default, #343434);\n }\n .file .image {\n background-color: #343434;\n }\n .file .image canvas, .file .image img {\n background-color: #2c2c2c;\n border-color: var(--ghd-bg-color);\n }\n .file .image .view canvas, .file .image .view img {\n background-color: #2c2c2c;\n }\n .file .empty {\n background: none;\n }\n .team-discussions .previewable-comment-form .toolbar-commenting.toolbar-commenting.toolbar-commenting {\n background-color: transparent;\n }\n .discussion-post .reaction-summary-item {\n border-color: var(--color-border-default, #246);\n }\n .team-discussion-new-post .review-thread-reply-button:disabled {\n box-shadow: none;\n }\n .team-project-suggestion-number {\n color: #767676;\n }\n .hook-deliveries-list .hook-delivery-item:hover {\n background-color: transparent;\n }\n .integrations-select-repos::-webkit-scrollbar-thumb {\n box-shadow: 0 0 1px hsla(0, 0%, 0%, .5);\n }\n .integrations-select-repos::-webkit-scrollbar-track-piece {\n background-color: transparent;\n }\n .milestone-title-link a {\n color: var(--color-fg-default, #c6c6c6);\n }\n .task-progress .octicon {\n color: var(--color-fg-muted, #767676);\n }\n .issue-meta-section .octicon {\n color: var(--color-fg-muted, #5a5a5a);\n }\n .label-select-menu .selected:active,\n .label-select-menu [aria-checked=mixed]:active,\n .label-select-menu [aria-checked=true]:active {\n background-color: transparent !important;\n }\n .repository-lang-stats ol.repository-lang-stats-numbers li a:hover {\n background-color: transparent;\n }\n .map-background {\n fill: #4f8cc9;\n }\n .map-graticule, .map-legend .map-legend-circle {\n stroke: #181818;\n }\n .map-legend .map-legend-text {\n fill: #181818;\n }\n .map-legend .map-legend-link {\n stroke: #181818;\n }\n .map-point, .map-point:hover {\n fill: #fb8532;\n }\n .MarketplaceEdit-body .CircleIcon {\n background-color: #444;\n }\n .ClipboardButton.ClipboardButton--success,\n .ClipboardButton.ClipboardButton--success:focus {\n box-shadow: 0 0 0 .2em #3737;\n }\n .MarketplaceAnnouncement {\n color: #fff;\n background: linear-gradient(90deg, #4f8cc9, #2426ca);\n }\n .merge-branch-manually {\n background-color: transparent;\n }\n .news .alert {\n border-top-color: #242424;\n }\n .oauth-permissions-details.open a.btn-sm {\n background-image: none;\n }\n .org-insights-graph-canvas .axis line {\n stroke: rgba(220, 220, 220, .1);\n }\n .org-insights-svg-tip::after {\n border-color: transparent;\n }\n .trial-banner-notice {\n background-image: linear-gradient(180deg, #4f8cc9 0%, #4f8cc9 100%);\n }\n .theme-toggle {\n background: none;\n }\n @media print {\n .btn:not(.btn-outline), .State {\n background: none;\n }\n .State--open {\n border-color: #373;\n }\n }\n .project-full-screen .project-header .project-header-link:hover {\n color: #fff !important;\n }\n @media (min-width: 544px) {\n .project-full-screen .card-filter-input {\n color: #fff;\n background-color: hsla(0, 0%, 0%, .125);\n box-shadow: none;\n }\n .project-full-screen .card-filter-input::placeholder {\n color: hsla(0, 0%, 0%, .7);\n }\n }\n .pending-cards-status {\n background-image: linear-gradient(#4f8cc9, #4f8cc9);\n }\n .user-profile-nav {\n box-shadow: none;\n }\n .review-comment .reaction-summary-item {\n border-color: var(--color-border-default, #246);\n }\n .timeout {\n background-color: transparent;\n }\n .prereceive-feedback {\n border-color: #343434;\n }\n .avatar-upload .flash {\n box-shadow: none;\n }\n .access-token.new-token {\n background-color: #6cc64450;\n }\n .application-show-group .drag-and-drop {\n background-color: transparent;\n }\n .session-device .session-state-indicator.not-recent {\n background-image: linear-gradient(#aaa, #5a5a5a);\n box-shadow: 0 1px 0 var(--ghd-bg-color);\n }\n .oauth-pending-deletion-list-item {\n box-shadow: inset 0 0 8px #2c2c2c;\n }\n .form-hr {\n border-bottom-color: var(--color-border-default, #343434);\n }\n .listgroup {\n border-color: var(--color-border-default, #343434);\n }\n .listgroup-item + .listgroup-item {\n border-top-color: var(--color-border-default, #343434);\n }\n .listgroup-header {\n border-bottom-color: var(--color-border-default, #343434);\n }\n .listgroup-overflow {\n background-color: var(--color-canvas-subtle, #222);\n }\n @keyframes toggle-color {\n 0% {\n background-color: transparent;\n }\n 100% {\n background-color: transparent;\n }\n }\n .repository-merge-features .form-group.errored .error {\n background-color: transparent;\n }\n .user-identification-questions.redesign .topic-input-container .tag-input {\n border-bottom-color: #f0f0f0;\n }\n .draft-tag {\n color: #2c2c2c;\n }\n .showcase-page-pattern::after {\n background-image: linear-gradient(180deg, hsla(0, 0%, 0%, .85), #181818);\n }\n .sponsors-goal-progress-bar {\n background-color: #c49;\n }\n @media (prefers-reduced-motion: no-preference) {\n .sponsors-goal-progress-bar:hover {\n background: linear-gradient(90deg, #cb4 0%, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff 100%);\n }\n }\n .sponsors-goal-completed-bar {\n background: linear-gradient(90deg, #cb4 0%, #c49 17%, #b34bff 34%, #01feff 51%, #cb4 68%, #c49 85%, #b34bff 100%);\n }\n .team-label-ldap, .tree-finder-input, .tree-finder-input:focus {\n box-shadow: none;\n }\n .tree-browser-result mark {\n background: none;\n }\n .WorkflowGraph.dragging .WorkflowJob:hover {\n background: none !important;\n }\n .WorkflowJob-deployment-progress .Progress {\n background: none;\n }\n .ActionsApprovalOverlay-environment .AvatarStack-body {\n background-color: transparent !important;\n }\n .page-gist-edit .octicon-gist {\n color: #767676;\n }\n .gist-dropzone-pill {\n color: #fff;\n }\n .gist-banner {\n border-bottom-color: var(--ghd-bg-color);\n }\n /* end gist.github.com rules */\n body {\n background-color: var(--ghd-bg-color) !important;\n background-image: var(--ghd-bg-img) !important;\n background-clip: border-box !important;\n background-origin: padding-box !important;\n background-attachment: scroll !important;\n background-repeat: repeat !important;\n background-size: auto !important;\n background-position: left top !important;\n }\n /* text selection */\n ::selection {\n background-color: #4f8cc9 !important;\n color: #fff !important;\n }\n ::-moz-selection {\n background-color: #4f8cc9 !important;\n color: #fff !important;\n }\n /* placeholder */\n ::-webkit-input-placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n ::-moz-placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n ::placeholder {\n color: #666 !important;\n opacity: 1 !important;\n }\n .select-menu-text-filter input::-webkit-input-placeholder {\n color: #555 !important;\n }\n .select-menu-text-filter input::-moz-placeholder {\n color: #555 !important;\n }\n .select-menu-text-filter input::placeholder {\n color: #555 !important;\n }\n ::-webkit-calendar-picker-indicator {\n background-color: #181818;\n color: #c9c9c9;\n }\n ::-webkit-calendar-picker-indicator:hover {\n color: #666;\n }\n .Header, .Header-old {\n border-bottom: 1px solid #343434 !important;\n background: #181818 !important;\n }\n .Header-link {\n color: #c6c6c6;\n }\n .Header-link[data-ga-click]:focus, .Header-link[data-ga-click]:hover,\n .btn-link .octicon-kebab-horizontal:hover {\n color: #4f8cc9;\n }\n .gisthead {\n background: rgba(20, 20, 20, .4) !important;\n }\n .discussion-timeline-actions {\n background: none !important;\n }\n .notification-indicator .mail-status {\n border-color: #181818;\n }\n .social-count {\n box-shadow: none;\n }\n .gist-content .file-box {\n background: #181818;\n }\n .gist-quicksearch-result-group {\n background: #282828 !important;\n border-color: rgba(68, 68, 68, .5) !important;\n color: #555 !important;\n }\n img[src$=\"favicons.githubusercontent.com/gist.github.com\"] {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n .gist-secret-label {\n background: rgba(51, 34, 17, .4) !important;\n border: 1px solid #542 !important;\n color: #ddd !important;\n }\n .gist-owner-tag .tag {\n background: #070 !important;\n color: #ddd !important;\n }\n .btn {\n box-shadow: none !important;\n }\n .gist-banner {\n background: rgba(20, 20, 20, .4) !important;\n }", + "start": 611794, + "domains": [ + "gist.github.com" + ] + }, + { + "code": "/* begin graphql.github.com rules */\n .graphiql-container, .graphiql-container button, .graphiql-container input {\n color: #dcdcdc;\n }\n .graphiql-container .topBar {\n background-color: #222;\n border-bottom-color: #343434;\n }\n .graphiql-container .docExplorerShow, .graphiql-container .historyShow {\n background-color: #222;\n border-bottom-color: #343434;\n color: #4f8cc9;\n }\n .graphiql-container .docExplorerShow {\n border-left-color: rgba(255, 255, 255, .7);\n }\n .graphiql-container .historyShow {\n border-right-color: rgba(255, 255, 255, .7);\n }\n .graphiql-container .docExplorerShow::before {\n border-left: 2px solid #4f8cc9;\n border-top: 2px solid #4f8cc9;\n }\n .graphiql-container .resultWrap {\n border-left-color: #343434;\n }\n .graphiql-container .docExplorerWrap, .graphiql-container .historyPaneWrap {\n background-color: #181818;\n }\n .graphiql-container .secondary-editor-title {\n background-color: #2c2c2c;\n border-bottom-color: #343434;\n border-top-color: #343434;\n }\n .graphiql-container .footer {\n border-left-color: #343434;\n border-top-color: #343434;\n }\n .graphiql-container .footer::before {\n background-color: #2c2c2c;\n }\n .graphiql-container .toolbar-button {\n background-color: #181818;\n background: linear-gradient(#303030, #282828);\n box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .7), 0 1px 0 hsla(0, 0%, 0%, .7), inset 0 1px var(--ghd-bg-color);\n color: #afafaf;\n }\n .graphiql-container .toolbar-button:active {\n background: linear-gradient(#404040, #383838);\n box-shadow: 0 0 0 1px #484848;\n }\n .graphiql-container .execute-button {\n background: linear-gradient(#303030, #282828);\n box-shadow: 0 1px 0 var(--ghd-bg-color);\n fill: #afafaf;\n }\n .graphiql-container .execute-button:active {\n background: linear-gradient(#404040, #383838);\n box-shadow: 0 1px 0 var(--ghd-bg-color), inset 0 0 2px rgba(255, 255, 255, .7), inset 0 0 6px rgba(0, 0, 0, .1);\n }\n .graphiql-container .execute-options,\n .graphiql-container .toolbar-menu-items,\n .graphiql-container .toolbar-select-options {\n background-color: #181818;\n }\n .graphiql-container .execute-options > li.selected,\n .graphiql-container .history-contents > li:active,\n .graphiql-container .history-contents > li:hover,\n .graphiql-container .toolbar-menu-items > li.hover,\n .graphiql-container .toolbar-menu-items > li:active,\n .graphiql-container .toolbar-menu-items > li:hover,\n .graphiql-container .toolbar-select-options > li.hover,\n .graphiql-container .toolbar-select-options > li:active,\n .graphiql-container .toolbar-select-options > li:hover {\n color: #fff;\n }\n .graphiql-container .toolbar-select-options > li > svg {\n fill: #9b9b9b;\n }\n .graphiql-container .toolbar-select-options > li.hover > svg,\n .graphiql-container .toolbar-select-options > li:active > svg,\n .graphiql-container .toolbar-select-options > li:hover > svg {\n fill: #181818;\n }\n @keyframes insertionFade {\n from, to {\n background-color: transparent;\n border-color: transparent;\n }\n }\n @keyframes blink {\n 50% {\n background: none;\n }\n }\n .graphiql-container .doc-explorer {\n background-color: #181818;\n }\n .graphiql-container .doc-explorer-back {\n color: #4f8cc9;\n }\n .graphiql-container .doc-explorer-back::before {\n border-left: 2px solid #4f8cc9;\n border-top: 2px solid #4f8cc9;\n }\n .graphiql-container .doc-explorer-contents,\n .graphiql-container .history-contents {\n background-color: #181818;\n border-top-color: #343434;\n }\n .graphiql-container .doc-category code,\n .graphiql-container .doc-type-description code {\n background-color: #181818;\n }\n .graphiql-container .doc-category-title {\n border-bottom-color: #343434;\n }\n .graphiql-container .doc-category-item {\n color: #afafaf;\n }\n .graphiql-container .keyword {\n color: #d82828;\n }\n .graphiql-container .type-name {\n color: #cb4;\n }\n .graphiql-container .field-name {\n color: #4f8cc9;\n }\n .graphiql-container .field-short-description {\n color: #9b9b9b;\n }\n .graphiql-container .arg-name {\n color: #53387a;\n }\n .graphiql-container .show-btn {\n border-color: #5a5a5a;\n color: #afafaf;\n }\n .graphiql-container .search-box {\n border-bottom-color: #343434;\n }\n .graphiql-container .search-box .search-box-clear {\n background-color: #343434;\n color: #fff;\n }\n .graphiql-container .history-contents li {\n border-bottom-color: #343434;\n }\n :root, [data-color-mode=\"dark\"][data-dark-theme=\"light\"],\n [data-color-mode=\"light\"][data-light-theme=\"light\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"light\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"light\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"light_colorblind\"],\n [data-color-mode=\"light\"][data-light-theme=\"light_colorblind\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"light_colorblind\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"light_colorblind\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #202020;\n --color-prettylights-syntax-invalid-illegal-text: #202020;\n --color-prettylights-syntax-carriage-return-text: #202020;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #202020;\n --color-checks-btn-hover-icon: #202020;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #202020;\n --color-checks-dropdown-btn-hover-text: #202020;\n --color-checks-header-label-open-text: #202020;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-bg: #202020;\n --color-btn-hover-bg: #242424;\n --color-btn-focus-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-disabled-bg: #202020;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-disabled-bg: #202020;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #202020;\n --color-canvas-subtle: #202020;\n --color-scale-white: #181818;\n --color-scale-gray-0: #202020;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"light_high_contrast\"],\n [data-color-mode=\"light\"][data-light-theme=\"light_high_contrast\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #181818;\n --color-diff-blob-addition-fg: #181818;\n --color-diff-blob-deletion-fg: #181818;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #181818;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-header-label-open-text: #181818;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #181818;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"light_high_contrast\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #181818;\n --color-diff-blob-addition-fg: #181818;\n --color-diff-blob-deletion-fg: #181818;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #181818;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-header-label-open-text: #181818;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #181818;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"light_high_contrast\"] {\n --color-canvas-default-transparent: transparent;\n --color-page-header-bg: #181818;\n --color-diff-blob-addition-fg: #181818;\n --color-diff-blob-deletion-fg: #181818;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-lines-bg: #181818;\n --color-checks-text-primary: #181818;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-header-label-open-text: #181818;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-mktg-btn-bg: #dcdcdc;\n --color-avatar-bg: #181818;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-sidenav-selected-bg: #181818;\n --color-btn-primary-text: #181818;\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-hover-icon: #181818;\n --color-fg-on-emphasis: #181818;\n --color-canvas-default: #181818;\n --color-canvas-overlay: #181818;\n --color-canvas-inset: #181818;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"dark\"],\n [data-color-mode=\"light\"][data-light-theme=\"dark\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-done-emphasis: #53387a;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"dark\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-done-emphasis: #53387a;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"dark\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-done-emphasis: #53387a;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"dark_dimmed\"],\n [data-color-mode=\"light\"][data-light-theme=\"dark_dimmed\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"dark_dimmed\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"dark_dimmed\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"dark_high_contrast\"],\n [data-color-mode=\"light\"][data-light-theme=\"dark_high_contrast\"] {\n --color-diff-blob-addition-num-text: #242424;\n --color-diff-blob-deletion-num-text: #242424;\n --color-diff-blob-expander-icon: #242424;\n --color-prettylights-syntax-storage-modifier-import: #242424;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-markup-italic: #242424;\n --color-prettylights-syntax-markup-bold: #242424;\n --color-prettylights-syntax-markup-ignored-text: #242424;\n --color-codemirror-text: #242424;\n --color-codemirror-linenumber-text: #242424;\n --color-codemirror-cursor: #242424;\n --color-codemirror-matchingbracket-text: #242424;\n --color-checks-text-primary: #242424;\n --color-checks-text-secondary: #242424;\n --color-checks-btn-icon: #242424;\n --color-checks-btn-hover-icon: #242424;\n --color-checks-input-text: #242424;\n --color-checks-input-focus-text: #242424;\n --color-checks-dropdown-text: #242424;\n --color-checks-dropdown-hover-text: #242424;\n --color-checks-dropdown-btn-hover-text: #242424;\n --color-checks-header-label-text: #242424;\n --color-checks-header-label-open-text: #242424;\n --color-checks-header-icon: #242424;\n --color-checks-line-text: #242424;\n --color-checks-gate-text: #242424;\n --color-checks-logline-text: #242424;\n --color-checks-logline-error-text: #242424;\n --color-checks-logline-warning-text: #242424;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-ansi-white-bright: #181818;\n --color-btn-text: #242424;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-selected-text: #181818;\n --color-underlinenav-icon: #242424;\n --color-fg-default: #242424;\n --color-fg-muted: #242424;\n --color-neutral-emphasis-plus: #181818;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #242424;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"dark_high_contrast\"] {\n --color-diff-blob-addition-num-text: #242424;\n --color-diff-blob-deletion-num-text: #242424;\n --color-diff-blob-expander-icon: #242424;\n --color-prettylights-syntax-storage-modifier-import: #242424;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-markup-italic: #242424;\n --color-prettylights-syntax-markup-bold: #242424;\n --color-prettylights-syntax-markup-ignored-text: #242424;\n --color-codemirror-text: #242424;\n --color-codemirror-linenumber-text: #242424;\n --color-codemirror-cursor: #242424;\n --color-codemirror-matchingbracket-text: #242424;\n --color-checks-text-primary: #242424;\n --color-checks-text-secondary: #242424;\n --color-checks-btn-icon: #242424;\n --color-checks-btn-hover-icon: #242424;\n --color-checks-input-text: #242424;\n --color-checks-input-focus-text: #242424;\n --color-checks-dropdown-text: #242424;\n --color-checks-dropdown-hover-text: #242424;\n --color-checks-dropdown-btn-hover-text: #242424;\n --color-checks-header-label-text: #242424;\n --color-checks-header-label-open-text: #242424;\n --color-checks-header-icon: #242424;\n --color-checks-line-text: #242424;\n --color-checks-gate-text: #242424;\n --color-checks-logline-text: #242424;\n --color-checks-logline-error-text: #242424;\n --color-checks-logline-warning-text: #242424;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-ansi-white-bright: #181818;\n --color-btn-text: #242424;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-selected-text: #181818;\n --color-underlinenav-icon: #242424;\n --color-fg-default: #242424;\n --color-fg-muted: #242424;\n --color-neutral-emphasis-plus: #181818;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #242424;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"dark_high_contrast\"] {\n --color-diff-blob-addition-num-text: #242424;\n --color-diff-blob-deletion-num-text: #242424;\n --color-diff-blob-expander-icon: #242424;\n --color-prettylights-syntax-storage-modifier-import: #242424;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-markup-italic: #242424;\n --color-prettylights-syntax-markup-bold: #242424;\n --color-prettylights-syntax-markup-ignored-text: #242424;\n --color-codemirror-text: #242424;\n --color-codemirror-linenumber-text: #242424;\n --color-codemirror-cursor: #242424;\n --color-codemirror-matchingbracket-text: #242424;\n --color-checks-text-primary: #242424;\n --color-checks-text-secondary: #242424;\n --color-checks-btn-icon: #242424;\n --color-checks-btn-hover-icon: #242424;\n --color-checks-input-text: #242424;\n --color-checks-input-focus-text: #242424;\n --color-checks-dropdown-text: #242424;\n --color-checks-dropdown-hover-text: #242424;\n --color-checks-dropdown-btn-hover-text: #242424;\n --color-checks-header-label-text: #242424;\n --color-checks-header-label-open-text: #242424;\n --color-checks-header-icon: #242424;\n --color-checks-line-text: #242424;\n --color-checks-gate-text: #242424;\n --color-checks-logline-text: #242424;\n --color-checks-logline-error-text: #242424;\n --color-checks-logline-warning-text: #242424;\n --color-mktg-btn-bg: #202020;\n --color-avatar-bg: hsla(0, 0%, 0%, .1);\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-logo: #181818;\n --color-ansi-white-bright: #181818;\n --color-btn-text: #242424;\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-danger-selected-text: #181818;\n --color-underlinenav-icon: #242424;\n --color-fg-default: #242424;\n --color-fg-muted: #242424;\n --color-neutral-emphasis-plus: #181818;\n --color-primer-border-contrast: hsla(0, 0%, 0%, .2);\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #242424;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"dark_colorblind\"],\n [data-color-mode=\"light\"][data-light-theme=\"dark_colorblind\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-done-emphasis: #53387a;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"dark_colorblind\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-done-emphasis: #53387a;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"dark_colorblind\"] {\n --color-mktg-btn-bg: #202020;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-done-emphasis: #53387a;\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n }\n }\n .ActionList-item {\n background-color: transparent;\n }\n @media (hover: hover) and (pointer: fine) {\n .ActionList-item[aria-disabled=\"true\"]:hover {\n background-color: transparent;\n }\n }\n .rule, a {\n background-color: transparent;\n }\n .btn-danger.disabled, .btn-danger:disabled,\n .btn-danger[aria-disabled=\"true\"], .btn-outline.disabled,\n .btn-outline:disabled, .btn-outline[aria-disabled=\"true\"] {\n box-shadow: none;\n }\n .btn-invisible, .btn-link {\n background-color: transparent;\n }\n .btn-invisible, .btn-invisible.zeroclipboard-is-hover, .btn-invisible:hover {\n box-shadow: none;\n }\n .btn-invisible.disabled, .btn-invisible:disabled,\n .btn-invisible[aria-disabled=\"true\"], .btn-octicon {\n background-color: transparent;\n }\n .btn-octicon {\n box-shadow: none;\n }\n .close-button, .inline-form .btn-plain {\n background-color: transparent;\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .filter-list.pjax-active .filter-item, .SideNav-item, .SideNav-subItem,\n .tabnav-tab, .UnderlineNav-item {\n background-color: transparent;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .flash-close {\n background: none;\n }\n .dropdown-item:focus > .Label, .dropdown-item:hover > .Label {\n border-color: currentcolor;\n }\n .dropdown-signout {\n background: none;\n }\n .Header-input {\n box-shadow: none;\n }\n .markdown-body .emoji, .markdown-body pre > code, .markdown-body pre code,\n .markdown-body pre tt, .markdown-body table img, .SelectMenu-closeButton,\n .SelectMenu-tab {\n background-color: transparent;\n }\n @media (min-width: 544px) {\n .SelectMenu-tab[aria-selected=\"true\"] {\n box-shadow: none;\n }\n }\n .Toast-dismissButton {\n background-color: transparent;\n }\n .btn-mktg {\n background: linear-gradient(180deg, hsla(0, 0%, 0%, .15) 0%, transparent 100%), var(--color-mktg-btn-bg) !important;\n }\n .btn-mktg::before {\n background: linear-gradient(180deg, hsla(0, 0%, 0%, .15) 0%, transparent 100%) !important;\n }\n .btn-mktg.focus:disabled, .btn-mktg:focus:disabled, .btn-mktg:hover:disabled {\n box-shadow: none !important;\n }\n .btn-muted-mktg, .btn-subtle-mktg {\n background: none !important;\n }\n .btn-subtle-mktg {\n box-shadow: none !important;\n }\n .btn-subtle-mktg::before {\n background: none !important;\n }\n .btn-signup-mktg {\n color: #fff;\n background: linear-gradient(180deg, rgba(52, 183, 89, .15) 0%, rgba(46, 164, 79, 0) 100%), #373 !important;\n }\n .graphiql-ide {\n border-top-color: #343434;\n }\n .graphiql-ide.signed-out::after {\n background-color: #343434;\n }\n /* end graphql.github.com rules */\n /* manual overrides */\n .btn.hover, .btn:hover {\n background-color: #282828;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n }\n .graphiql-container .show-btn {\n border: solid 1px #343434;\n background: #222;\n color: #c6c6c6;\n }\n .graphiql-container .doc-deprecation {\n box-shadow: inset 0 0 1px #cb4;\n background: #261d08;\n color: #ddd;\n }\n .graphiql-container .doc-deprecation::before {\n color: #cb4;\n }\n .graphiql-container .docExplorerShow, .graphiql-container .historyShow,\n .graphiql-container .topBar {\n background: #222;\n }\n .graphiql-container .docExplorerShow {\n border-left: 1px solid #444;\n }\n .graphiql-container .toolbar-button, .graphiql-container .execute-button {\n box-shadow: none;\n }\n .graphiql-container .toolbar-button:hover,\n .graphiql-container .execute-button:hover {\n background: #343434;\n }\n .graphiql-explorer-root input[style*=\"color: rgb(210, 5, 78)\"] {\n border-color: currentcolor currentcolor #999 !important;\n background-color: #181818;\n }\n .graphiql-container .search-box input {\n background-color: #181818;\n }\n .graphiql-explorer-node span[style*=\"color: rgb(31, 97, 160)\"] {\n color: #4f8cc9 !important;\n }\n .graphiql-explorer-node span[style*=\"color: rgb(139, 43, 185)\"] {\n color: #9a6cdf !important;\n }\n #graphiql svg path[d*=\"2V16H2V2H16ZM16\"][fill=\"#CCC\"] {\n fill: #444;\n }\n #graphiql svg path[d*=\"0H2C0.9\"][fill=\"#666\"] {\n fill: #777;\n }\n .graphiql-ide.signed-out::after {\n background: #333;\n }\n .graphiql-container .CodeMirror-foldmarker {\n background: #4f8cc9 !important;\n }\n .graphiql-container .execute-button svg {\n fill: currentColor !important;\n }\n .graphiql-container div[style*=\"color: rgb(177, 26, 4)\"] {\n color: rgb(215, 38, 13) !important;\n }\n .graphiql-explorer-root input[style*=\"border-color: currentcolor currentcolor rgb(136, 136, 136)\"] {\n border-color: currentcolor currentcolor #999 !important;\n background-color: #000 !important;\n }\n .graphiql-container select[style*=\"background-color: white;\"] {\n background-color: #181818 !important;\n border-color: #444;\n }", + "start": 647108, + "domains": [ + "graphql.github.com" + ] + }, + { + "code": "img[src*=\"security-vulnerability.svg\"],\n img[src*=\"security-vulnerability-alert.svg\"], img[src*=\"security-policy.svg\"],\n img[src*=\"security-workspace-bg.svg\"],\n img[src*=\"security-workspace-comment-1.svg\"],\n img[src*=\"security-workspace-comment-2.svg\"],\n img[src*=\"security-workspace-changes.svg\"],\n img[src*=\"security-workspace-merge.svg\"], .section-security-alerts svg,\n img[src*=\"security-dependabot.svg\"], img.security-pr-merge,\n .section-security-patches-graph, img[src*=\"security-token-scanning.svg\"],\n img[src*=\"security-lgtm-vulnerability.svg\"],\n img[src*=\"security-lgtm-alert.svg\"], .actions-pr-checks {\n filter: invert(90%) hue-rotate(-180deg) !important;\n }\n .section-actions-hero .actions-hero-bg, .section-actions-hero .actions-hero {\n filter: invert(1) contrast(70%) brightness(80%);\n }\n .section-security-alerts-graph svg, .section-security-patches-graph {\n filter: none !important;\n }\n [style=\"background: #fff; box-shadow: 0 10px 50px 30px #fff;\"] {\n background: none !important;\n box-shadow: none !important;\n }\n [stroke=\"#E1E4E8\"] {\n stroke: #484848;\n }\n [stroke=\"#B08800\"] {\n stroke: #652;\n }\n [fill=\"#FFFDEF\"] {\n fill: #321;\n }\n [fill=\"#6A737D\"] {\n fill: #444;\n }\n [fill=\"white\"]:not([d*=\"M279.27\"]) {\n fill: #111;\n }\n [fill=\"black\"] {\n fill: #eee;\n }\n svg.security-hero, .actions-hero {\n filter: brightness(200%) contrast(80%);\n }\n .section-actions-workflow-logs::before, .actions-pricing-private::before {\n filter: brightness(60%);\n }", + "start": 687280, + "regexps": [ + "^https?://github\\.com/features/(security|actions)" + ] + }, + { + "code": "img[src*=\"img-\"], img[src*=\"security\"] {\n filter: invert(90%) hue-rotate(-180deg) !important;\n }\n img[src*=\"img-share-achievements.png\"] {\n filter: invert(100%) hue-rotate(-85deg) !important;\n }\n .jumbotron-codelines {\n color: #dcdcdc;\n }", + "start": 688885, + "regexps": [ + "^https?://github\\.com/(features|security).*" + ] + }, + { + "code": "h1, h2, h3, h4, h5, h6 {\n color: #c6c6c6;\n }\n .bg-dots-gray {\n opacity: .2;\n }", + "start": 689190, + "domains": [ + "resources.github.com" + ] + }, + { + "code": "header img[src*=\"logo\"] {\n opacity: .7;\n }\n article h2 {\n color: #c6c6c6;\n }\n ol.toc > li a.active {\n color: #aaa;\n }", + "start": 689327, + "domains": [ + "guides.github.com" + ] + }, + { + "code": "* {\n box-sizing: border-box;\n }\n body {\n color: #e0e0e0;\n background-color: #202020;\n background-image: var(--ghd-bg-img);\n background-clip: border-box;\n background-origin: padding-box;\n background-attachment: scroll;\n background-repeat: repeat !important;\n background-size: auto !important;\n background-position: left top !important;\n }\n .markdown-body img {\n background-color: #181818;\n background: none;\n }\n a {\n color: #4f8cc9;\n background-color: transparent;\n }\n .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4,\n .markdown-body h5, .markdown-body h6 {\n border-bottom: 1px solid #444;\n }\n .border-gray-light, hr {\n border-color: #444 !important;\n }\n .markdown-body table th, .markdown-body table td {\n border: 1px solid #444;\n }\n .text-gray {\n color: #aaa !important;\n }\n .markdown-body table tr {\n background-color: #181818;\n border-top: 1px solid #444;\n }\n .markdown-body table tr:nth-child(2n) {\n background-color: #202020;\n }\n /* style 404 page e.g. http://stylishthemes.github.io/ */\n p {\n color: #bebebe;\n }\n #suggestions a {\n color: #9e9e9e;\n }", + "start": 689514, + "domains": [ + "stylishthemes.github.io" + ] + }, + { + "code": ".bg-blue-4, .illflow-blue .selected {\n background: #182030 !important;\n }", + "start": 690751, + "urlPrefixes": [ + "https?://github.com/personal" + ] + }, + { + "code": ".btn-blue {\n background-image: linear-gradient(-180deg, rgba(79, 140, 201, 1), rgba(79, 140, 201, .9) 90%) !important;\n }\n .btn-blue.hover, .btn.btn-blue:hover {\n background-image: linear-gradient(-180deg, rgba(79, 140, 201, .9), rgba(79, 140, 201, .8) 90%) !important;\n border-color: rgba(79, 140, 201, .3) !important;\n }", + "start": 690899, + "regexps": [ + "^https?://(education|lab)\\.github\\.com" + ] + }, + { + "code": "svg {\n background: var(--ghd-code-background);\n }\n svg #surface1 g[style*=\"fill\"] {\n fill: var(--ghd-code-color) !important;\n }", + "start": 691324, + "regexps": [ + "^https?://(render)\\.githubusercontent\\.com\\/render\\/math.*" + ] + }, + { + "code": "svg {\n background: var(--ghd-code-background);\n }", + "start": 691519, + "domains": [ + "camo.githubusercontent.com" + ] + }, + { + "code": "/* Styles the payment form iframe */\n body, label {\n background: transparent !important;\n color: #bebebe !important;\n }\n input, select {\n background: #181818 !important;\n color: #bebebe !important;\n border-color: #343434 !important;\n }\n select {\n background: #181818 url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAQAAAAua3X8AAAARklEQVR4AWNABWcazjQg8zGl/wNhA15piBL80gglmNKYSjClMZUgpDGVwKXxKBl4QNiRBLxJIKAIBzXhyCIc3YQTDMEkBwBplPJRxEMa4wAAAABJRU5ErkJggg==\") no-repeat right 8px center !important;\n background-size: 8px 10px !important;\n }\n input:focus, select:focus {\n border-color: #4f8cc9 !important;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075), 0 0 2px #4f8cc9 !important;\n outline-color: #4f8cc9 !important;\n }\n .btn-submit {\n background-color: #373;\n background-image: none;\n border-color: rgba(220, 220, 220, .15);\n }\n .btn-submit:hover {\n background-color: #484;\n background-image: none;\n }\n .popup, #z_hppm_iframe {\n background-color: var(--ghd-bg-color);\n }\n /* fix top white line */\n .whitespace {\n margin: -1px !important;\n }", + "start": 691645, + "regexps": [ + "^https?://www\\.zuora\\.com.*github\\.com.*" + ] + }, + { + "code": ":root {\n --jp-content-font-color1: #ccc;\n --jp-content-font-color2: #bbb;\n --jp-content-font-color3: #aaa;\n --jp-content-font-color4: #999;\n }\n /* generated render.githubusercontent.com rules */\n body, .render-shell {\n background: var(--ghd-code-background) !important;\n }\n .render-shell .mermaid {\n background: var(--color-canvas-default) !important;\n }\n .render-shell img.math {\n filter: invert(100%) hue-rotate(180deg) !important;\n }\n .render-shell .output_area .output_png img {\n filter: invert(90.5%) hue-rotate(180deg) saturate(200%) brightness(85%) !important;\n }\n .render-shell .output_area .output_png:hover img {\n filter: none !important;\n }\n .render-shell .added-frame, .render-shell .deleted-frame {\n box-sizing: border-box !important;\n }\n .render-shell .swipe-frame .deleted-frame {\n margin-left: 2px !important;\n }\n .render-shell:not([data-document-path]) img, .render-shell canvas {\n border: none !important;\n background-image: url(\"data:image/gif;base64,R0lGODlhCgAKAIAAABoaGgAAACwAAAAACgAKAAACEYQdmYcaDNxjEspKndVZbc8UADs=\") !important;\n }\n /* https://github.com/StylishThemes/GitHub-Dark/issues/1209 */\n .render-shell:not([data-document-path]) img:not([src$=\".svg\" i]):not(.leaflet-tile):not(.leaflet-marker-icon) {\n width: 100% !important;\n height: 100% !important;\n }\n img.leaflet-marker-icon, img.leaflet-marker-icon:hover {\n background: none !important;\n }\n .render-shell:not([data-document-path]) img:not(.leaflet-tile):not(.leaflet-marker-icon):hover,\n .render-shell:not([data-document-path]) canvas:hover {\n background-image: url(\"data:image/gif;base64,R0lGODlhCgAKAIAAAOXl5f///yH5BAAAAAAALAAAAAAKAAoAAAIRhB2ZhxoM3GMSykqd1VltzxQAOw==\") !important;\n }", + "start": 692913, + "domains": [ + "render.githubusercontent.com", + "notebooks.githubusercontent.com", + "viewscreen.githubusercontent.com" + ] + }, + { + "code": "/* begin githubstatus.com rules */\n ._2NFgh0Z6tkGorUToiId47k [class^=\"Content__ChildWrapper\"] > [class^=\"Content\"],\n ._3c5eahGieigDTmRHO-d7l3 [class^=\"Content__ChildWrapper\"] > [class^=\"Content\"] {\n border-color: #767676;\n background-color: #181818;\n }\n ._2NFgh0Z6tkGorUToiId47k .status-dropdown__option::before,\n ._3c5eahGieigDTmRHO-d7l3 .status-dropdown__option::before {\n background-color: #181818;\n }\n ._3DswDMo3rPhwmGGm-RnGoI td[aria-selected=\"true\"] div {\n color: #fff;\n }\n ._2-I6T1F9kpUp2j9G31LMYN {\n border-color: #343434;\n }\n ._2wOD5aJH3F-IjQcHIh8Udc {\n background-color: #181818;\n }\n ._3qy5Vy5niTA5YAR6-x9PZ0 {\n color: #fff;\n }\n ._1JN3aEKlPD7X5jqB1dXYzx input, ._34-pLs8rXfQ3pFVMFFpFqG {\n border-color: #767676;\n }\n ._2dv0LNfUzjAAPh-wPACjXb {\n background-color: #181818;\n }\n .wPHh9nW_2p42Vk16HDf2n {\n color: #fff;\n }\n .ak-editor-wrapper pre, .markdown-display pre {\n background-color: #222;\n }\n .ak-editor-wrapper pre code, .markdown-display pre code {\n background-color: transparent;\n }\n .ak-editor-wrapper table, .markdown-display table {\n border-color: #343434;\n }\n .ak-editor-wrapper table td, .markdown-display table td {\n border-top-color: #343434;\n }\n .ak-editor-wrapper table td + td, .ak-editor-wrapper table th + th,\n .markdown-display table td + td, .markdown-display table th + th {\n border-left-color: #343434;\n }\n abbr, address, article, aside, audio, b, blockquote, body, canvas, caption,\n cite, code, dd, del, details, dfn, div, dl, dt, em, fieldset, figcaption,\n figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, html, i,\n iframe, img, ins, kbd, label, legend, li, mark, menu, nav, object, ol, p,\n pre, q, samp, section, small, span, strong, sub, summary, sup, time, ul, var,\n video {\n background-color: transparent;\n }\n textarea::placeholder {\n color: #767676;\n }\n .caret {\n border-top-color: #f0f0f0;\n }\n .well {\n border-color: #343434;\n }\n abbr {\n border-bottom-color: #343434;\n }\n pre.code-display {\n background-color: #222;\n }\n pre.code-display code {\n background-color: transparent;\n }\n input::-webkit-input-placeholder {\n color: #767676;\n }\n input:-moz-placeholder {\n color: #767676;\n }\n .chzn-container-single .chzn-single, input[type=\"email\"],\n input[type=\"number\"], input[type=\"password\"], input[type=\"text\"], select,\n textarea {\n border-color: #767676;\n }\n .chzn-container-single .chzn-single, input[type=\"email\"],\n input[type=\"password\"], input[type=\"text\"], textarea {\n color: #9b9b9b;\n }\n input[disabled], select[disabled], select[readonly], textarea[disabled] {\n background-color: #222;\n border-color: #343434;\n }\n input[disabled]:hover, select[disabled]:hover, select[readonly]:hover,\n textarea[disabled]:hover {\n border-color: #343434;\n }\n .controls.append label, .controls.prepend label {\n box-shadow: 0 1px 0 var(--ghd-bg-color) inset;\n -moz-box-shadow: 0 1px 0 #181818 inset;\n -webkit-box-shadow: 0 1px 0 #181818 inset;\n background-color: #242424;\n color: #9b9b9b;\n }\n .controls.append label.prepender, .controls.prepend label.prepender {\n border-right-color: #5a5a5a;\n }\n .controls.append label.appender, .controls.prepend label.appender {\n border-left-color: #5a5a5a;\n }\n .form-bordered .control-group {\n border-bottom-color: #343434;\n }\n .form-bordered .control-group.first-border {\n border-top-color: #343434;\n }\n .fa-border {\n border-color: #2c2c2c;\n }\n .fa-inverse {\n color: #fff;\n }\n .tooltipster-sidetip .tooltipster-box {\n border-color: #f0f0f0;\n }\n .tooltipster-sidetip .tooltipster-content {\n color: #fff;\n }\n .tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border {\n border-bottom-color: #f0f0f0;\n }\n .tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border {\n border-left-color: #f0f0f0;\n }\n .tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border {\n border-right-color: #f0f0f0;\n }\n .tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border {\n border-top-color: #f0f0f0;\n }\n .cpt-admin-callout.uptime-edit .label.set {\n color: #fff;\n }\n .cpt-admin-simple-search-form button {\n border-color: #767676;\n }\n .carousel-control {\n color: #fff;\n border-color: var(--ghd-bg-color);\n }\n .carousel-control:hover {\n color: #fff;\n }\n .carousel-caption {\n background-color: #c6c6c6;\n }\n .carousel-caption h4, .carousel-caption p {\n color: #fff;\n }\n .component-statuses .component-status-container .component-dropdown-selector.dropdown-open .component-status-display {\n background-color: #202020;\n }\n .component-statuses .component-status-container .component-dropdown-selector .status-dropdown {\n border-color: #343434;\n background-color: #181818;\n }\n .component-statuses .component-status-container .component-dropdown-selector .status-dropdown .status-option:hover,\n .datepicker {\n background-color: #181818;\n }\n .datepicker {\n box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n border-color: rgba(255, 255, 255, .7);\n }\n .datepicker::before {\n border-bottom-color: #5a5a5a;\n border-bottom-color: rgba(255, 255, 255, .7);\n }\n .datepicker::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .datepicker td.day:hover {\n background-color: #2c2c2c;\n }\n .datepicker td.active, .datepicker td.active:hover {\n color: #fff;\n }\n .datepicker td span:hover {\n background-color: #2c2c2c;\n }\n .datepicker td span.active {\n color: #fff;\n }\n .datepicker thead tr:first-child th:hover {\n background-color: #2c2c2c;\n }\n .dropdown .dropdown-menu {\n box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n background-color: #181818;\n border-color: rgba(255, 255, 255, .7);\n }\n .dropdown .dropdown-menu li:hover {\n background-color: #202020;\n }\n .dropdown .dropdown-menu li a {\n color: #c6c6c6;\n }\n .dropdown .dropdown-menu li.divider {\n background-color: #343434;\n }\n .search-bar i.fa-times, .search-bar i.mag-glass {\n color: #5a5a5a;\n }\n .es-menu {\n background-color: #181818;\n }\n .es-menu .item div .fa, .es-menu .item div i.component-status {\n color: #c6c6c6;\n }\n .es-highlight {\n color: #9b9b9b;\n }\n #es-search-field {\n box-shadow: none !important;\n }\n .grouped-items-selector {\n border-color: #767676;\n }\n .grouped-items-selector.inline {\n box-shadow: none;\n }\n .grouped-items-selector.inline .border-color {\n border-color: #343434;\n }\n .grouped-items-selector.inline .grouped-item.active {\n color: #c6c6c6;\n }\n .grouped-items-selector .body .grouped-items .grouped-item,\n .grouped-items-selector .body .grouped-items .grouped-item.open {\n border-color: #343434;\n }\n .grouped-items-selector .footer .close-button {\n background-color: #343434;\n }\n .loader-overlay {\n background-color: hsla(0, 0%, 0%, .8);\n }\n .sk-fading-circle .sk-circle::before {\n background-color: #c6c6c6;\n }\n .modal {\n background-color: #181818;\n border-color: #767676;\n }\n .modal hr {\n background-color: #343434;\n }\n .modal .headless-close {\n color: #f0f0f0;\n text-shadow: 0 1px 0 #181818;\n }\n .modal .headless-close:hover {\n color: #f0f0f0;\n }\n .modal .modal-header {\n border-bottom-color: #343434;\n }\n .modal .modal-header .close {\n color: #f0f0f0;\n text-shadow: 0 1px 0 #181818;\n }\n .modal .modal-header .close:hover {\n color: #f0f0f0;\n }\n .modal .modal-footer {\n background-color: #222;\n border-top-color: #343434;\n }\n .modal-backdrop {\n background-image: -moz-radial-gradient(50% 50%, circle closest-corner, rgba(0, 0, 0, .7), #f0f0f0 100%);\n background-image: -webkit-radial-gradient(50% 50%, circle closest-corner, rgba(0, 0, 0, .7), #f0f0f0 100%);\n background-image: -o-radial-gradient(50% 50%, circle closest-corner, rgba(0, 0, 0, .7), #f0f0f0 100%);\n }\n .cpt-notification {\n color: #fff;\n }\n .cpt-notification .close {\n color: hsla(0, 0%, 100%, .2);\n }\n .cpt-notification .close:hover, .cpt-notification a:not(.close),\n .cpt-notification a:not(.close):hover {\n color: #fff;\n }\n .cpt-notification.dotted, .cpt-notification.dotted a,\n .cpt-notification.dotted a:hover {\n color: #767676;\n }\n .panel {\n background-color: #181818;\n }\n .panel.panel-default {\n border-color: #343434;\n }\n .panel.panel-default .panel-heading {\n color: #c6c6c6;\n background-color: #222;\n border-color: #343434;\n }\n .popover {\n box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 5px 10px rgba(255, 255, 255, .7);\n background-color: #181818;\n border-color: rgba(255, 255, 255, .7);\n }\n .popover.top .arrow {\n border-top-color: #767676;\n }\n .popover.top .arrow::after {\n border-top-color: var(--ghd-bg-color);\n }\n .popover.right .arrow {\n border-right-color: #767676;\n }\n .popover.right .arrow::after {\n border-right-color: var(--ghd-bg-color);\n }\n .popover.bottom .arrow {\n border-bottom-color: #767676;\n }\n .popover.bottom .arrow::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .popover.left .arrow {\n border-left-color: #767676;\n }\n .popover.left .arrow::after {\n border-left-color: var(--ghd-bg-color);\n }\n .popover .popover-title {\n background-color: #222;\n border-bottom-color: #2c2c2c;\n }\n .cpt-progress {\n background-color: #202020;\n }\n .cpt-progress .bar {\n color: #fff;\n }\n .cpt-table .content {\n background-color: #181818;\n }\n .cpt-table .content .table-row.blank-state {\n border-color: #343434 !important;\n }\n .cpt-tabular-table {\n border-color: #343434;\n }\n .cpt-tabular-table td {\n border-top-color: #343434;\n }\n .cpt-tabular-table td + td, .cpt-tabular-table th + th {\n border-left-color: #343434;\n }\n .cpt-tabular-table.striped tbody tr:nth-child(odd) td,\n .cpt-tabular-table .table-striped tbody tr:nth-child(odd) th {\n background-color: #181818;\n }\n .cpt-tabs:not(.unstyled) {\n border-bottom-color: #343434;\n }\n .cpt-tabs:not(.unstyled) li:not(.active) a:hover {\n background-color: #2c2c2c;\n color: #9b9b9b;\n }\n .cpt-tabs:not(.unstyled) li:not(.active) a:hover.disabled {\n background-color: transparent;\n }\n .cpt-tabs:not(.unstyled) li.active a {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n }\n .cpt-tabs:not(.unstyled).mobile {\n border-color: #343434;\n }\n .cpt-tabs:not(.unstyled).mobile::after {\n color: #5a5a5a;\n }\n .cpt-tabs:not(.unstyled).mobile.open li:last-of-type {\n border-bottom-color: #343434;\n }\n .cpt-tabs:not(.unstyled).mobile.open li a {\n border-left-color: #343434;\n border-right-color: #343434;\n }\n .cpt-tabs:not(.unstyled).mobile li.active a,\n .cpt-tabs:not(.unstyled).mobile li:not(.active) a:hover,\n .cpt-tabs:not(.unstyled).mobile li a {\n background-color: #181818;\n }\n .cpt-toggle {\n box-shadow: none;\n background: none;\n background-color: #343434;\n }\n .cpt-toggle .bubble {\n background-color: #181818;\n }\n .cpt-toggle.on .text {\n color: #fff;\n }\n .tooltip-base {\n color: #9b9b9b;\n border-color: #343434;\n }\n .tooltip-base:hover {\n color: #9b9b9b;\n }\n .tooltip.top .tooltip-arrow {\n border-top-color: #f0f0f0;\n }\n .tooltip.right .tooltip-arrow {\n border-right-color: #f0f0f0;\n }\n .tooltip.bottom .tooltip-arrow {\n border-bottom-color: #f0f0f0;\n }\n .tooltip.left .tooltip-arrow {\n border-left-color: #f0f0f0;\n }\n .tooltip .tooltip-inner {\n color: #fff;\n }\n .cpt-button {\n color: #fff;\n color: #fff !important;\n }\n .cpt-button:hover {\n color: #fff;\n }\n .cpt-button .caret {\n border-top-color: var(--ghd-bg-color);\n }\n .cpt-button.style-outline {\n box-shadow: none;\n background-color: transparent;\n border-color: hsla(0, 0%, 0%, .8);\n }\n .cpt-button.style-outline:hover {\n border-color: var(--ghd-bg-color);\n }\n .cpt-button.style-outline.color-grey {\n border-color: #767676;\n }\n .cpt-button.disabled {\n box-shadow: none;\n }\n .cpt-button.pressed, .cpt-button:active {\n box-shadow: inset 0 0 5px rgba(255, 255, 255, .7);\n -moz-box-shadow: inset 0 0 5px rgba(255, 255, 255, .7);\n -webkit-box-shadow: inset 0 0 5px rgba(255, 255, 255, .7);\n }\n .domain-helper .domain-content.domain-unset {\n border-color: #5a5a5a;\n }\n .domain-helper .domain-header.domain-unset {\n background-color: #5a5a5a;\n }\n .domain-helper .domain-header.domain-deprecated,\n .domain-helper .domain-header.domain-invalid,\n .domain-helper .domain-header.domain-valid {\n color: #fff;\n }\n .domain-helper .dns-records {\n border-bottom-color: #2c2c2c;\n }\n .domain-helper .dns-records .dns-records-header {\n background-color: #2c2c2c;\n }\n .domain-helper .dns-records .dns-records-row {\n border-color: #2c2c2c;\n }\n .cpt-pill-group button.pill {\n background-color: #181818;\n }\n .cpt-pill-group button.pill.active {\n border-color: #343434;\n color: #c6c6c6;\n }\n .updates-dropdown-container .updates-dropdown {\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-nav {\n border-color: rgba(255, 255, 255, .7);\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-nav a {\n background-color: #202020;\n border-right-color: #343434;\n border-bottom-color: #343434;\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-nav a:last-of-type {\n color: #9b9b9b !important;\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-nav a.active {\n background-color: #9b9b9b;\n }\n .updates-dropdown-container .updates-dropdown .updates-dropdown-section {\n border-color: rgba(255, 255, 255, .7);\n background-color: #181818;\n }\n .activate-page-prompt, .activate-page-prompt a, .flat-button,\n .flat-button:hover,\n .layout-content.status .masthead-container.premium .masthead .text-container .page-name,\n .layout-content.status .masthead-container.premium .masthead .text-container .page-name a,\n .layout-content.status .masthead-container .updates-dropdown-container .show-updates-dropdown,\n .layout-content.status .masthead-container .updates-dropdown-container .show-updates-dropdown:hover,\n .pau-preview {\n color: #fff;\n }\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident.impact-none .incident-title {\n background-color: #c6c6c6;\n }\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident.impact-none .updates {\n border-color: #5a5a5a;\n }\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident .incident-title {\n text-shadow: 0 1px 0 rgba(255, 255, 255, .7);\n }\n .layout-content.status.status-index .page-status .status,\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident .incident-title a,\n .layout-content.status.status-index .unresolved-incidents .unresolved-incident .incident-title a:hover {\n color: #fff;\n }\n .layout-content.status.status-index .page-status .last-updated-stamp {\n color: hsla(0, 0%, 100%, .2);\n }\n .layout-content.status.status-full-history .show-filter.open {\n color: #fff;\n }\n .layout-content.status.status-full-history .uptime-calendar #uptime-tooltip {\n background-color: #181818;\n border-color: rgba(255, 255, 255, .7);\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n .layout-content.status.status-full-history .uptime-calendar #uptime-tooltip #box-arrow {\n background-color: #181818;\n border-left-color: rgba(255, 255, 255, .7);\n border-top-color: rgba(255, 255, 255, .7);\n box-shadow: 0 0 10px rgba(255, 255, 255, .7);\n }\n .layout-content.status.status-full-history .uptime-calendar #uptime-tooltip .tooltip-box {\n box-shadow: none;\n }\n .layout-content.status-internal {\n border-color: #343434;\n color: #c6c6c6;\n }\n .layout-content.status-internal .message-container {\n box-shadow: 0 0 25px rgba(255, 255, 255, .7);\n -moz-box-shadow: 0 0 25px rgba(255, 255, 255, .7);\n -webkit-box-shadow: 0 0 25px rgba(255, 255, 255, .7);\n background-color: #181818;\n }\n .layout-content.status-internal .powered-by-container,\n .layout-content.status-internal .powered-by-container a,\n .layout-content.status-internal .powered-by-container a:hover {\n color: #fff;\n color: hsla(0, 0%, 0%, .85);\n }\n #uptime-tooltip .pointer-smaller {\n border-bottom-color: var(--ghd-bg-color);\n }\n #uptime-tooltip .tooltip-box {\n border-color: rgba(255, 255, 255, .7);\n background-color: #181818;\n }\n #uptime-tooltip .tooltip-close i {\n color: #5a5a5a;\n }\n #uptime-tooltip .outage-field {\n border-color: transparent;\n }\n #uptime-tooltip .related-events .related-event .related-event-link {\n color: #c6c6c6;\n }\n .page-deleted {\n box-shadow: none;\n }\n a {\n background-color: transparent;\n color: #4f8cc9;\n }\n mark {\n color: #f0f0f0;\n }\n body {\n color: #c6c6c6;\n background-color: #181818;\n }\n .rule {\n border-bottom-color: #343434;\n }\n .border {\n border-color: #343434 !important;\n }\n .border-y {\n border-top-color: #343434 !important;\n border-bottom-color: #343434 !important;\n }\n .border-blue {\n border-color: #4f8cc9 !important;\n }\n .border-blue-light {\n border-color: #246 !important;\n }\n .border-green {\n border-color: #373 !important;\n }\n .border-green-light {\n border-color: #040 !important;\n }\n .border-red, .border-red-light {\n border-color: #d82828 !important;\n }\n .border-purple {\n border-color: #8348af !important;\n }\n .border-yellow {\n border-color: #cb4 !important;\n }\n .border-gray-light {\n border-color: #2c2c2c !important;\n }\n .border-gray-dark {\n border-color: #343434 !important;\n }\n .border-black-fade {\n border-color: rgba(220, 220, 220, .15) !important;\n }\n .border-top {\n border-top-color: #343434 !important;\n }\n .border-right {\n border-right-color: #343434 !important;\n }\n .border-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-left {\n border-left-color: #343434 !important;\n }\n .box-shadow {\n box-shadow: 0 1px 1px #000 !important;\n }\n .box-shadow-medium {\n box-shadow: 0 1px 5px #000 !important;\n }\n .box-shadow-large {\n box-shadow: 0 1px 15px #000 !important;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .bg-white {\n background-color: #181818 !important;\n }\n .bg-blue {\n background-color: #4f8cc9 !important;\n }\n .bg-blue-light {\n background-color: #182030 !important;\n }\n .bg-gray {\n background-color: #222 !important;\n }\n .bg-gray-light {\n background-color: #181818 !important;\n }\n .bg-green {\n background-color: #484 !important;\n }\n .bg-green-light {\n background-color: #002800 !important;\n }\n .bg-red {\n background-color: #d82828 !important;\n }\n .bg-red-light {\n background-color: #300 !important;\n }\n .bg-yellow {\n background-color: #cb4 !important;\n }\n .bg-yellow-light {\n background-color: #651 !important;\n }\n .bg-purple {\n background-color: #8348af !important;\n }\n .bg-purple-light {\n background-color: #213 !important;\n }\n .text-blue {\n color: #4f8cc9 !important;\n }\n .text-red {\n color: #d82828 !important;\n }\n .text-gray-light {\n color: #9b9b9b !important;\n }\n .text-gray {\n color: #afafaf !important;\n }\n .text-gray-dark {\n color: #c6c6c6 !important;\n }\n .text-green {\n color: #484 !important;\n }\n .text-orange {\n color: #f3582c !important;\n }\n .text-orange-light {\n color: #fb8532 !important;\n }\n .text-purple {\n color: #8348af !important;\n }\n .text-white {\n color: #fff !important;\n }\n .bg-pending, .text-pending {\n color: #cb4 !important;\n }\n .link-gray {\n color: #afafaf !important;\n }\n .link-gray:hover {\n color: #4f8cc9 !important;\n }\n .link-gray-dark {\n color: #c6c6c6 !important;\n }\n .link-gray-dark:hover, .link-hover-blue:hover {\n color: #4f8cc9 !important;\n }\n .muted-link {\n color: #afafaf !important;\n }\n .muted-link:hover {\n color: #4f8cc9 !important;\n }\n .details-overlay-dark[open] > summary::before {\n background-color: rgba(220, 220, 220, .5);\n }\n .lead {\n color: #afafaf;\n }\n .text-emphasized {\n color: #c6c6c6;\n }\n .text-shadow-dark {\n text-shadow: 0 1px 1px rgba(220, 220, 220, .25), 0 1px 25px rgba(27, 31, 35, .75);\n }\n .text-shadow-light {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n body {\n background-color: #222;\n }\n .component-container, .components-container {\n background-color: #181818;\n }\n .component-container .status-msg {\n color: #9b9b9b;\n }\n .incident-title + .updates {\n background-color: #181818;\n }\n .page-footer {\n border-top-color: #343434 !important;\n }\n body.history .history-backpage {\n background-color: #181818;\n }\n .component-items-selector .grouped-item:hover {\n background-color: #222;\n }\n .component-items-selector .active, .component-items-selector .active:hover {\n color: #fff;\n background-color: #4f8cc9;\n }\n .incident-list::before, .status-day::before {\n background-color: #444;\n }\n .status-day > .date::before {\n background-color: #181818;\n }\n .month-title {\n border-bottom-color: #343434 !important;\n }\n .incident-container::before {\n background-color: #444;\n }\n .incident-container .incident-title::before {\n background-color: #444;\n border-color: #202020;\n }\n .update.investigating > strong {\n color: #cb4;\n }\n .update.resolved > strong {\n color: #484;\n }\n .flat-button, .history-header .show-filter {\n background-color: #242424 !important;\n background-image: linear-gradient(-180deg, #202020 0%, #181818 90%) !important;\n border-color: rgba(220, 220, 220, .2) !important;\n color: #c6c6c6 !important;\n box-shadow: #000 0 0 0 inset !important;\n }\n .updates-dropdown-container .updates-dropdown {\n background-color: #181818;\n }\n .updates-dropdown-container .updates-dropdown-nav::before {\n color: #c6c6c6;\n }\n .updates-dropdown-container #updates-dropdown-close-btn {\n background-color: transparent;\n }\n #uptime-tooltip .tooltip-box, .grouped-items-selector,\n .layout-content.status.status-api .section .example-container .example-opener .color-secondary,\n .layout-content.status.status-full-history .history-nav a.current, body,\n div[id^=\"subscribe-modal\"], div[id^=\"subscribe-modal\"] .modal-footer {\n background-color: #181818;\n }\n #uptime-tooltip .pointer-container .pointer-smaller {\n border-bottom-color: var(--ghd-bg-color);\n }\n #uptime-tooltip .tooltip-box .tooltip-content .related-events .related-event a.related-event-link,\n .color-primary, .color-primary:hover, .grouped-item-label,\n .incident-history .impact-none,\n .layout-content.status-full-history .month .incident-container .impact-none,\n .layout-content.status-index .status-day .update-title.impact-none a,\n .layout-content.status-index .status-day .update-title.impact-none a:hover,\n .layout-content.status-index .timeframes-container .timeframe.active,\n .layout-content.status .grouped-items-selector.inline .grouped-item.active,\n .layout-content.status.status-full-history .history-nav a.current,\n .layout-content.status.status-full-history .history-nav a:not(.current):hover,\n .layout-content.status.status-index .components-statuses .component-container .name,\n .layout-content.status.status-index .incidents-list .incident-title.impact-none a,\n body.status, div[id^=\"subscribe-modal\"] .modal-header .close {\n color: #c6c6c6;\n }\n #uptime-tooltip .tooltip-box .tooltip-content .related-events #related-event-header,\n .color-secondary,\n .layout-content.status .grouped-items-selector.inline .grouped-item,\n .layout-content.status.status-full-history .history-footer .pagination a.disabled,\n .layout-content.status.status-full-history .history-nav a,\n .layout-content.status .table-row .date, small {\n color: #9b9b9b;\n }\n #uptime-tooltip .tooltip-box, .markdown-display table, .tooltip-base,\n body.status .layout-content.status .border-color, div[id^=\"subscribe-modal\"] {\n border-color: #343434;\n }\n .markdown-display table td, div[id^=\"subscribe-modal\"] .modal-footer {\n border-top-color: #343434;\n }\n div[id^=\"subscribe-modal\"] .modal-header .close:hover {\n color: #343434;\n }\n .markdown-display table td + td, .markdown-display table th + th {\n border-left-color: #343434;\n }\n #uptime-tooltip .pointer-container .pointer-larger,\n div[id^=\"subscribe-modal\"] .modal-header {\n border-bottom-color: #343434;\n }\n #uptime-tooltip .tooltip-box .outage-field {\n background-color: #282828;\n }\n .layout-content.status.status-index .page-status.status-major,\n .layout-content.status.status-index .status-day .update-title.impact-major a,\n .layout-content.status.status-index .status-day .update-title.impact-major a:hover,\n .layout-content.status.status-index .unresolved-incident.impact-major .incident-title {\n background-color: #fb8532;\n }\n .components-container .component-inner-container.status-orange .component-status,\n .components-container .component-inner-container.status-orange .icon-indicator,\n .incident-history .impact-major,\n .layout-content.status-full-history .month .incident-container .impact-major,\n .layout-content.status-incident .incident-name.impact-major,\n .layout-content.status-index .components-statuses .component-container.status-orange::after,\n .layout-content.status.status-index .incidents-list .incident-title.impact-major a,\n .status-orange .icon-indicator {\n color: #fb8532;\n }\n .layout-content.status.status-index .unresolved-incident.impact-major .updates {\n border-color: #fb8532;\n }\n .layout-content.status.status-index .page-status.status-minor,\n .layout-content.status.status-index .scheduled-incidents-container .tab,\n .layout-content.status.status-index .status-day .update-title.impact-minor a,\n .layout-content.status.status-index .status-day .update-title.impact-minor a:hover,\n .layout-content.status.status-index .unresolved-incident.impact-minor .incident-title {\n background-color: #cb4;\n }\n .components-container .component-inner-container.status-yellow .component-status,\n .components-container .component-inner-container.status-yellow .icon-indicator,\n .incident-history .impact-minor,\n .layout-content.status-full-history .month .incident-container .impact-minor,\n .layout-content.status-incident .incident-name.impact-minor,\n .layout-content.status-index .components-statuses .component-container.status-yellow::after,\n .layout-content.status.manage-subscriptions .confirmation-infobox .fa,\n .layout-content.status.status-index .incidents-list .incident-title.impact-minor a,\n .status-yellow .icon-indicator {\n color: #cb4;\n }\n .layout-content.status.status-index .scheduled-incidents-container,\n .layout-content.status.status-index .unresolved-incident.impact-minor .updates {\n border-color: #cb4;\n }\n .layout-content.status.status-index .page-status.status-maintenance,\n .layout-content.status.status-index .scheduled-incidents-container .tab,\n .layout-content.status.status-index .status-day .update-title.impact-maintenance a,\n .layout-content.status.status-index .status-day .update-title.impact-maintenance a:hover,\n .layout-content.status.status-index .unresolved-incident.impact-maintenance .incident-title {\n background-color: #4f8cc9;\n }\n .components-container .component-inner-container.status-blue .component-status,\n .components-container .component-inner-container.status-blue .icon-indicator,\n .incident-history .impact-maintenance,\n .layout-content.status-full-history .month .incident-container .impact-maintenance,\n .layout-content.status-incident .incident-name.impact-maintenance,\n .layout-content.status-index .components-statuses .component-container.status-blue::after,\n .layout-content.status.status-index .incidents-list .incident-title.impact-maintenance a,\n .status-blue .icon-indicator {\n color: #4f8cc9;\n }\n .layout-content.status.status-index .scheduled-incidents-container,\n .layout-content.status.status-index .unresolved-incident.impact-maintenance .updates {\n border-color: #4f8cc9;\n }\n .layout-content.status.status-index .page-status.status-none {\n background-color: #484;\n }\n .components-container .component-inner-container.status-green .component-status,\n .components-container .component-inner-container.status-green .icon-indicator,\n .layout-content.status-index .components-statuses .component-container.status-green::after,\n .status-green .icon-indicator {\n color: #484;\n }\n .layout-content.status-incident .subheader a:hover,\n .layout-content.status-index .page-footer span a:hover,\n .layout-content.status-index .timeframes-container .timeframe:not(.active):hover,\n a, a:hover {\n color: #4f8cc9;\n }\n .flat-button, .layout-content.status-full-history .show-filter.open,\n .masthead .updates-dropdown-container .show-updates-dropdown {\n background-color: #4f8cc9;\n }\n .components-section .components-uptime-link,\n .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item,\n .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light {\n color: #9b9b9b;\n }\n .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .spacer {\n background-color: #444;\n }\n /* end githubstatus.com rules */\n .illo-desktop-header {\n filter: invert(90%) hue-rotate(-180deg) !important;\n }\n .status-day > .date::before {\n background-color: #444 !important;\n }\n .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light {\n opacity: .7;\n }\n .page-title .impact-minor::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.89307 1.50072C8.70961 1.19027 8.37325 1 8.00632 1C7.63938 1 7.30302 1.19027 7.11956 1.50072L0.137601 13.4979C-0.0458669 13.8083 -0.0458669 14.1888 0.137601 14.4993C0.331261 14.8097 0.667618 15 1.02436 15H14.9883C15.3552 15 15.6916 14.8097 15.8648 14.4993C16.0381 14.1888 16.0483 13.8083 15.875 13.4979L8.89307 1.50072ZM9.02558 12.9971H6.98705V10.9943H9.02558V12.9971ZM9.02558 9.99285H6.98705V5.98712H9.02558V9.99285Z' fill='%23cb4'/%3E%3C/svg%3e\");\n }\n .page-title .impact-major::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.89307 1.50072C8.70961 1.19027 8.37325 1 8.00632 1C7.63938 1 7.30302 1.19027 7.11956 1.50072L0.137601 13.4979C-0.0458669 13.8083 -0.0458669 14.1888 0.137601 14.4993C0.331261 14.8097 0.667618 15 1.02436 15H14.9883C15.3552 15 15.6916 14.8097 15.8648 14.4993C16.0381 14.1888 16.0483 13.8083 15.875 13.4979L8.89307 1.50072ZM9.02558 12.9971H6.98705V10.9943H9.02558V12.9971ZM9.02558 9.99285H6.98705V5.98712H9.02558V9.99285Z' fill='%23f3582c'/%3E%3C/svg%3e\");\n }\n .page-title .impact-critical::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M8.89307 1.50072C8.70961 1.19027 8.37325 1 8.00632 1C7.63938 1 7.30302 1.19027 7.11956 1.50072L0.137601 13.4979C-0.0458669 13.8083 -0.0458669 14.1888 0.137601 14.4993C0.331261 14.8097 0.667618 15 1.02436 15H14.9883C15.3552 15 15.6916 14.8097 15.8648 14.4993C16.0381 14.1888 16.0483 13.8083 15.875 13.4979L8.89307 1.50072ZM9.02558 12.9971H6.98705V10.9943H9.02558V12.9971ZM9.02558 9.99285H6.98705V5.98712H9.02558V9.99285Z' fill='%23f44'/%3E%3C/svg%3e\");\n }\n .page-title .impact-maintenance::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M4.48 7.27001C4.74 7.53001 5.76 8.60001 5.76 8.60001L6.32 8.02001L5.44 7.11001L7.13 5.31001C7.13 5.31001 6.37 4.57001 6.7 4.86001C7.02 3.67001 6.73 2.35001 5.83 1.42001C4.93 0.500006 3.66 0.200006 2.52 0.510006L4.45 2.51001L3.94 4.47001L2.05 4.99001L0.12 2.99001C-0.19 4.17001 0.1 5.48001 1 6.40001C1.94 7.38001 3.29 7.66001 4.48 7.27001ZM10.92 9.21001L8.59 11.51L12.43 15.49C12.74 15.82 13.16 15.98 13.57 15.98C13.98 15.98 14.39 15.82 14.71 15.49C15.34 14.84 15.34 13.79 14.71 13.14L10.92 9.21001ZM16 2.53L13.55 0L6.33 7.46L7.21 8.37L2.9 12.83L1.91 13.36L0.519998 15.63L0.869998 16L3.07 14.56L3.58 13.54L7.9 9.08L8.78 9.99L16 2.53Z' fill='rgb(79, 140, 201)'/%3E%3C/svg%3e\");\n }\n .page-footer > a:first-child::before {\n background: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='8' height='16' viewBox='0 0 8 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M5.5 3L7 4.5L3.25 8L7 11.5L5.5 13L0.5 8L5.5 3Z' fill='rgb(79, 140, 201)'/%3E%3C/svg%3e\") no-repeat center center !important;\n }\n .incident-container .incident-title::before {\n background-image: url(\"data:image/svg+xml;charset=utf8,%3Csvg width='14' height='16' viewBox='0 0 14 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M6.99999 2.3C10.14 2.3 12.7 4.86 12.7 8C12.7 11.14 10.14 13.7 6.99999 13.7C3.85999 13.7 1.29999 11.14 1.29999 8C1.29999 4.86 3.85999 2.3 6.99999 2.3ZM7 1C3.14 1 0 4.14 0 8C0 11.86 3.14 15 7 15C10.86 15 14 11.86 14 8C14 4.14 10.86 1 7 1ZM8 4H6V9H8V4ZM8 10H6V12H8V10Z' fill='%23bebebe'/%3E%3C/svg%3e\");\n }\n .select-input__control[class*=\"css-\"] {\n background-color: #181818;\n border-color: #333;\n }\n .select-input__single-value[class*=\"css-\"] {\n color: #bebebe;\n }\n body.status div[class*=\"css-\"] {\n background-color: #181818;\n }\n .layout-content.status.status-full-history .history-nav a.current.border-color {\n margin-top: 1px;\n border-bottom: 1px solid transparent !important;\n }\n .layout-content.status.status-full-history .history-nav a.button.border-color:not(.current) {\n border-bottom: 1px solid #333 !important;\n margin-top: 1px;\n }\n .select-input__option:not(.select-input__option--is-selected):hover {\n background-color: #282828;\n color: #eee;\n }\n .select-input__option--is-selected[class*=\"css-\"] {\n background-color: #182030 !important;\n }\n svg [fill=\"#EAEAEA\"] {\n fill: #555;\n }\n .pagination .current, .pagination .current:hover {\n background-color: initial;\n }", + "start": 694713, + "domains": [ + "githubstatus.com" + ] + }, + { + "code": "/* begin support.github.com rules */\n a {\n background-color: transparent;\n }\n :root, [data-color-mode=\"dark\"][data-dark-theme=\"light\"],\n [data-color-mode=\"light\"][data-light-theme=\"light\"] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #8348af;\n --color-scale-purple-6: #8348af;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #8348af;\n --color-auto-purple-6: #8348af;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-active-border: rgba(220, 220, 220, .1);\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-counter-secondary-bg: rgba(90, 90, 90, .5);\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-link-text: #4f8cc9;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-enterprise-text: #181818;\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-text: #181818;\n --color-mktg-btn-dark-hover-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-focus-border: #181818;\n --color-mktg-btn-dark-focus-border-inset: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #8348af;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-topic-tag-hover-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #8348af;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #8348af;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-donut-error: #d82828;\n --color-checks-donut-pending: #cb4;\n --color-checks-donut-success: #484;\n --color-checks-donut-neutral: #767676;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-checks-ansi-black: #c6c6c6;\n --color-checks-ansi-black-bright: #c6c6c6;\n --color-checks-ansi-white: #343434;\n --color-checks-ansi-white-bright: #343434;\n --color-checks-ansi-gray: #767676;\n --color-checks-ansi-red: #d82828;\n --color-checks-ansi-red-bright: #d82828;\n --color-checks-ansi-green: #040;\n --color-checks-ansi-green-bright: #040;\n --color-checks-ansi-yellow: #cb4;\n --color-checks-ansi-yellow-bright: #651;\n --color-checks-ansi-blue: #4f8cc9;\n --color-checks-ansi-blue-bright: #246;\n --color-checks-ansi-magenta: #53387a;\n --color-checks-ansi-magenta-bright: #53387a;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #8348af;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #8348af;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #8348af;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #afafaf;\n --color-ansi-white: #9b9b9b;\n --color-ansi-white-bright: #767676;\n --color-ansi-gray: #9b9b9b;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #6cc644;\n --color-ansi-green-bright: #484;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #cb4;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #4f8cc9;\n --color-ansi-magenta: #8348af;\n --color-ansi-magenta-bright: #53387a;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"light\"] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #8348af;\n --color-scale-purple-6: #8348af;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #8348af;\n --color-auto-purple-6: #8348af;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-active-border: rgba(220, 220, 220, .1);\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-counter-secondary-bg: rgba(90, 90, 90, .5);\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-link-text: #4f8cc9;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-enterprise-text: #181818;\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-text: #181818;\n --color-mktg-btn-dark-hover-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-focus-border: #181818;\n --color-mktg-btn-dark-focus-border-inset: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #8348af;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-topic-tag-hover-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #8348af;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #8348af;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-donut-error: #d82828;\n --color-checks-donut-pending: #cb4;\n --color-checks-donut-success: #484;\n --color-checks-donut-neutral: #767676;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-checks-ansi-black: #c6c6c6;\n --color-checks-ansi-black-bright: #c6c6c6;\n --color-checks-ansi-white: #343434;\n --color-checks-ansi-white-bright: #343434;\n --color-checks-ansi-gray: #767676;\n --color-checks-ansi-red: #d82828;\n --color-checks-ansi-red-bright: #d82828;\n --color-checks-ansi-green: #040;\n --color-checks-ansi-green-bright: #040;\n --color-checks-ansi-yellow: #cb4;\n --color-checks-ansi-yellow-bright: #651;\n --color-checks-ansi-blue: #4f8cc9;\n --color-checks-ansi-blue-bright: #246;\n --color-checks-ansi-magenta: #53387a;\n --color-checks-ansi-magenta-bright: #53387a;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #8348af;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #8348af;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #8348af;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #afafaf;\n --color-ansi-white: #9b9b9b;\n --color-ansi-white-bright: #767676;\n --color-ansi-gray: #9b9b9b;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #6cc644;\n --color-ansi-green-bright: #484;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #cb4;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #4f8cc9;\n --color-ansi-magenta: #8348af;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"light\"] {\n --color-scale-black: #dcdcdc;\n --color-scale-white: #181818;\n --color-scale-gray-0: #181818;\n --color-scale-gray-1: #202020;\n --color-scale-gray-2: #343434;\n --color-scale-gray-3: #343434;\n --color-scale-gray-4: #767676;\n --color-scale-gray-5: #9b9b9b;\n --color-scale-gray-6: #afafaf;\n --color-scale-gray-7: #afafaf;\n --color-scale-gray-8: #c6c6c6;\n --color-scale-gray-9: #c6c6c6;\n --color-scale-blue-0: #182030;\n --color-scale-blue-1: #182030;\n --color-scale-blue-2: #246;\n --color-scale-blue-3: #4f8cc9;\n --color-scale-blue-4: #4f8cc9;\n --color-scale-blue-5: #4f8cc9;\n --color-scale-blue-6: #4f8cc9;\n --color-scale-blue-7: rgba(79, 140, 201, .5);\n --color-scale-blue-8: #9daccc;\n --color-scale-blue-9: #9daccc;\n --color-scale-green-0: #002800;\n --color-scale-green-1: #002800;\n --color-scale-green-2: #040;\n --color-scale-green-3: #040;\n --color-scale-green-4: #373;\n --color-scale-green-5: #484;\n --color-scale-green-6: #6cc644;\n --color-scale-green-7: #6cc644;\n --color-scale-green-8: #6cc644;\n --color-scale-green-9: #6cc644;\n --color-scale-yellow-0: #261d08;\n --color-scale-yellow-1: #261d08;\n --color-scale-yellow-2: #651;\n --color-scale-yellow-3: #cb4;\n --color-scale-yellow-4: #cb4;\n --color-scale-yellow-5: #cb4;\n --color-scale-yellow-6: #cb4;\n --color-scale-yellow-7: #cb4;\n --color-scale-yellow-8: #cb4;\n --color-scale-yellow-9: #bba257;\n --color-scale-orange-0: #730;\n --color-scale-orange-1: #730;\n --color-scale-orange-2: #730;\n --color-scale-orange-3: #730;\n --color-scale-orange-4: #fb8532;\n --color-scale-orange-5: #fb8532;\n --color-scale-orange-6: #fb8532;\n --color-scale-orange-7: #f3582c;\n --color-scale-orange-8: #f3582c;\n --color-scale-orange-9: #f3582c;\n --color-scale-red-0: #300;\n --color-scale-red-1: #300;\n --color-scale-red-2: #d82828;\n --color-scale-red-3: #d82828;\n --color-scale-red-4: #d82828;\n --color-scale-red-5: #d82828;\n --color-scale-red-6: #d82828;\n --color-scale-red-7: #d82828;\n --color-scale-red-8: #f84848;\n --color-scale-red-9: #f84848;\n --color-scale-purple-0: #213;\n --color-scale-purple-1: #53387a;\n --color-scale-purple-2: #53387a;\n --color-scale-purple-3: #53387a;\n --color-scale-purple-4: #53387a;\n --color-scale-purple-5: #8348af;\n --color-scale-purple-6: #8348af;\n --color-scale-purple-7: #9378ba;\n --color-scale-purple-8: #9378ba;\n --color-scale-purple-9: #9378ba;\n --color-scale-pink-0: #170711;\n --color-scale-pink-1: #170711;\n --color-scale-pink-2: #170711;\n --color-scale-pink-3: #c49;\n --color-scale-pink-4: #c49;\n --color-scale-pink-5: #c49;\n --color-scale-pink-6: #e6b;\n --color-scale-pink-7: #e6b;\n --color-scale-pink-8: #e6b;\n --color-scale-pink-9: #e6b;\n --color-auto-black: #dcdcdc;\n --color-auto-white: #181818;\n --color-auto-gray-0: #181818;\n --color-auto-gray-1: #202020;\n --color-auto-gray-2: #343434;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #767676;\n --color-auto-gray-5: #9b9b9b;\n --color-auto-gray-6: #afafaf;\n --color-auto-gray-7: #afafaf;\n --color-auto-gray-8: #c6c6c6;\n --color-auto-gray-9: #c6c6c6;\n --color-auto-blue-0: #182030;\n --color-auto-blue-1: #182030;\n --color-auto-blue-2: #246;\n --color-auto-blue-3: #4f8cc9;\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-6: #4f8cc9;\n --color-auto-blue-7: rgba(79, 140, 201, .5);\n --color-auto-blue-8: #9daccc;\n --color-auto-blue-9: #9daccc;\n --color-auto-green-0: #002800;\n --color-auto-green-1: #002800;\n --color-auto-green-2: #040;\n --color-auto-green-3: #040;\n --color-auto-green-4: #373;\n --color-auto-green-5: #484;\n --color-auto-green-6: #6cc644;\n --color-auto-green-7: #6cc644;\n --color-auto-green-8: #6cc644;\n --color-auto-green-9: #6cc644;\n --color-auto-yellow-0: #261d08;\n --color-auto-yellow-1: #261d08;\n --color-auto-yellow-2: #651;\n --color-auto-yellow-3: #cb4;\n --color-auto-yellow-4: #cb4;\n --color-auto-yellow-5: #cb4;\n --color-auto-yellow-6: #cb4;\n --color-auto-yellow-7: #cb4;\n --color-auto-yellow-8: #cb4;\n --color-auto-yellow-9: #bba257;\n --color-auto-orange-0: #730;\n --color-auto-orange-1: #730;\n --color-auto-orange-2: #730;\n --color-auto-orange-3: #730;\n --color-auto-orange-4: #fb8532;\n --color-auto-orange-5: #fb8532;\n --color-auto-orange-6: #fb8532;\n --color-auto-orange-7: #f3582c;\n --color-auto-orange-8: #f3582c;\n --color-auto-orange-9: #f3582c;\n --color-auto-red-0: #300;\n --color-auto-red-1: #300;\n --color-auto-red-2: #d82828;\n --color-auto-red-3: #d82828;\n --color-auto-red-4: #d82828;\n --color-auto-red-5: #d82828;\n --color-auto-red-6: #d82828;\n --color-auto-red-7: #d82828;\n --color-auto-red-8: #f84848;\n --color-auto-red-9: #f84848;\n --color-auto-purple-0: #213;\n --color-auto-purple-1: #53387a;\n --color-auto-purple-2: #53387a;\n --color-auto-purple-3: #53387a;\n --color-auto-purple-4: #53387a;\n --color-auto-purple-5: #8348af;\n --color-auto-purple-6: #8348af;\n --color-auto-purple-7: #9378ba;\n --color-auto-purple-8: #9378ba;\n --color-auto-purple-9: #9378ba;\n --color-auto-pink-0: #170711;\n --color-auto-pink-1: #170711;\n --color-auto-pink-2: #170711;\n --color-auto-pink-3: #c49;\n --color-auto-pink-4: #c49;\n --color-auto-pink-5: #c49;\n --color-auto-pink-6: #e6b;\n --color-auto-pink-7: #e6b;\n --color-auto-pink-8: #e6b;\n --color-auto-pink-9: #e6b;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-tertiary: #9b9b9b;\n --color-text-placeholder: #9b9b9b;\n --color-text-disabled: #767676;\n --color-text-inverse: #181818;\n --color-text-link: #4f8cc9;\n --color-text-danger: #d82828;\n --color-text-success: #6cc644;\n --color-text-warning: #cb4;\n --color-text-white: #181818;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-icon-info: #4f8cc9;\n --color-icon-danger: #d82828;\n --color-icon-success: #6cc644;\n --color-icon-warning: #cb4;\n --color-border-primary: #343434;\n --color-border-tertiary: #343434;\n --color-border-overlay: #343434;\n --color-border-inverse: #181818;\n --color-border-info: #4f8cc9;\n --color-border-danger: #d82828;\n --color-border-success: #373;\n --color-border-warning: #cb4;\n --color-bg-canvas: #181818;\n --color-bg-canvas-mobile: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-inset: #202020;\n --color-bg-primary: #181818;\n --color-bg-secondary: #181818;\n --color-bg-tertiary: #202020;\n --color-bg-overlay: #181818;\n --color-bg-backdrop: rgba(220, 220, 220, .5);\n --color-bg-info: #182030;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-danger: #300;\n --color-bg-danger-inverse: #d82828;\n --color-bg-success: #002800;\n --color-bg-success-inverse: #484;\n --color-bg-warning: #651;\n --color-bg-warning-inverse: #cb4;\n --color-shadow-medium: 0 3px 6px rgba(0, 0, 0, .15);\n --color-shadow-large: 0 8px 24px rgba(0, 0, 0, .2);\n --color-shadow-extra-large: 0 12px 48px rgba(0, 0, 0, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-border: #4f8cc9;\n --color-state-hover-primary-text: #181818;\n --color-state-hover-primary-icon: #181818;\n --color-state-hover-secondary-bg: #202020;\n --color-state-hover-secondary-border: #202020;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-border: #4f8cc9;\n --color-state-selected-primary-text: #181818;\n --color-state-selected-primary-icon: #181818;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-fade-fg-10: rgba(220, 220, 220, .1);\n --color-fade-fg-15: rgba(220, 220, 220, .15);\n --color-fade-fg-30: rgba(220, 220, 220, .4);\n --color-fade-fg-50: rgba(220, 220, 220, .5);\n --color-fade-fg-70: rgba(220, 220, 220, .7);\n --color-fade-fg-85: rgba(220, 220, 220, .85);\n --color-fade-black-10: rgba(220, 220, 220, .1);\n --color-fade-black-15: rgba(220, 220, 220, .15);\n --color-fade-black-30: rgba(220, 220, 220, .4);\n --color-fade-black-50: rgba(220, 220, 220, .5);\n --color-fade-black-70: rgba(220, 220, 220, .7);\n --color-fade-black-85: rgba(220, 220, 220, .85);\n --color-fade-white-10: hsla(0, 0%, 0%, .1);\n --color-fade-white-15: hsla(0, 0%, 0%, .15);\n --color-fade-white-30: hsla(0, 0%, 0%, .3);\n --color-fade-white-50: hsla(0, 0%, 0%, .5);\n --color-fade-white-70: hsla(0, 0%, 0%, .7);\n --color-fade-white-85: hsla(0, 0%, 0%, .85);\n --color-alert-info-text: #c6c6c6;\n --color-alert-info-icon: #4f8cc9;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-warn-text: #c6c6c6;\n --color-alert-warn-icon: #cb4;\n --color-alert-warn-bg: #261d08;\n --color-alert-error-text: #c6c6c6;\n --color-alert-error-icon: rgba(255, 68, 68, .6);\n --color-alert-error-bg: #300;\n --color-alert-error-border: rgba(255, 68, 68, .2);\n --color-alert-success-text: #c6c6c6;\n --color-alert-success-icon: #3737;\n --color-alert-success-bg: #002800;\n --color-alert-success-border: #6cc64450;\n --color-autocomplete-shadow: 0 3px 6px rgba(0, 0, 0, .15);\n --color-btn-text: #c6c6c6;\n --color-btn-bg: #181818;\n --color-btn-border: rgba(220, 220, 220, .15);\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: rgba(220, 220, 220, .15);\n --color-btn-active-border: rgba(220, 220, 220, .1);\n --color-btn-focus-bg: #181818;\n --color-btn-focus-border: rgba(220, 220, 220, .15);\n --color-btn-focus-shadow: 0 0 0 3px rgba(79, 140, 201, .3);\n --color-btn-shadow-active: inset 0 .15em .3em rgba(220, 220, 220, .15);\n --color-btn-shadow-input-focus: 0 0 0 .2em rgba(79, 140, 201, .3);\n --color-btn-counter-bg: rgba(220, 220, 220, .15);\n --color-btn-primary-text: #181818;\n --color-btn-primary-bg: #373;\n --color-btn-primary-border: rgba(220, 220, 220, .15);\n --color-btn-primary-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-primary-hover-bg: #484;\n --color-btn-primary-hover-border: rgba(220, 220, 220, .15);\n --color-btn-primary-disabled-text: hsla(0, 0%, 0%, .8);\n --color-btn-primary-disabled-bg: #040;\n --color-btn-primary-disabled-border: rgba(220, 220, 220, .1);\n --color-btn-primary-focus-bg: #373;\n --color-btn-primary-focus-border: rgba(220, 220, 220, .15);\n --color-btn-primary-icon: hsla(0, 0%, 0%, .8);\n --color-btn-primary-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-text: #4f8cc9;\n --color-btn-outline-hover-text: #181818;\n --color-btn-outline-hover-bg: #4f8cc9;\n --color-btn-outline-hover-border: rgba(220, 220, 220, .15);\n --color-btn-outline-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-outline-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-outline-selected-text: #181818;\n --color-btn-outline-selected-border: rgba(220, 220, 220, .15);\n --color-btn-outline-disabled-text: rgba(79, 140, 201, .5);\n --color-btn-outline-disabled-bg: #181818;\n --color-btn-outline-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-text: #d82828;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-bg: #d82828;\n --color-btn-danger-hover-border: rgba(220, 220, 220, .15);\n --color-btn-danger-hover-shadow: 0 1px 0 rgba(220, 220, 220, .1);\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-btn-danger-selected-border: rgba(220, 220, 220, .15);\n --color-btn-danger-disabled-bg: #181818;\n --color-btn-danger-focus-border: rgba(220, 220, 220, .15);\n --color-btn-danger-focus-shadow: 0 0 0 3px rgba(255, 68, 68, .4);\n --color-btn-danger-icon: #d82828;\n --color-btn-danger-hover-icon: #181818;\n --color-counter-text: #c6c6c6;\n --color-counter-bg: rgba(90, 90, 90, .5);\n --color-counter-primary-text: #181818;\n --color-counter-primary-bg: #9b9b9b;\n --color-counter-secondary-text: #9b9b9b;\n --color-counter-secondary-bg: rgba(90, 90, 90, .5);\n --color-dropdown-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-label-border: #343434;\n --color-label-primary-text: #c6c6c6;\n --color-label-primary-border: #9b9b9b;\n --color-label-secondary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-info-text: #4f8cc9;\n --color-label-info-border: #4f8cc9;\n --color-label-success-text: #6cc644;\n --color-label-success-border: #484;\n --color-label-warning-text: #bba257;\n --color-label-warning-border: #cb4;\n --color-label-danger-text: #d82828;\n --color-label-danger-border: #d82828;\n --color-label-orange-text: #f3582c;\n --color-label-orange-border: #fb8532;\n --color-input-bg: #181818;\n --color-input-contrast-bg: #181818;\n --color-input-border: #343434;\n --color-input-disabled-bg: #202020;\n --color-input-disabled-border: #343434;\n --color-input-warning-border: #cb4;\n --color-input-error-border: #d82828;\n --color-input-tooltip-success-text: #6cc644;\n --color-input-tooltip-success-bg: #002800;\n --color-input-tooltip-success-border: #373;\n --color-input-tooltip-warning-text: #bba257;\n --color-input-tooltip-warning-bg: #651;\n --color-input-tooltip-warning-border: #cb4;\n --color-input-tooltip-error-text: #f84848;\n --color-input-tooltip-error-bg: #300;\n --color-input-tooltip-error-border: #d82828;\n --color-avatar-bg: #181818;\n --color-avatar-stack-fade: #343434;\n --color-avatar-stack-fade-more: #343434;\n --color-avatar-child-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n --color-toast-text: #c6c6c6;\n --color-toast-bg: #181818;\n --color-toast-border: #343434;\n --color-toast-shadow: 0 8px 24px rgba(0, 0, 0, .2);\n --color-toast-icon: #181818;\n --color-toast-icon-bg: #4f8cc9;\n --color-toast-success-text: #c6c6c6;\n --color-toast-success-border: #343434;\n --color-toast-success-icon: #181818;\n --color-toast-success-icon-bg: #484;\n --color-toast-warning-text: #c6c6c6;\n --color-toast-warning-border: #343434;\n --color-toast-warning-icon: #c6c6c6;\n --color-toast-warning-icon-bg: #cb4;\n --color-toast-danger-text: #c6c6c6;\n --color-toast-danger-border: #343434;\n --color-toast-danger-icon: #181818;\n --color-toast-danger-icon-bg: #d82828;\n --color-toast-loading-text: #c6c6c6;\n --color-toast-loading-border: #343434;\n --color-toast-loading-icon: #181818;\n --color-toast-loading-icon-bg: #afafaf;\n --color-timeline-text: #afafaf;\n --color-timeline-badge-bg: #343434;\n --color-timeline-target-badge-border: #4f8cc9;\n --color-timeline-target-badge-shadow: #246;\n --color-select-menu-backdrop-bg: rgba(220, 220, 220, .5);\n --color-select-menu-tap-highlight: rgba(90, 90, 90, .5);\n --color-select-menu-tap-focus-bg: #182030;\n --color-box-blue-border: #246;\n --color-box-row-yellow-bg: #261d08;\n --color-box-row-blue-bg: #182030;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-box-bg-info: #182030;\n --color-box-bg-warning: #261d08;\n --color-branch-name-text: #afafaf;\n --color-branch-name-link-text: #4f8cc9;\n --color-markdown-code-bg: rgba(220, 220, 220, .05);\n --color-menu-heading-text: #c6c6c6;\n --color-menu-border-active: #fff;\n --color-sidenav-selected-bg: #181818;\n --color-sidenav-border-active: #fff;\n --color-header-text: hsla(0, 0%, 0%, .7);\n --color-header-bg: #c6c6c6;\n --color-header-logo: #181818;\n --color-underlinenav-border: transparent;\n --color-underlinenav-border-hover: #343434;\n --color-underlinenav-border-active: #fff;\n --color-underlinenav-text: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-icon-hover: #767676;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-counter-bg: rgba(90, 90, 90, .5);\n --color-verified-badge-text: #6cc644;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-social-count-bg: #181818;\n --color-tooltip-text: #181818;\n --color-tooltip-bg: #c6c6c6;\n --color-header-search-bg: #c6c6c6;\n --color-header-search-border: #afafaf;\n --color-search-keyword-hl: #261d08;\n --color-diffstat-neutral-bg: #343434;\n --color-diffstat-neutral-border: #343434;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-addition-bg: #484;\n --color-diffstat-addition-border: #484;\n --color-mktg-info: #4f8cc9;\n --color-mktg-btn-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n --color-mktg-btn-primary-text: #181818;\n --color-mktg-btn-enterprise-text: #181818;\n --color-mktg-btn-dark-text: #181818;\n --color-mktg-btn-dark-border: hsla(0, 0%, 0%, .3);\n --color-mktg-btn-dark-hover-text: #181818;\n --color-mktg-btn-dark-hover-border: hsla(0, 0%, 0%, .5);\n --color-mktg-btn-dark-focus-border: #181818;\n --color-mktg-btn-dark-focus-border-inset: hsla(0, 0%, 0%, .5);\n --color-files-explorer-icon: #4f8cc9;\n --color-hl-author-bg: #182030;\n --color-hl-author-border: #246;\n --color-logo-subdued: #343434;\n --color-discussion-bg-success: #484;\n --color-repo-language-color-border: rgba(220, 220, 220, .1);\n --color-code-selection-bg: #246;\n --color-blob-line-highlight-bg: #261d08;\n --color-diff-addition-text: #6cc644;\n --color-diff-addition-border: #373;\n --color-diff-deletion-text: #d82828;\n --color-diff-deletion-bg: #300;\n --color-diff-deletion-border: #d82828;\n --color-diff-change-text: #cb4;\n --color-diff-change-bg: #651;\n --color-diff-change-border: #cb4;\n --color-diff-blob-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-addition-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-addition-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-text: rgba(220, 220, 220, .4);\n --color-diff-blob-deletion-num-hover-text: rgba(220, 220, 220, .6);\n --color-diff-blob-deletion-num-bg: #300;\n --color-diff-blob-deletion-line-bg: #300;\n --color-diff-blob-hunk-text: rgba(220, 220, 220, .7);\n --color-diff-blob-hunk-num-bg: #182030;\n --color-diff-blob-hunk-line-bg: #182030;\n --color-diff-blob-empty-block-bg: #181818;\n --color-diff-blob-selected-line-highlight-bg: rgba(132, 70, 0, .2);\n --color-diff-blob-selected-line-highlight-border: #cb4;\n --color-diff-blob-expander-icon: #afafaf;\n --color-diff-blob-expander-hover-icon: #181818;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-comment-button-icon: #181818;\n --color-diff-blob-comment-button-bg: #4f8cc9;\n --color-global-nav-logo: #181818;\n --color-global-nav-bg: #c6c6c6;\n --color-global-nav-text: #181818;\n --color-global-nav-icon: #181818;\n --color-global-nav-input-bg: #181818;\n --color-global-nav-input-border: #181818;\n --color-global-nav-input-icon: #343434;\n --color-global-nav-input-placeholder: #767676;\n --color-footer-invertocat-octicon: #343434;\n --color-footer-invertocat-octicon-hover: #9b9b9b;\n --color-pr-state-draft-text: #181818;\n --color-pr-state-draft-bg: #9b9b9b;\n --color-pr-state-open-text: #181818;\n --color-pr-state-open-bg: #484;\n --color-pr-state-merged-text: #181818;\n --color-pr-state-merged-bg: #8348af;\n --color-pr-state-closed-text: #181818;\n --color-pr-state-closed-bg: #d82828;\n --color-topic-tag-text: #4f8cc9;\n --color-topic-tag-bg: #182030;\n --color-topic-tag-hover-bg: #182030;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-text: #181818;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-merged-icon-bg: #8348af;\n --color-merge-box-merged-icon-text: #181818;\n --color-merge-box-merged-box-border: #8348af;\n --color-merge-box-neutral-icon-bg: #9b9b9b;\n --color-merge-box-neutral-icon-text: #181818;\n --color-merge-box-neutral-indicator-bg: #9b9b9b;\n --color-merge-box-warning-icon-bg: #cb4;\n --color-merge-box-warning-icon-text: #181818;\n --color-merge-box-warning-box-border: #cb4;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-text: #181818;\n --color-merge-box-error-indicator-bg: #d82828;\n --color-project-card-bg: #181818;\n --color-project-header-bg: #c6c6c6;\n --color-project-sidebar-bg: #181818;\n --color-project-gradient-in: #181818;\n --color-project-gradient-out: transparent;\n --color-checks-bg: #c6c6c6;\n --color-checks-text-primary: #181818;\n --color-checks-text-secondary: #767676;\n --color-checks-text-link: #4f8cc9;\n --color-checks-btn-icon: #343434;\n --color-checks-btn-hover-icon: #181818;\n --color-checks-btn-hover-bg: hsla(0, 0%, 0%, .125);\n --color-checks-input-text: #202020;\n --color-checks-input-placeholder-text: #767676;\n --color-checks-input-focus-text: #767676;\n --color-checks-input-bg: #c6c6c6;\n --color-checks-donut-error: #d82828;\n --color-checks-donut-pending: #cb4;\n --color-checks-donut-success: #484;\n --color-checks-donut-neutral: #767676;\n --color-checks-dropdown-text: #343434;\n --color-checks-dropdown-bg: #c6c6c6;\n --color-checks-dropdown-border: #afafaf;\n --color-checks-dropdown-hover-text: #181818;\n --color-checks-dropdown-hover-bg: #afafaf;\n --color-checks-dropdown-btn-hover-text: #181818;\n --color-checks-dropdown-btn-hover-bg: #c6c6c6;\n --color-checks-scrollbar-thumb-bg: #afafaf;\n --color-checks-header-label-text: #343434;\n --color-checks-header-label-open-text: #181818;\n --color-checks-header-border: #c6c6c6;\n --color-checks-header-icon: #767676;\n --color-checks-line-text: #343434;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-line-hover-bg: #c6c6c6;\n --color-checks-line-selected-num-text: #4f8cc9;\n --color-checks-line-dt-fm-text: #c6c6c6;\n --color-checks-line-dt-fm-bg: #cb4;\n --color-checks-gate-text: #343434;\n --color-checks-gate-waiting-text: #343434;\n --color-checks-step-header-open-bg: #c6c6c6;\n --color-checks-step-error-text: #d82828;\n --color-checks-step-warning-text: #cb4;\n --color-checks-logline-text: #767676;\n --color-checks-logline-debug-text: #53387a;\n --color-checks-logline-error-text: #343434;\n --color-checks-logline-error-num-text: #d82828;\n --color-checks-logline-warning-text: #343434;\n --color-checks-logline-warning-num-text: #cb4;\n --color-checks-logline-command-text: #4f8cc9;\n --color-checks-logline-section-text: #040;\n --color-checks-ansi-black: #c6c6c6;\n --color-checks-ansi-black-bright: #c6c6c6;\n --color-checks-ansi-white: #343434;\n --color-checks-ansi-white-bright: #343434;\n --color-checks-ansi-gray: #767676;\n --color-checks-ansi-red: #d82828;\n --color-checks-ansi-red-bright: #d82828;\n --color-checks-ansi-green: #040;\n --color-checks-ansi-green-bright: #040;\n --color-checks-ansi-yellow: #cb4;\n --color-checks-ansi-yellow-bright: #651;\n --color-checks-ansi-blue: #4f8cc9;\n --color-checks-ansi-blue-bright: #246;\n --color-checks-ansi-magenta: #53387a;\n --color-checks-ansi-magenta-bright: #53387a;\n --color-intro-shelf-gradient-left: #182030;\n --color-intro-shelf-gradient-right: #002800;\n --color-intro-shelf-gradient-in: #181818;\n --color-intro-shelf-gradient-out: transparent;\n --color-marketing-icon-primary: #4f8cc9;\n --color-marketing-icon-secondary: #4f8cc9;\n --color-prettylights-syntax-comment: #9b9b9b;\n --color-prettylights-syntax-constant: #4f8cc9;\n --color-prettylights-syntax-entity: #8348af;\n --color-prettylights-syntax-storage-modifier-import: #c6c6c6;\n --color-prettylights-syntax-entity-tag: #6cc644;\n --color-prettylights-syntax-keyword: #d82828;\n --color-prettylights-syntax-string: #9daccc;\n --color-prettylights-syntax-variable: #fb8532;\n --color-prettylights-syntax-brackethighlighter-unmatched: #d82828;\n --color-prettylights-syntax-invalid-illegal-text: #181818;\n --color-prettylights-syntax-invalid-illegal-bg: #d82828;\n --color-prettylights-syntax-carriage-return-text: #181818;\n --color-prettylights-syntax-carriage-return-bg: #d82828;\n --color-prettylights-syntax-string-regexp: #6cc644;\n --color-prettylights-syntax-markup-list: #bba257;\n --color-prettylights-syntax-markup-heading: #4f8cc9;\n --color-prettylights-syntax-markup-italic: #c6c6c6;\n --color-prettylights-syntax-markup-bold: #c6c6c6;\n --color-prettylights-syntax-markup-deleted-text: #d82828;\n --color-prettylights-syntax-markup-deleted-bg: #300;\n --color-prettylights-syntax-markup-inserted-text: #6cc644;\n --color-prettylights-syntax-markup-inserted-bg: #002800;\n --color-prettylights-syntax-markup-changed-text: #fb8532;\n --color-prettylights-syntax-markup-changed-bg: #730;\n --color-prettylights-syntax-markup-ignored-text: #202020;\n --color-prettylights-syntax-markup-ignored-bg: #4f8cc9;\n --color-prettylights-syntax-meta-diff-range: #8348af;\n --color-prettylights-syntax-brackethighlighter-angle: #afafaf;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #767676;\n --color-prettylights-syntax-constant-other-reference-link: #9daccc;\n --color-codemirror-text: #c6c6c6;\n --color-codemirror-bg: #181818;\n --color-codemirror-gutters-bg: #181818;\n --color-codemirror-guttermarker-text: #181818;\n --color-codemirror-guttermarker-subtle-text: #343434;\n --color-codemirror-linenumber-text: #767676;\n --color-codemirror-cursor: #c6c6c6;\n --color-codemirror-selection-bg: #246;\n --color-codemirror-activeline-bg: #181818;\n --color-codemirror-matchingbracket-text: #c6c6c6;\n --color-codemirror-lines-bg: #181818;\n --color-codemirror-syntax-comment: #9b9b9b;\n --color-codemirror-syntax-constant: #4f8cc9;\n --color-codemirror-syntax-entity: #8348af;\n --color-codemirror-syntax-keyword: #d82828;\n --color-codemirror-syntax-storage: #d82828;\n --color-codemirror-syntax-string: #9daccc;\n --color-codemirror-syntax-support: #4f8cc9;\n --color-codemirror-syntax-variable: #fb8532;\n --color-ansi-black: #c6c6c6;\n --color-ansi-black-bright: #afafaf;\n --color-ansi-white: #9b9b9b;\n --color-ansi-white-bright: #767676;\n --color-ansi-gray: #9b9b9b;\n --color-ansi-red: #d82828;\n --color-ansi-red-bright: #d82828;\n --color-ansi-green: #6cc644;\n --color-ansi-green-bright: #484;\n --color-ansi-yellow: #cb4;\n --color-ansi-yellow-bright: #cb4;\n --color-ansi-blue: #4f8cc9;\n --color-ansi-blue-bright: #4f8cc9;\n --color-ansi-magenta: #8348af;\n --color-ansi-magenta-bright: #53387a;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"dark\"],\n [data-color-mode=\"light\"][data-light-theme=\"dark\"] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n --color-auto-purple-3: #8348af;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"dark\"] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n --color-auto-purple-3: #8348af;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"dark\"] {\n --color-scale-purple-5: #53387a;\n --color-scale-purple-6: #8348af;\n --color-auto-purple-3: #8348af;\n --color-auto-purple-4: #53387a;\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n }\n }\n [data-color-mode=\"dark\"][data-dark-theme=\"dark_dimmed\"],\n [data-color-mode=\"light\"][data-light-theme=\"dark_dimmed\"] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme=\"dark_dimmed\"] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme=\"dark_dimmed\"] {\n --color-btn-primary-text: #181818;\n --color-btn-danger-hover-text: #181818;\n --color-btn-danger-hover-counter-bg: hsla(0, 0%, 0%, .2);\n --color-btn-danger-selected-text: #181818;\n --color-mktg-btn-primary-bg-bottom: #373;\n --color-mktg-btn-primary-bg-overlay-bottom: #6cc644;\n }\n }\n .rule {\n background-color: transparent;\n }\n .btn-danger.disabled, .btn-danger:disabled, .btn-danger[aria-disabled=true],\n .btn-outline.disabled, .btn-outline:disabled,\n .btn-outline[aria-disabled=true] {\n box-shadow: none;\n }\n .btn-invisible, .btn-link {\n background-color: transparent;\n }\n .btn-invisible {\n box-shadow: none;\n }\n .btn-invisible.zeroclipboard-is-hover, .btn-invisible:hover {\n background: none;\n box-shadow: none;\n }\n .btn-invisible.selected, .btn-invisible.zeroclipboard-is-active,\n .btn-invisible:active, .btn-invisible:focus,\n .btn-invisible[aria-selected=true] {\n background: none;\n }\n .btn-invisible.disabled, .btn-invisible:disabled,\n .btn-invisible[aria-disabled=true], .btn-octicon {\n background-color: transparent;\n }\n .btn-octicon {\n box-shadow: none;\n }\n .close-button, .inline-form .btn-plain {\n background-color: transparent;\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .filter-list.pjax-active .filter-item, .SideNav-item, .SideNav-subItem,\n .tabnav-tab, .UnderlineNav-item {\n background-color: transparent;\n }\n .flash-close {\n background: none;\n }\n .dropdown-item:focus > .Label, .dropdown-item:hover > .Label {\n border-color: currentcolor;\n }\n .dropdown-signout {\n background: none;\n }\n .Header-input {\n box-shadow: none;\n }\n .label, .Label {\n background-color: transparent !important;\n }\n .SelectMenu-closeButton, .SelectMenu-tab {\n background-color: transparent;\n }\n @media (min-width: 544px) {\n .SelectMenu-tab[aria-selected=\"true\"] {\n box-shadow: none;\n }\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .details-overlay[open] > summary::before, .markdown-body .emoji,\n .markdown-body pre > code, .markdown-body pre code, .markdown-body pre tt,\n .markdown-body table img, .Toast-dismissButton {\n background-color: transparent;\n }\n #support-logo svg {\n fill: #181818;\n }\n .progress-bar-processing .Progress-item {\n background-image: linear-gradient(45deg, hsla(0, 0%, 0%, .15) 25%, transparent 25%, transparent 50%, hsla(0, 0%, 0%, .15) 50%, hsla(0, 0%, 0%, .15) 75%, transparent 75%, transparent);\n }\n .notification-indicator .unviewed-status {\n background-image: linear-gradient(#4f8cc9, #4f8cc9);\n }\n .toolbar-item {\n background: none;\n }\n .toolbar-item:disabled {\n color: #343434;\n }\n .timeline-comment .comment + .comment {\n border-top-color: #343434;\n }\n :root, [data-color-mode=\"dark\"][data-dark-theme*=\"light\"],\n [data-color-mode=\"light\"][data-light-theme*=\"light\"] {\n --color-placeholder-gradient: #242424;\n --color-placeholder-gradient-from: #343434;\n --color-placeholder-gradient-to: #242424;\n }\n @media (prefers-color-scheme: light) {\n [data-color-mode=\"auto\"][data-light-theme*=\"light\"] {\n --color-placeholder-gradient: #242424;\n --color-placeholder-gradient-from: #343434;\n --color-placeholder-gradient-to: #242424;\n }\n }\n @media (prefers-color-scheme: dark) {\n [data-color-mode=\"auto\"][data-dark-theme*=\"light\"] {\n --color-placeholder-gradient: #242424;\n --color-placeholder-gradient-from: #343434;\n --color-placeholder-gradient-to: #242424;\n }\n }\n .taggle_list .taggle .close {\n color: #5a5a5a;\n color: rgba(255, 255, 255, .7);\n background: none;\n }\n .taggle_list .taggle:hover {\n background-color: #5a5a5a;\n }\n .taggle_placeholder {\n color: #5a5a5a;\n }\n .taggle_input {\n background: none;\n }\n #ticket-comments .attachment-name a, .attachment-name a:hover,\n .attachment-upload-preview .link, .link:hover {\n color: #c6c6c6;\n }\n .not-found-octocat-wrapper::after {\n box-shadow: 0 4px 0 var(--ghd-bg-color), 0 8px 0 var(--ghd-bg-color), 0 12px 0 var(--ghd-bg-color), 0 16px 0 var(--ghd-bg-color), 0 20px 0 var(--ghd-bg-color);\n }\n /* end support.github.com rules */\n .input-block #query {\n background: url('data:image/svg+xml;utf8,') no-repeat 6px;\n }", + "start": 729791, + "domains": [ + "support.github.com" + ] + }, + { + "code": "/* begin vscode-auth.github.com rules */\n a {\n background-color: transparent;\n }\n mark {\n color: #f0f0f0;\n }\n body {\n color: #c6c6c6;\n background-color: #181818;\n }\n a {\n color: #4f8cc9;\n }\n .rule {\n background-color: transparent;\n border-bottom-color: #343434;\n }\n .Box {\n background-color: #181818;\n }\n .Box, .Box-header {\n border-color: #343434;\n }\n .Box-header {\n background-color: #222;\n }\n .Box-body {\n border-bottom-color: #343434;\n }\n .Box-row {\n border-top-color: #343434;\n }\n .Box-row.Box-row--unread, .Box-row.unread {\n box-shadow: 2px 0 0 #4f8cc9 inset;\n }\n .Box-row.navigation-focus .Box-row--drag-button {\n color: #4f8cc9;\n }\n .Box-row.navigation-focus.sortable-chosen {\n background-color: #181818;\n }\n .Box-row--focus-gray.navigation-focus,\n .Box-row.navigation-focus.sortable-ghost {\n background-color: #222;\n }\n .Box-row--focus-blue.navigation-focus {\n background-color: #182030;\n }\n .Box-row--hover-gray:hover {\n background-color: #222;\n }\n .Box-row--hover-blue:hover {\n background-color: #182030;\n }\n @media (min-width: 768px) {\n .Box-row-link {\n color: #c6c6c6;\n }\n .Box-row-link:hover {\n color: #4f8cc9;\n }\n }\n .Box-footer {\n border-top-color: #343434;\n }\n .Box--blue {\n border-color: #246;\n }\n .Box--blue .Box-header {\n background-color: #182030;\n border-color: #246;\n }\n .Box--blue .Box-body, .Box--blue .Box-footer, .Box--blue .Box-row {\n border-color: #246;\n }\n .Box--danger, .Box--danger .Box-body:last-of-type,\n .Box--danger .Box-row:first-of-type {\n border-color: #d82828;\n }\n .Box-header--blue {\n background-color: #182030;\n border-color: #246;\n }\n .Box-row--yellow {\n background-color: #261d08;\n }\n .Box-row--blue {\n background-color: #182030;\n }\n .Box-row--gray {\n background-color: #222;\n }\n .breadcrumb-item::after {\n color: #343434;\n }\n .btn {\n border-color: rgba(220, 220, 220, .2);\n }\n .btn .Counter {\n color: #afafaf;\n background-color: rgba(220, 220, 220, .1);\n }\n .btn.selected, .btn:active {\n background-image: none;\n }\n .btn {\n color: #c6c6c6;\n background-color: #242424;\n background-image: linear-gradient(-180deg, #202020 0%, #181818 90%);\n }\n .btn.focus, .btn:focus {\n box-shadow: 0 0 0 .2em rgba(79, 140, 201, .5);\n }\n .btn.hover, .btn:hover {\n background-color: #444;\n background-image: linear-gradient(-180deg, #242424 0%, #444 90%);\n border-color: rgba(220, 220, 220, .35);\n }\n .btn.selected, .btn:active, [open] > .btn {\n background-color: #404040;\n background-image: none;\n border-color: rgba(220, 220, 220, .35);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn.disabled, .btn:disabled {\n color: rgba(210, 210, 210, .4);\n background-color: #242424;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-primary {\n color: #fff;\n background-color: #484;\n background-image: linear-gradient(-180deg, #373 0%, #484 90%);\n }\n .btn-primary.focus, .btn-primary:focus {\n box-shadow: 0 0 0 .2em #3737;\n }\n .btn-primary.hover, .btn-primary:hover {\n background-color: #595;\n background-image: linear-gradient(-180deg, #373 0%, #595 90%);\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-primary.selected, .btn-primary:active, [open] > .btn-primary {\n background-color: #595;\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-primary.disabled, .btn-primary:disabled {\n background-color: #040;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-primary .Counter {\n background-color: #181818;\n }\n .btn-purple {\n color: #fff;\n }\n .btn-purple.hover, .btn-purple:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-purple.selected, .btn-purple:active, [open] > .btn-purple {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-purple.disabled, .btn-purple:disabled {\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-purple .Counter {\n background-color: #181818;\n }\n .btn-blue {\n color: #fff;\n background-color: #4f8cc9;\n background-image: linear-gradient(-180deg, #4f8cc9 0%, #4f8cc9 90%);\n }\n .btn-blue.hover, .btn-blue:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-blue.selected, .btn-blue:active, [open] > .btn-blue {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-blue.disabled, .btn-blue:disabled {\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-blue .Counter {\n color: #4f8cc9;\n background-color: #181818;\n }\n .btn-danger {\n color: #d82828;\n background-color: #181818;\n background-image: linear-gradient(-180deg, #202020 0%, #181818 90%);\n }\n .btn-danger:focus {\n box-shadow: 0 0 0 .2em rgba(255, 68, 68, .4);\n }\n .btn-danger:hover {\n color: #fff;\n background-color: #d82828;\n background-image: linear-gradient(-180deg, #de4450 0%, #d82828 90%);\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-danger:hover .Counter {\n color: #fff;\n }\n .btn-danger.selected, .btn-danger:active, [open] > .btn-danger {\n color: #fff;\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-danger.disabled, .btn-danger:disabled {\n color: rgba(255, 68, 68, .4);\n background-color: #242424;\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-outline {\n color: #4f8cc9;\n background-color: #181818;\n background-image: none;\n }\n .btn-outline.selected, .btn-outline:active, .btn-outline:hover,\n [open] > .btn-outline {\n color: #fff;\n background-color: #4f8cc9;\n background-image: none;\n border-color: #4f8cc9;\n }\n .btn-outline.selected .Counter, .btn-outline:active .Counter,\n .btn-outline:hover .Counter, [open] > .btn-outline .Counter {\n color: #4f8cc9;\n background-color: #181818;\n }\n .btn-outline:focus {\n border-color: #4f8cc9;\n }\n .btn-outline.disabled, .btn-outline:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .ellipsis-expander, .hidden-text-expander a {\n color: #afafaf;\n background-color: #343434;\n }\n .ellipsis-expander:hover, .hidden-text-expander a:hover {\n background-color: #767676;\n }\n .ellipsis-expander:active, .hidden-text-expander a:active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .social-count {\n color: #c6c6c6;\n background-color: #181818;\n border-color: rgba(220, 220, 220, .2);\n }\n .btn-link, .social-count:hover {\n color: #4f8cc9;\n }\n .btn-link {\n background-color: transparent;\n }\n .btn-link:disabled, .btn-link:disabled:hover {\n color: rgba(148, 148, 148, .5);\n }\n .form-control, .form-select {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n }\n .form-control.focus, .form-control:focus, .form-select.focus,\n .form-select:focus {\n border-color: #4f8cc9;\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .input-contrast, .input-contrast:focus {\n background-color: #181818;\n }\n :-ms-input-placeholder {\n color: #9b9b9b;\n }\n ::placeholder {\n color: #9b9b9b;\n }\n .form-checkbox label em.highlight {\n background-color: #261d08;\n }\n .form-checkbox .note, .hfields .form-group dt label {\n color: #afafaf;\n }\n .form-warning {\n color: #bba257;\n background-color: #261d08;\n border-color: #cb4;\n }\n .form-select {\n background-image: none \\9;\n }\n .form-group .form-control, .form-group .form-control:focus, .form-select {\n background-color: #181818;\n }\n .form-group dd h4.is-error {\n color: #d82828;\n }\n .form-group dd h4.is-success {\n color: #484;\n }\n .form-group.required dt label::after {\n color: #d82828;\n }\n .form-group.successful .success {\n color: #484;\n }\n .form-group.warn .warning {\n color: #bba257;\n background-color: #261d08;\n border-color: #cb4;\n }\n .form-group.warn .warning::after {\n border-bottom-color: #261d08;\n }\n .form-group.warn .warning::before {\n border-bottom-color: #cb4;\n }\n .form-group.errored label {\n color: #d82828;\n }\n .form-group.errored .error {\n color: #f84848;\n background-color: #300;\n border-color: #d82828;\n }\n .form-group.errored .error::after {\n border-bottom-color: #300;\n }\n .form-group.errored .error::before {\n border-bottom-color: #d82828;\n }\n .note {\n color: #afafaf;\n }\n .status-indicator-success .octicon-check {\n color: #484;\n fill: #484;\n }\n .status-indicator-failed .octicon-x {\n color: #d82828;\n fill: #d82828;\n }\n .inline-form .btn-plain {\n background-color: transparent;\n }\n .drag-and-drop {\n color: #afafaf;\n background-color: #181818;\n border-color: #484848;\n }\n .drag-and-drop .error {\n color: #d82828;\n }\n .drag-and-drop-error-info {\n color: #afafaf;\n }\n .drag-and-drop-error-info a {\n color: #4f8cc9;\n }\n .upload-enabled textarea {\n border-bottom-color: #343434;\n }\n .upload-enabled.focused {\n box-shadow: 0 0 0 2px rgba(79, 140, 201, .3);\n }\n .upload-enabled.focused .form-control {\n box-shadow: none;\n }\n .upload-enabled.focused .drag-and-drop {\n border-color: #4f8cc9;\n }\n .previewable-comment-form .comment {\n border-color: #484848;\n }\n h2.account, p.explain {\n color: #afafaf;\n }\n p.explain strong {\n color: #c6c6c6;\n }\n p.explain .octicon {\n color: #767676;\n }\n .menu {\n background-color: #181818;\n border-color: #343434;\n }\n .menu-item {\n border-bottom-color: #343434;\n }\n .menu-item:hover {\n background-color: #222;\n }\n .menu-item.selected {\n color: #c6c6c6;\n background-color: #181818;\n }\n .menu-item.selected::before {\n background-color: #fb8532;\n }\n .menu-item .octicon {\n color: #c6c6c6;\n }\n .menu-item .menu-warning {\n color: #f84848;\n }\n .menu-item.alert .Counter {\n color: #d82828;\n }\n .menu-heading {\n color: #afafaf;\n }\n .menu-heading, .tabnav {\n border-bottom-color: #343434;\n }\n .tabnav-tab {\n color: #afafaf;\n background-color: transparent;\n }\n .tabnav-tab.selected {\n color: #c6c6c6;\n background-color: #181818;\n border-color: #343434;\n }\n .tabnav-tab:focus, .tabnav-tab:hover {\n color: #c6c6c6;\n }\n .tabnav-extra {\n color: #afafaf;\n }\n a.tabnav-extra:hover {\n color: #4f8cc9;\n }\n .filter-list.pjax-active .filter-item {\n color: #afafaf;\n background-color: transparent;\n }\n .filter-list.pjax-active .filter-item.pjax-active {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item {\n color: #afafaf;\n }\n .filter-item:hover {\n background-color: #2c2c2c;\n }\n .filter-item.selected {\n color: #fff;\n background-color: #4f8cc9;\n }\n .filter-item .bar {\n background-color: #242424;\n }\n .subnav-bordered {\n border-bottom-color: #2c2c2c;\n }\n .subnav-item {\n color: #afafaf;\n border-color: #343434;\n }\n .subnav-item:focus, .subnav-item:hover {\n background-color: #222;\n }\n .subnav-item.selected, .subnav-item.selected:focus,\n .subnav-item.selected:hover {\n color: #fff;\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .subnav-search-input {\n color: #afafaf;\n }\n .subnav-search-icon {\n color: #767676;\n }\n .subnav-search-context .btn {\n color: #afafaf;\n }\n .UnderlineNav {\n border-bottom-color: #343434;\n }\n .UnderlineNav-item {\n color: #afafaf;\n }\n .UnderlineNav-item:focus, .UnderlineNav-item:hover {\n color: #c6c6c6;\n border-bottom-color: #343434;\n }\n .UnderlineNav-item:focus .UnderlineNav-octicon,\n .UnderlineNav-item:hover .UnderlineNav-octicon {\n color: #9b9b9b;\n }\n .UnderlineNav-item.selected {\n color: #c6c6c6;\n border-bottom-color: #fb8532;\n }\n .UnderlineNav-item.selected .UnderlineNav-octicon {\n color: #9b9b9b;\n }\n .UnderlineNav-octicon {\n color: #767676;\n }\n .pagination a, .pagination em, .pagination span {\n color: #4f8cc9;\n background-color: #181818;\n border-color: #343434;\n }\n .pagination a:focus, .pagination a:hover, .pagination em:focus,\n .pagination em:hover, .pagination span:focus, .pagination span:hover {\n background-color: #242424;\n border-color: #343434;\n }\n .pagination .current, .pagination .current:hover {\n color: #fff;\n background-color: #4f8cc9;\n border-color: #4f8cc9;\n }\n .pagination .disabled, .pagination .disabled:hover, .pagination .gap,\n .pagination .gap:hover {\n color: #343434;\n background-color: #181818;\n }\n .tooltipped::after {\n color: #fff;\n background-color: #dcdcdc;\n }\n .tooltipped::before {\n color: #dcdcdc;\n }\n .tooltipped-s::before, .tooltipped-se::before, .tooltipped-sw::before {\n border-bottom-color: #dcdcdc;\n }\n .tooltipped-n::before, .tooltipped-ne::before, .tooltipped-nw::before {\n border-top-color: #dcdcdc;\n }\n .tooltipped-w::before {\n border-left-color: #dcdcdc;\n }\n .tooltipped-e::before {\n border-right-color: #dcdcdc;\n }\n .border {\n border-color: #343434 !important;\n }\n .border-y {\n border-top-color: #343434 !important;\n border-bottom-color: #343434 !important;\n }\n .border-blue {\n border-color: #4f8cc9 !important;\n }\n .border-blue-light {\n border-color: #246 !important;\n }\n .border-green {\n border-color: #373 !important;\n }\n .border-green-light {\n border-color: #040 !important;\n }\n .border-red, .border-red-light {\n border-color: #d82828 !important;\n }\n .border-purple {\n border-color: #8348af !important;\n }\n .border-yellow {\n border-color: #cb4 !important;\n }\n .border-gray-light {\n border-color: #2c2c2c !important;\n }\n .border-gray-dark {\n border-color: #343434 !important;\n }\n .border-black-fade {\n border-color: rgba(220, 220, 220, .15) !important;\n }\n .border-top {\n border-top-color: #343434 !important;\n }\n .border-right {\n border-right-color: #343434 !important;\n }\n .border-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-left {\n border-left-color: #343434 !important;\n }\n @media (min-width: 544px) {\n .border-sm-top {\n border-top-color: #343434 !important;\n }\n .border-sm-right {\n border-right-color: #343434 !important;\n }\n .border-sm-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-sm-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 768px) {\n .border-md-top {\n border-top-color: #343434 !important;\n }\n .border-md-right {\n border-right-color: #343434 !important;\n }\n .border-md-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-md-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1012px) {\n .border-lg-top {\n border-top-color: #343434 !important;\n }\n .border-lg-right {\n border-right-color: #343434 !important;\n }\n .border-lg-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-lg-left {\n border-left-color: #343434 !important;\n }\n }\n @media (min-width: 1280px) {\n .border-xl-top {\n border-top-color: #343434 !important;\n }\n .border-xl-right {\n border-right-color: #343434 !important;\n }\n .border-xl-bottom {\n border-bottom-color: #343434 !important;\n }\n .border-xl-left {\n border-left-color: #343434 !important;\n }\n }\n .box-shadow {\n box-shadow: 0 1px 1px #000 !important;\n }\n .box-shadow-medium {\n box-shadow: 0 1px 5px #000 !important;\n }\n .box-shadow-large {\n box-shadow: 0 1px 15px #000 !important;\n }\n .box-shadow-none {\n box-shadow: none !important;\n }\n .bg-white {\n background-color: #181818 !important;\n }\n .bg-blue {\n background-color: #4f8cc9 !important;\n }\n .bg-blue-light {\n background-color: #182030 !important;\n }\n .bg-gray {\n background-color: #222 !important;\n }\n .bg-gray-light {\n background-color: #181818 !important;\n }\n .bg-green {\n background-color: #484 !important;\n }\n .bg-green-light {\n background-color: #002800 !important;\n }\n .bg-red {\n background-color: #d82828 !important;\n }\n .bg-red-light {\n background-color: #300 !important;\n }\n .bg-yellow {\n background-color: #cb4 !important;\n }\n .bg-yellow-light {\n background-color: #651 !important;\n }\n .bg-purple {\n background-color: #8348af !important;\n }\n .bg-purple-light {\n background-color: #213 !important;\n }\n .text-blue {\n color: #4f8cc9 !important;\n }\n .text-red {\n color: #d82828 !important;\n }\n .text-gray-light {\n color: #9b9b9b !important;\n }\n .text-gray {\n color: #afafaf !important;\n }\n .text-gray-dark {\n color: #c6c6c6 !important;\n }\n .text-green {\n color: #484 !important;\n }\n .text-orange {\n color: #f3582c !important;\n }\n .text-orange-light {\n color: #fb8532 !important;\n }\n .text-purple {\n color: #8348af !important;\n }\n .text-white {\n color: #fff !important;\n }\n .bg-pending, .text-pending {\n color: #cb4 !important;\n }\n .link-gray {\n color: #afafaf !important;\n }\n .link-gray:hover {\n color: #4f8cc9 !important;\n }\n .link-gray-dark {\n color: #c6c6c6 !important;\n }\n .link-gray-dark:hover, .link-hover-blue:hover {\n color: #4f8cc9 !important;\n }\n .muted-link {\n color: #afafaf !important;\n }\n .muted-link:hover {\n color: #4f8cc9 !important;\n }\n .details-overlay[open] > summary::before {\n background-color: transparent;\n }\n .details-overlay-dark[open] > summary::before {\n background-color: rgba(220, 220, 220, .5);\n }\n .lead {\n color: #afafaf;\n }\n .text-emphasized {\n color: #c6c6c6;\n }\n .text-shadow-dark {\n text-shadow: 0 1px 1px rgba(220, 220, 220, .25), 0 1px 25px rgba(27, 31, 35, .75);\n }\n .text-shadow-light {\n text-shadow: 0 1px 0 hsla(0, 0%, 0%, .5);\n }\n .flash {\n color: #9daccc;\n background-color: #182030;\n border-color: rgba(220, 220, 220, .15);\n }\n .flash-close {\n background: none;\n }\n .flash-warn {\n color: #bba257;\n background-color: #261d08;\n }\n .flash-error, .flash-warn {\n border-color: rgba(220, 220, 220, .15);\n }\n .flash-error {\n color: #f84848;\n background-color: #300;\n }\n .flash-success {\n color: #6cc644;\n background-color: #002800;\n border-color: rgba(220, 220, 220, .15);\n }\n .warning {\n background-color: #261d08;\n }\n .avatar-child {\n background-color: #181818;\n box-shadow: -2px -2px 0 hsla(0, 0%, 0%, .8);\n }\n .avatar-stack .avatar {\n background-color: #181818;\n border-right-color: var(--ghd-bg-color);\n }\n .avatar-stack .avatar:only-child {\n background-color: transparent;\n }\n .AvatarStack-body {\n background-color: #181818;\n }\n .AvatarStack-body .avatar {\n background-color: #181818;\n border-right-color: var(--ghd-bg-color);\n }\n .avatar.avatar-more {\n background-color: #222;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before {\n outline: 1px solid #181818;\n }\n .avatar.avatar-more::after, .avatar.avatar-more::before,\n .AvatarStack--right .avatar.avatar-more {\n background-color: #343434;\n }\n .AvatarStack--right .avatar.avatar-more::after {\n background-color: #222;\n }\n .AvatarStack--right .avatar {\n border-left-color: var(--ghd-bg-color);\n }\n .DashedConnection::before {\n border-bottom-color: #343434;\n }\n .blankslate {\n background-color: #181818;\n border-color: #343434;\n box-shadow: inset 0 0 10px rgba(220, 220, 220, .05);\n }\n .blankslate code {\n background-color: #181818;\n border-color: #2c2c2c;\n }\n .blankslate-icon {\n color: #767676;\n }\n .blankslate-clean-background {\n background: none;\n box-shadow: none;\n }\n .branch-name {\n color: rgba(230, 230, 230, .6);\n background-color: #182030;\n }\n .branch-name .octicon {\n color: #767676;\n }\n a.branch-name {\n color: #4f8cc9;\n }\n .label, .Label {\n color: #fff;\n }\n .Label--gray {\n color: #afafaf;\n background-color: #2c2c2c;\n }\n .Label--outline {\n color: #afafaf;\n background-color: transparent;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .Label--outline-green {\n color: #484;\n border-color: #373;\n }\n .Label--gray-darker {\n background-color: #444;\n }\n .Label--orange {\n background-color: #f3582c;\n }\n .state, .State {\n color: #fff;\n background-color: #444;\n }\n .State--green {\n background-color: #373;\n }\n .State--purple {\n background-color: #8348af;\n }\n .State--red {\n background-color: #d82828;\n }\n .Counter {\n color: #afafaf;\n }\n .Counter, .Counter--gray-light {\n background-color: rgba(220, 220, 220, .15);\n }\n .Counter--gray-light {\n color: #c6c6c6;\n }\n .Counter--gray {\n color: #fff;\n background-color: #444;\n }\n .markdown-body .absent {\n color: #d82828;\n }\n .markdown-body hr {\n background-color: #343434;\n }\n .markdown-body blockquote {\n color: #9b9b9b;\n border-left-color: #343434;\n }\n .markdown-body kbd {\n color: #afafaf;\n background-color: #181818;\n border-color: #767676 #767676 #484848;\n box-shadow: inset 0 -2px 0 #383838;\n }\n .markdown-body h1 .octicon-link, .markdown-body h2 .octicon-link,\n .markdown-body h3 .octicon-link, .markdown-body h4 .octicon-link,\n .markdown-body h5 .octicon-link, .markdown-body h6 .octicon-link {\n color: #dcdcdc;\n }\n .markdown-body h1, .markdown-body h2 {\n border-bottom-color: #2c2c2c;\n }\n .markdown-body h6 {\n color: #9b9b9b;\n }\n .markdown-body table td, .markdown-body table th {\n border-color: #343434;\n }\n .markdown-body table tr {\n background-color: #181818;\n border-top-color: #767676;\n }\n .markdown-body table tr:nth-child(2n) {\n background-color: #222;\n }\n .markdown-body table img {\n background-color: transparent;\n }\n .markdown-body img {\n background-color: #181818;\n }\n .markdown-body .emoji {\n background-color: transparent;\n }\n .markdown-body span.frame > span {\n border-color: #343434;\n }\n .markdown-body span.frame span span {\n color: #c6c6c6;\n }\n .markdown-body code, .markdown-body tt {\n background-color: rgba(220, 220, 220, .05);\n }\n .markdown-body pre > code {\n background-color: transparent;\n }\n .markdown-body .highlight pre, .markdown-body pre {\n background-color: #222;\n }\n .markdown-body pre code, .markdown-body pre tt {\n background-color: transparent;\n }\n .markdown-body .csv-data .blob-num {\n background-color: #181818;\n }\n .markdown-body .csv-data th {\n background-color: #222;\n }\n .Popover-message::before {\n border-bottom-color: rgba(220, 220, 220, .15);\n }\n .Popover-message::after {\n border-bottom-color: var(--ghd-bg-color);\n }\n .Popover-message--bottom-left::before,\n .Popover-message--bottom-right::before, .Popover-message--bottom::before {\n border-top-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--bottom-left::after, .Popover-message--bottom-right::after,\n .Popover-message--bottom::after {\n border-top-color: var(--ghd-bg-color);\n }\n .Popover-message--right-bottom::before, .Popover-message--right-top::before,\n .Popover-message--right::before {\n border-left-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--right-bottom::after, .Popover-message--right-top::after,\n .Popover-message--right::after {\n border-left-color: var(--ghd-bg-color);\n }\n .Popover-message--left-bottom::before, .Popover-message--left-top::before,\n .Popover-message--left::before {\n border-right-color: rgba(220, 220, 220, .15);\n }\n .Popover-message--left-bottom::after, .Popover-message--left-top::after,\n .Popover-message--left::after {\n border-right-color: var(--ghd-bg-color);\n }\n .Progress {\n background-color: #343434;\n }\n .Subhead {\n border-bottom-color: #343434;\n }\n .Subhead-heading--danger {\n color: #d82828;\n }\n .pullquote, .Subhead-description {\n color: #afafaf;\n }\n .pullquote {\n border-left-color: #343434;\n }\n .btn-orange {\n color: #fff;\n }\n .btn-orange.hover, .btn-orange:hover {\n border-color: rgba(220, 220, 220, .5);\n }\n .btn-orange.selected, .btn-orange:active, [open] > .btn-orange {\n background-image: none;\n border-color: rgba(220, 220, 220, .5);\n box-shadow: inset 0 .15em .3em #000;\n }\n .btn-orange.disabled, .btn-orange:disabled {\n background-image: none;\n border-color: rgba(220, 220, 220, .2);\n box-shadow: none;\n }\n .btn-orange .Counter, .btn-outline-purple {\n background-color: #181818;\n }\n .btn-outline-purple {\n color: #8348af;\n background-image: none;\n }\n .btn-outline-purple.selected, .btn-outline-purple:active,\n .btn-outline-purple:hover, [open] > .btn-outline-purple {\n color: #fff;\n background-color: #8348af;\n background-image: none;\n border-color: #8348af;\n }\n .btn-outline-purple.selected .Counter, .btn-outline-purple:active .Counter,\n .btn-outline-purple:hover .Counter, [open] > .btn-outline-purple .Counter {\n color: #8348af;\n background-color: #181818;\n }\n .btn-outline-purple:focus {\n border-color: #8348af;\n }\n .btn-outline-purple.disabled, .btn-outline-purple:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-outline-orange {\n color: #fb8532;\n background-color: #181818;\n background-image: none;\n }\n .btn-outline-orange.selected, .btn-outline-orange:active,\n .btn-outline-orange:hover, [open] > .btn-outline-orange {\n color: #fff;\n background-color: #fb8532;\n background-image: none;\n border-color: #fb8532;\n }\n .btn-outline-orange.selected .Counter, .btn-outline-orange:active .Counter,\n .btn-outline-orange:hover .Counter, [open] > .btn-outline-orange .Counter {\n color: #fb8532;\n background-color: #181818;\n }\n .btn-outline-orange:focus {\n border-color: #fb8532;\n }\n .btn-outline-orange.disabled, .btn-outline-orange:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-outline-green {\n color: #484;\n background-color: #181818;\n background-image: none;\n }\n .btn-outline-green.selected, .btn-outline-green:active,\n .btn-outline-green:hover, [open] > .btn-outline-green {\n color: #fff;\n background-color: #484;\n background-image: none;\n border-color: #484;\n }\n .btn-outline-green.selected .Counter, .btn-outline-green:active .Counter,\n .btn-outline-green:hover .Counter, [open] > .btn-outline-green .Counter {\n color: #484;\n background-color: #181818;\n }\n .btn-outline-green:focus {\n border-color: #484;\n }\n .btn-outline-green.disabled, .btn-outline-green:disabled {\n color: rgba(230, 230, 230, .3);\n background-color: #181818;\n border-color: rgba(220, 220, 220, .15);\n box-shadow: none;\n }\n .btn-transparent {\n color: #fff;\n background-color: transparent;\n background-image: none;\n border-color: hsla(0, 0%, 0%, .5);\n }\n .btn-transparent:active, .btn-transparent:hover {\n color: #c6c6c6;\n background-color: #181818;\n background-image: none;\n border-color: var(--ghd-bg-color);\n }\n .jumbotron-shadow::after {\n background-color: transparent;\n }\n .jumbotron-photo {\n background-color: #181818;\n }\n .data-table {\n border-color: #343434;\n box-shadow: 0 1px 1px rgba(220, 220, 220, .05);\n }\n .data-table td, .data-table th {\n border-right-color: #343434;\n border-bottom-color: #343434;\n }\n .data-table tbody td, .data-table tbody th,\n .data-table tbody tr:last-child td, .data-table tbody tr:last-child th {\n border-bottom-color: #343434;\n }\n .border-white-fade {\n border-color: hsla(0, 0%, 0%, .15) !important;\n }\n .footer {\n background-color: #222;\n }\n #token {\n color: #fff;\n }\n .token-did-copy {\n background-color: #181818;\n }\n /* end vscode-auth.github.com rules */\n .footer {\n background: #202020;\n }\n #token {\n background: #182030;\n border-color: #343434;\n }\n .token-did-copy {\n background: #181818;\n }\n .failed {\n border-color: #343434;\n }", + "start": 821859, + "domains": [ + "vscode-auth.github.com" + ] + }, + { + "code": ":root:root {\n /* github dark vars */\n --ghd-bg-custom: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAAAAABURb1YAAAFnklEQVR4AWWXCY4cwXbE6h4JMhCvMPc/ov+3Ox9QsLCGpKlFHILd+UQ559AGDkBSFXWmomonqkL/XuUcIPUcONjHCJyE36KaqNiaRnVCG9TGpgIU9hIfohCBVGj24ammo04lU3Fy0NZDAyZi5AElHjgEGlRbG1WjraIt7TmADQkAaoEHsOXAAaeqat9RVTqjosyEH5W+DQCQt8BzIJMfXJI3e5tGRefSlRn3NrO3scnvNl26FN5RITGNfjm3GM/+FhQgnlQeImC+dEm8rzHVTNGL9EADVsTAIfGJBziRy7RlmcZU1IYpHIj+4JrWym8/XSwzompmFNVOFdTOAAfs61KZ6eXcp57fykQUOxNBmTesz2HpCnCg3UV/bA7VRpWGNqKtrYLTs0ilCjgxiZxjeLC5dDPBFn4Pn2ja6BRUL10DTgET4Focq8rn8casxV4E5tIlZvytqtfivCOKZrqc38G7egnkXecyPZdzubc57VtUnbfL+a0u3b1N3d9Mci7cKocHoh3xihLQ6fXUlgTOOfVkXSUFINoWHhqxE23RTmCqtoEJaITkIrUCkU9fnqpqm+40VSXS3CLaSzfGBb4rPuOSfN0ylLve6/jpcrbL2dTlnOdv5AamKjLvLN1XruMNS/cul/hx8twKpKYRaE2DOp8+c+lW7uVXVQ7Vx0x1G3HXjNocsHCac7NbWc6egwJVHu2kRTVNC2pqv2U4XNsv5/yWJlV9+NJ1C7xluInlcr7rK+Kg+qy7onQqgnbi7UHcS3qXjdw3bO5tumycYlVssMI5EXXpRnatPK362KodtVU60cm+eQT10sVLFwJYlVaf7UGSoi5dQF3DvnTX3UvXTPO8quKH7jsXhm/PxfKWZXqBM5sS33kmKtC31Q05fI095i5IPpyzRXqSy1Sr17p1F7NE8vMtnNbLpVVtk8c0OrfF0sKxHnIpYgHW4puMomTz8mgmrSjpvrxhX97l7LqLpl7bW9BH9/MNzF8XwRqL8/m7c30eFYV5VX3QTquK06XbLt16F4ks+8Z9m6gPtpcuk3OvibCekng4lzMHi9MoqZmKj9tdbQCbc7bcEA+oEJduRNNL1waf1tuI9MDBUK8t3k9uFz3rrqadO9Ln9TL/ezlwDvky3TW7ZmXfpc77TN0yhOXnP939LvVDV9s+tgLTm0TqYd1lea3PRFuVjLa562HdPbCfascGrvO3DMeIATVqVRO8vfHrbupdfo1dzlXUdkVLZsS1mLPG3rWcl+4B1l1537h0VXzU1tyLG7cCu+LSrSqo06hocy3WCcil65qHDbuEYzQN2HpT3jFt9LEFvHTP1nxbXOEkbhkKmd+6BTfVZ/I143z/Fyz6Za92o0I7I6gzfeYAHPwy/Rb43L9TLtMt8CtwW1xvQvbR1g9n7qJRNN1kdxcdH7cM58Szxq679MdLOhE72t6VNEpHHkzwRyjBcGth+dE99pIkVbWaEWmvnQ8Yl7Mp59zpRWXdNo6odrO754Zzvxf/010nP7onb1TR+bgbVPB9PcADJvH/043Kvk0UzLRxQ6UiaeTAcyxYl2lyrrvZv8v2wE7U1uVcST0821jJeIDKWuyxiqnuko7q3+zJYXJ46nV3D67EyL+lQ9F2qkr+3kUafQpwYE8T329p6y7OX1TF97fQv/c+l87zj7Hsgpig4qRLd9fMPs74rLGyCzRbhmVqpy7nqvPmTD1gvKe7b2U8u1QzmtuDuEtbgT3c8QBJveo6cueFkUwv59nVmfFw1jl4/unuOT9qERV76ers8n23z/c8/Xy7a4lwwLplmGusbRp33Up13+ZDN3KPxNVMhY62vUQyRTse6+cKHtZYjIfDh260Cjbb3Vy6R8H8SMBzqSwrsB1UTacoknlnOb8V4JD9Njfpwz/fHjpBUeevcAtcl65sqXPX9D87RUTLc/dfOgAAAABJRU5ErkJggg==);\n --ghd-bg-img: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAAAAABURb1YAAAFoUlEQVR4AWXWCY7kMJcDYd9DiCD4jLr/EWezJOT8vbMXy8ZngpVPlLUWbWABJFVRZyqqdqIq9O9V1gJS14KFfYzASvgS1UTF1jSqE9qgNjYVoNxLfIhCBFKhOTdPNR11KpmKk4W2LhowESMPKHHBItCg2tqoGm0VbWnXAmxIAFALPIAtCxY4VVX7jqrSGRVlJnwqfRsAIG+BZ0EmHy7Jm3NMo6KzdWXGc8ycY2zyHdOrW3hHhcQ0+uvcYlz3LQgQVyrPp2t+dUncjzHVTNFNuvhwK2Jgkfh856/INm05pjEVtWEKC6IfrmmtfPnpYZkRVTPjFztVUDsDLLCvR2WmX6RPXV/KRBQ7E0GZN5w+5+rKd2J7Ev1sFtVGlYY2oq2tgtN1SakCTkwiaxkebLZuJtjCd/OvyY1OQXXrGnAKfE67xbGq/NzemNviTWC2LjHjl6ruFucdUTTT4/wO7tQtkPd0LtO1ncs+ZrVvUXXeHue3Xt1zTD1vJlkbt8rigWhH3EUJ6HT31JYE1lp15XY1BSDaFh4asRNt0U5gqraB+UyFZJNagXh/qTxV1TY90VSVSLMX0W7dGA/4SfEZj+R7l6Hs9O6Orx5ne51Tj3Oev5E9MFWReefovrI73lzdnTziy8mTRjU1jZ99GtT52We2bmVfvqvKovqYqZ6N2GlGbRZYWM3CRKzX2bVQoMqjnbSopmlBTe3vMix227dzvqRJVR9+dT0LfJZhTyzbeaffIg6qz+muKJ2KoJ249yD3ku5kI/sJm31Mj41TrIoNVlgrolc33nTK06qPrdpRW6UTnZwnj6BuXdy6EMCqtPqcPUhS9OoC6mnYr+7p7tY10zyfLv7ovrMxfLs2y9trusGZMyW+80zU7z9Wz5D//8YusxMkP845i/Qk21Sru3W3u+aI5OtbWK3bpVVtk8c0OnuLpYVlXWQrYgFui0nAouTMy6OZtKKk5+EN9+GPs6e7aOpuewv6eL++gfnrIbiNdX7+bu0+j4rCvKo+aKdVxenV7dGtO3F1aRrP00R9sN26TNa+JsLpKYmLtZ1ZWJxGSc1UfDy7q/1Ms9ZdbuICFXJ1I5puXRt8WlXTpAsWhrrb4v7K7e3N7a5pZ4f0ed3mfy8L1iLzr3PmpDllv0nnfaaeZcj185/d/U3qj662fWwFpnsSqYvb3eN1+ky0Vclom50eTncXxA9x2cDu/F6GZcSAGrWqCe698be7qTv529jjXEVtT9GSGbktZp3G7nScj+4CTnflfXN1VXzU1uyLG88KnBSPblVBnUZFm91inYBsXW/zbG4SltE0YKtp1I5po4/tbWxYZ83PFldYiWcZCpkvaUc11Weu7iYwhltZfu3VnlGhnRHUmT6zABb+mv4u8Np/p1xTVd9XYG9x3RNybm39cWYnGkXTO9kn0fG5y7BWXKexp7v085JOxI62OyWN0pEHE/yEEgx7LSyf7rJbklTVakak3e18wHicTVlrRzeV9WzjiGrP7NqZAmt/Lv5nd518uitvVNH56W5Qwfd1AQ+YxP/UjXqfJgpm2tyhUpE0suBZFqzHNFm7uzl/l7sHnajtdf68Fs/ZWMm4gHpb/OliqjfRUf2bmBGYLJ66u5vJrpqRf5cORdupKvl7D2n06VdiMl3/sbvrdBfnL6ri+yX07933pfP801huIiaoOLm6J82c2xkfb2NPAs1Zhmva6XWuOm/W1P0+Hmz4XRnXTWpGs/cgN2nvZwsiPEBSd3Ud2XFjJNPtPCd1Zlys2zmef3Z3rU8tomK3rs5N73v3+ZXd4uY6E2GB9SzD7MbaprkJYN1rn1/dSCJrWc1U6GjbLZIp2nFZf67g4e6ucbH40Y1WwebsbrbuUjCfxGdzG/uldlA1naJI5p3j/FaARdxvZtKHfz49dIKizl9hL3Cvruf/3Sum/w07RUTLccAlwgAAAABJRU5ErkJggg==);\n --ghd-bg-color: #202020;\n --ghd-code-background: #141414;\n --ghd-main-background: #181818;\n --ghd-border-color: #343434;\n --ghd-code-color: #ccc;\n --ghd-body-color: #ccc;\n /* github vars */\n --color-accent-emphasis: #4f8cc9;\n --color-accent-fg: #4f8cc9;\n --color-accent-muted: rgba(79, 140, 201, .3);\n --color-accent-subtle: #182030;\n --color-alert-error-bg: #341414;\n --color-alert-info-bg: #182030;\n --color-alert-info-border: #246;\n --color-alert-info-icon: #9daccc;\n --color-alert-info-text: #9daccc;\n --color-alert-warn-bg: #241c10;\n --color-alert-warn-icon: #f5b987;\n --color-alert-warn-text: #f5b987;\n --color-ansi-black-bright: #282828;\n --color-ansi-black: #181818;\n --color-ansi-blue-bright: #c8e1ff;\n --color-ansi-blue: #79b8ff;\n --color-ansi-cyan-bright: #b3f0ff;\n --color-ansi-cyan: #76e3ea;\n --color-ansi-gray: #959da5;\n --color-ansi-green-bright: #bef5cb;\n --color-ansi-green: #85e89d;\n --color-ansi-magenta-bright: #d1bcf9;\n --color-ansi-magenta: #b392f0;\n --color-ansi-red-bright: #fdaeb7;\n --color-ansi-red: #f97583;\n --color-ansi-white-bright: #e1e4e8;\n --color-ansi-white: #e1e4e8;\n --color-ansi-yellow-bright: #fff5b1;\n --color-ansi-yellow: #ffea7f;\n --color-attention-emphasis: #cb4;\n --color-auto-blue-2: rgba(79, 140, 201, .25);\n --color-auto-blue-3: rgba(79, 140, 201, .5);\n --color-auto-blue-4: #4f8cc9;\n --color-auto-blue-5: #4f8cc9;\n --color-auto-blue-9: #9daccc;\n --color-auto-gray-1: #212121;\n --color-auto-gray-2: #282828;\n --color-auto-gray-3: #343434;\n --color-auto-gray-4: #606060;\n --color-auto-gray-5: #767676;\n --color-auto-gray-6: #9b9b9b;\n --color-auto-gray-7: #afafaf;\n --color-auto-purple-2: #8348af;\n --color-auto-purple-3: #8348af;\n --color-auto-purple-4: #8348af;\n --color-auto-white: #181818;\n --color-autocomplete-bg: #181818;\n --color-autocomplete-border: #343434;\n --color-autocomplete-row-border: #181818;\n --color-avatar-bg: none;\n --color-avatar-border: none;\n --color-bg-canvas-inset: #181818;\n --color-bg-canvas-inverse: #c6c6c6;\n --color-bg-canvas-mobile: var(--ghd-bg-color);\n --color-bg-canvas: var(--ghd-bg-color);\n --color-bg-discussions-row-emoji-box: #343434;\n --color-bg-info-inverse: #4f8cc9;\n --color-bg-info: #182030;\n --color-bg-overlay: var(--color-canvas-overlay);\n --color-bg-primary: #181818;\n --color-bg-secondary: #222;\n --color-bg-tertiary: #282828;\n --color-blankslate-icon: #afafaf;\n --color-border-default: #343434;\n --color-border-info: #4f8cc9;\n --color-border-inverse: #343434;\n --color-border-muted: #343434;\n --color-border-overlay: #343434;\n --color-border-primary: #343434;\n --color-border-secondary: #343434;\n --color-border-subtle: #ffffff10;\n --color-border-tertiary: #484848;\n --color-box-bg-info: #182030;\n --color-box-blue-border: #246;\n --color-box-border-info: #246;\n --color-box-header-blue-bg: #182030;\n --color-box-header-blue-border: #246;\n --color-branch-name-link-bg: #182030;\n --color-btn-active-bg: #343434;\n --color-btn-active-border: #606060;\n --color-btn-bg-hover: #222;\n --color-btn-bg: #181818;\n --color-btn-border: #343434;\n --color-btn-counter-bg: transparent;\n --color-btn-danger-hover-text: #fff;\n --color-btn-danger-selected-text: #fff;\n --color-btn-danger-shadow: none;\n --color-btn-focus-border: #484848;\n --color-btn-focus-shadow: none;\n --color-btn-hover-bg: #242424;\n --color-btn-hover-border: #484848;\n --color-btn-inverse-on-hover-shadow-inset: none;\n --color-btn-outline-disabled-bg: #242424;\n --color-btn-outline-focus-border: #4f8cc9;\n --color-btn-outline-focus-shadow: none;\n --color-btn-outline-hover-bg: #222;\n --color-btn-outline-hover-border: #4f8cc9;\n --color-btn-outline-hover-inset-shadow: none;\n --color-btn-outline-hover-shadow: none;\n --color-btn-outline-hover-text: #4f8cc9;\n --color-btn-outline-selected-bg: #4f8cc9;\n --color-btn-outline-selected-border: #4f8cc9;\n --color-btn-outline-selected-text: #fff;\n --color-btn-outline-shadow-focus: none;\n --color-btn-outline-shadow: none;\n --color-btn-outline-text: #4f8cc9;\n --color-btn-primary-disabled-shadow: none;\n --color-btn-primary-shadow-highlight: none;\n --color-btn-primary-shadow-selected: none;\n --color-btn-primary-text: #fff;\n --color-btn-selected-bg: #282828;\n --color-btn-shadow-input-focus: none;\n --color-btn-text: #c6c6c6;\n --color-calendar-graph-day-bg: #282828;\n --color-calendar-graph-day-L1-bg: rgba(79, 140, 201, .25);\n --color-calendar-graph-day-L2-bg: rgba(79, 140, 201, .5);\n --color-calendar-graph-day-L3-bg: rgba(79, 140, 201, .75);\n --color-calendar-graph-day-L4-bg: #4f8cc9;\n --color-canvas-default: #181818;\n --color-canvas-inset: #181818;\n --color-canvas-overlay: #1c1c1c;\n --color-canvas-subtle: #222;\n --color-checks-bg: #181818;\n --color-checks-btn-hover-bg: #343434;\n --color-checks-btn-hover-icon: #afafaf;\n --color-checks-btn-icon: #606060;\n --color-checks-dropdown-bg: #343434;\n --color-checks-dropdown-border: #484848;\n --color-checks-dropdown-btn-hover-bg: #282828;\n --color-checks-dropdown-btn-hover-text: #c6c6c6;\n --color-checks-dropdown-hover-bg: #4f8cc9;\n --color-checks-dropdown-hover-text: #fff;\n --color-checks-dropdown-text: #afafaf;\n --color-checks-gate-text: #767676;\n --color-checks-header-border: #343434;\n --color-checks-header-icon: #606060;\n --color-checks-header-label-open-text: #afafaf;\n --color-checks-header-label-text: #afafaf;\n --color-checks-input-bg: #282828;\n --color-checks-input-focus-text: #afafaf;\n --color-checks-input-placeholder-text: #565656;\n --color-checks-input-shadow: none;\n --color-checks-input-text: #767676;\n --color-checks-line-dt-fm-text: #222;\n --color-checks-line-hover-bg: #242424;\n --color-checks-line-num-text: #606060;\n --color-checks-line-selected-bg: #242424;\n --color-checks-line-text: #9b9b9b;\n --color-checks-line-timestamp-text: #767676;\n --color-checks-logline-error-num-text: #767676;\n --color-checks-logline-error-text: #767676;\n --color-checks-logline-num-text: #767676;\n --color-checks-logline-text: #606060;\n --color-checks-logline-warning-text: #767676;\n --color-checks-scrollbar-thumb-bg: #484848;\n --color-checks-step-header-open-bg: #282828;\n --color-checks-text-link: #4f8cc9;\n --color-checks-text-primary: #afafaf;\n --color-checks-text-secondary: #767676;\n --color-counter-bg: #343434;\n --color-counter-primary-bg: #484848;\n --color-counter-primary-text: #bfbfbf;\n --color-counter-secondary-text: #9b9b9b;\n --color-counter-text: #afafaf;\n --color-current-user-tip-bg: #182030;\n --color-current-user-tip-border: #246;\n --color-diff-blob-addition-line-bg: #002800;\n --color-diff-blob-addition-num-bg: #0a320a;\n --color-diff-blob-addition-num-hover-text: #e6e6e6;\n --color-diff-blob-addition-num-text: #939393;\n --color-diff-blob-addition-word-bg: #252;\n --color-diff-blob-comment-button-icon: #fff;\n --color-diff-blob-deletion-line-bg: #380000;\n --color-diff-blob-deletion-num-bg: #420a0a;\n --color-diff-blob-deletion-num-hover-text: #e6e6e6;\n --color-diff-blob-deletion-num-text: #939393;\n --color-diff-blob-deletion-word-bg: #622;\n --color-diff-blob-empty-block-bg: #282828;\n --color-diff-blob-expander-hover-bg: #4f8cc9;\n --color-diff-blob-expander-hover-icon: #fff;\n --color-diff-blob-expander-icon: #9b9b9b;\n --color-diff-blob-hunk-line-bg: #202020;\n --color-diff-blob-hunk-num-bg: #2b2b2b;\n --color-diff-blob-hunk-text: #9b9b9b;\n --color-diff-blob-num-hover-text: #c6c6c6;\n --color-diff-blob-num-text: #767676;\n --color-diffstat-addition-bg: #6cc644;\n --color-diffstat-addition-border: #6cc644;\n --color-diffstat-deletion-bg: #d82828;\n --color-diffstat-deletion-border: #d82828;\n --color-diffstat-neutral-bg: #484848;\n --color-diffstat-neutral-border: #484848;\n --color-done-fg: #8348af;\n --color-fg-default: var(--ghd-body-color);\n --color-fg-muted: #afafaf;\n --color-fg-on-emphasis: #eee;\n --color-fg-subtle: #606060;\n --color-files-explorer-icon: #4f8cc9;\n --color-footer-invertocat-octicon: #484848;\n --color-global-nav-icon: none;\n --color-global-nav-logo: none;\n --color-global-nav-text: none;\n --color-header-search-bg: #202020;\n --color-header-search-border: #343434;\n --color-header-text: #c6c6c6;\n --color-hidden-text-expander-bg-hover: #484848;\n --color-hidden-text-expander-bg: #343434;\n --color-icon-directory: #4f8cc9;\n --color-icon-primary: #c6c6c6;\n --color-icon-secondary: #afafaf;\n --color-icon-tertiary: #767676;\n --color-input-bg: #181818;\n --color-input-border: #343434;\n --color-input-contrast-bg: #181818;\n --color-input-disabled-bg: #343434;\n --color-input-disabled-border: #484848;\n --color-input-shadow-focus: none;\n --color-input-shadow: none;\n --color-label-primary-border: #484848;\n --color-label-primary-text: #afafaf;\n --color-label-secondary-border: #343434;\n --color-label-secondary-text: #9b9b9b;\n --color-markdown-blockquote-border: #343434;\n --color-markdown-code-bg: #222;\n --color-markdown-table-border: #343434;\n --color-menu-bg-active: #242424;\n --color-menu-border-active: #eee;\n --color-menu-heading-text: #767676;\n --color-merge-box-error-icon-bg: #d82828;\n --color-merge-box-error-icon-border: #d82828;\n --color-merge-box-error-icon-text: #fff;\n --color-merge-box-merged-box-border: #8348af;\n --color-merge-box-merged-icon-bg: #8348af;\n --color-merge-box-merged-icon-border: #8348af;\n --color-merge-box-merged-icon-text: #fff;\n --color-merge-box-neutral-icon-border: transparent;\n --color-merge-box-neutral-icon-text: #fff;\n --color-merge-box-neutral-indicator-bg: #484848;\n --color-merge-box-success-icon-bg: #484;\n --color-merge-box-success-icon-border: #484;\n --color-merge-box-success-icon-text: #fff;\n --color-merge-box-success-indicator-bg: #484;\n --color-merge-box-success-indicator-border: #585;\n --color-merge-box-warning-icon-text: #fff;\n --color-mktg-btn-text: #fff;\n --color-neutral-emphasis-plus: #9b9b9b;\n --color-neutral-emphasis: #606060;\n --color-neutral-muted: #2c2c2c;\n --color-neutral-subtle: #242424;\n --color-notifications-row-bg: #181818;\n --color-page-header-bg: rgba(20, 20, 20, .4);\n --color-pr-state-closed-bg: #d82828;\n --color-pr-state-closed-border: transparent;\n --color-pr-state-closed-text: #fff;\n --color-pr-state-draft-bg: #484848;\n --color-pr-state-draft-border: transparent;\n --color-pr-state-draft-text: #fff;\n --color-pr-state-merged-bg: #8348af;\n --color-pr-state-merged-border: transparent;\n --color-pr-state-merged-text: #fff;\n --color-pr-state-open-bg: #484;\n --color-pr-state-open-border: transparent;\n --color-pr-state-open-text: #fff;\n --color-primer-border-active: #eee;\n --color-primer-shadow-focus: 0 0 0 2.25px rgba(79, 140, 201, .3);\n --color-project-card-bg: #202020;\n --color-project-sidebar-bg: #202020;\n --color-scale-gray-0: #c6c6c6;\n --color-scale-gray-1: #afafaf;\n --color-scale-gray-2: #9b9b9b;\n --color-scale-gray-3: #767676;\n --color-scale-gray-4: #606060;\n --color-scale-gray-5: #545454;\n --color-scale-gray-6: #424242;\n --color-scale-gray-7: #343434;\n --color-scale-gray-8: #2d2d2d;\n --color-scale-gray-9: #202020;\n --color-scale-purple-0: #9378ba;\n --color-scale-purple-1: #9378ba;\n --color-scale-purple-2: #8348af;\n --color-scale-purple-3: #8348af;\n --color-scale-purple-4: #8348af;\n --color-scale-purple-5: #8348af;\n --color-scale-purple-6: #8348af;\n --color-scale-purple-7: #53387a;\n --color-scale-purple-8: #53387a;\n --color-scale-purple-9: #213;\n --color-scale-white: #eee;\n --color-search-hover-hl: #242424;\n --color-select-menu-backdrop-border: #343434;\n --color-select-menu-border-secondary: #343434;\n --color-select-menu-shadow: none;\n --color-shadow-highlight: none;\n --color-shadow-inset: none;\n --color-shadow-large: none;\n --color-shadow-medium: none;\n --color-shadow-small: none;\n --color-sidenav-border-active: #eee;\n --color-sidenav-selected-bg: #282828;\n --color-social-count-bg: #181818;\n --color-social-reaction-bg-hover: #343434;\n --color-state-focus-border: #4f8cc9;\n --color-state-focus-shadow: 0 0 0 2.25px rgba(79, 140, 201, .3);\n --color-state-hover-primary-bg: #4f8cc9;\n --color-state-hover-primary-icon: #fff;\n --color-state-hover-primary-text: #fff;\n --color-state-hover-secondary-bg: #242424;\n --color-state-selected-primary-bg: #4f8cc9;\n --color-state-selected-primary-icon: #fff;\n --color-state-selected-primary-text: #fff;\n --color-success-fg: #6cc644;\n --color-text-danger: #f84848;\n --color-text-disabled: #707070;\n --color-text-inverse: #000;\n --color-text-link: #4f8cc9;\n --color-text-primary: #c6c6c6;\n --color-text-secondary: #afafaf;\n --color-text-success: #6cc644;\n --color-text-tertiary: #9b9b9b;\n --color-text-white: #fff;\n --color-timeline-badge-bg: #383838;\n --color-timeline-text: #c6c6c6;\n --color-tooltip-bg: #282828;\n --color-tooltip-text: #c6c6c6;\n --color-underlinenav-border-active: #eee;\n --color-underlinenav-counter-bg: #343434;\n --color-underlinenav-counter-text: #c6c6c6;\n --color-underlinenav-icon-active: #c6c6c6;\n --color-underlinenav-icon: #767676;\n --color-underlinenav-text-active: #c6c6c6;\n --color-underlinenav-text-hover: #c6c6c6;\n --color-underlinenav-text: #9b9b9b;\n --color-upload-enabled-border: #343434;\n --color-verified-badge-bg: #181818;\n --color-verified-badge-border: #343434;\n --color-verified-badge-text: #6cc644;\n --color-workflow-card-bg: #303030;\n }", + "start": 850626, + "regexps": [ + "^https?://((education|gist|graphql|guides|raw|resources|status|support|vscode-auth)\\.)?github\\.com((?!(/(sponsors|readme)$)).)*$", + "^https?://www\\.zuora\\.com.*github\\.com.*" + ], + "domains": [ + "githubusercontent.com", + "www.githubstatus.com", + "stylishthemes.github.io" + ] + } + ], + "usercssData": { + "name": "GitHub Dark", + "namespace": "StylishThemes", + "version": "5.1.82", + "homepageURL": "https://github.com/StylishThemes/GitHub-Dark", + "updateURL": "https://stylishthemes.github.io/GitHub-Dark/github-dark.user.css", + "license": "BSD-2-Clause", + "author": "StylishThemes", + "vars": { + "base-color": { + "type": "color", + "label": "Base color", + "name": "base-color", + "value": null, + "default": "#4f8cc9", + "options": null + }, + "bg-color": { + "type": "color", + "label": "Background Color", + "name": "bg-color", + "value": null, + "default": "#202020", + "options": null + }, + "bg-choice": { + "type": "select", + "label": "Background", + "name": "bg-choice", + "value": null, + "default": "crosshatch", + "options": [ + { + "name": "crosshatch", + "label": "Cross-Hatch", + "value": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAAAAABURb1YAAAFoUlEQVR4AWXWCY7kMJcDYd9DiCD4jLr/EWezJOT8vbMXy8ZngpVPlLUWbWABJFVRZyqqdqIq9O9V1gJS14KFfYzASvgS1UTF1jSqE9qgNjYVoNxLfIhCBFKhOTdPNR11KpmKk4W2LhowESMPKHHBItCg2tqoGm0VbWnXAmxIAFALPIAtCxY4VVX7jqrSGRVlJnwqfRsAIG+BZ0EmHy7Jm3NMo6KzdWXGc8ycY2zyHdOrW3hHhcQ0+uvcYlz3LQgQVyrPp2t+dUncjzHVTNFNuvhwK2Jgkfh856/INm05pjEVtWEKC6IfrmmtfPnpYZkRVTPjFztVUDsDLLCvR2WmX6RPXV/KRBQ7E0GZN5w+5+rKd2J7Ev1sFtVGlYY2oq2tgtN1SakCTkwiaxkebLZuJtjCd/OvyY1OQXXrGnAKfE67xbGq/NzemNviTWC2LjHjl6ruFucdUTTT4/wO7tQtkPd0LtO1ncs+ZrVvUXXeHue3Xt1zTD1vJlkbt8rigWhH3EUJ6HT31JYE1lp15XY1BSDaFh4asRNt0U5gqraB+UyFZJNagXh/qTxV1TY90VSVSLMX0W7dGA/4SfEZj+R7l6Hs9O6Orx5ne51Tj3Oev5E9MFWReefovrI73lzdnTziy8mTRjU1jZ99GtT52We2bmVfvqvKovqYqZ6N2GlGbRZYWM3CRKzX2bVQoMqjnbSopmlBTe3vMix227dzvqRJVR9+dT0LfJZhTyzbeaffIg6qz+muKJ2KoJ249yD3ku5kI/sJm31Mj41TrIoNVlgrolc33nTK06qPrdpRW6UTnZwnj6BuXdy6EMCqtPqcPUhS9OoC6mnYr+7p7tY10zyfLv7ovrMxfLs2y9trusGZMyW+80zU7z9Wz5D//8YusxMkP845i/Qk21Sru3W3u+aI5OtbWK3bpVVtk8c0OnuLpYVlXWQrYgFui0nAouTMy6OZtKKk5+EN9+GPs6e7aOpuewv6eL++gfnrIbiNdX7+bu0+j4rCvKo+aKdVxenV7dGtO3F1aRrP00R9sN26TNa+JsLpKYmLtZ1ZWJxGSc1UfDy7q/1Ms9ZdbuICFXJ1I5puXRt8WlXTpAsWhrrb4v7K7e3N7a5pZ4f0ed3mfy8L1iLzr3PmpDllv0nnfaaeZcj185/d/U3qj662fWwFpnsSqYvb3eN1+ky0Vclom50eTncXxA9x2cDu/F6GZcSAGrWqCe698be7qTv529jjXEVtT9GSGbktZp3G7nScj+4CTnflfXN1VXzU1uyLG88KnBSPblVBnUZFm91inYBsXW/zbG4SltE0YKtp1I5po4/tbWxYZ83PFldYiWcZCpkvaUc11Weu7iYwhltZfu3VnlGhnRHUmT6zABb+mv4u8Np/p1xTVd9XYG9x3RNybm39cWYnGkXTO9kn0fG5y7BWXKexp7v085JOxI62OyWN0pEHE/yEEgx7LSyf7rJbklTVakak3e18wHicTVlrRzeV9WzjiGrP7NqZAmt/Lv5nd518uitvVNH56W5Qwfd1AQ+YxP/UjXqfJgpm2tyhUpE0suBZFqzHNFm7uzl/l7sHnajtdf68Fs/ZWMm4gHpb/OliqjfRUf2bmBGYLJ66u5vJrpqRf5cORdupKvl7D2n06VdiMl3/sbvrdBfnL6ri+yX07933pfP801huIiaoOLm6J82c2xkfb2NPAs1Zhmva6XWuOm/W1P0+Hmz4XRnXTWpGs/cgN2nvZwsiPEBSd3Ud2XFjJNPtPCd1Zlys2zmef3Z3rU8tomK3rs5N73v3+ZXd4uY6E2GB9SzD7MbaprkJYN1rn1/dSCJrWc1U6GjbLZIp2nFZf67g4e6ucbH40Y1WwebsbrbuUjCfxGdzG/uldlA1naJI5p3j/FaARdxvZtKHfz49dIKizl9hL3Cvruf/3Sum/w07RUTLccAlwgAAAABJRU5ErkJggg==)" + }, + { + "name": "uniform", + "label": "Uniform Tile", + "value": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAQMAAABKLAcXAAAABlBMVEUfHx8aGhrh02scAAAAH0lEQVR4AWMQRAICeHn/kcAH8vSN6hvVN6pvVN+oPgAPQ4LItqOMdQAAAABJRU5ErkJggg==)" + }, + { + "name": "random", + "label": "Random Tile", + "value": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkAgMAAAANjH3HAAAACVBMVEUaGhohISElJSUh9lebAAABwElEQVR4AY3Vua3gOBgGQQXZhgKYgwHJYAA0Ksu9CAh6hxbTbvFzfx6rNEGlHY6z5KvMw4s43mN2Z5fqYLzKyrfyXhXKnKBdD9n58UWW3Vlb3mOCmWoHHZbdV5lv8t7Ver6ldsfqumVAdbblxxcZVcd7QWq2Y6VsadS4ZTzFDbFa5XivqlxVUFG1Jd6k66u8x0RIOw0cXAiNW2z58bJ5r1LTQtVVuy1x2jK+yLTlxy3v5RogszEXSB0ZF4iYWLbMMUBGPDbvpRQUVUV9kvGU6ynrIe9FOqssJcQ4oqurCjV6ytmqco4SwvGeNCoJaphwSHoK13cyuuU9ZaQI0lB1qB8zT3GL2XjKueU9pR+gH0OlqvGUzHWLQ81O0Dg95L3Uj9qxKx0pr3LdYrnlvQKlUEnV/8v4Xt6bThZROwaO5QfTUyY4GCBWu8Wf/nO4ULtj/li3mE9Z47zlx/WU94Iq7RD5XuZ6ynjIGn9yr1VhFaq2NH9s4bP4Rt5j2NFO5MBXGVsmsD5v3gslYORsd8R1i1rrIUoLKLXlvVhgKH7ApToyhk21TJhbLDvdN151vEetJtKdOtYo4SmnOvhGpjpe+xuj3X723ghdygAAAABJRU5ErkJggg==)" + }, + { + "name": "custom", + "label": "Custom", + "value": "var(--ghd-bg-custom)" + }, + { + "name": "none", + "label": "None", + "value": "none" + } + ] + }, + "bg-custom": { + "type": "text", + "label": "Custom Background", + "name": "bg-custom", + "value": null, + "default": "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAABGCAAAAABURb1YAAAFnklEQVR4AWWXCY4cwXbE6h4JMhCvMPc/ov+3Ox9QsLCGpKlFHILd+UQ559AGDkBSFXWmomonqkL/XuUcIPUcONjHCJyE36KaqNiaRnVCG9TGpgIU9hIfohCBVGj24ammo04lU3Fy0NZDAyZi5AElHjgEGlRbG1WjraIt7TmADQkAaoEHsOXAAaeqat9RVTqjosyEH5W+DQCQt8BzIJMfXJI3e5tGRefSlRn3NrO3scnvNl26FN5RITGNfjm3GM/+FhQgnlQeImC+dEm8rzHVTNGL9EADVsTAIfGJBziRy7RlmcZU1IYpHIj+4JrWym8/XSwzompmFNVOFdTOAAfs61KZ6eXcp57fykQUOxNBmTesz2HpCnCg3UV/bA7VRpWGNqKtrYLTs0ilCjgxiZxjeLC5dDPBFn4Pn2ja6BRUL10DTgET4Focq8rn8casxV4E5tIlZvytqtfivCOKZrqc38G7egnkXecyPZdzubc57VtUnbfL+a0u3b1N3d9Mci7cKocHoh3xihLQ6fXUlgTOOfVkXSUFINoWHhqxE23RTmCqtoEJaITkIrUCkU9fnqpqm+40VSXS3CLaSzfGBb4rPuOSfN0ylLve6/jpcrbL2dTlnOdv5AamKjLvLN1XruMNS/cul/hx8twKpKYRaE2DOp8+c+lW7uVXVQ7Vx0x1G3HXjNocsHCac7NbWc6egwJVHu2kRTVNC2pqv2U4XNsv5/yWJlV9+NJ1C7xluInlcr7rK+Kg+qy7onQqgnbi7UHcS3qXjdw3bO5tumycYlVssMI5EXXpRnatPK362KodtVU60cm+eQT10sVLFwJYlVaf7UGSoi5dQF3DvnTX3UvXTPO8quKH7jsXhm/PxfKWZXqBM5sS33kmKtC31Q05fI095i5IPpyzRXqSy1Sr17p1F7NE8vMtnNbLpVVtk8c0OrfF0sKxHnIpYgHW4puMomTz8mgmrSjpvrxhX97l7LqLpl7bW9BH9/MNzF8XwRqL8/m7c30eFYV5VX3QTquK06XbLt16F4ks+8Z9m6gPtpcuk3OvibCekng4lzMHi9MoqZmKj9tdbQCbc7bcEA+oEJduRNNL1waf1tuI9MDBUK8t3k9uFz3rrqadO9Ln9TL/ezlwDvky3TW7ZmXfpc77TN0yhOXnP939LvVDV9s+tgLTm0TqYd1lea3PRFuVjLa562HdPbCfascGrvO3DMeIATVqVRO8vfHrbupdfo1dzlXUdkVLZsS1mLPG3rWcl+4B1l1537h0VXzU1tyLG7cCu+LSrSqo06hocy3WCcil65qHDbuEYzQN2HpT3jFt9LEFvHTP1nxbXOEkbhkKmd+6BTfVZ/I143z/Fyz6Za92o0I7I6gzfeYAHPwy/Rb43L9TLtMt8CtwW1xvQvbR1g9n7qJRNN1kdxcdH7cM58Szxq679MdLOhE72t6VNEpHHkzwRyjBcGth+dE99pIkVbWaEWmvnQ8Yl7Mp59zpRWXdNo6odrO754Zzvxf/010nP7onb1TR+bgbVPB9PcADJvH/043Kvk0UzLRxQ6UiaeTAcyxYl2lyrrvZv8v2wE7U1uVcST0821jJeIDKWuyxiqnuko7q3+zJYXJ46nV3D67EyL+lQ9F2qkr+3kUafQpwYE8T329p6y7OX1TF97fQv/c+l87zj7Hsgpig4qRLd9fMPs74rLGyCzRbhmVqpy7nqvPmTD1gvKe7b2U8u1QzmtuDuEtbgT3c8QBJveo6cueFkUwv59nVmfFw1jl4/unuOT9qERV76ers8n23z/c8/Xy7a4lwwLplmGusbRp33Up13+ZDN3KPxNVMhY62vUQyRTse6+cKHtZYjIfDh260Cjbb3Vy6R8H8SMBzqSwrsB1UTacoknlnOb8V4JD9Njfpwz/fHjpBUeevcAtcl65sqXPX9D87RUTLc/dfOgAAAABJRU5ErkJggg==)", + "options": null + }, + "bg-options": { + "type": "select", + "label": "Background image type", + "name": "bg-options", + "value": null, + "default": "Tiled", + "options": [ + { + "name": "Tiled", + "label": "Tiled", + "value": "background-repeat: repeat !important;\n background-size: auto !important;\n background-position: left top !important;" + }, + { + "name": "Fit-window-size", + "label": "Fit window size", + "value": "background-repeat: no-repeat !important;\n background-size: cover !important;\n background-position: center top !important;" + } + ] + }, + "bg-attachment": { + "type": "select", + "label": "Background image attachment", + "name": "bg-attachment", + "value": null, + "default": "Scroll", + "options": [ + { + "name": "Scroll", + "label": "Scroll", + "value": "scroll" + }, + { + "name": "Fixed", + "label": "Fixed", + "value": "fixed" + } + ] + }, + "syntax-theme": { + "type": "select", + "label": "Github syntax theme", + "name": "syntax-theme", + "value": null, + "default": "Twilight", + "options": [ + { + "name": "Twilight", + "label": "Twilight", + "value": "/*! GitHub: Twilight */:root{--ghd-code-background:#141414;--ghd-code-color:#ccc}.pl-c,.pl-c span{color:#5f5a60!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#cf6a4c!important}.pl-cos{color:#8f9d6a!important}.pl-e,.pl-ef,.pl-en{color:#ac885b!important}.pl-enc{color:#cf6a4c!important}.pl-enf,.pl-enm{color:#ac885b!important}.pl-ens{color:#cf6a4c!important}.pl-ent{color:#cda869!important}.pl-entc,.pl-enti{color:#ac885b!important}.pl-entm{color:#7587a6!important}.pl-eoa{color:#cda869!important}.pl-eoac,.pl-eoac .pl-pde{color:#7587a6!important}.pl-eoai,.pl-eoai .pl-pde{color:#cda869!important}.pl-eoi{color:#ac885b!important}.pl-k{color:#cf6a4c!important}.pl-ko,.pl-kolp{color:#cda869!important}.pl-kos,.pl-kou{color:#cf6a4c!important}.pl-mai .pl-sf{color:#7587a6!important}.pl-mb{color:#8f9d6a!important}.pl-mc{color:#cda869!important}.pl-mh,.pl-mh .pl-pdh{color:#cf6a4c!important}.pl-mi{color:#cda869!important}.pl-ml{color:#8f9d6a!important}.pl-mm{color:#7587a6!important}.pl-mp{color:#c5af75!important}.pl-mp1 .pl-sf{color:#dad085!important}.pl-mq{color:#cf6a4c!important}.pl-mr,.pl-ms{color:#cda869!important}.pl-pdb{color:#8f9d6a!important}.pl-pdc{color:#5f5a60!important}.pl-pdc1,.pl-pde{color:#cf6a4c!important}.pl-pdi{color:#cda869!important}.pl-pds{color:#8f9d6a!important}.pl-pdv{color:#7587a6!important}.pl-pse,.pl-pse .pl-s2{color:#cf6a4c!important}.pl-s{color:#f9ee98!important}.pl-s1,.pl-s2{color:#ccc!important}.pl-mp .pl-s3{color:#cda869!important}.pl-s3,.pl-sc{color:#dad085!important}.pl-scp{color:#cf6a4c!important}.pl-sf{color:#dad085!important}.pl-smc{color:#ac885b!important}.pl-smi,.pl-smp{color:#ccc!important}.pl-sok{color:#cda869!important}.pl-sol{color:#8f9d6a!important}.pl-som,.pl-sr{color:#7587a6!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#cda869!important}.pl-stj{color:#7587a6!important}.pl-stp,.pl-sv,.pl-v{color:#9b859d!important}.pl-vi{color:#cf6a4c!important}.pl-vo{color:#ac885b!important}.pl-vpf{color:#7587a6!important}.pl-mdht,.pl-mi1{background:#020!important;color:#55a532!important}.pl-md,.pl-mdhf{background:#200!important;color:#bd2c00!important}.pl-mdr{color:#cf6a4c!important}.pl-mdh,.pl-mdi{color:#7587a6!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#df5000!important;color:#fff!important}.pl-mo{color:#969896!important}.pl-mri{color:teal!important}.pl-ms1{background-color:#f5f5f5!important}.pl-va,.pl-vpu{color:teal!important}.pl-entl{color:#ccc!important}.highlight .pl-corl span.x,.pl-corl{color:#f9ee98!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#ac885b!important;color:#ccc!important}" + }, + { + "name": "Ambiance", + "label": "Ambiance", + "value": "/*! GitHub: Ambiance */:root{--ghd-code-background:#202020;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#555!important;font-style:italic!important}.pl-c1{color:#cf7ea9!important}.pl-e,.pl-en,.pl-ent{color:#aac6e3!important}.pl-k{color:#fa8d6a!important}.pl-mb{color:#cf7ea9!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#cda869!important}.pl-mh,.pl-mh .pl-en{color:#9b859d!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#cda869!important}.pl-mq{color:#555!important}.pl-mr,.pl-ms{color:#cda869!important}.pl-pds{color:#8f9d6a!important}.pl-s{color:#aac6e3!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#8f9d6a!important}.pl-s1 .pl-s2{color:#99c!important}.pl-s1 .pl-v,.pl-s3{color:#cda869!important}.pl-sc{color:#9b859d!important}.pl-smi,.pl-smp{color:#99c!important}.pl-sr .pl-cce{color:#9b859d!important}.pl-sr,.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#dad085!important}.pl-st{color:#aac6e3!important}.pl-stj{color:#99c!important}.pl-sv{color:#cf7ea9!important}.pl-v{color:#aac6e3!important}.pl-vo,.pl-vpf{color:#99c!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#f8f8f8!important}.pl-bu,.pl-ii,.pl-md,.pl-mdhf{background:rgba(86,45,86,.75)!important;color:#f8f8f8!important}.highlight .pl-corl span.x,.pl-corl{color:#aac6e3!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#fa8d6a!important;color:#e6e1dc!important}" + }, + { + "name": "Ayu-Mirage", + "label": "Ayu Mirage", + "value": "/*! GitHub: Ayu Mirage */:root{--ghd-code-background:#1f2430;--ghd-code-color:#cbccc6}.pl-c,.pl-c span{color:#5c6773!important;font-style:italic!important}.pl-c1{color:#ffa759!important}.pl-cce{color:#95e6cb!important}.pl-cn{color:#fc6!important}.pl-coc,.pl-cos{color:#bae67e!important}.pl-e,.pl-ef,.pl-en{color:#ffd580!important}.pl-enc{color:#5ccfe6!important}.pl-enf,.pl-enm{color:#ffd580!important}.pl-ens{color:#cbccc6!important}.pl-ent,.pl-entc,.pl-enti{color:#5ccfe6!important}.pl-enti{font-weight:700!important}.pl-entm{color:#bae67e!important}.pl-eoa{color:#ffd580!important}.pl-eoac{color:#5ccfe6!important}.pl-eoac .pl-pde{color:#5ccfe680!important}.pl-eoai{color:#ffd580!important}.pl-eoai .pl-pde{color:#cbccc6!important}.pl-eoi{color:#5ccfe6!important}.pl-k{color:#ffa759!important}.pl-ko{color:#f29e74!important}.pl-kolp{color:#cbccc6b3!important}.pl-kos{color:#cbccc6!important}.pl-kou{color:#95e6cb!important}.pl-mai .pl-sf,.pl-mb{color:#f28779!important}.pl-mb{font-weight:700!important}.pl-mc{color:#77a8d9!important}.pl-mh .pl-pdh{color:#bae67e!important}.pl-mi{color:#f28779!important;font-style:italic!important}.pl-ml{color:#ffd580!important}.pl-mm{color:#ffe6b3!important}.pl-mp{color:#5ccfe6!important}.pl-mp1 .pl-sf{color:#f28779!important}.pl-mq{color:#95e6cb!important}.pl-mr{color:#ffd580!important}.pl-ms{color:#f29e74!important}.pl-pdb{color:#bae67e!important;font-weight:700!important}.pl-pdc{color:#5c6773!important;font-style:italic!important}.pl-pdc1{color:#bae67e!important}.pl-pde{color:#5ccfe680!important}.pl-pdi{color:#f28779!important;font-style:italic!important}.pl-pds{color:#bae67e!important}.pl-pdv,.pl-pse,.pl-pse .pl-s2{color:#cbccc6!important}.pl-s{color:#bae67e!important}.pl-s1{color:#cbccc6!important}.pl-s2{color:#73d0ff!important}.pl-mp .pl-s3,.pl-s3{color:#f28779!important}.pl-sc{color:#5ccfe6!important}.pl-scp{color:#bae67e!important}.pl-sf{color:#ffa759!important}.pl-smc{color:#73d0ff!important}.pl-smi{color:#5ccfe6!important}.pl-smp{color:#bae67e!important}.pl-sok{color:#ffa759!important}.pl-sol{color:#5ccfe6!important}.pl-som{color:#bae67e!important}.pl-sr,.pl-sra,.pl-src,.pl-sre{color:#95e6cb!important}.pl-st,.pl-stj{color:#73d0ff!important}.pl-stp{color:#5ccfe6!important}.pl-sv,.pl-v,.pl-vi{color:#cbccc6!important}.pl-vo{color:#5ccfe6!important}.pl-vpf{color:#d4bfff!important}.pl-mi1{color:#a6cc70!important}.pl-mdht,.pl-mi1{background:#bae67e26!important}.pl-mdht{color:#c594c5!important}.pl-md{color:#f27983!important}.pl-md,.pl-mdhf{background:#f29e7426!important}.pl-mdhf{color:#c594c5!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c594c5!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{color:#f33!important}.pl-mo{color:#d4bfff!important}.pl-mri{color:#cbccc605!important}.pl-ms1{background-color:#cbccc60f!important;color:#5c6773!important;font-weight:700!important}.pl-va{color:#ffd580!important}.pl-vpu{color:#5ccfe6!important}.pl-entl{color:#707a8c!important}.highlight .pl-corl span.x,.pl-corl{color:#5ccfe6!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#232834!important;color:#fc6!important}" + }, + { + "name": "Chaos", + "label": "Chaos", + "value": "/*! GitHub: Chaos */:root{--ghd-code-background:#161616;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#555!important;font-style:italic!important}.pl-c1{color:#fdc251!important}.pl-e,.pl-en,.pl-ent{color:#974!important}.pl-k{color:#00698f!important}.pl-mb{color:#1edafb!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#00698f!important}.pl-mh,.pl-mh .pl-en{color:#fdc251!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#00698f!important}.pl-mq{color:#555!important}.pl-mr,.pl-ms{color:#00698f!important}.pl-pds{color:#58c554!important}.pl-s{color:#974!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#58c554!important}.pl-s1 .pl-s2{color:#1edafb!important}.pl-s1 .pl-v,.pl-s3{color:#00698f!important}.pl-sc{color:#999!important}.pl-smi,.pl-smp{color:#be53e6!important}.pl-sr{color:#ff308f!important}.pl-sr .pl-cce{color:#fdc251!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#ff308f!important}.pl-st{color:#e6e1dc!important}.pl-stj{color:#be53e6!important}.pl-sv{color:#1edafb!important}.pl-v{color:#974!important}.pl-vo{color:#be53e6!important}.pl-vpf{color:#974!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#fff!important}.pl-md,.pl-mdhf{background:#900!important;color:#fff!important}.pl-bu,.pl-ii{background:#900!important;color:#999!important}.highlight .pl-corl span.x,.pl-corl{color:#974!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#974!important;color:#e6e1dc!important}" + }, + { + "name": "Clouds_Midnight", + "label": "Clouds_Midnight", + "value": "/*! GitHub: Clouds_Midnight */:root{--ghd-code-background:#191919;--ghd-code-color:#929292}.pl-c,.pl-c span{color:#3c403b!important;font-style:italic!important}.pl-c1{color:#39946a!important}.pl-e,.pl-en,.pl-ent{color:#929292!important}.pl-k{color:#927c5d!important}.pl-mb{color:#39946a!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#927c5d!important}.pl-mh,.pl-mh .pl-en{color:#366f1a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#927c5d!important}.pl-mq{color:#3c403b!important}.pl-mr,.pl-ms{color:#927c5d!important}.pl-pds{color:#5d90cd!important}.pl-s{color:#e92e2e!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#5d90cd!important}.pl-s1 .pl-s2{color:#606060!important}.pl-s1 .pl-v,.pl-s3{color:#927c5d!important}.pl-sc{color:#366f1a!important}.pl-smi,.pl-smp{color:#606060!important}.pl-sr{color:#e92e2e!important}.pl-sr .pl-cce{color:#366f1a!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src,.pl-st{color:#e92e2e!important}.pl-stj{color:#606060!important}.pl-sv{color:#39946a!important}.pl-v{color:#5d90cd!important}.pl-vo,.pl-vpf{color:#606060!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#fff!important}.pl-md,.pl-mdhf{background:#e92e2e!important;color:#fff!important}.pl-bu,.pl-ii{background:#e92e2e!important;color:#ddd!important}.highlight .pl-corl span.x,.pl-corl{color:#e92e2e!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#929292!important;color:#191919!important}" + }, + { + "name": "Cobalt", + "label": "Cobalt", + "value": "/*! GitHub: Cobalt */:root{--ghd-code-background:#002240;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#08f!important;font-style:italic!important}.pl-c1{color:#ff628c!important}.pl-e,.pl-en{color:#ff9d00!important}.pl-ent{color:#fd0!important}.pl-k{color:#eb939a!important}.pl-mb{color:#ff628c!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#ff9d00!important}.pl-mh,.pl-mh .pl-en{color:#eb939a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#ff9d00!important}.pl-mq{color:#08f!important}.pl-mr,.pl-ms{color:#ff9d00!important}.pl-pds,.pl-s,.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#3ad900!important}.pl-s1 .pl-s2{color:#ccc!important}.pl-s1 .pl-v{color:#3ad900!important}.pl-s3,.pl-sc{color:#ffb054!important}.pl-smi,.pl-smp{color:#ccc!important}.pl-sr{color:#80ffc2!important}.pl-sr .pl-cce{color:#eb939a!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#80ffc2!important}.pl-st{color:#ff9d00!important}.pl-stj{color:#ccc!important}.pl-sv{color:#ff628c!important}.pl-v{color:#fd0!important}.pl-vo,.pl-vpf{color:#ccc!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#f8f8f8!important}.pl-md,.pl-mdhf{background:#800f00!important;color:#f8f8f8!important}.pl-bu,.pl-ii{background:#800f00!important;color:#ff628c!important}.highlight .pl-corl span.x,.pl-corl{color:#3ad900!important;text-decoration:underline!important}.highlight-source-js .pl-st{color:#ffee80!important}.highlight-source-css .pl-s3{color:#80ffbb!important}.highlight-text-html-basic .pl-ent{color:#9effff!important}.pl-token.active,.pl-token:hover{background:#fff!important;color:#002240!important}" + }, + { + "name": "Dracula", + "label": "Dracula", + "value": "/*! GitHub: Dracula */:root{--ghd-code-background:#282a36;--ghd-code-color:#f8f8f2}.pl-c,.pl-c span{color:#6272a4!important}.pl-c1{color:#bd93f9!important}.pl-cce{color:#ff79c6!important}.pl-cn,.pl-coc{color:#bd93f9!important}.pl-cos{color:#f1fa8c!important}.pl-e,.pl-ef,.pl-en{color:#50fa7b!important}.pl-enc{color:#8be9fd!important}.pl-enf,.pl-enm{color:#50fa7b!important}.pl-ens{color:#8be9fd!important}.pl-ent,.pl-entc{color:#ff79c6!important}.pl-entc{font-style:italic!important}.pl-enti{font-weight:italic!important}.pl-enti,.pl-entm{color:#8be9fd!important}.pl-eoa,.pl-eoac,.pl-eoac .pl-pde,.pl-eoai,.pl-eoai .pl-pde{color:#50fa7b!important}.pl-eoi{color:#8be9fd!important;font-style:italic}.pl-k,.pl-ko,.pl-kolp{color:#ff79c6!important}.pl-kos,.pl-kou,.pl-mai .pl-sf{color:#8be9fd!important}.pl-mb{color:#ffb86c!important;font-weight:700!important}.pl-mc{color:#e6db74!important}.pl-mh .pl-pdh{color:#8be9fd!important}.pl-mi{color:#ffb86c!important;font-style:italic!important}.pl-ml,.pl-mm{color:#ff79c6!important}.pl-mp,.pl-mp1 .pl-sf{color:#8be9fd!important}.pl-mq{color:#6272a4!important;font-style:italic}.pl-mr,.pl-ms{color:#ff79c6!important}.pl-pdb{color:#ffb86c!important;font-weight:700!important}.pl-pdc{color:#6272a4!important;font-style:italic!important}.pl-pdc1{color:#bd93f9!important}.pl-pde{color:#8be9fd!important}.pl-pdi{color:#ffb86c!important;font-style:italic!important}.pl-pds,.pl-pdv{color:#f8f8f2!important}.pl-pse,.pl-pse .pl-s2{color:#ff79c6!important}.pl-s{color:#f1fa8c!important}.pl-s1{color:#f8f8f2!important}.pl-mp .pl-s3,.pl-s3,.pl-sc,.pl-scp{color:#66d9ef!important;font-style:italic!important}.pl-sf{color:#8be9fd!important}.pl-smc{color:#ff79c6!important}.pl-smi{color:#f8f8f2!important}.pl-smp,.pl-sok{color:#ff79c6!important}.pl-sol{color:#effb7b!important}.pl-som{color:#50fa7b!important}.pl-sr,.pl-sra,.pl-src,.pl-sre{color:#f55!important}.pl-st{color:#66d9ef!important}.pl-st,.pl-stj{font-style:italic!important}.pl-stj,.pl-stp,.pl-sv{color:#f8f8f2!important}.pl-v{color:#bd93f9!important}.pl-vi{color:#ff79c6!important}.pl-vo{color:#fff!important}.pl-vpf{color:#ffb86c!important;font-style:italic!important}.pl-mdht,.pl-mi1{background:rgba(80,250,123,.25)!important;color:#50fa7b!important}.pl-md,.pl-mdhf{background:rgba(255,121,198,.25)!important;color:#ff79c6!important}.pl-mdh,.pl-mdi,.pl-mdr{color:#6272a4!important;font-weight:400!important}.pl-bu{background-color:#bd93f9!important;color:#f8f8f2!important}.pl-ii,.pl-ii .pl-cce{background-color:#ff79c6!important;color:#f8f8f2!important}.pl-mo{color:#ffb86c!important}.pl-mri{color:#50fa7b!important}.pl-ms1{color:#6272a4!important}.pl-va,.pl-vpu{color:#66d9ef!important}.pl-entl{color:#ffb86c!important}.highlight .pl-corl span.x,.pl-corl{color:#effb7b!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#50fa7b!important;color:#282a36!important}" + }, + { + "name": "GitHub-Dark", + "label": "GitHub Dark", + "value": "/*! GitHub: GitHub Dark */:root{--ghd-code-background:#141414;--ghd-code-color:#ccc}/*!\n * GitHub Dark v0.5.0\n * Copyright (c) 2012 - 2017 GitHub, Inc.\n * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE)\n */.pl-c{color:#959da5}.pl-c1,.pl-s .pl-v{color:#c8e1ff}.pl-e,.pl-en{color:#b392f0}.pl-s .pl-s1,.pl-smi{color:#f6f8fa}.pl-ent{color:#7bcc72}.pl-k{color:#ea4a5a}.pl-pds,.pl-s,.pl-s .pl-pse .pl-s1,.pl-sr,.pl-sr .pl-cce,.pl-sr .pl-sra,.pl-sr .pl-sre{color:#79b8ff}.pl-ml,.pl-v{color:#fb8532}.pl-bu{color:#d73a49}.pl-c2,.pl-ii{background-color:#d73a49;color:#fafbfc}.pl-c2:before{content:\"^M\"}.pl-sr .pl-cce{color:#7bcc72;font-weight:700}.pl-mh,.pl-mh .pl-en,.pl-ms{color:#0366d6;font-weight:700}.pl-mi{color:#f6f8fa;font-style:italic}.pl-mb{color:#f6f8fa;font-weight:700}.pl-md{background-color:#300;color:#d73a49}.pl-mi1{background-color:#121;color:#7bcc72}.pl-mc{background-color:#261d08;color:#b08800}.pl-mi2{background-color:#959da5;color:#2f363d}.pl-mdr{color:#b392f0;font-weight:700}.pl-mo{color:#0366d6}.pl-ba{color:#ffeef0}.pl-sg{color:#6a737d}.pl-corl{color:#79b8ff;text-decoration:underline}.pl-token.active,.pl-token:hover{background:#b392f0;color:#141414}" + }, + { + "name": "Idle-Fingers", + "label": "Idle Fingers", + "value": "/*! GitHub: Idle Fingers */:root{--ghd-code-background:#323232;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#bc9458!important;font-style:italic!important}.pl-c1{color:#6c99bb!important}.pl-cce,.pl-cn,.pl-coc{color:#cc7833!important}.pl-cos{color:#a5c261!important}.pl-e{color:#ffc66d!important}.pl-ef{color:#b83426!important}.pl-en{color:#ffc66d!important}.pl-enc{color:#cc7833!important}.pl-enf,.pl-enm{color:#b83426!important}.pl-ens{color:#cc7833!important}.pl-ent{color:#ffe5bb!important}.pl-entc,.pl-enti{color:#b83426!important}.pl-enti{font-weight:700!important}.pl-entm{color:#b83426!important}.pl-eoa{color:#ffe5bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#b83426!important}.pl-eoai,.pl-eoai .pl-pde{color:#ffe5bb!important}.pl-eoi{color:#b83426!important}.pl-k{color:#cc7833!important}.pl-ko,.pl-kolp{color:#ffe5bb!important}.pl-kos,.pl-kou{color:#cc7833!important}.pl-mai .pl-sf{color:#b83426!important}.pl-mb{color:#a5c261!important;font-weight:700!important}.pl-mc{color:#ffe5bb!important}.pl-mh .pl-pdh{color:#cc7833!important}.pl-mi{color:#ffe5bb!important;font-style:italic!important}.pl-ml{color:#a5c261!important}.pl-mm{color:#b83426!important}.pl-mp,.pl-mp1 .pl-sf,.pl-mq{color:#cc7833!important}.pl-mr,.pl-ms{color:#ffe5bb!important}.pl-pdb{color:#a5c261!important;font-weight:700!important}.pl-pdc{color:#bc9458!important;font-style:italic!important}.pl-pdc1{color:#6c99bb!important}.pl-pde{color:#cc7833!important}.pl-pdi{color:#ffe5bb!important;font-style:italic!important}.pl-pds{color:#a5c261!important}.pl-pdv{color:#b83426!important}.pl-pse,.pl-pse .pl-s2,.pl-s{color:#cc7833!important}.pl-s1{color:#a5c261!important}.pl-s2{color:#fff!important}.pl-mp .pl-s3{color:#cc7833!important}.pl-s3{color:#ffe5bb!important}.pl-sc{color:#ffc66d!important}.pl-scp{color:#6c99bb!important}.pl-sf{color:#ffc66d!important}.pl-smc{color:#b83426!important}.pl-smi,.pl-smp{color:#ffc66d!important}.pl-sok{color:#ffe5bb!important}.pl-sol{color:#a5c261!important}.pl-som,.pl-sr{color:#b83426!important}.pl-sra,.pl-src,.pl-sre{color:#cc3!important}.pl-st{color:#cc7833!important}.pl-stj{color:#fff!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#cc7833!important}.pl-vo{color:#fff!important}.pl-vpf{color:#cc7833!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#a5c261!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#b83426!important}.pl-mdr{color:#cc7833!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#ffc66d!important;font-weight:400!important}.pl-bu,.pl-ii{background-color:#b83426!important;color:#fff!important}.pl-mo{color:#ffc66d!important}.pl-mri{color:#cc7833!important}.pl-ms1{background-color:#ffc66d!important}.pl-va,.pl-vpu{color:#cc7833!important}.pl-entl{color:#ffc66d!important}.highlight .pl-corl span.x,.pl-corl{color:#cc7833!important;text-decoration:underline!important}.highlight-text-html-basic .pl-ent{color:#cc7833!important}.pl-token.active,.pl-token:hover{background:#ffc66f!important;color:#323232!important}" + }, + { + "name": "KR-theme", + "label": "KR theme", + "value": "/*! GitHub: KR theme */:root{--ghd-code-background:#0b0a09;--ghd-code-color:#fcffe0}.pl-c,.pl-c span{color:#706d5b!important;font-style:italic!important}.pl-c1{color:rgba(210,117,24,.76)!important}.pl-e,.pl-en{color:#fcffe0!important}.pl-ent{color:#babd9c!important}.pl-k{color:#949c8b!important}.pl-mb{color:rgba(210,117,24,.76)!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#949c8b!important}.pl-mh,.pl-mh .pl-en{color:#9fc28a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#949c8b!important}.pl-mq{color:#706d5b!important}.pl-mr,.pl-ms{color:#949c8b!important}.pl-pds{color:rgba(164,161,181,.8)!important}.pl-s{color:#949c8b!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:rgba(164,161,181,.8)!important}.pl-s1 .pl-s2{color:#babd9c!important}.pl-s1 .pl-v{color:#949c8b!important}.pl-s3{color:#85873a!important}.pl-sc{color:#fcffe0!important}.pl-smi,.pl-smp{color:#babd9c!important}.pl-sr{color:rgba(125,255,192,.65)!important}.pl-sr .pl-cce{color:#9fc28a!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:rgba(125,255,192,.65)!important}.pl-st{color:#949c8b!important}.pl-stj{color:#babd9c!important}.pl-sv{color:rgba(210,117,24,.76)!important}.pl-v{color:#fcffe0!important}.pl-vo,.pl-vpf{color:#d1a796!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#f8f8f8!important}.pl-md,.pl-mdhf{background:#a41300!important;color:#f8f8f8!important}.pl-bu,.pl-ii{background:#a41300!important;color:#d1a796!important}.highlight .pl-corl span.x,.pl-corl{color:#949c8b!important;text-decoration:underline!important}.highlight-source-js .pl-s3,.highlight-source-js .pl-v{color:#ff80e1!important}.highlight-source-js .pl-st{color:#ffee80!important}.pl-token.active,.pl-token:hover{background:#fcffe0!important;color:#0b0a09!important}" + }, + { + "name": "Merbivore-Soft", + "label": "Merbivore Soft", + "value": "/*! GitHub: Merbivore Soft */:root{--ghd-code-background:#1c1c1c;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#ad2ea4!important;font-style:italic!important}.pl-c1{color:#b3e5b4!important}.pl-e,.pl-en{color:#e1c582!important}.pl-ent{font-style:italic!important}.pl-ent,.pl-k{color:#fc6f09!important}.pl-mb{color:#8ec65f!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#fc6f09!important}.pl-mh,.pl-mh .pl-en{color:#8ec65f!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#fc6f09!important}.pl-mq{color:#ad2ea4!important}.pl-mr,.pl-ms{color:#fc6f09!important}.pl-pds{color:#8ec65f!important}.pl-s{color:#fc6f09!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#8ec65f!important}.pl-s1 .pl-s2,.pl-s1 .pl-v{color:#fc6f09!important}.pl-s3{color:#e6e1dc!important}.pl-sc{color:#68c1d8!important}.pl-smi,.pl-smp,.pl-sr{color:#fc6f09!important}.pl-sr .pl-cce{color:#b3e5b4!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#e1c582!important}.pl-st,.pl-stj{color:#fc6f09!important}.pl-sv{color:#8ec65f!important}.pl-v{color:#fc6f09!important}.pl-vo,.pl-vpf{color:#e6e1dc!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#e6e1dc!important}.pl-md,.pl-mdhf{background:#fe3838!important;color:#e6e1dc!important}.pl-bu,.pl-ii{background:#fe3838!important;color:#fff!important}.highlight .pl-corl span.x,.pl-corl{color:#fc6f09!important;text-decoration:underline!important}.highlight-source-css .pl-e{color:#e6e1dc!important}.highlight-source-js .pl-c1{color:#e1c582!important}.highlight-source-js .pl-sc{color:#e6e1dc!important}.highlight-text-html-php .pl-s3{color:#fc6f09!important}.highlight-source-css .pl-s3{color:#68c1d8!important}.highlight-source-python .pl-c1{color:#e1c582!important}.pl-token.active,.pl-token:hover{background:#fc6f09!important;color:#e6e1dc!important}" + }, + { + "name": "Merbivore", + "label": "Merbivore", + "value": "/*! GitHub: Merbivore */:root{--ghd-code-background:#161616;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#ad2ea4!important;font-style:italic!important}.pl-c1{color:#519f50!important}.pl-e,.pl-en{color:#fdc251!important}.pl-ent,.pl-k{color:#fc6f09!important}.pl-mb{color:#8dff0a!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#fc6f09!important}.pl-mh,.pl-mh .pl-en{color:#8dff0a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#fc6f09!important}.pl-mq{color:#ad2ea4!important}.pl-mr,.pl-ms{color:#fc6f09!important}.pl-pds{color:#8dff0a!important}.pl-s{color:#fc6f09!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#8dff0a!important}.pl-s1 .pl-s2,.pl-s1 .pl-v{color:#fc6f09!important}.pl-s3{color:#e6e1dc!important}.pl-sc{color:#1edafb!important}.pl-smi,.pl-smp,.pl-sr{color:#fc6f09!important}.pl-sr .pl-cce{color:#519f50!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#fdc251!important}.pl-st,.pl-stj{color:#fc6f09!important}.pl-sv{color:#8dff0a!important}.pl-v{color:#fc6f09!important}.pl-vo,.pl-vpf{color:#e6e1dc!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#e6e1dc!important}.pl-md,.pl-mdhf{background:#900!important;color:#e6e1dc!important}.pl-bu,.pl-ii{background:#900!important;color:#fff!important}.highlight .pl-corl span.x,.pl-corl{color:#fc6f09!important;text-decoration:underline!important}.highlight-source-css .pl-e{color:#e6e1dc!important}.highlight-source-js .pl-c1{color:#fdc251!important}.highlight-source-js .pl-sc{color:#e6e1dc!important}.highlight-text-html-php .pl-s3{color:#fc6f09!important}.highlight-source-css .pl-s3{color:#1edafb!important}.highlight-source-python .pl-c1{color:#fdc251!important}.pl-token.active,.pl-token:hover{background:#fc6f09!important;color:#e6e1dc!important}" + }, + { + "name": "Mono-Industrial-clear", + "label": "Mono Industrial clear", + "value": "/*! GitHub: Mono Industrial clear */:root{--ghd-code-background:#222c28;--ghd-code-color:#fff}.pl-c,.pl-c span{background-color:#304830!important;color:#666c68!important}.pl-c1{color:#e98800!important}.pl-e,.pl-en{color:#a8b3ab!important}.pl-ent,.pl-k{color:#a39e64!important}.pl-mb{color:#e98800!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#a39e64!important}.pl-mh,.pl-mh .pl-en{color:#5778b6!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#a39e64!important}.pl-mq{color:#666c68!important}.pl-mr,.pl-ms{color:#a39e64!important}.pl-pds{color:#fff!important}.pl-s{color:#c23b00!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#fff!important}.pl-s1 .pl-s2{color:#c23b00!important}.pl-s1 .pl-v{color:#a39e64!important}.pl-s3{color:#5778b6!important}.pl-sc{color:#fff!important}.pl-smi,.pl-smp{color:#c23b00!important}.pl-sr{background-color:#151c19!important;color:#fff!important}.pl-sr .pl-cce{color:#5778b6!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src,.pl-st,.pl-stj{color:#c23b00!important}.pl-sv{color:#e98800!important}.pl-v{color:#5778b6!important}.pl-vo{color:#a8b3ab!important}.pl-vpf{color:#5778b6!important}.pl-mi1{background:rgba(0,150,0,.68)!important}.pl-mdht,.pl-mi1{color:#fff!important}.pl-mdht{background:rgba(0,153,0,.68)!important}.pl-md,.pl-mdhf{background:rgba(153,0,0,.68)!important;color:#fff!important}.pl-bu,.pl-ii{background:#c23b00!important;color:#fff!important}.highlight .pl-corl span.x,.pl-corl{color:#c23b00!important;text-decoration:underline!important}.highlight-source-css .pl-ent{color:#e98800!important}.highlight-text-html-php .pl-s,.highlight-text-html-php .pl-st{color:#a39e64!important}.highlight-text-html-php .pl-s3{color:#588e60!important}.highlight-source-python .pl-st{color:#a39e64!important}.pl-token.active,.pl-token:hover{background:#fff!important;color:#222c28!important}" + }, + { + "name": "Mono-Industrial", + "label": "Mono Industrial", + "value": "/*! GitHub: Mono Industrial */:root{--ghd-code-background:#222c28;--ghd-code-color:#fff}.pl-c,.pl-c span{background-color:#151c19!important;color:#666c68!important}.pl-c1{color:#e98800!important}.pl-e,.pl-en{color:#a8b3ab!important}.pl-ent,.pl-k{color:#a39e64!important}.pl-mb{color:#e98800!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#a39e64!important}.pl-mh,.pl-mh .pl-en{color:#5778b6!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#a39e64!important}.pl-mq{color:#666c68!important}.pl-mr,.pl-ms{color:#a39e64!important}.pl-pds{color:#fff!important}.pl-s{color:#c23b00!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#fff!important}.pl-s1 .pl-s2{color:#c23b00!important}.pl-s1 .pl-v{color:#a39e64!important}.pl-s3{color:#5778b6!important}.pl-sc{color:#fff!important}.pl-smi,.pl-smp{color:#c23b00!important}.pl-sr{background-color:#151c19!important;color:#fff!important}.pl-sr .pl-cce{color:#5778b6!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src,.pl-st,.pl-stj{color:#c23b00!important}.pl-sv{color:#e98800!important}.pl-v{color:#5778b6!important}.pl-vo{color:#a8b3ab!important}.pl-vpf{color:#5778b6!important}.pl-mdht,.pl-mi1{background:rgba(0,153,0,.68)!important;color:#fff!important}.pl-md,.pl-mdhf{background:rgba(153,0,0,.68)!important;color:#fff!important}.pl-bu,.pl-ii{background:#c23b00!important;color:#fff!important}.highlight .pl-corl span.x,.pl-corl{color:#c23b00!important;text-decoration:underline!important}.highlight-source-css .pl-ent{color:#e98800!important}.highlight-text-html-php .pl-s,.highlight-text-html-php .pl-st{color:#a39e64!important}.highlight-text-html-php .pl-s3{color:#588e60!important}.highlight-source-python .pl-st{color:#a39e64!important}.pl-token.active,.pl-token:hover{background:#fff!important;color:#222c28!important}" + }, + { + "name": "Monokai---Spacegray-Eighties", + "label": "Monokai - Spacegray Eighties", + "value": "/*! GitHub: Monokai - Spacegray Eighties */:root{--ghd-code-background:#1c1c1c;--ghd-code-color:#f8f8f8}.pl-c,.pl-c span{color:grey!important}.pl-c1,.pl-cce{color:#66d9ef!important}.pl-cn,.pl-coc{color:#ae81ff!important}.pl-cos{color:#e6db74!important}.pl-e{color:#f92672!important}.pl-ef{color:#a6e22e!important}.pl-en{color:#f92672!important}.pl-enc{color:#66d9ef!important}.pl-enf,.pl-enm{color:#a6e22e!important}.pl-ens{color:#66d9ef!important}.pl-ent{color:#f92672!important}.pl-entc,.pl-enti{color:#a6e22e!important}.pl-enti{font-weight:700!important}.pl-entm{color:#a6e22e!important}.pl-eoa{color:#f92672!important}.pl-eoac,.pl-eoac .pl-pde{color:#a6e22e!important}.pl-eoai,.pl-eoai .pl-pde{color:#f92672!important}.pl-eoi,.pl-k{color:#a6e22e!important}.pl-ko,.pl-kolp{color:#f92672!important}.pl-kos,.pl-kou{color:#66d9ef!important}.pl-mai .pl-sf{color:#a6e22e!important}.pl-mb{color:#e6db74!important;font-weight:700!important}.pl-mc{color:#f92672!important}.pl-mh .pl-pdh{color:#66d9ef!important}.pl-mi{color:#f92672!important;font-style:italic!important}.pl-ml{color:#e6db74!important}.pl-mm{color:#a6e22e!important}.pl-mp,.pl-mp1 .pl-sf,.pl-mq{color:#66d9ef!important}.pl-mr,.pl-ms{color:#f92672!important}.pl-pdb{color:#e6db74!important;font-weight:700!important}.pl-pdc{color:#75715e!important;font-style:italic!important}.pl-pdc1{color:#ae81ff!important}.pl-pde{color:#66d9ef!important}.pl-pdi{color:#f92672!important;font-style:italic!important}.pl-pds{color:#f8f8f8!important}.pl-pdv{color:#a6e22e!important}.pl-pse,.pl-pse .pl-s2{color:#66d9ef!important}.pl-s,.pl-s1{color:#e6db74!important}.pl-s2{color:#f8f8f8!important}.pl-mp .pl-s3{color:#66d9ef!important}.pl-s3{color:#f92672!important}.pl-sc{color:#fd971f!important}.pl-scp{color:#ae81ff!important}.pl-sf{color:#fd971f!important}.pl-smc{color:#f92672!important}.pl-smi{color:#fd971f!important}.pl-smp,.pl-sok{color:#f92672!important}.pl-sol{color:#e6db74!important}.pl-som,.pl-sr{color:#a6e22e!important}.pl-sra,.pl-src,.pl-sre{color:#f92672!important}.pl-st{color:#66d9ef!important}.pl-stj{color:#f8f8f8!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#f92672!important}.pl-vo{color:#a6e22e!important}.pl-vpf{color:#f92672!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#a6e22e!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#f92672!important}.pl-mdr{color:#66d9ef!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#a6e22e!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#f92672!important;color:#272822!important}.pl-mo{color:#fd971f!important}.pl-mri{color:#66d9ef!important}.pl-ms1{background-color:#fd971f!important}.pl-va,.pl-vpu{color:#66d9ef!important}.pl-entl{color:#fd971f!important}.highlight .pl-corl span.x,.pl-corl{color:#e6db74!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#a6e22e!important;color:#1c1c1c!important}" + }, + { + "name": "Monokai", + "label": "Monokai", + "value": "/*! GitHub: Monokai */:root{--ghd-code-background:#272822;--ghd-code-color:#f8f8f2}.pl-c,.pl-c span{color:#75715e!important;font-style:italic!important}.pl-c1{color:#ae81ff!important}.pl-cce,.pl-cn,.pl-coc{color:#66d9ef!important}.pl-cos{color:#e6db74!important}.pl-e,.pl-ef,.pl-en{color:#a6e22e!important}.pl-enc{color:#66d9ef!important}.pl-enf,.pl-enm{color:#a6e22e!important}.pl-ens{color:#66d9ef!important}.pl-ent{color:#f92672!important}.pl-entc,.pl-enti{color:#a6e22e!important}.pl-enti{font-weight:700!important}.pl-entm{color:#a6e22e!important}.pl-eoa{color:#f92672!important}.pl-eoac,.pl-eoac .pl-pde{color:#a6e22e!important}.pl-eoai,.pl-eoai .pl-pde{color:#f92672!important}.pl-eoi{color:#a6e22e!important}.pl-k,.pl-ko,.pl-kolp{color:#f92672!important}.pl-kos,.pl-kou{color:#66d9ef!important}.pl-mai .pl-sf{color:#a6e22e!important}.pl-mb{color:#e6db74!important;font-weight:700!important}.pl-mc{color:#f92672!important}.pl-mh .pl-pdh{color:#66d9ef!important}.pl-mi{color:#f92672!important;font-style:italic!important}.pl-ml{color:#e6db74!important}.pl-mm{color:#a6e22e!important}.pl-mp,.pl-mp1 .pl-sf,.pl-mq{color:#66d9ef!important}.pl-mr,.pl-ms{color:#f92672!important}.pl-pdb{color:#e6db74!important;font-weight:700!important}.pl-pdc{color:#75715e!important;font-style:italic!important}.pl-pdc1{color:#ae81ff!important}.pl-pde{color:#66d9ef!important}.pl-pdi{color:#f92672!important;font-style:italic!important}.pl-pds{color:#e6db74!important}.pl-pdv{color:#a6e22e!important}.pl-pse,.pl-pse .pl-s2{color:#66d9ef!important}.pl-s,.pl-s1{color:#e6db74!important}.pl-s2{color:#f8f8f2!important}.pl-mp .pl-s3{color:#66d9ef!important}.pl-s3{color:#f92672!important}.pl-sc{color:#fd971f!important}.pl-scp{color:#ae81ff!important}.pl-sf{color:#fd971f!important}.pl-smc{color:#f92672!important}.pl-smi{color:#66d9ef!important}.pl-smp,.pl-sok{color:#f92672!important}.pl-sol{color:#e6db74!important}.pl-som,.pl-sr{color:#a6e22e!important}.pl-sra,.pl-src,.pl-sre{color:#f92672!important}.pl-st{color:#66d9ef!important}.pl-stj{color:#f8f8f2!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#66d9ef!important}.pl-vo{color:#a6e22e!important}.pl-vpf{color:#66d9ef!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#a6e22e!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#f92672!important}.pl-mdr{color:#66d9ef!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#a6e22e!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#a6e22e!important;color:#272822!important}.pl-mo{color:#fd971f!important}.pl-mri{color:#66d9ef!important}.pl-ms1{background-color:#fd971f!important}.pl-va,.pl-vpu{color:#66d9ef!important}.pl-entl{color:#fd971f!important}.highlight .pl-corl span.x,.pl-corl{color:#e6db74!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#a6e22e!important;color:#272822!important}" + }, + { + "name": "Obsidian", + "label": "Obsidian", + "value": "/*! GitHub: Obsidian */:root{--ghd-code-background:#293134;--ghd-code-color:#e0e2e4}.pl-c,.pl-c span{color:#66747b!important;font-style:italic!important}.pl-c1{color:#ffcd22!important}.pl-e,.pl-en{color:#93c763!important}.pl-ent,.pl-k{color:#e0e2e4!important}.pl-mb{color:#ec7600!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#93c763!important}.pl-mh,.pl-mh .pl-en{color:#66747b!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#93c763!important}.pl-mq{color:#66747b!important}.pl-mr,.pl-ms{color:#93c763!important}.pl-pds,.pl-s{color:#ec7600!important}.pl-s1{color:#e0e2e4!important}.pl-s1 .pl-pse .pl-s2{color:#ec7600!important}.pl-s1 .pl-s2{color:#e0e2e4!important}.pl-s1 .pl-v,.pl-s3{color:#93c763!important}.pl-sc{color:#96989a!important}.pl-smi,.pl-smp{color:#e0e2e4!important}.pl-sr{color:#d39745!important}.pl-sr .pl-cce{color:#ffcd22!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#d39745!important}.pl-st{color:#da4236!important}.pl-stj{color:#e0e2e4!important}.pl-sv{color:#ec7600!important}.pl-v{color:#678cb1!important}.pl-vo,.pl-vpf{color:#e0e2e4!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#e0e2e4!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#e0e2e4!important}.pl-bu,.pl-ii{background:#400000!important;color:#da4236!important}.highlight .pl-corl span.x,.pl-corl{color:#ec7600!important;text-decoration:underline!important}.pl-c1>.pl-c1{color:#678cb1!important}.pl-token.active,.pl-token:hover{background:#678cb1!important;color:#e0e2e4!important}" + }, + { + "name": "One-Dark", + "label": "One Dark", + "value": "/*! GitHub: One Dark */:root{--ghd-code-background:#141414;--ghd-code-color:#abb2bf}.pl-c,.pl-c span{color:#5c6370!important;font-style:italic!important}.pl-c1{color:#d19a66!important}.pl-sr .pl-cce{color:#56b6c2!important;font-weight:400!important}.pl-cn,.pl-e{color:#d19a66!important}.pl-ef{color:#61afef!important}.pl-en{color:#d19a66!important}.pl-enc{color:#e5c07b!important}.pl-enf{color:#61afef!important}.pl-enm{color:#abb2bf!important}.pl-ens{color:#be5046!important}.pl-ent{color:#e06c75!important}.pl-entc{color:#e5c07b!important}.pl-enti{color:#56b6c2!important}.pl-entm{color:#e06c75!important}.pl-eoa,.pl-eoac,.pl-eoac .pl-pde{color:#d19a66!important}.pl-eoai{color:#61afef!important}.pl-eoi{color:#98c379!important}.pl-k{color:#c678dd!important}.pl-ko{color:#abb2bf!important}.pl-kolp{color:#c678dd!important}.pl-kos{color:#61afef!important}.pl-kou{color:#d19a66!important}.pl-mai .pl-sf{color:#56b6c2!important}.pl-mb{color:#d19a66!important;font-weight:700!important}.pl-mc{color:#c678dd!important}.pl-mh{color:#e06c75!important}.pl-mh .pl-pdh{color:#61afef!important}.pl-mi{color:#c678dd!important;font-style:italic!important}.pl-ml{color:#56b6c2!important}.pl-mm{color:#d19a66!important}.pl-mp{color:#828997!important}.pl-mp1 .pl-sf{color:#abb2bf!important}.pl-mq{color:#d19a66!important}.pl-mr{color:#61afef!important}.pl-ms{color:#abb2bf!important}.pl-pdb{color:#e5c07b!important;font-weight:700!important}.pl-pdc{color:#5c6370!important;font-style:italic!important}.pl-pdc1{color:#abb2bf!important}.pl-pde,.pl-pdi{color:#c678dd!important}.pl-pdi{font-style:italic!important}.pl-pds{color:#98c379!important}.pl-pdv{color:#e06c75!important}.pl-pse .pl-s1{color:#98c379!important}.pl-pse .pl-s2{color:#e5c07b!important}.pl-s,.pl-s1{color:#98c379!important}.pl-s2{color:#e5c07b!important}.pl-mp .pl-s3,.pl-s3{color:#d19a66!important}.pl-sc{color:#e5c07b!important}.pl-scp{color:#abb2bf!important}.pl-sf{color:#56b6c2!important}.pl-smc{color:#abb2bf!important}.pl-smi{color:#e06c75!important}.pl-smp{color:#e5c07b!important}.pl-sok{color:#d19a66!important}.pl-sol{color:#e06c75!important}.pl-som{color:#abb2bf!important}.pl-sr,.pl-sr .pl-sra,.pl-src{color:#56b6c2!important}.pl-sr .pl-sre{color:#e5c07b!important}.pl-st{color:#56b6c2!important}.pl-stj{color:#e5c07b!important}.pl-stp{color:#828997!important}.pl-sv{color:#d19a66!important}.pl-v{color:#e5c07b!important}.pl-vi{color:#be5046!important}.pl-vo{color:#56b6c2!important}.pl-vpf{color:#abb2bf!important}.pl-mdht,.pl-mi1{background:#020!important;color:#98c379!important}.pl-md,.pl-mdhf{background:#200!important;color:#e06c75!important}.pl-mdr{color:#abb2bf!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#e06c75!important;font-weight:400!important}.pl-corl{color:#e06c75!important;text-decoration:underline!important}.pl-ib{background-color:#e06c75!important}.pl-bu,.pl-ii{background-color:#e05252!important}.pl-mo{color:#abb2bf!important}.pl-mri{color:#98c379!important}.pl-ms1{background-color:#373b41!important}.pl-ms1,.pl-va,.pl-vpu{color:#abb2bf!important}.pl-entl{color:#e06c75!important}.pl-token.active,.pl-token:hover{background:#61afef!important;color:#141414!important}" + }, + { + "name": "Pastel-on-Dark", + "label": "Pastel on Dark", + "value": "/*! GitHub: Pastel on Dark */:root{--ghd-code-background:#2c2828;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#a6c6ff!important;font-style:italic!important}.pl-c1{color:#a5c261!important}.pl-cce{color:#afa472!important}.pl-cn{color:#ccc!important}.pl-coc{color:#757ad8!important}.pl-cos{color:#66a968!important}.pl-e{color:#e6e1dc!important}.pl-ef{color:#aeb2f8!important}.pl-en{color:#e6e1dc!important}.pl-enc{color:#757ad8!important}.pl-enf,.pl-enm{color:#aeb2f8!important}.pl-ens{color:#757ad8!important}.pl-ent{color:#6782d3!important}.pl-entc,.pl-enti{color:#aeb2f8!important}.pl-enti{font-weight:700!important}.pl-entm{color:#aeb2f8!important}.pl-eoa{color:#e6e1dc!important}.pl-eoac,.pl-eoac .pl-pde{color:#aeb2f8!important}.pl-eoai,.pl-eoai .pl-pde{color:#e6e1dc!important}.pl-eoi{color:#aeb2f8!important}.pl-k{color:#757ad8!important}.pl-ko,.pl-kolp{color:#e6e1dc!important}.pl-kos,.pl-kou{color:#757ad8!important}.pl-mai .pl-sf{color:#aeb2f8!important}.pl-mb{color:#66a968!important;font-weight:700!important}.pl-mc{color:#e6e1dc!important}.pl-mh .pl-pdh{color:#757ad8!important}.pl-mi{color:#e6e1dc!important;font-style:italic!important}.pl-ml{color:#66a968!important}.pl-mm{color:#aeb2f8!important}.pl-mp,.pl-mp1 .pl-sf,.pl-mq{color:#757ad8!important}.pl-mr,.pl-ms{color:#e6e1dc!important}.pl-pdb{color:#66a968!important;font-weight:700!important}.pl-pdc{color:#a6c6ff!important;font-style:italic!important}.pl-pdc1{color:#4fb7c5!important}.pl-pde{color:#757ad8!important}.pl-pdi{color:#e6e1dc!important;font-style:italic!important}.pl-pds{color:#ad9361!important}.pl-pdv{color:#aeb2f8!important}.pl-pse,.pl-pse .pl-s2,.pl-s{color:#757ad8!important}.pl-s1{color:#ad9361!important}.pl-s2{color:#8f938f!important}.pl-mp .pl-s3{color:#757ad8!important}.pl-s3{color:#e6e1dc!important}.pl-sc{color:#757ad8!important}.pl-scp{color:#4fb7c5!important}.pl-sf{color:#bebf55!important}.pl-smc{color:#aeb2f8!important}.pl-smi,.pl-smp{color:#bebf55!important}.pl-sok{color:#e6e1dc!important}.pl-sol{color:#66a968!important}.pl-som,.pl-sr{color:#aeb2f8!important}.pl-sra{color:#797878!important}.pl-src,.pl-sre{color:#e9c062!important}.pl-st{color:#a5c261!important}.pl-stj{color:#8f938f!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#757ad8!important}.pl-vo{color:#a5c261!important}.pl-vpf{color:#757ad8!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#66a968!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#aeb2f8!important}.pl-mdr{color:#757ad8!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#bebf55!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#aeb2f8!important;color:#fff!important}.pl-mo{color:#bebf55!important}.pl-mri{color:#757ad8!important}.pl-ms1{background-color:#bebf55!important}.pl-va,.pl-vpu{color:#757ad8!important}.pl-entl{color:#bebf55!important}.highlight .pl-corl span.x,.pl-corl{color:#757ad8!important;text-decoration:underline!important}.highlight-source-css .pl-v{color:#ad9361!important}.highlight-text-html-basic .pl-e{color:#6782d3!important}.highlight-text-tex .pl-s3{color:#757ad8!important}.pl-token.active,.pl-token:hover{background:#757ad8!important;color:#e6e1dc!important}" + }, + { + "name": "Railscasts", + "label": "Railscasts", + "value": "/*! GitHub: Railscasts */:root{--ghd-code-background:#282828;--ghd-code-color:#e6e1dc}.pl-c,.pl-c span{color:#bc9458!important;font-style:italic!important}.pl-c1{color:#6d9cbe!important}.pl-sr .pl-cce{font-weight:400!important}.pl-cn,.pl-sr .pl-cce{color:#a5c261!important}.pl-coc{color:#6d9cbe!important}.pl-cos{color:#cc7833!important}.pl-e,.pl-ef,.pl-en{color:#ffc66d!important}.pl-enc{color:#fff!important}.pl-enf,.pl-enm{color:#ffc66d!important}.pl-ens,.pl-ent{color:#fff!important}.pl-entc,.pl-enti{color:#ffc66d!important}.pl-enti{font-weight:700!important}.pl-entm{color:#ffc66d!important}.pl-eoa{color:#fff!important}.pl-eoac,.pl-eoac .pl-pde{color:#ffc66d!important}.pl-eoai,.pl-eoai .pl-pde{color:#fff!important}.pl-eoi{color:#ffc66d!important}.pl-k,.pl-ko,.pl-kolp{color:#cc7833!important}.pl-kos,.pl-kou{color:#6d9cbe!important}.pl-mai .pl-sf{color:#ffc66d!important}.pl-mb{color:#cc7833!important;font-weight:700!important}.pl-mc,.pl-mh{color:#fff!important}.pl-mh{font-weight:400!important}.pl-mh .pl-pdh{color:#fff!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml{color:#cc7833!important}.pl-mm{color:#ffc66d!important}.pl-mp{color:#fff!important}.pl-mp1 .pl-sf{color:#ffc66d!important}.pl-mq{color:#fff!important}.pl-mr,.pl-ms,.pl-pdb{color:#cc7833!important}.pl-pdb{font-weight:700!important}.pl-pdc{color:#bc9458!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#fff!important}.pl-pdi{font-style:italic!important}.pl-pdi,.pl-pds{color:#cc7833!important}.pl-pdv{color:#ffc66d!important}.pl-pse,.pl-pse .pl-s1{color:#a5c261!important}.pl-pse .pl-s2{color:#e6e1dc!important}.pl-s{color:#a5c261!important}.pl-s1{color:#cc7833!important}.pl-s2{color:#ccc!important}.pl-mp .pl-s3,.pl-s3,.pl-sc{color:#cc7833!important}.pl-scp{color:#fff!important}.pl-sf{color:#cc7833!important}.pl-smc{color:#da4939!important}.pl-smi{color:#d0d0ff!important}.pl-smp{color:#ccc!important}.pl-sok{color:#da4939!important}.pl-sol{color:#cc7833!important}.pl-som,.pl-sr{color:#ffc66d!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#da4939!important}.pl-st{color:#cc7833!important}.pl-stj{color:#ccc!important}.pl-stp,.pl-sv{color:#cc7833!important}.pl-v{color:#d0d0ff!important}.pl-vi{color:#cc7833!important}.pl-vo{color:#ffc66d!important}.pl-vpf{color:#cc7833!important}.pl-mi1{background:#200!important;color:#a6e22e!important}.pl-mdht{background:#2f33ab!important;color:#e6e1dc!important}.pl-md{background:#200!important;color:#f92672!important}.pl-mdhf{background:#2f33ab!important;color:#e6e1dc!important}.pl-mdr{color:#fff!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#ffc66d!important;font-weight:400!important}.pl-corl{text-decoration:underline!important}.pl-bu,.pl-ii{background-color:#900!important;color:#fff!important}.pl-mo{color:#969896!important}.pl-mri{color:teal!important}.pl-ms1{background-color:#f5f5f5!important}.pl-va,.pl-vpu{color:teal!important}.pl-entl{color:#ccc!important}.highlight .pl-corl span.x,.pl-corl{color:#a5c261!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#ffc66d!important;color:#282828!important}" + }, + { + "name": "Solarized-Dark", + "label": "Solarized Dark", + "value": "/*! GitHub: Solarized Dark */:root{--ghd-code-background:#002b36;--ghd-code-color:#839496}.pl-c,.pl-c span{color:#586e75!important;font-style:italic!important}.pl-c1{color:#2aa198!important}.pl-e,.pl-en,.pl-ent{color:#268bd2!important}.pl-k{color:#859900!important}.pl-mb{color:#2aa198!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#859900!important}.pl-mh,.pl-mh .pl-en{color:#cb4b16!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#859900!important}.pl-mq{color:#586e75!important}.pl-mr,.pl-ms{color:#859900!important}.pl-pds{color:#2aa198!important}.pl-s{color:#268bd2!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#2aa198!important}.pl-s1 .pl-s2{color:#839496!important}.pl-s1 .pl-v,.pl-s3{color:#859900!important}.pl-sc{color:#cb4b16!important}.pl-smi,.pl-smp{color:#839496!important}.pl-sr{color:#d30102!important}.pl-sr .pl-cce{color:#cb4b16!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#d30102!important}.pl-st{color:#dc322f!important}.pl-stj{color:#839496!important}.pl-sv{color:#2aa198!important}.pl-v{color:#268bd2!important}.pl-vo,.pl-vpf{color:#839496!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#839496!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#839496!important}.pl-bu,.pl-ii{background:#400000!important;color:#839496!important}.highlight .pl-corl span.x,.pl-corl{color:#268bd2!important;text-decoration:underline!important}.highlight-source-css .pl-k{color:#586e75!important}.highlight-source-c\\+\\+ .pl-s{color:#dc322f!important}.pl-token.active,.pl-token:hover{background:#268bd2!important;color:#002b36!important}" + }, + { + "name": "Terminal", + "label": "Terminal", + "value": "/*! GitHub: Terminal */:root{--ghd-code-background:#000;--ghd-code-color:#dedede}.pl-c,.pl-c span{color:#ff4500!important;font-style:italic!important}.pl-c1{color:#e78c45!important}.pl-e,.pl-en{color:#d54e53!important}.pl-ent,.pl-k{color:tomato!important}.pl-mb{color:#e78c45!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:tomato!important}.pl-mh,.pl-mh .pl-en{color:#b9ca4a!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:tomato!important}.pl-mq{color:#ff4500!important}.pl-mr,.pl-ms{color:tomato!important}.pl-pds{color:#b9ca4a!important}.pl-s{color:tomato!important}.pl-s1{color:#b9ca4a!important}.pl-s1 .pl-pse .pl-s2{color:#e78c45!important}.pl-s1 .pl-s2{color:#7aa6da!important}.pl-s1 .pl-v{color:tomato!important}.pl-s3{color:#d54e53!important}.pl-sc{color:#dedede!important}.pl-smi,.pl-smp{color:#7aa6da!important}.pl-sr{color:#d54e53!important}.pl-sr .pl-cce{color:#b9ca4a!important}.pl-sr .pl-sra,.pl-sr .pl-sre,.pl-src{color:#d54e53!important}.pl-st{color:tomato!important}.pl-stj{color:#7aa6da!important}.pl-sv{color:#e78c45!important}.pl-v{color:#d54e53!important}.pl-vo{color:#7aa6da!important}.pl-vpf{color:#e78c45!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#dedede!important}.pl-md,.pl-mdhf{background:red!important;color:#dedede!important}.pl-bu,.pl-ii{background:#900!important;color:tomato!important}.highlight .pl-corl span.x,.pl-corl{color:tomato!important;text-decoration:underline!important}.highlight-source-css .pl-k{color:#dedede!important}.highlight-source-css .pl-s3,.highlight-source-css .pl-sc{color:#e7c547!important}.highlight-source-css .pl-ent{color:#dedede!important}.highlight-text-html-basic .pl-ent{color:#d54e53!important}.highlight-source-js .pl-k{color:#ff1493!important}.highlight-text-html-php .pl-s3{color:#7aa6da!important}.highlight-text-html-php .pl-vo{color:#d54e53!important}.highlight-source-python .pl-s3{color:#7aa6da!important}.pl-token.active,.pl-token:hover{background:#dedede!important;color:tomato!important}" + }, + { + "name": "Tomorrow-Night-Blue", + "label": "Tomorrow Night Blue", + "value": "/*! GitHub: Tomorrow Night Blue */:root{--ghd-code-background:#002451;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#969896!important;font-style:italic!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#de935f!important}.pl-cos{color:#b5bd68!important}.pl-e,.pl-ef,.pl-en{color:#f0c674!important}.pl-enc{color:#de935f!important}.pl-enf,.pl-enm{color:#f0c674!important}.pl-ens{color:#de935f!important}.pl-ent{color:#b294bb!important}.pl-entc,.pl-enti{color:#f0c674!important}.pl-enti{font-weight:700!important}.pl-entm{color:#c66!important}.pl-eoa{color:#b294bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#c66!important}.pl-eoai,.pl-eoai .pl-pde{color:#b294bb!important}.pl-eoi{color:#f0c674!important}.pl-k,.pl-ko,.pl-kolp{color:#b294bb!important}.pl-kos,.pl-kou{color:#de935f!important}.pl-mai .pl-sf{color:#c66!important}.pl-mb{color:#b5bd68!important;font-weight:700!important}.pl-mc{color:#b294bb!important}.pl-mh .pl-pdh{color:#de935f!important}.pl-mi{color:#b294bb!important;font-style:italic!important}.pl-ml{color:#b5bd68!important}.pl-mm{color:#c66!important}.pl-mp,.pl-mp1 .pl-sf{color:#81a2be!important}.pl-mq{color:#de935f!important}.pl-mr,.pl-ms{color:#b294bb!important}.pl-pdb{color:#b5bd68!important;font-weight:700!important}.pl-pdc{color:#969896!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#de935f!important}.pl-pdi{color:#b294bb!important;font-style:italic!important}.pl-pds{color:#b5bd68!important}.pl-pdv{color:#c66!important}.pl-pse,.pl-pse .pl-s2{color:#de935f!important}.pl-s{color:#b294bb!important}.pl-s1{color:#b5bd68!important}.pl-s2{color:#c5c8c6!important}.pl-mp .pl-s3{color:#b294bb!important}.pl-s3{color:#81a2be!important}.pl-sc{color:#c5c8c6!important}.pl-scp{color:#de935f!important}.pl-sf{color:#dad085!important}.pl-smc{color:#f0c674!important}.pl-smi,.pl-smp{color:#c5c8c6!important}.pl-sok{color:#b294bb!important}.pl-sol{color:#b5bd68!important}.pl-som,.pl-sr{color:#c66!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#b294bb!important}.pl-stj{color:#c5c8c6!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#de935f!important}.pl-vo{color:#c66!important}.pl-vpf{color:#de935f!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#8f9d6a!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#c66!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c66!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#c66!important;color:#fff!important}.pl-mo{color:#c5c8c6!important}.pl-mri{color:#de935f!important}.pl-ms1{background-color:#c5c8c6!important}.pl-va,.pl-vpu{color:#de935f!important}.pl-entl{color:#c5c8c6!important}.highlight .pl-corl span.x,.pl-corl{color:#b294bb!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#f0c674!important;color:#000!important}" + }, + { + "name": "Tomorrow-Night-Bright", + "label": "Tomorrow Night Bright", + "value": "/*! GitHub: Tomorrow Night Bright */:root{--ghd-code-background:#000;--ghd-code-color:#dedede}.pl-c,.pl-c span{color:#969896!important;font-style:italic!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#de935f!important}.pl-cos{color:#b5bd68!important}.pl-e,.pl-ef,.pl-en{color:#f0c674!important}.pl-enc{color:#de935f!important}.pl-enf,.pl-enm{color:#f0c674!important}.pl-ens{color:#de935f!important}.pl-ent{color:#b294bb!important}.pl-entc,.pl-enti{color:#f0c674!important}.pl-enti{font-weight:700!important}.pl-entm{color:#c66!important}.pl-eoa{color:#b294bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#c66!important}.pl-eoai,.pl-eoai .pl-pde{color:#b294bb!important}.pl-eoi{color:#f0c674!important}.pl-k,.pl-ko,.pl-kolp{color:#b294bb!important}.pl-kos,.pl-kou{color:#de935f!important}.pl-mai .pl-sf{color:#c66!important}.pl-mb{color:#b5bd68!important;font-weight:700!important}.pl-mc{color:#b294bb!important}.pl-mh .pl-pdh{color:#de935f!important}.pl-mi{color:#b294bb!important;font-style:italic!important}.pl-ml{color:#b5bd68!important}.pl-mm{color:#c66!important}.pl-mp,.pl-mp1 .pl-sf{color:#81a2be!important}.pl-mq{color:#de935f!important}.pl-mr,.pl-ms{color:#b294bb!important}.pl-pdb{color:#b5bd68!important;font-weight:700!important}.pl-pdc{color:#969896!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#de935f!important}.pl-pdi{color:#b294bb!important;font-style:italic!important}.pl-pds{color:#b5bd68!important}.pl-pdv{color:#c66!important}.pl-pse,.pl-pse .pl-s2{color:#de935f!important}.pl-s{color:#b294bb!important}.pl-s1{color:#b5bd68!important}.pl-s2{color:#c5c8c6!important}.pl-mp .pl-s3{color:#b294bb!important}.pl-s3{color:#81a2be!important}.pl-sc{color:#c5c8c6!important}.pl-scp{color:#de935f!important}.pl-sf{color:#dad085!important}.pl-smc{color:#f0c674!important}.pl-smi,.pl-smp{color:#c5c8c6!important}.pl-sok{color:#b294bb!important}.pl-sol{color:#b5bd68!important}.pl-som,.pl-sr{color:#c66!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#b294bb!important}.pl-stj{color:#c5c8c6!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#de935f!important}.pl-vo{color:#c66!important}.pl-vpf{color:#de935f!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#8f9d6a!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#c66!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c66!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#c66!important;color:#fff!important}.pl-mo{color:#c5c8c6!important}.pl-mri{color:#de935f!important}.pl-ms1{background-color:#c5c8c6!important}.pl-va,.pl-vpu{color:#de935f!important}.pl-entl{color:#c5c8c6!important}.highlight .pl-corl span.x,.pl-corl{color:#b294bb!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#f0c674!important;color:#000!important}" + }, + { + "name": "Tomorrow-Night-Eighties", + "label": "Tomorrow Night Eighties", + "value": "/*! GitHub: Tomorrow Night Eighties */:root{--ghd-code-background:#000;--ghd-code-color:#ccc}.pl-c,.pl-c span{color:#969896!important;font-style:italic!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#de935f!important}.pl-cos{color:#b5bd68!important}.pl-e,.pl-ef,.pl-en{color:#f0c674!important}.pl-enc{color:#de935f!important}.pl-enf,.pl-enm{color:#f0c674!important}.pl-ens{color:#de935f!important}.pl-ent{color:#b294bb!important}.pl-entc,.pl-enti{color:#f0c674!important}.pl-enti{font-weight:700!important}.pl-entm{color:#c66!important}.pl-eoa{color:#b294bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#c66!important}.pl-eoai,.pl-eoai .pl-pde{color:#b294bb!important}.pl-eoi{color:#f0c674!important}.pl-k,.pl-ko,.pl-kolp{color:#b294bb!important}.pl-kos,.pl-kou{color:#de935f!important}.pl-mai .pl-sf{color:#c66!important}.pl-mb{color:#b5bd68!important;font-weight:700!important}.pl-mc{color:#b294bb!important}.pl-mh .pl-pdh{color:#de935f!important}.pl-mi{color:#b294bb!important;font-style:italic!important}.pl-ml{color:#b5bd68!important}.pl-mm{color:#c66!important}.pl-mp,.pl-mp1 .pl-sf{color:#81a2be!important}.pl-mq{color:#de935f!important}.pl-mr,.pl-ms{color:#b294bb!important}.pl-pdb{color:#b5bd68!important;font-weight:700!important}.pl-pdc{color:#969896!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#de935f!important}.pl-pdi{color:#b294bb!important;font-style:italic!important}.pl-pds{color:#b5bd68!important}.pl-pdv{color:#c66!important}.pl-pse,.pl-pse .pl-s2{color:#de935f!important}.pl-s{color:#b294bb!important}.pl-s1{color:#b5bd68!important}.pl-s2{color:#c5c8c6!important}.pl-mp .pl-s3{color:#b294bb!important}.pl-s3{color:#81a2be!important}.pl-sc{color:#c5c8c6!important}.pl-scp{color:#de935f!important}.pl-sf{color:#dad085!important}.pl-smc{color:#f0c674!important}.pl-smi,.pl-smp{color:#c5c8c6!important}.pl-sok{color:#b294bb!important}.pl-sol{color:#b5bd68!important}.pl-som,.pl-sr{color:#c66!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#b294bb!important}.pl-stj{color:#c5c8c6!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#de935f!important}.pl-vo{color:#c66!important}.pl-vpf{color:#de935f!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#8f9d6a!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#c66!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c66!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#c66!important;color:#fff!important}.pl-mo{color:#c5c8c6!important}.pl-mri{color:#de935f!important}.pl-ms1{background-color:#c5c8c6!important}.pl-va,.pl-vpu{color:#de935f!important}.pl-entl{color:#c5c8c6!important}.highlight .pl-corl span.x,.pl-corl{color:#b294bb!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#f0c674!important;color:#000!important}" + }, + { + "name": "Tomorrow-Night", + "label": "Tomorrow Night", + "value": "/*! GitHub: Tomorrow Night */:root{--ghd-code-background:#1d1f21;--ghd-code-color:#c5c8c6}.pl-c,.pl-c span{color:#969896!important;font-style:italic!important}.pl-c1,.pl-cce,.pl-cn,.pl-coc{color:#de935f!important}.pl-cos{color:#b5bd68!important}.pl-e,.pl-ef,.pl-en{color:#f0c674!important}.pl-enc{color:#de935f!important}.pl-enf,.pl-enm{color:#f0c674!important}.pl-ens{color:#de935f!important}.pl-ent{color:#b294bb!important}.pl-entc,.pl-enti{color:#f0c674!important}.pl-enti{font-weight:700!important}.pl-entm{color:#c66!important}.pl-eoa{color:#b294bb!important}.pl-eoac,.pl-eoac .pl-pde{color:#c66!important}.pl-eoai,.pl-eoai .pl-pde{color:#b294bb!important}.pl-eoi{color:#f0c674!important}.pl-k,.pl-ko,.pl-kolp{color:#b294bb!important}.pl-kos,.pl-kou{color:#de935f!important}.pl-mai .pl-sf{color:#c66!important}.pl-mb{color:#b5bd68!important;font-weight:700!important}.pl-mc{color:#b294bb!important}.pl-mh .pl-pdh{color:#de935f!important}.pl-mi{color:#b294bb!important;font-style:italic!important}.pl-ml{color:#b5bd68!important}.pl-mm{color:#c66!important}.pl-mp,.pl-mp1 .pl-sf{color:#81a2be!important}.pl-mq{color:#de935f!important}.pl-mr,.pl-ms{color:#b294bb!important}.pl-pdb{color:#b5bd68!important;font-weight:700!important}.pl-pdc{color:#969896!important;font-style:italic!important}.pl-pdc1,.pl-pde{color:#de935f!important}.pl-pdi{color:#b294bb!important;font-style:italic!important}.pl-pds{color:#b5bd68!important}.pl-pdv{color:#c66!important}.pl-pse,.pl-pse .pl-s2{color:#de935f!important}.pl-s{color:#b294bb!important}.pl-s1{color:#b5bd68!important}.pl-s2{color:#c5c8c6!important}.pl-mp .pl-s3{color:#b294bb!important}.pl-s3{color:#81a2be!important}.pl-sc{color:#c5c8c6!important}.pl-scp{color:#de935f!important}.pl-sf{color:#dad085!important}.pl-smc{color:#f0c674!important}.pl-smi,.pl-smp{color:#c5c8c6!important}.pl-sok{color:#b294bb!important}.pl-sol{color:#b5bd68!important}.pl-som,.pl-sr{color:#c66!important}.pl-sra,.pl-src,.pl-sre,.pl-st{color:#b294bb!important}.pl-stj{color:#c5c8c6!important}.pl-stp,.pl-sv,.pl-v,.pl-vi{color:#de935f!important}.pl-vo{color:#c66!important}.pl-vpf{color:#de935f!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#8f9d6a!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#c66!important}.pl-mdr{color:#de935f!important;font-weight:400!important}.pl-mdh,.pl-mdi{color:#c66!important;font-weight:400!important}.pl-bu,.pl-ii,.pl-ii .pl-cce{background-color:#c66!important;color:#fff!important}.pl-mo{color:#c5c8c6!important}.pl-mri{color:#de935f!important}.pl-ms1{background-color:#c5c8c6!important}.pl-va,.pl-vpu{color:#de935f!important}.pl-entl{color:#c5c8c6!important}.highlight .pl-corl span.x,.pl-corl{color:#b294bb!important;text-decoration:underline!important}.pl-token.active,.pl-token:hover{background:#f0c674!important;color:#1d1f21!important}" + }, + { + "name": "Vibrant-Ink", + "label": "Vibrant Ink", + "value": "/*! GitHub: Vibrant Ink */:root{--ghd-code-background:#0f0f0f;--ghd-code-color:#fff}.pl-c,.pl-c span{color:#93c!important;font-style:italic!important}.pl-c1{color:#399!important}.pl-e,.pl-en{color:#f60!important}.pl-ent{color:#fc0!important}.pl-k{color:#9c9!important}.pl-mb{color:#6f0!important;font-weight:700!important}.pl-mdh,.pl-mdr{color:#f60!important}.pl-mh,.pl-mh .pl-en{color:#9c9!important}.pl-mh .pl-en{font-weight:700!important}.pl-mi{font-style:italic!important}.pl-mi,.pl-ml,.pl-mm,.pl-mo,.pl-mp{color:#f60!important}.pl-mq{color:#93c!important}.pl-mr,.pl-ms{color:#f60!important}.pl-pds{color:#6f0!important}.pl-s{color:#fc0!important}.pl-s1,.pl-s1 .pl-pse .pl-s2{color:#6f0!important}.pl-s1 .pl-s2{color:#399!important}.pl-s1 .pl-v{color:#f60!important}.pl-s3{color:#fc0!important}.pl-sc{color:#fff!important}.pl-smi,.pl-smp{color:#399!important}.pl-sr{color:#44b4cc!important}.pl-sr .pl-cce{color:#9c9!important}.pl-sr .pl-sra,.pl-sr .pl-sre{color:#44b4cc!important}.pl-src{color:#6f0!important}.pl-st{color:#f60!important}.pl-stj{color:#399!important}.pl-sv{color:#6f0!important}.pl-v{color:#fc0!important}.pl-vo{color:#399!important}.pl-vpf{color:#fff!important}.pl-mdht,.pl-mi1{background:rgba(0,64,0,.5)!important;color:#fff!important}.pl-md,.pl-mdhf{background:rgba(64,0,0,.5)!important;color:#fff!important}.pl-bu,.pl-ii{background:#400000!important;color:#f60!important}.highlight .pl-corl span.x,.pl-corl{color:#fc0!important;text-decoration:underline!important}.highlight-source-css .pl-c1{color:#9c9!important}.highlight-source-css .pl-ent{color:#399!important}.highlight-source-css .pl-s3{color:#fff!important}.highlight-source-css .pl-sc{color:#399!important}.highlight-text-html-basic .pl-ent{color:#f60!important}.highlight-text-html-basic .pl-e{color:#9c9!important}.highlight-source-js .pl-vpf{color:#fc0!important}.highlight-text-html-php .pl-s,.highlight-text-html-php .pl-s3{color:#f60!important}.highlight-text-html-php .pl-vo{color:#fc0!important}.highlight-source-c\\+\\+ .pl-s3{color:#fff!important}.pl-token.active,.pl-token:hover{background:#fff!important;color:#f60!important}" + } + ] + }, + "syntax-codemirror": { + "type": "select", + "label": "CodeMirror syntax theme", + "name": "syntax-codemirror", + "value": null, + "default": "Twilight", + "options": [ + { + "name": "Twilight", + "label": "Twilight", + "value": "/*! CodeMirror: Twilight */.CodeMirror-gutters{background:#222!important;border-right:1px solid #484848!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#aaa!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.CodeMirror-activeline-background{background:#27282e!important}.CodeMirror-matchingbracket{color:#fff!important;outline:1px solid grey!important}.cm-keyword{color:#f9ee98!important}.cm-atom{color:#fc0!important}.cm-number{color:#ca7841!important}.cm-def{color:#8da6ce!important}.cm-variable-2,.cm-variable-3,span.cm-def,span.cm-tag{color:#607392!important}.cm-operator{color:#cda869!important}.cm-comment{color:#777!important;font-style:italic!important;font-weight:400!important}.cm-string{color:#8f9d6a!important}.cm-string-2{color:#bd6b18!important}.cm-meta{background-color:#141414!important;color:#f7f7f7!important}.cm-builtin{color:#cda869!important}.cm-tag{color:#997643!important}.cm-attribute{color:#d6bb6d!important}.cm-header{color:#ff6400!important}.cm-hr{color:#aeaeae!important}.cm-link{color:#ad9361!important;font-style:italic!important;text-decoration:none!important}.cm-error{border-bottom:1px solid red!important}" + }, + { + "name": "Ambiance", + "label": "Ambiance", + "value": "/*! CodeMirror: Ambiance */.cm-header{color:blue!important}.cm-quote{color:#24c2c7!important}.cm-keyword{color:#cda869!important}.cm-atom{color:#cf7ea9!important}.cm-number{color:#78cf8a!important}.cm-def{color:#aac6e3!important}.cm-variable{color:#ffb795!important}.cm-variable-2{color:#eed1b3!important}.cm-variable-3{color:#faded3!important}.cm-property{color:#eed1b3!important}.cm-operator{color:#fa8d6a!important}.cm-comment{color:#555!important;font-style:italic!important}.cm-string{color:#8f9d6a!important}.cm-string-2{color:#9d937c!important}.cm-meta{color:#d2a8a1!important}.cm-qualifier{color:#ff0!important}.cm-builtin{color:#99c!important}.cm-bracket{color:#24c2c7!important}.cm-tag{color:#fee4ff!important}.cm-attribute{color:#9b859d!important}.cm-hr{color:pink!important}.cm-link{color:#f4c20b!important}.cm-special{color:#ff9d00!important}.cm-error{color:#af2018!important}.CodeMirror-matchingbracket{color:#0f0!important}.CodeMirror-nonmatchingbracket{color:#f22!important}.CodeMirror-selected{background:hsla(0,0%,100%,.15)!important}.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror{background-color:#202020!important;-webkit-box-shadow:inset 0 0 10px #000!important;-moz-box-shadow:inset 0 0 10px #000!important;box-shadow:inset 0 0 10px #000!important;color:#e6e1dc!important;line-height:1.4em!important}.CodeMirror-gutters{background:#3d3d3d!important;border-right:1px solid #4d4d4d!important;box-shadow:0 10px 20px #000!important}.CodeMirror-linenumber{color:#111!important;padding:0 5px!important;text-shadow:0 1px 1px #4d4d4d!important}.CodeMirror-guttermarker{color:#aaa!important}.CodeMirror-guttermarker-subtle{color:#111!important}.CodeMirror-cursor{border-left:1px solid #7991e8!important}.CodeMirror-activeline-background{background:none repeat scroll 0 0 hsla(0,0%,100%,.031)!important}" + }, + { + "name": "Base16-Ocean-Dark", + "label": "Base16 Ocean Dark", + "value": "/*! CodeMirror: Base16 Ocean Dark */.CodeMirror{background:#2b303b!important;color:#dfe1e8!important}div.CodeMirror-selected{background:#343d46!important}.CodeMirror-gutters{background:#2b303b!important;border-right:0!important}.CodeMirror-linenumber{color:#65737e!important}.CodeMirror-cursor{border-left:1px solid #a7adba!important}span.cm-comment{color:#ab7967!important}span.cm-atom,span.cm-number{color:#b48ead!important}span.cm-attribute,span.cm-property{color:#a3be8c!important}span.cm-keyword{color:#bf616a!important}span.cm-string{color:#ebcb8b!important}span.cm-variable{color:#a3be8c!important}span.cm-variable-2{color:#8fa1b3!important}span.cm-def{color:#d08770!important}span.cm-error{background:#bf616a!important;color:#a7adba!important}span.cm-bracket{color:#dfe1e8!important}span.cm-tag{color:#bf616a!important}span.cm-link{color:#b48ead!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important}" + }, + { + "name": "Cobalt", + "label": "Cobalt", + "value": "/*! CodeMirror: Cobalt */.CodeMirror{background:#002240!important;color:#fff!important}div.CodeMirror-selected{background:#b36539!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(179,101,57,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(179,101,57,.99)!important}.CodeMirror-gutters{background:#002240!important;border-right:1px solid #aaa!important}.CodeMirror-guttermarker{color:#ffee80!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.cm-comment{color:#08f!important}.cm-atom{color:#845dc4!important}.cm-number,span.cm-attribute{color:#ff80e1!important}.cm-keyword{color:#ffee80!important}.cm-string{color:#3ad900!important}.cm-meta{color:#ff9d00!important}.cm-variable-2,span.cm-tag{color:#9effff!important}.cm-variable-3,span.cm-def{color:#fff!important}.cm-bracket{color:#d8d8d8!important}.cm-builtin,span.cm-special{color:#ff9e59!important}.cm-link{color:#845dc4!important}.cm-error{color:#9d1e15!important}.CodeMirror-activeline-background{background:#002d57!important}.CodeMirror-matchingbracket{color:#fff!important;outline:1px solid grey!important}" + }, + { + "name": "Dracula", + "label": "Dracula", + "value": "/*! CodeMirror: Dracula */.CodeMirror,.CodeMirror-gutters{background-color:#282a36!important;border:none!important;color:#f8f8f2!important}.CodeMirror-gutters{color:#282a36!important}.CodeMirror-cursor{border-left:thin solid #f8f8f0!important}.CodeMirror-linenumber{color:#6d8a88!important}.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}span.cm-comment{color:#6272a4!important}span.cm-string,span.cm-string-2{color:#f1fa8c!important}span.cm-number{color:#bd93f9!important}span.cm-variable{color:#50fa7b!important}span.cm-variable-2{color:#fff!important}span.cm-def{color:#ffb86c!important}span.cm-keyword,span.cm-operator{color:#ff79c6!important}span.cm-atom{color:#bd93f9!important}span.cm-meta{color:#f8f8f2!important}span.cm-tag{color:#ff79c6!important}span.cm-attribute,span.cm-qualifier{color:#50fa7b!important}span.cm-property{color:#66d9ef!important}span.cm-builtin,span.cm-variable-3{color:#50fa7b!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.1)!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important}" + }, + { + "name": "Material", + "label": "Material", + "value": "/*! CodeMirror: Material */.CodeMirror{background-color:#263238!important;color:#e9eded!important}.CodeMirror-gutters{background:#263238!important;border:none!important}.CodeMirror-guttermarker,.CodeMirror-guttermarker-subtle,.CodeMirror-gutters,.CodeMirror-linenumber{color:#537f7e!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}div.CodeMirror-selected{background:hsla(0,0%,100%,.15)!important}.CodeMirror-focused div.CodeMirror-selected{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:hsla(0,0%,100%,.1)!important}.CodeMirror-activeline-background{background:transparent!important}.cm-keyword{color:#c792ea!important}.cm-operator{color:#e9eded!important}.cm-variable-2{color:#80cbc4!important}.cm-type,.cm-variable-3{color:#82b1ff!important}.cm-builtin{color:#decb6b!important}.cm-atom,.cm-number{color:#f77669!important}.cm-def{color:#e9eded!important}.cm-string{color:#c3e88d!important}.cm-string-2{color:#80cbc4!important}.cm-comment{color:#546e7a!important}.cm-variable{color:#82b1ff!important}.cm-meta,.cm-tag{color:#80cbc4!important}.cm-attribute{color:#ffcb6b!important}.cm-property{color:#80cbae!important}.cm-qualifier,.cm-type,.cm-variable-3{color:#decb6b!important}.cm-tag{color:#ff5370!important}.cm-error{background-color:#ec5f67!important;color:#fff!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important}" + }, + { + "name": "Monokai---Spacegray-Eighties", + "label": "Monokai - Spacegray Eighties", + "value": "/*! CodeMirror: Monokai - Spacegray Eighties */.CodeMirror{background:#1c1c1c!important;color:#f8f8f8!important}.CodeMirror-selected{background:#3c3c3c!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(44,44,44,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(44,44,44,.99)!important}.CodeMirror-gutters{background:#1c1c1c!important;border-right:0!important}.CodeMirror-guttermarker{color:#b9b9b9!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#8a8a8a!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}.cm-comment{color:grey!important}.cm-atom,.cm-number{color:#ae81ff!important}.cm-property,span.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#66d9ef!important;font-style:italic!important}.cm-builtin{color:#f8f8f8!important}.cm-string{color:#e6db74!important}.cm-variable{color:#f8f8f8!important}.cm-variable-2{color:#9effff!important}.cm-variable-3{color:#ae81ff!important}.cm-def{color:#66d9ef!important;font-style:italic!important}.cm-bracket{color:#f8f8f8!important}.cm-tag{color:#f92672!important}.cm-header,.cm-link{color:#ae81ff!important}.cm-error{background:#1e0010!important;color:#960050!important}.CodeMirror-activeline-background{background:#2c2c2c!important}.CodeMirror-matchingbracket{color:#f8f8f8!important;text-decoration:underline!important}" + }, + { + "name": "Monokai", + "label": "Monokai", + "value": "/*! CodeMirror: Monokai */.CodeMirror{background:#272822!important;color:#f8f8f2!important}.CodeMirror-selected{background:#49483e!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(73,72,62,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(73,72,62,.99)!important}.CodeMirror-gutters{background:#272822!important;border-right:0!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #f8f8f0!important}.cm-comment{color:#75715e!important}.cm-atom,.cm-number{color:#ae81ff!important}.cm-property,span.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#f92672!important}.cm-builtin{color:#66d9ef!important}.cm-string{color:#e6db74!important}.cm-variable{color:#f8f8f2!important}.cm-variable-2{color:#9effff!important}.cm-variable-3{color:#66d9ef!important}.cm-def{color:#fd971f!important}.cm-bracket{color:#f8f8f2!important}.cm-tag{color:#f92672!important}.cm-header,.cm-link{color:#ae81ff!important}.cm-error{background:#f92672!important;color:#f8f8f0!important}.CodeMirror-activeline-background{background:#373831!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important}" + }, + { + "name": "One-Dark", + "label": "One Dark", + "value": "/*! CodeMirror: One Dark */.CodeMirror,.CodeMirror-scroll{background-color:#141414!important;color:#abb2bf!important;font-weight:300}.CodeMirror-matchingbracket{background-color:rgba(204,217,255,.09)!important;border-bottom:1px solid #528bff!important;color:#abb2bf!important}.CodeMirror-selected{background:rgba(204,217,255,.05)!important}.CodeMirror-focused .CodeMirror-selected{background:rgba(204,217,255,.09)!important}.CodeMirror-lines{padding:4px 0!important}.CodeMirror pre{padding:0 4px!important}.CodeMirror-gutter,.CodeMirror-gutters{background:transparent!important;border:none!important;white-space:nowrap!important}.CodeMirror-linenumber{color:#393e46!important;min-width:20px!important;padding:0 30px!important;text-align:right!important;white-space:nowrap!important}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#ccc!important}.CodeMirror-cursor{border-left:2px solid #528bff!important}.CodeMirror-activeline{color:#5c6370!important}.CodeMirror-overwrite .CodeMirror-cursor{border-bottom:1px solid #abb2bf!important;border-left:none!important}.cm-header{color:#e06c75!important}.cm-header .cm-em{color:#c678dd!important;font-style:italic!important}.cm-header .cm-strong{color:#d19a66!important;font-weight:700!important}.cm-quote{color:#d19a66!important;font-style:italic!important}.cm-keyword{color:#c678dd!important}.cm-atom,.cm-number{color:#d19a66!important}.cm-def{color:#e06c75!important}.cm-variable{color:#e5c07b!important}.cm-variable-2{color:#d19a66!important}.cm-variable-3{color:#56b6c2!important}.cm-property{color:#d19a66!important}.cm-operator{color:#abb2bf!important}.cm-comment{color:#5c6370!important;font-style:italic!important}.cm-string,.cm-string-2{color:#98c379!important}.cm-meta,.cm-qualifier{color:#d19a66!important}.cm-builtin{color:#61afef!important}.cm-bracket{color:#abb2bf!important}.cm-tag{color:#e06c75!important}.cm-attribute{color:#d19a66!important}.cm-link{border-bottom:1px solid #e06c75!important;color:#e06c75!important;cursor:pointer!important}.cm-em{color:#c678dd!important;font-style:italic}.cm-strong{color:#e5c07b!important;font-weight:700}.cm-punctuation{color:#5c6370!important}.cm-positive{color:#98c379!important}.cm-negative{color:#e06c75!important}" + }, + { + "name": "Pastel-on-Dark", + "label": "Pastel on Dark", + "value": "/*! CodeMirror: Pastel on Dark */.CodeMirror-selected{background:rgba(221,240,255,.2)!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(221,240,255,.2)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(221,240,255,.2)!important}.CodeMirror-gutters{background:#34302f!important;border-right:0!important;padding:0 3px!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#8f938f!important}.CodeMirror-cursor{border-left:1px solid #a7a7a7!important}.cm-comment{color:#a6c6ff!important}.cm-atom{color:#de8e30!important}.cm-number{color:#ccc!important}.cm-property{color:#8f938f!important}.cm-attribute{color:#a6e22e!important}.cm-keyword{color:#aeb2f8!important}.cm-string{color:#66a968!important}.cm-variable{color:#aeb2f8!important}.cm-variable-2{color:#bebf55!important}.cm-variable-3{color:#de8e30!important}.cm-def{color:#757ad8!important}.cm-bracket{color:#f8f8f2!important}.cm-tag{color:#c1c144!important}.cm-link{color:#ae81ff!important}.cm-qualifier,span.cm-builtin{color:#c1c144!important}.cm-error{background:#757ad8!important;color:#f8f8f0!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.031)!important}.CodeMirror-matchingbracket{border:1px solid hsla(0,0%,100%,.25)!important;color:#8f938f!important;margin:-1px -1px 0!important}" + }, + { + "name": "Railscasts", + "label": "Railscasts", + "value": "/*! CodeMirror: Railscasts */.CodeMirror{background:#2b2b2b!important;color:#f4f1ed!important}.CodeMirror-selected{background:#272935!important}.CodeMirror-gutters{background:#2b2b2b!important;border-right:0!important}.CodeMirror-linenumber{color:#5a647e!important}.CodeMirror-cursor{border-left:1px solid #d4cfc9!important}.cm-comment{color:#bc9458!important}.cm-atom,.cm-number{color:#b6b3eb!important}.cm-attribute,.cm-property{color:#a5c261!important}.cm-keyword{color:#da4939!important}.cm-string{color:#ffc66d!important}.cm-variable{color:#a5c261!important}.cm-variable-2{color:#6d9cbe!important}.cm-def{color:#cc7833!important}.cm-error{background:#da4939!important;color:#d4cfc9!important}.cm-bracket{color:#f4f1ed!important}.cm-tag{color:#da4939!important}.cm-link{color:#b6b3eb!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important}.CodeMirror-activeline-background{background:#303040!important}" + }, + { + "name": "Solarized-Dark", + "label": "Solarized Dark", + "value": "/*! CodeMirror: Solarized Dark */.CodeMirror-widget{text-shadow:none!important}.cm-header{color:#586e75!important}.cm-quote{color:#93a1a1!important}.cm-keyword{color:#cb4b16!important}.cm-atom,.cm-number{color:#d33682!important}.cm-def{color:#2aa198!important}.cm-variable{color:#839496!important}.cm-variable-2{color:#b58900!important}.cm-variable-3{color:#6c71c4!important}.cm-property{color:#2aa198!important}.cm-operator{color:#6c71c4!important}.cm-comment{color:#586e75!important;font-style:italic!important}.cm-string{color:#859900!important}.cm-string-2{color:#b58900!important}.cm-meta{color:#859900!important}.cm-qualifier{color:#b58900!important}.cm-builtin{color:#d33682!important}.cm-bracket{color:#cb4b16!important}.CodeMirror-matchingbracket{color:#859900!important}.CodeMirror-nonmatchingbracket{color:#dc322f!important}.cm-tag{color:#93a1a1!important}.cm-attribute{color:#2aa198!important}.cm-hr{border-top:1px solid #586e75!important;color:transparent!important;display:block!important}.cm-link{color:#93a1a1!important;cursor:pointer!important}.cm-special{color:#6c71c4!important}.cm-em{color:#999!important;text-decoration:underline!important;text-decoration-style:dotted!important}.cm-strong{color:#eee!important}.cm-error,.cm-invalidchar{border-bottom:1px dotted #dc322f!important;color:#586e75!important}.CodeMirror-selected{background:#073642!important}.cm-s-solarized.cm-s-dark.CodeMirror ::selection{background:rgba(7,54,66,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(7,54,66,.99)!important}.cm-s-solarized.CodeMirror{-moz-box-shadow:inset 7px 0 12px -6px #000!important;-webkit-box-shadow:inset 7px 0 12px -6px #000!important;box-shadow:inset 7px 0 12px -6px #000!important}.CodeMirror-gutters{background-color:#073642!important;border-right:0!important}.CodeMirror-linenumber{padding:0 5px!important;text-shadow:#021014 0 -1px!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#586e75!important}.CodeMirror-guttermarker{color:#ddd!important}.CodeMirror-gutter .CodeMirror-gutter-text{color:#586e75!important}.CodeMirror-cursor{border-left:1px solid #819090!important}.CodeMirror-activeline-background{background:hsla(0,0%,100%,.06)!important}" + }, + { + "name": "Tomorrow-Night-Bright", + "label": "Tomorrow Night Bright", + "value": "/*! CodeMirror: Tomorrow Night Bright */.CodeMirror-selected{background:#424242!important}.CodeMirror-gutters{background:#000!important;border-right:0!important}.CodeMirror-guttermarker{color:#e78c45!important}.CodeMirror-guttermarker-subtle{color:#777!important}.CodeMirror-linenumber{color:#424242!important}.CodeMirror-cursor{border-left:1px solid #6a6a6a!important}.cm-comment{color:#d27b53!important}.cm-atom,.cm-number{color:#a16a94!important}.cm-property,span.cm-attribute{color:#9c9!important}.cm-keyword{color:#d54e53!important}.cm-string{color:#e7c547!important}.cm-variable{color:#b9ca4a!important}.cm-variable-2{color:#7aa6da!important}.cm-def{color:#e78c45!important}.cm-bracket{color:#eaeaea!important}.cm-tag{color:#d54e53!important}.cm-link{color:#a16a94!important}.cm-error{background:#d54e53!important;color:#6a6a6a!important}.CodeMirror-activeline-background{background:#2a2a2a!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important}" + }, + { + "name": "Tomorrow-Night-Eighties", + "label": "Tomorrow Night Eighties", + "value": "/*! CodeMirror: Tomorrow Night Eighties */.CodeMirror-selected{background:#2d2d2d!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(45,45,45,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(45,45,45,.99)!important}.CodeMirror-gutters{background:#000!important;border-right:0!important}.CodeMirror-guttermarker{color:#f2777a!important}.CodeMirror-guttermarker-subtle{color:#777!important}.CodeMirror-linenumber{color:#515151!important}.CodeMirror-cursor{border-left:1px solid #6a6a6a!important}.cm-comment{color:#d27b53!important}.cm-atom,.cm-number{color:#a16a94!important}.cm-property,span.cm-attribute{color:#9c9!important}.cm-keyword{color:#f2777a!important}.cm-string{color:#fc6!important}.cm-variable{color:#9c9!important}.cm-variable-2{color:#69c!important}.cm-def{color:#f99157!important}.cm-bracket{color:#ccc!important}.cm-tag{color:#f2777a!important}.cm-link{color:#a16a94!important}.cm-error{background:#f2777a!important;color:#6a6a6a!important}.CodeMirror-activeline-background{background:#343600!important}.CodeMirror-matchingbracket{color:#fff!important;text-decoration:underline!important}" + }, + { + "name": "Vibrant-Ink", + "label": "Vibrant Ink", + "value": "/*! CodeMirror: Vibrant Ink */.CodeMirror-selected{background:#35493c!important}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:rgba(53,73,60,.99)!important}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:rgba(53,73,60,.99)!important}.CodeMirror-gutters{background:#002240!important;border-right:1px solid #aaa!important}.CodeMirror-guttermarker{color:#fff!important}.CodeMirror-guttermarker-subtle,.CodeMirror-linenumber{color:#d0d0d0!important}.CodeMirror-cursor{border-left:1px solid #fff!important}.cm-keyword{color:#cc7832!important}.cm-atom{color:#fc0!important}.cm-number{color:#ffee98!important}.cm-def{color:#8da6ce!important}.cm-s-vibrant span.cm-def,.cm-s-vibrant span.cm-tag,.cm-variable-2,.cm-variable-3{color:#ffc66d!important}.cm-operator{color:#888!important}.cm-comment{color:gray!important;font-weight:700!important}.cm-string{color:#a5c25c!important}.cm-string-2{color:red!important}.cm-meta{color:#d8fa3c!important}.cm-attribute,.cm-builtin,.cm-tag{color:#8da6ce!important}.cm-header{color:#ff6400!important}.cm-hr{color:#aeaeae!important}.cm-link{color:blue!important}.cm-error{border-bottom:1px solid red!important}.CodeMirror-activeline-background{background:#27282e!important}.CodeMirror-matchingbracket{color:#fff!important;outline:1px solid grey!important}" + } + ] + }, + "syntax-jupyter": { + "type": "select", + "label": "Jupyter syntax theme", + "name": "syntax-jupyter", + "value": null, + "default": "Twilight", + "options": [ + { + "name": "Twilight", + "label": "Twilight", + "value": "/*! Jupyter: Twilight */#notebook div.output_stderr{background:#420e09!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#141414!important;color:#ccc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {border:#b22518!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#5f5a60!important;font-style:italic!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#cda869!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#141414!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#5f5a60!important;font-style:italic!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#5f5a60!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#5f5a60!important;font-style:italic!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#5f5a60!important;font-style:italic!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {background:#420e09!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {background:#b22518!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:navy!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {background:#253b22!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:purple!important;font-weight:700!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#e9df8f!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#9b703f!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#f9ee98!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#cda869!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#9b859d!important;font-weight:700!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#9b859d!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#7587a6!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#cf6a4c!important;font-weight:700!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#9b703f!important;font-weight:700!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#9b859d!important;font-weight:700!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#cda869!important;font-weight:700!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#7587a6!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#a2f!important;font-weight:700!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#cf6a4c!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#cf6a4c!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#cf6a4c!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#cf6a4c!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#8f9d6a!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#8f9d6a!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#8f9d6a!important;font-style:italic!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#8f9d6a!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#f9ee98!important;font-weight:700!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#8f9d6a!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#daefa3!important;font-weight:700!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#8f9d6a!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#e9c062!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#8f9d6a!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#cf6a4c!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#0aa!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#7587a6!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#7587a6!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#7587a6!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#099!important}" + }, + { + "name": "Base16-Ocean-Dark", + "label": "Base16 Ocean Dark", + "value": "/*! Jupyter: Base16 Ocean Dark */#notebook div.output_stderr{background:#bf616a!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#2b303b!important;color:#eff1f5!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#4f5b66!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#bf616a!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#65737e!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#b48ead!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#d08770!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#d08770!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#eff1f5!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#96b5b4!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#eff1f5!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#a3be8c!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#eff1f5!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#65737e!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#65737e!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#65737e!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#65737e!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#bf616a!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#eff1f5!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#a3be8c!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#65737e!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#96b5b4!important;font-weight:700!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#b48ead!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#b48ead!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#96b5b4!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#b48ead!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#b48ead!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#ebcb8b!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#a3be8c!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#8fa1b3!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#eff1f5!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#ebcb8b!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#bf616a!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#96b5b4!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#eff1f5!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#bf616a!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#8fa1b3!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#eff1f5!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#ebcb8b!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#8fa1b3!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#eff1f5!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#96b5b4!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#bf616a!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#96b5b4!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#d08770!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#d08770!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#d08770!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#d08770!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#a3be8c!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#eff1f5!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#65737e!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#a3be8c!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#d08770!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#a3be8c!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#d08770!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#a3be8c!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#a3be8c!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#a3be8c!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#a3be8c!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#eff1f5!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#bf616a!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#bf616a!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#bf616a!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#d08770!important}" + }, + { + "name": "Dracula-theme", + "label": "Dracula theme", + "value": "/*! Jupyter: Dracula theme */#notebook div.output_stderr{background:#8b080b!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#282a36!important;color:#f8f8f2!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#f8f8f2!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#6272a4!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#f8f8f2!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#ff79c6!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#f8f8f2!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#bd93f9!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#f8f8f2!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#f8f8f2!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#f8f8f2!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#f8f8f2!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#f1fa8c!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#f8f8f2!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#f8f8f2!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#6272a4!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#ff79c6!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#6272a4!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#6272a4!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#8b080b!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#f8f8f2!important;text-decoration:underline!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#f8f8f2!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#f8f8f2!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {background-color:#468410!important;color:#f8f8f2!important;font-weight:700!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {background-color:#32343f!important;color:#3b3a32!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#f8f8f2!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#f8f8f2!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#f8f8f2!important;font-weight:700!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {background-color:#ff79c6!important;color:#f8f8f0!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#ff79c6!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#ff79c6!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#ff79c6!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#ff79c6!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#ff79c6!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#f8f8f2!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#f8f8f2!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#50fa7b!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#f8f8f2!important}.highlight code .nb,#notebook .highlight .nc, body.api .highlight .nc {color:#f8f8f2!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#f8f8f2!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#f8f8f2!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#f8f8f2!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#f8f8f2!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#50fa7b!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#f1fa8c!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#f8f8f2!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#f8f8f2!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#f8f8f2!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#ff79c6!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#8be9fd!important;font-style:italic!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#ff79c6!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#bd93f9!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#bd93f9!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#bd93f9!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#bd93f9!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#f1fa8c!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#f1fa8c!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#f1fa8c!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#f1fa8c!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#f1fa8c!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#f1fa8c!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#f1fa8c!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#f1fa8c!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#f1fa8c!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#f1fa8c!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#f1fa8c!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#f8f8f2!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#8be9fd!important;font-style:italic!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#8be9fd!important;font-style:italic!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#8be9fd!important;font-style:italic!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#bd93f9!important}" + }, + { + "name": "Github-Dark-(Native-mod)-theme", + "label": "Github Dark (Native mod) theme", + "value": "/*! Jupyter: Github Dark (Native mod) theme */#notebook div.output_stderr{background:#a61717!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#111!important;color:#d0d0d0!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#404040!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {background-color:#311!important;color:#a61717!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#3677a9!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#d0d0d0!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#ccc!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#ccc!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#d0d0d0!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#cd2828!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#ccc!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#777!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#e9b96e!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#d2691e!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#666!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#d0d0d0!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#3677a9!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#d2691e!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#3677a9!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {background-color:#520000!important;color:#e50808!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#d22323!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#d0d0d0!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#d22323!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#589819!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {color:#ccc!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#aaa!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#d0d0d0!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#fff!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#d22323!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#6ab825!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#6ab825!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#6ab825!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#6ab825!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#6ab825!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#6ab825!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#d0d0d0!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#bbb!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#24909d!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#447fcf!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#4ca!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:orange!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#d0d0d0!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#bbb!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#098!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#d0d0d0!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#447fcf!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#d0d0d0!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#d0d0d0!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#6ab825!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#4ca!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#6ab825!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#cd2828!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#cd2828!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#cd2828!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#cd2828!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#d2691e!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#d2691e!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#d2691e!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#d2691e!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#d2691e!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#d2691e!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#d2691e!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:orange!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#cd2828!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#d2691e!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#d2691e!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#24909d!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#4ca!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#4ca!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#4ca!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#cd2828!important}" + }, + { + "name": "Idle-Fingers", + "label": "Idle Fingers", + "value": "/*! Jupyter: Idle Fingers */#notebook div.output_stderr{background:#cc7833!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#323232!important;color:#fff!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#fff!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#bc9458!important;font-style:italic!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#fff!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#fff!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#cc7833!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#fff!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#6c99bb!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#fff!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#fff!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#fff!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#a5c261!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#fff!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#fff!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#bc9458!important;font-style:italic!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#cc7833!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#bc9458!important;font-style:italic!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#bc9458!important;font-style:italic!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#fff!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#fff!important;text-decoration:underline!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#fff!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#fff!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {background:#353637!important;color:#404040!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#fff!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#fff!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#fff!important;font-weight:700!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {background:red!important;color:#fff!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#cc7833!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#cc7833!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#cc7833!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#cc7833!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#cc7833!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#ffc66d!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#fff!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#ffc66d!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#fff!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#fff!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#6c99bb!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#fff!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#fff!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#fff!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#ffc66d!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#a5c261!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#fff!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#fff!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#fff!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#cc7833!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#fff!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#cc7833!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#6c99bb!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#6c99bb!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#6c99bb!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#6c99bb!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#a5c261!important}.highlight code .sb,#notebook .highlight .sc, body.api .highlight .sc {color:#a5c261!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#a5c261!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#a5c261!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#a5c261!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#a5c261!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#a5c261!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#a5c261!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#a5c261!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#a5c261!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#a5c261!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#fff!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#fff!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#fff!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#fff!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#6c99bb!important}" + }, + { + "name": "Monokai---Spacegray-Eighties", + "label": "Monokai - Spacegray Eighties", + "value": "/*! Jupyter: Monokai - Spacegray Eighties */#notebook div.output_stderr{background:#960050!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background-color:#1c1c1c!important;color:#f8f8f8!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#2c2c2c!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {background-color:#1e0010!important;color:#960050!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:grey!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#f8f8f8!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#66d9ef!important;font-style:italic!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#ae81ff!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#ae81ff!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#f8f8f8!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#f92672!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#f8f8f8!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#e6db74!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#f8f8f8!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:grey!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:grey!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:grey!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:grey!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#ae81ff!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#66d9ef!important;font-style:italic!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#f92672!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#ae81ff!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#ae81ff!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#66d9ef!important;font-style:italic!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e6db74!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#a6e22e!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#f8f8f8!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#a6e22e!important;font-style:italic!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#ae81ff!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#a6e22e!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#f92672!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#a6e22e!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#a6e22e!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#f8f8f8!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#f8f8f8!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#f8f8f8!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#f92672!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#f92672!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#f92672!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#f92672!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#ae81ff!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#ae81ff!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#ae81ff!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#ae81ff!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#e6db74!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#e6db74!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#e6db74!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#e6db74!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#ae81ff!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#e6db74!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#e6db74!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#e6db74!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#e6db74!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#e6db74!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#e6db74!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#f92672!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#f92672!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#f92672!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#f92672!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#ae81ff!important}" + }, + { + "name": "Monokai", + "label": "Monokai", + "value": "/*! Jupyter: Monokai */#notebook div.output_stderr{background:#960050!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#272822!important;color:#f8f8f2!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#49483e!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {background-color:#1e0010!important;color:#960050!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#75715e!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#f8f8f2!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#66d9ef!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#ae81ff!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#ae81ff!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#f8f8f2!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#f92672!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#f8f8f2!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#e6db74!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#f8f8f2!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#75715e!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#75715e!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#75715e!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#75715e!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#66d9ef!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#66d9ef!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#f92672!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#66d9ef!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#66d9ef!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#66d9ef!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e6db74!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#a6e22e!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#f8f8f2!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#a6e22e!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#66d9ef!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#a6e22e!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#f8f8f2!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#a6e22e!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#a6e22e!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#f8f8f2!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#f8f8f2!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#a6e22e!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#f8f8f2!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#f92672!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#f8f8f2!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#f92672!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#ae81ff!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#ae81ff!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#ae81ff!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#ae81ff!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#e6db74!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#e6db74!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#e6db74!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#e6db74!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#ae81ff!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#e6db74!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#e6db74!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#e6db74!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#e6db74!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#e6db74!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#e6db74!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#f8f8f2!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#f8f8f2!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#f8f8f2!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#f8f8f2!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#ae81ff!important}" + }, + { + "name": "Obsidian", + "label": "Obsidian", + "value": "/*! Jupyter: Obsidian */#notebook div.output_stderr{background:#da4236!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background-color:#293134!important;color:#e0e2e4!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {background-color:#da4236!important;color:#e0e2e4!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#66747b!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#e0e2e4!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#e0e2e4!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#93c763!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#e0e2e4!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#ec7600!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#e0e2e4!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#93c763!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#e0e2e4!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#ec7600!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#96989a!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#e0e2e4!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#66747b!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#93c763!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#66747b!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#93c763!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#ec7600!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#e0e2e4!important;font-style:italic!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#da4236!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#66747b!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#93c763!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {color:#e0e2e4!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#e0e2e4!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#e0e2e4!important;font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#66747b!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#e0e2e4!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#96989a!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#678cb1!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#93c763!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#93c763!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#678cb1!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#da4236!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e0e2e4!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#e0e2e4!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#93c763!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#678cb1!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#96989a!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#678cb1!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#96989a!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#96989a!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#678cb1!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#e0e2e4!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#e0e2e4!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#e0e2e4!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#e0e2e4!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#678cb1!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#678cb1!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#93c763!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#ec7600!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#ec7600!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#ec7600!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#ec7600!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#66747b!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#ec7600!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#e0e2e4!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#ec7600!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#96989a!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#e0e2e4!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#ec7600!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#ec7600!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#d39745!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#ec7600!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#ec7600!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#678cb1!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#678cb1!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#678cb1!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#678cb1!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#ec7600!important}" + }, + { + "name": "Pastel-on-Dark", + "label": "Pastel on Dark", + "value": "/*! Jupyter: Pastel on Dark */#notebook div.output_stderr{background:#600!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#2b2b2b!important;color:#e6e1dc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background:#ffc!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#e6e1dc!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#555!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#e6e1dc!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#4d74d0!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#e6e1dc!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#a5c261!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#e6e1dc!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#e6e1dc!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#e6e1dc!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#e6e1dc!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#ad9361!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#e6e1dc!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#e6e1dc!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#555!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#e6e1dc!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#555!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#555!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {background:#600!important;color:#e6e1dc!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#e6e1dc!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {background:#900!important;color:#ffc66d!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {background:#519f50!important;color:#e6e1dc!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {color:#e6e1dc!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#e6e1dc!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#e6e1dc!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#fff!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#e6e1dc!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#4d74d0!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#4d74d0!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#4d74d0!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#4d74d0!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#4d74d0!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#c1c144!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e6e1dc!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#6782d3!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#e6e1dc!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#e6e1dc!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#a1a1ff!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#e6e1dc!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#47b8d6!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#e6e1dc!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#6782d3!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#e6e1dc!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#e6e1dc!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#e6e1dc!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#e6e1dc!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#4d74d0!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#c1c144!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#e6e1dc!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#a5c261!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#a5c261!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#a5c261!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#a5c261!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#ad9361!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#ad9361!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#ad9361!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#ad9361!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#ad9361!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#ad9361!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#ad9361!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#ad9361!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#ad9361!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#ad9361!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#ad9361!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#e6e1dc!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#c1c144!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#c1c144!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#c1c144!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#a5c261!important}" + }, + { + "name": "Railscasts", + "label": "Railscasts", + "value": "/*! Jupyter: Railscasts */#notebook div.output_stderr{background:#600!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#2b2b2b!important;color:#e6e1dc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#ffc!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#bc9458!important;font-style:italic!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#e6e1dc!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#e6e1dc!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#e6e1dc!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#cc7833!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#e6e1dc!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#a5c261!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#e6e1dc!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#e6e1dc!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#e6e1dc!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#a5c261!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#e6e1dc!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#e6e1dc!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#bc9458!important;font-style:italic!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#cc7833!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#bc9458!important;font-style:italic!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#bc9458!important;font-style:italic!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {background-color:#600!important;color:#e6e1dc!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#e6e1dc!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {background-color:#900!important;color:#fff!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {background-color:#144212!important;color:#e6e1dc!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {color:#e6e1dc!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#e6e1dc!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#e6e1dc!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#fff!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#e6e1dc!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#cc7833!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#cc7833!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#cc7833!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#cc7833!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#cc7833!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#da4939!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#e6e1dc!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#ffc66d!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#e6e1dc!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#e6e1dc!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#6d9cbe!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#e6e1dc!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#e6e1dc!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#e6e1dc!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#ffc66d!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#e6e1dc!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#e6e1dc!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#e6e1dc!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#e6e1dc!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#cc7833!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#d0d0ff!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#e6e1dc!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#a5c261!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#a5c261!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#a5c261!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#a5c261!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#a5c261!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#a5c261!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#a5c261!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#a5c261!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#a5c261!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#a5c261!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#a5c261!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#a5c261!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#a5c261!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#a5c261!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#a5c261!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#e6e1dc!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#d0d0ff!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#d0d0ff!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#d0d0ff!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#a5c261!important}" + }, + { + "name": "Solarized-Dark", + "label": "Solarized Dark", + "value": "/*! Jupyter: Solarized Dark */#notebook div.output_stderr{background:#dc322f!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background-color:#002b36!important;color:#839496!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#49483e!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {background-color:#fdf6e3!important;color:#dc322f!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#586e75!important}.highlight code .g,#notebook .highlight .g, body.api .highlight .g {color:#839496!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#839496!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#859900!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#839496!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#2aa198!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#839496!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#859900!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#839496!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#2aa198!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#839496!important}.highlight code .x,#notebook .highlight .x, body.api .highlight .x {color:#cb4b16!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#586e75!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#859900!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#586e75!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#859900!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#2aa198!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {color:#839496!important;font-style:italic!important}.highlight code .gr,#notebook .highlight .gr, body.api .highlight .gr {color:#dc322f!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#cb4b16!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#859900!important}.highlight code .go,#notebook .highlight .go, body.api .highlight .go {color:#839496!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#839496!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {color:#839496!important;font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#cb4b16!important}.highlight code .gt,#notebook .highlight .gt, body.api .highlight .gt {color:#839496!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#cb4b16!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#268bd2!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#859900!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#859900!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#268bd2!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#dc322f!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#839496!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#839496!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#b58900!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#268bd2!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#cb4b16!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#268bd2!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#cb4b16!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#cb4b16!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#268bd2!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#839496!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#839496!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#839496!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#839496!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#268bd2!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#268bd2!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#859900!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#2aa198!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#2aa198!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#2aa198!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#2aa198!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#586e75!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#2aa198!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#839496!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#2aa198!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#cb4b16!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#839496!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#2aa198!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#2aa198!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#dc322f!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#2aa198!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#2aa198!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#268bd2!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#268bd2!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#268bd2!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#268bd2!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#2aa198!important}" + }, + { + "name": "Tomorrow-Night-Blue", + "label": "Tomorrow Night Blue", + "value": "/*! Jupyter: Tomorrow Night Blue */#notebook div.output_stderr{background:#002451!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#002451!important;color:#fff!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#003f8e!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#ff9da4!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#7285b7!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#fff!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#ebbbff!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#ffc58f!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#ffc58f!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#fff!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#9ff!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#fff!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#d1f1a9!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#fff!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#7285b7!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#7285b7!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#7285b7!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#7285b7!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#ff9da4!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#fff!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#d1f1a9!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#7285b7!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#9ff!important;font-weight:700!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#ebbbff!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#ebbbff!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#9ff!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#ebbbff!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#ebbbff!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#ffeead!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#d1f1a9!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#bbdaff!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#fff!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#ffeead!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#ff9da4!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#9ff!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#fff!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#ff9da4!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#bbdaff!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#fff!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#ffeead!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#bbdaff!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#fff!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#9ff!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#ff9da4!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#9ff!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#ffc58f!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#ffc58f!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#ffc58f!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#ffc58f!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#d1f1a9!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#fff!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#7285b7!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#d1f1a9!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#ffc58f!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#d1f1a9!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#ffc58f!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#d1f1a9!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#d1f1a9!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#d1f1a9!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#d1f1a9!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#fff!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#ff9da4!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#ff9da4!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#ff9da4!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#ffc58f!important}" + }, + { + "name": "Tomorrow-Night-Bright", + "label": "Tomorrow Night Bright", + "value": "/*! Jupyter: Tomorrow Night Bright */#notebook div.output_stderr{background:#d54e53!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#000!important;color:#eaeaea!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#424242!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#d54e53!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#969896!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#eaeaea!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#c397d8!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#e78c45!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#e78c45!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#eaeaea!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#70c0b1!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#eaeaea!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#b9ca4a!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#969896!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#969896!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#969896!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#969896!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#d54e53!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#eaeaea!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#b9ca4a!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#969896!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#70c0b1!important;font-weight:700!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#c397d8!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#c397d8!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#70c0b1!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#c397d8!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#c397d8!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#e7c547!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#b9ca4a!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#7aa6da!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#eaeaea!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#e7c547!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#d54e53!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#70c0b1!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#eaeaea!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#d54e53!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#7aa6da!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#eaeaea!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#e7c547!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#7aa6da!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#eaeaea!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#70c0b1!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#d54e53!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#70c0b1!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#eaeaea!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#e78c45!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#e78c45!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#e78c45!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#e78c45!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#b9ca4a!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#eaeaea!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#969896!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#b9ca4a!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#e78c45!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#b9ca4a!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#e78c45!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#b9ca4a!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#b9ca4a!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#b9ca4a!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#b9ca4a!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#eaeaea!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#d54e53!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#d54e53!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#d54e53!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#e78c45!important}" + }, + { + "name": "Tomorrow-Night-Eighties", + "label": "Tomorrow Night Eighties", + "value": "/*! Jupyter: Tomorrow Night Eighties */#notebook div.output_stderr{background:#f2777a!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#2d2d2d!important;color:#ccc!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#515151!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#f2777a!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#999!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#ccc!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#c9c!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#f99157!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#f99157!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#ccc!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#6cc!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#ccc!important}.highlight code .s,#notebook .highlight .s, body.api .highlight .s {color:#9c9!important}.highlight code .w,#notebook .highlight .w, body.api .highlight .w {color:#ccc!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#999!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#999!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#999!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#999!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#f2777a!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#ccc!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#9c9!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#999!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#6cc!important;font-weight:700!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#c9c!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#c9c!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#6cc!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#c9c!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#c9c!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#fc6!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#9c9!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#69c!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#ccc!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#fc6!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#f2777a!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#6cc!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#ccc!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#f2777a!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#69c!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#ccc!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#fc6!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#69c!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#ccc!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#6cc!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#f2777a!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#6cc!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#f99157!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#f99157!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#f99157!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#f99157!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#9c9!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#ccc!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#999!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#9c9!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#f99157!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#9c9!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#f99157!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#9c9!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#9c9!important}.highlight code .s1,#notebook .highlight .s1, body.api .highlight .s1 {color:#9c9!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#9c9!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#ccc!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#f2777a!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#f2777a!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#f2777a!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#f99157!important}" + }, + { + "name": "Tomorrow-Night", + "label": "Tomorrow Night", + "value": "/*! Jupyter: Tomorrow Night */#notebook div.output_stderr{background:#c66!important}#notebook .input_area:not(.highlight),#notebook .highlight, body.api .highlight, #notebook .highlight pre, body.api .highlight pre, #notebook .highlight table, body.api .highlight table, body.api pre{background:#1d1f21!important;color:#c5c8c6!important}.highlight code .hll,#notebook .highlight .hll, body.api .highlight .hll {background-color:#373b41!important}.highlight code .err,#notebook .highlight .err, body.api .highlight .err {color:#c66!important}.highlight code .c,#notebook .highlight .c, body.api .highlight .c {color:#969896!important}.highlight code .h,#notebook .highlight .h, body.api .highlight .h {color:#c5c8c6!important}.highlight code .k,#notebook .highlight .k, body.api .highlight .k {color:#b294bb!important}.highlight code .l,#notebook .highlight .l, body.api .highlight .l {color:#de935f!important}.highlight code .m,#notebook .highlight .m, body.api .highlight .m {color:#de935f!important}.highlight code .n,#notebook .highlight .n, body.api .highlight .n {color:#c5c8c6!important}.highlight code .o,#notebook .highlight .o, body.api .highlight .o {color:#8abeb7!important}.highlight code .p,#notebook .highlight .p, body.api .highlight .p {color:#c5c8c6!important}.highlight code .cm,#notebook .highlight .cm, body.api .highlight .cm {color:#969896!important}.highlight code .cp,#notebook .highlight .cp, body.api .highlight .cp {color:#969896!important}.highlight code .c1,#notebook .highlight .c1, body.api .highlight .c1 {color:#969896!important}.highlight code .cs,#notebook .highlight .cs, body.api .highlight .cs {color:#969896!important}.highlight code .gd,#notebook .highlight .gd, body.api .highlight .gd {color:#c66!important}.highlight code .ge,#notebook .highlight .ge, body.api .highlight .ge {font-style:italic!important}.highlight code .gh,#notebook .highlight .gh, body.api .highlight .gh {color:#c5c8c6!important;font-weight:700!important}.highlight code .gi,#notebook .highlight .gi, body.api .highlight .gi {color:#b5bd68!important}.highlight code .gp,#notebook .highlight .gp, body.api .highlight .gp {color:#969896!important;font-weight:700!important}.highlight code .gs,#notebook .highlight .gs, body.api .highlight .gs {font-weight:700!important}.highlight code .gu,#notebook .highlight .gu, body.api .highlight .gu {color:#8abeb7!important;font-weight:700!important}.highlight code .kc,#notebook .highlight .kc, body.api .highlight .kc {color:#b294bb!important}.highlight code .kd,#notebook .highlight .kd, body.api .highlight .kd {color:#b294bb!important}.highlight code .kn,#notebook .highlight .kn, body.api .highlight .kn {color:#8abeb7!important}.highlight code .kp,#notebook .highlight .kp, body.api .highlight .kp {color:#b294bb!important}.highlight code .kr,#notebook .highlight .kr, body.api .highlight .kr {color:#b294bb!important}.highlight code .kt,#notebook .highlight .kt, body.api .highlight .kt {color:#f0c674!important}.highlight code .ld,#notebook .highlight .ld, body.api .highlight .ld {color:#b5bd68!important}.highlight code .na,#notebook .highlight .na, body.api .highlight .na {color:#81a2be!important}.highlight code .nb,#notebook .highlight .nb, body.api .highlight .nb {color:#c5c8c6!important}.highlight code .nc,#notebook .highlight .nc, body.api .highlight .nc {color:#f0c674!important}.highlight code .no,#notebook .highlight .no, body.api .highlight .no {color:#c66!important}.highlight code .nd,#notebook .highlight .nd, body.api .highlight .nd {color:#8abeb7!important}.highlight code .ni,#notebook .highlight .ni, body.api .highlight .ni {color:#c5c8c6!important}.highlight code .ne,#notebook .highlight .ne, body.api .highlight .ne {color:#c66!important}.highlight code .nf,#notebook .highlight .nf, body.api .highlight .nf {color:#81a2be!important}.highlight code .nl,#notebook .highlight .nl, body.api .highlight .nl {color:#c5c8c6!important}.highlight code .nn,#notebook .highlight .nn, body.api .highlight .nn {color:#f0c674!important}.highlight code .nx,#notebook .highlight .nx, body.api .highlight .nx {color:#81a2be!important}.highlight code .py,#notebook .highlight .py, body.api .highlight .py {color:#c5c8c6!important}.highlight code .nt,#notebook .highlight .nt, body.api .highlight .nt {color:#8abeb7!important}.highlight code .nv,#notebook .highlight .nv, body.api .highlight .nv {color:#c66!important}.highlight code .ow,#notebook .highlight .ow, body.api .highlight .ow {color:#8abeb7!important}.highlight code .mf,#notebook .highlight .mf, body.api .highlight .mf {color:#de935f!important}.highlight code .mh,#notebook .highlight .mh, body.api .highlight .mh {color:#de935f!important}.highlight code .mi,#notebook .highlight .mi, body.api .highlight .mi {color:#de935f!important}.highlight code .mo,#notebook .highlight .mo, body.api .highlight .mo {color:#de935f!important}.highlight code .sb,#notebook .highlight .sb, body.api .highlight .sb {color:#b5bd68!important}.highlight code .sc,#notebook .highlight .sc, body.api .highlight .sc {color:#c5c8c6!important}.highlight code .sd,#notebook .highlight .sd, body.api .highlight .sd {color:#969896!important}.highlight code .s2,#notebook .highlight .s2, body.api .highlight .s2 {color:#b5bd68!important}.highlight code .se,#notebook .highlight .se, body.api .highlight .se {color:#de935f!important}.highlight code .sh,#notebook .highlight .sh, body.api .highlight .sh {color:#b5bd68!important}.highlight code .si,#notebook .highlight .si, body.api .highlight .si {color:#de935f!important}.highlight code .sx,#notebook .highlight .sx, body.api .highlight .sx {color:#b5bd68!important}.highlight code .sr,#notebook .highlight .sr, body.api .highlight .sr {color:#b5bd68!important}.highlight code .s2,#notebook .highlight .s1, body.api .highlight .s1 {color:#b5bd68!important}.highlight code .ss,#notebook .highlight .ss, body.api .highlight .ss {color:#b5bd68!important}.highlight code .bp,#notebook .highlight .bp, body.api .highlight .bp {color:#c5c8c6!important}.highlight code .vc,#notebook .highlight .vc, body.api .highlight .vc {color:#c66!important}.highlight code .vg,#notebook .highlight .vg, body.api .highlight .vg {color:#c66!important}.highlight code .vi,#notebook .highlight .vi, body.api .highlight .vi {color:#c66!important}.highlight code .il,#notebook .highlight .il, body.api .highlight .il {color:#de935f!important}" + } + ] + }, + "tab-size": { + "type": "select", + "label": "Code Tab size", + "name": "tab-size", + "value": null, + "default": "2", + "options": [ + { + "name": "2", + "label": "2", + "value": "pre, .highlight, .diff-table, .tab-size {\n tab-size: 2 !important;\n -moz-tab-size: 2 !important;\n }" + }, + { + "name": "4", + "label": "4", + "value": "pre, .highlight, .diff-table, .tab-size {\n tab-size: 4 !important;\n -moz-tab-size: 4 !important;\n }" + }, + { + "name": "8", + "label": "8", + "value": "pre, .highlight, .diff-table, .tab-size {\n tab-size: 8 !important;\n -moz-tab-size: 8 !important;\n }" + } + ] + } + }, + "preprocessor": "uso" + }, + "author": "StylishThemes", + "name": "GitHub Dark", + "originalDigest": "a31da7d3020489aae54a44424f6f4640d9658008", + "id": 24, + "updateDate": 1649869707529, + "_id": "d0b3d033-8bd1-44e1-9b21-9e936e44c4e7", + "_rev": 1649869707601, + "etag": "W/\"6256c611-d19d9\"", + "_usw": {} + }, + { + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1548344858060, + "name": "Fixes", + "sections": [ + { + "code": "#wrapper-shadow {\n width: 90%;\n}\n#wrapper-content {\n width: 100%;\n}\n.column-wide {\n width: 800px;\n}", + "domains": [ + "spiegel.de" + ] + } + ], + "id": 25, + "_id": "863489d7-72f9-40f2-a3aa-0b7b203e7789", + "_rev": 1580730543289, + "_usw": {} + }, + { + "updateUrl": "https://raw.githubusercontent.com/33kk/uso-archive/flomaster/data/usercss/167450.user.css", + "url": "https://33kk.github.io/uso-archive/?style=167450", + "installDate": 1565033218134, + "sections": [ + { + "code": "#like-bar.ytd-sentiment-bar-renderer { background: #009900!important; } /* Like bar */\n#container.ytd-sentiment-bar-renderer { background: #ff2929!important; } /* Dislike bar */\nytd-menu-renderer ytd-toggle-button-renderer.style-default-active[is-icon-button]:nth-of-type(1) { color: #009900; } /* Liked button */\nytd-menu-renderer ytd-toggle-button-renderer.style-default-active[is-icon-button]:nth-of-type(2) { color: #ff2929; } /* Disliked button */", + "start": 473, + "domains": [ + "www.youtube.com", + "youtube.com" + ] + } + ], + "name": "Colourful YouTube Ratings", + "originalDigest": "f2d43c8b4dc5591f96857f03169898e83fe29455", + "id": 26, + "_id": "45a90ce2-624b-40d2-9534-1ccabd967413", + "_rev": 1615723396510, + "etag": "W/\"6e48bd661699d5cb4a310ab2832f8f0a765c3d87ce92a0405e11989f3f1d142d\"", + "sourceCode": "/* ==UserStyle==\n@name Colourful YouTube Ratings\n@namespace USO Archive\n@author InvoxiPlayGames\n@description `Gives colour to the YouTube rating bar and like/dislike buttons.`\n@version 20190104.9.5\n@license NO-REDISTRIBUTION\n@preprocessor uso\n@advanced color likecolour \"Like Colour\" #009900\n@advanced color dislikecolour \"Dislike Colour\" #FF2929\n\n==/UserStyle== */\n@-moz-document domain(\"www.youtube.com\"), domain(\"youtube.com\") {\n#like-bar.ytd-sentiment-bar-renderer { background: /*[[likecolour]]*/!important; } /* Like bar */\n#container.ytd-sentiment-bar-renderer { background: /*[[dislikecolour]]*/!important; } /* Dislike bar */\nytd-menu-renderer ytd-toggle-button-renderer.style-default-active[is-icon-button]:nth-of-type(1) { color: /*[[likecolour]]*/; } /* Liked button */\nytd-menu-renderer ytd-toggle-button-renderer.style-default-active[is-icon-button]:nth-of-type(2) { color: /*[[dislikecolour]]*/; } /* Disliked button */\n}", + "usercssData": { + "name": "Colourful YouTube Ratings", + "namespace": "USO Archive", + "author": "InvoxiPlayGames", + "description": "Gives colour to the YouTube rating bar and like/dislike buttons.", + "version": "20190104.9.5", + "license": "NO-REDISTRIBUTION", + "preprocessor": "uso", + "vars": { + "likecolour": { + "type": "color", + "label": "Like Colour", + "name": "likecolour", + "value": "#009900", + "default": "rgb(0, 153, 0)", + "options": null + }, + "dislikecolour": { + "type": "color", + "label": "Dislike Colour", + "name": "dislikecolour", + "value": "#FF2929", + "default": "rgb(255, 41, 41)", + "options": null + } + } + }, + "author": "InvoxiPlayGames", + "description": "Gives colour to the YouTube rating bar and like/dislike buttons.", + "updateDate": 1615723396509, + "_usw": {} + }, + { + "updateUrl": null, + "url": null, + "installDate": 1595356944329, + "name": "YouTube Like/Dislike Bar Colored", + "sections": [ + { + "code": "#like-bar {\n background: #009900 !important;\n}\n\n#container.ytd-sentiment-bar-renderer {\n background: #FF2929;\n}" + } + ], + "updateDate": 1595356981175, + "_id": "093c85f0-f960-453a-a37a-c4a12bd01092", + "_rev": 1649516487036, + "id": 30, + "_usw": {} + }, + { + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1596207515029, + "name": "gelbooru.com no blur", + "sections": [ + { + "code": "#image {\n filter: none !important;\n}", + "domains": [ + "gelbooru.com" + ] + } + ], + "updateDate": 1596207552735, + "_id": "f8e0ed65-ee16-413e-97b9-61cab6e544cf", + "_rev": 1596207552735, + "id": 31, + "_usw": {} + }, + { + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1596382549154, + "name": "Show hidden comment on Sankaku", + "sections": [ + { + "code": ".comment .comment-body.hidden > * {\n display: block;\n}\n\n.cq-plachld {\n display: none !important;\n}", + "domains": [ + "www.sankakucomplex.com" + ] + } + ], + "updateDate": 1596382549154, + "_id": "5260fcda-6762-4a54-8901-33ff79714477", + "_rev": 1596382549154, + "id": 32, + "_usw": {} + }, + { + "enabled": true, + "updateUrl": null, + "md5Url": null, + "url": null, + "originalMd5": null, + "installDate": 1602853551346, + "name": "MyAnimeList Tweaks", + "sections": [ + { + "code": ".user-favorites-outer.js-truncate-outer {\n max-height: 730px; padding-bottom: 60px;\n}\n\n.btn-truncate.js-btn-truncate {\n display: none !important;\n}\n\n.btn-profile-submit.fl-r {\n display: none !important;\n}\n\n.user-profile .user-button .btn-profile-submit {\n width: 220px;\n font-size: 20px;\n}\n\n.stats.manga {\n display: none !important;\n}\n\n.updates.manga {\n display: none !important;\n}\n\n.user-comments {\n display: none !important;\n}\n", + "domains": [ + "myanimelist.net" + ] + } + ], + "updateDate": 1603551750976, + "_id": "1c9a4d6a-ff2e-409c-804b-16cc4ba51f2e", + "_rev": 1603551750976, + "id": 33, + "_usw": {} + }, + { + "enabled": true, + "updateUrl": "https://greasyfork.org/scripts/424062-plex-custom-background/code/Plex%20Custom%20Background.user.css", + "url": "https://greasyfork.org/scripts/424062", + "installDate": 1616864371369, + "sections": [ + { + "code": ":root {\n --bg-custom: url(https://img.ponywave.de/images/2020/11/01/Shimakaze-Wallpaper.jpg);\n --opacity: 0.2;\n}\nbody {\n background-color: #000000de;\n }\n\n #plex > div[class|=\"FullPageBackground\"] {\n opacity: var(--opacity);\n transition: opacity .5s;\n }\n \n #plex > div[class|=\"FullPageBackground\"] > div canvas {\n display: none;\n }\n\n #plex > div[class|=\"FullPageBackground\"] > div > div {\n background-image: var(--bg-custom) !important;\n background-size: cover !important;\n background-repeat: no-repeat;\n }", + "start": 477, + "domains": [ + "app.plex.tv" + ] + } + ], + "sourceCode": "/* ==UserStyle==\n@name Plex Custom Background\n@namespace github.com/Brawl345\n@version 1.0.3\n@description Custom background image for Plex Web\n@author Brawl (https://github.com/Brawl345)\n@license Unlicense\n@preprocessor default\n\n@var text bg-custom \"Background URL (include it with apostrophes inside url()):\" \"url()\"\n@var range opacity \"Opacity (default 0.2);\" [0.2, 0, 1, 0.01]\n==/UserStyle== */\n@-moz-document domain(\"app.plex.tv\") {\n body {\n background-color: #000000de;\n }\n\n #plex > div[class|=\"FullPageBackground\"] {\n opacity: var(--opacity);\n transition: opacity .5s;\n }\n \n #plex > div[class|=\"FullPageBackground\"] > div canvas {\n display: none;\n }\n\n #plex > div[class|=\"FullPageBackground\"] > div > div {\n background-image: var(--bg-custom) !important;\n background-size: cover !important;\n background-repeat: no-repeat;\n }\n}", + "usercssData": { + "name": "Plex Custom Background", + "namespace": "github.com/Brawl345", + "version": "1.0.3", + "description": "Custom background image for Plex Web", + "author": "Brawl (https://github.com/Brawl345)", + "license": "Unlicense", + "preprocessor": "default", + "vars": { + "bg-custom": { + "type": "text", + "label": "Background URL (include it with apostrophes inside url()):", + "name": "bg-custom", + "value": "url(https://img.ponywave.de/images/2020/11/01/Shimakaze-Wallpaper.jpg)", + "default": "url()", + "options": null + }, + "opacity": { + "type": "range", + "label": "Opacity (default 0.2);", + "name": "opacity", + "value": 0.2, + "default": 0.2, + "options": null, + "min": 0, + "max": 1, + "step": 0.01, + "units": null + } + } + }, + "author": "Brawl (https://github.com/Brawl345)", + "description": "Custom background image for Plex Web", + "name": "Plex Custom Background", + "installationUrl": "https://greasyfork.org/scripts/424062", + "originalDigest": "330749dfa7c0846e267a42a354447a9b9e77c3b3", + "_id": "46f2b4d3-f874-43ae-9609-ae7b0f550557", + "_rev": 1642708449432, + "id": 34, + "etag": "W/\"3bfff4c7c141e816817270a83619d4f5\"", + "updateDate": 1642708401997, + "_usw": {} + }, + { + "updateUrl": "https://git.ponywave.de/Akamaru/Linkwarner/raw/branch/master/linkwarner.user.css", + "url": "https://git.ponywave.de/Akamaru/Linkwarner", + "installDate": 1637684896775, + "sections": [ + { + "code": "/*Positive Links*/\n\na[href*=\"foldr.us/\"]:after {\n content: \" (foldr.us)\";\n}\na[href*=\"filecrypt.cc/\"]:after {\n content: \" (Filecrypt.cc)\";\n}\na[href*=\"download.serienjunkies.org/\"]:after {\n content: \" (Serienjunkies.org)\";\n}\na[href*=\"uploaded.net/\"]:after {\n content: \" (Uploaded.net)\";\n}\na[href*=\"ul.to/\"]:after {\n content: \" (Uploaded.net)\";\n}\na[href*=\"uploadboy.com/\"]:after {\n content: \" (UploadBoy.com)\";\n}\na[href*=\"1fichier.com/\"]:after {\n content: \" (1fichier.com)\";\n}\na[href*=\"mega.co.nz/\"]:after {\n content: \" (MEGA.co.nz)\";\n}\na[href*=\"mega.nz/\"]:after {\n content: \" (MEGA.nz)\";\n}\na[href*=\"zippyshare.com/\"]:after {\n content: \" (Zippyshare.com)\";\n}\na[href*=\"mediafire.com/\"]:after {\n content: \" (Mediafire.com)\";\n}\na[href*=\"file-upload.net/\"]:after {\n content: \" (File-Upload.net)\";\n}\na[href*=\"dailyuploads.net/\"]:after {\n content: \" (DailyUploads.net)\";\n}\na[href*=\"turbobit.net/\"]:after {\n content: \" (Turbobit.net)\";\n}\na[href*=\"filepup.net/\"]:after {\n content: \" (FilePup.net)\";\n}\na[href*=\"multiup.org/\"]:after {\n content: \" (MultiUp.org)\";\n}\na[href*=\"jheberg.net/\"]:after {\n content: \" (Jheberg.net)\";\n}\na[href*=\"hitfile.net/\"]:after {\n content: \" (hitFile.net)\";\n}\na[href*=\"oboom.com/\"]:after {\n content: \" (Oboom.com)\";\n}\na[href*=\"linky.club/\"]:after {\n content: \" (Linky.Club)\";\n}\na[href*=\"yadi.sk/\"]:after {\n content: \" (Yandex Disk)\";\n}\na[href*=\"uptobox.com/\"]:after {\n content: \" (UpToBox.com)\";\n}\na[href*=\"dropapk.to/\"]:after {\n content: \" (Drop APK)\";\n}\n\n/*Down Links*/\n\na[href*=\"boerse.to/posts/11816261/\"]:after {\n content: \" [Down!]\";\n}\na[href*=\"boerse.to/posts/12556308/\"]:after {\n content: \" [Down!]\";\n}\na[href*=\"ncrypt.in/\"]:after {\n content: \" [Down! (nCrypt.in)]\";\n}\na[href*=\"cryptor.to/\"]:after {\n content: \" [Down! (Cryptor.to)]\";\n}\na[href*=\"rapidshare.com/\"]:after {\n content: \" [Down! (RapidShare.com)]\";\n}\na[href*=\"streamcloud.eu/\"]:after {\n content: \" [Down! (StreamCloud.eu)]\";\n}\na[href*=\"share-online.biz/\"]:after {\n content: \" [Down! (Share-Online.biz)]\";\n}\na[href*=\"share-links.biz/\"]:after {\n content: \" [Down! (Share-Links.biz)]\";\n}\na[href*=\"s2l.biz/\"]:after {\n content: \" [Down! (Share-Links.biz)]\";\n}\n\n/*Negative Links*/\n\na[href*=\"adf.ly/\"]:after {\n content: \" [Achtung! AdF.ly!]\";\n}\na[href*=\"j.gs/\"]:after {\n content: \" [Achtung! AdF.ly!]\";\n}\na[href*=\"linkcrypt.ws/\"]:after {\n content: \" [Achtung! LinkCrypt.ws!]\";\n}\na[href*=\"linksave.in/\"]:after {\n content: \" [Achtung! Linksave.in!]\";\n}\na[href*=\"smoozed.com/\"]:after {\n content: \" [Achtung! Smoozed.com!]\";\n}\na[href*=\"crypt.to/\"]:after {\n content: \" [Achtung! Crypt.to!]\";\n}\na[href*=\"relink.to/\"]:after {\n content: \" [Achtung! relink.to]\";\n}\na[href*=\"relink.us/\"]:after {\n content: \" [Achtung! relink.us]\";\n}", + "start": 0 + } + ], + "sourceCode": "/* ==UserStyle==\n@name Linkwarner\n@namespace PonyWave\n@version 0.15\n@homepageURL https://git.ponywave.de/Akamaru/Linkwarner\n@updateURL https://git.ponywave.de/Akamaru/Linkwarner/raw/branch/master/linkwarner.user.css\n@author Akamaru\n==/UserStyle== */\n\n/*Positive Links*/\n\na[href*=\"foldr.us/\"]:after {\n content: \" (foldr.us)\";\n}\na[href*=\"filecrypt.cc/\"]:after {\n content: \" (Filecrypt.cc)\";\n}\na[href*=\"download.serienjunkies.org/\"]:after {\n content: \" (Serienjunkies.org)\";\n}\na[href*=\"uploaded.net/\"]:after {\n content: \" (Uploaded.net)\";\n}\na[href*=\"ul.to/\"]:after {\n content: \" (Uploaded.net)\";\n}\na[href*=\"uploadboy.com/\"]:after {\n content: \" (UploadBoy.com)\";\n}\na[href*=\"1fichier.com/\"]:after {\n content: \" (1fichier.com)\";\n}\na[href*=\"mega.co.nz/\"]:after {\n content: \" (MEGA.co.nz)\";\n}\na[href*=\"mega.nz/\"]:after {\n content: \" (MEGA.nz)\";\n}\na[href*=\"zippyshare.com/\"]:after {\n content: \" (Zippyshare.com)\";\n}\na[href*=\"mediafire.com/\"]:after {\n content: \" (Mediafire.com)\";\n}\na[href*=\"file-upload.net/\"]:after {\n content: \" (File-Upload.net)\";\n}\na[href*=\"dailyuploads.net/\"]:after {\n content: \" (DailyUploads.net)\";\n}\na[href*=\"turbobit.net/\"]:after {\n content: \" (Turbobit.net)\";\n}\na[href*=\"filepup.net/\"]:after {\n content: \" (FilePup.net)\";\n}\na[href*=\"multiup.org/\"]:after {\n content: \" (MultiUp.org)\";\n}\na[href*=\"jheberg.net/\"]:after {\n content: \" (Jheberg.net)\";\n}\na[href*=\"hitfile.net/\"]:after {\n content: \" (hitFile.net)\";\n}\na[href*=\"oboom.com/\"]:after {\n content: \" (Oboom.com)\";\n}\na[href*=\"linky.club/\"]:after {\n content: \" (Linky.Club)\";\n}\na[href*=\"yadi.sk/\"]:after {\n content: \" (Yandex Disk)\";\n}\na[href*=\"uptobox.com/\"]:after {\n content: \" (UpToBox.com)\";\n}\na[href*=\"dropapk.to/\"]:after {\n content: \" (Drop APK)\";\n}\n\n/*Down Links*/\n\na[href*=\"boerse.to/posts/11816261/\"]:after {\n content: \" [Down!]\";\n}\na[href*=\"boerse.to/posts/12556308/\"]:after {\n content: \" [Down!]\";\n}\na[href*=\"ncrypt.in/\"]:after {\n content: \" [Down! (nCrypt.in)]\";\n}\na[href*=\"cryptor.to/\"]:after {\n content: \" [Down! (Cryptor.to)]\";\n}\na[href*=\"rapidshare.com/\"]:after {\n content: \" [Down! (RapidShare.com)]\";\n}\na[href*=\"streamcloud.eu/\"]:after {\n content: \" [Down! (StreamCloud.eu)]\";\n}\na[href*=\"share-online.biz/\"]:after {\n content: \" [Down! (Share-Online.biz)]\";\n}\na[href*=\"share-links.biz/\"]:after {\n content: \" [Down! (Share-Links.biz)]\";\n}\na[href*=\"s2l.biz/\"]:after {\n content: \" [Down! (Share-Links.biz)]\";\n}\n\n/*Negative Links*/\n\na[href*=\"adf.ly/\"]:after {\n content: \" [Achtung! AdF.ly!]\";\n}\na[href*=\"j.gs/\"]:after {\n content: \" [Achtung! AdF.ly!]\";\n}\na[href*=\"linkcrypt.ws/\"]:after {\n content: \" [Achtung! LinkCrypt.ws!]\";\n}\na[href*=\"linksave.in/\"]:after {\n content: \" [Achtung! Linksave.in!]\";\n}\na[href*=\"smoozed.com/\"]:after {\n content: \" [Achtung! Smoozed.com!]\";\n}\na[href*=\"crypt.to/\"]:after {\n content: \" [Achtung! Crypt.to!]\";\n}\na[href*=\"relink.to/\"]:after {\n content: \" [Achtung! relink.to]\";\n}\na[href*=\"relink.us/\"]:after {\n content: \" [Achtung! relink.us]\";\n}", + "usercssData": { + "name": "Linkwarner", + "namespace": "PonyWave", + "version": "0.15", + "homepageURL": "https://git.ponywave.de/Akamaru/Linkwarner", + "updateURL": "https://git.ponywave.de/Akamaru/Linkwarner/raw/branch/master/linkwarner.user.css", + "author": "Akamaru" + }, + "author": "Akamaru", + "name": "Linkwarner", + "originalDigest": "896f664076be3f0d00a90c53d4e96f3a83c8de51", + "_id": "8e653a99-1a36-4129-98bb-66954d9d5f81", + "_rev": 1637684965828, + "id": 35, + "_usw": {}, + "etag": "W/\"373ad1397b2392ad4fc2a67a2f5d2318399ebea9\"" + } +] \ No newline at end of file diff --git a/Tampermonkey/tampermonkey-backup-chrome-2021-03-28T20-08-14-860Z.txt b/Tampermonkey/tampermonkey-backup-chrome-2021-03-28T20-08-14-860Z.txt new file mode 100644 index 0000000..5026bca --- /dev/null +++ b/Tampermonkey/tampermonkey-backup-chrome-2021-03-28T20-08-14-860Z.txt @@ -0,0 +1 @@ +{"created_by":"Tampermonkey","version":"1","scripts":[{"name":"Direct Google","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https?\\:\\/\\/(www|news|maps|docs|cse|encrypted|mail)\\.google\\./"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1479475891050,"data":{}},"enabled":true,"position":1,"file_url":"https://rawgit.com/zanetu/direct_google/beta/direct_google.user.js","uuid":"80f863ba-ec02-4309-8fb5-f33390a9763c","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBEaXJlY3QgR29vZ2xlCi8vIEBuYW1lc3BhY2UgICAgaHR0cDovL3VzZXJzY3JpcHRzLm9yZy91c2Vycy85MjE0MwovLyBAdmVyc2lvbiAgICAgIDMuNwovLyBAZGVzY3JpcHRpb24gIFJlbW92ZXMgR29vZ2xlIHJlZGlyZWN0cyBhbmQgZXhwb3NlcyAiQ2FjaGVkIiBsaW5rcy4gCi8vIEBpbmNsdWRlICAgICAgL15odHRwcz9cOlwvXC8od3d3fG5ld3N8bWFwc3xkb2NzfGNzZXxlbmNyeXB0ZWR8bWFpbClcLmdvb2dsZVwuLwovLyBAYXV0aG9yICAgICAgIHphbmV0dQovLyBAbGljZW5zZSAgICAgIEdQTCB2ZXJzaW9uIDIgb3IgYW55IGxhdGVyIHZlcnNpb247IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dAovLyBAcmVxdWlyZSAgICAgIGh0dHA6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMKLy8gQGdyYW50ICAgICAgICBHTV9hZGRTdHlsZQovLyBAcnVuLWF0ICAgICAgIGRvY3VtZW50LWVuZAovLyA9PS9Vc2VyU2NyaXB0PT0KCnZhciBob3N0bmFtZSA9IGxvY2F0aW9uLmhvc3RuYW1lCnZhciBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lCnZhciBocmVmID0gbG9jYXRpb24uaHJlZgoKU3RyaW5nLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHMpIHsKCXJldHVybiAtMSAhPT0gdGhpcy5pbmRleE9mKHMpCn0KClN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uKHMpIHsKCXJldHVybiB0aGlzLnNsaWNlKDAsIHMubGVuZ3RoKSA9PSBzCn0KCmZ1bmN0aW9uIHN0b3BCdWJibGluZyhldmVudCkgewoJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkKfQoKZnVuY3Rpb24gYmxvY2tMaXN0ZW5lcnMoZWxlbWVudCwgZXZlbnRzKSB7CglpZighKGVsZW1lbnQgaW5zdGFuY2VvZiBFdmVudFRhcmdldCAmJiB0eXBlb2YgZXZlbnRzID09PSAnc3RyaW5nJykpIHsKCQlyZXR1cm4KCX0KCXZhciBldmVudExpc3QgPSBldmVudHMuc3BsaXQoL1xXKy8pIHx8IFtdCglmb3IodmFyIGkgPSAwLCBldmVudDsgZXZlbnQgPSBldmVudExpc3RbaV07IGkrKykgewoJCS8vcmVtb3ZlRXZlbnRMaXN0ZW5lciBpcyBub3QgbmVlZGVkIGFzIGR1cGxpY2F0ZSBsaXN0ZW5lcnMgd291bGQgYmUgZGlzY2FyZGVkCgkJZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBzdG9wQnViYmxpbmcsIHRydWUpCgl9Cn0KCmZ1bmN0aW9uIGhhbmRsZUNoYW5nZSgpIHsKCS8vcmVtb3ZlIHdlYi92aWRlbyBzZWFyY2ggcmVkaXJlY3RzOyBkb2VzIG5vdCByZW1vdmUgcmVkaXJlY3RzIG9mIGFkdmVydGlzZW1lbnQKCSQoJ2Fbb25tb3VzZWRvd25ePSJyZXR1cm4gcnd0KCJdJykucmVtb3ZlQXR0cignb25tb3VzZWRvd24nKQoJLy9yZW1vdmUgd2ViL3ZpZGVvIHNhZmUtYnJvd3NpbmcgcmVkaXJlY3RzCgkkKCdhW2hyZWZePSIvaW50ZXJzdGl0aWFsPyJdJykuZWFjaChmdW5jdGlvbigpIHsKCQl2YXIgbSA9ICQodGhpcykuYXR0cignaHJlZicpLm1hdGNoKC8oPzpcP3xcJil1cmxcPShbXlwmXSspL2kpCgkJaWYobSAmJiBtWzFdKSB7CgkJCXRoaXMuaHJlZiA9IGRlY29kZVVSSUNvbXBvbmVudChtWzFdKQoJCQkvL3dhcm5pbmcgcHJlZml4CgkJCWlmKCEkKHRoaXMpLmluZGV4KCkpIHsKCQkJCSQoJzxzcGFuIHRpdGxlPSJVbnNhZmUiPiYjOTg4ODwvc3Bhbj4nKQoJCQkJLy9uZXdzIHdpdGggcGljdHVyZXMKCQkJCS5jc3MoJ2Zsb2F0JywgJ2xlZnQnKQoJCQkJLmluc2VydEJlZm9yZSh0aGlzKQoJCQl9CgkJfQoJfSkKCS8vcmVtb3ZlIGN1c3RvbSBzZWFyY2ggcmVkaXJlY3RzCgkkKCcuZ3NjLXJlc3VsdHMgYVtocmVmXVtkYXRhLWN0dXJsXScpLmVhY2goZnVuY3Rpb24oKSB7CgkJYmxvY2tMaXN0ZW5lcnModGhpcywgJ21vdXNlZG93bicpCgl9KQoJLy9yZW1vdmUgaW1hZ2Ugc2VhcmNoIHJlZGlyZWN0cwoJJCgnYScpLmZpbHRlcignW2NsYXNzXj0iaXJjXyJdLCBbY2xhc3MqPSIgaXJjXyJdLCBbaWRePSJpcmNfIl0nKS5lYWNoKGZ1bmN0aW9uKCkgewoJCWJsb2NrTGlzdGVuZXJzKHRoaXMsICdtb3VzZWRvd24nKQoJfSkKCS8vcmVtb3ZlIHNvbWUgbmV3cyBzZWFyY2ggcmVkaXJlY3RzOyBkb2VzIG5vdCByZW1vdmUgcmVkaXJlY3RzIG9mIG5vbi1uZXdzCglpZihocmVmLmNvbnRhaW5zKCd0Ym09bndzJykgfHwgaG9zdG5hbWUuc3RhcnRzV2l0aCgnbmV3cy5nb29nbGUuJykpIHsKCQkkKCdhW2hyZWZePSIuL2FydGljbGVzLyJdJykuYXR0cignaHJlZicsIGZ1bmN0aW9uKGksIHYpIHsKCQkJdHJ5IHsKCQkJCXZhciBtID0gYXRvYih2LnNwbGl0KC9bXC9cP1xfXC1dLylbMl0pLm1hdGNoKC9odHRwW1x4MDAtXHg3Rl0rLykKCQkJfQoJCQljYXRjaChlKSB7CgkJCQkvL2F0b2IgZmFpbHVyZTogIlRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIgoJCQkJcmV0dXJuIHYKCQkJfQoJCQlyZXR1cm4gbSAmJiBtWzBdIHx8IHYKCQl9KQoJfQoJLy9yZW1vdmUgbWFwIHNlYXJjaCByZWRpcmVjdHM7IGRvZXMgbm90IHJlbW92ZSByZWRpcmVjdHMgb2YgYWR2ZXJ0aXNlbWVudAoJZWxzZSBpZihwYXRobmFtZS5zdGFydHNXaXRoKCcvbWFwcy8nKSB8fCAnL21hcHMnID09IHBhdGhuYW1lKSB7CgkJJCgnYVtocmVmXj0iaHR0cCJdJykuZWFjaChmdW5jdGlvbigpIHsKCQkJYmxvY2tMaXN0ZW5lcnModGhpcywgJ2NsaWNrIGNvbnRleHRtZW51JykKCQkJLy9sZWdhY3kKCQkJaWYodGhpcy5ocmVmLmNvbnRhaW5zKCd1cmw/JykpIHsKCQkJCXZhciBtID0gdGhpcy5ocmVmLm1hdGNoKC8oPzpcJnxcPylxXD0oaHR0cC4qPykoXCZ8JCkvaSkKCQkJCWlmKG0gJiYgbVsxXSkgewoJCQkJCXRoaXMuaHJlZiA9IGRlY29kZVVSSUNvbXBvbmVudChtWzFdKQoJCQkJfQoJCQl9CgkJfSkKCX0KCS8vcmVtb3ZlIG1haWwvZ21haWwgcmVkaXJlY3RzCgllbHNlIGlmKGhvc3RuYW1lLnN0YXJ0c1dpdGgoJ21haWwuJykpIHsKCQkkKCdhW2RhdGEtc2FmZXJlZGlyZWN0dXJsXScpLnJlbW92ZUF0dHIoJ2RhdGEtc2FmZXJlZGlyZWN0dXJsJykKCX0KCS8vcmVtb3ZlIGxlZ2FjeSBzZWFyY2ggcmVkaXJlY3RzIGFuZCBkb2NzIHJlZGlyZWN0cwoJJCgnYVtocmVmKj0iL3VybD8iXScpLmVhY2goZnVuY3Rpb24oKSB7CgkJdmFyIG0gPSB0aGlzLmhyZWYubWF0Y2goL1wvdXJsXD8oPzp1cmx8cSlcPShodHRwLio/KShcJnwkKS9pKQoJCWlmKG0gJiYgbVsxXSkgewoJCQl0aGlzLmhyZWYgPSBkZWNvZGVVUklDb21wb25lbnQobVsxXSkKCQl9Cgl9KQoJLy9leHBvc2UgY2FjaGVkIGxpbmtzCgkkKCdkaXZbcm9sZT0ibWVudSJdIG9sIGxpJykuZmluZCgnYVtocmVmXj0iaHR0cDovL3dlYmNhY2hlLmdvb2dsZXVzZXJjb250ZW50LiJdJyArIAoJCScsIGFbaHJlZl49Imh0dHBzOi8vd2ViY2FjaGUuZ29vZ2xldXNlcmNvbnRlbnQuIl0nKS5lYWNoKAoJCWZ1bmN0aW9uKCkgewoJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJwoJCQl0aGlzLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzAuNWVtJwoJCQkkKHRoaXMpLmNsb3Nlc3QoJ2Rpdi5hY3Rpb24tbWVudS5hYl9jdGwsIGRpdi5fbkJiJykKCQkJLmFmdGVyKCQodGhpcykpCgkJCS8vbWF0ZXJpYWwgZGVzaWduCgkJCS5wYXJlbnQoKS5jc3MoJ3doaXRlLXNwYWNlJywgJ25vd3JhcCcpCgkJfQoJKQp9Cgp2YXIgbW8gPSB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciB8fCB3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcgppZihtbykgewoJdmFyIG9ic2VydmVyID0gbmV3IG1vKGhhbmRsZUNoYW5nZSkKCW9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7Y2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSkKfQovL2ZvciBjaHJvbWUgdjE4LSwgZmlyZWZveCB2MTQtLCBpbnRlcm5ldCBleHBsb3JlciB2MTEtLCBvcGVyYSB2MTUtIGFuZCBzYWZhcmkgdjYtCmVsc2UgewoJc2V0SW50ZXJ2YWwoaGFuZGxlQ2hhbmdlLCA1MDApCn0KaGFuZGxlQ2hhbmdlKCk=","requires":[{"meta":{"name":"jquery.min.js","url":"http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js","ts":1616877305128,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2MS44LjMganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwooZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBfKGUpe3ZhciB0PU1bZV09e307cmV0dXJuIHYuZWFjaChlLnNwbGl0KHkpLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9ZnVuY3Rpb24gSChlLG4scil7aWYocj09PXQmJmUubm9kZVR5cGU9PT0xKXt2YXIgaT0iZGF0YS0iK24ucmVwbGFjZShQLCItJDEiKS50b0xvd2VyQ2FzZSgpO3I9ZS5nZXRBdHRyaWJ1dGUoaSk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt0cnl7cj1yPT09InRydWUiPyEwOnI9PT0iZmFsc2UiPyExOnI9PT0ibnVsbCI/bnVsbDorcisiIj09PXI/K3I6RC50ZXN0KHIpP3YucGFyc2VKU09OKHIpOnJ9Y2F0Y2gocyl7fXYuZGF0YShlLG4scil9ZWxzZSByPXR9cmV0dXJuIHJ9ZnVuY3Rpb24gQihlKXt2YXIgdDtmb3IodCBpbiBlKXtpZih0PT09ImRhdGEiJiZ2LmlzRW1wdHlPYmplY3QoZVt0XSkpY29udGludWU7aWYodCE9PSJ0b0pTT04iKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9ZnVuY3Rpb24gdHQoKXtyZXR1cm4hMH1mdW5jdGlvbiB1dChlKXtyZXR1cm4hZXx8IWUucGFyZW50Tm9kZXx8ZS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gYXQoZSx0KXtkbyBlPWVbdF07d2hpbGUoZSYmZS5ub2RlVHlwZSE9PTEpO3JldHVybiBlfWZ1bmN0aW9uIGZ0KGUsdCxuKXt0PXR8fDA7aWYodi5pc0Z1bmN0aW9uKHQpKXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3ZhciBpPSEhdC5jYWxsKGUscixlKTtyZXR1cm4gaT09PW59KTtpZih0Lm5vZGVUeXBlKXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiBlPT09dD09PW59KTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPXYuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVUeXBlPT09MX0pO2lmKGl0LnRlc3QodCkpcmV0dXJuIHYuZmlsdGVyKHQsciwhbik7dD12LmZpbHRlcih0LHIpfXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiB2LmluQXJyYXkoZSx0KT49MD09PW59KX1mdW5jdGlvbiBsdChlKXt2YXIgdD1jdC5zcGxpdCgifCIpLG49ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYobi5jcmVhdGVFbGVtZW50KXdoaWxlKHQubGVuZ3RoKW4uY3JlYXRlRWxlbWVudCh0LnBvcCgpKTtyZXR1cm4gbn1mdW5jdGlvbiBMdChlLHQpe3JldHVybiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpKX1mdW5jdGlvbiBBdChlLHQpe2lmKHQubm9kZVR5cGUhPT0xfHwhdi5oYXNEYXRhKGUpKXJldHVybjt2YXIgbixyLGkscz12Ll9kYXRhKGUpLG89di5fZGF0YSh0LHMpLHU9cy5ldmVudHM7aWYodSl7ZGVsZXRlIG8uaGFuZGxlLG8uZXZlbnRzPXt9O2ZvcihuIGluIHUpZm9yKHI9MCxpPXVbbl0ubGVuZ3RoO3I8aTtyKyspdi5ldmVudC5hZGQodCxuLHVbbl1bcl0pfW8uZGF0YSYmKG8uZGF0YT12LmV4dGVuZCh7fSxvLmRhdGEpKX1mdW5jdGlvbiBPdChlLHQpe3ZhciBuO2lmKHQubm9kZVR5cGUhPT0xKXJldHVybjt0LmNsZWFyQXR0cmlidXRlcyYmdC5jbGVhckF0dHJpYnV0ZXMoKSx0Lm1lcmdlQXR0cmlidXRlcyYmdC5tZXJnZUF0dHJpYnV0ZXMoZSksbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj09PSJvYmplY3QiPyh0LnBhcmVudE5vZGUmJih0Lm91dGVySFRNTD1lLm91dGVySFRNTCksdi5zdXBwb3J0Lmh0bWw1Q2xvbmUmJmUuaW5uZXJIVE1MJiYhdi50cmltKHQuaW5uZXJIVE1MKSYmKHQuaW5uZXJIVE1MPWUuaW5uZXJIVE1MKSk6bj09PSJpbnB1dCImJkV0LnRlc3QoZS50eXBlKT8odC5kZWZhdWx0Q2hlY2tlZD10LmNoZWNrZWQ9ZS5jaGVja2VkLHQudmFsdWUhPT1lLnZhbHVlJiYodC52YWx1ZT1lLnZhbHVlKSk6bj09PSJvcHRpb24iP3Quc2VsZWN0ZWQ9ZS5kZWZhdWx0U2VsZWN0ZWQ6bj09PSJpbnB1dCJ8fG49PT0idGV4dGFyZWEiP3QuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlOm49PT0ic2NyaXB0IiYmdC50ZXh0IT09ZS50ZXh0JiYodC50ZXh0PWUudGV4dCksdC5yZW1vdmVBdHRyaWJ1dGUodi5leHBhbmRvKX1mdW5jdGlvbiBNdChlKXtyZXR1cm4gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTp0eXBlb2YgZS5xdWVyeVNlbGVjdG9yQWxsIT0idW5kZWZpbmVkIj9lLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTpbXX1mdW5jdGlvbiBfdChlKXtFdC50ZXN0KGUudHlwZSkmJihlLmRlZmF1bHRDaGVja2VkPWUuY2hlY2tlZCl9ZnVuY3Rpb24gUXQoZSx0KXtpZih0IGluIGUpcmV0dXJuIHQ7dmFyIG49dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpLHI9dCxpPUp0Lmxlbmd0aDt3aGlsZShpLS0pe3Q9SnRbaV0rbjtpZih0IGluIGUpcmV0dXJuIHR9cmV0dXJuIHJ9ZnVuY3Rpb24gR3QoZSx0KXtyZXR1cm4gZT10fHxlLHYuY3NzKGUsImRpc3BsYXkiKT09PSJub25lInx8IXYuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIFl0KGUsdCl7dmFyIG4scixpPVtdLHM9MCxvPWUubGVuZ3RoO2Zvcig7czxvO3MrKyl7bj1lW3NdO2lmKCFuLnN0eWxlKWNvbnRpbnVlO2lbc109di5fZGF0YShuLCJvbGRkaXNwbGF5IiksdD8oIWlbc10mJm4uc3R5bGUuZGlzcGxheT09PSJub25lIiYmKG4uc3R5bGUuZGlzcGxheT0iIiksbi5zdHlsZS5kaXNwbGF5PT09IiImJkd0KG4pJiYoaVtzXT12Ll9kYXRhKG4sIm9sZGRpc3BsYXkiLG5uKG4ubm9kZU5hbWUpKSkpOihyPUR0KG4sImRpc3BsYXkiKSwhaVtzXSYmciE9PSJub25lIiYmdi5fZGF0YShuLCJvbGRkaXNwbGF5IixyKSl9Zm9yKHM9MDtzPG87cysrKXtuPWVbc107aWYoIW4uc3R5bGUpY29udGludWU7aWYoIXR8fG4uc3R5bGUuZGlzcGxheT09PSJub25lInx8bi5zdHlsZS5kaXNwbGF5PT09IiIpbi5zdHlsZS5kaXNwbGF5PXQ/aVtzXXx8IiI6Im5vbmUifXJldHVybiBlfWZ1bmN0aW9uIFp0KGUsdCxuKXt2YXIgcj1SdC5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsxXS0obnx8MCkpKyhyWzJdfHwicHgiKTp0fWZ1bmN0aW9uIGVuKGUsdCxuLHIpe3ZhciBpPW49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpPzQ6dD09PSJ3aWR0aCI/MTowLHM9MDtmb3IoO2k8NDtpKz0yKW49PT0ibWFyZ2luIiYmKHMrPXYuY3NzKGUsbiskdFtpXSwhMCkpLHI/KG49PT0iY29udGVudCImJihzLT1wYXJzZUZsb2F0KER0KGUsInBhZGRpbmciKyR0W2ldKSl8fDApLG4hPT0ibWFyZ2luIiYmKHMtPXBhcnNlRmxvYXQoRHQoZSwiYm9yZGVyIiskdFtpXSsiV2lkdGgiKSl8fDApKToocys9cGFyc2VGbG9hdChEdChlLCJwYWRkaW5nIiskdFtpXSkpfHwwLG4hPT0icGFkZGluZyImJihzKz1wYXJzZUZsb2F0KER0KGUsImJvcmRlciIrJHRbaV0rIldpZHRoIikpfHwwKSk7cmV0dXJuIHN9ZnVuY3Rpb24gdG4oZSx0LG4pe3ZhciByPXQ9PT0id2lkdGgiP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsaT0hMCxzPXYuc3VwcG9ydC5ib3hTaXppbmcmJnYuY3NzKGUsImJveFNpemluZyIpPT09ImJvcmRlci1ib3giO2lmKHI8PTB8fHI9PW51bGwpe3I9RHQoZSx0KTtpZihyPDB8fHI9PW51bGwpcj1lLnN0eWxlW3RdO2lmKFV0LnRlc3QocikpcmV0dXJuIHI7aT1zJiYodi5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlfHxyPT09ZS5zdHlsZVt0XSkscj1wYXJzZUZsb2F0KHIpfHwwfXJldHVybiByK2VuKGUsdCxufHwocz8iYm9yZGVyIjoiY29udGVudCIpLGkpKyJweCJ9ZnVuY3Rpb24gbm4oZSl7aWYoV3RbZV0pcmV0dXJuIFd0W2VdO3ZhciB0PXYoIjwiK2UrIj4iKS5hcHBlbmRUbyhpLmJvZHkpLG49dC5jc3MoImRpc3BsYXkiKTt0LnJlbW92ZSgpO2lmKG49PT0ibm9uZSJ8fG49PT0iIil7UHQ9aS5ib2R5LmFwcGVuZENoaWxkKFB0fHx2LmV4dGVuZChpLmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLHtmcmFtZUJvcmRlcjowLHdpZHRoOjAsaGVpZ2h0OjB9KSk7aWYoIUh0fHwhUHQuY3JlYXRlRWxlbWVudClIdD0oUHQuY29udGVudFdpbmRvd3x8UHQuY29udGVudERvY3VtZW50KS5kb2N1bWVudCxIdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksSHQuY2xvc2UoKTt0PUh0LmJvZHkuYXBwZW5kQ2hpbGQoSHQuY3JlYXRlRWxlbWVudChlKSksbj1EdCh0LCJkaXNwbGF5IiksaS5ib2R5LnJlbW92ZUNoaWxkKFB0KX1yZXR1cm4gV3RbZV09bixufWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3ZhciBpO2lmKHYuaXNBcnJheSh0KSl2LmVhY2godCxmdW5jdGlvbih0LGkpe258fHNuLnRlc3QoZSk/cihlLGkpOmZuKGUrIlsiKyh0eXBlb2YgaT09Im9iamVjdCI/dDoiIikrIl0iLGksbixyKX0pO2Vsc2UgaWYoIW4mJnYudHlwZSh0KT09PSJvYmplY3QiKWZvcihpIGluIHQpZm4oZSsiWyIraSsiXSIsdFtpXSxuLHIpO2Vsc2UgcihlLHQpfWZ1bmN0aW9uIENuKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3R5cGVvZiB0IT0ic3RyaW5nIiYmKG49dCx0PSIqIik7dmFyIHIsaSxzLG89dC50b0xvd2VyQ2FzZSgpLnNwbGl0KHkpLHU9MCxhPW8ubGVuZ3RoO2lmKHYuaXNGdW5jdGlvbihuKSlmb3IoO3U8YTt1Kyspcj1vW3VdLHM9L15cKy8udGVzdChyKSxzJiYocj1yLnN1YnN0cigxKXx8IioiKSxpPWVbcl09ZVtyXXx8W10saVtzPyJ1bnNoaWZ0IjoicHVzaCJdKG4pfX1mdW5jdGlvbiBrbihlLG4scixpLHMsbyl7cz1zfHxuLmRhdGFUeXBlc1swXSxvPW98fHt9LG9bc109ITA7dmFyIHUsYT1lW3NdLGY9MCxsPWE/YS5sZW5ndGg6MCxjPWU9PT1Tbjtmb3IoO2Y8bCYmKGN8fCF1KTtmKyspdT1hW2ZdKG4scixpKSx0eXBlb2YgdT09InN0cmluZyImJighY3x8b1t1XT91PXQ6KG4uZGF0YVR5cGVzLnVuc2hpZnQodSksdT1rbihlLG4scixpLHUsbykpKTtyZXR1cm4oY3x8IXUpJiYhb1siKiJdJiYodT1rbihlLG4scixpLCIqIixvKSksdX1mdW5jdGlvbiBMbihlLG4pe3ZhciByLGkscz12LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKHIgaW4gbiluW3JdIT09dCYmKChzW3JdP2U6aXx8KGk9e30pKVtyXT1uW3JdKTtpJiZ2LmV4dGVuZCghMCxlLGkpfWZ1bmN0aW9uIEFuKGUsbixyKXt2YXIgaSxzLG8sdSxhPWUuY29udGVudHMsZj1lLmRhdGFUeXBlcyxsPWUucmVzcG9uc2VGaWVsZHM7Zm9yKHMgaW4gbClzIGluIHImJihuW2xbc11dPXJbc10pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGk9PT10JiYoaT1lLm1pbWVUeXBlfHxuLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaSlmb3IocyBpbiBhKWlmKGFbc10mJmFbc10udGVzdChpKSl7Zi51bnNoaWZ0KHMpO2JyZWFrfWlmKGZbMF1pbiByKW89ZlswXTtlbHNle2ZvcihzIGluIHIpe2lmKCFmWzBdfHxlLmNvbnZlcnRlcnNbcysiICIrZlswXV0pe289czticmVha311fHwodT1zKX1vPW98fHV9aWYobylyZXR1cm4gbyE9PWZbMF0mJmYudW5zaGlmdChvKSxyW29dfWZ1bmN0aW9uIE9uKGUsdCl7dmFyIG4scixpLHMsbz1lLmRhdGFUeXBlcy5zbGljZSgpLHU9b1swXSxhPXt9LGY9MDtlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKTtpZihvWzFdKWZvcihuIGluIGUuY29udmVydGVycylhW24udG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW25dO2Zvcig7aT1vWysrZl07KWlmKGkhPT0iKiIpe2lmKHUhPT0iKiImJnUhPT1pKXtuPWFbdSsiICIraV18fGFbIiogIitpXTtpZighbilmb3IociBpbiBhKXtzPXIuc3BsaXQoIiAiKTtpZihzWzFdPT09aSl7bj1hW3UrIiAiK3NbMF1dfHxhWyIqICIrc1swXV07aWYobil7bj09PSEwP249YVtyXTphW3JdIT09ITAmJihpPXNbMF0sby5zcGxpY2UoZi0tLDAsaSkpO2JyZWFrfX19aWYobiE9PSEwKWlmKG4mJmVbInRocm93cyJdKXQ9bih0KTtlbHNlIHRyeXt0PW4odCl9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6bj9sOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitpfX19dT1pfXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX1mdW5jdGlvbiBGbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3R9Y2F0Y2godCl7fX1mdW5jdGlvbiBJbigpe3RyeXtyZXR1cm4gbmV3IGUuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaCh0KXt9fWZ1bmN0aW9uICRuKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtxbj10fSwwKSxxbj12Lm5vdygpfWZ1bmN0aW9uIEpuKGUsdCl7di5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj0oVm5bdF18fFtdKS5jb25jYXQoVm5bIioiXSksaT0wLHM9ci5sZW5ndGg7Zm9yKDtpPHM7aSsrKWlmKHJbaV0uY2FsbChlLHQsbikpcmV0dXJufSl9ZnVuY3Rpb24gS24oZSx0LG4pe3ZhciByLGk9MCxzPTAsbz1Ybi5sZW5ndGgsdT12LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGEuZWxlbX0pLGE9ZnVuY3Rpb24oKXt2YXIgdD1xbnx8JG4oKSxuPU1hdGgubWF4KDAsZi5zdGFydFRpbWUrZi5kdXJhdGlvbi10KSxyPW4vZi5kdXJhdGlvbnx8MCxpPTEtcixzPTAsbz1mLnR3ZWVucy5sZW5ndGg7Zm9yKDtzPG87cysrKWYudHdlZW5zW3NdLnJ1bihpKTtyZXR1cm4gdS5ub3RpZnlXaXRoKGUsW2YsaSxuXSksaTwxJiZvP246KHUucmVzb2x2ZVdpdGgoZSxbZl0pLCExKX0sZj11LnByb21pc2Uoe2VsZW06ZSxwcm9wczp2LmV4dGVuZCh7fSx0KSxvcHRzOnYuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6cW58fCRuKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXYuVHdlZW4oZSxmLm9wdHMsdCxuLGYub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxmLm9wdHMuZWFzaW5nKTtyZXR1cm4gZi50d2VlbnMucHVzaChpKSxpfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2YudHdlZW5zLmxlbmd0aDowO2Zvcig7bjxyO24rKylmLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/dS5yZXNvbHZlV2l0aChlLFtmLHRdKTp1LnJlamVjdFdpdGgoZSxbZix0XSksdGhpc319KSxsPWYucHJvcHM7UW4obCxmLm9wdHMuc3BlY2lhbEVhc2luZyk7Zm9yKDtpPG87aSsrKXtyPVhuW2ldLmNhbGwoZixlLGwsZi5vcHRzKTtpZihyKXJldHVybiByfXJldHVybiBKbihmLGwpLHYuaXNGdW5jdGlvbihmLm9wdHMuc3RhcnQpJiZmLm9wdHMuc3RhcnQuY2FsbChlLGYpLHYuZngudGltZXIodi5leHRlbmQoYSx7YW5pbTpmLHF1ZXVlOmYub3B0cy5xdWV1ZSxlbGVtOmV9KSksZi5wcm9ncmVzcyhmLm9wdHMucHJvZ3Jlc3MpLmRvbmUoZi5vcHRzLmRvbmUsZi5vcHRzLmNvbXBsZXRlKS5mYWlsKGYub3B0cy5mYWlsKS5hbHdheXMoZi5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gUW4oZSx0KXt2YXIgbixyLGkscyxvO2ZvcihuIGluIGUpe3I9di5jYW1lbENhc2UobiksaT10W3JdLHM9ZVtuXSx2LmlzQXJyYXkocykmJihpPXNbMV0scz1lW25dPXNbMF0pLG4hPT1yJiYoZVtyXT1zLGRlbGV0ZSBlW25dKSxvPXYuY3NzSG9va3Nbcl07aWYobyYmImV4cGFuZCJpbiBvKXtzPW8uZXhwYW5kKHMpLGRlbGV0ZSBlW3JdO2ZvcihuIGluIHMpbiBpbiBlfHwoZVtuXT1zW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9fWZ1bmN0aW9uIEduKGUsdCxuKXt2YXIgcixpLHMsbyx1LGEsZixsLGMsaD10aGlzLHA9ZS5zdHlsZSxkPXt9LG09W10sZz1lLm5vZGVUeXBlJiZHdChlKTtuLnF1ZXVlfHwobD12Ll9xdWV1ZUhvb2tzKGUsImZ4IiksbC51bnF1ZXVlZD09bnVsbCYmKGwudW5xdWV1ZWQ9MCxjPWwuZW1wdHkuZmlyZSxsLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtsLnVucXVldWVkfHxjKCl9KSxsLnVucXVldWVkKyssaC5hbHdheXMoZnVuY3Rpb24oKXtoLmFsd2F5cyhmdW5jdGlvbigpe2wudW5xdWV1ZWQtLSx2LnF1ZXVlKGUsImZ4IikubGVuZ3RofHxsLmVtcHR5LmZpcmUoKX0pfSkpLGUubm9kZVR5cGU9PT0xJiYoImhlaWdodCJpbiB0fHwid2lkdGgiaW4gdCkmJihuLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dYLHAub3ZlcmZsb3dZXSx2LmNzcyhlLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmdi5jc3MoZSwiZmxvYXQiKT09PSJub25lIiYmKCF2LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8bm4oZS5ub2RlTmFtZSk9PT0iaW5saW5lIj9wLmRpc3BsYXk9ImlubGluZS1ibG9jayI6cC56b29tPTEpKSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIix2LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8aC5kb25lKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKTtmb3IociBpbiB0KXtzPXRbcl07aWYoVW4uZXhlYyhzKSl7ZGVsZXRlIHRbcl0sYT1hfHxzPT09InRvZ2dsZSI7aWYocz09PShnPyJoaWRlIjoic2hvdyIpKWNvbnRpbnVlO20ucHVzaChyKX19bz1tLmxlbmd0aDtpZihvKXt1PXYuX2RhdGEoZSwiZnhzaG93Iil8fHYuX2RhdGEoZSwiZnhzaG93Iix7fSksImhpZGRlbiJpbiB1JiYoZz11LmhpZGRlbiksYSYmKHUuaGlkZGVuPSFnKSxnP3YoZSkuc2hvdygpOmguZG9uZShmdW5jdGlvbigpe3YoZSkuaGlkZSgpfSksaC5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7di5yZW1vdmVEYXRhKGUsImZ4c2hvdyIsITApO2Zvcih0IGluIGQpdi5zdHlsZShlLHQsZFt0XSl9KTtmb3Iocj0wO3I8bztyKyspaT1tW3JdLGY9aC5jcmVhdGVUd2VlbihpLGc/dVtpXTowKSxkW2ldPXVbaV18fHYuc3R5bGUoZSxpKSxpIGluIHV8fCh1W2ldPWYuc3RhcnQsZyYmKGYuZW5kPWYuc3RhcnQsZi5zdGFydD1pPT09IndpZHRoInx8aT09PSJoZWlnaHQiPzE6MCkpfX1mdW5jdGlvbiBZbihlLHQsbixyLGkpe3JldHVybiBuZXcgWW4ucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1mdW5jdGlvbiBabihlLHQpe3ZhciBuLHI9e2hlaWdodDplfSxpPTA7dD10PzE6MDtmb3IoO2k8NDtpKz0yLXQpbj0kdFtpXSxyWyJtYXJnaW4iK25dPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfWZ1bmN0aW9uIHRyKGUpe3JldHVybiB2LmlzV2luZG93KGUpP2U6ZS5ub2RlVHlwZT09PTk/ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3c6ITF9dmFyIG4scixpPWUuZG9jdW1lbnQscz1lLmxvY2F0aW9uLG89ZS5uYXZpZ2F0b3IsdT1lLmpRdWVyeSxhPWUuJCxmPUFycmF5LnByb3RvdHlwZS5wdXNoLGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLGM9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsaD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxkPVN0cmluZy5wcm90b3R5cGUudHJpbSx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB2LmZuLmluaXQoZSx0LG4pfSxtPS9bXC0rXT8oPzpcZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wpLy5zb3VyY2UsZz0vXFMvLHk9L1xzKy8sYj0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csdz0vXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMoW1x3XC1dKikkKS8sRT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLFM9L15bXF0sOnt9XHNdKiQvLHg9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxUPS9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkvZyxOPS8iW14iXFxcclxuXSoifHRydWV8ZmFsc2V8bnVsbHwtPyg/OlxkXGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS9nLEM9L14tbXMtLyxrPS8tKFtcZGEtel0pL2dpLEw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4odCsiIikudG9VcHBlckNhc2UoKX0sQT1mdW5jdGlvbigpe2kuYWRkRXZlbnRMaXN0ZW5lcj8oaS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixBLCExKSx2LnJlYWR5KCkpOmkucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJihpLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEEpLHYucmVhZHkoKSl9LE89e307di5mbj12LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dixpbml0OmZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLHUsYTtpZighZSlyZXR1cm4gdGhpcztpZihlLm5vZGVUeXBlKXJldHVybiB0aGlzLmNvbnRleHQ9dGhpc1swXT1lLHRoaXMubGVuZ3RoPTEsdGhpcztpZih0eXBlb2YgZT09InN0cmluZyIpe2UuY2hhckF0KDApPT09IjwiJiZlLmNoYXJBdChlLmxlbmd0aC0xKT09PSI+IiYmZS5sZW5ndGg+PTM/cz1bbnVsbCxlLG51bGxdOnM9dy5leGVjKGUpO2lmKHMmJihzWzFdfHwhbikpe2lmKHNbMV0pcmV0dXJuIG49biBpbnN0YW5jZW9mIHY/blswXTpuLGE9biYmbi5ub2RlVHlwZT9uLm93bmVyRG9jdW1lbnR8fG46aSxlPXYucGFyc2VIVE1MKHNbMV0sYSwhMCksRS50ZXN0KHNbMV0pJiZ2LmlzUGxhaW5PYmplY3QobikmJnRoaXMuYXR0ci5jYWxsKGUsbiwhMCksdi5tZXJnZSh0aGlzLGUpO289aS5nZXRFbGVtZW50QnlJZChzWzJdKTtpZihvJiZvLnBhcmVudE5vZGUpe2lmKG8uaWQhPT1zWzJdKXJldHVybiByLmZpbmQoZSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPW99cmV0dXJuIHRoaXMuY29udGV4dD1pLHRoaXMuc2VsZWN0b3I9ZSx0aGlzfXJldHVybiFufHxuLmpxdWVyeT8obnx8cikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKG4pLmZpbmQoZSl9cmV0dXJuIHYuaXNGdW5jdGlvbihlKT9yLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx2Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjguMyIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBsLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD90aGlzLnRvQXJyYXkoKTplPDA/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXYubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGUpO3JldHVybiByLnByZXZPYmplY3Q9dGhpcyxyLmNvbnRleHQ9dGhpcy5jb250ZXh0LHQ9PT0iZmluZCI/ci5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrbjp0JiYoci5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIit0KyIoIituKyIpIikscn0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB2LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gdi5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxlcTpmdW5jdGlvbihlKXtyZXR1cm4gZT0rZSxlPT09LTE/dGhpcy5zbGljZShlKTp0aGlzLnNsaWNlKGUsZSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobC5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixsLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSx2LmZuLmluaXQucHJvdG90eXBlPXYuZm4sdi5leHRlbmQ9di5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSxuLHIsaSxzLG8sdT1hcmd1bWVudHNbMF18fHt9LGE9MSxmPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgdT09ImJvb2xlYW4iJiYobD11LHU9YXJndW1lbnRzWzFdfHx7fSxhPTIpLHR5cGVvZiB1IT0ib2JqZWN0IiYmIXYuaXNGdW5jdGlvbih1KSYmKHU9e30pLGY9PT1hJiYodT10aGlzLC0tYSk7Zm9yKDthPGY7YSsrKWlmKChlPWFyZ3VtZW50c1thXSkhPW51bGwpZm9yKG4gaW4gZSl7cj11W25dLGk9ZVtuXTtpZih1PT09aSljb250aW51ZTtsJiZpJiYodi5pc1BsYWluT2JqZWN0KGkpfHwocz12LmlzQXJyYXkoaSkpKT8ocz8ocz0hMSxvPXImJnYuaXNBcnJheShyKT9yOltdKTpvPXImJnYuaXNQbGFpbk9iamVjdChyKT9yOnt9LHVbbl09di5leHRlbmQobCxvLGkpKTppIT09dCYmKHVbbl09aSl9cmV0dXJuIHV9LHYuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT12JiYoZS4kPWEpLHQmJmUualF1ZXJ5PT09diYmKGUualF1ZXJ5PXUpLHZ9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGUpe2U/di5yZWFkeVdhaXQrKzp2LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oZSl7aWYoZT09PSEwPy0tdi5yZWFkeVdhaXQ6di5pc1JlYWR5KXJldHVybjtpZighaS5ib2R5KXJldHVybiBzZXRUaW1lb3V0KHYucmVhZHksMSk7di5pc1JlYWR5PSEwO2lmKGUhPT0hMCYmLS12LnJlYWR5V2FpdD4wKXJldHVybjtyLnJlc29sdmVXaXRoKGksW3ZdKSx2LmZuLnRyaWdnZXImJnYoaSkudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHYudHlwZShlKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHYudHlwZShlKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZlPT1lLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/U3RyaW5nKGUpOk9baC5jYWxsKGUpXXx8Im9iamVjdCJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7aWYoIWV8fHYudHlwZShlKSE9PSJvYmplY3QifHxlLm5vZGVUeXBlfHx2LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYhcC5jYWxsKGUsImNvbnN0cnVjdG9yIikmJiFwLmNhbGwoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaChuKXtyZXR1cm4hMX12YXIgcjtmb3IociBpbiBlKTtyZXR1cm4gcj09PXR8fHAuY2FsbChlLHIpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0scGFyc2VIVE1MOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4hZXx8dHlwZW9mIGUhPSJzdHJpbmciP251bGw6KHR5cGVvZiB0PT0iYm9vbGVhbiImJihuPXQsdD0wKSx0PXR8fGksKHI9RS5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KHJbMV0pXToocj12LmJ1aWxkRnJhZ21lbnQoW2VdLHQsbj9udWxsOltdKSx2Lm1lcmdlKFtdLChyLmNhY2hlYWJsZT92LmNsb25lKHIuZnJhZ21lbnQpOnIuZnJhZ21lbnQpLmNoaWxkTm9kZXMpKSl9LHBhcnNlSlNPTjpmdW5jdGlvbih0KXtpZighdHx8dHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiBudWxsO3Q9di50cmltKHQpO2lmKGUuSlNPTiYmZS5KU09OLnBhcnNlKXJldHVybiBlLkpTT04ucGFyc2UodCk7aWYoUy50ZXN0KHQucmVwbGFjZShULCJAIikucmVwbGFjZShOLCJdIikucmVwbGFjZSh4LCIiKSkpcmV0dXJuKG5ldyBGdW5jdGlvbigicmV0dXJuICIrdCkpKCk7di5lcnJvcigiSW52YWxpZCBKU09OOiAiK3QpfSxwYXJzZVhNTDpmdW5jdGlvbihuKXt2YXIgcixpO2lmKCFufHx0eXBlb2YgbiE9InN0cmluZyIpcmV0dXJuIG51bGw7dHJ5e2UuRE9NUGFyc2VyPyhpPW5ldyBET01QYXJzZXIscj1pLnBhcnNlRnJvbVN0cmluZyhuLCJ0ZXh0L3htbCIpKToocj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLHIuYXN5bmM9ImZhbHNlIixyLmxvYWRYTUwobikpfWNhdGNoKHMpe3I9dH1yZXR1cm4oIXJ8fCFyLmRvY3VtZW50RWxlbWVudHx8ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZ2LmVycm9yKCJJbnZhbGlkIFhNTDogIituKSxyfSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKHQpe3QmJmcudGVzdCh0KSYmKGUuZXhlY1NjcmlwdHx8ZnVuY3Rpb24odCl7ZS5ldmFsLmNhbGwoZSx0KX0pKHQpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShDLCJtcy0iKS5yZXBsYWNlKGssTCl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihlLG4scil7dmFyIGkscz0wLG89ZS5sZW5ndGgsdT1vPT09dHx8di5pc0Z1bmN0aW9uKGUpO2lmKHIpe2lmKHUpe2ZvcihpIGluIGUpaWYobi5hcHBseShlW2ldLHIpPT09ITEpYnJlYWt9ZWxzZSBmb3IoO3M8bzspaWYobi5hcHBseShlW3MrK10scik9PT0hMSlicmVha31lbHNlIGlmKHUpe2ZvcihpIGluIGUpaWYobi5jYWxsKGVbaV0saSxlW2ldKT09PSExKWJyZWFrfWVsc2UgZm9yKDtzPG87KWlmKG4uY2FsbChlW3NdLHMsZVtzKytdKT09PSExKWJyZWFrO3JldHVybiBlfSx0cmltOmQmJiFkLmNhbGwoIlx1ZmVmZlx1MDBhMCIpP2Z1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyIiOmQuY2FsbChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/IiI6KGUrIiIpLnJlcGxhY2UoYiwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dHx8W107cmV0dXJuIGUhPW51bGwmJihuPXYudHlwZShlKSxlLmxlbmd0aD09bnVsbHx8bj09PSJzdHJpbmcifHxuPT09ImZ1bmN0aW9uInx8bj09PSJyZWdleHAifHx2LmlzV2luZG93KGUpP2YuY2FsbChyLGUpOnYubWVyZ2UocixlKSkscn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYodCl7aWYoYylyZXR1cm4gYy5jYWxsKHQsZSxuKTtyPXQubGVuZ3RoLG49bj9uPDA/TWF0aC5tYXgoMCxyK24pOm46MDtmb3IoO248cjtuKyspaWYobiBpbiB0JiZ0W25dPT09ZSlyZXR1cm4gbn1yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oZSxuKXt2YXIgcj1uLmxlbmd0aCxpPWUubGVuZ3RoLHM9MDtpZih0eXBlb2Ygcj09Im51bWJlciIpZm9yKDtzPHI7cysrKWVbaSsrXT1uW3NdO2Vsc2Ugd2hpbGUobltzXSE9PXQpZVtpKytdPW5bcysrXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLHM9MCxvPWUubGVuZ3RoO249ISFuO2Zvcig7czxvO3MrKylyPSEhdChlW3NdLHMpLG4hPT1yJiZpLnB1c2goZVtzXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLG4scil7dmFyIGkscyxvPVtdLHU9MCxhPWUubGVuZ3RoLGY9ZSBpbnN0YW5jZW9mIHZ8fGEhPT10JiZ0eXBlb2YgYT09Im51bWJlciImJihhPjAmJmVbMF0mJmVbYS0xXXx8YT09PTB8fHYuaXNBcnJheShlKSk7aWYoZilmb3IoO3U8YTt1KyspaT1uKGVbdV0sdSxyKSxpIT1udWxsJiYob1tvLmxlbmd0aF09aSk7ZWxzZSBmb3IocyBpbiBlKWk9bihlW3NdLHMsciksaSE9bnVsbCYmKG9bby5sZW5ndGhdPWkpO3JldHVybiBvLmNvbmNhdC5hcHBseShbXSxvKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxzO3JldHVybiB0eXBlb2Ygbj09InN0cmluZyImJihyPWVbbl0sbj1lLGU9ciksdi5pc0Z1bmN0aW9uKGUpPyhpPWwuY2FsbChhcmd1bWVudHMsMikscz1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG4saS5jb25jYXQobC5jYWxsKGFyZ3VtZW50cykpKX0scy5ndWlkPWUuZ3VpZD1lLmd1aWR8fHYuZ3VpZCsrLHMpOnR9LGFjY2VzczpmdW5jdGlvbihlLG4scixpLHMsbyx1KXt2YXIgYSxmPXI9PW51bGwsbD0wLGM9ZS5sZW5ndGg7aWYociYmdHlwZW9mIHI9PSJvYmplY3QiKXtmb3IobCBpbiByKXYuYWNjZXNzKGUsbixsLHJbbF0sMSxvLGkpO3M9MX1lbHNlIGlmKGkhPT10KXthPXU9PT10JiZ2LmlzRnVuY3Rpb24oaSksZiYmKGE/KGE9bixuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYS5jYWxsKHYoZSksbil9KToobi5jYWxsKGUsaSksbj1udWxsKSk7aWYobilmb3IoO2w8YztsKyspbihlW2xdLHIsYT9pLmNhbGwoZVtsXSxsLG4oZVtsXSxyKSk6aSx1KTtzPTF9cmV0dXJuIHM/ZTpmP24uY2FsbChlKTpjP24oZVswXSxyKTpvfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KSx2LnJlYWR5LnByb21pc2U9ZnVuY3Rpb24odCl7aWYoIXIpe3I9di5EZWZlcnJlZCgpO2lmKGkucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpc2V0VGltZW91dCh2LnJlYWR5LDEpO2Vsc2UgaWYoaS5hZGRFdmVudExpc3RlbmVyKWkuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix2LnJlYWR5LCExKTtlbHNle2kuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQSksZS5hdHRhY2hFdmVudCgib25sb2FkIix2LnJlYWR5KTt2YXIgbj0hMTt0cnl7bj1lLmZyYW1lRWxlbWVudD09bnVsbCYmaS5kb2N1bWVudEVsZW1lbnR9Y2F0Y2gocyl7fW4mJm4uZG9TY3JvbGwmJmZ1bmN0aW9uIG8oKXtpZighdi5pc1JlYWR5KXt0cnl7bi5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGUpe3JldHVybiBzZXRUaW1lb3V0KG8sNTApfXYucmVhZHkoKX19KCl9fXJldHVybiByLnByb21pc2UodCl9LHYuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe09bIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSksbj12KGkpO3ZhciBNPXt9O3YuQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9dHlwZW9mIGU9PSJzdHJpbmciP01bZV18fF8oZSk6di5leHRlbmQoe30sZSk7dmFyIG4scixpLHMsbyx1LGE9W10sZj0hZS5vbmNlJiZbXSxsPWZ1bmN0aW9uKHQpe249ZS5tZW1vcnkmJnQscj0hMCx1PXN8fDAscz0wLG89YS5sZW5ndGgsaT0hMDtmb3IoO2EmJnU8bzt1KyspaWYoYVt1XS5hcHBseSh0WzBdLHRbMV0pPT09ITEmJmUuc3RvcE9uRmFsc2Upe249ITE7YnJlYWt9aT0hMSxhJiYoZj9mLmxlbmd0aCYmbChmLnNoaWZ0KCkpOm4/YT1bXTpjLmRpc2FibGUoKSl9LGM9e2FkZDpmdW5jdGlvbigpe2lmKGEpe3ZhciB0PWEubGVuZ3RoOyhmdW5jdGlvbiByKHQpe3YuZWFjaCh0LGZ1bmN0aW9uKHQsbil7dmFyIGk9di50eXBlKG4pO2k9PT0iZnVuY3Rpb24iPyghZS51bmlxdWV8fCFjLmhhcyhuKSkmJmEucHVzaChuKTpuJiZuLmxlbmd0aCYmaSE9PSJzdHJpbmciJiZyKG4pfSl9KShhcmd1bWVudHMpLGk/bz1hLmxlbmd0aDpuJiYocz10LGwobikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmdi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXYuaW5BcnJheSh0LGEsbikpPi0xKWEuc3BsaWNlKG4sMSksaSYmKG48PW8mJm8tLSxuPD11JiZ1LS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB2LmluQXJyYXkoZSxhKT4tMX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gYT1bXSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9Zj1uPXQsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hYX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBmPXQsbnx8Yy5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWZ9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxhJiYoIXJ8fGYpJiYoaT9mLnB1c2godCk6bCh0KSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBjLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhcn19O3JldHVybiBjfSx2LmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9W1sicmVzb2x2ZSIsImRvbmUiLHYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsdi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsdi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sbj0icGVuZGluZyIscj17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGkuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB2LkRlZmVycmVkKGZ1bmN0aW9uKG4pe3YuZWFjaCh0LGZ1bmN0aW9uKHQscil7dmFyIHM9clswXSxvPWVbdF07aVtyWzFdXSh2LmlzRnVuY3Rpb24obyk/ZnVuY3Rpb24oKXt2YXIgZT1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ2LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bcysiV2l0aCJdKHRoaXM9PT1pP246dGhpcyxbZV0pfTpuW3NdKX0pLGU9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbD92LmV4dGVuZChlLHIpOnJ9fSxpPXt9O3JldHVybiByLnBpcGU9ci50aGVuLHYuZWFjaCh0LGZ1bmN0aW9uKGUscyl7dmFyIG89c1syXSx1PXNbM107cltzWzFdXT1vLmFkZCx1JiZvLmFkZChmdW5jdGlvbigpe249dX0sdFtlXjFdWzJdLmRpc2FibGUsdFsyXVsyXS5sb2NrKSxpW3NbMF1dPW8uZmlyZSxpW3NbMF0rIldpdGgiXT1vLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWwuY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT1yIT09MXx8ZSYmdi5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLHM9aT09PTE/ZTp2LkRlZmVycmVkKCksbz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9sLmNhbGwoYXJndW1lbnRzKTpyLG49PT11P3Mubm90aWZ5V2l0aCh0LG4pOi0taXx8cy5yZXNvbHZlV2l0aCh0LG4pfX0sdSxhLGY7aWYocj4xKXt1PW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxmPW5ldyBBcnJheShyKTtmb3IoO3Q8cjt0Kyspblt0XSYmdi5pc0Z1bmN0aW9uKG5bdF0ucHJvbWlzZSk/blt0XS5wcm9taXNlKCkuZG9uZShvKHQsZixuKSkuZmFpbChzLnJlamVjdCkucHJvZ3Jlc3Mobyh0LGEsdSkpOi0taX1yZXR1cm4gaXx8cy5yZXNvbHZlV2l0aChmLG4pLHMucHJvbWlzZSgpfX0pLHYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciB0LG4scixzLG8sdSxhLGYsbCxjLGgscD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Auc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IikscC5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsbj1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikscj1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIW58fCFyfHwhbi5sZW5ndGgpcmV0dXJue307cz1pLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLG89cy5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSx1PXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sci5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSIsdD17bGVhZGluZ1doaXRlc3BhY2U6cC5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChyLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ci5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNS8udGVzdChyLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhci5zdHlsZS5jc3NGbG9hdCxjaGVja09uOnUudmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOm8uc2VsZWN0ZWQsZ2V0U2V0QXR0cmlidXRlOnAuY2xhc3NOYW1lIT09InQiLGVuY3R5cGU6ISFpLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGh0bWw1Q2xvbmU6aS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCE9PSI8Om5hdj48LzpuYXY+Iixib3hNb2RlbDppLmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCIsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwLGJveFNpemluZ1JlbGlhYmxlOiEwLHBpeGVsUG9zaXRpb246ITF9LHUuY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPXUuY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hby5kaXNhYmxlZDt0cnl7ZGVsZXRlIHAudGVzdH1jYXRjaChkKXt0LmRlbGV0ZUV4cGFuZG89ITF9IXAuYWRkRXZlbnRMaXN0ZW5lciYmcC5hdHRhY2hFdmVudCYmcC5maXJlRXZlbnQmJihwLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixoPWZ1bmN0aW9uKCl7dC5ub0Nsb25lRXZlbnQ9ITF9KSxwLmNsb25lTm9kZSghMCkuZmlyZUV2ZW50KCJvbmNsaWNrIikscC5kZXRhY2hFdmVudCgib25jbGljayIsaCkpLHU9aS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHUudmFsdWU9InQiLHUuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx0LnJhZGlvVmFsdWU9dS52YWx1ZT09PSJ0Iix1LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSx1LnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxwLmFwcGVuZENoaWxkKHUpLGE9aS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYS5hcHBlbmRDaGlsZChwLmxhc3RDaGlsZCksdC5jaGVja0Nsb25lPWEuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLHQuYXBwZW5kQ2hlY2tlZD11LmNoZWNrZWQsYS5yZW1vdmVDaGlsZCh1KSxhLmFwcGVuZENoaWxkKHApO2lmKHAuYXR0YWNoRXZlbnQpZm9yKGwgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSlmPSJvbiIrbCxjPWYgaW4gcCxjfHwocC5zZXRBdHRyaWJ1dGUoZiwicmV0dXJuOyIpLGM9dHlwZW9mIHBbZl09PSJmdW5jdGlvbiIpLHRbbCsiQnViYmxlcyJdPWM7cmV0dXJuIHYoZnVuY3Rpb24oKXt2YXIgbixyLHMsbyx1PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47IixhPWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtpZighYSlyZXR1cm47bj1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG4uc3R5bGUuY3NzVGV4dD0idmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoxcHgiLGEuaW5zZXJ0QmVmb3JlKG4sYS5maXJzdENoaWxkKSxyPWkuY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5hcHBlbmRDaGlsZChyKSxyLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscz1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHNbMF0uc3R5bGUuY3NzVGV4dD0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSIsYz1zWzBdLm9mZnNldEhlaWdodD09PTAsc1swXS5zdHlsZS5kaXNwbGF5PSIiLHNbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsdC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9YyYmc1swXS5vZmZzZXRIZWlnaHQ9PT0wLHIuaW5uZXJIVE1MPSIiLHIuc3R5bGUuY3NzVGV4dD0iYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSU7Iix0LmJveFNpemluZz1yLm9mZnNldFdpZHRoPT09NCx0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PWEub2Zmc2V0VG9wIT09MSxlLmdldENvbXB1dGVkU3R5bGUmJih0LnBpeGVsUG9zaXRpb249KGUuZ2V0Q29tcHV0ZWRTdHlsZShyLG51bGwpfHx7fSkudG9wIT09IjElIix0LmJveFNpemluZ1JlbGlhYmxlPShlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGg9PT0iNHB4IixvPWkuY3JlYXRlRWxlbWVudCgiZGl2Iiksby5zdHlsZS5jc3NUZXh0PXIuc3R5bGUuY3NzVGV4dD11LG8uc3R5bGUubWFyZ2luUmlnaHQ9by5zdHlsZS53aWR0aD0iMCIsci5zdHlsZS53aWR0aD0iMXB4IixyLmFwcGVuZENoaWxkKG8pLHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0eWxlKG8sbnVsbCl8fHt9KS5tYXJnaW5SaWdodCkpLHR5cGVvZiByLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYoci5pbm5lckhUTUw9IiIsci5zdHlsZS5jc3NUZXh0PXUrIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiLHQuaW5saW5lQmxvY2tOZWVkc0xheW91dD1yLm9mZnNldFdpZHRoPT09MyxyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIixyLmlubmVySFRNTD0iPGRpdj48L2Rpdj4iLHIuZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iNXB4Iix0LnNocmlua1dyYXBCbG9ja3M9ci5vZmZzZXRXaWR0aCE9PTMsbi5zdHlsZS56b29tPTEpLGEucmVtb3ZlQ2hpbGQobiksbj1yPXM9bz1udWxsfSksYS5yZW1vdmVDaGlsZChwKSxuPXI9cz1vPXU9YT1wPW51bGwsdH0oKTt2YXIgRD0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sUD0vKFtBLVpdKS9nO3YuZXh0ZW5kKHtjYWNoZTp7fSxkZWxldGVkSWRzOltdLHV1aWQ6MCxleHBhbmRvOiJqUXVlcnkiKyh2LmZuLmpxdWVyeStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOiEwLG9iamVjdDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixhcHBsZXQ6ITB9LGhhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5ub2RlVHlwZT92LmNhY2hlW2Vbdi5leHBhbmRvXV06ZVt2LmV4cGFuZG9dLCEhZSYmIUIoZSl9LGRhdGE6ZnVuY3Rpb24oZSxuLHIsaSl7aWYoIXYuYWNjZXB0RGF0YShlKSlyZXR1cm47dmFyIHMsbyx1PXYuZXhwYW5kbyxhPXR5cGVvZiBuPT0ic3RyaW5nIixmPWUubm9kZVR5cGUsbD1mP3YuY2FjaGU6ZSxjPWY/ZVt1XTplW3VdJiZ1O2lmKCghY3x8IWxbY118fCFpJiYhbFtjXS5kYXRhKSYmYSYmcj09PXQpcmV0dXJuO2N8fChmP2VbdV09Yz12LmRlbGV0ZWRJZHMucG9wKCl8fHYuZ3VpZCsrOmM9dSksbFtjXXx8KGxbY109e30sZnx8KGxbY10udG9KU09OPXYubm9vcCkpO2lmKHR5cGVvZiBuPT0ib2JqZWN0Inx8dHlwZW9mIG49PSJmdW5jdGlvbiIpaT9sW2NdPXYuZXh0ZW5kKGxbY10sbik6bFtjXS5kYXRhPXYuZXh0ZW5kKGxbY10uZGF0YSxuKTtyZXR1cm4gcz1sW2NdLGl8fChzLmRhdGF8fChzLmRhdGE9e30pLHM9cy5kYXRhKSxyIT09dCYmKHNbdi5jYW1lbENhc2UobildPXIpLGE/KG89c1tuXSxvPT1udWxsJiYobz1zW3YuY2FtZWxDYXNlKG4pXSkpOm89cyxvfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCxuKXtpZighdi5hY2NlcHREYXRhKGUpKXJldHVybjt2YXIgcixpLHMsbz1lLm5vZGVUeXBlLHU9bz92LmNhY2hlOmUsYT1vP2Vbdi5leHBhbmRvXTp2LmV4cGFuZG87aWYoIXVbYV0pcmV0dXJuO2lmKHQpe3I9bj91W2FdOnVbYV0uZGF0YTtpZihyKXt2LmlzQXJyYXkodCl8fCh0IGluIHI/dD1bdF06KHQ9di5jYW1lbENhc2UodCksdCBpbiByP3Q9W3RdOnQ9dC5zcGxpdCgiICIpKSk7Zm9yKGk9MCxzPXQubGVuZ3RoO2k8cztpKyspZGVsZXRlIHJbdFtpXV07aWYoIShuP0I6di5pc0VtcHR5T2JqZWN0KShyKSlyZXR1cm59fWlmKCFuKXtkZWxldGUgdVthXS5kYXRhO2lmKCFCKHVbYV0pKXJldHVybn1vP3YuY2xlYW5EYXRhKFtlXSwhMCk6di5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fHUhPXUud2luZG93P2RlbGV0ZSB1W2FdOnVbYV09bnVsbH0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRhdGEoZSx0LG4sITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUmJnYubm9EYXRhW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIXR8fHQhPT0hMCYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PXR9fSksdi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLHMsbyx1LGE9dGhpc1swXSxmPTAsbD1udWxsO2lmKGU9PT10KXtpZih0aGlzLmxlbmd0aCl7bD12LmRhdGEoYSk7aWYoYS5ub2RlVHlwZT09PTEmJiF2Ll9kYXRhKGEsInBhcnNlZEF0dHJzIikpe3M9YS5hdHRyaWJ1dGVzO2Zvcih1PXMubGVuZ3RoO2Y8dTtmKyspbz1zW2ZdLm5hbWUsby5pbmRleE9mKCJkYXRhLSIpfHwobz12LmNhbWVsQ2FzZShvLnN1YnN0cmluZyg1KSksSChhLG8sbFtvXSkpO3YuX2RhdGEoYSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGx9cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0Ij90aGlzLmVhY2goZnVuY3Rpb24oKXt2LmRhdGEodGhpcyxlKX0pOihyPWUuc3BsaXQoIi4iLDIpLHJbMV09clsxXT8iLiIrclsxXToiIixpPXJbMV0rIiEiLHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24obil7aWYobj09PXQpcmV0dXJuIGw9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIraSxbclswXV0pLGw9PT10JiZhJiYobD12LmRhdGEoYSxlKSxsPUgoYSxlLGwpKSxsPT09dCYmclsxXT90aGlzLmRhdGEoclswXSk6bDtyWzFdPW4sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKTt0LnRyaWdnZXJIYW5kbGVyKCJzZXREYXRhIitpLHIpLHYuZGF0YSh0aGlzLGUsbiksdC50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIraSxyKX0pfSxudWxsLG4sYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITEpKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5yZW1vdmVEYXRhKHRoaXMsZSl9KX19KSx2LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj12Ll9kYXRhKGUsdCksbiYmKCFyfHx2LmlzQXJyYXkobik/cj12Ll9kYXRhKGUsdCx2Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj12LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxzPXYuX3F1ZXVlSG9va3MoZSx0KSxvPWZ1bmN0aW9uKCl7di5kZXF1ZXVlKGUsdCl9O2k9PT0iaW5wcm9ncmVzcyImJihpPW4uc2hpZnQoKSxyLS0pLGkmJih0PT09ImZ4IiYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIHMuc3RvcCxpLmNhbGwoZSxvLHMpKSwhciYmcyYmcy5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIHYuX2RhdGEoZSxuKXx8di5fZGF0YShlLG4se2VtcHR5OnYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe3YucmVtb3ZlRGF0YShlLHQrInF1ZXVlIiwhMCksdi5yZW1vdmVEYXRhKGUsbiwhMCl9KX0pfX0pLHYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLG4pe3ZhciByPTI7cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKG49ZSxlPSJmeCIsci0tKSxhcmd1bWVudHMubGVuZ3RoPHI/di5xdWV1ZSh0aGlzWzBdLGUpOm49PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9di5xdWV1ZSh0aGlzLGUsbik7di5fcXVldWVIb29rcyh0aGlzLGUpLGU9PT0iZngiJiZ0WzBdIT09ImlucHJvZ3Jlc3MiJiZ2LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2LmRlcXVldWUodGhpcyxlKX0pfSxkZWxheTpmdW5jdGlvbihlLHQpe3JldHVybiBlPXYuZng/di5meC5zcGVlZHNbZV18fGU6ZSx0PXR8fCJmeCIsdGhpcy5xdWV1ZSh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9c2V0VGltZW91dCh0LGUpO24uc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChyKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihlLG4pe3ZhciByLGk9MSxzPXYuRGVmZXJyZWQoKSxvPXRoaXMsdT10aGlzLmxlbmd0aCxhPWZ1bmN0aW9uKCl7LS1pfHxzLnJlc29sdmVXaXRoKG8sW29dKX07dHlwZW9mIGUhPSJzdHJpbmciJiYobj1lLGU9dCksZT1lfHwiZngiO3doaWxlKHUtLSlyPXYuX2RhdGEob1t1XSxlKyJxdWV1ZUhvb2tzIiksciYmci5lbXB0eSYmKGkrKyxyLmVtcHR5LmFkZChhKSk7cmV0dXJuIGEoKSxzLnByb21pc2Uobil9fSk7dmFyIGosRixJLHE9L1tcdFxyXG5dL2csUj0vXHIvZyxVPS9eKD86YnV0dG9ufGlucHV0KSQvaSx6PS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLFc9L15hKD86cmVhfCkkL2ksWD0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSxWPXYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7di5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdi5hY2Nlc3ModGhpcyx2LmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3YucmVtb3ZlQXR0cih0aGlzLGUpfSl9LHByb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdi5hY2Nlc3ModGhpcyx2LnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9di5wcm9wRml4W2VdfHxlLHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2VdPXQsZGVsZXRlIHRoaXNbZV19Y2F0Y2gobil7fX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzLG8sdTtpZih2LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt2KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGUmJnR5cGVvZiBlPT0ic3RyaW5nIil7dD1lLnNwbGl0KHkpO2ZvcihuPTAscj10aGlzLmxlbmd0aDtuPHI7bisrKXtpPXRoaXNbbl07aWYoaS5ub2RlVHlwZT09PTEpaWYoIWkuY2xhc3NOYW1lJiZ0Lmxlbmd0aD09PTEpaS5jbGFzc05hbWU9ZTtlbHNle3M9IiAiK2kuY2xhc3NOYW1lKyIgIjtmb3Iobz0wLHU9dC5sZW5ndGg7bzx1O28rKylzLmluZGV4T2YoIiAiK3Rbb10rIiAiKTwwJiYocys9dFtvXSsiICIpO2kuY2xhc3NOYW1lPXYudHJpbShzKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgbixyLGkscyxvLHUsYTtpZih2LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt2KHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGUmJnR5cGVvZiBlPT0ic3RyaW5nInx8ZT09PXQpe249KGV8fCIiKS5zcGxpdCh5KTtmb3IodT0wLGE9dGhpcy5sZW5ndGg7dTxhO3UrKyl7aT10aGlzW3VdO2lmKGkubm9kZVR5cGU9PT0xJiZpLmNsYXNzTmFtZSl7cj0oIiAiK2kuY2xhc3NOYW1lKyIgIikucmVwbGFjZShxLCIgIik7Zm9yKHM9MCxvPW4ubGVuZ3RoO3M8bztzKyspd2hpbGUoci5pbmRleE9mKCIgIituW3NdKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK25bc10rIiAiLCIgIik7aS5jbGFzc05hbWU9ZT92LnRyaW0ocik6IiJ9fX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZSxyPXR5cGVvZiB0PT0iYm9vbGVhbiI7cmV0dXJuIHYuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7dih0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYobj09PSJzdHJpbmciKXt2YXIgaSxzPTAsbz12KHRoaXMpLHU9dCxhPWUuc3BsaXQoeSk7d2hpbGUoaT1hW3MrK10pdT1yP3U6IW8uaGFzQ2xhc3MoaSksb1t1PyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oaSl9ZWxzZSBpZihuPT09InVuZGVmaW5lZCJ8fG49PT0iYm9vbGVhbiIpdGhpcy5jbGFzc05hbWUmJnYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6di5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIifSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PSIgIitlKyIgIixuPTAscj10aGlzLmxlbmd0aDtmb3IoO248cjtuKyspaWYodGhpc1tuXS5ub2RlVHlwZT09PTEmJigiICIrdGhpc1tuXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHEsIiAiKS5pbmRleE9mKHQpPj0wKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oZSl7dmFyIG4scixpLHM9dGhpc1swXTtpZighYXJndW1lbnRzLmxlbmd0aCl7aWYocylyZXR1cm4gbj12LnZhbEhvb2tzW3MudHlwZV18fHYudmFsSG9va3Nbcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxuJiYiZ2V0ImluIG4mJihyPW4uZ2V0KHMsInZhbHVlIikpIT09dD9yOihyPXMudmFsdWUsdHlwZW9mIHI9PSJzdHJpbmciP3IucmVwbGFjZShSLCIiKTpyPT1udWxsPyIiOnIpO3JldHVybn1yZXR1cm4gaT12LmlzRnVuY3Rpb24oZSksdGhpcy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBzLG89dih0aGlzKTtpZih0aGlzLm5vZGVUeXBlIT09MSlyZXR1cm47aT9zPWUuY2FsbCh0aGlzLHIsby52YWwoKSk6cz1lLHM9PW51bGw/cz0iIjp0eXBlb2Ygcz09Im51bWJlciI/cys9IiI6di5pc0FycmF5KHMpJiYocz12Lm1hcChzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyIiOmUrIiJ9KSksbj12LnZhbEhvb2tzW3RoaXMudHlwZV18fHYudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZighbnx8ISgic2V0ImluIG4pfHxuLnNldCh0aGlzLHMsInZhbHVlIik9PT10KXRoaXMudmFsdWU9c30pfX0pLHYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgscz1lLnR5cGU9PT0ic2VsZWN0LW9uZSJ8fGk8MCxvPXM/bnVsbDpbXSx1PXM/aSsxOnIubGVuZ3RoLGE9aTwwP3U6cz9pOjA7Zm9yKDthPHU7YSsrKXtuPXJbYV07aWYoKG4uc2VsZWN0ZWR8fGE9PT1pKSYmKHYuc3VwcG9ydC5vcHREaXNhYmxlZD8hbi5kaXNhYmxlZDpuLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IXYubm9kZU5hbWUobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7dD12KG4pLnZhbCgpO2lmKHMpcmV0dXJuIHQ7by5wdXNoKHQpfX1yZXR1cm4gb30sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49di5tYWtlQXJyYXkodCk7cmV0dXJuIHYoZSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9di5pbkFycmF5KHYodGhpcykudmFsKCksbik+PTB9KSxuLmxlbmd0aHx8KGUuc2VsZWN0ZWRJbmRleD0tMSksbn19fSxhdHRyRm46e30sYXR0cjpmdW5jdGlvbihlLG4scixpKXt2YXIgcyxvLHUsYT1lLm5vZGVUeXBlO2lmKCFlfHxhPT09M3x8YT09PTh8fGE9PT0yKXJldHVybjtpZihpJiZ2LmlzRnVuY3Rpb24odi5mbltuXSkpcmV0dXJuIHYoZSlbbl0ocik7aWYodHlwZW9mIGUuZ2V0QXR0cmlidXRlPT0idW5kZWZpbmVkIilyZXR1cm4gdi5wcm9wKGUsbixyKTt1PWEhPT0xfHwhdi5pc1hNTERvYyhlKSx1JiYobj1uLnRvTG93ZXJDYXNlKCksbz12LmF0dHJIb29rc1tuXXx8KFgudGVzdChuKT9GOmopKTtpZihyIT09dCl7aWYocj09PW51bGwpe3YucmVtb3ZlQXR0cihlLG4pO3JldHVybn1yZXR1cm4gbyYmInNldCJpbiBvJiZ1JiYocz1vLnNldChlLHIsbikpIT09dD9zOihlLnNldEF0dHJpYnV0ZShuLHIrIiIpLHIpfXJldHVybiBvJiYiZ2V0ImluIG8mJnUmJihzPW8uZ2V0KGUsbikpIT09bnVsbD9zOihzPWUuZ2V0QXR0cmlidXRlKG4pLHM9PT1udWxsP3Q6cyl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkscyxvPTA7aWYodCYmZS5ub2RlVHlwZT09PTEpe3I9dC5zcGxpdCh5KTtmb3IoO288ci5sZW5ndGg7bysrKWk9cltvXSxpJiYobj12LnByb3BGaXhbaV18fGkscz1YLnRlc3QoaSksc3x8di5hdHRyKGUsaSwiIiksZS5yZW1vdmVBdHRyaWJ1dGUoVj9pOm4pLHMmJm4gaW4gZSYmKGVbbl09ITEpKX19LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoVS50ZXN0KGUubm9kZU5hbWUpJiZlLnBhcmVudE5vZGUpdi5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7ZWxzZSBpZighdi5zdXBwb3J0LnJhZGlvVmFsdWUmJnQ9PT0icmFkaW8iJiZ2Lm5vZGVOYW1lKGUsImlucHV0Iikpe3ZhciBuPWUudmFsdWU7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuJiYoZS52YWx1ZT1uKSx0fX19LHZhbHVlOntnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaiYmdi5ub2RlTmFtZShlLCJidXR0b24iKT9qLmdldChlLHQpOnQgaW4gZT9lLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihlLHQsbil7aWYoaiYmdi5ub2RlTmFtZShlLCJidXR0b24iKSlyZXR1cm4gai5zZXQoZSx0LG4pO2UudmFsdWU9dH19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLHMsbyx1PWUubm9kZVR5cGU7aWYoIWV8fHU9PT0zfHx1PT09OHx8dT09PTIpcmV0dXJuO3JldHVybiBvPXUhPT0xfHwhdi5pc1hNTERvYyhlKSxvJiYobj12LnByb3BGaXhbbl18fG4scz12LnByb3BIb29rc1tuXSksciE9PXQ/cyYmInNldCJpbiBzJiYoaT1zLnNldChlLHIsbikpIT09dD9pOmVbbl09cjpzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsbikpIT09bnVsbD9pOmVbbl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgbj1lLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7cmV0dXJuIG4mJm4uc3BlY2lmaWVkP3BhcnNlSW50KG4udmFsdWUsMTApOnoudGVzdChlLm5vZGVOYW1lKXx8Vy50ZXN0KGUubm9kZU5hbWUpJiZlLmhyZWY/MDp0fX19fSksRj17Z2V0OmZ1bmN0aW9uKGUsbil7dmFyIHIsaT12LnByb3AoZSxuKTtyZXR1cm4gaT09PSEwfHx0eXBlb2YgaSE9ImJvb2xlYW4iJiYocj1lLmdldEF0dHJpYnV0ZU5vZGUobikpJiZyLm5vZGVWYWx1ZSE9PSExP24udG9Mb3dlckNhc2UoKTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB0PT09ITE/di5yZW1vdmVBdHRyKGUsbik6KHI9di5wcm9wRml4W25dfHxuLHIgaW4gZSYmKGVbcl09ITApLGUuc2V0QXR0cmlidXRlKG4sbi50b0xvd2VyQ2FzZSgpKSksbn19LFZ8fChJPXtuYW1lOiEwLGlkOiEwLGNvb3JkczohMH0saj12LnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pLHImJihJW25dP3IudmFsdWUhPT0iIjpyLnNwZWNpZmllZCk/ci52YWx1ZTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2V0QXR0cmlidXRlTm9kZShuKTtyZXR1cm4gcnx8KHI9aS5jcmVhdGVBdHRyaWJ1dGUobiksZS5zZXRBdHRyaWJ1dGVOb2RlKHIpKSxyLnZhbHVlPXQrIiJ9fSx2LmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGUsdCl7di5hdHRySG9va3NbdF09di5leHRlbmQodi5hdHRySG9va3NbdF0se3NldDpmdW5jdGlvbihlLG4pe2lmKG49PT0iIilyZXR1cm4gZS5zZXRBdHRyaWJ1dGUodCwiYXV0byIpLG59fSl9KSx2LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e2dldDpqLmdldCxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3Q9PT0iIiYmKHQ9ImZhbHNlIiksai5zZXQoZSx0LG4pfX0pLHYuc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8di5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oZSxuKXt2LmF0dHJIb29rc1tuXT12LmV4dGVuZCh2LmF0dHJIb29rc1tuXSx7Z2V0OmZ1bmN0aW9uKGUpe3ZhciByPWUuZ2V0QXR0cmlidXRlKG4sMik7cmV0dXJuIHI9PT1udWxsP3Q6cn19KX0pLHYuc3VwcG9ydC5zdHlsZXx8KHYuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpfHx0fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0PXQrIiJ9fSksdi5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwodi5wcm9wSG9va3Muc2VsZWN0ZWQ9di5leHRlbmQodi5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSksdi5zdXBwb3J0LmVuY3R5cGV8fCh2LnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKSx2LnN1cHBvcnQuY2hlY2tPbnx8di5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7di52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjplLnZhbHVlfX19KSx2LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt2LnZhbEhvb2tzW3RoaXNdPXYuZXh0ZW5kKHYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihlLHQpe2lmKHYuaXNBcnJheSh0KSlyZXR1cm4gZS5jaGVja2VkPXYuaW5BcnJheSh2KGUpLnZhbCgpLHQpPj0wfX0pfSk7dmFyICQ9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLEo9L14oW15cLl0qfCkoPzpcLiguKyl8KSQvLEs9Lyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxiLyxRPS9ea2V5LyxHPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxZPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxaPWZ1bmN0aW9uKGUpe3JldHVybiB2LmV2ZW50LnNwZWNpYWwuaG92ZXI/ZTplLnJlcGxhY2UoSywibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMSIpfTt2LmV2ZW50PXthZGQ6ZnVuY3Rpb24oZSxuLHIsaSxzKXt2YXIgbyx1LGEsZixsLGMsaCxwLGQsbSxnO2lmKGUubm9kZVR5cGU9PT0zfHxlLm5vZGVUeXBlPT09OHx8IW58fCFyfHwhKG89di5fZGF0YShlKSkpcmV0dXJuO3IuaGFuZGxlciYmKGQ9cixyPWQuaGFuZGxlcixzPWQuc2VsZWN0b3IpLHIuZ3VpZHx8KHIuZ3VpZD12Lmd1aWQrKyksYT1vLmV2ZW50cyxhfHwoby5ldmVudHM9YT17fSksdT1vLmhhbmRsZSx1fHwoby5oYW5kbGU9dT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIHY9PSJ1bmRlZmluZWQifHwhIWUmJnYuZXZlbnQudHJpZ2dlcmVkPT09ZS50eXBlP3Q6di5ldmVudC5kaXNwYXRjaC5hcHBseSh1LmVsZW0sYXJndW1lbnRzKX0sdS5lbGVtPWUpLG49di50cmltKFoobikpLnNwbGl0KCIgIik7Zm9yKGY9MDtmPG4ubGVuZ3RoO2YrKyl7bD1KLmV4ZWMobltmXSl8fFtdLGM9bFsxXSxoPShsWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZz12LmV2ZW50LnNwZWNpYWxbY118fHt9LGM9KHM/Zy5kZWxlZ2F0ZVR5cGU6Zy5iaW5kVHlwZSl8fGMsZz12LmV2ZW50LnNwZWNpYWxbY118fHt9LHA9di5leHRlbmQoe3R5cGU6YyxvcmlnVHlwZTpsWzFdLGRhdGE6aSxoYW5kbGVyOnIsZ3VpZDpyLmd1aWQsc2VsZWN0b3I6cyxuZWVkc0NvbnRleHQ6cyYmdi5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KHMpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sZCksbT1hW2NdO2lmKCFtKXttPWFbY109W10sbS5kZWxlZ2F0ZUNvdW50PTA7aWYoIWcuc2V0dXB8fGcuc2V0dXAuY2FsbChlLGksaCx1KT09PSExKWUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoYyx1LCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrYyx1KX1nLmFkZCYmKGcuYWRkLmNhbGwoZSxwKSxwLmhhbmRsZXIuZ3VpZHx8KHAuaGFuZGxlci5ndWlkPXIuZ3VpZCkpLHM/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxwKTptLnB1c2gocCksdi5ldmVudC5nbG9iYWxbY109ITB9ZT1udWxsfSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHMsbyx1LGEsZixsLGMsaCxwLGQsbSxnPXYuaGFzRGF0YShlKSYmdi5fZGF0YShlKTtpZighZ3x8IShoPWcuZXZlbnRzKSlyZXR1cm47dD12LnRyaW0oWih0fHwiIikpLnNwbGl0KCIgIik7Zm9yKHM9MDtzPHQubGVuZ3RoO3MrKyl7bz1KLmV4ZWModFtzXSl8fFtdLHU9YT1vWzFdLGY9b1syXTtpZighdSl7Zm9yKHUgaW4gaCl2LmV2ZW50LnJlbW92ZShlLHUrdFtzXSxuLHIsITApO2NvbnRpbnVlfXA9di5ldmVudC5zcGVjaWFsW3VdfHx7fSx1PShyP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHx1LGQ9aFt1XXx8W10sbD1kLmxlbmd0aCxmPWY/bmV3IFJlZ0V4cCgiKF58XFwuKSIrZi5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspbT1kW2NdLChpfHxhPT09bS5vcmlnVHlwZSkmJighbnx8bi5ndWlkPT09bS5ndWlkKSYmKCFmfHxmLnRlc3QobS5uYW1lc3BhY2UpKSYmKCFyfHxyPT09bS5zZWxlY3Rvcnx8cj09PSIqKiImJm0uc2VsZWN0b3IpJiYoZC5zcGxpY2UoYy0tLDEpLG0uc2VsZWN0b3ImJmQuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGUsbSkpO2QubGVuZ3RoPT09MCYmbCE9PWQubGVuZ3RoJiYoKCFwLnRlYXJkb3dufHxwLnRlYXJkb3duLmNhbGwoZSxmLGcuaGFuZGxlKT09PSExKSYmdi5yZW1vdmVFdmVudChlLHUsZy5oYW5kbGUpLGRlbGV0ZSBoW3VdKX12LmlzRW1wdHlPYmplY3QoaCkmJihkZWxldGUgZy5oYW5kbGUsdi5yZW1vdmVEYXRhKGUsImV2ZW50cyIsITApKX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKG4scixzLG8pe2lmKCFzfHxzLm5vZGVUeXBlIT09MyYmcy5ub2RlVHlwZSE9PTgpe3ZhciB1LGEsZixsLGMsaCxwLGQsbSxnLHk9bi50eXBlfHxuLGI9W107aWYoWS50ZXN0KHkrdi5ldmVudC50cmlnZ2VyZWQpKXJldHVybjt5LmluZGV4T2YoIiEiKT49MCYmKHk9eS5zbGljZSgwLC0xKSxhPSEwKSx5LmluZGV4T2YoIi4iKT49MCYmKGI9eS5zcGxpdCgiLiIpLHk9Yi5zaGlmdCgpLGIuc29ydCgpKTtpZigoIXN8fHYuZXZlbnQuY3VzdG9tRXZlbnRbeV0pJiYhdi5ldmVudC5nbG9iYWxbeV0pcmV0dXJuO249dHlwZW9mIG49PSJvYmplY3QiP25bdi5leHBhbmRvXT9uOm5ldyB2LkV2ZW50KHksbik6bmV3IHYuRXZlbnQoeSksbi50eXBlPXksbi5pc1RyaWdnZXI9ITAsbi5leGNsdXNpdmU9YSxuLm5hbWVzcGFjZT1iLmpvaW4oIi4iKSxuLm5hbWVzcGFjZV9yZT1uLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitiLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsaD15LmluZGV4T2YoIjoiKTwwPyJvbiIreToiIjtpZighcyl7dT12LmNhY2hlO2ZvcihmIGluIHUpdVtmXS5ldmVudHMmJnVbZl0uZXZlbnRzW3ldJiZ2LmV2ZW50LnRyaWdnZXIobixyLHVbZl0uaGFuZGxlLmVsZW0sITApO3JldHVybn1uLnJlc3VsdD10LG4udGFyZ2V0fHwobi50YXJnZXQ9cykscj1yIT1udWxsP3YubWFrZUFycmF5KHIpOltdLHIudW5zaGlmdChuKSxwPXYuZXZlbnQuc3BlY2lhbFt5XXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkocyxyKT09PSExKXJldHVybjttPVtbcyxwLmJpbmRUeXBlfHx5XV07aWYoIW8mJiFwLm5vQnViYmxlJiYhdi5pc1dpbmRvdyhzKSl7Zz1wLmRlbGVnYXRlVHlwZXx8eSxsPVkudGVzdChnK3kpP3M6cy5wYXJlbnROb2RlO2ZvcihjPXM7bDtsPWwucGFyZW50Tm9kZSltLnB1c2goW2wsZ10pLGM9bDtjPT09KHMub3duZXJEb2N1bWVudHx8aSkmJm0ucHVzaChbYy5kZWZhdWx0Vmlld3x8Yy5wYXJlbnRXaW5kb3d8fGUsZ10pfWZvcihmPTA7ZjxtLmxlbmd0aCYmIW4uaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtmKyspbD1tW2ZdWzBdLG4udHlwZT1tW2ZdWzFdLGQ9KHYuX2RhdGEobCwiZXZlbnRzIil8fHt9KVtuLnR5cGVdJiZ2Ll9kYXRhKGwsImhhbmRsZSIpLGQmJmQuYXBwbHkobCxyKSxkPWgmJmxbaF0sZCYmdi5hY2NlcHREYXRhKGwpJiZkLmFwcGx5JiZkLmFwcGx5KGwscik9PT0hMSYmbi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBuLnR5cGU9eSwhbyYmIW4uaXNEZWZhdWx0UHJldmVudGVkKCkmJighcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShzLm93bmVyRG9jdW1lbnQscik9PT0hMSkmJih5IT09ImNsaWNrInx8IXYubm9kZU5hbWUocywiYSIpKSYmdi5hY2NlcHREYXRhKHMpJiZoJiZzW3ldJiYoeSE9PSJmb2N1cyImJnkhPT0iYmx1ciJ8fG4udGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiF2LmlzV2luZG93KHMpJiYoYz1zW2hdLGMmJihzW2hdPW51bGwpLHYuZXZlbnQudHJpZ2dlcmVkPXksc1t5XSgpLHYuZXZlbnQudHJpZ2dlcmVkPXQsYyYmKHNbaF09YykpLG4ucmVzdWx0fXJldHVybn0sZGlzcGF0Y2g6ZnVuY3Rpb24obil7bj12LmV2ZW50LmZpeChufHxlLmV2ZW50KTt2YXIgcixpLHMsbyx1LGEsZixjLGgscCxkPSh2Ll9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbbi50eXBlXXx8W10sbT1kLmRlbGVnYXRlQ291bnQsZz1sLmNhbGwoYXJndW1lbnRzKSx5PSFuLmV4Y2x1c2l2ZSYmIW4ubmFtZXNwYWNlLGI9di5ldmVudC5zcGVjaWFsW24udHlwZV18fHt9LHc9W107Z1swXT1uLG4uZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihiLnByZURpc3BhdGNoJiZiLnByZURpc3BhdGNoLmNhbGwodGhpcyxuKT09PSExKXJldHVybjtpZihtJiYoIW4uYnV0dG9ufHxuLnR5cGUhPT0iY2xpY2siKSlmb3Iocz1uLnRhcmdldDtzIT10aGlzO3M9cy5wYXJlbnROb2RlfHx0aGlzKWlmKHMuZGlzYWJsZWQhPT0hMHx8bi50eXBlIT09ImNsaWNrIil7dT17fSxmPVtdO2ZvcihyPTA7cjxtO3IrKyljPWRbcl0saD1jLnNlbGVjdG9yLHVbaF09PT10JiYodVtoXT1jLm5lZWRzQ29udGV4dD92KGgsdGhpcykuaW5kZXgocyk+PTA6di5maW5kKGgsdGhpcyxudWxsLFtzXSkubGVuZ3RoKSx1W2hdJiZmLnB1c2goYyk7Zi5sZW5ndGgmJncucHVzaCh7ZWxlbTpzLG1hdGNoZXM6Zn0pfWQubGVuZ3RoPm0mJncucHVzaCh7ZWxlbTp0aGlzLG1hdGNoZXM6ZC5zbGljZShtKX0pO2ZvcihyPTA7cjx3Lmxlbmd0aCYmIW4uaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtyKyspe2E9d1tyXSxuLmN1cnJlbnRUYXJnZXQ9YS5lbGVtO2ZvcihpPTA7aTxhLm1hdGNoZXMubGVuZ3RoJiYhbi5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO2krKyl7Yz1hLm1hdGNoZXNbaV07aWYoeXx8IW4ubmFtZXNwYWNlJiYhYy5uYW1lc3BhY2V8fG4ubmFtZXNwYWNlX3JlJiZuLm5hbWVzcGFjZV9yZS50ZXN0KGMubmFtZXNwYWNlKSluLmRhdGE9Yy5kYXRhLG4uaGFuZGxlT2JqPWMsbz0oKHYuZXZlbnQuc3BlY2lhbFtjLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8Yy5oYW5kbGVyKS5hcHBseShhLmVsZW0sZyksbyE9PXQmJihuLnJlc3VsdD1vLG89PT0hMSYmKG4ucHJldmVudERlZmF1bHQoKSxuLnN0b3BQcm9wYWdhdGlvbigpKSl9fXJldHVybiBiLnBvc3REaXNwYXRjaCYmYi5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLG4pLG4ucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUud2hpY2g9PW51bGwmJihlLndoaWNoPXQuY2hhckNvZGUhPW51bGw/dC5jaGFyQ29kZTp0LmtleUNvZGUpLGV9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLG4pe3ZhciByLHMsbyx1PW4uYnV0dG9uLGE9bi5mcm9tRWxlbWVudDtyZXR1cm4gZS5wYWdlWD09bnVsbCYmbi5jbGllbnRYIT1udWxsJiYocj1lLnRhcmdldC5vd25lckRvY3VtZW50fHxpLHM9ci5kb2N1bWVudEVsZW1lbnQsbz1yLmJvZHksZS5wYWdlWD1uLmNsaWVudFgrKHMmJnMuc2Nyb2xsTGVmdHx8byYmby5zY3JvbGxMZWZ0fHwwKS0ocyYmcy5jbGllbnRMZWZ0fHxvJiZvLmNsaWVudExlZnR8fDApLGUucGFnZVk9bi5jbGllbnRZKyhzJiZzLnNjcm9sbFRvcHx8byYmby5zY3JvbGxUb3B8fDApLShzJiZzLmNsaWVudFRvcHx8byYmby5jbGllbnRUb3B8fDApKSwhZS5yZWxhdGVkVGFyZ2V0JiZhJiYoZS5yZWxhdGVkVGFyZ2V0PWE9PT1lLnRhcmdldD9uLnRvRWxlbWVudDphKSwhZS53aGljaCYmdSE9PXQmJihlLndoaWNoPXUmMT8xOnUmMj8zOnUmND8yOjApLGV9fSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt2LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scj1lLHM9di5ldmVudC5maXhIb29rc1tlLnR5cGVdfHx7fSxvPXMucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQocy5wcm9wcyk6dGhpcy5wcm9wcztlPXYuRXZlbnQocik7Zm9yKHQ9by5sZW5ndGg7dDspbj1vWy0tdF0sZVtuXT1yW25dO3JldHVybiBlLnRhcmdldHx8KGUudGFyZ2V0PXIuc3JjRWxlbWVudHx8aSksZS50YXJnZXQubm9kZVR5cGU9PT0zJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksZS5tZXRhS2V5PSEhZS5tZXRhS2V5LHMuZmlsdGVyP3MuZmlsdGVyKGUscik6ZX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihlLHQsbil7di5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bil9LHRlYXJkb3duOmZ1bmN0aW9uKGUsdCl7dGhpcy5vbmJlZm9yZXVubG9hZD09PXQmJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXYuZXh0ZW5kKG5ldyB2LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj92LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnYuZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHYuZXZlbnQuaGFuZGxlPXYuZXZlbnQuZGlzcGF0Y2gsdi5yZW1vdmVFdmVudD1pLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ib24iK3Q7ZS5kZXRhY2hFdmVudCYmKHR5cGVvZiBlW3JdPT0idW5kZWZpbmVkIiYmKGVbcl09bnVsbCksZS5kZXRhY2hFdmVudChyLG4pKX0sdi5FdmVudD1mdW5jdGlvbihlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYuRXZlbnQpKXJldHVybiBuZXcgdi5FdmVudChlLHQpO2UmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUucmV0dXJuVmFsdWU9PT0hMXx8ZS5nZXRQcmV2ZW50RGVmYXVsdCYmZS5nZXRQcmV2ZW50RGVmYXVsdCgpP3R0OmV0KTp0aGlzLnR5cGU9ZSx0JiZ2LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHx2Lm5vdygpLHRoaXNbdi5leHBhbmRvXT0hMH0sdi5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9dHQ7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFlKXJldHVybjtlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXR0O3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtpZighZSlyZXR1cm47ZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCksZS5jYW5jZWxCdWJibGU9ITB9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dHQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOmV0LGlzUHJvcGFnYXRpb25TdG9wcGVkOmV0LGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmV0fSx2LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3YuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LHM9ZS5oYW5kbGVPYmosbz1zLnNlbGVjdG9yO2lmKCFpfHxpIT09ciYmIXYuY29udGFpbnMocixpKSllLnR5cGU9cy5vcmlnVHlwZSxuPXMuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQ7cmV0dXJuIG59fX0pLHYuc3VwcG9ydC5zdWJtaXRCdWJibGVzfHwodi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtpZih2Lm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTt2LmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0LHI9di5ub2RlTmFtZShuLCJpbnB1dCIpfHx2Lm5vZGVOYW1lKG4sImJ1dHRvbiIpP24uZm9ybTp0O3ImJiF2Ll9kYXRhKHIsIl9zdWJtaXRfYXR0YWNoZWQiKSYmKHYuZXZlbnQuYWRkKHIsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlPSEwfSksdi5fZGF0YShyLCJfc3VibWl0X2F0dGFjaGVkIiwhMCkpfSl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlJiYoZGVsZXRlIGUuX3N1Ym1pdF9idWJibGUsdGhpcy5wYXJlbnROb2RlJiYhZS5pc1RyaWdnZXImJnYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGUsITApKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZih2Lm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTt2LmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLHYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwodi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZigkLnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpdi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZSl7ZS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIiYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSx2LmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihlKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFlLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSksdi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLGUsITApfSk7cmV0dXJuITF9di5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7JC50ZXN0KHQubm9kZU5hbWUpJiYhdi5fZGF0YSh0LCJfY2hhbmdlX2F0dGFjaGVkIikmJih2LmV2ZW50LmFkZCh0LCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiYhZS5pc1NpbXVsYXRlZCYmIWUuaXNUcmlnZ2VyJiZ2LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxlLCEwKX0pLHYuX2RhdGEodCwiX2NoYW5nZV9hdHRhY2hlZCIsITApKX0pfSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYodGhpcyE9PXR8fGUuaXNTaW11bGF0ZWR8fGUuaXNUcmlnZ2VyfHx0LnR5cGUhPT0icmFkaW8iJiZ0LnR5cGUhPT0iY2hlY2tib3giKXJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gdi5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwhJC50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLHYuc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8di5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt2LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQsdi5ldmVudC5maXgoZSksITApfTt2LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7bisrPT09MCYmaS5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7LS1uPT09MCYmaS5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHYuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLG4scixpLHMpe3ZhciBvLHU7aWYodHlwZW9mIGU9PSJvYmplY3QiKXt0eXBlb2YgbiE9InN0cmluZyImJihyPXJ8fG4sbj10KTtmb3IodSBpbiBlKXRoaXMub24odSxuLHIsZVt1XSxzKTtyZXR1cm4gdGhpc31yPT1udWxsJiZpPT1udWxsPyhpPW4scj1uPXQpOmk9PW51bGwmJih0eXBlb2Ygbj09InN0cmluZyI/KGk9cixyPXQpOihpPXIscj1uLG49dCkpO2lmKGk9PT0hMSlpPWV0O2Vsc2UgaWYoIWkpcmV0dXJuIHRoaXM7cmV0dXJuIHM9PT0xJiYobz1pLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHYoKS5vZmYoZSksby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkuZ3VpZD1vLmd1aWR8fChvLmd1aWQ9di5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2LmV2ZW50LmFkZCh0aGlzLGUsaSxyLG4pfSl9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbihlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLHM7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIGk9ZS5oYW5kbGVPYmosdihlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoaS5uYW1lc3BhY2U/aS5vcmlnVHlwZSsiLiIraS5uYW1lc3BhY2U6aS5vcmlnVHlwZSxpLnNlbGVjdG9yLGkuaGFuZGxlciksdGhpcztpZih0eXBlb2YgZT09Im9iamVjdCIpe2ZvcihzIGluIGUpdGhpcy5vZmYocyxuLGVbc10pO3JldHVybiB0aGlzfWlmKG49PT0hMXx8dHlwZW9mIG49PSJmdW5jdGlvbiIpcj1uLG49dDtyZXR1cm4gcj09PSExJiYocj1ldCksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5ldmVudC5yZW1vdmUodGhpcyxlLHIsbil9KX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGxpdmU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2KHRoaXMuY29udGV4dCkub24oZSx0aGlzLnNlbGVjdG9yLHQsbiksdGhpc30sZGllOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYodGhpcy5jb250ZXh0KS5vZmYoZSx0aGlzLnNlbGVjdG9yfHwiKioiLHQpLHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe2lmKHRoaXNbMF0pcmV0dXJuIHYuZXZlbnQudHJpZ2dlcihlLHQsdGhpc1swXSwhMCl9LHRvZ2dsZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbj1lLmd1aWR8fHYuZ3VpZCsrLHI9MCxpPWZ1bmN0aW9uKG4pe3ZhciBpPSh2Ll9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2UuZ3VpZCl8fDApJXI7cmV0dXJuIHYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrZS5ndWlkLGkrMSksbi5wcmV2ZW50RGVmYXVsdCgpLHRbaV0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwhMX07aS5ndWlkPW47d2hpbGUocjx0Lmxlbmd0aCl0W3IrK10uZ3VpZD1uO3JldHVybiB0aGlzLmNsaWNrKGkpfSxob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX19KSx2LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt2LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG49PW51bGwmJihuPWUsZT1udWxsKSxhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9LFEudGVzdCh0KSYmKHYuZXZlbnQuZml4SG9va3NbdF09di5ldmVudC5rZXlIb29rcyksRy50ZXN0KHQpJiYodi5ldmVudC5maXhIb29rc1t0XT12LmV2ZW50Lm1vdXNlSG9va3MpfSksZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBudChlLHQsbixyKXtuPW58fFtdLHQ9dHx8Zzt2YXIgaSxzLGEsZixsPXQubm9kZVR5cGU7aWYoIWV8fHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gbjtpZihsIT09MSYmbCE9PTkpcmV0dXJuW107YT1vKHQpO2lmKCFhJiYhcilpZihpPVIuZXhlYyhlKSlpZihmPWlbMV0pe2lmKGw9PT05KXtzPXQuZ2V0RWxlbWVudEJ5SWQoZik7aWYoIXN8fCFzLnBhcmVudE5vZGUpcmV0dXJuIG47aWYocy5pZD09PWYpcmV0dXJuIG4ucHVzaChzKSxufWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYocz10Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZikpJiZ1KHQscykmJnMuaWQ9PT1mKXJldHVybiBuLnB1c2gocyksbn1lbHNle2lmKGlbMl0pcmV0dXJuIFMuYXBwbHkobix4LmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSwwKSksbjtpZigoZj1pWzNdKSYmWiYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBTLmFwcGx5KG4seC5jYWxsKHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmKSwwKSksbn1yZXR1cm4gdnQoZS5yZXBsYWNlKGosIiQxIiksdCxuLHIsYSl9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbj09PSJpbnB1dCImJnQudHlwZT09PWV9fWZ1bmN0aW9uIGl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKG49PT0iaW5wdXQifHxuPT09ImJ1dHRvbiIpJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBzdChlKXtyZXR1cm4gTihmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxOKGZ1bmN0aW9uKG4scil7dmFyIGkscz1lKFtdLG4ubGVuZ3RoLHQpLG89cy5sZW5ndGg7d2hpbGUoby0tKW5baT1zW29dXSYmKG5baV09IShyW2ldPW5baV0pKX0pfSl9ZnVuY3Rpb24gb3QoZSx0LG4pe2lmKGU9PT10KXJldHVybiBuO3ZhciByPWUubmV4dFNpYmxpbmc7d2hpbGUocil7aWYocj09PXQpcmV0dXJuLTE7cj1yLm5leHRTaWJsaW5nfXJldHVybiAxfWZ1bmN0aW9uIHV0KGUsdCl7dmFyIG4scixzLG8sdSxhLGYsbD1MW2RdW2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTt1PWUsYT1bXSxmPWkucHJlRmlsdGVyO3doaWxlKHUpe2lmKCFufHwocj1GLmV4ZWModSkpKXImJih1PXUuc2xpY2UoclswXS5sZW5ndGgpfHx1KSxhLnB1c2gocz1bXSk7bj0hMTtpZihyPUkuZXhlYyh1KSlzLnB1c2gobj1uZXcgbShyLnNoaWZ0KCkpKSx1PXUuc2xpY2Uobi5sZW5ndGgpLG4udHlwZT1yWzBdLnJlcGxhY2UoaiwiICIpO2ZvcihvIGluIGkuZmlsdGVyKShyPUpbb10uZXhlYyh1KSkmJighZltvXXx8KHI9ZltvXShyKSkpJiYocy5wdXNoKG49bmV3IG0oci5zaGlmdCgpKSksdT11LnNsaWNlKG4ubGVuZ3RoKSxuLnR5cGU9byxuLm1hdGNoZXM9cik7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/dS5sZW5ndGg6dT9udC5lcnJvcihlKTpMKGUsYSkuc2xpY2UoMCl9ZnVuY3Rpb24gYXQoZSx0LHIpe3ZhciBpPXQuZGlyLHM9ciYmdC5kaXI9PT0icGFyZW50Tm9kZSIsbz13Kys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLHIpe3doaWxlKHQ9dFtpXSlpZihzfHx0Lm5vZGVUeXBlPT09MSlyZXR1cm4gZSh0LG4scil9OmZ1bmN0aW9uKHQscix1KXtpZighdSl7dmFyIGEsZj1iKyIgIitvKyIgIixsPWYrbjt3aGlsZSh0PXRbaV0paWYoc3x8dC5ub2RlVHlwZT09PTEpe2lmKChhPXRbZF0pPT09bClyZXR1cm4gdC5zaXpzZXQ7aWYodHlwZW9mIGE9PSJzdHJpbmciJiZhLmluZGV4T2YoZik9PT0wKXtpZih0LnNpenNldClyZXR1cm4gdH1lbHNle3RbZF09bDtpZihlKHQscix1KSlyZXR1cm4gdC5zaXpzZXQ9ITAsdDt0LnNpenNldD0hMX19fWVsc2Ugd2hpbGUodD10W2ldKWlmKHN8fHQubm9kZVR5cGU9PT0xKWlmKGUodCxyLHUpKXJldHVybiB0fX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiBsdChlLHQsbixyLGkpe3ZhciBzLG89W10sdT0wLGE9ZS5sZW5ndGgsZj10IT1udWxsO2Zvcig7dTxhO3UrKylpZihzPWVbdV0paWYoIW58fG4ocyxyLGkpKW8ucHVzaChzKSxmJiZ0LnB1c2godSk7cmV0dXJuIG99ZnVuY3Rpb24gY3QoZSx0LG4scixpLHMpe3JldHVybiByJiYhcltkXSYmKHI9Y3QocikpLGkmJiFpW2RdJiYoaT1jdChpLHMpKSxOKGZ1bmN0aW9uKHMsbyx1LGEpe3ZhciBmLGwsYyxoPVtdLHA9W10sZD1vLmxlbmd0aCx2PXN8fGR0KHR8fCIqIix1Lm5vZGVUeXBlP1t1XTp1LFtdKSxtPWUmJihzfHwhdCk/bHQodixoLGUsdSxhKTp2LGc9bj9pfHwocz9lOmR8fHIpP1tdOm86bTtuJiZuKG0sZyx1LGEpO2lmKHIpe2Y9bHQoZyxwKSxyKGYsW10sdSxhKSxsPWYubGVuZ3RoO3doaWxlKGwtLSlpZihjPWZbbF0pZ1twW2xdXT0hKG1bcFtsXV09Yyl9aWYocyl7aWYoaXx8ZSl7aWYoaSl7Zj1bXSxsPWcubGVuZ3RoO3doaWxlKGwtLSkoYz1nW2xdKSYmZi5wdXNoKG1bbF09Yyk7aShudWxsLGc9W10sZixhKX1sPWcubGVuZ3RoO3doaWxlKGwtLSkoYz1nW2xdKSYmKGY9aT9ULmNhbGwocyxjKTpoW2xdKT4tMSYmKHNbZl09IShvW2ZdPWMpKX19ZWxzZSBnPWx0KGc9PT1vP2cuc3BsaWNlKGQsZy5sZW5ndGgpOmcpLGk/aShudWxsLG8sZyxhKTpTLmFwcGx5KG8sZyl9KX1mdW5jdGlvbiBodChlKXt2YXIgdCxuLHIscz1lLmxlbmd0aCxvPWkucmVsYXRpdmVbZVswXS50eXBlXSx1PW98fGkucmVsYXRpdmVbIiAiXSxhPW8/MTowLGY9YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSx1LCEwKSxsPWF0KGZ1bmN0aW9uKGUpe3JldHVybiBULmNhbGwodCxlKT4tMX0sdSwhMCksaD1bZnVuY3Rpb24oZSxuLHIpe3JldHVybiFvJiYocnx8biE9PWMpfHwoKHQ9bikubm9kZVR5cGU/ZihlLG4scik6bChlLG4scikpfV07Zm9yKDthPHM7YSsrKWlmKG49aS5yZWxhdGl2ZVtlW2FdLnR5cGVdKWg9W2F0KGZ0KGgpLG4pXTtlbHNle249aS5maWx0ZXJbZVthXS50eXBlXS5hcHBseShudWxsLGVbYV0ubWF0Y2hlcyk7aWYobltkXSl7cj0rK2E7Zm9yKDtyPHM7cisrKWlmKGkucmVsYXRpdmVbZVtyXS50eXBlXSlicmVhaztyZXR1cm4gY3QoYT4xJiZmdChoKSxhPjEmJmUuc2xpY2UoMCxhLTEpLmpvaW4oIiIpLnJlcGxhY2UoaiwiJDEiKSxuLGE8ciYmaHQoZS5zbGljZShhLHIpKSxyPHMmJmh0KGU9ZS5zbGljZShyKSkscjxzJiZlLmpvaW4oIiIpKX1oLnB1c2gobil9cmV0dXJuIGZ0KGgpfWZ1bmN0aW9uIHB0KGUsdCl7dmFyIHI9dC5sZW5ndGg+MCxzPWUubGVuZ3RoPjAsbz1mdW5jdGlvbih1LGEsZixsLGgpe3ZhciBwLGQsdixtPVtdLHk9MCx3PSIwIix4PXUmJltdLFQ9aCE9bnVsbCxOPWMsQz11fHxzJiZpLmZpbmQuVEFHKCIqIixoJiZhLnBhcmVudE5vZGV8fGEpLGs9Yis9Tj09bnVsbD8xOk1hdGguRTtUJiYoYz1hIT09ZyYmYSxuPW8uZWwpO2Zvcig7KHA9Q1t3XSkhPW51bGw7dysrKXtpZihzJiZwKXtmb3IoZD0wO3Y9ZVtkXTtkKyspaWYodihwLGEsZikpe2wucHVzaChwKTticmVha31UJiYoYj1rLG49KytvLmVsKX1yJiYoKHA9IXYmJnApJiZ5LS0sdSYmeC5wdXNoKHApKX15Kz13O2lmKHImJnchPT15KXtmb3IoZD0wO3Y9dFtkXTtkKyspdih4LG0sYSxmKTtpZih1KXtpZih5PjApd2hpbGUody0tKSF4W3ddJiYhbVt3XSYmKG1bd109RS5jYWxsKGwpKTttPWx0KG0pfVMuYXBwbHkobCxtKSxUJiYhdSYmbS5sZW5ndGg+MCYmeSt0Lmxlbmd0aD4xJiZudC51bmlxdWVTb3J0KGwpfXJldHVybiBUJiYoYj1rLGM9TikseH07cmV0dXJuIG8uZWw9MCxyP04obyk6b31mdW5jdGlvbiBkdChlLHQsbil7dmFyIHI9MCxpPXQubGVuZ3RoO2Zvcig7cjxpO3IrKyludChlLHRbcl0sbik7cmV0dXJuIG59ZnVuY3Rpb24gdnQoZSx0LG4scixzKXt2YXIgbyx1LGYsbCxjLGg9dXQoZSkscD1oLmxlbmd0aDtpZighciYmaC5sZW5ndGg9PT0xKXt1PWhbMF09aFswXS5zbGljZSgwKTtpZih1Lmxlbmd0aD4yJiYoZj11WzBdKS50eXBlPT09IklEIiYmdC5ub2RlVHlwZT09PTkmJiFzJiZpLnJlbGF0aXZlW3VbMV0udHlwZV0pe3Q9aS5maW5kLklEKGYubWF0Y2hlc1swXS5yZXBsYWNlKCQsIiIpLHQscylbMF07aWYoIXQpcmV0dXJuIG47ZT1lLnNsaWNlKHUuc2hpZnQoKS5sZW5ndGgpfWZvcihvPUouUE9TLnRlc3QoZSk/LTE6dS5sZW5ndGgtMTtvPj0wO28tLSl7Zj11W29dO2lmKGkucmVsYXRpdmVbbD1mLnR5cGVdKWJyZWFrO2lmKGM9aS5maW5kW2xdKWlmKHI9YyhmLm1hdGNoZXNbMF0ucmVwbGFjZSgkLCIiKSx6LnRlc3QodVswXS50eXBlKSYmdC5wYXJlbnROb2RlfHx0LHMpKXt1LnNwbGljZShvLDEpLGU9ci5sZW5ndGgmJnUuam9pbigiIik7aWYoIWUpcmV0dXJuIFMuYXBwbHkobix4LmNhbGwociwwKSksbjticmVha319fXJldHVybiBhKGUsaCkocix0LHMsbix6LnRlc3QoZSkpLG59ZnVuY3Rpb24gbXQoKXt9dmFyIG4scixpLHMsbyx1LGEsZixsLGMsaD0hMCxwPSJ1bmRlZmluZWQiLGQ9KCJzaXpjYWNoZSIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgiLiIsIiIpLG09U3RyaW5nLGc9ZS5kb2N1bWVudCx5PWcuZG9jdW1lbnRFbGVtZW50LGI9MCx3PTAsRT1bXS5wb3AsUz1bXS5wdXNoLHg9W10uc2xpY2UsVD1bXS5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDt0PG47dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxOPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbZF09dD09bnVsbHx8dCxlfSxDPWZ1bmN0aW9uKCl7dmFyIGU9e30sdD1bXTtyZXR1cm4gTihmdW5jdGlvbihuLHIpe3JldHVybiB0LnB1c2gobik+aS5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbdC5zaGlmdCgpXSxlW24rIiAiXT1yfSxlKX0saz1DKCksTD1DKCksQT1DKCksTz0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLF89TS5yZXBsYWNlKCJ3IiwidyMiKSxEPSIoWypeJHwhfl0/PSkiLFA9IlxcWyIrTysiKigiK00rIikiK08rIiooPzoiK0QrTysiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrXysiKXwpfCkiK08rIipcXF0iLEg9IjooIitNKyIpKD86XFwoKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzooPzoiK1ArIil8W146XXxcXFxcLikqfC4qKSlcXCl8KSIsQj0iOihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK08rIiooKD86LVxcZCk/XFxkKikiK08rIipcXCl8KSg/PVteLV18JCkiLGo9bmV3IFJlZ0V4cCgiXiIrTysiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitPKyIrJCIsImciKSxGPW5ldyBSZWdFeHAoIl4iK08rIiosIitPKyIqIiksST1uZXcgUmVnRXhwKCJeIitPKyIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIitPKyIqIikscT1uZXcgUmVnRXhwKEgpLFI9L14oPzojKFtcd1wtXSspfChcdyspfFwuKFtcd1wtXSspKSQvLFU9L146bm90Lyx6PS9bXHgyMFx0XHJcblxmXSpbK35dLyxXPS86bm90XCgkLyxYPS9oXGQvaSxWPS9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksJD0vXFwoPyFcXCkvZyxKPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLE5BTUU6bmV3IFJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIrTSsiKVsnXCJdP1xcXSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTS5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0gpLFBPUzpuZXcgUmVnRXhwKEIsImkiKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIrTysiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTysiKig/OihbKy1dfCkiK08rIiooXFxkKyl8KSkiK08rIipcXCl8KSIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTysiKls+K35dfCIrQiwiaSIpfSxLPWZ1bmN0aW9uKGUpe3ZhciB0PWcuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiBlKHQpfWNhdGNoKG4pe3JldHVybiExfWZpbmFsbHl7dD1udWxsfX0sUT1LKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKGcuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksRz1LKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsZS5maXJzdENoaWxkJiZ0eXBlb2YgZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PXAmJmUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIjIn0pLFk9SyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHNlbGVjdD48L3NlbGVjdD4iO3ZhciB0PXR5cGVvZiBlLmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7cmV0dXJuIHQhPT0iYm9vbGVhbiImJnQhPT0ic3RyaW5nIn0pLFo9SyhmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiIsIWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8IWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD8hMTooZS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0yKX0pLGV0PUsoZnVuY3Rpb24oZSl7ZS5pZD1kKzAsZS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrZCsiJz48L2E+PGRpdiBuYW1lPSciK2QrIic+PC9kaXY+Iix5Lmluc2VydEJlZm9yZShlLHkuZmlyc3RDaGlsZCk7dmFyIHQ9Zy5nZXRFbGVtZW50c0J5TmFtZSYmZy5nZXRFbGVtZW50c0J5TmFtZShkKS5sZW5ndGg9PT0yK2cuZ2V0RWxlbWVudHNCeU5hbWUoZCswKS5sZW5ndGg7cmV0dXJuIHI9IWcuZ2V0RWxlbWVudEJ5SWQoZCkseS5yZW1vdmVDaGlsZChlKSx0fSk7dHJ5e3guY2FsbCh5LmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2godHQpe3g9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IoO3Q9dGhpc1tlXTtlKyspbi5wdXNoKHQpO3JldHVybiBufX1udC5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG50KGUsbnVsbCxudWxsLHQpfSxudC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnQodCxudWxsLG51bGwsW2VdKS5sZW5ndGg+MH0scz1udC5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZihpPT09MXx8aT09PTl8fGk9PT0xMSl7aWYodHlwZW9mIGUudGV4dENvbnRlbnQ9PSJzdHJpbmciKXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1zKGUpfWVsc2UgaWYoaT09PTN8fGk9PT00KXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIGZvcig7dD1lW3JdO3IrKyluKz1zKHQpO3JldHVybiBufSxvPW50LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdD90Lm5vZGVOYW1lIT09IkhUTUwiOiExfSx1PW50LmNvbnRhaW5zPXkuY29udGFpbnM/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm5vZGVUeXBlPT09OT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISEociYmci5ub2RlVHlwZT09PTEmJm4uY29udGFpbnMmJm4uY29udGFpbnMocikpfTp5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJiEhKGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmMTYpfTpmdW5jdGlvbihlLHQpe3doaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxudC5hdHRyPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1vKGUpO3JldHVybiByfHwodD10LnRvTG93ZXJDYXNlKCkpLChuPWkuYXR0ckhhbmRsZVt0XSk/bihlKTpyfHxZP2UuZ2V0QXR0cmlidXRlKHQpOihuPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSxuP3R5cGVvZiBlW3RdPT0iYm9vbGVhbiI/ZVt0XT90Om51bGw6bi5zcGVjaWZpZWQ/bi52YWx1ZTpudWxsOm51bGwpfSxpPW50LnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOk4sbWF0Y2g6SixhdHRySGFuZGxlOkc/e306e2hyZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LGZpbmQ6e0lEOnI/ZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRCeUlkIT09cCYmIW4pe3ZhciByPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIHImJnIucGFyZW50Tm9kZT9bcl06W119fTpmdW5jdGlvbihlLG4scil7aWYodHlwZW9mIG4uZ2V0RWxlbWVudEJ5SWQhPT1wJiYhcil7dmFyIGk9bi5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gaT9pLmlkPT09ZXx8dHlwZW9mIGkuZ2V0QXR0cmlidXRlTm9kZSE9PXAmJmkuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZT09PWU/W2ldOnQ6W119fSxUQUc6UT9mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lIT09cClyZXR1cm4gdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKGU9PT0iKiIpe3ZhciByLGk9W10scz0wO2Zvcig7cj1uW3NdO3MrKylyLm5vZGVUeXBlPT09MSYmaS5wdXNoKHIpO3JldHVybiBpfXJldHVybiBufSxOQU1FOmV0JiZmdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlOYW1lIT09cClyZXR1cm4gdC5nZXRFbGVtZW50c0J5TmFtZShuYW1lKX0sQ0xBU1M6WiYmZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1wJiYhbilyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfX0scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKCQsIiIpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKCQsIiIpLGVbMl09PT0ifj0iJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLGVbMV09PT0ibnRoIj8oZVsyXXx8bnQuZXJyb3IoZVswXSksZVszXT0rKGVbM10/ZVs0XSsoZVs1XXx8MSk6MiooZVsyXT09PSJldmVuInx8ZVsyXT09PSJvZGQiKSksZVs0XT0rKGVbNl0rZVs3XXx8ZVsyXT09PSJvZGQiKSk6ZVsyXSYmbnQuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG47aWYoSi5DSElMRC50ZXN0KGVbMF0pKXJldHVybiBudWxsO2lmKGVbM10pZVsyXT1lWzNdO2Vsc2UgaWYodD1lWzRdKXEudGVzdCh0KSYmKG49dXQodCwhMCkpJiYobj10LmluZGV4T2YoIikiLHQubGVuZ3RoLW4pLXQubGVuZ3RoKSYmKHQ9dC5zbGljZSgwLG4pLGVbMF09ZVswXS5zbGljZSgwLG4pKSxlWzJdPXQ7cmV0dXJuIGUuc2xpY2UoMCwzKX19LGZpbHRlcjp7SUQ6cj9mdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoJCwiIiksZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKCJpZCIpPT09ZX19OmZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgkLCIiKSxmdW5jdGlvbih0KXt2YXIgbj10eXBlb2YgdC5nZXRBdHRyaWJ1dGVOb2RlIT09cCYmdC5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVlPT09ZX19LFRBRzpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSIqIj9mdW5jdGlvbigpe3JldHVybiEwfTooZT1lLnJlcGxhY2UoJCwiIikudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZX0pfSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1rW2RdW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitPKyIpIitlKyIoIitPKyJ8JCkiKSkmJmsoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KGUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1wJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLGkpe3ZhciBzPW50LmF0dHIocixlKTtyZXR1cm4gcz09bnVsbD90PT09IiE9Ijp0PyhzKz0iIix0PT09Ij0iP3M9PT1uOnQ9PT0iIT0iP3MhPT1uOnQ9PT0iXj0iP24mJnMuaW5kZXhPZihuKT09PTA6dD09PSIqPSI/biYmcy5pbmRleE9mKG4pPi0xOnQ9PT0iJD0iP24mJnMuc3Vic3RyKHMubGVuZ3RoLW4ubGVuZ3RoKT09PW46dD09PSJ+PSI/KCIgIitzKyIgIikuaW5kZXhPZihuKT4tMTp0PT09Inw9Ij9zPT09bnx8cy5zdWJzdHIoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlPT09Im50aCI/ZnVuY3Rpb24oZSl7dmFyIHQsaSxzPWUucGFyZW50Tm9kZTtpZihuPT09MSYmcj09PTApcmV0dXJuITA7aWYocyl7aT0wO2Zvcih0PXMuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZylpZih0Lm5vZGVUeXBlPT09MSl7aSsrO2lmKGU9PT10KWJyZWFrfX1yZXR1cm4gaS09cixpPT09bnx8aSVuPT09MCYmaS9uPj0wfTpmdW5jdGlvbih0KXt2YXIgbj10O3N3aXRjaChlKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKG49bi5wcmV2aW91c1NpYmxpbmcpaWYobi5ub2RlVHlwZT09PTEpcmV0dXJuITE7aWYoZT09PSJmaXJzdCIpcmV0dXJuITA7bj10O2Nhc2UibGFzdCI6d2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG4ubm9kZVR5cGU9PT0xKXJldHVybiExO3JldHVybiEwfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9aS5wc2V1ZG9zW2VdfHxpLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8bnQuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gcltkXT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxpLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9OKGZ1bmN0aW9uKGUsbil7dmFyIGkscz1yKGUsdCksbz1zLmxlbmd0aDt3aGlsZShvLS0paT1ULmNhbGwoZSxzW29dKSxlW2ldPSEobltpXT1zW29dKX0pOmZ1bmN0aW9uKGUpe3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6TihmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9YShlLnJlcGxhY2UoaiwiJDEiKSk7cmV0dXJuIHJbZF0/TihmdW5jdGlvbihlLHQsbixpKXt2YXIgcyxvPXIoZSxudWxsLGksW10pLHU9ZS5sZW5ndGg7d2hpbGUodS0tKWlmKHM9b1t1XSllW3VdPSEodFt1XT1zKX0pOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdFswXT1lLHIodCxudWxsLHMsbiksIW4ucG9wKCl9fSksaGFzOk4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOk4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8cyh0KSkuaW5kZXhPZihlKT4tMX19KSxlbmFibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09ImlucHV0IiYmISFlLmNoZWNrZWR8fHQ9PT0ib3B0aW9uIiYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4haS5wc2V1ZG9zLmVtcHR5KGUpfSxlbXB0eTpmdW5jdGlvbihlKXt2YXIgdDtlPWUuZmlyc3RDaGlsZDt3aGlsZShlKXtpZihlLm5vZGVOYW1lPiJAInx8KHQ9ZS5ub2RlVHlwZSk9PT0zfHx0PT09NClyZXR1cm4hMTtlPWUubmV4dFNpYmxpbmd9cmV0dXJuITB9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gWC50ZXN0KGUubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PWUudHlwZSk9PT0idGV4dCImJigobj1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKT09bnVsbHx8bi50b0xvd2VyQ2FzZSgpPT09dCl9LHJhZGlvOnJ0KCJyYWRpbyIpLGNoZWNrYm94OnJ0KCJjaGVja2JveCIpLGZpbGU6cnQoImZpbGUiKSxwYXNzd29yZDpydCgicGFzc3dvcmQiKSxpbWFnZTpydCgiaW1hZ2UiKSxzdWJtaXQ6aXQoInN1Ym1pdCIpLHJlc2V0Oml0KCJyZXNldCIpLGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiJiZlLnR5cGU9PT0iYnV0dG9uInx8dD09PSJidXR0b24ifSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gVi50ZXN0KGUubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQ7cmV0dXJuIGU9PT10LmFjdGl2ZUVsZW1lbnQmJighdC5oYXNGb2N1c3x8dC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sYWN0aXZlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9LGZpcnN0OnN0KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpzdChmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6c3QoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjpzdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpzdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnN0KGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOy0tcj49MDspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6c3QoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0sZj15LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PyhsPSEwLDApOighZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjQpPy0xOjF9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDtpZihlLnNvdXJjZUluZGV4JiZ0LnNvdXJjZUluZGV4KXJldHVybiBlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7dmFyIG4scixpPVtdLHM9W10sbz1lLnBhcmVudE5vZGUsdT10LnBhcmVudE5vZGUsYT1vO2lmKG89PT11KXJldHVybiBvdChlLHQpO2lmKCFvKXJldHVybi0xO2lmKCF1KXJldHVybiAxO3doaWxlKGEpaS51bnNoaWZ0KGEpLGE9YS5wYXJlbnROb2RlO2E9dTt3aGlsZShhKXMudW5zaGlmdChhKSxhPWEucGFyZW50Tm9kZTtuPWkubGVuZ3RoLHI9cy5sZW5ndGg7Zm9yKHZhciBmPTA7ZjxuJiZmPHI7ZisrKWlmKGlbZl0hPT1zW2ZdKXJldHVybiBvdChpW2ZdLHNbZl0pO3JldHVybiBmPT09bj9vdChlLHNbZl0sLTEpOm90KGlbZl0sdCwxKX0sWzAsMF0uc29ydChmKSxoPSFsLG50LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTEsaT0wO2w9aCxlLnNvcnQoZik7aWYobCl7Zm9yKDt0PWVbcl07cisrKXQ9PT1lW3ItMV0mJihpPW4ucHVzaChyKSk7d2hpbGUoaS0tKWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIGV9LG50LmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sYT1udC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLHM9QVtkXVtlKyIgIl07aWYoIXMpe3R8fCh0PXV0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlzPWh0KHRbbl0pLHNbZF0/ci5wdXNoKHMpOmkucHVzaChzKTtzPUEoZSxwdChpLHIpKX1yZXR1cm4gc30sZy5xdWVyeVNlbGVjdG9yQWxsJiZmdW5jdGlvbigpe3ZhciBlLHQ9dnQsbj0vJ3xcXC9nLHI9L1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxdL2csaT1bIjpmb2N1cyJdLHM9WyI6YWN0aXZlIl0sdT15Lm1hdGNoZXNTZWxlY3Rvcnx8eS5tb3pNYXRjaGVzU2VsZWN0b3J8fHkud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHx5Lm9NYXRjaGVzU2VsZWN0b3J8fHkubXNNYXRjaGVzU2VsZWN0b3I7SyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxpLnB1c2goIlxcWyIrTysiKig/OmNoZWNrZWR8ZGlzYWJsZWR8aXNtYXB8bXVsdGlwbGV8cmVhZG9ubHl8c2VsZWN0ZWR8dmFsdWUpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8aS5wdXNoKCI6Y2hlY2tlZCIpfSksSyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHAgdGVzdD0nJz48L3A+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0ZXN0Xj0nJ10iKS5sZW5ndGgmJmkucHVzaCgiWypeJF09IitPKyIqKD86XCJcInwnJykiKSxlLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J2hpZGRlbicvPiIsZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8aS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpfSksaT1uZXcgUmVnRXhwKGkuam9pbigifCIpKSx2dD1mdW5jdGlvbihlLHIscyxvLHUpe2lmKCFvJiYhdSYmIWkudGVzdChlKSl7dmFyIGEsZixsPSEwLGM9ZCxoPXIscD1yLm5vZGVUeXBlPT09OSYmZTtpZihyLm5vZGVUeXBlPT09MSYmci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe2E9dXQoZSksKGw9ci5nZXRBdHRyaWJ1dGUoImlkIikpP2M9bC5yZXBsYWNlKG4sIlxcJCYiKTpyLnNldEF0dHJpYnV0ZSgiaWQiLGMpLGM9IltpZD0nIitjKyInXSAiLGY9YS5sZW5ndGg7d2hpbGUoZi0tKWFbZl09YythW2ZdLmpvaW4oIiIpO2g9ei50ZXN0KGUpJiZyLnBhcmVudE5vZGV8fHIscD1hLmpvaW4oIiwiKX1pZihwKXRyeXtyZXR1cm4gUy5hcHBseShzLHguY2FsbChoLnF1ZXJ5U2VsZWN0b3JBbGwocCksMCkpLHN9Y2F0Y2godil7fWZpbmFsbHl7bHx8ci5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fXJldHVybiB0KGUscixzLG8sdSl9LHUmJihLKGZ1bmN0aW9uKHQpe2U9dS5jYWxsKHQsImRpdiIpO3RyeXt1LmNhbGwodCwiW3Rlc3QhPScnXTpzaXp6bGUiKSxzLnB1c2goIiE9IixIKX1jYXRjaChuKXt9fSkscz1uZXcgUmVnRXhwKHMuam9pbigifCIpKSxudC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24odCxuKXtuPW4ucmVwbGFjZShyLCI9JyQxJ10iKTtpZighbyh0KSYmIXMudGVzdChuKSYmIWkudGVzdChuKSl0cnl7dmFyIGE9dS5jYWxsKHQsbik7aWYoYXx8ZXx8dC5kb2N1bWVudCYmdC5kb2N1bWVudC5ub2RlVHlwZSE9PTExKXJldHVybiBhfWNhdGNoKGYpe31yZXR1cm4gbnQobixudWxsLG51bGwsW3RdKS5sZW5ndGg+MH0pfSgpLGkucHNldWRvcy5udGg9aS5wc2V1ZG9zLmVxLGkuZmlsdGVycz1tdC5wcm90b3R5cGU9aS5wc2V1ZG9zLGkuc2V0RmlsdGVycz1uZXcgbXQsbnQuYXR0cj12LmF0dHIsdi5maW5kPW50LHYuZXhwcj1udC5zZWxlY3RvcnMsdi5leHByWyI6Il09di5leHByLnBzZXVkb3Msdi51bmlxdWU9bnQudW5pcXVlU29ydCx2LnRleHQ9bnQuZ2V0VGV4dCx2LmlzWE1MRG9jPW50LmlzWE1MLHYuY29udGFpbnM9bnQuY29udGFpbnN9KGUpO3ZhciBudD0vVW50aWwkLyxydD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxpdD0vXi5bXjojXFtcLixdKiQvLHN0PXYuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsb3Q9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07di5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGkscyxvLHU9dGhpcztpZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIHYoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MCxuPXUubGVuZ3RoO3Q8bjt0KyspaWYodi5jb250YWlucyh1W3RdLHRoaXMpKXJldHVybiEwfSk7bz10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsZSk7Zm9yKHQ9MCxuPXRoaXMubGVuZ3RoO3Q8bjt0Kyspe3I9by5sZW5ndGgsdi5maW5kKGUsdGhpc1t0XSxvKTtpZih0PjApZm9yKGk9cjtpPG8ubGVuZ3RoO2krKylmb3Iocz0wO3M8cjtzKyspaWYob1tzXT09PW9baV0pe28uc3BsaWNlKGktLSwxKTticmVha319cmV0dXJuIG99LGhhczpmdW5jdGlvbihlKXt2YXIgdCxuPXYoZSx0aGlzKSxyPW4ubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZih2LmNvbnRhaW5zKHRoaXMsblt0XSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLGUsITEpLCJub3QiLGUpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsZSwhMCksImZpbHRlciIsZSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhZSYmKHR5cGVvZiBlPT0ic3RyaW5nIj9zdC50ZXN0KGUpP3YoZSx0aGlzLmNvbnRleHQpLmluZGV4KHRoaXNbMF0pPj0wOnYuZmlsdGVyKGUsdGhpcykubGVuZ3RoPjA6dGhpcy5maWx0ZXIoZSkubGVuZ3RoPjApfSxjbG9zZXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wLGk9dGhpcy5sZW5ndGgscz1bXSxvPXN0LnRlc3QoZSl8fHR5cGVvZiBlIT0ic3RyaW5nIj92KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7cjxpO3IrKyl7bj10aGlzW3JdO3doaWxlKG4mJm4ub3duZXJEb2N1bWVudCYmbiE9PXQmJm4ubm9kZVR5cGUhPT0xMSl7aWYobz9vLmluZGV4KG4pPi0xOnYuZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSl7cy5wdXNoKG4pO2JyZWFrfW49bi5wYXJlbnROb2RlfX1yZXR1cm4gcz1zLmxlbmd0aD4xP3YudW5pcXVlKHMpOnMsdGhpcy5wdXNoU3RhY2socywiY2xvc2VzdCIsZSl9LGluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlP3R5cGVvZiBlPT0ic3RyaW5nIj92LmluQXJyYXkodGhpc1swXSx2KGUpKTp2LmluQXJyYXkoZS5qcXVlcnk/ZVswXTplLHRoaXMpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlPT0ic3RyaW5nIj92KGUsdCk6di5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj12Lm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHV0KG5bMF0pfHx1dChyWzBdKT9yOnYudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQoZT09bnVsbD90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksdi5mbi5hbmRTZWxmPXYuZm4uYWRkQmFjayx2LmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQubm9kZVR5cGUhPT0xMT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZGlyKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5kaXIoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGF0KGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIGF0KGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB2LmRpcihlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB2LmRpcihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5kaXIoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRpcihlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gdi5zaWJsaW5nKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gdi5zaWJsaW5nKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB2Lm5vZGVOYW1lKGUsImlmcmFtZSIpP2UuY29udGVudERvY3VtZW50fHxlLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6di5tZXJnZShbXSxlLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oZSx0KXt2LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9di5tYXAodGhpcyx0LG4pO3JldHVybiBudC50ZXN0KGUpfHwocj1uKSxyJiZ0eXBlb2Ygcj09InN0cmluZyImJihpPXYuZmlsdGVyKHIsaSkpLGk9dGhpcy5sZW5ndGg+MSYmIW90W2VdP3YudW5pcXVlKGkpOmksdGhpcy5sZW5ndGg+MSYmcnQudGVzdChlKSYmKGk9aS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGksZSxsLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfX0pLHYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSx0Lmxlbmd0aD09PTE/di5maW5kLm1hdGNoZXNTZWxlY3Rvcih0WzBdLGUpP1t0WzBdXTpbXTp2LmZpbmQubWF0Y2hlcyhlLHQpfSxkaXI6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPVtdLHM9ZVtuXTt3aGlsZShzJiZzLm5vZGVUeXBlIT09OSYmKHI9PT10fHxzLm5vZGVUeXBlIT09MXx8IXYocykuaXMocikpKXMubm9kZVR5cGU9PT0xJiZpLnB1c2gocykscz1zW25dO3JldHVybiBpfSxzaWJsaW5nOmZ1bmN0aW9uKGUsdCl7dmFyIG49W107Zm9yKDtlO2U9ZS5uZXh0U2libGluZyllLm5vZGVUeXBlPT09MSYmZSE9PXQmJm4ucHVzaChlKTtyZXR1cm4gbn19KTt2YXIgY3Q9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGh0PS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2cscHQ9L15ccysvLGR0PS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksdnQ9LzwoW1x3Ol0rKS8sbXQ9Lzx0Ym9keS9pLGd0PS88fCYjP1x3KzsvLHl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksYnQ9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSx3dD1uZXcgUmVnRXhwKCI8KD86IitjdCsiKVtcXHMvPl0iLCJpIiksRXQ9L14oPzpjaGVja2JveHxyYWRpbykkLyxTdD0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSx4dD0vXC8oamF2YXxlY21hKXNjcmlwdC9pLFR0PS9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9PlxzKiQvZyxOdD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfSxDdD1sdChpKSxrdD1DdC5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtOdC5vcHRncm91cD1OdC5vcHRpb24sTnQudGJvZHk9TnQudGZvb3Q9TnQuY29sZ3JvdXA9TnQuY2FwdGlvbj1OdC50aGVhZCxOdC50aD1OdC50ZCx2LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KE50Ll9kZWZhdWx0PVsxLCJYPGRpdj4iLCI8L2Rpdj4iXSksdi5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P3YudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGkpLmNyZWF0ZVRleHROb2RlKGUpKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSx3cmFwQWxsOmZ1bmN0aW9uKGUpe2lmKHYuaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3YodGhpcykud3JhcEFsbChlLmNhbGwodGhpcyx0KSl9KTtpZih0aGlzWzBdKXt2YXIgdD12KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdENoaWxkJiZlLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWU9ZS5maXJzdENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dih0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD12LmlzRnVuY3Rpb24oZSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt2KHRoaXMpLndyYXBBbGwodD9lLmNhbGwodGhpcyxuKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7di5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fHYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oZSl7KHRoaXMubm9kZVR5cGU9PT0xfHx0aGlzLm5vZGVUeXBlPT09MTEpJiZ0aGlzLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oZSl7KHRoaXMubm9kZVR5cGU9PT0xfHx0aGlzLm5vZGVUeXBlPT09MTEpJiZ0aGlzLmluc2VydEJlZm9yZShlLHRoaXMuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9uKCl7aWYoIXV0KHRoaXNbMF0pKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgZT12LmNsZWFuKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWVyZ2UoZSx0aGlzKSwiYmVmb3JlIix0aGlzLnNlbGVjdG9yKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYoIXV0KHRoaXNbMF0pKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgZT12LmNsZWFuKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWVyZ2UodGhpcyxlKSwiYWZ0ZXIiLHRoaXMuc2VsZWN0b3IpfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2Zvcig7KG49dGhpc1tyXSkhPW51bGw7cisrKWlmKCFlfHx2LmZpbHRlcihlLFtuXSkubGVuZ3RoKSF0JiZuLm5vZGVUeXBlPT09MSYmKHYuY2xlYW5EYXRhKG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksdi5jbGVhbkRhdGEoW25dKSksbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobik7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Zvcig7KGU9dGhpc1t0XSkhPW51bGw7dCsrKXtlLm5vZGVUeXBlPT09MSYmdi5jbGVhbkRhdGEoZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTt3aGlsZShlLmZpcnN0Q2hpbGQpZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPWU9PW51bGw/ITE6ZSx0PXQ9PW51bGw/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHYuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7dmFyIG49dGhpc1swXXx8e30scj0wLGk9dGhpcy5sZW5ndGg7aWYoZT09PXQpcmV0dXJuIG4ubm9kZVR5cGU9PT0xP24uaW5uZXJIVE1MLnJlcGxhY2UoaHQsIiIpOnQ7aWYodHlwZW9mIGU9PSJzdHJpbmciJiYheXQudGVzdChlKSYmKHYuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwhd3QudGVzdChlKSkmJih2LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFwdC50ZXN0KGUpKSYmIU50Wyh2dC5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1lLnJlcGxhY2UoZHQsIjwkMT48LyQyPiIpO3RyeXtmb3IoO3I8aTtyKyspbj10aGlzW3JdfHx7fSxuLm5vZGVUeXBlPT09MSYmKHYuY2xlYW5EYXRhKG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksbi5pbm5lckhUTUw9ZSk7bj0wfWNhdGNoKHMpe319biYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihlKXtyZXR1cm4gdXQodGhpc1swXSk/dGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2sodih2LmlzRnVuY3Rpb24oZSk/ZSgpOmUpLCJyZXBsYWNlV2l0aCIsZSk6dGhpczp2LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXYodGhpcykscj1uLmh0bWwoKTtuLnJlcGxhY2VXaXRoKGUuY2FsbCh0aGlzLHQscikpfSk6KHR5cGVvZiBlIT0ic3RyaW5nIiYmKGU9dihlKS5kZXRhY2goKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0U2libGluZyxuPXRoaXMucGFyZW50Tm9kZTt2KHRoaXMpLnJlbW92ZSgpLHQ/dih0KS5iZWZvcmUoZSk6dihuKS5hcHBlbmQoZSl9KSl9LGRldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZW1vdmUoZSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGUsbixyKXtlPVtdLmNvbmNhdC5hcHBseShbXSxlKTt2YXIgaSxzLG8sdSxhPTAsZj1lWzBdLGw9W10sYz10aGlzLmxlbmd0aDtpZighdi5zdXBwb3J0LmNoZWNrQ2xvbmUmJmM+MSYmdHlwZW9mIGY9PSJzdHJpbmciJiZTdC50ZXN0KGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2KHRoaXMpLmRvbU1hbmlwKGUsbixyKX0pO2lmKHYuaXNGdW5jdGlvbihmKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPXYodGhpcyk7ZVswXT1mLmNhbGwodGhpcyxpLG4/cy5odG1sKCk6dCkscy5kb21NYW5pcChlLG4scil9KTtpZih0aGlzWzBdKXtpPXYuYnVpbGRGcmFnbWVudChlLHRoaXMsbCksbz1pLmZyYWdtZW50LHM9by5maXJzdENoaWxkLG8uY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiYobz1zKTtpZihzKXtuPW4mJnYubm9kZU5hbWUocywidHIiKTtmb3IodT1pLmNhY2hlYWJsZXx8Yy0xO2E8YzthKyspci5jYWxsKG4mJnYubm9kZU5hbWUodGhpc1thXSwidGFibGUiKT9MdCh0aGlzW2FdLCJ0Ym9keSIpOnRoaXNbYV0sYT09PXU/bzp2LmNsb25lKG8sITAsITApKX1vPXM9bnVsbCxsLmxlbmd0aCYmdi5lYWNoKGwsZnVuY3Rpb24oZSx0KXt0LnNyYz92LmFqYXg/di5hamF4KHt1cmw6dC5zcmMsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KTp2LmVycm9yKCJubyBhamF4Iik6di5nbG9iYWxFdmFsKCh0LnRleHR8fHQudGV4dENvbnRlbnR8fHQuaW5uZXJIVE1MfHwiIikucmVwbGFjZShUdCwiIikpLHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSl9cmV0dXJuIHRoaXN9fSksdi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLHUsYT1lWzBdO3JldHVybiBuPW58fGksbj0hbi5ub2RlVHlwZSYmblswXXx8bixuPW4ub3duZXJEb2N1bWVudHx8bixlLmxlbmd0aD09PTEmJnR5cGVvZiBhPT0ic3RyaW5nIiYmYS5sZW5ndGg8NTEyJiZuPT09aSYmYS5jaGFyQXQoMCk9PT0iPCImJiFidC50ZXN0KGEpJiYodi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFTdC50ZXN0KGEpKSYmKHYuc3VwcG9ydC5odG1sNUNsb25lfHwhd3QudGVzdChhKSkmJihvPSEwLHM9di5mcmFnbWVudHNbYV0sdT1zIT09dCksc3x8KHM9bi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksdi5jbGVhbihlLG4scyxyKSxvJiYodi5mcmFnbWVudHNbYV09dSYmcykpLHtmcmFnbWVudDpzLGNhY2hlYWJsZTpvfX0sdi5mcmFnbWVudHM9e30sdi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt2LmZuW2VdPWZ1bmN0aW9uKG4pe3ZhciByLGk9MCxzPVtdLG89dihuKSx1PW8ubGVuZ3RoLGE9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoKGE9PW51bGx8fGEmJmEubm9kZVR5cGU9PT0xMSYmYS5jaGlsZE5vZGVzLmxlbmd0aD09PTEpJiZ1PT09MSlyZXR1cm4gb1t0XSh0aGlzWzBdKSx0aGlzO2Zvcig7aTx1O2krKylyPShpPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCksdihvW2ldKVt0XShyKSxzPXMuY29uY2F0KHIpO3JldHVybiB0aGlzLnB1c2hTdGFjayhzLGUsby5zZWxlY3Rvcil9fSksdi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHMsbzt2LnN1cHBvcnQuaHRtbDVDbG9uZXx8di5pc1hNTERvYyhlKXx8IXd0LnRlc3QoIjwiK2Uubm9kZU5hbWUrIj4iKT9vPWUuY2xvbmVOb2RlKCEwKTooa3QuaW5uZXJIVE1MPWUub3V0ZXJIVE1MLGt0LnJlbW92ZUNoaWxkKG89a3QuZmlyc3RDaGlsZCkpO2lmKCghdi5zdXBwb3J0Lm5vQ2xvbmVFdmVudHx8IXYuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTExKSYmIXYuaXNYTUxEb2MoZSkpe090KGUsbykscj1NdChlKSxpPU10KG8pO2ZvcihzPTA7cltzXTsrK3MpaVtzXSYmT3QocltzXSxpW3NdKX1pZih0KXtBdChlLG8pO2lmKG4pe3I9TXQoZSksaT1NdChvKTtmb3Iocz0wO3Jbc107KytzKUF0KHJbc10saVtzXSl9fXJldHVybiByPWk9bnVsbCxvfSxjbGVhbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgcyxvLHUsYSxmLGwsYyxoLHAsZCxtLGcseT10PT09aSYmQ3QsYj1bXTtpZighdHx8dHlwZW9mIHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD09InVuZGVmaW5lZCIpdD1pO2ZvcihzPTA7KHU9ZVtzXSkhPW51bGw7cysrKXt0eXBlb2YgdT09Im51bWJlciImJih1Kz0iIik7aWYoIXUpY29udGludWU7aWYodHlwZW9mIHU9PSJzdHJpbmciKWlmKCFndC50ZXN0KHUpKXU9dC5jcmVhdGVUZXh0Tm9kZSh1KTtlbHNle3k9eXx8bHQodCksYz10LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHkuYXBwZW5kQ2hpbGQoYyksdT11LnJlcGxhY2UoZHQsIjwkMT48LyQyPiIpLGE9KHZ0LmV4ZWModSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksZj1OdFthXXx8TnQuX2RlZmF1bHQsbD1mWzBdLGMuaW5uZXJIVE1MPWZbMV0rdStmWzJdO3doaWxlKGwtLSljPWMubGFzdENoaWxkO2lmKCF2LnN1cHBvcnQudGJvZHkpe2g9bXQudGVzdCh1KSxwPWE9PT0idGFibGUiJiYhaD9jLmZpcnN0Q2hpbGQmJmMuZmlyc3RDaGlsZC5jaGlsZE5vZGVzOmZbMV09PT0iPHRhYmxlPiImJiFoP2MuY2hpbGROb2RlczpbXTtmb3Iobz1wLmxlbmd0aC0xO28+PTA7LS1vKXYubm9kZU5hbWUocFtvXSwidGJvZHkiKSYmIXBbb10uY2hpbGROb2Rlcy5sZW5ndGgmJnBbb10ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwW29dKX0hdi5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZwdC50ZXN0KHUpJiZjLmluc2VydEJlZm9yZSh0LmNyZWF0ZVRleHROb2RlKHB0LmV4ZWModSlbMF0pLGMuZmlyc3RDaGlsZCksdT1jLmNoaWxkTm9kZXMsYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpfXUubm9kZVR5cGU/Yi5wdXNoKHUpOnYubWVyZ2UoYix1KX1jJiYodT1jPXk9bnVsbCk7aWYoIXYuc3VwcG9ydC5hcHBlbmRDaGVja2VkKWZvcihzPTA7KHU9YltzXSkhPW51bGw7cysrKXYubm9kZU5hbWUodSwiaW5wdXQiKT9fdCh1KTp0eXBlb2YgdS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJnYuZ3JlcCh1LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLF90KTtpZihuKXttPWZ1bmN0aW9uKGUpe2lmKCFlLnR5cGV8fHh0LnRlc3QoZS50eXBlKSlyZXR1cm4gcj9yLnB1c2goZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTplKTpuLmFwcGVuZENoaWxkKGUpfTtmb3Iocz0wOyh1PWJbc10pIT1udWxsO3MrKylpZighdi5ub2RlTmFtZSh1LCJzY3JpcHQiKXx8IW0odSkpbi5hcHBlbmRDaGlsZCh1KSx0eXBlb2YgdS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJihnPXYuZ3JlcCh2Lm1lcmdlKFtdLHUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSxtKSxiLnNwbGljZS5hcHBseShiLFtzKzEsMF0uY29uY2F0KGcpKSxzKz1nLmxlbmd0aCl9cmV0dXJuIGJ9LGNsZWFuRGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89MCx1PXYuZXhwYW5kbyxhPXYuY2FjaGUsZj12LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyxsPXYuZXZlbnQuc3BlY2lhbDtmb3IoOyhpPWVbb10pIT1udWxsO28rKylpZih0fHx2LmFjY2VwdERhdGEoaSkpe3I9aVt1XSxuPXImJmFbcl07aWYobil7aWYobi5ldmVudHMpZm9yKHMgaW4gbi5ldmVudHMpbFtzXT92LmV2ZW50LnJlbW92ZShpLHMpOnYucmVtb3ZlRXZlbnQoaSxzLG4uaGFuZGxlKTthW3JdJiYoZGVsZXRlIGFbcl0sZj9kZWxldGUgaVt1XTppLnJlbW92ZUF0dHJpYnV0ZT9pLnJlbW92ZUF0dHJpYnV0ZSh1KTppW3VdPW51bGwsdi5kZWxldGVkSWRzLnB1c2gocikpfX19fSksZnVuY3Rpb24oKXt2YXIgZSx0O3YudWFNYXRjaD1mdW5jdGlvbihlKXtlPWUudG9Mb3dlckNhc2UoKTt2YXIgdD0vKGNocm9tZSlbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpWyBcL10oW1x3Ll0rKS8uZXhlYyhlKXx8Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyhlKXx8ZS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmLyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKGUpfHxbXTtyZXR1cm57YnJvd3Nlcjp0WzFdfHwiIix2ZXJzaW9uOnRbMl18fCIwIn19LGU9di51YU1hdGNoKG8udXNlckFnZW50KSx0PXt9LGUuYnJvd3NlciYmKHRbZS5icm93c2VyXT0hMCx0LnZlcnNpb249ZS52ZXJzaW9uKSx0LmNocm9tZT90LndlYmtpdD0hMDp0LndlYmtpdCYmKHQuc2FmYXJpPSEwKSx2LmJyb3dzZXI9dCx2LnN1Yj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXtyZXR1cm4gbmV3IGUuZm4uaW5pdCh0LG4pfXYuZXh0ZW5kKCEwLGUsdGhpcyksZS5zdXBlcmNsYXNzPXRoaXMsZS5mbj1lLnByb3RvdHlwZT10aGlzKCksZS5mbi5jb25zdHJ1Y3Rvcj1lLGUuc3ViPXRoaXMuc3ViLGUuZm4uaW5pdD1mdW5jdGlvbihyLGkpe3JldHVybiBpJiZpIGluc3RhbmNlb2YgdiYmIShpIGluc3RhbmNlb2YgZSkmJihpPWUoaSkpLHYuZm4uaW5pdC5jYWxsKHRoaXMscixpLHQpfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm47dmFyIHQ9ZShpKTtyZXR1cm4gZX19KCk7dmFyIER0LFB0LEh0LEJ0PS9hbHBoYVwoW14pXSpcKS9pLGp0PS9vcGFjaXR5PShbXildKikvLEZ0PS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLyxJdD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8scXQ9L15tYXJnaW4vLFJ0PW5ldyBSZWdFeHAoIl4oIittKyIpKC4qKSQiLCJpIiksVXQ9bmV3IFJlZ0V4cCgiXigiK20rIikoPyFweClbYS16JV0rJCIsImkiKSx6dD1uZXcgUmVnRXhwKCJeKFstK10pPSgiK20rIikiLCJpIiksV3Q9e0JPRFk6ImJsb2NrIn0sWHQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFZ0PXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LCR0PVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sSnQ9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXSxLdD12LmZuLnRvZ2dsZTt2LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxuLHIpe3JldHVybiByIT09dD92LnN0eWxlKGUsbixyKTp2LmNzcyhlLG4pfSxlLG4sYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBZdCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBZdCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU9PSJib29sZWFuIjtyZXR1cm4gdi5pc0Z1bmN0aW9uKGUpJiZ2LmlzRnVuY3Rpb24odCk/S3QuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuZWFjaChmdW5jdGlvbigpeyhuP2U6R3QodGhpcykpP3YodGhpcykuc2hvdygpOnYodGhpcykuaGlkZSgpfSl9fSksdi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1EdChlLCJvcGFjaXR5Iik7cmV0dXJuIG49PT0iIj8iMSI6bn19fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6di5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlLG4scixpKXtpZighZXx8ZS5ub2RlVHlwZT09PTN8fGUubm9kZVR5cGU9PT04fHwhZS5zdHlsZSlyZXR1cm47dmFyIHMsbyx1LGE9di5jYW1lbENhc2UobiksZj1lLnN0eWxlO249di5jc3NQcm9wc1thXXx8KHYuY3NzUHJvcHNbYV09UXQoZixhKSksdT12LmNzc0hvb2tzW25dfHx2LmNzc0hvb2tzW2FdO2lmKHI9PT10KXJldHVybiB1JiYiZ2V0ImluIHUmJihzPXUuZ2V0KGUsITEsaSkpIT09dD9zOmZbbl07bz10eXBlb2YgcixvPT09InN0cmluZyImJihzPXp0LmV4ZWMocikpJiYocj0oc1sxXSsxKSpzWzJdK3BhcnNlRmxvYXQodi5jc3MoZSxuKSksbz0ibnVtYmVyIik7aWYocj09bnVsbHx8bz09PSJudW1iZXIiJiZpc05hTihyKSlyZXR1cm47bz09PSJudW1iZXIiJiYhdi5jc3NOdW1iZXJbYV0mJihyKz0icHgiKTtpZighdXx8ISgic2V0ImluIHUpfHwocj11LnNldChlLHIsaSkpIT09dCl0cnl7ZltuXT1yfWNhdGNoKGwpe319LGNzczpmdW5jdGlvbihlLG4scixpKXt2YXIgcyxvLHUsYT12LmNhbWVsQ2FzZShuKTtyZXR1cm4gbj12LmNzc1Byb3BzW2FdfHwodi5jc3NQcm9wc1thXT1RdChlLnN0eWxlLGEpKSx1PXYuY3NzSG9va3Nbbl18fHYuY3NzSG9va3NbYV0sdSYmImdldCJpbiB1JiYocz11LmdldChlLCEwLGkpKSxzPT09dCYmKHM9RHQoZSxuKSkscz09PSJub3JtYWwiJiZuIGluIFZ0JiYocz1WdFtuXSkscnx8aSE9PXQ/KG89cGFyc2VGbG9hdChzKSxyfHx2LmlzTnVtZXJpYyhvKT9vfHwwOnMpOnN9LHN3YXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscz17fTtmb3IoaSBpbiB0KXNbaV09ZS5zdHlsZVtpXSxlLnN0eWxlW2ldPXRbaV07cj1uLmNhbGwoZSk7Zm9yKGkgaW4gdCllLnN0eWxlW2ldPXNbaV07cmV0dXJuIHJ9fSksZS5nZXRDb21wdXRlZFN0eWxlP0R0PWZ1bmN0aW9uKHQsbil7dmFyIHIsaSxzLG8sdT1lLmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxhPXQuc3R5bGU7cmV0dXJuIHUmJihyPXUuZ2V0UHJvcGVydHlWYWx1ZShuKXx8dVtuXSxyPT09IiImJiF2LmNvbnRhaW5zKHQub3duZXJEb2N1bWVudCx0KSYmKHI9di5zdHlsZSh0LG4pKSxVdC50ZXN0KHIpJiZxdC50ZXN0KG4pJiYoaT1hLndpZHRoLHM9YS5taW5XaWR0aCxvPWEubWF4V2lkdGgsYS5taW5XaWR0aD1hLm1heFdpZHRoPWEud2lkdGg9cixyPXUud2lkdGgsYS53aWR0aD1pLGEubWluV2lkdGg9cyxhLm1heFdpZHRoPW8pKSxyfTppLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihEdD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLmN1cnJlbnRTdHlsZSYmZS5jdXJyZW50U3R5bGVbdF0scz1lLnN0eWxlO3JldHVybiBpPT1udWxsJiZzJiZzW3RdJiYoaT1zW3RdKSxVdC50ZXN0KGkpJiYhRnQudGVzdCh0KSYmKG49cy5sZWZ0LHI9ZS5ydW50aW1lU3R5bGUmJmUucnVudGltZVN0eWxlLmxlZnQsciYmKGUucnVudGltZVN0eWxlLmxlZnQ9ZS5jdXJyZW50U3R5bGUubGVmdCkscy5sZWZ0PXQ9PT0iZm9udFNpemUiPyIxZW0iOmksaT1zLnBpeGVsTGVmdCsicHgiLHMubGVmdD1uLHImJihlLnJ1bnRpbWVTdHlsZS5sZWZ0PXIpKSxpPT09IiI/ImF1dG8iOml9KSx2LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsdCl7di5jc3NIb29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUsbixyKXtpZihuKXJldHVybiBlLm9mZnNldFdpZHRoPT09MCYmSXQudGVzdChEdChlLCJkaXNwbGF5IikpP3Yuc3dhcChlLFh0LGZ1bmN0aW9uKCl7cmV0dXJuIHRuKGUsdCxyKX0pOnRuKGUsdCxyKX0sc2V0OmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gWnQoZSxuLHI/ZW4oZSx0LHIsdi5zdXBwb3J0LmJveFNpemluZyYmdi5jc3MoZSwiYm94U2l6aW5nIik9PT0iYm9yZGVyLWJveCIpOjApfX19KSx2LnN1cHBvcnQub3BhY2l0eXx8KHYuY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGp0LnRlc3QoKHQmJmUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlLmZpbHRlcjplLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOnQ/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0eWxlLHI9ZS5jdXJyZW50U3R5bGUsaT12LmlzTnVtZXJpYyh0KT8iYWxwaGEob3BhY2l0eT0iK3QqMTAwKyIpIjoiIixzPXImJnIuZmlsdGVyfHxuLmZpbHRlcnx8IiI7bi56b29tPTE7aWYodD49MSYmdi50cmltKHMucmVwbGFjZShCdCwiIikpPT09IiImJm4ucmVtb3ZlQXR0cmlidXRlKXtuLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYociYmIXIuZmlsdGVyKXJldHVybn1uLmZpbHRlcj1CdC50ZXN0KHMpP3MucmVwbGFjZShCdCxpKTpzKyIgIitpfX0pLHYoZnVuY3Rpb24oKXt2LnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KHYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihlLHQpe3JldHVybiB2LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sZnVuY3Rpb24oKXtpZih0KXJldHVybiBEdChlLCJtYXJnaW5SaWdodCIpfSl9fSksIXYuc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ2LmZuLnBvc2l0aW9uJiZ2LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXt2LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuKXtpZihuKXt2YXIgcj1EdChlLHQpO3JldHVybiBVdC50ZXN0KHIpP3YoZSkucG9zaXRpb24oKVt0XSsicHgiOnJ9fX19KX0pLHYuZXhwciYmdi5leHByLmZpbHRlcnMmJih2LmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUub2Zmc2V0V2lkdGg9PT0wJiZlLm9mZnNldEhlaWdodD09PTB8fCF2LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoZS5zdHlsZSYmZS5zdHlsZS5kaXNwbGF5fHxEdChlLCJkaXNwbGF5IikpPT09Im5vbmUifSx2LmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiF2LmV4cHIuZmlsdGVycy5oaWRkZW4oZSl9KSx2LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe3YuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe3ZhciByLGk9dHlwZW9mIG49PSJzdHJpbmciP24uc3BsaXQoIiAiKTpbbl0scz17fTtmb3Iocj0wO3I8NDtyKyspc1tlKyR0W3JdK3RdPWlbcl18fGlbci0yXXx8aVswXTtyZXR1cm4gc319LHF0LnRlc3QoZSl8fCh2LmNzc0hvb2tzW2UrdF0uc2V0PVp0KX0pO3ZhciBybj0vJTIwL2csc249L1xbXF0kLyxvbj0vXHI/XG4vZyx1bj0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYW49L14oPzpzZWxlY3R8dGV4dGFyZWEpL2k7di5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB2LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudHM/di5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5jaGVja2VkfHxhbi50ZXN0KHRoaXMubm9kZU5hbWUpfHx1bi50ZXN0KHRoaXMudHlwZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49dih0aGlzKS52YWwoKTtyZXR1cm4gbj09bnVsbD9udWxsOnYuaXNBcnJheShuKT92Lm1hcChuLGZ1bmN0aW9uKGUsbil7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShvbiwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2Uob24sIlxyXG4iKX19KS5nZXQoKX19KSx2LnBhcmFtPWZ1bmN0aW9uKGUsbil7dmFyIHIsaT1bXSxzPWZ1bmN0aW9uKGUsdCl7dD12LmlzRnVuY3Rpb24odCk/dCgpOnQ9PW51bGw/IiI6dCxpW2kubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KX07bj09PXQmJihuPXYuYWpheFNldHRpbmdzJiZ2LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7aWYodi5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIXYuaXNQbGFpbk9iamVjdChlKSl2LmVhY2goZSxmdW5jdGlvbigpe3ModGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IociBpbiBlKWZuKHIsZVtyXSxuLHMpO3JldHVybiBpLmpvaW4oIiYiKS5yZXBsYWNlKHJuLCIrIil9O3ZhciBsbixjbixobj0vIy4qJC8scG49L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxkbj0vXig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLHZuPS9eKD86R0VUfEhFQUQpJC8sbW49L15cL1wvLyxnbj0vXD8vLHluPS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLGJuPS8oWz8mXSlfPVteJl0qLyx3bj0vXihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sRW49di5mbi5sb2FkLFNuPXt9LHhuPXt9LFRuPVsiKi8iXStbIioiXTt0cnl7Y249cy5ocmVmfWNhdGNoKE5uKXtjbj1pLmNyZWF0ZUVsZW1lbnQoImEiKSxjbi5ocmVmPSIiLGNuPWNuLmhyZWZ9bG49d24uZXhlYyhjbi50b0xvd2VyQ2FzZSgpKXx8W10sdi5mbi5sb2FkPWZ1bmN0aW9uKGUsbixyKXtpZih0eXBlb2YgZSE9InN0cmluZyImJkVuKXJldHVybiBFbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBpLHMsbyx1PXRoaXMsYT1lLmluZGV4T2YoIiAiKTtyZXR1cm4gYT49MCYmKGk9ZS5zbGljZShhLGUubGVuZ3RoKSxlPWUuc2xpY2UoMCxhKSksdi5pc0Z1bmN0aW9uKG4pPyhyPW4sbj10KTpuJiZ0eXBlb2Ygbj09Im9iamVjdCImJihzPSJQT1NUIiksdi5hamF4KHt1cmw6ZSx0eXBlOnMsZGF0YVR5cGU6Imh0bWwiLGRhdGE6bixjb21wbGV0ZTpmdW5jdGlvbihlLHQpe3ImJnUuZWFjaChyLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX19KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLHUuaHRtbChpP3YoIjxkaXY+IikuYXBwZW5kKGUucmVwbGFjZSh5biwiIikpLmZpbmQoaSk6ZSl9KSx0aGlzfSx2LmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7di5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHYuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLG4pe3Zbbl09ZnVuY3Rpb24oZSxyLGkscyl7cmV0dXJuIHYuaXNGdW5jdGlvbihyKSYmKHM9c3x8aSxpPXIscj10KSx2LmFqYXgoe3R5cGU6bix1cmw6ZSxkYXRhOnIsc3VjY2VzczppLGRhdGFUeXBlOnN9KX19KSx2LmV4dGVuZCh7Z2V0U2NyaXB0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHYuZ2V0KGUsdCxuLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuZ2V0KGUsdCxuLCJqc29uIil9LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P0xuKGUsdi5hamF4U2V0dGluZ3MpOih0PWUsZT12LmFqYXhTZXR0aW5ncyksTG4oZSx0KSxlfSxhamF4U2V0dGluZ3M6e3VybDpjbixpc0xvY2FsOmRuLnRlc3QobG5bMV0pLGdsb2JhbDohMCx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIix0ZXh0OiJ0ZXh0L3BsYWluIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLCIqIjpUbn0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOmUuU3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOnYucGFyc2VKU09OLCJ0ZXh0IHhtbCI6di5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e2NvbnRleHQ6ITAsdXJsOiEwfX0sYWpheFByZWZpbHRlcjpDbihTbiksYWpheFRyYW5zcG9ydDpDbih4biksYWpheDpmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIFQoZSxuLHMsYSl7dmFyIGwseSxiLHcsUyxUPW47aWYoRT09PTIpcmV0dXJuO0U9Mix1JiZjbGVhclRpbWVvdXQodSksbz10LGk9YXx8IiIseC5yZWFkeVN0YXRlPWU+MD80OjAscyYmKHc9QW4oYyx4LHMpKTtpZihlPj0yMDAmJmU8MzAwfHxlPT09MzA0KWMuaWZNb2RpZmllZCYmKFM9eC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLFMmJih2Lmxhc3RNb2RpZmllZFtyXT1TKSxTPXguZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKSxTJiYodi5ldGFnW3JdPVMpKSxlPT09MzA0PyhUPSJub3Rtb2RpZmllZCIsbD0hMCk6KGw9T24oYyx3KSxUPWwuc3RhdGUseT1sLmRhdGEsYj1sLmVycm9yLGw9IWIpO2Vsc2V7Yj1UO2lmKCFUfHxlKVQ9ImVycm9yIixlPDAmJihlPTApfXguc3RhdHVzPWUseC5zdGF0dXNUZXh0PShufHxUKSsiIixsP2QucmVzb2x2ZVdpdGgoaCxbeSxULHhdKTpkLnJlamVjdFdpdGgoaCxbeCxULGJdKSx4LnN0YXR1c0NvZGUoZyksZz10LGYmJnAudHJpZ2dlcigiYWpheCIrKGw/IlN1Y2Nlc3MiOiJFcnJvciIpLFt4LGMsbD95OmJdKSxtLmZpcmVXaXRoKGgsW3gsVF0pLGYmJihwLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3gsY10pLC0tdi5hY3RpdmV8fHYuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSl9dHlwZW9mIGU9PSJvYmplY3QiJiYobj1lLGU9dCksbj1ufHx7fTt2YXIgcixpLHMsbyx1LGEsZixsLGM9di5hamF4U2V0dXAoe30sbiksaD1jLmNvbnRleHR8fGMscD1oIT09YyYmKGgubm9kZVR5cGV8fGggaW5zdGFuY2VvZiB2KT92KGgpOnYuZXZlbnQsZD12LkRlZmVycmVkKCksbT12LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxnPWMuc3RhdHVzQ29kZXx8e30sYj17fSx3PXt9LEU9MCxTPSJjYW5jZWxlZCIseD17cmVhZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtpZighRSl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO2U9d1tuXT13W25dfHxlLGJbZV09dH1yZXR1cm4gdGhpc30sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIEU9PT0yP2k6bnVsbH0sZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIG47aWYoRT09PTIpe2lmKCFzKXtzPXt9O3doaWxlKG49cG4uZXhlYyhpKSlzW25bMV0udG9Mb3dlckNhc2UoKV09blsyXX1uPXNbZS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbj09PXQ/bnVsbDpufSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBFfHwoYy5taW1lVHlwZT1lKSx0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXtyZXR1cm4gZT1lfHxTLG8mJm8uYWJvcnQoZSksVCgwLGUpLHRoaXN9fTtkLnByb21pc2UoeCkseC5zdWNjZXNzPXguZG9uZSx4LmVycm9yPXguZmFpbCx4LmNvbXBsZXRlPW0uYWRkLHguc3RhdHVzQ29kZT1mdW5jdGlvbihlKXtpZihlKXt2YXIgdDtpZihFPDIpZm9yKHQgaW4gZSlnW3RdPVtnW3RdLGVbdF1dO2Vsc2UgdD1lW3guc3RhdHVzXSx4LmFsd2F5cyh0KX1yZXR1cm4gdGhpc30sYy51cmw9KChlfHxjLnVybCkrIiIpLnJlcGxhY2UoaG4sIiIpLnJlcGxhY2UobW4sbG5bMV0rIi8vIiksYy5kYXRhVHlwZXM9di50cmltKGMuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5zcGxpdCh5KSxjLmNyb3NzRG9tYWluPT1udWxsJiYoYT13bi5leGVjKGMudXJsLnRvTG93ZXJDYXNlKCkpLGMuY3Jvc3NEb21haW49ISghYXx8YVsxXT09PWxuWzFdJiZhWzJdPT09bG5bMl0mJihhWzNdfHwoYVsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShsblszXXx8KGxuWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGMuZGF0YSYmYy5wcm9jZXNzRGF0YSYmdHlwZW9mIGMuZGF0YSE9InN0cmluZyImJihjLmRhdGE9di5wYXJhbShjLmRhdGEsYy50cmFkaXRpb25hbCkpLGtuKFNuLGMsbix4KTtpZihFPT09MilyZXR1cm4geDtmPWMuZ2xvYmFsLGMudHlwZT1jLnR5cGUudG9VcHBlckNhc2UoKSxjLmhhc0NvbnRlbnQ9IXZuLnRlc3QoYy50eXBlKSxmJiZ2LmFjdGl2ZSsrPT09MCYmdi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighYy5oYXNDb250ZW50KXtjLmRhdGEmJihjLnVybCs9KGduLnRlc3QoYy51cmwpPyImIjoiPyIpK2MuZGF0YSxkZWxldGUgYy5kYXRhKSxyPWMudXJsO2lmKGMuY2FjaGU9PT0hMSl7dmFyIE49di5ub3coKSxDPWMudXJsLnJlcGxhY2UoYm4sIiQxXz0iK04pO2MudXJsPUMrKEM9PT1jLnVybD8oZ24udGVzdChjLnVybCk/IiYiOiI/IikrIl89IitOOiIiKX19KGMuZGF0YSYmYy5oYXNDb250ZW50JiZjLmNvbnRlbnRUeXBlIT09ITF8fG4uY29udGVudFR5cGUpJiZ4LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsYy5jb250ZW50VHlwZSksYy5pZk1vZGlmaWVkJiYocj1yfHxjLnVybCx2Lmxhc3RNb2RpZmllZFtyXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsdi5sYXN0TW9kaWZpZWRbcl0pLHYuZXRhZ1tyXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIix2LmV0YWdbcl0pKSx4LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsYy5kYXRhVHlwZXNbMF0mJmMuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0/Yy5hY2NlcHRzW2MuZGF0YVR5cGVzWzBdXSsoYy5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitUbisiOyBxPTAuMDEiOiIiKTpjLmFjY2VwdHNbIioiXSk7Zm9yKGwgaW4gYy5oZWFkZXJzKXguc2V0UmVxdWVzdEhlYWRlcihsLGMuaGVhZGVyc1tsXSk7aWYoIWMuYmVmb3JlU2VuZHx8Yy5iZWZvcmVTZW5kLmNhbGwoaCx4LGMpIT09ITEmJkUhPT0yKXtTPSJhYm9ydCI7Zm9yKGwgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0peFtsXShjW2xdKTtvPWtuKHhuLGMsbix4KTtpZighbylUKC0xLCJObyBUcmFuc3BvcnQiKTtlbHNle3gucmVhZHlTdGF0ZT0xLGYmJnAudHJpZ2dlcigiYWpheFNlbmQiLFt4LGNdKSxjLmFzeW5jJiZjLnRpbWVvdXQ+MCYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3guYWJvcnQoInRpbWVvdXQiKX0sYy50aW1lb3V0KSk7dHJ5e0U9MSxvLnNlbmQoYixUKX1jYXRjaChrKXtpZighKEU8MikpdGhyb3cgaztUKC0xLGspfX1yZXR1cm4geH1yZXR1cm4geC5hYm9ydCgpfSxhY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fX0pO3ZhciBNbj1bXSxfbj0vXD8vLERuPS8oPSlcPyg/PSZ8JCl8XD9cPy8sUG49di5ub3coKTt2LmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9TW4ucG9wKCl8fHYuZXhwYW5kbysiXyIrUG4rKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24obixyLGkpe3ZhciBzLG8sdSxhPW4uZGF0YSxmPW4udXJsLGw9bi5qc29ucCE9PSExLGM9bCYmRG4udGVzdChmKSxoPWwmJiFjJiZ0eXBlb2YgYT09InN0cmluZyImJiEobi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZEbi50ZXN0KGEpO2lmKG4uZGF0YVR5cGVzWzBdPT09Impzb25wInx8Y3x8aClyZXR1cm4gcz1uLmpzb25wQ2FsbGJhY2s9di5pc0Z1bmN0aW9uKG4uanNvbnBDYWxsYmFjayk/bi5qc29ucENhbGxiYWNrKCk6bi5qc29ucENhbGxiYWNrLG89ZVtzXSxjP24udXJsPWYucmVwbGFjZShEbiwiJDEiK3MpOmg/bi5kYXRhPWEucmVwbGFjZShEbiwiJDEiK3MpOmwmJihuLnVybCs9KF9uLnRlc3QoZik/IiYiOiI/Iikrbi5qc29ucCsiPSIrcyksbi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHV8fHYuZXJyb3IocysiIHdhcyBub3QgY2FsbGVkIiksdVswXX0sbi5kYXRhVHlwZXNbMF09Impzb24iLGVbc109ZnVuY3Rpb24oKXt1PWFyZ3VtZW50c30saS5hbHdheXMoZnVuY3Rpb24oKXtlW3NdPW8sbltzXSYmKG4uanNvbnBDYWxsYmFjaz1yLmpzb25wQ2FsbGJhY2ssTW4ucHVzaChzKSksdSYmdi5pc0Z1bmN0aW9uKG8pJiZvKHVbMF0pLHU9bz10fSksInNjcmlwdCJ9KSx2LmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L2phdmFzY3JpcHR8ZWNtYXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZ2xvYmFsRXZhbChlKSxlfX19KSx2LmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7ZS5jYWNoZT09PXQmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiLGUuZ2xvYmFsPSExKX0pLHYuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgbixyPWkuaGVhZHx8aS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHxpLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihzLG8pe249aS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxuLmFzeW5jPSJhc3luYyIsZS5zY3JpcHRDaGFyc2V0JiYobi5jaGFyc2V0PWUuc2NyaXB0Q2hhcnNldCksbi5zcmM9ZS51cmwsbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oZSxpKXtpZihpfHwhbi5yZWFkeVN0YXRlfHwvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KG4ucmVhZHlTdGF0ZSkpbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxyJiZuLnBhcmVudE5vZGUmJnIucmVtb3ZlQ2hpbGQobiksbj10LGl8fG8oMjAwLCJzdWNjZXNzIil9LHIuaW5zZXJ0QmVmb3JlKG4sci5maXJzdENoaWxkKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuLm9ubG9hZCgwLDEpfX19fSk7dmFyIEhuLEJuPWUuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiBIbilIbltlXSgwLDEpfTohMSxqbj0wO3YuYWpheFNldHRpbmdzLnhocj1lLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0xvY2FsJiZGbigpfHxJbigpfTpGbixmdW5jdGlvbihlKXt2LmV4dGVuZCh2LnN1cHBvcnQse2FqYXg6ISFlLGNvcnM6ISFlJiYid2l0aENyZWRlbnRpYWxzImluIGV9KX0odi5hamF4U2V0dGluZ3MueGhyKCkpLHYuc3VwcG9ydC5hamF4JiZ2LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24obil7aWYoIW4uY3Jvc3NEb21haW58fHYuc3VwcG9ydC5jb3JzKXt2YXIgcjtyZXR1cm57c2VuZDpmdW5jdGlvbihpLHMpe3ZhciBvLHUsYT1uLnhocigpO24udXNlcm5hbWU/YS5vcGVuKG4udHlwZSxuLnVybCxuLmFzeW5jLG4udXNlcm5hbWUsbi5wYXNzd29yZCk6YS5vcGVuKG4udHlwZSxuLnVybCxuLmFzeW5jKTtpZihuLnhockZpZWxkcylmb3IodSBpbiBuLnhockZpZWxkcylhW3VdPW4ueGhyRmllbGRzW3VdO24ubWltZVR5cGUmJmEub3ZlcnJpZGVNaW1lVHlwZSYmYS5vdmVycmlkZU1pbWVUeXBlKG4ubWltZVR5cGUpLCFuLmNyb3NzRG9tYWluJiYhaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdJiYoaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO3RyeXtmb3IodSBpbiBpKWEuc2V0UmVxdWVzdEhlYWRlcih1LGlbdV0pfWNhdGNoKGYpe31hLnNlbmQobi5oYXNDb250ZW50JiZuLmRhdGF8fG51bGwpLHI9ZnVuY3Rpb24oZSxpKXt2YXIgdSxmLGwsYyxoO3RyeXtpZihyJiYoaXx8YS5yZWFkeVN0YXRlPT09NCkpe3I9dCxvJiYoYS5vbnJlYWR5c3RhdGVjaGFuZ2U9di5ub29wLEJuJiZkZWxldGUgSG5bb10pO2lmKGkpYS5yZWFkeVN0YXRlIT09NCYmYS5hYm9ydCgpO2Vsc2V7dT1hLnN0YXR1cyxsPWEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCksYz17fSxoPWEucmVzcG9uc2VYTUwsaCYmaC5kb2N1bWVudEVsZW1lbnQmJihjLnhtbD1oKTt0cnl7Yy50ZXh0PWEucmVzcG9uc2VUZXh0fWNhdGNoKHApe310cnl7Zj1hLnN0YXR1c1RleHR9Y2F0Y2gocCl7Zj0iIn0hdSYmbi5pc0xvY2FsJiYhbi5jcm9zc0RvbWFpbj91PWMudGV4dD8yMDA6NDA0OnU9PT0xMjIzJiYodT0yMDQpfX19Y2F0Y2goZCl7aXx8cygtMSxkKX1jJiZzKHUsZixjLGwpfSxuLmFzeW5jP2EucmVhZHlTdGF0ZT09PTQ/c2V0VGltZW91dChyLDApOihvPSsram4sQm4mJihIbnx8KEhuPXt9LHYoZSkudW5sb2FkKEJuKSksSG5bb109ciksYS5vbnJlYWR5c3RhdGVjaGFuZ2U9cik6cigpfSxhYm9ydDpmdW5jdGlvbigpe3ImJnIoMCwxKX19fX0pO3ZhciBxbixSbixVbj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sem49bmV3IFJlZ0V4cCgiXig/OihbLStdKT18KSgiK20rIikoW2EteiVdKikkIiwiaSIpLFduPS9xdWV1ZUhvb2tzJC8sWG49W0duXSxWbj17IioiOltmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscz16bi5leGVjKHQpLG89aS5jdXIoKSx1PStvfHwwLGE9MSxmPTIwO2lmKHMpe249K3NbMl0scj1zWzNdfHwodi5jc3NOdW1iZXJbZV0/IiI6InB4Iik7aWYociE9PSJweCImJnUpe3U9di5jc3MoaS5lbGVtLGUsITApfHxufHwxO2RvIGE9YXx8Ii41Iix1Lz1hLHYuc3R5bGUoaS5lbGVtLGUsdStyKTt3aGlsZShhIT09KGE9aS5jdXIoKS9vKSYmYSE9PTEmJi0tZil9aS51bml0PXIsaS5zdGFydD11LGkuZW5kPXNbMV0/dSsoc1sxXSsxKSpuOm59cmV0dXJuIGl9XX07di5BbmltYXRpb249di5leHRlbmQoS24se3R3ZWVuZXI6ZnVuY3Rpb24oZSx0KXt2LmlzRnVuY3Rpb24oZSk/KHQ9ZSxlPVsiKiJdKTplPWUuc3BsaXQoIiAiKTt2YXIgbixyPTAsaT1lLmxlbmd0aDtmb3IoO3I8aTtyKyspbj1lW3JdLFZuW25dPVZuW25dfHxbXSxWbltuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P1huLnVuc2hpZnQoZSk6WG4ucHVzaChlKX19KSx2LlR3ZWVuPVluLFluLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WW4saW5pdDpmdW5jdGlvbihlLHQsbixyLGkscyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9c3x8KHYuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1Zbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6WW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49WW4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PXYuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpZbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxZbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9WW4ucHJvdG90eXBlLFluLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZS5lbGVtW2UucHJvcF09PW51bGx8fCEhZS5lbGVtLnN0eWxlJiZlLmVsZW0uc3R5bGVbZS5wcm9wXSE9bnVsbD8odD12LmNzcyhlLmVsZW0sZS5wcm9wLCExLCIiKSwhdHx8dD09PSJhdXRvIj8wOnQpOmUuZWxlbVtlLnByb3BdfSxzZXQ6ZnVuY3Rpb24oZSl7di5meC5zdGVwW2UucHJvcF0/di5meC5zdGVwW2UucHJvcF0oZSk6ZS5lbGVtLnN0eWxlJiYoZS5lbGVtLnN0eWxlW3YuY3NzUHJvcHNbZS5wcm9wXV0hPW51bGx8fHYuY3NzSG9va3NbZS5wcm9wXSk/di5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCk6ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX0sWW4ucHJvcEhvb2tzLnNjcm9sbFRvcD1Zbi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx2LmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49di5mblt0XTt2LmZuW3RdPWZ1bmN0aW9uKHIsaSxzKXtyZXR1cm4gcj09bnVsbHx8dHlwZW9mIHI9PSJib29sZWFuInx8IWUmJnYuaXNGdW5jdGlvbihyKSYmdi5pc0Z1bmN0aW9uKGkpP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShabih0LCEwKSxyLGkscyl9fSksdi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoR3QpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXYuaXNFbXB0eU9iamVjdChlKSxzPXYuc3BlZWQodCxuLHIpLG89ZnVuY3Rpb24oKXt2YXIgdD1Lbih0aGlzLHYuZXh0ZW5kKHt9LGUpLHMpO2kmJnQuc3RvcCghMCl9O3JldHVybiBpfHxzLnF1ZXVlPT09ITE/dGhpcy5lYWNoKG8pOnRoaXMucXVldWUocy5xdWV1ZSxvKX0sc3RvcDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChyKX07cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKHI9bixuPWUsZT10KSxuJiZlIT09ITEmJnRoaXMucXVldWUoZXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsbj1lIT1udWxsJiZlKyJxdWV1ZUhvb2tzIixzPXYudGltZXJzLG89di5fZGF0YSh0aGlzKTtpZihuKW9bbl0mJm9bbl0uc3RvcCYmaShvW25dKTtlbHNlIGZvcihuIGluIG8pb1tuXSYmb1tuXS5zdG9wJiZXbi50ZXN0KG4pJiZpKG9bbl0pO2ZvcihuPXMubGVuZ3RoO24tLTspc1tuXS5lbGVtPT09dGhpcyYmKGU9PW51bGx8fHNbbl0ucXVldWU9PT1lKSYmKHNbbl0uYW5pbS5zdG9wKHIpLHQ9ITEscy5zcGxpY2UobiwxKSk7KHR8fCFyKSYmdi5kZXF1ZXVlKHRoaXMsZSl9KX19KSx2LmVhY2goe3NsaWRlRG93bjpabigic2hvdyIpLHNsaWRlVXA6Wm4oImhpZGUiKSxzbGlkZVRvZ2dsZTpabigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe3YuZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSksdi5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmdHlwZW9mIGU9PSJvYmplY3QiP3YuZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8di5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiF2LmlzRnVuY3Rpb24odCkmJnR9O3IuZHVyYXRpb249di5meC5vZmY/MDp0eXBlb2Ygci5kdXJhdGlvbj09Im51bWJlciI/ci5kdXJhdGlvbjpyLmR1cmF0aW9uIGluIHYuZnguc3BlZWRzP3YuZnguc3BlZWRzW3IuZHVyYXRpb25dOnYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKHIucXVldWU9PW51bGx8fHIucXVldWU9PT0hMClyLnF1ZXVlPSJmeCI7cmV0dXJuIHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe3YuaXNGdW5jdGlvbihyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmdi5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHYuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn19LHYudGltZXJzPVtdLHYuZng9WW4ucHJvdG90eXBlLmluaXQsdi5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsbj12LnRpbWVycyxyPTA7cW49di5ub3coKTtmb3IoO3I8bi5sZW5ndGg7cisrKWU9bltyXSwhZSgpJiZuW3JdPT09ZSYmbi5zcGxpY2Uoci0tLDEpO24ubGVuZ3RofHx2LmZ4LnN0b3AoKSxxbj10fSx2LmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2UoKSYmdi50aW1lcnMucHVzaChlKSYmIVJuJiYoUm49c2V0SW50ZXJ2YWwodi5meC50aWNrLHYuZnguaW50ZXJ2YWwpKX0sdi5meC5pbnRlcnZhbD0xMyx2LmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKFJuKSxSbj1udWxsfSx2LmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSx2LmZ4LnN0ZXA9e30sdi5leHByJiZ2LmV4cHIuZmlsdGVycyYmKHYuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGUpe3JldHVybiB2LmdyZXAodi50aW1lcnMsZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10LmVsZW19KS5sZW5ndGh9KTt2YXIgZXI9L14oPzpib2R5fGh0bWwpJC9pO3YuZm4ub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgbixyLGkscyxvLHUsYSxmPXt0b3A6MCxsZWZ0OjB9LGw9dGhpc1swXSxjPWwmJmwub3duZXJEb2N1bWVudDtpZighYylyZXR1cm47cmV0dXJuKHI9Yy5ib2R5KT09PWw/di5vZmZzZXQuYm9keU9mZnNldChsKToobj1jLmRvY3VtZW50RWxlbWVudCx2LmNvbnRhaW5zKG4sbCk/KHR5cGVvZiBsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9InVuZGVmaW5lZCImJihmPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGk9dHIoYykscz1uLmNsaWVudFRvcHx8ci5jbGllbnRUb3B8fDAsbz1uLmNsaWVudExlZnR8fHIuY2xpZW50TGVmdHx8MCx1PWkucGFnZVlPZmZzZXR8fG4uc2Nyb2xsVG9wLGE9aS5wYWdlWE9mZnNldHx8bi5zY3JvbGxMZWZ0LHt0b3A6Zi50b3ArdS1zLGxlZnQ6Zi5sZWZ0K2Etb30pOmYpfSx2Lm9mZnNldD17Ym9keU9mZnNldDpmdW5jdGlvbihlKXt2YXIgdD1lLm9mZnNldFRvcCxuPWUub2Zmc2V0TGVmdDtyZXR1cm4gdi5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0JiYodCs9cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5Ub3AiKSl8fDAsbis9cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5MZWZ0IikpfHwwKSx7dG9wOnQsbGVmdDpufX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12LmNzcyhlLCJwb3NpdGlvbiIpO3I9PT0ic3RhdGljIiYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGk9dihlKSxzPWkub2Zmc2V0KCksbz12LmNzcyhlLCJ0b3AiKSx1PXYuY3NzKGUsImxlZnQiKSxhPShyPT09ImFic29sdXRlInx8cj09PSJmaXhlZCIpJiZ2LmluQXJyYXkoImF1dG8iLFtvLHVdKT4tMSxmPXt9LGw9e30sYyxoO2E/KGw9aS5wb3NpdGlvbigpLGM9bC50b3AsaD1sLmxlZnQpOihjPXBhcnNlRmxvYXQobyl8fDAsaD1wYXJzZUZsb2F0KHUpfHwwKSx2LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4scykpLHQudG9wIT1udWxsJiYoZi50b3A9dC50b3Atcy50b3ArYyksdC5sZWZ0IT1udWxsJiYoZi5sZWZ0PXQubGVmdC1zLmxlZnQraCksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6aS5jc3MoZil9fSx2LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpc1swXSlyZXR1cm47dmFyIGU9dGhpc1swXSx0PXRoaXMub2Zmc2V0UGFyZW50KCksbj10aGlzLm9mZnNldCgpLHI9ZXIudGVzdCh0WzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTp0Lm9mZnNldCgpO3JldHVybiBuLnRvcC09cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5Ub3AiKSl8fDAsbi5sZWZ0LT1wYXJzZUZsb2F0KHYuY3NzKGUsIm1hcmdpbkxlZnQiKSl8fDAsci50b3ArPXBhcnNlRmxvYXQodi5jc3ModFswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAsci5sZWZ0Kz1wYXJzZUZsb2F0KHYuY3NzKHRbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MCx7dG9wOm4udG9wLXIudG9wLGxlZnQ6bi5sZWZ0LXIubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxpLmJvZHk7d2hpbGUoZSYmIWVyLnRlc3QoZS5ub2RlTmFtZSkmJnYuY3NzKGUsInBvc2l0aW9uIik9PT0ic3RhdGljIillPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxpLmJvZHl9KX19KSx2LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSxuKXt2YXIgcj0vWS8udGVzdChuKTt2LmZuW2VdPWZ1bmN0aW9uKGkpe3JldHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsaSxzKXt2YXIgbz10cihlKTtpZihzPT09dClyZXR1cm4gbz9uIGluIG8/b1tuXTpvLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXTplW2ldO28/by5zY3JvbGxUbyhyP3Yobykuc2Nyb2xsTGVmdCgpOnMscj9zOnYobykuc2Nyb2xsVG9wKCkpOmVbaV09c30sZSxpLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksdi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSxuKXt2LmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6biwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKHIsaSl7di5mbltpXT1mdW5jdGlvbihpLHMpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGgmJihyfHx0eXBlb2YgaSE9ImJvb2xlYW4iKSx1PXJ8fChpPT09ITB8fHM9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24obixyLGkpe3ZhciBzO3JldHVybiB2LmlzV2luZG93KG4pP24uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOm4ubm9kZVR5cGU9PT05PyhzPW4uZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KG4uYm9keVsic2Nyb2xsIitlXSxzWyJzY3JvbGwiK2VdLG4uYm9keVsib2Zmc2V0IitlXSxzWyJvZmZzZXQiK2VdLHNbImNsaWVudCIrZV0pKTppPT09dD92LmNzcyhuLHIsaSx1KTp2LnN0eWxlKG4scixpLHUpfSxuLG8/aTp0LG8sbnVsbCl9fSl9KSxlLmpRdWVyeT1lLiQ9dix0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kJiZkZWZpbmUuYW1kLmpRdWVyeSYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KX0pKHdpbmRvdyk7"}]},{"name":"Wii-homebrew.com better header","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["http://forum.wii-homebrew.com*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1479475938124,"data":{}},"enabled":false,"position":2,"uuid":"dee7f03b-b8a7-49ad-a4a2-424456050e8f","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBXaWktaG9tZWJyZXcuY29tIGJldHRlciBoZWFkZXIKLy8gQG5hbWVzcGFjZSAgICBodHRwOi8vdGFtcGVybW9ua2V5Lm5ldC8KLy8gQHZlcnNpb24gICAgICAwLjEKLy8gQGRlc2NyaXB0aW9uICB0cnkgdG8gdGFrZSBvdmVyIHRoZSB3b3JsZCEKLy8gQGF1dGhvciAgICAgICBBbm8KLy8gQG1hdGNoICAgICAgICBodHRwOi8vZm9ydW0ud2lpLWhvbWVicmV3LmNvbSoKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQovKiBqc2hpbnQgLVcwOTcgKi8KJ3VzZSBzdHJpY3QnOwoKLy8gVGhpcyBmZXRjaGVzIGFsbCBvZiB0aGUgPGltZz4gdGFncyBhbmQgc3RvcmVzIHRoZW0gaW4gInRhZ3MiLgp2YXIgdGFncyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTsKCi8vIFRoaXMgbG9vcHMgb3ZlciBhbGwgb2YgdGhlIDxpbWc+IHRhZ3MuCmZvciAodmFyIGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgewoKICAvLyBUaGlzIHJlcGxhY2VzIHRoZSBzcmMgYXR0cmlidXRlIG9mIHRoZSB0YWcgd2l0aCB0aGUgbW9kaWZpZWQgb25lCiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwOi8vZm9ydW0ud2lpLWhvbWVicmV3LmNvbS93Y2YvaW1hZ2VzL29sZExvZ29FZGl0ZWQucG5nJywgJ2h0dHA6Ly9pbWcucG9ueXdhdmUuZGUvZGkvSUdQQS9XaWlIb21lYnJld0xvZ28ucG5nJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwOi8vZm9ydW0ud2lpLWhvbWVicmV3LmNvbS93Y2YvaW1hZ2VzL0Rlc2lnbnMvQ2hhbmdpbmdfR2FtZXMvbmlnaHQvb2xkTG9nb0VkaXRlZC5wbmcnLCAnaHR0cDovL2ltZy5wb255d2F2ZS5kZS9kaS9JR1BBL1dpaUhvbWVicmV3TG9nby5wbmcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9mb3J1bS53aWktaG9tZWJyZXcuY29tL2ltYWdlcy93YmJMb2dvLnBuZycsICdodHRwOi8vaW1nLnBvbnl3YXZlLmRlL2RpL0lHUEEvV2lpSG9tZWJyZXdMb2dvLnBuZycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZvcnVtLndpaS1ob21lYnJldy5jb20vd2NmL2ltYWdlcy9EZXNpZ25zL0NoYW5naW5nX0dhbWVzL25pZ2h0L2xvZ29OZXcucG5nJywgJ2h0dHA6Ly9pbWcucG9ueXdhdmUuZGUvZGkvSUdQQS9XaWlIb21lYnJld0xvZ28ucG5nJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwOi8vZm9ydW0ud2lpLWhvbWVicmV3LmNvbS93Y2YvaW1hZ2VzL3N0eWxlTG9nby0yZjUzMzY3YmE4YTU2NzEzYTk3YTI4ZWRiM2M0MWFmODNjMmFhNzMyLnBuZycsICdodHRwOi8vaW1nLnBvbnl3YXZlLmRlL2RpL0lHUEEvV2lpSG9tZWJyZXdMb2dvLnBuZycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZvcnVtLndpaS1ob21lYnJldy5jb20vd2NmL2ltYWdlcy9EZXNpZ25zL01hcmlvL3dpbnRlci9vbGRMb2dvRWRpdGVkLnBuZycsICdodHRwOi8vaW1nLnBvbnl3YXZlLmRlL2RpL0lHUEEvV2lpSG9tZWJyZXdMb2dvLnBuZycpOwp9"},{"name":"Removes the autoplay up next feature","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["*://www.youtube.com/*"],"orig_noframes":true,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1479475994064,"data":{}},"enabled":true,"position":3,"file_url":"https://gist.github.com/Yonezpt/51adf278a24488f75ff0/raw/f6faf0c2c6e7f2523cc88711405b2d9895700921/YT%2520RMV-AP-UN.user.js","uuid":"6a0b83b8-68d9-47ef-873f-038e77944d0c","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQHZlcnNpb24gIDEuMC4yCi8vIEBuYW1lICAgICBSZW1vdmVzIHRoZSBhdXRvcGxheSB1cCBuZXh0IGZlYXR1cmUKLy8gQG1hdGNoICAgICo6Ly93d3cueW91dHViZS5jb20vKgovLyBAcnVuLWF0ICAgZG9jdW1lbnQtc3RhcnQKLy8gQGdyYW50ICAgIG5vbmUKLy8gQG5vZnJhbWVzCi8vID09L1VzZXJTY3JpcHQ9PQooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwogICAgZnVuY3Rpb24gcmVtb3ZlQVBVTigpIHsKICAgICAgICB2YXIgYXV0b3BsYXliYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdXRvcGxheS1iYXInKVswXTsKICAgICAgICBpZiAoYXV0b3BsYXliYXIpIHsKICAgICAgICAgICAgYXV0b3BsYXliYXIucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjaGVja2JveC1vbi1vZmYnKVswXS5yZW1vdmUoKTsKICAgICAgICB9CiAgICB9CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIHJlbW92ZUFQVU4sIHRydWUpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3NwZmRvbmUnLCByZW1vdmVBUFVOKTsKfSgpKTs="},{"name":"MyDealz Enhancer","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http://www.mydealz.de/*","https://www.mydealz.de/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1479476020177,"data":{}},"enabled":false,"position":4,"file_url":"https://greasyfork.org/scripts/10885-mydealz-enhancer/code/MyDealz%20Enhancer.user.js","uuid":"d341b7fc-e2cb-48b8-a685-e33f7f30cf50","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIE15RGVhbHogRW5oYW5jZXIKLy8gQG5hbWVzcGFjZSAgIG15ZGVhbHpfZW5oYW5jZXIKLy8gQGRlc2NyaXB0aW9uIFZlcmJlc3NlcnQgRnVua3Rpb25lbiB2b24gTXlEZWFseiwgb2RlciBzdGVsbHQgc2llIHdpZWRlciBoZXIKLy8gQGF1dGhvcglCQUVSbmFkbwovLyBAY29udHJpYnV0b3IJbG9sbmlja25hbWUgKHJlbW9kZWxOYXZCYXIsIGdyYWJRdW90ZSwgbWF4UXVvdGVzLCBlcnJvci1kaXNwbGF5IFthdmF0YXIgYm9yZGVyXSkKLy8gQGNvbnRyaWJ1dG9yCXJpY2hpMmsgKG1vZGlmeVNlYXJjaC1UZWlsZSwgc2hvd1VzZXJJbmZvLCBlbWJlZFlvdXR1YmUsIG1pbmltaXplUXVvdGVzLCBkZWFsVGV4dFByZXZpZXcpCi8vIEBjb250cmlidXRvcgl2aWVsbGVpY2h0bWFubjEgKEltYWdlIFByZXZpZXcpCi8vIEBjb250cmlidXRvcglOaWNvIChpbnNlcnREaXJlY3RMaW5rLUlkZWUpCi8vIEBpbmNsdWRlICAgICBodHRwOi8vd3d3Lm15ZGVhbHouZGUvKgovLyBAaW5jbHVkZSAgICAgaHR0cHM6Ly93d3cubXlkZWFsei5kZS8qCi8vIEB2ZXJzaW9uICAgICAxLjUuMDE3Ci8vIEByZXF1aXJlCWh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTIuMS40Lm1pbi5qcwovLyBAZ3JhbnQgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICBHTV9sb2cKLy8gQGdyYW50ICAgICAgIEdNX2luZm8KLy8gPT0vVXNlclNjcmlwdD09CgpmdW5jdGlvbiBNb2RpZnlQYWdlKCkgewoKCXZhciBkZWZhdWx0U2V0dGluZ3MgPSB7YmVoYXZpb3I6IHtzaG93R3JlZW5Eb3RzOiB0cnVlfSwgY29tbWVudHM6IHttYXhRdW90ZUxldmVsOiAxLCBlZGl0UmVhc29uOiAnJywgc2lnbmF0dXJlOiAnJywgdXNlU2lnbmF0dXJlOiBmYWxzZX0sIGRlYWxzOiB7aGlkZTogJyd9LCB1c2VyTWVudURpcmVjdCA6IHtwbjogZmFsc2UsIGFjY291bnQ6IGZhbHNlfSwgaGlkZUFkczoge3RvcEJhcjogdHJ1ZSwgZ3NXaWRnZXQ6IHRydWUsIGluc2lkZTogdHJ1ZSxubFNlY3Rpb246IHRydWUsIGFwcDogdHJ1ZX0sIG1vdmVCdXR0b25zOiB7XzogdHJ1ZSwgZGVhbHM6IHRydWUsIGd1dHNjaGVpbmU6IHRydWUsIGZyZWViaWVzOiB0cnVlLCBjdXN0b206IHRydWUsIGdlc3VjaGU6IGZhbHNlLCBkaXZlcnNlczogZmFsc2V9LCBmcm9tVG86IHtkZWFsczogJ2RlYWxzLW5ldycsIGd1dHNjaGVpbmU6ICdndXRzY2hlaW5lLW5ldycsIGZyZWViaWVzOiAnZnJlZWJpZXMtbmV3JywgZ2VzdWNoZTogJ2dlc3VjaGUnLCBkaXZlcnNlczogJ2RpdmVyc2VzJywgYnVncmVwb3J0czogJ2J1Z3JlcG9ydHMnfSwgc21pbGV5czoge30sIG9sZFNtaWxleXM6IHt1c2U6IGZhbHNlLCBzaG93OiBmYWxzZX0sIGRpc3BsYXk6IHtlbWJlZFlvdXR1YmU6IHRydWUsIG1pbmltaXplUXVvdGVzOiB0cnVlLCB1c2VySW5mbzogdHJ1ZSwgZGVhbFByZXZpZXc6IDB9LCBzZWFyY2g6IHtwcmVzZXRDYXRlZ29yeTogMX19OwoJdmFyIHNldHRpbmdzID0ge307Cgl2YXIgb2xkU21pbGV5cyA9IHtvTzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTE5bGMucG5nJywgJzooJzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTIwd2sucG5nJywgJzopJzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTIxdnQucG5nJywgJzpwJzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTIyc3AucG5nJywgJzspJzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTIzYm4ucG5nJywgJyhfOyknOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODE5MjR6Yi5wbmcnLCAnOnwnOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODE5MjV2ai5wbmcnLCAnOnsnOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODIxNDRzbS5wbmcnLCAnOCknOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODIxNjFpei5wbmcnLCAnWCknOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODIxNzB3Zi5wbmcnLCAnJmx0OzMnOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODI1MTRmbC5wbmcnfTsKCXZhciBzZWFyY2hDYXRlZ29yaWVzID0ge2FsbDoge2lkOiAwLCBjYXRlZ29yeTogJ0FsbGUnfSwgZGVhbHM6IHtpZDogMSwgY2F0ZWdvcnk6ICdEZWFscyd9LCBndXRzY2hlaW5lOiB7aWQ6IDIsIGNhdGVnb3J5OiAnR3V0c2NoZWluZSd9LCBmcmVlYmllczoge2lkOiAzLCBjYXRlZ29yeTogJ0ZyZWViaWVzJ30sIGdlc3VjaGU6IHtpZDogNCwgY2F0ZWdvcnk6ICdHZXN1Y2hlJ30sIGRpdmVyc2VzOiB7aWQ6IDUsIGNhdGVnb3J5OiAnRGl2ZXJzZXMnfSwgYnVncmVwb3J0czoge2lkOiA3LCBjYXRlZ29yeTogJ0J1ZyBSZXBvcnRzJ319OwoJdmFyIHRpbWVyID0ge307Cgl2YXIgbGFzdEZvY3VzID0gbnVsbDsKCXZhciBzYXZlID0ge3BuOiB7fX07Cgl2YXIgdXNlck5hbWU7CgoJJC5mbi5oYXNBdHRyID0gZnVuY3Rpb24obmFtZSkgeyAgCgkJcmV0dXJuIHRoaXMuYXR0cihuYW1lKSAhPT0gdW5kZWZpbmVkOwoJfTsKCgkkLmZuLmV4dGVuZCh7CgkJaW5zZXJ0QXRDYXJldDogZnVuY3Rpb24obXlWYWx1ZSkgewoJCQl2YXIgZWxlbSA9IHRoaXNbMF07CgkJCWlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHsKCQkJCWVsZW0uZm9jdXMoKTsKCQkJCXNlbCA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwoJCQkJc2VsLnRleHQgPSBteVZhbHVlOwoJCQkJZWxlbS5mb2N1cygpOwoJCQl9IGVsc2UgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQgfHwgZWxlbS5zZWxlY3Rpb25TdGFydCA9PSAnMCcpIHsKCQkJCXZhciBzdGFydFBvcyA9IGVsZW0uc2VsZWN0aW9uU3RhcnQ7CgkJCQl2YXIgZW5kUG9zID0gZWxlbS5zZWxlY3Rpb25FbmQ7CgkJCQl2YXIgc2Nyb2xsVG9wID0gZWxlbS5zY3JvbGxUb3A7CgkJCQl2YXIgb2xkTGVuZ3RoID0gZWxlbS52YWx1ZS5sZW5ndGg7CgkJCQllbGVtLnZhbHVlID0gZWxlbS52YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnRQb3MpK215VmFsdWUrZWxlbS52YWx1ZS5zdWJzdHJpbmcoZW5kUG9zLGVsZW0udmFsdWUubGVuZ3RoKTsKCQkJCWVsZW0uZm9jdXMoKTsKCQkJCWVsZW0uc2VsZWN0aW9uU3RhcnQgPSBzdGFydFBvcyArIGVsZW0udmFsdWUubGVuZ3RoIC0gb2xkTGVuZ3RoOwoJCQkJZWxlbS5zZWxlY3Rpb25FbmQgPSBzdGFydFBvcyArIGVsZW0udmFsdWUubGVuZ3RoIC0gb2xkTGVuZ3RoOwoJCQkJZWxlbS5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7CgkJCX0gZWxzZSB7CgkJCQllbGVtLnZhbHVlICs9IG15VmFsdWU7CgkJCQllbGVtLmZvY3VzKCk7CgkJCX0KCQl9Cgl9KTsKCgkkLmZuLnNldEN1cnNvclBvc2l0aW9uID0gZnVuY3Rpb24ocG9zKSB7CgkJdmFyIF9lbGVtID0gdGhpc1swXTsKICAgIGlmIChfZWxlbS5zZXRTZWxlY3Rpb25SYW5nZSkgewogICAgICBfZWxlbS5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7CiAgICB9IGVsc2UgaWYgKF9lbGVtLmNyZWF0ZVRleHRSYW5nZSkgewogICAgICB2YXIgcmFuZ2UgPSBfZWxlbS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAgICAgIGlmKHBvcyA8IDApIHsKICAgICAgICBwb3MgPSAkKF9lbGVtKS52YWwoKS5sZW5ndGggKyBwb3M7CiAgICAgIH0KICAgICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgcG9zKTsKICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBwb3MpOwogICAgICByYW5nZS5zZWxlY3QoKTsKICAgIH0KICB9CgoJaWYoIVJlZ0V4cC5lc2NhcGUpewoJCVJlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbihzKXsKCQkJcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9bXFxeJCorPy4oKXxbXF17fV0vZywgJ1xcJCYnKTsKCQl9OwoJfQoKCWZ1bmN0aW9uIHByaW50VVRDRGF0ZShfZGF0ZSkgewoJCXJldHVybiAoJzAnK19kYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKSkucmVwbGFjZSgvXjAqKFswLTldezJ9KSQvLCAnJDEnKSArICc6JyArICgnMCcrX2RhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkpLnJlcGxhY2UoL14wKihbMC05XXsyfSkkLywgJyQxJykgKyAnOicgKyAoJzAnK19kYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpKS5yZXBsYWNlKC9eMCooWzAtOV17Mn0pJC8sICckMScpOwoJfQoKCWZ1bmN0aW9uIHByaW50RGF0ZShfZGF0ZSkgewoJCXJldHVybiAoJzAnK19kYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSkucmVwbGFjZSgvXjAqKFswLTldezJ9KSQvLCAnJDEnKSArICc6JyArICgnMCcrX2RhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpLnJlcGxhY2UoL14wKihbMC05XXsyfSkkLywgJyQxJykgKyAnOicgKyAoJzAnK19kYXRlLmdldFNlY29uZHMoKS50b1N0cmluZygpKS5yZXBsYWNlKC9eMCooWzAtOV17Mn0pJC8sICckMScpOwoJfQoKCWZ1bmN0aW9uIHRpbWVUaWNrKCkgewoJCXZhciBfYWxsVGltZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZi1jYXJvdXNlbC1kYXRlJyk7CgkJdmFyIF9yZW1haW47CgkJdmFyIF91bnRpbDsKCQl2YXIgX2RpZmZEYXRlOwoJCXZhciBfdG9EYXRlOwoJCXZhciBfZGlmZlRpbWU7CgkJdmFyIF9ub3cgPSBuZXcgRGF0ZSgpOwoJCWZvcih2YXIgX2kgPSAwOyBfaSA8IF9hbGxUaW1lcy5sZW5ndGg7IF9pKyspIHsKCQkJX3VudGlsID0gX2FsbFRpbWVzW19pXTsKCQkJX3JlbWFpbiA9IF9hbGxUaW1lc1tfaV0ucGFyZW50Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZi1jYXJvdXNlbC1kYXRlLXJlbWFpbicpWzBdOwoJCQlfdG9EYXRlID0gbmV3IERhdGUoKTsKCQkJX3RvRGF0ZS5zZXRUaW1lKHBhcnNlSW50KF91bnRpbC5pbm5lckhUTUwsIDEwKSoxMDAwKTsKCQkJX2RpZmZEYXRlID0gbmV3IERhdGUoKTsKCQkJX2RpZmZUaW1lID0gX3RvRGF0ZS5nZXRUaW1lKCkgLSBfbm93LmdldFRpbWUoKTsKCQkJaWYoX2RpZmZUaW1lIDw9IDApIHsKCQkJCSQoX2FsbFRpbWVzW19pXSkucGFyZW50KCkuZmluZCgnLnNwYWNlLS1sZWZ0LTInKS50ZXh0KC9CZWdpbm50IGluLy50ZXN0KCQoX2FsbFRpbWVzW19pXSkucGFyZW50KCkuZmluZCgnLnNwYWNlLS1sZWZ0LTInKS50ZXh0KCcnKSkgPyAnQmVnb25uZW4nIDogJ0FiZ2VsYXVmZW4nKTsKCQkJCSQoX3JlbWFpbikucmVtb3ZlKCk7CgkJCX0gZWxzZSB7CgkJCQlfZGlmZkRhdGUuc2V0VGltZShfZGlmZlRpbWUpOwoJCQkJX3JlbWFpbi5pbm5lckhUTUwgPSBwcmludFVUQ0RhdGUoX2RpZmZEYXRlKTsgLy8gKyAnICgnICsgcHJpbnREYXRlKF90b0RhdGUpICsgJyknOwoJCQl9CgkJfQoJfQoKCWZ1bmN0aW9uIGFkZFRpbWVzKCkgewoJCXZhciBfYWxsVGltZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZi1jYXJvdXNlbC1kYXRlJyk7CgkJdmFyIF9uZXdTcGFuOwoJCWZvcih2YXIgX2kgPSAwOyBfaSA8IF9hbGxUaW1lcy5sZW5ndGg7IF9pKyspIHsKCQkJX2FsbFRpbWVzW19pXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQlfbmV3U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKCQkJX25ld1NwYW4uc2V0QXR0cmlidXRlKCdjbGFzcycsICdiZi1jYXJvdXNlbC1kYXRlLXJlbWFpbicpOwoJCQlfYWxsVGltZXNbX2ldLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF9uZXdTcGFuLCBudWxsKTsKCQl9CgkJdGltZVRpY2soKTsKCQl3aW5kb3cuc2V0SW50ZXJ2YWwodGltZVRpY2ssIDEwMDApOwoJfQoKCWZ1bmN0aW9uIGZpeFBvc2l0aW9ucygpIHsKCQl2YXIgX2FsbEVsZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2FydGljbGUnKTsKCQlmb3IodmFyIF9pID0gMDtfaSA8IF9hbGxFbGVtcy5sZW5ndGg7IF9pKyspIHsKCQkJX2FsbEVsZW1zW19pXS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDEyMDBweDsgbGVmdDogMHB4OyB0b3A6ICcgKyBfaSo0MDQgKyAncHgnKTsKCQl9CgkJd2luZG93LnNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhcnRpY2xlJylbMF0ucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2hlaWdodDogIiArIF9hbGxFbGVtcy5sZW5ndGggKiA0MDQgKyAicHg7Jyk7IiwgMjApOwoJfQoKCWZ1bmN0aW9uIGNoYW5nZUxpbmtzKCkgewoJCXZhciBfYWxsTGlua3MgPSAkKCdhLm5hdlRyaWdnZXIxLCAubmF2VHJpZ2dlcjEtcm93LWl0ZW1zIC5tZW51Omxhc3QgLm1lbnUtbGlzdCAubmF2TWVudTEtaXRlbScpOwoJCXZhciBfZnJvbVRvID0gc2V0dGluZ3MuZnJvbVRvOwoKCQl2YXIgX2xvYzsKCQkkKF9hbGxMaW5rcykuZWFjaChmdW5jdGlvbiAoX2xJbmQsIF9sVmFsKSB7CgkJCXZhciBfbGluayA9ICQoX2xWYWwpOwoJCQlpZihfbGluay5oYXNBdHRyKCdocmVmJykpIHsKCQkJCV9sb2MgPSBfbGluay5hdHRyKCdocmVmJykucmVwbGFjZSgvXmh0dHBzPzpcL1wvd3d3XC5teWRlYWx6XC5kZShcLyhob3R8ZGlzY3Vzc2VkfG5ldyk/KT8kLywgJy8nKS5yZXBsYWNlKC9eaHR0cHM/OlwvXC93d3dcLm15ZGVhbHpcLmRlXC8oW2EtekEtWi1dKyk/JC8sICckMScpLnJlcGxhY2UoLy0/KG5ld3xkaXNjdXNzZWQpPyQvLCcnKTsKCQkJCWlmKF9sb2MgaW4gX2Zyb21UbykgewoJCQkJCV9saW5rLmF0dHIoJ2hyZWYnLCBfbGluay5hdHRyKCdocmVmJykucmVwbGFjZSgvXihodHRwcz86XC9cL3d3d1wubXlkZWFselwuZGUpLiokLywgJyQxJyArICcvJyArIF9mcm9tVG9bX2xvY10pKTsKCQkJCX0KCQkJfQoJCX0pOwoJfQoKCWZ1bmN0aW9uIHJlbW9kZWxOYXZCYXIoKSB7CgkJdmFyIF9zdWJNZW51ID0gJCgnaGVhZGVyIHN0cm9uZ1tkYXRhLWhhbmRsZXI9Im1lbnUiXScpOwoJCV9zdWJNZW51LmZpbmQoJ3NwYW5bY2xhc3MhPSJuYXZUcmlnZ2VyLWFycm93Il0nKS5yZW1vdmUoKTsKCQlfc3ViTWVudSA9IF9zdWJNZW51LnBhcmVudCgpLnBhcmVudCgpOwoJCXZhciBfYnV0dG9uSW5kZXggPSAxOwoJCXZhciBfYnV0dG9uQmVmb3JlU3ViSW5kZXggPSAwOwoJCXZhciBfYnV0dG9uOwoJCXZhciBfc3ViSGlkZGVuQnV0dG9uOwoJCXZhciBfc2VsZWN0ZWQ7CgkJdmFyIF9tb3JlSGlnaGxpZ2h0ID0gdHJ1ZTsKCQlmb3IoX2JJbmQgaW4gc2V0dGluZ3MubW92ZUJ1dHRvbnMpIHsKCQkJaWYoX2JJbmQgPT0gJ18nKSB7CgkJCQlfYnV0dG9uID0gJCgnLm5hdlRyaWdnZXIxLXJvdy1pdGVtcyA+IGxpID4gYS5uYXZUcmlnZ2VyMVtocmVmPSJodHRwOi8vd3d3Lm15ZGVhbHouZGUvIl0sIC5uYXZUcmlnZ2VyMS1yb3ctaXRlbXMgbGkubWVudSB1bC5tZW51LWxpc3QgbGkuaGlkZS0tZG93blRocm91Z2gtIGFbaHJlZj0iaHR0cDovL3d3dy5teWRlYWx6LmRlLyJdJyk7CgkJCX0gZWxzZSB7CgkJCQlfYnV0dG9uID0gJCgnLm5hdlRyaWdnZXIxLXJvdy1pdGVtcyA+IGxpID4gYS5uYXZUcmlnZ2VyMVtocmVmKj0iJyArIF9iSW5kICsgJyJdLCAubmF2VHJpZ2dlcjEtcm93LWl0ZW1zIGxpLm1lbnUgdWwubWVudS1saXN0IGxpLmhpZGUtLWRvd25UaHJvdWdoLSBhW2hyZWYqPSInICsgX2JJbmQgKyAnIl0nKTsKCQkJfQoKCQkJX3NlbGVjdGVkID0gX2J1dHRvbi5oYXNDbGFzcygnbmF2VHJpZ2dlcjEtLXNlbGVjdGVkJykgfHwgX2J1dHRvbi5oYXNDbGFzcygnbmF2TWVudTEtaXRlbS0tc2VsZWN0ZWQnKTsKCgkJCWlmKF9idXR0b24uaGFzQ2xhc3MoJ25hdlRyaWdnZXIxJykgJiYgc2V0dGluZ3MubW92ZUJ1dHRvbnNbX2JJbmRdKSB7CgkJCQlfYnV0dG9uLmF0dHIoJ2NsYXNzJywgJ25hdlRyaWdnZXIxIG5hdlRyaWdnZXIxaGlkZS0tdXBUby1tZW51JyArIF9idXR0b25JbmRleCsrKTsKCQkJfSBlbHNlIGlmIChfYnV0dG9uLmhhc0NsYXNzKCduYXZUcmlnZ2VyMScpICYmICFzZXR0aW5ncy5tb3ZlQnV0dG9uc1tfYkluZF0pIHsKCQkJCS8vIFZlcnNjaGllYmUgaW4gVW50ZXJtZW51CgkJCQlfc3ViTWVudS5maW5kKCdsaS5oaWRlLS1kb3duVGhyb3VnaC0gYS5uYXZNZW51MS1pdGVtJykuZXEoX2J1dHRvbkJlZm9yZVN1YkluZGV4KyspLnBhcmVudCgpLmJlZm9yZShfYnV0dG9uLmF0dHIoJ2NsYXNzJywgJ25hdk1lbnUxLWl0ZW0nKS5wYXJlbnQoKS5hdHRyKCdjbGFzcycsICdoaWRlLS1kb3duVGhyb3VnaC0nKSk7CgkJCX0gZWxzZSBpZihfYnV0dG9uLmhhc0NsYXNzKCduYXZNZW51MS1pdGVtJykgJiYgc2V0dGluZ3MubW92ZUJ1dHRvbnNbX2JJbmRdKSB7CgkJCQkvLyBWZXJzY2hpZWJlIGlucyBIYXVwdG1lbnUKCQkJCV9zdWJNZW51LmJlZm9yZShfYnV0dG9uLnJlbW92ZUNsYXNzKCduYXZNZW51MS1pdGVtIG5hdk1lbnUxLWl0ZW0tLXNlbGVjdGVkJykuYWRkQ2xhc3MoJ25hdlRyaWdnZXIxJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ25hdk1lbnUxLWl0ZW0gaGlkZS0tZG93blRocm91Z2gtJykuYWRkQ2xhc3MoJ3RHcmlkLWNlbGwgaGlkZS0tdXBUby1tZW51JyArIF9idXR0b25JbmRleCkpOwoJCQl9CgoJCQlpZihfc2VsZWN0ZWQpIHsKCQkJCWlmKF9idXR0b24uaGFzQ2xhc3MoJ25hdlRyaWdnZXIxJykpIHsKCQkJCQlfYnV0dG9uLmFkZENsYXNzKCduYXZUcmlnZ2VyMS0tc2VsZWN0ZWQnKTsKCQkJCQlfbW9yZUhpZ2hsaWdodCA9IGZhbHNlOwoJCQkJfSBlbHNlIHsKCQkJCQlfYnV0dG9uLmFkZENsYXNzKCduYXZNZW51MS1pdGVtLS1zZWxlY3RlZCcpOwoJCQkJCWlmKCQoJ2hlYWRlci5oZWFkZXIgLm5hdlRyaWdnZXIxLXJvdyAubmF2VHJpZ2dlcjEtcm93LWl0ZW1zIGEubmF2VHJpZ2dlcjFbaHJlZj0iJyArIF9idXR0b24uYXR0cignaHJlZicpICsgJyJdJykubGVuZ3RoID09IDApIHsKCQkJCQkJX21vcmVIaWdobGlnaHQgPSB0cnVlOwoJCQkJCX0gZWxzZSB7CgkJCQkJCV9tb3JlSGlnaGxpZ2h0ID0gZmFsc2U7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlmb3IoX2J1dHRvbkluZGV4ID0gMTsgX2J1dHRvbkluZGV4IDw9IDQ7IF9idXR0b25JbmRleCsrKSB7CgkJCV9idXR0b24gPSAkKCcubmF2VHJpZ2dlcjEtcm93LWl0ZW1zID4gbGkuaGlkZS0tdXBUby1tZW51JyArIF9idXR0b25JbmRleCArICcgPiBhLm5hdlRyaWdnZXIxJyk7CgkJCWlmKF9idXR0b24ubGVuZ3RoKSB7CgkJCQlfc3ViSGlkZGVuQnV0dG9uID0gJCgnLm5hdlRyaWdnZXIxLXJvdy1pdGVtcyBsaS5tZW51IHVsLm1lbnUtbGlzdCBsaS5oaWRlLS1kb3duVGhyb3VnaC1tZW51JyArIF9idXR0b25JbmRleCArICcgYScpOwoJCQkJX3N1YkhpZGRlbkJ1dHRvbi5hdHRyKCdocmVmJywgX2J1dHRvbi5hdHRyKCdocmVmJykpLmh0bWwoX2J1dHRvbi5odG1sKCkpOwoJCQl9IGVsc2UgewoJCQkJJCgnLm5hdlRyaWdnZXIxLXJvdy1pdGVtcyBsaS5tZW51IHVsLm1lbnUtbGlzdCBsaS5oaWRlLS1kb3duVGhyb3VnaC1tZW51JyArIF9idXR0b25JbmRleCkucmVtb3ZlKCk7CgkJCX0KCQl9CgoJCSQoJ2hlYWRlciBzdHJvbmdbZGF0YS1oYW5kbGVyPSJtZW51Il0nKS5yZW1vdmVDbGFzcygnbmF2VHJpZ2dlcjEtLXNlbGVjdGVkJyk7CgkJaWYoX21vcmVIaWdobGlnaHQpIHsKCQkJJCgnaGVhZGVyIHN0cm9uZ1tkYXRhLWhhbmRsZXI9Im1lbnUiXScpLmFkZENsYXNzKCduYXZUcmlnZ2VyMS0tc2VsZWN0ZWQnKTsKCQl9CgkJaWYoc2V0dGluZ3MudXNlck1lbnVEaXJlY3QucG4pIHsKCQkJdmFyIF9tZW51RWxlbSA9ICQoJ3VsLnVzZXJCYXIgbGFiZWwudXNlckJhci1idXR0b24tLXBtJykucmVtb3ZlQXR0cignZGF0YS1tZW51JykucmVtb3ZlQXR0cignZGF0YS1oYW5kbGVyJyk7CgkJCV9tZW51RWxlbS5maW5kKCdpbnB1dCcpLnJlbW92ZUF0dHIoJ2RhdGEtaGFuZGxlcicpLmNsaWNrKGZ1bmN0aW9uKCkgeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lICsgJy9wcm9maWxlLycgKyB1c2VyTmFtZSArICcvbWVzc2FnZXMnOyB9KTsKCQl9CgkJaWYoc2V0dGluZ3MudXNlck1lbnVEaXJlY3QuYWNjb3VudCkgewoJCQl2YXIgX21lbnVFbGVtID0gJCgndWwudXNlckJhciBsYWJlbC51c2VyQmFyLWJ1dHRvbi0tdXNlcicpLnJlbW92ZUF0dHIoJ2RhdGEtbWVudScpLnJlbW92ZUF0dHIoJ2RhdGEtaGFuZGxlcicpOwoJCQlfbWVudUVsZW0uZmluZCgnaW5wdXQnKS5yZW1vdmVBdHRyKCdkYXRhLWhhbmRsZXInKS5jbGljayhmdW5jdGlvbigpIHsgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSArICcvcHJvZmlsZS8nICsgdXNlck5hbWU7IH0pOwoJCX0KCgkJdmFyIF9hZGREZWFsID0gJCgnLm5hdlRyaWdnZXIxLXJvdyB1bC5oZWFkZXItdXNlcj5saS51c2VyYmFyLXBhZGRpbmctcmlnaHQgc3Bhbi5pbmxpbmUnKTsKCQlfYWRkRGVhbC50ZXh0KF9hZGREZWFsLnRleHQoKS5yZXBsYWNlKC8gZWludHJhZ2VuLywnJykpOwoJfQoKCWZ1bmN0aW9uIGFkZEN5YmVyRGVhbHooKSB7CgkJdmFyIF9uZXdNZW51ID0gJCgnPGxpPicpLmFkZENsYXNzKCdoaWRlLS1kb3duVGhyb3VnaC0nKS5hcHBlbmQoJCgnPGE+JykuYWRkQ2xhc3MoJ25hdk1lbnUxLWl0ZW0nKS5hdHRyKCdocmVmJywnaHR0cDovL3d3dy5teWRlYWx6LmRlL2N5YmVyLW1vbmRheS9jeWJlcmRlYWxzJykuaHRtbCgnQ3liZXItRGVhbHMnKSkuYXBwZW5kVG8oJCgnLm5hdk1lbnUtLXdpZHRoLWwnKS5lcSgwKSk7Cgl9CgoJZnVuY3Rpb24gcmVtb3ZlQWRzKCkgewoJCXZhciBfYWRzID0ge3RvcEJhcjogJy50b3BCYXInLCBnc1dpZGdldDogJyNncy13aWRnZXQnLCBpbnNpZGU6ICIjc2lkZSBzZWN0aW9uW2RhdGEtdHJhY2s9XCJ7XFxcImNhdGVnb3J5XFxcIjpcXFwiQmFubmVyIFNpZGViYXJcXFwifVwiXSIsIG5sU2VjdGlvbjogJy5pbmxpbmUtbmV3c2xldHRlciwgLm5ld3NsZXR0ZXInLCBhcHA6ICdbYWx0PSJhcHAgYmFubmVyIGZvciBpb3MgYW5kcm9pZCBhbmQgd2luZG93IHBob25lIl0nfTsKCQlmb3IoX2FJbmQgaW4gX2FkcykgewoJCQlpZihfYUluZCBpbiBzZXR0aW5ncy5oaWRlQWRzICYmIHNldHRpbmdzLmhpZGVBZHNbX2FJbmRdKSB7CgkJCQlpZigkKF9hZHNbX2FJbmRdKSAhPSBudWxsKSB7CgkJCQkJJChfYWRzW19hSW5kXSkucmVtb3ZlKCk7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gYWRkRnVuY0xpbmtzKCkgewoJCXZhciBfdGhyZWFkcyA9ICQoJ2Rpdi50aHJlYWQsIGxpLnRocmVhZCcpOwoJCWlmKF90aHJlYWRzLmxlbmd0aCkgewoJCQkkKF90aHJlYWRzKS5lYWNoKGZ1bmN0aW9uIChfdEluZCwgX3RWYWwpIHsKCQkJCV90aHJlYWQgPSAkKF90VmFsKTsKCQkJCXZhciBfbGlzdCA9IF90aHJlYWQuZmluZCgnZm9vdGVyIHVsJyk7CgkJCQl2YXIgX2F1dGhvciA9ICQudHJpbShfdGhyZWFkLmZpbmQoIi50aHJlYWQtYXV0aG9yIikuZXEoMCkudGV4dCgpKTsKCQkJCXZhciBfdG9waWMgID0gJC50cmltKF90aHJlYWQuZmluZCgiLnRocmVhZC10aXRsZSBoMSIpLmVxKDApLnRleHQoKSk7CgkJCQl2YXIgX3BuTGluayA9ICQoJzxsaT4nKS5hZGRDbGFzcygnaExpc3QtaXRlbScpLmFwcGVuZCgkKCc8YT4nKS5jbGljayhzdGFydFdhaXRGb3JQTikuYWRkQ2xhc3MoJ2xpbmsnKS5hZGRDbGFzcygnaWNvJykuYWRkQ2xhc3MoJ2ljby0tdHlwZS1wbi1ibHVlJykuaHRtbCgnUE4nKS5hdHRyKCdkYXRhLW1vZGFsJywgJ3siZW5kcG9pbnQiOiJodHRwOlxcL1xcL3d3dy5teWRlYWx6LmRlXFwvcHJvZmlsZVxcLycgKyB1c2VyTmFtZSArICdcXC9tZXNzYWdlc1xcL21vZGFsLXdpbmRvdz90bz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KF9hdXRob3IpICsgJyJ9JykuYXR0cignZGF0YS1oYW5kbGVyJywgJ21vZGFsJykuYXR0cignaHJlZicsICdodHRwOi8vaHVrZC5teWRlYWx6LmRlL3Byb2ZpbGUvJyArIHVzZXJOYW1lICsgJy9tZXNzYWdlcy9jb21wb3NlLW1haWw/dG89JyArIGVuY29kZVVSSUNvbXBvbmVudChfYXV0aG9yKSkpOwoJCQkJYWRkR2xvYmFsU3R5bGUoJy5pY28tLXR5cGUtcG4tYmx1ZTo6YmVmb3JlIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQW9BQUFBS0NBSUFBQUFDVUZqcUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc01BQUE3REFjZHZxR1FBQUFCL1NVUkJWQ2hUWS9nUEJtOCsvVmg5NU42a1RWZUFDTWdBY2lIaUlPa2JqejlvWjYxRlEwQkJrUFRuYjcrQW5QMlhuaUhMUWJoQUtZWVROMTRpQ3lFemdGSU1RSnNnSElnRXNqRkFLUlJwTkxUdDlDTUdaT1ZvQ09nNmh2c3ZQcUdKd2hIVVkwQy9va2tBRVZBUUtnMEJ6OTUrdlhEdkxkQzFRQVpVNlA5L0FLUHB2amRKWmUzNEFBQUFBRWxGVGtTdVFtQ0MpOyBiYWNrZ3JvdW5kLXNpemU6IDEwcHggMTBweDsgYmFja2dyb3VuZC1wb3NpdGlvbjogM3B4IDNweDt9Jyk7CgkJCQlfbGlzdC5hcHBlbmQoX3BuTGluayk7CgoJCQkJdmFyIF9yZXBvcnRMaW5rID0gX3RocmVhZC5maW5kKCcuaWNvLS10eXBlLW1lZ2FwaG9uZS1ibHVlJykucGFyZW50KCk7CgkJCQlfbmV3TGluayA9ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ2hMaXN0LWl0ZW0nKS5odG1sKCc8YnV0dG9uIGNsYXNzPSJsaW5rIGljbyBpY28tLXR5cGUtc3BhbS1ibHVlIGljby0tcG9zLWwiIGRhdGEtaGFuZGxlcj0icmVwbGFjZSIgdHlwZT0iYnV0dG9uIj5TcGFtPC9idXR0b24+JykuZmluZCgnYnV0dG9uJykuYXR0cignZGF0YS1yZXBsYWNlJywgJ1siL3ZvdGU/dj1zcGFtJnQ9JyArIF90aHJlYWQuYXR0cignaWQnKSArICciLCAiZGl2Il0nKS5wYXJlbnQoKTsKCQkJCV9yZXBvcnRMaW5rLmJlZm9yZShfbmV3TGluayk7CgkJCQlfbmV3TGluayA9ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ2hMaXN0LWl0ZW0nKS5odG1sKCc8YnV0dG9uIGNsYXNzPSJsaW5rIGljbyBpY28tLXR5cGUtdGltZS1ibHVlIGljby0tcG9zLWwiIGRhdGEtaGFuZGxlcj0icmVwbGFjZSIgdHlwZT0iYnV0dG9uIj5BYmdlbGF1ZmVuPC9idXR0b24+JykuZmluZCgnYnV0dG9uJykuYXR0cignZGF0YS1yZXBsYWNlJywgJ1siL3ZvdGU/dj1leHBpcmVkJnQ9JyArIF90aHJlYWQuYXR0cignaWQnKSArICciLCAiZGl2Il0nKS5wYXJlbnQoKTsKCQkJCV9yZXBvcnRMaW5rLmJlZm9yZShfbmV3TGluayk7CgkJCQlfcmVwb3J0TGluay5yZW1vdmUoKTsKCQkJfSk7CgkJfQoJfQoKCWZ1bmN0aW9uIHN0YXJ0V2FpdEZvclBOICgpIHsKCQl2YXIgX3RocmVhZF9pZCA9ICQoJ2Rpdi50aHJlYWQsIGxpLnRocmVhZCcpLmhhcygkKHRoaXMpKS5hdHRyKCdpZCcpOwoJCXRpbWVyLnBuID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uICgpIHsgd2FpdEZvclBOKF90aHJlYWRfaWQpIH0sIDUwKTsKCX0KCglmdW5jdGlvbiB3YWl0Rm9yUE4oX3RocmVhZF9pZCkgewoJCWlmKCEkKCcjJyArIF90aHJlYWRfaWQpLmZpbmQoJy5pY28tLXR5cGUtcG4tYmx1ZScpLmhhc0NsYXNzKCdzZWFsLS1zcGluJykpIHsKCQkJaWYoJ3BuJyBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIucG4pOwoJCQkJZGVsZXRlIHRpbWVyLnBuOwoJCQl9CgkJCSQoJyNwbS1zdWJqZWN0JykudmFsKCQudHJpbSgkKCcjJyArIF90aHJlYWRfaWQgKyAnIGhlYWRlci50aHJlYWQtaGVhZCBkaXYudGhyZWFkLXRpdGxlIC5pbmxpbmVUZXh0JykudGV4dCgpKSk7CgkJCXNhdmVSZXN0b3JlUE4oJC50cmltKCQoJyMnICsgX3RocmVhZF9pZCArICcgaGVhZGVyLnRocmVhZC1oZWFkIC50aHJlYWQtbWV0YSBhLnRocmVhZC1hdXRob3InKS50ZXh0KCkpLCBfdGhyZWFkX2lkKTsKCQl9Cgl9CgoJZnVuY3Rpb24gaW5zZXJ0RGlyZWN0TGluaygpIHsKCQkvLyBvbkNsaWNrIGVudGZlcm50CgkJJCgiLmNvbW1lbnRzLWxpc3QgPiBsaSIpLmVhY2goZnVuY3Rpb24oX2luZGV4KSB7CgkJCXZhciBfZGlyZWN0TGluayA9IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lICsgZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUgKyAnP3BhZ2U9JyArICQoIi5mb3JtLS1uYXJyb3cgaW5wdXRbbmFtZT1jdXJfcGFnZV0iKS52YWwoKSArJyMnICsgJCh0aGlzKS5wcm9wKCdpZCcpOwoJCQkkKHRoaXMpLmZpbmQoIi5oTGlzdDpmaXJzdCIpLmFwcGVuZCgiPGxpIGNsYXNzPVwiY29tbWVudC1vcHRpb24gaExpc3QtaXRlbVwiPiA8YSBocmVmPSIgKyBfZGlyZWN0TGluayArIj48YnV0dG9uIGNsYXNzPVwibGluayBpY28gaWNvLS10eXBlLWFycm93LWJsdWUgaWNvLS1wb3MtbFwiPkRpcmVrdGxpbms8L2J1dHRvbj48YS8+PC9saT4iKTsKCQl9KTsKCX0KCglmdW5jdGlvbiBhZGRGZWVkYmFja0J1dHRvbnMoKSB7CgkJdmFyIF90aHJlYWQgPSAkKCdkaXYudGhyZWFkJyk7CgkJaWYoX3RocmVhZC5sZW5ndGgpIHsKCQkJdmFyIF9saXN0ID0gX3RocmVhZC5maW5kKCdmb290ZXIgdWwnKTsKCQkJdmFyIF9hdXRob3IgPSAkLnRyaW0oX3RocmVhZC5maW5kKCIudGhyZWFkLWF1dGhvciIpLmVxKDApLnRleHQoKSk7CgkJfQoJfQoKCWZ1bmN0aW9uIG1hcmtQblJlYWQoKSB7CgkJaWYoc2V0dGluZ3MudXNlck1lbnVEaXJlY3QucG4pIHsKCQkJJC5hamF4KHsKCQkJCW1ldGhvZDogJ1BPU1QnLAoJCQkJdXJsOiAnaHR0cDovL3d3dy5teWRlYWx6LmRlL2FjdGl2aXR5P3R5cGU9cG0nLAoJCQkJY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLAoJCQkJYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyonLAoJCQkJZGF0YVR5cGU6ICdqc29uJwoJCQl9KS5kb25lKGZ1bmN0aW9uICgpIHsKCQkJCSQoJyNhY3Rpdml0aWVzLWNvdW50LXBtJykucmVtb3ZlKCk7CgkJCX0pOwoJCX0KCX0KCglmdW5jdGlvbiBmaWx0ZXJQYXRoKCkgewoJCV9wYXRoID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXlwvKG5ld3xob3R8ZGlzY3Vzc2VkKSQvLCAnLycpLnJlcGxhY2UoL15cLyhbXlwvXSspLiokLywgJyQxJykucmVwbGFjZSgvKC0/KG5ld3xkaXNjdXNzZWQpKT8kLywgJycpOwoJCWlmKF9wYXRoICE9ICcvJyAmJiAhKF9wYXRoIGluIHNldHRpbmdzLmZyb21UbykpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gX3BhdGg7Cgl9CgoJZnVuY3Rpb24gc3RhcnRXYWl0Rm9yU3VibWl0KCkgewoJCXRpbWVyLnN1Ym1pdCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh3YWl0Rm9yU3VibWl0LCA1MCk7Cgl9CgoJZnVuY3Rpb24gd2FpdEZvclN1Ym1pdCgpIHsKCQlpZighJCgnI2NvbW1lbnRGb3JtJykuZXEoMCkuaGFzQ2xhc3MoJ3NlYWwtLXNwaW4nKSkgewoJCQlpZignc3VibWl0JyBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIuc3VibWl0KTsKCQkJCWRlbGV0ZSB0aW1lci5zdWJtaXQ7CgkJCX0KCQkJbW9kaWZ5Q29tbWVudHMoKTsKCQkJYWRkRmVlZGJhY2tCdXR0b25zKCk7CgkJfQoJfQoKCWZ1bmN0aW9uIHN0YXJ0V2FpdEZvckNoYW5nZSgpIHsKCQl2YXIgX2xpbmsgPSAkKHRoaXMpOwoJCXZhciBfcGFyYW1zID0gSlNPTi5wYXJzZShfbGluay5hdHRyKCdkYXRhLXJlcGxhY2UnKSlbMl07CgkJdGltZXJbJ2NoYW5nZV8nK19wYXJhbXMuY29tbWVudF9pZF0gPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7IHdhaXRGb3JDaGFuZ2UoX3BhcmFtcy5jb21tZW50X2lkKX0sIDUwKTsKCX0KCglmdW5jdGlvbiB3YWl0Rm9yQ2hhbmdlKF9jb21tZW50X2lkKSB7CgkJaWYoISQoJ3VsLmNvbW1lbnRzLWxpc3QgI3Bvc3QnICsgX2NvbW1lbnRfaWQgKyAnIGRpdi5jb21tZW50cy1ib2R5JykuZXEoMCkuaGFzQ2xhc3MoJ3NlYWwtLXNwaW4nKSkgewoJCQlpZigoJ2NoYW5nZV8nK19jb21tZW50X2lkKSBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJbJ2NoYW5nZV8nK19jb21tZW50X2lkXSk7CgkJCQlkZWxldGUgdGltZXJbJ2NoYW5nZV8nK19jb21tZW50X2lkXTsKCQkJfQoJCQkkKCd1bC5jb21tZW50cy1saXN0ICNwb3N0JyArIF9jb21tZW50X2lkICsgJyAjY29tbWVudEVkaXRGb3JtLXJlYXNvbicpLmF0dHIoJ3ZhbHVlJywgc2V0dGluZ3MuY29tbWVudHMuZWRpdFJlYXNvbikudmFsKHNldHRpbmdzLmNvbW1lbnRzLmVkaXRSZWFzb24pOwoJCQl2YXIgX2NvbW1lbnRGaWVsZCA9ICQoJyNjb21tZW50RWRpdEZvcm0tY29udGVudC0nICsgX2NvbW1lbnRfaWQpOwoJCQlfY29tbWVudEZpZWxkLnZhbChfY29tbWVudEZpZWxkLnZhbCgpLnJlcGxhY2UoL1w8YnJccypcL1w+JC9tLCAnJykpOwoJCQlfY29tbWVudEZpZWxkLmNoYW5nZShjdXN0b21TbWlsZXlzKTsKCQkJX2NvbW1lbnRGaWVsZC5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcjY29tbWVudEVkaXRGb3JtLXJlYXNvbicpLmNoYW5nZShjdXN0b21TbWlsZXlzKTsKCQkJX2NvbW1lbnRGaWVsZC5wYXJlbnQoKS5maW5kKCdkaXYubWFya0l0VXBIZWFkZXIgbGkuZWRpdG9yLW9wdGlvbi0tdHlwZS1lbW90aWNvbnM+YnV0dG9uJykuY2xpY2soc3RhcnRXYWl0Rm9yU21pbGV5cyk7CgkJfQoJfQoJCglmdW5jdGlvbiBzdGFydFdhaXRGb3JTbWlsZXlzKCkgewoJCWxhc3RGb2N1cyA9ICQoJzpmb2N1cycpOwoJCXZhciBfbGkgPSAkKHRoaXMpOwoJCXRyeSB7CgkJCXZhciBfZm9ybSA9ICQoX2xpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJ3RleHRhcmVhLmlucHV0JylbMF0uZm9ybSk7CgkJCXZhciBfY29tbWVudF9pZCA9ICduZXcnOwoJCQlpZihfZm9ybS5hdHRyKCdpZCcpID09ICdjb21tZW50RWRpdEZvcm0nKSB7CgkJCQlfY29tbWVudF9pZCA9IF9mb3JtLmZpbmQoJ2lucHV0W25hbWU9ImNvbW1lbnRfaWQiXScpLnZhbCgpOwoJCQl9CgkJCXRpbWVyWydzbWlsZXlzXycrX2NvbW1lbnRfaWRdID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgeyB3YWl0Rm9yU21pbGV5cyhfY29tbWVudF9pZCl9LCA1KTsKCQl9IGNhdGNoIChlKSB7IH0KCX0KCglmdW5jdGlvbiB3YWl0Rm9yU21pbGV5cyhfY29tbWVudF9pZCkgewoJCWlmKCQoJyNwb3dlclRpcDp2aXNpYmxlPnVsPmxpPmEnKS5sZW5ndGgpIHsKCQkJaWYoKCdzbWlsZXlzXycrX2NvbW1lbnRfaWQpIGluIHRpbWVyKSB7CgkJCQl3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aW1lclsnc21pbGV5c18nK19jb21tZW50X2lkXSk7CgkJCQlkZWxldGUgdGltZXJbJ3NtaWxleXNfJytfY29tbWVudF9pZF07CgkJCX0KCQkJJCgnI3Bvd2VyVGlwPnVsPmxpPmEnKS5lYWNoKGZ1bmN0aW9uKF9zSW5kLCBfc1ZhbCkgewoJCQkJaWYoJChfc1ZhbCkuYXR0cigndGl0bGUnKSBpbiBvbGRTbWlsZXlzKSB7CgkJCQkJdmFyIF9saSA9ICQoX3NWYWwpLnBhcmVudCgpOwoJCQkJCXZhciBfY2xhc3NlcyA9IF9saS5hdHRyKCdjbGFzcycpLnNwbGl0KC8gLyk7CgkJCQkJJChfY2xhc3NlcykuZWFjaChmdW5jdGlvbiAoX2NJbmQsIF9jVmFsKSB7CgkJCQkJCWlmKF9jVmFsLm1hdGNoKC9eZWRpdG9yLW1lbnUtaXRlbS0tdHlwZS0vKSkgewoJCQkJCQkJX2xpLnJlbW92ZUNsYXNzKF9jVmFsKTsKCQkJCQkJfQoJCQkJCX0pOwoJCQkJCV9saS5maW5kKCc+YScpLmF0dHIoJ3N0eWxlJywgImJhY2tncm91bmQtaW1hZ2U6IHVybCgnIiArIG9sZFNtaWxleXNbJChfc1ZhbCkuYXR0cigndGl0bGUnKV0gKyAiJyk7Iik7CgkJCQl9CgkJCX0pOwoJCQkvLyBlaWdlbmUgU21pbGV5cwoJCQl2YXIgX3NJRCA9IHBhcnNlSW50KCgkKCcjcG93ZXJUaXA+dWw+bGk6bGFzdCcpLmF0dHIoJ2NsYXNzJykgKyAnICcpLnJlcGxhY2UoL14uKm1hcmtJdFVwQnV0dG9uNS0oWzAtOV0rKSAuKiQvLCAnJDEnKSwgMTApOwoJCQlmb3IoX3NJbmQgaW4gc2V0dGluZ3Muc21pbGV5cykgewoJCQkJdmFyIF9uZXdFbGVtID0gJCgnPGxpPicpLmFkZENsYXNzKCdtYXJrSXRVcEJ1dHRvbiBtYXJrSXRVcEJ1dHRvbjUtJyArICgrK19zSUQpICsgJyBpR3JpZC1pdGVtIHRleHQtLWFsaWduLWNlbnRlciBlZGl0b3ItbWVudS1pdGVtJykuYXBwZW5kKCc8YSB0aXRsZT0iJyArIF9zSW5kICsgJyIgaHJlZj0iIiBkYXRhLWhhbmRsZXI9InBvcG92ZXItY2xvc2UiIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCcnICsgc2V0dGluZ3Muc21pbGV5c1tfc0luZF0gKyAnXCcpOyI+PC9hPicpOwoJCQkJJCgnI3Bvd2VyVGlwPnVsJykuYXBwZW5kKF9uZXdFbGVtKTsKCQkJCV9uZXdFbGVtLmZpbmQoJz5hJykuY2xpY2soYWRkU21pbGV5VG9Db21tZW50KTsKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBhZGRTbWlsZXlUb0NvbW1lbnQoKSB7CgkJdmFyIF9zbWlsZXkgPSAnW2ltZ10nICsgc2V0dGluZ3Muc21pbGV5c1skKHRoaXMpLmF0dHIoJ3RpdGxlJyldICsgJ1svaW1nXSc7CgkJaWYobGFzdEZvY3VzLnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpID09ICd0ZXh0YXJlYScpIHsKCQkJdmFyIF9zZWxTdGFydCA9IGxhc3RGb2N1c1swXS5zZWxlY3Rpb25TdGFydDsKCQkJdmFyIF9uZXdUZXh0ID0gbGFzdEZvY3VzLnZhbCgpLnN1YnN0cigwLF9zZWxTdGFydCkgKyBfc21pbGV5ICsgbGFzdEZvY3VzLnZhbCgpLnN1YnN0cihsYXN0Rm9jdXNbMF0uc2VsZWN0aW9uRW5kKTsKCQkJbGFzdEZvY3VzLnZhbChfbmV3VGV4dCk7CgkJCWxhc3RGb2N1c1swXS5zZWxlY3Rpb25FbmQgPSBsYXN0Rm9jdXNbMF0uc2VsZWN0aW9uU3RhcnQgPSBfc2VsU3RhcnQgKyBfc21pbGV5Lmxlbmd0aDsKCQl9Cgl9CgoJZnVuY3Rpb24gc3RhcnRXYWl0Rm9yQ29tbWVudE1lbnUoX2NvbW1lbnRGaWVsZCkgewoJCXRpbWVyWydjb21tZW50bWVudSddID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgeyB3YWl0Rm9yQ29tbWVudE1lbnUoX2NvbW1lbnRGaWVsZCl9LCA1MCk7Cgl9CgkKCWZ1bmN0aW9uIHdhaXRGb3JDb21tZW50TWVudShfY29tbWVudEZpZWxkKSB7CgkJdmFyIF9saSA9IF9jb21tZW50RmllbGQucGFyZW50KCkuZmluZCgnZGl2Lm1hcmtJdFVwSGVhZGVyIGxpLmVkaXRvci1vcHRpb24tLXR5cGUtZW1vdGljb25zJyk7CgkJaWYoX2xpLmxlbmd0aCkgewoJCQl3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aW1lclsnY29tbWVudG1lbnUnXSk7CgkJCWRlbGV0ZSh0aW1lclsnY29tbWVudG1lbnUnXSk7CgkJCV9saS5maW5kKCc+YnV0dG9uJykuY2xpY2soc3RhcnRXYWl0Rm9yU21pbGV5cyk7CgkJfQoJfQoJCglmdW5jdGlvbiBjdXN0b21TbWlsZXlzKCkgewoJCXZhciBfY29tbWVudEZpZWxkID0gJCh0aGlzKTsKCQlpZihzZXR0aW5ncy5vbGRTbWlsZXlzLnVzZSkgewoJCQlmb3IoX3NJbmQgaW4gb2xkU21pbGV5cykgewoJCQkJX2NvbW1lbnRGaWVsZC52YWwoX2NvbW1lbnRGaWVsZC52YWwoKS5yZXBsYWNlKG5ldyBSZWdFeHAoUmVnRXhwLmVzY2FwZShfc0luZCksICdnJyksICdbaW1nXScrb2xkU21pbGV5c1tfc0luZF0rJ1svaW1nXScpKTsKCQkJfQoJCX0KCQlmb3IoX3NJbmQgaW4gc2V0dGluZ3Muc21pbGV5cykgewoJCQlfY29tbWVudEZpZWxkLnZhbChfY29tbWVudEZpZWxkLnZhbCgpLnJlcGxhY2UobmV3IFJlZ0V4cChSZWdFeHAuZXNjYXBlKF9zSW5kKSwgJ2cnKSwgJ1tpbWddJytzZXR0aW5ncy5zbWlsZXlzW19zSW5kXSsnWy9pbWddJykpOwoJCX0KCX0KCglmdW5jdGlvbiBtb2RpZnlDb21tZW50cygpIHsKCQl2YXIgX2NoYW5nZUxpbmtzID0gJCgndWwuY29tbWVudHMtbGlzdCAuaWNvLS10eXBlLWVkaXQtYmx1ZScpLm9mZignY2xpY2snLCBzdGFydFdhaXRGb3JDaGFuZ2UpLm9uKCdjbGljaycsIHN0YXJ0V2FpdEZvckNoYW5nZSk7CgkJJCgnI2NvbW1lbnRGb3JtJykuc3VibWl0KHN0YXJ0V2FpdEZvclN1Ym1pdCk7CgoJCV9jb21tZW50RmllbGQgPSAkKCcjY29tbWVudEZvcm0tY29udGVudCcpOwoJCWlmKHNldHRpbmdzLmNvbW1lbnRzLnVzZVNpZ25hdHVyZSkgewoJCQlpZihfY29tbWVudEZpZWxkLmxlbmd0aCAmJiBzZXR0aW5ncy5jb21tZW50cy5zaWduYXR1cmUubGVuZ3RoICYmIF9jb21tZW50RmllbGQudmFsKCkuaW5kZXhPZihzZXR0aW5ncy5jb21tZW50cy5zaWduYXR1cmUpID09IC0xKSB7CgkJCQlfY29tbWVudEZpZWxkLnZhbChfY29tbWVudEZpZWxkLnZhbCgpICsgIlxuIiArIHNldHRpbmdzLmNvbW1lbnRzLnNpZ25hdHVyZSk7CgkJCQlfY29tbWVudEZpZWxkLnNldEN1cnNvclBvc2l0aW9uKDApOwoJCQl9CgkJfQoJCV9jb21tZW50RmllbGQuY2hhbmdlKGN1c3RvbVNtaWxleXMpOwoJCV9jb21tZW50RmllbGQuYmx1cihjdXN0b21TbWlsZXlzKTsKCQlzdGFydFdhaXRGb3JDb21tZW50TWVudShfY29tbWVudEZpZWxkKTsKCgkJdmFyIF9xdW90ZUxpbmtzID0gJCgnLmljby0tdHlwZS1xdW90ZS1ibHVlJyk7CgkJaWYoX3F1b3RlTGlua3MubGVuZ3RoKSB7CgkJCV9xdW90ZUxpbmtzLmVhY2goZnVuY3Rpb24gKF9xbEluZCwgX3FsVmFsKSB7CgkJCQl2YXIgX3F1b3RlTGluayA9ICQoX3FsVmFsKTsKCQkJCV9xdW90ZUxpbmsucmVtb3ZlQXR0cignZGF0YS10cmFjaycpLnJlbW92ZUF0dHIoJ2RhdGEtaGFuZGxlcicpOwoJCQkJX3F1b3RlTGluay5jbGljayhncmFiUXVvdGUpOwoJCQl9KTsKCQl9CgoJCXZhciBfdXNlckF2YXRhcnMgPSAkKCdpbWcuYXZhdGFyLWltYWdlLS1jb21tZW50Om5vdChbZGF0YS1wb3BvdmVyKj0iLycgKyB1c2VyTmFtZSArICc/Il0pJyk7CgkJaWYoX3VzZXJBdmF0YXJzLmxlbmd0aCkgewoJCQlfdXNlckF2YXRhcnMub2ZmKCdjbGljaycsIHN0YXJ0V2FpdEZvclVzZXJDb21tZW50TWVudSkub24oJ2NsaWNrJywgc3RhcnRXYWl0Rm9yVXNlckNvbW1lbnRNZW51KTsKCQl9Cgl9CgoJZnVuY3Rpb24gc3RhcnRXYWl0Rm9yVXNlckNvbW1lbnRNZW51KCkgewoJCXZhciBfbGluayA9ICQodGhpcyk7CgkJdmFyIF9jb21tZW50VXNlciA9IF9saW5rLmF0dHIoJ2RhdGEtcG9wb3ZlcicpLnJlcGxhY2UoL14uKnByb2ZpbGVcXFwvKFteXD9dKylcPy4qJC8sICckMScpOwoJCXRpbWVyWyd1c2VyQ29tbWVudE1lbnVfJytfY29tbWVudFVzZXJdID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgeyB3YWl0Rm9yVXNlckNvbW1lbnRNZW51KF9jb21tZW50VXNlcil9LCA1MCk7Cgl9CgoJZnVuY3Rpb24gd2FpdEZvclVzZXJDb21tZW50TWVudShfY29tbWVudFVzZXIpIHsKCQlpZigkKCcjcG93ZXJUaXAgPiBkaXYnKS5oYXNDbGFzcygncHJvZmlsZScpKSB7CgkJCWlmKCd1c2VyQ29tbWVudE1lbnVfJyArIF9jb21tZW50VXNlciBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJbJ3VzZXJDb21tZW50TWVudV8nICsgX2NvbW1lbnRVc2VyXSk7CgkJCQlkZWxldGUgdGltZXJbJ3VzZXJDb21tZW50TWVudV8nICsgX2NvbW1lbnRVc2VyXTsKCQkJfQoJCQkvLyBhdHRhY2ggRXZlbnRzIG9uIFBOLUJ1dHRvbgoJCQkkKCcjcG93ZXJUaXAgPiBkaXYucHJvZmlsZSB1bC5wcm9maWxlLWNvbHVtbiBhLmJ1dHRvbicpLmhhcygnc3Bhbi5pY28tLXR5cGUtbWFpbC13aGl0ZScpLm9uKCdjbGljaycsIHN0YXJ0V2FpdEZvckNvbW1lbnRQTik7CgkJfQoJfQoKCWZ1bmN0aW9uIHN0YXJ0V2FpdEZvckNvbW1lbnRQTigpIHsKCQl2YXIgX2xpbmsgPSAkKHRoaXMpOwoJCXZhciBfcG5Vc2VyID0gX2xpbmsuYXR0cignaHJlZicpLnJlcGxhY2UoL14uKlw/dG89KC4qKSQvLCAnJDEnKTsKCQl0aW1lclsncG5XaW5kb3dfJytfcG5Vc2VyXSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHsgd2FpdEZvckNvbW1lbnRQTihfcG5Vc2VyKX0sIDUwKTsKCX0KCglmdW5jdGlvbiB3YWl0Rm9yQ29tbWVudFBOKF9wblVzZXIpIHsKCQlpZighJCgnI3Bvd2VyVGlwID4gZGl2LnByb2ZpbGUgdWwucHJvZmlsZS1jb2x1bW4gYS5idXR0b24nKS5oYXMoJ3NwYW4uaWNvLS10eXBlLW1haWwtd2hpdGUnKS5oYXNDbGFzcygnc2VhbC0tc3BpbicpKSB7CgkJCWlmKCdwbldpbmRvd18nICsgX3BuVXNlciBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJbJ3BuV2luZG93XycgKyBfcG5Vc2VyXSk7CgkJCQlkZWxldGUgdGltZXJbJ3BuV2luZG93XycgKyBfcG5Vc2VyXTsKCQkJfQoJCQlzYXZlUmVzdG9yZVBOKF9wblVzZXIpOwoJCX0KCX0KCglmdW5jdGlvbiBzYXZlUE4oX3VzZXJQYXRoKSB7CgkJc2F2ZS5wbltfdXNlclBhdGhdID0ge21lc3NhZ2U6ICQoJyNwbS1tZXNzYWdlJykudmFsKCksIHN1YmplY3Q6ICQoJyNwbS1zdWJqZWN0JykudmFsKCl9OwoJfQoKCWZ1bmN0aW9uIHNhdmVSZXN0b3JlUE4oX3BuVXNlciwgX3RocmVhZF9pZCwgX2luaXRTYXZlKSB7CgkJLy8gYXR0YWNoIEV2ZW50cyBvbiBQTi1CdXR0b24KCQl2YXIgX3VzZXJQYXRoID0gX3BuVXNlciArIChfdGhyZWFkX2lkICE9IG51bGwgPyAnXycgKyBfdGhyZWFkX2lkIDogJycpOwoJCWlmKF91c2VyUGF0aCBpbiBzYXZlLnBuKSB7CgkJCSQoJyNwbS1zdWJqZWN0JykudmFsKHNhdmUucG5bX3VzZXJQYXRoXS5zdWJqZWN0KTsKCQkJJCgnI3BtLW1lc3NhZ2UnKS52YWwoc2F2ZS5wbltfdXNlclBhdGhdLm1lc3NhZ2UpOwoJCX0KCQlpZihfaW5pdFNhdmUgIT0gbnVsbCAmJiBfaW5pdFNhdmUpIHsKCQkJc2F2ZVBOKF91c2VyUGF0aCk7CgkJfQoJCSQoJyNwbS1zdWJqZWN0LCAjcG0tbWVzc2FnZScpLmNoYW5nZShmdW5jdGlvbigpIHsgc2F2ZVBOKF91c2VyUGF0aCk7IH0pOwoJCSQoJ2Rpdi5tb2RhbFdpbi1ib2R5JykuaGFzKCcjcG0tbWVzc2FnZScpLmZpbmQoJ2Zvcm0uZm9ybScpLnN1Ym1pdChmdW5jdGlvbiAoKSB7CgkJCWlmKF91c2VyUGF0aCBpbiBzYXZlLnBuKSB7CgkJCQlkZWxldGUgc2F2ZS5wbltfdXNlclBhdGhdOwoJCQl9CgkJCXRpbWVyWydwblNlbnRfJyArIF91c2VyUGF0aF0gPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyB3YWl0Rm9yUE5TZW50KF9wblVzZXIsIF90aHJlYWRfaWQpIH0sIDUwKTsKCQl9KTsKCX0KCglmdW5jdGlvbiB3YWl0Rm9yUE5TZW50KF9wblVzZXIsIF90aHJlYWRfaWQpIHsKCQlHTV9sb2coJ1dhaXRpbmcgZm9yIFBOIHNlbnQnKTsKCQl2YXIgX2Zvcm0gPSAkKCcjdGVtcGxhdGUtbW9kYWwgLm1vZGFsV2luJykuaGFzKCcjcG0tc3ViamVjdCcpLmZpbmQoJ2Zvcm0uZm9ybScpOwoJCWlmKCFfZm9ybS5oYXNDbGFzcygnc2VhbC0tc3BpbicpKSB7CgkJCXZhciBfdXNlclBhdGggPSBfcG5Vc2VyICsgKF90aHJlYWRfaWQgIT0gbnVsbCA/ICdfJyArIF90aHJlYWRfaWQgOiAnJyk7CgkJCWlmKCdwblNlbnRfJyArIF91c2VyUGF0aCBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJbJ3BuU2VudF8nICsgX3VzZXJQYXRoXSk7CgkJCQlkZWxldGUgdGltZXJbJ3BuU2VudF8nICsgX3VzZXJQYXRoXTsKCQkJfQoJCQl2YXIgX3N1Y2Nlc3MgPSBfZm9ybS5maW5kKCcubWVzc2FnZScpLmVxKDApLmhhc0NsYXNzKCdtZXNzYWdlLS10eXBlLXN1Y2Nlc3MnKTsKCQkJR01fbG9nKCdHZXNlbmRldDogJyArIF9zdWNjZXNzKTsKCQkJaWYoX3N1Y2Nlc3MpIHsKCQkJCSQoJyN0ZW1wbGF0ZS1tb2RhbCAubW9kYWxXaW4nKS5odG1sKCcnKS5yZW1vdmVDbGFzcygnbW9kYWxXaW4nKTsKCQkJCSQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoJ21vZGFsLS1hY3RpdmUnKTsKCQkJCWNyZWF0ZU1lc3NhZ2VXaW5kb3coJ05hY2hyaWNodCB2ZXJzY2hpY2t0IScsICdzdWNjZXNzJyk7CgkJCX0gZWxzZSB7CgkJCQlzYXZlUmVzdG9yZVBOKF9wblVzZXIsIF90aHJlYWRfaWQsIHRydWUpOwoJCQl9CgkJfQoJfQoKCWZ1bmN0aW9uIGdyYWJRdW90ZSgpIHsKCQl2YXIgX3F1b3RlTGluayA9ICQodGhpcyk7CgkJdmFyIF9wYXJhbXMgPSBKU09OLnBhcnNlKF9xdW90ZUxpbmsuYXR0cignZGF0YS1jb21tZW50LXF1b3RlJykpOwoJCSQuYWpheCh7CgkJCW1ldGhvZDogJ1BPU1QnLAoJCQl1cmw6ICdodHRwOi8vd3d3Lm15ZGVhbHouZGUvY29tbWVudD9yYXc9MScsCgkJCWNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKCQkJYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyonLAoJCQlkYXRhOiAnY29tbWVudF9pZD0nICsgX3BhcmFtcy5jb21tZW50SWQgKyAnJnRocmVhZF9pZD0nICsgX3BhcmFtcy50aHJlYWRJZCwKCQkJZGF0YVR5cGU6ICdqc29uJwoJCX0pLmRvbmUoZnVuY3Rpb24gKF9yZGF0YSkgewoJCQlpZih0eXBlb2YgX3JkYXRhID09ICdvYmplY3QnICYmICdkYXRhJyBpbiBfcmRhdGEgJiYgdHlwZW9mIF9yZGF0YS5kYXRhID09ICdvYmplY3QnICYmICdjb21tZW50X2lkJyBpbiBfcmRhdGEuZGF0YSkgewoJCQkJdmFyIF9jb21tZW50ID0gJ1txdW90ZT0nICsgX3BhcmFtcy51c2VybmFtZSArICddJyArIF9yZGF0YS5kYXRhLmNvbnRlbnQucmVwbGFjZSgvXDxiciBcL1w+XFtlZGl0X3JlYXNvbnNcXVteXStcW1wvZWRpdF9yZWFzb25zXF0vbSwgJycpICsgJ1svcXVvdGVdJzsKCQkJCS8qIFplaWxlbndlY2hzZWwgZW50ZmVybmVuICovCgkJCQlfY29tbWVudCA9IF9jb21tZW50LnJlcGxhY2UoL15ccyskL2csICcnKTsKCQkJCXdoaWxlKC9cblxyP1xuL20udGVzdChfY29tbWVudCkpIHsKCQkJCQlfY29tbWVudCA9IF9jb21tZW50LnJlcGxhY2UoL1xuXHI/XG4vbSwiXG4iKTsKCQkJCX0KCQkJCS8qIG1laHJmYWNoZSBMZWVyemVpY2hlbiAqLwoJCQkJd2hpbGUoLyhcUylbXlxTXHJcbl17Mix9KFxTKS8udGVzdChfY29tbWVudCkpIHsKCQkJCQlfY29tbWVudCA9IF9jb21tZW50LnJlcGxhY2UoLyhcUylbXlxTXHJcbl17Mix9KFxTKS9nLCIkMSAkMiIpOwoJCQkJfQoJCQkJLyogZWluemVsbmUgTGVlcnplaWNoZW4gbmFjaCBCQkNvZGUgKi8KCQkJCV9jb21tZW50ID0gX2NvbW1lbnQucmVwbGFjZSgvcXVvdGUoPShbYS16QS1aMC05XSspPyk/XF1ccy9nLCJxdW90ZSQxXSIpOyAgICAgICAgICAgCgkJCQkvKiBlaW56ZWxuZSBMZWVyemVpY2hlbiB2b3IgQkJDb2RlICovCgkJCQlfY29tbWVudCA9IF9jb21tZW50LnJlcGxhY2UoL1xzXFsoXC8pP3F1b3RlL2csIlskMXF1b3RlIik7CgkJCQkvKiBMZWVyemVpY2hlbiBhbiBBbmZhbmcgdW5kIEVuZGUgZGVzIFN0cmluZ3MgKi8KCQkJCV9jb21tZW50ID0gJC50cmltKF9jb21tZW50KTsKCQkJCV9jb21tZW50ID0gbWF4UXVvdGVzKF9jb21tZW50KTsKCQkJCSQoJyNjb21tZW50Rm9ybS1jb250ZW50JykuaW5zZXJ0QXRDYXJldChfY29tbWVudCk7CgkJCX0KCQl9KTsKCX0KCglmdW5jdGlvbiBtYXhRdW90ZXMoX3F1b3RlQ29udGVudCkgewoJCXZhciBfcXVvdGVTdGFydFBhdHRlcm4gPSAvXFtxdW90ZSg9WzAtOWEtekEtWl9dKyk/XF0vZzsKCQl2YXIgX3F1b3RlRW5kUGF0dGVybiA9IC9cW1wvcXVvdGVcXS9nOwoJCXZhciBfcXVvdGVTdGFydHMgPSBfcXVvdGVDb250ZW50Lm1hdGNoKF9xdW90ZVN0YXJ0UGF0dGVybik7CgkJdmFyIF9xdW90ZUVuZHMgPSBfcXVvdGVDb250ZW50Lm1hdGNoKF9xdW90ZUVuZFBhdHRlcm4pOwoJCXZhciBfcXVvdGVTdGFydENvdW50ID0gMDsKCQl2YXIgX3F1b3RlRW5kQ291bnQgPSAwOwoKCQlpZiAoX3F1b3RlU3RhcnRzICYmIF9xdW90ZUVuZHMpCXsKCQkJX3F1b3RlU3RhcnRDb3VudCA9IF9xdW90ZVN0YXJ0cy5sZW5ndGg7CgkJCV9xdW90ZUVuZENvdW50ID0gX3F1b3RlRW5kcy5sZW5ndGg7CgkJfQoKCQlpZiAoX3F1b3RlU3RhcnRDb3VudCAhPSBfcXVvdGVFbmRDb3VudCkgewoJCQlhbGVydCgiQkJDb2RlcyBmdWVyIFppdGF0ZSBuaWNodCBlaW5kZXV0aWcuIik7CgkJCXJldHVybiBfcXVvdGVDb250ZW50OwoJCX0KCgkJLyogbWF4aW1hbGUgRWJlbmVuICAqLwoJCS8qIG1pdCAwIGJlZ2lubmVuZCAqLwoJCXZhciBfbWF4UXVvdGVMZXZlbCA9IHNldHRpbmdzLmNvbW1lbnRzLm1heFF1b3RlTGV2ZWw7CgkJaWYgKF9xdW90ZVN0YXJ0Q291bnQgPD0gX21heFF1b3RlTGV2ZWwpIHsKCQkJcmV0dXJuIF9xdW90ZUNvbnRlbnQ7CgkJfQoKCQl2YXIgX3N0YXJ0UG9zID0gbmV3IEFycmF5KCk7CgkJdmFyIF9lbmRQb3MgPSBuZXcgQXJyYXkoKTsgIAkKCQl2YXIgX3Bvc2l0aW9ucyA9IEFycmF5KCk7CgkJZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9xdW90ZVN0YXJ0Q291bnQ7IF9pKyspIHsKCQkJX3Bvc2l0aW9ucy5wdXNoKHtwb3M6IF9xdW90ZUNvbnRlbnQuaW5kZXhPZihfcXVvdGVTdGFydHNbX2ldLCBfc3RhcnRQb3NbX2ktMV0gKyAxKSwgdHlwZTogJ3N0YXJ0JywgbWF0Y2g6IF9xdW90ZVN0YXJ0c1tfaV19KTsKCQkJX3N0YXJ0UG9zW19pXSA9IF9xdW90ZUNvbnRlbnQuaW5kZXhPZihfcXVvdGVTdGFydHNbX2ldLCBfc3RhcnRQb3NbX2ktMV0gKyAxKTsKCQkJX3Bvc2l0aW9ucy5wdXNoKHtwb3M6IF9xdW90ZUNvbnRlbnQuaW5kZXhPZihfcXVvdGVFbmRzW19pXSwgX2VuZFBvc1tfaS0xXSArIDEpLCB0eXBlOiAnZW5kJywgbWF0Y2g6IF9xdW90ZUVuZHNbX2ldfSk7CgkJCV9lbmRQb3NbX2ldID0gX3F1b3RlQ29udGVudC5pbmRleE9mKF9xdW90ZUVuZHNbX2ldLCBfZW5kUG9zW19pLTFdICsgMSk7CgkJfQoJCWRlbGV0ZSBfc3RhcnRQb3M7CgkJZGVsZXRlIF9lbmRQb3M7CgoJCXZhciBfY3VyUXVvdGVMZXZlbCA9IDA7CgkJdmFyIF9yZWR1Y2VkUXVvdGUgPSAnJzsKCQl2YXIgX3N0YXJ0U25pcHBldCA9IDA7CgkJX3Bvc2l0aW9ucy5zb3J0KGZ1bmN0aW9uIChfYSwgX2IpIHsgcmV0dXJuIF9hLnBvcyAtIF9iLnBvczsgfSk7CgoJCWZvcihfaSA9IDA7IF9pIDwgX3Bvc2l0aW9ucy5sZW5ndGg7IF9pKyspIHsKCQkJaWYoX3Bvc2l0aW9uc1tfaV0udHlwZSA9PSAnc3RhcnQnKSB7CgkJCQlpZihfY3VyUXVvdGVMZXZlbCA9PSBfbWF4UXVvdGVMZXZlbCkgewoJCQkJCV9yZWR1Y2VkUXVvdGUgKz0gX3F1b3RlQ29udGVudC5zdWJzdHJpbmcoX3N0YXJ0U25pcHBldCwgX3Bvc2l0aW9uc1tfaV0ucG9zKTsKCQkJCX0KCQkJCV9jdXJRdW90ZUxldmVsKys7CgkJCX0gZWxzZSB7CgkJCQlfY3VyUXVvdGVMZXZlbC0tOwoJCQkJaWYoX2N1clF1b3RlTGV2ZWwgPT0gX21heFF1b3RlTGV2ZWwpIHsKCQkJCQlfc3RhcnRTbmlwcGV0ID0gX3Bvc2l0aW9uc1tfaV0ucG9zICsgX3Bvc2l0aW9uc1tfaV0ubWF0Y2gubGVuZ3RoOwoJCQkJfQoJCQl9CgkJfQoJCV9yZWR1Y2VkUXVvdGUgKz0gX3F1b3RlQ29udGVudC5zdWJzdHIoX3N0YXJ0U25pcHBldCk7CgoJCXJldHVybiBfcmVkdWNlZFF1b3RlOwoJfQoKCWZ1bmN0aW9uIGFkZE1lbnVTd2l0Y2hlcihfcGF0aCkgewoJCWFkZEdsb2JhbFN0eWxlKCcuZW5oYW5jZXItbGluay1tZW51c3dpdGNoIHsgY29sb3I6ICNmZjAwMDAgIWltcG9ydGFudDsgfScpOwoJCV9wYXRoID0gZmlsdGVyUGF0aChfcGF0aCk7CgkJaWYoIV9wYXRoKSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciBfbWVudSA9ICQoJy5uYXZUcmlnZ2VyMi1yb3cgLmZHcmlkLWxhc3QgLm1lbnU6Zmlyc3QnKTsKCQlpZihfbWVudS5sZW5ndGgpIHsKCQkJX21lbnUub24oJ21vdXNlZW50ZXInLCBpbml0TWVudVN3aXRjaCk7CgkJCV9tZW51Lm9uKCdtb3VzZWxlYXZlJywgc3RvcE1lbnVTd2l0Y2gpOwoJCX0KCX0KCglmdW5jdGlvbiBpbml0TWVudVN3aXRjaCgpIHsKCQl0aW1lci5tZW51U3dpdGNoID0gd2luZG93LnNldFRpbWVvdXQobWVudVN3aXRjaCwgMzAwMCk7Cgl9CgoJZnVuY3Rpb24gbWVudVN3aXRjaCgpIHsKCQl2YXIgX21lbnUgPSAkKCcubmF2VHJpZ2dlcjItcm93IC5mR3JpZC1sYXN0IC5tZW51OmZpcnN0Jyk7CgkJX21lbnUuZmluZCgnbGkgYS5uYXYyTW9ycGgtbGluaycpLmFkZENsYXNzKCdlbmhhbmNlci1saW5rLW1lbnVzd2l0Y2gnKS5vbignY2xpY2snLCBzYXZlUGFnZUNob2ljZSk7CgkJX21lbnUuZmluZCgnbGkgYS5uYXYyTW9ycGgtbGluay0tc2VsZWN0ZWQnKS5hZGRDbGFzcygnZW5oYW5jZXItbGluay1tZW51c3dpdGNoLS1zZWxlY3RlZCcpOwoJfQoKCWZ1bmN0aW9uIHNhdmVQYWdlQ2hvaWNlKCkgewoJCXZhciBfZWxlbSA9ICQodGhpcyk7CgkJX3BhdGggPSBmaWx0ZXJQYXRoKF9wYXRoKTsKCQlpZighX3BhdGgpIHsKCQkJcmV0dXJuOwoJCX0KCgkJc2V0dGluZ3MuZnJvbVRvW19wYXRoXSA9IF9lbGVtLmF0dHIoJ2hyZWYnKS5yZXBsYWNlKGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbiArICcvJywgJycpOwoJCXNhdmVTZXR0aW5ncygpOwoJfQoKCWZ1bmN0aW9uIHN0b3BNZW51U3dpdGNoKCkgewoJCWlmKCdtZW51U3dpdGNoJyBpbiB0aW1lcikgewoJCQl0cnkgewoJCQkJd2luZG93LmNsZWFyVGltZW91dCh0aW1lci5tZW51U3dpdGNoKTsKCQkJfSBmaW5hbGx5IHsKCQkJCWRlbGV0ZSB0aW1lci5tZW51U3dpdGNoOwoJCQl9CgkJfQoJCXZhciBfbWVudSA9ICQoJy5uYXZUcmlnZ2VyMi1yb3cgLmZHcmlkLWxhc3QgLm1lbnU6Zmlyc3QnKTsKCQlfbWVudS5maW5kKCcuZW5oYW5jZXItbGluay1tZW51c3dpdGNoJykucmVtb3ZlQ2xhc3MoJ2VuaGFuY2VyLWxpbmstbWVudXN3aXRjaCcpLnJlbW92ZUNsYXNzKCdlbmhhbmNlci1saW5rLW1lbnVzd2l0Y2gtLXNlbGVjdGVkJykub2ZmKCdjbGljaycsIHNhdmVQYWdlQ2hvaWNlKTsKCX0KCglmdW5jdGlvbiBtb2RpZnlMaXN0aW5ncygpIHsKCQl2YXIgX2VsZW1zID0gJCgnbGkudGhyZWFkJyk7CgkJaWYoX2VsZW1zLmxlbmd0aCAmJiBzZXR0aW5ncy5kZWFscy5oaWRlLmxlbmd0aCkgewoJCQlfZWxlbXMuZWFjaChmdW5jdGlvbiAoX2VJbmQsIF9lVmFsKSB7CgkJCQlpZigobmV3IFJlZ0V4cChzZXR0aW5ncy5kZWFscy5oaWRlLCAnaScpKS50ZXN0KCQoX2VWYWwpLmZpbmQoJy50aHJlYWQtaGVhZCAuc2VjdGlvbi10aXRsZS1saW5rJykudGV4dCgpKSkgewoJCQkJCSQoX2VWYWwpLnJlbW92ZSgpOwoJCQkJfQoJCQl9KTsKCQl9Cgl9CgoJZnVuY3Rpb24gYWRkU2Nyb2xsVXBCdXR0b24oKSB7CgkJdmFyIF9uZXdFbGVtID0gJCgnPHNwYW4+JykuYXR0cignaWQnLCAnc2Nyb2xsVXBCdXR0b24nKS5hcHBlbmQoJCgnPGZvcm0+JykuYWRkQ2xhc3MoJ3RHcmlkIHRHcmlkIHRHcmlkLS1hdXRvJykuYXBwZW5kKCQoJzxsYWJlbD4nKS5hZGRDbGFzcygndEdyaWQtY2VsbCBidXR0b24nKS5odG1sKCcmdWFycjsnKS5jbGljayhmdW5jdGlvbiAoKSB7d2luZG93LnNjcm9sbFRvKDAsMCk7IH0pKSk7CgkJJChkb2N1bWVudC5ib2R5KS5hcHBlbmQoX25ld0VsZW0pOwoJCWFkZEdsb2JhbFN0eWxlKCcjc2Nyb2xsVXBCdXR0b24geyBkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGZpeGVkOyBsZWZ0OiAxcHg7IGJvdHRvbTogMzBweDt9ICNzY3JvbGxVcEJ1dHRvbiA+IGZvcm0gPiBsYWJlbCB7IGZvbnQtc2l6ZTogMjBwdDsgIG1pbi13aWR0aDogMjBweDsgbWF4LXdpZHRoOiA0MHB4OyB3aWR0aDogJyArICgkKCcucGFnZS1jYW52YXMnKS5sZW5ndGggJiYgJCgnLnBhZ2UtY29udGVudCcpLmxlbmd0aCA/IE1hdGguZmxvb3IoKCQoJy5wYWdlLWNhbnZhcycpLndpZHRoKCkgLSAkKCcucGFnZS1jb250ZW50Jykud2lkdGgoKSkvMikgKyAncHgnIDogJzIwcHgnKSArICc7IHBhZGRpbmc6IDBweCAwcHggNXB4IDBweDt9Jyk7Cgl9CgoJZnVuY3Rpb24gYWRkSW1hZ2Vab29tKCkgewoJCS8vIEJlc3RlbiBEYW5rIGFuIHZpZWxsZWljaHRtYW5uMSBmw7xyIGRpZSBJZGVlCgkJLy8gQmlsZGVyLVZlcmdyb2Vzc2VydW5ncy1CdXR0b24gZWluZnVlZ2VuCgkJdmFyIF9pbWdzID0gJCgnc3Bhbi5pbWFnZUZyYW1lIC5pbWFnZUZyYW1lLWltYWdlJyk7CgkJaWYoX2ltZ3MubGVuZ3RoKSB7CgkJCV9pbWdzLmVhY2goZnVuY3Rpb24gKF9pSW5kLCBfaVZhbCkgewoJCQkJdmFyIF9pbWcgPSAkKF9pVmFsKTsKCQkJCXZhciBfbGluayA9ICQoJzxhPicpLmF0dHIoJ2hyZWYnLCBfaW1nLmF0dHIoJ3NyYycpLnJlcGxhY2UoInRocmVhZHMvIiwgInRocmVhZHMvaGlnaC1yZXMvIikpLmF0dHIoJ3RhcmdldCcsICdfYmxhbmsnKTsKCQkJCV9saW5rLmFwcGVuZFRvKF9pbWcucGFyZW50KCkpLmFwcGVuZChfaW1nKTsKCQkJCV9saW5rLmNsaWNrKHpvb21JbWFnZSk7CgkJCX0pOwoJCX0KCQl2YXIgX2ltZ0xpbmtzID0gJCgnYS5pbWFnZUZyYW1lJyk7CgkJX2ltZ0xpbmtzLmNsaWNrKHpvb21JbWFnZSk7Cgl9CgoJZnVuY3Rpb24gem9vbUltYWdlKF9ldnQpIHsKCQlfZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJX2V2dC5zdG9wUHJvcGFnYXRpb24oKTsKCQl2YXIgX2xpbmsgPSAkKHRoaXMpOwoJCXZhciBfY29udGFpbmVyID0gJCgnPGRpdj4nKS5hdHRyKCdzdHlsZScsICdwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsgei1pbmRleDogOTk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoNjgsNjgsNjgsMC41KTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46IDA7JykuYXBwZW5kVG8oJChkb2N1bWVudC5ib2R5KSkuYXBwZW5kKCQoJzxzcGFuPicpLmF0dHIoJ3N0eWxlJywgJ2Rpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAxMDAlOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOycpKS5hcHBlbmQoJCgnPGltZz4nKS5hdHRyKCdzcmMnLCBfbGluay5hdHRyKCdocmVmJykpLmF0dHIoJ3N0eWxlJywgJ3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1heC1oZWlnaHQ6ICcgKyAoJCh3aW5kb3cpLmhlaWdodCgpIC0gMikgKyAncHg7IG1heC13aWR0aDogJyArICgkKHdpbmRvdykud2lkdGgoKSAtIDIpICsgJ3B4OyBib3JkZXItcmFkaXVzOiA1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNmZmZmZmY7JykpOwoJCV9jb250YWluZXIuY2xpY2soZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZSgpO30pOwoJfQoKCWZ1bmN0aW9uIHJldHJpZXZlVXNlck5hbWUoKSB7CgkJdHJ5IHsKCQkJdXNlck5hbWUgPSAkKCcudXNlckJhci11c2VyQ2VudGVyLW1lbnUgLmF2YXRhci1mcmFtZScpLnBhcmVudCgpLmh0bWwoKS5yZXBsYWNlKC8oXHJ8XG4pL2csICcnKS5yZXBsYWNlKC9eLipcXFwvcHJvZmlsZVxcXC8oW15cXFw8XD5dKylcXFwvYWpheC4qJC8sICckMScpOwoJCX0gY2F0Y2ggKGUpIHsKCQkJaWYod2luZG93LmxvY2F0aW9uLmhyZWYgIT0gJ2h0dHBzOi8vd3d3Lm15ZGVhbHouZGUvbG9naW4nKSB7CgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdodHRwczovL3d3dy5teWRlYWx6LmRlL2xvZ2luJzsKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBhZGRHbG9iYWxTdHlsZShfY3NzKSB7CgkJdmFyIF9oZWFkLCBfc3R5bGU7CgkJX2hlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOwoJCWlmICghX2hlYWQpIHsgcmV0dXJuOyB9CgkJX3N0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKCQlfc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7CgkJX3N0eWxlLmlubmVySFRNTCA9IF9jc3M7CgkJX2hlYWQuYXBwZW5kQ2hpbGQoX3N0eWxlKTsKCX0KCglmdW5jdGlvbiBsb2FkU2V0dGluZ3MoKSB7CgkJdmFyIF92ZXJib3NlID0gZmFsc2U7CgoJCXZhciBfbFNldHRpbmdzID0gSlNPTi5wYXJzZShHTV9nZXRWYWx1ZSgnc2V0dGluZ3MnLCAne30nKSk7CgkJdmFyIF9zcHJvcDsKCgkJLy8gc2lubnZvbGxlcmVuLCByZWt1cnNpdmVuIFBhcnNlciBzY2hyZWliZW4KCQlmb3IgKHZhciBfcHJvcCBpbiBkZWZhdWx0U2V0dGluZ3MpIHsKCQkJaWYoX3Byb3AgaW4gX2xTZXR0aW5ncykgewoJCQkJc2V0dGluZ3NbX3Byb3BdID0gX2xTZXR0aW5nc1tfcHJvcF07CgkJCX0gZWxzZSB7CgkJCQlzZXR0aW5nc1tfcHJvcF0gPSBkZWZhdWx0U2V0dGluZ3NbX3Byb3BdOwoJCQl9CgoJCQlpZihfdmVyYm9zZSkgewoJCQkJR01fbG9nKF9wcm9wICsgJzogJyArIHNldHRpbmdzW19wcm9wXSk7CgkJCX0KCQkJZm9yKF9zcHJvcCBpbiBkZWZhdWx0U2V0dGluZ3NbX3Byb3BdKSB7CgkJCQlpZih0eXBlb2YgX2xTZXR0aW5nc1tfcHJvcF0gPT0gJ29iamVjdCcgJiYgX3Nwcm9wIGluIF9sU2V0dGluZ3NbX3Byb3BdKSB7CgkJCQkJc2V0dGluZ3NbX3Byb3BdW19zcHJvcF0gPSBfbFNldHRpbmdzW19wcm9wXVtfc3Byb3BdOwoJCQkJfSBlbHNlIHsKCQkJCQlzZXR0aW5nc1tfcHJvcF1bX3Nwcm9wXSA9IGRlZmF1bHRTZXR0aW5nc1tfcHJvcF1bX3Nwcm9wXTsKCQkJCX0KCQkJCWlmKF92ZXJib3NlKSB7CgkJCQkJR01fbG9nKF9wcm9wICsgJy4nICsgX3Nwcm9wICsgJzogJyArIHNldHRpbmdzW19wcm9wXVtfc3Byb3BdKTsKCQkJCX0KCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBhZGRTbWlsZXkoKSB7CgkJdmFyIF9hZGRCdXR0b24gPSAkKHRoaXMpOwoJCXZhciBfZnJvbSA9IF9hZGRCdXR0b24ucGFyZW50KCkuZmluZCgnaW5wdXRbdHlwZT0idGV4dCJdW25hbWU9ImZyb20iXScpOwoJCXZhciBfdG8gICA9IF9hZGRCdXR0b24ucGFyZW50KCkuZmluZCgnaW5wdXRbdHlwZT0idGV4dCJdW25hbWU9InRvIl0nKTsKCgkJaWYoISQudHJpbSgkKF9mcm9tKS52YWwoKSkubGVuZ3RoKSB7CgkJCWNyZWF0ZU1lc3NhZ2VXaW5kb3coJ1NtaWxleWF1c2wmb3VtbDtzZXIgZGFyZiBuaWNodCBsZWVyIHNlaW4uJywgJ2Vycm9yJyk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCWlmKCEkLnRyaW0oJChfdG8pLnZhbCgpKS5sZW5ndGgpIHsKCQkJY3JlYXRlTWVzc2FnZVdpbmRvdygnRXMgbXVzcyBlaW4gQmlsZC1VUkkgYW5nZWdlYmVuIHdlcmRlbi4nLCAnZXJyb3InKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJdHJ5IHsKCQkJdmFyIF90bXBGcm9tID0gbmV3IFJlZ0V4cChSZWdFeHAuZXNjYXBlKF9mcm9tLnZhbCgpKSwgJ2cnKTsKCQkJdmFyIF9leGlzdHMgPSBmYWxzZTsKCQkJJCgnI3NtaWxleXNUYWJsZSB0cicpLmVhY2goZnVuY3Rpb24gKF9zSW5kLCBfc1ZhbCkgewoJCQkJaWYoJChfc1ZhbCkuZmluZCgndGQ6Zmlyc3QnKS50ZXh0KCkgPT0gX2Zyb20udmFsKCkpIHsKCQkJCQlfZXhpc3RzID0gdHJ1ZTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0pOwoJCQlpZihfZXhpc3RzKSB7CgkJCQljcmVhdGVNZXNzYWdlV2luZG93KCdTbWlsZXkgZXhpc3RpZXJ0IGJlcmVpdHMnLCAnZXJyb3InKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSBlbHNlIHsKCQkJCSQoJyNzbWlsZXlzVGFibGUnKS5hcHBlbmQoJCgnPHRyPicpLmFwcGVuZCgkKCc8dGQ+JykudGV4dChfZnJvbS52YWwoKSkpLmFwcGVuZCgkKCc8dGQ+JykuaHRtbCgnJnJhcnI7JykpLmFwcGVuZCgkKCc8dGQ+JykuYWRkQ2xhc3MoJ3NtaWxleUV4YW1wbGUnKS5hcHBlbmQoJCgnPGltZz4nKS5hdHRyKCdzcmMnLCBfdG8udmFsKCkpKSkuYXBwZW5kKCQoJzx0ZD4nKS5hZGRDbGFzcygnc21pbGV5c19yZW1vdmUnKS5hdHRyKCdhbHQnLCAnRW50ZmVybmVuJykudGV4dCgnWCcpLmNsaWNrKHJlbW92ZVNtaWxleSkpKTsKCQkJCV9mcm9tLnZhbCgnJyk7CgkJCQlfdG8udmFsKCcnKTsKCQkJfQoJCX0gY2F0Y2ggKGUpIHsKCQkJCWNyZWF0ZU1lc3NhZ2VXaW5kb3coJ1VuZ8O8bHRpZ2VyIFN1Y2hhdXNkcnVjay4nICsgZSwgJ2Vycm9yJyk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJCglmdW5jdGlvbiByZW1vdmVTbWlsZXkoKSB7CgkJdmFyIF9yZW1vdmVDZWxsID0gJCh0aGlzKTsKCQlfcmVtb3ZlQ2VsbC5wYXJlbnQoKS5yZW1vdmUoKTsKCX0KCglmdW5jdGlvbiBjcmVhdGVNZXNzYWdlV2luZG93KF90ZXh0LCBfdHlwZSwgX2NhbGxiYWNrKSB7CgkJdmFyIF9tZXNzYWdlTGlzdCA9ICQoJyNnbG9iYWxNc2cgLmdsb2JhbE1zZy1saXN0Jyk7CgkJJCgnPGxpPicpLmFkZENsYXNzKCdnbG9iYWxNc2ctaXRlbSBnbG9iYWxNc2ctaXRlbS0tdHlwZS1zdWNjZXNzIG1lc3NhZ2UgIG1lc3NhZ2UtLXR5cGUtc3VjY2VzcycpLmh0bWwoJzxsaSBjbGFzcz0iZ2xvYmFsTXNnLWl0ZW0gZ2xvYmFsTXNnLWl0ZW0tLXR5cGUtJyArIF90eXBlICsgJyBtZXNzYWdlICBtZXNzYWdlLS10eXBlLScgKyBfdHlwZSArICciPjxkaXYgY2xhc3M9Im1lc3NhZ2UtaW5uZXIgbUdyaWQiPjxzcGFuIGNsYXNzPSJnbG9iYWxNc2ctaWNvbiAgZ2xvYmFsTXNnLWljb24tLXR5cGUtJyArIF90eXBlICsgJyBtR3JpZC1tZWRpYSBjZW50ZXJDaGlsZDIgaWNvIGljby0tbWlkZGxlIHNpemUtLWFsbC1sYXJnZSI+PC9zcGFuPjxidXR0b24gZGF0YS1oYW5kbGVyPSJnbG9iYWxNc2ctY2xvc2UiIGNsYXNzPSJnbG9iYWxNc2ctY2xvc2UgZkdyaWQtcmlnaHQgc3BhY2UtLWxlZnQtNCBpY28gaWNvLS10eXBlLWNsb3NlLScgKyAoX3R5cGUgPT0gJ2Vycm9yJyA/ICdyZWQnIDogJ2dyZWVuJyApKyAnIj48L2J1dHRvbj48ZGl2IGNsYXNzPSJtR3JpZC1jb250ZW50Ij48ZGl2IGNsYXNzPSJnbG9iYWxNc2ctdGl0bGUiPicgKyBfdGV4dCArICc8L2Rpdj48L2Rpdj48L2Rpdj48L2xpPicpLmFwcGVuZFRvKF9tZXNzYWdlTGlzdCk7CgkJd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewoJCQl0cnkgewoJCQkJaWYoX2NhbGxiYWNrICE9IG51bGwpIHsKCQkJCQlfY2FsbGJhY2soKTsKCQkJCX0KCQkJCV9tZXNzYWdlTGlzdC5maW5kKCdsaScpLnJlbW92ZSgpOwoJCQl9IGNhdGNoKGUpIHsKCQkJfQoJCX0sIDQwMDApOwoJfQoKCWZ1bmN0aW9uIHNob3dPbGRTbWlsZXlzKCkgewoJCWlmKHNldHRpbmdzLm9sZFNtaWxleXMuc2hvdykgewoJCQkkKCcuYmJjb2RlX3NtaWxleScpLmVhY2goZnVuY3Rpb24gKF9iYkluZCwgX2JiVmFsKSB7CgkJCQlpZigkKF9iYlZhbCkuYXR0cigndGl0bGUnKSBpbiBvbGRTbWlsZXlzKSB7CgkJCQkJJChfYmJWYWwpLmFkZENsYXNzKCdiYmNvZGVfc21pbGV5X29sZCcpLmF0dHIoJ3NyYycsIG9sZFNtaWxleXNbJChfYmJWYWwpLmF0dHIoJ3RpdGxlJyldKTsKCQkJCX0KCQkJfSk7CgkJfQoJCWFkZEdsb2JhbFN0eWxlKCcuY29tbWVudHMtYm9keSAuYmJjb2RlX3NtaWxleV9vbGR7aGVpZ2h0OiAxOHB4OyB2ZXJ0aWNhbC1hbGlnbjogdG9wO30nKTsKCX0KCglmdW5jdGlvbiBlbWJlZFlvdXR1YmUoKSB7CgkJaWYoIXNldHRpbmdzLmRpc3BsYXkuZW1iZWRZb3V0dWJlKSB7CgkJCXJldHVybjsKCQl9CgoJCWZ1bmN0aW9uIF9pc1lvdXR1YmVVcmwoX3VybCkgewoJCQl2YXIgX3AgPSAvXig/Omh0dHBzPzpcL1wvKT8oPzptXC58d3d3XC4pPyg/OnlvdXR1XC5iZVwvfHlvdXR1YmVcLmNvbVwvKD86ZW1iZWRcL3x2XC98d2F0Y2hcP3Y9fHdhdGNoXD8uKyZ2PSkpKChcd3wtKXsxMX0pKD86XFMrKT8kLzsKCQkJaWYoX3VybC5tYXRjaChfcCkpIHsKCQkJCXJldHVybiBfdXJsLm1hdGNoKF9wKVsxXTsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlmdW5jdGlvbiBfZ2V0WW91dHViZUlkKF91cmwpIHsKCQkJdmFyIF9yZWdFeHAgPSAvXi4qKHlvdXR1LmJlXC98dlwvfHVcL1x3XC98ZW1iZWRcL3x3YXRjaFw/dj18XCZ2PSkoW14jXCZcP10qKS4qLzsKCQkJdmFyIF9tYXRjaCA9IF91cmwubWF0Y2goX3JlZ0V4cCk7CgoJCQlpZiAoX21hdGNoICYmIF9tYXRjaFsyXSkgewoJCQkJcmV0dXJuIF9tYXRjaFsyXTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiAnZXJyb3InOwoJCQl9CgkJfQoKCQkkKCIuYmJjb2RlX3VybCIpLmVhY2goZnVuY3Rpb24oKXsKCQkJaWYoX2lzWW91dHViZVVybCgkKHRoaXMpLmF0dHIoImhyZWYiKSkpIHsKCQkJCSQodGhpcykucmVwbGFjZVdpdGgoZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuICc8ZGl2PjxpZnJhbWUgd2lkdGg9IjQwMCIgaGVpZ2h0PSIyMDAiIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJyArIF9nZXRZb3V0dWJlSWQoICQodGhpcykuYXR0cigiaHJlZiIpICkgKyAnIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPjwvZGl2Pic7IAoJCQkJfSk7CgkJCX0KCQl9KTsKCX0KCQoJZnVuY3Rpb24gbWluaW1pemVRdW90ZXMoKSB7CgkJaWYoIXNldHRpbmdzLmRpc3BsYXkubWluaW1pemVRdW90ZXMpIHsKCQkJcmV0dXJuOwoJCX0KCgkJZnVuY3Rpb24gX3ByZXBRdW90ZUhlYWRlcihfcm9vdCkgewoJCQkvLyBCRUdJTiBSRVFVSVJFRCBPTkUgVElNRSBJTklUIAoJCQkvLyBoaWRlcyBhbGwgcXVvdGVkIGNvbnRlbnQgZXhjZXB0IHRob3NlIHdpdGhvdXQgYSBoZWFkZXIKCQkJJChfcm9vdCkuZmluZCgiLmJiY29kZV9xdW90ZV9oZWFkOm5vdCg6ZW1wdHkpICB+IC5iYmNvZGVfcXVvdGVfYm9keSIpLmhpZGUoKTsKCgkJCS8vIHNldHMgJ3BvaW50ZXInIGFzIGN1cnNvciB0byBpbmRpY2F0ZSwgdGhhdCB0aGUgZWxlbWVudCBpcyBjbGlja2FibGUKCQkJJChfcm9vdCkuZmluZCgiLmJiY29kZV9xdW90ZV9oZWFkOm5vdCg6ZW1wdHkpIikuY3NzKCJjdXJzb3IiLCAicG9pbnRlciIpLmVhY2goZnVuY3Rpb24gKCkgewoJCQkJLy8gRU5EIFJFUVVJUkVEIE9ORSBUSU1FIElOSVQKCgkJCQl2YXIgX29ubHlUZXh0ID0gJCh0aGlzKS5zaWJsaW5ncygiLmJiY29kZV9xdW90ZV9ib2R5IikuY2xvbmUoKQkvL2Nsb25lIHRoZSBlbGVtZW50CgkJCQkJLmZpbmQoJy5iYmNvZGVfcXVvdGUnKQkvL3NlbGVjdCBhbGwgc3VicXVvdGVzCgkJCQkJLnJlbW92ZSgpCS8vcmVtb3ZlIGFsbCB0aGUgY2hpbGRyZW4KCQkJCQkuZW5kKCkJLy9hZ2FpbiBnbyBiYWNrIHRvIHNlbGVjdGVkIGVsZW1lbnQKCQkJCQkudGV4dCgpOwkvL2dldCB0aGUgdGV4dCBvZiBlbGVtZW50CgkJCQkkKHRoaXMpLmFwcGVuZCggJCggJzxzcGFuIGNsYXNzPSJjb21tZW50LXF1b3RlLXByZXZpZXciPiAtICcgKyAkLnRyaW0oX29ubHlUZXh0LnN1YnN0cmluZygwLDgwKS5yZXBsYWNlKC9bXHJcbl0vZywnJykucmVwbGFjZSgvXHMrL2csICcgJykpICsgJyBbLi4uXSA8L3NwYW4+JyApICk7CgkJCX0pOwoJCX0KCgkJX3ByZXBRdW90ZUhlYWRlcihkb2N1bWVudCk7CgogICAgJChkb2N1bWVudCkub24oICJjbGljayIsIi5iYmNvZGVfcXVvdGVfaGVhZCIsIGZ1bmN0aW9uKCl7CiAgICAgICAgLy8gdG9nZ2xlcyB0aGUgcmVsYXRlZCBjb250ZW50IGFyZWEKICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCIuYmJjb2RlX3F1b3RlX2JvZHkiKS5zbGlkZVRvZ2dsZSgpOyAKICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCIuY29tbWVudC1xdW90ZS1wcmV2aWV3IikudG9nZ2xlKCk7CiAgICB9KTsKICAgIC8vIAogICAgJChkb2N1bWVudCkub24oJ0RPTU5vZGVJbnNlcnRlZCBET01Ob2RlUmVtb3ZlZCcsIi5jb21tZW50cy1pdGVtIiwgZnVuY3Rpb24oX2V2ZW50KSB7CiAgICAgICAgaWYgKF9ldmVudC50eXBlID09ICdET01Ob2RlSW5zZXJ0ZWQnKSB7CiAgICAgICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBzZXQgdGhlIHNhbWUgdGhpbmdzIHVwLCB0aGF0IHdlIHNldHVwIGluIHRoZSBvbmUgdGltZSBpbml0IHNlY3Rpb24sIAogICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGdldCBhIG5ldyBzZXQgb2YgZG9tIGVsZW1lbnRzIAogICAgICAgICAgICBpZigkKHRoaXMpLmhhc0NsYXNzKCJjb21tZW50cy1pdGVtIikgJiYgISQodGhpcykuZmluZCgnLmNvbW1lbnQtcXVvdGUtcHJldmlldycpLmxlbmd0aCl7CgkJCQkJCQlfcHJlcFF1b3RlSGVhZGVyKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KICAgIH0pOwoJfQoKCWZ1bmN0aW9uIHNob3dVc2VySW5mbygpIHsKCQlpZighc2V0dGluZ3MuZGlzcGxheS51c2VySW5mbykgewoJCQlyZXR1cm47CgkJfQoJCXZhciBfdXNlclByb2ZpbGVBcnJheSA9IFtdOwoKCQkkKCIuYXZhdGFyLWxpbmsiKS5lYWNoKGZ1bmN0aW9uKCl7IAoJCQl2YXIgX3VzZXJuYW1lID0gJCh0aGlzKS50ZXh0KCkudHJpbSgpOwoJCQl2YXIgX2VuZHBvaW50ID0gJCh0aGlzKS5hdHRyKCJocmVmIikgKyAiP3VzZXJfZGV0YWlscz0xIjsKCgkJCXZhciBfcG9zc2libGVVc2VySW5mb0VsSWQgPSAiIyIgKyBfdXNlcm5hbWUgKyAiLW1kLXVzZXJpbmZvIjsgLy8gbWF5IGJlIHJlbGV2YW50IGluIG5leHQgcmVsZWFzZXMKCQkJLy8gdmFyIF9wb3NzaWJsZVVzZXJJbmZvRWwgPSAkKF9wb3NzaWJsZVVzZXJJbmZvRWxJZCk7CgoJCQlpZihqUXVlcnkuaW5BcnJheSggX3VzZXJuYW1lLCBfdXNlclByb2ZpbGVBcnJheSApID09PSAtMSkgewoJCQkJX3VzZXJQcm9maWxlQXJyYXkucHVzaChfdXNlcm5hbWUpOwoJCQkJJC5hamF4KHsKCQkJCQl1cmw6IF9lbmRwb2ludCwKCQkJCQl0eXBlOiAiR0VUIiwKCQkJCQlkYXRhVHlwZTogImpzb24iLAoJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uIChfZGF0YSkgewoKCQkJCQkJdmFyIF90bXBFbCA9ICQoJzxkaXYgLz4nLCB7aWQ6X3Bvc3NpYmxlVXNlckluZm9FbElkfSkuYXBwZW5kKCBfZGF0YS5kYXRhLmNvbnRlbnQgKTsvLzsKCgkJCQkJCS8qCgkJCQkJCXZhciBfaW1nQXZhdGFyRWxlbWVudCA9IF90bXBFbC5maW5kKCJpbWcuYXZhdGFyLWltYWdlIik7CgkJCQkJCXZhciBfaW1nQXZhdGFyU3JjID0gX2ltZ0F2YXRhckVsZW1lbnQuYXR0cigic3JjIik7CgkJCQkJCSovCgoJCQkJCQkkKCcuYXZhdGFyLWltYWdlLS1jb21tZW50W2RhdGEtcG9wb3Zlcio9IicrX3VzZXJuYW1lKyciXScpLmVhY2goZnVuY3Rpb24oKXsKCQkJCQkJCXZhciBfb25saW5lU3RhdHVzID0gX3RtcEVsLmZpbmQoIi5wcm9maWxlLW5hbWUiKS5zaWJsaW5ncygic3BhbiIpLmNsb25lKCkuY3NzKHsiZGlzcGxheSIgOiAiaW5saW5lIiwgInRleHQtYWxpZ24iIDogImNlbnRlciIsICJtYXJnaW4iOiAiMnB4In0pOwoJCQkJCQkJdmFyIF9wcm9maWxlRGF0ZSA9IF90bXBFbC5maW5kKCIucHJvZmlsZS1kYXRlIikuY2xvbmUoKS5jc3MoeyJkaXNwbGF5IiA6ICJpbmxpbmUiLCAidGV4dC1hbGlnbiIgOiAicmlnaHQiLCAibWFyZ2luIjogIjJweCJ9KTsKCgkJCQkJCQl2YXIgX3Byb2ZpbGVTdGF0ZVVsID0gJCgiPHVsIC8+IikuY3NzKHsiYmFja2dyb3VuZCI6IiNmNWY2ZmYiLCJkaXNwbGF5IjoiYmxvY2siLCJtYXJnaW4iOiAiMC4yZW0gMmVtIDEuNDI4NTdlbSAxMGVtIiwicGFkZGluZyIgOiAiMnB4In0pOwoKCQkJCQkJCXZhciBfbGlDc3MgPSB7Im1hcmdpbiI6IjNweCA1cHgiLCJkaXNwbGF5IjoiaW5saW5lLWJsb2NrIn07CgoJCQkJCQkJdmFyIF9uck9mQ29tbWVudHMgPSBfdG1wRWwuZmluZCgiLnByb2ZpbGUtc3RhdC1pdGVtOmNvbnRhaW5zKCdLb21tZW50YXJlJykiKS5jbG9uZSgpLmNzcyhfbGlDc3MpOwoJCQkJCQkJdmFyIF9uck9mQWN0aXZlRGVhbHMgPSBfdG1wRWwuZmluZCgiLnByb2ZpbGUtc3RhdC1pdGVtOmNvbnRhaW5zKCdBa3RpdmUgRGVhbHMnKSIpLmNsb25lKCkuY3NzKF9saUNzcyk7CgkJCQkJCQl2YXIgX25yT2ZTdWJzY3JpcHRpb25zID0gX3RtcEVsLmZpbmQoIi5wcm9maWxlLXN0YXQtaXRlbTpjb250YWlucygnQWJvbm5lbWVudHMnKSIpLmNsb25lKCkuY3NzKF9saUNzcyk7CgkJCQkJCQl2YXIgX25yT2ZQb3N0ZWREZWFscyA9IF90bXBFbC5maW5kKCIucHJvZmlsZS1zdGF0LWl0ZW06Y29udGFpbnMoJ0dlbWVsZGV0ZSBEZWFscycpIikuY2xvbmUoKS5jc3MoX2xpQ3NzKTsKCgkJCQkJCQl2YXIgX2xpVXNlcm5hbWUgPSAkKCI8bGkgLz4iKS50ZXh0KF91c2VybmFtZSArICIgaXN0ICIpLmNzcyhfbGlDc3MpOwoJCQkJCQkJdmFyIF9saU9ubGluZVN0YXR1cyA9ICQoIjxsaSAvPiIpLmFwcGVuZChfb25saW5lU3RhdHVzKS5jc3MoX2xpQ3NzKTsKCQkJCQkJCXZhciBfbGlQcm9maWxlRGF0ZSA9ICQoIjxsaSAvPiIpLmFwcGVuZChfcHJvZmlsZURhdGUpLmNzcyhfbGlDc3MpOwoKCQkJCQkJCV9wcm9maWxlU3RhdGVVbC5hcHBlbmQoX2xpVXNlcm5hbWUpLmFwcGVuZChfbGlPbmxpbmVTdGF0dXMpLmFwcGVuZChfbGlQcm9maWxlRGF0ZSkuYXBwZW5kKF9uck9mQ29tbWVudHMpLmFwcGVuZChfbnJPZkFjdGl2ZURlYWxzKS5hcHBlbmQoX25yT2ZTdWJzY3JpcHRpb25zKS5hcHBlbmQoX25yT2ZQb3N0ZWREZWFscyk7CgoJCQkJCQkJdmFyIF9wcm9maWxlU3RhdGVMaSA9ICQoIjxsaSAvPiIpLmFwcGVuZChfcHJvZmlsZVN0YXRlVWwpLmFkZENsYXNzKCJjb21tZW50cy1pdGVtIGNvbW1lbnRzLWl0ZW0tLWFjdGl2ZSBzZWN0aW9uLS1wYWRkZWQtLW5hcnJvdyIpLmNzcyh7Im1hcmdpbiI6IjAiLCJwYWRkaW5nIjoiMCJ9KTsKCgkJCQkJCQkkKCJsaS5zZWN0aW9uLS1kaXZpZGVkIikuY3NzKCAiYm9yZGVyLWJvdHRvbSIsIm5vbmUiICk7CgkJCQkJCQkkKHRoaXMpLmNsb3Nlc3QoIi5jb21tZW50cy1pdGVtIikuYWZ0ZXIoX3Byb2ZpbGVTdGF0ZUxpKTsKCgkJCQkJCX0pOwoKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCX0pOwoJfQoKCWZ1bmN0aW9uIGRlYWxUZXh0UHJldmlldygpIHsKCQlpZihzZXR0aW5ncy5kaXNwbGF5LmRlYWxQcmV2aWV3IDw9IDApIHsKCQkJcmV0dXJuOwoJCX0KCQkkKCIudGhyZWFkLWJvZHkgZGl2LnNlY3Rpb24tc3ViOm5vdCg6Y29udGFpbnMoJ1dlaXRlcmxlc2VuJykpIikuZWFjaChmdW5jdGlvbigpewoJCQlpZigkKHRoaXMpLmhlaWdodCgpIDwgc2V0dGluZ3MuZGlzcGxheS5kZWFsUHJldmlldykgewoJCQkJcmV0dXJuOwoJCQl9CgkJCXZhciBfZGVhbERlc2NUb2dnbGVyRWxlbWVudCA9ICQoJzxkaXYgY2xhc3M9ImRlYWwtZGVzYy10b2dnbGVyIj5NZWhyPC9kaXY+Jyk7CgkJCV9kZWFsRGVzY1RvZ2dsZXJFbGVtZW50LmFkZENsYXNzKCJsaW5rIik7CgoJCQkkKHRoaXMpLmNzcyh7CgkJCQkibWF4LWhlaWdodCI6ICQodGhpcykuaGVpZ2h0KCkgKyAicHgiLAoJCQkJImhlaWdodCI6IHNldHRpbmdzLmRpc3BsYXkuZGVhbFByZXZpZXcgKyAicHgiLAoJCQkJIm92ZXJmbG93IiA6ICJoaWRkZW4iCgkJCX0pLmFkZENsYXNzKCJ0b2dnbGVkIikuYWZ0ZXIoX2RlYWxEZXNjVG9nZ2xlckVsZW1lbnQpOwoJCX0pOwogICAgJChkb2N1bWVudCkub24oImNsaWNrIiwgIi5kZWFsLWRlc2MtdG9nZ2xlciIsIGZ1bmN0aW9uKCkgewoJCQl2YXIgX2RlYWxEZXNjcmlwdGlvbiA9ICQodGhpcykuc2libGluZ3MoIi50aHJlYWQtYm9keSAuc2VjdGlvbi1zdWIiKTsKCgkJCWlmKF9kZWFsRGVzY3JpcHRpb24uaGFzQ2xhc3MoInRvZ2dsZWQiKSkgewoJCQkJX2RlYWxEZXNjcmlwdGlvbi5yZW1vdmVDbGFzcygidG9nZ2xlZCIpLmFuaW1hdGUoeyJoZWlnaHQiOiBfZGVhbERlc2NyaXB0aW9uLmNzcygibWF4LWhlaWdodCIpfSk7CgkJCQkkKHRoaXMpLnRleHQoIldlbmlnZXIiKTsKCQkJfSBlbHNlIHsKCQkJCV9kZWFsRGVzY3JpcHRpb24uYWRkQ2xhc3MoInRvZ2dsZWQiKS5hbmltYXRlKHsiaGVpZ2h0Ijogc2V0dGluZ3MuZGlzcGxheS5kZWFsUHJldmlldyArICJweCJ9KTsKCQkJCSQodGhpcykudGV4dCgiTWVociIpOwoJCQl9CgkJfSk7Cgl9CgoJZnVuY3Rpb24gbW9kaWZ5U2VhcmNoKCkgewoKCQlmdW5jdGlvbiBvcGVuR29vZ2xlKF9zb3VyY2UpIHsKCQkJd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3Lmdvb2dsZS5kZS8jcT1zaXRlOm15ZGVhbHouZGUrJyArIGVuY29kZVVSSUNvbXBvbmVudChfc291cmNlLnNpYmxpbmdzKCJpbnB1dC5zZWFyY2gtaW5wdXQiKS52YWwoKSkgLCAnX2JsYW5rJyk7CgkJfQoKCQl2YXIgZ1NlYXJjaEVsZW1lbnQgPSAkKCc8YSBjbGFzcz0ic2VhcmNoLWJ1dHRvbiBzZWFyY2gtbG9nby1nb29nbGUiIHN0eWxlPSJyaWdodDogMS43ZW07Y3Vyc29yOiBwb2ludGVyOyI+JysKCQkJJzxpbWcgc3JjPSJodHRwczovL3d3dy5nb29nbGUuZGUvaW1hZ2VzL2JyYW5kaW5nL3Byb2R1Y3QvaWNvL2dvb2dsZWdfbG9kcC5pY28iIHN0eWxlPSJoZWlnaHQ6IDIwcHg7Ij4nKwoJCQknPC9hPicpOwoKCQlnU2VhcmNoRWxlbWVudC5jbGljayhmdW5jdGlvbiAoKSB7IG9wZW5Hb29nbGUoJCh0aGlzKSk7IH0pOwoJCXZhciBfcHJlc2V0Q2F0ID0gc2VhcmNoQ2F0ZWdvcmllcy5hbGw7CgkJZm9yKHZhciBfY0luZCBpbiBzZWFyY2hDYXRlZ29yaWVzKSB7CgkJCWlmKHNlYXJjaENhdGVnb3JpZXNbX2NJbmRdLmlkID09IHNldHRpbmdzLnNlYXJjaC5wcmVzZXRDYXRlZ29yeSkgewoJCQkJX3ByZXNldENhdCA9IHNlYXJjaENhdGVnb3JpZXNbX2NJbmRdOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJdmFyIF9jdXJDYXQgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9eXC8oW2Etel0rKS4qJC8sICckMScpOwoJCV9jdXJDYXQgPSAoX2N1ckNhdCBpbiBzZWFyY2hDYXRlZ29yaWVzKSA/IHNlYXJjaENhdGVnb3JpZXNbX2N1ckNhdF0gOiBzZWFyY2hDYXRlZ29yaWVzLmFsbDsKCgkJJCgiaW5wdXQuc2VhcmNoLWlucHV0IikuYXR0cigndGl0bGUnLCAiU2hpZnQrRW50ZXIgPT4gIiArIF9wcmVzZXRDYXQuY2F0ZWdvcnkgKyAiLVN1Y2hlXG5TdHJnK0VudGVyID0+ICIgKyBfY3VyQ2F0LmNhdGVnb3J5ICsgIi1TdWNoZSAoYWt0dWVsbGUgS2F0ZWdvcmllKVxuQWx0K0VudGVyID0+IEdvb2dsZS1TdWNoZSIpLmFmdGVyKGdTZWFyY2hFbGVtZW50KTsKCgkJJChkb2N1bWVudCkub24oJ2tleWRvd24nLCAnZm9ybS5zZWFyY2gnLCBmdW5jdGlvbiAoX2V2ZW50KSB7CgkJCWlmKF9ldmVudC5rZXlDb2RlID09IDEzKSB7CgkJCQlpZihfZXZlbnQuc2hpZnRLZXkgJiYgIV9ldmVudC5jdHJsS2V5ICYmICFfZXZlbnQuYWx0S2V5KSB7CgkJCQkJJCh0aGlzKS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIHZhbHVlPSInICsgX3ByZXNldENhdC5pZCArICciPicpOwoJCQkJfSBlbHNlIGlmKCFfZXZlbnQuc2hpZnRLZXkgJiYgX2V2ZW50LmN0cmxLZXkgJiYgIV9ldmVudC5hbHRLZXkpIHsKCQkJCQkkKHRoaXMpLmFwcGVuZCgnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9IicgKyBfY3VyQ2F0LmlkICsgJyI+Jyk7CgkJCQl9IGVsc2UgaWYoIV9ldmVudC5zaGlmdEtleSAmJiAhX2V2ZW50LmN0cmxLZXkgJiYgX2V2ZW50LmFsdEtleSkgewoJCQkJCW9wZW5Hb29nbGUoJCh0aGlzKS5maW5kKCdhLnNlYXJjaC1sb2dvLWdvb2dsZScpKTsKCQkJCQlfZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJCX0KCQkJfQoJCX0pOwoJfQoKCWZ1bmN0aW9uIGJhY2tUb0FuY2hvcigpIHsKCQkkKGRvY3VtZW50KS5hamF4U3RvcChmdW5jdGlvbigpewoJCQlpZih3aW5kb3cubG9jYXRpb24uaGFzaC5sZW5ndGggJiYgd2luZG93LmxvY2F0aW9uLmhhc2ggIT0gJyNteWRlYWx6LWVuaGFuY2VyJykgewoJCQkJLy8gU2VpdGUgd3VyZGUgbW9kaWZpemllcnQsIEFua2VycHVua3QgdmVyc2Nob2JlbiwgZXJuZXV0IHp1bSBBbmtlciBzcHJpbmdlbgoJCQkJd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cubG9jYXRpb247CgkJCQkkKHRoaXMpLnVuYmluZCgiYWpheFN0b3AiKTsKCQkJfQoJCX0pOwoJfQoKCWZ1bmN0aW9uIGFkZFNldHVwTGluaygpIHsKCQl2YXIgX25ld01lbnUgPSAkKCc8bGk+JykuYWRkQ2xhc3MoJ2hpZGUtLWRvd25UaHJvdWdoLScpLmF0dHIoJ2lkJywgJ215ZGVhbHotZW5oYW5jZXItc2V0dXAtLWxpbmsnKS5hcHBlbmQoJCgnPGE+JykuYWRkQ2xhc3MoJ25hdk1lbnUxLWl0ZW0nKS5hdHRyKCdocmVmJywnI215ZGVhbHotZW5oYW5jZXInKS5odG1sKCdNeURlYWx6LUVuaGFuY2VyJykpLmFwcGVuZFRvKCQoJy5uYXZNZW51LS13aWR0aC1sJykuZXEoMCkpOwoJCV9uZXdNZW51LmZpbmQoJ2EnKS5jbGljayhzaG93U2V0dXApOwoJfQoKCWZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKCQlHTV9zZXRWYWx1ZSgnc2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncykpOwoJfQoKCWZ1bmN0aW9uIHNob3dTZXR1cCgpIHsKCQlkb2N1bWVudC50aXRsZSA9ICdNeURlYWx6LUVuaGFuY2VyIEVpbnN0ZWxsdW5nZW4nOwoJCSQoJ3N0cm9uZ1tkYXRhLWhhbmRsZXI9Im1lbnUiXScpLnBhcmVudCgpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdtZW51LS1hY3RpdmUnKTsKCQkkKCcubmF2VHJpZ2dlcjEtLXNlbGVjdGVkLCAubmF2TWVudTEtaXRlbS0tc2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnbmF2VHJpZ2dlcjEtLXNlbGVjdGVkIG5hdk1lbnUxLWl0ZW0tLXNlbGVjdGVkJyk7CgkJJCgnI215ZGVhbHotZW5oYW5jZXItc2V0dXAtLWxpbmsnKS5hZGRDbGFzcygnbmF2TWVudTEtaXRlbS0tc2VsZWN0ZWQnKTsKCQkkKCcubmF2VHJpZ2dlcjItcm93JykucmVtb3ZlKCk7CgkJJCgnLnBhZ2UtY2FudmFzID4gc2VjdGlvbicpLmVxKDApLnJlbW92ZSgpOwoJCSQoJ2Rpdi5wYWdlLWNhbnZhczpmaXJzdCA+IGRpdi5wYWdlLWNvbnRlbnQnKS5odG1sKCc8ZGl2IGlkPSJtYWluIj48L2Rpdj4nKTsKCQkkKCcjbWFpbicpLmh0bWwoJycpLmF0dHIoJ2NsYXNzJywgJ2NvbnRlbnQtbWFpbiBjb250ZW50LWJhY2tncm91bmQnKS5odG1sKCc8dWwgY2xhc3M9ImJyZWFkY3J1bWIgc2VjdGlvbi0tcGFkZGVkLS10aWdodCI+PGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gc2l6ZS0tYWxsLXhTbWFsbCBzaXplLS14eFNtYWxsLXNtYWxsIiBpdGVtdHlwZT0iaHR0cDovL2RhdGEtdm9jYWJ1bGFyeS5vcmcvQnJlYWRjcnVtYiIgaXRlbXNjb3BlPSJpdGVtc2NvcGUiIGl0ZW1wcm9wPSJjaGlsZCI+PGEgY2xhc3M9ImJyZWFkY3J1bWItbGluayBsaW5rIiBocmVmPSIvIiBpdGVtcHJvcD0idXJsIj5Ib21lPC9hPjx1bCBjbGFzcz0iYnJlYWRjcnVtYi1saXN0ICI+PGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gc2l6ZS0tYWxsLXhTbWFsbCBzaXplLS14eFNtYWxsLXNtYWxsIiBpdGVtdHlwZT0iaHR0cDovL2RhdGEtdm9jYWJ1bGFyeS5vcmcvQnJlYWRjcnVtYiIgaXRlbXNjb3BlPSJpdGVtc2NvcGUiIGl0ZW1wcm9wPSJjaGlsZCI+PHNwYW4gY2xhc3M9ImJyZWFkY3J1bWItY3VycmVudCI+QmVhcmJlaXRlIERlaW5lIE15RGVhbHotRW5oYW5jZXIgRWluc3RlbGx1bmdlbjwvc3Bhbj48L2xpPjwvdWw+PC9saT48L3VsPjxmb3JtIGNsYXNzPSJmb3JtIj48ZGl2IGNsYXNzPSJzZWN0aW9uIHNlY3Rpb24tLXBhZGRlZCI+PGgxIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5CZWFyYmVpdGUgRGVpbmUgTXlEZWFsei1FbmhhbmNlciBFaW5zdGVsbHVuZ2VuPC9oMT48L2Rpdj48L2Zvcm0+Jyk7CgkJdmFyIF9zZWN0aW9ucyA9ICQoJyNtYWluIC5zZWN0aW9uLS1wYWRkZWQnKTsKCQl2YXIgX2Zvcm0gPSAkKCcjbWFpbiBmb3JtLmZvcm0nKTsKCQlfZm9ybS5zdWJtaXQoc3VibWl0U2V0dGluZ3MpOwoJCWFkZEdsb2JhbFN0eWxlKCcjc21pbGV5c1RhYmxlIHsgYm9yZGVyOiBub25lO30gI3NtaWxleXNUYWJsZSB0cj50ZDpmaXJzdCB7IHRleHQtYWxpZ246IHJpZ2h0IH0gI3NtaWxleXNUYWJsZSB0ciB0ZCB7IHBhZGRpbmc6IDNweDsgcGFkZGluZy1sZWZ0OiA1cHg7IHBhZGRpbmctcmlnaHQ6IDVweDsgfSAuc21pbGV5c19yZW1vdmUgeyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDEwcHQ7IGN1cnNvcjogcG9pbnRlcjsgY3Vyc29yOiBoYW5kOyB9Jyk7CgoJCXZhciBfc2VjdGlvbjsKCQkvLyBfc2VjdGlvbiA9ICQoJzxzZWN0aW9uPicpLmFkZENsYXNzKCdzZWN0aW9uLXN1YicpLmh0bWwoJzxoMiBjbGFzcz0ic2VjdGlvbi1zdWJUaXRsZSI+SW5mbyB1bmQgRGlza3Vzc2lvbnN0aHJlYWQ8L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxsYWJlbCBjbGFzcz0iZm9ybS1saXN0LWxhYmVsIiBmb3I9ImRlYWxzRm9ybS1kZWFsc19oaWRlIj4gQXVzYmxlbmRlbiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48aW5wdXQgaWQ9ImRlYWxzRm9ybS1kZWFsc19oaWRlIiBjbGFzcz0iaW5wdXQiIHR5cGU9InRleHQiCW5hbWU9ImhpZGUiIHRpdGxlPSJBbmdhYmUgYWxzIHJlZy4gQXVzZHJ1Y2suIj48L2Rpdj48L2xpPjwvdWw+Jyk7CgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPkluZm8gdW5kIERpc2t1c3Npb25zdGhyZWFkPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9sYWJlbD48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+SW5mb3JtYXRpb25lbiB1bmQgVmVyYmVzc2VydW5nc3ZvcnNjaGwmYXVtbDtnZSBpbSA8YSBocmVmPSJodHRwOi8vd3d3Lm15ZGVhbHouZGUvZGl2ZXJzZXMvbXlkZWFsei1lbmhhbmNlci11c2Vyc2NyaXB0LTU3MzAxMiIgY2xhc3M9ImxpbmsiPk15RGVhbHotRW5oYW5jZXItVGhyZWFkPC9hPi48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PGxhYmVsIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiIHN0eWxlPSJwYWRkaW5nLXRvcDogMDsiPiBBdXRvciA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48YSBocmVmPSInICsgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vd3d3Lm15ZGVhbHouZGUvcHJvZmlsZS9CQUVSbmFkbyIgY2xhc3M9ImxpbmsiPkJBRVJuYWRvPC9hPjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgc3R5bGU9InBhZGRpbmctdG9wOiAwOyI+IENvbnRyaWJ1dG9ycyA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48YSBocmVmPSInICsgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vd3d3Lm15ZGVhbHouZGUvcHJvZmlsZS9sb2xuaWNrbmFtZSIgY2xhc3M9ImxpbmsiPmxvbG5pY2tuYW1lPC9hPjxiciAvPjxhIGhyZWY9IicgKyB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy93d3cubXlkZWFsei5kZS9wcm9maWxlL05pY28iIGNsYXNzPSJsaW5rIj5OaWNvPC9hPjxiciAvPjxhIGhyZWY9IicgKyB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy93d3cubXlkZWFsei5kZS9wcm9maWxlL3JpY2hpMmsiIGNsYXNzPSJsaW5rIj5yaWNoaTJrPC9hPjxiciAvPjwvZGl2PjwvbGk+PC91bD4nKTsKCQlfc2VjdGlvbi5hcHBlbmRUbyhfc2VjdGlvbnMpOwoKCQlpZih0eXBlb2YgR01faW5mbyA9PT0gJ29iamVjdCcpIHsKCQkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPkVuaGFuY2VyIFZlcnNpb248L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+ICcgKyBHTV9pbmZvLnNjcmlwdC52ZXJzaW9uICsgJzwvZGl2PjwvbGk+PC91bD4nKTsKCQkJX3NlY3Rpb24uYXBwZW5kVG8oX3NlY3Rpb25zKTsKCQl9CgoJCV9zZWN0aW9uID0gJCgnPHNlY3Rpb24+JykuYWRkQ2xhc3MoJ3NlY3Rpb24tc3ViJykuaHRtbCgnPGgyIGNsYXNzPSJzZWN0aW9uLXN1YlRpdGxlIj5FbmhhbmNlciBWZXJoYWx0ZW48L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiIHRpdGxlPSJFaW4gcm90ZXIgUmFobWVuIHdpcmQgaW0gRmVobGVyZmFsbCBpbW1lciBhbmdlemVpZ3QuIj48aW5wdXQgaWQ9ImJlaGF2aW9yRm9ybS1iZWhhdmlvcl9zaG93R3JlZW5Eb3RzIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iYmVoYXZpb3Jfc2hvd0dyZWVuRG90cyI+IFplaWdlIGdyJnV1bWw7bmVuIFJhaG1lbiB1bSBBdmF0YXI8L2xhYmVsPjwvZGl2PjwvbGk+PC91bD4nKTsKCQlfc2VjdGlvbi5hcHBlbmRUbyhfc2VjdGlvbnMpOwoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MuYmVoYXZpb3IpIHsKCQkJaWYoc2V0dGluZ3MuYmVoYXZpb3JbX3NJbmRdKSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjYmVoYXZpb3JGb3JtLWJlaGF2aW9yXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcsICdjaGVja2VkJykuYXR0cignY2hlY2tlZCcsICdjaGVja2VkJyk7CgkJCX0gZWxzZSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjYmVoYXZpb3JGb3JtLWJlaGF2aW9yXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcsIGZhbHNlKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7CgkJCX0KCQl9CgoJCV9zZWN0aW9uID0gJCgnPHNlY3Rpb24+JykuYWRkQ2xhc3MoJ3NlY3Rpb24tc3ViJykuaHRtbCgnPGgyIGNsYXNzPSJzZWN0aW9uLXN1YlRpdGxlIj5XZXJidW5nIGF1c2JsZW5kZW48L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYWRGb3JtLWhpZGVBZHNfdG9wQmFyIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iaGlkZUFkc190b3BCYXIiPiBUb3AtQmFyIChHdXRzY2hlaW5zYW1tbGVyLCBVcmxhdWJzcGlyYXRlbiwg4oCmKTwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYWRGb3JtLWhpZGVBZHNfbmxTZWN0aW9uIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iaGlkZUFkc19ubFNlY3Rpb24iPiBOZXdzbGV0dGVyPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJhZEZvcm0taGlkZUFkc19pbnNpZGUiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJoaWRlQWRzX2luc2lkZSI+IE15RGVhbHogSW5zaWRlIEJhbm5lcjwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYWRGb3JtLWhpZGVBZHNfZ3NXaWRnZXQiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJoaWRlQWRzX2dzV2lkZ2V0Ij4gR3V0c2NoZWluLVdpZGdldDwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYWRGb3JtLWhpZGVBZHNfYXBwIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iaGlkZUFkc19hcHAiPiBNeURlYWx6LUFwcDwvbGFiZWw+PC9kaXY+PC9saT48L3VsPicpOwoJCV9zZWN0aW9uLmFwcGVuZFRvKF9zZWN0aW9ucyk7CgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5oaWRlQWRzKSB7CgkJCWlmKHNldHRpbmdzLmhpZGVBZHNbX3NJbmRdKSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjYWRGb3JtLWhpZGVBZHNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgJ2NoZWNrZWQnKS5hdHRyKCdjaGVja2VkJywgJ2NoZWNrZWQnKTsKCQkJfSBlbHNlIHsKCQkJCV9zZWN0aW9uLmZpbmQoJyNhZEZvcm0taGlkZUFkc18nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkucmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQl9CgkJfQoKCQlfc2VjdGlvbiA9ICQoJzxzZWN0aW9uPicpLmFkZENsYXNzKCdzZWN0aW9uLXN1YicpLmh0bWwoJzxoMiBjbGFzcz0ic2VjdGlvbi1zdWJUaXRsZSI+QnV0dG9ucyBpbSBIYXVwdG1lbnU8L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYnV0dG9uRm9ybS1tb3ZlQnV0dG9uc19fIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ibW92ZUJ1dHRvbnNfXyI+IEFsbGVzPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJidXR0b25Gb3JtLW1vdmVCdXR0b25zX2RlYWxzIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ibW92ZUJ1dHRvbnNfZGVhbHMiPiBEZWFsczwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYnV0dG9uRm9ybS1tb3ZlQnV0dG9uc19ndXRzY2hlaW5lIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ibW92ZUJ1dHRvbnNfZ3V0c2NoZWluZSI+IEd1dHNjaGVpbmU8L2xhYmVsPjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48c3BhbiBjbGFzcz0iZm9ybS1saXN0LWxhYmVsIj48L3NwYW4+PGRpdiBjbGFzcz0iZm9ybS1saXN0LWNvbnRlbnQiPjxsYWJlbCBjbGFzcz0iZm9ybS10ZXh0Ij48aW5wdXQgaWQ9ImJ1dHRvbkZvcm0tbW92ZUJ1dHRvbnNfZnJlZWJpZXMiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJtb3ZlQnV0dG9uc19mcmVlYmllcyI+IEZyZWViaWVzPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJidXR0b25Gb3JtLW1vdmVCdXR0b25zX2N1c3RvbSIgdHlwZT0iY2hlY2tib3giIG5hbWU9Im1vdmVCdXR0b25zX2N1c3RvbSI+IE15VGFiPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJidXR0b25Gb3JtLW1vdmVCdXR0b25zX2dlc3VjaGUiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJtb3ZlQnV0dG9uc19nZXN1Y2hlIj4gR2VzdWNoZTwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYnV0dG9uRm9ybS1tb3ZlQnV0dG9uc19kaXZlcnNlcyIgdHlwZT0iY2hlY2tib3giIG5hbWU9Im1vdmVCdXR0b25zX2RpdmVyc2VzIj4gRGl2ZXJzZXM8L2xhYmVsPjwvZGl2PjwvbGk+PC91bD4nKTsKCQlfc2VjdGlvbi5hcHBlbmRUbyhfc2VjdGlvbnMpOwoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MubW92ZUJ1dHRvbnMpIHsKCQkJaWYoc2V0dGluZ3MubW92ZUJ1dHRvbnNbX3NJbmRdKSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjYnV0dG9uRm9ybS1tb3ZlQnV0dG9uc18nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwoJCQl9IGVsc2UgewoJCQkJX3NlY3Rpb24uZmluZCgnI2J1dHRvbkZvcm0tbW92ZUJ1dHRvbnNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKCQkJfQoJCX0KCgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPlVzZXJNZW51IERpcmVrdGxpbmtzPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48c3BhbiBjbGFzcz0iZm9ybS1saXN0LWxhYmVsIj48L3NwYW4+PGRpdiBjbGFzcz0iZm9ybS1saXN0LWNvbnRlbnQiPjxsYWJlbCBjbGFzcz0iZm9ybS10ZXh0Ij48aW5wdXQgaWQ9InVzZXJNZW51Rm9ybS1kaXJlY3RfcG4iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXJlY3RfcG4iPiBQcml2YXRlIE5hY2hyaWNodGVuPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJ1c2VyTWVudUZvcm0tZGlyZWN0X2FjY291bnQiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXJlY3RfYWNjb3VudCI+IEFjY291bnQ8L2xhYmVsPjwvZGl2PjwvbGk+PC91bD4nKTsKCQlfc2VjdGlvbi5hcHBlbmRUbyhfc2VjdGlvbnMpOwoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MudXNlck1lbnVEaXJlY3QpIHsKCQkJaWYoc2V0dGluZ3MudXNlck1lbnVEaXJlY3RbX3NJbmRdKSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjdXNlck1lbnVGb3JtLWRpcmVjdF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwoJCQl9IGVsc2UgewoJCQkJX3NlY3Rpb24uZmluZCgnI3VzZXJNZW51Rm9ybS1kaXJlY3RfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKCQkJfQoJCX0KCgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPkRlYWxzL0d1dHNjaGVpbmUv4oCmPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJkZWFsc0Zvcm0tZGVhbHNfaGlkZSI+IEF1c2JsZW5kZW4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGlucHV0IGlkPSJkZWFsc0Zvcm0tZGVhbHNfaGlkZSIgY2xhc3M9ImlucHV0IiB0eXBlPSJ0ZXh0IgluYW1lPSJoaWRlIiB0aXRsZT0iQW5nYWJlIGFscyByZWcuIEF1c2RydWNrLiI+PC9kaXY+PC9saT48L3VsPicpOwoJCV9zZWN0aW9uLmFwcGVuZFRvKF9zZWN0aW9ucyk7CgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5kZWFscykgewoJCQlfc2VjdGlvbi5maW5kKCcjZGVhbHNGb3JtLWRlYWxzXycgKyBfc0luZCkudmFsKHNldHRpbmdzLmRlYWxzW19zSW5kXSkuYXR0cigndmFsdWUnLCBzZXR0aW5ncy5kZWFsc1tfc0luZF0pOwoJCX0KCgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPkluaGFsdGUgYW56ZWlnZW48L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iZGlzcGxheUZvcm0tZGlzcGxheV9lbWJlZFlvdXR1YmUiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNwbGF5X2VtYmVkWW91dHViZSI+IFlvdVR1YmUtVmlkZW9zIGRpcmVrdCBlaW5iaW5kZW48L2xhYmVsPjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48c3BhbiBjbGFzcz0iZm9ybS1saXN0LWxhYmVsIj48L3NwYW4+PGRpdiBjbGFzcz0iZm9ybS1saXN0LWNvbnRlbnQiPjxsYWJlbCBjbGFzcz0iZm9ybS10ZXh0Ij48aW5wdXQgaWQ9ImRpc3BsYXlGb3JtLWRpc3BsYXlfbWluaW1pemVRdW90ZXMiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNwbGF5X21pbmltaXplUXVvdGVzIj4gUXVvdGVzIGVpbmtsYXBwZW4gKGF1c2tsYXBwZW4gbWl0IEtsaWNrKTwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iZGlzcGxheUZvcm0tZGlzcGxheV91c2VySW5mbyIgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRpc3BsYXlfdXNlckluZm8iPiBVc2VyIEluZm9zPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PGxhYmVsIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiIGZvcj0iZGlzcGxheUZvcm0tZGlzcGxheV9kZWFsUHJldmlldyI+IERlYWx0ZXh0LVByZXZpZXdow7ZoZSBpbiBQaXhlbCA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48aW5wdXQgaWQ9ImRpc3BsYXlGb3JtLWRpc3BsYXlfZGVhbFByZXZpZXciIGNsYXNzPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiCXJlcXVpcmVkPSIiIHRpdGxlPSIwIGRlYWt0aXZpZXJ0IFByZXZpZXdzIiBuYW1lPSJkaXNwbGF5X2RlYWxQcmV2aWV3Ij48L2Rpdj48L2xpPjwvdWw+Jyk7CgkJX3NlY3Rpb24uYXBwZW5kVG8oX3NlY3Rpb25zKTsKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLmRpc3BsYXkpIHsKCQkJc3dpdGNoKHR5cGVvZiBzZXR0aW5ncy5kaXNwbGF5W19zSW5kXSkgewoJCQkJY2FzZSAnYm9vbGVhbic6CgkJCQkJaWYoc2V0dGluZ3MuZGlzcGxheVtfc0luZF0pIHsKCQkJCQkJX3NlY3Rpb24uZmluZCgnI2Rpc3BsYXlGb3JtLWRpc3BsYXlfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgJ2NoZWNrZWQnKS5hdHRyKCdjaGVja2VkJywgJ2NoZWNrZWQnKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlfc2VjdGlvbi5maW5kKCcjZGlzcGxheUZvcm0tZGlzcGxheV8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkucmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgJ251bWJlcic6CgkJCQljYXNlICdzdHJpbmcnOgoJCQkJCV9zZWN0aW9uLmZpbmQoJyNkaXNwbGF5Rm9ybS1kaXNwbGF5XycgKyBfc0luZCkudmFsKHNldHRpbmdzLmRpc3BsYXlbX3NJbmRdKS5hdHRyKCd2YWx1ZScsIHNldHRpbmdzLmRpc3BsYXlbX3NJbmRdKTsKCQkJfQoJCX0KCgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPlN1Y2hlPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJzZWFyY2hGb3JtLXNlYXJjaF9wcmVzZXRDYXRlZ29yeSI+IHZvcmVpbmdlc3RlbGx0ZSBLYXRlZ29yaWUgPC9sYWJlbD48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PHNlbGVjdCBpZD0ic2VhcmNoRm9ybS1zZWFyY2hfcHJlc2V0Q2F0ZWdvcnkiIGNsYXNzPSJpbnB1dCIgbmFtZT0ic2VhcmNoX3ByZXNldENhdGVnb3J5Ij48L3NlbGVjdD48L2Rpdj48L2xpPjwvdWw+Jyk7CgkJX3NlY3Rpb24uYXBwZW5kVG8oX3NlY3Rpb25zKTsKCQlfc2VjdGlvbi5maW5kKCdzZWxlY3QnKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJdmFyIF9zSW5kID0gJCh0aGlzKS5hdHRyKCduYW1lJykucmVwbGFjZSgvXnNlYXJjaF8vLCAnJyk7CgkJCWlmKF9zSW5kID09ICdwcmVzZXRDYXRlZ29yeScpIHsKCQkJCWZvcih2YXIgX2NJbmQgaW4gc2VhcmNoQ2F0ZWdvcmllcykgewoJCQkJCSQodGhpcykuYXBwZW5kKCQoJzxvcHRpb24vPicpLnRleHQoc2VhcmNoQ2F0ZWdvcmllc1tfY0luZF0uY2F0ZWdvcnkpLnZhbChzZWFyY2hDYXRlZ29yaWVzW19jSW5kXS5pZCkpOwoJCQkJfQoJCQl9CgkJfSk7CgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5zZWFyY2gpIHsKCQkJc3dpdGNoKHR5cGVvZiBzZXR0aW5ncy5zZWFyY2hbX3NJbmRdKSB7CgkJCQljYXNlICdib29sZWFuJzoKCQkJCQlpZihzZXR0aW5ncy5zZWFyY2hbX3NJbmRdKSB7CgkJCQkJCV9zZWN0aW9uLmZpbmQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCV9zZWN0aW9uLmZpbmQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkucmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgJ251bWJlcic6CgkJCQljYXNlICdzdHJpbmcnOgoJCQkJCV9zZWN0aW9uLmZpbmQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnZhbChzZXR0aW5ncy5zZWFyY2hbX3NJbmRdKS5hdHRyKCd2YWx1ZScsIHNldHRpbmdzLnNlYXJjaFtfc0luZF0pOwoJCQl9CgkJfQoKCQlfc2VjdGlvbiA9ICQoJzxzZWN0aW9uPicpLmFkZENsYXNzKCdzZWN0aW9uLXN1YicpLmh0bWwoJzxoMiBjbGFzcz0ic2VjdGlvbi1zdWJUaXRsZSI+S29tbWVudGllcmVuPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJjb21tZW50Rm9ybS1jb21tZW50c19tYXhRdW90ZUxldmVsIj4gWml0YXR0aWVmZSA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48aW5wdXQgaWQ9ImNvbW1lbnRGb3JtLWNvbW1lbnRzX21heFF1b3RlTGV2ZWwiIGNsYXNzPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBtaW49IjEiCXJlcXVpcmVkPSIiIG5hbWU9Im1heFF1b3RlTGV2ZWwiPjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJjb21tZW50Rm9ybS1jb21tZW50c19lZGl0UmVhc29uIj4gR3J1bmQgZGVyICZBdW1sO25kZXJ1bmcgPC9sYWJlbD48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGlucHV0IGlkPSJjb21tZW50Rm9ybS1jb21tZW50c19lZGl0UmVhc29uIiBjbGFzcz0iaW5wdXQiIHR5cGU9InRleHQiIG5hbWU9ImVkaXRSZWFzb24iPjwvZGl2PjwvbGk+JyArIChzZXR0aW5ncy5jb21tZW50cy51c2VTaWduYXR1cmUgPyAnPGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJjb21tZW50Rm9ybS1jb21tZW50c19zaWduYXR1cmUiPiBTaWduYXR1ciA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48dGV4dGFyZWEgaWQ9ImNvbW1lbnRGb3JtLWNvbW1lbnRzX3NpZ25hdHVyZSIgY2xhc3M9ImlucHV0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaWduYXR1cmUiIHN0eWxlPSJyZXNpemU6IG5vbmUiPjwvdGV4dGFyZWE+PC9kaXY+PC9saT4nIDogJycpICsgJzxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PGxhYmVsIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiIGZvcj0iY29tbWVudEZvcm0tc21pbGV5c19mcm9tIj4gU21pbGV5cyA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48aW5wdXQgaWQ9ImNvbW1lbnRGb3JtLXNtaWxleXNfZnJvbSIgY2xhc3M9ImlucHV0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJmcm9tIiAvPiAmcmFycjsgPGlucHV0IGlkPSJjb21tZW50Rm9ybS1zbWlsZXlzX3RvIiBjbGFzcz0iaW5wdXQiIHR5cGU9InRleHQiIG5hbWU9InRvIiAvPiA8aW5wdXQgaWQ9ImNvbW1lbnRGb3JtLXNtaWxleXNfYWRkIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24iIHZhbHVlPSJIaW56dWYmdXVtbDtnZW4iIC8+PGJyIC8+PHRhYmxlIGlkPSJzbWlsZXlzVGFibGUiPjwvdGFibGU+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iY29tbWVudEZvcm0tb2xkU21pbGV5c191c2UiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvbGRTbWlsZXlzX3VzZSI+IFZlcndlbmRlIGFsdGUgU21pbGV5cyBiZWltIFNjaHJlaWJlbjwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iY29tbWVudEZvcm0tb2xkU21pbGV5c19zaG93IiB0eXBlPSJjaGVja2JveCIgbmFtZT0ib2xkU21pbGV5c19zaG93Ij4gWmVpZ2UgYWx0ZSBTbWlsZXlzIDwvbGFiZWw+PC9kaXY+PC9saT48L3VsPicpOwoJCV9zZWN0aW9uLmFwcGVuZFRvKF9zZWN0aW9ucyk7CgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5jb21tZW50cykgewoJCQlpZihfc2VjdGlvbi5maW5kKCcjY29tbWVudEZvcm0tY29tbWVudHNfJyArIF9zSW5kKS5sZW5ndGgpIHsKCQkJCXN3aXRjaCh0eXBlb2Ygc2V0dGluZ3MuY29tbWVudHNbX3NJbmRdKSB7CgkJCQkJY2FzZSAnYm9vbGVhbic6CgkJCQkJCWlmKHNldHRpbmdzLmNvbW1lbnRzW19zSW5kXSkgewoJCQkJCQkJX3NlY3Rpb24uZmluZCgnI2NvbW1lbnRGb3JtLWNvbW1lbnRzXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcsICdjaGVja2VkJykuYXR0cignY2hlY2tlZCcpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJX3NlY3Rpb24uZmluZCgnI2NvbW1lbnRGb3JtLWNvbW1lbnRzXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcsIGZhbHNlKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7CgkJCQkJCX0KCQkJCQlkZWZhdWx0OgoJCQkJCQlfc2VjdGlvbi5maW5kKCcjY29tbWVudEZvcm0tY29tbWVudHNfJyArIF9zSW5kKS52YWwoc2V0dGluZ3MuY29tbWVudHNbX3NJbmRdKS5hdHRyKCd2YWx1ZScsIHNldHRpbmdzLmNvbW1lbnRzW19zSW5kXSk7CgkJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3Mub2xkU21pbGV5cykgewoJCQlpZihfc2VjdGlvbi5maW5kKCcjY29tbWVudEZvcm0tb2xkU21pbGV5c18nICsgX3NJbmQpLmxlbmd0aCkgewoJCQkJc3dpdGNoKHR5cGVvZiBzZXR0aW5ncy5vbGRTbWlsZXlzW19zSW5kXSkgewoJCQkJCWNhc2UgJ2Jvb2xlYW4nOgoJCQkJCQlpZihzZXR0aW5ncy5vbGRTbWlsZXlzW19zSW5kXSkgewoJCQkJCQkJX3NlY3Rpb24uZmluZCgnI2NvbW1lbnRGb3JtLW9sZFNtaWxleXNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgJ2NoZWNrZWQnKS5hdHRyKCdjaGVja2VkJyk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlfc2VjdGlvbi5maW5kKCcjY29tbWVudEZvcm0tb2xkU21pbGV5c18nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkucmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQkJCQl9CgkJCQkJZGVmYXVsdDoKCQkJCQkJX3NlY3Rpb24uZmluZCgnI2NvbW1lbnRGb3JtLW9sZFNtaWxleXNfJyArIF9zSW5kKS52YWwoc2V0dGluZ3Mub2xkU21pbGV5c1tfc0luZF0pLmF0dHIoJ3ZhbHVlJywgc2V0dGluZ3Mub2xkU21pbGV5c1tfc0luZF0pOwoJCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQkKCQlmb3IoX3NJbmQgaW4gc2V0dGluZ3Muc21pbGV5cykgewoJCQkkKCcjc21pbGV5c1RhYmxlJykuYXBwZW5kKCQoJzx0cj4nKS5hcHBlbmQoJCgnPHRkPicpLnRleHQoX3NJbmQpKS5hcHBlbmQoJCgnPHRkPicpLmh0bWwoJyZyYXJyOycpKS5hcHBlbmQoJCgnPHRkPicpLmFkZENsYXNzKCdzbWlsZXlFeGFtcGxlJykuYXBwZW5kKCQoJzxpbWc+JykuYXR0cignc3JjJyxzZXR0aW5ncy5zbWlsZXlzW19zSW5kXSkpKS5hcHBlbmQoJCgnPHRkPicpLmFkZENsYXNzKCdzbWlsZXlzX3JlbW92ZScpLnRleHQoJ1gnKS5jbGljayhyZW1vdmVTbWlsZXkpKSk7CgkJfQoJCQoJCSQoJyNjb21tZW50Rm9ybS1zbWlsZXlzX2FkZCcpLmNsaWNrKGFkZFNtaWxleSk7CgoJCV9zZWN0aW9uLmZpbmQoJ3VsJykuYXBwZW5kKCQoJzxsaT4nKS5hZGRDbGFzcygnZm9ybS1saXN0LXJvdycpLmh0bWwoJzxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGlucHV0IGNsYXNzPSJidXR0b24gYnV0dG9uLS10eXBlLXByaW1hcnkiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic2F2ZV9wcml2YWN5X29wdGlvbnMiIHZhbHVlPSJTcGVpY2hlcm4iPjxpbnB1dCBjbGFzcz0ibGluayBmb3JtLWNhbmNlbCIgdHlwZT0icmVzZXQiIHZhbHVlPSJadXLDvGNrc2V0emVuIj48L2Rpdj4nKSk7Cgl9CgkKCWZ1bmN0aW9uIHN1Ym1pdFNldHRpbmdzKF9ldnQpIHsKCQlfZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJX2V2dC5zdG9wUHJvcGFnYXRpb24oKTsKCgkJdmFyIF9lcnJNZXNzYWdlID0gJyc7CgoJCXZhciBfYWxsT0sgPSB0cnVlOwoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MuYmVoYXZpb3IpIHsKCQkJdHJ5IHsKCQkJCXNldHRpbmdzLmJlaGF2aW9yW19zSW5kXSA9ICQoJyNiZWhhdmlvckZvcm0tYmVoYXZpb3JfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJyk7CgkJCX0gY2F0Y2goZSkgewoJCQkJX2FsbE9LID0gZmFsc2U7CgkJCX0KCQl9CgoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MuaGlkZUFkcykgewoJCQl0cnkgewoJCQkJc2V0dGluZ3MuaGlkZUFkc1tfc0luZF0gPSAkKCcjYWRGb3JtLWhpZGVBZHNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJyk7CgkJCX0gY2F0Y2goZSkgewoJCQkJX2FsbE9LID0gZmFsc2U7CgkJCX0KCQl9CgoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MubW92ZUJ1dHRvbnMpIHsKCQkJdHJ5IHsKCQkJCXNldHRpbmdzLm1vdmVCdXR0b25zW19zSW5kXSA9ICQoJyNidXR0b25Gb3JtLW1vdmVCdXR0b25zXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcpOwoJCQl9IGNhdGNoKGUpIHsKCQkJCV9hbGxPSyA9IGZhbHNlOwoJCQl9CgkJfQoKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLnVzZXJNZW51RGlyZWN0KSB7CgkJCXRyeSB7CgkJCQlzZXR0aW5ncy51c2VyTWVudURpcmVjdFtfc0luZF0gPSAkKCcjdXNlck1lbnVGb3JtLWRpcmVjdF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnKTsKCQkJfSBjYXRjaChlKSB7CgkJCQlfYWxsT0sgPSBmYWxzZTsKCQkJfQoJCX0KCgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5kZWFscykgewoJCQlpZihfc0luZCA9PSAnaGlkZScpIHsKCQkJCXRyeSB7CgkJCQkJbmV3IFJlZ0V4cCgkKCcjZGVhbHNGb3JtLWRlYWxzXycgKyBfc0luZCkudmFsKCkpOwoJCQkJfSBjYXRjaCAoZSkgewoJCQkJCV9lcnJNZXNzYWdlICs9IGUgKyAnPGJyIC8+JzsKCQkJCQlfYWxsT0sgPSBmYWxzZTsKCQkJCX0KCQkJfQoJCQl0cnkgewoJCQkJc2V0dGluZ3MuZGVhbHNbX3NJbmRdID0gKCQoJyNkZWFsc0Zvcm0tZGVhbHNfJyArIF9zSW5kKS5hdHRyKCd0eXBlJykgPT0gJ251bWJlcicgPyBwYXJzZUludCgkKCcjZGVhbHNGb3JtLWRlYWxzXycgKyBfc0luZCkudmFsKCksIDEwKSA6ICQoJyNkZWFsc0Zvcm0tZGVhbHNfJyArIF9zSW5kKS52YWwoKSk7CgkJCX0gY2F0Y2goZSkgewoJCQkJX2FsbE9LID0gZmFsc2U7CgkJCX0KCQl9CgoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MuZGlzcGxheSkgewoJCQlpZigkKCcjZGlzcGxheUZvcm0tZGlzcGxheV8nICsgX3NJbmQpLmxlbmd0aCkgewoJCQkJdHJ5IHsKCQkJCQlzd2l0Y2godHlwZW9mIHNldHRpbmdzLmRpc3BsYXlbX3NJbmRdKSB7CgkJCQkJCWNhc2UgJ2Jvb2xlYW4nOgoJCQkJCQkJc2V0dGluZ3MuZGlzcGxheVtfc0luZF0gPSAkKCcjZGlzcGxheUZvcm0tZGlzcGxheV8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICdudW1iZXInOgoJCQkJCQkJc2V0dGluZ3MuZGlzcGxheVtfc0luZF0gPSBwYXJzZUludCgkKCcjZGlzcGxheUZvcm0tZGlzcGxheV8nICsgX3NJbmQpLnZhbCgpLCAxMCk7CgkJCQkJCQlicmVhazsKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCXNldHRpbmdzLmRpc3BsYXlbX3NJbmRdID0gJCgnI2Rpc3BsYXlGb3JtLWRpc3BsYXlfJyArIF9zSW5kKS52YWwoKTsKCQkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0gY2F0Y2goZSkgewoJCQkJCV9hbGxPSyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJfQoKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLnNlYXJjaCkgewoJCQlpZigkKCcjc2VhcmNoRm9ybS1zZWFyY2hfJyArIF9zSW5kKS5sZW5ndGgpIHsKCQkJCXRyeSB7CgkJCQkJc3dpdGNoKHR5cGVvZiBzZXR0aW5ncy5zZWFyY2hbX3NJbmRdKSB7CgkJCQkJCWNhc2UgJ2Jvb2xlYW4nOgoJCQkJCQkJc2V0dGluZ3Muc2VhcmNoW19zSW5kXSA9ICQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICdudW1iZXInOgoJCQkJCQkJc2V0dGluZ3Muc2VhcmNoW19zSW5kXSA9IHBhcnNlSW50KCQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnZhbCgpLCAxMCk7CgkJCQkJCQlicmVhazsKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCXNldHRpbmdzLnNlYXJjaFtfc0luZF0gPSAkKCcjc2VhcmNoRm9ybS1zZWFyY2hfJyArIF9zSW5kKS52YWwoKTsKCQkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0gY2F0Y2goZSkgewoJCQkJCV9hbGxPSyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJfQoKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLmNvbW1lbnRzKSB7CgkJCWlmKCQoJyNjb21tZW50Rm9ybS1jb21tZW50c18nICsgX3NJbmQpLmxlbmd0aCkgewoJCQkJdHJ5IHsKCQkJCQlzZXR0aW5ncy5jb21tZW50c1tfc0luZF0gPSAoJCgnI2NvbW1lbnRGb3JtLWNvbW1lbnRzXycgKyBfc0luZCkuYXR0cigndHlwZScpID09ICdudW1iZXInID8gcGFyc2VJbnQoJCgnI2NvbW1lbnRGb3JtLWNvbW1lbnRzXycgKyBfc0luZCkudmFsKCksIDEwKSA6ICQoJyNjb21tZW50Rm9ybS1jb21tZW50c18nICsgX3NJbmQpLnZhbCgpKTsKCQkJCX0gY2F0Y2goZSkgewoJCQkJCV9hbGxPSyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJfQoJCQoJCXNldHRpbmdzLnNtaWxleXMgPSB7fTsKCQkkKCcjc21pbGV5c1RhYmxlIHRyJykuZWFjaChmdW5jdGlvbiAoX3NJbmQsIF9zVmFsKSB7CgkJCXNldHRpbmdzLnNtaWxleXNbJChfc1ZhbCkuZmluZCgndGQnKS5lcSgwKS50ZXh0KCldID0gJChfc1ZhbCkuZmluZCgndGQnKS5lcSgyKS5maW5kKCdpbWcnKS5hdHRyKCdzcmMnKTsKCQl9KTsKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLm9sZFNtaWxleXMpIHsKCQkJdHJ5IHsKCQkJCXNldHRpbmdzLm9sZFNtaWxleXNbX3NJbmRdID0gJCgnI2NvbW1lbnRGb3JtLW9sZFNtaWxleXNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJyk7CgkJCX0gY2F0Y2goZSkgewoJCQkJX2FsbE9LID0gZmFsc2U7CgkJCX0KCQl9CgoJCWlmKF9hbGxPSykgewoJCQlzYXZlU2V0dGluZ3MoKTsKCQkJY3JlYXRlTWVzc2FnZVdpbmRvdygnRGVpbmUgRWluc3RlbGx1bmdlbiB3dXJkZW4gZ2VzcGVpY2hlcnQuPGJyIC8+V2VpdGVybGVpdHVuZyB6dXIgdXJzcHImdXVtbDtuZ2xpY2hlbiBTZWl0ZS4uLicsICdzdWNjZXNzJywgZnVuY3Rpb24gKCkgeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyNteWRlYWx6LWVuaGFuY2VyLywnJyk7IH0pOwoJCX0gZWxzZSB7CgkJCWNyZWF0ZU1lc3NhZ2VXaW5kb3coJ0VpbiBGZWhsZXIgdHJhdCBiZWltIFNwZWljaGVybiBhdWYuJyArIChfZXJyTWVzc2FnZS5sZW5ndGggPyAnPGJyIC8+JyArIF9lcnJNZXNzYWdlIDogJycpLCAnZXJyb3InKTsKCQl9Cgl9CgoJZnVuY3Rpb24gaW5pdCgpIHsKCQl2YXIgX25vRXJyb3IgPSB0cnVlOwoJCWlmKHdpbmRvdyAhPSB3aW5kb3cudG9wKSB7CgkJCS8vIE1vbWVudGFuZXIgV29ya2Fyb3VuZAoJCQkvLyBBbnNvbnN0ZW4gd2VyZGVuIGFsbGUgbmFjaGdlbGFkZW5lbiBFbGVtZW50ZSBhdWNoIGJlYXJiZWl0ZXQKCQkJcmV0dXJuOwoJCX0KCQl0cnkgewoJCQl2YXIgX3BhdGggPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9eXC8oW15cP10rKS4qJC8sICckMScpOwoJCQlpZigvXih2aXNpdHxpbWFnZSkvLnRlc3QoX3BhdGgpIHx8IC9eSmF2YVNjcmlwdCBTaGVsbC8udGVzdChkb2N1bWVudC50aXRsZSkpIHsKCQkJCXJldHVybjsKCQkJfQoJCQlyZXRyaWV2ZVVzZXJOYW1lKCk7CgkJCWxvYWRTZXR0aW5ncygpOwoJCQlhZGRNZW51U3dpdGNoZXIoZmlsdGVyUGF0aCgpKTsKCQkJcmVtb2RlbE5hdkJhcigpOwoJCQlyZW1vdmVBZHMoKTsKCQkJLy8gYWRkQ3liZXJEZWFseigpOwoJCQltb2RpZnlTZWFyY2goKTsKCQkJYWRkU2V0dXBMaW5rKCk7CgkJCWNoYW5nZUxpbmtzKCk7CgoJCQlpZihkb2N1bWVudC5sb2NhdGlvbi5oYXNoID09ICcjbXlkZWFsei1lbmhhbmNlcicpIHsKCQkJCXNob3dTZXR1cCgpOwoJCQl9CgkJCXN3aXRjaChfcGF0aCkgewoJCQkJY2FzZSAnY3liZXItbW9uZGF5L2N5YmVyZGVhbHMnOgoJCQkJCWFkZFRpbWVzKCk7CgkJCQljYXNlICdwcm9maWxlLycgKyB1c2VyTmFtZSArICcvbWVzc2FnZXMnOgoJCQkJCW1hcmtQblJlYWQoKTsKCQkJfQoKCQkJbW9kaWZ5TGlzdGluZ3MoKTsKCQkJYWRkU2Nyb2xsVXBCdXR0b24oKTsKCQkJYWRkSW1hZ2Vab29tKCk7CgkJCWluc2VydERpcmVjdExpbmsoKTsKCQkJYWRkRmVlZGJhY2tCdXR0b25zKCk7CgkJCWFkZEZ1bmNMaW5rcygpOwoJCQltb2RpZnlDb21tZW50cygpOwoJCQlzaG93T2xkU21pbGV5cygpOwoJCQlkZWFsVGV4dFByZXZpZXcoKTsKCQkJc2hvd1VzZXJJbmZvKCk7CgkJCWVtYmVkWW91dHViZSgpOwoJCQltaW5pbWl6ZVF1b3RlcygpOwoJCQliYWNrVG9BbmNob3IoKTsKCQl9IGNhdGNoIChlKSB7CgkJCWFsZXJ0KGUpOwoJCQlfbm9FcnJvciA9IGZhbHNlOwoJCX0KCgkJaWYoX25vRXJyb3IpIHsKCQkJaWYoc2V0dGluZ3MuYmVoYXZpb3Iuc2hvd0dyZWVuRG90cykgewoJCQkJJCgnLnVzZXJCYXItbGluayAuYXZhdGFyLWltYWdlJykuY3NzKCdib3JkZXInLCAnMXB4IGRvdHRlZCAjMDBmZjAwJyk7CgkJCX0KCQl9IGVsc2UgewoJCQkkKCcudXNlckJhci1saW5rIC5hdmF0YXItaW1hZ2UnKS5jc3MoJ2JvcmRlcicsICcxcHggZG90dGVkICNhYTAwMDAnKTsKCQl9Cgl9CgoJaW5pdCgpOwp9CgovLyBFcnN0IGxhZGVuLCB3ZW5uIERPTSBmZXJ0aWcgaXN0CmlmKGRvY3VtZW50LnJlYWR5U3RhdGUgPT0gJ2ludGVyYWN0aXZlJykgewoJTW9kaWZ5UGFnZSgpOwp9IGVsc2UgewoJJChkb2N1bWVudCkucmVhZHkoTW9kaWZ5UGFnZSk7Cn0=","requires":[{"meta":{"name":"jquery-2.1.4.min.js","url":"http://code.jquery.com/jquery-2.1.4.min.js","ts":1479476020290,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2Mi4xLjQgfCAoYykgMjAwNSwgMjAxNSBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwohZnVuY3Rpb24oYSxiKXsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hLmRvY3VtZW50P2IoYSwhMCk6ZnVuY3Rpb24oYSl7aWYoIWEuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIGIoYSl9OmIoYSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD1jLnNsaWNlLGU9Yy5jb25jYXQsZj1jLnB1c2gsZz1jLmluZGV4T2YsaD17fSxpPWgudG9TdHJpbmcsaj1oLmhhc093blByb3BlcnR5LGs9e30sbD1hLmRvY3VtZW50LG09IjIuMS40IixuPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBuLmZuLmluaXQoYSxiKX0sbz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2cscD0vXi1tcy0vLHE9Ly0oW1xkYS16XSkvZ2kscj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O24uZm49bi5wcm90b3R5cGU9e2pxdWVyeTptLGNvbnN0cnVjdG9yOm4sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBkLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT8wPmE/dGhpc1thK3RoaXMubGVuZ3RoXTp0aGlzW2FdOmQuY2FsbCh0aGlzKX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPW4ubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxiLmNvbnRleHQ9dGhpcy5jb250ZXh0LGJ9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5lYWNoKHRoaXMsYSxiKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhuLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZW5ndGgsYz0rYSsoMD5hP2I6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGM+PTAmJmI+Yz9bdGhpc1tjXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOmYsc29ydDpjLnNvcnQsc3BsaWNlOmMuc3BsaWNlfSxuLmV4dGVuZD1uLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnPWFyZ3VtZW50c1swXXx8e30saD0xLGk9YXJndW1lbnRzLmxlbmd0aCxqPSExO2ZvcigiYm9vbGVhbiI9PXR5cGVvZiBnJiYoaj1nLGc9YXJndW1lbnRzW2hdfHx7fSxoKyspLCJvYmplY3QiPT10eXBlb2YgZ3x8bi5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTtpPmg7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2JdLGchPT1kJiYoaiYmZCYmKG4uaXNQbGFpbk9iamVjdChkKXx8KGU9bi5pc0FycmF5KGQpKSk/KGU/KGU9ITEsZj1jJiZuLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZuLmlzUGxhaW5PYmplY3QoYyk/Yzp7fSxnW2JdPW4uZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxuLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisobStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhKX0sbm9vcDpmdW5jdGlvbigpe30saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4iZnVuY3Rpb24iPT09bi50eXBlKGEpfSxpc0FycmF5OkFycmF5LmlzQXJyYXksaXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PT1hLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiFuLmlzQXJyYXkoYSkmJmEtcGFyc2VGbG9hdChhKSsxPj0wfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiIT09bi50eXBlKGEpfHxhLm5vZGVUeXBlfHxuLmlzV2luZG93KGEpPyExOmEuY29uc3RydWN0b3ImJiFqLmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKT8hMTohMH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2ErIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYT9oW2kuY2FsbChhKV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGM9ZXZhbDthPW4udHJpbShhKSxhJiYoMT09PWEuaW5kZXhPZigidXNlIHN0cmljdCIpPyhiPWwuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYi50ZXh0PWEsbC5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShwLCJtcy0iKS5yZXBsYWNlKHEscil9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT0wLGY9YS5sZW5ndGgsZz1zKGEpO2lmKGMpe2lmKGcpe2Zvcig7Zj5lO2UrKylpZihkPWIuYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9Yi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGlmKGcpe2Zvcig7Zj5lO2UrKylpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFrfWVsc2UgZm9yKGUgaW4gYSlpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFrO3JldHVybiBhfSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOihhKyIiKS5yZXBsYWNlKG8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKHMoT2JqZWN0KGEpKT9uLm1lcmdlKGMsInN0cmluZyI9PXR5cGVvZiBhP1thXTphKTpmLmNhbGwoYyxhKSksY30saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/LTE6Zy5jYWxsKGIsYSxjKX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO2M+ZDtkKyspYVtlKytdPWJbZF07cmV0dXJuIGEubGVuZ3RoPWUsYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9W10sZj0wLGc9YS5sZW5ndGgsaD0hYztnPmY7ZisrKWQ9IWIoYVtmXSxmKSxkIT09aCYmZS5wdXNoKGFbZl0pO3JldHVybiBlfSxtYXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9MCxnPWEubGVuZ3RoLGg9cyhhKSxpPVtdO2lmKGgpZm9yKDtnPmY7ZisrKWQ9YihhW2ZdLGYsYyksbnVsbCE9ZCYmaS5wdXNoKGQpO2Vsc2UgZm9yKGYgaW4gYSlkPWIoYVtmXSxmLGMpLG51bGwhPWQmJmkucHVzaChkKTtyZXR1cm4gZS5hcHBseShbXSxpKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmO3JldHVybiJzdHJpbmciPT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxuLmlzRnVuY3Rpb24oYSk/KGU9ZC5jYWxsKGFyZ3VtZW50cywyKSxmPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYnx8dGhpcyxlLmNvbmNhdChkLmNhbGwoYXJndW1lbnRzKSkpfSxmLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8bi5ndWlkKyssZik6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3VwcG9ydDprfSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBzKGEpe3ZhciBiPSJsZW5ndGgiaW4gYSYmYS5sZW5ndGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6MT09PWEubm9kZVR5cGUmJmI/ITA6ImFycmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT0ic2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9aGEoKSx6PWhhKCksQT1oYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPTE8PDMxLEQ9e30uaGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNoLEg9RS5wdXNoLEk9RS5zbGljZSxKPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxLPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTD0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLE49TS5yZXBsYWNlKCJ3IiwidyMiKSxPPSJcXFsiK0wrIiooIitNKyIpKD86IitMKyIqKFsqXiR8IX5dPz0pIitMKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrTisiKSl8KSIrTCsiKlxcXSIsUD0iOigiK00rIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK08rIikqKXwuKilcXCl8KSIsUT1uZXcgUmVnRXhwKEwrIisiLCJnIiksUj1uZXcgUmVnRXhwKCJeIitMKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK0wrIiskIiwiZyIpLFM9bmV3IFJlZ0V4cCgiXiIrTCsiKiwiK0wrIioiKSxUPW5ldyBSZWdFeHAoIl4iK0wrIiooWz4rfl18IitMKyIpIitMKyIqIiksVT1uZXcgUmVnRXhwKCI9IitMKyIqKFteXFxdJ1wiXSo/KSIrTCsiKlxcXSIsImciKSxWPW5ldyBSZWdFeHAoUCksVz1uZXcgUmVnRXhwKCJeIitOKyIkIiksWD17SUQ6bmV3IFJlZ0V4cCgiXiMoIitNKyIpIiksQ0xBU1M6bmV3IFJlZ0V4cCgiXlxcLigiK00rIikiKSxUQUc6bmV3IFJlZ0V4cCgiXigiK00ucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK08pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitQKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK0wrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0wrIiooPzooWystXXwpIitMKyIqKFxcZCspfCkpIitMKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitLKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTCsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitMKyIqKCg/Oi1cXGQpP1xcZCopIitMKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxZPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksWj0vXmhcZCQvaSwkPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxfPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sYWE9L1srfl0vLGJhPS8nfFxcL2csY2E9bmV3IFJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitMKyI/fCgiK0wrIil8LikiLCJpZyIpLGRhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0iMHgiK2ItNjU1MzY7cmV0dXJuIGQhPT1kfHxjP2I6MD5kP1N0cmluZy5mcm9tQ2hhckNvZGUoZCs2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShkPj4xMHw1NTI5NiwxMDIzJmR8NTYzMjApfSxlYT1mdW5jdGlvbigpe20oKX07dHJ5e0guYXBwbHkoRT1JLmNhbGwodi5jaGlsZE5vZGVzKSx2LmNoaWxkTm9kZXMpLEVbdi5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZmEpe0g9e2FwcGx5OkUubGVuZ3RoP2Z1bmN0aW9uKGEsYil7Ry5hcHBseShhLEkuY2FsbChiKSl9OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGgsZD0wO3doaWxlKGFbYysrXT1iW2QrK10pO2EubGVuZ3RoPWMtMX19fWZ1bmN0aW9uIGdhKGEsYixkLGUpe3ZhciBmLGgsaixrLGwsbyxyLHMsdyx4O2lmKChiP2Iub3duZXJEb2N1bWVudHx8Yjp2KSE9PW4mJm0oYiksYj1ifHxuLGQ9ZHx8W10saz1iLm5vZGVUeXBlLCJzdHJpbmciIT10eXBlb2YgYXx8IWF8fDEhPT1rJiY5IT09ayYmMTEhPT1rKXJldHVybiBkO2lmKCFlJiZwKXtpZigxMSE9PWsmJihmPV8uZXhlYyhhKSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1iLmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lmKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1bWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChiLGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGopKSxkfWlmKGMucXNhJiYoIXF8fCFxLnRlc3QoYSkpKXtpZihzPXI9dSx3PWIseD0xIT09ayYmYSwxPT09ayYmIm9iamVjdCIhPT1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe289ZyhhKSwocj1iLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1yLnJlcGxhY2UoYmEsIlxcJCYiKTpiLnNldEF0dHJpYnV0ZSgiaWQiLHMpLHM9IltpZD0nIitzKyInXSAiLGw9by5sZW5ndGg7d2hpbGUobC0tKW9bbF09cytyYShvW2xdKTt3PWFhLnRlc3QoYSkmJnBhKGIucGFyZW50Tm9kZSl8fGIseD1vLmpvaW4oIiwiKX1pZih4KXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVlcnlTZWxlY3RvckFsbCh4KSksZH1jYXRjaCh5KXt9ZmluYWxseXtyfHxiLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBpKGEucmVwbGFjZShSLCIkMSIpLGIsZCxlKX1mdW5jdGlvbiBoYSgpe3ZhciBhPVtdO2Z1bmN0aW9uIGIoYyxlKXtyZXR1cm4gYS5wdXNoKGMrIiAiKT5kLmNhY2hlTGVuZ3RoJiZkZWxldGUgYlthLnNoaWZ0KCldLGJbYysiICJdPWV9cmV0dXJuIGJ9ZnVuY3Rpb24gaWEoYSl7cmV0dXJuIGFbdV09ITAsYX1mdW5jdGlvbiBqYShhKXt2YXIgYj1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4hIWEoYil9Y2F0Y2goYyl7cmV0dXJuITF9ZmluYWxseXtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSxiPW51bGx9fWZ1bmN0aW9uIGthKGEsYil7dmFyIGM9YS5zcGxpdCgifCIpLGU9YS5sZW5ndGg7d2hpbGUoZS0tKWQuYXR0ckhhbmRsZVtjW2VdXT1ifWZ1bmN0aW9uIGxhKGEsYil7dmFyIGM9YiYmYSxkPWMmJjE9PT1hLm5vZGVUeXBlJiYxPT09Yi5ub2RlVHlwZSYmKH5iLnNvdXJjZUluZGV4fHxDKS0ofmEuc291cmNlSW5kZXh8fEMpO2lmKGQpcmV0dXJuIGQ7aWYoYyl3aGlsZShjPWMubmV4dFNpYmxpbmcpaWYoYz09PWIpcmV0dXJuLTE7cmV0dXJuIGE/MTotMX1mdW5jdGlvbiBtYShhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1jJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYShhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09Y3x8ImJ1dHRvbiI9PT1jKSYmYi50eXBlPT09YX19ZnVuY3Rpb24gb2EoYSl7cmV0dXJuIGlhKGZ1bmN0aW9uKGIpe3JldHVybiBiPStiLGlhKGZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hKFtdLGMubGVuZ3RoLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWNbZT1mW2ddXSYmKGNbZV09IShkW2VdPWNbZV0pKX0pfSl9ZnVuY3Rpb24gcGEoYSl7cmV0dXJuIGEmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmYX1jPWdhLnN1cHBvcnQ9e30sZj1nYS5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj1hJiYoYS5vd25lckRvY3VtZW50fHxhKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGI/IkhUTUwiIT09Yi5ub2RlTmFtZTohMX0sbT1nYS5zZXREb2N1bWVudD1mdW5jdGlvbihhKXt2YXIgYixlLGc9YT9hLm93bmVyRG9jdW1lbnR8fGE6djtyZXR1cm4gZyE9PW4mJjk9PT1nLm5vZGVUeXBlJiZnLmRvY3VtZW50RWxlbWVudD8obj1nLG89Zy5kb2N1bWVudEVsZW1lbnQsZT1nLmRlZmF1bHRWaWV3LGUmJmUhPT1lLnRvcCYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZWEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixlYSkpLHA9IWYoZyksYy5hdHRyaWJ1dGVzPWphKGZ1bmN0aW9uKGEpe3JldHVybiBhLmNsYXNzTmFtZT0iaSIsIWEuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLGMuZ2V0RWxlbWVudHNCeVRhZ05hbWU9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZy5jcmVhdGVDb21tZW50KCIiKSksIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxjLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9JC50ZXN0KGcuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSksYy5nZXRCeUlkPWphKGZ1bmN0aW9uKGEpe3JldHVybiBvLmFwcGVuZENoaWxkKGEpLmlkPXUsIWcuZ2V0RWxlbWVudHNCeU5hbWV8fCFnLmdldEVsZW1lbnRzQnlOYW1lKHUpLmxlbmd0aH0pLGMuZ2V0QnlJZD8oZC5maW5kLklEPWZ1bmN0aW9uKGEsYil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRCeUlkJiZwKXt2YXIgYz1iLmdldEVsZW1lbnRCeUlkKGEpO3JldHVybiBjJiZjLnBhcmVudE5vZGU/W2NdOltdfX0sZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGNhLGRhKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn19KTooZGVsZXRlIGQuZmluZC5JRCxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpO3JldHVybiBmdW5jdGlvbihhKXt2YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBjJiZjLnZhbHVlPT09Yn19KSxkLmZpbmQuVEFHPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oYSxiKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWU/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTpjLnFzYT9iLnF1ZXJ5U2VsZWN0b3JBbGwoYSk6dm9pZCAwfTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT0wLGY9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTtpZigiKiI9PT1hKXt3aGlsZShjPWZbZSsrXSkxPT09Yy5ub2RlVHlwZSYmZC5wdXNoKGMpO3JldHVybiBkfXJldHVybiBmfSxkLmZpbmQuQ0xBU1M9Yy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihhLGIpe3JldHVybiBwP2IuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKTp2b2lkIDB9LHI9W10scT1bXSwoYy5xc2E9JC50ZXN0KGcucXVlcnlTZWxlY3RvckFsbCkpJiYoamEoZnVuY3Rpb24oYSl7by5hcHBlbmRDaGlsZChhKS5pbm5lckhUTUw9IjxhIGlkPSciK3UrIic+PC9hPjxzZWxlY3QgaWQ9JyIrdSsiLVxmXScgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEucHVzaCgiWypeJF09IitMKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHEucHVzaCgiXFxbIitMKyIqKD86dmFsdWV8IitLKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrdSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrdSsiKyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGphKGZ1bmN0aW9uKGEpe3ZhciBiPWcuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIrTCsiKlsqXiR8IX5dPz0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxxLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikscS5wdXNoKCIsLio6Iil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPSQudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmamEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSwiZGl2Iikscy5jYWxsKGEsIltzIT0nJ106eCIpLHIucHVzaCgiIT0iLFApfSkscT1xLmxlbmd0aCYmbmV3IFJlZ0V4cChxLmpvaW4oInwiKSkscj1yLmxlbmd0aCYmbmV3IFJlZ0V4cChyLmpvaW4oInwiKSksYj0kLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksdD1ifHwkLnRlc3Qoby5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxCPWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1nfHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYSk/LTE6Yj09PWd8fGIub3duZXJEb2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxiKTowOjQmZD8tMToxKX06ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBjLGQ9MCxlPWEucGFyZW50Tm9kZSxmPWIucGFyZW50Tm9kZSxoPVthXSxpPVtiXTtpZighZXx8IWYpcmV0dXJuIGE9PT1nPy0xOmI9PT1nPzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09PWYpcmV0dXJuIGxhKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0KGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9sYShoW2RdLGlbZF0pOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZyk6bn0sZ2EubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBnYShhLG51bGwsbnVsbCxiKX0sZ2EubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVjdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1zLmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50JiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJldHVybiBnYShiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxnYS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0KGEsYil9LGdhLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sZj1lJiZELmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIsIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/YS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5zcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxnYS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9LGdhLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxlPTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUmJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2ZdJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVybiBrPW51bGwsYX0sZT1nYS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7aWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1lKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9Z2Euc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aWEsbWF0Y2g6WCxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKGNhLGRhKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFjZShjYSxkYSksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGdhLmVycm9yKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFbM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVszXSkpOmFbM10mJmdhLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2YXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVsbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9ZyhjLCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYoYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlbYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK0wrIikiK2ErIigiK0wrInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmluZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWdhLmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9PT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4T2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUuc2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlLnJlcGxhY2UoUSwiICIpKyIgIikuaW5kZXhPZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09YysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0ibnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9mLXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVybiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixvLHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFyZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtpZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtvPXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1bZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJdLGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2FdPVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlbYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8KG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkpW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09PTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNldWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGdhLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/aWEoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUooYSxmW2ddKSxhW2RdPSEoY1tkXT1mW2ddKX0pOmZ1bmN0aW9uKGEpe3JldHVybiBlKGEsMCxjKX0pOmV9fSxwc2V1ZG9zOntub3Q6aWEoZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPWgoYS5yZXBsYWNlKFIsIiQxIikpO3JldHVybiBkW3VdP2lhKGZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmLGc9ZChhLG51bGwsZSxbXSksaD1hLmxlbmd0aDt3aGlsZShoLS0pKGY9Z1toXSkmJihhW2hdPSEoYltoXT1mKSl9KTpmdW5jdGlvbihhLGUsZil7cmV0dXJuIGJbMF09YSxkKGIsbnVsbCxmLGMpLGJbMF09bnVsbCwhYy5wb3AoKX19KSxoYXM6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBnYShhLGIpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmlhKGZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZShjYSxkYSksZnVuY3Rpb24oYil7cmV0dXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEpPi0xfX0pLGxhbmc6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8fGdhLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNhLGRhKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9iLmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5pbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9jYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIuaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxuLmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1wdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpvYShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6b2EoZnVuY3Rpb24oYSxiKXtyZXR1cm5bYi0xXX0pLGVxOm9hKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpjXX0pLGV2ZW46b2EoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6b2EoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpvYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0Om9hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9ZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1tYShiKTtmb3IoYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1uYShiKTtmdW5jdGlvbiBxYSgpe31xYS5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNldEZpbHRlcnM9bmV3IHFhLGc9Z2EudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNlKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4ZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altnXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVha31yZXR1cm4gYj9oLmxlbmd0aDpoP2dhLmVycm9yKGEpOnooYSxpKS5zbGljZSgwKX07ZnVuY3Rpb24gcmEoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+YjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiBzYShhLGIsYyl7dmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBiLmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgsaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8fGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhbMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJdPWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gdGEoYSl7cmV0dXJuIGEubGVuZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlpZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24gdWEoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylnYShhLGJbZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdmEoYSxiLGMsZCxlKXtmb3IodmFyIGYsZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYmKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4gZ31mdW5jdGlvbiB3YShhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD13YShkKSksZSYmIWVbdV0mJihlPXdhKGUsZikpLGlhKGZ1bmN0aW9uKGYsZyxoLGkpe3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHVhKGJ8fCIqIixoLm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnZhKHAsbSxhLGgsaSkscj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj12YShyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10pJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9W10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwpO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJihqPWU/SihmLGwpOm1ba10pPi0xJiYoZltqXT0hKGdbal09bCkpfX1lbHNlIHI9dmEocj09PWc/ci5zcGxpY2UobyxyLmxlbmd0aCk6ciksZT9lKG51bGwsZyxyLGkpOkguYXBwbHkoZyxyKX0pfWZ1bmN0aW9uIHhhKGEpe2Zvcih2YXIgYixjLGUsZj1hLmxlbmd0aCxnPWQucmVsYXRpdmVbYVswXS50eXBlXSxoPWd8fGQucmVsYXRpdmVbIiAiXSxpPWc/MTowLGs9c2EoZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1ifSxoLCEwKSxsPXNhKGZ1bmN0aW9uKGEpe3JldHVybiBKKGIsYSk+LTF9LGgsITApLG09W2Z1bmN0aW9uKGEsYyxkKXt2YXIgZT0hZyYmKGR8fGMhPT1qKXx8KChiPWMpLm5vZGVUeXBlP2soYSxjLGQpOmwoYSxjLGQpKTtyZXR1cm4gYj1udWxsLGV9XTtmPmk7aSsrKWlmKGM9ZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3NhKHRhKG0pLGMpXTtlbHNle2lmKGM9ZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1XSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJyZWFrO3JldHVybiB3YShpPjEmJnRhKG0pLGk+MSYmcmEoYS5zbGljZSgwLGktMSkuY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShSLCIkMSIpLGMsZT5pJiZ4YShhLnNsaWNlKGksZSkpLGY+ZSYmeGEoYT1hLnNsaWNlKGUpKSxmPmUmJnJhKGEpKX1tLnB1c2goYyl9cmV0dXJuIHRhKG0pfWZ1bmN0aW9uIHlhKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5jdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtdLHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1hdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtxIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1hW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYoKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXttPTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUocS0tKXJbcV18fHNbcV18fChzW3FdPUYuY2FsbChpKSk7cz12YShzKX1ILmFwcGx5KGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZ2EudW5pcXVlU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2lhKGYpOmZ9cmV0dXJuIGg9Z2EuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1bXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxlKGMtLSlmPXhhKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx5YShlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9Z2Euc2VsZWN0PWZ1bmN0aW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2YgYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5sZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9PT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZkLnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNbMF0ucmVwbGFjZShjYSxkYSksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1iLnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lmKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRbbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNhLGRhKSxhYS50ZXN0KGpbMF0udHlwZSkmJnBhKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZyYShqKSwhYSlyZXR1cm4gSC5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYS50ZXN0KGEpJiZwYShiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGphKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGthKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmphKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGthKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGphKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxrYShLLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxnYX0oYSk7bi5maW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlPXQudW5pcXVlU29ydCxuLnRleHQ9dC5nZXRUZXh0LG4uaXNYTUxEb2M9dC5pc1hNTCxuLmNvbnRhaW5zPXQuY29udGFpbnM7dmFyIHU9bi5leHByLm1hdGNoLm5lZWRzQ29udGV4dCx2PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sdz0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHgoYSxiLGMpe2lmKG4uaXNGdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10eXBlb2YgYil7aWYody50ZXN0KGIpKXJldHVybiBuLmZpbHRlcihiLGEsYyk7Yj1uLmZpbHRlcihiLGEpfXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gZy5jYWxsKGIsYSk+PTAhPT1jfSl9bi5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz10aGlzLmxlbmd0aCxkPVtdLGU9dGhpcztpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4oYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGI9MDtjPmI7YisrKWlmKG4uY29udGFpbnMoZVtiXSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IoYj0wO2M+YjtiKyspbi5maW5kKGEsZVtiXSxkKTtyZXR1cm4gZD10aGlzLnB1c2hTdGFjayhjPjE/bi51bmlxdWUoZCk6ZCksZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxkfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXgodGhpcywic3RyaW5nIj09dHlwZW9mIGEmJnUudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9fSk7dmFyIHksej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEE9bi5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YVswXSYmIj4iPT09YVthLmxlbmd0aC0xXSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4ZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eSkuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1iIGluc3RhbmNlb2Ygbj9iWzBdOmIsbi5tZXJnZSh0aGlzLG4ucGFyc2VIVE1MKGNbMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6bCwhMCkpLHYudGVzdChjWzFdKSYmbi5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbi5pc0Z1bmN0aW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGQ9bC5nZXRFbGVtZW50QnlJZChjWzJdKSxkJiZkLnBhcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZCksdGhpcy5jb250ZXh0PWwsdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTpuLmlzRnVuY3Rpb24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB5LnJlYWR5P3kucmVhZHkoYSk6YShuKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxuLm1ha2VBcnJheShhLHRoaXMpKX07QS5wcm90b3R5cGU9bi5mbix5PW4obCk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtuLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY319KSxuLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3ZhciBiPW4oYSx0aGlzKSxjPWIubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2M+YTthKyspaWYobi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXUudGVzdChhKXx8InN0cmluZyIhPXR5cGVvZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9uLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP2cuY2FsbChuKGEpLHRoaXNbMF0pOmcuY2FsbCh0aGlzLGEuanF1ZXJ5P2FbMF06YSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWUobi5tZXJnZSh0aGlzLmdldCgpLG4oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe3doaWxlKChhPWFbYl0pJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bi5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5cGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBuLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmcoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29udGVudERvY3VtZW50fHxuLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHxuLnVuaXF1ZShlKSxCLnRlc3QoYSkmJmUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRT0vXFMrL2csRj17fTtmdW5jdGlvbiBHKGEpe3ZhciBiPUZbYV09e307cmV0dXJuIG4uZWFjaChhLm1hdGNoKEUpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW4uQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP0ZbYV18fEcoYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZixnLGg9W10saT0hYS5vbmNlJiZbXSxqPWZ1bmN0aW9uKGwpe2ZvcihiPWEubWVtb3J5JiZsLGM9ITAsZz1lfHwwLGU9MCxmPWgubGVuZ3RoLGQ9ITA7aCYmZj5nO2crKylpZihoW2ddLmFwcGx5KGxbMF0sbFsxXSk9PT0hMSYmYS5zdG9wT25GYWxzZSl7Yj0hMTticmVha31kPSExLGgmJihpP2kubGVuZ3RoJiZqKGkuc2hpZnQoKSk6Yj9oPVtdOmsuZGlzYWJsZSgpKX0saz17YWRkOmZ1bmN0aW9uKCl7aWYoaCl7dmFyIGM9aC5sZW5ndGg7IWZ1bmN0aW9uIGcoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1uLnR5cGUoYyk7ImZ1bmN0aW9uIj09PWQ/YS51bmlxdWUmJmsuaGFzKGMpfHxoLnB1c2goYyk6YyYmYy5sZW5ndGgmJiJzdHJpbmciIT09ZCYmZyhjKX0pfShhcmd1bWVudHMpLGQ/Zj1oLmxlbmd0aDpiJiYoZT1jLGooYikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaCYmbi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxlKChjPW4uaW5BcnJheShiLGgsYykpPi0xKWguc3BsaWNlKGMsMSksZCYmKGY+PWMmJmYtLSxnPj1jJiZnLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVybiBhP24uaW5BcnJheShhLGgpPi0xOiEoIWh8fCFoLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sZj0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gaD1pPWI9dm9pZCAwLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWh9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaT12b2lkIDAsYnx8ay5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWl9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIWh8fGMmJiFpfHwoYj1ifHxbXSxiPVthLGIuc2xpY2U/Yi5zbGljZSgpOmJdLGQ/aS5wdXNoKGIpOmooYikpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWN9fTtyZXR1cm4ga30sbi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUiLCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cztyZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihjKXtuLmVhY2goYixmdW5jdGlvbihiLGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0aW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpLnByb2dyZXNzKGMubm90aWZ5KTpjW2ZbMF0rIldpdGgiXSh0aGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlswXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlswXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUsZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZC5jYWxsKGFyZ3VtZW50cyksZT1jLmxlbmd0aCxmPTEhPT1lfHxhJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9lOjAsZz0xPT09Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZSl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0aD4xP2QuY2FsbChhcmd1bWVudHMpOmUsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6LS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihlPjEpZm9yKGk9bmV3IEFycmF5KGUpLGo9bmV3IEFycmF5KGUpLGs9bmV3IEFycmF5KGUpO2U+YjtiKyspY1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCkuZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCkucHJvZ3Jlc3MoaChiLGosaSkpOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0pO3ZhciBIO24uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4ucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksdGhpc30sbi5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bi5yZWFkeVdhaXQrKzpuLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLW4ucmVhZHlXYWl0Om4uaXNSZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0PjB8fChILnJlc29sdmVXaXRoKGwsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYobihsKS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxuKGwpLm9mZigicmVhZHkiKSkpKX19KTtmdW5jdGlvbiBJKCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixJLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEksITEpLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJuIEh8fChIPW4uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09bC5yZWFkeVN0YXRlP3NldFRpbWVvdXQobi5yZWFkeSk6KGwuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSSwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixJLCExKSkpLEgucHJvbWlzZShiKX0sbi5yZWFkeS5wcm9taXNlKCk7dmFyIEo9bi5hY2Nlc3M9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVsbD09YztpZigib2JqZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKW4uYWNjZXNzKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihlPSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxiPW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEpLGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0saCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMpOmZ9O24uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5cGV8fDk9PT1hLm5vZGVUeXBlfHwhK2Eubm9kZVR5cGV9O2Z1bmN0aW9uIEsoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89bi5leHBhbmRvK0sudWlkKyt9Sy51aWQ9MSxLLmFjY2VwdHM9bi5hY2NlcHREYXRhLEsucHJvdG90eXBlPXtrZXk6ZnVuY3Rpb24oYSl7aWYoIUsuYWNjZXB0cyhhKSlyZXR1cm4gMDt2YXIgYj17fSxjPWFbdGhpcy5leHBhbmRvXTtpZighYyl7Yz1LLnVpZCsrO3RyeXtiW3RoaXMuZXhwYW5kb109e3ZhbHVlOmN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEsYil9Y2F0Y2goZCl7Ylt0aGlzLmV4cGFuZG9dPWMsbi5leHRlbmQoYSxiKX19cmV0dXJuIHRoaXMuY2FjaGVbY118fCh0aGlzLmNhY2hlW2NdPXt9KSxjfSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcy5rZXkoYSksZj10aGlzLmNhY2hlW2VdO2lmKCJzdHJpbmciPT10eXBlb2YgYilmW2JdPWM7ZWxzZSBpZihuLmlzRW1wdHlPYmplY3QoZikpbi5leHRlbmQodGhpcy5jYWNoZVtlXSxiKTtlbHNlIGZvcihkIGluIGIpZltkXT1iW2RdO3JldHVybiBmfSxnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNhY2hlW3RoaXMua2V5KGEpXTtyZXR1cm4gdm9pZCAwPT09Yj9jOmNbYl19LGFjY2VzczpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIHZvaWQgMD09PWJ8fGImJiJzdHJpbmciPT10eXBlb2YgYiYmdm9pZCAwPT09Yz8oZD10aGlzLmdldChhLGIpLHZvaWQgMCE9PWQ/ZDp0aGlzLmdldChhLG4uY2FtZWxDYXNlKGIpKSk6KHRoaXMuc2V0KGEsYixjKSx2b2lkIDAhPT1jP2M6Yil9LHJlbW92ZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXMua2V5KGEpLGc9dGhpcy5jYWNoZVtmXTtpZih2b2lkIDA9PT1iKXRoaXMuY2FjaGVbZl09e307ZWxzZXtuLmlzQXJyYXkoYik/ZD1iLmNvbmNhdChiLm1hcChuLmNhbWVsQ2FzZSkpOihlPW4uY2FtZWxDYXNlKGIpLGIgaW4gZz9kPVtiLGVdOihkPWUsZD1kIGluIGc/W2RdOmQubWF0Y2goRSl8fFtdKSksYz1kLmxlbmd0aDt3aGlsZShjLS0pZGVsZXRlIGdbZFtjXV19fSxoYXNEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiFuLmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oYSl7YVt0aGlzLmV4cGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dfX07dmFyIEw9bmV3IEssTT1uZXcgSyxOPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIFAoYSxiLGMpe3ZhciBkO2lmKHZvaWQgMD09PWMmJjE9PT1hLm5vZGVUeXBlKWlmKGQ9ImRhdGEtIitiLnJlcGxhY2UoTywiLSQxIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmciPT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToibnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk4udGVzdChjKT9uLnBhcnNlSlNPTihjKTpjfWNhdGNoKGUpe31NLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1cm4gY31uLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gTS5oYXNEYXRhKGEpfHxMLmhhc0RhdGEoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpewpyZXR1cm4gTS5hY2Nlc3MoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7TS5yZW1vdmUoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBMLmFjY2VzcyhhLGIsYyl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7TC5yZW1vdmUoYSxiKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhpcy5sZW5ndGgmJihlPU0uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTC5nZXQoZiwiaGFzRGF0YUF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1nW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2UoZC5zbGljZSg1KSksUChmLGQsZVtkXSkpKTtMLnNldChmLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7TS5zZXQodGhpcyxhKX0pOkoodGhpcyxmdW5jdGlvbihiKXt2YXIgYyxkPW4uY2FtZWxDYXNlKGEpO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9TS5nZXQoZixhKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9TS5nZXQoZixkKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9UChmLGQsdm9pZCAwKSx2b2lkIDAhPT1jKXJldHVybiBjfWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9TS5nZXQodGhpcyxkKTtNLnNldCh0aGlzLGQsYiksLTEhPT1hLmluZGV4T2YoIi0iKSYmdm9pZCAwIT09YyYmTS5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe00ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngiKSsicXVldWUiLGQ9TC5nZXQoYSxiKSxjJiYoIWR8fG4uaXNBcnJheShjKT9kPUwuYWNjZXNzKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gTC5nZXQoYSxjKXx8TC5hY2Nlc3MoYSxjLHtlbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtMLnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPUwuZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5lbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBRPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFI9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxTPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX0sVD0vXig/OmNoZWNrYm94fHJhZGlvKSQvaTshZnVuY3Rpb24oKXt2YXIgYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxiPWEuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJkaXYiKSksYz1sLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGMuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGMuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGIuYXBwZW5kQ2hpbGQoYyksay5jaGVja0Nsb25lPWIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIFU9InVuZGVmaW5lZCI7ay5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImluIGE7dmFyIFY9L15rZXkvLFc9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51KXxjbGljay8sWD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWT0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFooKXtyZXR1cm4hMH1mdW5jdGlvbiAkKCl7cmV0dXJuITF9ZnVuY3Rpb24gXygpe3RyeXtyZXR1cm4gbC5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319bi5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1MLmdldChhKTtpZihyKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRsZXIsZT1mLnNlbGVjdG9yKSxjLmd1aWR8fChjLmd1aWQ9bi5ndWlkKyspLChpPXIuZXZlbnRzKXx8KGk9ci5ldmVudHM9e30pLChnPXIuaGFuZGxlKXx8KGc9ci5oYW5kbGU9ZnVuY3Rpb24oYil7cmV0dXJuIHR5cGVvZiBuIT09VSYmbi5ldmVudC50cmlnZ2VyZWQhPT1iLnR5cGU/bi5ldmVudC5kaXNwYXRjaC5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSksYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWg9WS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxrPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGYpLChtPWlbb10pfHwobT1pW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGwuc2V0dXAmJmwuc2V0dXAuY2FsbChhLGQscCxnKSE9PSExfHxhLmFkZEV2ZW50TGlzdGVuZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihvLGcsITEpKSxsLmFkZCYmKGwuYWRkLmNhbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkpLGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksbi5ldmVudC5nbG9iYWxbb109ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPUwuaGFzRGF0YShhKSYmTC5nZXQoYSk7aWYociYmKGk9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRSl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1ZLmV4ZWMoYltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8byxtPWlbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxnPWY9bS5sZW5ndGg7d2hpbGUoZi0tKWs9bVtmXSwhZSYmcSE9PWsub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWsuZ3VpZHx8aCYmIWgudGVzdChrLm5hbWVzcGFjZSl8fGQmJmQhPT1rLnNlbGVjdG9yJiYoIioqIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxrKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEscCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRlbGV0ZSBpW29dKX1lbHNlIGZvcihvIGluIGkpbi5ldmVudC5yZW1vdmUoYSxvK2Jbal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaSkmJihkZWxldGUgci5oYW5kbGUsTC5yZW1vdmUoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxrLG0sbyxwPVtkfHxsXSxxPWouY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscj1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihnPWg9ZD1kfHxsLDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmIVgudGVzdChxK24uZXZlbnQudHJpZ2dlcmVkKSYmKHEuaW5kZXhPZigiLiIpPj0wJiYocj1xLnNwbGl0KCIuIikscT1yLnNoaWZ0KCksci5zb3J0KCkpLGs9cS5pbmRleE9mKCI6Iik8MCYmIm9uIitxLGI9YltuLmV4cGFuZG9dP2I6bmV3IG4uRXZlbnQocSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPXIuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxvPW4uZXZlbnQuc3BlY2lhbFtxXXx8e30sZXx8IW8udHJpZ2dlcnx8by50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhby5ub0J1YmJsZSYmIW4uaXNXaW5kb3coZCkpe2ZvcihpPW8uZGVsZWdhdGVUeXBlfHxxLFgudGVzdChpK3EpfHwoZz1nLnBhcmVudE5vZGUpO2c7Zz1nLnBhcmVudE5vZGUpcC5wdXNoKGcpLGg9ZztoPT09KGQub3duZXJEb2N1bWVudHx8bCkmJnAucHVzaChoLmRlZmF1bHRWaWV3fHxoLnBhcmVudFdpbmRvd3x8YSl9Zj0wO3doaWxlKChnPXBbZisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPWY+MT9pOm8uYmluZFR5cGV8fHEsbT0oTC5nZXQoZywiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZMLmdldChnLCJoYW5kbGUiKSxtJiZtLmFwcGx5KGcsYyksbT1rJiZnW2tdLG0mJm0uYXBwbHkmJm4uYWNjZXB0RGF0YShnKSYmKGIucmVzdWx0PW0uYXBwbHkoZyxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO3JldHVybiBiLnR5cGU9cSxlfHxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxvLl9kZWZhdWx0JiZvLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYykhPT0hMXx8IW4uYWNjZXB0RGF0YShkKXx8ayYmbi5pc0Z1bmN0aW9uKGRbcV0pJiYhbi5pc1dpbmRvdyhkKSYmKGg9ZFtrXSxoJiYoZFtrXT1udWxsKSxuLmV2ZW50LnRyaWdnZXJlZD1xLGRbcV0oKSxuLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaCYmKGRba109aCkpLGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50LmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxqPShMLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGs9bi5ldmVudC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGlbMF09YSxhLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWsucHJlRGlzcGF0Y2h8fGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEpIT09ITEpe2g9bi5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxqKSxiPTA7d2hpbGUoKGY9aFtiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7YS5jdXJyZW50VGFyZ2V0PWYuZWxlbSxjPTA7d2hpbGUoKGc9Zi5oYW5kbGVyc1tjKytdKSYmIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWEubmFtZXNwYWNlX3JlfHxhLm5hbWVzcGFjZV9yZS50ZXN0KGcubmFtZXNwYWNlKSkmJihhLmhhbmRsZU9iaj1nLGEuZGF0YT1nLmRhdGEsZT0oKG4uZXZlbnQuc3BlY2lhbFtnLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8Zy5oYW5kbGVyKS5hcHBseShmLmVsZW0saSksdm9pZCAwIT09ZSYmKGEucmVzdWx0PWUpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBrLnBvc3REaXNwYXRjaCYmay5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9YS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCFhLmJ1dHRvbnx8ImNsaWNrIiE9PWEudHlwZSkpZm9yKDtpIT09dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpe2ZvcihkPVtdLGM9MDtoPmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWRbZV0mJihkW2VdPWYubmVlZHNDb250ZXh0P24oZSx0aGlzKS5pbmRleChpKT49MDpuLmZpbmQoZSx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGRbZV0mJmQucHVzaChmKTtkLmxlbmd0aCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZH0pfXJldHVybiBoPGIubGVuZ3RoJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hpY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGwsZD1jLmRvY3VtZW50RWxlbWVudCxlPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZCYmZC5zY3JvbGxMZWZ0fHxlJiZlLnNjcm9sbExlZnR8fDApLShkJiZkLmNsaWVudExlZnR8fGUmJmUuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGQmJmQuc2Nyb2xsVG9wfHxlJiZlLnNjcm9sbFRvcHx8MCktKGQmJmQuY2xpZW50VG9wfHxlJiZlLmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZCxlPWEudHlwZSxmPWEsZz10aGlzLmZpeEhvb2tzW2VdO2d8fCh0aGlzLmZpeEhvb2tzW2VdPWc9Vy50ZXN0KGUpP3RoaXMubW91c2VIb29rczpWLnRlc3QoZSk/dGhpcy5rZXlIb29rczp7fSksZD1nLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgbi5FdmVudChmKSxiPWQubGVuZ3RoO3doaWxlKGItLSljPWRbYl0sYVtjXT1mW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWwpLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGcuZmlsdGVyP2cuZmlsdGVyKGEsZik6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1fKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1fKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmbi5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0JiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9YS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4uZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9uLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOm4uZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LG4ucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9LG4uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5WYWx1ZT09PSExP1o6JCk6dGhpcy50eXBlPWEsYiYmbi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8bi5ub3coKSx2b2lkKHRoaXNbbi5leHBhbmRvXT0hMCkpOm5ldyBuLkV2ZW50KGEsYil9LG4uRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6JCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDokLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiQscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9WixhJiZhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFuLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLmZvY3VzaW5CdWJibGVzfHxuLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LG4uZXZlbnQuZml4KGEpLCEwKX07bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPUwuYWNjZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksTC5hY2Nlc3MoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1MLmFjY2VzcyhkLGIpLTE7ZT9MLmFjY2VzcyhkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLEwucmVtb3ZlKGQsYikpfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1jfHxiLGI9dm9pZCAwKTtmb3IoZyBpbiBhKXRoaXMub24oZyxiLGMsYVtnXSxlKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQgMCk6bnVsbD09ZCYmKCJzdHJpbmciPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKTooZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPSQ7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihmPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbigpLm9mZihhKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWYuZ3VpZHx8KGYuZ3VpZD1uLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPSQpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIGFhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksYmE9LzwoW1x3Ol0rKS8sY2E9Lzx8JiM/XHcrOy8sZGE9LzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxlYT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxmYT0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksZ2E9L150cnVlXC8oLiopLyxoYT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2csaWE9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtpYS5vcHRncm91cD1pYS5vcHRpb24saWEudGJvZHk9aWEudGZvb3Q9aWEuY29sZ3JvdXA9aWEuY2FwdGlvbj1pYS50aGVhZCxpYS50aD1pYS50ZDtmdW5jdGlvbiBqYShhLGIpe3JldHVybiBuLm5vZGVOYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24ga2EoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9PWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiBsYShhKXt2YXIgYj1nYS5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06YS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIG1hKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKUwuc2V0KGFbY10sImdsb2JhbEV2YWwiLCFifHxMLmdldChiW2NdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIG5hKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYoTC5oYXNEYXRhKGEpJiYoZj1MLmFjY2VzcyhhKSxnPUwuc2V0KGIsZiksaj1mLmV2ZW50cykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihjPTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKW4uZXZlbnQuYWRkKGIsZSxqW2VdW2NdKX1NLmhhc0RhdGEoYSkmJihoPU0uYWNjZXNzKGEpLGk9bi5leHRlbmQoe30saCksTS5zZXQoYixpKSl9fWZ1bmN0aW9uIG9hKGEsYil7dmFyIGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6YS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOltdO3JldHVybiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sYyk6Y31mdW5jdGlvbiBwYShhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09YyYmVC50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tlZDooImlucHV0Ij09PWN8fCJ0ZXh0YXJlYSI9PT1jKSYmKGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX1uLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jbG9uZU5vZGUoITApLGk9bi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSk7aWYoIShrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZz1vYShoKSxmPW9hKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcGEoZltkXSxnW2RdKTtpZihiKWlmKGMpZm9yKGY9Znx8b2EoYSksZz1nfHxvYShoKSxkPTAsZT1mLmxlbmd0aDtlPmQ7ZCsrKW5hKGZbZF0sZ1tkXSk7ZWxzZSBuYShhLGgpO3JldHVybiBnPW9hKGgsInNjcmlwdCIpLGcubGVuZ3RoPjAmJm1hKGcsIWkmJm9hKGEsInNjcmlwdCIpKSxofSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxmLGcsaCxpLGosaz1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsPVtdLG09MCxvPWEubGVuZ3RoO28+bTttKyspaWYoZT1hW21dLGV8fDA9PT1lKWlmKCJvYmplY3QiPT09bi50eXBlKGUpKW4ubWVyZ2UobCxlLm5vZGVUeXBlP1tlXTplKTtlbHNlIGlmKGNhLnRlc3QoZSkpe2Y9Znx8ay5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxnPShiYS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGg9aWFbZ118fGlhLl9kZWZhdWx0LGYuaW5uZXJIVE1MPWhbMV0rZS5yZXBsYWNlKGFhLCI8JDE+PC8kMj4iKStoWzJdLGo9aFswXTt3aGlsZShqLS0pZj1mLmxhc3RDaGlsZDtuLm1lcmdlKGwsZi5jaGlsZE5vZGVzKSxmPWsuZmlyc3RDaGlsZCxmLnRleHRDb250ZW50PSIifWVsc2UgbC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZSkpO2sudGV4dENvbnRlbnQ9IiIsbT0wO3doaWxlKGU9bFttKytdKWlmKCghZHx8LTE9PT1uLmluQXJyYXkoZSxkKSkmJihpPW4uY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpLGY9b2Eoay5hcHBlbmRDaGlsZChlKSwic2NyaXB0IiksaSYmbWEoZiksYykpe2o9MDt3aGlsZShlPWZbaisrXSlmYS50ZXN0KGUudHlwZXx8IiIpJiZjLnB1c2goZSl9cmV0dXJuIGt9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZj1uLmV2ZW50LnNwZWNpYWwsZz0wO3ZvaWQgMCE9PShjPWFbZ10pO2crKyl7aWYobi5hY2NlcHREYXRhKGMpJiYoZT1jW0wuZXhwYW5kb10sZSYmKGI9TC5jYWNoZVtlXSkpKXtpZihiLmV2ZW50cylmb3IoZCBpbiBiLmV2ZW50cylmW2RdP24uZXZlbnQucmVtb3ZlKGMsZCk6bi5yZW1vdmVFdmVudChjLGQsYi5oYW5kbGUpO0wuY2FjaGVbZV0mJmRlbGV0ZSBMLmNhY2hlW2VdfWRlbGV0ZSBNLmNhY2hlW2NbTS5leHBhbmRvXV19fX0pLG4uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4dENvbnRlbnQ9YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPWphKHRoaXMsYSk7Yi5hcHBlbmRDaGlsZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9amEodGhpcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD1hP24uZmlsdGVyKGEsdGhpcyk6dGhpcyxlPTA7bnVsbCE9KGM9ZFtlXSk7ZSsrKWJ8fDEhPT1jLm5vZGVUeXBlfHxuLmNsZWFuRGF0YShvYShjKSksYy5wYXJlbnROb2RlJiYoYiYmbi5jb250YWlucyhjLm93bmVyRG9jdW1lbnQsYykmJm1hKG9hKGMsInNjcmlwdCIpKSxjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEob2EoYSwhMSkpLGEudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9PWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1cm4gYi5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhZGEudGVzdChhKSYmIWlhWyhiYS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoYWEsIjwkMT48LyQyPiIpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7fSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKG9hKGIsITEpKSxiLmlubmVySFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxuLmNsZWFuRGF0YShvYSh0aGlzKSksYSYmYS5yZXBsYWNlQ2hpbGQoYix0aGlzKX0pLGEmJihhLmxlbmd0aHx8YS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGIpe2E9ZS5hcHBseShbXSxhKTt2YXIgYyxkLGYsZyxoLGksaj0wLGw9dGhpcy5sZW5ndGgsbT10aGlzLG89bC0xLHA9YVswXSxxPW4uaXNGdW5jdGlvbihwKTtpZihxfHxsPjEmJiJzdHJpbmciPT10eXBlb2YgcCYmIWsuY2hlY2tDbG9uZSYmZWEudGVzdChwKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPW0uZXEoYyk7cSYmKGFbMF09cC5jYWxsKHRoaXMsYyxkLmh0bWwoKSkpLGQuZG9tTWFuaXAoYSxiKX0pO2lmKGwmJihjPW4uYnVpbGRGcmFnbWVudChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSx0aGlzKSxkPWMuZmlyc3RDaGlsZCwxPT09Yy5jaGlsZE5vZGVzLmxlbmd0aCYmKGM9ZCksZCkpe2ZvcihmPW4ubWFwKG9hKGMsInNjcmlwdCIpLGthKSxnPWYubGVuZ3RoO2w+ajtqKyspaD1jLGohPT1vJiYoaD1uLmNsb25lKGgsITAsITApLGcmJm4ubWVyZ2UoZixvYShoLCJzY3JpcHQiKSkpLGIuY2FsbCh0aGlzW2pdLGgsaik7aWYoZylmb3IoaT1mW2YubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsbi5tYXAoZixsYSksaj0wO2c+ajtqKyspaD1mW2pdLGZhLnRlc3QoaC50eXBlfHwiIikmJiFMLmFjY2VzcyhoLCJnbG9iYWxFdmFsIikmJm4uY29udGFpbnMoaSxoKSYmKGguc3JjP24uX2V2YWxVcmwmJm4uX2V2YWxVcmwoaC5zcmMpOm4uZ2xvYmFsRXZhbChoLnRleHRDb250ZW50LnJlcGxhY2UoaGEsIiIpKSl9cmV0dXJuIHRoaXN9fSksbi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPVtdLGU9bihhKSxnPWUubGVuZ3RoLTEsaD0wO2c+PWg7aCsrKWM9aD09PWc/dGhpczp0aGlzLmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGYuYXBwbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIHFhLHJhPXt9O2Z1bmN0aW9uIHNhKGIsYyl7dmFyIGQsZT1uKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTpuLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiB0YShhKXt2YXIgYj1sLGM9cmFbYV07cmV0dXJuIGN8fChjPXNhKGEsYiksIm5vbmUiIT09YyYmY3x8KHFhPShxYXx8bigiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj1xYVswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xvc2UoKSxjPXNhKGEsYikscWEuZGV0YWNoKCkpLHJhW2FdPWMpLGN9dmFyIHVhPS9ebWFyZ2luLyx2YT1uZXcgUmVnRXhwKCJeKCIrUSsiKSg/IXB4KVthLXolXSskIiwiaSIpLHdhPWZ1bmN0aW9uKGIpe3JldHVybiBiLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcub3BlbmVyP2Iub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6YS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCl9O2Z1bmN0aW9uIHhhKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8d2EoYSksYyYmKGc9Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdKSxjJiYoIiIhPT1nfHxuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bi5zdHlsZShhLGIpKSx2YS50ZXN0KGcpJiZ1YS50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpKSx2b2lkIDAhPT1nP2crIiI6Z31mdW5jdGlvbiB5YShhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0hZnVuY3Rpb24oKXt2YXIgYixjLGQ9bC5kb2N1bWVudEVsZW1lbnQsZT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGY9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZihmLnN0eWxlKXtmLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsZi5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGsuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1mLnN0eWxlLmJhY2tncm91bmRDbGlwLGUuc3R5bGUuY3NzVGV4dD0iYm9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGUiLGUuYXBwZW5kQ2hpbGQoZik7ZnVuY3Rpb24gZygpe2Yuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxJTt0b3A6MSU7Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGUiLGYuaW5uZXJIVE1MPSIiLGQuYXBwZW5kQ2hpbGQoZSk7dmFyIGc9YS5nZXRDb21wdXRlZFN0eWxlKGYsbnVsbCk7Yj0iMSUiIT09Zy50b3AsYz0iNHB4Ij09PWcud2lkdGgsZC5yZW1vdmVDaGlsZChlKX1hLmdldENvbXB1dGVkU3R5bGUmJm4uZXh0ZW5kKGsse3BpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZygpLGJ9LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWMmJmcoKSxjfSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7dmFyIGIsYz1mLmFwcGVuZENoaWxkKGwuY3JlYXRlRWxlbWVudCgiZGl2IikpO3JldHVybiBjLnN0eWxlLmNzc1RleHQ9Zi5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjAiLGMuc3R5bGUubWFyZ2luUmlnaHQ9Yy5zdHlsZS53aWR0aD0iMCIsZi5zdHlsZS53aWR0aD0iMXB4IixkLmFwcGVuZENoaWxkKGUpLGI9IXBhcnNlRmxvYXQoYS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkubWFyZ2luUmlnaHQpLGQucmVtb3ZlQ2hpbGQoZSksZi5yZW1vdmVDaGlsZChjKSxifX0pfX0oKSxuLnN3YXA9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPXt9O2ZvcihmIGluIGIpZ1tmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuYXBwbHkoYSxkfHxbXSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWdbZl07cmV0dXJuIGV9O3ZhciB6YT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sQWE9bmV3IFJlZ0V4cCgiXigiK1ErIikoLiopJCIsImkiKSxCYT1uZXcgUmVnRXhwKCJeKFsrLV0pPSgiK1ErIikiLCJpIiksQ2E9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LERhPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifSxFYT1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIEZhKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWJbMF0udG9VcHBlckNhc2UoKStiLnNsaWNlKDEpLGQ9YixlPUVhLmxlbmd0aDt3aGlsZShlLS0paWYoYj1FYVtlXStjLGIgaW4gYSlyZXR1cm4gYjtyZXR1cm4gZH1mdW5jdGlvbiBHYShhLGIsYyl7dmFyIGQ9QWEuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMV0tKGN8fDApKSsoZFsyXXx8InB4Iik6Yn1mdW5jdGlvbiBIYShhLGIsYyxkLGUpe2Zvcih2YXIgZj1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT1iPzE6MCxnPTA7ND5mO2YrPTIpIm1hcmdpbiI9PT1jJiYoZys9bi5jc3MoYSxjK1JbZl0sITAsZSkpLGQ/KCJjb250ZW50Ij09PWMmJihnLT1uLmNzcyhhLCJwYWRkaW5nIitSW2ZdLCEwLGUpKSwibWFyZ2luIiE9PWMmJihnLT1uLmNzcyhhLCJib3JkZXIiK1JbZl0rIldpZHRoIiwhMCxlKSkpOihnKz1uLmNzcyhhLCJwYWRkaW5nIitSW2ZdLCEwLGUpLCJwYWRkaW5nIiE9PWMmJihnKz1uLmNzcyhhLCJib3JkZXIiK1JbZl0rIldpZHRoIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIElhKGEsYixjKXt2YXIgZD0hMCxlPSJ3aWR0aCI9PT1iP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHQsZj13YShhKSxnPSJib3JkZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT14YShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLHZhLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYoay5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK0hhKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1mdW5jdGlvbiBKYShhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1MLmdldChkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlMoZCkmJihmW2ddPUwuYWNjZXNzKGQsIm9sZGRpc3BsYXkiLHRhKGQubm9kZU5hbWUpKSkpOihlPVMoZCksIm5vbmUiPT09YyYmZXx8TC5zZXQoZCwib2xkZGlzcGxheSIsZT9jOm4uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkmJiIiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGF9bi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz14YShhLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1jPyIxIjpjfX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOiJjc3NGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGEmJjMhPT1hLm5vZGVUeXBlJiY4IT09YS5ub2RlVHlwZSYmYS5zdHlsZSl7dmFyIGUsZixnLGg9bi5jYW1lbENhc2UoYiksaT1hLnN0eWxlO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPUZhKGksaCkpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1toXSx2b2lkIDA9PT1jP2cmJiJnZXQiaW4gZyYmdm9pZCAwIT09KGU9Zy5nZXQoYSwhMSxkKSk/ZTppW2JdOihmPXR5cGVvZiBjLCJzdHJpbmciPT09ZiYmKGU9QmEuZXhlYyhjKSkmJihjPShlWzFdKzEpKmVbMl0rcGFyc2VGbG9hdChuLmNzcyhhLGIpKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiIT09Znx8bi5jc3NOdW1iZXJbaF18fChjKz0icHgiKSxrLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09Yi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChpW2JdPSJpbmhlcml0IiksZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpfHwoaVtiXT1jKSksdm9pZCAwKX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1GYShhLnN0eWxlLGgpKSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1lJiYoZT14YShhLGIsZCkpLCJub3JtYWwiPT09ZSYmYiBpbiBEYSYmKGU9RGFbYl0pLCIiPT09Y3x8Yz8oZj1wYXJzZUZsb2F0KGUpLGM9PT0hMHx8bi5pc051bWVyaWMoZik/Znx8MDplKTplfX0pLG4uZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBjP3phLnRlc3Qobi5jc3MoYSwiZGlzcGxheSIpKSYmMD09PWEub2Zmc2V0V2lkdGg/bi5zd2FwKGEsQ2EsZnVuY3Rpb24oKXtyZXR1cm4gSWEoYSxiLGQpfSk6SWEoYSxiLGQpOnZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1kJiZ3YShhKTtyZXR1cm4gR2EoYSxjLGQ/SGEoYSxiLGQsImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxlKSxlKTowKX19fSksbi5jc3NIb29rcy5tYXJnaW5SaWdodD15YShrLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9uLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0seGEsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG4uZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPSJzdHJpbmciPT10eXBlb2YgYz9jLnNwbGl0KCIgIik6W2NdOzQ+ZDtkKyspZVthK1JbZF0rYl09ZltkXXx8ZltkLTJdfHxmWzBdO3JldHVybiBlfX0sdWEudGVzdChhKXx8KG4uY3NzSG9va3NbYStiXS5zZXQ9R2EpfSksbi5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fSxnPTA7aWYobi5pc0FycmF5KGIpKXtmb3IoZD13YShhKSxlPWIubGVuZ3RoO2U+ZztnKyspZltiW2ddXT1uLmNzcyhhLGJbZ10sITEsZCk7cmV0dXJuIGZ9cmV0dXJuIHZvaWQgMCE9PWM/bi5zdHlsZShhLGIsYyk6bi5jc3MoYSxiKX0sYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gSmEodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gSmEodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzKT9uKHRoaXMpLnNob3coKTpuKHRoaXMpLmhpZGUoKX0pfX0pO2Z1bmN0aW9uIEthKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBLYS5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfW4uVHdlZW49S2EsS2EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpLYSxpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPUthLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpLYS5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1LYS5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOkthLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LEthLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1LYS5wcm90b3R5cGUsS2EucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxlJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1uLmNzcyhhLmVsZW0sYS5wcm9wLCIiKSxiJiYiYXV0byIhPT1iP2I6MCk6YS5lbGVtW2EucHJvcF19LHNldDpmdW5jdGlvbihhKXtuLmZ4LnN0ZXBbYS5wcm9wXT9uLmZ4LnN0ZXBbYS5wcm9wXShhKTphLmVsZW0uc3R5bGUmJihudWxsIT1hLmVsZW0uc3R5bGVbbi5jc3NQcm9wc1thLnByb3BdXXx8bi5jc3NIb29rc1thLnByb3BdKT9uLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxLYS5wcm9wSG9va3Muc2Nyb2xsVG9wPUthLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19LG4uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29zKGEqTWF0aC5QSSkvMn19LG4uZng9S2EucHJvdG90eXBlLmluaXQsbi5meC5zdGVwPXt9O3ZhciBMYSxNYSxOYT0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sT2E9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1ErIikoW2EteiVdKikkIiwiaSIpLFBhPS9xdWV1ZUhvb2tzJC8sUWE9W1ZhXSxSYT17IioiOltmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1PYS5leGVjKGIpLGY9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2FdPyIiOiJweCIpLGc9KG4uY3NzTnVtYmVyW2FdfHwicHgiIT09ZiYmK2QpJiZPYS5leGVjKG4uY3NzKGMuZWxlbSxhKSksaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8fDE7ZG8gaD1ofHwiLjUiLGcvPWgsbi5zdHlsZShjLmVsZW0sYSxnK2YpO3doaWxlKGghPT0oaD1jLmN1cigpL2QpJiYxIT09aCYmLS1pKX1yZXR1cm4gZSYmKGc9Yy5zdGFydD0rZ3x8K2R8fDAsYy51bml0PWYsYy5lbmQ9ZVsxXT9nKyhlWzFdKzEpKmVbMl06K2VbMl0pLGN9XX07ZnVuY3Rpb24gU2EoKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe0xhPXZvaWQgMH0pLExhPW4ubm93KCl9ZnVuY3Rpb24gVGEoYSxiKXt2YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIpYz1SW2RdLGVbIm1hcmdpbiIrY109ZVsicGFkZGluZyIrY109YTtyZXR1cm4gYiYmKGUub3BhY2l0eT1lLndpZHRoPWEpLGV9ZnVuY3Rpb24gVWEoYSxiLGMpe2Zvcih2YXIgZCxlPShSYVtiXXx8W10pLmNvbmNhdChSYVsiKiJdKSxmPTAsZz1lLmxlbmd0aDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlvbiBWYShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXMsbT17fSxvPWEuc3R5bGUscD1hLm5vZGVUeXBlJiZTKGEpLHE9TC5nZXQoYSwiZnhzaG93Iik7Yy5xdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1bmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1bby5vdmVyZmxvdyxvLm92ZXJmbG93WCxvLm92ZXJmbG93WV0saj1uLmNzcyhhLCJkaXNwbGF5Iiksaz0ibm9uZSI9PT1qP0wuZ2V0KGEsIm9sZGRpc3BsYXkiKXx8dGEoYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWsmJiJub25lIj09PW4uY3NzKGEsImZsb2F0IikmJihvLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYoby5vdmVyZmxvdz0iaGlkZGVuIixsLmFsd2F5cyhmdW5jdGlvbigpe28ub3ZlcmZsb3c9Yy5vdmVyZmxvd1swXSxvLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLG8ub3ZlcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0sTmEuZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShwPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcXx8dm9pZCAwPT09cVtkXSljb250aW51ZTtwPSEwfW1bZF09cSYmcVtkXXx8bi5zdHlsZShhLGQpfWVsc2Ugaj12b2lkIDA7aWYobi5pc0VtcHR5T2JqZWN0KG0pKSJpbmxpbmUiPT09KCJub25lIj09PWo/dGEoYS5ub2RlTmFtZSk6aikmJihvLmRpc3BsYXk9aik7ZWxzZXtxPyJoaWRkZW4iaW4gcSYmKHA9cS5oaWRkZW4pOnE9TC5hY2Nlc3MoYSwiZnhzaG93Iix7fSksZiYmKHEuaGlkZGVuPSFwKSxwP24oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe24oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7TC5yZW1vdmUoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbSluLnN0eWxlKGEsYixtW2JdKX0pO2ZvcihkIGluIG0pZz1VYShwP3FbZF06MCxkLGwpLGQgaW4gcXx8KHFbZF09Zy5zdGFydCxwJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uIFdhKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bi5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxuLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW4uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24gWGEoYSxiLGMpe3ZhciBkLGUsZj0wLGc9UWEubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9TGF8fFNhKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5kKHt9LGIpLG9wdHM6bi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpMYXx8U2EoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW4uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKFdhKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1RYVtmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIG4ubWFwKGssVWEsaiksbi5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbi5meC50aW1lcihuLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChYYSx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxSYVtjXT1SYVtjXXx8W10sUmFbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9RYS51bnNoaWZ0KGEpOlFhLnB1c2goYSl9fSksbi5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW4uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bi5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZuLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoUykuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bi5pc0VtcHR5T2JqZWN0KGEpLGY9bi5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPVhhKHRoaXMsbi5leHRlbmQoe30sYSksZik7KGV8fEwuZ2V0KHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmluaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYucXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxlPW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1lcnMsZz1MLmdldCh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZQYS50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwhYykmJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1cm4gYSE9PSExJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixjPUwuZ2V0KHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoVGEoYiwhMCksYSxkLGUpfX0pLG4uZWFjaCh7c2xpZGVEb3duOlRhKCJzaG93Iiksc2xpZGVVcDpUYSgiaGlkZSIpLHNsaWRlVG9nZ2xlOlRhKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxuLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPTAsYz1uLnRpbWVycztmb3IoTGE9bi5ub3coKTtiPGMubGVuZ3RoO2IrKylhPWNbYl0sYSgpfHxjW2JdIT09YXx8Yy5zcGxpY2UoYi0tLDEpO2MubGVuZ3RofHxuLmZ4LnN0b3AoKSxMYT12b2lkIDB9LG4uZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5zdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3RhcnQ9ZnVuY3Rpb24oKXtNYXx8KE1hPXNldEludGVydmFsKG4uZngudGljayxuLmZ4LmludGVydmFsKSl9LG4uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoTWEpLE1hPW51bGx9LG4uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1uLmZ4P24uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9bC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGI9bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxjPWIuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7YS50eXBlPSJjaGVja2JveCIsay5jaGVja09uPSIiIT09YS52YWx1ZSxrLm9wdFNlbGVjdGVkPWMuc2VsZWN0ZWQsYi5kaXNhYmxlZD0hMCxrLm9wdERpc2FibGVkPSFjLmRpc2FibGVkLGE9bC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGEudmFsdWU9InQiLGEudHlwZT0icmFkaW8iLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBZYSxaYSwkYT1uLmV4cHIuYXR0ckhhbmRsZTtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZihhJiYzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiB0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PT1VP24ucHJvcChhLGIsYyk6KDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJDYXNlKCksZD1uLmF0dHJIb29rc1tiXXx8KG4uZXhwci5tYXRjaC5ib29sLnRlc3QoYik/WmE6WWEpKSwKdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW4uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBuLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKSYmKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFrLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1iJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLFphPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sbi5lYWNoKG4uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9JGFbYl18fG4uZmluZC5hdHRyOyRhW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj0kYVtiXSwkYVtiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsJGFbYl09ZiksZX19KTt2YXIgX2E9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTtuLmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsbi5wcm9wLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLnByb3BGaXhbYV18fGFdfSl9fSksbi5leHRlbmQoe3Byb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1hLm5vZGVUeXBlO2lmKGEmJjMhPT1nJiY4IT09ZyYmMiE9PWcpcmV0dXJuIGY9MSE9PWd8fCFuLmlzWE1MRG9jKGEpLGYmJihiPW4ucHJvcEZpeFtiXXx8YixlPW4ucHJvcEhvb2tzW2JdKSx2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fF9hLnRlc3QoYS5ub2RlTmFtZSl8fGEuaHJlZj9hLnRhYkluZGV4Oi0xfX19fSksay5vcHRTZWxlY3RlZHx8KG4ucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9fSksbi5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSk7dmFyIGFiPS9bXHRcclxuXGZdL2c7bi5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPSJzdHJpbmciPT10eXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKGFiLCIgIik6IiAiKSl7Zj0wO3doaWxlKGU9YltmKytdKWQuaW5kZXhPZigiICIrZSsiICIpPDAmJihkKz1lKyIgIik7Zz1uLnRyaW0oZCksYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihoKWZvcihiPShhfHwiIikubWF0Y2goRSl8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ldLGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oIiAiK2MuY2xhc3NOYW1lKyIgIikucmVwbGFjZShhYiwiICIpOiIiKSl7Zj0wO3doaWxlKGU9YltmKytdKXdoaWxlKGQuaW5kZXhPZigiICIrZSsiICIpPj0wKWQ9ZC5yZXBsYWNlKCIgIitlKyIgIiwiICIpO2c9YT9uLnRyaW0oZCk6IiIsYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0cmluZyI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOnRoaXMuZWFjaChuLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYyl7bih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfTpmdW5jdGlvbigpe2lmKCJzdHJpbmciPT09Yyl7dmFyIGIsZD0wLGU9bih0aGlzKSxmPWEubWF0Y2goRSl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1vdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2UoYz09PVV8fCJib29sZWFuIj09PWMpJiYodGhpcy5jbGFzc05hbWUmJkwuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOkwuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoYWIsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBiYj0vXHIvZztuLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW4udmFsSG9va3NbdGhpcy50eXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8bi52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UoYmIsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm4udHJpbShuLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZuLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bihjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW4ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWQ9ZVtnXSwoZC5zZWxlY3RlZD1uLmluQXJyYXkoZC52YWx1ZSxmKT49MCkmJihjPSEwKTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19fX0pLG4uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe24udmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmlzQXJyYXkoYik/YS5jaGVja2VkPW4uaW5BcnJheShuKGEpLnZhbCgpLGIpPj0wOnZvaWQgMH19LGsuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVlfSl9KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfX0pO3ZhciBjYj1uLm5vdygpLGRiPS9cPy87bi5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYSsiIil9LG4ucGFyc2VYTUw9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtjPW5ldyBET01QYXJzZXIsYj1jLnBhcnNlRnJvbVN0cmluZyhhLCJ0ZXh0L3htbCIpfWNhdGNoKGQpe2I9dm9pZCAwfXJldHVybighYnx8Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZuLmVycm9yKCJJbnZhbGlkIFhNTDogIithKSxifTt2YXIgZWI9LyMuKiQvLGZiPS8oWz8mXSlfPVteJl0qLyxnYj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLGhiPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLGliPS9eKD86R0VUfEhFQUQpJC8samI9L15cL1wvLyxrYj0vXihbXHcuKy1dKzopKD86XC9cLyg/OlteXC8/I10qQHwpKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxsYj17fSxtYj17fSxuYj0iKi8iLmNvbmNhdCgiKiIpLG9iPWEubG9jYXRpb24uaHJlZixwYj1rYi5leGVjKG9iLnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlvbiBxYihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWIsYj0iKiIpO3ZhciBkLGU9MCxmPWIudG9Mb3dlckNhc2UoKS5tYXRjaChFKXx8W107aWYobi5pc0Z1bmN0aW9uKGMpKXdoaWxlKGQ9ZltlKytdKSIrIj09PWRbMF0/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gcmIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09bWI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxuLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBzYihhLGIpe3ZhciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGMgaW4gYil2b2lkIDAhPT1iW2NdJiYoKGVbY10/YTpkfHwoZD17fSkpW2NdPWJbY10pO3JldHVybiBkJiZuLmV4dGVuZCghMCxhLGQpLGF9ZnVuY3Rpb24gdGIoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWQmJihkPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihkKWZvcihlIGluIGgpaWYoaFtlXSYmaFtlXS50ZXN0KGQpKXtpLnVuc2hpZnQoZSk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGUgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tlKyIgIitpWzBdXSl7Zj1lO2JyZWFrfWd8fChnPWUpfWY9Znx8Z31yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gdWIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6b2IsdHlwZToiR0VUIixpc0xvY2FsOmhiLnRlc3QocGJbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6bmIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpuLnBhcnNlSlNPTiwidGV4dCB4bWwiOm4ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP3NiKHNiKGEsbi5hamF4U2V0dGluZ3MpLGIpOnNiKG4uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOnFiKGxiKSxhamF4VHJhbnNwb3J0OnFiKG1iKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1uLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxtPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9uKGwpOm4uZXZlbnQsbz1uLkRlZmVycmVkKCkscD1uLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighZil7Zj17fTt3aGlsZShiPWdiLmV4ZWMoZSkpZltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1mW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gYyYmYy5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fG9iKSsiIikucmVwbGFjZShlYiwiIikucmVwbGFjZShqYixwYlsxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1uLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihoPWtiLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFofHxoWzFdPT09cGJbMV0mJmhbMl09PT1wYlsyXSYmKGhbM118fCgiaHR0cDoiPT09aFsxXT8iODAiOiI0NDMiKSk9PT0ocGJbM118fCgiaHR0cDoiPT09cGJbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1uLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSkscmIobGIsayxiLHYpLDI9PT10KXJldHVybiB2O2k9bi5ldmVudCYmay5nbG9iYWwsaSYmMD09PW4uYWN0aXZlKysmJm4uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0haWIudGVzdChrLnR5cGUpLGQ9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZD1rLnVybCs9KGRiLnRlc3QoZCk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPWZiLnRlc3QoZCk/ZC5yZXBsYWNlKGZiLCIkMV89IitjYisrKTpkKyhkYi50ZXN0KGQpPyImIjoiPyIpKyJfPSIrY2IrKykpLGsuaWZNb2RpZmllZCYmKG4ubGFzdE1vZGlmaWVkW2RdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixuLmxhc3RNb2RpZmllZFtkXSksbi5ldGFnW2RdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG4uZXRhZ1tkXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK25iKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoaiBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGosay5oZWFkZXJzW2pdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihqIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbal0oa1tqXSk7aWYoYz1yYihtYixrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGkmJm0udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxjLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGYsaCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGM9dm9pZCAwLGU9aHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGYmJih1PXRiKGssdixmKSksdT11YihrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobi5sYXN0TW9kaWZpZWRbZF09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG4uZXRhZ1tkXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxpJiZtLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGkmJihtLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbi5hY3RpdmV8fG4uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG4uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe25bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG4uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG4uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG4uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbi5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG4uaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pOih0aGlzWzBdJiYoYj1uKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdEVsZW1lbnRDaGlsZClhPWEuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcykpLHRoaXMpfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChuLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYil7bih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfTpmdW5jdGlvbigpe3ZhciBiPW4odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9bi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe24ubm9kZU5hbWUodGhpcywiYm9keSIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KSxuLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGg8PTAmJmEub2Zmc2V0SGVpZ2h0PD0wfSxuLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFuLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciB2Yj0vJTIwL2csd2I9L1xbXF0kLyx4Yj0vXHI/XG4vZyx5Yj0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksemI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIEFiKGEsYixjLGQpe3ZhciBlO2lmKG4uaXNBcnJheShiKSluLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fHdiLnRlc3QoYSk/ZChhLGUpOkFiKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1uLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilBYihhKyJbIitlKyJdIixiW2VdLGMsZCl9bi5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bi5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW4uYWpheFNldHRpbmdzJiZuLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW4uaXNQbGFpbk9iamVjdChhKSluLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKUFiKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKHZiLCIrIil9LG4uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW4ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP24ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW4odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZ6Yi50ZXN0KHRoaXMubm9kZU5hbWUpJiYheWIudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVQudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1uKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bi5pc0FycmF5KGMpP24ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZSh4YiwiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoeGIsIlxyXG4iKX19KS5nZXQoKX19KSxuLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1jYXRjaChhKXt9fTt2YXIgQmI9MCxDYj17fSxEYj17MDoyMDAsMTIyMzoyMDR9LEViPW4uYWpheFNldHRpbmdzLnhocigpO2EuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgYSBpbiBDYilDYlthXSgpfSksay5jb3JzPSEhRWImJiJ3aXRoQ3JlZGVudGlhbHMiaW4gRWIsay5hamF4PUViPSEhRWIsbi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBrLmNvcnN8fEViJiYhYS5jcm9zc0RvbWFpbj97c2VuZDpmdW5jdGlvbihjLGQpe3ZhciBlLGY9YS54aHIoKSxnPSsrQmI7aWYoZi5vcGVuKGEudHlwZSxhLnVybCxhLmFzeW5jLGEudXNlcm5hbWUsYS5wYXNzd29yZCksYS54aHJGaWVsZHMpZm9yKGUgaW4gYS54aHJGaWVsZHMpZltlXT1hLnhockZpZWxkc1tlXTthLm1pbWVUeXBlJiZmLm92ZXJyaWRlTWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZShhLm1pbWVUeXBlKSxhLmNyb3NzRG9tYWlufHxjWyJYLVJlcXVlc3RlZC1XaXRoIl18fChjWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7Zm9yKGUgaW4gYylmLnNldFJlcXVlc3RIZWFkZXIoZSxjW2VdKTtiPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe2ImJihkZWxldGUgQ2JbZ10sYj1mLm9ubG9hZD1mLm9uZXJyb3I9bnVsbCwiYWJvcnQiPT09YT9mLmFib3J0KCk6ImVycm9yIj09PWE/ZChmLnN0YXR1cyxmLnN0YXR1c1RleHQpOmQoRGJbZi5zdGF0dXNdfHxmLnN0YXR1cyxmLnN0YXR1c1RleHQsInN0cmluZyI9PXR5cGVvZiBmLnJlc3BvbnNlVGV4dD97dGV4dDpmLnJlc3BvbnNlVGV4dH06dm9pZCAwLGYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LGYub25sb2FkPWIoKSxmLm9uZXJyb3I9YigiZXJyb3IiKSxiPUNiW2ddPWIoImFib3J0Iik7dHJ5e2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCl9Y2F0Y2goaCl7aWYoYil0aHJvdyBofX0sYWJvcnQ6ZnVuY3Rpb24oKXtiJiZiKCl9fTp2b2lkIDB9KSxuLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19fSksbi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiKX0pLG4uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjO3JldHVybntzZW5kOmZ1bmN0aW9uKGQsZSl7Yj1uKCI8c2NyaXB0PiIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6YS5zY3JpcHRDaGFyc2V0LHNyYzphLnVybH0pLm9uKCJsb2FkIGVycm9yIixjPWZ1bmN0aW9uKGEpe2IucmVtb3ZlKCksYz1udWxsLGEmJmUoImVycm9yIj09PWEudHlwZT80MDQ6MjAwLGEudHlwZSl9KSxsLmhlYWQuYXBwZW5kQ2hpbGQoYlswXSl9LGFib3J0OmZ1bmN0aW9uKCl7YyYmYygpfX19fSk7dmFyIEZiPVtdLEdiPS8oPSlcPyg/PSZ8JCl8XD9cPy87bi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPUZiLnBvcCgpfHxuLmV4cGFuZG8rIl8iK2NiKys7cmV0dXJuIHRoaXNbYV09ITAsYX19KSxuLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaD1iLmpzb25wIT09ITEmJihHYi50ZXN0KGIudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIGIuZGF0YSYmIShiLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJkdiLnRlc3QoYi5kYXRhKSYmImRhdGEiKTtyZXR1cm4gaHx8Impzb25wIj09PWIuZGF0YVR5cGVzWzBdPyhlPWIuanNvbnBDYWxsYmFjaz1uLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaD9iW2hdPWJbaF0ucmVwbGFjZShHYiwiJDEiK2UpOmIuanNvbnAhPT0hMSYmKGIudXJsKz0oZGIudGVzdChiLnVybCk/IiYiOiI/IikrYi5qc29ucCsiPSIrZSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIGd8fG4uZXJyb3IoZSsiIHdhcyBub3QgY2FsbGVkIiksZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iLGY9YVtlXSxhW2VdPWZ1bmN0aW9uKCl7Zz1hcmd1bWVudHN9LGQuYWx3YXlzKGZ1bmN0aW9uKCl7YVtlXT1mLGJbZV0mJihiLmpzb25wQ2FsbGJhY2s9Yy5qc29ucENhbGxiYWNrLEZiLnB1c2goZSkpLGcmJm4uaXNGdW5jdGlvbihmKSYmZihnWzBdKSxnPWY9dm9pZCAwfSksInNjcmlwdCIpOnZvaWQgMH0pLG4ucGFyc2VIVE1MPWZ1bmN0aW9uKGEsYixjKXtpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIGImJihjPWIsYj0hMSksYj1ifHxsO3ZhciBkPXYuZXhlYyhhKSxlPSFjJiZbXTtyZXR1cm4gZD9bYi5jcmVhdGVFbGVtZW50KGRbMV0pXTooZD1uLmJ1aWxkRnJhZ21lbnQoW2FdLGIsZSksZSYmZS5sZW5ndGgmJm4oZSkucmVtb3ZlKCksbi5tZXJnZShbXSxkLmNoaWxkTm9kZXMpKX07dmFyIEhiPW4uZm4ubG9hZDtuLmZuLmxvYWQ9ZnVuY3Rpb24oYSxiLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSYmSGIpcmV0dXJuIEhiLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZCxlLGYsZz10aGlzLGg9YS5pbmRleE9mKCIgIik7cmV0dXJuIGg+PTAmJihkPW4udHJpbShhLnNsaWNlKGgpKSxhPWEuc2xpY2UoMCxoKSksbi5pc0Z1bmN0aW9uKGIpPyhjPWIsYj12b2lkIDApOmImJiJvYmplY3QiPT10eXBlb2YgYiYmKGU9IlBPU1QiKSxnLmxlbmd0aD4wJiZuLmFqYXgoe3VybDphLHR5cGU6ZSxkYXRhVHlwZToiaHRtbCIsZGF0YTpifSkuZG9uZShmdW5jdGlvbihhKXtmPWFyZ3VtZW50cyxnLmh0bWwoZD9uKCI8ZGl2PiIpLmFwcGVuZChuLnBhcnNlSFRNTChhKSkuZmluZChkKTphKX0pLmNvbXBsZXRlKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGMsZnx8W2EucmVzcG9uc2VUZXh0LGIsYV0pfSksdGhpc30sbi5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07dmFyIEliPWEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Z1bmN0aW9uIEpiKGEpe3JldHVybiBuLmlzV2luZG93KGEpP2E6OT09PWEubm9kZVR5cGUmJmEuZGVmYXVsdFZpZXd9bi5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaz1uLmNzcyhhLCJwb3NpdGlvbiIpLGw9bihhKSxtPXt9OyJzdGF0aWMiPT09ayYmKGEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksaD1sLm9mZnNldCgpLGY9bi5jc3MoYSwidG9wIiksaT1uLmNzcyhhLCJsZWZ0Iiksaj0oImFic29sdXRlIj09PWt8fCJmaXhlZCI9PT1rKSYmKGYraSkuaW5kZXhPZigiYXV0byIpPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50b3AsZT1kLmxlZnQpOihnPXBhcnNlRmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxuLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsaCkpLG51bGwhPWIudG9wJiYobS50b3A9Yi50b3AtaC50b3ArZyksbnVsbCE9Yi5sZWZ0JiYobS5sZWZ0PWIubGVmdC1oLmxlZnQrZSksInVzaW5nImluIGI/Yi51c2luZy5jYWxsKGEsbSk6bC5jc3MobSl9fSxuLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWE/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oYil7bi5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO3ZhciBiLGMsZD10aGlzWzBdLGU9e3RvcDowLGxlZnQ6MH0sZj1kJiZkLm93bmVyRG9jdW1lbnQ7aWYoZilyZXR1cm4gYj1mLmRvY3VtZW50RWxlbWVudCxuLmNvbnRhaW5zKGIsZCk/KHR5cGVvZiBkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PVUmJihlPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGM9SmIoZikse3RvcDplLnRvcCtjLnBhZ2VZT2Zmc2V0LWIuY2xpZW50VG9wLGxlZnQ6ZS5sZWZ0K2MucGFnZVhPZmZzZXQtYi5jbGllbnRMZWZ0fSk6ZX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9dGhpc1swXSxkPXt0b3A6MCxsZWZ0OjB9O3JldHVybiJmaXhlZCI9PT1uLmNzcyhjLCJwb3NpdGlvbiIpP2I9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxuLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGQ9YS5vZmZzZXQoKSksZC50b3ArPW4uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksZC5sZWZ0Kz1uLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1kLnRvcC1uLmNzcyhjLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1kLmxlZnQtbi5jc3MoYywibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxJYjt3aGlsZShhJiYhbi5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bi5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxJYn0pfX0pLG4uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihiLGMpe3ZhciBkPSJwYWdlWU9mZnNldCI9PT1jO24uZm5bYl09ZnVuY3Rpb24oZSl7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihiLGUsZil7dmFyIGc9SmIoYik7cmV0dXJuIHZvaWQgMD09PWY/Zz9nW2NdOmJbZV06dm9pZChnP2cuc2Nyb2xsVG8oZD9hLnBhZ2VYT2Zmc2V0OmYsZD9mOmEucGFnZVlPZmZzZXQpOmJbZV09Zil9LGIsZSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLG4uZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09eWEoay5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/KGM9eGEoYSxiKSx2YS50ZXN0KGMpP24oYSkucG9zaXRpb24oKVtiXSsicHgiOmMpOnZvaWQgMH0pfSksbi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxuLmZuLmFuZFNlbGY9bi5mbi5hZGRCYWNrLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIEtiPWEualF1ZXJ5LExiPWEuJDtyZXR1cm4gbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKGIpe3JldHVybiBhLiQ9PT1uJiYoYS4kPUxiKSxiJiZhLmpRdWVyeT09PW4mJihhLmpRdWVyeT1LYiksbn0sdHlwZW9mIGI9PT1VJiYoYS5qUXVlcnk9YS4kPW4pLG59KTsK"}]},{"name":"Direct Google Images","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https?\\:\\/\\/(www|encrypted)\\.google\\./"],"orig_matches":[],"orig_noframes":true,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1479476075894,"data":{}},"enabled":true,"position":5,"file_url":"https://rawgit.com/zanetu/direct_google_images/beta/direct_google_images.user.js","uuid":"e740f07b-df0c-4a85-ab0c-05d7d8572962","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBEaXJlY3QgR29vZ2xlIEltYWdlcwovLyBAbmFtZXNwYWNlICAgIGh0dHA6Ly9ncmVhc3lmb3JrLm9yZy9lbi91c2Vycy80NjEKLy8gQHZlcnNpb24gICAgICAwLjk5Ci8vIEBkZXNjcmlwdGlvbiAgUHJvdmlkZXMgZGlyZWN0IGxpbmtzIGluIEdvb2dsZSBJbWFnZXMuCi8vIEBpbmNsdWRlICAgICAgL15odHRwcz9cOlwvXC8od3d3fGVuY3J5cHRlZClcLmdvb2dsZVwuLwovLyBAYXV0aG9yICAgICAgIHphbmV0dQovLyBAbGljZW5zZSAgICAgIEdQTCB2ZXJzaW9uIDIgb3IgYW55IGxhdGVyIHZlcnNpb247IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dAovLyBAZ3JhbnQgICAgICAgIEdNX2FkZFN0eWxlCi8vIEBydW4tYXQgICAgICAgZG9jdW1lbnQtc3RhcnQKLy8gQG5vZnJhbWVzCi8vID09L1VzZXJTY3JpcHQ9PQoKLy9kbyBub3QgcnVuIGluIGZyYW1lcyBvciBpZnJhbWVzCmlmKHdpbmRvdy50b3AgPT0gd2luZG93LnNlbGYpIHsKCXZhciBSRSA9IC9pbWdyZXNcP2ltZ3VybFw9KGh0dHAuKz8pXCZpbWdyZWZ1cmxcPShodHRwLis/KShcJnwkKS9pCgl2YXIgUkVfU09VUkNFID0gL3VybFw/KD86Lio/XCYpKj91cmxcPShodHRwLis/KShcJnwkKS9pCgl2YXIgV0FUQ0hfRVZFTlRTID0gWydtb3VzZWVudGVyJywgJ21vdXNlZG93bicsICdjbGljaycsICdmb2N1cycsICd0b3VjaHN0YXJ0J10KCXZhciBjbGlja0NvdW50ID0gMAoKCWZ1bmN0aW9uIGRkKHVybCkgewoJCXZhciBkMSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwpLCBkMgoJCXRyeSB7CgkJCWQyID0gZGVjb2RlVVJJQ29tcG9uZW50KGQxKQoJCX0KCQljYXRjaChtYWxmb3JtZWQpIHsKCQkJcmV0dXJuIGQxCgkJfQoJCXJldHVybiBkMgoJfQoKCWZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudCwgbWF0Y2hGdW5jdGlvbiwgbWF4TGV2ZWwpIHsKCQl2YXIgbWF4ID0gdW5kZWZpbmVkID09PSBtYXhMZXZlbCA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IHBhcnNlSW50KG1heExldmVsKSArIDEKCQlpZihtYXggPiAwICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBtYXRjaEZ1bmN0aW9uKSB7CgkJCWZvcig7IGVsZW1lbnQgJiYgbWF4LS07IGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpIHsKCQkJCWlmKG1hdGNoRnVuY3Rpb24oZWxlbWVudCkpIHsKCQkJCQlyZXR1cm4gZWxlbWVudAoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBudWxsCgl9CgoJZnVuY3Rpb24gbW9kaWZ5R29vZ2xlSW1hZ2UoZWxlbWVudCkgewoJCWlmKGVsZW1lbnQgJiYgZWxlbWVudC5ocmVmKSB7CgkJCXZhciBtID0gZWxlbWVudC5ocmVmLm1hdGNoKFJFKQoJCQlpZihtICYmIG1bMV0gJiYgbVsyXSkgewoJCQkJZWxlbWVudC5ocmVmID0gZGQobVsxXSkKCQkJCXNldERpcmVjdChlbGVtZW50KQoJCQkJaWYoaXNDbGlja2VkTGFzdChlbGVtZW50KSkgZWxlbWVudC5jbGljaygpCgkJCQlyZXR1cm4gdHJ1ZQoJCQl9CgkJCW0gPSBlbGVtZW50LmhyZWYubWF0Y2goUkVfU09VUkNFKQoJCQlpZihtICYmIG1bMV0pIHsKCQkJCWVsZW1lbnQuaHJlZiA9IGRkKG1bMV0pCgkJCQlzZXREaXJlY3QoZWxlbWVudCkKCQkJCXJldHVybiB0cnVlCgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlCgl9CgoJZnVuY3Rpb24gaXNEaXJlY3QoZSkgewoJCXJldHVybiAneWVzJyA9PT0gKGUgJiYgZS5nZXRBdHRyaWJ1dGUgJiYgZS5nZXRBdHRyaWJ1dGUoJ2RpcmVjdCcpKQoJfQoKCWZ1bmN0aW9uIHNldERpcmVjdChlKSB7CgkJZSAmJiBlLnNldEF0dHJpYnV0ZSAmJiBlLnNldEF0dHJpYnV0ZSgnZGlyZWN0JywgJ3llcycpCgl9CgoJZnVuY3Rpb24gdHJpZ2dlck1vdXNlRXZlbnQoZWxlbWVudCwgZXZlbnRUeXBlKSB7CgkJdmFyIGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIHsKCQkJYnViYmxlczogdHJ1ZSwKCQkJY2FuY2VsYWJsZTogdHJ1ZQoJCX0pCgkJZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KQoJfQoJCglmdW5jdGlvbiBpc0NsaWNrZWRMYXN0KGUpIHsKCQlyZXR1cm4gY2xpY2tDb3VudCA9PSAoZSAmJiBlLmdldEF0dHJpYnV0ZSAmJiBlLmdldEF0dHJpYnV0ZSgnY2xpY2stbnVtYmVyJykpCgl9CgkKCWZ1bmN0aW9uIGNhY2hlQ2xpY2soZSkgewoJCWUgJiYgZS5zZXRBdHRyaWJ1dGUgJiYgZS5zZXRBdHRyaWJ1dGUoJ2NsaWNrLW51bWJlcicsICsrY2xpY2tDb3VudCkKCX0KCgkvL292ZXJyaWRlIGV2ZW50IGhhbmRsZXJzCglmb3IodmFyIGkgaW4gV0FUQ0hfRVZFTlRTKSB7CgkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihXQVRDSF9FVkVOVFNbaV0sIGZ1bmN0aW9uKGV2ZW50KSB7CgkJCXZhciB0ID0gZXZlbnQudGFyZ2V0CgkJCXZhciBhQ29udGFpbmVyID0gY2xvc2VzdCh0LCBmdW5jdGlvbihlKSB7CgkJCQlyZXR1cm4gJ0EnID09PSBlLm5vZGVOYW1lCgkJCQkmJiAoCgkJCQkJCS8vaW1hZ2U7IHJlZ2V4IGNhbiBiZSByZXBsYWNlZCBieSBtb3JlIHJlY2VudCBjbGFzc0xpc3QuY29udGFpbnMoKQoJCQkJCQkvKF58XHMpaXNsaWIoXHN8JCkvLnRlc3QoZS5jbGFzc05hbWUpCgkJCQkJCS8vaW1hZ2Ugc291cmNlCgkJCQkJCXx8ICdub29wZW5lcicgPT09IGUuZ2V0QXR0cmlidXRlKCdyZWwnKQoJCQkJCSkKCQkJfSwgMikKCQkJaWYoIWFDb250YWluZXIpIHJldHVybgoJCQlpZignY2xpY2snID09PSBldmVudC50eXBlKSB7CgkJCQkvL3N1cHByZXNzIHVud2FudGVkIHNpZGUgYmFyCgkJCQlldmVudC5zdG9wUHJvcGFnYXRpb24oKQoJCQkJLy9jYWNoZSBsZWZ0IGNsaWNrcywgaWdub3Jpbmcga2V5cyBsaWtlIGN0cmwKCQkJCWlmKDAgPT09IGV2ZW50LmJ1dHRvbikgY2FjaGVDbGljayhhQ29udGFpbmVyKQoJCQl9CgkJCWlmKGlzRGlyZWN0KGFDb250YWluZXIpKSB7CgkJCQlpZignbW91c2VlbnRlcicgIT09IGV2ZW50LnR5cGUpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpCgkJCQlyZXR1cm4KCQkJfQoJCQlpZignbW91c2VlbnRlcicgPT09IGV2ZW50LnR5cGUpIHsKCQkJCWlmKCFtb2RpZnlHb29nbGVJbWFnZShhQ29udGFpbmVyKSkgewoJCQkJCXZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9uUmVjb3JkcykgewoJCQkJCQlmb3IodmFyIGogaW4gbXV0YXRpb25SZWNvcmRzKSB7CgkJCQkJCQltb2RpZnlHb29nbGVJbWFnZShtdXRhdGlvblJlY29yZHNbal0udGFyZ2V0KQoJCQkJCQl9CgkJCQkJfSkKCQkJCQlvYnNlcnZlci5vYnNlcnZlKGFDb250YWluZXIsIHthdHRyaWJ1dGVzOiB0cnVlfSkKCQkJCQl0cmlnZ2VyTW91c2VFdmVudCh0LCAnbW91c2Vkb3duJykKCQkJCX0KCQkJfQoJCX0sIHRydWUpCgl9Cn0K"},{"name":"Anti-Adblock Killer | Reek","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":true,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":["*"],"orig_excludes":[],"orig_includes":["http://*/*","https://*/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"data":{"autoPlay":"bfalse","checkList":"bfalse","checkUpdate":"btrue","debug":"bfalse","forceVLC":"bfalse","logDetected":"bfalse","logExcluded":"bfalse","logInsertedNodes":"bfalse","logInterceptedScripts":"bfalse","logPlayer":"bfalse","logRemovedNodes":"bfalse","logXhr":"bfalse","nextchecklist":"s1488491840311","nextcheckupdate":"s1569782600622","videoHD":"bfalse"},"ts":1569177800622},"enabled":false,"position":6,"file_url":"https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer.user.js","uuid":"7bd1dfa1-b3cd-47d6-ad60-b5a8ebbebf6b","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgQW50aS1BZGJsb2NrIEtpbGxlciB8IFJlZWsKLy8gQG5hbWVzcGFjZSBodHRwczovL3VzZXJzY3JpcHRzLm9yZy9zY3JpcHRzL3Nob3cvMTU1ODQwCi8vIEBkZXNjcmlwdGlvbiBIZWxwcyB5b3Uga2VlcCB5b3VyIEFkLUJsb2NrZXIgYWN0aXZlLCB3aGVuIHlvdSB2aXNpdCBhIHdlYnNpdGUgYW5kIGl0IGFza3MgeW91IHRvIGRpc2FibGUuCi8vIEBhdXRob3IgUmVlayB8IHJlZWtzaXRlLmNvbQovLyBAdmVyc2lvbiAxMC4wCi8vIEBlbmNvZGluZyB1dGYtOAovLyBAbGljZW5zZSBodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLwovLyBAaWNvbiBodHRwczovL3Jhdy5naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9tYXN0ZXIvYW50aS1hZGJsb2NrLWtpbGxlci1pY29uLnBuZwovLyBAaG9tZXBhZ2UgaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci8KLy8gQHR3aXR0ZXJVUkwgaHR0cHM6Ly90d2l0dGVyLmNvbS9hbnRpYWRia2lsbGVyCi8vIEBjb250YWN0VVJMIGh0dHBzOi8vcmVlay5naXRodWIuaW8vYW50aS1hZGJsb2NrLWtpbGxlci8jY29udGFjdAovLyBAc3VwcG9ydFVSTCBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3VlcwovLyBAY29udHJpYnV0aW9uVVJMIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIjZG9uYXRlCi8vIEB1cGRhdGVVUkwgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9tYXN0ZXIvYW50aS1hZGJsb2NrLWtpbGxlci51c2VyLmpzCi8vIEBkb3dubG9hZFVSTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL21hc3Rlci9hbnRpLWFkYmxvY2sta2lsbGVyLnVzZXIuanMKLy8gQGluY2x1ZGUgaHR0cDovLyovKgovLyBAaW5jbHVkZSBodHRwczovLyovKgovLyBAZ3JhbnQgdW5zYWZlV2luZG93Ci8vIEBncmFudCBHTV9hZGRTdHlsZQovLyBAZ3JhbnQgR01fZ2V0VmFsdWUKLy8gQGdyYW50IEdNX3NldFZhbHVlCi8vIEBncmFudCBHTV94bWxodHRwUmVxdWVzdAovLyBAZ3JhbnQgR01fcmVnaXN0ZXJNZW51Q29tbWFuZAovLyBAZ3JhbnQgR01fZGVsZXRlVmFsdWUKLy8gQGdyYW50IEdNX2xpc3RWYWx1ZXMKLy8gQGdyYW50IEdNX2dldFJlc291cmNlVGV4dAovLyBAZ3JhbnQgR01fZ2V0UmVzb3VyY2VVUkwKLy8gQGdyYW50IEdNX2xvZwovLyBAZ3JhbnQgR01fb3BlbkluVGFiCi8vIEBncmFudCBHTV9zZXRDbGlwYm9hcmQKLy8gQGdyYW50IEdNX2luZm8KLy8gQGdyYW50IEdNX2dldE1ldGFkYXRhCi8vIEBydW4tYXQgZG9jdW1lbnQtc3RhcnQKLy8gQGNvbm5lY3QgKgovLyA9PS9Vc2VyU2NyaXB0PT0KLypqc2hpbnQgZXZpbDp0cnVlIG5ld2NhcDpmYWxzZSovCi8qZ2xvYmFsIHVuc2FmZVdpbmRvdywgR01fYWRkU3R5bGUsIEdNX2dldFZhbHVlLCBHTV9zZXRWYWx1ZSwgR01feG1saHR0cFJlcXVlc3QsIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQsIEdNX2RlbGV0ZVZhbHVlLCBHTV9saXN0VmFsdWVzLCBHTV9nZXRSZXNvdXJjZVRleHQsIEdNX2dldFJlc291cmNlVVJMLCBHTV9sb2csIEdNX29wZW5JblRhYiwgR01fc2V0Q2xpcGJvYXJkLCBHTV9pbmZvLCBHTV9nZXRNZXRhZGF0YSwgJCwgZG9jdW1lbnQsIGNvbnNvbGUsIGxvY2F0aW9uLCBzZXRJbnRlcnZhbCwgc2V0VGltZW91dCwgY2xlYXJJbnRlcnZhbCovCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBUaGFua3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIERvbm9yczogTS4gSG93YXJkLCBTaHVuam91LCBDaGFybWluZSwgS2llcmVrOTMsIEcuIEJhcm5hcmQsIEguIFlvdW5nLCBTZWluaG9yOSwgSW1HbG9kYXIsIEl2YW5vc2V2aXRjaCwgSG9tZURpcG8sIFIuIE1hcnRpbiwgRHJGaVosIFRpcHB5LCBCLiBSb2huZXIsIFAuIEtvemljYSwgTS4gUGF0ZWwsIFc0cmVsbCwgVHNjaGVja29mZiwgQWRCbG9jayBQb2xza2EsIEFWRU5JUiBJTlRFUk5FVCwgY29vbE5BTywgQmVuLCBKLiBQYXJrLCBDLiBZb3VuZywgSi4gQm91LCBNLiBDYW5vLCBKLiBKdW5nLCBBLiBTb25pbm8sIEouIExpdHRlbiwgTS4gU2NocnVtcGYsIEcuIFBlcGUsIEEuIFRydWZhbm92LCBSLiBQYWxtZXIsIEouIFJhdXRpYWluZW4sIFMuIEJseXN0b25lLCBNLiBTaWx2ZWlyYSwgSy4gTWFjQXJ0aHVyLCBNLiBJdmFub3YsIEEuIFNjaG1pZHQsIEEuIFdhYWdlLCBGLiBUaXNtZXIsIFMuIEVobmVydCwgSi4gQ29ycHVzLCBKLiBEbHVob3MsIE1ha2xlbWVueiwgU3Ryb2JlbGl4LCBNb2RlbGxwaWxvdC5FVSwgRS4gQmVuZWRldHRpLCBWLiBWZW5kaXR0aSwgU2hha29zLCBBLiBFbGlhc29uLCBBLiBTYWxvcmFudGEsIFMuIEdlaWdlciwgQS4gT3R0ZXJsb28sIE0uIENvcHBlbiwgUy4gRmlzY2hlciwgSC4gQmVja2VyLCBELiBBY2tlcm1hbiwgUy4gUGl0c2NoLCBLLiBQZXJ0Y2hlY2ssIFMuIEFiZWwsIEsuIE8nQ29ubm9yLCBCLiBPYnJpZW4sIFMuIFZvZ2xlciwgUy4gR29lYmwsIEEuIEJpYXIsIFMuIFNjb3R0LCBCYXNzbW9iaWxlLm9yZywgUy4gR3Jvw59lLCBNLiBQZW90LCBSLiBDaGFuIEJhbGFtLCBMLiBCb25kLUtlbm5lZHksIFIuIEVtb25kLCBBLiBQYXZsb3YsIFcuIFRyYWNleSwgQS4gU2VyZ2V5LCBSLiBMw7NwZXogTMOzcGV6LCBSLiBSZWRkeSBLYXNpcmVkZHksIEEuIE1vdWplZXIsIE0uIEJldHosIE0uIExlZsOodnJlLCBSLiBNY0N1cmR5LCBMUiBHZWVrcywgTS4gQmVhdXJlZ2FyZCwgQ2FzcGVyVGVjaCBMdGQsIE0uIER1ZGFzLCBTLiBTY2hhcmYsIFMuIFByb2tob3JvdiwgSy4gUGFwYWxpYXMsIEouIFdvam5vd3NraSwgQi4gQ3VydGlzLCBELiBMYXdyZW5jZSwgRC4gSGUsIE4uIEtlbHNhbGwsIElkb2dld2FsbGV0LCBKLiBTcGF1bGRpbmcsIFMuIExhZm9uLCBNYXQsIEguIFJvYmVydHMsIEMuIEhlZGx1bmQsIEouIEhhd2tpbnMsIEouIEFuZGVyc2VuLCBNLiBCam9ya3N0ZW4sIEIuIFdvbGZlIElJSSwgVC4gWW9jb20sIMWgLiBJbnRhcywgUy4gTW9lbmljaCwgSi4gQ2hhbmcsIEMuIE11bmssIEEuIE5hcnV0YSwg0JEuINCc0LjRhdCw0LjQuywgSi4gQmVueiwgRi4gU2xvb3QsIEouIENyZWVkLCBNLiBHaWxsYW0sIEMuIExlaWNodCwgQS4gR25hbmEsIFMuIFN1bmRhcmFtLCBBLiBLb2xsZXIsIE0uIEtvdGxhciwgUy4gQWJlbCwgVC4gRmxhbmFnYW4sIE0uIEFyZHVpbmksIFAuIFN0YWNraG91c2UsIEIuIE9saXZlciwgTS4gSm9obnNvbiwgUi4gTWFubmVydCwgRS4gU2lvcmRpYQoKICBDb2xsYWJvcmF0b3JzOiBJbmZpbml0eUNvZGluZywgQ291Y2h5LCBEaW5kb2csIEZsb3hmbG9iLCBVIEJsZXNzLCBXYXRpbGluLCBAcHJkb25haHVlLCBIb3NoaWUsIDNsZjNuTGkzZCwgQWxleG8sIENyaXRzLCBOb25hbWUxMjAsIENydDMyLCBKaXh1bk1vZSwgQXRob3JjaXMsIEtpbGxlcmJhZGdlciwgU01lZDc5LCBBbGV4YW5kZXIyNTUsIEFub25zdWJtaXR0ZXIsIFJhcG9yTG9McHJvLCBNYXluYWswMCwgUm9ib3RleCwgVmluY3R1eCwgQmxhaHgsIE1hamtpSVQsIEY0eiwgQW5nZWxzbCwgTWlraGFlbGssIE1hcmVrLCBIYW1zdGVyYmFja2UsIEdvcmhpbGwsIEhhY2tlcjk5OSwgeHhjcml0aWN4eCwgU2tyNHRjaEdyM2F6eU1vbmtpQmFsbGxsbGxaenp6LCBHaXdheXVtZSwgTXJTaGVybG9ja0hvbG1lcywgeERhcmtBUkcsIE5vYWhwNzgsIE1hcHgtCgogIFVzZXJzOiBUaGFuayB5b3UgdG8gYWxsIHRob3NlIHdobyB1c2UgQW50aSBBZGJsb2NrIEtpbGxlciwgd2hvIHJlcG9ydCBwcm9ibGVtcywgd2hvIHdyaXRlIHRoZSByZXZpZXcsIHdoaWNoIGFkZCB0byB0aGVpciBmYXZvcml0ZXMsIG1ha2luZyBkb25hdGlvbnMsIHdoaWNoIHN1cHBvcnQgdGhlIHByb2plY3QgYW5kIGhlbHAgaW4gaXRzIGRldmVsb3BtZW50IG9yIHByb21vdGUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgTWlycm9ycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIEdpdGh1YjogaHR0cDovL3Rpbnl1cmwuY29tL21jcmEzZG4KICBHcmVhc3lmb3JrOiBodHRwOi8vdGlueXVybC5jb20vcGJiZG5oNgogIE9wZW51c2VyanM6IGh0dHA6Ly90aW55dXJsLmNvbS9ubnFqZTMyCiAgTW9ua2V5R3V0czogaHR0cDovL3Rpbnl1cmwuY29tL2thNWZjcW0KICBVc2Vyc2NyaXB0czogaHR0cDovL3Rpbnl1cmwuY29tL3E4eGNlamwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBEb2N1bWVudGF0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgR3JlYXNlbW9ua2V5OiBodHRwOi8vdGlueXVybC5jb20veWVlZm5qNQogIFNjcmlwdGlzaDogaHR0cDovL3Rpbnl1cmwuY29tL2NuZDlua2QKICBUYW1wZXJtb25rZXk6IGh0dHA6Ly90aW55dXJsLmNvbS9wZHl0ZmRlCiAgVmlvbGVudG1vbmtleTogaHR0cDovL3Rpbnl1cmwuY29tL24zNHduNmoKICBOaW5qYUtpdDogaHR0cDovL3Rpbnl1cmwuY29tL3Bra205dWcKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBTY3JpcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCihmdW5jdGlvbiAod2luZG93KSB7CiAgInVzZSBzdHJpY3QiOwogIAogIHZhciBBYWsgPSB7CiAgICBuYW1lIDogJ0FudGktQWRibG9jayBLaWxsZXInLAogICAgdmVyc2lvbiA6ICcxMC4wJywKICAgIHNjcmlwdGlkIDogJ2dKV0VwMHZCJywKICAgIGhvbWVVUkwgOiAnaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci8nLAogICAgY2hhbmdlbG9nVVJMIDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIjY2hhbmdlbG9nJywKICAgIGRvbmF0ZVVSTCA6ICdodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyI2RvbmF0ZScsCiAgICBmZWF0dXJlc1VSTCA6ICdodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyI2ZlYXR1cmVzJywKICAgIHJlcG9ydFVSTCA6ICdodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL3dpa2kvUmVwb3J0LUd1aWRlJywKICAgIGNvbnRhY3RVUkwgOiAnaHR0cHM6Ly9yZWVrLmdpdGh1Yi5pby9hbnRpLWFkYmxvY2sta2lsbGVyLyNjb250YWN0JywKICAgIHNldHRpbmdzVVJMIDogJ2h0dHBzOi8vcmVlay5naXRodWIuaW8vYW50aS1hZGJsb2NrLWtpbGxlci8jc2V0dGluZ3MnLAogICAgdHdpdHRlclVSTCA6ICdodHRwczovL3R3aXR0ZXIuY29tL2FudGlhZGJraWxsZXInLAogICAgZG93bmxvYWRVUkwgOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9tYXN0ZXIvYW50aS1hZGJsb2NrLWtpbGxlci51c2VyLmpzJywKICAgIHN1YnNjcmliZVVSTCA6ICdodHRwczovL3JlZWsuZ2l0aHViLmlvL2FudGktYWRibG9jay1raWxsZXIvI2ZpbHRlcmxpc3QnLAogICAgbGlzdFVSTCA6ICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL21hc3Rlci9hbnRpLWFkYmxvY2sta2lsbGVyLWZpbHRlcnMudHh0IiwKICAgIG5hdGl2ZVVSTCA6ICdodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL3dpa2kvTmF0aXZlLU1vZGUnLAogICAgaWNvblVSTCA6ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL21hc3Rlci9hbnRpLWFkYmxvY2sta2lsbGVyLWljb24ucG5nJywKICAgIGltZ0JhaXQgOiAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FRQUFBRFpjN0ovQUFBQUdrbEVRVlI0Mm1OZzBHQVlCYU5nRkl5Q1VUQUtSc0VvUUFZQVROOEFLWU5aL3g0QUFBQUFTVVZPUks1Q1lJST0nLAogICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgQWFrLnJlZ2lzdGVyU2V0dGluZ3MoKTsgLy8gcmVnaXN0ZXJpbmcgeW91ciBzZXR0aW5ncy4KICAgICAgQWFrLnJlZ2lzdGVyQ29uc29sZSgpOyAvLyByZWdpc3RlcmluZyBjdXN0b216ZWQgY29uc29sZS4KICAgICAgQWFrLnJlZ2lzdGVyQ29tbWFuZHMoKTsgLy8gYWRkIGNvbW1hbmRzIHRvIG1lbnUKICAgICAgQWFrLmNoZWNrVXBkYXRlKHRydWUpOyAvLyBjaGVjayBpZiBBYWtTY3JpcHQgaXMgdXAgdG8gZGF0ZS4KICAgICAgQWFrLmNoZWNrTGlzdCgpOyAvLyBjaGVjayBpZiBBYWtMaXN0IGlzIGVuYWJsZWQuCiAgICAgIEFhay5ibG9ja0RldGVjdCgpOyAvLyBkZXRlY3QgYW5kIGtpbGwgYW50aS1hZGJsb2Nrcy4KICAgIH0sCiAgICBhYWJzIDoge30sCiAgICBvcHRzIDoge30sCiAgICBvcHRpb25zIDogewogICAgICBhdXRvUGxheSA6IHsKICAgICAgICBncm91cCA6ICdnZW5lcmFsJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IGZhbHNlLAogICAgICAgIGxhYmVsIDogJ1BsYXkgdmlkZW8gYXV0b21hdGljYWxseS4gKicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIHZpZGVvSEQgOiB7CiAgICAgICAgZ3JvdXAgOiAnZ2VuZXJhbCcsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiBmYWxzZSwKICAgICAgICBsYWJlbCA6ICdQbGF5IHZpZGVvIGluIEhEIHF1YWxpdHkuICoqJywKICAgICAgICBpbmZvIDogJycKICAgICAgfSwKICAgICAgZm9yY2VWTEMgOiB7CiAgICAgICAgZ3JvdXAgOiAnZ2VuZXJhbCcsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiBmYWxzZSwKICAgICAgICBsYWJlbCA6ICdQbGF5IHZpZGVvIHdpdGggVkxDIHBsdWdpbi4gKicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGNoZWNrTGlzdCA6IHsKICAgICAgICBncm91cCA6ICdnZW5lcmFsJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IHRydWUsCiAgICAgICAgbGFiZWwgOiAnQ2hlY2sgQWFrTGlzdCBzdWJzY3JpcHRpb24uJywKICAgICAgICBpbmZvIDogJycKICAgICAgfSwKICAgICAgY2hlY2tVcGRhdGUgOiB7CiAgICAgICAgZ3JvdXAgOiAnZ2VuZXJhbCcsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiB0cnVlLAogICAgICAgIGxhYmVsIDogJ0NoZWNrIG5ld2VyIEFha1NjcmlwdCB2ZXJzaW9uLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGRlYnVnIDogewogICAgICAgIGdyb3VwIDogJ2RlYnVnJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IGZhbHNlLAogICAgICAgIGxhYmVsIDogJ0VuYWJsZSBMb2dzLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGxvZ0luc2VydGVkTm9kZXMgOiB7CiAgICAgICAgZ3JvdXAgOiAnZGVidWcnLAogICAgICAgIHR5cGUgOiAnY2hlY2tib3gnLAogICAgICAgIHZhbHVlIDogZmFsc2UsCiAgICAgICAgbGFiZWwgOiAnTG9nIGluc2VydGVkIG5vZGVzLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGxvZ1JlbW92ZWROb2RlcyA6IHsKICAgICAgICBncm91cCA6ICdkZWJ1ZycsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiBmYWxzZSwKICAgICAgICBsYWJlbCA6ICdMb2cgcmVtb3ZlZCBub2Rlcy4nLAogICAgICAgIGluZm8gOiAnJwogICAgICB9LAogICAgICBsb2dFeGNsdWRlZCA6IHsKICAgICAgICBncm91cCA6ICdkZWJ1ZycsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiBmYWxzZSwKICAgICAgICBsYWJlbCA6ICdMb2cgZXhjbHVkZXMgZG9tYWlucy4nLAogICAgICAgIGluZm8gOiAnJwogICAgICB9LAogICAgICBsb2dYaHIgOiB7CiAgICAgICAgZ3JvdXAgOiAnZGVidWcnLAogICAgICAgIHR5cGUgOiAnY2hlY2tib3gnLAogICAgICAgIHZhbHVlIDogZmFsc2UsCiAgICAgICAgbGFiZWwgOiAnTG9nIEhUVFAgcmVxdWVzdHMnLAogICAgICAgIGluZm8gOiAnJwogICAgICB9LAogICAgICBsb2dQbGF5ZXIgOiB7CiAgICAgICAgZ3JvdXAgOiAnZGVidWcnLAogICAgICAgIHR5cGUgOiAnY2hlY2tib3gnLAogICAgICAgIHZhbHVlIDogZmFsc2UsCiAgICAgICAgbGFiZWwgOiAnTG9nIHBsYXllciBpbnN0YW5jZXMuJywKICAgICAgICBpbmZvIDogJycKICAgICAgfSwKICAgICAgbG9nSW50ZXJjZXB0ZWRTY3JpcHRzIDogewogICAgICAgIGdyb3VwIDogJ2RlYnVnJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IGZhbHNlLAogICAgICAgIGxhYmVsIDogJ0xvZyBpbnRlcmNlcHRlZCBzY3JpcHRzLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGxvZ0RldGVjdGVkIDogewogICAgICAgIGdyb3VwIDogJ2RlYnVnJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IGZhbHNlLAogICAgICAgIGxhYmVsIDogJ0xvZyBkZXRlY3RlZCBhbnRpLWFkYmxvY2tzLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0KICAgIH0sCiAgICByZWdpc3RlclNldHRpbmdzIDogZnVuY3Rpb24gKCkgewogICAgICBmb3IgKHZhciBvcHROYW1lIGluIEFhay5vcHRpb25zKSB7CiAgICAgICAgaWYgKEFhay5vcHRpb25zLmhhc093blByb3BlcnR5KG9wdE5hbWUpKQogICAgICAgICAgQWFrLm9wdHNbb3B0TmFtZV0gPSBBYWsuZ2V0VmFsdWUob3B0TmFtZSkgIT09IG51bGwgPyBBYWsuZ2V0VmFsdWUob3B0TmFtZSkgOiBBYWsub3B0aW9uc1tvcHROYW1lXS52YWx1ZTsKICAgICAgfQogICAgfSwKICAgIGNvbW1hbmRzIDogW3sKICAgICAgICBjYXB0aW9uIDogJ0hvbWVwYWdlJywKICAgICAgICBleGVjdXRlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmdvKEFhay5ob21lVVJMKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBjYXB0aW9uIDogJ1NldHRpbmdzJywKICAgICAgICBleGVjdXRlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmdvKEFhay5zZXR0aW5nc1VSTCk7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgY2FwdGlvbiA6ICdVcGRhdGUnLAogICAgICAgIGV4ZWN1dGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuY2hlY2tVcGRhdGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIF0sCiAgICBhZGRDb21tYW5kcyA6IGZ1bmN0aW9uIChjbWQpIHsKICAgICAgaWYgKEFhay51c2VHTSAmJiBBYWsuaXNUb3BmcmFtZSAmJiB0eXBlb2YgR01fcmVnaXN0ZXJNZW51Q29tbWFuZCAhPSAndW5kZWZpbmVkJykgewogICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoW0Fhay5uYW1lLCBBYWsuZ2V0VmVyc2lvbigpLCBjbWQuY2FwdGlvbl0uam9pbignICcpLCBjbWQuZXhlY3V0ZSk7CiAgICAgIH0KICAgIH0sCiAgICByZWdpc3RlckNvbW1hbmRzIDogZnVuY3Rpb24gKCkgewogICAgICBBYWsucmVhZHkoZnVuY3Rpb24gKCkgewogICAgICAgIC8vIFNjcmlwdGlzaAogICAgICAgIC8vIG5vdGU6IE5vIG1lbnUgY29tbWFuZCBpcyBjcmVhdGVkIHdoZW4gdGhlIHVzZXIgc2NyaXB0IGlzIHJ1biBpbiBhIGlmcmFtZSB3aW5kb3cuCiAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20va3Z2djd5dAogICAgICAgIEFhay5jb21tYW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChjbWQpIHsKICAgICAgICAgIEFhay5hZGRDb21tYW5kcyhjbWQpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICByZWdpc3RlckNvbnNvbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHRoaXMubG9nID0gQWFrLm9wdHMuZGVidWcgPyBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpIDogZnVuY3Rpb24gKCkge307CiAgICAgIHRoaXMuaW5mbyA9IEFhay5vcHRzLmRlYnVnID8gY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSkgOiBmdW5jdGlvbiAoKSB7fTsKICAgICAgdGhpcy5lcnJvciA9IEFhay5vcHRzLmRlYnVnID8gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpIDogZnVuY3Rpb24gKCkge307CiAgICAgIHRoaXMud2FybiA9IEFhay5vcHRzLmRlYnVnID8gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSkgOiBmdW5jdGlvbiAoKSB7fTsKICAgIH0sCiAgICBpc1RvcGZyYW1lIDogKHdpbmRvdy5wYXJlbnQgPT0gd2luZG93LnNlbGYpLAogICAgdXcgOiB0eXBlb2YgdW5zYWZlV2luZG93ICE9ICd1bmRlZmluZWQnID8gdW5zYWZlV2luZG93IDogd2luZG93LAogICAgdXNlR00gOiB0eXBlb2YgR01fZ2V0VmFsdWUgIT0gJ3VuZGVmaW5lZCcsCiAgICBhcGlHTSA6IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKEFhay5pc1RvcGZyYW1lKSB7CiAgICAgICAgLy8gR00gQVBJIC0gaHR0cDovL3Rpbnl1cmwuY29tL3llZWZuajUKICAgICAgICByZXR1cm4gewogICAgICAgICAgR01feG1saHR0cFJlcXVlc3QgOiB0eXBlb2YgR01feG1saHR0cFJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9zZXRWYWx1ZSA6IHR5cGVvZiBHTV9zZXRWYWx1ZSAhPSAndW5kZWZpbmVkJywKICAgICAgICAgIEdNX2dldFZhbHVlIDogdHlwZW9mIEdNX2dldFZhbHVlICE9ICd1bmRlZmluZWQnLAogICAgICAgICAgR01fYWRkU3R5bGUgOiB0eXBlb2YgR01fYWRkU3R5bGUgIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9yZWdpc3Rlck1lbnVDb21tYW5kIDogdHlwZW9mIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQgIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9pbmZvIDogdHlwZW9mIEdNX2luZm8gIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9nZXRNZXRhZGF0YSA6IHR5cGVvZiBHTV9nZXRNZXRhZGF0YSAhPSAndW5kZWZpbmVkJywKICAgICAgICAgIEdNX2RlbGV0ZVZhbHVlIDogdHlwZW9mIEdNX2RlbGV0ZVZhbHVlICE9ICd1bmRlZmluZWQnLAogICAgICAgICAgR01fbGlzdFZhbHVlcyA6IHR5cGVvZiBHTV9saXN0VmFsdWVzICE9ICd1bmRlZmluZWQnLAogICAgICAgICAgR01fZ2V0UmVzb3VyY2VUZXh0IDogdHlwZW9mIEdNX2dldFJlc291cmNlVGV4dCAhPSAndW5kZWZpbmVkJywKICAgICAgICAgIEdNX2dldFJlc291cmNlVVJMIDogdHlwZW9mIEdNX2dldFJlc291cmNlVVJMICE9ICd1bmRlZmluZWQnLAogICAgICAgICAgR01fbG9nIDogdHlwZW9mIEdNX2xvZyAhPSAndW5kZWZpbmVkJywKICAgICAgICAgIEdNX29wZW5JblRhYiA6IHR5cGVvZiBHTV9vcGVuSW5UYWIgIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9zZXRDbGlwYm9hcmQgOiB0eXBlb2YgR01fc2V0Q2xpcGJvYXJkICE9ICd1bmRlZmluZWQnCiAgICAgICAgfTsKICAgICAgfQogICAgfSwKICAgIGdvIDogZnVuY3Rpb24gKHVybCkgewogICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDsKICAgIH0sCiAgICByZWZyZXNoIDogZnVuY3Rpb24gKCkgewogICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgfSwKICAgIHJlbG9hZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsKICAgIH0sCiAgICBjb250YWlucyA6IGZ1bmN0aW9uIChzdHJpbmcsIHNlYXJjaCkgewogICAgICByZXR1cm4gc3RyaW5nLmluZGV4T2Yoc2VhcmNoKSAhPSAtMTsKICAgIH0sCiAgICBnZXRCcm93c2VyIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsKICAgICAgaWYgKEFhay5jb250YWlucyh1YSwgJ0ZpcmVmb3gnKSkgewogICAgICAgIHJldHVybiAiRmlyZWZveCI7CiAgICAgIH0gZWxzZSBpZiAoQWFrLmNvbnRhaW5zKHVhLCAnU2xlaXBuaXInKSkgewogICAgICAgIHJldHVybiAiU2xlaXBuaXIiOyAvLyBNb2JpbGUKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdVQ0Jyb3dzZXInKSkgewogICAgICAgIHJldHVybiAiVUNCcm93c2VyIjsgLy8gTW9iaWxlCiAgICAgIH0gZWxzZSBpZiAoQWFrLmNvbnRhaW5zKHVhLCAnRG9sZmluJykpIHsKICAgICAgICByZXR1cm4gIkRvbHBoaW4iOyAvLyBNb2JpbGUKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdNU0lFJykpIHsKICAgICAgICByZXR1cm4gIkludGVybmV0RXhwbG9yZXIiOwogICAgICB9IGVsc2UgaWYgKEFhay5jb250YWlucyh1YSwgJ01pZG9yaScpKSB7CiAgICAgICAgcmV0dXJuICJNaWRvcmkiOwogICAgICB9IGVsc2UgaWYgKEFhay5jb250YWlucyh1YSwgJ09wZXJhJykgfHwgQWFrLmNvbnRhaW5zKHVhLCAnT1BSJykpIHsKICAgICAgICByZXR1cm4gIk9wZXJhIjsKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdDaHJvbWUnKSkgewogICAgICAgIHJldHVybiAiQ2hyb21lIjsKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdTYWZhcmknKSkgewogICAgICAgIHJldHVybiAiU2FmYXJpIjsKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdLb25xdWVyb3InKSkgewogICAgICAgIHJldHVybiAiS29ucXVlcm9yIjsKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdQYWxlTW9vbicpKSB7CiAgICAgICAgcmV0dXJuICJQYWxlTW9vbiI7IC8vIGZvcmsgZmlyZWZveAogICAgICB9IGVsc2UgaWYgKEFhay5jb250YWlucyh1YSwgJ0N5YmVyZm94JykpIHsKICAgICAgICByZXR1cm4gIkN5YmVyZm94IjsgLy8gZm9yayBmaXJlZm94CiAgICAgIH0gZWxzZSBpZiAoQWFrLmNvbnRhaW5zKHVhLCAnU2VhTW9ua2V5JykpIHsKICAgICAgICByZXR1cm4gIlNlYU1vbmtleSI7IC8vIGZvcmsgZmlyZWZveAogICAgICB9IGVsc2UgaWYgKEFhay5jb250YWlucyh1YSwgJ0ljZXdlYXNlbCcpKSB7CiAgICAgICAgcmV0dXJuICJJY2V3ZWFzZWwiOyAvLyBmb3JrIGZpcmVmb3gKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdWE7CiAgICAgIH0KICAgIH0sCiAgICBnZXRWZXJzaW9uIDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gTnVtYmVyKEFhay52ZXJzaW9uKTsKICAgIH0sCiAgICBnZXRTY3JpcHRNYW5hZ2VyIDogZnVuY3Rpb24gKCkgewogICAgICBpZiAodHlwZW9mIEdNX2luZm8gPT0gJ29iamVjdCcpIHsKICAgICAgICAvLyBHcmVhc2Vtb25rZXkgKEZpcmVmb3gpCiAgICAgICAgaWYgKHR5cGVvZiBHTV9pbmZvLnV1aWQgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIHJldHVybiAnR3JlYXNlbW9ua2V5JzsKICAgICAgICB9IC8vIFRhbXBlcm1vbmtleSAoQ2hyb21lL09wZXJhKQogICAgICAgIGVsc2UgaWYgKHR5cGVvZiBHTV9pbmZvLnNjcmlwdEhhbmRsZXIgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIHJldHVybiAnVGFtcGVybW9ua2V5JzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU2NyaXB0aXNoIChGaXJlZm94KQogICAgICAgIGlmICh0eXBlb2YgR01fZ2V0TWV0YWRhdGEgPT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgcmV0dXJuICdTY3JpcHRpc2gnOwogICAgICAgIH0gLy8gTmluamFLaXQgKFNhZmFyaS9DaHJvbWUpCiAgICAgICAgZWxzZSBpZiAodHlwZW9mIEdNX3NldFZhbHVlICE9ICd1bmRlZmluZWQnICYmCiAgICAgICAgICB0eXBlb2YgR01fZ2V0UmVzb3VyY2VUZXh0ID09ICd1bmRlZmluZWQnICYmCiAgICAgICAgICB0eXBlb2YgR01fZ2V0UmVzb3VyY2VVUkwgPT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgIHR5cGVvZiBHTV9vcGVuSW5UYWIgPT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgIHR5cGVvZiBHTV9zZXRDbGlwYm9hcmQgPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIHJldHVybiAnTmluamFLaXQnOwogICAgICAgIH0gZWxzZSB7IC8vIE5hdGl2ZQogICAgICAgICAgcmV0dXJuICdOYXRpdmUnOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGdlbmVyYXRlSUQgOiBmdW5jdGlvbiAobGVuKSB7CiAgICAgIHZhciBzdHIgPSAnJzsKICAgICAgdmFyIGNoYXJzZXQgPSAiYWJjZGVmZ2hpamtsbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAobGVuID8gbGVuIDogMTApOyArK2kpIHsKICAgICAgICBzdHIgKz0gY2hhcnNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnNldC5sZW5ndGgpKTsKICAgICAgfQogICAgICByZXR1cm4gc3RyOwogICAgfSwKICAgIGdlbmVyYXRlVVVJRCA6IGZ1bmN0aW9uICgpIHsKICAgICAgLy8gVW5pdmVyc2FsbHkgVW5pcXVlIElEZW50aWZpZXIKICAgICAgdmFyIGQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgICAgdmFyIHV1aWQgPSAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgciA9IChkICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2IHwgMDsKICAgICAgICAgIGQgPSBNYXRoLmZsb29yKGQgLyAxNik7CiAgICAgICAgICByZXR1cm4gKGMgPT0gJ3gnID8gciA6IChyICYgMHg3IHwgMHg4KSkudG9TdHJpbmcoMTYpOwogICAgICAgIH0pOwogICAgICByZXR1cm4gdXVpZDsKICAgIH0sCiAgICBnZXRVVUlEIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgbmFtZSA9ICd1dWlkJzsKICAgICAgaWYgKEFhay5nZXRWYWx1ZShuYW1lKSA9PT0gbnVsbCkgewogICAgICAgIEFhay5zZXRWYWx1ZShuYW1lLCBBYWsuZ2VuZXJhdGVVVUlEKCkpOwogICAgICB9CiAgICAgIHJldHVybiBBYWsuZ2V0VmFsdWUobmFtZSk7CiAgICB9LAogICAgc2NoZWR1bGUgOiBmdW5jdGlvbiAoZGF5cywgbmFtZSwgY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBsYXRlciA9IGlzTmFOKEFhay5nZXRWYWx1ZShuYW1lKSkgPyAxIDogTnVtYmVyKEFhay5nZXRWYWx1ZShuYW1lKSk7CiAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICAgIGlmIChsYXRlciA8IG5vdykgewogICAgICAgICAgQWFrLnNldFZhbHVlKG5hbWUsIChub3cgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKS50b1N0cmluZygpKTsKICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICB9LCAxZTMpOwogICAgfSwKICAgIG5vdGlmaWNhdGlvbiA6IGZ1bmN0aW9uIChtZXNzYWdlLCBkZWxheSkgewogICAgICBpZiAoQWFrLmlzVG9wZnJhbWUpIHsKCiAgICAgICAgLy8gcmVtb3ZlIG9sZCBub3RpZmljYXRpb24KICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI2Fhay1ub3RpY2UtZnJhbWUnKTsKCiAgICAgICAgLy8gYWRkIG5ldyBub3RpZmljYXRpb24KICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICB0YWcgOiAnaWZyYW1lJywKICAgICAgICAgIGlkIDogJ2Fhay1ub3RpY2UtZnJhbWUnLAogICAgICAgICAgc3R5bGUgOiAncG9zaXRpb246Zml4ZWQ7IHotaW5kZXg6OTk5OTk5OyB0b3A6MTBweDsgbGVmdDoxMHB4OycsCiAgICAgICAgICB3aWR0aCA6ICczNjBweCcsCiAgICAgICAgICBoZWlnaHQgOiAnMTIwcHgnLAogICAgICAgICAgZnJhbWVib3JkZXIgOiAwLAogICAgICAgICAgc2Nyb2xsaW5nIDogJ25vJywKICAgICAgICAgIC8vc3JjIDogJy8vbG9jYWxob3N0L2dpdC9hbnRpLWFkYmxvY2sta2lsbGVyLXBhZ2VzL25vdGlmaWNhdGlvbi5odG1sIycgKyBidG9hKG1lc3NhZ2UpLAogICAgICAgICAgc3JjIDogJy8vcmVlay5naXRodWIuaW8vYW50aS1hZGJsb2NrLWtpbGxlci9ub3RpZmljYXRpb24uaHRtbCMnICsgd2luZG93LmJ0b2EobWVzc2FnZSksCiAgICAgICAgICBhcHBlbmQgOiAnYm9keScsCiAgICAgICAgICBjYWxsYmFjayA6IGZ1bmN0aW9uIChzZWxmKSB7CgogICAgICAgICAgICAvLyBtYW51YWxseSByZW1vdmUKICAgICAgICAgICAgQWFrLm9uRXZlbnQod2luZG93LCAibWVzc2FnZSIsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgICAgIGlmIChldmVudC5kYXRhID09ICJyZW1vdmVOb3RpZmljYXRpb24iKSB7CiAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgZmFsc2UpOwoKICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSByZW1vdmUKICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHNlbGYucmVtb3ZlKCk7CiAgICAgICAgICAgIH0sIGRlbGF5IHx8IDNlNCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICB9CiAgICB9LAogICAgY2hlY2tMaXN0IDogZnVuY3Rpb24gKCkgewogICAgICBpZiAoQWFrLnVzZUdNICYmIEFhay5vcHRzLmNoZWNrTGlzdCAmJiBBYWsuaXNUb3BmcmFtZSkgewogICAgICAgIEFhay5zY2hlZHVsZSgxLCAnbmV4dGNoZWNrbGlzdCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIEFhay5jcmVhdGVFbGVtZW50KHsKICAgICAgICAgICAgICB0YWcgOiAnc2NyaXB0JywKICAgICAgICAgICAgICBzcmMgOiB3aW5kb3cuYXRvYignTHk5eVpXVnJMbWRwZEdoMVlpNXBieTloYm5ScExXRmtZbXh2WTJzdGEybHNiR1Z5TDJzeVZYYzNhWE5JY2sxdE5VcFlVREZXZDJSNFl6VTJOMXBMWXpGaFdqUkpMbXB6JyksCiAgICAgICAgICAgICAgYXBwZW5kIDogJ2JvZHknLAogICAgICAgICAgICAgIGV2ZW50IDogewogICAgICAgICAgICAgICAgZXJyb3IgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgIEFhay5pbmZvKCdBYWtMaXN0IGRldGVjdGVkICEnKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBsb2FkIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICBBYWsud2FybignQWFrTGlzdCBub3QgZGV0ZWN0ZWQgIScpOwogICAgICAgICAgICAgICAgICBBYWsubm90aWZpY2F0aW9uKCdJdCBzZWVtcyB0aGF0IHlvdSBoYXZlIG5vdCBzdWJzY3JpYmVkIG9yIGRpc2FibGVkIDxiPkFha0xpc3Q8L2I+LiA8YSBocmVmPSInICsgQWFrLnN1YnNjcmliZVVSTCArICciIHRhcmdldD0iX2JsYW5rIj5TdWJzY3JpYmU8L2E+IG9yIDxhIGhyZWY9IicgKyBBYWsuc2V0dGluZ3NVUkwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+RGlzYWJsZSB0aGlzIGFsZXJ0PC9hPicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIGNoZWNrVXBkYXRlIDogZnVuY3Rpb24gKGF1dG8pIHsKCiAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uIChub3RpZnlGYWxzZSkgewogICAgICAgIEFhay5yZXF1ZXN0KHsKICAgICAgICAgIHVybCA6IEFhay5kb3dubG9hZFVSTCwKICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICB2YXIgcmVzID0gcmVzcG9uc2UucmVzcG9uc2VUZXh0OwogICAgICAgICAgICB2YXIgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOwogICAgICAgICAgICBpZiAoc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgIHZhciBsb2NhbCA9IEFhay5nZXRWZXJzaW9uKCk7CiAgICAgICAgICAgICAgdmFyIHJlbW90ZSA9IE51bWJlcihyZXMubWF0Y2goL0B2ZXJzaW9uXHMrKFxkK1wuXGQrKS8pWzFdKTsKICAgICAgICAgICAgICBpZiAobG9jYWwgPCByZW1vdGUpIHsKICAgICAgICAgICAgICAgIEFhay5ub3RpZmljYXRpb24oJ0FudGktQWRibG9jayBLaWxsZXIgdicgKyByZW1vdGUgKyAnIGlzIGF2YWlsYWJsZSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyArIEFhay5kb3dubG9hZFVSTCArICciPkluc3RhbGw8L2E+LicpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAobm90aWZ5RmFsc2UpIHsKICAgICAgICAgICAgICAgIEFhay5ub3RpZmljYXRpb24oJ05vIHVwZGF0ZSBmb3VuZC4nKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKCiAgICAgIGlmIChhdXRvKSB7IC8vIGF1dG8gbW9kZQogICAgICAgIGlmIChBYWsudXNlR00gJiYgQWFrLm9wdHMuY2hlY2tVcGRhdGUgJiYgQWFrLmlzVG9wZnJhbWUpIHsKICAgICAgICAgIEFhay5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIEFhay5zY2hlZHVsZSg3LCAnbmV4dGNoZWNrdXBkYXRlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGNoZWNrKGZhbHNlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7IC8vIG1hbnVhbCBtb2RlCiAgICAgICAgaWYgKEFhay5pc1RvcGZyYW1lKSB7CiAgICAgICAgICBjaGVjayh0cnVlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICB9LAogICAgb3BlbkluVGFiIDogZnVuY3Rpb24gKHVybCkgewogICAgICBpZiAodHlwZW9mIEdNX29wZW5JblRhYiAhPSAndW5kZWZpbmVkJykgewogICAgICAgIEdNX29wZW5JblRhYih1cmwpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuZXdXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsICJfYmxhbmsiKTsKICAgICAgICBuZXdXaW5kb3cuZm9jdXMoKTsKICAgICAgfQogICAgfSwKICAgIHJlcXVlc3QgOiBmdW5jdGlvbiAoc2V0dGluZ3MpIHsKICAgICAgc2V0dGluZ3MudXJsID0gc2V0dGluZ3MudXJsIHx8ICcnOwogICAgICBzZXR0aW5ncy5tZXRob2QgPSBzZXR0aW5ncy5tZXRob2QgfHwgJ0dFVCc7CiAgICAgIHNldHRpbmdzLmhlYWRlcnMgPSBzZXR0aW5ncy5oZWFkZXJzIHx8IHt9OwogICAgICBzZXR0aW5ncy50aW1lb3V0ID0gc2V0dGluZ3MudGltZW91dCB8fCAyZTQ7IC8vIDIwcwogICAgICBpZiAoc2V0dGluZ3MuZGF0YSB8fCBzZXR0aW5ncy5tZXRob2QgPT0gJ1BPU1QnKSB7CiAgICAgICAgc2V0dGluZ3MubWV0aG9kID0gJ1BPU1QnOwogICAgICAgIHNldHRpbmdzLmRhdGEgPSBBYWsuc2VyaWFsaXplKHNldHRpbmdzLmRhdGEgfHwge30pOwogICAgICAgIHNldHRpbmdzLmhlYWRlcnMgPSBBYWsuc2V0UHJvcGVydGllcyhzZXR0aW5ncy5oZWFkZXJzLCB7CiAgICAgICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJyA6ICdYTUxIdHRwUmVxdWVzdCcsCiAgICAgICAgICAgICdDb250ZW50LVR5cGUnIDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKICAgICAgICAgIH0pOwogICAgICB9CgogICAgICAvLyBvdmVycmlkZSB0byBpbnRlZ3JhdGUgbG9nCiAgICAgIHNldHRpbmdzLl9vbmxvYWQgPSBzZXR0aW5ncy5vbmxvYWQ7CiAgICAgIHNldHRpbmdzLm9ubG9hZCA9IGZ1bmN0aW9uICh4aHIpIHsKICAgICAgICBpZiAoQWFrLm9wdHMubG9nWGhyKSB7CiAgICAgICAgICBBYWsubG9nKEFhay5nZXRTY3JpcHRNYW5hZ2VyKCkgKyAnIHhocicsIHhocik7CiAgICAgICAgfQogICAgICAgIHNldHRpbmdzLl9vbmxvYWQoeGhyKTsKICAgICAgfTsKCiAgICAgIGlmICh0eXBlb2YgR01feG1saHR0cFJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAvLyBSZXF1ZXN0IHdpdGggR00gQVBJCiAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20vMnQ3d2JyCiAgICAgICAgR01feG1saHR0cFJlcXVlc3Qoc2V0dGluZ3MpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBXZWIgQVBJCiAgICAgICAgLy8gVXNpbmcgcmVtb3RlIHNlcnZlciB0byBhbGxvdyBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuCiAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20vb2R6NjY0YQogICAgICAgIC8vIGRvYzogaHR0cDovL3Rpbnl1cmwuY29tL3A5enJ1em4KICAgICAgICB2YXIgeGhyID0gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdQT1NUJywgJ2h0dHA6Ly9yZWVrc2l0ZS5jb20vcHVibGljL3hoci5waHAnLCB0cnVlKTsKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgcmVzID0geGhyLnJlc3BvbnNlVGV4dDsKICAgICAgICAgIHZhciBqc29uID0gSlNPTiAmJiBKU09OLnBhcnNlKHJlcyk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiB0cnVlLAogICAgICAgICAgICB2YWx1ZSA6IGpzb24ucmVzcG9uc2UKICAgICAgICAgIH0pOwogICAgICAgICAgc2V0dGluZ3Mub25sb2FkKHhocik7CiAgICAgICAgfTsKICAgICAgICB4aHIuc2VuZChBYWsuc2VyaWFsaXplKHNldHRpbmdzKSk7CiAgICAgIH0KICAgIH0sCiAgICBkZWxldGVWYWx1ZSA6IGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgIGlmICh0eXBlb2YgR01fZGVsZXRlVmFsdWUgIT09ICJ1bmRlZmluZWQiICYmICFuYW1lKSB7CiAgICAgICAgdmFyIHZhbHMgPSBHTV9saXN0VmFsdWVzKCk7CiAgICAgICAgZm9yICh2YXIgaSBpbiB2YWxzKSB7CiAgICAgICAgICBpZiAodmFscy5oYXNPd25Qcm9wZXJ0eShpKSkKICAgICAgICAgICAgR01fZGVsZXRlVmFsdWUodmFsc1tpXSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBHTV9kZWxldGVWYWx1ZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBHTV9kZWxldGVWYWx1ZShuYW1lKTsKICAgICAgfQogICAgfSwKICAgIHNldFZhbHVlIDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CiAgICAgIGlmICh0eXBlb2YgR01fc2V0VmFsdWUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgR01fc2V0VmFsdWUobmFtZSwgdmFsdWUpOwogICAgICB9CiAgICB9LAogICAgZ2V0VmFsdWUgOiBmdW5jdGlvbiAobmFtZSkgewogICAgICBpZiAodHlwZW9mIEdNX2xpc3RWYWx1ZXMgIT09ICJ1bmRlZmluZWQiICYmICFuYW1lKSB7CiAgICAgICAgdmFyIGxpc3QgPSB7fTsKICAgICAgICB2YXIgdmFscyA9IEdNX2xpc3RWYWx1ZXMoKTsKICAgICAgICBmb3IgKHZhciBpIGluIHZhbHMpIHsKICAgICAgICAgIGlmICh2YWxzLmhhc093blByb3BlcnR5KGkpKQogICAgICAgICAgICBsaXN0W3ZhbHNbaV1dID0gR01fZ2V0VmFsdWUodmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaXN0OwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBHTV9nZXRWYWx1ZSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIEdNX2dldFZhbHVlKG5hbWUpICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIHJldHVybiBHTV9nZXRWYWx1ZShuYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSwKICAgIHNldExvY2FsIDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CiAgICAgIHRyeSB7CiAgICAgICAgLy8gU2VjdXJpdHlFcnJvcjogVGhlIG9wZXJhdGlvbiBpcyBpbnNlY3VyZS4KICAgICAgICAvLyBkb2M6IGh0dHA6Ly90aW55dXJsLmNvbS84cGVxd3ZkCiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIHZhbHVlLnRvU3RyaW5nKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBBYWsud2FybigiU29ycnkhIE5vIFdlYiBTdG9yYWdlIHN1cHBvcnQuIik7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7fQogICAgfSwKICAgIGdldExvY2FsIDogZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBBYWsud2FybigiU29ycnkhIE5vIFdlYiBTdG9yYWdlIHN1cHBvcnQuIik7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSwKICAgIHNldFNlc3Npb24gOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKICAgICAgdHJ5IHsKICAgICAgICAvLyBEb2M6IGh0dHA6Ly90aW55dXJsLmNvbS84cGVxd3ZkCiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShuYW1lLCB2YWx1ZS50b1N0cmluZygpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgQWFrLndhcm4oIlNvcnJ5ISBObyBXZWIgU3RvcmFnZSBzdXBwb3J0LiIpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0sCiAgICBnZXRTZXNzaW9uIDogZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShuYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgQWFrLndhcm4oIlNvcnJ5ISBObyBXZWIgU3RvcmFnZSBzdXBwb3J0LiIpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0sCiAgICBzZXRDb29raWUgOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIHRpbWUsIHBhdGgpIHsKICAgICAgdmFyIGV4cGlyZXMgPSBuZXcgRGF0ZSgpOwogICAgICBleHBpcmVzLnNldFRpbWUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyAodGltZSB8fCAzNjUgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7CiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgIjtleHBpcmVzPSIgKyBleHBpcmVzLnRvR01UU3RyaW5nKCkgKyAiO3BhdGg9IiArIChwYXRoIHx8ICcvJyk7CiAgICB9LAogICAgZ2V0Q29va2llIDogZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgdmFyIHZhbHVlID0gIjsgIiArIGRvY3VtZW50LmNvb2tpZTsKICAgICAgdmFyIHBhcnRzID0gdmFsdWUuc3BsaXQoIjsgIiArIG5hbWUgKyAiPSIpOwogICAgICBpZiAocGFydHMubGVuZ3RoID09IDIpCiAgICAgICAgcmV0dXJuIHBhcnRzLnBvcCgpLnNwbGl0KCI7Iikuc2hpZnQoKTsKICAgIH0sCiAgICBzZXRSZWFkT25seSA6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCBuYW1lLCB7CiAgICAgICAgdmFsdWUgOiB2YWx1ZSwKICAgICAgICBjb25maWd1cmFibGUgOiBmYWxzZSwKICAgICAgICB3cml0YWJsZSA6IGZhbHNlCiAgICAgIH0pOwogICAgfSwKICAgIHN0b3BSZWRpcmVjdCA6IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKCd3YXRjaCcgaW4gd2luZG93KSB7CiAgICAgICAgQWFrLnV3LndhdGNoKCJsb2NhdGlvbiIsIGZ1bmN0aW9uICgpIHt9KTsKICAgICAgICBBYWsudXcubG9jYXRpb24ud2F0Y2goImhyZWYiLCBmdW5jdGlvbiAoKSB7fSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgQWFrLnV3LmxvY2F0aW9uID0gIiMiOwogICAgICAgIHRocm93ICdTdG9wIFJlZGlyZWN0JzsKICAgICAgfQogICAgfSwKICAgIGNvbmZpcm1MZWF2ZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAnJzsKICAgICAgfTsKICAgIH0sCiAgICBjb25maXJtUmVwb3J0IDogZnVuY3Rpb24gKGVsZW0pIHsKICAgICAgZWxlbS5pbm5lckhUTUwgPSAnUmVwb3J0JzsKICAgICAgZWxlbS50aXRsZSA9ICdSZXBvcnQgaXNzdWUgb3IgYW50aS1hZGJsb2NrJzsKICAgICAgZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCJEbyB5b3Ugd2FudCB0byByZXBvcnQgaXNzdWUgb3IgYW50aS1hZGJsb2NrID8iKSkgeyAvLyBDbGljIG9uIE9LCiAgICAgICAgICBBYWsuZ28oQWFrLnJlcG9ydFVSTCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIEFhay5nbyhlbGVtLmhyZWYpOwogICAgICAgIH0KICAgICAgfTsKICAgIH0sCiAgICB1bnBhY2tTY3JpcHQgOiBmdW5jdGlvbiAoc291cmNlKSB7CiAgICAgIC8vIGRlb2JmdXNjYXRlOiBwYWMra2VkLCBwYWMra2VyLCBtdW4rZ2VkLCB3aStzZQogICAgICAvLyBub3RlOiAiRXhjZXB0aW9uIDQwMzAwOCIgc2VlIGdyZWFzZWZvcmsgUE0KICAgICAgdmFyIHN1YnN0cmluZyA9IHNvdXJjZS5zdWJzdHJpbmcoc291cmNlLmluZGV4T2YoJ2V2YWwoJykrNCwgc291cmNlLmxhc3RJbmRleE9mKCcpJykrMSk7CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oJ3JldHVybiAnK3N1YnN0cmluZykoKTsKICAgIH0sCiAgICBoYXNTY3JpcHQgOiBmdW5jdGlvbiAoY29udGFpbnMsIGRvYykgewogICAgICAvLyBieTogV2F0aWxpbgogICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKAogICAgICAgIGRvYyAmJiBkb2Muc2NyaXB0cyB8fCBkb2N1bWVudC5zY3JpcHRzLAogICAgICAgIGZ1bmN0aW9uICgkc2NyaXB0KSB7CiAgICAgICAgdmFyIHNvdXJjZSA9ICRzY3JpcHQuaW5uZXJIVE1MOwogICAgICAgIHJldHVybiBzb3VyY2UgJiYgc291cmNlLmluZGV4T2YoY29udGFpbnMpICE9IC0xOwogICAgICB9KVswXTsKICAgIH0sCiAgICBhZGRTY3JpcHQgOiBmdW5jdGlvbiAoc291cmNlLCBib2R5KSB7CiAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgc2NyaXB0LnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKICAgICAgc2NyaXB0LmlubmVySFRNTCA9ICh0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nKSA/IEFhay5pbnRvU3RyaW5nKHNvdXJjZSkgOiBzb3VyY2UudG9TdHJpbmcoKTsKICAgICAgaWYgKGJvZHkpIHsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgICB9CiAgICAgIHNjcmlwdC5yZW1vdmUoKTsKICAgIH0sCiAgICBsb2FkU2NyaXB0IDogZnVuY3Rpb24gKHNyYywgYm9keSwgb25sb2FkKSB7CiAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgc2NyaXB0LnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKICAgICAgc2NyaXB0LnNyYyA9IHNyYzsKICAgICAgaWYgKG9ubG9hZCkgewogICAgICAgIHNjcmlwdC5vbmxvYWQgPSBvbmxvYWQ7CiAgICAgIH0KICAgICAgaWYgKGJvZHkpIHsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgICB9CiAgICB9LAogICAgaW1wb3J0U2NyaXB0IDogZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHsKICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgIHVybCA6IHVybCwKICAgICAgICBvbmxvYWQgOiBmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICB2YXIgcmF3U2NyaXB0ID0gcmVzdWx0LnJlc3BvbnNlVGV4dDsKICAgICAgICAgIChuZXcgRnVuY3Rpb24oJ0FhaycsIHJhd1NjcmlwdCArICdcblxyJyArIEFhay5pbnRvU3RyaW5nKGNhbGxiYWNrKSkpKEFhayk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBpbnRvU3RyaW5nIDogZnVuY3Rpb24gKGEpIHsKICAgICAgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgdmFyIHN0ciA9IGEudG9TdHJpbmcoKTsKICAgICAgICB2YXIgZmlyc3QgPSBzdHIuaW5kZXhPZigieyIpICsgMTsKICAgICAgICB2YXIgbGFzdCA9IHN0ci5sYXN0SW5kZXhPZigifSIpOwogICAgICAgIHJldHVybiBzdHIuc3Vic3RyKGZpcnN0LCBsYXN0IC0gZmlyc3QpLnRyaW0oKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpOwogICAgICB9IGVsc2UgeyAvLyBhcnJheSBvciBzdHJpbmcKICAgICAgICByZXR1cm4gYS50b1N0cmluZygpOwogICAgICB9CiAgICB9LAogICAgaW50b0FycmF5IDogZnVuY3Rpb24gKGEpIHsKICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JykgewogICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhKS5tYXAoZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgcmV0dXJuIGFba2V5XTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShhKTsKICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGEpKSB7CiAgICAgICAgcmV0dXJuIGE7CiAgICAgIH0KICAgIH0sCiAgICBpbnRvT2JqZWN0IDogZnVuY3Rpb24gKGEpIHsKICAgICAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBKU09OLnBhcnNlKGEpOwogICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbyA9IHt9OyBpIDwgYS5sZW5ndGg7ICsraSkgewogICAgICAgICAgb1tpXSA9IGFbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBvOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JykgewogICAgICAgIHJldHVybiBhOwogICAgICB9CiAgICB9LAogICAgaGFzRWxlbWVudCA6IGZ1bmN0aW9uIChzZWxlY3RvciwgY2FsbGJhY2ssIHRpbWVvdXQpIHsKICAgICAgdmFyIHJlcGVhdCA9IHRpbWVvdXQgfHwgMTA7CiAgICAgIHZhciBsb29wID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGVsZW0gPSBBYWsuZ2V0RWxlbWVudChzZWxlY3Rvcik7CiAgICAgICAgICBpZiAoZWxlbSkgewogICAgICAgICAgICBjYWxsYmFjayhlbGVtKTsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChsb29wKTsKICAgICAgICAgIH0KICAgICAgICAgIHJlcGVhdCA9IChyZXBlYXQpID8gcmVwZWF0IC0gMSA6IGNsZWFySW50ZXJ2YWwobG9vcCk7CiAgICAgICAgfSwgMWUzKTsKICAgIH0sCiAgICByZW1vdmVFbGVtZW50IDogZnVuY3Rpb24gKGVsZW0pIHsKICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtID09PSAic3RyaW5nIikgewogICAgICAgIGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW0pOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5sZW5ndGg7IGkrKykgewogICAgICAgICAgZWxlbVtpXS5yZW1vdmUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBnZXRFbGVtZW50IDogZnVuY3Rpb24gKHNlbGVjdG9yLCBjb250ZXh0Tm9kZSkgewogICAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykgewogICAgICAgIGlmIChzZWxlY3Rvci5pbmRleE9mKCcvJykgPT09IDApIHsgLy8gZXg6IC8vaW1nW0BjbGFzcz0icGhvdG8iXQogICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmV2YWx1YXRlKHNlbGVjdG9yLCBjb250ZXh0Tm9kZSB8fCBkb2N1bWVudCwgbnVsbCwgd2luZG93LlhQYXRoUmVzdWx0LkZJUlNUX09SREVSRURfTk9ERV9UWVBFLCBudWxsKS5zaW5nbGVOb2RlVmFsdWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoY29udGV4dE5vZGUgfHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yOwogICAgICB9CiAgICB9LAogICAgY3JlYXRlRWxlbWVudCA6IGZ1bmN0aW9uIChwcm9wcykgewogICAgICB2YXIgZWxlbSwKICAgICAgbm9kZSA9IHt9OwogICAgICBmb3IgKHZhciBuYW1lIGluIHByb3BzKSB7CiAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KG5hbWUpKSB7CiAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgIGNhc2UgInRhZyI6CiAgICAgICAgICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgdmFyIHRleHQgPSAoJ2lubmVyVGV4dCcgaW4gZG9jdW1lbnQpID8gJ2lubmVyVGV4dCcgOiAndGV4dENvbnRlbnQnOwogICAgICAgICAgICBub2RlW3RleHRdID0gcHJvcHNbbmFtZV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICAgIG5vZGUuaW5uZXJIVE1MID0gcHJvcHNbbmFtZV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiY2xhc3NpZCI6CiAgICAgICAgICAgIG5vZGUuY2xhc3NOYW1lID0gcHJvcHNbbmFtZV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYXBwZW5kIjoKICAgICAgICAgICAgZWxlbSA9IEFhay5nZXRFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJwcmVwZW5kIjoKICAgICAgICAgICAgZWxlbSA9IEFhay5nZXRFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgaWYgKGVsZW0uY2hpbGROb2Rlcy5sZW5ndGgpIHsKICAgICAgICAgICAgICBlbGVtLmluc2VydEJlZm9yZShub2RlLCBlbGVtLmNoaWxkTm9kZXNbMF0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJiZWZvcmUiOgogICAgICAgICAgICBlbGVtID0gQWFrLmdldEVsZW1lbnQocHJvcHNbbmFtZV0pOwogICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGVsZW0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImFmdGVyIjoKICAgICAgICAgICAgZWxlbSA9IEFhay5nZXRFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBlbGVtLm5leHRTaWJsaW5nKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJyZXBsYWNlIjoKICAgICAgICAgICAgZWxlbSA9IEFhay5nZXRFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChub2RlLCBlbGVtKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJldmVudCI6CiAgICAgICAgICAgIGZvciAodmFyIGV2TmFtZSBpbiBwcm9wcy5ldmVudCkgewogICAgICAgICAgICAgIGlmIChwcm9wcy5ldmVudC5oYXNPd25Qcm9wZXJ0eShldk5hbWUpKQogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2TmFtZSwgcHJvcHMuZXZlbnRbZXZOYW1lXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJjYWxsYmFjayI6CiAgICAgICAgICAgIHByb3BzW25hbWVdKG5vZGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHByb3BzW25hbWVdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9LAogICAgYWRkQmFpdEVsZW1lbnQgOiBmdW5jdGlvbiAoc3RyT3B0cykgeyAvLyBleDogZGl2LmFkcyBvciBzcGFuI2Fkc0AKICAgICAgdmFyIG9wdHMgPSBzdHJPcHRzLnJlcGxhY2UoJy4nLCAnOmNsYXNzTmFtZTonKS5yZXBsYWNlKCcjJywgJzppZDonKS5zcGxpdCgnOicpOwogICAgICB2YXIgYmFpdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQob3B0c1swXSk7CiAgICAgIGJhaXQuc2V0QXR0cmlidXRlKG9wdHNbMV0sIG9wdHNbMl0pOwogICAgICBiYWl0LmlubmVySFRNTCA9ICI8YnI+IjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGJhaXQpOwogICAgICByZXR1cm4gYmFpdDsKICAgIH0sCiAgICByZXBsYWNlRWxlbWVudCA6IGZ1bmN0aW9uIChvbGROb2RlLCBuZXdOb2RlKSB7CiAgICAgIG9sZE5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Tm9kZSwgb2xkTm9kZSk7CiAgICB9LAogICAgc2V0RWxlbWVudCA6IGZ1bmN0aW9uIChzZWxlY3RvciwgcHJvcHMpIHsKICAgICAgdmFyIG5vZGUgPSBBYWsuZ2V0RWxlbWVudChzZWxlY3Rvcik7CiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBwcm9wcykgewogICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KG5hbWUpKSB7CiAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICB2YXIgdGV4dCA9ICgnaW5uZXJUZXh0JyBpbiBkb2N1bWVudCkgPyAnaW5uZXJUZXh0JyA6ICd0ZXh0Q29udGVudCc7CiAgICAgICAgICAgICAgbm9kZVt0ZXh0XSA9IHByb3BzW25hbWVdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodG1sIjoKICAgICAgICAgICAgICBub2RlLmlubmVySFRNTCA9IHByb3BzW25hbWVdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJjbGFzcyI6CiAgICAgICAgICAgICAgbm9kZS5jbGFzc05hbWUgPSBwcm9wc1tuYW1lXTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBwcm9wc1tuYW1lXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBhZGRTdHlsZSA6IGZ1bmN0aW9uIChjc3MpIHsKICAgICAgY3NzID0gY3NzLnJlcGxhY2UoLzsvZywgJyAhaW1wb3J0YW50OycpOwogICAgICBpZiAodHlwZW9mIEdNX2FkZFN0eWxlICE9ICd1bmRlZmluZWQnKSB7CiAgICAgICAgR01fYWRkU3R5bGUoY3NzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJykpLmlubmVySFRNTCA9IGNzczsKICAgICAgfQogICAgfSwKICAgIGxvYWRTdHlsZSA6IGZ1bmN0aW9uIChzcmMpIHsKICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpOwogICAgICBzdHlsZS5yZWwgPSAic3R5bGVzaGVldCI7CiAgICAgIHN0eWxlLmhyZWYgPSBzcmM7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgfSwKICAgIGdldFN0eWxlIDogZnVuY3Rpb24gKHNlbGVjdG9yLCBwcm9wKSB7CiAgICAgIHZhciBlbGVtID0gQWFrLmdldEVsZW1lbnQoc2VsZWN0b3IpOwogICAgICBpZiAoZWxlbS5jdXJyZW50U3R5bGUpIHsKICAgICAgICByZXR1cm4gZWxlbS5jdXJyZW50U3R5bGVbcHJvcF07CiAgICAgIH0gZWxzZSBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApOwogICAgICB9CiAgICB9LAogICAgZGVjb2RlVVJJIDogZnVuY3Rpb24gKHN0cikgewogICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cik7CiAgICB9LAogICAgZW5jb2RlVVJJIDogZnVuY3Rpb24gKHN0cikgewogICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cik7CiAgICB9LAogICAgZW5jb2RlSFRNTCA6IGZ1bmN0aW9uIChzdHIpIHsKICAgICAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKICAgIH0sCiAgICBkZWNvZGVIVE1MIDogZnVuY3Rpb24gKHN0cikgewogICAgICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZSgvJmFtcDsvZywgJyYnKS5yZXBsYWNlKC8mbHQ7L2csICc8JykucmVwbGFjZSgvJmd0Oy9nLCAnPicpLnJlcGxhY2UoLyZxdW90Oy9nLCAnIicpOwogICAgfSwKICAgIHNlcmlhbGl6ZSA6IGZ1bmN0aW9uIChvYmopIHsKICAgICAgaWYgKHR5cGVvZiBvYmogPT0gJ29iamVjdCcpIHsKICAgICAgICB2YXIgYXJyID0gW107CiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHsKICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpCiAgICAgICAgICAgIGFyci5wdXNoKHByb3AgKyAnPScgKyBBYWsuZW5jb2RlVVJJKG9ialtwcm9wXSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyLmpvaW4oJyYnKTsKICAgICAgfQogICAgICByZXR1cm4gb2JqOwogICAgfSwKICAgIHVuc2VyaWFsaXplIDogZnVuY3Rpb24gKHN0cikgewogICAgICBzdHIgPSBBYWsuZGVjb2RlSFRNTChzdHIpOwogICAgICB2YXIgYXJyID0gc3RyLnNwbGl0KCcmJyk7CiAgICAgIHZhciBvYmogPSB7fTsKICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7CiAgICAgICAgaWYgKGVudHJ5ICE9PSAnJyAmJiBlbnRyeS5zcGxpdCgnPScpKSB7CiAgICAgICAgICB2YXIgc3BsaXRzID0gZW50cnkuc3BsaXQoJz0nKTsKICAgICAgICAgIG9ialtzcGxpdHNbMF1dID0gQWFrLmRlY29kZVVSSShzcGxpdHNbMV0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiBvYmo7CiAgICB9LAogICAgdW5zZXRQcm9wZXJ0aWVzIDogZnVuY3Rpb24gKG9iaiwgcHJvcHMpIHsKICAgICAgcHJvcHMgPSAodHlwZW9mIHByb3BzID09ICdzdHJpbmcnKSA/IHByb3BzLnNwbGl0KCcsJykgOiBwcm9wczsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBwcm9wID0gcHJvcHNbaV07CiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgZGVsZXRlIG9ialtwcm9wXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9iajsKICAgIH0sCiAgICBzZXRQcm9wZXJ0aWVzIDogZnVuY3Rpb24gKG9iajEsIG9iajIpIHsKICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmoyKSB7CiAgICAgICAgaWYgKG9iajIuaGFzT3duUHJvcGVydHkocHJvcCkpCiAgICAgICAgICBvYmoxW3Byb3BdID0gb2JqMltwcm9wXTsKICAgICAgfQogICAgICByZXR1cm4gb2JqMTsKICAgIH0sCiAgICBmaXhQcm90b2NvbFVSTCA6IGZ1bmN0aW9uICh1cmwpIHsKICAgICAgaWYgKC9eaHR0cC8udGVzdCh1cmwpKSB7IC8vIGFic29sdXRlCiAgICAgICAgcmV0dXJuIHVybDsKICAgICAgfSBlbHNlIGlmICgvXlwvXC8vLnRlc3QodXJsKSkgeyAvLyByZWxhdGl2ZQogICAgICAgIHJldHVybiAnaHR0cDonICsgdXJsOwogICAgICB9IGVsc2UgeyAvLyBub25lCiAgICAgICAgcmV0dXJuICdodHRwOi8vJyArIHVybDsKICAgICAgfQogICAgfSwKICAgIGZha2VGdWNrQWRCbG9jayA6IGZ1bmN0aW9uIChpbnN0YW5jZU5hbWUsIGNsYXNzTmFtZSkgewoKICAgICAgLy8gaW5qZWN0IGZha2UgZnVja2FkYmx1Y2sKICAgICAgQWFrLmFkZFNjcmlwdChBYWsuaW50b1N0cmluZyhmdW5jdGlvbiAoKSB7CgogICAgICAgICAgdmFyIENMQVNTTkFNRSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgICB2YXIgY2FsbE5vdERldGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuZGVidWcgPSB7CiAgICAgICAgICAgICAgc2V0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBnZXQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLm9uRGV0ZWN0ZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgICAgICAgICAgICB0aGlzLm9uKHRydWUsIGNhbGxiYWNrKTsKICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5vbk5vdERldGVjdGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgdGhpcy5vbihmYWxzZSwgY2FsbGJhY2spOwogICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLm9uID0gZnVuY3Rpb24gKGRldGVjdGVkLCBjYWxsYmFjaykgewogICAgICAgICAgICAgIGlmICghZGV0ZWN0ZWQpIHsKICAgICAgICAgICAgICAgIGNhbGxOb3REZXRlY3RlZCA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhbJ0FudGlBZGJLaWxsZXInLCBsb2NhdGlvbi5ob3N0LCAnRnVja0FkQmxvY2snXSk7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgc2V0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBnZXQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuY2hlY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgaWYgKGNhbGxOb3REZXRlY3RlZCkKICAgICAgICAgICAgICAgIGNhbGxOb3REZXRlY3RlZCgpOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLmVtaXRFdmVudCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5jbGVhckV2ZW50ID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICB9OwoKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdpbmRvdywgewogICAgICAgICAgICBDTEFTU05BTUUgOiB7CiAgICAgICAgICAgICAgdmFsdWUgOiBDTEFTU05BTUUsCiAgICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3csIHsKICAgICAgICAgICAgSU5TVEFOQ0VOQU1FIDogewogICAgICAgICAgICAgIHZhbHVlIDogbmV3IENMQVNTTkFNRSgpLAogICAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgIH0pLnJlcGxhY2UoL0lOU1RBTkNFTkFNRS9nLCBpbnN0YW5jZU5hbWUgfHwgJ2Z1Y2tBZEJsb2NrJykKICAgICAgICAucmVwbGFjZSgvQ0xBU1NOQU1FL2csIGNsYXNzTmFtZSB8fCAnRnVja0FkQmxvY2snKSk7CgogICAgfSwgLy8gRXZlbnRzCiAgICBvbkV2ZW50IDogZnVuY3Rpb24gKGVsZW1lbnQsIHR5cGUsIGxpc3RlbmVyLCBidWJibGVzKSB7CiAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBGb3IgYWxsIG1ham9yIGJyb3dzZXJzLCBleGNlcHQgSUUgOCBhbmQgZWFybGllcgogICAgICAgIChlbGVtZW50IHx8IHdpbmRvdykuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgYnViYmxlcyB8fCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7IC8vIEZvciBJRSA4IGFuZCBlYXJsaWVyIHZlcnNpb25zCiAgICAgICAgKGVsZW1lbnQgfHwgd2luZG93KS5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgbGlzdGVuZXIpOwogICAgICB9CiAgICAgIHJldHVybiBhcmd1bWVudHM7CiAgICB9LAogICAgb2ZmRXZlbnQgOiBmdW5jdGlvbiAoZWxlbWVudCwgdHlwZSwgbGlzdGVuZXIsIGJ1YmJsZXMpIHsKICAgICAgaWYgKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKSB7IC8vIEZvciBhbGwgbWFqb3IgYnJvd3NlcnMsIGV4Y2VwdCBJRSA4IGFuZCBlYXJsaWVyCiAgICAgICAgKGVsZW1lbnQgfHwgd2luZG93KS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBidWJibGVzIHx8IGZhbHNlKTsKICAgICAgfSBlbHNlIHsgLy8gRm9yIElFIDggYW5kIGVhcmxpZXIgdmVyc2lvbnMKICAgICAgICAoZWxlbWVudCB8fCB3aW5kb3cpLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBsaXN0ZW5lcik7CiAgICAgIH0KICAgIH0sCiAgICBlbWl0RXZlbnQgOiBmdW5jdGlvbiAoZWxlbWVudCwgdHlwZSwgZGV0YWlsLCBidWJibGVzLCBjYW5jZWxhYmxlKSB7CiAgICAgIHZhciBldmVudDsKICAgICAgaWYgKHdpbmRvdy5DdXN0b21FdmVudCkgewogICAgICAgIGV2ZW50ID0gbmV3IHdpbmRvdy5DdXN0b21FdmVudCh0eXBlLCB7CiAgICAgICAgICAgICJkZXRhaWwiIDogZGV0YWlsIHx8IHVuZGVmaW5lZAogICAgICAgICAgfSwgYnViYmxlcyB8fCBmYWxzZSwgY2FuY2VsYWJsZSB8fCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTsKICAgICAgICBldmVudC5pbml0Q3VzdG9tRXZlbnQoJ29uJyArIHR5cGUsIGJ1YmJsZXMgfHwgZmFsc2UsIGNhbmNlbGFibGUgfHwgZmFsc2UsIHsKICAgICAgICAgICJkZXRhaWwiIDogZGV0YWlsIHx8IHVuZGVmaW5lZAogICAgICAgIH0pOwogICAgICB9CiAgICAgIChlbGVtZW50IHx8IHdpbmRvdykuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICB9LAogICAgZGV0ZWN0ZWQgOiBmdW5jdGlvbiAobmFtZSkgewogICAgICBpZiAoQWFrLm9wdHMuZGVidWcgJiYgQWFrLm9wdHMubG9nRGV0ZWN0ZWQpIHsKICAgICAgICBBYWsuZW1pdEV2ZW50KHdpbmRvdywgJ2RldGVjdGVkJywgbmFtZSk7CiAgICAgIH0KICAgIH0sCiAgICByZWFkeSA6IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgICBBYWsub25FdmVudCh3aW5kb3csICdsb2FkJywgY2FsbGJhY2spOwogICAgfSwKICAgIHBsYXllciA6IGZ1bmN0aW9uICgpIHsKCiAgICAgIHZhciBQbGF5ZXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy50YXJnZXQgPSB7fTsKICAgICAgICB0aGlzLnBsYXllciA9IHt9OwogICAgICAgIHRoaXMubmFtZSA9IG51bGw7CiAgICAgICAgdGhpcy52ZXJzaW9uID0gbnVsbDsKICAgICAgICB0aGlzLmxpYnJhcnkgPSBudWxsOwogICAgICAgIHRoaXMuZmFsbGJhY2sgPSAndmxjJzsKICAgICAgICB0aGlzLmF1dG9wbGF5ID0gQWFrLm9wdHMuYXV0b1BsYXk7CiAgICAgICAgdGhpcy5hcmdzID0gbnVsbDsKICAgICAgICB0aGlzLnNldHVwID0ge307CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgYnVpbGQgOiAnZW1iZWQnLAogICAgICAgICAgaW5zZXJ0IDogJ3JlcGxhY2UnLAogICAgICAgICAgY3Jvc3NTZXR1cCA6IHRydWUKICAgICAgICB9OwogICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IHsgLy8gZmxhc2gKICAgICAgICAgIHdtb2RlIDogJ29wYXF1ZScsCiAgICAgICAgICBxdWFsaXR5IDogJ2hpZ2gnLAogICAgICAgICAgYmdjb2xvciA6ICcjMDAwMDAwJywKICAgICAgICAgIHR5cGUgOiAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnLAogICAgICAgICAgcGx1Z2luc3BhZ2UgOiAnaHR0cDovL3d3dy5hZG9iZS5jb20vZ28vZ2V0Zmxhc2gnLAogICAgICAgICAgYWxsb3dzY3JpcHRhY2Nlc3MgOiAnYWx3YXlzJywgLy8gbmV2ZXIgLyBhbHdheXMKICAgICAgICAgIGFsbG93ZnVsbHNjcmVlbiA6IHRydWUKICAgICAgICB9OwogICAgICB9OwoKICAgICAgUGxheWVyLnByb3RvdHlwZSA9IHsgLy8gaHR0cDovL3Rpbnl1cmwuY29tL3BiNmZ0aGoKICAgICAgICBnZXRUYXJnZXROb2RlIDogZnVuY3Rpb24gKGVsZW1lbnQpIHsKCiAgICAgICAgICB0aGlzLnRhcmdldC5ub2RlID0gQWFrLmdldEVsZW1lbnQoZWxlbWVudCk7CiAgICAgICAgICB0aGlzLnRhcmdldC5odG1sID0gdGhpcy50YXJnZXQubm9kZS5vdXRlckhUTUw7CiAgICAgICAgICB0aGlzLnRhcmdldC5wYXJlbnQgPSB0aGlzLnRhcmdldC5ub2RlLnBhcmVudE5vZGU7CiAgICAgICAgICB0aGlzLnRhcmdldC50YWcgPSB0aGlzLnRhcmdldC5ub2RlLnRhZ05hbWU7CgogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmlkID0gdGhpcy5hdHRyaWJ1dGVzLm5hbWUgPSBBYWsuZ2VuZXJhdGVJRCgpOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCA9IHRoaXMudGFyZ2V0Lm5vZGUuaGVpZ2h0IHx8IHRoaXMudGFyZ2V0Lm5vZGUuY2xpZW50SGVpZ2h0IHx8ICc0ODBweCc7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMud2lkdGggPSB0aGlzLnRhcmdldC5ub2RlLndpZHRoIHx8IHRoaXMudGFyZ2V0Lm5vZGUuY2xpZW50V2lkdGggfHwgJzY0MHB4JzsKICAgICAgICB9LAogICAgICAgIGdldE1pbWVUeXBlIDogZnVuY3Rpb24gKHR5cGUpIHsKICAgICAgICAgIC8vIGRvYzogaHR0cDovL3Rpbnl1cmwuY29tL2pyczhmZ3oKICAgICAgICAgIHN3aXRjaCAodHlwZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICBjYXNlICdtcDQnOgogICAgICAgICAgICByZXR1cm4gJ3ZpZGVvL21wNCc7CiAgICAgICAgICBjYXNlICd3ZWJtJzoKICAgICAgICAgICAgcmV0dXJuICd2aWRlby93ZWJtJzsKICAgICAgICAgIGNhc2UgJ29nZyc6CiAgICAgICAgICBjYXNlICdvZ3YnOgogICAgICAgICAgICByZXR1cm4gJ3ZpZGVvL29nZyc7CiAgICAgICAgICBjYXNlICdmbHYnOgogICAgICAgICAgICByZXR1cm4gJ3ZpZGVvL3gtZmx2JzsKICAgICAgICAgIGNhc2UgJ2hscyc6CiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1tcGVnVVJMJzsKICAgICAgICAgIGNhc2UgJ2hkcyc6CiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vZjRtK3htbCc7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGJ1aWxkaW5nIDogZnVuY3Rpb24gKHRhZ05hbWUpIHsKICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgICBpZiAoQWFrLm9wdHMuZm9yY2VWTEMgJiYgdGhpcy5uYW1lICE9PSAndmxjJykgewogICAgICAgICAgICBBYWsuaW5mbygnZm9yY2UgcGxheWluZyB3aXRoIFZMQycpOwogICAgICAgICAgICByZXR1cm4gdGhpcy52bGMuYXBwbHkodGhpcywgdGhpcy5hcmdzKTsKICAgICAgICAgIH0KCiAgICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHsKICAgICAgICAgIGNhc2UgJ2lmcmFtZSc6CiAgICAgICAgICAgIHRoaXMucGxheWVyLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMuYXR0cmlidXRlcy5zcmMgfHwgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCArICcvJyk7CiAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuc3JjZG9jKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMucGxheWVyLm5vZGUuaGFzQXR0cmlidXRlKCJzcmNkb2MiKSB8fCAnc3JjZG9jJyBpbiB0aGlzLnBsYXllci5ub2RlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZSgnc3JjZG9jJywgdGhpcy5hdHRyaWJ1dGVzLnNyY2RvYyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IHdpdGggZmxvd3BsYXllcgogICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ3NyYycsICJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04LCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5hdHRyaWJ1dGVzLnNyY2RvYykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB0aGlzLnNldHVwLndpZHRoKTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHRoaXMuc2V0dXAuaGVpZ2h0KTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2hlaWdodDonICsgdGhpcy5zZXR1cC5oZWlnaHQgKyAncHg7IHdpZHRoOicgKyB0aGlzLnNldHVwLndpZHRoICsgJ3B4OycpOwogICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZSgnZnJhbWVib3JkZXInLCAwKTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ3Njcm9sbGluZycsICdubycpOwogICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZSgnYWxsb3dmdWxsc2NyZWVuJywgdHJ1ZSk7IC8vIGh0dHA6Ly90aW55dXJsLmNvbS9veXllaGFiCiAgICAgICAgICAgIC8vIGFsbG93ZnVsbHNjcmVlbiB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIG9hbGxvd2Z1bGxzY3JlZW4gbXNhbGxvd2Z1bGxzY3JlZW4KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICd2aWRlbyc6CiAgICAgICAgICAgIHZhciBhdHRyTmFtZTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7CiAgICAgICAgICAgIGZvciAoYXR0ck5hbWUgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpCiAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuYXV0b3BsYXkpIHsgLy8gZml4IGJ1ZyBkdXBsaWNhdGUgcGxheWluZyBvbiBmaXJlZm94L2Nocm9tZQogICAgICAgICAgICAgIHRoaXMucGxheWVyLm5vZGUub25sb2Fkc3RhcnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAvL3RoaXMucGxheSgpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMucGxheWVyLm5vZGUub25lcnJvciA9IGZ1bmN0aW9uICgpIHsgLy8gc3dpdGNoIHRvIHBsdWdpbiBwbGF5ZXIKICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHNlbGYuYXJnc1swXSA9IHNlbGYucGxheWVyLm5vZGU7CiAgICAgICAgICAgICAgICBzZWxmLnZsY3BsYXllci5hcHBseShzZWxmLCBzZWxmLmFyZ3MpOwogICAgICAgICAgICAgIH0sIDUwMDApOwogICAgICAgICAgICB9OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6IC8vIGVtYmVkCiAgICAgICAgICAgIHRoaXMucGxheWVyLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdlbWJlZCcpOwogICAgICAgICAgICBmb3IgKGF0dHJOYW1lIGluIHRoaXMuYXR0cmlidXRlcykgewogICAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0ck5hbWUpKQogICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIHRoaXMuYXR0cmlidXRlc1thdHRyTmFtZV0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnBsYXllci5odG1sID0gdGhpcy5wbGF5ZXIubm9kZS5vdXRlckhUTUw7CiAgICAgICAgICB0aGlzLnBsYXllci50YWcgPSB0aGlzLnBsYXllci5ub2RlLnRhZ05hbWU7CiAgICAgICAgICB0aGlzLmluc2VydGluZygpOwogICAgICAgIH0sCiAgICAgICAgaW5zZXJ0aW5nIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaW5zZXJ0KSB7CiAgICAgICAgICBjYXNlICdpbm5lcic6CiAgICAgICAgICAgIHRoaXMudGFyZ2V0Lm5vZGUuaW5uZXJIVE1MID0gdGhpcy5wbGF5ZXIuaHRtbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdhcHBlbmQnOgogICAgICAgICAgICB0aGlzLnRhcmdldC5wYXJlbnQucmVwbGFjZUNoaWxkKHRoaXMucGxheWVyLm5vZGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6IC8vIHJlcGxhY2UKICAgICAgICAgICAgdGhpcy50YXJnZXQucGFyZW50LnJlcGxhY2VDaGlsZCh0aGlzLnBsYXllci5ub2RlLCB0aGlzLnRhcmdldC5ub2RlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChBYWsub3B0cy5sb2dQbGF5ZXIpIHsKICAgICAgICAgICAgQWFrLmxvZygncGxheWVyJywgdGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAogICAgICAgIGVkaXRpbmcgOiBmdW5jdGlvbiAoZWxlbSwgb3B0cykgeyAvLyByZXZpZXcKICAgICAgICAgIEFhay5oYXNFbGVtZW50KGVsZW0sIGZ1bmN0aW9uICh0aGlzRWxlbWVudCkgewogICAgICAgICAgICB2YXIgb2JqLAogICAgICAgICAgICBzd2YsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBwYXJ0cywKICAgICAgICAgICAgcGFyYW0sCiAgICAgICAgICAgIGF0dHJpYnV0ZXMsCiAgICAgICAgICAgIGF0dHJOYW1lOwogICAgICAgICAgICB2YXIgc28gPSB0aGlzRWxlbWVudDsKICAgICAgICAgICAgdmFyIGNsb25lID0gc28uY2xvbmVOb2RlKHRydWUpOwoKICAgICAgICAgICAgLy8gc2V0IGF0dHJpaWJ1dGVzCiAgICAgICAgICAgIGlmIChvcHRzLnNldEF0dHJpYnV0ZSkgewogICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBvcHRzLnNldEF0dHJpYnV0ZTsKICAgICAgICAgICAgICBmb3IgKGF0dHJOYW1lIGluIGF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgICAgIGlmIChjbG9uZS5xdWVyeVNlbGVjdG9yKCdwYXJhbVtuYW1lPSInICsgYXR0ck5hbWUgKyAnIl0nKSkgewogICAgICAgICAgICAgICAgICBjbG9uZS5xdWVyeVNlbGVjdG9yKCdwYXJhbVtuYW1lPSInICsgYXR0ck5hbWUgKyAnIl0nKS52YWx1ZSA9IGF0dHJpYnV0ZXNbYXR0ck5hbWVdOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbG9uZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgICAgICAgICAgIGNsb25lLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0cmlidXRlc1thdHRyTmFtZV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gdW5zZXQgYXR0cmlidXRlcwogICAgICAgICAgICBpZiAob3B0cy51bnNldEF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gb3B0cy5kZWxBdHRyaWJ1dGVzOwogICAgICAgICAgICAgIGZvciAoYXR0ck5hbWUgaW4gYXR0cmlidXRlcykgewogICAgICAgICAgICAgICAgaWYgKGNsb25lLnF1ZXJ5U2VsZWN0b3IoJ3BhcmFtW25hbWU9IicgKyBhdHRyTmFtZSArICciXScpKSB7CiAgICAgICAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGNsb25lLnF1ZXJ5U2VsZWN0b3IoJ3BhcmFtW25hbWU9IicgKyBhdHRyTmFtZSArICciXScpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xvbmUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICAgICAgICAgICBkZWxldGUgYXR0cmlidXRlc1thdHRyTmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAob3B0cy5zZXRGbGFzaHZhcnMgfHwgb3B0cy51bnNldEZsYXNodmFycykgewogICAgICAgICAgICAgIGlmIChjbG9uZS5xdWVyeVNlbGVjdG9yKCdwYXJhbVtuYW1lPSJmbGFzaHZhcnMiXScpKSB7CiAgICAgICAgICAgICAgICBwYXJhbSA9IGNsb25lLnF1ZXJ5U2VsZWN0b3IoJ3BhcmFtW25hbWU9ImZsYXNodmFycyJdJyk7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtLnZhbHVlOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xvbmUuZ2V0QXR0cmlidXRlKCdmbGFzaHZhcnMnKSkgewogICAgICAgICAgICAgICAgdmFsdWUgPSBjbG9uZS5nZXRBdHRyaWJ1dGUoJ2ZsYXNodmFycycpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xvbmUuZ2V0QXR0cmlidXRlKCdkYXRhJykgJiYgY2xvbmUuZ2V0QXR0cmlidXRlKCdkYXRhJykuaW5kZXhPZignPycpID49IDApIHsKICAgICAgICAgICAgICAgIHBhcnRzID0gY2xvbmUuZ2V0QXR0cmlidXRlKCdkYXRhJykuc3BsaXQoJz8nLCAyKTsKICAgICAgICAgICAgICAgIHN3ZiA9IHBhcnRzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnRzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBvYmogPSBBYWsudW5zZXJpYWxpemUodmFsdWUpOwogICAgICAgICAgICAgIGlmIChvcHRzLnNldEZsYXNodmFycykgewogICAgICAgICAgICAgICAgb2JqID0gQWFrLnNldFByb3BlcnRpZXMob2JqLCBvcHRzLnNldEZsYXNodmFycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChvcHRzLnVuc2V0Rmxhc2h2YXJzKSB7CiAgICAgICAgICAgICAgICBvYmogPSBBYWsudW5zZXRQcm9wZXJ0aWVzKG9iaiwgb3B0cy51bnNldEZsYXNodmFycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhbHVlID0gQWFrLnNlcmlhbGl6ZShvYmopOwoKICAgICAgICAgICAgICBpZiAocGFyYW0pIHsKICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzd2YpIHsKICAgICAgICAgICAgICAgIGNsb25lLnNldEF0dHJpYnV0ZSgnZGF0YScsIHN3ZiArICc/JyArIHZhbHVlKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY2xvbmUuc2V0QXR0cmlidXRlKCdmbGFzaHZhcnMnLCB2YWx1ZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIHJlcGxhY2UKICAgICAgICAgICAgQWFrLmxvZyhzbywgY2xvbmUsIG9iaik7CiAgICAgICAgICAgIEFhay5yZXBsYWNlRWxlbWVudChzbywgY2xvbmUpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBlbWJlZGRpbmcgOiBmdW5jdGlvbiAoaWQsIHNldHVwLCBhdHRyaWJ1dGVzLCBvcHRpb25zKSB7IAogICAgICAgIAogICAgICAgICAgdGhpcy5nZXRUYXJnZXROb2RlKGlkKTsKICAgICAgICAgIHRoaXMuYXJncyA9IGFyZ3VtZW50czsKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IEFhay5zZXRQcm9wZXJ0aWVzKHRoaXMuYXR0cmlidXRlcywgYXR0cmlidXRlcyB8fCB7fSk7CiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwoKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5zcmMgPSBzZXR1cC5zd2Y7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuaWQgPSB0aGlzLmF0dHJpYnV0ZXMubmFtZSA9IEFhay5nZW5lcmF0ZUlEKCk7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuaGVpZ2h0ID0gc2V0dXAuaGVpZ2h0IHx8IHRoaXMuYXR0cmlidXRlcy5oZWlnaHQ7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMud2lkdGggPSBzZXR1cC53aWR0aCB8fCB0aGlzLmF0dHJpYnV0ZXMud2lkdGg7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuZmxhc2h2YXJzID0gQWFrLnNlcmlhbGl6ZShzZXR1cCk7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsudW5zZXRQcm9wZXJ0aWVzKHRoaXMuYXR0cmlidXRlcywgJ3N3ZicpOwoKICAgICAgICAgIHRoaXMuYnVpbGRpbmcoJ2VtYmVkJyk7CiAgICAgICAgfSwKICAgICAgICBqd3BsYXllciA6IGZ1bmN0aW9uIChpZCwgc2V0dXAsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHsKICAgICAgICAgIC8vIEp3UGxheWVyIDcgKGZsYXNoL2h0bWw1KQogICAgICAgICAgLy8gbm90ZTogcHJvYmxlbSB3aXRoIHNzbAogICAgICAgICAgLy8gc2V0dXA6IGh0dHA6Ly90aW55dXJsLmNvbS9oaHJnamFwLCBodHRwOi8vdGlueXVybC5jb20vZ3FzNDZ0bQogICAgICAgICAgLy8gYXBpOiBodHRwczovL2RldmVsb3Blci5qd3BsYXllci5jb20vanctcGxheWVyL2RvY3MvZGV2ZWxvcGVyLWd1aWRlL2FwaS9qYXZhc2NyaXB0X2FwaV9yZWZlcmVuY2UvCiAgICAgICAgICAvLyBobHM6IGh0dHA6Ly90aW55dXJsLmNvbS9weGw5c2NxCiAgICAgICAgICAvLyBobHMtdGVzdGVyOiBodHRwOi8vZGVtby5qd3BsYXllci5jb20vc3RyZWFtLXRlc3Rlci8KICAgICAgICAgIC8vIHJ0bXAtZGVtbzogaHR0cHM6Ly93d3cuc2NhbGVlbmdpbmUuY29tL2p3NgogICAgICAgICAgLy8gaWZyYW1lOiBodHRwOi8vdGlueXVybC5jb20vODZhZ2c2OAoKICAgICAgICAgIHRoaXMuZ2V0VGFyZ2V0Tm9kZShpZCk7CiAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgfHwge30pOwogICAgICAgICAgdGhpcy5vcHRpb25zID0gQWFrLnNldFByb3BlcnRpZXModGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKCiAgICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNyb3NzU2V0dXAgPT09IHRydWUpIHsKICAgICAgICAgICAgdGhpcy5zZXR1cCA9IHsKICAgICAgICAgICAgICBjb250cm9scyA6IHRydWUsCiAgICAgICAgICAgICAgZmlsZSA6IHNldHVwLnNvdXJjZSwKICAgICAgICAgICAgICBhYm91dHRleHQgOiBBYWsubmFtZSwKICAgICAgICAgICAgICBhYm91dGxpbmsgOiBBYWsuaG9tZVVSTCwKICAgICAgICAgICAgICB3aWR0aCA6IHNldHVwLndpZHRoIHx8IHRoaXMuYXR0cmlidXRlcy53aWR0aCwKICAgICAgICAgICAgICBoZWlnaHQgOiBzZXR1cC5oZWlnaHQgfHwgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCwKICAgICAgICAgICAgICBhdXRvc3RhcnQgOiBzZXR1cC5hdXRvcGxheSB8fCB0aGlzLmF1dG9wbGF5LAogICAgICAgICAgICAgIHByaW1hcnkgOiAnaHRtbDUnLAogICAgICAgICAgICAgIHByZWxvYWQgOiAnYXV0bycsCiAgICAgICAgICAgICAgc2tpbiA6IHsgLy8gU2V2ZW4gfCBTaXggfCBGaXZlIHwgR2xvdyB8IEJlZWxkZW4gfCBWYXBvciB8IEJla2xlIHwgUm91bmRzdGVyIHwgU3Rvcm10cm9vcGVyCiAgICAgICAgICAgICAgICBuYW1lIDogc2V0dXAuc2tpbiB8fCAic2l4IiAvLyBkZWZhdWx0IHNraW4gSldQNgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKFsnbXA0JywgJ3dlYm0nLCAnb2dnJywgJ29ndiddLmluZGV4T2Yoc2V0dXAudHlwZSkgPT09IC0xKSB7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5wcmltYXJ5ID0gJ2ZsYXNoJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2V0dXAudHlwZSA9PT0gJ2hscycpIHsKICAgICAgICAgICAgICB0aGlzLnNldHVwLmhsc2h0bWwgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnNyY2RvYyA9ICc8aHRtbD48aGVhZD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBmb250LWZhY2V7Zm9udC1mYW1pbHk6anctaWNvbnM7c3JjOnVybCgnICsgbG9jYXRpb24ucHJvdG9jb2wgKyAnc3NsLnAuandwY2RuLmNvbS9wbGF5ZXIvdi83LjQuMy9qdy1pY29ucy53b2ZmKSBmb3JtYXQoIndvZmYiKSx1cmwoJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vc3NsLnAuandwY2RuLmNvbS9wbGF5ZXIvdi83LjQuMy9qdy1pY29ucy50dGYpIGZvcm1hdCgidHJ1ZXR5cGUiKTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9PC9zdHlsZT48c2NyaXB0IHNyYz0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vY29udGVudC5qd3BsYXRmb3JtLmNvbS9saWJyYXJpZXMvVjZOZkV6VDcuanMiPjwvc2NyaXB0PjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+aHRtbCwgYm9keXtwYWRkaW5nOjA7IG1hcmdpbjowO308L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGlkPSJqdy1tb3ZpZSI+PC9kaXY+PHNjcmlwdD5qd3BsYXllcigianctbW92aWUiKS5zZXR1cCgnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXR1cCkgKyAnKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPic7CgogICAgICAgICAgdGhpcy5idWlsZGluZygnaWZyYW1lJyk7CiAgICAgICAgfSwKICAgICAgICB2aWRlb2pzIDogZnVuY3Rpb24gKGlkLCBzZXR1cCwgYXR0cmlidXRlcywgb3B0aW9ucykgeyAKICAgICAgICAgIC8vIFZpZGVvSnMgNSAoZmxhc2gvaHRtbDUpCiAgICAgICAgICAvLyBzZXR1cDogaHR0cDovL3Rpbnl1cmwuY29tL3BjZ3gyb2IKICAgICAgICAgIC8vIHBsYXliYWNrOiBodHRwOi8vdGlueXVybC5jb20vbnNjenRtbQogICAgICAgICAgLy8gZGVtbzogaHR0cDovL2pzZmlkZGxlLm5ldC9OOFpzNS8xOC8KICAgICAgICAgIC8vIHBsdWdpbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL3ZpZGVvLmpzL3dpa2kvUGx1Z2lucwoKICAgICAgICAgIHRoaXMuZ2V0VGFyZ2V0Tm9kZShpZCk7CiAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgfHwge30pOwogICAgICAgICAgdGhpcy5vcHRpb25zID0gQWFrLnNldFByb3BlcnRpZXModGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKCiAgICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNyb3NzU2V0dXAgPT09IHRydWUpIHsKICAgICAgICAgICAgdGhpcy5zZXR1cCA9IHsKICAgICAgICAgICAgICBjb250cm9scyA6IHRydWUsCiAgICAgICAgICAgICAgcHJlbG9hZCA6ICdhdXRvJywKICAgICAgICAgICAgICB3aWR0aCA6IHNldHVwLndpZHRoIHx8IHRoaXMuYXR0cmlidXRlcy53aWR0aCwKICAgICAgICAgICAgICBoZWlnaHQgOiBzZXR1cC5oZWlnaHQgfHwgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCwKICAgICAgICAgICAgICB0ZWNoT3JkZXIgOiBbImh0bWw1IiwgImZsYXNoIl0sCiAgICAgICAgICAgICAgYXV0b3BsYXkgOiBzZXR1cC5hdXRvcGxheSB8fCB0aGlzLmF1dG9wbGF5LAogICAgICAgICAgICAgIHNvdXJjZXMgOiBbewogICAgICAgICAgICAgICAgICB0eXBlIDogdGhpcy5nZXRNaW1lVHlwZShzZXR1cC50eXBlKSwKICAgICAgICAgICAgICAgICAgc3JjIDogc2V0dXAuc291cmNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9OwogICAgICAgICAgICAvKiBkb24ndCB3b3JrIAogICAgICAgICAgICBpZiAoc2V0dXAudHlwZSA9PT0gJ2hscycpIHsKICAgICAgICAgICAgICB0ZWNoT3JkZXIgOiBbImZsYXNoIiwgImh0bWw1Il0sCiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5mbGFzaCA9IHsKICAgICAgICAgICAgICAgIC8vc3dmIDogIi8vcmVla3NpdGUuY29tL3B1YmxpYy9zd2YvdmlkZW9qcy1mbGFzaGxzLnN3ZiIKICAgICAgICAgICAgICAgIHN3ZiA6ICdodHRwOi8vd3d3LmZsYXNobHMub3JnL3ZpZGVvanMvdmlkZW8tanMuc3dmJwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKi8KICAgICAgICAgIH0KCiAgICAgICAgICAvLyAKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5zcmNkb2MgPSAnPGh0bWw+PGhlYWQ+PGxpbmsgaHJlZj0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3ZpZGVvLmpzLzUuMTAuNS9hbHQvdmlkZW8tanMtY2RuLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI+PHNjcmlwdCBzcmM9IicgKyBsb2NhdGlvbi5wcm90b2NvbCArICcvL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy92aWRlby5qcy81LjEwLjUvdmlkZW8ubWluLmpzIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3ZpZGVvanMtY29udHJpYi1obHMvMy4xLjAvdmlkZW9qcy1jb250cmliLWhscy5taW4uanMiPjwvc2NyaXB0PjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+aHRtbCwgYm9keXtwYWRkaW5nOjA7IG1hcmdpbjowO30udmpzLWRlZmF1bHQtc2tpbntjb2xvcjojZWVlfS52anMtZGVmYXVsdC1za2luIC52anMtcGxheS1wcm9ncmVzcywudmpzLWRlZmF1bHQtc2tpbiAudmpzLXZvbHVtZS1sZXZlbHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LnZqcy1kZWZhdWx0LXNraW4gLnZqcy1iaWctcGxheS1idXR0b24sLnZqcy1kZWZhdWx0LXNraW4gLnZqcy1jb250cm9sLWJhcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjIpfS52anMtZGVmYXVsdC1za2luIC52anMtc2xpZGVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMyl9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PHZpZGVvIGlkPSJ2anMtbW92aWUiIGNsYXNzPSJ2aWRlby1qcyB2anMtZGVmYXVsdC1za2luIHZqcy1iaWctcGxheS1jZW50ZXJlZCI+PC92aWRlbz48c2NyaXB0PnZpZGVvanMoInZqcy1tb3ZpZSIsICcgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnNldHVwKSArICcpPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4nOwoKICAgICAgICAgIHRoaXMuYnVpbGRpbmcoJ2lmcmFtZScpOwogICAgICAgIH0sCiAgICAgICAgZmxvd3BsYXllciA6IGZ1bmN0aW9uIChpZCwgc2V0dXAsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHsKICAgICAgICAgIC8vIEZsb3dQbGF5ZXIgNiAoZmxhc2gpCiAgICAgICAgICAvLyBub3RlOiBwcm9ibGVtIHdpdGggZmxhc2hwbGF5ZXIKICAgICAgICAgIC8vIHN1cHBvcnQ6IG1wNCwgZmx2LCBmNHYsIG00diwgbW92CiAgICAgICAgICAvLyBzZXR1cDogaHR0cHM6Ly9mbG93cGxheWVyLm9yZy9kb2NzL3NldHVwLmh0bWwKICAgICAgICAgIC8vIGFwaTogaHR0cHM6Ly9mbG93cGxheWVyLm9yZy9kb2NzL2FwaS5odG1sCiAgICAgICAgICAvLyBkZW1vOiBodHRwOi8vZGVtb3MuZmxvd3BsYXllci5vcmcvYmFzaWNzL2pzLXNldHVwLWF1dG9wbGF5Lmh0bWwKICAgICAgICAgIC8vIGhkczogaHR0cHM6Ly9mbG93cGxheWVyLmVsZWN0cm90ZXF1ZS5vcmcvaHR0cHN0cmVhbWluZy1oZHMvZnA2CiAgICAgICAgICAvLyBobHM6IGh0dHA6Ly9kZW1vcy5mbG93cGxheWVyLm9yZy9hcGkvaGxzanMuaHRtbAogICAgICAgICAgLy8gZmx2OiBodHRwOi8vZGVtb3MuZmxvd3BsYXllci5vcmcvYmFzaWNzL2Zsdi5odG1sCgogICAgICAgICAgdGhpcy5nZXRUYXJnZXROb2RlKGlkKTsKICAgICAgICAgIHRoaXMuYXJncyA9IGFyZ3VtZW50czsKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IEFhay5zZXRQcm9wZXJ0aWVzKHRoaXMuYXR0cmlidXRlcywgYXR0cmlidXRlcyB8fCB7fSk7CiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwoKICAgICAgICAgIHRoaXMuc2V0dXAgPSBzZXR1cDsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3Jvc3NTZXR1cCA9PT0gdHJ1ZSkgewogICAgICAgICAgICB0aGlzLnNldHVwID0gewogICAgICAgICAgICAgIHdpZHRoIDogc2V0dXAud2lkdGggfHwgdGhpcy5hdHRyaWJ1dGVzLndpZHRoLAogICAgICAgICAgICAgIGhlaWdodCA6IHNldHVwLmhlaWdodCB8fCB0aGlzLmF0dHJpYnV0ZXMuaGVpZ2h0LAogICAgICAgICAgICAgIGF1dG9wbGF5IDogc2V0dXAuYXV0b3BsYXkgfHwgdGhpcy5hdXRvcGxheSwKICAgICAgICAgICAgICBwcmVsb2FkIDogJ2F1dG8nCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChzZXR1cC50eXBlID09PSAnaGxzJykgewogICAgICAgICAgICAgIHRoaXMuc2V0dXAuc3dmID0gbG9jYXRpb24ucHJvdG9jb2wgKyAnLy9yZWxlYXNlcy5mbG93cGxheWVyLm9yZy82LjAuNS9mbG93cGxheWVyaGxzLnN3Zic7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5lbmdpbmUgPSAnaGxzanMnOwogICAgICAgICAgICB9IGVsc2UgaWYgKFsnbXA0JywgJ3dlYm0nLCAnb2dnJywgJ29ndiddLmluZGV4T2Yoc2V0dXAudHlwZSkgPT09IC0xKSB7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5zd2YgPSBsb2NhdGlvbi5wcm90b2NvbCArICcvL3JlbGVhc2VzLmZsb3dwbGF5ZXIub3JnLzYuMC41L2Zsb3dwbGF5ZXIuc3dmJzsKICAgICAgICAgICAgICB0aGlzLnNldHVwLmVuZ2luZSA9ICdmbGFzaCc7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC50eXBlID0gJ3ZpZGVvL2ZsYXNoJzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNldHVwLmNsaXAgPSB7CiAgICAgICAgICAgICAgc291cmNlcyA6IFt7CiAgICAgICAgICAgICAgICAgIHR5cGUgOiB0aGlzLmdldE1pbWVUeXBlKHRoaXMuc2V0dXAudHlwZSB8fCBzZXR1cC50eXBlKSwKICAgICAgICAgICAgICAgICAgc3JjIDogc2V0dXAuc291cmNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9OwogICAgICAgICAgfQoKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5zcmNkb2MgPSAnPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInICsgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy9yZWxlYXNlcy5mbG93cGxheWVyLm9yZy82LjAuNS9za2luL2Z1bmN0aW9uYWwuY3NzIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjExLjIubWluLmpzIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vcmVsZWFzZXMuZmxvd3BsYXllci5vcmcvNi4wLjUvZmxvd3BsYXllci5taW4uanMiPjwvc2NyaXB0PjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+aHRtbCwgYm9keXtwYWRkaW5nOjA7IG1hcmdpbjowO308L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGlkPSJmcC1tb3ZpZSI+PC9kaXY+PHNjcmlwdD5mbG93cGxheWVyKCIjZnAtbW92aWUiLCAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXR1cCkgKyAnKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPic7CgogICAgICAgICAgdGhpcy5idWlsZGluZygnaWZyYW1lJyk7CiAgICAgICAgfSwKICAgICAgICBncmluZHBsYXllciA6IGZ1bmN0aW9uIChpZCwgc2V0dXAsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHsKICAgICAgICAgIC8vIEdyaW5kUGxheWVyIDEgKGZsYXNoKQogICAgICAgICAgLy8gc2V0dXA6IGh0dHA6Ly9vc21maGxzLmt1dHUucnUvZG9jcy9ncmluZC8KICAgICAgICAgIC8vIHN1cHBvcnQ6IGhscywgcnRtcAoKICAgICAgICAgIHRoaXMuZ2V0VGFyZ2V0Tm9kZShpZCk7CiAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgfHwge30pOwogICAgICAgICAgdGhpcy5vcHRpb25zID0gQWFrLnNldFByb3BlcnRpZXModGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKCiAgICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNyb3NzU2V0dXAgPT09IHRydWUpIHsKICAgICAgICAgICAgdGhpcy5zZXR1cCA9IHsKICAgICAgICAgICAgICBzcmMgOiBzZXR1cC5zb3VyY2UsCiAgICAgICAgICAgICAgc3RyZWFtVHlwZSA6ICJsaXZlIiwKICAgICAgICAgICAgICBzY2FsZU1vZGUgOiAibGV0dGVyYm94IiwKICAgICAgICAgICAgICBhdXRvUGxheSA6IHNldHVwLmF1dG9wbGF5IHx8IHRoaXMuYXV0b3BsYXkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNldHVwLnR5cGUgPT09ICdobHMnKSB7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5wbHVnaW5faGxzID0gIi8vcmVla3NpdGUuY29tL3B1YmxpYy9zd2YvZmxhc2hsc09TTUYuc3dmIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2V0dXAucHJveHkgPT09IHRydWUpIHsKICAgICAgICAgICAgICB0aGlzLnNldHVwLnNyYyA9ICcvL3d3dy5kaWFuc2hpYm8uY29tL2ZldGNoLnBocC8nICsgc2V0dXAuc291cmNlLnN1YnN0cmluZyhzZXR1cC5zb3VyY2UuaW5kZXhPZignLy8nKSArIDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnNyYyA9IHNldHVwLnN3ZiB8fCB0aGlzLmF0dHJpYnV0ZXMuc3JjIHx8ICIvL3JlZWtzaXRlLmNvbS9wdWJsaWMvc3dmL0dyaW5kUGxheWVyLnN3ZiI7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuaGVpZ2h0ID0gc2V0dXAuaGVpZ2h0IHx8IHRoaXMuYXR0cmlidXRlcy5oZWlnaHQ7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMud2lkdGggPSBzZXR1cC53aWR0aCB8fCB0aGlzLmF0dHJpYnV0ZXMud2lkdGg7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuZmxhc2h2YXJzID0gQWFrLnNlcmlhbGl6ZSh0aGlzLnNldHVwKTsKCiAgICAgICAgICB0aGlzLmJ1aWxkaW5nKCdlbWJlZCcpOwogICAgICAgIH0sCiAgICAgICAgdmxjIDogZnVuY3Rpb24gKGlkLCBzZXR1cCwgYXR0cmlidXRlcywgb3B0aW9ucykgewogICAgICAgICAgLy8gVkxDIFdlYiBQbHVnaW4gKHBsdWdpbikKICAgICAgICAgIC8vIGRvYzogaHR0cDovL3Rpbnl1cmwuY29tL29tbHpwMzkKICAgICAgICAgIC8vIHBsdWdpbnM6IGFib3V0OnBsdWdpbnMKICAgICAgICAgIC8vIGNocm9tZTovL2ZsYWdzLyNlbmFibGUtbnBhcGkKICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL25wYXBpLWRlcHJlY2F0aW9uCiAgICAgICAgICAvLyBJbiBTZXB0ZW1iZXIgMjAxNSAoQ2hyb21lIDQ1KSB3ZSB3aWxsIHJlbW92ZSB0aGUgb3ZlcnJpZGUgYW5kIE5QQVBJIHN1cHBvcnQgd2lsbCBiZSBwZXJtYW5lbnRseSByZW1vdmVkIGZyb20gQ2hyb21lLiBJbnN0YWxsZWQgZXh0ZW5zaW9ucyB0aGF0IHJlcXVpcmUgTlBBUEkgcGx1Z2lucyB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIGxvYWQgdGhvc2UgcGx1Z2lucy4KCiAgICAgICAgICB0aGlzLm5hbWUgPSAndmxjJzsKICAgICAgICAgIHRoaXMuZ2V0VGFyZ2V0Tm9kZShpZCk7CiAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgfHwge30pOwogICAgICAgICAgdGhpcy5vcHRpb25zID0gQWFrLnNldFByb3BlcnRpZXModGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKCiAgICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNyb3NzU2V0dXAgPT09IHRydWUpIHsKICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnNyYyA9IHNldHVwLnNvdXJjZTsKICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCA9IHNldHVwLmhlaWdodCB8fCB0aGlzLmF0dHJpYnV0ZXMuaGVpZ2h0OwogICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMud2lkdGggPSBzZXR1cC53aWR0aCB8fCB0aGlzLmF0dHJpYnV0ZXMud2lkdGg7CiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5jb250cm9scyA9IHRydWU7CiAgICAgICAgICAgIGlmIChzZXR1cC5hdXRvcGxheSB8fCB0aGlzLmF1dG9wbGF5KSB7CiAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmF1dG9wbGF5ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy50eXBlID0gImFwcGxpY2F0aW9uL3gtdmxjLXBsdWdpbiI7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucGx1Z2luc3BhZ2UgPSAiaHR0cDovL3d3dy52aWRlb2xhbi5vcmciOwogICAgICAgICAgdGhpcy5idWlsZGluZygnZW1iZWQnKTsKICAgICAgICB9LAogICAgICAgIGh0bWw1IDogZnVuY3Rpb24gKGlkLCBzZXR1cCwgYXR0cmlidXRlcywgb3B0aW9ucykgeyAKICAgICAgICAgIC8vIFZpZGVvIFRhZyAoaHRtbDUpCiAgICAgICAgICAvLyBiYXNpY3M6IGh0dHBzOi8vaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3ZpZGVvL2Jhc2ljcy8KICAgICAgICAgIC8vIHRhZzogaHR0cDovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvdGFnX3ZpZGVvLmFzcAogICAgICAgICAgLy8gc3VwcG9ydDogbXA0LCB3ZWJtLCBvZ2cKICAgICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvaHRtbDUvdGVzdHMvdmlkZW8uaHRtbAoKICAgICAgICAgIHRoaXMub3B0aW9ucyA9IEFhay5zZXRQcm9wZXJ0aWVzKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7fSk7CgogICAgICAgICAgdGhpcy5nZXRUYXJnZXROb2RlKGlkKTsKICAgICAgICAgIHRoaXMuYXJncyA9IGFyZ3VtZW50czsKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IEFhay5zZXRQcm9wZXJ0aWVzKHt9LCBzZXR1cCB8fCB7fSk7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuc3JjID0gc2V0dXAuc291cmNlOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmlkID0gdGhpcy5hdHRyaWJ1dGVzLm5hbWUgPSBBYWsuZ2VuZXJhdGVJRCgpOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCA9IHRoaXMuYXR0cmlidXRlcy5oZWlnaHQgfHwgdGhpcy50YXJnZXQubm9kZS5jbGllbnRIZWlnaHQgfHwgIjEwMCUiOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLndpZHRoID0gdGhpcy5hdHRyaWJ1dGVzLndpZHRoIHx8IHRoaXMudGFyZ2V0Lm5vZGUuY2xpZW50V2lkdGggfHwgIjEwMCUiOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnR5cGUgPSB0aGlzLmdldE1pbWVUeXBlKHRoaXMuYXR0cmlidXRlcy50eXBlKTsKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5jb250cm9scyA9ICdjb250cm9scyc7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucHJlbG9hZCA9ICdub25lJzsKICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuYXV0b3BsYXkgfHwgdGhpcy5hdXRvcGxheSkgewogICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuYXV0b3BsYXkgPSAnYXV0b3BsYXknOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOyBtYXJnaW46MCBhdXRvOyc7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsudW5zZXRQcm9wZXJ0aWVzKHRoaXMuYXR0cmlidXRlcywgJ3NvdXJjZScpOwoKICAgICAgICAgIHRoaXMuYnVpbGRpbmcoJ3ZpZGVvJyk7CiAgICAgICAgfQogICAgICB9OwogICAgICAKICAgICAgcmV0dXJuIG5ldyBQbGF5ZXIoKTsKICAgIH0sCiAgICBydWxlcyA6IHsKICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgLy8gQW50aS1BZGJsb2NrIEtpbGxlcgogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBzZXR0aW5ncyA6IHsKICAgICAgICBob3N0IDogWydsb2NhbGhvc3QnLCAncmVlay5naXRodWIuaW8nLCAncmVla3NpdGUuY29tJ10sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgaWYgKC9cL2FudGktYWRibG9jay1raWxsZXIoLXBhZ2VzKT9cLyQvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpKSB7CiAgICAgICAgICAgIHZhciBzZXR0aW5nc0JveCA9IEFhay5nZXRFbGVtZW50KCcjYWFrLXNldHRpbmdzLWJveCcpOwogICAgICAgICAgICB2YXIgc2V0dGluZ3NOb3RpY2UgPSBBYWsuZ2V0RWxlbWVudCgnI2Fhay1zZXR0aW5ncy1ub3RpY2UnKTsKCiAgICAgICAgICAgIGlmICghQWFrLnVzZUdNKSB7CiAgICAgICAgICAgICAgc2V0dGluZ3NOb3RpY2UucXVlcnlTZWxlY3RvcignZGl2JykuaW5uZXJIVE1MID0gJ0luIG5hdGl2ZSBtb2RlLCB5b3UgbXVzdCBlZGl0IHRoZSBvcHRpb25zIG1hbnVhbGx5OiA8YSBocmVmPSInICsgQWFrLm5hdGl2ZVVSTCArICciPlNlZTwvYT4nOwogICAgICAgICAgICB9IGVsc2UgaWYgKHNldHRpbmdzQm94ICYmIHNldHRpbmdzTm90aWNlKSB7CiAgICAgICAgICAgICAgc2V0dGluZ3NOb3RpY2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICBzZXR0aW5nc0JveC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgICBBYWsuaW5mbygnR00gc3RvcmFnZTonLCBBYWsuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICAgQWFrLmluZm8oJ0dNIG9wdGlvbnM6JywgQWFrLm9wdHMpOwogICAgICAgICAgICAgIEFhay5pbmZvKCdHTSBhcGk6JywgQWFrLnVzZUdNICYmIEFhay5hcGlHTSgpKTsKCiAgICAgICAgICAgICAgLy8gdXNlciBjb25maWcKICAgICAgICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICAgICAgICB0YWcgOiAnZGl2JywKICAgICAgICAgICAgICAgIGh0bWwgOiAnVmVyc2lvbjogJyArIEFhay5nZXRWZXJzaW9uKCkgKyAnIDxicj5BYWtTY3JpcHQ6IHRydWUgPGJyPkFha0xpc3Q6ICcgKyAoIUFhay5nZXRFbGVtZW50KCcjazJVdzdpc0hyTW01SlhQMVZ3ZHhjNTY3WktjMWFaNEknKSkgKyAnIDxicj5Ccm93c2VyOiAnICsgQWFrLmdldEJyb3dzZXIoKSArICcgPGJyPlNjcmlwdE1hbmFnZXI6ICcgKyBBYWsuZ2V0U2NyaXB0TWFuYWdlcigpLAogICAgICAgICAgICAgICAgYXBwZW5kIDogJyNhYWstc2V0dGluZ3MtY29uZmlnJwogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAvLyBjcmVhdGUgb3B0aW9ucyAKICAgICAgICAgICAgICBmb3IgKHZhciBvcHROYW1lIGluIEFhay5vcHRpb25zKSB7CiAgICAgICAgICAgICAgICBpZiAoQWFrLm9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0TmFtZSkpIHsKICAgICAgICAgICAgICAgICAgdmFyIG9wdCA9IEFhay5vcHRpb25zW29wdE5hbWVdOwogICAgICAgICAgICAgICAgICB2YXIgY2hlY2tlZCA9IEFhay5vcHRzW29wdE5hbWVdID09PSB0cnVlID8gImNoZWNrZWQiIDogJyc7CiAgICAgICAgICAgICAgICAgIEFhay5jcmVhdGVFbGVtZW50KHsKICAgICAgICAgICAgICAgICAgICB0YWcgOiAnZGl2JywKICAgICAgICAgICAgICAgICAgICBodG1sIDogJzxpbnB1dCBpZD0iJyArIG9wdE5hbWUgKyAnIiBjbGFzcz0iY3NzLWNoZWNrYm94IiAnICsgY2hlY2tlZCArICcgdHlwZT0iJyArIG9wdC50eXBlICsgJyIvPjxsYWJlbCBmb3I9IicgKyBvcHROYW1lICsgJyIgdGl0bGU9IicgKyBvcHQuaW5mbyArICciIGNsYXNzPSJjc3MtbGFiZWwiPicgKyBvcHQubGFiZWwgKyAnPC9sYWJlbD4nLAogICAgICAgICAgICAgICAgICAgIGFwcGVuZCA6ICcjYWFrLXNldHRpbmdzLScgKyBvcHQuZ3JvdXAKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAvLyBzYXZlIG9wdGlvbnMgCiAgICAgICAgICAgICAgQWFrLm9uRXZlbnQoQWFrLmdldEVsZW1lbnQoIiNhYWstc2V0dGluZ3Mtc2F2ZSIpLCAiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3NzLWNoZWNrYm94Jyk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZWxlbXNbaV07CiAgICAgICAgICAgICAgICAgIGlmIChlbGVtLmNoZWNrZWQpIHsKICAgICAgICAgICAgICAgICAgICBBYWsuc2V0VmFsdWUoZWxlbS5pZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgQWFrLnNldFZhbHVlKGVsZW0uaWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KCdTYXZlZCAhJyk7CiAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgIC8vIENsZWFyIEdNIHN0b3JhZ2UKICAgICAgICAgICAgICBBYWsuYWRkQ29tbWFuZHMoewogICAgICAgICAgICAgICAgY2FwdGlvbiA6ICdDbGVhciBHTSBzdG9yYWdlJywKICAgICAgICAgICAgICAgIGV4ZWN1dGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIEFhay5kZWxldGVWYWx1ZSgpOwogICAgICAgICAgICAgICAgICB3aW5kb3cuYWxlcnQoJ0NsZWFyZWQgIScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB1c2Vyc2NyaXB0c19kb21haW5zIDogeyAvLyBSZWRpcmVjdCB0byBHaXRodWIKICAgICAgICBob3N0IDogWyd1c2Vyc2NyaXB0cy5vcmcnLCAndXNlcnNjcmlwdHMub3JnOjgwODAnLCAndXNlcnNjcmlwdHMtbWlycm9yLm9yZyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoLzE1NTg0MCQvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpKSB7CiAgICAgICAgICAgIEFhay5nbyhBYWsuaG9tZVVSTCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBvcGVudXNlcmpzX29yZyA6IHsKICAgICAgICBob3N0IDogWydvcGVudXNlcmpzLm9yZyddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlbGVtZW50ID0gQWFrLmdldEVsZW1lbnQoJ2FbaHJlZiQ9Ii9pc3N1ZXMiXScpOwogICAgICAgICAgaWYgKC9BbnRpLUFkYmxvY2tfS2lsbGVyX1JlZWsvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpICYmIGVsZW1lbnQpIHsKICAgICAgICAgICAgQWFrLmNvbmZpcm1SZXBvcnQoZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBncmVhc3lmb3JrX29yZyA6IHsKICAgICAgICBob3N0IDogWydncmVhc3lmb3JrLm9yZyddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlbGVtZW50ID0gQWFrLmdldEVsZW1lbnQoJ2FbaHJlZiQ9Ii9mZWVkYmFjayJdJyk7CiAgICAgICAgICBpZiAoLy1hbnRpLWFkYmxvY2sta2lsbGVyLXJlZWsvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpICYmIGVsZW1lbnQpIHsKICAgICAgICAgICAgQWFrLmNvbmZpcm1SZXBvcnQoZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBtb25rZXlndXRzX2NvbSA6IHsKICAgICAgICBob3N0IDogWydtb25rZXlndXRzLmNvbSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlbGVtZW50ID0gQWFrLmdldEVsZW1lbnQoJ2FbaHJlZio9ImNvZGUucGhwP25hdj1mb3J1bSJdJyk7CiAgICAgICAgICBpZiAoL21vbmtleWd1dHMuY29tXC9jb2RlLnBocFw/aWQ9MzUxLy50ZXN0KGxvY2F0aW9uLmhyZWYpICYmIGVsZW1lbnQpIHsKICAgICAgICAgICAgQWFrLmNvbmZpcm1SZXBvcnQoZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAvLyBTcGVjaWZpYwogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBibG9nc3BvdCA6IHsKICAgICAgICAvLyBObyBDb3VudHJ5IFJlZGlyZWN0IChOQ1IpCiAgICAgICAgLy8gUHJldmVudCBCbG9nZ2VyIGZyb20gUmVkaXJlY3RpbmcgdG8gQ291bnRyeS1TcGVjaWZpYyBEb21haW5zCiAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20vN3JtMzRqbwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2ZyL2ZvcnVtL2Rpc2N1c3Npb24vNTk1MwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy80OTAKICAgICAgICAvLyB0ZXN0OiBodHRwOi8vdGlueXVybC5jb20vbm9tY3hrYwogICAgICAgIGhvc3QgOiBbJy5ibG9nc3BvdC4nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKEFhay5pc1RvcGZyYW1lKSB7IC8vIGZpeCByZWRpcmV0aW9uIGxvb3AKICAgICAgICAgICAgdmFyIGJsb2cgPSBsb2NhdGlvbi5ob3N0LnJlcGxhY2UoJ3d3dy4nLCAnJykuc3BsaXQoIi4iKTsKICAgICAgICAgICAgaWYgKGJsb2dbYmxvZy5sZW5ndGggLSAxXSAhPSAiY29tIikgewogICAgICAgICAgICAgIHZhciBwYXRoID0gbG9jYXRpb24uaHJlZi5zcGxpdCgiLyIpLnNsaWNlKDMpLmpvaW4oJy8nKTsKICAgICAgICAgICAgICBBYWsuZ28oImh0dHA6Ly8iICsgYmxvZ1swXSArICIuYmxvZ3Nwb3QuY29tL25jci8iICsgcGF0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJsb2dzcG90X2tub3dsZXQzMzg5IDogewogICAgICAgIC8vIG5vdGU6IGFsc28gYWRkZWQgYWJwIHJ1bGUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODMKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vQTNtQ1hRNWkKICAgICAgICBob3N0IDogWydrbm93bGV0MzM4OS5ibG9nc3BvdC4nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldExvY2FsKCdub2FkJywgZmFsc2UpOwogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjZ0FkcyB7IGhlaWdodDogMTdweDsgfSAjZ0FkMiB7IGhlaWdodDogMTdweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdXB0b2JveF91cHRvc3RyZWFtIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zNTEKICAgICAgICBob3N0IDogWyd1cHRvYm94LmNvbScsICd1cHRvc3RyZWFtLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBPbGQgc29sdXRpb24gW2RlcHJlY2F0ZWRdCiAgICAgICAgICB2YXIgaWQgPSBsb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvWzAtOWEtel17MTJ9Lyk7CiAgICAgICAgICBpZiAoaWQgIT09IG51bGwpIHsKICAgICAgICAgICAgQWFrLmFkZFN0eWxlKCIjIiArIGlkWzBdICsgIiB7IGhlaWdodDogMTJweDsgfSIpOwogICAgICAgICAgfQogICAgICAgICAgLy8gTmV3IDEyLjA1LjIwMTQKICAgICAgICAgIC8vICsgYWJwIHJ1bGUgKGFsdGVybmF0aXZlIHNvbHV0aW9uKQogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWRibG9ja3RyYXAgeyBoZWlnaHQ6IDEycHg7IH0iKTsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHJlbW92ZSBhZHMKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcqW3NyY149Imh0dHA6Ly9hZHMudXB0b2JveC5jb20vIl0sKltocmVmXj0iaHR0cDovL2Fkcy51cHRvYm94LmNvbS8iXScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYW5pc3Vic2lhX2NvbSA6IHsKICAgICAgICBob3N0IDogWydhbmlzdWJzaWEuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vICsgYWJwIHJ1bGUgI0AjLmFkc2FudGlsb2sKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFkc2FudGlsb2sgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmpBbnRpQmxvY2sgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5DZWtCbG9rID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBmcmVlZ2FtZXNlcnZlcmhvc3RfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTEyCiAgICAgICAgaG9zdCA6IFsnZnJlZWdhbWVzZXJ2ZXJob3N0LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNmYWIxMyB7IGhlaWdodDogMTFweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZWxhaG1hZF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsnZWxhaG1hZC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWRibG9jayB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBtcnR6Y21wM19uZXQgOiB7CiAgICAgICAgaG9zdCA6IFsnbXJ0emNtcDMubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLnJ0bV9hZCB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBoZWlnaHRfbXlUZXN0QWQgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyNDEKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTgzCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI5MQogICAgICAgIGhvc3QgOiBbJ2JrbmltZS5jb20nLCAnZ280dXAuY29tJywgJ2RlYnJpZG8uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLm15VGVzdEFkIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlYnJpZGZhc3RfbmV0d29yayA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9lbi9mb3J1bS9kaXNjdXNzaW9uLzk0MDYKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9lbi9mb3J1bS9kaXNjdXNzaW9uLzcwMTMKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTI3MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy83NjkKICAgICAgICBob3N0IDogWydkZWJyaWRmYXN0LmNvbScsICdnZXRkZWJyaWQuY29tJywgJ2RlYnJpZC51cycsICdsZWVjaGVyLnVzJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLm15VGVzdEFkLCAubXkyNEFkLCAubmFiaWwgeyBoZWlnaHQ6IDFweDsgfSIpOwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NpbXBsZUFkJykuaW5uZXJIVE1MID0gJzxwIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij5kZWJyaWRmYXN0LmNvbTwvcD4nOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmdfZ2xlZGFpX3R2IDogewogICAgICAgIGhvc3QgOiBbJ2JnLWdsZWRhaS50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5teUFkIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRoZXBjc3B5X2NvbSA6IHsgLy8gaHR0cDovL3RoZXBjc3B5LmNvbS9yZWFkL2hvd190b19ibG9ja19hZGJsb2NrLwogICAgICAgIGhvc3QgOiBbJ3RoZXBjc3B5LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5teVRlc3RBZCB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5ibG9ja2VkIHsgZGlzcGxheTogbm9uZTsgfSIpOwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJy5ibG9ja2VkJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICB2Z19lMjRfbm8gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI5MgogICAgICAgIGhvc3QgOiBbJ3ZnLm5vJywgJ2UyNC5ubyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlLCBiZWNhdXNlIEVhc3lMaXN0IGFsbG93IGFsbCBoaWRkZW4gZWxlbWVudHMuCiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5hZCB7IGRpc3BsYXk6IG5vbmU7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGF1dG9tb2JpbGVfc3BvcnRpdmVfY29tIDogewogICAgICAgIGhvc3QgOiBbJ2F1dG9tb2JpbGUtc3BvcnRpdmUuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLm15VGVzdEFkIHsgaGVpZ2h0OiA1MXB4OyBkaXNwbGF5OiBub25lOyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBzbnN3X3VzIDogewogICAgICAgIGhvc3QgOiBbJ3Nuc3cudXMnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWRfMSB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB1cmxjaGVja2VyX25ldCA6IHsKICAgICAgICBob3N0IDogWyd1cmxjaGVja2VyLm5ldCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNhZGNoZWNrZXIgeyBoZWlnaHQ6IDIwcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNraXBsaW1pdGVfdHYgOiB7CiAgICAgICAgaG9zdCA6IFsnc2tpcGxpbWl0ZS50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoImRpdi5hZGR0aGlzX25hdGl2ZV90b29sYm94ICsgZGl2W2lkXSB7IGhlaWdodDogMTJweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmlsZWNvcmVfY29fbnogOiB7CiAgICAgICAgaG9zdCA6IFsnZmlsZWNvcmUuY28ubnonXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIuYWRzZW5zZSB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB0aG9tYXNfbl9ydXRoX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTExMQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9mdTd2a1VBMQogICAgICAgIGhvc3QgOiBbJ3Rob21hcy1uLXJ1dGguY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLkdvb2dsZSB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBpbnRlcmZhbnNfb3JnIDogewogICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly93d3cuaW50ZXJmYW5zLm9yZy9mb3J1bS8KICAgICAgICBob3N0IDogWydpbnRlcmZhbnMub3JnJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFkX2dsb2JhbF9oZWFkZXIgeyBoZWlnaHQ6IDFweDsgZGlzcGxheTogbm9uZTsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbWF4ZGVicmlkZXVyX2NvbSA6IHsKICAgICAgICBob3N0IDogWydtYXhkZWJyaWRldXIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmNsZWFyICsgZGl2W2lkXSB7IGhlaWdodDogMTJweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdG9wem9uZV9pdCA6IHsKICAgICAgICBob3N0IDogWyd0b3B6b25lLmx0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmZvcnVtQWQgeyBoZWlnaHQ6IDFweDsgZGlzcGxheTogbm9uZTsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbmFuYTEwX2NvX2lsIDogewogICAgICAgIGhvc3QgOiBbJy5uYW5hMTAuJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2FkdmVydC10cmFja2VyIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBsZWpfdHYgOiB7CiAgICAgICAgaG9zdCA6IFsncGxlai50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5hZHZlcnRfYm94IHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1hbmdhbWludF9jb20gOiB7CiAgICAgICAgLy8gbm90ZTogYWRkZWQgcnVsZSB0byBhbGxvdyAiLmFkNzI4IgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2lkL2ZvcnVtL2Rpc2N1c3Npb24vODUyNAogICAgICAgIGhvc3QgOiBbJ21hbmdhbWludC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIuYWQ3MjggeyBoZWlnaHQ6IDMxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlYnJpZGV1cnN0cmVhbV9mciA6IHsKICAgICAgICBob3N0IDogWydkZWJyaWRldXJzdHJlYW0uZnInXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjY29udGVudCBkaXZbaWRdW2FsaWduPWNlbnRlcl0geyBoZWlnaHQ6IDEycHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHByZWVtbGlua3NfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3ByZWVtbGlua3MuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2RpdmFkcyB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBoZW50YWlfdG8gOiB7CiAgICAgICAgaG9zdCA6IFsnaGVudGFpLnRvJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2hlbnRhaXRvMTIzIHsgaGVpZ2h0OiAxMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBwcm90b3R1cmtfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3Byb3RvdHVyay5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjcmVrbGFtIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11ZmFfZGUgOiB7CiAgICAgICAgaG9zdCA6IFsnbXVmYS5kZSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNsZWFkZXJib2FyZCB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNsYXJnZS1yZWN0YW5nbGUgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWQtaGVhZGVyLTQ2OHg2MCB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB3YXRjaGFyYWJfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3dhdGNoYXJhYi5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gKyBhZHAgcnVsZSB3YXRjaGFyYWIuY29tI0AjI2FkYmxvY2sKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2FkYmxvY2sgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZnJlZWRvbWlwX2NvbSA6IHsKICAgICAgICBob3N0IDogWydmcmVlZG9tLWlwLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5wdWJfdmVydGljYWwgaW5zLCAucHViX3ZlcnRpY2FsIGRpdiB7IGhlaWdodDogMTFweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgd2FrYW5pbV90diA6IHsKICAgICAgICBob3N0IDogWyd3YWthbmltLnR2J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2RldGVjdG9yIHsgZGlzcGxheTogbm9uZTsgfSIpOwogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjbm9wdWIgeyBkaXNwbGF5OiBibG9jazsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgc2ltcGx5X2RlYnJpZF9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzMzMgogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9iN01BWVhzNAogICAgICAgIGhvc3QgOiBbJ3NpbXBseS1kZWJyaWQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZHNieWdvb2dsZSA9IHt9OwogICAgICAgICAgQWFrLnV3LmFkc2J5Z29vZ2xlLmxvYWRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBtYW5nYTlfY29tIDogewogICAgICAgIGhvc3QgOiBbJ21hbmdhOS5jb20nLCAnbWFuZ2FiZWUuY28nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIuYWRibG9jayB7IGhlaWdodDogMzFweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgb25lbWFuZ2EyX2NvbSA6IHsKICAgICAgICBob3N0IDogWydvbmVtYW5nYTIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFmc19hZHMgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbWFuZ2FiaXJkX2NvbSA6IHsKICAgICAgICBob3N0IDogWydtYW5nYWJpcmQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFmc19hZHMgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAga29kaWxpdmVfZXUgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE1MjgKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vWnh2WEtxdGMKICAgICAgICBob3N0IDogWydrb2RpbGl2ZS5ldSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5BZCB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBiYWNraW5fbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWJhY2tpbi5uZXQKICAgICAgICBob3N0IDogWydiYWNraW4ubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2RpdmFkIHsgaGVpZ2h0OiAzMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBtb2JpbGVfdHJhY2tlcl9mcmVlX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTA4MgogICAgICAgIGhvc3QgOiBbJ21vYmlsZS10cmFja2VyLWZyZWUuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI215QWRzIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdvcmt1cGxvYWRfY29tIDogewogICAgICAgIC8vIG5vdGU6IG9iZnVzY2F0ZWQKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTMzNAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjkwCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL0NQemQyU3d4CiAgICAgICAgaG9zdCA6IFsnd29ya3VwbG9hZC5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFkQmxvY2ssIC5hZHNieWdvb2dsZSwgI3NhZCB7IGhlaWdodDogMTFweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdG9kYXlfaW4gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9aW50b2RheS5pbgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWJ1c2luZXNzdG9kYXkuaW4KICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vZ3o1MzlHN20KICAgICAgICBob3N0IDogWyJpbnRvZGF5LmluIiwgImJ1c2luZXNzdG9kYXkuaW4iXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoJyNhZGJvY2tlcl9hbHQgeyBkaXNwbGF5OiBub25lOyB9Jyk7CiAgICAgICAgICBBYWsudXcub3BlblBvcHVwID0gZnVuY3Rpb24oKXt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgamNfbXBfY29tIDogewogICAgICAgIC8vIGJ5OiBHaXdheXVtZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTk3CiAgICAgICAgaG9zdCA6IFsiamMtbXAuY29tIl0sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCcuYWRzZW5zZSB7d2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHZpc2liaWxpdHk6IGhpZGRlbjsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTt9Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtYXJpYWdlX2ZyYW5jb19tYXJvY2Fpbl9uZXQgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bWFyaWFnZS1mcmFuY28tbWFyb2NhaW4ubmV0CiAgICAgICAgaG9zdCA6IFsibWFyaWFnZS1mcmFuY28tbWFyb2NhaW4ubmV0Il0sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCcjbXlfYWRfZGl2IHtoZWlnaHQ6IDFweDt9Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBoYXBweV9oYWNrX3J1IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWhhcHB5LWhhY2sucnUKICAgICAgICBob3N0IDogWydoYXBweS1oYWNrLnJ1J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2Jsb2NrYmxvY2tGNCB7dmlzaWJpbGl0eTppbnZpc2libGU7ZGlzcGxheTpub25lO30gI2Jsb2NrYmxvY2tGNCB0ZCB7dmlzaWJpbGl0eTppbnZpc2libGU7ZGlzcGxheTpub25lO30gI2Jsb2NrYmxvY2tGNCB0ZCBwIHt2aXNpYmlsaXR5OmludmlzaWJsZTtkaXNwbGF5Om5vbmU7fSAjYmxvY2tibG9ja0QzIHt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTpibG9jazt9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBmb3JiZXNfY29tIDogewogICAgICAgIC8vIGJ5OiBHaXdheXVtZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84NjUKICAgICAgICBob3N0IDogWydmb3JiZXMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZignL3dlbGNvbWUnKSA+IC0xKSB7CiAgICAgICAgICAgIEFhay5zZXRDb29raWUoJ3dlbGNvbWVBZCcsICd0cnVlJywgODY0MDAwMDAsICcvJyk7CiAgICAgICAgICAgIEFhay5zZXRDb29raWUoJ2RhaWx5V2VsY29tZUNvb2tpZScsICd0cnVlJywgODY0MDAwMDAsICcvJyk7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IEFhay5nZXRDb29raWUoJ3RvVXJsJykgfHwgJ2h0dHA6Ly93d3cuZm9yYmVzLmNvbS8nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgYmFpdF9hZHNieWdvb2dsZSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTQ3CiAgICAgICAgaG9zdCA6IFsnYml0Y29pbmFsaWVucy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdpbnMuYWRzYnlnb29nbGUnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJhaXRfdGVzdGVyIDogewogICAgICAgIGhvc3QgOiBbJ29zb2FyY2FkZS5jb20nLCAnZDNicmlkNHkwdS5pbmZvJywgJ2ZpbGVpY2UubmV0JywgJ25vc3RlYW0ucm8nLCAnb3BlbnJ1bm5lci5jb20nLCAnZWFzeWJpbGxldHMuY29tJywgJ3Nwb3guZnInLCAneW92b3lhZ2VzLmNvbScsICd0djMuY28ubnonLCAnZnJlZWFsbG11c2ljLmluZm8nLCAncHV0bG9ja2VyLmNvbScsICdzb2Nrc2hhcmUuY29tJywgJ2RyYW1hcGFzc2lvbi5jb20nLCAneW9vY2xpY2suY29tJywgJ29ubGluZS51YSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiN0ZXN0ZXInKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJhaXRfYWRkIDogewogICAgICAgIGhvc3QgOiBbJ2ZpbGVjb20ubmV0JywgJ3Vwc2hhcmUub3JnJywgJ3NraXBweWZpbGUuY29tJywgJ213ZmlsZXMubmV0JywgJ3VwLWZsb3cub3JnJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkZCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmFpdF9hZHBidGVzdCA6IHsKICAgICAgICBob3N0IDogWydsZWFndWVzZWNyZXRhcnkuY29tJywgJ3Rla25vZ29kcy5jb20nLCAnaGVsbHNtZWRpYS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjYWRwYnRlc3QnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJhaXRfYWR0ZXN0ZXIgOiB7CiAgICAgICAgaG9zdCA6IFsnZnJlZXNwb3J0c2JldC5jb20nLCAnc3BvcnRzcGxheXMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkLXRlc3RlcicpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdGdvX3R2X2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMzAzCiAgICAgICAgaG9zdCA6IFsndGdvLXR2LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNhZGIsICNiYW5uZXJhZDEsIC5sb2FkX3N0cmVhbSB7IGRpc3BsYXk6IG5vbmU7IH0iKTsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I3Rlc3RlcicpOwogICAgICAgIH0sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcudGhyZXNob2xkID0gMTAwMDsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcuY2hhdF9mcmFtZScpOyAvLyBidWcgcmVsb2FkIGlmcmFtZQogICAgICAgIH0KICAgICAgfSwKICAgICAgZnJlZWdhbWVob3N0aW5nX25sIDogewogICAgICAgIGhvc3QgOiBbJ2ZyZWVnYW1laG9zdGluZy5ubCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZHRlc3QnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRoZXdlYXRoZXJzcGFjZV9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsndGhld2VhdGhlcnNwYWNlLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhYi1ibC1hZHZlcnRpc2VtZW50Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBjbGVvZGVza3RvcF9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzcxMQogICAgICAgIGhvc3QgOiBbJ2NsZW9kZXNrdG9wLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNteVRlc3RBZCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgaW1hZ2VyYWlkZXJfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84MjYKICAgICAgICBob3N0IDogWydpbWFnZXJhaWRlci5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjbXlHQ29udGFpbmVyJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICB2b2ljaV9mciA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9mci9mb3J1bS9kaXNjdXNzaW9uLzEwMDkzCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzgyNgogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS96RVZRSFRpRAogICAgICAgIGhvc3QgOiBbJ3ZvaWNpLmZyJywgJ3Byb2dyYW1tZS10di5uZXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjc2FzX3NjcmlwdDInKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1pbF9pbmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE2NTIKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vNDc0Tlp6UEoKICAgICAgICBob3N0IDogWydtaWwuaW5rJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2Fkc19kaXYnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGN1YmV1cGxvYWRfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2VuL2ZvcnVtL2Rpc2N1c3Npb24vNTkxOQogICAgICAgIGhvc3QgOiBbJ2N1YmV1cGxvYWQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5jcmVhdGVFbGVtZW50KHsKICAgICAgICAgICAgdGFnIDogJ2lmcmFtZScsCiAgICAgICAgICAgIG5hbWUgOiAnaWZyYW1lJywKICAgICAgICAgICAgc3JjIDogJ2Fib3V0OmJsYW5rJywKICAgICAgICAgICAgc3R5bGUgOiAnZGlzcGxheTpub25lOycsCiAgICAgICAgICAgIGFwcGVuZCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzdHJlYW00ZnJlZV9ldSA6IHsKICAgICAgICBob3N0IDogWydzdHJlYW00ZnJlZS5ldSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyArYWJwIGFsdCBzb2x1dGlvbgogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjanBheWRheScpOwogICAgICAgICAgQWFrLnV3LmpwYXlkYXlfYWxlcnQgPSAxOwogICAgICAgIH0KICAgICAgfSwKICAgICAgXzNkbmV3c19ydSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9ydS9mb3J1bS9kaXNjdXNzaW9uLzU3NTAKICAgICAgICBob3N0IDogWyczZG5ld3MucnUnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnYWRibG9ja3dhcm4nLCAxKTsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2VhckFkcyB7IHdpZHRoOiA0MDFweDsgfSIpOwogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjZWFyQWRzJyk7CiAgICAgICAgICBBYWsudXcuX19BVF9kZXRlY3RlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBfM2RzdGhlbV9lcyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT0zZHN0aGVtCiAgICAgICAgaG9zdCA6IFsnM2RzdGhlbS5lcyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvL0Fhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkge30pOwogICAgICAgIH0sCiAgICAgICAgb25CZWZvcmVTY3JpcHQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgLyoKICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgIGNvbnRhaW5zIDogJ21haW4uanMnLAogICAgICAgICAgICAgIGV4dGVybmFsIDogdHJ1ZSwKICAgICAgICAgICAgICBvdmVycmlkZSA6ICcvL3Bhc3RlYmluLmNvbS9yYXcvMnlHUlBoUlonCiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgKi8KICAgICAgICB9CiAgICAgIH0sCiAgICAgIF84bXVzZXNfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPThtdXNlcwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2ZvcnVtL2Rpc2N1c3Npb24vODUxNQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2VuL2ZvcnVtL2Rpc2N1c3Npb24vNjQwNwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9iTU5EeGVjcwogICAgICAgIGhvc3QgOiBbJzhtdXNlcy5jb20nXSwKICAgICAgICBvbkJlZm9yZVNjcmlwdCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgIGNvbnRhaW5zIDogInR5cGVvZiBleG8iLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgaGFwcHl0cmlwc19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9aGFwcHl0cmlwcwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9FV1NFYm52dgogICAgICAgIGhvc3QgOiBbJ2hhcHB5dHJpcHMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnY2FuUnVuJywgdHJ1ZSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBsZ19maXJtd2FyZV9yb21fY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWxnLWZpcm13YXJlLXJvbS5jb20KICAgICAgICBob3N0IDogWydsZy1maXJtd2FyZS1yb20uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgna2lsbGFkcycsIHRydWUpOwogICAgICAgIH0KICAgICAgfSwgICAgICAKICAgICAgbWlkX2RheV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bWlkLWRheS5jb20KICAgICAgICBob3N0IDogWydtaWQtZGF5LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ2NhblJ1bicsIHRydWUpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmFkdHZfbmV0d29yayA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1iYWR0di5pdAogICAgICAgIGhvc3QgOiBbJ2JhZHR2Lml0JywgJ2JhZHRhc3RlLml0JywgJ2JhZGdhbWVzLml0JywgJ2JhZGNvbWljcy5pdCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdhZEJsb2NrQ2hlY2tlZCcsICdkaXNhdHRpdm8nKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGluZGVwZW5kZW50X2NvX3VrIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWluZGVwZW5kZW50LmNvLnVrCiAgICAgICAgaG9zdCA6IFsnaW5kZXBlbmRlbnQuY28udWsnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnYWRibG9ja19kZXRlY3RlZCcsICdpZ25vcmVkJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBlc21hc19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZXNtYXMuY29tCiAgICAgICAgaG9zdCA6IFsnZXNtYXMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnb3BlbmVkX2FkYmJsb2NrJywgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGlub3kxdHZfbmV0d29yayA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1waW5veTF0dgogICAgICAgIGhvc3QgOiBbJ3Bpbm95MXR2LiddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ2FsbG93YWRzJywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBld2FsbHN0cmVldGVyX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1ld2FsbHN0cmVldGVyLmNvbQogICAgICAgIGhvc3QgOiBbJ2V3YWxsc3RyZWV0ZXIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnT0FTX3JkbCcsIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYnVzaW5lc3Nfc3RhbmRhcmRfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWJ1c2luZXNzLXN0YW5kYXJkLmNvbQogICAgICAgIGhvc3QgOiBbJ2J1c2luZXNzLXN0YW5kYXJkLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ2Fkc0xvYWRlZCcsIDEpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgnX3B3JywgJ3QnKTsgICAgICAgICAgCiAgICAgICAgfQogICAgICB9LAogICAgICBleHByZXNzX25ldHdvcmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZmluYW5jaWFsZXhwcmVzcy5jb20KICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1pbmRpYW5leHByZXNzLmNvbQogICAgICAgIGhvc3QgOiBbJ2ZpbmFuY2lhbGV4cHJlc3MuY29tJywgJ2luZGlhbmV4cHJlc3MuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnUnVuQWRzJywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBpbmRpYXRpbWVzX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1pbmRpYXRpbWVzCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bWFsYXlhbGFtLnNhbWF5YW0uY29tCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL3p4dXN2eWYsIAogICAgICAgIGhvc3QgOiBbJ2luZGlhdGltZXMuY29tJywgJ3NhbWF5YW0uY29tJywgJ2JhbmdhbG9yZW1pcnJvci5jb20nXSwKICAgICAgICBvbkJlZm9yZVNjcmlwdCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgIGNvbnRhaW5zIDogJ1xcXFx4NjFcXFxceDY0XFxcXHg2MicsCiAgICAgICAgICAgICAgZXh0ZXJuYWwgOiBmYWxzZSwKICAgICAgICAgICAgICByZW1vdmUgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBjb250YWlucyA6ICdmdW5jdGlvbiBpbml0QmxvY2snLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdGhlY2hpdmVfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNDUzCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1RkcFB5cmJiCiAgICAgICAgaG9zdCA6IFsndGhlY2hpdmUuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3csIHsKICAgICAgICAgICAgICBzdGVwaGFuZURldGVjdG9yIDogewogICAgICAgICAgICAgICAgdmFsdWUgOiB7CiAgICAgICAgICAgICAgICAgIGhvb2sgOiBmdW5jdGlvbiAoY2IpIHsKICAgICAgICAgICAgICAgICAgICBjYihmYWxzZSk7CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGluaXQgOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0UmVzdWx0IDogZnVuY3Rpb24gKCkge30KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB3cml0YWJsZSA6IGZhbHNlCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcmljaG9ucmFpbHNfY29tIDogewogICAgICAgIC8vIGJ5OiBHaXdheXVtZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNDQ3CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL0V3ZndnOEJHCiAgICAgICAgaG9zdCA6IFsncmljaG9ucmFpbHMuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBhZHNCeUdvb2dsZUh0bWwgPSAnIjxpbnMraWQ9ImFzd2lmdF8wX2V4cGFuZCIrc3R5bGU9ImRpc3BsYXk6aW5saW5lLXRhYmxlO2JvcmRlcjpub25lO2hlaWdodDo5MHB4O21hcmdpbjowO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OnZpc2libGU7d2lkdGg6NzUwcHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCI+PGlucytpZD0iYXN3aWZ0XzBfYW5jaG9yIitzdHlsZT0iZGlzcGxheTpibG9jaztib3JkZXI6bm9uZTtoZWlnaHQ6OTBweDttYXJnaW46MDtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7dmlzaWJpbGl0eTp2aXNpYmxlO3dpZHRoOjc1MHB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQiPjxpZnJhbWUrbWFyZ2lud2lkdGg9IjAiK21hcmdpbmhlaWdodD0iMCIrdnNwYWNlPSIwIitoc3BhY2U9IjAiK2FsbG93dHJhbnNwYXJlbmN5PSJ0cnVlIitzY3JvbGxpbmc9Im5vIithbGxvd2Z1bGxzY3JlZW49InRydWUiK29ubG9hZD0idmFyK2k9dGhpcy5pZCxzPXdpbmRvdy5nb29nbGVfaWZyYW1lX29uY29weSxIPXMmYW1wOyZhbXA7cy5oYW5kbGVycyxoPUgmYW1wOyZhbXA7SFtpXSx3PXRoaXMuY29udGVudFdpbmRvdyxkO3RyeXtkPXcuZG9jdW1lbnR9Y2F0Y2goZSl7fWlmKGgmYW1wOyZhbXA7ZCZhbXA7JmFtcDsoIWQuYm9keXx8IWQuYm9keS5maXJzdENoaWxkKSl7aWYoaC5jYWxsKXtzZXRUaW1lb3V0KGgsMCl9ZWxzZStpZihoLm1hdGNoKXt0cnl7aD1zLnVwZChoLGkpfWNhdGNoKGUpe313LmxvY2F0aW9uLnJlcGxhY2UoaCl9fSIraWQ9ImFzd2lmdF8wIituYW1lPSJhc3dpZnRfMCIrc3R5bGU9ImxlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDsiK3dpZHRoPSI3NTAiK2ZyYW1lYm9yZGVyPSIwIitoZWlnaHQ9IjkwIj48L2lmcmFtZT48L2lucz48L2lucz4iJzsKICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICB1cmwgOiAkKCIuYXJ0aWNsZS1jb250ZW50IikuZGF0YSgidXJsIiksCiAgICAgICAgICAgICAgZGF0YVR5cGUgOiAic2NyaXB0IiwKICAgICAgICAgICAgICBtZXRob2QgOiAicG9zdCIsCiAgICAgICAgICAgICAgZGF0YSA6IHsKICAgICAgICAgICAgICAgIGh0bWwgOiBhZHNCeUdvb2dsZUh0bWwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHN1Y2Nlc3MgOiBmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICB2YXIgZXhlYyA9IHJlc3VsdC5yZXBsYWNlKCIkKCcuYXJ0aWNsZS1jb250ZW50JykiLCAiJCgnLmFydGljbGUtY29udGVudC0yJykiKTsKICAgICAgICAgICAgICAgIG5ldyBGdW5jdGlvbihleGVjKSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICQoIi5hcnRpY2xlLWNvbnRlbnQiKS5hZnRlcignPGRpdiBjbGFzcz0iYXJ0aWNsZS1jb250ZW50LTIiPjwvZGl2PicpLnJlbW92ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBybXByZXB1c2JfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3JtcHJlcHVzYi5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnam90X3ZpZXdlcicsIDMpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbmVvZHJpdmVfY28gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwMDEKICAgICAgICBob3N0IDogWyduZW9kcml2ZS5jbyddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gUHJldmVudCBwb3B1bmRlcgogICAgICAgICAgQWFrLnNldENvb2tpZSgnS2lmUG9wQ250JywgMSwgbnVsbCwgJy9lbWJlZC8nKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGhlbnRhaWhhdmVuX29yZyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2dvcmhpbGwvdUJsb2NrL2lzc3Vlcy8xMzQwCiAgICAgICAgaG9zdCA6IFsnaGVudGFpaGF2ZW4ub3JnJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBQcmV2ZW50IHBvcHVuZGVyCiAgICAgICAgICBBYWsuc2V0Q29va2llKCdoaF9wcG5kcjEnLCAxKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2hoX3BwbmRyMicsIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJpbWVzaGFyZV90diA6IHsKICAgICAgICBob3N0IDogWydwcmltZXNoYXJlLnR2J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkYmxvY2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlYnJpZG5ldF9hbmRfbGl2ZWRlYnJpZCA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1kZWJyaWRuZXQKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1saXZlZGVicmlkCiAgICAgICAgaG9zdCA6IFsnZGVicmlkbmV0LmNvbScsICdsaXZlZGVicmlkLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5teVRlc3RBZDIgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYubXlUZXN0QWQyJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBibHVlc2F0b3NoaV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzg3MwogICAgICAgIGhvc3QgOiBbJ2JsdWVzYXRvc2hpLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiN0ZXN0IHsgaGVpZ2h0OiAyODBweDsgfSIpOwogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjdGVzdCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcmF6ZXJjcnlwdF9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzg3MAogICAgICAgIGhvc3QgOiBbJ3JhemVyY3J5cHQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI3Rlc3QgeyBoZWlnaHQ6IDI1MHB4OyB9Iik7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiN0ZXN0Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzYXRvc2hpZW1waXJlX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODcyCiAgICAgICAgaG9zdCA6IFsnc2F0b3NoaWVtcGlyZS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjdGVzdCB7IGhlaWdodDogMjUwcHg7IH0iKTsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I3Rlc3QnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG9uZWFkZmF1Y2V0X2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODcxCiAgICAgICAgaG9zdCA6IFsnb25lYWRmYXVjZXQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI3Rlc3QgeyBoZWlnaHQ6IDI1MHB4OyB9Iik7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiN0ZXN0Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBqa2FuaW1lX25ldCA6IHsKICAgICAgICBob3N0IDogWydqa2FuaW1lLm5ldCddLAogICAgICAgIC8vIEBAfHxqa2FuaW1lLm5ldC9hc3NldHMvanMvYWR2ZXJ0aXNlbWVudDIuanMKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjcmVjbycpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgXzcyMHBta3ZfY29tIDogewogICAgICAgIGhvc3QgOiBbJzcyMHBta3YuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkdmVydCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGFpZHZlcnRzX2NvbSA6IHsKICAgICAgICBob3N0IDogWydwYWlkdmVydHMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2LmFmc19hZHMnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGl0YWxpYXR2X29yZyA6IHsKICAgICAgICBob3N0IDogWydpdGFsaWF0di5vcmcnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjZmFiMTMnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNocmlzc21vb3ZlX2NvbSA6IHsKICAgICAgICBob3N0IDogWydjaHJpc3Ntb292ZS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy9BYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZHNlcnZlcicpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXZlbnRodWJzX2NvbSA6IHsKICAgICAgICBob3N0IDogWydldmVudGh1YnMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2JsYWh5YmxhY2kxJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzdXBlcmFuaW1lc19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyOTUKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vRkRQQUtqVFEKICAgICAgICBob3N0IDogWydzdXBlcmFuaW1lcy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjYmFubmVyTG9qYScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZm9ydW1fcGFjX3JvbV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI0MwogICAgICAgIGhvc3QgOiBbJ2ZvcnVtLnBhYy1yb20uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2LmJhbm5lcl9hZHMnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpdHZfdHYgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyOTkKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vemNkZHZUdUMKICAgICAgICBob3N0IDogWydsaXR2LnR2J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2LnBsYXllcl9tYXNrJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBsZXZlbGRvd25fZnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU5NQogICAgICAgIGhvc3QgOiBbJ2xldmVsZG93bi5mciddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZGJsb2NrJyk7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZGJsb2NrdGVzdCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2xvYmVzbG90X2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTI0CiAgICAgICAgaG9zdCA6IFsnZ2xvYmVzbG90LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZGQnKTsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkZDEnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFudGVubmVzcG9ydF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsnYW50ZW5uZXNwb3J0LmNvbScsICdzZXJ2ZXJoZC5ldSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsgLy8gZm9yIGFudGVubmVzcG9ydAogICAgICAgICAgLy8gUmVtb3ZlIFB1YgogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoIiNwdWIgLnB1YmNsb3NlIik7CiAgICAgICAgICAvLyBSZWRpcmVjdCB0byBQbGF5ZXIKICAgICAgICAgIEFhay5zZXRFbGVtZW50KCcjcHViIC5lbWJlZCBpZnJhbWUnLCB7CiAgICAgICAgICAgIHNyYyA6ICcvZW1iZWQvZW1iZWQucGhwJwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBkaXNhYmxlQWxlcnRib3ggOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZW4vZm9ydW0vZGlzY3Vzc2lvbi84NjExCiAgICAgICAgaG9zdCA6IFsnZHJpdmVhcmFiaWEuY29tJywgJ3B1dGxvY2tlci5jb20nLCAnZG9hdG9vbHNpdGEuYWx0ZXJ2aXN0YS5vcmcnLCAnc29ja3NoYXJlLmNvbScsICdmcmVlLW1vdmllLWhvbWUuY29tJywgJ3BjLm9ubGluZTE0My5jb20nLCAna29vb3JhLmNvbScsICdzdHIzYW10di5jby5ucicsICdzdHIzYW10di5hbHRlcnZpc3RhLm9yZycsICdzdHIzYW0uYWx0ZXJ2aXN0YS5vcmcnLCAnZmlsZWNvbS5uZXQnLCAncGlwb2Nhcy50dicsICdnZW5lcmF0dXByZW1pdW0uYml6JywgJ21lZ2EtZGVicmlkLmV1JywgJ3ByZW1pdW1zdDByZS5ibG9nc3BvdC5jb20nLCAnZGwtcHJvdGVjdC5jb20nLCAnbmV3c2lubGV2ZWxzLmNvbScsICd2aXByYWNpbmcuYml6JywgJ2J1c2luZXNzdG9kYXkuaW4nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hbGVydCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2VuZXJhdHVwcmVtaXVtX2JpeiA6IHsKICAgICAgICBob3N0IDogWydnZW5lcmF0dXByZW1pdW0uYml6J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIERpc2FibGUgQ29uZmlybSBCb3gKICAgICAgICAgIC8vQWFrLnV3LmNvbmZpcm0gPSBmdW5jdGlvbiAoKXt9OwogICAgICAgICAgQWFrLnNldENvb2tpZSgnZ2VuZXJhJywgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbmV3c3RhdGVzbWFuX2NvbSA6IHsKICAgICAgICBob3N0IDogWyduZXdzdGF0ZXNtYW4uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2RvbmF0aW9uUG9wdXAnLCAnaGlkZScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRzd2l6el9jb20gOiB7CiAgICAgICAgLy8gYnk6IFNrcjR0Y2hHcjNhenlNb25raUJhbGxsbGxsWnp6egogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84MDkKICAgICAgICBob3N0IDogWyd5ZXMuZm0nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHdpbmRvdy5jb21fYWRzd2l6el9zeW5jaHJvX2luaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGVyc3RhbmRhcmRfYXQgOiB7CiAgICAgICAgLy8gYnk6IEFsZXhhbmRlcjI1NQogICAgICAgIC8vIHBhdGNoOiBodHRwOi8vcGFzdGViaW4uY29tL3Jhdy5waHA/aT1yN1E0RHJmQgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWRlcnN0YW5kYXJkCiAgICAgICAgaG9zdCA6IFsnZGVyc3RhbmRhcmQuYXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewoKICAgICAgICAgIHZhciBtYWtlSVNPVGltZXN0YW1wVVRDID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgcGFkID0gZnVuY3Rpb24gKGFtb3VudCwgd2lkdGgpIHsKICAgICAgICAgICAgICB2YXIgcGFkZGluZyA9ICIiOwogICAgICAgICAgICAgIHdoaWxlIChwYWRkaW5nLmxlbmd0aCA8IHdpZHRoIC0gMSAmJiBhbW91bnQgPCBNYXRoLnBvdygxMCwgd2lkdGggLSBwYWRkaW5nLmxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICAgICBwYWRkaW5nICs9ICIwIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHBhZGRpbmcgKyBhbW91bnQudG9TdHJpbmcoKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgcmV0dXJuIFtwYWQoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCA0KSwgIi0iLAogICAgICAgICAgICAgIHBhZChkYXRlLmdldFVUQ01vbnRoKCkgKyAxLCAyKSwgIi0iLAogICAgICAgICAgICAgIHBhZChkYXRlLmdldFVUQ0RhdGUoKSwgMiksICJUIiwKICAgICAgICAgICAgICBwYWQoZGF0ZS5nZXRVVENIb3VycygpLCAyKSwgIjoiLAogICAgICAgICAgICAgIHBhZChkYXRlLmdldFVUQ01pbnV0ZXMoKSwgMiksICI6IiwKICAgICAgICAgICAgICBwYWQoZGF0ZS5nZXRVVENTZWNvbmRzKCksIDIpXS5qb2luKCk7CiAgICAgICAgICB9OwoKICAgICAgICAgIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjb29raWUpIHsKICAgICAgICAgICAgLy8gRmluZCBtYWluIHN0b3JhZ2UgY29va2llCiAgICAgICAgICAgIGlmIChjb29raWUuc3Vic3RyKDAsIDYpID09ICJNR1VJRD0iKSB7CiAgICAgICAgICAgICAgLy8gRGVjb21wb3NlIGluZm9ybWF0aW9uIGZyb20gbWFpbiBzdG9yYWdlIGNvb2tpZQogICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSB7fTsKICAgICAgICAgICAgICBjb29raWUuc3Vic3RyKDYpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbiAoYXNzaWdubWVudCkgewogICAgICAgICAgICAgICAgdmFyIHBvcyA9IGFzc2lnbm1lbnQuaW5kZXhPZignPScpOwogICAgICAgICAgICAgICAgaWYgKHBvcyA+IC0xKSB7CiAgICAgICAgICAgICAgICAgIHZhbHVlc1thc3NpZ25tZW50LnN1YnN0cigwLCBwb3MpXSA9IGFzc2lnbm1lbnQuc3Vic3RyKHBvcyArIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAvLyBVcGRhdGUgImZpcnN0IHZpZXdlZCIgdGltZXN0YW1wCiAgICAgICAgICAgICAgdmFsdWVzLlRpbWVzdGFtcCA9IG1ha2VJU09UaW1lc3RhbXBVVEMoKTsKCiAgICAgICAgICAgICAgLy8gUmVjb21wb3NlIGluZm9ybWF0aW9uIGluIG1haW4gc3RvcmFnZSBjb29raWUKICAgICAgICAgICAgICBjb29raWUgPSAiTUdVSUQ9IjsKICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgICAgY29va2llICs9IGtleSArICI9IiArIHZhbHVlc1trZXldICsgIiYiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb29raWUgPSBjb29raWUuc3Vic3RyKDAsIChjb29raWUubGVuZ3RoIC0gMSkpOwoKICAgICAgICAgICAgICAvLyBVcGRhdGUgY29va2llCiAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRla19kb21haW5zIDogewogICAgICAgIC8vIGJ5OiBSZWVrLCBBbGV4YW5kZXIyNTUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNzg4CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzUxMgogICAgICAgIGhvc3QgOiBbJ3Rlay5ubycsICdnYW1lci5ubycsICd0ZWtub2ZpbC5ubycsICdpbnNpZGV0ZWxlY29tLm5vJywgJ3ByaXNndWlkZS5ubycsICdkaXNrdXNqb24ubm8nLCAndGVrbm9qb2JiLm5vJywgJ2FrYW0ubm8nLCAnaGFyZHdhcmUubm8nLCAnYW1vYmlsLm5vJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewoKICAgICAgICAgIC8qCiAgICAgICAgICB2YXIgYWRfZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKICAgICAgICAgIGFkX2ZyYW1lLm5hbWUgPSAiX2ZyYW1lIjsKICAgICAgICAgIGFkX2ZyYW1lLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFkX2ZyYW1lKTsKICAgICAgICAgIGFkX2ZyYW1lLmNvbnRlbnRXaW5kb3cud3JhcHBlZEpTT2JqZWN0LmluRklGID0gdHJ1ZTsKICAgICAgICAgICAqLwoKICAgICAgICAgIC8vIGZpeCAyNy4xMS4yMDE1CiAgICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICAgIHRhZyA6ICdkaXYnLAogICAgICAgICAgICBpZCA6ICdnb29nbGVfYWRzX2lmcmFtZV8nLAogICAgICAgICAgICBodG1sIDogJzxwPjwvcD4nLAogICAgICAgICAgICBhcHBlbmQgOiAnYm9keScKICAgICAgICAgIH0pOwoKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBsYW5ldGF0dm9ubGluZWhkX25ldHdvcmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE0NjcKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTU5CiAgICAgICAgaG9zdCA6IFsncGxhbmV0YXR2b25saW5laGQuYmxvZ3Nwb3QuJywgJ3BsYW5ldGF0dm9ubGluZWhkLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoJy5hZHNhbnRpbG9rIHsgaGVpZ2h0OiAxcHg7IH0nKTsKICAgICAgICAgIC8vQWFrLnV3LmpRQW50aUFkc0Jsb2NrID0gZnVuY3Rpb24gKCl7fTsgLy8gZG9uJ3Qgd29yawogICAgICAgIH0KICAgICAgfSwKICAgICAgYmV0YV9zcGVlZHRlc3RfbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy82MjgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTYyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ4NAogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlMi5vcmcvNTN5bWdoWDEKICAgICAgICBob3N0IDogWydiZXRhLnNwZWVkdGVzdC5uZXQnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZHNPb2tsYUNvbVJlYWNoYWJsZSA9IHRydWU7CiAgICAgICAgICBBYWsudXcuc2NyaXB0c0xvYWRlZCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmluYnVja3NfY29tIDogewogICAgICAgIC8vIGJ5OiBBbGV4YW5kZXIyNTUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTQ1CiAgICAgICAgaG9zdCA6IFsnYmluYnVja3MuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LnRlc3RKdWljeVBheSA9IHRydWU7CiAgICAgICAgICBBYWsudXcudGVzdFNlbnNlUGF5ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdoaXNreXByaWNlc19kb21haW5zIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjg0CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL0VwcjV0UkVMCiAgICAgICAgaG9zdCA6IFsnd2hpc2t5cHJpanplbi5jb20nLCAnd2hpc2t5cHJpY2VzLmNvLnVrJywgJ3doaXNreXByZWlzZS5jb20nLCAnd2hpc2t5cHJpeC5mciddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Lk9BX3Nob3cgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbmljb2Jsb2dfb3JnIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTg0CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL01OSHBMczJWCiAgICAgICAgaG9zdCA6IFsnbmljb2Jsb2cub3JnJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNyYycpOwogICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGlfc2UgOiB7CiAgICAgICAgLy8gbm90ZTogYWRkIHRoaXMgcnVsZSBmb3IgY2hyb21lIHVzZXIKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTMxOQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS85YkRQUXpNWAogICAgICAgIGhvc3QgOiBbJ2RpLnNlJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNoZWFkZXJfb3ZlcmxheScpOwogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNtZXNzYWdlX21vZGFsJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtZWdvZ29fbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBQTQogICAgICAgIC8vIHNvdXJjZTE6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vY2NIUWczaG4KICAgICAgICAvLyBzb3VyY2UyOiBodHRwOi8vcGFzdGViaW4uY29tL2drMHZFUUhOCiAgICAgICAgLy8gbm90ZTogdHdvIGFkYmxvY2sgY2hlY2sKICAgICAgICBob3N0IDogWydtZWdvZ28ubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICJhZEJsb2NrIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiBmYWxzZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAic2hvd0FkQmxvY2tNZXNzYWdlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiBmdW5jdGlvbiAoKSB7fQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBsaWJlcnRhZGRpZ2l0YWxfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNjQyCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tLzZGenAwdnJFCiAgICAgICAgaG9zdCA6IFsnbGliZXJ0YWRkaWdpdGFsLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAiYWRfYWxyZWFkeV9wbGF5ZWQiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZSA6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSA6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFhay51dywgInB1ZWRlTW9zdHJhckFkcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LCAgICAgCiAgICAgIGZvbGhhX3VvbF9jb21fYnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzOTYKICAgICAgICAvLyBzb3VyY2U6IGYoICggdHlwZW9mIHBheXdhbGxfYWNjZXNzID09ICJ1bmRlZmluZWQiIHx8IHBheXdhbGxfYWNjZXNzICE9IHRydWUgKSAmJiAoIHR5cGVvZiBmb2xoYV9hZHMgPT0gInVuZGVmaW5lZCIgfHwgZm9saGFfYWRzICE9IHRydWUgKSApIHsKICAgICAgICBob3N0IDogWydmb2xoYS51b2wuY29tLmJyJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICJwYXl3YWxsX2FjY2VzcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAiZm9saGFfYWRzIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGdhbWVyX2NvbV90dyA6IHsKICAgICAgICAvLyBieTogbW1pczEwMDAKICAgICAgICAvLyB1c2Vyc2NyaXB0OiBodHRwczovL2dyZWFzeWZvcmsub3JnL2VuL3NjcmlwdHMvMTY1MjUKICAgICAgICAvLyBpc3N1ZTogOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy85NzUKICAgICAgICBob3N0IDogWydnYW1lci5jb20udHcnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFhay51dywgJ0FudGlBZCcsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBhcm1vcmdhbWVzX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODQ1CiAgICAgICAgaG9zdCA6IFsnYXJtb3JnYW1lcy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFhay51dywgJ2dhX2RldGVjdCcsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtYW5nYWhvc3RfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy85NTcKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTU4CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL0dycGJKRU5BCiAgICAgICAgaG9zdCA6IFsnbWFuZ2Fob3N0LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAidGVzdERpc3BsYXkiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZSA6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSA6IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpZGVvd29vZF90diA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTMzOQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3ZpZGVvd29vZC50di9idWlsZC9hc3NldHMvanMvcGVtYmVkLTk3YTY0MGY2MjUuanMKICAgICAgICBob3N0IDogWyd2aWRlb3dvb2QudHYnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Lm9wZW4gPSBmdW5jdGlvbiAoKSB7fTsgLy8gcHJldmVudCBwb3B1cAogICAgICAgICAgQWFrLnV3LmNvbmZpZyA9IHt9OwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFhay51dy5jb25maWcsICJhZGJfcmVtaW5kIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiBmYWxzZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBpbmZvam9ic19jb21fYnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzMzkKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vTFBnNjA5M1UKICAgICAgICAvLyByZWRpcmVjdDogaHR0cDovL3d3dy5pbmZvam9icy5jb20uYnIvbm9wdWJsaWNpdHkuYXNweAogICAgICAgIGhvc3QgOiBbJ2luZm9qb2JzLmNvbS5iciddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU2NyaXB0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHdlYlVJID0gd2ViVUkgfHwge307CiAgICAgICAgICAgIHdlYlVJLlV0aWxzID0gd2ViVUkuVXRpbHMgfHwge307CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3ZWJVSS5VdGlscywgIlN0b3BBZEJsb2NrIiwgewogICAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgICAgdmFsdWUgOiBmdW5jdGlvbiAoKSB7fQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNsb3Vkd2ViY29weV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzcxNAogICAgICAgIGhvc3QgOiBbJ2Nsb3Vkd2ViY29weS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIHNldFRpbWVvdXRDbG9uZSA9IEFhay51dy5zZXRUaW1lb3V0OwogICAgICAgICAgQWFrLnV3LnNldFRpbWVvdXQgPSBudWxsOwogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIEFhay51dy5zZXRUaW1lb3V0ID0gc2V0VGltZW91dENsb25lOwogICAgICAgICAgfSwgNTAwMCk7CiAgICAgICAgfQogICAgICB9LAogICAgICBuYXJraXZlX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTY5CiAgICAgICAgaG9zdCA6IFsnbmFya2l2ZS5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZGJsb2NrX3N0YXR1cyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHByZWdlbl9uZXQgOiB7CiAgICAgICAgaG9zdCA6IFsncHJlZ2VuLm5ldCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBza2lwIHBhZ2UgaW5mbwogICAgICAgICAgQWFrLnNldENvb2tpZSgncGduJywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBwaHlzX29yZyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNzY4CiAgICAgICAgaG9zdCA6IFsncGh5cy5vcmcnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5jaGtBQiA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgb252YXNvcnRpcl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9b252YXNvcnRpci5jb20KICAgICAgICBob3N0IDogWydvbnZhc29ydGlyLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gK2FicCBydWxlIGFsdCBzb2x1dGlvbgogICAgICAgICAgQWFrLnV3LkplQmxvcXVlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBmdWxsaGR6ZXZraV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZnVsbGhkemV2a2kuY29tCiAgICAgICAgaG9zdCA6IFsnZnVsbGhkemV2a2kuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyArYWJwIHJ1bGUgYWx0IHNvbHV0aW9uCiAgICAgICAgICBBYWsudXcuY2hlY2sgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpbGxlX2lkZWFsZV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI1OAogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS8xNm1ubWVNYwogICAgICAgIGhvc3QgOiBbJ3ZpbGxlLWlkZWFsZS5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vICthYnAgcnVsZSBhbHQgc29sdXRpb24KICAgICAgICAgIEFhay51dy5leGVjc3AgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5vdHJlX3BsYW5ldGVfaW5mbyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjU4CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL3FyUzZRR0dFCiAgICAgICAgaG9zdCA6IFsnbm90cmUtcGxhbmV0ZS5pbmZvJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyArYWJwIHJ1bGUgYWx0IHNvbHV0aW9uCiAgICAgICAgICBBYWsudXcucHVicG9wID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBhcGttaXJyb3JfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zNzgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjI0CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzc4CiAgICAgICAgaG9zdCA6IFsnYXBrbWlycm9yLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmRvQ2hlY2sgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG10bGJsb2dfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy85NDgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9mb3J1bS9kaXNjdXNzaW9uLzc3NTMKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vQkZyRFBNNmIKICAgICAgICBob3N0IDogWydtdGxibG9nLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAncHVhYnMnLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB2YWx1ZSA6IGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFuaXptX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydhbml6bS5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5zdG9wQWRCbG9jayA9IHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGlhcmlvaW5mb3JtYWNpb25fY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTUwCiAgICAgICAgaG9zdCA6IFsnZGlhcmlvaW5mb3JtYWNpb24uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICdwcl9va3ZhbGlkYScsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHZhbHVlIDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBjbmJldGFfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMzAxCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL3ZYTkN6dHd4CiAgICAgICAgaG9zdCA6IFsnY25iZXRhLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAnSkInLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB2YWx1ZSA6IGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRoZW1hcmtlcl9oYWFyZXR6IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjkyCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL20wOGRrRFQ0CiAgICAgICAgaG9zdCA6IFsndGhlbWFya2VyLmNvbScsICdoYWFyZXR6LmNvLmlsJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICdBZEJsb2NrVXRpbCcsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHZhbHVlIDoge30KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGlwb2Nhc190diA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydwaXBvY2FzLnR2J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIEFsc28gYWRkZWQgaW4gZGlzYWJsZUFsZXJ0Ym94CiAgICAgICAgICAvLyBObyBwb3B1cAogICAgICAgICAgQWFrLnNldENvb2tpZSgncG9wdXBfdXNlcl9sb2dpbicsICd5ZXMnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIF8xNW1pbl9sdCA6IHsKICAgICAgICAvLyBub3RlOiByZWd1bGFyeSB1cGRhdGUgc2NyaXB0CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9MTVtaW4uaXQKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vWVdmM0hUcXIKICAgICAgICAvLyB0ZXN0OiBodHRwOi8vdGlueXVybC5jb20vaDZjNDMzNgogICAgICAgIGhvc3QgOiBbJzE1bWluLmx0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICdST1VURScsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogJ19iZV9yZWtsYW1vcycKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgc2MyY2FzdHNfY29tIDogewogICAgICAgIC8vIGJ5OiBHaXdheXVtZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTk5CiAgICAgICAgaG9zdCA6IFsnc2MyY2FzdHMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbigpIHsKICAgICAgICAgICAgd2luZG93Ll9nYXEgPSB7IHB1c2g6ZnVuY3Rpb24oKSB7fSB9OwogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAic2hvd2RpYWxvZyIsIHsKICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7fSwKICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAogICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgInNob3dQb3B1cDIiLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge30sCiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZndW5ldHdvcmtfY29tIDogewogICAgICAgIC8vIGlzc3VlOgogICAgICAgIGhvc3QgOiBbJ3ZndW5ldHdvcmsuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnc3RvcEl0JywgMSk7CiAgICAgICAgICB2YXIgY2xvc2UgPSBBYWsuZ2V0RWxlbWVudCgnI3NvbWVfYWRfYmxvY2tfa2V5X2Nsb3NlJyk7CiAgICAgICAgICBpZiAoY2xvc2UpIHsKICAgICAgICAgICAgY2xvc2UuY2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpbmtjcnlwdF93cyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjg2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvcHVsbC82NwogICAgICAgIGhvc3QgOiBbJ2xpbmtjcnlwdC53cyddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRFbGVtZW50KCcjYWRfY29udCcsIHsKICAgICAgICAgICAgaWQgOiAnJywKICAgICAgICAgICAgc3R5bGUgOiAnZGlzcGxheTpibG9jazsnCiAgICAgICAgICB9KTsKICAgICAgICAgIEFhay5zZXRFbGVtZW50KCcjY29udGFpbmVyX2NoZWNrJywgewogICAgICAgICAgICBzdHlsZSA6ICdkaXNwbGF5Om5vbmU7JwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBldmVudG9zcHB2X21lIDogewogICAgICAgIC8vIGlzc3VlOiAKICAgICAgICBob3N0IDogWydldmVudG9zcHB2Lm1lJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNuZjM3Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBib2xvcl90b2xpX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTUyCiAgICAgICAgaG9zdCA6IFsnYm9sb3ItdG9saS5jb20nXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBhZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiYW5uZXInKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBhZCA9IGFkc1tpXTsKICAgICAgICAgICAgYWQuaW5uZXJIVE1MID0gJzxicj4nOwogICAgICAgICAgICBhZC5zdHlsZS5oZWlnaHQgPSAnMXB4JzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpdm9fc3ggOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI4MAogICAgICAgIGhvc3QgOiBbJ3Zpdm8uc3gnXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBhbGVydCA9IEFhay5nZXRFbGVtZW50KCcjYWxlcnQtdGhyb3R0bGUnKTsKICAgICAgICAgIGlmIChhbGVydCkgewogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudChhbGVydCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYnV0dG9uID0gQWFrLmdldEVsZW1lbnQoJ2J1dHRvbiNhY2Nlc3MnKTsKICAgICAgICAgIGlmIChidXR0b24pIHsKICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTsKICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTsKICAgICAgICAgICAgYnV0dG9uLmlubmVySFRNTCA9ICdDb250aW51ZSB0byB2aWRlbyc7CiAgICAgICAgICB9CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGlucHV0ID0gQWFrLmdldEVsZW1lbnQoJ2lucHV0W25hbWU9InRocm90dGxlIl0nKTsKICAgICAgICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGx1eHlhZF9jb20gOiB7IC8vIHNraXAgcmVkaXJlY3QgbXlhbmltZXMubGkKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydsdXh5YWQuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKCcvSW5mb3JtYXRpb24ucGhwJyA9PSBsb2NhdGlvbi5wYXRobmFtZSkgewogICAgICAgICAgICB2YXIgaHJlZiA9IGxvY2F0aW9uLmhyZWY7CiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBocmVmLnN1YnN0cihocmVmLmluZGV4T2YoJ3VybD0nKSArIDQsIGhyZWYubGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1ycGlyYWN5X2RvbWFpbnMgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE0MDUKICAgICAgICBob3N0IDogWydtcnBpcmFjeS54eXonLCAnbXJwaXJhY3kuY2x1YiddLAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgY29udGFpbnMgOiAnRGVzYXRpdmEgbyBBZEJsb2NrIHBhcmEgY29udGludWFyJywKICAgICAgICAgICAgICBleHRlcm5hbCA6IGZhbHNlLAogICAgICAgICAgICAgIHJlbW92ZSA6IHRydWUKICAgICAgICAgICAgfQogICAgICAgICAgXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRicGxhbmV0X25ldCA6IHsKICAgICAgICAvLyBpc3N1ZTogUE0KICAgICAgICBob3N0IDogWydkYnBsYW5ldC5uZXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnbmV3bm9Nb3JlQWRzTm93JywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBhaWRlbXVfZnIgOiB7CiAgICAgICAgLy8gaXNzdWU6CiAgICAgICAgaG9zdCA6IFsnYWlkZW11LmZyJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2FkYmxvY2tQb3B1cCcsIHRydWUpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZWFtaV9pbiA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydlYW1pLmluJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdhZF9sb2NrZWQnLCAxKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJpZ2Rvd25sb2FkZXJfY29tIDogewogICAgICAgIC8vIGlzc3VlOgogICAgICAgIGhvc3QgOiBbJ2JpZ2Rvd25sb2FkZXIuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNhbnRpX2FkYmxvY2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZyZWVza2llcl9jb20gOiB7CiAgICAgICAgLy8gYnk6IEdvcmhpbGwKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNjM5CiAgICAgICAgLy8gbm90ZTogYWxzbyBhZGRlZCBsaXN0IHJ1bGUKICAgICAgICBob3N0IDogWydmcmVlc2tpZXIuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkYi1ub3QtZW5hYmxlZCIpOwogICAgICAgICAgaWYgKGVsICE9PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJkaXNwbGF5Iik7CiAgICAgICAgICB9CiAgICAgICAgICBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWRlb0NvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGVsICE9PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJkaXNwbGF5Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBnYW1ldHJhaWxlcnNfY29tIDogewogICAgICAgIC8vIGlzc3VlOgogICAgICAgIGhvc3QgOiBbJ2dhbWV0cmFpbGVycy5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI2FkX2Jsb2NraW5nJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzY2FuX29uZXBpZWNlX25hcnV0b19teCA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTgyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI3OQogICAgICAgIGhvc3QgOiBbJ3NjYW4tbXguY29tJywgJ29uZXBpZWNlLW14Lm5ldCcsICduYXJ1dG8tbXgubmV0J10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRfYmxvY2tfdGVzdCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldEVsZW1lbnQoJyN5b3AnLCB7CiAgICAgICAgICAgIGlkIDogJycKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gQml0Y29pbnMKICAgICAgYml0Y29pbmtlcl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzIzMAogICAgICAgIGhvc3QgOiBbJ2JpdGNvaW5rZXIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5jbGFpbSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNFMzNGQ0NjWDJmVycpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbW9vbmRvZ2VfY29faW4gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzM4NAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yMzIKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjMzCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzIzNgogICAgICAgIGhvc3QgOiBbJ21vb25kb2dlLmNvLmluJywgJ21vb25saXRlY28uaW4nLCAnbW9vbmJpdC5jby5pbicsICdiaXRjb2luemVicmEuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNBQiwgI0U0NDJEdiwgI2VDQzVoJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBiaXRjb2luZXJfbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zNDkKICAgICAgICBob3N0IDogWydiaXRjb2luZXIubmV0JywgJ2xpdGVjb2luZXIubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I3Rlc3RlcicpOwogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjYWQtdG9wJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBiaXRjb2luc19ueF90YyA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydmcmVlYml0Y29pbnMubngudGMnLCAnZ2V0Yml0Y29pbnMubngudGMnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZF9ibG9ja190ZXN0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZnJlZWNvaW5zNF9tZSA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydmcmVlY29pbnM0Lm1lJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuY2hlY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9LAogICAgICB0b3JyZW50X3R2X3J1IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy81MzcKICAgICAgICBob3N0IDogWyd0b3JyZW50LXR2LnJ1J10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuY19Pb19BZHZlcnRfU2hvd24gPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgY3d0dl9jb20gOiB7CiAgICAgICAgLy8gYnk6IEthbGJhc2l0CiAgICAgICAgLy8gcHVsbDogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9wdWxsLzc2MwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zNDAKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNzYyCiAgICAgICAgaG9zdCA6IFsnY3d0di5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5DV1RWSXNBZEJsb2NraW5nID0gdW5kZWZpbmVkOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmlsZF9kZSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1iaWxkCiAgICAgICAgaG9zdCA6IFsnYmlsZC5kZSddLAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgY29udGFpbnMgOiAnaHR0cDovL3d3dy5iaWxkLmRlL3dhL2xsL2JpbGQtZGUvdW5hbmdlbWVsZGV0LTQyOTI1NTE2LmJpbGQuaHRtbCcsCiAgICAgICAgICAgICAgZXh0ZXJuYWwgOiBmYWxzZSwKICAgICAgICAgICAgICByZXBsYWNlIDogWydqYXZhc2NyaXB0JywgJ3ZvaWQoMCk7J10uam9pbignOicpCiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgfQogICAgICB9LAogICAgICBpbm5fY29faWwgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzUzMgogICAgICAgIGhvc3QgOiBbJ2lubi5jby5pbCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU2NyaXB0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIFRSQyA9IHt9OwogICAgICAgICAgICBUUkMuYmxvY2tlciA9IHsKICAgICAgICAgICAgICBzdGF0ZXMgOiB7CiAgICAgICAgICAgICAgICBBQlBfREVURUNUSU9OX0RJU0FCTEVEIDogLTIsCiAgICAgICAgICAgICAgICBBQlBfTk9UX0RFVEVDVEVEIDogMCwKICAgICAgICAgICAgICAgIEFCUF9ERVRFQ1RFRCA6IDEKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGNyZWF0ZUJsb2NrRGV0ZWN0aW9uRGl2IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgaXNCbG9ja0RldGVjdGVkT25EaXYgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGlzQmxvY2tEZXRlY3RlZE9uQ2xhc3NOYW1lcyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgZ2V0QmxvY2tlZFN0YXRlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBiaGFza2FyX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1iaGFza2FyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZGl2eWFiaGFza2FyLmNvLmluCiAgICAgICAgaG9zdCA6IFsnYmhhc2thci5jb20nLCAnZGl2eWFiaGFza2FyLmNvLmluJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcub3BlblBvcFVwRm9yQnJlYWtQYWdlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICBBYWsudXcuY2FuQUJQID0gdHJ1ZTsKICAgICAgICAgIEFhay51dy5jYW5SdW5BZHMgPSB0cnVlOwogICAgICAgICAgQWFrLnV3LmNhbkNoZWNrQWRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHR1cmthbmltZV90diA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNDQ2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzOQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL3RyL2ZvcnVtL2Rpc2N1c3Npb24vNDI4Mi8KICAgICAgICBob3N0IDogWyd0dXJrYW5pbWUudHYnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZGJsb2NrYmxvY2sgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5CbG9rS29udHJvbCA9IHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgd3RmYml0X2NoIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy80MDcKICAgICAgICBob3N0IDogWyd3dGZiaXQuY2gnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy53cml0ZUhUTUxhc0pTID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBhcmFuenVsbGFfaXQgOiB7CiAgICAgICAgLy8gYnk6IFJvYm90ZXgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1hcmFuenVsbGEuaXQKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20veU1NNllneFcKICAgICAgICBob3N0IDogWydhcmFuenVsbGEuaXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoJyNhYnQxICsgU1RZTEUgKyBkaXZbaWRdW2NsYXNzXSB7ZGlzcGxheTpub25lO30nKTsKICAgICAgICB9LAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgY29udGFpbnMgOiAnbmF2aWdhdG9yLnVzZXJBZ2VudHx8bmF2aWdhdG9yLnZlbmRvcnx8d2luZG93Lm9wZXJhJywKICAgICAgICAgICAgICBleHRlcm5hbCA6IGZhbHNlLAogICAgICAgICAgICAgIHJlbW92ZSA6IHRydWUKICAgICAgICAgICAgfQogICAgICAgICAgXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5kdHZfY29tIDogewogICAgICAgIC8vIG5vdGU6IGNhblJ1bkFkcyBpbnZlcnRlZCB2YWx1ZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPW5kdHYuY29tCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL2hjZm5jZHYKICAgICAgICBob3N0IDogWyduZHR2LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ19fX3BfX3AnLCAxKTsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnZ2V0Tm9Ub3BMYXRlc3ROZXdzJywgZnVuY3Rpb24gKCkge30pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbGVzZWNob3NfZnIgOiB7CiAgICAgICAgLy8gUmVlaywgR2l3YXl1bWUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1sZXNlY2hvcy5mcgogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9DTU04V0dMagogICAgICAgIGhvc3QgOiBbJ2xlc2VjaG9zLmZyJywgJ2xlc2VjaG9zLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbigpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICJjaGVja0FkQmxvY2siLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge30sCiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmNhbGxfQWQgPSAxOwogICAgICAgICAgQWFrLnV3LnBheXdhbGxfYWRibG9ja19hcnRpY2xlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBiaXR2aXNpdHNfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yNjYKICAgICAgICBob3N0IDogWydiaXR2aXNpdHMuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYmxvY2tBZGJsb2NrVXNlciA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXhyYXBpZGxlZWNoX2luZm8gOiB7CiAgICAgICAgLy8gYnk6IEFsZXhhbmRlcjI1NSwgUmVlaywgR2l3YXl1bWUKICAgICAgICAvLyBwYXRjaDogaHR0cDovL3Bhc3RlYmluLmNvbS9RNjY0ZGlRMgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWV4cmFwaWRsZWVjaAogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS81ZTI3c3lqQQogICAgICAgIGhvc3QgOiBbJ2V4cmFwaWRsZWVjaC5pbmZvJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICB2YXIgdG9tb3Jyb3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgdG9tb3Jyb3cuc2V0RGF0ZSh0b21vcnJvdy5nZXREYXRlKCkgKyAxKTsKCiAgICAgICAgICAvLyBwcmV2ZW50IHBvcHVwCiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwb3BjYXNocHVDYXAnLCAxKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ3BvcGNhc2hwdScsIDEpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgnbm9wb3BhdGFsbCcsIHRvbW9ycm93LmdldFRpbWUoKS50b1N0cmluZygpKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ25vYWR2dGRheScsIDApOwogICAgICAgICAgLy9BYWsuc2V0Q29va2llKCdidl9EU0tza2Rja19zMWQnLCAnYnZEU0tza2Rja3MxZCcpOwoKICAgICAgICAgIC8vIGhpZGUgbm90aWNlCiAgICAgICAgICBBYWsuYWRkU3R5bGUoJ2Rpdi5hbGVydC5hbGVydC1kYW5nZXIubGVhZCB7b3BhY2l0eTowO30nKTsKICAgICAgICAgIAogICAgICAgICAgLy8gcHJldmVudCByZWRpcmVjdCB0byB2ZXJpZnkgcGFnZQogICAgICAgICAgQWFrLnNldFJlYWRPbmx5KCdiZHZibnJfcGlkJywgW10pOwogICAgICAgICAgQWFrLnNldFJlYWRPbmx5KCdQb3BBZHMnLCAxKTsKCiAgICAgICAgICBBYWsuYWRkU2NyaXB0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAvLyBwcmV2ZW50IHBvcHVwCiAgICAgICAgICAgICAgd2luZG93Lm9wZW4gPSBmdW5jdGlvbiAoKSB7fTsKCiAgICAgICAgICAgICAgLy8gcHJldmVudCByZWRpcmVjdCB0byB2ZXJpZnkgcGFnZQogICAgICAgICAgICAgIHZhciBmcmFtZTEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKICAgICAgICAgICAgICBmcmFtZTEuc3JjID0gJ2h0dHA6Ly9iZGZybS5iaWR2ZXJ0aXNlci5jb20vQmlkVmVydGlzZXIuZGJtP3BpZD0zODM4NjUmYmlkPTE3Mzc0MTgmUkQ9JzsKICAgICAgICAgICAgICBmcmFtZTEuaWQgPSAnYmR2aSc7CiAgICAgICAgICAgICAgZnJhbWUxLnN0eWxlID0gJ2Rpc3BsYXk6bm9uZSc7CiAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGZyYW1lMSk7CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpcGxlYWd1ZV9kb21haW5zIDogewogICAgICAgIC8vIG5vdGU6IGFsc28ga2lsbGVkIGJ5IEFha0xpc3QKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT12aXBib3gKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT12aXBsZWFndWUKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vTkVSVnpIelMKICAgICAgICBob3N0IDogWyJ2aXBsZWFndWUuaXMiLCAidmlwbGVhZ3VlLndzIiwgInZpcGxlYWd1ZS50diIsICJ2aXBsZWFndWUuc2UiLCAidmlwbGVhZ3VlLnR2IiwgInZpcGxlYWd1ZS5tZSIsICJ2aXBsZWFndWUubW9iaSIsICJ2aXBsZWFndWUuY28iLCAidmlwbGVhZ3VlLnN4IiwgInZpcGxlYWd1ZS5jaCIsICJ2aXBib3gudHYiLCAidmlwYm94LmNvIiwgInZpcGJveC5iaXoiLCAidmlwYm94LnN4IiwgInZpcGJveC5ldSIsICJ2aXBib3guc28iLCAidmlwYm94Lm51IiwgInZpcGJveHNhLmNvIiwgInN0cmlrZW91dC5jbyIsICJzdHJpa2VvdXQubWUiLCAiaG9tZXJ1bi5yZSIsICJ2aXBib3h0di5jbyIsICJ2aXBhcHAubWUiXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmlFeGlzdCA9IHRydWU7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCd4Y2xzdmlwJywgMSk7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi52aXBfMDUyeDAwMyB7IGhlaWdodDogMjUwcHg7IH0iKTsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLnZpcF8wOXg4MjcgeyBoZWlnaHQ6IDI2cHg7IH0iKTsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI292ZXJsYXkgeyBkaXNwbGF5OiBub25lOyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB6b29tdHZfbWUgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9em9vbXR2Lm1lCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL200ekFYR2N3CiAgICAgICAgaG9zdCA6IFsnem9vbXR2Lm1lJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuaWF4cEVuYWJsZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdmdfbm8gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI5MgogICAgICAgIC8vICthYnAgcnVsZQogICAgICAgIGhvc3QgOiBbJ3ZnLm5vJywgJ2UyNC5ubyddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Ll9fQUJfXyA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ybnZlX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTQ3CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tLzdUUFBrcTEyCiAgICAgICAgaG9zdCA6IFsncG9ybnZlLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmFkeGp3dXBkYXRlID0gMTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxvbF9tb2FfdHcgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzExMTQKICAgICAgICBob3N0IDogWydsb2wubW9hLnR3J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBNb2FPYmogPSBNb2FPYmogfHwge307CiAgICAgICAgICAgIE1vYU9iai5hZCA9IE1vYU9iai5hZCB8fCB7fTsJCQkKICAgICAgICAgICAgTW9hT2JqLmFkLmhhc0FkYmxvY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9OwogICAgICAgICAgICBNb2FPYmouYWQuY2hlY2tBQlAgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aXVwX29yZyA6IHsKICAgICAgICAvLyBieTogV2F0aWxpbgogICAgICAgIC8vIG5vdGU6IGFsdGVybmF0aXZlIHNvbHV0aW9uCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bXVsdGl1cC5vcmcKICAgICAgICBob3N0IDogWydtdWx0aXVwLm9yZyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aXNpdCcsIDEpOyAvLyBwcmV2ZW50IHBvcHVwCiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ2hpJywgZnVuY3Rpb24gKCkge30pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGFpbHliaXRjb2luc19vcmcgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwNwogICAgICAgIGhvc3QgOiBbJ2RhaWx5Yml0Y29pbnMub3JnJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJy5hZC1pbWcnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGtvemFjemVrX3plYmVya2EgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQxNAogICAgICAgIGhvc3QgOiBbJ2tvemFjemVrLnBsJywgJ3plYmVya2EucGwnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnYWJsYycsIDEpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgnY29va2llX3BvbGljeScsIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgc3Bhbmt3aXJlX3NpdGVzIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84ODcKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vVEZCMWR0Z2IKICAgICAgICBob3N0IDogWydzcGFua3dpcmUuY29tJywgJ2tlZXptb3ZpZXMuY29tJywgJ2V4dHJlbWV0dWJlLmNvbScsICdtb2Zvc2V4LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCJhYkNsb3NlZCIsICJ0cnVlIik7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCJoaWRlX2FkX21zZyIsICIxIik7CiAgICAgICAgfQogICAgICB9LAogICAgICB5b3Vwb3JuX25ldHdvcmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzg4NwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9URkIxZHRnYgogICAgICAgIGhvc3QgOiBbJ3lvdXBvcm4uY29tJywgJ3lvdXBvcm5nYXkuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoImFkYmxvY2tfbWVzc2FnZSIsICJjbG9zZWQiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNpdGF0aW9ubWFjaGluZV9uZXQgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9Y2l0YXRpb25tYWNoaW5lLm5ldAogICAgICAgIGhvc3QgOiBbJ2NpdGF0aW9ubWFjaGluZS5uZXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgic2JtX2NtX2NpdGF0aW9ucyIsIDApOwogICAgICAgIH0KICAgICAgfSwgICAgICAKICAgICAgcHNhcmlwc19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE1MwogICAgICAgIGhvc3QgOiBbJ3BzYXJpcHMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkdmVydCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXh0cmF0b3JyZW50X2RvbWFpbnMgOiB7CiAgICAgICAgaG9zdCA6IFsnZXh0cmF0b3JyZW50LmNjJywgJ2V4dHJhdG9ycmVudC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gcHJldmVudCBwb3B1cAogICAgICAgICAgLy8gc291cmNlIGFyZSBvYmZ1c2NhdGVkIGluIGV4dGVybmFsIGpzCiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwcHVfZGVsYXknLCAxKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ3BwdV9tYWluJywgMSk7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwcHVfc3ViJywgMSk7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwcHVfc2hvd19vbicsIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdG55X2N6IDogewogICAgICAgIGhvc3QgOiBbJ3RueS5jeicsICdwYXN0ZWQuY28nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gcHJldmVudCBwb3B1cAogICAgICAgICAgQWFrLnNldENvb2tpZSgnX18ucG9wdW5kZXJDYXAnLCAxKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ19fLnBvcHVuZGVyJywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBjbHViZWRvaGFyZHdhcmVfY29tX2JyIDogeyAvLyB0d28gYW50aWFkYmxvY2sKICAgICAgICBob3N0IDogWydjbHViZWRvaGFyZHdhcmUuY29tLmJyJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmIChBYWsuY29udGFpbnMobG9jYXRpb24uaG9zdCwgJ2ZvcnVtJykpIHsKICAgICAgICAgICAgLy8gU29sdXRpb24gMQogICAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNiYW5uZXIsIHNjcmlwdCB7IGhlaWdodDogNTFweDsgfSIpOwogICAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNiYW5uZXInKTsKICAgICAgICAgIH0gZWxzZSB7IC8vIFdlYnNpdGUKICAgICAgICAgICAgLy8gU29sdXRpb24gMQogICAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2Rpdi5iYW5uZXJfdG9wbycpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKEFhay5jb250YWlucyhsb2NhdGlvbi5ob3N0LCAnZm9ydW0nKSkgewogICAgICAgICAgICAvLyBTb2x1dGlvbiAyCiAgICAgICAgICAgIEFhay51dy5hZGRCbG9ja2luZy5oaWRlKCk7CiAgICAgICAgICAgIEFhay51dy5hZGRCbG9ja2luZy5raWxsKCk7CiAgICAgICAgICB9IGVsc2UgeyAvLyBXZWJzaXRlCiAgICAgICAgICAgIC8vIFNvbHV0aW9uIDIKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pZCA9ICcnOwogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnLmFkYmxvY2snKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlYnJhc3RhZ2lfY29tIDogewogICAgICAgIGhvc3QgOiBbJ2RlYnJhc3RhZ2kuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNzdHAtbWFpbicpOwogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNzdHAtYmcnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRkbGZyZW5jaF9vcmcgOiB7CiAgICAgICAgaG9zdCA6IFsnZGRsZnJlbmNoLm9yZyddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIEZpeCBidWcgZGlzcGxheSBjb250ZW50CiAgICAgICAgICBBYWsuc2V0RWxlbWVudCgnI2RsZS1jb250ZW50IC5kLWNvbnRlbnQnLCB7CiAgICAgICAgICAgICdjbGFzcycgOiAnJwogICAgICAgICAgfSk7CiAgICAgICAgICBBYWsuc2V0RWxlbWVudCgnI2NvbnRlbnQnLCB7CiAgICAgICAgICAgICdpZCcgOiAnJwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtZWdhZGVicmlkX2V1IDogewogICAgICAgIGhvc3QgOiBbJ21lZ2EtZGVicmlkLmV1J10sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBBY3RpdmF0ZSBidXR0b24gZGVicmlkCiAgICAgICAgICBBYWsuc2V0RWxlbWVudCgnLnJlYWxidXR0b24nLCB7CiAgICAgICAgICAgICdvbmNsaWNrJyA6ICcnLAogICAgICAgICAgICAndHlwZScgOiAnc3VibWl0JwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzbGlkZXBsYXllcl9kb21haW5zIDogewogICAgICAgIC8vIGJ5OiBBbGV4YW5kZXIyNTUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTMzMwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy81MTUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjk2CiAgICAgICAgLy8gZGVtbzogaHR0cDovL3NsaWRlcGxheWVyLmZyL3NsaWRlLzEzMDQwMjYvIwogICAgICAgIGhvc3QgOiBbJ3NsaWRlcGxheWVyLionXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAvLyBEaXNhYmxlIGFudGktYWRibG9ja2VyCiAgICAgICAgICBBYWsudXcuZm9yY2VfcmVtb3ZlX2FkcyA9IHRydWU7CgogICAgICAgICAgLy8gQ2lyY3VtdmVudCAic2hhcmUgdG8gZG93bmxvYWQiIHJ1bGUKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgc2xpZGVfaWQgPSB3aW5kb3cuZ2V0X2N1cnJlbnRfc2xpZGVfaWQoKTsKICAgICAgICAgICAgdmFyIHNsaWRlX3NydiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGF5ZXJfZnJhbWUiKS5zcmMuc3BsaXQoIi8iKVszXTsKICAgICAgICAgICAgdmFyIHRpbWUgPSA4NjQwMCArIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApOwogICAgICAgICAgICB2YXIgc2VjcmV0ID0gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5zdHJ0cih3aW5kb3cuTUQ1LmJhc2U2NCgic2VjcmV0X3ByZXZlZCBzbGlkZXBsYXllciBuZXZlciBzb2x2ZWQgIiArIHRpbWUgKyBzbGlkZV9pZCArICIucHB0IiksICIrLyIsICItICIpKTsKCiAgICAgICAgICAgIHZhciB1cmwgPSAiaHR0cDovL3BsYXllci5zbGlkZXBsYXllci5vcmcvZG93bmxvYWQvIiArIHNsaWRlX3NydiArICIvIiArIHNsaWRlX2lkICsgIi8iICsgc2VjcmV0ICsgIi8iICsgdGltZSArICIvIiArIHNsaWRlX2lkICsgIi5wcHQiOwogICAgICAgICAgICB2YXIgbGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJhLmRvd25sb2FkX2xpbmsiKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIC8qIFJlbW92ZSBvcmlnaW5hbCAic2hhcmUgdG8gZG93bmxvYWQiIHBvcHVwIGV2ZW50IGxpc3RlbmVyICovCiAgICAgICAgICAgICAgdmFyIGV2ZW50cyA9ICQuX2RhdGEobGlua3NbaV0pLmV2ZW50cy5jbGljazsKICAgICAgICAgICAgICBldmVudHMuc3BsaWNlKDAsIGV2ZW50cy5sZW5ndGgpOwoKICAgICAgICAgICAgICAvKiBTZXQgbm9ybWFsIGxpbmsgaHJlZiBpbnN0ZWFkICovCiAgICAgICAgICAgICAgbGlua3NbaV0uaHJlZiA9IHVybDsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgIH0KICAgICAgfSwKICAgICAgYm9rZXBzcG90X2NvbSA6IHsKICAgICAgICBob3N0IDogWydib2tlcHNwb3QuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIEhpZGUgRGlzY2xhaW1lcgogICAgICAgICAgQWFrLnNldENvb2tpZSgnaGlkZURpYWxvZycsICdoaWRlJyk7CiAgICAgICAgfSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBSZW1vdmUgRGlzYWJsZSBBZEJsb2NrCiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI3R1cGlrbGFuJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBwaWNsb2FkX2NvbSA6IHsKICAgICAgICBob3N0IDogWydwaWNsb2FkLm9yZyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwbF9hZGJsb2NrZXInLCBmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRzX2xvYWRlZCA9IHRydWU7CiAgICAgICAgICBBYWsudXcuaW1hZ2VBZHMgPSBmYWxzZTsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCdkaXZbb25jb250ZXh0bWVudT0icmV0dXJuIGZhbHNlOyJdJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBmcmVlemVkb3dubG9hZF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsnZnJlZXplZG93bmxvYWQuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKC9mcmVlemVkb3dubG9hZC5jb21cL2Rvd25sb2FkXC8vLnRlc3QobG9jYXRpb24uaHJlZikpIHsKICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJ2JvZHkgPiBkaXZbaWRdJyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBtb25uc3V0b2dhdHlhX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogUE0KICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vMUx3NjBoNmsKICAgICAgICBob3N0IDogWydtb25uc3V0b2dhdHlhLmNvbSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI3NpdGUtYm94IHtkaXNwbGF5OmJsb2NrO30iKTsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcjZm9yLWFkLWJsb2NrZXInKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHJhcGlkOF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsncmFwaWQ4LmNvbSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCdkaXYuYmFja2sgKyAjYmxjb2tNemcnKTsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCdkaXYuYmFja2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHR1cmtkb3duX2NvbSA6IHsKICAgICAgICBob3N0IDogWyd0dXJrZG93bi5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyByZW1vdmUgZmFjZWJvb2sgYm94CiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI2R1eXVydScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmlsbW92aXppamFfZG9tYWlucyA6IHsKICAgICAgICBob3N0IDogWydmaWxtb3ZpemlqYS5tZScsICdmaWxtb3ZpemlqYS5jb20nLCAnZmlsbW92aXppamEuaW4nLCAnZmlsbW92aXppamEubmV0J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLyoKICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoKTsKICAgICAgICAgIHZhciB3ZWVrZGF5ID0gWyJTdW5kYXkiLCAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwgIkZyaWRheSIsICJTYXR1cmRheSJdOwogICAgICAgICAgdmFyIG4gPSB3ZWVrZGF5W2QuZ2V0RGF5KCldOwogICAgICAgICAgQWFrLnNldEVsZW1lbnQoJyMnICsgbiwgewogICAgICAgICAgaHRtbCA6ICcnCiAgICAgICAgICB9KTsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcjJyArIG4pOwogICAgICAgICAgICovCiAgICAgICAgfQogICAgICB9LAogICAgICBoYWNraW50b3NoX3pvbmUgOiB7CiAgICAgICAgLy8gYnk6IEFsZXhhbmRlcjI1NQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWhhY2tpbnRvc2guem9uZQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlMi5vcmcvRG5COU9qNGYKICAgICAgICBob3N0IDogWydoYWNraW50b3NoLnpvbmUnXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwogICAgICAgICAgLy8gRmFrZSBHb29nbGUgYWQgZnJhbWUgY29udGVudAogICAgICAgICAgdmFyIGFkMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucyIpOwogICAgICAgICAgYWQxLmNsYXNzTmFtZSA9ICJhZHNieWdvb2dsZSI7CiAgICAgICAgICBhZDEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkFBSyIpKTsKICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKGFkMSwgaGVhZC5jaGlsZE5vZGVzWzBdKTsKCiAgICAgICAgICAvKgogICAgICAgICAgLy8gRmFrZSBDbGVhbk15TWFjIGFkIGZyYW1lIHNpemUKICAgICAgICAgIHZhciBhZDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGFkMi5pZCAgPSAibnljdWhldmdxaSI7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWQyLndyYXBwZWRKU09iamVjdCwgJ2NsaWVudEhlaWdodCcsIHt2YWx1ZTogMX0pOwogICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoYWQyLCBoZWFkLmNoaWxkTm9kZXNbMF0pOwogICAgICAgICAgICovCgogICAgICAgICAgdmFyIGVsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFkc2Vuc2VncmV5Jyk7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgICAgICAgIG5vZGUuc3JjID0gQWFrLmltZ0JhaXQ7CiAgICAgICAgICAgIGVsZW1zW2ldLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgICAgfQoKICAgICAgICB9LAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgY29udGFpbnMgOiAnZGlzYWJsZSBBREJsb2NrIGNvbXBsZXRlbHknLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJpdmF0ZWluc3RhX2NvbSA6IHsKICAgICAgICBob3N0IDogWydwcml2YXRlaW5zdGEuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gKyBhYnAgcnVsZQogICAgICAgICAgQWFrLnV3LmRvbnRfc2Nyb2xsID0gZmFsc2U7CiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgiI292ZXJsYXlfZGl2Iik7CiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgiI292ZXJsYXlfbWFpbl9kaXYiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHJpc2lrb2dlc3VuZGhlaXRfZGUgOiB7CiAgICAgICAgaG9zdCA6IFsncmlzaWtvLWdlc3VuZGhlaXQuZGUnXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgd2luZG93LnN0b3AoKTsKICAgICAgICAgIH0sIDUwMDApOwogICAgICAgIH0KICAgICAgfSwKICAgICAgb25lcGxheWxpc3RfZXVfcG4gOiB7CiAgICAgICAgaG9zdCA6IFsnb25lcGxheWxpc3QuZXUucG4nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBraWxsIHBvcHVuZGVyCiAgICAgICAgICBBYWsudXcubWFrZVBvcHVuZGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9LAogICAgICBvbm1lZGFfZGUgOiB7CiAgICAgICAgLy8gbm90ZTogc2NyaXB0IG9iZnVzY2F0ZWQgbGluZSAxMTEwCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZm9ydW0vZGlzY3Vzc2lvbi84NTc2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwNjcKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vcWY0NmJOM3oKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vUndIeUYwTkwKICAgICAgICBob3N0IDogWydvbm1lZGEuZGUnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy4kQURQID0gdHJ1ZTsKICAgICAgICAgIEFhay51dy5zYXNfY2FsbEFkID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICBBYWsudXcuc2FzX2NhbGxBZHMgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHR1cmJvZGVicmlkZXVyX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTk5CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU2MwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy81MjYKICAgICAgICBob3N0IDogWyd0dXJib2RlYnJpZGV1ci5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICAgIHRhZyA6ICdkaXYnLAogICAgICAgICAgICBpZCA6ICdwdWJkaXJlY3RlJywKICAgICAgICAgICAgaHRtbCA6ICc8aW1nICBzcmM9IicgKyBBYWsuaW1nQmFpdCArICciLz48YSAgaHJlZj0iIyI+Jm5ic3A7PC9hPicsCiAgICAgICAgICAgIGFwcGVuZCA6ICdib2R5JwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICByb2NrZmlsZV9ldSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTI1NgogICAgICAgIGhvc3QgOiBbJ3JvY2tmaWxlLmV1J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmNyZWF0ZUVsZW1lbnQoewogICAgICAgICAgICB0YWcgOiAnaWZyYW1lJywKICAgICAgICAgICAgc3JjIDogJ2Fib3V0OmJsYW5rJywKICAgICAgICAgICAgc3R5bGUgOiAndmlzaWJpbGl0eTpoaWRkZW47JywKICAgICAgICAgICAgYXBwZW5kIDogJ2JvZHknCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpbmtidWNrc19hbnRpYWRibG9jayA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTMyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ2OQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yNzcKICAgICAgICAvLyB2MzogaHR0cDovL3Bhc3RlYmluLmNvbS8wZ2g4TE1HSAogICAgICAgIC8vIG5vdGU6IG5vIHNvbHV0aW9uLCBhbnRpLWFkYmxvY2sgZGlmZmljdWx0IHRvIGJ5cGFzcyAtLT4gaHR0cDovL3Bhc3RlYmluLmNvbS8xTlJxN1d2WgogICAgICAgIGhvc3QgOiBbJ2xpbmtidWNrcy5jb20nLCAnbWluaXVybHMuY28nLCAncGljYnVja3MuY29tJywgJ3BpY3R1cmVzZXRjLm5ldCcsICdwbGFjZXBpY3R1cmVzLmNvbScsICdwb29udG93bi5uZXQnLCAncXFjLmNvJywgJ3F2dm8uY29tJywgJ3JlYWxmaWxlcy5uZXQnLCAncnFxLmNvJywgJ3NlcmlvdXNkZWFscy5uZXQnLCAnc2VyaW91c2ZpbGVzLmNvbScsICdzZXJpb3VzdXJscy5jb20nLCAnc2V4cGFsYWNlLmdzJywgJ3RoZXNlYmxvZ3MuY29tJywgJ3RoZXNlZmlsZXMuY29tJywgJ3RoZXNlZm9ydW1zLmNvbScsICd0aG9zZWdhbGxlcmllcy5jb20nLCAndGlueWJ1Y2tzLm5ldCcsICd0aW55bGlua3MuY28nLCAndG5hYnVja3MuY29tJywgJ3R1YmV2aXJhbC5jb20nLCAndWJlcnBpY3ouY29tJywgJ3ViZXJ2aWR6LmNvbScsICd1YnVja3MubmV0JywgJ3VnYWxsZXJpZXMubmV0JywgJ3VsdHJhZmlsZXMubmV0JywgJ3VybGJlYXQubmV0JywgJ3VybHB1bHNlLm5ldCcsICd3aGFja3l2aWR6LmNvbScsICd5b3VmYXAubWUnLCAneXl2LmNvJywgJ3p4eG8ubmV0JywgJ3pmZi5jbycsICdsaW5rYnVja3NkbnMuY28nLCAnbWluaXVybHMuY29tJywgJ2R5by5ncycsICdnb25ldmlyYWwuY29tJywgJ2VhZnlmc3VoLm5ldCcsICdzYXNvbnRud2MubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIGRvIG5vdGhpbmcuLi4KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpbmtidWNrc192aXNpdHNjcmlwdCA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydyZWZlcmVuY2VtZWdhLmNvbScsICdmcGFiZC5jb20nLCAnY3JhY2thY2MuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIFNraXAgdmlzaXRTY3JpcHQgd2hlbiBzaXRlIHVzZSBDbG91ZEZsYXJlIFJvY2tldCBTY3JpcHQKICAgICAgICAgIEFhay5zZXRDb29raWUoJ19sYkdhdGVQYXNzZWQnLCB0cnVlKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpbmtfdGwgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bGluay50bAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2ZyL2ZvcnVtL2Rpc2N1c3Npb24vODQzNwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS8xTWtDbm1MNwogICAgICAgIGhvc3QgOiBbJ2xpbmsudGwnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCcuYWRibG9jayB7IGhlaWdodDoxcHg7IH0nKTsKICAgICAgICAgIEFhay51dy5hZGJsb2NrZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdzdHJlYW1fdmlkZW8gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzODIKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vRWlBUlZRWHQKICAgICAgICBob3N0IDogWyd3c3RyZWFtLnZpZGVvJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgnI2FkaXYgeyBoZWlnaHQ6NHB4OyB9Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBfNHNoYXJlZF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsnNHNoYXJlZC5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBIaWRlICJEaXNhYmxlIEFkQmxvZGsiIG1lc3NhZ2VzCiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuY2xhc3NMaXN0LnJlbW92ZSgianNCbG9ja0RldGVjdCIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJvX2RvbWFpbnMgOiB7CiAgICAgICAgaG9zdCA6IFsncHJvLXppay53cycsICdwcm8tdGVjdC53cycsICdwcm8tZGRsLndzJywgJ3Byby1zcG9ydC53cyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aXNpdGVkZicsIHRydWUpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgndmlzaXRlZGgnLCB0cnVlKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNvbXB0b2lyaGFyZHdhcmVfY29tIDogewogICAgICAgIGhvc3QgOiBbJ2NvbXB0b2lyLWhhcmR3YXJlLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmFkYmxvY2sgPSAnbm9uJzsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJha2Vyc2ZpZWxkX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNjU3CiAgICAgICAgLy8gbm90ZTogYWxzbyBzb2x1dGlvbiB0byBBYWtMaXN0CiAgICAgICAgaG9zdCA6IFsnYmFrZXJzZmllbGQuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuQURfU0xPVF9SRU5ERVJFRCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBla3N0cmFibGFkZXRfZGsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZWtzdHJhYmxhZGV0CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1IwMjlYcENyCiAgICAgICAgaG9zdCA6IFsnZWtzdHJhYmxhZGV0LmRrJywgJ2ViLmRrJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuQURURUNIID0ge307CiAgICAgICAgfQogICAgICB9LAogICAgICBwY2dhbWVzX2Rvd25sb2FkX25ldCA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTQ1MQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2ZvcnVtL2Rpc2N1c3Npb24vOTMyOAogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9FQlZaZzNWQgogICAgICAgIGhvc3QgOiBbJ3BjZ2FtZXMtZG93bmxvYWQubmV0J10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdub0FkYmxvY2tOaWNlTWVzc2FnZScsIDEpOwogICAgICAgICAgQWFrLnV3Lm1nQ2FuTG9hZDMwNTQ3ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxhY2hhaW5lbWV0ZW9fY29tIDogewogICAgICAgIC8vIG5vdGU6IGFsc28ga2lsbGVkIGJ5IEFha0xpc3QKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTkwCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI0NQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yMTUKICAgICAgICBob3N0IDogWydsYWNoYWluZW1ldGVvLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmpzX2xvYWRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBtYWM0ZXZlcl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzk5NwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9SUW5DRVlLNgogICAgICAgIGhvc3QgOiBbJ21hYzRldmVyLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmNvcXVpbm91ID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBfNTI3OGJic19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9NTI3OGJicy5jb20KICAgICAgICBob3N0IDogWyc1Mjc4YmJzLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Lm15YWFicGZ1bjEyID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICB0aGVzaW1zcmVzb3VyY2VfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPXRoZXNpbXNyZXNvdXJjZS5jb20KICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vREU5cmJqeFkKICAgICAgICBob3N0IDogWyd0aGVzaW1zcmVzb3VyY2UuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuZ2Fkc2l6ZSA9IHRydWU7CiAgICAgICAgICBBYWsudXcuaUhhdmVMb2FkZWRBZHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeWVsbG93YnJpZGdlX2NvbSA6IHsKICAgICAgICBob3N0IDogWyd5ZWxsb3dicmlkZ2UuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuZmluYWxpemVQYWdlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2FtZV9kZWJhdGVfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMzY2CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1V6c2lYMEZLCiAgICAgICAgaG9zdCA6IFsnZ2FtZS1kZWJhdGUuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRfYmxvY2tfdGVzdCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRzY2VuZG1lZGlhIDogewogICAgICAgIGhvc3QgOiBbJ2Fkc2NlbmRtZWRpYS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gYWRzY2VuZG1lZGlhIC0gaHR0cHM6Ly93d3cuYWRzY2VuZG1lZGlhLmNvbS8KICAgICAgICAgIHZhciByZWYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykuaHJlZiA9IGRvY3VtZW50LnJlZmVycmVyOwogICAgICAgICAgdmFyIGhvc3QgPSBsb2NhdGlvbi5ob3N0OwogICAgICAgICAgdmFyIHBhdGggPSBsb2NhdGlvbi5wYXRobmFtZTsKICAgICAgICAgIGlmIChBYWsuY29udGFpbnMocGF0aCwgJy93aWRnZXRfYWRibG9jay5waHAnKSAmJiAhQWFrLmNvbnRhaW5zKHJlZi5ob3N0LCBob3N0KSkgewogICAgICAgICAgICAvLyBBdXRvIHJlcG9ydAogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0Fkc2NlbmRtZWRpYScsIHJlZi5ob3N0LCBob3N0KTsKICAgICAgICAgICAgLy8gTm90aWZpY2F0aW9uCiAgICAgICAgICAgIEFhay5ub3RpZmljYXRpb24oJ1lvdSBtdXN0IHN1YnNjcmliZSB0byA8Yj5BYWtMaXN0IChBbnRpLUFkYmxvY2sgS2lsbGVyICk8L2I+IDxhIGhyZWY9IicgKyBBYWsuc3Vic2NyaWJlVVJMICsgJyIgdGFyZ2V0PSJfYmxhbmsiPlN1YnNjcmliZTwvYT4nKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFkd29ya21lZGlhIDogewogICAgICAgIGhvc3QgOiBbJ2Fkd29ya21lZGlhLmNvbScsICdsb3h0ay5jb20nLCAnY29udGVudGxvY2tpbmduZXR3b3Jrcy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gQWRXb3JrTWVkaWEgLSBodHRwczovL3d3dy5hZHdvcmttZWRpYS5jb20vCiAgICAgICAgICB2YXIgcmVmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpLmhyZWYgPSBkb2N1bWVudC5yZWZlcnJlcjsKICAgICAgICAgIHZhciBob3N0ID0gbG9jYXRpb24uaG9zdDsKICAgICAgICAgIHZhciBwYXRoID0gbG9jYXRpb24ucGF0aG5hbWU7CiAgICAgICAgICBpZiAoQWFrLmNvbnRhaW5zKHBhdGgsICcvaGVscC9yZW1vdmVBQi5waHAnKSAmJiAhQWFrLmNvbnRhaW5zKHJlZi5ob3N0LCBob3N0KSkgewogICAgICAgICAgICAvLyBBdXRvIHJlcG9ydAogICAgICAgICAgICBBYWsuaW5mbygnQWR3b3JrbWVkaWEnLCByZWYuaG9zdCwgaG9zdCk7CiAgICAgICAgICAgIC8vIE5vdGlmaWNhdGlvbgogICAgICAgICAgICBBYWsubm90aWZpY2F0aW9uKCdZb3UgbXVzdCBzdWJzY3JpYmUgdG8gPGI+QWFrTGlzdCAoQW50aS1BZGJsb2NrIEtpbGxlciApPC9iPiA8YSBocmVmPSInICsgQWFrLnN1YnNjcmliZVVSTCArICciIHRhcmdldD0iX2JsYW5rIj5TdWJzY3JpYmU8L2E+Jyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAvLyBQbGF5ZXJzCiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIGtpc3NhbmltZV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ1MQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zODEKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMzAyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI1NwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNzgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTk2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU2CiAgICAgICAgaG9zdCA6IFsna2lzc2FuaW1lLmNvbScsICdraXNzYW5pbWUudG8nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gTWFza2luZyBhZHMKICAgICAgICAgIEFhay5hZGRTdHlsZSgnaWZyYW1lW2lkXj0iYWRzSWZybWUiXSwgLmRpdkNsb3NlQnV0IHsgZGlzcGxheTpub25lOyB9Jyk7CiAgICAgICAgICAvLyBTb2x1dGlvbiAxCiAgICAgICAgICBBYWsudXcuRG9EZXRlY3QyID0gbnVsbDsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAvLyBTb2x1dGlvbiAxIGFicCBydWxlCiAgICAgICAgICAvLyBAQHx8a2lzc2FuaW1lLmNvbV4kZWxlbWhpZGUKCiAgICAgICAgICB2YXIgZGl2Q29udGVudFZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RpdkNvbnRlbnRWaWRlbycpOwoKICAgICAgICAgIC8vIFNvbHV0aW9uIDIKICAgICAgICAgIGlmIChBYWsudXcuRG9EZXRlY3QyKSB7CiAgICAgICAgICAgIEFhay51dy5Eb0RldGVjdDIgPSBudWxsOwogICAgICAgICAgICBBYWsudXcuQ2hlY2tBZEltYWdlID0gbnVsbDsKICAgICAgICAgICAgQWFrLmluZm8oJ1NvbHV0aW9uIDInKTsKICAgICAgICAgIH0gLy9Tb2x1dGlvbiAzCiAgICAgICAgICBlbHNlIGlmIChkaXZDb250ZW50VmlkZW8pIHsKCiAgICAgICAgICAgIHZhciBkaXZEb3dubG9hZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkaXZEb3dubG9hZCcpLmNsb25lTm9kZSh0cnVlKTsKCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGRpdkNvbnRlbnRWaWRlby5pbm5lckhUTUwgPSAnJzsKICAgICAgICAgICAgICBBYWsudXcuRG9IaWRlRmFrZSgpOwogICAgICAgICAgICAgIGRpdkNvbnRlbnRWaWRlby5hcHBlbmRDaGlsZChkaXZEb3dubG9hZCk7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJ2lmcmFtZVtpZF49ImFkc0lmcm1lIl0sIC5kaXZDbG9zZUJ1dCcpOwogICAgICAgICAgICAgIEFhay5pbmZvKCdTb2x1dGlvbiAzJyk7CiAgICAgICAgICAgIH0sIDU1MDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgS2lzc2NhcnRvb25fbWUgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ4OAogICAgICAgIGhvc3QgOiBbJ2tpc3NjYXJ0b29uLm1lJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcueGFabEUgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCdpZnJhbWVbaWRePSJhZHNJZnJtZSJdJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBvcGVubG9hZF9kb21haW5zIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPW9wZW5sb2FkCiAgICAgICAgaG9zdCA6IFsnb3BlbmxvYWQuY28nLCAnb3BlbmxvYWQuaW8nLCAnb3BlbmxvYWQudHYnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmFkYmxvY2sgPSBmYWxzZTsKICAgICAgICAgIEFhay51dy5hZGJsb2NrMiA9IGZhbHNlOwogICAgICAgICAgQWFrLnV3LnBvcEFkc0xvYWRlZCA9IHRydWU7CiAgICAgICAgICAvLyBoaWRlIGZha2UgcGxheSBidXR0b24gdXNlZCB0byBvcGVuIHBvcHVuZGVyCiAgICAgICAgICAvL0Fhay5hZGRTdHlsZSgnI3ZpZGVvb3ZlcmxheSB7IGRpc3BsYXk6bm9uZTsgfScpCiAgICAgICAgfQogICAgICB9LAogICAgICB5b3V3YXRjaF9vcmcgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9eW91d2F0Y2gKICAgICAgICAvLyB0ZXN0OiBodHRwOi8veW91d2F0Y2gub3JnL2VtYmVkLTU5cDdpM2Nka3NlMC00NTN4MzIwLmh0bWwKICAgICAgICAvLyB0ZXN0OiBodHRwOi8veW91d2F0Y2gub3JnLzU5cDdpM2Nka3NlMAogICAgICAgIGhvc3QgOiBbJ3lvdXdhdGNoLm9yZycsICdjaG91aGFhLmluZm8nLCAnYWh6YWhnNm9oYi5jb20nLCAnYWh6YWhnNm9oYi5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gc2tpcCBhbnRpLWFkYmxvY2sKICAgICAgICAgIEFhay51dy5hZHNTaG93UG9wdXAxID0gMTsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHJlbm92ZSBhZHMgKyBmYWtlIHBsYXkgYnV0dG9uCiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI3BsYXllcl9pbWosICNwbGF5ZXJfaW1qICsgZGl2W2lkXScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXhhc2hhcmVfY29tIDogewogICAgICAgIC8vIGJ5OiBXYXRpbGluCiAgICAgICAgLy8gcHVsbDogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9wdWxsLzUxOQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWV4YXNoYXJlLmNvbQogICAgICAgIC8vIHRlc3Q6ICBodHRwOi8vZXhhc2hhcmUuY29tL2dhbHcyZ2Uya3pzdgogICAgICAgIGhvc3QgOiBbJ2V4YXNoYXJlLmNvbScsICdjaGVmdGkuaW5mbycsICdib2plbTNhLmluZm8nLCAnYWppaGV6by5pbmZvJywgJ3lhaG1haWIzYWkuY29tJywgJ3lhaG1haWIzYWkuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHNraXAgYW50aS1hZGJsb2NrCiAgICAgICAgICBBYWsudXcuYWRzU2hvd1BvcHVwMSA9IDE7CiAgICAgICAgfSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyByZW5vdmUgYWRzICsgZmFrZSBwbGF5IGJ1dHRvbgogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNwbGF5ZXJfZ2F6LCAjcGxheWVyX2dheiArIGRpdltpZF0nKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFuMW1lX3NlIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xOTAKICAgICAgICBob3N0IDogWydhbjFtZS5zZSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBBYWsudXcuaXNCbG9ja0FkczIgPSBmYWxzZTsKICAgICAgICAgIH0sIDEwMDAwKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGhxcV90diA6IHsgLy8gcHV0bG9ja2VyLmlzCiAgICAgICAgaG9zdCA6IFsnaHFxLnR2J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gKyBhYnAgcnVsZQogICAgICAgICAgLy8gaHR0cDovL2hxcS50di9wbGF5ZXIvZW1iZWRfcGxheWVyLnBocD92aWQ9UjNER0hHM0dLWFg3JmF1dG9wbGF5PW5vCiAgICAgICAgICBpZiAoJy9wbGF5ZXIvZW1iZWRfcGxheWVyLnBocCcgPT0gbG9jYXRpb24ucGF0aG5hbWUpIHsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybVtpZF49ImZvcm0tIl0nKS5zdWJtaXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFBvbGFuZAogICAgICB3cF9kb21haW5zIDogewogICAgICAgIC8vIE5vdGU6IGRpc2FibGUgRWFzeVByaXZhY3kKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTU2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzkwNQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zMDAKICAgICAgICBob3N0IDogWydiaXp0b2sucGwnLCAnd3AudHYnLCAnd3AucGwnLCAnc3BvcnRvd2VmYWt0eS5wbCcsICdrYWZldGVyaWEudHYnLCAna2FmZXRlcmlhLnBsJywgJy53cnp1dGEucGwnLCAncHVkZWxlay50dicsICdrb21lZGlvd28ucGwnLCAnc2ZvcmEucGwnLCAnYXV0b2tyYXRhLnBsJywgJ3Nwb3J0ZmFuLnBsJywgJ3dhd2Fsb3ZlLnBsJywgJ2hvdG1vbmV5LnBsJywgJ2FsZXNlcmlhbGUucGwnLCAnYmFib2wucGwnLCAnc25vYmthLnBsJywgJ25vY290eS5wbCcsICdtb25leS5wbCcsICdhYmN6ZHJvd2llLnBsJywgJ2dhZHpldG9tYW5pYS5wbCcsICdhdXRva3VsdC5wbCcsICdrb21vcmtvbWFuaWEucGwnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gcHJldmVudCBwb3B1cCBhbnRpLWFkYmxvY2sgZnJvbSBhYmN6ZHJvd2llLnBsCiAgICAgICAgICBBYWsuc2V0Q29va2llKCdBQkNBQkMnLCB0cnVlKTsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIAogICAgICAgICAgQWFrLmhhc0VsZW1lbnQoJy53cC1wbGF5ZXInLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJlcGxhY2VQbGF5ZXJXUCA9IGZ1bmN0aW9uIChtaWQsIHBsYXllcikgewogICAgICAgICAgICAgIC8qIFJlcXVlc3QKICAgICAgICAgICAgICBodHRwOi8vZ2V0LndwLnR2Lz9taWQ9MTY2MTA1NgogICAgICAgICAgICAgIGh0dHA6Ly93cC50di9wbGF5ZXIvbWlkLDE2NjEwNTYsZW1iZWQuanNvbgogICAgICAgICAgICAgIGh0dHA6Ly9nZXQud3AudHYvP2Y9Mjg5NjQ2Mi4xNDI2MzI5MDU2OTA0Lmwud2VibSZybmQ9MQogICAgICAgICAgICAgIGh0dHBzOi8vd3AudHYvcGxheWVyL21pZCwxNzQ3MTE3LGVtYmVkLmpzb24KICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBBYWsucmVxdWVzdCh7CiAgICAgICAgICAgICAgICB1cmwgOiAnaHR0cDovL3dwLnR2L3BsYXllci9taWQsJyArIG1pZCArICcsZW1iZWQuanNvbicsCiAgICAgICAgICAgICAgICBvbmxvYWQgOiBmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgIHZhciByZXMgPSByZXN1bHQucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgICB2YXIgb2JqID0gSlNPTi5wYXJzZShyZXMpOwogICAgICAgICAgICAgICAgICBBYWsubG9nKG9iaik7CgogICAgICAgICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgICAgICAgUGxheWVyLnZpZGVvanMocGxheWVyLCB7CiAgICAgICAgICAgICAgICAgICAgc291cmNlIDogQWFrLmZpeFByb3RvY29sVVJMKG9iai5jbGlwLnVybFsxXS51cmwpLCAvLyBIRAogICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICAgICAgICBhdXRvcGxheSA6IGZhbHNlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgdmFyIHJlcGxhY2VQbGF5ZXJXcnp1dGEgPSBmdW5jdGlvbiAoa2V5LCBjaGFubmVsLCBlbGVtKSB7CiAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53cnp1dGEucGwvbnBwL2VtYmVkL3dvbG5hcG9sc2thMi8wSTBIUTJtdXRKYwogICAgICAgICAgICAgICAgdXJsIDogJ2h0dHA6Ly93d3cud3J6dXRhLnBsL25wcC9lbWJlZC8nICsgY2hhbm5lbCArICcvJyArIGtleSwKICAgICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3VsdC5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBKU09OLnBhcnNlKHJlcyk7CiAgICAgICAgICAgICAgICAgIEFhay5sb2cob2JqKTsKCiAgICAgICAgICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgICAgICAgICBQbGF5ZXIudmlkZW9qcyhlbGVtLCB7CiAgICAgICAgICAgICAgICAgICAgc291cmNlIDogQWFrLmZpeFByb3RvY29sVVJMKG9iai51cmxbMF0udXJsKSwgLy9IRAogICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICAgICAgICBhdXRvcGxheSA6IGZhbHNlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gVXNpbmcgYW4gZXh0ZXJuYWwgZmxhc2ggcGxheWVyIGlzIGltcG9zc2libGUgYmVjYXVzZSBwcm90ZWN0ZWQgYnkgY3Jvc3Nkb21haW4ueG1sCiAgICAgICAgICAgIHZhciBwbGF5ZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwLXBsYXllcicpOyAvLyAgI1BsYXllcjAsICNQbGF5ZXIxLCAjbWFpblBsYXllcgogICAgICAgICAgICBpZiAocGxheWVycy5sZW5ndGgpIHsKICAgICAgICAgICAgICAvLyBmaXhidWcgZ21feGhyIGxvb3AgcmVxdWVzdCAtIGh0dHA6Ly90aW55dXJsLmNvbS9wcWE5aHRxCiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGF5ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbWlkID0gbnVsbDsKICAgICAgICAgICAgICAgIHZhciBwbGF5ZXIgPSBwbGF5ZXJzW2ldOwogICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHBsYXllci5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgdmFyIHNjcmlwdCA9IHBsYXllci5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBwbGF5ZXIucXVlcnlTZWxlY3RvcignLnRpdGxlQ29udCBhLnRpdGxlJyk7CiAgICAgICAgICAgICAgICB2YXIgZW1iZWR2aWRlb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbc3JjKj0iL2VtYmVkX3ZpZGVvLmpzIl0nKTsKICAgICAgICAgICAgICAgIEFhay5sb2cocGxheWVyLCBwYXJlbnQsIHNjcmlwdCwgdGl0bGUpOwoKICAgICAgICAgICAgICAgIGlmIChlbWJlZHZpZGVvcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgLy8gcHVkZWxlay53cnp1dGEucGw6IGh0dHA6Ly90aW55dXJsLmNvbS9sOGpvNXYyCiAgICAgICAgICAgICAgICAgIC8vIHB1ZGVsZWsudHY6IGh0dHA6Ly90aW55dXJsLmNvbS9rbHl6aDZyLCBodHRwOi8vdGlueXVybC5jb20vejdmcjg5dgogICAgICAgICAgICAgICAgICAvLyBwdWRlbGVrLnR2ICh0cmlwbGUpOiBodHRwOi8vdGlueXVybC5jb20vbjliMjdvMgogICAgICAgICAgICAgICAgICAvLyBmaWxtLndwLnBsOiBodHRwOi8vdGlueXVybC5jb20vcTdrNWJ4cAogICAgICAgICAgICAgICAgICB2YXIgZW1iZWR2aWRlbyA9IGVtYmVkdmlkZW9zW2ldOwogICAgICAgICAgICAgICAgICB2YXIga2V5ID0gL2tleT0oXHcrKS8uZXhlYyhlbWJlZHZpZGVvLnNyYylbMV07CiAgICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gL2xvZ2luPShcdyspLy5leGVjKGVtYmVkdmlkZW8uc3JjKVsxXTsKICAgICAgICAgICAgICAgICAgdmFyIGF1dG9zdGFydCA9IC9hdXRvcGxheS8udGVzdChlbWJlZHZpZGVvLnNyYyk7CiAgICAgICAgICAgICAgICAgIHJlcGxhY2VQbGF5ZXJXcnp1dGEoa2V5LCBjaGFubmVsLCBwbGF5ZXIsIGF1dG9zdGFydCk7CiAgICAgICAgICAgICAgICAgIEFhay5sb2coJ2VtYmVkX3ZpZGVvLmpzJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRpdGxlICYmIC9taWQvLnRlc3QodGl0bGUuaHJlZikpIHsKICAgICAgICAgICAgICAgICAgLy8gc3BvcnRvd2VmYWt0eS5wbDogaHR0cDovL3Rpbnl1cmwuY29tL2w2emFiY3gKICAgICAgICAgICAgICAgICAgbWlkID0gdGl0bGUuaHJlZi5tYXRjaCgvbWlkWz0sXShbMC05XSspLyk7CiAgICAgICAgICAgICAgICAgIEFhay5sb2coJ3RpdGxlLmhyZWYnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50LmlkKSB7CiAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuZGF0YXNldC51cmwpIHsKICAgICAgICAgICAgICAgICAgICAvLyB3cC50djogaHR0cDovL3Rpbnl1cmwuY29tL3B6ZGUyOXQKICAgICAgICAgICAgICAgICAgICBtaWQgPSBwYXJlbnQuZGF0YXNldC51cmwubWF0Y2goL21pZFs9LF0oWzAtOV0rKS8pOwogICAgICAgICAgICAgICAgICAgIEFhay5sb2coJ3BhcmVudC5kYXRhc2V0LnVybCcpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQucHJldmlvdXNTaWJsaW5nLmlubmVySFRNTCkgewogICAgICAgICAgICAgICAgICAgICAgLy8gd2lhZG9tb3NjaS53cC5wbDogaHR0cDovL3Rpbnl1cmwuY29tL2dxdHQ5Y2EKICAgICAgICAgICAgICAgICAgICAgIG1pZCA9IHBhcmVudC5wcmV2aW91c1NpYmxpbmcuaW5uZXJIVE1MLm1hdGNoKC9taWRbPSxdKFswLTldKykvKTsKICAgICAgICAgICAgICAgICAgICAgIEFhay5sb2coJ3NjcmlwdC5pbmxpbmUuaW5uZXJIVE1MJyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIGthZmV0ZXJpYS50djogaHR0cDovL3Rpbnl1cmwuY29tL25vZnA1OGEKICAgICAgICAgICAgICAgICAgICAgIC8vIGFiY3pkcm93aWUucGw6IGh0dHA6Ly90aW55dXJsLmNvbS9oeDZzNWV0CiAgICAgICAgICAgICAgICAgICAgICBtaWQgPSBwYXJlbnQuaW5uZXJIVE1MLm1hdGNoKC9taWRbPSxdKFswLTldKykvKTsKICAgICAgICAgICAgICAgICAgICAgIEFhay5sb2coJ3BhcmVudC5pbm5lckhUTUwnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0ICYmIHNjcmlwdC50YWdOYW1lID09ICdTQ1JJUFQnKSB7CiAgICAgICAgICAgICAgICAgIC8vIGZpbG0ud3AucGw6IGh0dHA6Ly90aW55dXJsLmNvbS9taDlvbmZ3CiAgICAgICAgICAgICAgICAgIC8vIHB1ZGVsZWsudHYgKGRvdWJsZSk6IGh0dHA6Ly90aW55dXJsLmNvbS9sZWZ2d3R4CiAgICAgICAgICAgICAgICAgIG1pZCA9IHNjcmlwdC5pbm5lckhUTUwubWF0Y2goL21pZFs9LF0oWzAtOV0rKS8pOwogICAgICAgICAgICAgICAgICBBYWsubG9nKCdzY3JpcHQuc3JjLmlubmVySFRNTCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG1pZCAhPT0gbnVsbCAmJiBtaWQubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgICAgICAgcmVwbGFjZVBsYXllcldQKG1pZFsxXSwgcGxheWVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbW9qZV9maWxteV9uZXR3b3JrOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwMTAKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vN0cyUkJucXEKICAgICAgICBob3N0IDogWydtb2plLWZpbG15LnRrJywgJ21vamUtZmlsbXkubGl2ZSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBzZWFyY2h2YWx1ZSA9IFsndmFyIHBsYXllckluc3RhbmNlJywgJ30pOyddOwogICAgICAgICAgdmFyIHNjcmlwdCA9IEFhay5oYXNTY3JpcHQoc2VhcmNodmFsdWVbMF0pOwoKICAgICAgICAgIGlmIChzY3JpcHQpIHsKICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHNjcmlwdC5pbm5lckhUTUw7CiAgICAgICAgICAgIHZhciBzdHIgPSBzb3VyY2Uuc3Vic3RyaW5nKHNvdXJjZS5sYXN0SW5kZXhPZihzZWFyY2h2YWx1ZVswXSksIHNvdXJjZS5sYXN0SW5kZXhPZihzZWFyY2h2YWx1ZVsxXSkgKyBzZWFyY2h2YWx1ZVsxXS5sZW5ndGgpOwogICAgICAgICAgICBBYWsuYWRkU2NyaXB0KHN0cik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB0dm5fcGwgOiB7CiAgICAgICAgLy8gYnk6IFJlZWssIE1hcmVrCiAgICAgICAgLy8gc29sdXRpb246IGh0dHA6Ly90aW55dXJsLmNvbS9vaGJ2ejRyLCBodHRwOi8vdGlueXVybC5jb20vanE4czQ2MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPXR2bi5wbAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPXR2bjI0LnBsCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9cGxheWVyLnBsCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL282ZDloNjYsIGh0dHA6Ly90aW55dXJsLmNvbS96NzdtNHpoCiAgICAgICAgaG9zdCA6IFsndHZuLnBsJywgJ3R2bjI0LnBsJywgJ3BsYXllci5wbCddLAogICAgICAgIG9uRW5kIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmhhc0VsZW1lbnQoJ2hlYWRlci5kZXRhaWxJbWFnZScsIGZ1bmN0aW9uICh0aGlzRWxlbWVudCkgewogICAgICAgICAgICBpZiAoQWFrLmdldENvb2tpZSgnY291bnRyeV9jb2RlJykgJiYgQWFrLmdldFNlc3Npb24oJ2dlbmVyYXRlVG9rZW4nKSkgewogICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi5zcGxpdCgvWy4sXS8pOwogICAgICAgICAgICAgICAgdmFyIGlkID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl07CiAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gewogICAgICAgICAgICAgICAgICBwbGF0Zm9ybSA6ICJNb2JpbGUiLAogICAgICAgICAgICAgICAgICB0ZXJtaW5hbCA6ICJBbmRyb2lkIiwKICAgICAgICAgICAgICAgICAgZm9ybWF0IDogImpzb24iLAogICAgICAgICAgICAgICAgICB2IDogIjIuMCIsCiAgICAgICAgICAgICAgICAgIGF1dGhLZXkgOiAiYjRiYzk3MTg0MGRlNjNkMTA1YjMxNjY0MDNhYTFiZWEiLAogICAgICAgICAgICAgICAgICB0eXBlIDogImVwaXNvZGUiLAogICAgICAgICAgICAgICAgICBpZCA6IGlkLAogICAgICAgICAgICAgICAgICBzb3J0IDogIm5ld2VzdCIsCiAgICAgICAgICAgICAgICAgIG0gOiAiZ2V0SXRlbSIsCiAgICAgICAgICAgICAgICAgIGRldmljZVNjcmVlbkhlaWdodCA6IDE2MDAsCiAgICAgICAgICAgICAgICAgIGRldmljZVNjcmVlbldpZHRoIDogMjU2MAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9hcGkudHZucGxheWVyLnBsL2FwaS8/JyArIEFhay5zZXJpYWxpemUocGFyYW1zKTsKICAgICAgICAgICAgICAgIHZhciBwcm94eSA9ICdodHRwOi8vd3d3LnByb3h5LnhtYy5wbC9pbmRleC5waHA/aGw9M2U1JnE9JzsJCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIEdldCB2aWRlb1VybAogICAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICAgICAgICB1cmwgOiBBYWsuZ2V0Q29va2llKCdjb3VudHJ5X2NvZGUnKSAhPSAnUEwnID8gcHJveHkgKyBBYWsuZW5jb2RlVVJJKGFwaSkgOiBhcGksCiAgICAgICAgICAgICAgICAgIGhlYWRlcnMgOiB7CiAgICAgICAgICAgICAgICAgICAgIlVzZXItQWdlbnQiIDogIk1vemlsbGEvNS4wIChMaW51eDsgVTsgQW5kcm9pZCA0LjI7IGVuLXVzOyBOZXh1cyAxMCBCdWlsZC9KVlAxNUkpIEFwcGxlV2ViS2l0LzUzNC4zMCAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIFNhZmFyaS81MzQuMzAiCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcmVzdWx0LnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgICBBYWsubG9nKHJlcyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHJlcyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvVXJsID0gby5pdGVtLnZpZGVvcy5tYWluLnZpZGVvX2NvbnRlbnRbTnVtYmVyKEFhay5vcHRzLnZpZGVvSEQpXS51cmw7CiAgICAgICAgICAgICAgICAgICAgdmFyIGdlbmVyYXRlVG9rZW4gPSBuZXcgRnVuY3Rpb24oJ3ZpZGVvVXJsJywgQWFrLmdldFNlc3Npb24oJ2dlbmVyYXRlVG9rZW4nKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvVXJsV2l0aFNlZWQgPSBnZW5lcmF0ZVRva2VuKHZpZGVvVXJsKTsKICAgICAgICAgICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgICAgICAgICBQbGF5ZXIudmlkZW9qcyh0aGlzRWxlbWVudCwgewogICAgICAgICAgICAgICAgICAgICAgc291cmNlIDogdmlkZW9VcmxXaXRoU2VlZCwKICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBmYWxzZQogICAgICAgICAgICAgICAgICAgIH0sIHt9LCB7aW5zZXJ0Oidpbm5lcid9KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoeyAvLyBnZXQgYW5kIHN0b3JlIGdlbmVyYXRlVG9rZW4gZnVuY3Rpb24KICAgICAgICAgICAgICAgIHVybCA6ICdodHRwOi8vcGFzdGViaW4uY29tL3Jhdy9EOXFNNERSMycsCiAgICAgICAgICAgICAgICBvbmxvYWQgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgQWFrLnNldFNlc3Npb24oJ2dlbmVyYXRlVG9rZW4nLCByZXMpOwogICAgICAgICAgICAgICAgICBBYWsucmVxdWVzdCh7IC8vIGdldCB1c2VyIGlwCiAgICAgICAgICAgICAgICAgICAgdXJsIDogJ2h0dHA6Ly9pcC1hcGkuY29tL2pzb24nLAogICAgICAgICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXMpOwogICAgICAgICAgICAgICAgICAgICAgQWFrLnNldENvb2tpZSgnY291bnRyeV9jb2RlJywganNvbi5jb3VudHJ5Q29kZSk7CiAgICAgICAgICAgICAgICAgICAgICBBYWsucmVmcmVzaCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgaXBsYV90diA6IHsKICAgICAgICAvLyBieTogTWFyZWsKICAgICAgICAvLyBzb2x1dGlvbjogaHR0cDovL3Rpbnl1cmwuY29tL3B0YjR5YmcKICAgICAgICAvLyBpc3N1ZS4gaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTIyCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL2h6N2dweHgKICAgICAgICBob3N0IDogWydpcGxhLnR2J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCcuaHRtbDUtcGxheWVyLXdyYXBwZXIgeyBkaXNwbGF5Om5vbmU7IH0nKTsgLy8gY2hyb21lL29wZXJhCiAgICAgICAgICB2YXIgb2xkUGxheWVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmh0bWw1LXBsYXllci13cmFwcGVyLCAjdm9kLXBsYXllcicpOwogICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICB1cmwgOiAnL1ZPRC9wbGF5LWluLWlwbGEvJyArIGxvY2F0aW9uLmhyZWYubWF0Y2goL1wvdm9kLShcZCspLylbMV0sCiAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICB2YXIgdmlkZW9VUkw7CiAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3VsdC5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgdmFyIGlkbiA9IHJlcy5tYXRjaCgvaXBsYTpcL1wvcGxheXZvZC0xXHwoW2EtejAtOV0rKS8pWzFdOwogICAgICAgICAgICAgIEFhay5sb2coaWRuKTsKICAgICAgICAgICAgICBBYWsucmVxdWVzdCh7CiAgICAgICAgICAgICAgICB1cmwgOiAnaHR0cDovL2dldG1lZGlhLnJlZGVmaW5lLnBsL3ZvZHMvZ2V0X3ZvZC8/Y3BpZD0xJnVhPW1pcGxhLzIzJm1lZGlhX2lkPScgKyBpZG4sCiAgICAgICAgICAgICAgICBvbmxvYWQgOiBmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgIHZhciByZXMgPSByZXN1bHQucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgICB2YXIgbyA9IEpTT04ucGFyc2UocmVzKTsKICAgICAgICAgICAgICAgICAgQWFrLmxvZyhvKTsKICAgICAgICAgICAgICAgICAgaWYgKG8udm9kLnZpZGVvX2hkKSB7CiAgICAgICAgICAgICAgICAgICAgdmlkZW9VUkwgPSBvLnZvZC52aWRlb19oZDsKICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvLnZvZC52aWRlbykgewogICAgICAgICAgICAgICAgICAgIHZpZGVvVVJMID0gby52b2QudmlkZW87CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmlkZW9VUkwgPSBvLnZvZC5jb3BpZXNbMF0udXJsOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgICAgICAgUGxheWVyLnZpZGVvanMob2xkUGxheWVyLCB7CiAgICAgICAgICAgICAgICAgICAgc291cmNlIDogdmlkZW9VUkwsCiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICdtcDQnLAogICAgICAgICAgICAgICAgICAgIHdpZHRoIDogODIwLAogICAgICAgICAgICAgICAgICAgIGhlaWdodCA6IDQ1MCwKICAgICAgICAgICAgICAgICAgICBhdXRvcGxheSA6IGZhbHNlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGtvc2NpYW5fbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy85MTQKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20veUdTUEJScWUKICAgICAgICBob3N0IDogWydrb3NjaWFuLm5ldCddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYW4nKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgZWxlbXNbaV0ucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vZWxlbXNbaV0uaW5uZXJIVE1MID0gJzxicj4nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gRnJhbmNlCiAgICAgIHBsYXl0dl9mciA6IHsgLy8gcmVzZWFyY2ggc29sdXRpb24KICAgICAgICBob3N0IDogWydwbGF5LnR2JywgJ3BsYXl0di5mciddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkge30sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7fQogICAgICB9LAogICAgICBybWNzcG9ydGJmbXR2X2NvbSA6IHsgLy8gd2VicmFkaW8KICAgICAgICBob3N0IDogWydybWNzcG9ydC5iZm10di5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgdmFyIGZsYXNodmFycyA9IHsKICAgICAgICAgICAgdXJsUmFkaW8gOiAiaHR0cDovL21wM2xnNC50ZGYtY2RuLmNvbS8xMDE2MC9ybWMubXAzIiwKICAgICAgICAgICAgbm9tIDogImxpdmUiLAogICAgICAgICAgICBjYXRlZ29yaWUgOiAibGl2ZSIsCiAgICAgICAgICAgIHVybFNtYXJ0IDogIiIgLy8gc2V0IGVtcHR5IHRvIHJlbW92ZSBhdWRpbyBhZAogICAgICAgICAgfTsKICAgICAgICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgICAgIHdtb2RlIDogInRyYW5zcGFyZW50IgogICAgICAgICAgfTsKCiAgICAgICAgICBBYWsudXcuc3dmb2JqZWN0LmVtYmVkU1dGKCIvc3dmL1JNQ0xJVkUuc3dmIiwgImxpdmVwbGF5ZXIiLCAiNzAiLCAiOTAiLCAiMTAuMC4wIiwgIiIsIGZsYXNodmFycywgcGFyYW1zKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGVjbHlwc2lhX2NvbSA6IHsKICAgICAgICBob3N0IDogWydlY2x5cHNpYS5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIFNvbHV0aW9uIDEKICAgICAgICAgIC8vIGFicCBydWxlcwoKICAgICAgICAgIC8vIFNvbHV0aW9uIDIKICAgICAgICAgIEFhay51dy5pc0FCQWN0aXZhdGVkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9OyAvLyBLaWxsIGFudGlhZGJsb2NrCiAgICAgICAgICBBYWsudXcucmVmcmVzaF9pZnJhbWUgPSBmdW5jdGlvbiAoKSB7fTsgLy8gU3RvcCBhZHMgdG8gYmUgbG9hZGVkCiAgICAgICAgfSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIFNvbHV0aW9uIDMKICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W2lkXj0id2VidHZfaWZyYW1lXyJdJyk7CiAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCkgewogICAgICAgICAgICB2YXIgdmlkZW9JZCA9IGVsZW1lbnQuaWQuc3BsaXQoJ18nKVsyXTsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGlmcmFtZSBmcmFtZWJvcmRlcj0iMCIgd2lkdGg9IjgxMiIgaGVpZ2h0PSI1MDAiIHNyYz0iaHR0cDovL3d3dy5kYWlseW1vdGlvbi5jb20vZW1iZWQvdmlkZW8vJyArIHZpZGVvSWQgKyAnP2xvZ289MCZhdXRvUGxheT0xJmF1dG9NdXRlPTAiPjwvaWZyYW1lPic7CiAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgbTZ3ZWJfZnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ2MQogICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly90aW55dXJsLmNvbS9wdG4ydnJsCiAgICAgICAgaG9zdCA6IFsnbTZ3ZWIuZnInXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBwbGF5ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdvYmplY3RbaWQkPSJfZmxhc2hfYXBpIl0nKTsKICAgICAgICAgIHZhciBzY3JpcHQgPSBBYWsuaGFzU2NyaXB0KCdNNi5QbGF5ZXIuY29uZmlnJyk7CgogICAgICAgICAgaWYgKHBsYXllciAhPT0gbnVsbCAmJiBzY3JpcHQgIT09IG51bGwpIHsKICAgICAgICAgICAgdmFyIGZvdW5kID0gc2NyaXB0LmlubmVySFRNTC5tYXRjaCgvTTYuUGxheWVyLmNvbmZpZyA9IChcey4rXH0pOy8pOwogICAgICAgICAgICB2YXIgY29uZmlnID0gSlNPTi5wYXJzZShmb3VuZC5wb3AoKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBSZXBsYWNlIHBsYXllcgogICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgUGxheWVyLnZpZGVvanMocGxheWVyLnBhcmVudE5vZGUsIHsKICAgICAgICAgICAgICBzb3VyY2UgOiBjb25maWcuc291cmNlc1sxXS5zcmMsCiAgICAgICAgICAgICAgdHlwZSA6ICdtcDQnLAogICAgICAgICAgICAgIGF1dG9wbGF5IDogZmFsc2UKICAgICAgICAgICAgfSk7CgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2FtaW5ncm9vbV90diA6IHsKICAgICAgICBob3N0IDogWydnYW1pbmdyb29tLnR2J10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRibG9ja19kZXRlY3QgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5HUl9hZGJsb2NrX2hpZGVfdmlkZW8gPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5hZGJsb2NrX3ZpZGVvX21zZ19zdGFydCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgICAgQWFrLnV3LmFkYmxvY2tfdmlkZW9fbXNnX3N0b3AgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5kaXNhYmxlX2NoYXQgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEdlcm1hbnkKICAgICAgbm93X2RvbWFpbnMgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzMzNgogICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly90aW55dXJsLmNvbS9wZWVvYm91CiAgICAgICAgLy8gdGVzdDogaHR0cDovL2pzYmluLmNvbS92dWNvYmVqb2ZvCiAgICAgICAgaG9zdCA6IFsndm94bm93LmRlJywgJ3J0bC1ub3cucnRsLmRlJywgJ3J0bDJub3cucnRsMi5kZScsICduLXR2bm93LmRlJywgJ3N1cGVycnRsbm93LmRlJywgJ3J0bG5pdHJvbm93LmRlJywgJ25vd3R2LmRlJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLyoKICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgUGxheWVyLmVkaXRpbmcoJyN2aWRlb3BsYXllcicsIHsKICAgICAgICAgIHVuc2V0Rmxhc2h2YXJzIDogJ2FiY2hlY2tfZW5hYmxlZCxhZGNhbGwsYWRjbGFzc2VzLGFkY29uZmlnLGFkbWV0YSxhZHNsb2csYWdvZixhbWEsYW5nZWJvdCxhcyxhc3BhcnRzLGJyZWFrYWQsY29ubmVjdGlvbmNoZWNrLGNzbG9nLGRldixkaW1tZXIsZXJyb3Jsb2csZmVlZGJhY2ssZm1zaWRlbnQsZ3R2LGhpZ2hsaWdodHMsaXZ3LGl2d19wbGF5LGpzLGpzX2V2ZW50X2Z1bmN0aW9uLGxvZ28sbG9nb19iYXNld2lkdGgsbG9nb3BvcyxuaWVsc2VuLG9yZCxvc21mLHN2bSx0aWxlLHZpZGVvcGxhemEsdmlkZW9wbGF6YV9iYXNlX3VybCx2aWRlb3BsYXphX3NoYXJlLHZpZGVvcGxhemFfdGFnLHZwRW52aXJvbm1lbnRVUkwseGwnCiAgICAgICAgICB9KTsKICAgICAgICAgICAqLwogICAgICAgIH0KICAgICAgfSwKICAgICAgcnRsX2RlIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTQxCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL2g3Y2N2cXEKICAgICAgICBob3N0IDogWydydGwuZGUnXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkaXZbZGF0YS13aWRnZXQ9InZpZGVvIl0nKSkubWFwKGZ1bmN0aW9uICh2aWRlbykgewogICAgICAgICAgICB2YXIgY2ZnID0gQWFrLmludG9PYmplY3QodmlkZW8uZGF0YXNldC5wbGF5ZXJMYXllckNmZyk7CiAgICAgICAgICAgIHZhciBmaWxlID0gY2ZnLnZpZGVvaW5mby5tcDR1cmw7CiAgICAgICAgICAgIEFhay5sb2codmlkZW8sIGNmZywgZmlsZSk7CgogICAgICAgICAgICAvLyBSZXBsYWNlIHBsYXllcgogICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgUGxheWVyLnZpZGVvanModmlkZW8sIHsKICAgICAgICAgICAgICBzb3VyY2UgOiBmaWxlLAogICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICBhdXRvcGxheSA6IGZhbHNlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBteXNwYXNzX2RlIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy83NgogICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly90aW55dXJsLmNvbS9sdG85cHlkCiAgICAgICAgaG9zdCA6IFsnbXlzcGFzcy5kZSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciB2aWRlb2lkID0gbG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL1wvKFxkKylcLyQvKTsKCiAgICAgICAgICBpZiAodmlkZW9pZCAhPT0gbnVsbCkgewogICAgICAgICAgICBBYWsucmVxdWVzdCh7CiAgICAgICAgICAgICAgdXJsIDogJ2h0dHA6Ly93d3cubXlzcGFzcy5kZS9teXNwYXNzL2luY2x1ZGVzL2FwcHMvdmlkZW8vZ2V0dmlkZW9tZXRhZGF0YXhtbC5waHA/aWQ9JyArIHZpZGVvaWRbMV0sCiAgICAgICAgICAgICAgb25sb2FkIDogZnVuY3Rpb24gKHJlc3VsdCkgewogICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3VsdC5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgICBBYWsubG9nKHJlcyk7CgogICAgICAgICAgICAgICAgLy8gR2V0IHZpZGVvCiAgICAgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTsKICAgICAgICAgICAgICAgIHZhciBkb20gPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHJlcywgImFwcGxpY2F0aW9uL3htbCIpOwogICAgICAgICAgICAgICAgdmFyIGZpbGUgPSBkb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInVybF9mbHYiKS5pdGVtKDApLnRleHRDb250ZW50OwoKICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50cwogICAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJ2Rpdi5sb2FkaW5nR2lmJyk7CgogICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBwbGF5ZXIKICAgICAgICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgICAgICAgUGxheWVyLnZpZGVvanMoJyNwbGF5ZXInLCB7CiAgICAgICAgICAgICAgICAgIHNvdXJjZSA6IGZpbGUsCiAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgOiBmYWxzZQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBOZWRlcmxhbmQKICAgICAgcnRseGxfbmwgOiB7CiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL2wyemt2M2QKICAgICAgICBob3N0IDogWydydGx4bC5ubCcsICdydGxuaWV1d3MubmwnXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgUGxheWVyLmVkaXRpbmcoJyNfcnRsb3NtZjAnLCB7CiAgICAgICAgICAgIHNldEZsYXNodmFycyA6IHsKICAgICAgICAgICAgICBhZGJsb2NrIDogZmFsc2UKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBOb3J3YXkKICAgICAgdmd0dl9uZXR3b3JrIDogewogICAgICAgIC8vIG5vdGU6IHNraXAgdmlkZW8gYWRzICsgYW50aS1hZGJsb2NrCiAgICAgICAgLy8gandwbGF5ZXI6IGh0dHA6Ly90aW55dXJsLmNvbS96eXY3OWhnCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE0MDIKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMzY3CiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL253cDg1dCwgaHR0cDovL3Rpbnl1cmwuY29tL253cDg1dAogICAgICAgIGhvc3QgOiBbJ3ZndHYubm8nLCAndmcubm8nXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBvbGRIYXNoID0gbnVsbDsKICAgICAgICAgIHZhciB2aWRlb0lkID0gbnVsbDsKICAgICAgICAgIHZhciB2aWRlb0lkUmVnZXggPSAvI1whXC92aWRlb1wvKFxkKylcLy87CgogICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGxvY2F0aW9uIGhhc2ggY2hhbmdlcwogICAgICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgcGxheWVyID0gQWFrLmdldEVsZW1lbnQoJy52aWRlby1wbGF5ZXInKTsKCiAgICAgICAgICAgIGlmIChwbGF5ZXIgJiYgbG9jYXRpb24uaGFzaCAhPSBvbGRIYXNoICYmIHZpZGVvSWRSZWdleC50ZXN0KGxvY2F0aW9uLmhhc2gpKSB7CiAgICAgICAgICAgICAgb2xkSGFzaCA9IGxvY2F0aW9uLmhhc2g7CiAgICAgICAgICAgICAgdmlkZW9JZCA9IG9sZEhhc2gubWF0Y2godmlkZW9JZFJlZ2V4KVsxXTsKLyoKICAgICAgICAgICAgICB2YXIgaGxzdXJsID0gJ2h0dHBzOi8vc3Zwc2VjdXJlaGR2b2QtdmguYWthbWFpaGQubmV0L2kvMjAxNi8wMy8yMDE2MDMxMl81NmU0MjFmODZhZjQ1X3ZnMDEvLDEyODBfNzIwXzM1MDAsOTYwXzU0MF8xNTAwLDY0MF8zNjBfODAwLDQ4MF8yNzBfNTAwLC5tcDQuY3NtaWwvbWFzdGVyLm0zdTgnOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBsYXllcikKCiAgICAgICAgICAgICAgLy8gZG9uJ3Qgd29yayB3aXRoIGNocm9tZQogICAgICAgICAgICAgIC8vIHBsYXllci5pbm5lckhUTUwgPSAnPGRpdiBpZD0ibm9BZFBsYXllciI+VGhpcyB0ZXh0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHBsYXllci48L2Rpdj4nOwoKCiAgICAgICAgICAgICAgLy8gY2FuJ3QgbG9hZCBtM3U4IDQwMzIgc3RhdHVzIGNvZGUKICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHVuc2FmZVdpbmRvdy5qd3BsYXllcikKCiAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICAgICAgdXJsIDogJ2h0dHA6Ly9zdnAudmcubm8vc3ZwL2FwaS92MS92Z3R2L2Fzc2V0cy8nICsgdmlkZW9JZCArICc/YWRkaXRpb25hbD1zZXR0aW5nc3xjaGFwdGVyc3xjdWVQb2ludHN8ZXh0ZXJuYWxJZHxiYXJyZWxzfGV4dGVybmFsQ2F0ZWdvcnlJZHxuZXh0QXNzZXQmYXBwTmFtZT12Z3R2LXdlYnNpdGUnLAogICAgICAgICAgICAgICAgb25sb2FkIDogZnVuY3Rpb24gKHJlc3VsdCkgewogICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcmVzdWx0LnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IEpTT04ucGFyc2UocmVzKTsKICAgICAgICAgICAgICAgICAgQWFrLmxvZyhvYmopOwoKICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBwbGF5ZXIKICAgICAgICAgICAgICAgICAgdmFyIFBsYXllciA9IG5ldyBBYWsucGxheWVyKCk7CiAgICAgICAgICAgICAgICAgIFBsYXllci52bGMocGxheWVyLCB7CiAgICAgICAgICAgICAgICAgICAgc291cmNlIDogb2JqLnN0cmVhbVVybHMuaGxzLCAvLyBtM3U4CiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICdobHMnLAogICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5IDogZmFsc2UKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwge30sIHsKICAgICAgICAgICAgICAgIGluc2VydCA6ICdpbm5lcicKICAgICAgICAgICAgICB9KTsKKi8KICAgICAgICAgICAgfQogICAgICAgICAgfSwgMWUzKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG10Z19yYWRpbyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTQ5NQogICAgICAgIGhvc3QgOiBbJ3BsYXkucmFkaW8xLnNlJywgJ3BsYXkuYmFuZGl0LnNlJywgJ3BsYXkubHVnbmFmYXZvcml0ZXIuY29tJywgJ3BsYXkucml4Zm0uc2UnXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB3aW5kb3cucGxheWVyX2xvYWRfbGl2ZSh3aW5kb3cuc3RyZWFtX2lkKTsKICAgICAgICAgICAgfSwgMTAwMCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRwbGF5X25ldHdvcmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE0NjMKICAgICAgICBob3N0IDogWydkcGxheS5jb20nLCAnZHBsYXkuZGsnLCAnZHBsYXkuc2UnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMzY1KTsKICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKS50b1N0cmluZygpOwogICAgICAgICAgdmFyIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICJub3RpZmljYXRpb25TdWJtaXNzaW9uIiA6ICJzdWJtaXR0ZWQiLAogICAgICAgICAgICAgICJyZXBvcnRpbmdFeHBpcnkiIDogdGltZXN0YW1wLAogICAgICAgICAgICAgICJub3RpZmljYXRpb25FeHBpcnkiIDogdGltZXN0YW1wCiAgICAgICAgICAgIH0pOwogICAgICAgICAgQWFrLnNldENvb2tpZSgnZHNjLWFkYmxvY2snLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9LAogICAgICB2aWFzYXRfdHYgOiB7CiAgICAgICAgLy8gbm90ZTogc2tpcCB2aWRlbyBhZHMgKyBhbnRpLWFkYmxvY2sKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT10djNwbGF5CiAgICAgICAgLyogdGVzdDogaHR0cDovL3d3dy50djNwbGF5Lm5vL3Byb2dyYW1tZXIvcmVkbmluZ3Nza295dGEgaGRzL2hscwogICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy50djNwbGF5LmRrL3Byb2dyYW1tZXIvbGluc2Utb2ctZGlkZGUtZWtzdHJhIGhkcy9obHMKICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudHYzcGxheS5zZS9wcm9ncmFtL2dsYW1vdXJhbWEgaGRzL2hscwogICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy50djZwbGF5LnNlL3Byb2dyYW0vOTktc2FrZXItbWFuLW1hc3RlLWdvcmEtaW5uYW4tbWFuLWRvciBoZHMvaGxzCiAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnR2OHBsYXkuc2UvcHJvZ3JhbS9lZnRlcmx5c3QtLTEgaGRzL2hscwogICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy50djEwcGxheS5zZS9wcm9ncmFtL2dhcnBlbnMtZXVyb3BhIGhkcy9obHMKICAgICAgICAgICAgICAgICAgIGh0dHA6Ly90dnBsYXkuc2thdGllcy5sdi9wYXJyYWlkZXMvdHYzLXppbmFzIGhkcy9obHMKICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9wbGF5LnR2My5sdC9wcm9ncmFtb3MvYmVhdG9zLXZpcnR1dmUgcnRtcC9obHMKICAgICAgICAgICAgICAgICAgIGh0dHA6Ly90djNwbGF5LnR2My5lZS9zaXN1L3B1aGFwYWV2LXNlcG9nYSBydG1wL2hscyAqLwogICAgICAgIGhvc3QgOiBbJ3R2M3BsYXkubm8nLCAndHYzcGxheS5kaycsICd0djNwbGF5LnNlJywgJ3R2NnBsYXkuc2UnLCAndHY4cGxheS5zZScsICd0djEwcGxheS5zZScsICd0dnBsYXkuc2thdGllcy5sdicsICdwbGF5LnR2My5sdCcsICd0djNwbGF5LnR2My5lZSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5oYXNFbGVtZW50KCcjdmlkZW8tcGxheWVyJywgZnVuY3Rpb24gKHRoaXNFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXNFbGVtZW50LmlkID0gJyc7CiAgICAgICAgICAgIC8vdmFyIHZpZGVvSWQgPSBsb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpOwogICAgICAgICAgICB2YXIgdmlkZW9JZCA9IHRoaXNFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS12aWRlby1pZCcpOwogICAgICAgICAgICBBYWsubG9nKHRoaXNFbGVtZW50LCB2aWRlb0lkKTsKCiAgICAgICAgICAgIC8vIGdldCB2aWRlbyBzb3VyY2VzCiAgICAgICAgICAgIEFhay5yZXF1ZXN0KHsKICAgICAgICAgICAgICB1cmwgOiAnaHR0cDovL3BsYXlhcGkubXRneC50di92My92aWRlb3Mvc3RyZWFtLycgKyB2aWRlb0lkLAogICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgIHZhciByZXMgPSByZXN1bHQucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgdmFyIG9iaiA9IEpTT04ucGFyc2UocmVzKTsKICAgICAgICAgICAgICAgIEFhay5sb2cob2JqKTsKCiAgICAgICAgICAgICAgICAvKiBJbm5ob2xkZXQgZHUgcHLDuHZlciDDpSBzZSBlciBrdW4gdGlsZ2plbmdlbGlnIGZvciBicnVrZXJlIGkgTm9yZ2UKICAgICAgICAgICAgICAgIFByb2dyYW1tZXQgZXIgYmxva2VyZXQgZm9yIHZpc25pbmcgZnJhIGRlbm5lIGdlb2dyYWZpc2tlIHBvc2l0aW9uLgogICAgICAgICAgICAgICAgUHJvZ3JhbcSFIGdhbGl0ZSBtYXR5dGkgdGlrIGp1bmdkYW1pZXNpIGnFoSBMaWV0dXZvcyBpbnRlcm5ldG8gdGlla8SXasWzIHRpbmtsxbMgKi8KICAgICAgICAgICAgICAgIGlmIChvYmoubXNnKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzRWxlbWVudC5pbm5lckhUTUwgPSBvYmoubXNnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5ob3N0ID09PSAndHYzcGxheS50djMuZWUnKSB7CiAgICAgICAgICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgICAgICAgICBQbGF5ZXIuZ3JpbmRwbGF5ZXIodGhpc0VsZW1lbnQsIHsKICAgICAgICAgICAgICAgICAgICBzb3VyY2UgOiBvYmouc3RyZWFtcy5tZWRpdW0sCiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICdydG1wL21wNCcsCiAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIHZpZGVvIHRhZyBmb3IgbmV3IHBsYXllcgogICAgICAgICAgICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICAgICAgICAgICAgdGFnIDogJ3ZpZGVvJywKICAgICAgICAgICAgICAgICAgICBpZCA6ICdub0FkUGxheWVyJywKICAgICAgICAgICAgICAgICAgICBjbGFzc2lkIDogJ3ZpZGVvLWpzIHZqcy1kZWZhdWx0LXNraW4nLAogICAgICAgICAgICAgICAgICAgIHdpZHRoIDogdGhpc0VsZW1lbnQuY2xpZW50V2lkdGggfHwgNzMwLAogICAgICAgICAgICAgICAgICAgIGhlaWdodCA6IHRoaXNFbGVtZW50LmNsaWVudEhlaWdodCB8fCA0MTAsCiAgICAgICAgICAgICAgICAgICAgcHJlbG9hZCA6ICdhdXRvJywKICAgICAgICAgICAgICAgICAgICBjb250cm9scyA6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgOiB0aGlzRWxlbWVudAogICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNvdXJjZXMKICAgICAgICAgICAgICAgICAgdmFyIHNyY0FycmF5ID0gW107CiAgICAgICAgICAgICAgICAgIGlmIChvYmouc3RyZWFtcy5oaWdoICYmIG9iai5zdHJlYW1zLmhpZ2ggIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgc3JjQXJyYXkucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICB0eXBlIDogInZpZGVvL21wNCIsIC8vIG1wNAogICAgICAgICAgICAgICAgICAgICAgc3JjIDogb2JqLnN0cmVhbXMuaGlnaAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9ICBpZiAob2JqLnN0cmVhbXMuaGxzICYmIG9iai5zdHJlYW1zLmhscyAhPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICBzcmNBcnJheS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiAiYXBwbGljYXRpb24veC1tcGVnVVJMIiwgLy8gbTN1OAogICAgICAgICAgICAgICAgICAgICAgc3JjIDogb2JqLnN0cmVhbXMuaGxzCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0gIGlmIChvYmouc3RyZWFtcy5tZWRpdW0gJiYgb2JqLnN0cmVhbXMubWVkaXVtICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gb2JqLnN0cmVhbXMubWVkaXVtLmluZGV4T2YoJ3J0bXAnKSA9PT0gMCA/ICdydG1wL21wNCcgOiAnYXBwbGljYXRpb24vZjRtK3htbCc7CiAgICAgICAgICAgICAgICAgICAgc3JjQXJyYXkucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICB0eXBlIDogdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHNyYyA6IG9iai5zdHJlYW1zLm1lZGl1bQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIEFhay5sb2coc3JjQXJyYXksIEpTT04uc3RyaW5naWZ5KHNyY0FycmF5KSk7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBwbGF5ZXIKICAgICAgICAgICAgICAgICAgQWFrLmFkZFNjcmlwdChBYWsuaW50b1N0cmluZyhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblZqc1JlYWR5KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnZpZGVvanMgIT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmpzUmVhZHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnZpZGVvanMoIm5vQWRQbGF5ZXIiKS5zcmMoL19TT1VSQ0VTXy8pOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBvblZqc1JlYWR5KCk7CiAgICAgICAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICAgICAgICAgIH0pLnJlcGxhY2UoIi9fU09VUkNFU18vIiwgSlNPTi5zdHJpbmdpZnkoc3JjQXJyYXkpKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gUnVzc2lhCiAgICAgIHJ1dHViZV9ydSA6IHsgLy8gcmVzZWFyY2ggc29sdXRpb24KICAgICAgICAvKiB0ZXN0OiBodHRwOi8vcnV0dWJlLnJ1L3ZpZGVvL2JkNWY2MDQ3NjU3ZjBiZGNiZmJiMGVkYWQyYmI3YzYxLyAqLwogICAgICAgIGhvc3QgOiBbJ3J1dHViZS5ydSddLAogICAgICAgIG9uRW5kIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmhhc0VsZW1lbnQoJyNydXR1YmVQbGF5ZXJIb2xkZXInLCBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgLy9kbUZ5SUc5d2RITWdQU0JCWVdzdVoyVjBSV3hsYldWdWRDZ2lJMjl3ZEdsdmJuTWlLVHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ2SUQwZ1FXRnJMbWx1ZEc5UFltcGxZM1FvYjNCMGN5NWtZWFJoYzJWMExuWmhiSFZsS1RzTkNpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdE0zVTRWWEpzSUQwZ2J5NTJhV1JsYjE5aVlXeGhibU5sY2k1dE0zVTRPdzBLSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1c2IyY29iVE4xT0ZWeWJDazdEUW9OQ2lBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJRYkdGNVpYSWdQU0J1WlhjZ1FXRnJMbkJzWVhsbGNpZ3BPdzBLSUNBZ0lDQWdJQ0FnSUNBZ1VHeGhlV1Z5TG5acFpHVnZhbk1vSnlOeWRYUjFZbVZRYkdGNVpYSkliMnhrWlhJbkxDQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMjkxY21ObElEb2diVE4xT0ZWeWJDd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBlWEJsSURvZ0oyaHNjeWNzRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5d2NtOTRlVG9nZEhKMVpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhkWFJ2Y0d4aGVTQTZJSFJ5ZFdVTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlRzZ0tUcz0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gSXRhbHkKICAgICAgcmFpX3R2IDogeyAvLyByZXNlYXJjaCBzb2x1dGlvbgogICAgICAgIGhvc3QgOiBbJ3JhaS50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7fQogICAgICB9LAogICAgICAvLyBUViBTdHJlYW0KICAgICAgYmxvY2tfc3RyZWFtc190diA6IHsKICAgICAgICAvLyBub3RlOiByZWRpcmVjdCB0byBodHRwOi8vYmxvY2suc3RyZWFtcy50di8KICAgICAgICBob3N0IDogWydmaXJzdHJvdy5jbycsICdmaXJzdHJvd3MucnUnLCAnZmlyc3Ryb3dzLnR2JywgJ2ZpcnN0cm93cy5vcmcnLCAnZmlyc3Ryb3dzLmNvJywgJ2ZpcnN0cm93cy5iaXonLCAnZmlyc3Ryb3d1cy5ldScsICdmaXJzdHJvdzF1cy5ldScsICdmaXJzdHNyb3dzcG9ydHMuZXUnLCAnZmlyc3Ryb3dzcG9ydGVzLnR2JywgJ2ZpcnN0cm93c3BvcnRlcy5jb20nLCAnanVzdGZpcnN0cm93c3BvcnRzLmNvbScsICdoYWhhc3BvcnQubWUnLCAnd2l6aXdpZy5ydScsICd3aXppd2lnLnN4JywgJ3dpeml3aWcudG8nLCAnd2l6aXdpZy50dicsICdteXAycC5iaXonLCAnbXlwMnAudHYnLCAnbXlwMnAubGEnLCAnbXlwMnAuZWMnLCAnbXlwMnAuZXUnLCAnbXlwMnAuc3gnLCAnbXlwMnAud3MnLCAnbXlwMnAuY29tJywgJ2F0ZGhlLnJ1JywgJ2F0ZGhlLnNlJywgJ2F0ZGhlLmJ6JywgJ2F0ZGhlLnRvcCcsICdhdGRoZS50bycsICdhdGRoZS5tZScsICdhdGRoZS5teCcsICcgYXRkaGUubGknLCAnYXRkaGUuYWwnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoImFkYiIsIDEpOyAvLyBwcmV2ZW50IGFudGktYWRibG9jawogICAgICAgICAgQWFrLnV3Lm9wZW4gPSBmdW5jdGlvbiAoKSB7fTsgLy8gcHJldmVudCBwb3B1cAogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYmFubmVySW5DZW50ZXIsICNoaWRkZW5CYW5uZXJDYW52YXMgeyBkaXNwbGF5OiBub25lOyB9Iik7IC8vIGhpZGUgYWRzCiAgICAgICAgfQogICAgICB9LAogICAgICBidXppbmFfeHl6IDogewogICAgICAgIC8vIG5vdGU6IGRpc2FibGUgcmVmY29udHJvbCwgdXNlZCBieSBmaXJzdHJvd3Nwb3J0cwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjY4CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyNDMKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODg5CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZm9ydW0vZGlzY3Vzc2lvbi84OTc1CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tLzhWVHJrdlM5CiAgICAgICAgaG9zdCA6IFsnYnV6aW5hLnh5eicsICdmYXJtZXQuaW5mbycsICdyaW1sYWRpLmNvbScsICdraXRvcmVsby5jb20nLCAnb21uaXBvbGEuY29tJywgJ3Bvcm9zaW4uY28udWsnLCAncmltbGVuby5jb20nLCAnc2ltcGxlNGFsbHMuY29tJywgJ2Fyc29wby5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWRzZnJhbWUgeyBoZWlnaHQ6IDE1MXB4OyB9Iik7CiAgICAgICAgfSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoL2J1emluYS54eXovLnRlc3QobG9jYXRpb24uaG9zdCkpIHsgLy8ga2VlcHMgc2FtZSBob3N0IHN0cmVhbQogICAgICAgICAgICBBYWsuaGFzRWxlbWVudCgnaWZyYW1lW3NyYyo9Ii5waHA/aGFzaD0iXScsIGZ1bmN0aW9uICh0aGlzRWxlbWVudCkgewogICAgICAgICAgICAgIC8vIGh0dHA6Ly9hcnNvcG8uY29tL3cyLnBocD9oYXNoPXBhbmRhNTgKICAgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmJ1emluYS54eXovbmFuYTF2MS5waHA/b250aGV0b3AKICAgICAgICAgICAgICB2YXIgcGFydHMgPSB0aGlzRWxlbWVudC5zcmMuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICBwYXJ0c1syXSA9IEFhay5ydWxlcy5idXppbmFfeHl6Lmhvc3QucG9wKCk7CiAgICAgICAgICAgICAgQWFrLmxvZyh0aGlzRWxlbWVudCwgcGFydHMpOwogICAgICAgICAgICAgIHRoaXNFbGVtZW50LnNyYyA9IHBhcnRzLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAvKglkbUZ5SUc4Z1BTQjdDZ2tKQ1NBZ0lDQWljR3hoZVd4cGMzUWlJRG9nVzNzS0NRa0pJQ0FnSUNBZ0lDQWljSEp2ZG1sa1pYSWlJRG9nSW5KMGJYQWlMQW9KQ1FrZ0lDQWdJQ0FnSUNKMWNtd2lJRG9nSW5CaGJtUmhNVDlsSlRORU1UUTJOVEEzTURNeU5pVXlObk4wSlRORVVISjBTRmw1ZGtKNlpEbGFaRGRvUkY5bVVraFVaekV4TVRFek1DSUtDUWtKSUNBZ0lDQWdmUW9KQ1FrZ0lDQWdYU3dLQ1FrSklDQWdJQ0p3YkhWbmFXNXpJaUE2SUhzS0NRa0pJQ0FnSUNBZ0luSjBiWEFpSURvZ2V3b0pDUWtnSUNBZ0lDQWdJQ0oxY213aUlEb2dJbVpzYjNkd2JHRjVaWEl1Y25SdGNDMHpMakl1TVRFdWMzZG1JaXdnQ2drSkNRa0pMeThpZFhKc0lqb2dJbWgwZEhBNkx5OXlaV3hsWVhObGN5NW1iRzkzY0d4aGVXVnlMbTl5Wnk5emQyWXZabXh2ZDNCc1lYbGxjaTV5ZEcxd0xUTXVNaTR4TVM1emQyWWlMQW9KQ1FrZ0lDQWdJQ0FnSUNKdVpYUkRiMjV1WldOMGFXOXVWWEpzSWlBNklDSnlkRzF3T2k4dk1UZzFMamd5TGpJeE5TNDBOVG96TlRjNUwzWnZaQzhpQ2drSkNTQWdJQ0FnSUgwc0Nna0pDU0FnSUNBZ0lDSmpiMjUwY205c2N5SWdPaUI3Q2drSkNRa2dJQ0FnSW5WeWJDSTZJQ0pvZEhSd09pOHZjbVZzWldGelpYTXVabXh2ZDNCc1lYbGxjaTV2Y21jdmMzZG1MMlpzYjNkd2JHRjVaWEl1WTI5dWRISnZiSE10TXk0eUxqRTJMbk4zWmlJc0lDOHZJR0ZrWkdWa0lHSmxZMkYxYzJVZ2JXbHpjMmx1WndvSkNRa2dJQ0FnSUNBZ0lDSndiR0Y1SWlBNklHWmhiSE5sTEFvSkNRa2dJQ0FnSUNBZ0lDSnpZM0oxWW1KbGNpSWdPaUJtWVd4elpRb0pDUWtnSUNBZ0lDQjlDZ2tKQ1NBZ0lDQjlMQW9KQ1FrZ0lDQWdJbkJzWVhsbGNrbGtJaUE2SUNKd2JHRjVaWElpTEFvSkNRa2dJQ0FnSW1Oc2FYQWlJRG9nZXdvSkNRa2dJQ0FnSUNBaWRYSnNJaUE2SUNKd1lXNWtZVEUvWlNVelJERTBOalV3TnpBek1qWWxNalp6ZENVelJGQnlkRWhaZVhaQ2VtUTVXbVEzYUVSZlpsSklWR2N4TVRFeE16QWlDZ2tKQ1NBZ0lDQjlDZ2tKQ1NBZ2ZRb0tDUWtKSUNCMllYSWdibVYzVlhKc0lEMGdjR0Z5ZEhNdWMyeHBZMlVvTUN3Z015a3VhbTlwYmlnbkx5Y3BJQ3NnSnk5bWJHOTNjR3hoZVdWeUxUTXVNaTR4Tmk1emQyWS9ZMjl1Wm1sblBTY2dLeUJsYzJOaGNHVW9TbE5QVGk1emRISnBibWRwWm5rb2J5a3BPd29KQ1FrZ0lDOHZkbUZ5SUc1bGQxVnliQ0E5SUNkb2RIUndPaTh2Y21Wc1pXRnpaWE11Wm14dmQzQnNZWGxsY2k1dmNtY3ZjM2RtTDJac2IzZHdiR0Y1WlhJdE15NHlMakUyTG5OM1pqOWpiMjVtYVdjOUp5QXJJR1Z6WTJGd1pTaEtVMDlPTG5OMGNtbHVaMmxtZVNodktTazdDZ2tKQ1NBZ1kyOXVjMjlzWlM1c2IyY29ibVYzVlhKc0tUc0tDUWtKSUNCMGFHbHpSV3hsYldWdWRDNXpjbU1nUFNCdVpYZFZjbXc3CiAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7IC8vIHNraXAgYW50aS1hZGJsb2NrCiAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcjYWRzZnJhbWUnKTsKICAgICAgICAgICAgQWFrLmdldEVsZW1lbnQoJyNyZW1vdmUtb3ZlcicpLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBhbGxteXZpZGVvc19uZXQgOiB7CiAgICAgICAgLy8gbm90ZTogb2JmdXNjYXRlZAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yNzQKICAgICAgICBob3N0IDogWydhbGxteXZpZGVvcy5uZXQnLCAnYW12dHYubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHNraXAgZmFrZSBwbGF5IGJ1dHRvbgogICAgICAgICAgQWFrLnNldENvb2tpZSgnX2ZhdmJ0MzMnLCAxKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGlsaXZlX2RvbWFpbnMgOiB7CiAgICAgICAgaG9zdCA6IFsnaWxpdmUudG8nLCAnc3RyZWFtbGl2ZS50byddLAogICAgICAgIG9uRW5kIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKC9eXC9lbWJlZHBsYXllci5waHAvaS50ZXN0KGxvY2F0aW9uLnBhdGhuYW1lKSkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAvLyBTa2lwIHRpbWVyCiAgICAgICAgICAgICAgQWFrLnV3LnJlbW92ZU92ZXJsYXlIVE1MKCk7CiAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgbWljYXN0X3R2IDogewogICAgICAgIGhvc3QgOiBbJ21pY2FzdC50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBwcmV2ZW50IHBvcHVuZGVyCiAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfbWFpbicsIHRydWUpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgndmlkX3N1YicsIHRydWUpOwogICAgICAgICAgLy8gcmVtb3ZlIG92ZXJsYXkKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGlmICh3aW5kb3cucmVtb3ZlT3ZlcmxheUhUTUwpCiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlT3ZlcmxheUhUTUwoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHhzdHJlYW1fdHYgOiB7CiAgICAgICAgaG9zdCA6IFsncHhzdHJlYW0udHYnXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICgvXlwvZW1iZWRyb3V0ZXIucGhwLy50ZXN0KGxvY2F0aW9uLnBhdGhuYW1lKSkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAvLyBTa2lwIHRpbWVyIGFuZCBjbG9zZSBhZHMKICAgICAgICAgICAgICBBYWsudXcuY2xvc2VBZCgpOwogICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNhd2xpdmVfdHYgOiB7CiAgICAgICAgaG9zdCA6IFsnc2F3bGl2ZS50diddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICgvXlwvZW1iZWRcL3dhdGNoXC8vaS50ZXN0KGxvY2F0aW9uLnBhdGhuYW1lKSkgewogICAgICAgICAgICAvLyBTa2lwIHRpbWVyIGFuZCBjbG9zZSBhZHMKICAgICAgICAgICAgQWFrLnV3LmRpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgICAgQWFrLnV3LmNsb3NlTXlBZCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgZ29vZGNhc3RfY28gOiB7CiAgICAgICAgaG9zdCA6IFsnZ29vZGNhc3QuY28nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoL15cL3N0cmVhbS5waHAvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpKSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSBhZHMgYWxsb3dlZCBieSBlYXN5bGlzdAogICAgICAgICAgICBBYWsudXcuJCgiLmFkdmVydGlzZW1lbnQiKS5oaWRlKCk7CiAgICAgICAgICAgIEFhay51dy4kKCcuYWRza3kgaWZyYW1lJykuYXR0cigic3JjIiwgImFib3V0OmJsYW5rIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBzaG93c3BvcnRfdHZfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3Nob3dzcG9ydC10di5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoL15cL2NoLnBocC8udGVzdChsb2NhdGlvbi5wYXRobmFtZSkpIHsKICAgICAgICAgICAgLy8gcmVtb3ZlIGFkcyBhbGxvd2VkIGJ5IGVhc3lsaXN0CiAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcjYWR2ZXJ0aXNlbWVudCwgLmFkdmVydGlzZW1lbnQnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNoYXJlY2FzdF90byA6IHsKICAgICAgICBob3N0IDogWydzaGFyZWNhc3QudG8nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoL15cL2VtYmVkLnBocC8udGVzdChsb2NhdGlvbi5wYXRobmFtZSkpIHsKCiAgICAgICAgICAgIC8vIERpc2FibGUgcG9wdW5kZXJzCiAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIEFhay5zZXRDb29raWUoJ3ZpZF9tYWluJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfc3ViJywgMik7CiAgICAgICAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfZGVsYXknLCB0cnVlKTsKICAgICAgICAgICAgICB9LCAxMDApOwoKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CiAgICAgICAgICAgIH0sIDUwMDApOwoKICAgICAgICAgICAgLy8gUmVtb3ZlIHRyYW5zcGFyZW50IG92ZXJsYXkKICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyN0YWJsZTEnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpZGVvbWVnYV90diA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT12aWRlb21lZ2EKICAgICAgICBob3N0IDogWyd2aWRlb21lZ2EudHYnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKC9eXC92aWV3LnBocC8udGVzdChsb2NhdGlvbi5wYXRobmFtZSkpIHsKICAgICAgICAgICAgLy8gcHJldmVudCBwb3B1bmRlcgogICAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfbWFpbnB1JywgdHJ1ZSk7CiAgICAgICAgICAgIEFhay5zZXRDb29raWUoJ3ZpZF9zdWJwdScsIHRydWUpOwogICAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfZGVsYXknLCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9uRW5kIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8ga2lsbCBhYmMKICAgICAgICAgIC8vIGZpeCBidWcgb24gZmlyZWZveDogVGhlIHZpZGVvIGNvdWxkIG5vdCBiZSBsb2FkZWQsIGVpdGhlciBiZWNhdXNlIHRoZSBzZXJ2ZXIgb3IgbmV0d29yayBmYWlsZWQgb3IgYmVjYXVzZSB0aGUgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuCiAgICAgICAgICB2YXIgc2NyaXB0ID0gQWFrLmhhc1NjcmlwdCgnUGxlYXNlIGRpc2FibGUgQWRCbG9jayBQbHVnaW4gdG8gd2F0Y2ggdGhlIHZpZGVvJyk7CiAgICAgICAgICBpZiAoc2NyaXB0KSB7CiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzY3JpcHQuaW5uZXJIVE1MOwogICAgICAgICAgICB2YXIgc3Vic3RyaW5nID0gc291cmNlLnN1YnN0cmluZyhzb3VyY2UubGFzdEluZGV4T2YoJ2V2YWwoJyksIHNvdXJjZS5sYXN0SW5kZXhPZignKScpICsgMSk7CiAgICAgICAgICAgIHZhciBkZW9iZnVzY2F0ZWQgPSBBYWsudW5wYWNrU2NyaXB0KHN1YnN0cmluZyk7CiAgICAgICAgICAgIHZhciBuZXdTY3JpcHQgPSAnaWYoJytkZW9iZnVzY2F0ZWQuc3Vic3RyaW5nKGRlb2JmdXNjYXRlZC5pbmRleE9mKCd0cnVlJykpOwogICAgICAgICAgICBBYWsuYWRkU2NyaXB0KG5ld1NjcmlwdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBmbG93cGxheWVyX2FudGlhZGJsb2NrIDogewogICAgICAgIGhvc3QgOiBbJ3ZpZGVvZnVuLm1lJywgJ3ZpZGVvYnVnLm5ldCcsICd2aWRlbzQ0Lm5ldCcsICdwbGF5NDQubmV0JywgJ2J5em9vLm9yZycsICdwbGF5YmIubWUnLCAndmlkZW93aW5nLm1lJywgJ3ZpZGVvem9vLm1lJywgJ2Vhc3l2aWRlby5tZScsICdwbGF5cGFuZGEubmV0J10sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgCiAgICAgICAgICAvKgogICAgICAgICAgaHR0cDovL3d3dy5hbmltZXRvb24udHYvYmxhY2stbGFnb29uLWVwaXNvZGUtMQogICAgICAgICAgaHR0cDovL3ZpZGVvd2luZy5tZS9lbWJlZD93PTcxOCZoPTQzOCZ2aWRlbz1vbmdvaW5nL3l1LWdpLW9oX2FyYy12Xy1fNTMubXA0CiAgICAgICAgICBodHRwOi8vcGxheWJiLm1lL2VtYmVkLnBocD93PTcxOCZoPTQzOCZ2aWQ9YXQvbncveXUtZ2ktb2hfYXJjLXZfLV81My5tcDQKICAgICAgICAgIGh0dHA6Ly92aWRlb3pvby5tZS9lbWJlZC5waHA/dz03MTgmaD00MzgmdmlkPWF0L253L3l1LWdpLW9oX2FyYy12Xy1fNTMubXA0CiAgICAgICAgICBodHRwOi8vd3d3LmVhc3l2aWRlby5tZS9nb2dvLz93PTcxOCZoPTQzOCZmaWxlPXl1LWdpLW9oX2FyYy12Xy1fNTMubXA0JnN2PTEKICAgICAgICAgIGh0dHA6Ly9wbGF5cGFuZGEubmV0L2VtYmVkLnBocD93PTcxOCZoPTQzOCZ2aWQ9YXQvbncveXUtZ2ktb2hfYXJjLXZfLV81My5tcDQKICAgICAgICAgICAqLwoKICAgICAgICAgIC8vIGFsbG93IGZ1bGxzY3JlZW4gd2hlbiBhYnAgaXMgZW5hYmxlZCBhbmQgcmVtb3ZlIGFkIGxheWVyCiAgICAgICAgICAvLyBhZHMgYmxvY2tlZCBieSBhYnAgcnVsZQogICAgICAgICAgaWYgKC9eXC8oZW1iZWR8Z29nb3xncGx1cykvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpKSB7CiAgICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgICBQbGF5ZXIuZWRpdGluZygnI2Zsb3dwbGF5ZXJfYXBpJywgewogICAgICAgICAgICAgIHNldEF0dHJpYnV0ZXMgOiB7CiAgICAgICAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW4gOiB0cnVlCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHIzeiA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1sYWJlbDpSM1oKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vQzE1OWtldm4KICAgICAgICBob3N0IDogWydjaXR5YW0uY29tJywgJ2NvbXB1dGVyd29ybGR1ay5jb20nLCAndGVjaHdvcmxkLmNvbScsICd2My5jby51ayddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvKiBkb24ndCB3b3JrIHdpdGggY2hyb21lCiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAnX3IzeicsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDoge30KICAgICAgICAgIH0pOwogICAgICAgICAgKi8KICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy4kKCIjcjN6LXdhaXQiKS5yZW1vdmUoKTsKICAgICAgICAgIEFhay51dy4kKCIucjN6LWhpZGUiKS5yZW1vdmVDbGFzcygicjN6LWhpZGUiKTsKICAgICAgICAgIEFhay51dy5fcjN6ID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGdvb2dsZV9qb2JydW5uZXIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZW4vZm9ydW0vbWVzc2FnZXMvNDA1CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzNDMKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTM0MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84MzEKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTI3NAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjYyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU2MQogICAgICAgIGhvc3QgOiBbJ25leHQtZXBpc29kZS5uZXQnLCAna2luZ21ha2VyLm5ld3MnLCAnZ2FtZXNwb3dlcml0YS5jb20nLCAndG9kYXlpZG9sLmNvbScsICdyZWNlaXZlLWEtc21zLmNvbScsICd3YWtldXBjYWxsbWUuY29tJywgJ3JpbmdteWNlbGxwaG9uZS5jb20nLCAnZmFxbW96aWxsYS5vcmcnLCAndGhlbWVteXBjLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Lmdvb2dsZV9qb2JydW5uZXIgPSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGZ1Y2thZGJvY2sgY3VzdG9taXplZAogICAgICBmYWJfZGF3bl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE3NDcKICAgICAgICBob3N0IDogWydkYXduLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdkZXRlY3RBZEJsb2NrJywgJ0RldGVjdEFkQmxvY2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZhYl9zcG9ydHNfZnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyMTcKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vU3BFTjVkdVMKICAgICAgICBob3N0IDogWydzcG9ydHMuZnInXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnZmFiSW5zdGFuY2UnLCAnRmFiSW5zdGFuY2UnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZhYl9ldXJvcGUxX2ZyIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTg4CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1VMZTF2elFSCiAgICAgICAgaG9zdCA6IFsnZXVyb3BlMS5mciddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdmYWJJbnN0YW5jZScsICdGYWJJbnN0YW5jZScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX25ld3lvcmtlcl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzExNzcKICAgICAgICBob3N0IDogWyduZXd5b3JrZXIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5mYWtlRnVja0FkQmxvY2soJ3NuaWZmQWRCbG9jaycsICdTbmlmZkFkQmxvY2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZhYl93aXJlZF9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwNjEKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9mci9mb3J1bS9kaXNjdXNzaW9uLzgyMzUKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vUHExNHY0RkMKICAgICAgICBob3N0IDogWyd3aXJlZC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnc25pZmZBZEJsb2NrJywgJ1NuaWZmQWRCbG9jaycpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX21hbmdhc3Byb2plY3RfZG9tYWlucyA6IHsKICAgICAgICAvLyBub3RlOiBmdWNrYWRibG9jayB3aXRoIGN1c3RvbSBpbnN0YW5jZSBuYW1lCiAgICAgICAgLy8gbm90ZTogYWxzbyBhZGRlZCBhYnAgcnVsZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTI3CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZnIvZm9ydW0vZGlzY3Vzc2lvbi80MTMyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzg1OAogICAgICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9tYW5nYXMuemx4LmNvbS5ici9tYW5nYXpvcmRfbGliL2pzL2xpYi9jb250cm9sbGVycy9MZWl0b3IvTGVpdG9yLm1pbi5qcwogICAgICAgIGhvc3QgOiBbJ21hbmdhc3Byb2plY3QuY29tLmJyJywgJ21hbmdhc3Byb2plY3QubmV0LmJyJywgJ21hbmdhcy56bHguY29tLmJyJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5mYWtlRnVja0FkQmxvY2soJ21hbmdhc0xlaXRvclNsaWRlcicsIEFhay5nZW5lcmF0ZUlEKCkpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX3FuaW1hdGVfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy83MzkKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNzA1CiAgICAgICAgLy8gbm90ZTogZnVja2FkYmxvY2sgY3VzdG9taXplZAogICAgICAgIGhvc3QgOiBbJ3FuaW1hdGUuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRCbG9ja0RldGVjdGVkID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBmYWJfZXVyb3RyYW5zcG9ydF9kZSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODU4CiAgICAgICAgLy8gbm90ZTogZnVja2FkYmxvY2sgd2l0aCBjdXN0b20gaW5zdGFuY2UgbmFtZQogICAgICAgIGhvc3QgOiBbJ2V1cm90cmFuc3BvcnQuZGUnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnYW50aUFkQmxvY2snLCBBYWsuZ2VuZXJhdGVJRCgpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZhYl9jYWRldGVjdCA6IHsKICAgICAgICAvLyBieTogU2tyNHRjaEdyM2F6eU1vbmtpQmFsbGxsbGxaenp6CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzc4NAogICAgICAgIC8vIG5vdGU6IGZ1Y2thZGJsb2NrIHdpdGggY3VzdG9tIGluc3RhbmNlIG5hbWUKICAgICAgICBob3N0IDogWyd0emV0emUuaXQnLCAnYmVwcGVncmlsbG8uaXQnLCAnbGEtY29zYS5pdCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdjYWRldGVjdCcsICdDQURldGVjdCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX2FnYXJfZ2FtZSA6IHsKICAgICAgICAvLyBub3RlOiBmdWNrYWRibG9jayB3aXRoIGN1c3RvbSBpbnN0YW5jZSBuYW1lCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyNTcKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTEzNQogICAgICAgIGhvc3QgOiBbJ2FnYXJpby5zeCcsICdhZ2FyYWJpLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdhZ2FyaW9fU1hfYWRzJywgQWFrLmdlbmVyYXRlSUQoKSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBmYWJfZmlsZXNwYWNlX2NvbSA6IHsKICAgICAgICAvLyBub3RlOiBmdWNrYWRibG9jayB3aXRoIGN1c3RvbSBpbnN0YW5jZSBuYW1lCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1lBUzBBczg3CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwMzcKICAgICAgICBob3N0IDogWydmaWxlc3BhY2UuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5mYWtlRnVja0FkQmxvY2soJ2ZBQicsIEFhay5nZW5lcmF0ZUlEKCkpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX3RvcHNlcmlhbHlfc2sgOiB7CiAgICAgICAgLy8gbm90ZTogZnVja2FkYmxvY2sgd2l0aCBjdXN0b20gaW5zdGFuY2UgbmFtZQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS80MnRVUTlhVgogICAgICAgIGhvc3QgOiBbJ3RvcHNlcmlhbHkuc2snXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnc3JhdE5hVmFzJywgQWFrLmdlbmVyYXRlSUQoKSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBmYWJfY3VzdG9taXplZCA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTQ1NQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNjU3CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL040MmE1QmpFCiAgICAgICAgaG9zdCA6IFsnZXBpY3VyaW91cy5jb20nLCAnZGVza3RvcHNvbHV0aW9uLm9yZycsICdpbmRpYXRpbWVzLmNvbScsICdoaW5kdXN0YW50aW1lcy5jb20nLCAnaGFwcHl0cmlwcy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBfc2V0QXR0cmlidXRlID0gd2luZG93LkVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZTsKICAgICAgICAgICAgICB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnY2xhc3MnICYmIHZhbHVlLmluZGV4T2YoJ3RleHRfYWRzJykgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnJzsKICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKHRoaXMsICdmYWIgaW50ZXJjZXB0ZWQgOi0pJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfc2V0QXR0cmlidXRlLmNhbGwodGhpcywgbmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGQzeHQzZXJfYW50aWFkYmxvY2sgOiB7CiAgICAgICAgLy8gc2l0ZTogaHR0cDovL2QzeHQzci5jb20vYW50aS1hZGJsb2NrCiAgICAgICAgLy8gY2FzZTogaHR0cDovL3Nwb3J0LXNob3cuZnIvanMvYWR2ZXJ0aXNlbWVudC1BZEJsb2NrLmpzCiAgICAgICAgLy8gY2FzZTogaHR0cDovL3d3dy4yc2l0ZS5tZS9hZHZlcnRpc2VtZW50LUFkQmxvY2suanMKICAgICAgICBob3N0IDogWydzcG9ydC1zaG93LmZyJywgJ3ZpcGZsYXNoLm5ldCcsICcyc2l0ZS5tZSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNibG9ja2Jsb2NrQSB7dmlzaWJpbGl0eTppbnZpc2libGU7ZGlzcGxheTpub25lO30gI2Jsb2NrYmxvY2tBIHRkIHt2aXNpYmlsaXR5OmludmlzaWJsZTtkaXNwbGF5Om5vbmU7fSAjYmxvY2tibG9ja0EgdGQgcCB7dmlzaWJpbGl0eTppbnZpc2libGU7ZGlzcGxheTpub25lO30gI2Jsb2NrYmxvY2tCIHt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTpibG9jazt9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBhZGJsb2NrX25vdGlmeSA6IHsKICAgICAgICAvLyBieTogU2tyNHRjaEdyM2F6eU1vbmtpQmFsbGxsbGxaenp6CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE3NjYKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTM5MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMDM5CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU5MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84MTMKICAgICAgICBob3N0IDogWydnYW1ldHJhbnNmZXJzLmNvbScsICd3aW5hbmRtYWMuY29tJywgJ2ZyZWUtc3RlYW0tZ2l2ZWF3YXlzLmNvbScsICdjYW5hbHdwLmNvbScsICdhbHBoYWhpc3RvcnkuY29tJywgJ25vcmRwcmVzc2UuYmUnLCAnc29zcGMubmFtZScsICdiYWJvby5jb20uYnInXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2FuQ29va2llJywgdHJ1ZSk7CiAgICAgICAgICBBYWsudXcuYW5PcHRpb25zID0ge307CiAgICAgICAgfQogICAgICB9LAogICAgICBsdXR0ZV9hZGJsb2NrIDogewogICAgICAgIC8vIHNpdGU6IGh0dHA6Ly9sdXR0ZWFkYmxvY2suYmxvZ3Nwb3QuY29tLzIwMTQvMTEvbGUtc2NyaXB0Lmh0bWwKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTM4CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU4MAogICAgICAgIGhvc3QgOiBbJ2xld2VidHZib3VxdWV0ZnJhbmNvcGhvbmUub3ZlcmJsb2cuY29tJywgJ3dlYnR2LmJsb2d1ZXouY29tJywgJ2xhdGVsZWdyYXR1aXRlLmJsb2dzcG90LmNvbScsICd0b3RhbGRlYnJpZC5vcmcnLCAnMzcuMTg3LjE3My4yMDUnLCAndHZncmF0dWl0ZS5ibG9nc3BvdC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjbXlfYWRfZGl2Jyk7CiAgICAgICAgICBBYWsudXcuamFiYmFodWQgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFudGlibG9jayA6IHsKICAgICAgICAvLyBzaXRlOiBhbnRpYmxvY2sub3JnCiAgICAgICAgLy8gbm90ZTogY3VzdG9taXplZAogICAgICAgIC8vIGlzc3VlOiAKICAgICAgICBob3N0IDogWydteWJhbmsucGwnLCAncmFwaWRncmFiLnBsJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBfYWRkRXZlbnRMaXN0ZW5lciA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyOwogICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCcubmV4dEZ1bmN0aW9uKCl9JykgPiAtMSkgewogICAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oWydBbnRpQWRiS2lsbGVyJywgbG9jYXRpb24uaG9zdCwgJ0FudGlCbG9ja3tjdXN0b21pemVkfSddKTsKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9hZGRFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJsb2NrYWRibG9jayA6IHsKICAgICAgICAvLyBzaXRlOiBibG9ja2FkYmxvY2suY29tCiAgICAgICAgLy8gbm90ZTogcmFuZG9tIGluc3RhbmNlIG5hbWUKICAgICAgICAvLyBzb3VyY2U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL1dhdGlsaW4vYWY3NWUwYTJlODJhMmVmYjM4NGJkZTljN2I0MWRlYzgKICAgICAgICAvLyBpc3N1ZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bGFiZWw6QmxvY2tBZEJsb2NrCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZm9ydW0vZGlzY3Vzc2lvbi84MjczCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZm9ydW0vZGlzY3Vzc2lvbi83NjI1CiAgICAgICAgaG9zdCA6IFsnYmxvY2thZGJsb2NrLmNvbScsICdsaW5rZHJvcC5uZXQnLCAncmV2Y2xvdWRzLmNvbScsICdsZXBvcm5vLm9yZycsICd1cGxvYWRzaHViLmNvbScsICdkYXNvbG8ub3JnJywgJ2Z1bGxzdHVmZi5uZXQnLCAnemV1c25ld3MuaXQnLCAnY2hlbWlub3RzLm5ldCcsICdsb2xzeS50dicsICdhbmltZXMtbWFuZ2FzLWRkbC5jb20nLCAnbm90aWNpYXNhdXRvbW90aXZhcy5jb20uYnInLCAnZGFya3N0YXJzLm9yZycsICdjb3JlcGFja3MuY29tJywgJ25hdHVyYWxiZC5jb20nLCAnY29vbHNvZnQuYWx0ZXJ2aXN0YS5vcmcnLCAnb3BlbmxvYWQudXMnLCAnY2RhLW9ubGluZS5wbCcsICd1cmJhbnBsYW5ldC5vcmcnLCAnbWFtYWhkLmNvbScsICdzYWRlZW1wYy5jb20nLCAnYXZtb28uY29tJywgJ3RoYWlsYW5kZS1mci5jb20nLCAnYnRhaWEuY29tJywgJ3R1c29mdC5vcmcnLCAnaGlzc2UubmV0JywgJ2V1cm9wZXVwLmNvbScsICducmouZnInLCAnc3Juay5jbycsICdhbmltbWV4LmNvJywgJ3NvY2tldGxvb3AuY29tJywgJ2NyYWNraGV4LmNvbScsICdyZXZlYWxlZHRyaWNrczR1LmNvbScsICdwaXp6YW1ha2luZy5jb20nLCAnY29tcHV0ZXJ3b3JtLm5ldCcsICd5b3VybGlmZXVwZGF0ZWQubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAvLyB2YXJpYW50IDEKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB2YXIgX3NldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dDsKICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChmbiwgZGVsYXkpIHsKICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGZuLnRvU3RyaW5nKCkpCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnc3RyaW5nJyAmJiBmbi5pbmRleE9mKCdiYWJfZWxlbWVudGlkJykgPiAtMSkgewogICAgICAgICAgICAgICAgICBmbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oWydBbnRpQWRiS2lsbGVyJywgbG9jYXRpb24uaG9zdCwgJ0Jsb2NrQWRCbG9jayddKTsKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9zZXRUaW1lb3V0LmNhbGwodGhpcywgZm4sIGRlbGF5KTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBncHRfc3AgOiB7CiAgICAgICAgLy8gYnk6IFJlZWssIEdpd2F5dW1lCiAgICAgICAgLy8gbm90ZTogd2hlbiBhZGJsb2NrIGRldGVjdGVkIGluamVjdCBuZXcgYWRzLCByZWRpcmVjdCB0byBodHRwOi8vdGlueXVybC5jb20venEyejVvNgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNjM2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE1OTYKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTI5NwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTQ0CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE1NDIKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vOEFqaXRmYjIKICAgICAgICBob3N0IDogWydtYXJrZXR3YXRjaC5jb20nLCAnZGVhZGxpbmUuY29tJywgJ3R3ZWFrdG93bi5jb20nLCAnbnlwb3N0LmNvbScsICdyZWFsZ20uY29tJywgJ25hc2RhcS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIuY29udGFpbmVyLS1iYW5uZXJBZCwgLmNvbC0tYWQgeyBkaXNwbGF5OiBub25lOyB9Iik7CiAgICAgICAgICBBYWsuYWRkU2NyaXB0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAvLyBHaXdheXVtZSAKICAgICAgICAgICAgICB3aW5kb3cuX3NwXyA9IHdpbmRvdy5fc3BfIHx8IHt9OwogICAgICAgICAgICAgIHdpbmRvdy5fc3BfLmNvbmZpZyA9IHdpbmRvdy5fc3BfLmNvbmZpZyB8fCB7fTsKICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Ll9zcF8uY29uZmlnLCAiY29udGVudF9jb250cm9sX2NhbGxiYWNrIiwgewogICAgICAgICAgICAgICAgdmFsdWUgOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgICAgICBjb25maWd1cmFibGUgOiBmYWxzZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIC8vIFJlZWsKICAgICAgICAgICAgICB2YXIgX2FkZEV2ZW50TGlzdGVuZXIgPSB3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI7CiAgICAgICAgICAgICAgd2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAnc3AuYmxvY2tpbmcnKSB7CiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhbJ0FudGlBZGJLaWxsZXInLCBsb2NhdGlvbi5ob3N0LCAnR1BUe3NwLWJsb2NraW5nfSddKTsKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9hZGRFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGtydXhfYXNsIDogewogICAgICAgIC8vIG5vdGU6IHdoZW4gYWRibG9jayBkZXRlY3RlZCBpbmplY3QgbmV3IGFkcwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS8wSEQ3Tjg0aQogICAgICAgIGhvc3QgOiBbJ2NvbW1lbnRjYW1hcmNoZS5uZXQnLCAnam91cm5hbGRlc2ZlbW1lcy5jb20nLCAnbGludGVybmF1dGUuY29tJ10sCiAgICAgICAgb25CZWZvcmVTY3JpcHQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICBkZXRlY3RlZCA6ICdLcnV4e2FzbH0nLAogICAgICAgICAgICAgIGNvbnRhaW5zIDogJ0FzbC5wcm90b3R5cGUuaW5qZWN0JywKICAgICAgICAgICAgICBleHRlcm5hbCA6IGZhbHNlLAogICAgICAgICAgICAgIHJlbW92ZSA6IHRydWUKICAgICAgICAgICAgfQogICAgICAgICAgXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGtydXhfYWRwIDogewogICAgICAgIC8vIG5vdGU6IHdoZW4gYWRibG9jayBkZXRlY3RlZCBpbmplY3QgbmV3IGFkcwogICAgICAgIC8vIHNvdXJjZTogCiAgICAgICAgaG9zdCA6IFsnZm91cmNoZXR0ZS1ldC1iaWtpbmkuZnInLCAnbWV0ZW9jaXR5LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRQcm90ZWN0ID0gMTsKICAgICAgICB9CiAgICAgIH0sCSAKICAgICAgcGhvZW5peF9nb3lhdmVsYWIgOiB7CiAgICAgICAgLy8gbm90ZTogd2hlbiBhZGJsb2NrIGRldGVjdGVkIGluamVjdCBuZXcgYWRzCiAgICAgICAgLy8gbm90ZTogc2NyaXB0IGFudGktYWRibG9jayBvYmZ1c2NhdGVkLAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8KICAgICAgICAvLyBkb2M6IGh0dHA6Ly90aW55dXJsLmNvbS9nbDNnaHEyCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL2hzQW1kU3VmCiAgICAgICAgaG9zdCA6IFsnZGVtby1waG9lbml4LmNvbScsICdkcHN0cmVhbS5uZXQnLCAnZ3VtLWd1bS1zdHJlYW1pbmcuY29tJywgJ2pldS5pbmZvJywgJ3NvZm9vdC5jb20nLCAnZ2FhcmEtZnIuY29tJywgJ2dheXR1YmUuY29tJywgJ3R1eGJvYXJkLmNvbScsICd4c3RvcnktZnIuY29tJywgJ2hlbnRhaWZyLm5ldCcsICdmaWxtc3RyZWFtaW5nLWhkLmNvbScsICdmaWxtdmYubmV0JywgJ2hlbnRhaWhhdmVuLm9yZycsICduYXJ1dG9zaGlwcHVkZW52Zi5jb20nLCAndGhlYmFkYnV6ei5jb20nLCAnbWFuZ2EtbmV3cy5jb20nLCAnamV1LnZpZGVvJywgJ21hbmdhcy1mci5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vQWFrLnV3Ll9fJGRjID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICBBYWsuYWRkU3R5bGUoJ2JvZHkge3Zpc2liaWxpdHk6IHZpc2libGU7fScpOwogICAgICAgIH0sCiAgICAgICAgb25CZWZvcmVTY3JpcHQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gW3sgCiAgICAgICAgICAgICAgZGV0ZWN0ZWQgOiAnUGhvZW5peEdveWF2ZWxhYicsCiAgICAgICAgICAgICAgY29udGFpbnMgOiAnUEhFTlYnLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgfQogICAgICB9LAogICAgICBhZF9kZWZlbmRfdWFicCA6IHsKICAgICAgICAvLyBub3RlOiB3aGVuIGFkYmxvY2sgZGV0ZWN0ZWQgaW5qZWN0IG5ldyBhZHMKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vY0ZRQ3A4MFcKICAgICAgICBob3N0IDogWyd0dnNwaWVsZmlsbS5kZScsICdmaW5hbnplbi5jaCddLAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgZGV0ZWN0ZWQgOiAnQWREZWZlbmR7VUFCUEluamVjdH0nLAogICAgICAgICAgICAgIGNvbnRhaW5zIDogJ1VBQlBJbmplY3QnLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRfZGVmZW5kX3VhYiA6IHsKICAgICAgICAvLyBub3RlOiB3aGVuIGFkYmxvY2sgZGV0ZWN0ZWQgaW5qZWN0IG5ldyBhZHMKICAgICAgICAvLyB1c2Vyc2NyaXB0OiBodHRwczovL29wZW51c2VyanMub3JnL3NjcmlwdHMvc2Nod2FyenRlZS9BZERlZmVuZF9LbGF0c2NoZQogICAgICAgIC8vIHVzZXJzY3JpcHQ6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2Fub255bW91cy9hOWI5OTU2YmFmMWQ1OWExMDdjNQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS8xVnlXMHU5bSwgaHR0cDovL3Bhc3RlYmluLmNvbS9BWnFoUnhXVQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWxhYmVsOkFkRGVmZW5kCiAgICAgICAgLy8gcHVsbDogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9wdWxsLzQ2NwogICAgICAgIGhvc3QgOiBbJ3dhdGNoZ2VuZXJhdGlvbi5mcicsICd0dXJiby5mcicsICcyNG1hdGlucy5mcicsICdmb290MDEuY29tJywgJ2NsdWJpYy5jb20nLCAnbWFjZy5jbycsICdiZWdlZWsuZnInLCAnaWdlbi5mcicsICdnYW1lc3Rhci5kZScsICdmb2N1cy5kZScsICdzdGVybi5kZScsICdzYXQxLicsICdwcm9zaWViZW4uJywgJ2thYmVsZWlucy4nLCAnc2F0MWdvbGQuJywgJ3NpeHguJywgJ3Byb3NpZWJlbm1heHguJywgJ2ZlbS5jb20nLCAndGhlLXZvaWNlLW9mLWdlcm1hbnkuJywgJ3dldHRlci5jb20nLCAnd2V0dGVyb25saW5lLmRlJywgJ3Bjd2VsdC5kZScsICdib2Vyc2Utb25saW5lLmRlJywgJ3Nwb3J0YXV0by5kZScsICdhdXRvLW1vdG9yLXVuZC1zcG9ydC5kZScsICdtb3Rvci1rbGFzc2lrLmRlJywgJzR3aGVlbGZ1bi5kZScsICdhdXRvc3RyYXNzZW52ZXJrZWhyLmRlJywgJ2x1c3RpY2guZGUnLCAnc3BveC5jb20nLCAnc2h6LmRlJywgJ3RyYW5zZmVybWFya3QuZGUnLCAncnAtb25saW5lLmRlJywgJ21vdG9ycmFkb25saW5lLmRlJywgJzIwbWluLmNoJywgJ21haW4tc3BpdHplLmRlJywgJ3dvcm1zZXItemVpdHVuZy5kZScsICdsYW1wZXJ0aGVpbWVyLXplaXR1bmcuZGUnLCAnd2llc2JkZW5lci10YWdibGF0dC5kZScsICdidWVyc3RhZWR0ZXItemVpdHVuZy5kZScsICd3aWVzYmRlbmVyLWt1cmllci5kZScsICdyaGVpbi1tYWluLXByZXNzZS5kZScsICdhbGxnZW1laW5lLXplaXR1bmcuZGUnLCAnYXJpdmEuZGUnLCAnc3BpZWdlbC5kZScsICdicmlnaXR0ZS5kZScsICdkc2hpbmkubmV0JywgJ2dhbGEuZGUnLCAnZ2FtZXByby5kZScsICdnYW1vbmEuZGUnLCAncG5uLmRlJywgJ3Byb21vYmlsLmRlJywgJ3Nwb3J0YWwuZGUnLCAnd2ViZmFpbC5jb20nLCAnY29tcHV0ZXJiaWxkLmRlJywgJ2ZpbmFuemVuLm5ldCcsICdjb211bmlvLmRlJywgJ21lZGlzaXRlLmZyJ10sCiAgICAgICAgb25CZWZvcmVTY3JpcHQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICBkZXRlY3RlZCA6ICdBZERlZmVuZHt1YWJJbmplY3R9JywKICAgICAgICAgICAgICBjb250YWlucyA6ICd1YWJJbmplY3QnLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLyogc29sdmVkIGJ5IEFha0xJc3QKICAgICAgdGlzb29taV9pbmRpcmVrdCA6IHsKICAgICAgLy8gaW5saW5lOiBodHRwOi8vcGFzdGViaW4uY29tL25wbVhUVUh3CiAgICAgIC8vIGV4dGVybmFsOiBodHRwOi8vcGFzdGViaW4uY29tL2h2V25DdUR3CiAgICAgIGhvc3QgOiBbJ2VuZXJneS5kZScsICdnZXR2aWRzLmRlJywgJ2dld2luZGUtbm9ybWVuLmRlJywgJ3BvZGNhc3QuZGUnLCAnc3BpZWxlc3BpZWxlbjI0LmRlJywgJ2RpYWxvLmRlJ10sCiAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDsKICAgICAgdmFyIHRleHQgPSB0YXJnZXQudGV4dDsKICAgICAgaWYgKEFhay5jb250YWlucyh0ZXh0LCAnbj0iYWJjZGVmZ2hpamtsbSIscj0ibm9wcXJzdHV2d3h5eiIsaT0iMDEyMzQ1Njc4OSI7dmFyIHM9dD09MD9pOnQ9PTE/bicpKSB7CiAgICAgIEFhay5zdG9wU2NyaXB0KGUpOwogICAgICBBYWsubG9nKCdUaXNvb21pIEluZGlyZWt0Jyk7CiAgICAgIH0KICAgICAgfQogICAgICB9LAogICAgICAgKi8KICAgICAgLyogc29sdmVkIGJ5IEFha0xJc3QKICAgICAgdGlzb29taV9kaXJla3QgOiB7CiAgICAgIC8vIGlubGluZTogaHR0cDovL3Bhc3RlYmluLmNvbS8ydnEzOEpYWQogICAgICBob3N0IDogWydhdXRvemVpdHVuZy5kZScsICdmb3JtZWwxLmRlJywgJ2ZyZW1kd29ydC5kZScsICdpbnNpZGUtaGFuZHkuZGUnLCAnbW90b3JzcG9ydC10b3RhbC5jb20nLCAnYXVzc2Vud2lydHNjaGFmdHNsdXBlLmRlJywgJ2Rvbm5lcndldHRlci5kZScsICd3aW50b3RhbC5kZSddLAogICAgICBvbkJlZm9yZVNjcmlwdCA6IGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7CiAgICAgIHZhciB0ZXh0ID0gdGFyZ2V0LnRleHQ7CiAgICAgIGlmIChBYWsuY29udGFpbnModGV4dCwgJ2Z1bmN0aW9uIGRldGVjdCgpJykpIHsKICAgICAgQWFrLnN0b3BTY3JpcHQoZSk7CiAgICAgIEFhay5sb2coJ1Rpc29vbWkgRGlyZWt0Jyk7CiAgICAgIH0KICAgICAgfQogICAgICB9LAogICAgICAgKi8KICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgLy8gR2VuZXJpYwogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBnZW5lcmljIDogewogICAgICAgIGhvc3QgOiBbJy4qPyddLAogICAgICAgIG9uUmVtb3ZlIDogZnVuY3Rpb24gKHJlbW92ZWROb2RlKSB7CiAgICAgICAgICBpZiAoQWFrLm9wdHMucmVtb3ZlZCkgewogICAgICAgICAgICBpZiAocmVtb3ZlZE5vZGUuc3JjIHx8CiAgICAgICAgICAgICAgcmVtb3ZlZE5vZGUuaWQgfHwKICAgICAgICAgICAgICByZW1vdmVkTm9kZS5jbGFzc05hbWUgJiYKICAgICAgICAgICAgICAhL15maXJlYnVnLy50ZXN0KHJlbW92ZWROb2RlLmNsYXNzTmFtZSkpIHsKICAgICAgICAgICAgICAvLyBOb2RlIHJlbW92ZWQKICAgICAgICAgICAgICBBYWsubG9nKHJlbW92ZWROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAvLyBGdWNrQWRCbG9jayAmIEJsb2NrQWRCbG9jayB2MyBhbmQgdjQKICAgICAgICAgIC8vIHNpdGU6IGh0dHA6Ly93d3cuc2l0ZXh3LmZyL2Z1Y2thZGJsb2NrLwogICAgICAgICAgLy8gcmVwbzogaHR0cHM6Ly9naXRodWIuY29tL3NpdGV4dy9GdWNrQWRCbG9jawogICAgICAgICAgLy8gcmVwbzogaHR0cHM6Ly9naXRodWIuY29tL3NpdGV4dy9CbG9ja0FkQmxvY2sKICAgICAgICAgIC8vIG5vdGU6IHdoZW4gZnVja2FkYmxvY2suanMgb3IgYmxvY2thZGJsb2NrLmpzIGlzIGJsb2NrZWQKICAgICAgICAgIC8vIGRlbW8gdjM6IGh0dHA6Ly9zaC5zdC92b3ZIRQogICAgICAgICAgLy8gZGVtbyB2NDogaHR0cDovL2FsLmx5L3FCYlhICiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODg4CiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODI0CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdmdWNrQWRCbG9jaycsICdGdWNrQWRCbG9jaycpOwogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnYmxvY2tBZEJsb2NrJywgJ0Jsb2NrQWRCbG9jaycpOwoKICAgICAgICAgIC8vIGNhblJ1bkFkcwogICAgICAgICAgLy8gcmVwbzogaHR0cHM6Ly9naXRodWIuY29tL01hdHRoZXdHcm9zcy9DYW5SdW5BZHMKICAgICAgICAgIC8vIG5vdGU6IHVzZSBleHRlcm5hbGwgc2NyaXB0ICIvanMvYWRzLmpzIiAtPiB2YXIgY2FuUnVuQWRzID0gdHJ1ZTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICdjYW5SdW5BZHMnLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZSA6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSA6IHRydWUKICAgICAgICAgIH0pOwoKICAgICAgICAgIC8vIGNhblNob3dBZHMKICAgICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTk3CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAnY2FuU2hvd0FkcycsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogdHJ1ZQogICAgICAgICAgfSk7CgogICAgICAgICAgLy8gQWRibG9ja2VyIERldGVjdGluZyBTY3JpcHRzOiBNZXRob2QgMgogICAgICAgICAgLy8gZ2lzdDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vaXJhemFzeWVkLzNkMjQ3ZDNkMTIxZTc4MWEzODcyCiAgICAgICAgICAvLyBub3RlOiB1c2UgZXh0ZXJuYWxsIHNjcmlwdCAiL2pzL2Fkcy5qcyIgLT4gaXNBZEJsb2NrQWN0aXZlID0gZmFsc2U7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAnaXNBZEJsb2NrQWN0aXZlJywgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiBmYWxzZQogICAgICAgICAgfSk7CgogICAgICAgICAgLyoKICAgICAgICAgIHdpbmRvdy5pSGF2ZUxvYWRlZEFkcyA9IHRydWU7CiAgICAgICAgICB2YXIgbmljZUFkc0NoZWNrPXRydWU7CiAgICAgICAgICBhZGJsb2NrID0gZmFsc2UKICAgICAgICAgIGlzX2Jsb2NrZXIgPSBmYWxzZTsKICAgICAgICAgICAqLwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewoKICAgICAgICAgIC8vIEFkQmxvY2sgRGV0ZWN0b3IgKFhlbkZvcm8gUmVsbGVjdCkKICAgICAgICAgIC8vIHNpdGU6IGh0dHA6Ly90aW55dXJsLmNvbS9wYTI4eGRuCiAgICAgICAgICAvLyBjbG9uZUludG86IGh0dHA6Ly90aW55dXJsLmNvbS9rNnFwaG1lCiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODA1CiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODA0CiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTkxCiAgICAgICAgICBpZiAoQWFrLnV3LlhlbkZvcm8gJiYgdHlwZW9mIEFhay51dy5YZW5Gb3JvLnJlbGxlY3QgPT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgQWFrLnV3LlhlbkZvcm8ucmVsbGVjdCA9IHsKICAgICAgICAgICAgICBBZEJsb2NrRGV0ZWN0b3IgOiB7CiAgICAgICAgICAgICAgICBzdGFydCA6IGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FkQmxvY2sgRGV0ZWN0b3IgKFhlbkZvcm8gUmVsbGVjdCknKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvKgogICAgICAgICAgLy8gQWR1bmJsb2NrIC0gaHR0cDovL2FkdW5ibG9jay5jb20vCiAgICAgICAgICBpZiAoQWFrLmdldENvb2tpZSgnYWRibG9jaycpID09IDEpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2FkYmxvY2snLCAwKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2Jhcl9jbG9zZWQnLCAxKTsKICAgICAgICAgIH0KICAgICAgICAgICAqLwoKICAgICAgICAgIC8vIEFkYmxvY2sgQmxvY2tlcgogICAgICAgICAgLy8gaHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvYWRkYmxvY2tibG9ja2VyLwogICAgICAgICAgLy8gaHR0cDovL3Rpbnl1cmwuY29tL25zd242ZnoKICAgICAgICAgIC8vIGh0dHA6Ly9wYXN0ZWJpbi5jb20vZDY1enIzN20KICAgICAgICAgIC8qIGNhbiBjYXVzZSBhIGJ1ZwogICAgICAgICAgdmFyIGFkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Fmc19hZHMnKTsKICAgICAgICAgIHZhciBhZCA9IGFkcy5sZW5ndGggJiYgYWRzW2Fkcy5sZW5ndGggLSAxXTsKICAgICAgICAgIGlmIChhZCAmJiBhZC5pbm5lckhUTUwubGVuZ3RoID09PSAwIHx8IGFkLmNsaWVudEhlaWdodCA9PT0gMCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lTmF0aXZlID0gSFRNTERvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lOwogICAgICAgICAgSFRNTERvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24gKGNsYXNzTmFtZSkgewogICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnYWZzX2FkcycpIHsKICAgICAgICAgIGNvbnNvbGUuaW5mbyhbJ0FudGlBZGJLaWxsZXInLCBsb2NhdGlvbi5ob3N0LCAnQWRibG9ja0Jsb2NrZXInLCBjbGFzc05hbWVdKTsKICAgICAgICAgIHZhciB1bmlxaWQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdmFyIGJhaXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGJhaXQuaW5uZXJIVE1MID0gJzxicj4nOwogICAgICAgICAgYmFpdC5jbGFzc05hbWUgPSB1bmlxaWQ7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJhaXQpOwogICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodW5pcWlkKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lTmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICAgKi8KCiAgICAgICAgICAvLyBBZGJ1ZGR5CiAgICAgICAgICBpZiAodHlwZW9mIEFhay51dy5jbG9zZUFkYnVkZHkgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgQWFrLnV3LmNsb3NlQWRidWRkeSgpOwogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FkYnVkZHknKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBBZEJsb2NrIEFsZXJ0ZXIgKFdQKQogICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dwLXBsdWdpbnMvYWRibG9jay1hbGVydGVyCiAgICAgICAgICAvLwogICAgICAgICAgaWYgKEFhay5nZXRFbGVtZW50KCdkaXYuYWRiX292ZXJsYXkgPiBkaXYuYWRiX21vZGFsX2ltZycpKSB7CiAgICAgICAgICAgIC8vIFJlbW92ZSBBbGVydCArIEFsbG93IFNjcm9sbAogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnZGl2LmFkYl9vdmVybGF5Jyk7CiAgICAgICAgICAgIEFhay5hZGRTdHlsZSgnaHRtbCxib2R5IHtoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6IGF1dG87fScpOwogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FkQmxvY2tBbGVydGVyJyk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVW5rbm93IEFudGkgQWRCbG9jayBzeXN0ZW0KICAgICAgICAgIGlmIChBYWsuZ2V0RWxlbWVudCgnI2Jsb2NrZGl2JykgJiYgQWFrLmNvbnRhaW5zKEFhay5nZXRFbGVtZW50KCcjYmxvY2tkaXYnKS5pbm5lckhUTUwsICdkaXNhYmxlIGFkIGJsb2NraW5nIG9yIHVzZSBhbm90aGVyIGJyb3dzZXIgd2l0aG91dCBhbnkgYWRibG9ja2VyIHdoZW4geW91IHZpc2l0JykpIHsKICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNibG9ja2RpdicpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIEFudGlibG9jay5vcmcgdjIKICAgICAgICAgIC8vIG5vdGU6IGRldGVjdCBhbmQgc3RvcmUgYmxvY2sgaWQKICAgICAgICAgIC8vIGRlbW86IGh0dHA6Ly90aW55dXJsLmNvbS9uaHlocHprCiAgICAgICAgICB2YXIgc3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0eWxlc1tpXTsKICAgICAgICAgICAgdmFyIGNzc1J1bGVzID0gc3R5bGUuc2hlZXQuY3NzUnVsZXM7CiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY3NzUnVsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICB2YXIgY3NzUnVsZSA9IGNzc1J1bGVzW2pdOwogICAgICAgICAgICAgIHZhciBjc3NUZXh0ID0gY3NzUnVsZS5jc3NUZXh0OwogICAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gL14jKFthLXowLTldezQsMTB9KSB+IFwqIFx7IGRpc3BsYXk6IG5vbmU7IFx9LzsKICAgICAgICAgICAgICBpZiAocGF0dGVybi50ZXN0KGNzc1RleHQpKSB7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBwYXR0ZXJuLmV4ZWMoY3NzVGV4dClbMV07CiAgICAgICAgICAgICAgICBpZiAoQWFrLmhhc1NjcmlwdCgidy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywiICsgaWQgKyAiLGZhbHNlKSIpKSB7CiAgICAgICAgICAgICAgICAgIEFhay5hYWJzLmFibzIgPSBpZDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIHdpbiA9IEFhay51dzsKICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gd2luKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgaWYgKCEvXndlYmtpdC8udGVzdChwcm9wKSAmJiAvXlthLXowLTldezQsMTJ9JC9pLnRlc3QocHJvcCkgJiYgcHJvcCAhPT0gJ2RvY3VtZW50JyAmJiAod2luW3Byb3BdaW5zdGFuY2VvZiBIVE1MRG9jdW1lbnQpID09PSBmYWxzZSAmJiB3aW4uaGFzT3duUHJvcGVydHkocHJvcCkgJiYgdHlwZW9mIHdpbltwcm9wXSA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSB3aW5bcHJvcF07CgogICAgICAgICAgICAgICAgLy8gQW50aWJsb2NrLm9yZyB2MyAmIEJldHRlclN0b3BBZGJsb2NrCiAgICAgICAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODMzCiAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmRlZmVyRXhlY3V0aW9uICYmCiAgICAgICAgICAgICAgICAgIG1ldGhvZC5kaXNwbGF5TWVzc2FnZSAmJgogICAgICAgICAgICAgICAgICBtZXRob2QuZ2V0RWxlbWVudEJ5ICYmCiAgICAgICAgICAgICAgICAgIG1ldGhvZC5nZXRTdHlsZSAmJgogICAgICAgICAgICAgICAgICBtZXRob2QuaW5zZXJ0ICYmCiAgICAgICAgICAgICAgICAgIG1ldGhvZC5uZXh0RnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC50b2dnbGUpIHsKICAgICAgICAgICAgICAgICAgICBBYWsuYWFicy5ic2EgPSBwcm9wOwogICAgICAgICAgICAgICAgICAgIEFhay5kZXRlY3RlZCgnQmV0dGVyU3RvcEFkYmxvY2t7ZG9tfScpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIEFhay5hYWJzLmFibzMgPSBwcm9wOwogICAgICAgICAgICAgICAgICAgIEFhay5kZXRlY3RlZCgnQW50aWJsb2NrM3tkb219Jyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgd2luW3Byb3BdID0gbnVsbDsgLy8ga2lsbCBpbnN0YW5jZQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEJsb2NrQWRCbG9jawogICAgICAgICAgICAgICAgLy8gc2l0ZTogYmxvY2thZGJsb2NrLmNvbQogICAgICAgICAgICAgICAgLy8gbm90ZTogcmFuZG9tIGluc3RhbmNlIG5hbWUKICAgICAgICAgICAgICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vV2F0aWxpbi9hZjc1ZTBhMmU4MmEyZWZiMzg0YmRlOWM3YjQxZGVjOAogICAgICAgICAgICAgICAgLy8gaXNzdWVzOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWxhYmVsJTNBQmxvY2tBZEJsb2NrCiAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmJhYikgeyAvLyB2YXJpYW50IDEKICAgICAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdCbG9ja0FkQmxvY2t7ZG9tOnZhcmlhbnQxfScpOwogICAgICAgICAgICAgICAgICB3aW5bcHJvcF0gPSBudWxsOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyhtZXRob2QpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyhtZXRob2QpLm1hcChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgICB9KS5qb2luKCkubGVuZ3RoID09PSAzMikgeyAvLyB2YXJpYW50IDIKICAgICAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdCbG9ja0FkQmxvY2t7ZG9tOnZhcmlhbnQyfScpOwogICAgICAgICAgICAgICAgICB3aW5bcHJvcF0gPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2Vycm9yJywgcHJvcCkKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIEFudGktQWRibG9ja2VycwogICAgICAgICAgdmFyIGFhYnMgPSB7CiAgICAgICAgICAgIC8vIFBsdWdpbnMgV29yZFByZXNzCiAgICAgICAgICAgIE5vQWRCbG9jayA6ICcoL3BsdWdpbnMvbm8tYWRibG9jay98L2Jsb2NrQmxvY2svYmxvY2tCbG9jay5qcXVlcnkuanMpJywKICAgICAgICAgICAgQmV0dGVyU3RvcEFkYmxvY2sgOiAnKC9wbHVnaW5zL2JldHRlci1zdG9wLWFkYmxvY2svfGJzYS1zY3JpcHQtZG9jdHlwZS5qc3xic2Etc2NyaXB0LW5vLWRvY3R5cGUuanMpJywKICAgICAgICAgICAgQWRCbG9ja0Jsb2NrZXIgOiAnL3BsdWdpbnMvd29yZHByZXNzLWFkYmxvY2stYmxvY2tlci8nLAogICAgICAgICAgICBBbnRpQmxvY2tCdWtzc2FBeW1hbiA6ICcvcGx1Z2lucy9hbnRpLWJsb2NrLycsCiAgICAgICAgICAgIEJsb2NrQWx5emVyIDogJy9wbHVnaW5zL2Jsb2NrYWx5emVyLWFkYmxvY2stY291bnRlci8nLAogICAgICAgICAgICBBZEJsb2NraW5nRGV0ZWN0b3IgOiAnL3BsdWdpbnMvYWQtYmxvY2tpbmctZGV0ZWN0b3IvJywKICAgICAgICAgICAgLy8gUGx1Z2lucyBXZWJzaXRlCiAgICAgICAgICAgIEFkd29ya21lZGlhIDogJyhhZHdvcmttZWRpYXxsb3h0a3xjb250ZW50bG9ja2luZ25ldHdvcmtzKS5jb20vZ0xvYWRlci5waHAnLAogICAgICAgICAgICBBZHNjZW5kbWVkaWEgOiAnYWRzY2VuZG1lZGlhLmNvbS9nd2pzLnBocCcsCiAgICAgICAgICAgIEZ1Y2tBZEJsb2NrIDogJygvZnVja2FkYmxvY2suanN8L2Jsb2NrYWRibG9jay5qcyknLAogICAgICAgICAgICBqUXVlcnlBZEJsb2NrIDogJy9qcXVlcnkuYWRibG9jay5qcycsCiAgICAgICAgICAgIGpRdWVyeUFkYmxvY2tEZXRlY3RvciA6ICcvanF1ZXJ5LmFkYmxvY2stZGV0ZWN0b3IuanMnLAogICAgICAgICAgICBBZEJsb2NrQWR2ZXJ0aXNlbWVudCA6ICcvYWR2ZXJ0aXNlbWVudC5qcycsCiAgICAgICAgICAgIEFkQmxvY2tBZHZlcnQgOiAnL2FkdmVydC5qcycsCiAgICAgICAgICAgIEFkQmxvY2tBZHZDdXN0b20gOiAnL2FkdmVydGlzZW1lbnQoLispLmpzJywKICAgICAgICAgICAgQWRCbG9ja0FkZnJhbWUgOiAnL2FkZnJhbWUuanMnLAogICAgICAgICAgICBBbnRpQWRCdXN0ZXIgOiAnL2FudGktYWQtYnVzdGVyLmpzJywKICAgICAgICAgICAgUlRLQW50aUFkYmxvY2sgOiAnL2Jsb2NrY2FrZS5qcycsCiAgICAgICAgICAgIEFkYmxvY2tEZXRlY3RvciA6ICcvQWRibG9ja0RldGVjdG9yL2hhbmRsZXIubWluLmpzJywKICAgICAgICAgICAgalF1ZXJ5QW50aUFkc0Jsb2NrIDogJy9qcXVlcnkuYW50aWFkc2Jsb2NrLmpzJywKICAgICAgICAgICAgQWRidWRkeSA6ICcvanMvYWRidWRkeS5taW4uanMnLAogICAgICAgICAgICBBbnRpQURzQmxvY2tlciA6ICcvYWFkYi9zY3JpcHQuanMnCiAgICAgICAgICB9OwoKICAgICAgICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuc2NyaXB0czsKICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgc2NyaXB0cy5sZW5ndGg7IHkrKykgewogICAgICAgICAgICB2YXIgc2NyaXB0ID0gc2NyaXB0c1t5XTsKICAgICAgICAgICAgaWYgKHNjcmlwdC5zcmMpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYWFicykgewogICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoYWFic1trZXldLCAnaScpLnRlc3Qoc2NyaXB0LnNyYykpIHsKICAgICAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKFtrZXksIHNjcmlwdC5zcmNdKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgIH0sCiAgICAgICAgb25JbnNlcnQgOiBmdW5jdGlvbiAoaW5zZXJ0ZWROb2RlKSB7CgogICAgICAgICAgLy8gQWxsIE5vZGVzCiAgICAgICAgICBpZiAoQWFrLm9wdHMuaW5zZXJ0ZWQpIHsKICAgICAgICAgICAgaWYgKGluc2VydGVkTm9kZS5zcmMgfHwKICAgICAgICAgICAgICBpbnNlcnRlZE5vZGUuaWQgfHwKICAgICAgICAgICAgICBpbnNlcnRlZE5vZGUuY2xhc3NOYW1lICYmCiAgICAgICAgICAgICAgIS9maXJlYnVnLy50ZXN0KGluc2VydGVkTm9kZS5pbm5lckhUTUwpKSB7CiAgICAgICAgICAgICAgLy8gTm9kZSBpbnNlcnRlZAogICAgICAgICAgICAgIEFhay5sb2coaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIE5vLUFkYmxvY2sgLSBodHRwOi8vd3d3Lm5vLWFkYmxvY2suY29tLwogICAgICAgICAgaWYgKGluc2VydGVkTm9kZS5pZCAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUuaWQubGVuZ3RoID09IDQgJiYKICAgICAgICAgICAgL15bYS16MC05XXs0fSQvLnRlc3QoaW5zZXJ0ZWROb2RlLmlkKSAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUubm9kZU5hbWUgPT0gJ0RJVicgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmZpcnN0Q2hpbGQgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmZpcnN0Q2hpbGQuaWQgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmZpcnN0Q2hpbGQuaWQgPT0gaW5zZXJ0ZWROb2RlLmlkICYmCiAgICAgICAgICAgIEFhay5jb250YWlucyhpbnNlcnRlZE5vZGUuaW5uZXJIVE1MLCAnbm8tYWRibG9jay5jb20nKSkgewogICAgICAgICAgICAvLyBSZW1vdmUKICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdOby1BZGJsb2NrJywgZmFsc2UsIGxvY2F0aW9uLmhyZWYpOwogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudChpbnNlcnRlZE5vZGUpOwogICAgICAgICAgICAvL0Fhay5sb2coaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBTdG9wQWRibG9jayAtIGh0dHA6Ly9zdG9wYWRibG9jay5vcmcvZG93bmxvYWRzLwogICAgICAgICAgaWYgKGluc2VydGVkTm9kZS5pZCAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUuaWQubGVuZ3RoID09IDcgJiYKICAgICAgICAgICAgL15hW2EtejAtOV17Nn0kLy50ZXN0KGluc2VydGVkTm9kZS5pZCkgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5vZGVOYW1lID09ICdESVYnICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5wYXJlbnROb2RlICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5wYXJlbnROb2RlLmlkICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5wYXJlbnROb2RlLmlkID09IGluc2VydGVkTm9kZS5pZCArICcyJyAmJgogICAgICAgICAgICBBYWsuY29udGFpbnMoaW5zZXJ0ZWROb2RlLmlubmVySFRNTCwgJ3N0b3BhZGJsb2NrLm9yZycpKSB7CiAgICAgICAgICAgIC8vIFJlbW92ZQogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ1N0b3BBZEJsb2NrJywgZmFsc2UsIGxvY2F0aW9uLmhyZWYpOwogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudChpbnNlcnRlZE5vZGUpOwogICAgICAgICAgICAvL0Fhay5sb2coaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBBbnRpQWRibG9jayAoUGFja2VyKQogICAgICAgICAgdmFyIHJlSWZyYW1lSWQgPSAvXih6ZHx3ZCkkLzsKICAgICAgICAgIHZhciByZUltZ0lkID0gL14oeGR8Z2QpJC87CiAgICAgICAgICB2YXIgcmVJbWdTcmMgPSAvXC9hZHNcL2Jhbm5lci5qcGcvOwogICAgICAgICAgdmFyIHJlSWZyYW1lU3JjID0gLyhcL2FkaGFuZGxlclwvfFwvYWRpbWFnZXNcL3xhZC5odG1sKS87CgogICAgICAgICAgLy8gQ29tbXVucwogICAgICAgICAgaWYgKGluc2VydGVkTm9kZS5pZCAmJgogICAgICAgICAgICByZUltZ0lkLnRlc3QoaW5zZXJ0ZWROb2RlLmlkKSAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUubm9kZU5hbWUgPT0gJ0lNRycgJiYKICAgICAgICAgICAgcmVJbWdTcmMudGVzdChpbnNlcnRlZE5vZGUuc3JjKSB8fAogICAgICAgICAgICBpbnNlcnRlZE5vZGUuaWQgJiYKICAgICAgICAgICAgcmVJZnJhbWVJZC50ZXN0KGluc2VydGVkTm9kZS5pZCkgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5vZGVOYW1lID09ICdJRlJBTUUnICYmCiAgICAgICAgICAgIHJlSWZyYW1lU3JjLnRlc3QoaW5zZXJ0ZWROb2RlLnNyYykpIHsKCiAgICAgICAgICAgIC8vIFZhcmlhbnQgMQogICAgICAgICAgICBpZiAoaW5zZXJ0ZWROb2RlLmlkID09ICd4ZCcpIHsKICAgICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FudGlBZGJsb2NrUGFja2VyWmR4ZCcsIGZhbHNlLCBsb2NhdGlvbi5ocmVmKTsKICAgICAgICAgICAgfSAvLyBWYXJpYW50IDIKICAgICAgICAgICAgZWxzZSBpZiAoaW5zZXJ0ZWROb2RlLmlkID09ICdnZCcpIHsKICAgICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FudGlBZGJsb2NrUGFja2VyV2RnZCcsIGZhbHNlLCBsb2NhdGlvbi5ocmVmKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBSZW1vdmUKICAgICAgICAgICAgLy9BYWsubG9nKGluc2VydGVkTm9kZSk7CiAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGluc2VydGVkTm9kZSk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gQWR1bmJsb2NrIC0gaHR0cDovL2FkdW5ibG9jay5jb20vCiAgICAgICAgICB2YXIgcmVJZCA9IC9eW2Etel17OH0kLzsKICAgICAgICAgIHZhciByZUNsYXNzID0gL15bYS16XXs4fSBbYS16XXs4fS87CiAgICAgICAgICB2YXIgcmVCZyA9IC9eW2Etel17OH0tYmckLzsKICAgICAgICAgIHZhciByZU1lc3NhZ2UgPSAvSWwgc2VtYmxlcmFpdCBxdWUgdm91cyB1dGlsaXNpZXogdW4gYmxvcXVldXIgZGUgcHVibGljaXTDqSAhLzsKCiAgICAgICAgICAvLyBDb21tdW5zCiAgICAgICAgICBpZiAodHlwZW9mIEFhay51dy52dGZhYiAhPSAndW5kZWZpbmVkJyAmJgogICAgICAgICAgICB0eXBlb2YgQWFrLnV3LmFkYmxvY2tfYW50aWIgIT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLnBhcmVudE5vZGUgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gJ0JPRFknICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5pZCAmJgogICAgICAgICAgICByZUlkLnRlc3QoaW5zZXJ0ZWROb2RlLmlkKSAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUubm9kZU5hbWUgPT0gJ0RJVicgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5uZXh0U2libGluZy5jbGFzc05hbWUgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nLm5vZGVOYW1lID09ICdESVYnKSB7CgogICAgICAgICAgICAvLyBGdWxsIFNjcmVlbiBNZXNzYWdlIChQcmVtaXVtKQogICAgICAgICAgICAvLyA8ZGl2IGlkPSJsZnloc3ZkcSIgY2xhc3M9InR2d25vcWRmIHN2b25leHJrIiBzdHlsZT0idG9wOiAxMDBweDsgb3BhY2l0eTogMTsgdmlzaWJpbGl0eTogdmlzaWJsZTsiPgogICAgICAgICAgICAvLyA8ZGl2IGNsYXNzPSJ0dndub3FkZi1iZyIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyI+PC9kaXY+CiAgICAgICAgICAgIGlmIChpbnNlcnRlZE5vZGUuY2xhc3NOYW1lICYmCiAgICAgICAgICAgICAgcmVDbGFzcy50ZXN0KGluc2VydGVkTm9kZS5jbGFzc05hbWUpICYmCiAgICAgICAgICAgICAgcmVCZy50ZXN0KGluc2VydGVkTm9kZS5uZXh0U2libGluZy5jbGFzc05hbWUpICYmCiAgICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nLnN0eWxlICYmCiAgICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKSB7CgogICAgICAgICAgICAgIC8vIFJlbW92ZSBNZXNzYWdlCiAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCJBZFVuQmxvY2tQcmVtaXVtIik7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nKTsgLy8gb3ZlcmxheQogICAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGluc2VydGVkTm9kZSk7IC8vIGJveAogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFRvcCBiYXIgTWVzc2FnZSAoRnJlZSkKICAgICAgICAgICAgLy8gPGRpdiBpZD0idml4bWdybHkiPgogICAgICAgICAgICAvLyA8ZGl2IGlkPSJtZm5oYWl5eCIgY2xhc3M9Imxrcm52Ynl0Ij4KICAgICAgICAgICAgZWxzZSBpZiAoaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nLmlkICYmCiAgICAgICAgICAgICAgcmVJZC50ZXN0KGluc2VydGVkTm9kZS5uZXh0U2libGluZy5pZCkgJiYKICAgICAgICAgICAgICByZU1lc3NhZ2UudGVzdChpbnNlcnRlZE5vZGUuaW5uZXJIVE1MKSkgewoKICAgICAgICAgICAgICAvLyBSZW1vdmUgTWVzc2FnZQogICAgICAgICAgICAgIEFhay5kZXRlY3RlZCgiQWRVbkJsb2NrRnJlZSIpOwogICAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGluc2VydGVkTm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICAvLyBBbnRpYmxvY2sgLSBodHRwOi8vYW50aWJsb2NrLm9yZy8KICAgICAgICAgIHZhciByZU1zZ0lkID0gL15bYS16MC05XXs0LDEwfSQvaTsKICAgICAgICAgIHZhciByZVRhZzEgPSAvXihkaXZ8c3BhbnxifGl8Zm9udHxzdHJvbmd8Y2VudGVyKSQvaTsKICAgICAgICAgIHZhciByZVRhZzIgPSAvXihhfGJ8aXxzfHV8cXxwfHN0cm9uZ3xjZW50ZXIpJC9pOwogICAgICAgICAgdmFyIHJlV29yZHMxID0gL2FkIGJsb2NrZXJ8YWQgYmxvY2t8YWQtYmxvY2t8YWRibG9ja2VyfGFkLWJsb2NrZXJ8YWRibG9ja3xibG9xdWV1cnxibG9xdWVhZG9yfFdlcmJlYmxvY2tlcnxhZGJsb2NrZXJ0fCYjMTU3MDsmIzE1ODM7JiMxNTc2OyYjMTYwNDsmIzE2MDg7JiMxNjAzOyAmIzE1NzY7JiMxNjA0OyYjMTU4Nzt80LHQu9C+0LrQuNGA0L7QstGJ0LjQutC+0LwvaTsKICAgICAgICAgIHZhciByZVdvcmRzMiA9IC9rYXBhdHxkaXNhYmxlfGTDqXNhY3RpdmV6fGTDqXNhY3RpdmVyfGRlc2FjdGl2ZXp8ZGVzYWN0aXZlcnxkZXNhdGl2ZXxkZXNhY3RpdmFyfGRlc2FjdGl2ZXxkZXNhY3RpdmF8ZGVha3RpdmllcmV8ZGlzYWJpbGl0YXJlfCYjOTQ1OyYjOTYwOyYjOTQ5OyYjOTU3OyYjOTQ5OyYjOTYxOyYjOTQ3OyYjOTU5OyYjOTYwOyYjOTU5OyYjOTQzOyYjOTUxOyYjOTYzOyYjOTUxO3wmIzEwNzk7JiMxMDcyOyYjMTA4NzsmIzEwODg7JiMxMDc3OyYjMTA5NzsmIzEwNzI7JiMxMDkwOyYjMTEwMDt8w6FsbMOtdHNkIGxlfHB1YmxpY2l0w6lzfNGA0LXQutC70LDQvNC1fHZlcmhpbmRlcnR8YWR2ZXJ0fGthcGF0xLFuxLF6L2k7CgogICAgICAgICAgLy8gQW50aWJsb2NrLm9yZyAoYWxsIHZlcnNpb24pCiAgICAgICAgICBpZiAoaW5zZXJ0ZWROb2RlLnBhcmVudE5vZGUgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmlkICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5zdHlsZSAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmZpcnN0Q2hpbGQgJiYKICAgICAgICAgICAgIWluc2VydGVkTm9kZS5maXJzdENoaWxkLmlkICYmCiAgICAgICAgICAgICFpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5jbGFzc05hbWUgJiYKICAgICAgICAgICAgcmVNc2dJZC50ZXN0KGluc2VydGVkTm9kZS5pZCkgJiYKICAgICAgICAgICAgcmVUYWcxLnRlc3QoaW5zZXJ0ZWROb2RlLm5vZGVOYW1lKSAmJgogICAgICAgICAgICByZVRhZzIudGVzdChpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5ub2RlTmFtZSkpIHsKICAgICAgICAgICAgLy9BYWsubG9nKGluc2VydGVkTm9kZSk7CgogICAgICAgICAgICAvLyBLaWxsIGF1ZGlvIG1lc3NhZ2UKICAgICAgICAgICAgdmFyIGF1ZGlvID0gaW5zZXJ0ZWROb2RlLnF1ZXJ5U2VsZWN0b3IoImF1ZGlvW2xvb3BdIik7CiAgICAgICAgICAgIGlmIChhdWRpbykgewogICAgICAgICAgICAgIGF1ZGlvLnBhdXNlKCk7CiAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdBbnRpYmxvY2t7YXVkaW99Jyk7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoYXVkaW8pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFudGlibG9jay5vcmcgdjIKICAgICAgICAgICAgLy8gZGVtbzogaHR0cDovL3Rpbnl1cmwuY29tL2gzbXd0YTQKICAgICAgICAgICAgZWxzZSBpZiAoKEFhay5hYWJzLmFibzIgJiYgaW5zZXJ0ZWROb2RlLmlkID09IEFhay5hYWJzLmFibzIpIHx8CiAgICAgICAgICAgICAgKGluc2VydGVkTm9kZS5maXJzdENoaWxkLmhhc0NoaWxkTm9kZXMoKSAmJiByZVdvcmRzMS50ZXN0KGluc2VydGVkTm9kZS5maXJzdENoaWxkLmlubmVySFRNTCkgJiYgcmVXb3JkczIudGVzdChpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5pbm5lckhUTUwpKSkgewogICAgICAgICAgICAgIEFhay5kZXRlY3RlZCgnQW50aWJsb2NrMntpbnNlcnR9Jyk7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBbnRpYmxvY2sub3JnIHYzCiAgICAgICAgICAgIC8vIGRlbW86IGh0dHA6Ly90aW55dXJsLmNvbS9xZWNmYTd3CiAgICAgICAgICAgIC8vIGNhc2U6IGh0dHA6Ly90aW55dXJsLmNvbS96YnJscjNhIC8qIGZvcmsgKi8KICAgICAgICAgICAgZWxzZSBpZiAoKEFhay5hYWJzLmFibzMgJiYgaW5zZXJ0ZWROb2RlLmlkID09IEFhay5hYWJzLmFibzMpIHx8CiAgICAgICAgICAgICAgKGluc2VydGVkTm9kZS5maXJzdENoaWxkLmhhc0NoaWxkTm9kZXMoKSAmJiBpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5maXJzdENoaWxkLm5vZGVOYW1lID09ICdJTUcnICYmIC9eZGF0YTppbWFnZVwvcG5nO2Jhc2U2NC8udGVzdChpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5maXJzdENoaWxkLnNyYykpKSB7CiAgICAgICAgICAgICAgQWFrLnV3W0Fhay5hYWJzLmFibzNdID0gbnVsbDsKICAgICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FudGlibG9jazN7aW5zZXJ0fScpOwogICAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGluc2VydGVkTm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQmV0dGVyU3RvcEFkYmxvY2sKICAgICAgICAgICAgLy8gZGVtbzogaHR0cDovL3Rpbnl1cmwuY29tL2pzOXphdDQKICAgICAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1lpbWtydEtCCiAgICAgICAgICAgIC8vIGlzc3VlOiBodHRwOi8vdGlueXVybC5jb20vemV0Z2J0eAogICAgICAgICAgICBlbHNlIGlmIChBYWsuYWFicy5ic2EgJiYgaW5zZXJ0ZWROb2RlLmlkID09IEFhay5hYWJzLmJzYSkgewogICAgICAgICAgICAgIEFhay51d1tBYWsuYWFicy5ic2FdID0gbnVsbDsKICAgICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0JldHRlclN0b3BBZGJsb2Nre2luc2VydH0nKTsKICAgICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudChpbnNlcnRlZE5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vICBNYW55IGZhbHNlIHBvc2l0aXZlCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIC8vQWFrLnJlbW92ZUVsZW1lbnQoaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRGV0ZWN0IDogZnVuY3Rpb24gKCkgewoKICAgICAgLy8gRXhjbHVkZSBkb21haW5zCiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNDY2CiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjYzCiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2VuL2ZvcnVtL2Rpc2N1c3Npb24vODQyMi8KICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzk4NgogICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODU3CiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy82MTcKICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZnIvZm9ydW0vZGlzY3Vzc2lvbi81NDI2CiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy80MTkKICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzM3NwogICAgICB2YXIgZXhjbHVkZXMgPSBbIjM2MC5jbiIsICJhbWF6b24uIiwgImFwcGxlLmNvbSIsICJhc2suY29tIiwgImJhaWR1LmNvbSIsICJiaW5nLmNvbSIsICJidWZmZXJhcHAuY29tIiwgImNoYXRhbmdvLmNvbSIsICJjaHJvbWVhY3Rpb25zLmNvbSIsICJlYXN5aW5wbGF5Lm5ldCIsICJlYmF5LmNvbSIsICJmYWNlYm9vay5jb20iLCAiZmxhdHRyLmNvbSIsICJmbGlja3IuY29tIiwgImdoYWNrcy5uZXQiLCAiZ29vZ2xlLiIsICJpbWRiLmNvbSIsICJpbWdib3guY29tIiwgImltZ3VyLmNvbSIsICJpbnN0YWdyYW0uY29tIiwgImpzYmluLmNvbSIsICJqc2ZpZGRsZS5uZXQiLCAibGlua2VkaW4uY29tIiwgImxpdmUuY29tIiwgIm1haWwucnUiLCAibWljcm9zb2Z0LmNvbSIsICJtc24uY29tIiwgInBheXBhbC5jb20iLCAicGludGVyZXN0LmNvbSIsICJwcmVsb2FkZXJzLm5ldCIsICJxcS5jb20iLCAicmVkZGl0LmNvbSIsICJzdGFja292ZXJmbG93LmNvbSIsICJ0YW1wZXJtb25rZXkubmV0IiwgInR3aXR0ZXIuY29tIiwgInZpbWVvLmNvbSIsICJ3aWtpcGVkaWEub3JnIiwgInczc2Nob29scy5jb20iLCAieWFob28uIiwgInlhbmRleC5ydSIsICJ5b3V0dS5iZSIsICJ5b3V0dWJlLmNvbSIsICJ4ZW12dHYubmV0IiwgInZvZC5wbCIsICJhZ2FyLmlvIiwgInBhbmRvb24uaW5mbyIsICJmc2Yub3JnIiwgImFkYmxvY2twbHVzLm9yZyIsICJwbG5rci5jbyIsICJleGFjdHRhcmdldC5jb20iLCAiZG9sbGRpdmluZS5jb20iLCAicG9wbWVjaC5ydSIsICJjYWxtLmNvbSJdOwogICAgICB2YXIgaG9zdCA9IGxvY2F0aW9uLmhvc3Q7CiAgICAgIHZhciBleGNsdWRlZCA9IGZhbHNlOwogICAgICBleGNsdWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChleGNsdWRlKSB7CiAgICAgICAgaWYgKG5ldyBSZWdFeHAoZXhjbHVkZSkudGVzdChob3N0KSkgewogICAgICAgICAgZXhjbHVkZWQgPSB0cnVlOwogICAgICAgICAgaWYgKEFhay5vcHRzLmxvZ0V4Y2x1ZGVkKSB7CiAgICAgICAgICAgIEFhay53YXJuKCdFeGNsdWRlZCcpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICAvLyBJbmNsdWRlIGRvbWFpbnMKICAgICAgLy8gSXNFdmVudHVwcG9ydGVkOiBodHRwOi8vdGlueXVybC5jb20vb2VlejhjNwogICAgICBpZiAoIWV4Y2x1ZGVkKSB7CgogICAgICAgIHZhciBoYW5kbGVyRXZlbnRzID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIHJ1bGUgPSBBYWsucnVsZXNbbmFtZV07CgogICAgICAgICAgcnVsZS5ob3N0LmZvckVhY2goZnVuY3Rpb24gKGhvc3QpIHsKICAgICAgICAgICAgLy8gQ2hlY2sgaG9zdAogICAgICAgICAgICBpZiAobmV3IFJlZ0V4cChob3N0KS50ZXN0KGxvY2F0aW9uLmhvc3QpKSB7CgogICAgICAgICAgICAgIC8vIE5hdGl2ZSBtb2RlCiAgICAgICAgICAgICAgaWYgKCFBYWsudXNlR00gJiYgQWFrLmlzVG9wZnJhbWUpIHsKICAgICAgICAgICAgICAgIEFhay53YXJuKCdSdW4gbmF0aXZlbHkuJyk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAvLyBMb2cgcnVsZSB1c2VkCiAgICAgICAgICAgICAgaWYgKHJ1bGUuaG9zdFswXSAhPSAnLio/JykgewogICAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdydWxlJywgcnVsZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIAogICAgICAgICAgICAgIC8vIEJlZm9yZSBET00gbG9hZAogICAgICAgICAgICAgIGlmIChydWxlLm9uU3RhcnQpIHsKICAgICAgICAgICAgICAgIHJ1bGUub25TdGFydCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBPbiBhbGwgc3RhdGVtZW50cwogICAgICAgICAgICAgIGlmIChydWxlLm9uQWx3YXlzKSB7CiAgICAgICAgICAgICAgICBydWxlLm9uQWx3YXlzKCk7IC8vIHN0YXJ0CiAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICdET01Db250ZW50TG9hZGVkJywgcnVsZS5vbkFsd2F5cyk7IC8vIGlkbGUKICAgICAgICAgICAgICAgIEFhay5vbkV2ZW50KHdpbmRvdywgJ2xvYWQnLCBydWxlLm9uQWx3YXlzKTsgLy8gZW5kCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIEJlZm9yZSBTY3JpcHQgRXhlY3V0ZWQKICAgICAgICAgICAgICBpZiAocnVsZS5vbkJlZm9yZVNjcmlwdCkgewoKICAgICAgICAgICAgICAgIC8vIG9wdGlvbnM6IGNvbnRhaW5zLCBzZWFyY2gsIHJlcGxhY2UsIG92ZXJyaWRlLCByZW1vdmUsIGV4dGVybmFsCiAgICAgICAgICAgICAgICB2YXIgb3B0aW9uc0JlZm9yZVNjcmlwdCA9IHJ1bGUub25CZWZvcmVTY3JpcHQoKTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc0JlZm9yZVNjcmlwdCA9PSAib2JqZWN0IikgewoKICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJCZWZvcmVTY3JpcHQgPSBmdW5jdGlvbiAoZSwgb3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgIHZhciBpc0V2ZW50ID0gZSBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudDsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc1NjcmlwdCA9IChlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpIHx8IGU7CgogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobykgeyAvLyBoYXNBdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBvLmV4dGVybmFsID8gJ3NyYycgOiAnaW5uZXJIVE1MJzsKICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBuZXcgUmVnRXhwKG8uY29udGFpbnMsIG8uZmxhZ3MgfHwgJycpOwoKICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzU2NyaXB0W3NyY10gJiYgdGhpc1NjcmlwdFtzcmNdLmxlbmd0aCAmJiBzZWFyY2gudGVzdCh0aGlzU2NyaXB0W3NyY10pKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHNjcmlwdCBleGVjdXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXZlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXNTY3JpcHQucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBhIHBhcnQgb2YgdGhlIHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoby5yZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2NyaXB0W3NyY10gPSB0aGlzU2NyaXB0W3NyY10ucmVwbGFjZShzZWFyY2gsIG8ucmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdTY3JpcHQsIHRoaXNTY3JpcHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9IC8vIE92ZXJyaWRlIHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvLm92ZXJyaWRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2NyaXB0W3NyY10gPSBvLm92ZXJyaWRlOwogICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQobmV3U2NyaXB0LCB0aGlzU2NyaXB0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBSZW1vdmUgc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG8ucmVtb3ZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXNTY3JpcHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoby5kZXRlY3RlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIEFhay5kZXRlY3RlZChvLmRldGVjdGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQkJCQkJCQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFhay5vcHRzLmxvZ0ludGVyY2VwdGVkU2NyaXB0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgIEFhay5sb2coc3JjLCBvLCB0aGlzU2NyaXB0LCBuZXdTY3JpcHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAvLyBCcm93c2VyIHN1cHBvcnRpbmcgZXZlbnQgYmVmb3Jlc2NyaXB0ZXhlY3V0ZQogICAgICAgICAgICAgICAgICBpZiAoJ29uYmVmb3Jlc2NyaXB0ZXhlY3V0ZScgaW4gZG9jdW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICdiZWZvcmVzY3JpcHRleGVjdXRlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJCZWZvcmVTY3JpcHQoZSwgb3B0aW9uc0JlZm9yZVNjcmlwdCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIEJyb3dzZXIgbm90IHN1cHBvdGluZyBiZWZvcmVzY3JpcHRleGVjdXRlCgogICAgICAgICAgICAgICAgICAgIHZhciBsb2FkRG9jdW1lbnQgPSBmdW5jdGlvbiAob3B0aW9uc0JlZm9yZVNjcmlwdCkgewogICAgICAgICAgICAgICAgICAgICAgLy9pZiAoZG9jdW1lbnQucmVmZXJyZXIgPT09ICcnKQogICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm47CgogICAgICAgICAgICAgICAgICAgICAgQWFrLndhcm4oJ29uYmVmb3Jlc2NyaXB0LWNvbXBhdGlibGUnKTsKCiAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGxvYWRpbmcKICAgICAgICAgICAgICAgICAgICAgIEFhay5hZGRTY3JpcHQoJ3dpbmRvdy5zdG9wKCk7Jyk7IC8vIGNocm9tZS9vcGVyYQogICAgICAgICAgICAgICAgICAgICAgLy9BYWsuYWRkU2NyaXB0KCdkb2N1bWVudC5vcGVuKCk7Jyk7IC8vIGZpcmVmb3gKCiAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgY29udGVudAogICAgICAgICAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICAgICAgICAgICAgICB1cmwgOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVyIiA6IGRvY3VtZW50LnJlZmVycmVyCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlc3VsdC5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaHRtbCwgInRleHQvaHRtbCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHRzID0gZG9jLnNjcmlwdHM7CgogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXNTY3JpcHQgPSBzY3JpcHRzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlckJlZm9yZVNjcmlwdCh0aGlzU2NyaXB0LCBvcHRpb25zQmVmb3JlU2NyaXB0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSBuZXcgY29udGVudCB0byBIVE1MIGRvY3VtZW50OgogICAgICAgICAgICAgICAgICAgICAgICAgIEFhay5hZGRTY3JpcHQoJ2RvY3VtZW50Lm9wZW4oKTsgZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoIicgKyB3aW5kb3cuZXNjYXBlKGh0bWwpICsgJyIpKTsgZG9jdW1lbnQuY2xvc2UoKTsnKTsgLy8gY2hyb21lL29wZXJhCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BYWsuYWRkU2NyaXB0KCdkb2N1bWVudC53cml0ZSh1bmVzY2FwZSgiJyArIGVzY2FwZShodG1sKSArICciKSk7IGRvY3VtZW50LmNsb3NlKCk7Jyk7IC8vIGZpcmVmb3gKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBsb2FkRG9jdW1lbnQob3B0aW9uc0JlZm9yZVNjcmlwdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IC8vIEFmdGVyIFNjcmlwdCBFeGVjdXRlZAogICAgICAgICAgICAgIGlmIChydWxlLm9uQWZ0ZXJTY3JpcHQpIHsKICAgICAgICAgICAgICAgIGlmICgnb25hZnRlcnNjcmlwdGV4ZWN1dGUnIGluIGRvY3VtZW50KSB7IC8vIE1vemlsbGEgRmlyZWZveAogICAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICdhZnRlcnNjcmlwdGV4ZWN1dGUnLCBydWxlLm9uQWZ0ZXJTY3JpcHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBXaGVuIERPTSBMb2FkCiAgICAgICAgICAgICAgaWYgKHJ1bGUub25JZGxlKSB7CiAgICAgICAgICAgICAgICBpZiAoIUFhay51c2VHTSkgeyAvLyBOYXRpdmUgbW9kZQogICAgICAgICAgICAgICAgICBydWxlLm9uSWRsZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy9BYWsub25FdmVudCh3aW5kb3csICdET01Db250ZW50TG9hZGVkJywgcnVsZS5vbklkbGUpOwogICAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICdET01Db250ZW50TG9hZGVkJywgcnVsZS5vbklkbGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBXaGVuIFdpbmRvdyBMb2FkCiAgICAgICAgICAgICAgaWYgKHJ1bGUub25FbmQpIHsKICAgICAgICAgICAgICAgIGlmICghQWFrLnVzZUdNKSB7IC8vIE5hdGl2ZSBtb2RlCiAgICAgICAgICAgICAgICAgIHJ1bGUub25FbmQoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIEFhay5vbkV2ZW50KHdpbmRvdywgJ2xvYWQnLCBydWxlLm9uRW5kKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gV2hlbiBET00gQXR0ck1vZGlmaWVkCiAgICAgICAgICAgICAgaWYgKHJ1bGUub25BdHRyTW9kaWZpZWQpIHsKICAgICAgICAgICAgICAgIEFhay5vbkV2ZW50KHdpbmRvdywgJ0RPTUF0dHJNb2RpZmllZCcsIHJ1bGUub25BdHRyTW9kaWZpZWQsIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gV2hlbiBET00gU3VidHJlZU1vZGlmaWVkCiAgICAgICAgICAgICAgaWYgKHJ1bGUub25TdWJ0cmVlTW9kaWZpZWQpIHsKICAgICAgICAgICAgICAgIEFhay5vbkV2ZW50KHdpbmRvdywgJ0RPTVN1YnRyZWVNb2RpZmllZCcsIHJ1bGUub25TdWJ0cmVlTW9kaWZpZWQsIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gV2hlbiBET00gRWxlbWVudHMgYXJlIEluc2VydGVkIGluIERvY3VtZW50CiAgICAgICAgICAgICAgaWYgKHJ1bGUub25JbnNlcnQpIHsKCiAgICAgICAgICAgICAgICAvLyBNdXRhdGlvbiBPYnNlcnZlcgogICAgICAgICAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20vbXh4emVlNAogICAgICAgICAgICAgICAgLy8gc3VwcG9ydDogaHR0cDovL3Rpbnl1cmwuY29tL25lcG43dnkKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgIT0gJ3VuZGVmaW5lZCcgfHwKICAgICAgICAgICAgICAgICAgdHlwZW9mIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIgIT0gJ3VuZGVmaW5lZCcpIHsKCiAgICAgICAgICAgICAgICAgIC8vIE11dGF0aW9uIE9ic2VydmVyCiAgICAgICAgICAgICAgICAgIHZhciBNdXRhdGlvbk9ic2VydmVyMSA9IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyOwoKICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIG9ic2VydmVyIGluc3RhbmNlCiAgICAgICAgICAgICAgICAgIHZhciBvYnMxID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIxKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBzYWZlbHkgdXNlIGBmb3JFYWNoYCBiZWNhdXNlIHdlIGFscmVhZHkgdXNlIG11dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAvLyBvYnNlcnZlcnMgdGhhdCBhcmUgbW9yZSByZWNlbnQgdGhhbiBgZm9yRWFjaGAuIChzb3VyY2U6IE1ETikKICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IG9ubHkgYWRkZWQgbm9kZXMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChtdXRhdGlvbi5hZGRlZE5vZGVzLCBmdW5jdGlvbiAoYWRkZWROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQWFrLm9wdHMubG9nSW5zZXJ0ZWROb2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYWsubG9nKGFkZGVkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLm9uSW5zZXJ0KGFkZGVkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAvLyBPYnNlcnZlcgogICAgICAgICAgICAgICAgICBvYnMxLm9ic2VydmUoZG9jdW1lbnQsIHsKICAgICAgICAgICAgICAgICAgICBjaGlsZExpc3QgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHN1YnRyZWUgOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gTXV0YXRpb24gRXZlbnRzIChBbHRlcm5hdGl2ZSBTb2x1dGlvbikKICAgICAgICAgICAgICAgIC8vIGRvYzogaHR0cDovL3Rpbnl1cmwuY29tL29wOTVyZnkKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICJET01Ob2RlSW5zZXJ0ZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChBYWsub3B0cy5sb2dJbnNlcnRlZE5vZGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICBBYWsubG9nKGUudGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcnVsZS5vbkluc2VydChlLnRhcmdldCk7CiAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gV2hlbiBET00gRWxlbWVudHMgYXJlIFJlbW92ZWQgaW4gRG9jdW1lbnQKICAgICAgICAgICAgICBpZiAocnVsZS5vblJlbW92ZSkgewoKICAgICAgICAgICAgICAgIC8vIE11dGF0aW9uIE9ic2VydmVyCiAgICAgICAgICAgICAgICAvLyBkb2M6IGh0dHA6Ly90aW55dXJsLmNvbS9teHh6ZWU0CiAgICAgICAgICAgICAgICAvLyBzdXBwb3J0OiBodHRwOi8vdGlueXVybC5jb20vbmVwbjd2eQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciAhPSAndW5kZWZpbmVkJyB8fAogICAgICAgICAgICAgICAgICB0eXBlb2YgV2ViS2l0TXV0YXRpb25PYnNlcnZlciAhPSAndW5kZWZpbmVkJykgewoKICAgICAgICAgICAgICAgICAgLy8gTXV0YXRpb24gT2JzZXJ2ZXIKICAgICAgICAgICAgICAgICAgdmFyIE11dGF0aW9uT2JzZXJ2ZXIyID0gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7CgogICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UKICAgICAgICAgICAgICAgICAgdmFyIG9iczIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcjIoZnVuY3Rpb24gKG11dGF0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHNhZmVseSB1c2UgYGZvckVhY2hgIGJlY2F1c2Ugd2UgYWxyZWFkeSB1c2UgbXV0YXRpb24KICAgICAgICAgICAgICAgICAgICAgIC8vIG9ic2VydmVycyB0aGF0IGFyZSBtb3JlIHJlY2VudCB0aGFuIGBmb3JFYWNoYC4gKHNvdXJjZTogTUROKQogICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgb25seSByZW1vdmVkIG5vZGVzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChtdXRhdGlvbi5yZW1vdmVkTm9kZXMsIGZ1bmN0aW9uIChyZW1vdmVkTm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFhay5vcHRzLmxvZ1JlbW92ZWROb2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYWsubG9nKHJlbW92ZWROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUub25SZW1vdmUocmVtb3ZlZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgLy8gT2JzZXJ2ZXIKICAgICAgICAgICAgICAgICAgb2JzMi5vYnNlcnZlKGRvY3VtZW50LCB7CiAgICAgICAgICAgICAgICAgICAgY2hpbGRMaXN0IDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBzdWJ0cmVlIDogdHJ1ZQogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIE11dGF0aW9uIEV2ZW50cyAoQWx0ZXJuYXRpdmUgU29sdXRpb24pCiAgICAgICAgICAgICAgICAvLyBkb2M6IGh0dHA6Ly90aW55dXJsLmNvbS9vcDk1cmZ5CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgQWFrLm9uRXZlbnQod2luZG93LCAiRE9NTm9kZVJlbW92ZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChBYWsub3B0cy5sb2dSZW1vdmVkTm9kZXMpIHsKICAgICAgICAgICAgICAgICAgICAgIEFhay5sb2coZS50YXJnZXQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBydWxlLm9uUmVtb3ZlKGUudGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgfSwgZmFsc2UpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAKICAgICAgICAgICAgICAvLyBBYWsgRXZlbnRzCiAgICAgICAgICAgICAgQWFrLm9uRXZlbnQod2luZG93LCAnZGV0ZWN0ZWQnLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgQWFrLmluZm8oWydBbnRpQWRiS2lsbGVyJywgQWFrLmlzVG9wZnJhbWUgPyAndG9wZnJhbWUnIDogJ3N1YmZyYW1lJywgbG9jYXRpb24uaG9zdCwgZS5kZXRhaWxdKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgLy8gQXBwbHkgcnVsZXMKICAgICAgICBmb3IgKHZhciBuYW1lIGluIEFhay5ydWxlcykgewogICAgICAgICAgaWYgKEFhay5ydWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICAgICAgICBoYW5kbGVyRXZlbnRzKEFhaywgbmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKCiAgQWFrLmluaXRpYWxpemUoKTsKCn0pKHdpbmRvdyk7"},{"name":"Fuck FuckAdBlock","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1506941148438,"data":{}},"enabled":true,"position":7,"file_url":"https://github.com/Mechazawa/FuckFuckAdblock/raw/master/FuckFuckAdBlock.user.js","uuid":"e268a8f8-788f-4fcd-9546-dd76fc2df327","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgICBGdWNrIEZ1Y2tBZEJsb2NrCi8vIEBhdXRob3IgICAgICAgICAgTWVjaGF6YXdhCi8vIEBuYW1lc3BhY2UgICAgICAgTWVjaGF6YXdhCi8vIEBkZXNjcmlwdGlvbiAgICAgQWN0cyBsaWtlIEZ1Y2tBZEJsb2NrLmpzIGJ1dCBhbHdheXMgc2F5cyB0aGF0IG5vIGFkYmxvY2sgd2FzIGRldGVjdGVkLgovLyBAbGljZW5zZSAgICAgICAgIFdURlBsCi8vIEB2ZXJzaW9uICAgICAgICAgNwovLyBAaW5jbHVkZSAgICAgICAgICoKLy8gQHJ1bi1hdCAgICAgICAgICBkb2N1bWVudC1zdGFydAovLyBAdXBkYXRlVVJMICAgICAgIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9NZWNoYXphd2EvRnVja0Z1Y2tBZGJsb2NrL21hc3Rlci9GdWNrRnVja0FkQmxvY2sudXNlci5qcwovLyBAZ3JhbnQgICAgICAgICAgIG5vbmUKLy8gPT0vVXNlclNjcmlwdD09CgoKKGZ1bmN0aW9uKHdpbmRvdykgewogICAgdmFyIGRlYnVnID0gZmFsc2U7CgogICAgdmFyIEZ1Y2tBZEJsb2NrID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIGlmKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24ob3B0aW9ucyk7CgogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYoc2VsZi5fb3B0aW9ucy5jaGVja09uTG9hZCA9PT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKGZhbHNlKTsKICAgICAgICAgICAgfSwgMSk7CiAgICAgICAgfSwgZmFsc2UpOwoKICAgICAgICAvLyBob3RmaXgKICAgICAgICB0aGlzLmRlYnVnID0gewogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHgpeyBkZWJ1ZyA9ICEheDsgcmV0dXJuIHNlbGY7fSwKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gZGVidWc7IH0KICAgICAgICB9OwogICAgfTsKCiAgICBGdWNrQWRCbG9jay5wcm90b3R5cGUgPSB7CiAgICAgICAgc2V0T3B0aW9uIDogZnVuY3Rpb24ob3B0aW9ucywgdmFsdWUpIHsKICAgICAgICAgICAgaWYodmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdmFyIGtleSA9IG9wdGlvbnM7CiAgICAgICAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgICAgICAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yKHZhciBvcHRpb24gaW4gb3B0aW9ucykKICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIF9vcHRpb25zIDogewogICAgICAgICAgICBjaGVja09uTG9hZDogICAgdHJ1ZSwKICAgICAgICAgICAgcmVzZXRPbkVuZDogICAgIHRydWUsCiAgICAgICAgfSwKCiAgICAgICAgX3ZhciA6IHsKICAgICAgICAgICAgdHJpZ2dlcnM6IFtdCiAgICAgICAgfSwKCiAgICAgICAgY2hlY2sgOiBmdW5jdGlvbihpZ25vcmUpIHsKICAgICAgICAgICAgdGhpcy5lbWl0RXZlbnQoZmFsc2UpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9LAoKICAgICAgICBjbGVhckV2ZW50IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuX3Zhci50cmlnZ2VycyA9IFtdOwogICAgICAgIH0sCgogICAgICAgIGVtaXRFdmVudCA6IGZ1bmN0aW9uKGRldGVjdGVkKSB7CiAgICAgICAgICAgIGlmKGRldGVjdGVkID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdmFyIGZucyA9IHRoaXMuX3Zhci50cmlnZ2VyczsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZuc1tpXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7IGZuc1tpXSgpOyB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZih0aGlzLl9vcHRpb25zLnJlc2V0T25FbmQgPT09IHRydWUpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckV2ZW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgb24gOiBmdW5jdGlvbihkZXRlY3RlZCwgZm4pIHsKICAgICAgICAgICAgaWYoZGV0ZWN0ZWQgPT09IGZhbHNlKQogICAgICAgICAgICAgICAgdGhpcy5fdmFyLnRyaWdnZXJzLnB1c2goZm4pOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBvbkRldGVjdGVkIDogZnVuY3Rpb24oZm4pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgb25Ob3REZXRlY3RlZCA6IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKGZhbHNlLCBmbik7CiAgICAgICAgfQogICAgfTsKCiAgICB2YXIgZnVjayA9IG5ldyBGdWNrQWRCbG9jaygpOwogICAgZm9yICh2YXIgZmllbGQgaW4gZnVjaykgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdWNrLCBmaWVsZCwge3ZhbHVlOiBmdWNrW2ZpZWxkXSwgY29uZmlndXJhYmxlOiBmYWxzZX0pOwogICAgfQogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2luZG93LCB7ZnVja0FkQmxvY2sgOiB7IHZhbHVlOiBmdWNrLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogZmFsc2UgfX0pOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2luZG93LCB7YmxvY2tBZEJsb2NrIDogeyB2YWx1ZTogZnVjaywgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IGZhbHNlIH19KTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdpbmRvdywge3NuaWZmQWRCbG9jayA6IHsgdmFsdWU6IGZ1Y2ssIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiBmYWxzZSB9fSk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3csIHtkdWNrQWRCbG9jayA6IHsgdmFsdWU6IGZ1Y2ssIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiBmYWxzZSB9fSk7IAogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2luZG93LCB7RnVja0Z1Y2tGdWNrQWRCbG9jayA6IHsgdmFsdWU6IGZ1Y2ssIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiBmYWxzZSB9fSk7Cn0pKHdpbmRvdyk7Cg=="},{"name":"Google Hit Hider by Domain (Search Filter / Block Sites)","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":["http*://www.google.com/recaptcha/*","https://www.startpage.com/*/ads?*"],"orig_includes":["http*://www.google.*/*","http*://www.google.co*.*/*","http*://news.google.*/*","http*://encrypted.google.*/*","http*://startpage.com/*","http*://*.startpage.com/*","http*://duckduckgo.com/*","http*://start.duckduckgo.com/*","http*://safe.duckduckgo.com/*","http*://3g2upl4pq6kufc4m.onion/*","http*://www.bing.com/*","http*://*search.yahoo.com/*","http*://search.yahoo.co.jp/*","http*://www.yandex.com/*","http*://yandex.com/*","http*://searx.*/*","http*://www.qwant.com/*","http*://www.qwantjunior.com/*","http*://www.baidu.com/*","https://www.ecosia.org/search*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"data":{"ghhprefs":"s{\"shownotc\":[\"N\",\"Show hit notices(Y|N)\"],\"mngpaneopen\":[\"Y-N\",\"Persistence enabled(Y|N),Pane was open(Y|N),Last tab number(1-4)\"],\"mngbtnstyle\":[\"both-ifrN-R-P-Y-H\",\"Display Manage Hiding button and Block buttons(mng|blk|both),In iframes(ifrN|ifrY),Position(R,T,B),Block button display(P,M),Block button tooltips(Y|N), Block button position(H|C)\"],\"addtolistpos\":[\"sort\",\"Where to add new hits to block lists(end|top|sort)\"],\"aggressiveblock\":[\"none\",\"Which domains to default to shorter form(none|all|www)\"],\"usemutation\":[\"on-Y\",\"Listen for mutation events(on|off),Use DOM4 Mutation Observer(Y|N)\"],\"oneclick\":[\"Y-N\",\"One-click blocking(Y|N),Goes to Perma-ban(Y|N)\"],\"runbeta\":[\"N\",\"Enable incompletely tested features (Y|N)\"],\"reserved2\":[\"X\",\"Y\"]}","hideyhosts":"s|0daymusic.org:t|aminoapps.com:t|animeron.org:t|bqhv.peres-testeurs.fr:t|codepen.io:t|curved.de:t|de-film.com:t|de.toluna.com:t|de.vapormo.com:t|dersnotherinab.ml:t|dinoflix.de:t|dpqf.francedesign-international.fr:t|enginehour.com:t|example.com:t|formayorchavo.com:t|forum.frag-mutti.de:t|hiphopforum.sk:t|howtodeletemy.com:t|iguk.jeremw.fr:t|ilikevideo24.com:t|kaminarisubs.net:t|keekoom.com:t|keepvid.com:t|lensthefipho.ml:t|lifehacker.com:t|me.me:t|movie-blog.mrunlock.space:t|movie-blog.unblockproject.icu:t|movieworld.unblocksite.in:t|oltj.francasaisne.fr:t|one-hit01.wixsite.com:t|paradacreativa.es:t|patisserie-conte31.fr:t|payment-mts.site:t|popart-designs.fr:t|share-online-premium.biz:t|site1go.com:t|smallbusiness.chron.com:t|suesswaren.com:t|tipps.computerbild.de:t|trackallstatus.com:t|wp-kurs.com:t|ww5.soul-anime.us:t|www.0dayvinyls.org:t|www.anime2you.de:t|www.autobild.de:t|www.bierbasis.de:t|www.clip.fail:t|www.down.io:t|www.fansub-info.de:t|www.filediva.com:t|www.ftphd.net:t|www.qobuz.com:t|www.staidws.ga:t|www.startfenster.de:t|www.stlfinder.com:t|www.torrentkitty.tv:t|www.vlc.de:t|xbmp.sp-ressources.fr:t|younglady.live:t|yus4m7q2.dns04.com:t|zeag.locationpralognan.fr:t|zippydownload.co.pl:t|"},"ts":1613320340031},"enabled":true,"position":8,"file_url":"https://greasyfork.org/scripts/1682-google-hit-hider-by-domain-search-filter-block-sites/code/Google%20Hit%20Hider%20by%20Domain%20(Search%20Filter%20%20Block%20Sites).user.js","uuid":"54959cac-d512-4d4f-894c-775dd87fffb7","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIEdvb2dsZSBIaXQgSGlkZXIgYnkgRG9tYWluIChTZWFyY2ggRmlsdGVyIC8gQmxvY2sgU2l0ZXMpCi8vIEBhdXRob3IgICAgICBKZWZmZXJzb24gImpzY2hlcjIwMDAiIFNjaGVyCi8vIEBuYW1lc3BhY2UgICBKZWZmZXJzb25TY2hlcgovLyBAdmVyc2lvbiAgICAgMi4xLjkKLy8gQGNvcHlyaWdodCAgIENvcHlyaWdodCAyMDIxIEplZmZlcnNvbiBTY2hlcgovLyBAbGljZW5zZSAgICAgQlNELTMtQ2xhdXNlCi8vIEBkZXNjcmlwdGlvbiBCbG9jayB1bndhbnRlZCBzaXRlcyBmcm9tIHlvdXIgR29vZ2xlLCBEdWNrRHVja0dvLCBTdGFydHBhZ2UuY29tLCBCaW5nIGFuZCBZYWhvbyBzZWFyY2ggcmVzdWx0cy4gdjIuMS45IDIwMjEtMDEtMTIKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vd3d3Lmdvb2dsZS4qLyoKLy8gQGV4Y2x1ZGUgaHR0cCo6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly93d3cuZ29vZ2xlLmNvKi4qLyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vbmV3cy5nb29nbGUuKi8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL2VuY3J5cHRlZC5nb29nbGUuKi8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL3N0YXJ0cGFnZS5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly8qLnN0YXJ0cGFnZS5jb20vKgovLyBAZXhjbHVkZSBodHRwczovL3d3dy5zdGFydHBhZ2UuY29tLyovYWRzPyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vZHVja2R1Y2tnby5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly9zdGFydC5kdWNrZHVja2dvLmNvbS8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL3NhZmUuZHVja2R1Y2tnby5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly8zZzJ1cGw0cHE2a3VmYzRtLm9uaW9uLyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vd3d3LmJpbmcuY29tLyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vKnNlYXJjaC55YWhvby5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly9zZWFyY2gueWFob28uY28uanAvKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly93d3cueWFuZGV4LmNvbS8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL3lhbmRleC5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly9zZWFyeC4qLyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vd3d3LnF3YW50LmNvbS8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL3d3dy5xd2FudGp1bmlvci5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly93d3cuYmFpZHUuY29tLyoKLy8gQGluY2x1ZGUgICAgIGh0dHBzOi8vd3d3LmVjb3NpYS5vcmcvc2VhcmNoKgovLyBAZ3JhbnQgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgIEdNLmdldFZhbHVlCi8vIEBncmFudCAgICAgICBHTV9zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgR00uc2V0VmFsdWUKLy8gQGdyYW50ICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQKLy8gQGdyYW50ICAgICAgIEdNX2RlbGV0ZVZhbHVlCi8vIEBncmFudCAgICAgICBHTS5kZWxldGVWYWx1ZQovLyBAZ3JhbnQgICAgICAgR01fZ2V0UmVzb3VyY2VVUkwKLy8gQGdyYW50ICAgICAgIEdNLmdldFJlc291cmNlVXJsCi8vIEByZXNvdXJjZSAgICBteWNvbiBodHRwczovL3d3dy5qZWZmZXJzb25zY2hlci5jb20vZ20vc3JjL2dmcmstR0hIYkQtdmVyMjE5LnBuZwovLyA9PS9Vc2VyU2NyaXB0PT0KdmFyIHNjcmlwdF9hYm91dCA9ICJodHRwczovL2dyZWFzeWZvcmsub3JnL3NjcmlwdHMvMTY4Mi1nb29nbGUtaGl0LWhpZGVyLWJ5LWRvbWFpbi1zZWFyY2gtZmlsdGVyLWJsb2NrLXNpdGVzIjsKLyoKQ29weXJpZ2h0IChjKSAyMDIwIEplZmZlcnNvbiBTY2hlci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldCBhbmQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uOgoKMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgoKMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoKMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKi8KCnZhciBHTTQgPSAodHlwZW9mIEdNLmdldFZhbHVlID09PSAidW5kZWZpbmVkIikgPyBmYWxzZSA6IHRydWU7CmZ1bmN0aW9uIEdISGJEX2FkZFN0eWxlKHR4dCl7CiAgICB2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwogICAgcy5jbGFzc05hbWUgPSAnR0hIYkRjc3MnOwogICAgcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHQpKTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyk7Cn0KdmFyIGlzY2ggPSBmYWxzZTsKZnVuY3Rpb24gaW5qZWN0QmFzZUNTUygpewogICAgLy8gPT0gPT0gPT0gVG8gb3ZlcnJpZGUgdGhlIHN0eWxlIG9mIHRoZSBzY3JpcHQncyBidXR0b25zIGFuZCBwYW5lcywgdXNlIHRoZSBjdXN0b20gc3R5bGUgZmVhdHVyZSA9PSA9PSA9PQogICAgR0hIYkRfYWRkU3R5bGUoImRpdi5naGhpZGVye2NvbG9yOiM4ODg7fSBkaXYuZ2hoaWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7fSAiICsKICAgICAgICAgICAgICAgICAgICJidXR0b24uZ2hoaWRlcntjb2xvcjojNTU1O2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYztmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc2l6ZTowLjg1ZW07bWFyZ2luOmF1dG8gMnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCAzcHg7fSBoMz5idXR0b24uZ2hoaWRlcntmb250LXNpemU6MC43NWVtO30gIiArCiAgICAgICAgICAgICAgICAgICAiYnV0dG9uLmdoaGlkZXI6aG92ZXJ7Y29sb3I6IzAwMDtiYWNrZ3JvdW5kOiNmZjg7fSAuZ2hoMXRpbWV7YmFja2dyb3VuZDojZWVlICFpbXBvcnRhbnQ7fSAuZ2hoZG5vbmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fSAiICsKICAgICAgICAgICAgICAgICAgICIuZ2hocGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYztib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzowLjI1ZW0gMS41ZW07Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpub25lfSAiICsKICAgICAgICAgICAgICAgICAgICIjZ2hoc2l0ZWxpc3QsICNnaGhwYmFubGlzdHtiYWNrZ3JvdW5kOiNmZmY7bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFkZGluZzowO21hcmdpbjowO30gIiArCiAgICAgICAgICAgICAgICAgICAiI2doaHNpdGVsaXN0IGxpLCNnaGhwYmFubGlzdCBsaXt3aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjEuNWVtO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZX0gIiArCiAgICAgICAgICAgICAgICAgICAiI2doaHNpdGVsaXN0IGxpOm50aC1vZi10eXBlKG9kZCksI2doaHBiYW5saXN0IGxpOm50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZC1jb2xvcjojZmNmY2FhfSAiICsKICAgICAgICAgICAgICAgICAgICIuZ2hoaG9zdHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MCAwLjI1ZW07Y3Vyc29yOnBvaW50ZXI7fSAjZ2hodXRpbHt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MC41ZW0gMCAxZW0gMDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzozcHggMDt9ICIgKwogICAgICAgICAgICAgICAgICAgIi5naGhpbmZve2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjlweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO3otaW5kZXg6MTAwMTtib3JkZXI6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6OHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6OHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmctbGVmdDoxcHh9ICIgKwogICAgICAgICAgICAgICAgICAgIi5naGhkZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtjb2xvcjojMzMzO30gLmdoaHBie3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiNmMDA7fSAiICsKICAgICAgICAgICAgICAgICAgICIuZ2hoYmxre3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzM7fSAuZ2hoZHtwb3NpdGlvbjpyZWxhdGl2ZTtsaW5lLWhlaWdodDoxLjJlbTtjdXJzb3I6cG9pbnRlcjt9ICIgKwogICAgICAgICAgICAgICAgICAgIi5naGhpbmRlbnR7cG9zaXRpb246YWJzb2x1dGU7bGVmdDozNTBweDt0b3A6LTNweDt9ICNidG5lZGl0IHB7bWFyZ2luOjJweCA0cHggNHB4IDRweDt9ICNnaGhibG9ja2Zvcm0gaW5wdXRbdHlwZT0ncmFkaW8nXSwgI2doaG1uZ2Zvcm0gaW5wdXRbdHlwZT0ncmFkaW8nXXt2ZXJ0aWNhbC1hbGlnbjpib3R0b207bWFyZ2luLXRvcDo1cHg7bWFyZ2luLWJvdHRvbToxcHh9ICIgKwogICAgICAgICAgICAgICAgICAgIiNnaGhibG9ja2Zvcm0gbGFiZWwsICNnaGhtbmdmb3JtIGxhYmVse2Rpc3BsYXk6aW5saW5lO2ZvbnQtd2VpZ2h0Om5vcm1hbH0gLmdoaHRibHtib3JkZXI6MXB4IHNvbGlkIGJsYWNrO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0gLmdoaHRibCB0ZCwgLmdoaHRibCB0aHtib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6MnB4IDRweDt9ICIgKwogICAgICAgICAgICAgICAgICAgIiNnaGh0c2RpdnttYXJnaW46MCAtMS41ZW07cGFkZGluZzowIDNweCAwIDhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjO30gI2doaHRzdHJpcHtwYWRkaW5nLWJvdHRvbTowO30gIiArCiAgICAgICAgICAgICAgICAgICAiI2doaHRzdHJpcCBidXR0b257Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7bWFyZ2luOjAgMnB4IDAgMDtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzoxcHggMnB4O2hlaWdodDoyMnB4O2JvcmRlci1yYWRpdXM6MnB4O30gIiArCiAgICAgICAgICAgICAgICAgICAiI2doaHRzdHJpcCAuZ2hoQ3VyVGFie2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYztib3JkZXItYm90dG9tLWNvbG9yOiNmY2ZjZmM7fSAuZ2hodGFiIHttYXJnaW4tdG9wOjFlbTtoZWlnaHQ6MTdlbTtvdmVyZmxvdy15OnNjcm9sbDtib3JkZXI6MXB4IHNvbGlkICMzMzM7fSAiICsKICAgICAgICAgICAgICAgICAgICIjbWZsaXN0cz5kaXY+cHttYXJnaW46MWVtIDA7fSAjZ2hobW5nZm9ybXtwb3NpdGlvbjpmaXhlZDt0b3A6NjVweDtyaWdodDowO3otaW5kZXg6OTAwMTt0ZXh0LWFsaWduOmxlZnQ7bGluZS1oZWlnaHQ6MS4yZW19ICNnaGhibG9ja2Zvcm17dGV4dC1hbGlnbjpsZWZ0O3otaW5kZXg6MzAwNX0gIiArCiAgICAgICAgICAgICAgICAgICAnaDNbd290ZG9udXQ9InRydWUiXXtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH0nKTsKICAgIEdISGJEX2FkZFN0eWxlKCJAbWVkaWEgcHJpbnQge2J1dHRvbi5naGhpZGVye2Rpc3BsYXk6bm9uZTt9fSIpOwogICAgLy8gU3RhbmRhcmQgaW1hZ2UgcmVzdWx0cyBzdHlsZSBibG9jawogICAgaWYgKGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJ0Ym09aXNjaCIpID4gLTEpewogICAgICAgIHZhciBnaGhiZF9pbWdzdHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIGdoaGJkX2ltZ3N0eS5pZCA9ICJnaGhTdHlsZUltZ1Jlc3VsdHMiOwogICAgICAgIGdoaGJkX2ltZ3N0eS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dC9jc3MiKTsKICAgICAgICBnaGhiZF9pbWdzdHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2RpdltpbWdibG9jaz0icmVndWxhciJdIGltZ3tvcGFjaXR5OjAuMSAhaW1wb3J0YW50fSBkaXYuaXN2LXJbaW1nYmxvY2s9InJlZ3VsYXIiXSBhIGRpdjpmaXJzdC1vZi10eXBle29wYWNpdHk6MC42ICFpbXBvcnRhbnR9IGRpdltpbWdibG9jaz0icmVndWxhciJdOm5vdCguaXN2LXIpIGEgZGl2e2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudDtvcGFjaXR5OjAuNiAhaW1wb3J0YW50fWRpdltpbWdibG9jaz0icmVndWxhciJdIGltZzpob3ZlcntvcGFjaXR5OjAuNSAhaW1wb3J0YW50fSBkaXZbaW1nYmxvY2s9InBiYW4iXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWEgIWltcG9ydGFudDtib3JkZXItcmFkaXVzOjZweCAhaW1wb3J0YW50fSBkaXZbaW1nYmxvY2s9InBiYW4iXSBhe2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fScpKTsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGdoaGJkX2ltZ3N0eSk7CiAgICAgICAgaXNjaD10cnVlOwogICAgfQp9CmluamVjdEJhc2VDU1MoKTsKCnZhciBjdXJyZW50RyA9IGxvY2F0aW9uLmhvc3RuYW1lOyB2YXIgZW5naW5lID0gJ21pc2MnOwpmdW5jdGlvbiBkb1NpdGVTcGVjaWZpYygpewogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoImdvb2dsZSIpID4gLTEpewogICAgICAgIGVuZ2luZSA9ICdHb29nbGUnOwogICAgICAgIC8vIEdvb2dsZTogZGl2I3JlcyA+IGRpdiNzZWFyY2ggPiBkaXYgPiBkaXYjaXJlcyA+IGRpdi5zcmcgfCBvbCNyc28gfCBkaXYuX05JZCB8IGRpdi5ia1dNZ2QgPiBkaXYuZyA+IGRpdi5yYyA+IGgzLnIgPiBhCiAgICAgICAgLy8gR29vZ2xlIGluLWRlcHRoIGFydGljbGVzOiBkaXYjcmVzID4gZGl2I3NlYXJjaCA+IGRpdiNpcmVzID4gb2wjcnNvID4gZGl2ID4gbGkuZy5jYXJkLXNlY3Rpb24gb3IgbGkuZy5jdC1jcyA+IGRpdi5yYyA+IGRpdiA+IGgzLnIgPiBhCiAgICAgICAgLy8gR29vZ2xlIEltYWdlcyAoZGVmYXVsdCk6IGRpdiNyZXMgPiBkaXYjc2VhcmNoID4gZGl2ID4gZGl2I2lyZXMgPiBkaXYjcnNvID4gZGl2I2lzcl9tYyA+IGRpdiA+IGRpdiNyZyA+IGRpdiNyZ19zID4gZGl2LnJnX2RpLnJnX2VsLml2Zy1pZyA+IGEgPiBpbWcKICAgIH0KICAgIGlmIChjdXJyZW50Ry5pbmRleE9mKCJiaW5nLmNvbSIpID4gLTEpewogICAgICAgIGVuZ2luZSA9ICdCaW5nJzsKICAgICAgICAvLyBCaW5nOiBkaXYjYl9jb250ZW50ID4gbWFpbiA+IG9sI2ItcmVzdWx0cyA+IGxpLmJfYWxnbyA+IGgyID4gYQogICAgICAgIEdISGJEX2FkZFN0eWxlKCJsaVtnaGhyZXN1bHRdIGgyIGJ1dHRvbi5naGhpZGVye2ZvbnQtc2l6ZTowLjdlbSAhaW1wb3J0YW50O30gbGkgPiBoMiB7d2hpdGUtc3BhY2U6bm93cmFwICFpbXBvcnRhbnQ7fSIpOwogICAgfQogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoImR1Y2tkdWNrZ28iKSA+IC0xIHx8IGN1cnJlbnRHLmluZGV4T2YoIjNnMnVwbDRwcTZrdWZjNG0iKSA+IC0xKXsKICAgICAgICBlbmdpbmUgPSAnRERHJzsKICAgICAgICAvLyBEdWNrRHVja0dvOiBkaXYjbGlua3MgPiBkaXYucmVzdWx0c19saW5rc19kZWVwID4gZGl2LmxpbmtzX21haW4gPiBoMiA+IGEKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiLmxpbmtzX21haW4sLnJlc3VsdF9fdGl0bGV7b3ZlcmZsb3c6dmlzaWJsZSAhaW1wb3J0YW50O30gLnJlc3VsdF9fdGl0bGV7d2hpdGUtc3BhY2U6bm93cmFwICFpbXBvcnRhbnQ7fSAuZ2hoYntmb250LXNpemU6MTJweCFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6NHB4IWltcG9ydGFudDt9Iik7CiAgICB9CiAgICBpZiAoY3VycmVudEcuaW5kZXhPZigic3RhcnRwYWdlIikgPiAtMSl7CiAgICAgICAgZW5naW5lID0gJ1N0YXJ0cGFnZSc7CiAgICAgICAgLy8gU3RhcnRwYWdlOiBkaXYjcmVzdWx0cyA+IG9sID4gbGkgPiBkaXYucmVzdWx0ID4gaDMgPiBhCiAgICAgICAgLy8gMTEvMjEvMjAxODogW2RhdGEtdmlldz0icmVzdWx0cyJdIGRpdi5jb2x1bW5zIGFydGljbGUuY29sdW1uLmNvbHVtbi0tbWFpbiA+IGRpdi5jb2x1bW4uY29sdW1uLS1tYWluX19jb250ZW50ID4gb2wubGlzdC1mbGF0ID4gbGkuc2VhcmNoLXJlc3VsdC5zZWFyY2gtaXRlbSA+IGgzLnNlYXJjaC1pdGVtX190aXRsZSA+IGEKICAgICAgICAvLyAgNy8wMy8yMDE5OiBkaXYubWFpbmxpbmUtcmVzdWx0c19fd2ViIHNlY3Rpb24udy1nbCA+IGRpdi53LWdsX19yZXN1bHQgPiBhLnctZ2xfX3Jlc3VsdC10aXRsZQogICAgICAgIEdISGJEX2FkZFN0eWxlKCcudy1nbF9fcmVzdWx0e292ZXJmbG93OnZpc2libGUgIWltcG9ydGFudDt9IC5naGhke3BhZGRpbmc6MCAxMHB4IDhweCAxMnB4fWJ1dHRvbi5naGhpZGVye2ZvbnQtd2VpZ2h0Om5vcm1hbH0jZ2hoYmxvY2tmb3JtIGlucHV0W3R5cGU9ImNoZWNrYm94Il0sICNnaGhtbmdmb3JtIGlucHV0W3R5cGU9ImNoZWNrYm94Il17d2lkdGg6dW5zZXQ7aGVpZ2h0OnVuc2V0O3Bvc2l0aW9uOnN0YXRpYzttYXJnaW46dW5zZXQ7Ym9yZGVyOnVuc2V0O3BhZGRpbmc6dW5zZXQ7Y2xpcDp1bnNldDt9JyArCiAgICAgICAgICAgICAgICAgICAgICAgJyNnaGhibG9ja2Zvcm0gYnV0dG9uLCAjZ2hobW5nZm9ybSBidXR0b257Zm9udC1zaXplOjFlbTtmb250LXdlaWdodDpub3JtYWw7Ym9yZGVyOjFweCBzb2xpZCAjZTNlM2UzO2JvcmRlci1yYWRpdXM6M3B4O3BhZGRpbmc6MnB4IDhweDtib3gtc2hhZG93Om5vbmV9ICNnaGhtbmdmb3Jte3RvcDoxMDVweCAhaW1wb3J0YW50O30nKTsKICAgIH0KICAgIGlmIChjdXJyZW50Ry5pbmRleE9mKCJ5YWhvby5jb20iKSA+IC0xKXsKICAgICAgICAvLyBZYWhvbyAoRmlyZWZveCk6IGRpdiNyZXN1bHRzID4gZGl2I2NvbHMgPiBkaXYjbGVmdCA+IGRpdiA+IGRpdiNtYWluID4gZGl2ID4gZGl2I3dlYiA+IG9sID4gbGkgPiBkaXYgPiBkaXYgPiBoMyA+IGEKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiZGl2I3dlYiA+IG9sLnJlZywgbGkgZGl2LmNvbXBUaXRsZSB7b3ZlcmZsb3c6dmlzaWJsZSAhaW1wb3J0YW50O30gLmdoaGR7bWFyZ2luOiAxZW0gMHB4IC0xZW0gMTBweH0gI2doaG1uZ2Zvcm17dG9wOjgwcHh9IGxpIGRpdiBkaXYgaDN7d2hpdGUtc3BhY2U6bm93cmFwICFpbXBvcnRhbnQ7fSIpOwogICAgfQogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoInlhaG9vLmNvLmpwIikgPiAtMSl7CiAgICAgICAgLy8gWWFob28gSmFwYW46IGRpdiNjb250ZW50cyA+IGRpdiA+IGRpdiA+IGRpdiA+IGRpdiNXUzJtID4gZGl2LncgPiBkaXYuaGQgPiBoMyA+IGEKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiI1dTMm0gLnd7b3ZlcmZsb3c6dmlzaWJsZSAhaW1wb3J0YW50O30gI2doaG1uZ2Zvcm17ei1pbmRleDozMDAxfSIpOwogICAgfQogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoImJhaWR1IikgPiAtMSl7CiAgICAgICAgZW5naW5lID0gJ0JhaWR1JzsKICAgICAgICAvLyBCYWlkdTogKHRpdGxlKSAjY29udGVudF9sZWZ0ID4gZGl2LnJlc3VsdC5jLWNvbnRhaW5lciA+IGgzID4gYTsgKGRvbWFpbikgI2NvbnRlbnRfbGVmdCA+IGRpdi5yZXN1bHQuYy1jb250YWluZXIgPiBkaXYgPiBhLmMtc2hvd3VybAogICAgICAgIC8vIEJhaWR1IHJpY2ggcmVzdWx0OiAodGl0bGUpICNjb250ZW50X2xlZnQgPiBkaXYucmVzdWx0LW9wLmMtY29udGFpbmVyID4gaDMgPiBhIChvciBwLm9wX3NpdGVfZG9tYWluX3RpdGxlLCBkaXYub3BfZ2VuZXJhbHFhX21haW4uYy1yb3cpOyAoZG9tYWluKSAjY29udGVudF9sZWZ0ID4gZGl2LnJlc3VsdC1vcC5jLWNvbnRhaW5lclttdV0KICAgIH0KICAgIGlmIChjdXJyZW50Ry5pbmRleE9mKCJ5YW5kZXguY29tIikgPiAtMSl7CiAgICAgICAgLy8gWWFuZGV4OiBkaXYuc2VycC1saXN0IHwgdWwuc2VycC1saXN0ID4gZGl2LnNlcnAtaXRlbSB8IGxpLnNlcnAtaXRlbSA+IGgyID4gYQogICAgICAgIEdISGJEX2FkZFN0eWxlKCJoMi5zZXJwLWl0ZW1fX3RpdGxle3doaXRlLXNwYWNlOm5vd3JhcDt9LmdoaGJ7Zm9udC1zaXplOjAuNzVlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6NHB4IWltcG9ydGFudDt9Iik7CiAgICB9CiAgICBpZiAoY3VycmVudEcuaW5kZXhPZigicXdhbnQiKSA+IC0xKXsKICAgICAgICAvLyBRd2FudDogZGl2LnJlc3VsdHMtY29sdW1uID4gZGl2LnJlc3VsdF9mcmFnbWVudCA+IGRpdi5yZXN1bHQtLXdlYiB8IGRpdi5yZXN1bHQtLW5ld3MgPiBoMyA+IGEKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiZGl2W2Jsb2Nrbm90aWNlXTpub3QoLmdoaDF0aW1lKXttaW4taGVpZ2h0OjFlbTtwYWRkaW5nLWxlZnQ6MDt9Iik7CiAgICB9CiAgICBpZiAoY3VycmVudEcuaW5kZXhPZigic2VhcngiKSA+IC0xKXsKICAgICAgICAvLyBTZWFyeC5tZTogZGl2I21haW5fcmVzdWx0cyA+IGRpdi5yZXN1bHQgPiBoNC5yZXN1bHRfaGVhZGVyID4gYQogICAgICAgIEdISGJEX2FkZFN0eWxlKCJoMi5zZXJwLWl0ZW1fX3RpdGxle3doaXRlLXNwYWNlOm5vd3JhcDt9LmdoaGJ7Zm9udC1zaXplOjAuNzVlbSFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6NHB4IWltcG9ydGFudDt9Iik7CiAgICB9CiAgICBpZiAoY3VycmVudEcuaW5kZXhPZigiZWNvc2lhIikgPiAtMSl7CiAgICAgICAgZW5naW5lID0gJ0Vjb3NpYSc7CiAgICAgICAgLy8gRWNvc2lhOiBkaXYucmVzdWx0cy13cmFwcGVyID4gZGl2LmNvbnRhaW5lci5yZXN1bHRzIC4uLiBkaXYuY2FyZC13ZWIgLi4uIGRpdi5yZXN1bHQtZmlyc3RsaW5lLXRpdGxlID4gYS5yZXN1bHQtdGl0bGUKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiW2doaHJlc3VsdF0gaDIucmVzdWx0LWZpcnN0bGluZS10aXRsZT5hLnJlc3VsdC10aXRsZXtkaXNwbGF5OmlubGluZTt9LmdoaGlkZXJ7Zm9udC1zaXplOjAuNmVtIWltcG9ydGFudDt9Iik7CiAgICB9Cn0KZG9TaXRlU3BlY2lmaWMoKQoKZnVuY3Rpb24gaW5qZWN0Q3VzdG9tKCl7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJkY3VzdHN0eSIpKSByZXR1cm47CiAgICB2YXIgZ2hoYmRfY3VzdHN0eSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICBnaGhiZF9jdXN0c3R5LnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2NzcyIpOwogICAgZ2hoYmRfY3VzdHN0eS5pZCA9ICJnaGhiZGN1c3RzdHkiOwogICAgZ2hoYmRfY3VzdHN0eS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjdXN0U3R5KSk7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGdoaGJkX2N1c3RzdHkpOwp9Cgp2YXIgY3VzdFN0eTsKaWYgKCFHTTQpewogICAgY3VzdFN0eSA9IEdNX2dldFZhbHVlKCJoaWRlclN0eWxlcyIsICIiKTsKICAgIGlmIChjdXN0U3R5Lmxlbmd0aCA+IDApIGluamVjdEN1c3RvbSgpOwp9IGVsc2UgewogICAgR00uZ2V0VmFsdWUoImhpZGVyU3R5bGVzIiwgIiIpLnRoZW4oZnVuY3Rpb24odmFsdWUpe2N1c3RTdHkgPSB2YWx1ZTsgaWYgKGN1c3RTdHkubGVuZ3RoID4gMCkgaW5qZWN0Q3VzdG9tKCk7fSk7Cn0KCi8vID09ID09ID09IEdsb2JhbHMgZm9yIHByZWZlcmVuY2VzID09ID09ID09CnZhciBibGlzdCwgZGVmYXVsdFR4dHMsIHR4dHNQcmVmLCB0eHRzLCBkZWZhdWx0UHJlZnMsIGdoaFByZWZzLCBnaGhQcmVmTywgc2hvd1lOLCBtcG9wZW4sIG1ic3R5bGUsIGJic3R5bGUsIGJicG9zLCBhZGRBdCwgbGlzdGNoZ3MsIGJMVW9wZW4sIGJBZ2dyZXNzLCBiQUpBWCwgYk11dE9iLCBwcmVmMWNsaWNrLCBiZXRhdGVzdCwgTXV0T2IsIGNoZ01vbiwgb3B0cywga2lkcywgbmVlZHVwZGF0ZSA9IHRydWUsIGRvbXMgPSBbXSwgdF9wYjsKdmFyIHBhdElQdjQgPSAvXGIoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxiLzsKCmZ1bmN0aW9uIGNoZWNrYmxpc3QoKXsKICAgIGlmIChibGlzdC5sZW5ndGggPT09IDApIGJsaXN0ID0gInxleGFtcGxlLmNvbTp0fCI7CiAgICBpZiAoYmxpc3Quc3Vic3RyKDAsMSkgIT0gInwiKSBibGlzdCA9ICJ8IiArIGJsaXN0OwogICAgaWYgKGJsaXN0LmluZGV4T2YoIjoiKSA8IDApIGNvbnZlcnRGb3JtYXQoKTsKfQoKaWYgKCFHTTQpewogICAgYmxpc3QgPSBHTV9nZXRWYWx1ZSgiaGlkZXlob3N0cyIsICIiKTsKICAgIGNoZWNrYmxpc3QoKTsKfSBlbHNlIHsKICAgIEdNLmdldFZhbHVlKCJoaWRleWhvc3RzIiwgIiIpLnRoZW4oZnVuY3Rpb24odmFsdWUpe2JsaXN0ID0gdmFsdWU7IGNoZWNrYmxpc3QoKTt9KTsKfQoKZGVmYXVsdFR4dHMgPSB7CiAgICAiYmxvY2siOlsiYmxvY2siLCJCdXR0b24gbmV4dCB0byB0aGUgcmVzdWx0IHRpdGxlIHRvIGNhbGwgdXAgdGhlIGJsb2NrIGRpYWxvZyJdLAogICAgInVuYmxvY2siOlsiVW5ibG9jayIsIkdyZWVuIGJ1dHRvbiBpbiByZXN1bHRzIHRvIHJlbW92ZSBhIHNpdGUgZnJvbSB0aGUgYmxvY2sgbGlzdCJdLAogICAgIm9uZXRpbWUiOlsiU2hvdyBIaXQiLCJZZWxsb3cgYnV0dG9uIGluIHJlc3VsdHMgdG8gc2hvdyBhIHJlc3VsdCB0ZW1wb3JhcmlseSJdLAogICAgInBiYW4iOlsiUGVybWEtYmFuIiwiUmVkIGJ1dHRvbiB0byBtb3ZlIGEgc2l0ZSB0byB0aGUgcGVybWEtYmFuIGxpc3QiXSwKICAgICJzaG93bm90YyI6WyJTaG93IE5vdGljZXMiLCJCdXR0b24gdG8gc2V0IHRoZSBwcmVmZXJlbmNlIGZvciBub3RpY2VzIHRvIHNob3cgdGhlbSJdLAogICAgImhpZGVub3RjIjpbIkhpZGUgTm90aWNlcyIsIkJ1dHRvbiB0byBzZXQgdGhlIHByZWZlcmVuY2UgZm9yIG5vdGljZXMgdG8gaGlkZSB0aGVtIl0sCiAgICAib2tidG4iOlsiQmxvY2sgU2l0ZSIsIkJ1dHRvbiBpbiB0aGUgYmxvY2sgZGlhbG9nIHRvIGJsb2NrIHRoZSBzZWxlY3RlZCBkb21haW4iXSwKICAgICJjYW5jZWxidG4iOlsiQ2FuY2VsIiwiQnV0dG9uIGluIHRoZSBibG9jayBkaWFsb2cgdG8gY2FuY2VsIG91dCB3aXRoIG1ha2luZyBjaGFuZ2VzIl0sCiAgICAic2F2ZWJ0biI6WyJTYXZlIExpc3RzIiwiQnV0dG9uIGluIHRoZSBtYW5hZ2VtZW50IHBhbmUgdG8gdXBkYXRlIHRoZSBibG9jayBhbmQgcGVybWEtYmFuIGxpc3RzIl0sCiAgICAiY2xvc2VidG4iOlsiQ2xvc2UiLCJCdXR0b24gaW4gdGhlIG1hbmFnZW1lbnQgcGFuZSB0byBjbG9zZSB0aGUgcGFuZSJdLAogICAgIm9rUGJ0biI6WyJQZXJtYS1iYW4iLCJCdXR0b24gaW4gdGhlIGJsb2NrIGRpYWxvZyB0byBwZXJtYS1iYW4gdGhlIHNlbGVjdGVkIGRvbWFpbiJdLAogICAgImNhbmNlbE1idG4iOlsiTWFuYWdlIEhpZGluZyIsIkJ1dHRvbiBpbiB0aGUgYmxvY2sgZGlhbG9nIHRvIG9wZW4gdGhlIG1hbmFnZW1lbnQgcGFuZSJdLAogICAgIm1uZ2J0biI6WyJNYW5hZ2UgSGlkaW5nIiwiQnV0dG9uIG9uIHRoZSByaWdodCBzaWRlIHRvIG9wZW4gdGhlIG1hbmFnZW1lbnQgcGFuZSJdLAogICAgImV4aW1idG4iOlsiRXhwb3J0IiwiQnV0dG9uIGluIHRoZSBtYW5hZ2VtZW50IHBhbmUgdG8gZXhwb3J0IHRoZSBibG9jayBsaXN0Il0sCiAgICAidXRpbGJ0biI6WyJMaXN0IFV0aWwiLCJCdXR0b24gaW4gdGhlIG1hbmFnZW1lbnQgcGFuZSB0byBvcGVuIHRoZSB1dGlsaXR5IHBhbmVsIl0sCiAgICAic29ydGJ0biI6WyJTb3J0IiwiQnV0dG9uIGluIHRoZSBtYW5hZ2VtZW50IHBhbmUgdG8gc29ydCB0aGUgYmxvY2sgbGlzdCJdLAogICAgInVud3d3YnRuIjpbIlVuLXd3dyIsIkJ1dHRvbiBpbiB0aGUgbWFuYWdlbWVudCBwYW5lIHRvIHN0cmlwIHd3dyBmcm9tIGJsb2NrZWQgZG9tYWlucyJdLAogICAgImRlZHVwYnRuIjpbIkRlLUR1cCIsIkJ1dHRvbiBpbiB0aGUgbWFuYWdlbWVudCBwYW5lIHRvIGRlLWR1cGxpY2F0ZSB0aGUgYmxvY2sgbGlzdCJdLAogICAgImltcG9idG4iOlsiSW1wb3J0IiwiQnV0dG9uIGluIHRoZSBtYW5hZ2VtZW50IHBhbmUgdG8gaW1wb3J0IGRvbWFpbnMgaW50byB0aGUgYmxvY2sgbGlzdCJdLAogICAgInNoYXJlYnRuIjpbIlNoYXJlIiwiQnV0dG9uIGluIHRoZSBtYW5hZ2VtZW50IHBhbmUgdG8gcG9zdCBibG9jayBsaXN0IHRvIHRoZSB3ZWIiXSwKICAgICJhZGRhbGxidG4iOlsiQWRkIEFsbCIsIkJ1dHRvbiBpbiB0aGUgbWFuYWdlbWVudCBwYW5lIHRvIGJ1bGsgYWRkIGFsbCB1bmJsb2NrZWQgZG9tYWlucyB0byBjdXJyZW50IGxpc3QiXQp9OwoKZnVuY3Rpb24gY2hlY2t0eHRzKCl7CiAgICBpZiAodHh0c1ByZWYuaW5kZXhPZigiOlsiKSA9PSAtMSB8fCB0eHRzUHJlZi5pbmRleE9mKCJtbmdidG4iKSA9PSAtMSB8fAogICAgICAgIHR4dHNQcmVmLmluZGV4T2YoImV4aW1idG4iKSA9PSAtMSB8fCB0eHRzUHJlZi5pbmRleE9mKCJ1dGlsYnRuIikgPT0gLTEgfHwKICAgICAgICB0eHRzUHJlZi5pbmRleE9mKCJpbXBvYnRuIikgPT0gLTEgfHwgdHh0c1ByZWYuaW5kZXhPZigiYWRkYWxsYnRuIikgPT0gLTEpIHsKICAgICAgICBjb252ZXJ0VHh0cyh0eHRzUHJlZik7CiAgICB9IGVsc2UgewogICAgICAgIHR4dHMgPSBKU09OLnBhcnNlKHR4dHNQcmVmKTsKICAgIH0KfQoKaWYgKCFHTTQpewogICAgdHh0c1ByZWYgPSBHTV9nZXRWYWx1ZSgidGV4dHN0cmluZ3MiLCBKU09OLnN0cmluZ2lmeShkZWZhdWx0VHh0cykpOwogICAgY2hlY2t0eHRzKCk7Cn0gZWxzZSB7CiAgICBHTS5nZXRWYWx1ZSgidGV4dHN0cmluZ3MiLCBKU09OLnN0cmluZ2lmeShkZWZhdWx0VHh0cykpLnRoZW4oZnVuY3Rpb24odmFsdWUpe3R4dHNQcmVmID0gdmFsdWU7IGNoZWNrdHh0cygpO30pOwp9CgpkZWZhdWx0UHJlZnMgPSB7CiAgICAic2hvd25vdGMiOlsiWSIsIlNob3cgaGl0IG5vdGljZXMoWXxOKSJdLAogICAgIm1uZ3BhbmVvcGVuIjpbIlktTiIsIlBlcnNpc3RlbmNlIGVuYWJsZWQoWXxOKSxQYW5lIHdhcyBvcGVuKFl8TiksTGFzdCB0YWIgbnVtYmVyKDEtNCkiXSwKICAgICJtbmdidG5zdHlsZSI6WyJib3RoLWlmck4tUi1QLVktSCIsIkRpc3BsYXkgTWFuYWdlIEhpZGluZyBidXR0b24gYW5kIEJsb2NrIGJ1dHRvbnMobW5nfGJsa3xib3RoKSxJbiBpZnJhbWVzKGlmck58aWZyWSksUG9zaXRpb24oUixULEIpLEJsb2NrIGJ1dHRvbiBkaXNwbGF5KFAsTSksQmxvY2sgYnV0dG9uIHRvb2x0aXBzKFl8TiksIEJsb2NrIGJ1dHRvbiBwb3NpdGlvbihIfEMpIl0sCiAgICAiYWRkdG9saXN0cG9zIjpbImVuZCIsIldoZXJlIHRvIGFkZCBuZXcgaGl0cyB0byBibG9jayBsaXN0cyhlbmR8dG9wfHNvcnQpIl0sCiAgICAiYWdncmVzc2l2ZWJsb2NrIjpbIm5vbmUiLCJXaGljaCBkb21haW5zIHRvIGRlZmF1bHQgdG8gc2hvcnRlciBmb3JtKG5vbmV8YWxsfHd3dykiXSwKICAgICJ1c2VtdXRhdGlvbiI6WyJvbi1ZIiwiTGlzdGVuIGZvciBtdXRhdGlvbiBldmVudHMob258b2ZmKSxVc2UgRE9NNCBNdXRhdGlvbiBPYnNlcnZlcihZfE4pIl0sCiAgICAib25lY2xpY2siOlsiTi1OIiwiT25lLWNsaWNrIGJsb2NraW5nKFl8TiksR29lcyB0byBQZXJtYS1iYW4oWXxOKSJdLAogICAgInJ1bmJldGEiOlsiTiIsIkVuYWJsZSBpbmNvbXBsZXRlbHkgdGVzdGVkIGZlYXR1cmVzIChZfE4pIl0sCiAgICAicmVzZXJ2ZWQyIjpbIlgiLCJZIl0KfTsKCmZ1bmN0aW9uIGNoZWNrcHJlZnMoKXsKICAgIGlmIChnaGhQcmVmcy5sZW5ndGggPT0gMCl7CiAgICAgICAgY29udmVydFByZWZzKGRlZmF1bHRQcmVmcywgInRydWUiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGdoaFByZWZzLmluZGV4T2YoInJlc2VydmVkMSIpPi0xKXsKICAgICAgICAgICAgY29udmVydFByZWZzKGRlZmF1bHRQcmVmcywgImZhbHNlIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZ2hoUHJlZk8gPSBKU09OLnBhcnNlKGdoaFByZWZzKTsKICAgICAgICB9CiAgICB9Cn0KCmlmICghR000KXsKICAgIGdoaFByZWZzID0gR01fZ2V0VmFsdWUoImdoaHByZWZzIiwgIiIpOwogICAgY2hlY2twcmVmcygpOwogICAgR0hIYkRpbml0KCk7Cn0gZWxzZSB7CiAgICBHTS5nZXRWYWx1ZSgiZ2hocHJlZnMiLCAiIikudGhlbihmdW5jdGlvbih2YWx1ZSl7Z2hoUHJlZnMgPSB2YWx1ZTsgY2hlY2twcmVmcygpOyBHSEhiRGluaXQoKTt9KTsKfQoKZnVuY3Rpb24gR0hIYkRpbml0KCl7CiAgICBzaG93WU4gPSBnaGhQcmVmTy5zaG93bm90Y1swXTsKICAgIG1wb3BlbiA9IGdoaFByZWZPLm1uZ3BhbmVvcGVuWzBdOwogICAgbWJzdHlsZSA9IGdoaFByZWZPLm1uZ2J0bnN0eWxlWzBdOwogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKVswXSA9PSAibW5nIikgdG9nZ2xlQmxvY2tIaWRlcnMoIkgiKTsKICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIikubGVuZ3RoIDwgMyl7CiAgICAgICAgR0hIYkRfYWRkU3R5bGUoIiNnaGhNbmdCdG4ge3Bvc2l0aW9uOmZpeGVkO3RvcDoxNTBweDtyaWdodDotMi44ZW07LW1vei10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7IisKICAgICAgICAgICAgICAgICAgICAgICAiYm9yZGVyLWJvdHRvbTowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO3BhZGRpbmc6NnB4IDFweDt6LWluZGV4OjEwMDA7fSIpOwogICAgfSBlbHNlIHsKICAgICAgICBzd2l0Y2ggKG1ic3R5bGUuc3BsaXQoIi0iKVsyXSl7CiAgICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgICAgICAgR0hIYkRfYWRkU3R5bGUoIiNnaGhNbmdCdG4ge3Bvc2l0aW9uOmZpeGVkO2JvdHRvbTowO3JpZ2h0OjJweDsiKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJvcmRlci1ib3R0b206MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtwYWRkaW5nOjZweCAxcHg7ei1pbmRleDoxMDAwO30iKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJUIjoKICAgICAgICAgICAgICAgIEdISGJEX2FkZFN0eWxlKCIjZ2hoTW5nQnRuIHttYXJnaW46MDtwYWRkaW5nOjRweCA2cHg7ei1pbmRleDozMDAwO30iKTsKICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYXBwYmFyIG9sIikpewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FwcGJhciBvbCNhYl9jdGxzIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaE1uZ0J0biIpKX0sIDEwMDApOwogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGxpTmV3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTtsaU5ldy5jbGFzc05hbWU9ImFiX2N0bCI7bGlOZXcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaE1uZ0J0biIpKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJvbCNhYl9jdGxzIikuYXBwZW5kQ2hpbGQobGlOZXcpO30sIDE1MDApOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2lmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYXBwYmFyIG9sIikpe3ZhciBsaU5ldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7bGlOZXcuY2xhc3NOYW1lPSJhYl9jdGwiO2xpTmV3LmFwcGVuZENoaWxkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhNbmdCdG4iKSk7ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcigib2wjYWJfY3RscyIpLmFwcGVuZENoaWxkKGxpTmV3KTt9ZWxzZXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoTW5nQnRuIikuc2V0QXR0cmlidXRlKCJzdHlsZSIsInBvc2l0aW9uOmFic29sdXRlO3RvcDo4ZW07cmlnaHQ6MCIpfX0sIDE1MDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICBHSEhiRF9hZGRTdHlsZSgiI2doaE1uZ0J0biB7cG9zaXRpb246Zml4ZWQ7dG9wOjE1MHB4O3JpZ2h0Oi0yLjhlbTstbW96LXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTsiKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJvcmRlci1ib3R0b206MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtwYWRkaW5nOjZweCAxcHg7ei1pbmRleDoxMDAwO30iKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpLmxlbmd0aCA+IDMpIGJic3R5bGUgPSBtYnN0eWxlLnNwbGl0KCItIilbM107CiAgICBlbHNlIGJic3R5bGUgPSAiUCI7CiAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpLmxlbmd0aCA+IDUpIGJicG9zID0gbWJzdHlsZS5zcGxpdCgiLSIpWzVdOwogICAgZWxzZSBiYnBvcyA9ICJIIjsKICAgIC8vIHRvZ2dsZWNpdGVsaW5lKGJicG9zKTsgY2FsbGVkIGJ5IGZpeHVpc3R5bGUoKQogICAgYWRkQXQgPSBnaGhQcmVmTy5hZGR0b2xpc3Rwb3NbMF07CiAgICBsaXN0Y2hncyA9IDA7CiAgICBiTFVvcGVuID0gIk4iOwogICAgYkFnZ3Jlc3MgPSBnaGhQcmVmTy5hZ2dyZXNzaXZlYmxvY2tbMF07CiAgICBiQUpBWCA9IGdoaFByZWZPLnVzZW11dGF0aW9uWzBdLnNwbGl0KCItIilbMF07CiAgICBpZiAoZ2hoUHJlZk8udXNlbXV0YXRpb25bMF0uc3BsaXQoIi0iKS5sZW5ndGggPiAxKSBiTXV0T2IgPSBnaGhQcmVmTy51c2VtdXRhdGlvblswXS5zcGxpdCgiLSIpWzFdOwogICAgZWxzZSBiTXV0T2IgPSAiWSI7CiAgICBwcmVmMWNsaWNrID0gZ2hoUHJlZk8ub25lY2xpY2tbMF07CiAgICBiZXRhdGVzdCA9IGdoaFByZWZPLnJ1bmJldGFbMF07CiAgICBpZiAoZG9jdW1lbnQuYm9keSl7CiAgICAgICAgLy8gQWRkIGJ1dHRvbnMsIGhpZGUgdW53YW50ZWQgZG9tYWlucwogICAgICAgIGhpZGVoaXRzKG51bGwsZmFsc2UpOwogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiR1RSIikpIHJlbW92ZVBCcygpOwogICAgICAgIC8vIFNwZWNpYWwgcmVzdWx0cyBsYXlvdXQKICAgICAgICBpZiAoYmV0YXRlc3QgPT0gIlkiKXsKICAgICAgICAgICAgdmFyIGl0YmwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVzIC5pbWFnZXNfdGFibGUiKTsKICAgICAgICAgICAgaWYgKGl0YmwpIGhpZGViYXNpYyhpdGJsKTsKICAgICAgICB9CiAgICAgICAgLy8gQ3JlYXRlIHNrZWxldG9uIG9mIG1hbmFnZSBmb3JtCiAgICAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpKSBhZGRNYW5hZ2VGb3JtKCk7CiAgICAgICAgLy8gQWRkIG1hbmFnZSBidXR0b24KICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhNbmdCdG4iKSAmJiBtYnN0eWxlLnNwbGl0KCItIilbMF0gIT0gImJsayIpewogICAgICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnKXtpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzIikgfHwgaXNjaCkgYWRkTW5nQnRuKCk7fQogICAgICAgICAgICBlbHNlIGFkZE1uZ0J0bigpOwogICAgICAgIH0KICAgICAgICAvLyBTaG93IHBhbmUgaWYgbGFzdCBvcGVuCiAgICAgICAgaWYgKG1wb3Blbi5zdWJzdHIoMCwzKSA9PSAiWS1ZIikgc2hvd01hbmFnZUZvcm0oIm1uZ2Zvcm0iKTsKICAgICAgICAvLyBBZGQgbWVudSBpdGVtIC0gTGVnYWN5IE9ubHkKICAgICAgICBpZiAodHlwZW9mIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQgIT0gInVuZGVmaW5lZCIpIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoIk1hbmFnZSBIaWRpbmciLCBzaG93TWFuYWdlRm9ybSk7CiAgICAgICAgLy8gQ3JlYXRlIGJsb2NrIGZvcm0KICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhibG9ja2Zvcm0iKSkgYWRkQmxvY2tGb3JtKCk7CiAgICAgICAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgdGhhdCBjb3VsZCBiZSBuZXcgaW5zdGFudCBvciBBSkFYIHNlYXJjaCByZXN1bHRzCiAgICAgICAgaWYgKGJBSkFYID09ICJvbiIpIHNldE11dGF0aW9uV2F0Y2goKTsKICAgIH0KfQoKZnVuY3Rpb24gc2V0TXV0YXRpb25XYXRjaCgpewogICAgLy8gUHJlZmVyIE11dGF0aW9uT2JzZXJ2ZXIgKEZpcmVmb3ggMTQrKSBvdmVyIE11dGF0aW9uIEV2ZW50cwogICAgTXV0T2IgPSAod2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIpID8gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgOiB3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjsKICAgIGlmIChNdXRPYiAmJiBiTXV0T2IgPT0gIlkiKXsKICAgICAgICBjaGdNb24gPSBuZXcgTXV0T2IoZnVuY3Rpb24obXV0YXRpb25TZXQpewogICAgICAgICAgICBtdXRhdGlvblNldC5mb3JFYWNoKGZ1bmN0aW9uKG11dGF0aW9uKXsKICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09ICJjaGlsZExpc3QiKXsKICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8bXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hZGRlZE5vZGVzW2ldLm5vZGVUeXBlID09IDEpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tOb2RlKG11dGF0aW9uLmFkZGVkTm9kZXNbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gYXR0cmlidXRlIG11dGF0aW9uIG9uIEdvb2dsZSBJbWFnZXMKICAgICAgICAgICAgICAgICAgICBpZihtdXRhdGlvbi50YXJnZXQuY2xhc3NOYW1lID09ICJyZ19sIikgY2hlY2tOb2RlKG11dGF0aW9uLnRhcmdldC5wYXJlbnROb2RlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gYXR0YWNoIGNoZ01vbiB0byBkb2N1bWVudC5ib2R5CiAgICAgICAgaWYgKGlzY2ggPT0gdHJ1ZSkgb3B0cyA9IHtjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZXM6IHRydWUsIGF0dHJpYnV0ZUZpbHRlcjogWyJocmVmIl0sIGNoYXJhY3RlckRhdGE6IGZhbHNlfTsKICAgICAgICBlbHNlIG9wdHMgPSB7Y2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlLCBhdHRyaWJ1dGVzOiBmYWxzZSwgY2hhcmFjdGVyRGF0YTogZmFsc2V9OwogICAgICAgIGNoZ01vbi5vYnNlcnZlKGRvY3VtZW50LmJvZHksIG9wdHMpOwogICAgfSBlbHNlIGlmIChiTXV0T2IgPT0gIlkiKSB7IC8vIExlZ2FjeSBicm93c2VyIHN1cHBvcnQgYW5kIEJhaWR1CiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJET01TdWJ0cmVlTW9kaWZpZWQiLCBjaGVja09saXN0LCBmYWxzZSk7CiAgICB9Cn0KLy8gPT0gPT0gPT0gTWFpbiBFdmVudCBMb29wcyA9PSA9PSA9PQp2YXIgaWdub3JlTm9kZU5hbWVzID0gInxCT0RZfCN0ZXh0fCNjb21tZW50fElOUFVUfEJVVFRPTnxTQ1JJUFR8TEl8QXxGT1JNfCI7CnZhciBpZ25vcmVJZHMgPSAifGxlZnRuYXZ8bGVmdG5hdmN8Zm9vdHxnaGh0ZW1wfGdoaGJsb2NrZm9ybXxnaGhtYW5hZ2Vmb3JtfGdoaHNpdGVsaXN0fGdoaHBiYW5saXN0fHJoc3xyaHNjb2x8IjsKdmFyIGlnbm9yZUNsYXNzID0gInxnaGhpZGVyfGdoaGRidXR0b25zfGdoaDF0aW1lfCI7CnZhciB0X2FwLCB0X2dpbWc7CgpmdW5jdGlvbiBjaGVja09saXN0KGUpeyAvLyBDaGVjayBmb3IgbmV3IHJlc3VsdHMgLy8gTmVlZGVkIGZvciBCYWlkdQogICAgdmFyIGVsID0gZS50YXJnZXQ7CiAgICAvLyBJZ25vcmUgZXZlbnRzIG9uIHNvbWUgZWxlbWVudHMKICAgIGlmIChpZ25vcmVOb2RlTmFtZXMuaW5kZXhPZigifCIrZWwubm9kZU5hbWUrInwiKSA+IC0xKSByZXR1cm47CiAgICBpZiAoZWwuaGFzQXR0cmlidXRlKCJpZCIpKXtpZiAoaWdub3JlSWRzLmluZGV4T2YoInwiK2VsLmlkKyJ8IikgPiAtMSkgcmV0dXJuO30KICAgIGlmIChlbC5oYXNBdHRyaWJ1dGUoImNsYXNzIikpewogICAgICAgIGlmIChpZ25vcmVDbGFzcy5pbmRleE9mKCJ8IitlbC5jbGFzc05hbWUrInwiKSA+IC0xKSByZXR1cm47CiAgICAgICAgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucygiZ29vZy1kYXRlIikpIHJldHVybjsKICAgIH0KICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKSl7CiAgICAgICAgYWRkTWFuYWdlRm9ybSgpOwogICAgICAgIGluamVjdEJhc2VDU1MoKTsKICAgICAgICBpbmplY3RDdXN0b20oKTsKICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhNbmdCdG4iKSAmJiBtYnN0eWxlLnNwbGl0KCItIilbMF0gIT0gImJsayIpewogICAgICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnKXtpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzIikpIGFkZE1uZ0J0bigpO30KICAgICAgICAgICAgZWxzZSBhZGRNbmdCdG4oKTsKICAgICAgICB9CiAgICAgICAgLy8gVXNlIGRlZmF1bHQgYnV0dG9uIHN0eWxlIGZvciBub3cgKDEuOS4zKQogICAgICAgIEdISGJEX2FkZFN0eWxlKCIjZ2hoTW5nQnRuIHtwb3NpdGlvbjpmaXhlZDt0b3A6MTUwcHg7cmlnaHQ6LTIuOGVtOy1tb3otdHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOyIrCiAgICAgICAgICAgICAgICAgICAgICAgImJvcmRlci1ib3R0b206MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtwYWRkaW5nOjZweCAxcHg7ei1pbmRleDoxMDAwO30iKTsKICAgIH0KICAgIGNoZWNrTm9kZShlbCk7Cn0KZnVuY3Rpb24gY2hlY2tOb2RlKGVsKXsKICAgIGlmIChlbC5wYXJlbnROb2RlICYmIChlbC5wYXJlbnROb2RlLmlkID09ICdnaGhzaXRlbGlzdCcgfHwgZWwucGFyZW50Tm9kZS5pZCA9PSAnZ2hocGJhbmxpc3QnKSkgcmV0dXJuOyAvLyAyLjAuNiBkdWghCiAgICAvLyBBdXRvUGFnZXIgZXh0ZW5zaW9uCiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI25hdmNudCIpKXsKICAgICAgICBpZiAodF9hcCkgd2luZG93LmNsZWFyVGltZW91dCh0X2FwKTsKICAgICAgICB0X2FwID0gd2luZG93LnNldFRpbWVvdXQocmVmcmVzaExpc3RlbmVycywgNTAwKTsKICAgIH0KICAgIGlmIChlbC5ub2RlTmFtZSA9PSAiTEkiIHx8IChlbC5ub2RlTmFtZSA9PSAiRElWIiAmJiAoZWwuY2xhc3NOYW1lID09ICJnIiB8fCBlbC5jbGFzc0xpc3QuY29udGFpbnMoInJnX2RpIikgfHwgZWwuY2xhc3NOYW1lID09ICJyZ3NoIikpIHx8CiAgICAgICAgZWwubm9kZU5hbWUgPT0gJ0ctSU5ORVItQ0FSRCcgfHwgZWwubm9kZU5hbWUgPT0gJ0ctQ0FSRCcgfHwgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCJpc3YtciIpKSB2YXIgbmxpc3QgPSBbZWxdOwogICAgZWxzZSBubGlzdCA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpLmcsIGRpdi5nLCBkaXYucmdfZGksIGRpdi5pc3YtcicpOwogICAgaWYgKGVuZ2luZSAhPSAnR29vZ2xlJyAmJiBlbC5ub2RlTmFtZSAhPSAiTEkiKXsKICAgICAgICBpZiAoZWwubm9kZU5hbWUgPT0gIkRJViIgJiYgKGVsLmNsYXNzTGlzdC5jb250YWlucygicmVzdWx0LS13ZWIiKSB8fCBlbC5jbGFzc0xpc3QuY29udGFpbnMoInJlc3VsdC0tbmV3cyIpIHx8IGVsLmNsYXNzTmFtZSA9PSAiY2FyZC1tb2JpbGUiKSkgbmxpc3QgPSBbZWxdOyAvLyBRd2FudCwgRWNvc2lhCiAgICAgICAgZWxzZSBubGlzdCA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2Rpdi5yZXN1bHQsIGRpdi5yZXN1bHQtb3AsIGRpdi5saW5rc19tYWluLCBkaXYuc2VycC1pdGVtLCBkaXYuaGQsIGxpLmJfYWxnbywgb2wubGlzdC1mbGF0ID4gbGksIGRpdi5jYXJkLXdlYiBkaXYuY2FyZC1tb2JpbGUnKTsKICAgIH0KICAgIGlmIChubGlzdC5sZW5ndGggPiAwKXsKICAgICAgICBpZiAoaXNjaCkgaGlkZWhpdHMobmxpc3QsdHJ1ZSk7CiAgICAgICAgZWxzZSBoaWRlaGl0cyhubGlzdCxmYWxzZSk7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJHVFIiKSkgcmVtb3ZlUEJzKCk7CiAgICB9IGVsc2UgaWYgKGVsLm5vZGVOYW1lID09ICJESVYiICYmICggKGVsLmNsYXNzTGlzdC5jb250YWlucygiaXJjX2MiKSB8fCBlbC5jbGFzc0xpc3QuY29udGFpbnMoImlyY19iZyIpKSB8fCBlbC5pZCA9PSAnaXJjX2JnJykgKSB7CiAgICAgICAgdmFyIGJ1dHRvbmRpdnMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCcuaXJjX2J1dGM6bm90KFtnaGhyZXN1bHRdKSwgLmlyY19idXRfcjpub3QoW2doaHJlc3VsdF0pLCAuaXJjX2FiOm5vdChbZ2hocmVzdWx0XSksIC5pcmNfYnV0X3BkZnI6bm90KFtnaGhyZXN1bHRdKScpOwogICAgICAgIGZvciAodmFyIGs9MDsgazxidXR0b25kaXZzLmxlbmd0aDsgaysrKXsKICAgICAgICAgICAgYnV0dG9uZGl2c1trXS5zZXRBdHRyaWJ1dGUoImdoaHJlc3VsdCIsICJpbWFnZS11bnNldCIpOwogICAgICAgICAgICBidXR0b25kaXZzW2tdLnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKICAgICAgICAgICAgaWYgKGJ1dHRvbmRpdnNba10ubm9kZU5hbWUgPT0gJ1RBQkxFJyl7CiAgICAgICAgICAgICAgICB2YXIgdGRuZXcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwogICAgICAgICAgICAgICAgdGRuZXcuaW5uZXJIVE1MID0gJzxidXR0b24gdHlwZT0iYnV0dG9uIiB0aXRsZT0iQmxvY2svVW5ibG9jayIgY2xhc3M9ImlyY19idXQiPjxzcGFuIGNsYXNzPSJpcmNfYnV0X3QiPkdISGJEPC9zcGFuPjwvYnV0dG9uPic7CiAgICAgICAgICAgICAgICBidXR0b25kaXZzW2tdLnF1ZXJ5U2VsZWN0b3IoJ3RyJykuYXBwZW5kQ2hpbGQodGRuZXcpOwogICAgICAgICAgICAgICAgdGRuZXcuZmlyc3RDaGlsZC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGltZ2Jsb2NrZGlhbG9nLCBmYWxzZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgc3Bhbm5ldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgICAgICAgIHNwYW5uZXcuc3R5bGUubWFyZ2luTGVmdCA9ICcxMHB4JzsKICAgICAgICAgICAgICAgIHNwYW5uZXcuaW5uZXJIVE1MID0gJzxidXR0b24gdHlwZT0iYnV0dG9uIiB0aXRsZT0iQmxvY2svVW5ibG9jayIgY2xhc3M9ImlyY19idXQiPjxzcGFuIGNsYXNzPSJpcmNfYnV0X3QiPkdISGJEPC9zcGFuPjwvYnV0dG9uPic7CiAgICAgICAgICAgICAgICBidXR0b25kaXZzW2tdLmFwcGVuZENoaWxkKHNwYW5uZXcpOwogICAgICAgICAgICAgICAgc3Bhbm5ldy5maXJzdENoaWxkLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaW1nYmxvY2tkaWFsb2csIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGFidG4gPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdhW3JvbGU9ImJ1dHRvbiJdW2hyZWZdJyk7IC8vIEdvb2dsZSBpbWFnZXMgc2lkZWJhciAyMDIwLTA2LTIwCiAgICAgICAgaWYgKGFidG4ubGVuZ3RoID4gMCAmJiBhYnRuWzBdLmNsb3Nlc3QoJ2Mtd2l6JykgIT0gbnVsbCkgdmFyIGFsbmsgPSBhYnRuWzBdLmNsb3Nlc3QoJ2Mtd2l6JykucXVlcnlTZWxlY3RvcignYVtyb2xlPSJsaW5rIl1baHJlZl0nKTsKICAgICAgICBpZiAoYWxuayAmJiAhYWxuay5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgnZ2hocmVzdWx0JykpIHsKICAgICAgICAgICAgYWxuay5wYXJlbnROb2RlLnNldEF0dHJpYnV0ZSgnZ2hocmVzdWx0JywgJ2ltYWdlLXVuc2V0Jyk7CiAgICAgICAgICAgIHZhciBkbmV3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgICAgIGRuZXcuc2V0QXR0cmlidXRlKCdzdHlsZScsICd0ZXh0LWFsaWduOiByaWdodCcpOwogICAgICAgICAgICBkbmV3LmlubmVySFRNTCA9ICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgdGl0bGU9IkJsb2NrL1VuYmxvY2siIHVybD0iJyArIGFsbmsuaHJlZiArICciIHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTsgdG9wOiAzZW07IHJpZ2h0OiA2cHg7IHotaW5kZXg6IDEwMDA7IGNvbG9yOiAjNjA5YmViOyBiYWNrZ3JvdW5kLWNvbG9yOiAjMzMzOyBib3JkZXI6IDFweCBzb2xpZCAgIzYwOWJlYjsiPkdISGJEPC9idXR0b24+JzsKICAgICAgICAgICAgYWxuay5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkbmV3LCBhbG5rKTsKICAgICAgICAgICAgZG5ldy5maXJzdENoaWxkLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaW1nYmxvY2tkaWFsb2csIGZhbHNlKTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUuR0hIYkRjc3MnKS5sZW5ndGggPT09IDApeyAvLyBCaW5nIGxvc2luZyBzdHlsZXMuLi4gMjAxOC0xMC0wMQogICAgICAgIGluamVjdEJhc2VDU1MoKTsKICAgICAgICBkb1NpdGVTcGVjaWZpYygpOwogICAgICAgIEdISGJEX2FkZFN0eWxlKCIjZ2hoTW5nQnRuIHtwb3NpdGlvbjpmaXhlZDt0b3A6MTUwcHg7cmlnaHQ6LTIuOGVtOy1tb3otdHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOyIrCiAgICAgICAgICAgICAgICAgICAgICAgImJvcmRlci1ib3R0b206MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtwYWRkaW5nOjZweCAxcHg7ei1pbmRleDoxMDAwO30iKTsKICAgIH0KfQp2YXIgcGFyZW50Y2FyZDsKZnVuY3Rpb24gaGlkZWhpdHMobGllbHMsb3ZyZCl7CiAgICBpZiAoIWxpZWxzKXsKICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnKXsKICAgICAgICAgICAgbGllbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjcmVzIGxpLmcsICNyZXMgZGl2LnNyZyBkaXYuZywgI3JlcyBkaXYuX05JZCBkaXYuZywgI3JlcyBkaXYuX2JrV01nZCBkaXYuZywgI3JlcyAjcnNvIGRpdi5nLCAjcmVzICNHVFIgZGl2LmcsICNyZXMgI2lzcl9tYywgZy1zZWN0aW9uLXdpdGgtaGVhZGVyIGctc2Nyb2xsaW5nLWNhcm91c2VsIGctaW5uZXItY2FyZCwgZy1jYXJkIGRpdi5kYnNyLCBnLWNhcmQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaWVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdiNyZXN1bHRzIGxpLCBkaXYjcmVzdWx0cyA+IGRpdi5yZXN1bHQsIGRpdiNsaW5rcyA+IGRpdi5yZXN1bHRzX2xpbmtzX2RlZXAgPiBkaXYubGlua3NfbWFpbiwgZGl2I2JfY29udGVudCBvbCA+IGxpLmJfYWxnbywgZGl2I3Jlc3VsdHMgZGl2I3dlYiA+IG9sID4gbGksIGRpdiNXUzJtID4gZGl2LncsIGRpdi5zZXJwLWxpc3QgPiBkaXYuc2VycC1pdGVtLCB1bC5zZXJwLWxpc3QgPiBsaS5zZXJwLWl0ZW0sIGRpdiNtYWluX3Jlc3VsdHMgPiBkaXYucmVzdWx0LCBkaXYucmVzdWx0cy1jb2x1bW4gZGl2LnJlc3VsdC0td2ViLCBkaXYucmVzdWx0cy1jb2x1bW4gZGl2LnJlc3VsdC0tbmV3cywgI2NvbnRlbnRfbGVmdCA+IGRpdi5yZXN1bHQuYy1jb250YWluZXIsICNjb250ZW50X2xlZnQgPiBkaXYucmVzdWx0LW9wLmMtY29udGFpbmVyLCBvbC5saXN0LWZsYXQgPiBsaSwgZGl2LnctZ2xfX3Jlc3VsdCwgZGl2LmNhcmQtd2ViIGRpdi5jYXJkLW1vYmlsZScpOwogICAgICAgIH0KICAgICAgICBpZiAoIWxpZWxzKSByZXR1cm47CiAgICB9CiAgICBpZiAoaXNjaCAmJiBsaWVscy5sZW5ndGg9PTApewogICAgICAgIGxpZWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGl2LnJnX2RpLCBkaXYuaXN2LXInKTsKICAgIH0gZWxzZSBpZiAobGllbHMubGVuZ3RoPT0wKXsKICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnKXsKICAgICAgICAgICAgbGllbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjcmVzIGxpLmcsICNyZXMgZGl2LnNyZyBkaXYuZywgI3JlcyBkaXYuX05JZCBkaXYuZywgI3JlcyBkaXYuX2JrV01nZCBkaXYuZywgI3JlcyAjcnNvIGRpdi5nLCAjcmVzICNHVFIgZGl2LmcsICNyZXMgI2lzcl9tYywgZy1zZWN0aW9uLXdpdGgtaGVhZGVyIGctc2Nyb2xsaW5nLWNhcm91c2VsIGctaW5uZXItY2FyZCwgZy1jYXJkIGRpdi5kYnNyLCBnLWNhcmQiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaWVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdiNyZXN1bHRzIGxpLCBkaXYjcmVzdWx0cyA+IGRpdi5yZXN1bHQsIGRpdiNsaW5rcyA+IGRpdi5yZXN1bHRzX2xpbmtzX2RlZXAgPiBkaXYubGlua3NfbWFpbiwgZGl2I2JfY29udGVudCBvbCA+IGxpLmJfYWxnbywgZGl2I3Jlc3VsdHMgZGl2I3dlYiA+IG9sID4gbGksIGRpdiNXUzJtID4gZGl2LncsIGRpdi5zZXJwLWxpc3QgPiBkaXYuc2VycC1pdGVtLCB1bC5zZXJwLWxpc3QgPiBsaS5zZXJwLWl0ZW0sIGRpdiNtYWluX3Jlc3VsdHMgPiBkaXYucmVzdWx0LCBkaXYucmVzdWx0cy1jb2x1bW4gZGl2LnJlc3VsdC0td2ViLCBkaXYucmVzdWx0cy1jb2x1bW4gZGl2LnJlc3VsdC0tbmV3cywgI2NvbnRlbnRfbGVmdCA+IGRpdi5yZXN1bHQuYy1jb250YWluZXIsICNjb250ZW50X2xlZnQgPiBkaXYucmVzdWx0LW9wLmMtY29udGFpbmVyLCBvbC5saXN0LWZsYXQgPiBsaSwgZGl2LnctZ2xfX3Jlc3VsdCwgZGl2LmNhcmQtd2ViIGRpdi5jYXJkLW1vYmlsZScpOwogICAgICAgIH0KICAgIH0KICAgIGlmIChsaWVscy5sZW5ndGggPT0gMCkgcmV0dXJuOwogICAgaWYgKGxpZWxzLmxlbmd0aCA9PSAxKXsgLy8gR29vZ2xlIFN0YW5kYXJkIEltYWdlIFJlc3VsdHMKICAgICAgICBpZihsaWVsc1swXS5pZCA9PSAiaXNyX21jIikgbGllbHMgPSBsaWVsc1swXS5xdWVyeVNlbGVjdG9yQWxsKCIucmdfZGkiKTsKICAgIH0KICAgIHZhciBob3N0cywgaGlkZXJzLCBuaGlkZXIsIGksIGosIGssIGhpZCwgYWVsLCBhaHJlZiwgZG9tLCBkb21wYXJ0LCBidG4sIGFwYXIsIGRnb25lLCBwYmFuLCBsaW5rd2lkdGg7CiAgICBob3N0cyA9IGJsaXN0OwogICAgZm9yIChpPTA7IGk8bGllbHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmICgobGllbHNbaV0ucGFyZW50Tm9kZS5ub2RlTmFtZSA9PSAiT0wiIHx8IGxpZWxzW2ldLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gIlREIiB8fAogICAgICAgICAgICAgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJjYXJkLXNlY3Rpb24iKSB8fCBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoImN0LWNzIikgfHwgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJ3LWdsX19yZXN1bHQiKSB8fAogICAgICAgICAgICAgKGxpZWxzW2ldLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gIkRJViIgJiYgKGxpZWxzW2ldLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCJzcmciKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCJfTklkIikgfHwgbGllbHNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygiX05JZCIpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0ucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoImJrV01nZCIpIHx8IGxpZWxzW2ldLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoImJrV01nZCIpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0ubm9kZU5hbWUgPT09ICdHLUlOTkVSLUNBUkQnIHx8IGxpZWxzW2ldLm5vZGVOYW1lID09PSAnRy1DQVJEJykpIHx8CiAgICAgICAgICAgICAobGllbHNbaV0ucGFyZW50Tm9kZS5ub2RlTmFtZSA9PSAiRElWIiAmJiBsaWVsc1tpXS5jbG9zZXN0KCcjcnNvJykgIT09IG51bGwpIHx8CiAgICAgICAgICAgICAoZW5naW5lICE9ICdHb29nbGUnICYmIGxpZWxzW2ldLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gIkRJViIpIHx8CiAgICAgICAgICAgICBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoJ3NlcnAtaXRlbScpKSAmJgogICAgICAgICAgICBsaWVsc1tpXS5jbGFzc05hbWUuaW5kZXhPZigiZ2J0IikhPTAgJiYKICAgICAgICAgICAgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJncGx1c2dyaWQiKSA9PT0gZmFsc2UgJiYKICAgICAgICAgICAgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtaXRlbSIpID09PSBmYWxzZSAmJgogICAgICAgICAgICBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoImtuby1rcCIpID09PSBmYWxzZSkgewogICAgICAgICAgICBsaWVsc1tpXS5zZXRBdHRyaWJ1dGUoImdoaHJlc3VsdCIsInVuc2V0Iik7CiAgICAgICAgICAgIGhpZGVycyA9IGxpZWxzW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImdoaGlkZXIiKTsKICAgICAgICAgICAgbmhpZGVyID0gaGlkZXJzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKG5oaWRlciA9PSAwIHx8IG92cmQgPT0gdHJ1ZSl7IC8vIHNraXAgaWYgYSBidXR0b24gaXMgdGhlcmUKICAgICAgICAgICAgICAgIGhpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgYWVsID0gbGllbHNbaV0ucXVlcnlTZWxlY3RvcigiZGl2LnIgPiBhLCBoMyBhLCBkaXYucmMgYSIpOyAvLyBmaXJzdCBsaW5rIChub3QgdXNlZnVsIGZvciB2aWRlbyBvciBib29rIGJsb2NrcyksIDxoMz4gcHJlZmVycmVkCiAgICAgICAgICAgICAgICBpZiAoIWFlbCB8fCBhZWwucGFyZW50Tm9kZS5jbGFzc05hbWU9PSdkZWVwbGlua190aXRsZScpIGFlbCA9IGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3IoImgyIGEsIGg0IGEiKTsKICAgICAgICAgICAgICAgIGlmICghYWVsKSBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCJhIik7CiAgICAgICAgICAgICAgICBpZiAobGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJ2aWRlb2JveCIpKSBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yQWxsKCJ0ZCIpWzFdLnF1ZXJ5U2VsZWN0b3IoImEiKTsgLy92aWRlbyBwYWdlCiAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnICYmIGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCdhZHRlc3Q9b24nKSA+IC0xKXsKICAgICAgICAgICAgICAgICAgICBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCdjaXRlJyk7CiAgICAgICAgICAgICAgICAgICAgaWYoYWVsKXtpZighYWVsLmhhc0F0dHJpYnV0ZSgnaHJlZicpKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFlbC50ZXh0Q29udGVudC5pbmRleE9mKCdodHRwOi8vJyk9PT0tMSAmJiBhZWwudGV4dENvbnRlbnQuaW5kZXhPZignaHR0cHM6Ly8nKT09PS0xKSBhZWwuc2V0QXR0cmlidXRlKCdocmVmJywgJ2h0dHA6Ly8nK2FlbC50ZXh0Q29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYWVsLnNldEF0dHJpYnV0ZSgnaHJlZicsIGFlbC50ZXh0Q29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgfX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0JhaWR1Jyl7CiAgICAgICAgICAgICAgICAgICAgaWYobGllbHNbaV0uaGFzQXR0cmlidXRlKCdtdScpKXsKICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0uaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCAnPHNwYW4gc3R5bGU9ImRpc3BsYXk6bm9uZSI+PGEgY2xhc3M9ImMtc2hvd3VybCIgaHJlZj0iJyArIGxpZWxzW2ldLmdldEF0dHJpYnV0ZSgnbXUnKSArJyI+JyArIGxpZWxzW2ldLmdldEF0dHJpYnV0ZSgnbXUnKSArICc8L2E+PC9zcGFuPicpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCJhLmMtc2hvd3VybCIpOwogICAgICAgICAgICAgICAgICAgIGlmKGFlbCl7aWYoIWFlbC5oYXNBdHRyaWJ1dGUoJ2hyZWYnKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZWwudGV4dENvbnRlbnQuaW5kZXhPZignaHR0cDovLycpPT09LTEgJiYgYWVsLnRleHRDb250ZW50LmluZGV4T2YoJ2h0dHBzOi8vJyk9PT0tMSkgYWVsLnNldEF0dHJpYnV0ZSgnaHJlZicsICdodHRwOi8vJythZWwudGV4dENvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFlbC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBhZWwudGV4dENvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgIH19CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdTdGFydHBhZ2UnKXsKICAgICAgICAgICAgICAgICAgICBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCdhLnJlc3VsdC1saW5rJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYWVsKXthaHJlZj1hZWwuZ2V0QXR0cmlidXRlKCJocmVmIik7IGlmKGFocmVmKXtpZiAoYWhyZWYuc2VhcmNoKC9odHRwfGZ0cC9pKT09MCB8fCBhaHJlZi5pbmRleE9mKCIvaW50ZXJzdGl0aWFsIik9PTAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaHJlZi5pbmRleE9mKCIvdXJsP3E9Iik9PTAgfHwgYWhyZWYuaW5kZXhPZihjdXJyZW50RysiL3VybD9xPSIpPi0xIHx8IGFocmVmLmluZGV4T2YoIi91cmw/c2E9Iik9PTAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWhyZWYuaW5kZXhPZigiL2FjbGs/Iik9PTAgJiYgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJwc2xpIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYWhyZWYuaW5kZXhPZigiLy9yLnNlYXJjaC55YWhvbyIpPT0wIHx8IGFocmVmLmluZGV4T2YoY3VycmVudEcrIi9saW5rP3VybD0iKT4tMSl7CiAgICAgICAgICAgICAgICAgICAgZG9tID0gYWhyZWYuc3Vic3RyKGFocmVmLnNlYXJjaCgvaHR0cHxmdHAvaSkpOwogICAgICAgICAgICAgICAgICAgIGlmIChhZWwuaGFzQXR0cmlidXRlKCJkYXRhLWhyZWYiKSkgZG9tID0gYWVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ocmVmIikuc3Vic3RyKGFlbC5nZXRBdHRyaWJ1dGUoImRhdGEtaHJlZiIpLmluZGV4T2YoImh0dHAiKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbS5pbmRleE9mKGN1cnJlbnRHKyIvYWNsaz8iKT4tMSkgZG9tID0gYWhyZWYuc3Vic3RyKGFocmVmLmluZGV4T2YoImh0dHAiLCAxMCkpOwogICAgICAgICAgICAgICAgICAgIGlmIChhaHJlZi5pbmRleE9mKCIvdXJsP3NhPSIpPi0xKSBkb20gPSBkZWNvZGVVUklDb21wb25lbnQoYWhyZWYuc3Vic3RyKGFocmVmLmluZGV4T2YoIiZ1cmw9IikrNSkpOwogICAgICAgICAgICAgICAgICAgIGlmIChhaHJlZi5pbmRleE9mKCJyLnNlYXJjaC55YWhvby5jb20vX3lsdD0iKT4tMSkgZG9tID0gZGVjb2RlVVJJQ29tcG9uZW50KGFocmVmLnN1YnN0cihhaHJlZi5pbmRleE9mKCJSVT1odHRwIikrMykpOwogICAgICAgICAgICAgICAgICAgIGlmIChkb20uaW5kZXhPZigic2VhcmNoLnlhaG9vLmNvLmpwL3IvRk9SPSIpPi0xKSBkb20gPSBkZWNvZGVVUklDb21wb25lbnQoYWhyZWYuc3Vic3RyKGFocmVmLmluZGV4T2YoIi8qKmh0dHAiKSszKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbS5pbmRleE9mKCJodHRwczovL2l4cXVpY2stcHJveHkuY29tL2RvL3NwZy9oaWdobGlnaHQucGwiKT4tMSkgZG9tID0gZGVjb2RlVVJJQ29tcG9uZW50KGFocmVmLnN1YnN0cihhaHJlZi5pbmRleE9mKCImdT1odHRwIikrMykpOwogICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Ry5pbmRleE9mKCJiYWlkdSIpID4gLTEpIGRvbSA9ICcvLycgKyBhZWwudGV4dENvbnRlbnQucmVwbGFjZSgnaHR0cHM6Ly8nLCAnJykucmVwbGFjZSgnaHR0cDovLycsICcnKS5yZXBsYWNlKCcuLi4uJywgJycpOwogICAgICAgICAgICAgICAgICAgIC8vIGlmIChkb20uaW5kZXhPZigiaW1ncmVmdXJsIik+LTEpIGRvbSA9IGRvbS5tYXRjaCgvaW1ncmVmdXJsPShbXiZdKykvKVsxXTsKICAgICAgICAgICAgICAgICAgICBkb20gPSBkb20uc3BsaXQoIi8iKVsyXTsKICAgICAgICAgICAgICAgICAgICBpZiAoZG9tLmluZGV4T2YoIjoiKT4gLTEpIGRvbSA9IGRvbS5zdWJzdHIoMCxkb20uaW5kZXhPZigiOiIpKTsgLy8gU3RyaXAgcG9ydCBudW1iZXIKICAgICAgICAgICAgICAgICAgICBkb21wYXJ0ID0gZG9tOwogICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLnNldEF0dHJpYnV0ZSgiZ2hoaG9zdCIsZG9tcGFydCk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRvbXBhcnQuaW5kZXhPZigiLiIpPiAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdHMuaW5kZXhPZigifCIrZG9tcGFydCsiOiIpPi0xKSB7IC8vIFRoZXNlIGRvbWFpbnMgc3VjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5oaWRlciA+IDApeyAvLyBSZW1vdmUgb2xkIGJ1dHRvbnMsIG5vdGljZXMsIGV0Yy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGs9aGlkZXJzLmxlbmd0aC0xOyBrPj0wOyBrLS0pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlcnNba10ucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5oaWRlciA9IGxpZWxzW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImdoaGlkZXIiKS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygiZ2hoMXRpbWUiKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3N0cy5pbmRleE9mKCJ8Iitkb21wYXJ0KyI6cCIpPDApIHsgLy8gUmVndWxhciBibG9jawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1lOPT0iWSIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygicmVzdWx0c19saW5rc19kZWVwIikpeyAvLyBEREcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlSGl0KGRvbXBhcnQsYWVsLGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3IoIi5saW5rc19tYWluIiksIiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXBsYWNlSGl0KGRvbXBhcnQsYWVsLGxpZWxzW2ldLCIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJlcGxhY2VIaXQoZG9tcGFydCxhZWwsbGllbHNbaV0sIm5vbmUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBQZXJtYS1iYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0uc2V0QXR0cmlidXRlKCJibG9ja2hpZGRlbiIsZG9tcGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgIT0gJ0dvb2dsZScgJiYgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhkbm9uZSIpID09PSBmYWxzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5jbGFzc0xpc3QuYWRkKCdnaGhkbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygibGlua3NfbWFpbiIpKSBsaWVsc1tpXS5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQoJ2doaGRub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZ2luZSA9PSAnRERHJyAmJiBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoInJlc3VsdHNfbGlua3NfZGVlcCIpKSBraWRzID0gbGllbHNbaV0ubGFzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbjsgLy9EREcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGtpZHMgPSBsaWVsc1tpXS5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9MDsgajxraWRzLmxlbmd0aDsgaisrKXsgLy8gSGlkZSBHb29nbGUgcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChraWRzW2pdLmNsYXNzTGlzdC5jb250YWlucygiZ2hoaWRlciIpID09PSBmYWxzZSAmJiBraWRzW2pdLmNsYXNzTGlzdC5jb250YWlucygiZ2hoZG5vbmUiKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lkc1tqXS5jbGFzc0xpc3QuYWRkKCdnaGhkbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygicHNsaSIpKSBsaWVsc1tpXS5zdHlsZS5wYWRkaW5nID0gIjAiOyAvLyBTaG9wcGluZyByZXN1bHRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21wYXJ0ID0gZG9tcGFydC5zbGljZShkb21wYXJ0LmluZGV4T2YoIi4iKSsxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21wYXJ0LmluZGV4T2YoIi4iKSA9PT0gLTEgJiYgZG9tcGFydCAhPSAidGxkIikgZG9tcGFydCArPSAnLnRsZCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGhpZCA9PSBmYWxzZSAmJiBuaGlkZXIgPiAxKSB7IC8vIFJlbW92ZSBwcmV2aW91cyBibG9jayAmIHJlc2V0IG5oaWRlcgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobGllbHNbaV0uY2hpbGRyZW5bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPSAnZy1zZWN0aW9uLXdpdGgtaGVhZGVyJykgbGllbHNbaV0uY2hpbGRyZW5bMF0ucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFuIHVwIHVuYmxvY2tlZCBvbmUtdGltZXMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygiZ2hoMXRpbWUiKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdnaGgxdGltZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdvbmUgPSBsaWVsc1tpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJnaGhkIilbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGdvbmUpIGRnb25lLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdvbmUgPSBsaWVsc1tpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJnaGhkYnV0dG9ucyIpWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRnb25lKSBkZ29uZS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBuaGlkZXIgPSBsaWVsc1tpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJnaGhpZGVyIikubGVuZ3RoOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoaGlkID09IGZhbHNlICYmIChuaGlkZXIgPT0gMCB8fCBsaWVsc1tpXS5jaGlsZHJlblswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09ICdnLXNlY3Rpb24td2l0aC1oZWFkZXInKSkgeyAvLyBOb3QgYmxvY2tlZCwgaW5zZXJ0IGJsb2NrIGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgcmVtb3ZlIGhpZGluZyBmb3IgdW5ibG9ja2VkIGRvbWFpbnMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZ2luZSA9PSAnRERHJyAmJiBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoInJlc3VsdHNfbGlua3NfZGVlcCIpKSBraWRzID0gbGllbHNbaV0ubGFzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbjsgLy9EREcKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBraWRzID0gbGllbHNbaV0uY2hpbGRyZW47CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPGtpZHMubGVuZ3RoOyBqKyspewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpZHNbal0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhkbm9uZSIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWRzW2pdLmNsYXNzTGlzdC5yZW1vdmUoJ2doaGRub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmhhc0F0dHJpYnV0ZSgiYmxvY2toaWRkZW4iKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5yZW1vdmVBdHRyaWJ1dGUoImJsb2NraGlkZGVuIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdnaGhkbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZ2luZSA9PSAnRERHJyAmJiBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoImxpbmtzX21haW4iKSkgbGllbHNbaV0ucGFyZW50Tm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdnaGhkbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaWVsc1tpXS5oYXNBdHRyaWJ1dGUoImJsb2Nrbm90aWNlIikpIGxpZWxzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiYmxvY2tub3RpY2UiKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGJsb2NrIGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICBhcGFyID0gYWVsOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5zZWFyY2guaW5kZXhPZignYWR0ZXN0PW9uJykgPiAtMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhciA9IGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3IoImgzIGEsIGEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFwYXIuaGFzQXR0cmlidXRlKCdocmVmb3JpZ2luYWwnKSkgYXBhci5zZXRBdHRyaWJ1dGUoJ2hyZWZvcmlnaW5hbCcsIGFlbC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXBhci5oYXNBdHRyaWJ1dGUoJ2hyZWZvcmlnaW5hbCcpKSBhcGFyLnNldEF0dHJpYnV0ZSgnaHJlZm9yaWdpbmFsJywgYXBhci5ocmVmKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdCYWlkdScpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhciA9IGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3IoImgzIGEsIC5jLXJlc3VsdC1jb250ZW50IGEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXBhciAmJiBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCJwLm9wX3NpdGVfZG9tYWluX3RpdGxlLCBkaXYub3BfZ2VuZXJhbHFhX21haW4uYy1yb3ciKSAhPSBudWxsKSBhcGFyID0gbGllbHNbaV0ucXVlcnlTZWxlY3RvcigicC5vcF9zaXRlX2RvbWFpbl90aXRsZSwgZGl2Lm9wX2dlbmVyYWxxYV9tYWluLmMtcm93IikuZmlyc3RDaGlsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBhciAhPSBudWxsICYmICFhcGFyLm5leHRFbGVtZW50U2libGluZyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBhci5wYXJlbnROb2RlLm5vZGVOYW1lICE9ICJMSSIgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyLnBhcmVudE5vZGUubm9kZU5hbWUgIT0gIlREIiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYXIucGFyZW50Tm9kZS5ub2RlTmFtZSAhPSAiSDIiKSBhcGFyID0gYXBhci5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcGFyICE9IG51bGwgJiYgYXBhciAhPSB1bmRlZmluZWQpIHsgaWYgKGRvbS5pbmRleE9mKGN1cnJlbnRHKTwwICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpZWxzW2ldLnBhcmVudE5vZGUgIT0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3RhZHMgb2wiKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGllbHNbaV0ucGFyZW50Tm9kZSAhPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYm90dG9tYWRzIG9sIikpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpZWxzW2ldLnBhcmVudE5vZGUgIT0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FkcyBkaXYiKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGllbHNbaV0ucGFyZW50Tm9kZSAhPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmhzIG9sIikpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR4dHMuYmxvY2tbMF0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bi5jbGFzc05hbWU9ImdoaGlkZXIgZ2hoYiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG4uc2V0QXR0cmlidXRlKCJtZXRhIixkb20pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWYxY2xpY2suc3Vic3RyKDAsMSkgPT0gIlkiICYmIG1ic3R5bGUuc3BsaXQoIi0iKVs0XSA9PSAiWSIpeyAvL0JVRzogZm9yIDEtY2xpY2sgd2l0aCBhZ2dyZXNzaXZlIChzdWJkb21haW4pIHNldHRpbmdzLCBkb20gd2lsbCBiZSBpbmNvcnJlY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnKSBidG4uc2V0QXR0cmlidXRlKCJ0aXRsZSIsIkJsb2NrICIrZG9tKyIgLyBTSElGVCtjbGljayB0byBkaXNwbGF5IGJsb2NrIGZvcm0gLyBBTFQrY2xpY2sgdG8gb21pdCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYnRuLnNldEF0dHJpYnV0ZSgidGl0bGUiLCJCbG9jayAiK2RvbSsiIC8gU0hJRlQrY2xpY2sgdG8gZGlzcGxheSBibG9jayBmb3JtIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKVs0XSA9PSAiWSIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0dvb2dsZScpIGJ0bi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQmxvY2sgIitkb20rIiAvIFNob3cgYmxvY2sgZm9ybSAvIEFMVCtjbGljayB0byBvbWl0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBidG4uc2V0QXR0cmlidXRlKCJ0aXRsZSIsIkJsb2NrICIrZG9tKyIgLyBTaG93IGJsb2NrIGZvcm0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsc2hvd2JmZCx0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBvc2l0aW9uIGJ1dHRvbiBpbnNpZGUgdGhlIEgyIG9yIEgzIG9yIEg0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBhci5ub2RlTmFtZSA9PSAiSDMiIHx8IGFwYXIubm9kZU5hbWUgPT0gIkgyIiB8fCBhcGFyLm5vZGVOYW1lID09ICJINCIgfHwgZW5naW5lID09ICdTdGFydHBhZ2UnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyLnN0eWxlLm92ZXJmbG93ID0gInZpc2libGUiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYXIuYXBwZW5kQ2hpbGQoYnRuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyLnF1ZXJ5U2VsZWN0b3IoJ2EnKS5zZXRBdHRyaWJ1dGUoInRpdGxlIixhcGFyLnF1ZXJ5U2VsZWN0b3IoJ2EnKS50ZXh0Q29udGVudCk7IC8vIGZ1bGwgbGluayB0ZXh0IHRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBhci5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gJ0ctQ0FSRCcpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYXIucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYXIucGFyZW50Tm9kZS5wYXJlbnROb2RlLnN0eWxlLm92ZXJmbG93WSA9ICd2aXNpYmxlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyLnBhcmVudE5vZGUucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQgPSAndW5zZXQnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYXIucGFyZW50Tm9kZS5wYXJlbnROb2RlLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXBhci5wYXJlbnROb2RlLmNsYXNzTmFtZSA9PSAnZGJzcicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYnRuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRjYXJkID0gYXBhci5jbG9zZXN0KCdnLWNhcmQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Y2FyZCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudGNhcmQuc3R5bGUub3ZlcmZsb3dZID0gJ3Zpc2libGUnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRjYXJkLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcGFyLm5leHRTaWJsaW5nKSBhcGFyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJ0bixhcGFyLm5leHRTaWJsaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFwYXIucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSBidXR0b24gdG8gY2l0ZWxpbmUgNi8xMC8yMDEzOyB1cGRhdGVkIDgvMTYvMjAyMCB0byBsb29rIGZvciBhY3Rpb24tbWVudSBmaXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJicG9zID09ICJDIikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBheG5tZW51ID0gbGllbHNbaV0ucXVlcnlTZWxlY3RvcigiLmFjdGlvbi1tZW51Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNpdGVsaW5lcyA9IGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3JBbGwoImNpdGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXhubWVudSl7IC8vIHBhcmVudE5vZGUgaXMgYSBzcGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF4bm1lbnUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYnRuLCBheG5tZW51KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNpdGVsaW5lcy5sZW5ndGggPiAwKSBheG5tZW51LnBhcmVudE5vZGUuY2xhc3NOYW1lID0gY2l0ZWxpbmVzWzBdLmNsYXNzTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaXRlbnVtPTA7IGNpdGVudW08Y2l0ZWxpbmVzLmxlbmd0aDsgY2l0ZW51bSsrKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjaXRlbGluZXNbY2l0ZW51bV0pLnZpc2liaWxpdHkgIT0gImhpZGRlbiIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdGVsaW5lc1tjaXRlbnVtXS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGJ0bik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnKSBidG4uc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIGFkZCB0byB2aXNpYmlsaXR5OmhpZGRlbiBlbGVtZW50IGZvciBzcGFjaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2l0ZWxpbmVzW2NpdGVudW1dLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYnRuLmNsb25lTm9kZSh0cnVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZ2luZSA9PSAnR29vZ2xlJykgYnRuLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydHBhZ2UuY29tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdGVsaW5lcyA9IGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3JBbGwoJy53LWdsX19yZXN1bHQtdXJsLWNvbnRhaW5lcicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2l0ZWxpbmVzLmxlbmd0aCA+IDApewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2l0ZWxpbmVzWzBdLmFwcGVuZENoaWxkKGJ0bik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG4ucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW1wbGVtZW50IE1vdXNlb3ZlciBPcHRpb24gNi8yMi8yMDEyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmJzdHlsZSA9PSAiTSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG4uc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsdG9nZ2xlYmJ0bixmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLHRvZ2dsZWJidG4sZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXZvaWQgdW5oaWRpbmcgZ2FyYmFnZSBzcGFuIDUvMjUvMjAxMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8bGllbHNbaV0uY2hpbGRyZW4ubGVuZ3RoOyBqKyspewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaWVsc1tpXS5jaGlsZHJlbltqXS5jbGFzc0xpc3QuY29udGFpbnMoImdoaGlkZXIiKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGllbHNbaV0uY2hpbGRyZW5bal0uc3R5bGUuZGlzcGxheT09Im5vbmUiKSBsaWVsc1tpXS5jaGlsZHJlbltqXS5zZXRBdHRyaWJ1dGUoIndhc2Rpc3BsYXlub25lIiwid2FzZGlzcGxheW5vbmUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfX19CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgeyAvLyBDaGVjayBmb3IgYW5kIGhhbmRsZSBHb29nbGUgc3RhbmRhcmQgaW1hZ2UgcmVzdWx0cyAtIGRvZXNuJ3QgeWV0IHN1cHBvcnQgQkFTSUMgaW1hZ2UgcmVzdWx0cwogICAgICAgICAgICBpZiAobGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJyZ19kaSIpIHx8IGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygiaXN2LXIiKSl7CiAgICAgICAgICAgICAgICBpZiAoIWxpZWxzW2ldLmhhc0F0dHJpYnV0ZSgiaW1nYmxvY2siKSB8fCBvdnJkID09IHRydWUpeyAvLyBza2lwIGlmIHByZXZpb3VzbHkgcHJvY2Vzc2VkCiAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0uc2V0QXR0cmlidXRlKCJpbWdibG9jayIsICJub3JtYWwiKTsKICAgICAgICAgICAgICAgICAgICBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCJhW2hyZWZdIik7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFlbCAmJiBhZWwuaHJlZi5pbmRleE9mKCcvc2VhcmNoPycpID09IC0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFlbC5nZXRBdHRyaWJ1dGUoImhyZWYiKS5pbmRleE9mKCJpbWdyZWZ1cmwiKT4tMSl7IC8vIFNpdGUgc2hvd2luZyB0aGUgaW1hZ2UgKCJ2aXNpdCBwYWdlIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSA9IGRlY29kZVVSSUNvbXBvbmVudChhZWwuaHJlZikubWF0Y2goL2ltZ3JlZnVybD0oW14mXSspLylbMV0uc3BsaXQoIi8iKVsyXTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhZWwuZ2V0QXR0cmlidXRlKCJocmVmIikuaW5kZXhPZigiaW1ndXJsIik+LTEpeyAvLyBTaXRlIGhvc3RpbmcgdGhlIGltYWdlICgidmlldyBpbWFnZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20gPSBkZWNvZGVVUklDb21wb25lbnQoYWVsLmhyZWYpLm1hdGNoKC9pbWd1cmw9KFteJl0rKS8pWzFdLnNwbGl0KCIvIilbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vc29tZXRpbWVzIHlvdSBnZXQgYSBjbGVhbiBVUkwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSA9IGFlbC5nZXRBdHRyaWJ1dGUoImhyZWYiKS5zcGxpdCgiLyIpWzJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb20ubGVuZ3RoID4gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9tLmluZGV4T2YoIjoiKT4gLTEpIGRvbSA9IGRvbS5zdWJzdHIoMCxkb20uaW5kZXhPZigiOiIpKTsgLy8gU3RyaXAgcG9ydCBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbXBhcnQgPSBkb207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZG9tcGFydC5pbmRleE9mKCIuIik+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RzLmluZGV4T2YoInwiK2RvbXBhcnQrIjoiKT4tMSkgeyAvLyBUaGVzZSBkb21haW5zIHN1Y2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RzLmluZGV4T2YoInwiK2RvbXBhcnQrIjpwIik8MCkgeyAvLyBSZWd1bGFyIGJsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5zZXRBdHRyaWJ1dGUoImltZ2Jsb2NrIiwgInJlZ3VsYXIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gUGVybWEtYmFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5zZXRBdHRyaWJ1dGUoImltZ2Jsb2NrIiwgInBiYW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21wYXJ0ID0gZG9tcGFydC5zbGljZShkb21wYXJ0LmluZGV4T2YoIi4iKSsxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbXBhcnQuaW5kZXhPZigiLiIpID09PSAtMSAmJiBkb21wYXJ0ICE9ICJ0bGQiKSBkb21wYXJ0ICs9ICcudGxkJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgaW1nc2h1ZmZsZSA9IGZhbHNlOyAvLyBDSEFOR0UgVE8gVFJVRSBUTyBUVVJOIE9OIFNIVUZGTElORyAoQ1VSUkVOVExZIEJST0tFTikKICAgICAgICAgICAgICAgIGlmIChpbWdzaHVmZmxlKXsKICAgICAgICAgICAgICAgICAgICAvLyBTdGFuZGFyZCBpbWFnZSByZXN1bHRzOiBtb3ZlIHAtYmFubmVkIG5vZGVzIHRvIHRoZSBlbmQgdG8gbWFpbnRhaW4gb3ZlcmFsbCBwYWdlIGxlbmd0aCAob3RoZXJ3aXNlLCBhdXRvbG9hZGluZyBzdG9wcykKICAgICAgICAgICAgICAgICAgICBpZiAodF9naW1nKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRfZ2ltZyk7CiAgICAgICAgICAgICAgICAgICAgdF9naW1nID0gd2luZG93LnNldFRpbWVvdXQoZml4SW1hZ2VzTGF5b3V0LCA1MDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoTW5nQnRuIikgJiYgbWJzdHlsZS5zcGxpdCgiLSIpWzBdICE9ICJibGsiICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXMiKSkgYWRkTW5nQnRuKCk7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidW5idG4iKS5sZW5ndGggPiAxKSB1bmR1cE1uZ0J0bigpOwogICAgaWYgKGJldGF0ZXN0ID09ICJZIiAmJiBlbmdpbmUgPT0gJ0dvb2dsZScpeyAvLyBCRVRBIC0gTkVXIC0gdjEuNS4yCiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gY29tcGxldGVseSBpbnZpc2libGUgcmVzdWx0cywgbW9kaWZ5IHRoZSBxdWVyeSB0byBleGNsdWRlIHRoZSBmaXJzdCBoaWRkZW4gc2l0ZQogICAgICAgIHZhciBpbnZpcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImxpW2Jsb2NraGlkZGVuXSIpOwogICAgICAgIGlmIChpbnZpcy5sZW5ndGggPj0gMykgcmVRcnkoIistc2l0ZToiK2ludmlzWzBdLmdldEF0dHJpYnV0ZSgiYmxvY2toaWRkZW4iKSk7CiAgICB9Cn0KZnVuY3Rpb24gZml4SW1hZ2VzTGF5b3V0KCl7CiAgICAvLyBCVUdHWTogUkVQTEFDRU1FTlQgSU1BR0VTIERPIE5PVCBMT0FEIFVOVElMIFlPVSBUUklHR0VSIEEgUkVQQUlOVCAoZS5nLiwgb3Blbi9jbG9zZSBGaW5kIGJhciwgcmVzaXplIHdpbmRvdywgem9vbSBpbiB0aGVuIHpvb20gb3V0KQogICAgdmFyIG1hZGVhbW92ZSA9IGZhbHNlOwogICAgdmFyIHJnc2hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZ3NoIik7CiAgICB2YXIgbGFzdGRhdGFwZyA9IHJnc2hlc1tyZ3NoZXMubGVuZ3RoLTFdLmdldEF0dHJpYnV0ZSgiZGF0YS1wZyIpOwogICAgdmFyIGJhZGltZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdltpbWdibG9jaz0icGJhbiJdJyk7CiAgICAvLyBUT0RPOiBDcmVhdGUgc2V0dGluZyB0byBsZXQgdXNlciBjaG9vc2UgdG8gcmVtb3ZlIHJlZ3VsYXIgYmxvY2tzLCB0b287IHRlbXBvcmFyeSB3b3JrYXJvdW5kOiB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lOgogICAgLy8gdmFyIGJhZGltZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdltpbWdibG9jaz0icGJhbiJdLGRpdltpbWdibG9jaz0icmVndWxhciJdJyk7CiAgICBpZiAoYmFkaW1nLmxlbmd0aCA+IDApewogICAgICAgIGZvciAodmFyIGJpPTA7IGJpPGJhZGltZy5sZW5ndGg7IGJpKyspewogICAgICAgICAgICBpZiAoYmFkaW1nW2JpXS5oYXNBdHRyaWJ1dGUoIm5ld2RhdGFwZyIpKXsgLy8gYWxyZWFkeSBtb3ZlZAogICAgICAgICAgICAgICAgaWYgKGJhZGltZ1tiaV0uZ2V0QXR0cmlidXRlKCJuZXdkYXRhcGciKSAhPSBsYXN0ZGF0YXBnKXsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmdfcyIpLmFwcGVuZENoaWxkKGJhZGltZ1tiaV0pOwogICAgICAgICAgICAgICAgICAgIGJhZGltZ1tiaV0uc2V0QXR0cmlidXRlKCJuZXdkYXRhcGciLCBsYXN0ZGF0YXBnKTsKICAgICAgICAgICAgICAgICAgICBtYWRlYW1vdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgeyAvLyBmaXJzdCBtb3ZlCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmdfcyIpLmFwcGVuZENoaWxkKGJhZGltZ1tiaV0pOwogICAgICAgICAgICAgICAgYmFkaW1nW2JpXS5zZXRBdHRyaWJ1dGUoIm5ld2RhdGFwZyIsIGxhc3RkYXRhcGcpOwogICAgICAgICAgICAgICAgbWFkZWFtb3ZlID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBUcmlnZ2VyIEdvb2dsZSdzIGZ1bmN0aW9uIHRvIHJlLWxheW91dCB0aGUgcmVzdWx0cyBuZWF0bHkKICAgICAgICBpZiAobWFkZWFtb3ZlKXsKICAgICAgICAgICAgdmFyIHNjdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIHNjdGFnLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2phdmFzY3JpcHQiKTsKICAgICAgICAgICAgc2N0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImdvb2dsZS5pc3IubGF5b3V0SW5pdCgpOyIpKTsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3RhZyk7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIHJlcGxhY2VIaXQoc2RvbWFpbixvYSxvbGksZGRpcyl7CiAgICB2YXIgZmMsIGRuZXcsIGRzZXQsIGJ0bjsKICAgIGZjID0gb2xpLnF1ZXJ5U2VsZWN0b3IoJ2gzLCBoMicpOwogICAgaWYgKCFmYykgZmMgPSBvbGkuZmlyc3RDaGlsZDsKICAgIGlmIChmYy5ub2RlTmFtZT09IkRJViIgJiYgZmMuY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhpZGVyIikpIHJldHVybjsKICAgIGRuZXcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGlmIChvYS5xdWVyeVNlbGVjdG9yKCdoMycpKSBkbmV3LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9hLnF1ZXJ5U2VsZWN0b3IoJ2gzJykudGV4dENvbnRlbnQrIiBvbiAiK3Nkb21haW4pKTsKICAgIGVsc2UgewogICAgICAgIGlmIChvbGkubm9kZU5hbWUgPT09ICdHLUlOTkVSLUNBUkQnIHx8IG9saS5ub2RlTmFtZSA9PT0gJ0ctQ0FSRCcgfHwgb2xpLmNsYXNzTmFtZSA9PT0gJ2Ric3InKXsKICAgICAgICAgICAgaWYgKG9hLmNoaWxkcmVuWzFdKSBkbmV3LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9hLmNoaWxkcmVuWzFdLnRleHRDb250ZW50KyIgb24gIitzZG9tYWluKSk7CiAgICAgICAgICAgIGVsc2UgaWYgKG9hLmNoaWxkcmVuWzBdICYmIG9hLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdICYmIG9hLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNoaWxkcmVuWzFdKSBkbmV3LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9hLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzFdLmNoaWxkcmVuWzFdLnRleHRDb250ZW50KyIgb24gIitzZG9tYWluKSk7CiAgICAgICAgICAgIGRuZXcuc3R5bGUud2hpdGVTcGFjZSA9ICdub3JtYWwnOwogICAgICAgIH0KICAgICAgICBlbHNlIGRuZXcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUob2EudGV4dENvbnRlbnQrIiBvbiAiK3Nkb21haW4pKTsKICAgIH0KICAgIGRuZXcuY2xhc3NOYW1lPSJnaGhpZGVyIGdoaGQiOwogICAgZG5ldy5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQ2xpY2sgdG8gdmlldywgdW5ibG9jayBvciBQZXJtYS1iYW4iKTsKICAgIGRuZXcuc3R5bGUuZGlzcGxheSA9IGRkaXM7CiAgICBpZiAoZGRpcyA9PSAibm9uZSIpewogICAgICAgIG9saS5zZXRBdHRyaWJ1dGUoImJsb2NraGlkZGVuIixzZG9tYWluKTsKICAgICAgICBpZiAob2xpLmhhc0F0dHJpYnV0ZSgiYmxvY2tub3RpY2UiKSkgb2xpLnJlbW92ZUF0dHJpYnV0ZSgiYmxvY2tub3RpY2UiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgb2xpLnNldEF0dHJpYnV0ZSgiYmxvY2tub3RpY2UiLHNkb21haW4pOwogICAgICAgIGlmIChvbGkuaGFzQXR0cmlidXRlKCJibG9ja2hpZGRlbiIpKSBvbGkucmVtb3ZlQXR0cmlidXRlKCJibG9ja2hpZGRlbiIpOwogICAgICAgIG9saS5jbGFzc0xpc3QucmVtb3ZlKCdnaGhkbm9uZScpOwogICAgICAgIGlmIChvbGkucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoInJlc3VsdHNfbGlua3NfZGVlcCIpKXsKICAgICAgICAgICAgb2xpLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJibG9ja25vdGljZSIsc2RvbWFpbik7CiAgICAgICAgICAgIGlmIChvbGkucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImJsb2NraGlkZGVuIikpIG9saS5wYXJlbnROb2RlLnJlbW92ZUF0dHJpYnV0ZSgiYmxvY2toaWRkZW4iKTsKICAgICAgICAgICAgb2xpLnBhcmVudE5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnZ2hoZG5vbmUnKTsKICAgICAgICB9CiAgICB9CiAgICBkbmV3LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixyZXNob3csZmFsc2UpOwogICAgLy8gZG5ldyBpcyBkaXNhcHBlYXJpbmcgb24gQmluZyBpbiBDaHJvbWUgVE9ETzogRklYSVQKICAgIGlmIChvbGkuY2xhc3NOYW1lID09PSAnZGJzcicpewogICAgICAgIHBhcmVudGNhcmQgPSBvYS5jbG9zZXN0KCdnLWNhcmQnKTsKICAgICAgICBpZiAocGFyZW50Y2FyZCl7CiAgICAgICAgICAgIHBhcmVudGNhcmQuaW5zZXJ0QmVmb3JlKGRuZXcsIHBhcmVudGNhcmQuZmlyc3RDaGlsZCk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBvbGkuaW5zZXJ0QmVmb3JlKGRuZXcsb2xpLmZpcnN0Q2hpbGQpOwogICAgfQogICAgZHNldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZHNldC5jbGFzc05hbWUgPSAiZ2hoaWRlciBnaGhpbmRlbnQiOwogICAgZHNldC5zZXRBdHRyaWJ1dGUoImRvbSIsc2RvbWFpbik7CiAgICBkc2V0LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIGJ0bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHRzLnVuYmxvY2tbMF0pKTsKICAgIGJ0bi5jbGFzc05hbWU9ImdoaGlkZXIiOwogICAgYnRuLnNldEF0dHJpYnV0ZSgidGl0bGUiLCJVbmJsb2NrIHRoaXMgc2l0ZSIpOwogICAgYnRuLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzlmNiI7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHVuYmxvY2ssZmFsc2UpOwogICAgZHNldC5hcHBlbmRDaGlsZChidG4pOwogICAgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICBidG4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0cy5wYmFuWzBdKSk7CiAgICBidG4uY2xhc3NOYW1lPSJnaGhpZGVyIjsKICAgIGJ0bi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiUGVybWFuZW50bHkgaGlkZSB0aGlzIHNpdGUiKTsKICAgIGJ0bi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiNmNjYiOwogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixwZXJtYmFuLGZhbHNlKTsKICAgIGRzZXQuYXBwZW5kQ2hpbGQoYnRuKTsKICAgIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYnRuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJjbG9zZSIpKTsKICAgIGJ0bi5jbGFzc05hbWU9ImdoaGlkZXIiOwogICAgYnRuLnNldEF0dHJpYnV0ZSgidGl0bGUiLCJSZS1oaWRlIHRoaXMgaGl0Iik7CiAgICBidG4uc3R5bGUuYmFja2dyb3VuZENvbG9yPSIjZWVlIjsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscmVoaWRlLGZhbHNlKTsKICAgIGRzZXQuYXBwZW5kQ2hpbGQoYnRuKTsKICAgIGRuZXcuYXBwZW5kQ2hpbGQoZHNldCk7CiAgICBpZiAoZG5ldy5wYXJlbnROb2RlLnN0eWxlLm92ZXJmbG93ID09ICJoaWRkZW4iIHx8IGRuZXcucGFyZW50Tm9kZS5zdHlsZS5vdmVyZmxvd1ggPT0gImhpZGRlbiIpewogICAgICAgIGRuZXcuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIiksIGRuZXcuZmlyc3RDaGlsZCk7CiAgICB9CiAgICBkc2V0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixnaGhraWxsZXZlbnQsZmFsc2UpOwogICAgaWYgKG9saS5jbGFzc0xpc3QuY29udGFpbnMoInBzbGkiKSkgZG5ldy5zdHlsZS5tYXJnaW4gPSAiMWVtIDAiOyAvLyBTaG9wcGluZyByZXN1bHRzCn0KZnVuY3Rpb24gaGlkZWJhc2ljKHRibCl7IC8vIEJBU0lDIElNQUdFIFJFU1VMVFMsIEJFVEEgT05MWSwgTk9OLUFKQVgKICAgIHZhciBob3N0cywgdGRzLCBpLCBqLCBrLCBoaWQsIGFlbCwgZG9tLCBkb21wYXJ0LCBidG4sIGFwYXIsIGRnb25lOwogICAgaG9zdHMgPSBibGlzdDsKICAgIHRkcyA9IHRibC5xdWVyeVNlbGVjdG9yQWxsKCJ0ZCIpOwogICAgZm9yIChpPTA7IGk8dGRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBhZWwgPSB0ZHNbaV0ucXVlcnlTZWxlY3RvcigiYSIpOwogICAgICAgIGlmIChhZWwpe2lmKGFlbC5oYXNBdHRyaWJ1dGUoImhyZWYiKSl7aWYgKGFlbC5nZXRBdHRyaWJ1dGUoImhyZWYiKS5pbmRleE9mKCJpbWdyZWZ1cmw9Iik+LTEpewogICAgICAgICAgICBkb20gPSBhZWwuZ2V0QXR0cmlidXRlKCJocmVmIikuc3Vic3RyKGFlbC5nZXRBdHRyaWJ1dGUoImhyZWYiKS5pbmRleE9mKCJpbWdyZWZ1cmw9IikrNykuc3BsaXQoIi8iKVsyXTsKICAgICAgICAgICAgaWYgKGRvbS5pbmRleE9mKCI6Iik+IC0xKSBkb20gPSBkb20uc3Vic3RyKDAsZG9tLmluZGV4T2YoIjoiKSk7IC8vIFN0cmlwIHBvcnQgbnVtYmVyCiAgICAgICAgICAgIGRvbXBhcnQgPSBkb207CiAgICAgICAgICAgIHdoaWxlIChkb21wYXJ0LmluZGV4T2YoIi4iKT4gLTEpIHsKICAgICAgICAgICAgICAgIGlmIChob3N0cy5pbmRleE9mKCJ8Iitkb21wYXJ0KyI6Iik+LTEpIHsgLy8gVGhlc2UgZG9tYWlucyBzdWNrOyBtYXJrIHRoZSBjZWxsIGZvciBub3cKICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdHMuaW5kZXhPZigifCIrZG9tcGFydCsiOnAiKT4tMSB8fCBzaG93WU49PSJOIikgdGRzW2ldLnNldEF0dHJpYnV0ZSgiZ2hoYWN0aW9uIiwiZGVsZXRlIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZSB0ZHNbaV0uc2V0QXR0cmlidXRlKCJnaGhhY3Rpb24iLCJub3RpY2UiKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZG9tcGFydCA9IGRvbXBhcnQuc2xpY2UoZG9tcGFydC5pbmRleE9mKCIuIikrMSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbXBhcnQuaW5kZXhPZigiLiIpID09PSAtMSAmJiBkb21wYXJ0ICE9ICJ0bGQiKSBkb21wYXJ0ICs9ICcudGxkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH19fQogICAgfQogICAgZm9yIChpPTA7IGk8dGRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBzd2l0Y2ggKHRkc1tpXS5nZXRBdHRyaWJ1dGUoImdoaGFjdGlvbiIpKXsKICAgICAgICAgICAgY2FzZSAiZGVsZXRlIjoKICAgICAgICAgICAgICAgIC8vIFRPRE8gaW1wbGVtZW50IGRlbGV0aW9uCiAgICAgICAgICAgICAgICB0ZHNbaV0uaW5uZXJIVE1MID0gImRlbGV0ZSBjZWxsIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJub3RpY2UiOgogICAgICAgICAgICAgICAgLy8gVE9ETyBpbXBsZW1lbnQgY2xpY2thYmxlIG5vdGljZXMKICAgICAgICAgICAgICAgIHRkc1tpXS5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICJsaW5lLXRocm91Z2giOwogICAgICAgICAgICAgICAgdGRzW2ldLnN0eWxlLm9wYWNpdHkgPSAiMC4zIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gVE9ETyBhZGQgYmxvY2sgYnV0dG9uCiAgICAgICAgfQogICAgfQp9Ci8vID09ID09ID09IE90aGVyIEZ1bmN0aW9ucyA9PSA9PSA9PQpmdW5jdGlvbiByZXNob3coZSl7IC8vIFNob3cgaGl0IHdpdGhvdXQgdW5ibG9ja2luZwogICAgdmFyIGxpZWwsIGFlbCwgZGFicywgazsKICAgIGxpZWwgPSBlLnRhcmdldC5jbG9zZXN0KCdbZ2hocmVzdWx0XScpOwogICAgaWYgKCFsaWVsKSByZXR1cm47CiAgICBsaWVsLmNsYXNzTGlzdC5hZGQoJ2doaDF0aW1lJyk7CiAgICAvLyBIaWRlIG5vdGljZSwgbW92ZSBhY3Rpb24gYnV0dG9ucywgdGhlbiBzaG93IGhpdAogICAgZS50YXJnZXQuc3R5bGUuZGlzcGxheT0ibm9uZSI7CiAgICBhZWwgPSBsaWVsLnF1ZXJ5U2VsZWN0b3IoImRpdi5yID4gYSwgaDMgYSwgLmMtcmVzdWx0LWNvbnRlbnQgYSIpOwogICAgaWYgKCFhZWwgJiYgZW5naW5lID09ICdCYWlkdScgJiYgbGllbC5oYXNBdHRyaWJ1dGUoJ211JykpIGFlbCA9IGxpZWwucXVlcnlTZWxlY3RvcigicC5vcF9zaXRlX2RvbWFpbl90aXRsZSwgZGl2Lm9wX2dlbmVyYWxxYV9tYWluLmMtcm93IikuZmlyc3RDaGlsZDsKICAgIGlmICghYWVsKSBhZWwgPSBsaWVsLnF1ZXJ5U2VsZWN0b3IoInNwYW4udGwgYSIpOyAvLyBzdW1tYXJpemVkIG5ld3MgcmVzdWx0CiAgICBpZiAoIWFlbCkgYWVsID0gbGllbC5xdWVyeVNlbGVjdG9yKCJhIik7IC8vIG90aGVyCiAgICBpZiAobGllbC5jbGFzc0xpc3QuY29udGFpbnMoInZpZGVvYm94IikpIGFlbCA9IGxpZWwucXVlcnlTZWxlY3RvckFsbCgidGQiKVsxXS5xdWVyeVNlbGVjdG9yKCJhIik7IC8vdmlkZW8gcGFnZQogICAgZGFicyA9IGUudGFyZ2V0LmZpcnN0RWxlbWVudENoaWxkOwogICAgaWYgKGVuZ2luZSAhPSAnQmluZycpewogICAgICAgIGlmIChhZWwucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2doaDF0aW1lJykpewogICAgICAgICAgICBhZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZGFicyxhZWwubmV4dFNpYmxpbmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChhZWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lID09PSAnRy1JTk5FUi1DQVJEJyB8fCBhZWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lID09PSAnRy1DQVJEJykgYWVsLnBhcmVudE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZGFicyxhZWwucGFyZW50Tm9kZSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGFlbC5wYXJlbnROb2RlLm5leHRTaWJsaW5nKSBhZWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkYWJzLGFlbC5wYXJlbnROb2RlLm5leHRTaWJsaW5nKTsKICAgICAgICAgICAgICAgIGVsc2UgYWVsLnBhcmVudE5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChkYWJzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkYWJzLmNsYXNzTmFtZSA9ICJnaGhkYnV0dG9ucyI7CiAgICAgICAgZGFicy5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7CiAgICAgICAgaWYgKGRhYnMubmV4dEVsZW1lbnRTaWJsaW5nKSBpZiAoZGFicy5uZXh0RWxlbWVudFNpYmxpbmcuY2xhc3NOYW1lLmluZGV4T2YoImdoaGlkZXIiKSA9PSAwIHx8IGRhYnMubmV4dEVsZW1lbnRTaWJsaW5nLmlubmVySFRNTCA9PSAiYmxvY2siKSBkYWJzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGFicy5uZXh0RWxlbWVudFNpYmxpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPIGRhYnMgaXMgZGlzYXBwZWFyaW5nIG9uIEJpbmcgd2hlbiBtb3ZlZCAtLSB0ZW1wb3JhcmlseSwgZG9uJ3QgbW92ZSBpdAogICAgICAgIGUudGFyZ2V0LnN0eWxlLmRpc3BsYXk9Jyc7CiAgICAgICAgZGFicy5jbGFzc05hbWUgPSAiZ2hoZGJ1dHRvbnMiOwogICAgICAgIGRhYnMucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpOwogICAgfQogICAgZm9yIChrPTE7IGs8bGllbC5jaGlsZHJlbi5sZW5ndGg7IGsrKyl7CiAgICAgICAgbGllbC5jaGlsZHJlbltrXS5jbGFzc0xpc3QucmVtb3ZlKCdnaGhkbm9uZScpOwogICAgfQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKfQovLyBIaWRlIG9yIFNob3cgaGl0IG5vdGljZXMKYXN5bmMgZnVuY3Rpb24gdXBkdHByZWYoZSl7CiAgICB2YXIgYnRucywgaiwgaGRzLCBzOwogICAgaWYgKHNob3dZTiA9PSAiWSIpewogICAgICAgIGlmIChjb25maXJtKCJObyBsb25nZXIgc2hvdyB0aXRsZXMgb3IgYnV0dG9ucyBmb3Igc3VwcHJlc3NlZCByZXN1bHRzPyIpKXsKICAgICAgICAgICAgZ2hoUHJlZk8uc2hvd25vdGNbMF0gPSAiTiI7CiAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNob3dZTiA9IGdoaFByZWZPLnNob3dub3RjWzBdOwogICAgICAgICAgICB0b2dIaWRlckRpdnMoIm5vIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBoZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJnaGhkIik7CiAgICAgICAgaWYgKGhkcy5sZW5ndGggPiAwKSBzID0gKGhkcy5sZW5ndGggPT0gMSkgPyAiaXMgMSBibG9ja2VkIGhpdCIgOiAiYXJlICIraGRzLmxlbmd0aCsiIGJsb2NrZWQgaGl0cyI7CiAgICAgICAgZWxzZSBzID0gImFyZSBubyBibG9ja2VkIGhpdHMiOwogICAgICAgIGlmIChjb25maXJtKCJTaG93IHRpdGxlcyBhbmQgYnV0dG9ucyBmb3Igc3VwcHJlc3NlZCByZXN1bHRzPyAoVGhlcmUgIitzKyIgb24gdGhpcyBwYWdlLikiKSl7CiAgICAgICAgICAgIGdoaFByZWZPLnNob3dub3RjWzBdID0gIlkiOwogICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzaG93WU4gPSBnaGhQcmVmTy5zaG93bm90Y1swXTsKICAgICAgICAgICAgdG9nSGlkZXJEaXZzKCJ5ZXMiKTsKICAgICAgICB9CiAgICB9CiAgICBmaXhTaG93SGlkZUJ0bigpOwogICAgZS50YXJnZXQuYmx1cigpOwp9CmZ1bmN0aW9uIGZpeFNob3dIaWRlQnRuKCl7CiAgICB2YXIgY2hrTVAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrc2hvd25vdGMiKTsKICAgIHZhciBjaGtCRiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGtzaG93bm90Y2JmIik7CiAgICBpZiAoc2hvd1lOID09ICJZIil7CiAgICAgICAgY2hrTVAuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgIGNoa01QLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIGlmIChjaGtCRil7CiAgICAgICAgICAgIGNoa0JGLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICAgICAgY2hrQkYuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBjaGtNUC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICBjaGtNUC5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgaWYgKGNoa0JGKXsKICAgICAgICAgICAgY2hrQkYucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgICAgIGNoa0JGLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICB9Cn0KZnVuY3Rpb24gdG9nSGlkZXJEaXZzKHNTaG93KXsKICAgIHZhciBkaCwgaTsKICAgIGRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZ2hoaWRlciIpOwogICAgZm9yKGk9MDtpPGRoLmxlbmd0aDtpKyspIHsKICAgICAgICBpZiAoZGhbaV0ubm9kZU5hbWUgPT0gIkRJViIgJiYgZGhbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhpbmRlbnQiKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgaWYgKHNTaG93ID09ICJ5ZXMiKSBkaFtpXS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgIGVsc2UgZGhbaV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICB9CiAgICB9Cn0KLy8gUmVtb3ZlIGRvbWFpbiBmcm9tIHRoZSBibG9jayBsaXN0CmFzeW5jIGZ1bmN0aW9uIHVuYmxvY2soZSl7CiAgICB2YXIgZWxQYXIsIHNkb20sIHNsaXN0LCBsaWVsLCB0Z3Q7CiAgICBlbFBhciA9IGUudGFyZ2V0LnBhcmVudE5vZGU7CiAgICBzZG9tID0gZWxQYXIuZ2V0QXR0cmlidXRlKCJkb20iKTsKICAgIGlmICghc2RvbSB8fCBzZG9tLmxlbmd0aDw0KXsKICAgICAgICBhbGVydCgiUHJvYmxlbSB3aXRoIGRvbWFpbiB0byB1bmJsb2NrIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFHTTQpewogICAgICAgIHNsaXN0ID0gR01fZ2V0VmFsdWUoImhpZGV5aG9zdHMiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2xpc3QgPSBhd2FpdCBHTS5nZXRWYWx1ZSgiaGlkZXlob3N0cyIpOwogICAgfQogICAgaWYgKHNsaXN0LnN1YnN0cigwLDEpICE9ICJ8Iikgc2xpc3QgPSAifCIgKyBzbGlzdDsKICAgIHNsaXN0ID0gc2xpc3QucmVwbGFjZSgifCIrc2RvbSsiOnQiLCIiKTsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIHNsaXN0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBzbGlzdCk7CiAgICB9CiAgICBibGlzdCA9IHNsaXN0OwogICAgbmVlZHVwZGF0ZSA9IHRydWU7CiAgICBsaWVsID0gZWxQYXIuY2xvc2VzdCgnW2doaHJlc3VsdF0nKTsKICAgIGlmICgobGllbC5ub2RlTmFtZSA9PSJMSSIgfHwgbGllbC5ub2RlTmFtZSA9PSAiRElWIikgJiYgbGllbC5jbGFzc0xpc3QuY29udGFpbnMoImdoaDF0aW1lIikpewogICAgICAgIGxpZWwuY2xhc3NMaXN0LnJlbW92ZSgnZ2hoMXRpbWUnKTsKICAgICAgICBsaWVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImdoaGQiKVswXS5yZW1vdmUoKTsKICAgICAgICBlbFBhci5yZW1vdmUoKTsKICAgIH0KICAgIGhpZGVoaXRzKG51bGwsdHJ1ZSk7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKSl7CiAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKS5zdHlsZS5kaXNwbGF5PT0iYmxvY2siKSByZWZyZXNoU2l0ZUxpc3QoKTsKICAgIH0KfQovLyBBZGQgZG9tYWluIHRvIHRoZSBQZXJtYS1iYW4gbGlzdAphc3luYyBmdW5jdGlvbiBwZXJtYmFuKGUpewogICAgaWYgKCFjb25maXJtKCJOZXZlciBzZWUgaGl0cyBmb3IgdGhpcyBkb21haW4gYWdhaW4/IikpIHJldHVybjsKICAgIHZhciBkcGFyLCBzZG9tLCBzbGlzdCwgbGllbDsKICAgIGRwYXIgPSBlLnRhcmdldC5wYXJlbnROb2RlOwogICAgc2RvbSA9IGRwYXIuZ2V0QXR0cmlidXRlKCJkb20iKTsKICAgIGlmICghR000KXsKICAgICAgICBzbGlzdCA9IEdNX2dldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICB9IGVsc2UgewogICAgICAgIHNsaXN0ID0gYXdhaXQgR00uZ2V0VmFsdWUoImhpZGV5aG9zdHMiKTsKICAgIH0KICAgIGlmIChzbGlzdC5zdWJzdHIoMCwxKSAhPSAifCIpIHNsaXN0ID0gInwiICsgc2xpc3Q7CiAgICBzbGlzdCA9IHNsaXN0LnJlcGxhY2UoInwiK3Nkb20rIjp0IiwifCIrc2RvbSsiOnAiKTsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIHNsaXN0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBzbGlzdCk7CiAgICB9CiAgICBibGlzdCA9IHNsaXN0OwogICAgbmVlZHVwZGF0ZSA9IHRydWU7CiAgICBsaWVsID0gZHBhci5jbG9zZXN0KCdbZ2hocmVzdWx0XScpOwogICAgaWYgKCFsaWVsKSBhbGVydCgnRGV2ZWxvcGVyIGVycm9yIGluIHBlcm1iYW4gKG5vIGxpZWwpJyk7CiAgICBpZiAoKGxpZWwubm9kZU5hbWUgPT0iTEkiIHx8IGxpZWwubm9kZU5hbWUgPT0gIkRJViIgfHwgbGllbC5ub2RlTmFtZSA9PSAnRy1JTk5FUi1DQVJEJyB8fCBsaWVsLm5vZGVOYW1lID09ICdHLUNBUkQnKSAmJiBsaWVsLmNsYXNzTGlzdC5jb250YWlucygiZ2hoMXRpbWUiKSl7CiAgICAgICAgbGllbC5jbGFzc0xpc3QucmVtb3ZlKCdnaGgxdGltZScpOwogICAgfQogICAgaWYoZHBhci5jbGFzc0xpc3QuY29udGFpbnMoImdoaGluZGVudCIpKSBkcGFyID0gZHBhci5wYXJlbnROb2RlOwogICAgZHBhci5yZW1vdmUoKTsKICAgIGhpZGVoaXRzKG51bGwsdHJ1ZSk7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkdUUiIpKSByZW1vdmVQQnMoKTsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpKXsKICAgICAgICBpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpLnN0eWxlLmRpc3BsYXk9PSJibG9jayIpIHJlZnJlc2hTaXRlTGlzdCgpOwogICAgfQp9Ci8vIENsb3NlIHRoaXMgYmFkIHJlc3VsdCBhbmQgcmVoaWRlICh0byBhbGxvdyBpbmRlbmRlbnQgb3Blbi9jbG9zZSwgZG8gbm90IHJ1biB0aHJvdWdoIGhpZGVoaXRzKQpmdW5jdGlvbiByZWhpZGUoZSl7CiAgICB2YXIgZHBhciwgbGllbCwgZG9tcGFydCwgYWVsLCBqOwogICAgZHBhciA9IGUudGFyZ2V0LnBhcmVudE5vZGU7CiAgICBsaWVsID0gZHBhci5jbG9zZXN0KCdbZ2hocmVzdWx0XScpOwogICAgaWYgKCFsaWVsKSBhbGVydCgnRGV2ZWxvcGVyIGVycm9yIGluIHJlaGlkZSAobm8gbGllbCknKTsKICAgIGRvbXBhcnQgPSBkcGFyLmdldEF0dHJpYnV0ZSgiZG9tIik7CiAgICBpZiAoZW5naW5lICE9ICdCaW5nJyl7CiAgICAgICAgZHBhci5yZW1vdmUoKTsKICAgICAgICBsaWVsLnJlbW92ZUNoaWxkKGxpZWwucXVlcnlTZWxlY3RvcigiZGl2LmdoaGQiKSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8gbm90aWNlIGlzIGRpc2FwcGVhcmluZyBvbiBCaW5nIC0tIHRlbXBvcmFyaWx5LCBkbyBub3QgbW92ZS9yZW1vdmUgdGhlIGJ1dHRvbnMgZGl2CiAgICAgICAgbGllbC5xdWVyeVNlbGVjdG9yKCdkaXYuZ2hoZCA+IGRpdi5naGhkYnV0dG9ucycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9CiAgICBhZWwgPSBsaWVsLnF1ZXJ5U2VsZWN0b3IoImgzIGEsIGgyIGEiKTsKICAgIGlmICghYWVsKSBhZWwgPSBsaWVsLnF1ZXJ5U2VsZWN0b3IoImEiKTsKICAgIGxpZWwuY2xhc3NMaXN0LnJlbW92ZSgnZ2hoMXRpbWUnKTsKICAgIHJlcGxhY2VIaXQoZG9tcGFydCxhZWwsbGllbCwiIik7CiAgICBmb3IgKGo9MDsgajxsaWVsLmNoaWxkcmVuLmxlbmd0aDsgaisrKXsgLy8gSGlkZSBHb29nbGUgcmVzdWx0CiAgICAgICAgaWYgKGxpZWwuY2hpbGRyZW5bal0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhpZGVyIikgPT09IGZhbHNlICYmIGxpZWwuY2hpbGRyZW5bal0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhkbm9uZSIpID09PSBmYWxzZSl7CiAgICAgICAgICAgIGxpZWwuY2hpbGRyZW5bal0uY2xhc3NMaXN0LmFkZCgnZ2hoZG5vbmUnKTsKICAgICAgICB9CiAgICB9Cn0KLy8gRnVuY3Rpb25zIHJlbGF0aW5nIHRvIHRoZSBCbG9jayBmb3JtCmZ1bmN0aW9uIGFkZEJsb2NrRm9ybSgpewogICAgdmFyIGJmZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgYmZkLmlkID0gImdoaGJsb2NrZm9ybSI7CiAgICBiZmQuY2xhc3NOYW1lID0gImdoaHBhbmUiOwogICAgdmFyIGJmZGNvZGUgPSAnPGZvcm0gb25zdWJtaXQ9InJldHVybiBmYWxzZTsiPjxwIHN0eWxlPSJtYXJnaW46MC43NWVtIDA7Ij48c3Ryb25nPkFkZCB0byBibG9ja2xpc3Q6PC9zdHJvbmc+PC9wPjxwPjxsYWJlbCAnICsKICAgICAgICAnc3R5bGU9IndoaXRlLXNwYWNlOnByZSI+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJnaGhkb20iIHZhbHVlPSJmIj4gPHNwYW4gaWQ9ImdoaGZ1bGxkb20iPjwvc3Bhbj48L2xhYmVsPjxicj4nICsKICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZ2hoZG9tIiB2YWx1ZT0icCI+IDxzcGFuIGlkPSJnaGhwYXJ0ZG9tIj48L3NwYW4+ICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImdoaGRvbWFkaiIgJyArCiAgICAgICAgJ3RpdGxlPSJBZGp1c3QgcGFydGlhbCBkb21haW4iIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxZW07IHBhZGRpbmc6IDAgMXB4OyI+fjwvYnV0dG9uPjwvbGFiZWw+PC9wPicgKwogICAgICAgICc8cCBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6cHJlO2xpbmUtaGVpZ2h0OjJlbTttYXJnaW46MC43NWVtIDAiPjxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iZ2hoYmYxIiBidD0idCI+ICcgKwogICAgICAgIHR4dHMub2tidG5bMF0gKyAnIDwvYnV0dG9uPiA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImdoaGJmMyIgYnQ9InAiPiAnICsgdHh0cy5va1BidG5bMF0gKyAnIDwvYnV0dG9uPjxicj4nICsKICAgICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJnaGhiZjIiIG1uZz0iTiI+ICcgKyB0eHRzLmNhbmNlbGJ0blswXSArICcgPC9idXR0b24+ICcgKwogICAgICAgICc8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImdoaGJmNCIgbW5nPSJZIj4nICsgdHh0cy5jYW5jZWxNYnRuWzBdICsgJzwvYnV0dG9uPjwvcD4nOwogICAgaWYgKGVuZ2luZSA9PSAnR29vZ2xlJyl7CiAgICAgICAgYmZkY29kZSArPSAiPHAgc3R5bGU9XCJib3JkZXItdG9wOjFweCBzb2xpZCAjYWFhO3RleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOnByZTtsaW5lLWhlaWdodDoyZW07bWFyZ2luOjAuNzVlbSAwO3BhZGRpbmctdG9wOjAuNWVtO1wiPkVkaXQgcXVlcnk6IDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hoYmY1XCIgdGl0bGU9XCJUaGlzIHNpdGUgb25seVwiPiArc2l0ZTogPC9idXR0b24+ICIgKwogICAgICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhiZjZcIiB0aXRsZT1cIkV4Y2x1ZGUgdGhpcyBzaXRlXCI+IC1zaXRlOiA8L2J1dHRvbj48L3A+IgogICAgfQogICAgYmZkY29kZSArPSAiPHAgc3R5bGU9XCJtYXJnaW46MC43NWVtIDA7XCI+PGxhYmVsIHRpdGxlPVwiU3dpdGNoIGJldHdlZW4gc2hvd2luZyBhbmQgaGlkaW5nIHJlc3VsdCB0aXRsZXMgZm9yIHJlZ3VsYXIgYmxvY2tlZCBoaXRzXCI+PGlucHV0ICIgKwogICAgICAgICJ0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hrc2hvd25vdGNiZlwiIGlkPVwiY2hrc2hvd25vdGNiZlwiPiBTaG93IGhpZGRlbiBoaXQgbm90aWNlczwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWwgdGl0bGU9XCJTd2l0Y2ggYmV0d2VlbiBibG9jayBkaWFsb2cgYW5kIG9uZS1jbGljayBibG9ja2luZ1wiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hrMWNsaWNrYmZcIiAiICsKICAgICAgICAiaWQ9XCJjaGsxY2xpY2tiZlwiPiBFbmFibGUgMS1jbGljayBibG9ja2luZzwvbGFiZWw+PC9wPjwvZm9ybT4iOwogICAgYmZkLmlubmVySFRNTCA9IGJmZGNvZGU7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJmZCk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmYxIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFkZGJsb2NrLGZhbHNlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZjIiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZ2hoY2xvc2Vmb3JtLGZhbHNlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZjMiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYWRkYmxvY2ssZmFsc2UpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJmNCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixnaGhjbG9zZWZvcm0sZmFsc2UpOwogICAgaWYgKGVuZ2luZSA9PSAnR29vZ2xlJyl7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJmNSIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixyZVF1ZXJ5LGZhbHNlKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmY2IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHJlUXVlcnksZmFsc2UpOwogICAgfQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJsb2NrZm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixnaGhraWxsZXZlbnQsZmFsc2UpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa3Nob3dub3RjYmYiKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHRwcmVmLGZhbHNlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGsxY2xpY2tiZiIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdXBkdDFjbGljayxmYWxzZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZG9tYWRqIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFkanBhcnRkb20sZmFsc2UpOwp9CmZ1bmN0aW9uIHNob3diZmQoZSkgewogICAgdmFyIGJidG4sIGJmZGl2LCBmZG9tLCBwZG9tLCBmc3BhbiwgcHNwYW4sIHRkaXYsIGx0OwogICAgYmJ0biA9IGUudGFyZ2V0OwogICAgZmRvbSA9IGJidG4uZ2V0QXR0cmlidXRlKCJtZXRhIik7CiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhibG9ja2Zvcm0iKSkgYWRkQmxvY2tGb3JtKCk7CiAgICBmc3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhmdWxsZG9tIik7CiAgICBmc3Bhbi50ZXh0Q29udGVudCA9IGZkb207CiAgICBmc3Bhbi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNoZWNrZWQgPSB0cnVlOwogICAgcGRvbSA9IGZkb20uc3Vic3RyKGZkb20uaW5kZXhPZigiLiIpKzEpOwogICAgcHNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocGFydGRvbSIpOwogICAgaWYgKHBkb20uaW5kZXhPZigiLiIpID4gLTEgJiYgcGF0SVB2NC50ZXN0KGZkb20pICE9IHRydWUpIHsKICAgICAgICBwc3Bhbi50ZXh0Q29udGVudCA9IHBkb207CiAgICAgICAgcHNwYW4ucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgc3dpdGNoIChiQWdncmVzcyl7CiAgICAgICAgICAgIGNhc2UgJ2FsbCc6CiAgICAgICAgICAgICAgICBwc3Bhbi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNoZWNrZWQgPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgY2FzZSAnd3d3JzoKICAgICAgICAgICAgICAgIGlmIChmZG9tLnN1YnN0cigwLDMpID09ICd3d3cnKSBwc3Bhbi5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmNoZWNrZWQgPSB0cnVlOyBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gZnVsbCBkb21haW4KICAgICAgICB9CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGRvbWFkaiIpLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgIH0gZWxzZSB7CiAgICAgICAgcHNwYW4ucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhkb21hZGoiKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgaWYgKGUuYWx0S2V5ID09IHRydWUgJiYgZW5naW5lID09ICdHb29nbGUnKXsKICAgICAgICByZVF1ZXJ5KCk7IHJldHVybjsKICAgIH0KICAgIGJmZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJsb2NrZm9ybSIpOwogICAgdGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0ZW1wIik7CiAgICBpZiAoIXRkaXYpewogICAgICAgIHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB0ZGl2LmlkID0gImdoaHRlbXAiOwogICAgfQogICAgaWYgKGlzY2ggPT0gdHJ1ZSl7CiAgICAgICAgdGRpdi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgInBvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7ei1pbmRleDozMDAwO3dpZHRoOjI1MHB4OyIpOwogICAgICAgIGJidG4ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0ZGl2KTsKICAgIH0gZWxzZSBpZiAoZS50YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lID09ICdHLUlOTkVSLUNBUkQnIHx8IGUudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlTmFtZSA9PSAnRy1DQVJEJykgewogICAgICAgIHRkaXYuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjhweDt0b3A6OHB4O3otaW5kZXg6OTk5OTt3aWR0aDoxMDAlOyIpOwogICAgICAgIGUudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGRpdiwgZS50YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkcmVuWzBdKTsKICAgIH0gZWxzZSBpZiAoZS50YXJnZXQucGFyZW50Tm9kZS5ub2RlTmFtZSA9PSAnRy1JTk5FUi1DQVJEJyB8fCBlLnRhcmdldC5wYXJlbnROb2RlLm5vZGVOYW1lID09ICdHLUNBUkQnKSB7CiAgICAgICAgdGRpdi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6OHB4O3RvcDo4cHg7ei1pbmRleDo5OTk5O3dpZHRoOjEwMCU7Iik7CiAgICAgICAgZS50YXJnZXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGRpdiwgZS50YXJnZXQucGFyZW50Tm9kZS5jaGlsZHJlblswXSk7CiAgICB9IGVsc2UgaWYgKGUudGFyZ2V0LnBhcmVudE5vZGUuY2xhc3NOYW1lID09ICdkYnNyJykgewogICAgICAgIHRkaXYuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjhweDt0b3A6OHB4O3otaW5kZXg6OTk5OTt3aWR0aDoxMDAlOyIpOwogICAgICAgIGUudGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRkaXYsIGUudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRyZW5bMF0pOwogICAgfSBlbHNlIGlmKGVuZ2luZSA9PSAnR29vZ2xlJyAmJiBiYnBvcyA9PSAnQycpIHsKICAgICAgICB0ZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCAicG9zaXRpb246YWJzb2x1dGU7bGVmdDo4cHg7dG9wOjE2cHg7ei1pbmRleDo5OTk5O3dpZHRoOjEwMCU7Iik7CiAgICAgICAgZS50YXJnZXQucGFyZW50Tm9kZS5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CiAgICAgICAgZS50YXJnZXQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGRpdiwgZS50YXJnZXQucGFyZW50Tm9kZS5jaGlsZHJlblswXSk7CiAgICB9IGVsc2UgewogICAgICAgIGx0ID0gYmJ0bi5vZmZzZXRMZWZ0ICsgYmJ0bi5vZmZzZXRXaWR0aCArIDEyOwogICAgICAgIGlmIChiYnRuLnBhcmVudE5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyl7CiAgICAgICAgICAgIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShiYnRuLnBhcmVudE5vZGUucHJldmlvdXNFbGVtZW50U2libGluZyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJmbG9hdCIpICE9ICJub25lIiB8fAogICAgICAgICAgICAgICAgKGJidG4uc3R5bGUucG9zaXRpb24gPT0gImFic29sdXRlIiAmJiBiYnRuLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gIlREIikpIGx0PWx0LWJidG4ucGFyZW50Tm9kZS5vZmZzZXRMZWZ0OwogICAgICAgIH0KICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndGFibGUjR1RSJykpewogICAgICAgICAgICBsdC09MjMwOwogICAgICAgIH0KICAgICAgICBpZiAoZW5naW5lICE9ICdHb29nbGUnKSBsdD1sdC1iYnRuLnBhcmVudE5vZGUub2Zmc2V0TGVmdDsKICAgICAgICBpZiAoZW5naW5lID09ICdTdGFydHBhZ2UnKSBsdCA9IDE2OwogICAgICAgIHRkaXYuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OiIgKyBsdCArICJweDt0b3A6LTY1cHg7ei1pbmRleDo1MDA7d2lkdGg6MjUwcHg7Iik7CiAgICAgICAgaWYgKGJidG4ubmV4dEVsZW1lbnRTaWJsaW5nKXsKICAgICAgICAgICAgaWYgKGJidG4ubmV4dEVsZW1lbnRTaWJsaW5nLm5vZGVOYW1lID09ICJESVYiIHx8IGJidG4ubmV4dEVsZW1lbnRTaWJsaW5nLm5vZGVOYW1lID09ICJCUiIpIGJidG4ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGRpdixiYnRuLm5leHRFbGVtZW50U2libGluZyk7CiAgICAgICAgICAgIGVsc2UgYmJ0bi5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRkaXYpOwogICAgICAgIH0KICAgICAgICBlbHNlIGJidG4ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0ZGl2KTsKICAgIH0KICAgIHRkaXYuYXBwZW5kQ2hpbGQoYmZkaXYpOwogICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRkaXYucGFyZW50Tm9kZSkub3ZlcmZsb3dYID09ICJoaWRkZW4iIHx8IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRkaXYucGFyZW50Tm9kZSkub3ZlcmZsb3dZID09ICJoaWRkZW4iKXsKICAgICAgICB0ZGl2LnBhcmVudE5vZGUuc3R5bGUub3ZlcmZsb3dYID0gInZpc2libGUiOwogICAgICAgIHRkaXYucGFyZW50Tm9kZS5zdHlsZS5vdmVyZmxvd1kgPSAidmlzaWJsZSI7CiAgICB9CiAgICBpZiAocHJlZjFjbGljay5zdWJzdHIoMCwxKSA9PSAiWSIgJiYgZS5zaGlmdEtleSAhPSB0cnVlICYmIGlzY2ggIT0gdHJ1ZSl7IC8vIDEtY2xpY2s7IGhvbGQgU2hpZnQgdG8gb3ZlcnJpZGUKICAgICAgICBpZiAocHJlZjFjbGljay5zdWJzdHIoMiwxKSA9PSAiTiIpewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmYxIikuY2xpY2soKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmYzIikuY2xpY2soKTsKICAgICAgICB9CiAgICB9IGVsc2UgeyAvLyByZWd1bGFyICsgcG9wdWxhdGluZyAxLWNsaWNrIGNoZWNrYm94CiAgICAgICAgdmFyIGNoa0JGID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoazFjbGlja2JmIik7CiAgICAgICAgaWYgKHByZWYxY2xpY2suc3Vic3RyKDAsMSkgPT0gIlkiKXsKICAgICAgICAgICAgY2hrQkYuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICBjaGtCRi5jaGVja2VkID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaGtCRi5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICAgICAgY2hrQkYuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBjaGtCRiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGtzaG93bm90Y2JmIik7CiAgICAgICAgaWYgKHNob3dZTiA9PSAiWSIpewogICAgICAgICAgICBjaGtCRi5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgICAgIGNoa0JGLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNoa0JGLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICBjaGtCRi5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJmZGl2LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZjEiKS5mb2N1cygpOwogICAgfQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKfQpmdW5jdGlvbiBhZGpwYXJ0ZG9tKGUpeyAvLyB2MS44LjEKICAgIHZhciBwc3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhwYXJ0ZG9tIik7CiAgICB2YXIgcGFydHMgPSBwc3Bhbi50ZXh0Q29udGVudC5yZXBsYWNlKCcuLi4nLCAnJykuc3BsaXQoIi4iKTsKICAgIGlmIChwYXJ0cy5sZW5ndGggPD0gMil7CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAyICYmIHBhcnRzWzFdLmluZGV4T2YoJ3RsZCBbYWxsJykgIT09IDApewogICAgICAgICAgICAvLyBvZmZlciB0aGUgZW50aXJlIFRMRCBvcHRpb24gdjEuOS45CiAgICAgICAgICAgIHBhcnRzLnB1c2goJ3RsZCBbYWxsIGRvdC0nICsgcGFydHNbMV0gKyAnXCdzXScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGN5Y2xlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHBhcnRpYWwgZG9tYWluCiAgICAgICAgICAgIHBhcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGZ1bGxkb20iKS50ZXh0Q29udGVudC5zcGxpdCgiLiIpOwogICAgICAgIH0KICAgIH0KICAgIHBhcnRzLnNoaWZ0KCk7IC8vIGRpc2NhcmQgbGVmdG1vc3Qgc3ViZG9tYWluCiAgICBwc3Bhbi50ZXh0Q29udGVudCA9IHBhcnRzLmpvaW4oIi4iKTsKfQphc3luYyBmdW5jdGlvbiBhZGRibG9jayhlKXsKICAgIHZhciBidHlwZSwgZWxzLCBpLCBzZG9tLCB0Z3Q7CiAgICB0Z3QgPSBlLnRhcmdldDsKICAgIGJ0eXBlID0gdGd0LmdldEF0dHJpYnV0ZSgiYnQiKTsKICAgIGVscyA9IHRndC5mb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9InJhZGlvIl0nKTsKICAgIGZvciAoaT0wOyBpPGVscy5sZW5ndGg7IGkrKyl7CiAgICAgICAgaWYoZWxzW2ldLmNoZWNrZWQgPT0gdHJ1ZSl7CiAgICAgICAgICAgIHNkb20gPSBlbHNbaV0ubmV4dEVsZW1lbnRTaWJsaW5nLnRleHRDb250ZW50LnNwbGl0KCIgIilbMF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGdoaGNsb3NlZm9ybShlKTsKICAgIGlmIChibGlzdC5zdWJzdHIoMCwxKSAhPSAifCIpIGJsaXN0ID0gInwiICsgYmxpc3Q7CiAgICBpZiAoIWJ0eXBlKSBidHlwZSA9PSAidCI7CiAgICBpZiAoYWRkQXQgPT0gImVuZCIpIGJsaXN0ICs9IHNkb20gKyAiOiIgKyBidHlwZSArICJ8IjsKICAgIGVsc2UgYmxpc3QgPSAifCIgKyBzZG9tICsgIjoiICsgYnR5cGUgKyBibGlzdDsKICAgIG5lZWR1cGRhdGUgPSB0cnVlOwogICAgaWYgKCFHTTQpewogICAgICAgIEdNX3NldFZhbHVlKCJoaWRleWhvc3RzIiwgYmxpc3QpOwogICAgfSBlbHNlIHsKICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIGJsaXN0KTsKICAgIH0KICAgIGhpZGVoaXRzKG51bGwsdHJ1ZSk7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkdUUiIpKSByZW1vdmVQQnMoKTsKICAgIGlmIChhZGRBdCA9PSAic29ydCIpIHNvcnRsaXN0KG51bGwpOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtbmdmb3JtIikpewogICAgICAgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtbmdmb3JtIikuc3R5bGUuZGlzcGxheT09ImJsb2NrIikgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gZ2hoY2xvc2Vmb3JtKGUpewogICAgaWYgKCFlKSByZXR1cm47CiAgICBpZiAodHlwZW9mKGUpID09ICJvYmplY3QiICYmIGUudGFyZ2V0KXsKICAgICAgICBpZihlLnRhcmdldC5pZC5pbmRleE9mKCJnaGhiZiIpID09IDApewogICAgICAgICAgICB2YXIgbW5nID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJtbmciKTsKICAgICAgICAgICAgdmFyIGJmZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJsb2NrZm9ybSIpOwogICAgICAgICAgICB2YXIgdGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0ZW1wIik7CiAgICAgICAgICAgIGJmZGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmZkaXYpOwogICAgICAgICAgICB0ZGl2LnJlbW92ZSgpOwogICAgICAgICAgICBpZiAobW5nID09ICJZIikgc2hvd01hbmFnZUZvcm0oIm1uZ2Zvcm0iKTsKICAgICAgICB9CiAgICAgICAgaWYoZS50YXJnZXQuaWQuaW5kZXhPZigiZ2hobWYiKSA9PSAwKXsKICAgICAgICAgICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKVswXSA9PSAibW5nIikgdG9nZ2xlQmxvY2tIaWRlcnMoIkgiKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICBpZiAobXBvcGVuLnN1YnN0cigwLDMpID09ICJZLVkiKXsKICAgICAgICAgICAgICAgIG1wb3BlbiA9ICJZLU4iOwogICAgICAgICAgICAgICAgZ2hoUHJlZk8ubW5ncGFuZW9wZW5bMF0gPSBtcG9wZW47CiAgICAgICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgaWYoZSA9PSAibW5nZm9ybSIpewogICAgICAgICAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpWzBdID09ICJtbmciKSB0b2dnbGVCbG9ja0hpZGVycygiSCIpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGlmIChtcG9wZW4uc3Vic3RyKDAsMykgPT0gIlktWSIpewogICAgICAgICAgICAgICAgbXBvcGVuID0gIlktTiI7CiAgICAgICAgICAgICAgICBnaGhQcmVmTy5tbmdwYW5lb3BlblswXSA9IG1wb3BlbjsKICAgICAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKfQphc3luYyBmdW5jdGlvbiBpbWdibG9ja2RpYWxvZyhlKXsKICAgIHZhciB2aWV3ZXIgPSBlLnRhcmdldC5jbG9zZXN0KCdbZ2hocmVzdWx0XScpOwogICAgaWYgKCF2aWV3ZXIpIHJldHVybjsKICAgIHZhciBhZWwgPSB2aWV3ZXIucGFyZW50Tm9kZS5jaGlsZHJlblswXS5xdWVyeVNlbGVjdG9yKCcuX3IzIGFbaHJlZl0sIHNwYW4gPiBhW2hyZWZdJyk7CiAgICBpZiAoIWFlbCkgYWVsID0gdmlld2VyLnF1ZXJ5U2VsZWN0b3IoJ2FbaHJlZl0nKTsgLy8gQXVnLiAyMDE5IGRlc2lnbgogICAgaWYgKCFhZWwpeyBhbGVydCgnQ2Fubm90IGZpbmQgdGhlIFVSTCBpbiB0aGlzIGRlc2lnbi4nKTsgcmV0dXJuOyB9CiAgICB2YXIgYW1ldGEgPSBhZWwuaHJlZi5zcGxpdCgiLyIpWzJdOwogICAgaWYgKGFlbC5ocmVmLmluZGV4T2YoIiZ1cmw9Iik+LTEpIGFtZXRhID0gZGVjb2RlVVJJQ29tcG9uZW50KGFlbC5ocmVmKS5tYXRjaCgvJnVybD0oW14mXSspLylbMV0uc3BsaXQoIi8iKVsyXTsKICAgIGlmIChhbWV0YS5pbmRleE9mKCI6Iik+IC0xKSBhbWV0YSA9IGFtZXRhLnN1YnN0cigwLGFtZXRhLmluZGV4T2YoIjoiKSk7IC8vIFN0cmlwIHBvcnQgbnVtYmVyCiAgICBlLnRhcmdldC5zZXRBdHRyaWJ1dGUoIm1ldGEiLCBhbWV0YSk7CiAgICB2YXIgZG9tcGFydCA9IGFtZXRhOwogICAgd2hpbGUgKGRvbXBhcnQuaW5kZXhPZigiLiIpPiAtMSkgewogICAgICAgIGlmIChibGlzdC5pbmRleE9mKCJ8Iitkb21wYXJ0KyI6IikgPiAtMSl7CiAgICAgICAgICAgIGlmIChjb25maXJtKCJVbmJsb2NrICIgKyBkb21wYXJ0ICsgIj8iKSl7CiAgICAgICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNsaXN0ID0gR01fZ2V0VmFsdWUoImhpZGV5aG9zdHMiKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc2xpc3QgPSBhd2FpdCBHTS5nZXRWYWx1ZSgiaGlkZXlob3N0cyIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHNsaXN0LnN1YnN0cigwLDEpICE9ICJ8Iikgc2xpc3QgPSAifCIgKyBzbGlzdDsKICAgICAgICAgICAgICAgIHNsaXN0ID0gc2xpc3QucmVwbGFjZSgifCIrZG9tcGFydCsiOnQiLCIiKS5yZXBsYWNlKCJ8Iitkb21wYXJ0KyI6cCIsIiIpOwogICAgICAgICAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJoaWRleWhvc3RzIiwgc2xpc3QpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIHNsaXN0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJsaXN0ID0gc2xpc3Q7CiAgICAgICAgICAgICAgICBuZWVkdXBkYXRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGhpZGVoaXRzKG51bGwsdHJ1ZSk7CiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKSl7CiAgICAgICAgICAgICAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKS5zdHlsZS5kaXNwbGF5PT0iYmxvY2siKSByZWZyZXNoU2l0ZUxpc3QoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZG9tcGFydCA9IGRvbXBhcnQuc2xpY2UoZG9tcGFydC5pbmRleE9mKCIuIikrMSk7CiAgICAgICAgfQogICAgfQogICAgc2hvd2JmZChlKTsKfQovLyBGdW5jdGlvbnMgcmVsYXRpbmcgdG8gdGhlIE1hbmFnZSBIaWRpbmcgYnV0dG9uCmZ1bmN0aW9uIGFkZE1uZ0J0bigpewogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKVswXSA9PSAiYmxrIikgcmV0dXJuOwogICAgaWYgKHdpbmRvdy5zZWxmICE9IHdpbmRvdy50b3ApIGlmIChtYnN0eWxlLnNwbGl0KCItIilbMV0gPT0gImlmck4iKSByZXR1cm47CiAgICB2YXIgbWJ0bjsKICAgIG1idG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIG1idG4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0cy5tbmdidG5bMF0pKTsKICAgIG1idG4uY2xhc3NOYW1lPSJnaGhpZGVyIHVuYnRuIjsKICAgIG1idG4uc2V0QXR0cmlidXRlKCJ0aXRsZSIsIk1hbmFnZSBHb29nbGUgSGl0IEhpZGVyIFNldHRpbmdzIik7CiAgICBtYnRuLmlkID0gImdoaE1uZ0J0biI7CiAgICBtYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixzaG93TWFuYWdlRm9ybSx0cnVlKTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWJ0bik7Cn0KZnVuY3Rpb24gdW5kdXBNbmdCdG4oKXsKICAgIHZhciB1bmJ0bnMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJ1bmJ0biIpOwogICAgd2hpbGUgKHVuYnRucy5sZW5ndGggPiAxKXsKICAgICAgICB1bmJ0bnNbdW5idG5zLmxlbmd0aCAtIDFdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodW5idG5zW3VuYnRucy5sZW5ndGggLSAxXSk7CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gc2hvd01hbmFnZUZvcm0oZSl7CiAgICBpZiAod2luZG93LnNlbGYgIT0gd2luZG93LnRvcCkgcmV0dXJuOwogICAgdmFyIG1mZDsKICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKSkgYWRkTWFuYWdlRm9ybSgpOwogICAgbWZkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKTsKICAgIGlmIChtZmQuc3R5bGUuZGlzcGxheSAhPSAibm9uZSIgJiYgZSAhPSAibW5nZm9ybSIpeyAvLyBUb2dnbGUgdG8gaGlkZGVuCiAgICAgICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKVswXSA9PSAibW5nIikgdG9nZ2xlQmxvY2tIaWRlcnMoIkgiKTsKICAgICAgICBpZiAobXBvcGVuLnN1YnN0cigwLDMpID09ICJZLVkiKXsKICAgICAgICAgICAgbXBvcGVuID0gIlktTiI7CiAgICAgICAgICAgIGdoaFByZWZPLm1uZ3BhbmVvcGVuWzBdID0gbXBvcGVuOwogICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBtZmQuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKG5lZWR1cGRhdGUgPT0gdHJ1ZSkgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICAgICAgbWZkLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgIGlmIChtcG9wZW4uc3Vic3RyKDAsMykgPT0gIlktWSIgJiYgbXBvcGVuLmxlbmd0aCA9PSA1KXsgLy8gUmVzdG9yZSBsYXN0IGRpc3BsYXllZCB0YWIKICAgICAgICAgICAgdmFyIHRhYm51bSA9IG1wb3Blbi5zdWJzdHIoNCwxKTsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnaGhtdCcrdGFibnVtKS5zdHlsZS5kaXNwbGF5ID09ICJub25lIil7CiAgICAgICAgICAgICAgICB0b2dnbGVsaXN0KCdnaGh0cycrdGFibnVtKTsKICAgICAgICAgICAgICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIilbMF0gPT0gIm1uZyIpIHRvZ2dsZUJsb2NrSGlkZXJzKCJTIik7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGUgPT0gIm9iamVjdCIpIGUudGFyZ2V0LmJsdXIoKTsKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobXQxIikuc3R5bGUuZGlzcGxheSAhPSAibm9uZSIgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG10NCIpLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKXsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mMSIpLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodXRpbCIpLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjEiKS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjEiKS5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CiAgICAgICAgICAgIGlmIChiTFVvcGVuICE9ICJOIikgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHV0aWwiKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgICAgICB9CiAgICAgICAgc2V0Q3VycmVudFRhYigpOwogICAgICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIilbMF0gPT0gIm1uZyIpIHRvZ2dsZUJsb2NrSGlkZXJzKCJTIik7CiAgICB9CiAgICBpZiAodHlwZW9mIGUgPT0gIm9iamVjdCIpIGUudGFyZ2V0LmJsdXIoKTsKfQpmdW5jdGlvbiBzZXRDdXJyZW50VGFiKCl7CiAgICB2YXIgaywgdGFibnVtOwogICAgdmFyIHRhYnNldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNtZmxpc3RzPmRpdiIpOwogICAgZm9yIChrPTA7IGs8dGFic2V0Lmxlbmd0aDsgaysrKXsKICAgICAgICB0YWJudW0gPSB0YWJzZXRba10uZ2V0QXR0cmlidXRlKCJpZCIpOwogICAgICAgIHRhYm51bSA9IHRhYm51bS5zdWJzdHIodGFibnVtLmxlbmd0aC0xKTsKICAgICAgICBpZiAodGFic2V0W2tdLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKXsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRzIit0YWJudW0pLmNsYXNzTmFtZSA9ICJnaGhDdXJUYWIiOwogICAgICAgICAgICBpZiAobXBvcGVuLnN1YnN0cigwLDEpID09ICJZIil7CiAgICAgICAgICAgICAgICBtcG9wZW4gPSAiWS1ZLSIrdGFibnVtOwogICAgICAgICAgICAgICAgZ2hoUHJlZk8ubW5ncGFuZW9wZW5bMF0gPSBtcG9wZW47CiAgICAgICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8qIE5PVCBTWU5DSFJPTk9VUyAqLwogICAgICAgICAgICAgICAgICAgIEdNLnNldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodHMiK3RhYm51bSkuY2xhc3NOYW1lID0gIiI7CiAgICB9Cn0KLy8gRnVuY3Rpb25zIHJlbGF0aW5nIHRvIHRoZSBNYW5hZ2UgR0hIIGZvcm0KZnVuY3Rpb24gYWRkTWFuYWdlRm9ybSgpewogICAgdmFyIG1mZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgbWZkLmlkID0gImdoaG1uZ2Zvcm0iOwogICAgbWZkLmNsYXNzTmFtZSA9ICJnaGhwYW5lIjsKICAgIG1mZC5zZXRBdHRyaWJ1dGUoInN0eWxlIiwiZGlzcGxheTpub25lOyIpOwogICAgbWZkLmlubmVySFRNTCA9ICI8Zm9ybSBvbnN1Ym1pdD1cInJldHVybiBmYWxzZTtcIj48ZGl2IGlkPVwiZ2hodHNkaXZcIj4iICsKICAgICAgICAiPHAgc3R5bGU9XCJtYXJnaW46NnB4IDAgLTFweCAwXCIgaWQ9XCJnaGh0c3RyaXBcIj4iICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGh0czFcIiB0aXRsZT1cIkdlbmVyYWwgVXNlIGFuZCBOb3RpY2VzXCI+SG9tZTwvYnV0dG9uPiIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaHRzMlwiIHRpdGxlPVwiUmVndWxhciBCbG9jayBMaXN0XCI+QmxvY2s8L2J1dHRvbj4iICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGh0czNcIiB0aXRsZT1cIlBlcm1hLWJhbiBMaXN0XCI+UGVybWEtYmFuPC9idXR0b24+IiArCiAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hodHM0XCIgdGl0bGU9XCJNYW5hZ2UgU2NyaXB0IE9wdGlvbnNcIj5PcHRpb25zPC9idXR0b24+PC9wPjwvZGl2PiIgKwogICAgICAgICI8ZGl2IGlkPVwibWZsaXN0c1wiIHN0eWxlPVwid2lkdGg6MjMwcHhcIj4iICsKICAgICAgICAiPGRpdiBpZD1cImdoaG10MVwiPjxwPldlbGNvbWUgdG8gR29vZ2xlIEhpdCBIaWRlciEgPGEgaHJlZj1cImh0dHBzOi8vd3d3LmplZmZlcnNvbnNjaGVyLmNvbS9nbS9nb29nbGUtaGl0LWhpZGVyL1wiICIgKwogICAgICAgICJzdHlsZT1cImZsb2F0OnJpZ2h0O1wiIHRhcmdldD1cIl9ibGFua1wiIHRpdGxlPVwiRG9jdW1lbnRhdGlvblwiPkpTPC9hPjwvcD4iICsKICAgICAgICAiPGRpdiBjbGFzcz1cImdoaHRhYlwiPiIgKwogICAgICAgICI8cCBzdHlsZT1cInBhZGRpbmc6MC4yNWVtO21hcmdpbjowLjI1ZW1cIj5DbGljayB0aGUgYmxvY2sgYnV0dG9uICggPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJnaGhpZGVyXCIgb25jbGljaz1cInJldHVybiBmYWxzZTtcIj4iICsgdHh0cy5ibG9ja1swXSArICI8L2J1dHRvbj4gKSAiICsKICAgICAgICAibmV4dCB0byBhIGhpdCB0aXRsZSB0byBibG9jayByZXN1bHRzIGZyb20gdGhhdCBzaXRlLiBBIDxiPnJlZ3VsYXI8L2I+IGJsb2NrZWQgaGl0IGJlY29tZXMgYSBvbmUtbGluZSBub3RhdGlvbiwgIiArCiAgICAgICAgIndoaWxlIGEgPGI+UGVybWEtYmFuPC9iPiBkaXNhcHBlYXJzIGNvbXBsZXRlbHkuPC9wPiIgKwogICAgICAgICI8cCBzdHlsZT1cImJvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7IHBhZGRpbmc6MC4yNWVtO21hcmdpbjowLjI1ZW1cIj48bGFiZWwgdGl0bGU9XCJTd2l0Y2ggYmV0d2VlbiBzaG93aW5nIGFuZCBoaWRpbmcgcmVzdWx0IHRpdGxlcyAiICsKICAgICAgICAiZm9yIHJlZ3VsYXIgYmxvY2tlZCBoaXRzXCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjaGtzaG93bm90Y1wiIGlkPVwiY2hrc2hvd25vdGNcIj4gU2hvdyBoaWRkZW4gaGl0IG5vdGljZXM8L2xhYmVsPjxicj4iICsKICAgICAgICAiPGxhYmVsIHRpdGxlPVwiU3dpdGNoIGJldHdlZW4gYmxvY2sgZGlhbG9nIGFuZCBvbmUtY2xpY2sgYmxvY2tpbmdcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNoazFjbGlja1wiICIgKwogICAgICAgICJpZD1cImNoazFjbGlja1wiPiBFbmFibGUgMS1jbGljayBibG9ja2luZzwvbGFiZWw+PC9wPiIgKwogICAgICAgICI8cCBzdHlsZT1cImJvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7IHBhZGRpbmc6MC4yNWVtO21hcmdpbjowLjI1ZW1cIj52Mi4xLjkgJmNvcHk7IDIwMjEgSmVmZmVyc29uIFNjaGVyLiBMZWFybiBtb3JlIG9uICIgKwogICAgICAgICI8YSBocmVmPVwiIiArIHNjcmlwdF9hYm91dCArICJcIj50aGlzIHNjcmlwdCdzIHBhZ2U8L2E+LjwvcD48L2Rpdj48L2Rpdj4iICsKICAgICAgICAiPGRpdiBpZD1cImdoaG10MlwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+PHA+Q2xpY2sgdG8gcmVtb3ZlIGZyb20gcmVndWxhciBibG9jayBsaXN0OjwvcD4iICsKICAgICAgICAiPGRpdiBjbGFzcz1cImdoaHRhYlwiPjx1bCBpZD1cImdoaHNpdGVsaXN0XCI+PC91bD48L2Rpdj48L2Rpdj5cbiIgKwogICAgICAgICI8ZGl2IGlkPVwiZ2hobXQzXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj48cD5DbGljayB0byByZW1vdmUgZnJvbSBQZXJtYS1iYW4gbGlzdDo8L3A+IiArCiAgICAgICAgIjxkaXYgY2xhc3M9XCJnaGh0YWJcIj48dWwgaWQ9XCJnaGhwYmFubGlzdFwiPjwvdWw+PC9kaXY+PC9kaXY+IiArCiAgICAgICAgIjxkaXYgaWQ9XCJnaGhtdDRcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPjxwPk1hbmFnZSBzY3JpcHQgb3B0aW9uczo8L3A+IiArCiAgICAgICAgIjxkaXYgY2xhc3M9XCJnaGh0YWJcIiBpZD1cImJ0bmVkaXRcIj4iICsKICAgICAgICAiPHAgaWQ9XCJhZGRyYWRpb3NcIj5BZGQgbmV3bHkgYmxvY2tlZCBkb21haW5zOjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYWRkcG9zXCIgdmFsdWU9XCJlbmRcIj4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdDwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJhZGRwb3NcIiB2YWx1ZT1cInRvcFwiPiBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0PC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImFkZHBvc1wiIHZhbHVlPVwic29ydFwiPiBpbiBhbHBoYWJldGljYWwgb3JkZXI8L2xhYmVsPjwvcD4iICsKICAgICAgICAiPHAgaWQ9XCJhZ2dyZXNzcmFkc1wiIHN0eWxlPVwiYm9yZGVyLXRvcDoxcHggc29saWQgIzAwMDtwYWRkaW5nLXRvcDowLjI1ZW07bWFyZ2luLWJvdHRvbTo4cHhcIj5CbG9jayBmb3JtIGRlZmF1bHRzIHRvOjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYWdnbGV2ZWxcIiB2YWx1ZT1cIm5vbmVcIj4gYWx3YXlzIHRoZSBmdWxsIGRvbWFpbjwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJhZ2dsZXZlbFwiIHZhbHVlPVwiYWxsXCI+IGFsd2F5cyB0aGUgcGFydGlhbCBkb21haW48L2xhYmVsPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYWdnbGV2ZWxcIiB2YWx1ZT1cInd3d1wiPiBwYXJ0aWFsIGRvbWFpbiBmb3Igd3d3IG9ubHk8L2xhYmVsPjwvcD4iICsKICAgICAgICAiPHAgaWQ9XCJidG5yYWRpb3NcIiBzdHlsZT1cImJvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7cGFkZGluZy10b3A6MC4yNWVtO21hcmdpbi1ib3R0b206OHB4XCI+VXNlciBpbnRlcmZhY2Ugc3R5bGU6PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ1aXN0eWxlXCIgdmFsdWU9XCJib3RoXCI+IFNob3cgTWFuYWdlIEhpZGluZyAmYW1wOyAiICsgdHh0cy5ibG9ja1swXSArICI8L2xhYmVsPjxicj4iICsKICAgICAgICAiPGxhYmVsPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwibWJpZnJhbWVcIiBpZD1cIm1iaWZyYW1lXCI+IE1hbmFnZSBIaWRpbmcgaW4gaWZyYW1lczwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWwgdGl0bGU9XCJZb3UgY2FuIGNsaWNrIGEgIiArIHR4dHMuYmxvY2tbMF0gKyAiIGJ1dHRvbiB0byBvcGVuIHRoaXMgZGlhbG9nXCI+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ1aXN0eWxlXCIgdmFsdWU9XCJibGtcIj4gSGlkZSBNYW5hZ2UgSGlkaW5nIGJ1dHRvbjwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWwgdGl0bGU9XCIiICsgdHh0cy5ibG9ja1swXSArICIgYnV0dG9ucyB3aWxsIGFwcGVhciBvbmx5IHdoZW4gdGhpcyBkaWFsb2cgaXMgZGlzcGxheWVkXCI+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ1aXN0eWxlXCIgdmFsdWU9XCJtbmdcIj4gSGlkZSAiICsgdHh0cy5ibG9ja1swXSArICIgYnV0dG9uczwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6NHB4O1wiPk1hbmFnZSBIaWRpbmcgYnV0dG9uIHBvc2l0aW9uOjwvc3Bhbj48YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1uZ2J0bnBvc1wiIHZhbHVlPVwiUlwiPiBTaWRlPC9sYWJlbD4gIiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cIm1uZ2J0bnBvc1wiIHZhbHVlPVwiVFwiPiBUb3A8L2xhYmVsPiAiICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW5nYnRucG9zXCIgdmFsdWU9XCJCXCI+IEJvdHRvbTwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6NHB4O1wiPkJsb2NrIGJ1dHRvbiBwb3NpdGlvbiA8aT4ocmVsb2Fkcyk8L2k+Ojwvc3Bhbj48YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImJsb2NrcG9zaXRcIiB2YWx1ZT1cIkhcIj4gSGVhZGxpbmU8L2xhYmVsPiAiICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYmxvY2twb3NpdFwiIHZhbHVlPVwiQ1wiPiBDaXRlIGxpbmU8L2xhYmVsPjxicj4iICsKICAgICAgICAiPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjRweDtcIj5EaXNwbGF5IGJsb2NrIGJ1dHRvbnM6PC9zcGFuPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYmxvY2tkaXNwXCIgdmFsdWU9XCJQXCI+IEFsd2F5czwvbGFiZWw+ICIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJibG9ja2Rpc3BcIiB2YWx1ZT1cIk1cIj4gT24gTW91c2VvdmVyPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDo0cHg7XCI+QmxvY2sgYnV0dG9uIHRvb2x0aXBzOjwvc3Bhbj48YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImJsb2NrdHRpcFwiIHZhbHVlPVwiWVwiPiBGdWxsIERldGFpbDwvbGFiZWw+ICIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJibG9ja3R0aXBcIiB2YWx1ZT1cIk5cIj4gTm9uZTwvbGFiZWw+PC9wPiIgKwogICAgICAgICI8cCBpZD1cIm1pc2NwcmVmXCIgc3R5bGU9XCJib3JkZXItdG9wOjFweCBzb2xpZCAjMDAwO3BhZGRpbmctdG9wOjAuMjVlbTttYXJnaW4tYm90dG9tOjhweFwiPk1pc2MgUHJlZmVyZW5jZXM6PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjaGthamF4XCIgaWQ9XCJjaGthamF4XCI+IEluc3RhbnQvQUpBWC9BdXRvcGFnZXI8L2xhYmVsPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hrZG9tNFwiIGlkPVwiY2hrZG9tNFwiPiBET000IE11dGF0aW9uIE9ic2VydmVyPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNoa21wb3BlblwiIGlkPVwiY2hrbXBvcGVuXCI+IFJlLW9wZW4gTWFuYWdlbWVudCBQYW5lPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNoazFwYmFuXCIgaWQ9XCJjaGsxcGJhblwiPiAxLWNsaWNrIHRvIFBlcm1hLWJhbiBsaXN0PC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbCB0aXRsZT1cIlRyeSBvdXQgZmVhdHVyZXMgdGhhdCBoYXZlbid0IGJlZW4gY29tcGxldGVseSB0ZXN0ZWRcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNoa2JldGFcIiAiICsKICAgICAgICAiaWQ9XCJjaGtiZXRhXCI+IEVuYWJsZSBiZXRhIGZlYXR1cmVzPC9sYWJlbD48L3A+IiArCiAgICAgICAgIjxwIHN0eWxlPVwiYm9yZGVyLXRvcDoxcHggc29saWQgIzAwMDtwYWRkaW5nLXRvcDowLjI1ZW07bWFyZ2luLWJvdHRvbTo4cHhcIj5FZGl0IGNhcHRpb25zOjwvcD4iICsKICAgICAgICAiPHA+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJnaGhpZGVyXCIgaWQ9XCJnaGhlZGl0MVwiIGtleT1cImJsb2NrXCI+IiArIHR4dHMuYmxvY2tbMF0gKyAiPC9idXR0b24+ICIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdoaGlkZXJcIiBpZD1cImdoaGVkaXQzXCIga2V5PVwidW5ibG9ja1wiIHN0eWxlPVwiYmFja2dyb3VuZDojOWY2XCI+IiArIHR4dHMudW5ibG9ja1swXSArICI8L2J1dHRvbj4gIiArCiAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ2hoaWRlclwiIGlkPVwiZ2hoZWRpdDJcIiBrZXk9XCJwYmFuXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiNmNjZcIj4iICsgdHh0cy5wYmFuWzBdICsgIjwvYnV0dG9uPjwvcD4iICsKICAgICAgICAiPHA+PGk+UmVsb2FkIHRvIGNvbXBsZXRlIGNoYW5nZXM8L2k+PC9wPjxwPjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hobWZyXCI+UmVzdG9yZSBkZWZhdWx0IGNhcHRpb25zPC9idXR0b24+PC9wPiIgKwogICAgICAgICI8cCBzdHlsZT1cImJvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7cGFkZGluZy10b3A6MC4yNWVtO21hcmdpbi1ib3R0b206OHB4XCI+Q3VzdG9tIHN0eWxlIHJ1bGVzOjxicj4iICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhlY3NyXCI+RWRpdCBDdXN0b20gU3R5bGUgUnVsZXM8L2J1dHRvbj48L3A+PC9kaXY+PC9kaXY+IiArCiAgICAgICAgIjwvZGl2PjxwIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7d2hpdGUtc3BhY2U6cHJlO21hcmdpbjoxZW0gMFwiPiIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaG1mMVwiPiIgKyB0eHRzLnNhdmVidG5bMF0gKyAiPHNwYW4gaWQ9XCJudW1jaGdzXCI+PC9zcGFuPjwvYnV0dG9uPiAiICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZjNcIiB0aXRsZT1cIkRpc3BsYXkgYWRkaXRpb25hbCBidXR0b25zIGZvciBsaXN0IG1hbmFnZW1lbnRcIj5MaXN0IFV0aWwgIiArCiAgICAgICAgIjxkaXYgc3R5bGU9XCJkaXNwbGF5OmlubGluZTtmb250LXNpemU6MC45ZW07Y29sb3I6Izg4OFwiPjxzcGFuIGlkPVwiZ2hoZG93bnRyaWFuZ2xlXCI+JiM5NjYwOzwvc3Bhbj4iICsKICAgICAgICAiPHNwYW4gaWQ9XCJnaGh1cHRyaWFuZ2xlXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4mIzk2NTA7PC9zcGFuPjwvZGl2PjwvYnV0dG9uPiAiICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZjJcIj4iICsgdHh0cy5jbG9zZWJ0blswXSArICI8L2J1dHRvbj48L3A+PHAgaWQ9XCJnaGh1dGlsXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4iICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZjRcIiB0aXRsZT1cIkRpc3BsYXkgYmxvY2sgbGlzdCBmb3IgY29weWluZyB0byBiYWNrdXAgb3Igc2hhcmVcIj4iICsKICAgICAgICB0eHRzLmV4aW1idG5bMF0gKyAiPC9idXR0b24+IDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hobWY3XCIgdGl0bGU9XCJJbXBvcnQgZG9tYWlucyB0byB0aGUgYmxvY2sgbGlzdFwiPiIgKwogICAgICAgIHR4dHMuaW1wb2J0blswXSArICI8L2J1dHRvbj4gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZjhcIiB0aXRsZT1cIkFkZCBhbGwgZG9tYWlucyBvbiB0aGlzIHBhZ2UgdG8gY3VycmVudCBsaXN0XCI+IiArCiAgICAgICAgdHh0cy5hZGRhbGxidG5bMF0gKyAiPC9idXR0b24+PGJyIC8+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZjVcIiB0aXRsZT1cIlNvcnQgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXJcIj4iICsKICAgICAgICB0eHRzLnNvcnRidG5bMF0gKyAiPC9idXR0b24+IDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hobWY2XCIgdGl0bGU9XCJEZS1kdXBsaWNhdGUgYmxvY2sgbGlzdCBieSByZW1vdmluZyB1bm5lY2Vzc2FyeSBkb21haW5zXCI+IiArCiAgICAgICAgdHh0cy5kZWR1cGJ0blswXSArICI8L2J1dHRvbj4gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZjlcIiB0aXRsZT1cIlJlbW92ZSB3d3cgZnJvbSBibG9ja2VkIGRvbWFpbnNcIj4iICsKICAgICAgICB0eHRzLnVud3d3YnRuWzBdICsgIjwvYnV0dG9uPjwvcD48L2Zvcm0+IjsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWZkKTsKICAgIGZpeFNob3dIaWRlQnRuKCk7CiAgICBmaXh1aXN0eWxlKCk7CiAgICBmaXhhZGRwb3MoKTsKICAgIGZpeGFnZ2Jsb2NrKCk7CiAgICBmaXhhamF4c3R5bGUoKTsKICAgIGZpeHBhbmVwZXJzaXN0KCk7CiAgICBmaXgxY2xpY2tzdHlsZSgpOwogICAgZml4QmV0YSgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRzMSIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0b2dnbGVsaXN0LHRydWUpOyAvLyB0YWJzCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodHMyIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRvZ2dsZWxpc3QsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodHMzIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRvZ2dsZWxpc3QsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodHM0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRvZ2dsZWxpc3QsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrc2hvd25vdGMiKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHRwcmVmLHRydWUpOyAvLyBob21lCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrMWNsaWNrIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix1cGR0MWNsaWNrLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHNpdGVsaXN0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRvZ2dsZXNpdGUsdHJ1ZSk7IC8vIGJsb2NrCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocGJhbmxpc3QiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdG9nZ2xlc2l0ZSx0cnVlKTsgLy8gcGJhbgogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZHJhZGlvcyIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdXBkdGFkZHBvcyx0cnVlKTsgLy8gb3B0aW9ucwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFnZ3Jlc3NyYWRzIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix1cGR0YWdncmVzcyx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGthamF4IikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix1cGR0QUpBWCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGtkb200IikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix1cGR0QUpBWCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGttcG9wZW4iKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHRwZXJzaXN0LHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoazFwYmFuIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix1cGR0MWNsaWNrLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2JldGEiKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHRCZXRhLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bnJhZGlvcyIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdXBkdHVpc3R5bGUsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZWRpdDEiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsY2hnY2FwdGlvbix0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhlZGl0MiIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixjaGdjYXB0aW9uLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGVkaXQzIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGNoZ2NhcHRpb24sdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobWZyIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHJlc2V0VGV4dFN0cmluZ3MsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZWNzciIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixvcGVuQ3VzdG9tU3R5bGVCYXIsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobWYxIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHNhdmVlZGl0cyx0cnVlKTsgLy8gYnV0dG9ucwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mMiIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixnaGhjbG9zZWZvcm0sdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobWYzIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRvZ2dsZUxpc3RVdGlsLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mNCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixleHBvcnRsaXN0LHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mNSIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixzb3J0bGlzdCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjYiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZGVkdXAsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobWY3IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGltcG9ydGxpc3QsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobWY4IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGFkZEFsbE5vdyx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjkiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdW53d3csdHJ1ZSk7CiAgICAvLyBBZGQgSlMgaWNvbiBsaW5rCiAgICBhZGRCdG5MaW5rKCkKfQphc3luYyBmdW5jdGlvbiBhZGRCdG5MaW5rKCl7CiAgICB2YXIgSlNCVE4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKICAgIEpTQlROLnNldEF0dHJpYnV0ZSgnYWx0JywgJ0pTJyk7CiAgICBpZiAodHlwZW9mIEdNLmdldFJlc291cmNlVXJsID09PSAidW5kZWZpbmVkIil7CiAgICAgICAgSlNCVE4uc3JjID0gR01fZ2V0UmVzb3VyY2VVUkwoIm15Y29uIik7CiAgICB9IGVsc2UgeyAvKiBhc3luY2hyb25vdXMqLwogICAgICAgIEpTQlROLnNyYyA9IGF3YWl0IEdNLmdldFJlc291cmNlVXJsKCJteWNvbiIpOwogICAgfQogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2doaG10MSBhIikudGV4dENvbnRlbnQgPSAiIjsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNnaGhtdDEgYSIpLmFwcGVuZENoaWxkKEpTQlROKTsKfQpmdW5jdGlvbiB0b2dnbGVsaXN0KGUpeyAvLyBDaGFuZ2UgdGFicwogICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJyl7CiAgICAgICAgdmFyIHRndGlkID0gZTsKICAgIH0gZWxzZSB7CiAgICAgICAgZS50YXJnZXQuYmx1cigpOwogICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgPT0gImdoaEN1clRhYiIpIHJldHVybjsKICAgICAgICB0Z3RpZCA9IGUudGFyZ2V0LmlkOwogICAgfQogICAgdmFyIHRhYmJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjZ2hodHN0cmlwPmJ1dHRvbiIpOwogICAgdmFyIGssIHRhYm51bTsKICAgIGZvciAoaz0wOyBrPHRhYmJ0bnMubGVuZ3RoOyBrKyspewogICAgICAgIHRhYm51bSA9IHRhYmJ0bnNba10uaWQ7CiAgICAgICAgdGFibnVtID0gdGFibnVtLnN1YnN0cih0YWJudW0ubGVuZ3RoLTEpOwogICAgICAgIGlmICh0Z3RpZCA9PSB0YWJidG5zW2tdLmlkKXsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG10Iit0YWJudW0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobXQiK3RhYm51bSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICB9CiAgICB9CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG10MSIpLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtdDQiKS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIil7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mMSIpLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh1dGlsIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjEiKS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjEiKS5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CiAgICAgICAgaWYgKGJMVW9wZW4gIT0gIk4iKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodXRpbCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgfQogICAgc2V0Q3VycmVudFRhYigpOwp9CmZ1bmN0aW9uIHRvZ2dsZUxpc3RVdGlsKGUpeyAvLyBEaXNwbGF5L2Nsb3NlIGV4dHJhIHNldCBvZiBidXR0b25zCiAgICBlLnRhcmdldC5ibHVyKCk7CiAgICB2YXIgcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh1dGlsIik7CiAgICBpZiAoIXApIHJldHVybjsKICAgIC8vIElmIG5vdCBkaXNwbGF5aW5nIGEgbGlzdCBub3csIG1vdmUgdG8gYSBsaXN0CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG10MSIpLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtdDQiKS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIil7CiAgICAgICAgdG9nZ2xlbGlzdCgnZ2hodHMyJyk7CiAgICAgICAgcC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsgLy8gQWx3YXlzIG9wZW4gYnV0dG9uIHBhbmUKICAgICAgICBiTFVvcGVuID0gIlkiOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnaGhkb3dudHJpYW5nbGUnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnaGh1cHRyaWFuZ2xlJykuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAocC5zdHlsZS5kaXNwbGF5ICE9ICJibG9jayIpeyAvLyBUb2dnbGUgd2hlbiBsaXN0IGFscmVhZHkgd2FzIGRpc3BsYXllZAogICAgICAgICAgICBwLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgICAgICBiTFVvcGVuID0gIlkiOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2hoZG93bnRyaWFuZ2xlJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2doaHVwdHJpYW5nbGUnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICBiTFVvcGVuID0gIk4iOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2hoZG93bnRyaWFuZ2xlJykuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2hodXB0cmlhbmdsZScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIHRvZ2dsZXNpdGUoZSl7IC8vIERlc2lnbmF0ZSBsaXN0IGl0ZW1zIGZvciB1bmJsb2NrLCBwYmFuIG9yIGJsb2NrCiAgICB2YXIgdCwgbCwgcywgcGlkOwogICAgdCA9IGUudGFyZ2V0OwogICAgaWYgKHQuY2xhc3NOYW1lID09ICJnaGhpbmZvIikgdCA9IHQubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgbCA9IHQucGFyZW50Tm9kZTsKICAgIHBpZCA9IGwucGFyZW50Tm9kZS5pZDsKICAgIHN3aXRjaCAodC5jbGFzc05hbWUpewogICAgICAgIGNhc2UgImdoaGhvc3QgZ2hocGIiOgogICAgICAgICAgICB0LmNsYXNzTmFtZSA9ICJnaGhob3N0IGdoaGJsayI7IC8vIHRvZ2dsZSB0byBibG9jawogICAgICAgICAgICBpZiAobC5ub2RlTmFtZSA9PSAiTEkiKXsKICAgICAgICAgICAgICAgIGlmIChwaWQgPT0gImdoaHNpdGVsaXN0Iil7CiAgICAgICAgICAgICAgICAgICAgbC5jaGlsZHJlblswXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgICAgIGxpc3RjaGdzID0gbGlzdGNoZ3MgLSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBsLmNoaWxkcmVuWzBdLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKICAgICAgICAgICAgICAgICAgICBsLmNoaWxkcmVuWzBdLnRleHRDb250ZW50ID0gInRvICIgKyB0eHRzLmJsb2NrWzBdOwogICAgICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiNjY2MiOwogICAgICAgICAgICAgICAgICAgIGxpc3RjaGdzID0gbGlzdGNoZ3MgKyAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImdoaGhvc3QgZ2hoZGVsIjoKICAgICAgICAgICAgdC5jbGFzc05hbWUgPSAiZ2hoaG9zdCBnaGhwYiI7IC8vIHRvZ2dsZSB0byBwZXJtYS1iYW4KICAgICAgICAgICAgaWYgKGwubm9kZU5hbWUgPT0gIkxJIil7CiAgICAgICAgICAgICAgICBpZiAocGlkID09ICJnaGhwYmFubGlzdCIpewogICAgICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICAgICAgICBsaXN0Y2hncyA9IGxpc3RjaGdzIC0gMTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbC5jaGlsZHJlblswXS5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7CiAgICAgICAgICAgICAgICAgICAgbC5jaGlsZHJlblswXS50ZXh0Q29udGVudCA9ICJ0byAiICsgdHh0cy5wYmFuWzBdOwogICAgICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiNmNjYiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHQuY2xhc3NOYW1lID0gImdoaGhvc3QgZ2hoZGVsIjsgLy8gdG9nZ2xlIHRvIHVuYmxvY2sKICAgICAgICAgICAgaWYgKGwubm9kZU5hbWUgPT0gIkxJIil7CiAgICAgICAgICAgICAgICBsLmNoaWxkcmVuWzBdLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0udGV4dENvbnRlbnQgPSAidG8gIiArIHR4dHMudW5ibG9ja1swXTsKICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiM5ZjYiOwogICAgICAgICAgICAgICAgaWYgKHBpZCA9PSAiZ2hoc2l0ZWxpc3QiKXsKICAgICAgICAgICAgICAgICAgICBsaXN0Y2hncyA9IGxpc3RjaGdzICsgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgfQp9CmFzeW5jIGZ1bmN0aW9uIHNhdmVlZGl0cyhlKXsgLy8gU2F2ZSBjaGFuZ2VzIG1hZGUgb24gdGFicyAyIGFuZCAzCiAgICBpZiAoZSl7CiAgICAgICAgaWYgKGxpc3RjaGdzID09IDApewogICAgICAgICAgICBpZiAoIWNvbmZpcm0oIk5vIGNoYW5nZXMgZGV0ZWN0ZWQuIFNhdmUgYW55d2F5PyIpKXsKICAgICAgICAgICAgICAgIGUudGFyZ2V0LmJsdXIoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghY29uZmlybSgiU2F2ZSBjaGFuZ2VzIHRvIGJsb2NrIGxpc3Q/IikpewogICAgICAgICAgICAgICAgZS50YXJnZXQuYmx1cigpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdmFyIHNsaXN0LCBpLCBzcCwgdHRlbXAsIHB0ZW1wOwogICAgc2xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoc2l0ZWxpc3QiKTsKICAgIHR0ZW1wID0gIiI7CiAgICBwdGVtcCA9ICIiOwogICAgZm9yIChpPTA7aTxzbGlzdC5jaGlsZHJlbi5sZW5ndGg7aSsrKXsKICAgICAgICBpZiAoc2xpc3QuY2hpbGRyZW5baV0ubm9kZU5hbWUgPT0gIkxJIikgewogICAgICAgICAgICBzcCA9IHNsaXN0LmNoaWxkcmVuW2ldLmNoaWxkcmVuWzFdOwogICAgICAgICAgICBzd2l0Y2ggKHNwLmNsYXNzTmFtZSl7CiAgICAgICAgICAgICAgICBjYXNlICJnaGhob3N0IGdoaGJsayI6CiAgICAgICAgICAgICAgICAgICAgdHRlbXAgKz0gc3AudGV4dENvbnRlbnQgKyAiOnR8IjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImdoaGhvc3QgZ2hocGIiOgogICAgICAgICAgICAgICAgICAgIHB0ZW1wICs9IHNwLnRleHRDb250ZW50ICsgIjpwfCI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuYmxvY2tlZAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgc2xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocGJhbmxpc3QiKTsKICAgIGZvciAoaT0wO2k8c2xpc3QuY2hpbGRyZW4ubGVuZ3RoO2krKyl7CiAgICAgICAgaWYgKHNsaXN0LmNoaWxkcmVuW2ldLm5vZGVOYW1lID09ICJMSSIpIHsKICAgICAgICAgICAgc3AgPSBzbGlzdC5jaGlsZHJlbltpXS5jaGlsZHJlblsxXTsKICAgICAgICAgICAgc3dpdGNoIChzcC5jbGFzc05hbWUpewogICAgICAgICAgICAgICAgY2FzZSAiZ2hoaG9zdCBnaGhibGsiOgogICAgICAgICAgICAgICAgICAgIHR0ZW1wICs9IHNwLnRleHRDb250ZW50ICsgIjp0fCI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJnaGhob3N0IGdoaHBiIjoKICAgICAgICAgICAgICAgICAgICBwdGVtcCArPSBzcC50ZXh0Q29udGVudCArICI6cHwiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmJsb2NrZWQKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsICJ8IiArIHR0ZW1wICsgcHRlbXApOwogICAgICAgIGJsaXN0ID0gR01fZ2V0VmFsdWUoImhpZGV5aG9zdHMiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCAifCIgKyB0dGVtcCArIHB0ZW1wKTsKICAgICAgICBibGlzdCA9IGF3YWl0IEdNLmdldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICB9CiAgICBoaWRlaGl0cyhudWxsLHRydWUpOwogICAgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICBsaXN0Y2hncyA9IDA7CiAgICBpZiAoZSkgZS50YXJnZXQuYmx1cigpOwp9CmZ1bmN0aW9uIHJlZnJlc2hTaXRlTGlzdCgpeyAvLyBSZWJ1aWxkIGxpc3RzIGZvciB0YWJzIDIgYW5kIDMKICAgIHZhciBzYXJyYXksIHNsaXN0ID0gJycsIHBibGlzdCA9ICcnLCB1bEIsIHVsUCwgaTsKICAgIGlmIChibGlzdC5zdWJzdHIoMCwxKSAhPSAifCIpIGJsaXN0ID0gInwiICsgYmxpc3Q7CiAgICBzYXJyYXkgPSBibGlzdC5zdWJzdHIoMSkuc3BsaXQoInwiKTsKICAgIGZvciAoaT0wOyBpPHNhcnJheS5sZW5ndGgtMTsgaSsrKXsKICAgICAgICBpZiAoc2FycmF5W2ldLmluZGV4T2YoIjpwIik8MCkgewogICAgICAgICAgICBzbGlzdCArPSAnPGxpPjxzcGFuIGNsYXNzPSJnaGhpbmZvIj48L3NwYW4+PHNwYW4gY2xhc3M9ImdoaGhvc3QgZ2hoYmxrIj4nICsgc2FycmF5W2ldLnNwbGl0KCc6JylbMF0gKyAnPC9zcGFuPjwvbGk+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYmxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0iZ2hoaW5mbyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJnaGhob3N0IGdoaHBiIj4nICsgc2FycmF5W2ldLnNwbGl0KCc6JylbMF0gKyAnPC9zcGFuPjwvbGk+JzsKICAgICAgICB9CiAgICB9CiAgICB1bEIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoc2l0ZWxpc3QiKTsKICAgIHdoaWxlICh1bEIuZmlyc3RDaGlsZCkgdWxCLnJlbW92ZUNoaWxkKHVsQi5maXJzdENoaWxkKTsKICAgIHVsQi5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIHNsaXN0KTsKICAgIHVsUCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhwYmFubGlzdCIpOwogICAgd2hpbGUgKHVsUC5maXJzdENoaWxkKSB1bFAucmVtb3ZlQ2hpbGQodWxQLmZpcnN0Q2hpbGQpOwogICAgdWxQLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgcGJsaXN0KTsKICAgIG5lZWR1cGRhdGUgPSBmYWxzZTsKfQphc3luYyBmdW5jdGlvbiB1cGR0YWRkcG9zKGUpeyAvLyBJbXBsZW1lbnQgY2hhbmdlIGZvciByYWRpbyBidXR0b25zIHJlIHdoZXJlIHRvIGFkZCB0byBsaXN0CiAgICB2YXIgcmFkcyA9IGUudGFyZ2V0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT0ncmFkaW8nXSIpOwogICAgZm9yICh2YXIgaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChyYWRzW2ldLmNoZWNrZWQpewogICAgICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSAic29ydCIpewogICAgICAgICAgICAgICAgaWYoY29uZmlybSgiU29ydCBsaXN0cyBub3c/IFNvcnRpbmcgaXMgaXJyZXZlcnNpYmxlLiIpKXsKICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGNoZ3MgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgdG8geW91ciBsaXN0cy4gU2F2ZSBjaGFuZ2VzIGFuZCBzb3J0LCBvciBjYW5jZWwgc29ydGluZz8iKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZWRpdHMobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhhZGRwb3MoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzb3J0bGlzdChudWxsKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZml4YWRkcG9zKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGFkZEF0ID0gcmFkc1tpXS52YWx1ZTsKICAgICAgICAgICAgZ2hoUHJlZk8uYWRkdG9saXN0cG9zWzBdID0gYWRkQXQ7CiAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGZpeGFkZHBvcygpOwp9CmZ1bmN0aW9uIGZpeGFkZHBvcygpeyAvLyBDaGVjayBhcHByb3ByaWF0ZSByYWRpbyBidXR0b24gcmUgd2hlcmUgdG8gYWRkIHRvIGxpc3QKICAgIHZhciByYWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZHJhZGlvcyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9J3JhZGlvJ10iKTsKICAgIGZvciAodmFyIGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSBhZGRBdCl7CiAgICAgICAgICAgIHJhZHNbaV0uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZiAocmFkc1tpXS5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICByYWRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gdXBkdGFnZ3Jlc3MoZSl7IC8vIEltcGxlbWVudCBjaGFuZ2UgZm9yIHJhZGlvIGJ1dHRvbnMgcmUgZGVmYXVsdCBkb21haW4gdG8gYmxvY2sKICAgIHZhciByYWRzID0gZS50YXJnZXQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPSdyYWRpbyddIik7CiAgICBmb3IgKHZhciBpPTA7IGk8cmFkcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgaWYgKHJhZHNbaV0uY2hlY2tlZCl7CiAgICAgICAgICAgIGJBZ2dyZXNzID0gcmFkc1tpXS52YWx1ZTsKICAgICAgICAgICAgZ2hoUHJlZk8uYWdncmVzc2l2ZWJsb2NrWzBdID0gYkFnZ3Jlc3M7CiAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGZpeGFnZ2Jsb2NrKCk7Cn0KZnVuY3Rpb24gZml4YWdnYmxvY2soKXsgLy8gQ2hlY2sgYXBwcm9wcmlhdGUgcmFkaW8gYnV0dG9uIHJlIGRlZmF1bHQgZG9tYWluIHRvIGJsb2NrCiAgICB2YXIgcmFkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhZ2dyZXNzcmFkcyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9J3JhZGlvJ10iKTsKICAgIGZvciAodmFyIGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSBiQWdncmVzcyl7CiAgICAgICAgICAgIHJhZHNbaV0uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZiAocmFkc1tpXS5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICByYWRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gdXBkdHVpc3R5bGUoZSl7IC8vIFN0b3JlIHNldHRpbmdzIGZvciBidXR0b25zIHRvIGRpc3BsYXkKICAgIHZhciBtYnBhcnRzID0gbWJzdHlsZS5zcGxpdCgiLSIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDEpIG1icGFydHMucHVzaCgiaWZyTiIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDIpIG1icGFydHMucHVzaCgiUiIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDMpIG1icGFydHMucHVzaCgiUCIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDQpIG1icGFydHMucHVzaCgiWSIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDUpIG1icGFydHMucHVzaCgiSCIpOwogICAgaWYgKGUudGFyZ2V0LmlkID09ICJtYmlmcmFtZSIpIHsgLy8gSGFuZGxlIGlmcmFtZSBjaGVja2JveAogICAgICAgIHZhciBjaGsgPSBlLnRhcmdldDsKICAgICAgICBpZiAoY2hrLmNoZWNrZWQpewogICAgICAgICAgICBtYnBhcnRzWzFdID0gImlmclkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1icGFydHNbMV0gPSAiaWZyTiI7CiAgICAgICAgfQogICAgICAgIG1ic3R5bGUgPSBtYnBhcnRzLmpvaW4oIi0iKTsKICAgICAgICBnaGhQcmVmTy5tbmdidG5zdHlsZVswXSA9IG1ic3R5bGU7CiAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgfQogICAgfSBlbHNlIHsgLy8gSGFuZGxlIHJhZGlvIGJ1dHRvbnMKICAgICAgICBpZiAoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJuYW1lIikgPT0gInVpc3R5bGUiKXsKICAgICAgICAgICAgdmFyIHJhZHMgPSBlLnRhcmdldC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9J3Vpc3R5bGUnXSIpOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8cmFkcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICBpZiAocmFkc1tpXS5jaGVja2VkKXsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJhZHNbaV0udmFsdWUpewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJibGsiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJwYXJ0c1swXSA9IHJhZHNbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoTW5nQnRuIikucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiQWZ0ZXIgeW91IGNsb3NlIHRoZSBtYW5hZ2VtZW50IHBhbmUsIGNsaWNrIGFueSBibG9jayBidXR0b24gdG8gb3BlbiBpdCBhZ2Fpbi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJtbmciOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlybSgiRGlzcGxheSBibG9jayBidXR0b25zIG9ubHkgd2hlbiB0aGlzIGRpYWxvZyBpcyBvcGVuPyIpKSBtYnBhcnRzWzBdID0gIm1uZyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGUudGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJwYXJ0c1swXSA9ICJib3RoIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaE1uZ0J0biIpKSBhZGRNbmdCdG4oKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbWJzdHlsZSA9IG1icGFydHMuam9pbigiLSIpOwogICAgICAgICAgICAgICAgICAgIGdoaFByZWZPLm1uZ2J0bnN0eWxlWzBdID0gbWJzdHlsZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgeyAvLyBIYW5kbGUgTWFuYWdlbWVudCBCdXR0b24gcG9zaXRpb24gYW5kIGJsb2NrIGJ1dHRvbiBkaXNwbGF5IHN0eWxlCiAgICAgICAgICAgIHJhZHMgPSBlLnRhcmdldC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9J21uZ2J0bnBvcyddIik7CiAgICAgICAgICAgIGZvciAoaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgICAgaWYgKHJhZHNbaV0uY2hlY2tlZCl7CiAgICAgICAgICAgICAgICAgICAgbWJwYXJ0c1syXSA9IHJhZHNbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgbWJzdHlsZSA9IG1icGFydHMuam9pbigiLSIpOwogICAgICAgICAgICAgICAgICAgIGdoaFByZWZPLm1uZ2J0bnN0eWxlWzBdID0gbWJzdHlsZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmFkcyA9IGUudGFyZ2V0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZT0nYmxvY2tkaXNwJ10iKTsKICAgICAgICAgICAgZm9yIChpPTA7IGk8cmFkcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICBpZiAocmFkc1tpXS5jaGVja2VkKXsKICAgICAgICAgICAgICAgICAgICBtYnBhcnRzWzNdID0gcmFkc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBtYnN0eWxlID0gbWJwYXJ0cy5qb2luKCItIik7CiAgICAgICAgICAgICAgICAgICAgZ2hoUHJlZk8ubW5nYnRuc3R5bGVbMF0gPSBtYnN0eWxlOwogICAgICAgICAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByYWRzID0gZS50YXJnZXQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSdibG9ja3R0aXAnXSIpOwogICAgICAgICAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIGlmIChyYWRzW2ldLmNoZWNrZWQpewogICAgICAgICAgICAgICAgICAgIG1icGFydHNbNF0gPSByYWRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIG1ic3R5bGUgPSBtYnBhcnRzLmpvaW4oIi0iKTsKICAgICAgICAgICAgICAgICAgICBnaGhQcmVmTy5tbmdidG5zdHlsZVswXSA9IG1ic3R5bGU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJhZHMgPSBlLnRhcmdldC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9J2Jsb2NrcG9zaXQnXSIpOwogICAgICAgICAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIGlmIChyYWRzW2ldLmNoZWNrZWQpewogICAgICAgICAgICAgICAgICAgIG1icGFydHNbNV0gPSByYWRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIG1ic3R5bGUgPSBtYnBhcnRzLmpvaW4oIi0iKTsKICAgICAgICAgICAgICAgICAgICBnaGhQcmVmTy5tbmdidG5zdHlsZVswXSA9IG1ic3R5bGU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGZpeHVpc3R5bGUoKTsKfQpmdW5jdGlvbiBmaXh1aXN0eWxlKCl7IC8vIENoZWNrIGFwcHJvcHJpYXRlIHJhZGlvIGJ1dHRvbiByZSBidXR0b25zIHRvIGRpc3BsYXkKICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIikubGVuZ3RoID09IDEpIG1ic3R5bGUgPSBtYnN0eWxlICsgIi1pZnJOLVItUC1ZLUgiOwogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKS5sZW5ndGggPT0gMikgbWJzdHlsZSA9IG1ic3R5bGUgKyAiLVItUC1ZLUgiOwogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKS5sZW5ndGggPT0gMykgbWJzdHlsZSA9IG1ic3R5bGUgKyAiLVAtWS1IIjsKICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIikubGVuZ3RoID09IDQpIG1ic3R5bGUgPSBtYnN0eWxlICsgIi1ZLUgiOwogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKS5sZW5ndGggPT0gNSkgbWJzdHlsZSA9IG1ic3R5bGUgKyAiLUgiOwogICAgdmFyIHJhZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRucmFkaW9zIikucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZV49J3Vpc3R5bGUnXSIpOwogICAgZm9yICh2YXIgaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChyYWRzW2ldLnZhbHVlID09IG1ic3R5bGUuc3BsaXQoIi0iKVswXSl7CiAgICAgICAgICAgIHJhZHNbaV0uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZiAocmFkc1tpXS5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICByYWRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICB2YXIgY2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1iaWZyYW1lIik7CiAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpWzFdID09ICJpZnJZIil7CiAgICAgICAgY2hrLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICBjaGsuY2hlY2tlZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGNoay5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICBjaGsuY2hlY2tlZCA9IGZhbHNlOwogICAgfQogICAgcmFkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidG5yYWRpb3MiKS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lXj0nbW5nYnRucG9zJ10iKTsKICAgIGZvciAoaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChyYWRzW2ldLnZhbHVlID09IG1ic3R5bGUuc3BsaXQoIi0iKVsyXSl7CiAgICAgICAgICAgIHJhZHNbaV0uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZiAocmFkc1tpXS5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICByYWRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByYWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bnJhZGlvcyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWVePSdibG9ja2Rpc3AnXSIpOwogICAgZm9yIChpPTA7IGk8cmFkcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgaWYgKHJhZHNbaV0udmFsdWUgPT0gbWJzdHlsZS5zcGxpdCgiLSIpWzNdKXsKICAgICAgICAgICAgcmFkc1tpXS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgICAgIHJhZHNbaV0uY2hlY2tlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGlmIChyYWRzW2ldLmhhc0F0dHJpYnV0ZSgiY2hlY2tlZCIpKXsKICAgICAgICAgICAgICAgIHJhZHNbaV0ucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJhZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRucmFkaW9zIikucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZV49J2Jsb2NrdHRpcCddIik7CiAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSBtYnN0eWxlLnNwbGl0KCItIilbNF0pewogICAgICAgICAgICByYWRzW2ldLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaWYgKHJhZHNbaV0uaGFzQXR0cmlidXRlKCJjaGVja2VkIikpewogICAgICAgICAgICAgICAgcmFkc1tpXS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICAgICAgICAgIHJhZHNbaV0uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmFkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidG5yYWRpb3MiKS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lXj0nYmxvY2twb3NpdCddIik7CiAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSBtYnN0eWxlLnNwbGl0KCItIilbNV0pewogICAgICAgICAgICByYWRzW2ldLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaWYgKHJhZHNbaV0uaGFzQXR0cmlidXRlKCJjaGVja2VkIikpewogICAgICAgICAgICAgICAgcmFkc1tpXS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICAgICAgICAgIHJhZHNbaV0uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdG9nZ2xlY2l0ZWxpbmUobWJzdHlsZS5zcGxpdCgiLSIpWzVdKTsKfQphc3luYyBmdW5jdGlvbiB1cGR0QUpBWChlKXsgLy8gU3RvcmUgc2V0dGluZ3MgZm9yIEFKQVggcHJlZmVyZW5jZXMKICAgIHZhciBjaGsgPSBlLnRhcmdldDsKICAgIGlmIChjaGsuaWQgPT0gImNoa2FqYXgiKXsKICAgICAgICBpZiAoY2hrLmNoZWNrZWQpewogICAgICAgICAgICBiQUpBWCA9ICJvbiI7CiAgICAgICAgICAgIGlmIChjaGdNb24pIGNoZ01vbi5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgIGVsc2UgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01TdWJ0cmVlTW9kaWZpZWQiLCBjaGVja09saXN0LCBmYWxzZSk7CiAgICAgICAgICAgIHNldE11dGF0aW9uV2F0Y2goKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiQUpBWCA9ICJvZmYiOwogICAgICAgICAgICBpZiAoY2hnTW9uKSBjaGdNb24uZGlzY29ubmVjdCgpOwogICAgICAgICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgY2hlY2tPbGlzdCwgZmFsc2UpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGNoay5jaGVja2VkKXsKICAgICAgICAgICAgYk11dE9iID0gIlkiOwogICAgICAgICAgICBpZiAoIWNoZ01vbil7CiAgICAgICAgICAgICAgICBpZiAoYkFKQVgpewogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgY2hlY2tPbGlzdCwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIHNldE11dGF0aW9uV2F0Y2goKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJNdXRPYiA9ICJOIjsKICAgICAgICAgICAgaWYgKGNoZ01vbikgY2hnTW9uLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgaWYgKGJBSkFYKXsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgY2hlY2tPbGlzdCwgZmFsc2UpOwogICAgICAgICAgICAgICAgc2V0TXV0YXRpb25XYXRjaCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZ2hoUHJlZk8udXNlbXV0YXRpb25bMF0gPSBiQUpBWCArICItIiArIGJNdXRPYjsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgfSBlbHNlIHsKICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgfQogICAgZml4YWpheHN0eWxlKCk7Cn0KZnVuY3Rpb24gZml4YWpheHN0eWxlKCl7IC8vIENoZWNrIGJveGVzIGZvciBBSkFYIHByZWZlcmVuY2VzCiAgICB2YXIgY2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2FqYXgiKTsKICAgIGlmIChiQUpBWCA9PSAib24iKXsKICAgICAgICBjaGsuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgIGNoay5jaGVja2VkID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgY2hrLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgIGNoay5jaGVja2VkID0gZmFsc2U7CiAgICB9CiAgICBjaGsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrZG9tNCIpOwogICAgaWYgKGJNdXRPYiA9PSAiWSIpewogICAgICAgIGNoay5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICBjaGsucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KfQphc3luYyBmdW5jdGlvbiB1cGR0cGVyc2lzdChlKXsgLy8gU3RvcmUgc2V0dGluZyBmb3IgcGVyc2lzdGVuY2UgcHJlZmVyZW5jZQogICAgdmFyIGNoayA9IGUudGFyZ2V0OwogICAgaWYgKGNoay5jaGVja2VkKXsKICAgICAgICBtcG9wZW4gPSAiWSIgKyBtcG9wZW4uc3Vic3RyKDEpOwogICAgfSBlbHNlIHsKICAgICAgICBtcG9wZW4gPSAiTiIgKyBtcG9wZW4uc3Vic3RyKDEpOwogICAgfQogICAgZ2hoUHJlZk8ubW5ncGFuZW9wZW5bMF0gPSBtcG9wZW47CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgIH0KICAgIGZpeHBhbmVwZXJzaXN0KCk7Cn0KZnVuY3Rpb24gZml4cGFuZXBlcnNpc3QoKXsgLy8gQ2hlY2sgYm94IGZvciBwZXJzaXN0ZW5jZSBwcmVmZXJlbmNlCiAgICB2YXIgY2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa21wb3BlbiIpOwogICAgaWYgKG1wb3Blbi5zdWJzdHIoMCwxKSA9PSAiWSIpewogICAgICAgIGNoay5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICBjaGsucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KfQphc3luYyBmdW5jdGlvbiB1cGR0MWNsaWNrKGUpeyAvLyBTdG9yZSBzZXR0aW5nIGZvciAxLWNsaWNrIHByZWZlcmVuY2VzCiAgICB2YXIgY2hrID0gZS50YXJnZXQ7CiAgICBpZiAoY2hrLmlkID09ICJjaGsxY2xpY2siIHx8IGNoay5pZCA9PSAiY2hrMWNsaWNrYmYiKXsKICAgICAgICBpZiAoY2hrLmNoZWNrZWQpewogICAgICAgICAgICBwcmVmMWNsaWNrID0gIlkiICsgcHJlZjFjbGljay5zdWJzdHIoMSwyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmVmMWNsaWNrID0gIk4iICsgcHJlZjFjbGljay5zdWJzdHIoMSwyKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGlmIChjaGsuY2hlY2tlZCl7CiAgICAgICAgICAgIHByZWYxY2xpY2sgPSBwcmVmMWNsaWNrLnN1YnN0cigwLDIpICsgIlkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByZWYxY2xpY2sgPSBwcmVmMWNsaWNrLnN1YnN0cigwLDIpICsgIk4iOwogICAgICAgIH0KICAgIH0KICAgIGdoaFByZWZPLm9uZWNsaWNrWzBdID0gcHJlZjFjbGljazsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgfSBlbHNlIHsKICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgfQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGZpeDFjbGlja3N0eWxlKCk7Cn0KZnVuY3Rpb24gZml4MWNsaWNrc3R5bGUoKXsgLy8gQ2hlY2sgYm94ZXMgZm9yIG9uZS1jbGljayBwcmVmZXJlbmNlcwogICAgdmFyIGNoa01QID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoazFjbGljayIpOwogICAgdmFyIGNoa0JGID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoazFjbGlja2JmIik7CiAgICBpZiAocHJlZjFjbGljay5zdWJzdHIoMCwxKSA9PSAiWSIpewogICAgICAgIGNoa01QLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICBjaGtNUC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICBpZiAoY2hrQkYpewogICAgICAgICAgICBjaGtCRi5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgICAgIGNoa0JGLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgY2hrTVAucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgY2hrTVAuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgIGlmIChjaGtCRil7CiAgICAgICAgICAgIGNoa0JGLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICBjaGtCRi5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgdmFyIGNoayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGsxcGJhbiIpOwogICAgaWYgKHByZWYxY2xpY2suc3Vic3RyKDIsMSkgPT0gIlkiKXsKICAgICAgICBjaGsuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgIGNoay5jaGVja2VkID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgY2hrLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgIGNoay5jaGVja2VkID0gZmFsc2U7CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gdXBkdEJldGEoZSl7IC8vIFN0b3JlIHNldHRpbmcgZm9yIHJ1bmJldGEgcHJlZmVyZW5jZQogICAgdmFyIGNoayA9IGUudGFyZ2V0OwogICAgaWYgKGNoay5jaGVja2VkKXsKICAgICAgICBiZXRhdGVzdCA9ICJZIjsKICAgIH0gZWxzZSB7CiAgICAgICAgYmV0YXRlc3QgPSAiTiI7CiAgICB9CiAgICBnaGhQcmVmTy5ydW5iZXRhWzBdID0gYmV0YXRlc3Q7CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgIH0KICAgIGZpeEJldGEoKTsKfQpmdW5jdGlvbiBmaXhCZXRhKCl7IC8vIENoZWNrIGJveCBmb3IgcnVuYmV0YSBwcmVmZXJlbmNlCiAgICB2YXIgY2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2JldGEiKTsKICAgIGlmIChiZXRhdGVzdCA9PSAiWSIpewogICAgICAgIGNoay5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICBjaGsucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KfQphc3luYyBmdW5jdGlvbiBjaGdjYXB0aW9uKGUpeyAvLyBTdG9yZSBidXR0b24gY2FwdGlvbiBjaGFuZ2VzIChidXQgZG8gbm90IGltbWVkaWF0ZWx5IHJlZnJlc2gpCiAgICB2YXIgYnRuLCBrZXksIGlucHV0OwogICAgYnRuID0gZS50YXJnZXQ7CiAgICBrZXkgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoImtleSIpOwogICAgZS50YXJnZXQuYmx1cigpOwogICAgaW5wdXQgPSBwcm9tcHQodHh0c1trZXldWzFdLCB0eHRzW2tleV1bMF0pOwogICAgaWYgKCFpbnB1dCkgcmV0dXJuOwogICAgaWYgKGlucHV0Lmxlbmd0aCA+IDAgJiYgaW5wdXQgIT0gdHh0c1trZXldWzBdKXsKICAgICAgICB0eHRzW2tleV1bMF0gPSBpbnB1dC5yZXBsYWNlKC9cIi9nLCInJyIpOwogICAgICAgIGJ0bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHRzW2tleV1bMF0pKTsKICAgICAgICBidG4ucmVtb3ZlQ2hpbGQoYnRuLmZpcnN0Q2hpbGQpOwogICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgR01fc2V0VmFsdWUoInRleHRzdHJpbmdzIiwgSlNPTi5zdHJpbmdpZnkodHh0cykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJ0ZXh0c3RyaW5ncyIsIEpTT04uc3RyaW5naWZ5KHR4dHMpKTsKICAgICAgICB9CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXh0U3RyaW5ncyhlKXsgLy8gUmVzZXQgYnV0dG9ucyBjYXB0aW9ucyB0byBkZWZhdWx0cwogICAgaWYgKGNvbmZpcm0oIlJlc3RvcmUgZGVmYXVsdCBidXR0b24gY2FwdGlvbnM/IikpewogICAgICAgIHR4dHMgPSBkZWZhdWx0VHh0czsKICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgIEdNX3NldFZhbHVlKCJ0ZXh0c3RyaW5ncyIsIEpTT04uc3RyaW5naWZ5KHR4dHMpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgidGV4dHN0cmluZ3MiLCBKU09OLnN0cmluZ2lmeSh0eHRzKSk7CiAgICAgICAgfQogICAgICAgIGFsZXJ0KCJQbGVhc2UgcmVsb2FkIHRvIHNlZSB0aGUgY2hhbmdlcy4iKTsKICAgICAgICBlLnRhcmdldC5ibHVyKCk7CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gZXhwb3J0bGlzdChlKXsgLy8gRGlzcGxheSBhbmQgcG9wdWxhdGUgZXhwb3J0IGZvcm0sIGNsZWFuIHVwIGZyb20gYW55IHByaW9yIHVzZQogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwb3J0IikpIGluc2VydEV4cG9ydEZvcm0oKTsKICAgIHZhciBleHBEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwb3J0Iik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhpbWhlYWQiKS5pbm5lckhUTUwgPSAiRXhwb3J0IEJsb2NrIExpc3QiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGV4aW1pbmZvMSIpLmlubmVySFRNTCA9ICJUaGVzZSBib3hlcyBkaXNwbGF5IHlvdXIgY3VycmVudCBibG9jayBsaXN0LiAiICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJleHBnb3RvcHJlaW1wXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5TaG93IG9sZCBibG9jayBsaXN0IChwcmlvciB0byBsYXN0IGltcG9ydCk8L2J1dHRvbj48YnIgLz48YnIgLz4iICsKICAgICAgICAiT24gdGhlIGxlZnQsIHlvdSBoYXZlIHRoZSBsaXN0IGluIGl0cyBuYXRpdmUgZm9ybWF0LiBCeSBzYXZpbmcgdGhpcyBmb3JtYXQsIHlvdSBjYW4gcHJlc2VydmUgeW91ciByZWd1bGFyL1Blcm1hLWJhbiAiICsKICAgICAgICAiYmxvY2sgZGVjaXNpb25zLiA8YnIgLz48YnIgLz5PbiB0aGUgcmlnaHQsIHlvdSBoYXZlIGEgc2ltcGxlIGxpc3Qgb2YgZG9tYWlucy4gIiArCiAgICAgICAgIlRoaXMgd291bGQgYmUgYSBnb29kIGZvcm1hdCBmb3Igc2hhcmluZyB5b3VyIGxpc3Qgd2l0aCBvdGhlcnMuIjsKICAgIGlmICghR000KXsKICAgICAgICB2YXIgY3Vycmxpc3QgPSBHTV9nZXRWYWx1ZSgiaGlkZXlob3N0cyIpOwogICAgfSBlbHNlIHsKICAgICAgICBjdXJybGlzdCA9IGF3YWl0IEdNLmdldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICB9CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFsZWZ0IikudmFsdWUgPSBjdXJybGlzdDsKICAgIHZhciBkb21MaXN0ID0gY3Vycmxpc3Quc3Vic3RyKDEpLnJlcGxhY2UoLzpbdHBdXHwvZywgIlxuIik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnZhbHVlID0gZG9tTGlzdC5yZXBsYWNlKC9cbiokLywgIiIpOwogICAgaWYgKCFHTTQpewogICAgICAgIHZhciBwcmVpbXBvbGlzdCA9IEdNX2dldFZhbHVlKCJoaWRleWJhY2siLCAiIik7CiAgICB9IGVsc2UgewogICAgICAgIHByZWltcG9saXN0ID0gYXdhaXQgR00uZ2V0VmFsdWUoImhpZGV5YmFjayIsICIiKTsKICAgIH0KICAgIGlmIChwcmVpbXBvbGlzdC5sZW5ndGggPiAwKXsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhwZ290b3ByZWltcCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixleHBvcnRvbGRsaXN0LHRydWUpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleHBnb3RvcHJlaW1wIikuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgfQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGxlZnRjb250cm9scyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocmlnaHRjb250cm9scyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGJsZGl2Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgIGV4cERpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgIGUudGFyZ2V0LmJsdXIoKTsKfQpmdW5jdGlvbiBpbnNlcnRFeHBvcnRGb3JtKCl7CiAgICB2YXIgZE5ldywgYnRuLCBwYXIsIHRhOwogICAgZE5ldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZE5ldy5pZCA9ICJnaGhleHBvcnQiOwogICAgZE5ldy5jbGFzc05hbWUgPSAiZ2hocGFuZSI7CiAgICBkTmV3LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJwb3NpdGlvbjpmaXhlZDt0b3A6MTBweDtsZWZ0OjUlO3dpZHRoOjkwJTt6LWluZGV4OjMwMDI7YmFja2dyb3VuZDojZGRkO3BhZGRpbmc6MWVtO2ZvbnQtc2l6ZToxLjI1ZW07ZGlzcGxheTpub25lIik7CiAgICBkTmV3LmlubmVySFRNTCA9ICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbmNsaWNrPVwidGhpcy5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9J25vbmUnXCIgc3R5bGU9XCJmbG9hdDogcmlnaHQ7IG1hcmdpbjogMCAwIDRweCA0cHg7XCIgY2xhc3M9XCJnaGhpZGVyXCI+Q2xvc2U8L2J1dHRvbj4iICsKICAgICAgICAiPHAgc3R5bGU9XCJtYXJnaW4tdG9wOjA7IGZvbnQtd2VpZ2h0OiBib2xkO1wiIGlkPVwiZ2hoZXhpbWhlYWRcIj48L3A+IiArCiAgICAgICAgIjxwIGlkPVwiZ2hoZXhpbWluZm8xXCI+PC9wPiIgKwogICAgICAgICI8ZGl2IGlkPVwiZ2hobGVmdFwiIHN0eWxlPVwid2lkdGg6NDklO2Zsb2F0OmxlZnRcIj48dGV4dGFyZWEgaWQ9XCJnaGh0YWxlZnRcIiAiICsKICAgICAgICAic3BlbGxjaGVjaz1cImZhbHNlXCIgc3R5bGU9XCJ3aWR0aDoxMDAlO2hlaWdodDoiICsgKDAuNip3aW5kb3cuaW5uZXJIZWlnaHQpICsgInB4O292ZXJmbG93LXk6c2Nyb2xsXCI+PC90ZXh0YXJlYT4iICsKICAgICAgICAiPGRpdiBpZD1cImdoaGxlZnRjb250cm9sc1wiIHN0eWxlPVwiY2xlYXI6bGVmdDtkaXNwbGF5Om5vbmVcIj48cD48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaGV4cDFcIj5QYXJzZSBMaXN0IGZvciBJbXBvcnQ8L2J1dHRvbj48L3A+PC9kaXY+PC9kaXY+IiArCiAgICAgICAgIjxkaXYgaWQ9XCJnaGhyaWdodFwiIHN0eWxlPVwid2lkdGg6NDklO2Zsb2F0OnJpZ2h0XCI+PHRleHRhcmVhIGlkPVwiZ2hodGFyaWdodFwiICIgKwogICAgICAgICJzcGVsbGNoZWNrPVwiZmFsc2VcIiBzdHlsZT1cIndpZHRoOjEwMCU7aGVpZ2h0OiIgKyAoMC42KndpbmRvdy5pbm5lckhlaWdodCkgKyAicHg7b3ZlcmZsb3cteTpzY3JvbGxcIj48L3RleHRhcmVhPiIgKwogICAgICAgICI8ZGl2IGlkPVwiZ2hodGJsZGl2XCIgc3R5bGU9XCJoZWlnaHQ6IiArICgwLjU4KndpbmRvdy5pbm5lckhlaWdodCkgKyAicHg7b3ZlcmZsb3cteTpzY3JvbGw7b3ZlcmZsb3cteDpzY3JvbGw7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6NHB4IDAgMCA0cHg7Ym9yZGVyOjFweCBzb2xpZCAjYWFjO21hcmdpbi10b3A6MXB4O2Rpc3BsYXk6bm9uZVwiPjwvZGl2PiAiICsKICAgICAgICAiPGRpdiBpZD1cImdoaHJpZ2h0Y29udHJvbHNcIiBzdHlsZT1cImNsZWFyOnJpZ2h0O2Rpc3BsYXk6bm9uZVwiPjxwIGlkPVwiaW1wcmFkaW9zXCI+UGxlYXNlIHJldmlldyB0aGUgYWJvdmUgbGlzdCBmb3IgYWNjdXJhY3kuIElmIGNvcnJlY3QsIGFkZCBkb21haW5zIHRvOiA8YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImltcGJ0eXBlXCIgdmFsdWU9XCJhc2lzXCI+Jm5ic3A7dGhlIGxpc3Qgc3BlY2lmaWVkIHVuZGVyIEJsb2NrIFR5cGU8L2xhYmVsPiA8YnIgLz4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiaW1wYnR5cGVcIiB2YWx1ZT1cInRcIj4mbmJzcDt0aGUgcmVndWxhciBibG9jayBsaXN0PC9sYWJlbD4gPGJyIC8+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImltcGJ0eXBlXCIgdmFsdWU9XCJwXCI+Jm5ic3A7dGhlIFBlcm1hLWJhbiBsaXN0PC9sYWJlbD4gJm5ic3A7ICIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaGV4cDJcIj5JbXBvcnQ8L2J1dHRvbj4gJm5ic3A7IDxzcGFuIHN0eWxlPVwiZmxvYXQ6cmlnaHQ7IGZvbnQtc3R5bGU6aXRhbGljOyBvcGFjaXR5OjAuODtcIj5SZXBsYWNlIGVudGlyZSBibG9ja2xpc3Q6Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwiY2hraW1wb3JlcGxcIj48L3NwYW4+PC9wPjwvZGl2PjwvZGl2PiI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGROZXcpOwp9CmZ1bmN0aW9uIGltcG9ydGxpc3QoZSl7IC8vIERpc3BsYXkgaW1wb3J0IGZvcm0sIGNsZWFuIHVwIGZyb20gYW55IHByaW9yIHVzZQogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwb3J0IikpIGluc2VydEV4cG9ydEZvcm0oKTsKICAgIHZhciBleHBEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwb3J0Iik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhpbWhlYWQiKS5pbm5lckhUTUwgPSAnSW1wb3J0IEJsb2NrIExpc3QnOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGV4aW1pbmZvMSIpLmlubmVySFRNTCA9ICI8c3Ryb25nPkFzIGEgcHJlY2F1dGlvbiBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nLCBwbGVhc2UgdXNlIHRoZSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImltcGdvdG9leHBcIj5FeHBvcnQ8L2J1dHRvbj4gIiArCiAgICAgICAgImZlYXR1cmUgdG8gY29weSBhbmQgc2F2ZSB5b3VyIGN1cnJlbnQgbGlzdCBhcyBhIGJhY2t1cC48L3N0cm9uZz4gPGJyIC8+PGJyIC8+IiArCiAgICAgICAgIlRvIGJlZ2luLCBwYXN0ZSB5b3VyIGxpc3QgaW50byB0aGUgbGVmdCBib3ggYmVsb3cuIFRoZW4gY2xpY2sgdGhlIFBhcnNlIExpc3QgZm9yIEltcG9ydCBidXR0b24uIFRoaXMgc2NyaXB0IGNhbiBpbXBvcnQgYSBsaXN0IGluIGl0cyBvd24gbmF0aXZlIGZvcm1hdCwgb3IgYSBwbGFpbiBsaXN0IG9mIGRvbWFpbnMgd2l0aCBhIHNlcGFyYXRlIGRvbWFpbiBvbiBlYWNoIGxpbmUsIG9yICIgKwogICAgICAgICJzZXBhcmF0ZWQgYnkgc3BhY2VzLiAoSXQgYWxzbyBjb252ZXJ0cyB0aGUgTm9pc2UgUmVkdWN0aW9uIGZvciBHb29nbGUgYW5kIEdvb2dsZSBEb21haW4gQmxvY2tlciBmb3JtYXRzLikiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRhbGVmdCIpLnZhbHVlID0gIiI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobGVmdGNvbnRyb2xzIikuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHJpZ2h0Y29udHJvbHMiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGV4cDEiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscGFyc2VMaXN0LHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltcGdvdG9leHAiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZXhwb3J0bGlzdCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0YXJpZ2h0Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0YmxkaXYiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2ltcG9yZXBsIikuY2hlY2tlZCA9IGZhbHNlOwogICAgZXhwRGl2LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgZS50YXJnZXQuYmx1cigpOwp9CmZ1bmN0aW9uIHBhcnNlTGlzdChlKXsgLy8gUGFyc2UgcHV0YXRpdmUgZG9tYWluIGxpc3QgYW5kIHJlZGlzcGxheSBjbGVhbmVkIHVwCiAgICB2YXIgdHh0LCBzaXRlcyA9IFtdLCBiSGFzVHlwZXMgPSAwLCBpLCB0Ym9kLCB0aGQsIHJhc2lzLCBsYnBvcywgcmJwb3M7CiAgICB0eHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFsZWZ0IikudmFsdWU7CiAgICBpZiAodHh0Lmxlbmd0aCA8IDQpewogICAgICAgIGFsZXJ0KCJCbG9jayBsaXN0IHRvbyBzaG9ydCEiKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGJsZGl2IikuaW5uZXJIVE1MID0gIiI7CiAgICAvLyBjbGVhbiB1cC9jb252ZXJ0IGRvbWFpbiBsaXN0IHRvIHBpcGUtZGVsaW1pdGVkCiAgICB0eHQgPSB0eHQucmVwbGFjZSgvKGh0dHB8aHR0cHMpOi9nLCAiIik7CiAgICB0eHQgPSB0eHQucmVwbGFjZSgvKCx8XC98OykvZywgInwiKTsKICAgIHR4dCA9IHR4dC5yZXBsYWNlKC9ccysvZywgInwiKTsKICAgIHR4dCA9IHR4dC5yZXBsYWNlKC9cfCsvZywgInwiKTsKICAgIHR4dCA9IHR4dC5yZXBsYWNlKC9bXDxcPiInPSNcIVx1MjAxOFx1MjAxOVwoXClce1x9XS9nLCAiIik7CiAgICAvLyBzdHJpcCByZWdleAogICAgdHh0ID0gdHh0LnJlcGxhY2UoLyhcK3xcKnxcJHxcXCkvZywgIiIpOwogICAgd2hpbGUgKHR4dC5pbmRleE9mKCJbIikgPiAtMSAmJiB0eHQuaW5kZXhPZigiXSIpID4gLTEpewogICAgICAgIGxicG9zID0gdHh0LmluZGV4T2YoIlsiKTsKICAgICAgICByYnBvcyA9IHR4dC5pbmRleE9mKCJdIikKICAgICAgICBpZiAobGJwb3MgPiAwICYmIHJicG9zICsgMSA8IHR4dC5sZW5ndGgpIHR4dCA9IHR4dC5zdWJzdHJpbmcoMCxsYnBvcykgKyB0eHQuc3Vic3RyaW5nKHJicG9zKzEpOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAobGJwb3MgPT0gMCAmJiByYnBvcyArIDEgPCB0eHQubGVuZ3RoKSB0eHQgPSB0eHQuc3Vic3RyaW5nKHJicG9zKzEpOwogICAgICAgICAgICBlbHNlIGJyZWFrOyAvLyBmb3Igc29tZSByZWFzb24sIGVudGlyZSBsaXN0IGlzIGJyYWNrZXRlZD8/CiAgICAgICAgfQogICAgfQogICAgaWYgKHR4dC5pbmRleE9mKCI6IikgPiAtMSkgYkhhc1R5cGVzID0gMTsKICAgIHNpdGVzID0gdHh0LnNwbGl0KCJ8Iik7CiAgICBmb3IgKGk9MDsgaTxzaXRlcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgaWYgKHNpdGVzW2ldLmxlbmd0aCA+IDEpewogICAgICAgICAgICBpZiAoc2l0ZXNbaV0uaW5kZXhPZigiLiIpID09IDApIHNpdGVzW2ldID0gc2l0ZXNbaV0uc3Vic3RyKDEpOwogICAgICAgICAgICBpZiAoc2l0ZXNbaV0uaW5kZXhPZigiPyIpID4gLTEpIHNpdGVzW2ldID0gc2l0ZXNbaV0uc3Vic3RyKDAsc2l0ZXNbaV0uaW5kZXhPZigiPyIpKTsKICAgICAgICAgICAgaWYgKGJIYXNUeXBlcyA9PSAxKXsKICAgICAgICAgICAgICAgIGlmIChzaXRlc1tpXS5pbmRleE9mKCI6dCIpID09IHNpdGVzW2ldLmxlbmd0aCAtIDIgfHwgc2l0ZXNbaV0uaW5kZXhPZigiOnAiKSA9PSBzaXRlc1tpXS5sZW5ndGggLSAyKXsKICAgICAgICAgICAgICAgICAgICBzaXRlc1tpXSA9ICI8dHI+PHRkPiIgKyBzaXRlc1tpXS5yZXBsYWNlKCI6dCIsIjwvdGQ+PHRkPnJlZ3VsYXIiKS5yZXBsYWNlKCI6cCIsIjwvdGQ+PHRkPlBlcm1hLWJhbiIpICsgIjwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoc2l0ZXNbaV0uaW5kZXhPZigiOiIpID4gLTEpIHNpdGVzW2ldID0gc2l0ZXNbaV0uc3Vic3RyKDAsIHNpdGVzW2ldLmluZGV4T2YoIjoiKSk7CiAgICAgICAgICAgICAgICAgICAgc2l0ZXNbaV0gPSAiPHRyPjx0ZD4iICsgc2l0ZXNbaV0gKyAiPC90ZD48dGQ+KHVuc3BlY2lmaWVkKTwvdGQ+PC90cj4iOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgeyAvLyBQbGFpbiBsaXN0CiAgICAgICAgICAgICAgICBzaXRlc1tpXSA9ICI8dHI+PHRkPiIgKyBzaXRlc1tpXSArICI8L3RkPjwvdHI+IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHRib2QgPSAiPHRib2R5PlxuIiArIHNpdGVzLmpvaW4oIlxuIikgKyAiPC90Ym9keT4iOwogICAgaWYgKHNpdGVzLmxlbmd0aCA9PSAwKXsKICAgICAgICBhbGVydCgiVW5hYmxlIHRvIHBhcnNlIHRoZSBsaXN0LCBzb3JyeS4iKTsgcmV0dXJuOwogICAgfQogICAgaWYgKGJIYXNUeXBlcyA9PSAxKSB0aGQgPSAiPHRoZWFkPjx0cj48dGg+RG9tYWluPC90aD48dGg+QmxvY2sgVHlwZTwvdGg+PC90cj48L3RoZWFkPiI7CiAgICBlbHNlIHRoZCA9ICI8dGhlYWQ+PHRyPjx0aD5Eb21haW48L3RoPjwvdHI+PC90aGVhZD4iOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRibGRpdiIpLmlubmVySFRNTCA9ICI8dGFibGUgY2VsbHNwYWNpbmc9XCIwXCIgY2xhc3M9XCJnaGh0YmxcIiBpZD1cImdoaHBhcnNlZFwiPiIgKyB0aGQgKyB0Ym9kICsgIjwvdGFibGU+IjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0YmxkaXYiKS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICByYXNpcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhyaWdodGNvbnRyb2xzIikucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdmFsdWU9J2FzaXMnXSIpWzBdOwogICAgaWYgKGJIYXNUeXBlcyA9PSAxKXsKICAgICAgICBpZiAocmFzaXMuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSByYXNpcy5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CiAgICAgICAgcmFzaXMuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgcmFzaXMucGFyZW50Tm9kZS5zdHlsZS5jb2xvciA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgICByYXNpcy5zZXRBdHRyaWJ1dGUoImRpc2FibGVkIiwiZGlzYWJsZWQiKTsKICAgICAgICByYXNpcy5wYXJlbnROb2RlLnN0eWxlLmNvbG9yID0gInJnYigxNzIsIDE2OCwgMTUzKSI7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHJpZ2h0Y29udHJvbHMiKS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt2YWx1ZT0ndCddIilbMF0uY2hlY2tlZCA9IHRydWU7CiAgICB9CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocmlnaHRjb250cm9scyIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGV4cDIiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZG9JbXBvcnQsdHJ1ZSk7CiAgICBlLnRhcmdldC5ibHVyKCk7Cn0KYXN5bmMgZnVuY3Rpb24gZG9JbXBvcnQoZSl7IC8vIEFkZCBzaXRlcyBmcm9tIGNsZWFuZWQgdXAgZG9tYWluIGxpc3QgdG8gc2NyaXB0IGJsb2NrIGxpc3RzCiAgICB2YXIgdGJsLCByYWRzLCBpLCB0eXBlUnVsZSwgcm93cywgZG9tLCBuZXdEb21zID0gIiI7CiAgICB0YmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocGFyc2VkIik7CiAgICBpZiAoIXRibCl7CiAgICAgICAgYWxlcnQoIlVuYWJsZSB0byBsb2NhdGUgdGFibGUgb2YgcGFyc2VkIGRvbWFpbnMhIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRibC5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKXsKICAgICAgICBhbGVydCgiUGxlYXNlIHN0YXJ0IHRoZSBpbXBvcnQgcHJvY2VzcyBhZ2FpbiEiKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICByYWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHJpZ2h0Y29udHJvbHMiKS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPSdyYWRpbyddIik7CiAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS5jaGVja2VkKXsKICAgICAgICAgICAgdHlwZVJ1bGUgPSByYWRzW2ldLnZhbHVlOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICByb3dzID0gdGJsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOwogICAgZm9yIChpPTA7IGk8cm93cy5sZW5ndGg7IGkrKyl7CiAgICAgICAgZG9tID0gcm93c1tpXS5jaGlsZHJlblswXS50ZXh0Q29udGVudDsKICAgICAgICBpZiAoZG9tLmxhc3RJbmRleE9mKCIuIikgPCBkb20ubGVuZ3RoLTIgJiYgZG9tLmluZGV4T2YoIi4iKSA+IDApewogICAgICAgICAgICBzd2l0Y2ggKHR5cGVSdWxlKXsKICAgICAgICAgICAgICAgIGNhc2UgImFzaXMiOgogICAgICAgICAgICAgICAgICAgIGlmIChyb3dzW2ldLmNoaWxkcmVuWzFdLnRleHRDb250ZW50ID09ICJQZXJtYS1iYW4iKSBuZXdEb21zICs9IGRvbSArICI6cHwiOwogICAgICAgICAgICAgICAgICAgIGVsc2UgbmV3RG9tcyArPSBkb20gKyAiOnR8IjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgbmV3RG9tcyArPSBkb20gKyAiOiIgKyB0eXBlUnVsZSArICJ8IjsKICAgICAgICAgICAgfQogICAgICAgICAgICByb3dzW2ldLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIjZmYwIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByb3dzW2ldLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICIjZjAwIjsKICAgICAgICB9CiAgICB9CiAgICBpZiAobmV3RG9tcyAhPSAiIil7CiAgICAgICAgLy8gQmFjayB1cCBjdXJyZW50IGJsb2NrIGxpc3QKICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgIEdNX3NldFZhbHVlKCJoaWRleWJhY2siLCBibGlzdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5YmFjayIsIGJsaXN0KTsKICAgICAgICB9CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGtpbXBvcmVwbCIpLmNoZWNrZWQgPT0gdHJ1ZSl7CiAgICAgICAgICAgIGlmIChjb25maXJtKCJEZWxldGUgY3VycmVudCBibG9jayBsaXN0IGFuZCByZXBsYWNlIGl0IHdpdGggZG9tYWlucyB5b3UgYXJlIGltcG9ydGluZz8gKFRvIGFkZCB0byB0aGUgY3VycmVudCBibG9jayBsaXN0LCBjbGljayBDYW5jZWwuKSIpKSB7CiAgICAgICAgICAgICAgICBibGlzdCA9ICIiOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChibGlzdCA9PSAiIikgYmxpc3QgPSAifCIgKyBuZXdEb21zOwogICAgICAgIGVsc2UgYmxpc3QgKz0gbmV3RG9tczsKICAgICAgICAvLyBQZXJzaXN0IHVwZGF0ZWQgYmxvY2sgbGlzdAogICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgR01fc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBibGlzdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBibGlzdCk7CiAgICAgICAgfQogICAgICAgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtbmdmb3JtIikuc3R5bGUuZGlzcGxheT09ImJsb2NrIikgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICAgICAgaGlkZWhpdHMobnVsbCx0cnVlKTsKICAgIH0KICAgIGFsZXJ0KCJJbXBvcnQgb2YgeWVsbG93LWhpZ2hsaWdodGVkIGRvbWFpbnMgY29tcGxldGVkLiBQbGVhc2UgY2hlY2sgdGhlIE1hbmFnZW1lbnQgUGFuZSB0byAiICsKICAgICAgICAgICJ2aWV3LCBzb3J0LCBhbmQvb3IgZGUtZHVwbGljYXRlIHlvdXIgaW1wb3J0ZWQgZG9tYWlucy4iKTsKfQphc3luYyBmdW5jdGlvbiBleHBvcnRvbGRsaXN0KGUpeyAvLyBEaXNwbGF5IGFuZCBwb3B1bGF0ZSBleHBvcnQgZm9ybSB3aXRoIHByZS1pbXBvcnQgbGlzdAogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwb3J0IikpIGluc2VydEV4cG9ydEZvcm0oKTsKICAgIHZhciBleHBEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwb3J0Iik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhpbWhlYWQiKS5pbm5lckhUTUwgPSAiRXhwb3J0IE9sZCAoUHJlLUltcG9ydCkgQmxvY2sgTGlzdCI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhpbWluZm8xIikuaW5uZXJIVE1MID0gIlRoZXNlIGJveGVzIGRpc3BsYXkgeW91ciBvbGQgYmxvY2sgbGlzdCBmcm9tIGJlZm9yZSB0aGUgbGFzdCBpbXBvcnQuICIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImV4cGdvdG9ibGlzdFwiPlNob3cgY3VycmVudCBibG9jayBsaXN0PC9idXR0b24+PGJyIC8+PGJyIC8+IiArCiAgICAgICAgIk9uIHRoZSBsZWZ0LCB5b3UgaGF2ZSB0aGUgbGlzdCBpbiBpdHMgbmF0aXZlIGZvcm1hdC4gQnkgc2F2aW5nIHRoaXMgZm9ybWF0LCB5b3UgY2FuIHByZXNlcnZlIHlvdXIgcmVndWxhci9QZXJtYS1iYW4gIiArCiAgICAgICAgImJsb2NrIGRlY2lzaW9ucy4gPGJyIC8+PGJyIC8+T24gdGhlIHJpZ2h0LCB5b3UgaGF2ZSBhIHNpbXBsZSBsaXN0IG9mIGRvbWFpbnMuICIgKwogICAgICAgICJUaGlzIHdvdWxkIGJlIGEgZ29vZCBmb3JtYXQgZm9yIHNoYXJpbmcgeW91ciBsaXN0IHdpdGggb3RoZXJzLiI7CiAgICBpZiAoIUdNNCl7CiAgICAgICAgdmFyIHByZWltcG9saXN0ID0gR01fZ2V0VmFsdWUoImhpZGV5YmFjayIsICIiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgcHJlaW1wb2xpc3QgPSBhd2FpdCBHTS5nZXRWYWx1ZSgiaGlkZXliYWNrIiwgIiIpOwogICAgfQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRhbGVmdCIpLnZhbHVlID0gcHJlaW1wb2xpc3Q7CiAgICB2YXIgZG9tTGlzdCA9IHByZWltcG9saXN0LnN1YnN0cigxKS5yZXBsYWNlKC86W3RwXVx8L2csICJcbiIpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRhcmlnaHQiKS52YWx1ZSA9IGRvbUxpc3QucmVwbGFjZSgvXG4qJC8sICIiKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleHBnb3RvYmxpc3QiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZXhwb3J0bGlzdCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhsZWZ0Y29udHJvbHMiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHJpZ2h0Y29udHJvbHMiKS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRibGRpdiIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRhcmlnaHQiKS5zdHlsZS5kaXNwbGF5ID09ICJub25lIikgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRhcmlnaHQiKS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICBleHBEaXYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICBlLnRhcmdldC5ibHVyKCk7Cn0KYXN5bmMgZnVuY3Rpb24gc29ydGxpc3QoZSl7IC8vIEFscGhhLXNvcnQgYmxvY2sgbGlzdAogICAgaWYgKGxpc3RjaGdzID4gMCkgewogICAgICAgIGlmIChjb25maXJtKCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgdG8geW91ciBsaXN0cy4gU2F2ZSBjaGFuZ2VzIGFuZCBzb3J0LCBvciBjYW5jZWwgc29ydGluZz8iKSl7CiAgICAgICAgICAgIHNhdmVlZGl0cyhudWxsKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgaWYgKGJsaXN0LnN1YnN0cigwLDEpICE9ICJ8IikgYmxpc3QgPSAifCIgKyBibGlzdDsKICAgIHZhciBzYXJyYXkgPSBibGlzdC5zdWJzdHIoMSxibGlzdC5sZW5ndGgtMikuc3BsaXQoInwiKTsKICAgIHNhcnJheS5zb3J0KCk7CiAgICAvLyBQZXJzaXN0IHNvcnRlZCBsaXN0CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImhpZGV5aG9zdHMiLCAifCIgKyBzYXJyYXkuam9pbigifCIpICsgInwiKTsKICAgICAgICBibGlzdCA9IEdNX2dldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJoaWRleWhvc3RzIiwgInwiICsgc2FycmF5LmpvaW4oInwiKSArICJ8Iik7CiAgICAgICAgYmxpc3QgPSBhd2FpdCBHTS5nZXRWYWx1ZSgiaGlkZXlob3N0cyIpOwogICAgfQogICAgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICBpZiAoZSkgZS50YXJnZXQuYmx1cigpOwp9CmFzeW5jIGZ1bmN0aW9uIGRlZHVwKGUpeyAvLyBEZS1kdXBsaWNhdGUgYmxvY2sgbGlzdHMKICAgIGlmICghY29uZmlybSgiSWYgeW91IGJsb2NrIGV4YW1wbGUuY29tLCB5b3UgZG9uJ3QgYWxzbyBuZWVkIHRvIGJsb2NrIHd3dy5leGFtcGxlLmNvbS4gUmVtb3ZlIHVubmVjZXNzYXJ5IGRvbWFpbnMgZnJvbSB0aGUgYmxvY2sgbGlzdD8iKSkgcmV0dXJuOwogICAgdmFyIGJhcnJheSwgaSwgaiwgaWFkZCwgc21haW4sIHN0ZXN0LCBzcmVtZCA9ICIiLCBzcXVlcyA9ICIiOwogICAgaWYgKGJsaXN0LnN1YnN0cigwLDEpICE9ICJ8IikgYmxpc3QgPSAifCIgKyBibGlzdDsKICAgIGJhcnJheSA9IGJsaXN0LnN1YnN0cigxLGJsaXN0Lmxlbmd0aC0yKS5zcGxpdCgifCIpOwogICAgZm9yIChpPTA7IGk8YmFycmF5Lmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAoYmFycmF5W2ldLmluZGV4T2YoIjp0IikgPiAtMSl7CiAgICAgICAgICAgIGJhcnJheVtpXSA9IGJhcnJheVtpXS5zdWJzdHIoMCxiYXJyYXlbaV0uaW5kZXhPZigiOiIpKS5zcGxpdCgiLiIpLnJldmVyc2UoKS5qb2luKCIuIikgKyAiIXQiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChiYXJyYXlbaV0uaW5kZXhPZigiOnAiKSA+IC0xKXsKICAgICAgICAgICAgICAgIGJhcnJheVtpXSA9IGJhcnJheVtpXS5zdWJzdHIoMCxiYXJyYXlbaV0uaW5kZXhPZigiOiIpKS5zcGxpdCgiLiIpLnJldmVyc2UoKS5qb2luKCIuIikgKyAiIXAiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYmFycmF5W2ldID0gYmFycmF5W2ldLnNwbGl0KCIuIikucmV2ZXJzZSgpLmpvaW4oIi4iKSArICIhdCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBiYXJyYXkuc29ydCgpOwogICAgZm9yIChpPTA7IGk8YmFycmF5Lmxlbmd0aC0xOyBpKyspewogICAgICAgIGlhZGQgPSAwOwogICAgICAgIGZvciAoaj0xOyBqPGJhcnJheS5sZW5ndGgtaTsgaisrKXsKICAgICAgICAgICAgaWYgKGJhcnJheVtpK2pdLmluZGV4T2YoYmFycmF5W2ldLnN1YnN0cigwLGJhcnJheVtpXS5sZW5ndGgtMikpICE9IDApIGJyZWFrOwogICAgICAgICAgICBzbWFpbiA9IGJhcnJheVtpXS5zdWJzdHIoMCxiYXJyYXlbaV0ubGVuZ3RoLTIpLnNwbGl0KCIuIikucmV2ZXJzZSgpLmpvaW4oIi4iKTsKICAgICAgICAgICAgc3Rlc3QgPSBiYXJyYXlbaStqXS5zdWJzdHIoMCxiYXJyYXlbaStqXS5sZW5ndGgtMikuc3BsaXQoIi4iKS5yZXZlcnNlKCkuam9pbigiLiIpOwogICAgICAgICAgICBpZiAoc3Rlc3QuaW5kZXhPZihzbWFpbikgPCAwKSBicmVhazsKICAgICAgICAgICAgaWYgKGJhcnJheVtpXS5zdWJzdHIoYmFycmF5W2ldLmxlbmd0aC0xKSA9PSBiYXJyYXlbaStqXS5zdWJzdHIoYmFycmF5W2kral0ubGVuZ3RoLTEpKXsKICAgICAgICAgICAgICAgIGJsaXN0ID0gYmxpc3QucmVwbGFjZShzdGVzdCArICI6IiArIGJhcnJheVtpK2pdLnN1YnN0cihiYXJyYXlbaStqXS5sZW5ndGgtMSkgKyAifCIsICIiKTsKICAgICAgICAgICAgICAgIHNyZW1kICs9ICJ8UmVtb3ZlZDogIiArIHN0ZXN0ICsgIjsgQ292ZXJlZCBieTogIiArIHNtYWluOwogICAgICAgICAgICAgICAgaWFkZCArPSAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3Rlc3QgKz0gKGJhcnJheVtpK2pdLnN1YnN0cihiYXJyYXlbaStqXS5sZW5ndGgtMSkgPT0gInQiKSA/ICIgKHJlZ3VsYXIpIiA6ICIgKHBlcm1hYmFuKSI7CiAgICAgICAgICAgICAgICBzbWFpbiArPSAoYmFycmF5W2ldLnN1YnN0cihiYXJyYXlbaV0ubGVuZ3RoLTEpID09ICJ0IikgPyAiIChyZWd1bGFyKSIgOiAiIChwZXJtYWJhbikiOwogICAgICAgICAgICAgICAgc3F1ZXMgKz0gInxEaWRuJ3QgcmVtb3ZlICIgKyBzdGVzdCArICIgZHVlIHRvIGJsb2NrIHR5cGUgZGlmZmVyZW5jZSBmcm9tICIgKyBzbWFpbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpICs9IGlhZGQ7CiAgICB9CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBibGlzdCk7CiAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJoaWRleWhvc3RzIiwgYmxpc3QpOwogICAgfQogICAgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICAvLyBUb0RvOiBBbGVydHMgYXJlIHRlbXBvcmFyeTsgbmljZXIgZGlzcGxheSAic29tZSBkYXkiCiAgICBpZiAoc3JlbWQgIT0gIiIpIGFsZXJ0KHNyZW1kLnN1YnN0cigxKS5yZXBsYWNlKC9cfC9nLCJcbiIpKTsKICAgIGlmIChzcXVlcyAhPSAiIikgYWxlcnQoc3F1ZXMuc3Vic3RyKDEpLnJlcGxhY2UoL1x8L2csIlxuIikpOwogICAgaWYgKHNyZW1kID09ICIiICYmIHNxdWVzID09ICIiKSBhbGVydCgiTm8gdW5uZWNlc3NhcnkgZG9tYWlucyBmb3VuZC4iKTsKICAgIGlmIChlKSBlLnRhcmdldC5ibHVyKCk7Cn0KYXN5bmMgZnVuY3Rpb24gdW53d3coZSl7IC8vIFJlbW92ZSB3d3cgZnJvbSBiZWdpbm5pbmdzIG9mIGRvbWFpbnMKICAgIGlmICghY29uZmlybSgiWW91IGNhbiBibG9jayBvdGhlciBzdWJkb21haW5zIG9uIGV4YW1wbGUuY29tIGJ5IHJlbW92aW5nIHd3dyBmcm9tIHRoZSBiZWdpbm5pbmcgKGUuZy4sIGJsb2cuZXhhbXBsZS5jb20pLiBVcGRhdGUgdGhlIGJsb2NrIGxpc3Q/IikpIHJldHVybjsKICAgIGlmIChibGlzdC5zdWJzdHIoMCwxKSAhPSAifCIpIGJsaXN0ID0gInwiICsgYmxpc3Q7CiAgICBibGlzdCA9IGJsaXN0LnJlcGxhY2UoL1x8d3d3XC4vZywgIlx8Iik7CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBibGlzdCk7CiAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJoaWRleWhvc3RzIiwgYmxpc3QpOwogICAgfQogICAgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICBpZiAoZSkgZS50YXJnZXQuYmx1cigpOwp9Ci8vIE1pc2MgZnVuY3Rpb25zCmZ1bmN0aW9uIGNvbnZlcnRGb3JtYXQoKXsKICAgIGlmIChHTTQpIHJldHVybjsgLy9MZWdhY3kgb25seQogICAgaWYgKGJsaXN0LnN1YnN0cigwLDEpICE9ICJ8IikgYmxpc3QgPSAifCIgKyBibGlzdDsKICAgIGJsaXN0ID0gInwiICsgYmxpc3Quc2xpY2UoMSkucmVwbGFjZSgvXHwvZywiOnR8Iik7CiAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIGJsaXN0KTsKfQpmdW5jdGlvbiBjb252ZXJ0VHh0cyhzdHJUeHRzKXsKICAgIHZhciBvbGRUeHRzOwogICAgb2xkVHh0cyA9IEpTT04ucGFyc2Uoc3RyVHh0cyk7CiAgICB0eHRzID0gZGVmYXVsdFR4dHM7CiAgICBpZiAoR000KSByZXR1cm47IC8vTGVnYWN5IG9ubHkKICAgIGlmICh0eHRzUHJlZi5pbmRleE9mKCI6WyIpID09IC0xKXsgLy8gMC44eCB0byAwLjl4KwogICAgICAgIHR4dHMuYmxvY2tbMF0gPSBvbGRUeHRzLmJsb2NrOwogICAgICAgIHR4dHMudW5ibG9ja1swXSA9IG9sZFR4dHMudW5ibG9jazsKICAgICAgICB0eHRzLnBiYW5bMF0gPSBvbGRUeHRzLnBiYW47CiAgICAgICAgdHh0cy5va2J0blswXSA9IG9sZFR4dHMub2tidG47CiAgICAgICAgdHh0cy5jYW5jZWxidG5bMF0gPSBvbGRUeHRzLmNhbmNlbGJ0bjsKICAgICAgICB0eHRzLnNhdmVidG5bMF0gPSBvbGRUeHRzLnNhdmVidG47CiAgICAgICAgdHh0cy5jbG9zZWJ0blswXSA9IG9sZFR4dHMuY2xvc2VidG47CiAgICB9IGVsc2UgeyAvLyAwLjl4IHRvIDEuMXgrCiAgICAgICAgdHh0cy5ibG9ja1swXSA9IG9sZFR4dHMuYmxvY2tbMF07CiAgICAgICAgdHh0cy51bmJsb2NrWzBdID0gb2xkVHh0cy51bmJsb2NrWzBdOwogICAgICAgIHR4dHMucGJhblswXSA9IG9sZFR4dHMucGJhblswXTsKICAgICAgICB0eHRzLm9rYnRuWzBdID0gb2xkVHh0cy5va2J0blswXTsKICAgICAgICB0eHRzLmNhbmNlbGJ0blswXSA9IG9sZFR4dHMuY2FuY2VsYnRuWzBdOwogICAgICAgIHR4dHMuc2F2ZWJ0blswXSA9IG9sZFR4dHMuc2F2ZWJ0blswXTsKICAgICAgICB0eHRzLmNsb3NlYnRuWzBdID0gb2xkVHh0cy5jbG9zZWJ0blswXTsKICAgICAgICBpZiAob2xkVHh0cy5va1BidG4pIHR4dHMub2tQYnRuWzBdID0gb2xkVHh0cy5va1BidG5bMF07CiAgICAgICAgaWYgKG9sZFR4dHMuY2FuY2VsTWJ0bikgdHh0cy5jYW5jZWxNYnRuWzBdID0gb2xkVHh0cy5jYW5jZWxNYnRuWzBdOwogICAgICAgIGlmIChvbGRUeHRzLm1uZ2J0bikgdHh0cy5tbmdidG5bMF0gPSBvbGRUeHRzLm1uZ2J0blswXTsKICAgICAgICBpZiAodHh0cy5zYXZlYnRuWzBdPT0iU2F2ZSBDaGFuZ2VzIikgdHh0cy5zYXZlYnRuWzBdPSJTYXZlIExpc3RzIjsgLy8gdjEuMQogICAgICAgIC8vIDEuMSB0byAxLjIrCiAgICAgICAgaWYgKG9sZFR4dHMuZXhpbWJ0bikgdHh0cy5leGltYnRuWzBdID0gb2xkVHh0cy5leGltYnRuWzBdOwogICAgICAgIC8vIDEuMiB0byAxLjMrCiAgICAgICAgaWYgKG9sZFR4dHMudXRpbGJ0bikgdHh0cy51dGlsYnRuWzBdID0gb2xkVHh0cy51dGlsYnRuWzBdOwogICAgICAgIGlmIChvbGRUeHRzLnNvcnRidG4pIHR4dHMuc29ydGJ0blswXSA9IG9sZFR4dHMuc29ydGJ0blswXTsKICAgICAgICBpZiAob2xkVHh0cy51bnd3d2J0bikgdHh0cy51bnd3d2J0blswXSA9IG9sZFR4dHMudW53d3didG5bMF07CiAgICAgICAgaWYgKG9sZFR4dHMuZGVkdXBidG4pIHR4dHMuZGVkdXBidG5bMF0gPSBvbGRUeHRzLmRlZHVwYnRuWzBdOwogICAgICAgIC8vIDIuMC45KyAoY2F0Y2gtdXApCiAgICAgICAgaWYgKG9sZFR4dHMub25ldGltZSkgdHh0cy5vbmV0aW1lWzBdID0gb2xkVHh0cy5vbmV0aW1lWzBdOwogICAgICAgIGlmIChvbGRUeHRzLnNob3dub3RjKSB0eHRzLnNob3dub3RjWzBdID0gb2xkVHh0cy5zaG93bm90Y1swXTsKICAgICAgICBpZiAob2xkVHh0cy5oaWRlbm90YykgdHh0cy5oaWRlbm90Y1swXSA9IG9sZFR4dHMuaGlkZW5vdGNbMF07CiAgICAgICAgaWYgKG9sZFR4dHMuaW1wb2J0bikgdHh0cy5pbXBvYnRuWzBdID0gb2xkVHh0cy5pbXBvYnRuWzBdOwogICAgICAgIGlmIChvbGRUeHRzLnNoYXJlYnRuKSB0eHRzLnNoYXJlYnRuWzBdID0gb2xkVHh0cy5zaGFyZWJ0blswXTsKICAgIH0KICAgIEdNX3NldFZhbHVlKCJ0ZXh0c3RyaW5ncyIsIEpTT04uc3RyaW5naWZ5KHR4dHMpKTsgLy8gcmVxdWlyZXMgRnggMy41Kwp9CmZ1bmN0aW9uIGdoaGtpbGxldmVudChlKXsKICAgIGlmIChlLmN1cnJlbnRUYXJnZXQubm9kZU5hbWUgPT0gIkJVVFRPTiIgfHwgZS5jdXJyZW50VGFyZ2V0Lm5vZGVOYW1lID09ICJJTlBVVCIpIHJldHVybjsKICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7Cn0KZnVuY3Rpb24gdG9nZ2xlQmxvY2tIaWRlcnMoc3RyKXsKICAgIHZhciBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaFN0eWxlTm9CbG9jayIpOwogICAgaWYgKHN0ciA9PSAiUyIpewogICAgICAgIGlmIChzKSBzLnJlbW92ZSgpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzdHIgPT0gIkgiKXsKICAgICAgICBpZiAocykgcmV0dXJuOwogICAgICAgIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHMuaWQgPSAiZ2hoU3R5bGVOb0Jsb2NrIjsKICAgICAgICBzLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2NzcyIpOwogICAgICAgIHMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIi5naGhie2Rpc3BsYXk6bm9uZX0iKSk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzKTsKICAgIH0KfQpmdW5jdGlvbiByZWZyZXNoTGlzdGVuZXJzKGUpeyAvLyBmb3IgQXV0b1BhZ2VyIGV4dGVuc2lvbgogICAgdmFyIGJidG5zLCBibm90YywgaSwgajsKICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdmNudCIpKSByZXR1cm47CiAgICBiYnRucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJuYXZjbnQiKS5xdWVyeVNlbGVjdG9yQWxsKCIuZ2hoYiIpOwogICAgZm9yIChpPTA7aTxiYnRucy5sZW5ndGg7aSsrKXsKICAgICAgICBiYnRuc1tpXS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsc2hvd2JmZCx0cnVlKTsKICAgICAgICBiYnRuc1tpXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsc2hvd2JmZCx0cnVlKTsKICAgIH0KICAgIGJub3RjID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdmNudCIpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5naGhkIik7CiAgICBmb3IgKGk9MDtpPGJub3RjLmxlbmd0aDtpKyspewogICAgICAgIGJub3RjW2ldLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixyZXNob3csdHJ1ZSk7CiAgICAgICAgYm5vdGNbaV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHJlc2hvdyx0cnVlKTsKICAgICAgICBiYnRucyA9IGJub3RjW2ldLnF1ZXJ5U2VsZWN0b3JBbGwoImJ1dHRvbi5naGhpZGVyIik7CiAgICAgICAgZm9yIChqPTA7ajxiYnRucy5sZW5ndGg7aisrKXsKICAgICAgICAgICAgaWYgKGJidG5zW2pdLmdldEF0dHJpYnV0ZSgidGl0bGUiKT09IlVuYmxvY2sgdGhpcyBzaXRlIil7CiAgICAgICAgICAgICAgICBiYnRuc1tqXS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdW5ibG9jayx0cnVlKTsKICAgICAgICAgICAgICAgIGJidG5zW2pdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix1bmJsb2NrLHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChiYnRuc1tqXS5nZXRBdHRyaWJ1dGUoInRpdGxlIik9PSJQZXJtYW5lbnRseSBoaWRlIHRoaXMgc2l0ZSIpewogICAgICAgICAgICAgICAgYmJ0bnNbal0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHBlcm1iYW4sdHJ1ZSk7CiAgICAgICAgICAgICAgICBiYnRuc1tqXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscGVybWJhbix0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYmJ0bnNbal0uZ2V0QXR0cmlidXRlKCJ0aXRsZSIpPT0iUmUtaGlkZSB0aGlzIGhpdCIpewogICAgICAgICAgICAgICAgYmJ0bnNbal0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHJlaGlkZSx0cnVlKTsKICAgICAgICAgICAgICAgIGJidG5zW2pdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixyZWhpZGUsdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KZnVuY3Rpb24gY29udmVydFByZWZzKGFyclByZWZzLCBhbGxuZXcpewogICAgZ2hoUHJlZk8gPSBhcnJQcmVmczsKICAgIGlmIChHTTQpIHJldHVybjsgLy8gTGVnYWN5IG9ubHkKICAgIGlmIChhbGxuZXcgPT0gInRydWUiKXsgLy8gMS4zLjcgdG8gMS40LngKICAgICAgICB2YXIgdG1wID0gR01fZ2V0VmFsdWUoInNob3dub3RjIik7CiAgICAgICAgaWYgKHRtcCl7CiAgICAgICAgICAgIGlmICh0bXAubGVuZ3RoID4gMCkgZ2hoUHJlZk8uc2hvd25vdGNbMF0gPSB0bXA7CiAgICAgICAgICAgIEdNX2RlbGV0ZVZhbHVlKCJzaG93bm90YyIpOwogICAgICAgIH0KICAgICAgICB0bXAgPSBHTV9nZXRWYWx1ZSgibW5ncGFuZW9wZW4iKTsKICAgICAgICBpZiAodG1wKXsKICAgICAgICAgICAgaWYgKHRtcC5sZW5ndGggPiAwKSBnaGhQcmVmTy5tbmdwYW5lb3BlblswXSA9IHRtcDsKICAgICAgICAgICAgR01fZGVsZXRlVmFsdWUoIm1uZ3BhbmVvcGVuIik7CiAgICAgICAgfQogICAgICAgIHRtcCA9IEdNX2dldFZhbHVlKCJtbmdidG5zdHlsZSIpOwogICAgICAgIGlmICh0bXApe2lmICh0bXAubGVuZ3RoID4gMCl7CiAgICAgICAgICAgIGlmICh0bXAuaW5kZXhPZigiLSIpPi0xKSB0bXAgPSAiYm90aCI7IC8vIGRlZmF1bHQgYW5jaWVudCBwcmVmCiAgICAgICAgICAgIGdoaFByZWZPLm1uZ2J0bnN0eWxlWzBdID0gdG1wOwogICAgICAgICAgICBHTV9kZWxldGVWYWx1ZSgibW5nYnRuc3R5bGUiKTsKICAgICAgICB9fQogICAgICAgIHRtcCA9IEdNX2dldFZhbHVlKCJhZGR0b2xpc3Rwb3MiKTsKICAgICAgICBpZiAodG1wKXsKICAgICAgICAgICAgaWYgKHRtcC5sZW5ndGggPiAwKSBnaGhQcmVmTy5hZGR0b2xpc3Rwb3NbMF0gPSB0bXA7CiAgICAgICAgICAgIEdNX2RlbGV0ZVZhbHVlKCJhZGR0b2xpc3Rwb3MiKTsKICAgICAgICB9CiAgICAgICAgdG1wID0gR01fZ2V0VmFsdWUoImFnZ3Jlc3NpdmVibG9jayIpOwogICAgICAgIGlmICh0bXApewogICAgICAgICAgICBpZiAodG1wLmxlbmd0aCA+IDApIGdoaFByZWZPLmFnZ3Jlc3NpdmVibG9ja1swXSA9IHRtcDsKICAgICAgICAgICAgR01fZGVsZXRlVmFsdWUoImFnZ3Jlc3NpdmVibG9jayIpOwogICAgICAgIH0KICAgICAgICB0bXAgPSBHTV9nZXRWYWx1ZSgidXNlbXV0YXRpb24iKTsKICAgICAgICBpZiAodG1wKXsKICAgICAgICAgICAgaWYgKHRtcC5sZW5ndGggPiAwKSBnaGhQcmVmTy51c2VtdXRhdGlvblswXSA9IHRtcDsKICAgICAgICAgICAgR01fZGVsZXRlVmFsdWUoInVzZW11dGF0aW9uIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZ2hoUHJlZnMuaW5kZXhPZigicmVzZXJ2ZWQxIik+LTEpewogICAgICAgICAgICB2YXIgb2xkUHJlZnMgPSBKU09OLnBhcnNlKGdoaFByZWZzKTsKICAgICAgICAgICAgZ2hoUHJlZk8uc2hvd25vdGNbMF0gPSBvbGRQcmVmcy5zaG93bm90Y1swXTsKICAgICAgICAgICAgZ2hoUHJlZk8ubW5ncGFuZW9wZW5bMF0gPSBvbGRQcmVmcy5tbmdwYW5lb3BlblswXTsKICAgICAgICAgICAgZ2hoUHJlZk8ubW5nYnRuc3R5bGVbMF0gPSBvbGRQcmVmcy5tbmdidG5zdHlsZVswXTsKICAgICAgICAgICAgZ2hoUHJlZk8uYWRkdG9saXN0cG9zWzBdID0gb2xkUHJlZnMuYWRkdG9saXN0cG9zWzBdOwogICAgICAgICAgICBnaGhQcmVmTy5hZ2dyZXNzaXZlYmxvY2tbMF0gPSBvbGRQcmVmcy5hZ2dyZXNzaXZlYmxvY2tbMF07CiAgICAgICAgICAgIGdoaFByZWZPLnVzZW11dGF0aW9uWzBdID0gb2xkUHJlZnMudXNlbXV0YXRpb25bMF07CiAgICAgICAgICAgIGdoaFByZWZPLm9uZWNsaWNrWzBdID0gb2xkUHJlZnMub25lY2xpY2tbMF07CiAgICAgICAgfQogICAgfQogICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsgLy8gcmVxdWlyZXMgRnggMy41Kwp9CmZ1bmN0aW9uIHRvZ2dsZWJidG4oZSl7CiAgICB2YXIgYmJ0biA9IGUuY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yKCcuZ2hoYicpOwogICAgaWYgKGJidG4pewogICAgICAgIGlmIChlLnR5cGUgPT0gIm1vdXNlb3ZlciIpIGJidG4uc3R5bGUudmlzaWJpbGl0eSA9ICIiOwogICAgICAgIGVsc2UgYmJ0bi5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7CiAgICB9Cn0KZnVuY3Rpb24gcmVRdWVyeShlKXsKICAgIHZhciBzcywgcmFkcywgaTsKICAgIGlmIChlKXsKICAgICAgICBpZiAoZS50YXJnZXQuaWQgPT0gImdoaGJmNSIpIHNzID0gIitzaXRlOiI7CiAgICAgICAgZWxzZSBzcyA9ICIrLXNpdGU6IjsKICAgICAgICByYWRzID0gZS50YXJnZXQuZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPSJyYWRpbyJdJyk7CiAgICB9IGVsc2UgewogICAgICAgIHNzID0gIistc2l0ZToiOyAvLyBBTFQgb21pdAogICAgICAgIHJhZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjZ2hoYmxvY2tmb3JtIGZvcm0nKS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPSJyYWRpbyJdJyk7CiAgICB9CiAgICBpZiAocmFkcy5sZW5ndGggPiAwKXsKICAgICAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgaWYocmFkc1tpXS5jaGVja2VkKXsKICAgICAgICAgICAgICAgIHNzICs9IHJhZHNbaV0ubmV4dEVsZW1lbnRTaWJsaW5nLnRleHRDb250ZW50OwogICAgICAgICAgICAgICAgcmVRcnkoc3MpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9IGVsc2UgY29uc29sZS5sb2coIkxPRzpyZVF1ZXJ5IGZhaWw6IG5vIHJhZHMiKTsKfQpmdW5jdGlvbiByZVFyeShkKXsKICAgIGlmICghZCkgcmV0dXJuOwogICAgdmFyIHFzcCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoIj8iKTsKICAgIGlmIChxc3AgPCAwKSByZXR1cm47CiAgICB2YXIgcSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnN1YnN0cihxc3ArMSk7CiAgICBpZiAoZC5zdWJzdHIoMCwyKSA9PSAiKy0iICYmIChxLmluZGV4T2YoZCsiJTIwIik+LTEgfHwgcS5pbmRleE9mKGQrIiYiKT4tMSkpIHJldHVybjsgLy8gdHJ5IHRvIGJsb2NrIGR1cHMsIG1heSBiZSBvdmVyaW5jbHVzaXZlCiAgICB2YXIgcWEgPSBxLnNwbGl0KCImIik7CiAgICB2YXIgaGFzX3EgPSBmYWxzZQogICAgZm9yICh2YXIgaj1xYS5sZW5ndGgtMTsgaj49MDsgai0tKXsKICAgICAgICBpZiAocWFbal0uc3BsaXQoIj0iKVswXSA9PSAicSIpewogICAgICAgICAgICBxYVtqXSArPSBkOwogICAgICAgICAgICBoYXNfcSA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChxYVtqXS5pbmRleE9mKCIjcT0iKSA+IC0xKXsKICAgICAgICAgICAgICAgIHFhW2pdICs9IGQ7CiAgICAgICAgICAgICAgICBoYXNfcSA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmIChoYXNfcSkgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zdWJzdHIoMCwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiPyIpKzEpICsgcWEuam9pbigiJiIpOwogICAgZWxzZSBjb25zb2xlLmxvZygiTE9HOlVuYWJsZSB0byBhZGQgbmV3IHNlYXJjaCB0ZXJtIHRvIFVSTCIpOwp9CmZ1bmN0aW9uIHRvZ2dsZWNpdGVsaW5lKHBvc2l0KSB7CiAgICB2YXIgZ2hoYmRfc3R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJicG9zY2l0ZWxpbmUiKTsKICAgIGlmIChwb3NpdCA9PSAiQyIpewogICAgICAgIGlmICghZ2hoYmRfc3R5KXsKICAgICAgICAgICAgZ2hoYmRfc3R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICAgICAgZ2hoYmRfc3R5LmlkID0gImJicG9zY2l0ZWxpbmUiOwogICAgICAgICAgICBnaGhiZF9zdHkuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZ2hoYmRfc3R5KTsKICAgICAgICB9CiAgICAgICAgLy8gImlubGluZSIgdGhlIGFjdGlvbiBtZW51CiAgICAgICAgZ2hoYmRfc3R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIuYWN0aW9uLW1lbnUge3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lICFpbXBvcnRhbnQ7fSAuYWN0aW9uLW1lbnUgLmNsaWNrYWJsZS1kcm9wZG93bi1hcnJvdywgLmFjdGlvbi1tZW51IC5hYl9idXR0b24sIC5hY3Rpb24tbWVudSA+IGEge2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O30gLmFjdGlvbi1tZW51LXBhbmVsLCAuYWN0aW9uLW1lbnUtcGFuZWwgdWwsIC5hY3Rpb24tbWVudS1wYW5lbCBvbCwgLmFjdGlvbi1tZW51LWl0ZW0ge2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnQ7IHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDsgYm9yZGVyOm5vbmUgIWltcG9ydGFudDsgYm94LXNoYWRvdzpub25lICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDsgbWFyZ2luOjAgICFpbXBvcnRhbnQ7IHBhZGRpbmc6MCAhaW1wb3J0YW50OyB0b3A6MCAhaW1wb3J0YW50OyBoZWlnaHQ6YXV0byAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDphdXRvICFpbXBvcnRhbnQ7fSAuYWN0aW9uLW1lbnUtaXRlbSBhLmZsLCAuYWN0aW9uLW1lbnUtYnV0dG9uIHtwYWRkaW5nOjAgMCAwIDZweCAhaW1wb3J0YW50OyBkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50O30gIC5hY3Rpb24tbWVudS1wYW5lbCB7cG9zaXRpb246c3RhdGljO30gLmFjdGlvbi1tZW51LWl0ZW0gYS5mbDpob3ZlciB7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSAhaW1wb3J0YW50O30gLmFjdGlvbi1tZW51ICsgLmNyYyB7bWFyZ2luLXJpZ2h0OiA5cHggIWltcG9ydGFudDt9IC5hY3Rpb24tbWVudSArIC5jcmMgLl9CcyB7bWFyZ2luLWxlZnQ6IDFweCAhaW1wb3J0YW50O30iKSk7CiAgICAgICAgLy8gcmVzdHlsZSB0aGUgYmxvY2sgYnV0dG9uCiAgICAgICAgZ2hoYmRfc3R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIuZ2hoYiB7Ym9yZGVyOm5vbmUhaW1wb3J0YW50OyB0ZXh0LWRlY29yYXRpb246bm9uZSFpbXBvcnRhbnQ7IGZvbnQtc2l6ZToxZW0haW1wb3J0YW50OyBjb2xvcjojMzMzIWltcG9ydGFudDsgcGFkZGluZzowIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6OHB4IWltcG9ydGFudDt9IC5naGhiOmhvdmVyIHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSAhaW1wb3J0YW50O30iKSk7CiAgICB9IGVsc2UgeyAvLyByZW1vdmUgY2l0ZWxpbmUgcnVsZXMKICAgICAgICBpZiAoZ2hoYmRfc3R5KXsKICAgICAgICAgICAgd2hpbGUoZ2hoYmRfc3R5LmZpcnN0Q2hpbGQpIGdoaGJkX3N0eS5yZW1vdmVDaGlsZChnaGhiZF9zdHkuZmlyc3RDaGlsZCk7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIG9wZW5DdXN0b21TdHlsZUJhcihlKXsKICAgIC8vIENyZWF0ZSBmaXhlZCBkaXYgd2l0aCB0ZXh0IGlucHV0IGFuZCBidXR0b25zOiBTYXZlLCBUZXN0LCBDbG9zZQogICAgdmFyIGNzYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhjc2IiKTsKICAgIGlmIChjc2IpewogICAgICAgIGNzYi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgIH0gZWxzZSB7CiAgICAgICAgY3NiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgY3NiLmlkID0gImdoaGNzYiI7CiAgICAgICAgY3NiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJwb3NpdGlvbjpmaXhlZDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDo3NTA7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNhZmE7Iik7CiAgICAgICAgY3NiLmlubmVySFRNTCA9ICI8Zm9ybSBvbnN1Ym1pdD1cInJldHVybiBmYWxzZTtcIj48cCBzdHlsZT1cIm1hcmdpbjowLjc1ZW07XCI+PGlucHV0IGlkPVwiZ2hoY3NicnVsZVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJ3aWR0aDo4MCVcIj4gIiArCiAgICAgICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaGNzYjFcIiB0aXRsZT1cIlNhdmUgYW5kIEFwcGx5XCI+U2F2ZTwvYnV0dG9uPiAiICsKICAgICAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hoY3NiMlwiIHRpdGxlPVwiVGVzdCBDdXJyZW50IFJ1bGVzXCI+VGVzdDwvYnV0dG9uPiAiICsKICAgICAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hoY3NiM1wiIHRpdGxlPVwiQ2xvc2VcIj5DbG9zZTwvYnV0dG9uPjwvcD48L2Zvcm0+IjsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNzYik7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGNzYjEiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsc2F2ZUN1c3RvbVN0eWxlLHRydWUpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhjc2IyIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRlc3RDdXN0b21TdHlsZSx0cnVlKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoY3NiMyIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixjbG9zZUN1c3RvbVN0eWxlQmFyLHRydWUpOwogICAgfQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGNzYnJ1bGUiKS52YWx1ZSA9IGN1c3RTdHk7Cn0KYXN5bmMgZnVuY3Rpb24gc2F2ZUN1c3RvbVN0eWxlKGUpewogICAgLy8gVXBkYXRlIHByZWZlcmVuY2VzIGFuZCBhcHBseSBjaGFuZ2UgdG8gc3R5bGUjZ2hoYmRjdXN0c3R5CiAgICBjdXN0U3R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGNzYnJ1bGUiKS52YWx1ZTsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXJTdHlsZXMiLCBjdXN0U3R5KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGVyU3R5bGVzIiwgY3VzdFN0eSk7CiAgICB9CiAgICBpbmplY3RDdXN0b20oKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZGN1c3RzdHkiKS5pbm5lckhUTUwgPSAiIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZGN1c3RzdHkiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjdXN0U3R5KSk7Cn0KZnVuY3Rpb24gdGVzdEN1c3RvbVN0eWxlKGUpewogICAgLy8gQWRkL0VkaXQgc3R5bGUjZ2hoYmRjdXN0c3R5CiAgICBpbmplY3RDdXN0b20oKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZGN1c3RzdHkiKS5pbm5lckhUTUwgPSAiIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZGN1c3RzdHkiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoY3NicnVsZSIpLnZhbHVlKSk7Cn0KZnVuY3Rpb24gY2xvc2VDdXN0b21TdHlsZUJhcihlKXsKICAgIC8vIFR1cm4gb2ZmIGRpc3BsYXkgYW5kIHJlYXBwbHkgc2F2ZWQgc3R5bGUgdG8gc3R5bGUjZ2hoYmRjdXN0c3R5CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoY3NiIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGluamVjdEN1c3RvbSgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJkY3VzdHN0eSIpLmlubmVySFRNTCA9ICIiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJkY3VzdHN0eSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGN1c3RTdHkpKTsKfQpmdW5jdGlvbiByZW1vdmVQQnMoZSl7IC8vIEdvb2dsZU1vbmtleVIgbGF5b3V0IG9ubHkKICAgIC8vIFNjaGVkdWxlIFBlcm1hYmFuIHJlbW92YWwgKHByZXZlbnQgc2ltdWx0YW5lb3VzL2NvbmZsaWN0aW5nIHJ1bnMpCiAgICB2YXIgUEJzQmxhbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgidGFibGUjR1RSIGxpW2Jsb2NraGlkZGVuXSwgdGFibGUjR1RSIGRpdi5nW2Jsb2NraGlkZGVuXSwgdGFibGUjR1RSIHRkOmVtcHR5Iik7CiAgICBpZiAoUEJzQmxhbmtzLmxlbmd0aCA8IDEpIHJldHVybjsKICAgIGlmICh0X3BiKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRfcGIpOwogICAgdF9wYiA9IHdpbmRvdy5zZXRUaW1lb3V0KEdNUnNodWZmbGUsIDEwMCk7Cn0KZnVuY3Rpb24gR01Sc2h1ZmZsZSgpeyAvLyBHb29nbGVNb25rZXlSIGxheW91dCBvbmx5CiAgICAvLyBEZWxldGUgUGVybWFiYW4gaGl0cwogICAgdmFyIFBCcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInRhYmxlI0dUUiBsaVtibG9ja2hpZGRlbl0sIHRhYmxlI0dUUiBkaXYuZ1tibG9ja2hpZGRlbl0iKTsKICAgIGlmIChQQnMubGVuZ3RoID4gMCl7CiAgICAgICAgZm9yICh2YXIgaT1QQnMubGVuZ3RoOyBpPjA7IGktLSkgUEJzW2ktMV0ucmVtb3ZlKCk7CiAgICB9CiAgICAvLyBDaGVjayBlbnRpcmUgdGFibGUgZm9yIGVtcHR5IGNlbGxzIGFuZCBzaHVmZmxlIGNvbnRlbnRzCiAgICB2YXIgdGJsLCByb3csIGNlbGwsIGVtcHRpZXM7CiAgICB0YmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiR1RSIik7CiAgICBmb3IgKHJvdz0wOyByb3c8dGJsLnJvd3MubGVuZ3RoOyByb3crKyl7CiAgICAgICAgZW1wdGllcyA9IHRibC5yb3dzW3Jvd10ucXVlcnlTZWxlY3RvckFsbCgidGQ6ZW1wdHkiKS5sZW5ndGg7CiAgICAgICAgaWYgKGVtcHRpZXMgPiAwICYmIGVtcHRpZXMgPCB0Ymwucm93c1tyb3ddLmNlbGxzLmxlbmd0aCl7CiAgICAgICAgICAgIGZvciAoY2VsbD0wOyBjZWxsPHRibC5yb3dzW3Jvd10uY2VsbHMubGVuZ3RoOyBjZWxsKyspewogICAgICAgICAgICAgICAgaWYgKHRibC5yb3dzW3Jvd10uY2VsbHNbY2VsbF0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMCl7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGxGcm9tTmV4dCh0Ymwucm93c1tyb3ddLmNlbGxzW2NlbGxdKSA9PSAiU1RPUCIpewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodF9wYikgd2luZG93LmNsZWFyVGltZW91dCh0X3BiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdF9wYiA9IHdpbmRvdy5zZXRUaW1lb3V0KEdNUnNodWZmbGUsIDEwMDApOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIGZpbGxGcm9tTmV4dCh0Z3QpewogICAgdmFyIHNyYyA9IGdldE5leHRDZWxsKHRndCwgdHJ1ZSk7CiAgICBpZiAoIXNyYykgcmV0dXJuICJTVE9QIjsKICAgIHdoaWxlIChzcmMuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB0Z3QuYXBwZW5kQ2hpbGQoc3JjLmNoaWxkTm9kZXNbMF0pOwp9CmZ1bmN0aW9uIGdldE5leHRDZWxsKGFDZWxsLCBibG5Ob25FbXB0eSl7CiAgICB2YXIgc3RhcnRjZWxsID0gYUNlbGw7CiAgICB2YXIgcmV0Y2VsbDsKICAgIHZhciBpPTA7CiAgICB3aGlsZSAoaTwxMDAwKSB7CiAgICAgICAgaWYgKHN0YXJ0Y2VsbC5uZXh0RWxlbWVudFNpYmxpbmcpeyAvLyBub3QgdGhlIGxhc3QgY2VsbCBpbiB0aGUgcm93CiAgICAgICAgICAgIHJldGNlbGwgPSBzdGFydGNlbGwubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGFydGNlbGwucGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmcpeyAvLyBsYXN0IGNlbGwgaW4gcm93IGFuZCB0aGVyZSdzIGFub3RoZXIgcm93CiAgICAgICAgICAgICAgICByZXRjZWxsID0gc3RhcnRjZWxsLnBhcmVudE5vZGUubmV4dEVsZW1lbnRTaWJsaW5nLmNlbGxzWzBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIGVuZCBvZiB0YWJsZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghcmV0Y2VsbCl7CiAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBjb3JydXB0ZWQgdGFibGUgc3RydWN0dXJlCiAgICAgICAgfQogICAgICAgIGlmIChibG5Ob25FbXB0eSl7CiAgICAgICAgICAgIGlmIChyZXRjZWxsLnF1ZXJ5U2VsZWN0b3IoImxpIikpewogICAgICAgICAgICAgICAgcmV0dXJuIHJldGNlbGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdGFydGNlbGwgPSByZXRjZWxsOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHJldGNlbGw7CiAgICAgICAgfQogICAgICAgIGkrKwogICAgfQp9Ci8vICJBZGQgQWxsIiBmZWF0dXJlIDIuMC45CmFzeW5jIGZ1bmN0aW9uIGFkZEFsbE5vdyhlKXsKICAgIHZhciB1bmIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZ2hocmVzdWx0PSJ1bnNldCJdW2doaGhvc3RdJyksIGRvbSA9ICcnLCBwZG9tID0gJycsIGRvbWxpc3QgPSAnJzsKICAgIGZvciAodmFyIGk9MDsgaTx1bmIubGVuZ3RoOyBpKyspewogICAgICAgIC8vIENvbXB1dGUgZG9tYWluIGJhc2VkIG9uIHVzZXIgcHJlZmVyZW5jZQogICAgICAgIGRvbSA9IHVuYltpXS5nZXRBdHRyaWJ1dGUoJ2doaGhvc3QnKTsKICAgICAgICBwZG9tID0gZG9tLnN1YnN0cihkb20uaW5kZXhPZignLicpICsgMSk7CiAgICAgICAgaWYgKHBkb20uaW5kZXhPZignLicpID4gLTEgJiYgcGF0SVB2NC50ZXN0KGRvbSkgIT0gdHJ1ZSl7CiAgICAgICAgICAgIHN3aXRjaCAoYkFnZ3Jlc3MpewogICAgICAgICAgICAgICAgY2FzZSAnYWxsJzoKICAgICAgICAgICAgICAgICAgICBkb20gPSBwZG9tOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3d3dyc6CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbS5zdWJzdHIoMCwzKSA9PSAnd3d3JykgZG9tID0gcGRvbTsgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gZnVsbCBkb21haW4KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBBZGQgZG9tIHRvIGRvbXMgYXJycmF5IChhdm9pZGluZyBkdXBsaWNhdGVzKQogICAgICAgIGlmIChkb21zLmluY2x1ZGVzKGRvbSkgIT09IHRydWUpIGRvbXMucHVzaChkb20pOwogICAgfQogICAgLy8gQWRkIG5ldyBkb21haW5zIHRvIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGJsb2NrIGxpc3QKICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdidXR0b24uZ2hoQ3VyVGFiJykuaWQgPT0gJ2doaHRzMycpeyAvLyBwYmFuCiAgICAgICAgZG9tbGlzdCA9IGRvbXMuam9pbignOnB8JykgKyAnOnAnOwogICAgfSBlbHNlIHsgLy8gcmVndWxhcgogICAgICAgIGRvbWxpc3QgPSBkb21zLmpvaW4oJzp0fCcpICsgJzp0JzsKICAgIH0KICAgIGlmIChibGlzdC5zdWJzdHIoMCwxKSAhPSAnfCcpIGJsaXN0ID0gJ3wnICsgYmxpc3Q7CiAgICBpZiAoYWRkQXQgPT0gJ2VuZCcpIGJsaXN0ICs9IGRvbWxpc3QgKyAnfCc7CiAgICBlbHNlIGJsaXN0ID0gJ3wnICsgZG9tbGlzdCArIGJsaXN0OwogICAgbmVlZHVwZGF0ZSA9IHRydWU7CiAgICAvLyBTdG9yZSB0aGUgbGlzdAogICAgaWYgKCFHTTQpewogICAgICAgIEdNX3NldFZhbHVlKCdoaWRleWhvc3RzJywgYmxpc3QpOwogICAgfSBlbHNlIHsKICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgnaGlkZXlob3N0cycsIGJsaXN0KTsKICAgIH0KICAgIC8vIEFwcGx5IHRoZSBjaGFuZ2UgdG8gdGhlIHJlc3VsdHMKICAgIGhpZGVoaXRzKG51bGwsdHJ1ZSk7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0dUUicpKSByZW1vdmVQQnMoKTsKICAgIC8vIFVwZGF0ZSB0aGUgZGlhbG9nCiAgICBpZiAoYWRkQXQgPT0gJ3NvcnQnKSBzb3J0bGlzdChudWxsKTsKICAgIHJlZnJlc2hTaXRlTGlzdCgpOwp9Cg==","resources":[{"meta":{"name":"gfrk-GHHbD-ver219.png","url":"https://www.jeffersonscher.com/gm/src/gfrk-GHHbD-ver219.png","ts":1616695190690,"mimetype":"image/png"},"source":"wolQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgDAAAAKC0PUwAAAARnQU1BAADCr8OINwXCisOpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccOJZTwAAAAGUExURcOMAADDv8O/w7/Dg8OzQRIAAAACdFJOU8O/AMOlwrcwSgAAAD9JREFUeMOawozCj8ORCgBABARnw7/Dv8Knwq9EwosHwp0HamInaBVfAAITw5PCgMKsAsOZw5QBI8Kjw7Z3RsK3aMKGw4rDpgBTw61QfMKnZsK5wp97AgwAW1MAwqEHOh5OAAAAAElFTkTCrkJgwoI="}]},{"name":"Direct links out","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["*://google.*","*://www.google.*","*://encrypted.google.*"],"orig_matches":["*://yandex.ru/*","*://yandex.ua/*","*://yandex.by/*","*://yandex.kz/*","*://yandex.com.tr/*","*://yandex.com/*","*://*.yandex.ru/*","*://*.yandex.ua/*","*://*.yandex.by/*","*://*.yandex.kz/*","*://*.yandex.com.tr/*","*://*.yandex.com/*","*://youtube.com/*","*://*.youtube.com/*","*://wikimapia.org/*","*://deviantart.com/*","*://*.deviantart.com/*","*://joyreactor.cc/*","*://*.joyreactor.cc/*","*://reactor.cc/*","*://*.reactor.cc/*","*://joyreactor.com/*","*://*.joyreactor.com/*","*://vk.com/*","*://*.vk.com/*","*://ok.ru/*","*://*.ok.ru/*","*://steamcommunity.com/*","*://*.steamcommunity.com/*","*://facebook.com/*","*://*.facebook.com/*","*://twitter.com/*","*://*.twitter.com/*","*://4pda.ru/*","*://*.4pda.ru/*","*://kat.cr/*","*://kickassto.co/*","*://katproxy.is/*","*://thekat.tv/*","*://*.kat.cr/*","*://*.kickassto.co/*","*://*.katproxy.is/*","*://*.thekat.tv/*","*://addons.mozilla.org/*","*://pixiv.net/*","*://*.pixiv.net/*","*://tumblr.com/*","*://*.tumblr.com/*","*://danieldefo.ru/*","*://*.danieldefo.ru/*","*://yaplakal.com/*","*://*.yaplakal.com/*","*://soundcloud.com/*","*://*.soundcloud.com/*","*://upwork.com/*","*://*.upwork.com/*","*://picarto.tv/*","*://*.picarto.tv/*","*://taker.im/*","*://*.taker.im/*","*://*.forumavia.ru/*","*://*.slack.com/*","*://instagram.com/*","*://*.instagram.com/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1525361734624,"data":{}},"enabled":true,"position":9,"file_url":"https://openuserjs.org/install/nokeya/Direct_links_out.user.js","uuid":"f7dfc06c-8af4-4016-92f9-e21c74771af5","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIERpcmVjdCBsaW5rcyBvdXQKLy8gQG5hbWU6cnUgICAgINCf0YDRj9C80YvQtSDRgdGB0YvQu9C60Lgg0L3QsNGA0YPQttGDCi8vIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGFsbCAiWW91IGFyZSBsZWF2aW5nIG91ciBzaXRlIiBhbmQgcmVkaXJlY3Rpb24gc3R1ZmYgZnJvbSBsaW5rcwovLyBAZGVzY3JpcHRpb246cnUg0KPQsdC40YDQsNC10YIgItCR0LvQsC3QsdC70LAt0LHQu9CwLCDQktGLINC/0L7QutC40LTQsNC10YLQtSDQvdCw0Ygg0YHQsNC50YIiINC4INC/0LXRgNC10LDQtNGA0LXRgdCw0YbQuNC4INC40Lcg0YHRgdGL0LvQvtC6Ci8vIEBuYW1lc3BhY2UgICBodHRwczovL2dpdGh1Yi5jb20vbm9rZXlhCi8vIEBhdXRob3IgICAgICBub2tleWEKLy8gQHVwZGF0ZSAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2tleWEvZGlyZWN0LWxpbmtzLW91dC9yYXcvbWFzdGVyL2RpcmVjdC1saW5rcy1vdXQudXNlci5qcwovLyBAaWNvbiAgICAgICAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25va2V5YS9kaXJlY3QtbGlua3Mtb3V0L21hc3Rlci9pY29uLnBuZwovLyBAdmVyc2lvbiAgICAgMi4xOQovLyBAZ3JhbnQgICAgICAgbm9uZQovL2dvb2dsZQovLyBAaW5jbHVkZSAgICAgKjovL2dvb2dsZS4qCi8vIEBpbmNsdWRlICAgICAqOi8vd3d3Lmdvb2dsZS4qCi8vIEBpbmNsdWRlICAgICAqOi8vZW5jcnlwdGVkLmdvb2dsZS4qCi8veWFuZGV4Ci8vIEBtYXRjaCAgICAgICAqOi8veWFuZGV4LnJ1LyoKLy8gQG1hdGNoICAgICAgICo6Ly95YW5kZXgudWEvKgovLyBAbWF0Y2ggICAgICAgKjovL3lhbmRleC5ieS8qCi8vIEBtYXRjaCAgICAgICAqOi8veWFuZGV4Lmt6LyoKLy8gQG1hdGNoICAgICAgICo6Ly95YW5kZXguY29tLnRyLyoKLy8gQG1hdGNoICAgICAgICo6Ly95YW5kZXguY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnlhbmRleC5ydS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi55YW5kZXgudWEvKgovLyBAbWF0Y2ggICAgICAgKjovLyoueWFuZGV4LmJ5LyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnlhbmRleC5rei8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi55YW5kZXguY29tLnRyLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnlhbmRleC5jb20vKgovL3lvdXR1YmUKLy8gQG1hdGNoICAgICAgICo6Ly95b3V0dWJlLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi55b3V0dWJlLmNvbS8qCi8vd2lraW1hcGlhCi8vIEBtYXRjaCAgICAgICAqOi8vd2lraW1hcGlhLm9yZy8qCi8vZGV2aWFudGFydAovLyBAbWF0Y2ggICAgICAgKjovL2RldmlhbnRhcnQuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmRldmlhbnRhcnQuY29tLyoKLy9qb3lyZWFjdG9yCi8vIEBtYXRjaCAgICAgICAqOi8vam95cmVhY3Rvci5jYy8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5qb3lyZWFjdG9yLmNjLyoKLy8gQG1hdGNoICAgICAgICo6Ly9yZWFjdG9yLmNjLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnJlYWN0b3IuY2MvKgovLyBAbWF0Y2ggICAgICAgKjovL2pveXJlYWN0b3IuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmpveXJlYWN0b3IuY29tLyoKLy92awovLyBAbWF0Y2ggICAgICAgKjovL3ZrLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi52ay5jb20vKgovL29rCi8vIEBtYXRjaCAgICAgICAqOi8vb2sucnUvKgovLyBAbWF0Y2ggICAgICAgKjovLyoub2sucnUvKgovL3N0ZWFtCi8vIEBtYXRjaCAgICAgICAqOi8vc3RlYW1jb21tdW5pdHkuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnN0ZWFtY29tbXVuaXR5LmNvbS8qCi8vZmIKLy8gQG1hdGNoICAgICAgICo6Ly9mYWNlYm9vay5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouZmFjZWJvb2suY29tLyoKLy90d2l0dGVyCi8vIEBtYXRjaCAgICAgICAqOi8vdHdpdHRlci5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoudHdpdHRlci5jb20vKgovLzRwZGEKLy8gQG1hdGNoICAgICAgICo6Ly80cGRhLnJ1LyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLjRwZGEucnUvKgovL2tpY2thc3MKLy8gQG1hdGNoICAgICAgICo6Ly9rYXQuY3IvKgovLyBAbWF0Y2ggICAgICAgKjovL2tpY2thc3N0by5jby8qCi8vIEBtYXRjaCAgICAgICAqOi8va2F0cHJveHkuaXMvKgovLyBAbWF0Y2ggICAgICAgKjovL3RoZWthdC50di8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5rYXQuY3IvKgovLyBAbWF0Y2ggICAgICAgKjovLyoua2lja2Fzc3RvLmNvLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmthdHByb3h5LmlzLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnRoZWthdC50di8qCi8vQU1PCi8vIEBtYXRjaCAgICAgICAqOi8vYWRkb25zLm1vemlsbGEub3JnLyoKLy9waXhpdgovLyBAbWF0Y2ggICAgICAgKjovL3BpeGl2Lm5ldC8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5waXhpdi5uZXQvKgovL3R1bWJscgovLyBAbWF0Y2ggICAgICAgKjovL3R1bWJsci5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoudHVtYmxyLmNvbS8qCi8vZGFuaWVsZGVmbwovLyBAbWF0Y2ggICAgICAgKjovL2RhbmllbGRlZm8ucnUvKgovLyBAbWF0Y2ggICAgICAgKjovLyouZGFuaWVsZGVmby5ydS8qCi8veWFwbGFrYWwKLy8gQG1hdGNoICAgICAgICo6Ly95YXBsYWthbC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoueWFwbGFrYWwuY29tLyoKLy9zb3VuZGNsb3VkCi8vIEBtYXRjaCAgICAgICAqOi8vc291bmRjbG91ZC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouc291bmRjbG91ZC5jb20vKgovL3Vwd29yawovLyBAbWF0Y2ggICAgICAgKjovL3Vwd29yay5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoudXB3b3JrLmNvbS8qCi8vcGljYXJ0bwovLyBAbWF0Y2ggICAgICAgKjovL3BpY2FydG8udHYvKgovLyBAbWF0Y2ggICAgICAgKjovLyoucGljYXJ0by50di8qCi8vdGFrZXIKLy8gQG1hdGNoICAgICAgICo6Ly90YWtlci5pbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi50YWtlci5pbS8qCi8vZm9ydW1hdmlhCi8vIEBtYXRjaCAgICAgICAqOi8vKi5mb3J1bWF2aWEucnUvKgovL3NsYWNrCi8vIEBtYXRjaCAgICAgICAqOi8vKi5zbGFjay5jb20vKgovL2luc3RhZ3JhbQovLyBAbWF0Y2ggICAgICAgKjovL2luc3RhZ3JhbS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouaW5zdGFncmFtLmNvbS8qCgovLyA9PS9Vc2VyU2NyaXB0PT0KKGZ1bmN0aW9uKCkgewogICAgLy8gYW5jaG9ycyBhbmQgZnVuY3Rpb25zCiAgICB2YXIgYW5jaG9yOwogICAgdmFyIGFmdGVyOwogICAgdmFyIHJ3TGluayA9IGZ1bmN0aW9uKCl7fTsKICAgIHZhciByd0FsbCA9IGZ1bmN0aW9uKCl7fTsKICAgIHZhciByZXRUcnVlID0gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9OyAvL2R1bW15IGZ1bmN0aW9uIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZQoKICAgIC8vIHNpbXBsZSByZXdyaXRlIGxpbmsgLSAgYmFzZWQgb24gYW5jaG9ycwogICAgZnVuY3Rpb24gcndTaW1wbGUobGluayl7CiAgICAgICAgaWYgKGFuY2hvcil7CiAgICAgICAgICAgIHZhciBuZHggPSBsaW5rLmhyZWYuaW5kZXhPZihhbmNob3IpOwogICAgICAgICAgICBpZiAobmR4ICE9IC0xKXsKICAgICAgICAgICAgICAgIHZhciBuZXdsaW5rID0gbGluay5ocmVmLnN1YnN0cmluZyhuZHggKyBhbmNob3IubGVuZ3RoKTsKICAgICAgICAgICAgICAgIGlmIChhZnRlcil7CiAgICAgICAgICAgICAgICAgICAgbmR4ID0gbmV3bGluay5pbmRleE9mKGFmdGVyKTsKICAgICAgICAgICAgICAgICAgICBpZiAobmR4ICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5rID0gbmV3bGluay5zdWJzdHJpbmcoMCwgbmR4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IHVuZXNjYXBlKG5ld2xpbmspOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcndhU2ltcGxlKCl7CiAgICAgICAgdmFyIGxpbmtzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgKytpKQogICAgICAgICAgICByd0xpbmsobGlua3NbaV0pOwogICAgfQogICAgLy8gdmsKICAgIGZ1bmN0aW9uIHJ3VksobGluayl7CiAgICAgICAgaWYgKGxpbmsuY2xhc3NOYW1lID09PSAncGFnZV9tZWRpYV9saW5rX3RodW1iJykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBsaW5rLnBhcmVudE5vZGU7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgICAgICAgcGFyZW50LnJlbW92ZUF0dHJpYnV0ZSgnaHJlZicpOwogICAgICAgICAgICBwYXJlbnQucmVtb3ZlQXR0cmlidXRlKCdvbmNsaWNrJyk7CiAgICAgICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdvbmNsaWNrJyk7CiAgICAgICAgfQoKICAgICAgICB2YXIgbmR4ID0gbGluay5ocmVmLmluZGV4T2YoYW5jaG9yKTsKICAgICAgICBpZiAobmR4ICE9IC0xKXsKICAgICAgICAgICAgdmFyIG5ld2xpbmsgPSBsaW5rLmhyZWYuc3Vic3RyaW5nKG5keCArIGFuY2hvci5sZW5ndGgpOwogICAgICAgICAgICB2YXIgYWZ0ZXJBcnIgPSBbJyZwb3N0PScsICcmZWw9c25pcHBldCcsICcmY2Nfa2V5PSddOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFmdGVyQXJyLmxlbmd0aDsgKytpKXsKICAgICAgICAgICAgICAgIG5keCA9IG5ld2xpbmsuaW5kZXhPZihhZnRlckFycltpXSk7CiAgICAgICAgICAgICAgICBpZiAobmR4ICE9IC0xKQogICAgICAgICAgICAgICAgICAgIG5ld2xpbmsgPSBuZXdsaW5rLnN1YnN0cmluZygwLCBuZHgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHVuZXNjYXBlKG5ld2xpbmspOwogICAgICAgIH0KICAgIH0KICAgIC8vIHR3aXR0ZXIKICAgIGZ1bmN0aW9uIHJ3VHdpdHRlcihsaW5rKXsKICAgICAgICBpZiAobGluay5oYXNBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQtdXJsJykpewogICAgICAgICAgICBsaW5rLmhyZWYgPSBsaW5rLmdldEF0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZC11cmwnKTsKICAgICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQtdXJsJyk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcndhVHdpdHRlcigpewogICAgICAgIHZhciBsaW5rcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3R3aXR0ZXItdGltZWxpbmUtbGluaycpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyArK2kpCiAgICAgICAgICAgIHJ3TGluayhsaW5rc1tpXSk7CiAgICB9CiAgICAvLyBraWNrYXNzCiAgICBmdW5jdGlvbiByd0tpY2thc3MobGluayl7CiAgICAgICAgdmFyIG5keCA9IGxpbmsuaHJlZi5pbmRleE9mKGFuY2hvcik7CiAgICAgICAgaWYgKG5keCAhPSAtMSl7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHdpbmRvdy5hdG9iKHVuZXNjYXBlKGxpbmsuaHJlZi5zdWJzdHJpbmcobmR4ICsgYW5jaG9yLmxlbmd0aCwgbGluay5ocmVmLmxlbmd0aCAtIDEpKSk7CiAgICAgICAgICAgIGxpbmsuY2xhc3NOYW1lID0gJyc7CiAgICAgICAgfQogICAgfQogICAgLy8geW91dHViZQogICAgZnVuY3Rpb24gcndZb3V0dWJlKGxpbmspewogICAgICAgIGlmICgvcmVkaXJlY3QvaS50ZXN0KGxpbmsuY2xhc3NOYW1lKSkKICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVkaXJlY3QtaHJlZi11cGRhdGVkJywgJ3RydWUnKTsKICAgICAgICByd1NpbXBsZShsaW5rKTsKICAgIH0KICAgIC8vIGZhY2Vib29rCiAgICBmdW5jdGlvbiByd0ZhY2Vib29rKGxpbmspewogICAgICAgIGlmICgvcmVmZXJyZXJfbG9nL2kudGVzdChsaW5rLm9uY2xpY2spKXsKICAgICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ29uY2xpY2snKTsKICAgICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ29ubW91c2VvdmVyJyk7CiAgICAgICAgfQogICAgICAgIHJ3U2ltcGxlKGxpbmspOwogICAgfQogICAgLy8gZ29vZ2xlCiAgICBmdW5jdGlvbiByd0dvb2dsZShsaW5rKXsKICAgICAgICAvLyByZXBsYWNlIGdsb2JhbCByd3Qgc2NyaXB0CiAgICAgICAgaWYgKHdpbmRvdy5yd3QgJiYgd2luZG93LnJ3dCAhPSByZXRUcnVlKXsKICAgICAgICAgICAgZGVsZXRlIHdpbmRvdy5yd3Q7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdyd3QnLCB7IHZhbHVlOiByZXRUcnVlLCB3cml0YWJsZTogZmFsc2UgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBtYWluIHNlYXJjaAogICAgICAgIGlmIChsaW5rLmhhc0F0dHJpYnV0ZSgnb25tb3VzZWRvd24nKSkKICAgICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ29ubW91c2Vkb3duJyk7CiAgICAgICAgLy8gaW1hZ2VzCiAgICAgICAgaWYgKGxpbmsuaGFzQXR0cmlidXRlKCdqc2FjdGlvbicpKXsKICAgICAgICAgICB2YXIgdG1wID0gbGluay5nZXRBdHRyaWJ1dGUoJ2pzYWN0aW9uJyk7CiAgICAgICAgICAgaWYgKHRtcCkKICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2pzYWN0aW9uJywgdG1wLnJlcGxhY2UoLyhtb3VzZWRvd246aXJjLnJsfGtleWRvd246aXJjLnJsaykvZywnJykpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyB5YW5kZXgKICAgIGZ1bmN0aW9uIHJ3WWFuZGV4KGxpbmspewogICAgICAgIC8vIG1haW4gc2VhcmNoCiAgICAgICAgaWYgKGxpbmsuaGFzQXR0cmlidXRlKCdvbm1vdXNlZG93bicpKQogICAgICAgICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgnb25tb3VzZWRvd24nKTsKICAgICAgICAvLyBpbWFnZXMKICAgICAgICBhbmNob3IgPSAnJmltZ191cmw9JzsKICAgICAgICBhZnRlciA9ICcmcG9zPSc7CiAgICAgICAgcndTaW1wbGUobGluayk7CiAgICB9CiAgICAvL21vemlsbGEgYWRkb25zIHN0b3JlCiAgICBmdW5jdGlvbiByd0FNTyhsaW5rKXsKICAgICAgICBpZiAoL291dGdvaW5nLnByb2QubW96YXdzLm5ldC9pLnRlc3QobGluay5ocmVmKSl7CiAgICAgICAgICAgIHZhciB0bXAgPSBsaW5rLmhyZWY7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9ICIjIjsKICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBmaWdodCBtb3ppbGxhJ3MgcmVwbGFjaW5nIG9mIGRpcmVjdCByZWRpcmVjdCBzdHJpbmcgd2l0aCBqcXVlcnkgZXZlbnRzCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbGluay5ocmVmID0gdW5lc2NhcGUodG1wLnJlcGxhY2UoLyhodHRwfGh0dHBzKTpcL1wvb3V0Z29pbmcucHJvZC5tb3phd3MubmV0XC92MVwvWzAtOWEtekEtWl0rXC8vaSwnJykpOyB9LCAxMDApOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBkYW5pdWVsZGVmbwogICAgZnVuY3Rpb24gcndEYW5pZWxEZWZvKGxpbmspewogICAgICAgIGlmIChsaW5rLmhhc0F0dHJpYnV0ZSgnZGF0YS1wcm94eS1ocmVmJykpCiAgICAgICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXByb3h5LWhyZWYnKTsKICAgIH0KCiAgICAvLyBzbGFjawogICAgZnVuY3Rpb24gcndTbGFjayhsaW5rKXsKICAgICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgnb25jbGljaycpOwogICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdvbm1vdXNlb3ZlcicpOwogICAgfQoKICAgIC8vIGRldGVybWluZSBhbmNob3JzLCBmdW5jdGlvbnMgYW5kIGxpc3RlbmVycwogICAgKGZ1bmN0aW9uICgpCiAgICB7CiAgICAgICAgcndMaW5rID0gcndTaW1wbGU7CiAgICAgICAgcndBbGwgPSByd2FTaW1wbGU7CgogICAgICAgIHZhciBsb2MgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7CiAgICAgICAgaWYgKC9nb29nbGUvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIHJ3TGluayA9IHJ3R29vZ2xlOwogICAgICAgIGVsc2UgaWYgKC95b3V0dWJlL2kudGVzdChsb2MpKXsKICAgICAgICAgICAgYW5jaG9yID0gJ3JlZGlyZWN0P3E9JzsKICAgICAgICAgICAgYWZ0ZXIgPSAnJnJlZGlyX3Rva2VuPSc7CiAgICAgICAgICAgIHJ3TGluayA9IHJ3WW91dHViZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoL2ZhY2Vib29rL2kudGVzdChsb2MpKXsKICAgICAgICAgICAgYW5jaG9yID0gJ3U9JzsKICAgICAgICAgICAgYWZ0ZXIgPSAnJmg9JzsKICAgICAgICAgICAgcndMaW5rID0gcndGYWNlYm9vazsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoL2luc3RhZ3JhbS9pLnRlc3QobG9jKSl7CiAgICAgICAgICAgIGFuY2hvciA9ICd1PSc7CiAgICAgICAgICAgIGFmdGVyID0gJyZlPSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKC90d2l0dGVyL2kudGVzdChsb2MpKXsKICAgICAgICAgICAgcndMaW5rID0gcndUd2l0dGVyOwogICAgICAgICAgICByd0FsbCA9IHJ3YVR3aXR0ZXI7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKC95YW5kZXgvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIHJ3TGluayA9IHJ3WWFuZGV4OwogICAgICAgIGVsc2UgaWYgKC92ay9pLnRlc3QobG9jKSl7CiAgICAgICAgICAgIGFuY2hvciA9ICd0bz0nOwogICAgICAgICAgICByd0xpbmsgPSByd1ZLOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvb2svaS50ZXN0KGxvYykpewogICAgICAgICAgICBhbmNob3IgPSAnc3QubGluaz0nOwogICAgICAgICAgICBhZnRlciA9ICcmc3QubmFtZT0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvcGl4aXYvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIGFuY2hvciA9ICdqdW1wLnBocD8nOwogICAgICAgIGVsc2UgaWYgKC90dW1ibHIvaS50ZXN0KGxvYykpewogICAgICAgICAgICBhbmNob3IgPSAicmVkaXJlY3Q/ej0iOwogICAgICAgICAgICBhZnRlciA9ICImdD0iOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvZGV2aWFudGFydC9pLnRlc3QobG9jKSkKICAgICAgICAgICAgYW5jaG9yID0gJ291dGdvaW5nPyc7CiAgICAgICAgZWxzZSBpZiAoLyhzdGVhbXxyZWFjdG9yKS9pLnRlc3QobG9jKSkKICAgICAgICAgICAgYW5jaG9yID0gJ3VybD0nOwogICAgICAgIGVsc2UgaWYgKC8oa2F0fGtpY2thc3MpL2kudGVzdChsb2MpKXsKICAgICAgICAgICAgYW5jaG9yID0gJ2NvbmZpcm0vdXJsLyc7CiAgICAgICAgICAgIHJ3TGluayA9IHJ3S2lja2FzczsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoL3NvdW5kY2xvdWQvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIGFuY2hvciA9ICJleGl0LnNjLz91cmw9IjsKICAgICAgICBlbHNlIGlmICgvdXB3b3JrL2kudGVzdChsb2MpKQogICAgICAgICAgICBhbmNob3IgPSAnbGVhdmluZy1vZGVzaz9yZWY9JzsKICAgICAgICBlbHNlIGlmICgvNHBkYS9pLnRlc3QobG9jKSl7CiAgICAgICAgICAgIGFuY2hvciA9ICdnby8/dT0nOwogICAgICAgICAgICBhZnRlciA9ICcmZT0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvbW96aWxsYS9pLnRlc3QobG9jKSkKICAgICAgICAgICAgcndMaW5rID0gcndBTU87CiAgICAgICAgZWxzZSBpZiAoL2RhbmllbGRlZm8vaS50ZXN0KGxvYykpCiAgICAgICAgICAgIHJ3TGluayA9IHJ3RGFuaWVsRGVmbzsKICAgICAgICBlbHNlIGlmICgveWFwbGFrYWwvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIGFuY2hvciA9ICJnby8/IjsKICAgICAgICBlbHNlIGlmICgvd2lraW1hcGlhLm9yZy9pLnRlc3QobG9jKSkKICAgICAgICAgICAgYW5jaG9yID0gJ2V4dGVybmFsX2xpbms/dXJsPSc7CiAgICAgICAgZWxzZSBpZiAoL2ZvcnVtYXZpYS5ydS9pLnRlc3QobG9jKSkKICAgICAgICAgICAgYW5jaG9yID0gJy9lLz9sPSc7CiAgICAgICAgZWxzZSBpZiAoL3BpY2FydG8vaS50ZXN0KGxvYykpewogICAgICAgICAgICBhbmNob3IgPSAicmVmZXJyZXI/Z289IjsKICAgICAgICAgICAgYWZ0ZXIgPSAiJnJlZj0iOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvdGFrZXIvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIGFuY2hvciA9ICJwaHBCQjIvZ290by8iOwogICAgICAgIGVsc2UgaWYgKC9zbGFjay9pLnRlc3QobG9jKSkKICAgICAgICAgICAgcndMaW5rID0gcndTbGFjazsKCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NTm9kZUluc2VydGVkJywgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC50YXJnZXQgfHwgIShldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHZhciBub2RlID0gZXZlbnQudGFyZ2V0OwogICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50KQogICAgICAgICAgICAgICAgcndMaW5rKG5vZGUpOwogICAgICAgICAgICB2YXIgbGlua3MgPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICByd0xpbmsobGlua3NbaV0pOwogICAgICAgIH0sIGZhbHNlKTsKICAgIH0pKCk7CiAgICByd0FsbCgpOwp9KSgpOwo="},{"name":"AdsBypasser","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":["*"],"orig_excludes":[],"orig_includes":["http://*","https://*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":["binbox.io"],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"data":{"align_center":"btrue","change_background":"btrue","external_server_support":"bfalse","log_level":"n1","redirect_image":"btrue","scale_image":"btrue","version":"n4"},"ts":1616961031472},"enabled":true,"position":10,"file_url":"https://adsbypasser.github.io/releases/adsbypasser.full.es7.user.js","uuid":"07631f02-8bd1-41d7-b717-38c702eff6d8","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgIEFkc0J5cGFzc2VyCi8vIEBuYW1lc3BhY2UgICAgICBBZHNCeXBhc3NlcgovLyBAZGVzY3JpcHRpb24gICAgQnlwYXNzIEFkcwovLyBAY29weXJpZ2h0ICAgICAgMjAxMissIFdlaS1DaGVuZyBQYW4gKGxlZ25hbGV1cmMpCi8vIEB2ZXJzaW9uICAgICAgICA3LjE2LjAKLy8gQGxpY2Vuc2UgICAgICAgIEJTRAovLyBAaG9tZXBhZ2VVUkwgICAgaHR0cHM6Ly9hZHNieXBhc3Nlci5naXRodWIuaW8vCi8vIEBzdXBwb3J0VVJMICAgICBodHRwczovL2dpdGh1Yi5jb20vYWRzYnlwYXNzZXIvYWRzYnlwYXNzZXIvaXNzdWVzCi8vIEB1cGRhdGVVUkwgICAgICBodHRwczovL2Fkc2J5cGFzc2VyLmdpdGh1Yi5pby9yZWxlYXNlcy9hZHNieXBhc3Nlci5mdWxsLmVzNy5tZXRhLmpzCi8vIEBkb3dubG9hZFVSTCAgICBodHRwczovL2Fkc2J5cGFzc2VyLmdpdGh1Yi5pby9yZWxlYXNlcy9hZHNieXBhc3Nlci5mdWxsLmVzNy51c2VyLmpzCi8vIEBpY29uICAgICAgICAgICBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWRzYnlwYXNzZXIvYWRzYnlwYXNzZXIvdjcuMTYuMC9yZXNvdXJjZXMvaW1nL2xvZ28ucG5nCi8vIEBncmFudCAgICAgICAgICBHTV9kZWxldGVWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgR01fZ2V0UmVzb3VyY2VVUkwKLy8gQGdyYW50ICAgICAgICAgIEdNX2dldFZhbHVlCi8vIEBncmFudCAgICAgICAgICBHTV9vcGVuSW5UYWIKLy8gQGdyYW50ICAgICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQKLy8gQGdyYW50ICAgICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICAgICBHTV94bWxodHRwUmVxdWVzdAovLyBAZ3JhbnQgICAgICAgICAgR00uZGVsZXRlVmFsdWUKLy8gQGdyYW50ICAgICAgICAgIEdNLmdldFJlc291cmNlVXJsCi8vIEBncmFudCAgICAgICAgICBHTS5nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgR00ub3BlbkluVGFiCi8vIEBncmFudCAgICAgICAgICBHTS5zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgR00ueG1sSHR0cFJlcXVlc3QKLy8gQGdyYW50ICAgICAgICAgIHVuc2FmZVdpbmRvdwovLyBAcmVzb3VyY2UgICAgICAgYWxpZ25DZW50ZXIgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fkc2J5cGFzc2VyL2Fkc2J5cGFzc2VyL3Y3LjE2LjAvcmVzb3VyY2VzL2Nzcy9hbGlnbl9jZW50ZXIuY3NzCi8vIEByZXNvdXJjZSAgICAgICBzY2FsZUltYWdlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hZHNieXBhc3Nlci9hZHNieXBhc3Nlci92Ny4xNi4wL3Jlc291cmNlcy9jc3Mvc2NhbGVfaW1hZ2UuY3NzCi8vIEByZXNvdXJjZSAgICAgICBiZ0ltYWdlIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hZHNieXBhc3Nlci9hZHNieXBhc3Nlci92Ny4xNi4wL3Jlc291cmNlcy9pbWcvaW1hZ2Vkb2MtZGFya25vaXNlLnBuZwovLyBAcnVuLWF0ICAgICAgICAgZG9jdW1lbnQtc3RhcnQKLy8gQGluY2x1ZGUgICAgICAgIGh0dHA6Ly8qCi8vIEBpbmNsdWRlICAgICAgICBodHRwczovLyoKLy8gQGNvbm5lY3QgICAgICAgICoKLy8gPT0vVXNlclNjcmlwdD09CgogKGZ1bmN0aW9uKG1vZHVsZXMpIHsgCiAJdmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTsKIAlmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7CiAJCWlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7CiAJCQlyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0czsKIAkJfQogCQl2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7CiAJCQlpOiBtb2R1bGVJZCwKIAkJCWw6IGZhbHNlLAogCQkJZXhwb3J0czoge30KIAkJfTsKIAkJbW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7CiAJCW1vZHVsZS5sID0gdHJ1ZTsKIAkJcmV0dXJuIG1vZHVsZS5leHBvcnRzOwogCX0KIAlfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzOwogCV9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7CiAJX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7CiAJCWlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHsKIAkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pOwogCQl9CiAJfTsKIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7CiAJCWlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykgewogCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7CiAJCX0KIAkJT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTsKIAl9OwogCV9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7CiAJCWlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpOwogCQlpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlOwogCQlpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlOwogCQl2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpOwogCQlfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpOwogCQlPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7CiAJCWlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTsKIAkJcmV0dXJuIG5zOwogCX07CiAJX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7CiAJCXZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgPwogCQkJZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDoKIAkJCWZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07CiAJCV9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTsKIAkJcmV0dXJuIGdldHRlcjsKIAl9OwogCV9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTsKIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSAiIjsKIAlyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTsKIH0pCiAoWwogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIHZhciB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CiB2YXIgdXRpbF9kaXNwYXRjaGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwogdmFyIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CiB2YXIgdXRpbF9jb25maWdfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7CiB2YXIgdXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CiB2YXIgX0FEU0JZUEFTU0VSX0hBTkRMRVJTX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTsKY29uc3QgaXNTYWZhcmkgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2luZG93LkhUTUxFbGVtZW50KS5pbmRleE9mKCdDb25zdHJ1Y3RvcicpID4gMDsKZnVuY3Rpb24gZGlzYWJsZVdpbmRvd09wZW4gKCkgewogIHRyeSB7CiAgICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVzdyJdLm9wZW4gPSBmdW5jdGlvbiAoKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgY2xvc2VkOiBmYWxzZSwKICAgICAgfTsKICAgIH07CiAgfSBjYXRjaCAoZSkgewogICAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIndhcm4iXSkoJ2Nhbm5vdCBtb2NrIHdpbmRvdy5vcGVuJyk7CiAgfQogIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sidXN3Il0uYWxlcnQgPSB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9wIl07CiAgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ1c3ciXS5jb25maXJtID0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vcCJdOwp9CmZ1bmN0aW9uIGRpc2FibGVMZWF2ZVByb21wdCAoZWxlbWVudCkgewogIGlmICghZWxlbWVudCkgewogICAgcmV0dXJuOwogIH0KICBjb25zdCBzZWFsID0gewogICAgc2V0OiBmdW5jdGlvbiAoKSB7CiAgICAgIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJpbmZvIl0pKCdibG9ja2VkIG9uYmVmb3JldW5sb2FkJyk7CiAgICB9LAogIH07CiAgZWxlbWVudC5vbmJlZm9yZXVubG9hZCA9IHVuZGVmaW5lZDsKICBpZiAoaXNTYWZhcmkpIHsKICAgIGVsZW1lbnQuX19kZWZpbmVTZXR0ZXJfXygnb25iZWZvcmV1bmxvYWQnLCBzZWFsLnNldCk7CiAgfSBlbHNlIHsKICAgIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sidXN3Il0uT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdvbmJlZm9yZXVubG9hZCcsIHsKICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgZ2V0OiB1bmRlZmluZWQsCiAgICAgIHNldDogc2VhbC5zZXQsCiAgICB9KTsKICB9CiAgY29uc3Qgb2FlbCA9IGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcjsKICBjb25zdCBuYWVsID0gZnVuY3Rpb24gKHR5cGUpIHsKICAgIGlmICh0eXBlID09PSAnYmVmb3JldW5sb2FkJykgewogICAgICBPYmplY3QodXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siaW5mbyJdKSgnYmxvY2tlZCBhZGRFdmVudExpc3RlbmVyIG9uYmVmb3JldW5sb2FkJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJldHVybiBvYWVsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgfTsKICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIgPSBuYWVsOwp9CmZ1bmN0aW9uIGNoYW5nZVRpdGxlICgpIHsKICBkb2N1bWVudC50aXRsZSArPSAnIC0gQWRzQnlwYXNzZXInOwp9CmFzeW5jIGZ1bmN0aW9uIGJlZm9yZURPTVJlYWR5IChoYW5kbGVyKSB7CiAgY29uc3QgY29uZmlnID0gYXdhaXQgT2JqZWN0KHV0aWxfY29uZmlnX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImR1bXBDb25maWciXSkoKTsKICBPYmplY3QodXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siaW5mbyJdKSgnd29ya2luZyBvblxuJXMgXG53aXRoXG4lcycsIHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTsKICBkaXNhYmxlTGVhdmVQcm9tcHQodXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ1c3ciXSk7CiAgZGlzYWJsZVdpbmRvd09wZW4oKTsKICBhd2FpdCBoYW5kbGVyLnN0YXJ0KCk7Cn0KYXN5bmMgZnVuY3Rpb24gYWZ0ZXJET01SZWFkeSAoaGFuZGxlcikgewogIGRpc2FibGVMZWF2ZVByb21wdCh1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVzdyJdLmRvY3VtZW50LmJvZHkpOwogIGNoYW5nZVRpdGxlKCk7CiAgYXdhaXQgaGFuZGxlci5yZWFkeSgpOwp9CmZ1bmN0aW9uIHdhaXRET00gKCkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICdsb2FkaW5nJykgewogICAgICByZXNvbHZlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7CiAgICAgIHJlc29sdmUoKTsKICAgIH0pOwogIH0pOwp9CmFzeW5jIGZ1bmN0aW9uIG1haW4gKCkgewogIGlmICh1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInJhd1VTVyJdLnRvcCAhPT0gdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJyYXdVU1ciXS5zZWxmKSB7CiAgICByZXR1cm47CiAgfQogIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5yZWdpc3Rlck1lbnVDb21tYW5kKCdBZHNCeXBhc3NlciAtIENvbmZpZ3VyZScsICgpID0+IHsKICAgIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5vcGVuSW5UYWIoJ2h0dHBzOi8vYWRzYnlwYXNzZXIuZ2l0aHViLmlvL2NvbmZpZ3VyZS5odG1sJyk7CiAgfSk7CiAgYXdhaXQgT2JqZWN0KHV0aWxfY29uZmlnX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bImxvYWRDb25maWciXSkoKTsKICBjb25zdCBoYW5kbGVyID0gT2JqZWN0KHV0aWxfZGlzcGF0Y2hlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJmaW5kSGFuZGxlciJdKSgpOwogIGlmIChoYW5kbGVyKSB7CiAgICBhd2FpdCBiZWZvcmVET01SZWFkeShoYW5kbGVyKTsKICAgIGF3YWl0IHdhaXRET00oKTsKICAgIGF3YWl0IGFmdGVyRE9NUmVhZHkoaGFuZGxlcik7CiAgICByZXR1cm47CiAgfQp9Cm1haW4oKS5jYXRjaCgoZSkgPT4gewogIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJ3YXJuIl0pKGUpOwp9KTsKIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiQWRzQnlwYXNzZXJFcnJvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQWRzQnlwYXNzZXJFcnJvcjsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImV2ZXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiBldmVyeTsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZpbmQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpbmQ7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJmb3JFYWNoIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb3JFYWNoOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaXNTdHJpbmciLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzU3RyaW5nOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibWFwIiwgZnVuY3Rpb24oKSB7IHJldHVybiBtYXA7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJub25lIiwgZnVuY3Rpb24oKSB7IHJldHVybiBub25lOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibm9wIiwgZnVuY3Rpb24oKSB7IHJldHVybiBub3A7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwYXJ0aWFsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwYXJ0aWFsOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAidHJ5RXZlcnkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRyeUV2ZXJ5OyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAid2FpdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gd2FpdDsgfSk7CmNsYXNzIEFkc0J5cGFzc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHsKICAgIHN1cGVyKG1lc3NhZ2UpOwogIH0KICBnZXQgbmFtZSAoKSB7CiAgICByZXR1cm4gJ0Fkc0J5cGFzc2VyRXJyb3InOwogIH0KfQpmdW5jdGlvbiBmb3JFYWNoIChjb2xsZWN0aW9uLCBmbikgewogIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkgewogICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoY29sbGVjdGlvbiwgZm4pOwogIH0KICByZXR1cm4gT2JqZWN0LmtleXMoY29sbGVjdGlvbikuZm9yRWFjaCgoaykgPT4gewogICAgcmV0dXJuIGZuKGNvbGxlY3Rpb25ba10sIGssIGNvbGxlY3Rpb24pOwogIH0pOwp9CmZ1bmN0aW9uIGV2ZXJ5IChjb2xsZWN0aW9uLCBmbikgewogIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkgewogICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5ldmVyeS5jYWxsKGNvbGxlY3Rpb24sIGZuKTsKICB9CiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pLmV2ZXJ5KChrKSA9PiB7CiAgICByZXR1cm4gZm4oY29sbGVjdGlvbltrXSwgaywgY29sbGVjdGlvbik7CiAgfSk7Cn0KZnVuY3Rpb24gbWFwIChjb2xsZWN0aW9uLCBmbikgewogIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkgewogICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChjb2xsZWN0aW9uLCBmbik7CiAgfQogIGNvbnN0IG1hcHBlZCA9IE9iamVjdC5hc3NpZ24oe30sIGNvbGxlY3Rpb24pOwogIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1hcHBlZCkuZm9yRWFjaCgoaykgPT4gewogICAgbWFwcGVkW2tdID0gZm4oY29sbGVjdGlvbltrXSwgaywgY29sbGVjdGlvbik7CiAgfSk7CiAgcmV0dXJuIG1hcHBlZDsKfQpmdW5jdGlvbiBmaW5kIChjb2xsZWN0aW9uLCBmbikgewogIGZvciAoY29uc3QgW2ssIHZdIG9mIGVudW1lcmF0ZShjb2xsZWN0aW9uKSkgewogICAgY29uc3QgciA9IGZuKHYsIGssIGNvbGxlY3Rpb24pOwogICAgaWYgKHIgIT09IG5vbmUpIHsKICAgICAgcmV0dXJuIFtrLCB2LCByXTsKICAgIH0KICB9CiAgcmV0dXJuIFtub25lLCBub25lLCBub25lXTsKfQpmdW5jdGlvbiAqIGVudW1lcmF0ZSAoY29sbGVjdGlvbikgewogIGlmIChpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkgewogICAgeWllbGQgKiBBcnJheS5wcm90b3R5cGUuZW50cmllcy5jYWxsKGNvbGxlY3Rpb24pOwogICAgcmV0dXJuOwogIH0KICBjb25zdCBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY29sbGVjdGlvbik7CiAgZm9yIChjb25zdCBrIG9mIGtleXMpIHsKICAgIHlpZWxkIFtrLCBjb2xsZWN0aW9uW2tdXTsKICB9Cn0KZnVuY3Rpb24gaXNBcnJheUxpa2UgKGNvbGxlY3Rpb24pIHsKICByZXR1cm4gQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSB8fCBpc05vZGVMaXN0KGNvbGxlY3Rpb24pOwp9CmZ1bmN0aW9uIGlzTm9kZUxpc3QgKGNvbGxlY3Rpb24pIHsKICByZXR1cm4gY29sbGVjdGlvbi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnTm9kZUxpc3QnOwp9CmZ1bmN0aW9uIHBhcnRpYWwgKGZuLCAuLi5hcmdzKSB7CiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykgewogICAgdGhyb3cgbmV3IEFkc0J5cGFzc2VyRXJyb3IoJ211c3QgZ2l2ZSBhIGZ1bmN0aW9uJyk7CiAgfQogIHJldHVybiAoLi4uaW5uZXJBcmdzKSA9PiB7CiAgICByZXR1cm4gZm4oLi4uYXJncy5jb25jYXQoaW5uZXJBcmdzKSk7CiAgfTsKfQpmdW5jdGlvbiBpc1N0cmluZyAodmFsdWUpIHsKICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHx8ICh2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZyk7Cn0KZnVuY3Rpb24gbm9wICgpIHsKfQpjb25zdCBub25lID0gbm9wOwpmdW5jdGlvbiB3YWl0IChtc0RlbGF5KSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIG1zRGVsYXkpOwogIH0pOwp9CmZ1bmN0aW9uIHRyeUV2ZXJ5IChtc0ludGVydmFsLCBmbikgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgY29uc3QgaGFuZGxlID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICBjb25zdCByZXN1bHQgPSBmbigpOwogICAgICBpZiAocmVzdWx0ICE9PSBub25lKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbChoYW5kbGUpOwogICAgICAgIHJlc29sdmUocmVzdWx0KTsKICAgICAgfQogICAgfSwgbXNJbnRlcnZhbCk7CiAgfSk7Cn0KIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicmVnaXN0ZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZ2lzdGVyOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZmluZEhhbmRsZXIiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZpbmRIYW5kbGVyOyB9KTsKIHZhciB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CmNvbnN0IHBhdHRlcm5zID0gW107CmZ1bmN0aW9uIHJlZ2lzdGVyIChwYXR0ZXJuKSB7CiAgcGF0dGVybnMucHVzaChwYXR0ZXJuKTsKfQpmdW5jdGlvbiBkaXNwYXRjaEJ5T2JqZWN0IChydWxlLCB1cmxfNikgewogIGNvbnN0IG1hdGNoZWQgPSBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm1hcCJdKShydWxlLCAocGF0dGVybiwgcGFydCkgPT4gewogICAgaWYgKHBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHApIHsKICAgICAgcmV0dXJuIHVybF82W3BhcnRdLm1hdGNoKHBhdHRlcm4pOwogICAgfQogICAgaWYgKEFycmF5LmlzQXJyYXkocGF0dGVybikpIHsKICAgICAgY29uc3QgWywgLCByXSA9IE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZmluZCJdKShwYXR0ZXJuLCAoc3ApID0+IHsKICAgICAgICBjb25zdCBtID0gdXJsXzZbcGFydF0ubWF0Y2goc3ApOwogICAgICAgIHJldHVybiBtIHx8IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl07CiAgICAgIH0pOwogICAgICByZXR1cm4gciAhPT0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXSA/IHIgOiBudWxsOwogICAgfQogICAgdGhyb3cgbmV3IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBZHNCeXBhc3NlckVycm9yIl0oJ2ludmFsaWQgcnVsZScpOwogIH0pOwogIGNvbnN0IHBhc3NlZCA9IE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZXZlcnkiXSkobWF0Y2hlZCwgKHYpID0+IHsKICAgIHJldHVybiAhIXY7CiAgfSk7CiAgcmV0dXJuIHBhc3NlZCA/IG1hdGNoZWQgOiBudWxsOwp9CmZ1bmN0aW9uIGRpc3BhdGNoQnlSZWdFeHAgKHJ1bGUsIHVybF8xKSB7CiAgcmV0dXJuIHVybF8xLm1hdGNoKHJ1bGUpOwp9CmZ1bmN0aW9uIGRpc3BhdGNoQnlBcnJheSAocnVsZXMsIHVybF8xLCB1cmxfMywgdXJsXzYpIHsKICBjb25zdCBbLCAsIHJdID0gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJmaW5kIl0pKHJ1bGVzLCAocnVsZSkgPT4gewogICAgY29uc3QgbSA9IGRpc3BhdGNoKHJ1bGUsIHVybF8xLCB1cmxfMywgdXJsXzYpOwogICAgcmV0dXJuIG0gPyBtIDogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXTsKICB9KTsKICByZXR1cm4gciAhPT0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXSA/IHIgOiBudWxsOwp9CmZ1bmN0aW9uIGRpc3BhdGNoQnlTdHJpbmcgKHJ1bGUsIHVybF8zKSB7CiAgbGV0IHNjaGVtZSA9IC9cKnxodHRwcz98ZmlsZXxmdHB8Y2hyb21lLWV4dGVuc2lvbi87CiAgbGV0IGhvc3QgPSAvXCp8KFwqXC4pPyhbXi8qXSspLzsKICBsZXQgcGF0aCA9IC9cLy4qLzsKICBsZXQgdG1wID0gYF4oJHtzY2hlbWUuc291cmNlfSk6Ly8oJHtob3N0LnNvdXJjZX0pPygke3BhdGguc291cmNlfSkkYDsKICBsZXQgdXAgPSBuZXcgUmVnRXhwKHRtcCk7CiAgY29uc3QgbWF0Y2hlZCA9IHJ1bGUubWF0Y2godXApOwogIGlmICghbWF0Y2hlZCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNjaGVtZSA9IG1hdGNoZWRbMV07CiAgaG9zdCA9IG1hdGNoZWRbMl07CiAgY29uc3Qgd2MgPSBtYXRjaGVkWzNdOwogIGNvbnN0IHNkID0gbWF0Y2hlZFs0XTsKICBwYXRoID0gbWF0Y2hlZFs1XTsKICBpZiAoc2NoZW1lID09PSAnKicgJiYgIS9odHRwcz8vLnRlc3QodXJsXzMuc2NoZW1lKSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGlmIChzY2hlbWUgIT09IHVybF8zLnNjaGVtZSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGlmIChzY2hlbWUgIT09ICdmaWxlJyAmJiBob3N0ICE9PSAnKicpIHsKICAgIGlmICh3YykgewogICAgICB1cCA9IHVybF8zLmhvc3QuaW5kZXhPZihzZCk7CiAgICAgIGlmICh1cCA8IDAgfHwgdXAgKyBzZC5sZW5ndGggIT09IHVybF8zLmhvc3QubGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaG9zdCAhPT0gdXJsXzMuaG9zdCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CiAgdG1wID0gcGF0aC5yZXBsYWNlKC9bKi5bXF0/KyNdL2csIChjKSA9PiB7CiAgICBpZiAoYyA9PT0gJyonKSB7CiAgICAgIHJldHVybiAnLionOwogICAgfQogICAgcmV0dXJuICdcXCcgKyBjOwogIH0pOwogIHBhdGggPSBuZXcgUmVnRXhwKGBeJHt0bXB9JGApOwogIGlmICghcGF0aC50ZXN0KHVybF8zLnBhdGgpKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIHVybF8zOwp9CmZ1bmN0aW9uIGRpc3BhdGNoQnlGdW5jdGlvbiAocnVsZSwgdXJsXzEsIHVybF8zLCB1cmxfNikgewogIHJldHVybiBydWxlKHVybF8xLCB1cmxfMywgdXJsXzYpOwp9CmZ1bmN0aW9uIGRpc3BhdGNoIChydWxlLCB1cmxfMSwgdXJsXzMsIHVybF82KSB7CiAgaWYgKEFycmF5LmlzQXJyYXkocnVsZSkpIHsKICAgIHJldHVybiBkaXNwYXRjaEJ5QXJyYXkocnVsZSwgdXJsXzEsIHVybF8zLCB1cmxfNik7CiAgfQogIGlmICh0eXBlb2YgcnVsZSA9PT0gJ2Z1bmN0aW9uJykgewogICAgcmV0dXJuIGRpc3BhdGNoQnlGdW5jdGlvbihydWxlLCB1cmxfMSwgdXJsXzMsIHVybF82KTsKICB9CiAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBSZWdFeHApIHsKICAgIHJldHVybiBkaXNwYXRjaEJ5UmVnRXhwKHJ1bGUsIHVybF8xKTsKICB9CiAgaWYgKE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siaXNTdHJpbmciXSkocnVsZSkpIHsKICAgIHJldHVybiBkaXNwYXRjaEJ5U3RyaW5nKHJ1bGUsIHVybF8zKTsKICB9CiAgcmV0dXJuIGRpc3BhdGNoQnlPYmplY3QocnVsZSwgdXJsXzYpOwp9CmZ1bmN0aW9uIGZpbmRIYW5kbGVyICgpIHsKICBjb25zdCB1cmxfMSA9IHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpOwogIGNvbnN0IHVybF8zID0gewogICAgc2NoZW1lOiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wuc2xpY2UoMCwgLTEpLAogICAgaG9zdDogd2luZG93LmxvY2F0aW9uLmhvc3QsCiAgICBwYXRoOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgd2luZG93LmxvY2F0aW9uLmhhc2gsCiAgfTsKICBjb25zdCB1cmxfNiA9IHsKICAgIHNjaGVtZTogd2luZG93LmxvY2F0aW9uLnByb3RvY29sLAogICAgaG9zdDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLAogICAgcG9ydDogd2luZG93LmxvY2F0aW9uLnBvcnQsCiAgICBwYXRoOiB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsCiAgICBxdWVyeTogd2luZG93LmxvY2F0aW9uLnNlYXJjaCwKICAgIGhhc2g6IHdpbmRvdy5sb2NhdGlvbi5oYXNoLAogIH07CiAgY29uc3QgW2ksIHBhdHRlcm4sIG1hdGNoZWRdID0gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJmaW5kIl0pKHBhdHRlcm5zLCAocGF0dGVybikgPT4gewogICAgY29uc3QgbSA9IGRpc3BhdGNoKHBhdHRlcm4ucnVsZSwgdXJsXzEsIHVybF8zLCB1cmxfNik7CiAgICByZXR1cm4gbSA/IG0gOiB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9uZSJdOwogIH0pOwogIGlmIChpID09PSB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9uZSJdKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgaWYgKCFwYXR0ZXJuLnN0YXJ0ICYmICFwYXR0ZXJuLnJlYWR5KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIHsKICAgIHN0YXJ0OiBwYXR0ZXJuLnN0YXJ0ID8gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJwYXJ0aWFsIl0pKHBhdHRlcm4uc3RhcnQsIG1hdGNoZWQpIDogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vcCJdLAogICAgcmVhZHk6IHBhdHRlcm4ucmVhZHkgPyBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInBhcnRpYWwiXSkocGF0dGVybi5yZWFkeSwgbWF0Y2hlZCkgOiB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9wIl0sCiAgfTsKfQogfSksCiAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJyYXdVU1ciLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJhd1VTVzsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInVzdyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdXN3OyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiR01BUEkiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEdNQVBJOyB9KTsKIHZhciB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CmNvbnN0IHJhd1VTVyA9IGdldFVuc2FmZVdpbmRvdygpOwpjb25zdCB1c3cgPSBnZXRVbnNhZmVXaW5kb3dQcm94eSgpOwpjb25zdCBHTUFQSSA9IGdldEdyZWFzZU1vbmtleUFQSSgpOwpmdW5jdGlvbiBnZXRVbnNhZmVXaW5kb3cgKCkgewogIGxldCB3ID0gbnVsbDsKICB0cnkgewogICAgdyA9IHVuc2FmZVdpbmRvdzsKICB9IGNhdGNoIChlKSB7CiAgICB0cnkgewogICAgICB3ID0gKDAsIGV2YWwpKCd0aGlzJykuZ2xvYmFsOwogICAgfSBjYXRjaCAoZSkgewogICAgfQogIH0KICByZXR1cm4gdyA/IHcgOiAoMCwgZXZhbCkoJ3RoaXMnKS53aW5kb3c7Cn0KZnVuY3Rpb24gZ2V0R3JlYXNlTW9ua2V5QVBJICgpIHsKICBpZiAocmF3VVNXLmdsb2JhbCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGNvbnN0IGdtID0ge307CiAgaWYgKHR5cGVvZiBHTV9vcGVuSW5UYWIgPT09ICdmdW5jdGlvbicpIHsKICAgIGdtLm9wZW5JblRhYiA9IEdNX29wZW5JblRhYjsKICB9IGVsc2UgewogICAgZ20ub3BlbkluVGFiID0gR00ub3BlbkluVGFiOwogIH0KICBpZiAodHlwZW9mIEdNX2dldFZhbHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICBnbS5nZXRWYWx1ZSA9IChuYW1lLCBkZWZhdWx0XykgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEdNX2dldFZhbHVlKG5hbWUsIGRlZmF1bHRfKSk7CiAgICB9OwogIH0gZWxzZSB7CiAgICBnbS5nZXRWYWx1ZSA9IEdNLmdldFZhbHVlOwogIH0KICBpZiAodHlwZW9mIEdNX3NldFZhbHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICBnbS5zZXRWYWx1ZSA9IChuYW1lLCB2YWx1ZSkgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEdNX3NldFZhbHVlKG5hbWUsIHZhbHVlKSk7CiAgICB9OwogIH0gZWxzZSB7CiAgICBnbS5zZXRWYWx1ZSA9IEdNLnNldFZhbHVlOwogIH0KICBpZiAodHlwZW9mIEdNX2RlbGV0ZVZhbHVlID09PSAnZnVuY3Rpb24nKSB7CiAgICBnbS5kZWxldGVWYWx1ZSA9IChuYW1lKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoR01fZGVsZXRlVmFsdWUobmFtZSkpOwogICAgfTsKICB9IGVsc2UgewogICAgZ20uZGVsZXRlVmFsdWUgPSBHTS5kZWxldGVWYWx1ZTsKICB9CiAgaWYgKHR5cGVvZiBHTV94bWxodHRwUmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykgewogICAgZ20ueG1sSHR0cFJlcXVlc3QgPSBHTV94bWxodHRwUmVxdWVzdDsKICB9IGVsc2UgewogICAgZ20ueG1sSHR0cFJlcXVlc3QgPSBHTS54bWxIdHRwUmVxdWVzdDsKICB9CiAgaWYgKHR5cGVvZiBHTV9yZWdpc3Rlck1lbnVDb21tYW5kID09PSAnZnVuY3Rpb24nKSB7CiAgICBnbS5yZWdpc3Rlck1lbnVDb21tYW5kID0gR01fcmVnaXN0ZXJNZW51Q29tbWFuZDsKICB9IGVsc2UgewogICAgZ20ucmVnaXN0ZXJNZW51Q29tbWFuZCA9IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub3AiXTsKICB9CiAgaWYgKHR5cGVvZiBHTV9nZXRSZXNvdXJjZVVSTCA9PT0gJ2Z1bmN0aW9uJykgewogICAgZ20uZ2V0UmVzb3VyY2VVcmwgPSAocmVzb3VyY2VOYW1lKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoR01fZ2V0UmVzb3VyY2VVUkwocmVzb3VyY2VOYW1lKSk7CiAgICB9OwogIH0gZWxzZSBpZiAodHlwZW9mIEdNID09PSAnb2JqZWN0JyAmJiBHTSAmJiBHTS5nZXRSZXNvdXJjZVVybCkgewogICAgZ20uZ2V0UmVzb3VyY2VVcmwgPSBHTS5nZXRSZXNvdXJjZVVybDsKICB9CiAgcmV0dXJuIGdtOwp9CmNvbnN0IE1BR0lDX0tFWSA9ICdfX2Fkc2J5cGFzc2VyX3JldmVyc2VfcHJveHlfXyc7CmZ1bmN0aW9uIGdldFVuc2FmZVdpbmRvd1Byb3h5ICgpIHsKICBjb25zdCBpc0ZpcmVmb3ggPSB0eXBlb2YgSW5zdGFsbFRyaWdnZXIgIT09ICd1bmRlZmluZWQnOwogIGNvbnN0IGlzV2ViRXh0ZW5zaW9uID0gdHlwZW9mIGNsb25lSW50byA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGV4cG9ydEZ1bmN0aW9uID09PSAndW5kZWZpbmVkJzsKICBpZiAoIWlzRmlyZWZveCB8fCBpc1dlYkV4dGVuc2lvbikgewogICAgcmV0dXJuIHJhd1VTVzsKICB9CiAgY29uc3QgZGVjb3JhdG9yID0gewogICAgc2V0ICh0YXJnZXQsIGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSA9PT0gTUFHSUNfS0VZKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0YXJnZXQgPT09IHVuc2FmZVdpbmRvdyAmJiBrZXkgPT09ICdvcGVuJykgewogICAgICAgIGNvbnN0IGQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTsKICAgICAgICBkLnZhbHVlID0gY2xvbmUoZnVuY3Rpb24gKCkgewogICAgICAgICAgY29uc3QgcnYgPSB2YWx1ZSgpOwogICAgICAgICAgcmV0dXJuIGNsb25lSW50byhydiwgdW5zYWZlV2luZG93KTsKICAgICAgICB9KTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRhcmdldFtrZXldID0gY2xvbmUodmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSwKICAgIGdldCAodGFyZ2V0LCBrZXkpIHsKICAgICAgaWYgKGtleSA9PT0gTUFHSUNfS0VZKSB7CiAgICAgICAgcmV0dXJuIHRhcmdldDsKICAgICAgfQogICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtrZXldOwogICAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlOwogICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgKHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZSAhPT0gJ29iamVjdCcpKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgUHJveHkodmFsdWUsIGRlY29yYXRvcik7CiAgICB9LAogICAgYXBwbHkgKHRhcmdldCwgc2VsZiwgYXJncykgewogICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7CiAgICAgIGlmICh0YXJnZXQgPT09IHVuc2FmZVdpbmRvdy5PYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgICAgICBhcmdzWzBdID0gYXJnc1swXVtNQUdJQ19LRVldOwogICAgICB9CiAgICAgIGlmICh0YXJnZXQgPT09IHVuc2FmZVdpbmRvdy5GdW5jdGlvbi5hcHBseSkgewogICAgICAgIHNlbGYgPSBzZWxmW01BR0lDX0tFWV07CiAgICAgICAgYXJnc1sxXSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3NbMV0pOwogICAgICB9CiAgICAgIGlmICh0YXJnZXQgPT09IHVuc2FmZVdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKSB7CiAgICAgICAgc2VsZiA9IHNlbGZbTUFHSUNfS0VZXTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0ID09PSB1bnNhZmVXaW5kb3cuZG9jdW1lbnQud3JpdGUpIHsKICAgICAgICBzZWxmID0gc2VsZltNQUdJQ19LRVldOwogICAgICB9CiAgICAgIGNvbnN0IHVzYXJncyA9IGNsb25lKGFyZ3MpOwogICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KHNlbGYsIHVzYXJncyk7CiAgICB9LAogICAgY29uc3RydWN0ICh0YXJnZXQsIGFyZ3MpIHsKICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpOwogICAgICBhcmdzLnVuc2hpZnQodW5kZWZpbmVkKTsKICAgICAgY29uc3QgdXNhcmdzID0gY2xvbmUoYXJncyk7CiAgICAgIGNvbnN0IGJpbmQgPSB1bnNhZmVXaW5kb3cuRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7CiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkodGFyZ2V0LCB1c2FyZ3MpKTsKICAgIH0sCiAgfTsKICByZXR1cm4gbmV3IFByb3h5KHVuc2FmZVdpbmRvdywgZGVjb3JhdG9yKTsKfQpmdW5jdGlvbiBjbG9uZSAoc2FmZSkgewogIGlmIChzYWZlID09PSBudWxsIHx8ICEoc2FmZSBpbnN0YW5jZW9mIE9iamVjdCkpIHsKICAgIHJldHVybiBzYWZlOwogIH0KICBpZiAoc2FmZSA9PT0gdW5zYWZlV2luZG93KSB7CiAgICByZXR1cm4gc2FmZTsKICB9CiAgaWYgKHNhZmUgaW5zdGFuY2VvZiBTdHJpbmcpIHsKICAgIHJldHVybiBzYWZlLnRvU3RyaW5nKCk7CiAgfQogIGlmIChzYWZlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHsKICAgIHJldHVybiBleHBvcnRGdW5jdGlvbihzYWZlLCB1bnNhZmVXaW5kb3csIHsKICAgICAgYWxsb3dDcm9zc09yaWdpbkFyZ3VtZW50czogdHJ1ZSwKICAgIH0pOwogIH0KICBpZiAoc2FmZSBpbnN0YW5jZW9mIEFycmF5KSB7CiAgICBjb25zdCB1bnNhZmUgPSBuZXcgdW5zYWZlV2luZG93LkFycmF5KCk7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNhZmUubGVuZ3RoOyArK2kpIHsKICAgICAgdW5zYWZlLnB1c2goY2xvbmUoc2FmZVtpXSkpOwogICAgfQogICAgcmV0dXJuIHVuc2FmZTsKICB9CiAgY29uc3QgdW5zYWZlID0gbmV3IHVuc2FmZVdpbmRvdy5PYmplY3QoKTsKICBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZvckVhY2giXSkoc2FmZSwgKHYsIGspID0+IHsKICAgIHVuc2FmZVtrXSA9IGNsb25lKHYpOwogIH0pOwogIHJldHVybiB1bnNhZmU7Cn0KIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZHVtcENvbmZpZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZHVtcENvbmZpZzsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImxvYWRDb25maWciLCBmdW5jdGlvbigpIHsgcmV0dXJuIGxvYWRDb25maWc7IH0pOwogdmFyIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKIHZhciB1dGlsX2Rpc3BhdGNoZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CiB2YXIgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKY29uc3QgTUFOSUZFU1QgPSBbCiAgewogICAga2V5OiAndmVyc2lvbicsCiAgICBkZWZhdWx0XzogMCwKICAgIHZlcmlmeSAodikgewogICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIHYgPj0gMDsKICAgIH0sCiAgICBub3JtYWxpemU6IHRvTnVtYmVyLAogIH0sCiAgewogICAga2V5OiAnYWxpZ25fY2VudGVyJywKICAgIGRlZmF1bHRfOiB0cnVlLAogICAgdmVyaWZ5OiBpc0Jvb2xlYW4sCiAgICBub3JtYWxpemU6IHRvQm9vbGVhbiwKICB9LAogIHsKICAgIGtleTogJ2NoYW5nZV9iYWNrZ3JvdW5kJywKICAgIGRlZmF1bHRfOiB0cnVlLAogICAgdmVyaWZ5OiBpc0Jvb2xlYW4sCiAgICBub3JtYWxpemU6IHRvQm9vbGVhbiwKICB9LAogIHsKICAgIGtleTogJ3JlZGlyZWN0X2ltYWdlJywKICAgIGRlZmF1bHRfOiB0cnVlLAogICAgdmVyaWZ5OiBpc0Jvb2xlYW4sCiAgICBub3JtYWxpemU6IHRvQm9vbGVhbiwKICB9LAogIHsKICAgIGtleTogJ3NjYWxlX2ltYWdlJywKICAgIGRlZmF1bHRfOiB0cnVlLAogICAgdmVyaWZ5OiBpc0Jvb2xlYW4sCiAgICBub3JtYWxpemU6IHRvQm9vbGVhbiwKICB9LAogIHsKICAgIGtleTogJ2xvZ19sZXZlbCcsCiAgICBkZWZhdWx0XzogMSwKICAgIHZlcmlmeSAodikgewogICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdudW1iZXInICYmIHYgPj0gMCAmJiB2IDw9IDI7CiAgICB9LAogICAgbm9ybWFsaXplOiB0b051bWJlciwKICB9LApdOwpjb25zdCBQQVRDSEVTID0gWwogIGFzeW5jICgpID0+IHsKICAgIGNvbnN0IGFsaWduQ2VudGVyID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKCdhbGlnbl9jZW50ZXInKTsKICAgIGNvbnN0IGNoYW5nZUJhY2tncm91bmQgPSBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoJ2NoYW5nZV9iYWNrZ3JvdW5kJyk7CiAgICBjb25zdCBzY2FsZUltYWdlID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKCdzY2FsZV9pbWFnZScpOwogICAgY29uc3QgcmVkaXJlY3RJbWFnZSA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgncmVkaXJlY3RfaW1hZ2UnKTsKICAgIGNvbnN0IGFjID0gdHlwZW9mIGFsaWduQ2VudGVyID09PSAnYm9vbGVhbic7CiAgICBpZiAodHlwZW9mIGNoYW5nZUJhY2tncm91bmQgIT09ICdib29sZWFuJykgewogICAgICBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uc2V0VmFsdWUoJ2NoYW5nZV9iYWNrZ3JvdW5kJywgYWMgPyBhbGlnbkNlbnRlciA6IHRydWUpOwogICAgfQogICAgaWYgKHR5cGVvZiBzY2FsZUltYWdlICE9PSAnYm9vbGVhbicpIHsKICAgICAgYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLnNldFZhbHVlKCdzY2FsZV9pbWFnZScsIGFjID8gYWxpZ25DZW50ZXIgOiB0cnVlKTsKICAgIH0KICAgIGlmICghYWMpIHsKICAgICAgYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLnNldFZhbHVlKCdhbGlnbl9jZW50ZXInLCB0cnVlKTsKICAgIH0KICAgIGlmICh0eXBlb2YgcmVkaXJlY3RJbWFnZSAhPT0gJ2Jvb2xlYW4nKSB7CiAgICAgIGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5zZXRWYWx1ZSgncmVkaXJlY3RfaW1hZ2UnLCB0cnVlKTsKICAgIH0KICB9LAogIGFzeW5jICgpID0+IHsKICAgIGNvbnN0IGV4dGVybmFsU2VydmVyU3VwcG9ydCA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgnZXh0ZXJuYWxfc2VydmVyX3N1cHBvcnQnKTsKICAgIGlmICh0eXBlb2YgZXh0ZXJuYWxTZXJ2ZXJTdXBwb3J0ICE9PSAnYm9vbGVhbicpIHsKICAgICAgYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLnNldFZhbHVlKCdleHRlcm5hbF9zZXJ2ZXJfc3VwcG9ydCcsIGZhbHNlKTsKICAgIH0KICB9LAogIGFzeW5jICgpID0+IHsKICAgIGNvbnN0IGxvZ0xldmVsID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKCdsb2dfbGV2ZWwnKTsKICAgIGlmICh0eXBlb2YgbG9nTGV2ZWwgIT09ICdudW1iZXInKSB7CiAgICAgIGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5zZXRWYWx1ZSgnbG9nX2xldmVsJywgMSk7CiAgICB9CiAgfSwKICBhc3luYyAoKSA9PiB7CiAgICBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZGVsZXRlVmFsdWUoJ2V4dGVybmFsX3NlcnZlcl9zdXBwb3J0Jyk7CiAgfSwKXTsKZnVuY3Rpb24gaXNCb29sZWFuICh2KSB7CiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnYm9vbGVhbic7Cn0KZnVuY3Rpb24gdG9Cb29sZWFuICh2KSB7CiAgcmV0dXJuICEhdjsKfQpmdW5jdGlvbiB0b051bWJlciAodikgewogIHJldHVybiBwYXJzZUludCh2LCAxMCk7Cn0KYXN5bmMgZnVuY3Rpb24gc2VuaXR5Q2hlY2sgKCkgewogIGxldCB2ZXJpZnlSZXN1bHRzID0gTUFOSUZFU1QubWFwKGFzeW5jIChkZXNjcmlwdG9yKSA9PiB7CiAgICBjb25zdCBydiA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZShkZXNjcmlwdG9yLmtleSk7CiAgICByZXR1cm4gZGVzY3JpcHRvci52ZXJpZnkocnYpOwogIH0pOwogIHZlcmlmeVJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbCh2ZXJpZnlSZXN1bHRzKTsKICBjb25zdCBvayA9IE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZXZlcnkiXSkodmVyaWZ5UmVzdWx0cywgdiA9PiB2KTsKICBpZiAoIW9rKSB7CiAgICBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uc2V0VmFsdWUoJ3ZlcnNpb24nLCAwKTsKICB9Cn0KYXN5bmMgZnVuY3Rpb24gbWlncmF0ZSAoKSB7CiAgbGV0IGN1cnJlbnRWZXJzaW9uID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKCd2ZXJzaW9uJyk7CiAgaWYgKGN1cnJlbnRWZXJzaW9uICE9PSAwICYmICFjdXJyZW50VmVyc2lvbikgewogICAgdGhyb3cgbmV3IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBZHNCeXBhc3NlckVycm9yIl0oJ2ludmFsaWQgdmVyc2lvbicpOwogIH0KICB3aGlsZSAoY3VycmVudFZlcnNpb24gPCBQQVRDSEVTLmxlbmd0aCkgewogICAgUEFUQ0hFU1tjdXJyZW50VmVyc2lvbl0oKTsKICAgICsrY3VycmVudFZlcnNpb247CiAgfQogIGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5zZXRWYWx1ZSgndmVyc2lvbicsIGN1cnJlbnRWZXJzaW9uKTsKfQphc3luYyBmdW5jdGlvbiBsb2FkQ29uZmlnICgpIHsKICBhd2FpdCBzZW5pdHlDaGVjaygpOwogIGF3YWl0IG1pZ3JhdGUoKTsKICBPYmplY3QodXRpbF9kaXNwYXRjaGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInJlZ2lzdGVyIl0pKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15hZHNieXBhc3NlclwuZ2l0aHViXC5pbyQvLAogICAgICBwYXRoOiAvXlwvY29uZmlndXJlXC5odG1sJC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBhd2FpdCB3YWl0Rm9yUGFnZSgpOwogICAgICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVzdyJdLmNvbW1pdCA9IGFzeW5jIChkYXRhKSA9PiB7CiAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHsKICAgICAgICAgIGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5zZXRWYWx1ZShrLCB2KTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sidXN3Il0ucmVuZGVyKHsKICAgICAgICB2ZXJzaW9uOiBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoJ3ZlcnNpb24nKSwKICAgICAgICBvcHRpb25zOiB7CiAgICAgICAgICBhbGlnbl9jZW50ZXI6IHsKICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JywKICAgICAgICAgICAgdmFsdWU6IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgnYWxpZ25fY2VudGVyJyksCiAgICAgICAgICAgIGxhYmVsOiAnQWxpZ24gQ2VudGVyJywKICAgICAgICAgICAgaGVscDogJ0FsaWduIGltYWdlIHRvIHRoZSBjZW50ZXIgaWYgcG9zc2libGUuIChkZWZhdWx0OiBlbmFibGVkKScsCiAgICAgICAgICB9LAogICAgICAgICAgY2hhbmdlX2JhY2tncm91bmQ6IHsKICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JywKICAgICAgICAgICAgdmFsdWU6IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgnY2hhbmdlX2JhY2tncm91bmQnKSwKICAgICAgICAgICAgbGFiZWw6ICdDaGFuZ2UgQmFja2dyb3VuZCcsCiAgICAgICAgICAgIGhlbHA6ICdVc2UgRmlyZWZveC1saWtlIGltYWdlIGJhY2tncm91bmQgaWYgcG9zc2libGUuIChkZWZhdWx0OiBlbmFibGVkKScsCiAgICAgICAgICB9LAogICAgICAgICAgcmVkaXJlY3RfaW1hZ2U6IHsKICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JywKICAgICAgICAgICAgdmFsdWU6IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgncmVkaXJlY3RfaW1hZ2UnKSwKICAgICAgICAgICAgbGFiZWw6ICdSZWRpcmVjdCBJbWFnZScsCiAgICAgICAgICAgIGhlbHA6IFsKICAgICAgICAgICAgICAnRGlyZWN0bHkgb3BlbiBpbWFnZSBsaW5rIGlmIHBvc3NpYmxlLiAoZGVmYXVsdDogZW5hYmxlZCknLAogICAgICAgICAgICAgICdJZiBkaXNhYmxlZCwgcmVkaXJlY3Rpb24gd2lsbCBvbmx5IHdvcmtzIG9uIGxpbmsgc2hvcnRlbmVyIHNpdGVzLicsCiAgICAgICAgICAgIF0uam9pbignPGJyLz5cbicpLAogICAgICAgICAgfSwKICAgICAgICAgIHNjYWxlX2ltYWdlOiB7CiAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsCiAgICAgICAgICAgIHZhbHVlOiBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoJ3NjYWxlX2ltYWdlJyksCiAgICAgICAgICAgIGxhYmVsOiAnU2NhbGUgSW1hZ2UnLAogICAgICAgICAgICBoZWxwOiAnV2hlbiBpbWFnZSBsb2FkZWQsIHNjYWxlIGl0IHRvIGZpdCB3aW5kb3cgaWYgcG9zc2libGUuIChkZWZhdWx0OiBlbmFibGVkKScsCiAgICAgICAgICB9LAogICAgICAgICAgbG9nX2xldmVsOiB7CiAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLAogICAgICAgICAgICB2YWx1ZTogYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKCdsb2dfbGV2ZWwnKSwKICAgICAgICAgICAgbWVudTogWwogICAgICAgICAgICAgIFswLCAnMCAocXVpZXQpJ10sCiAgICAgICAgICAgICAgWzEsICcxIChkZWZhdWx0KSddLAogICAgICAgICAgICAgIFsyLCAnMiAodmVyYm9zZSknXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbGFiZWw6ICdMb2cgTGV2ZWwnLAogICAgICAgICAgICBoZWxwOiBbCiAgICAgICAgICAgICAgJ0xvZyBsZXZlbCBpbiBkZXZlbG9wZXIgY29uc29sZS4gKGRlZmF1bHQ6IDEpJywKICAgICAgICAgICAgICAnMCB3aWxsIG5vdCBwcmludCBhbnl0aGluZyBpbiBjb25zb2xlLicsCiAgICAgICAgICAgICAgJzEgd2lsbCBvbmx5IHByaW50IGxvZ3Mgb24gYWZmZWN0ZWQgc2l0ZXMuJywKICAgICAgICAgICAgICAnMiB3aWxsIHByaW50IG9uIGFueSBzaXRlcy4nLAogICAgICAgICAgICBdLmpvaW4oJzxici8+XG4nKSwKICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgICAgfSk7CiAgICB9LAogIH0pOwp9CmZ1bmN0aW9uIHdhaXRGb3JQYWdlICgpIHsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgIGNvbnN0IGkgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgIGlmICh1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVzdyJdLnJlbmRlcikgewogICAgICAgIGNsZWFySW50ZXJ2YWwoaSk7CiAgICAgICAgcmVzb2x2ZSgpOwogICAgICB9CiAgICB9LCA1MCk7CiAgfSk7Cn0KYXN5bmMgZnVuY3Rpb24gZHVtcENvbmZpZyAoKSB7CiAgbGV0IHJ2ID0gTUFOSUZFU1QubWFwKGFzeW5jIChkZXNjcmlwdG9yKSA9PiB7CiAgICByZXR1cm4gW2Rlc2NyaXB0b3Iua2V5LCBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoZGVzY3JpcHRvci5rZXkpXTsKICB9KTsKICBydiA9IGF3YWl0IFByb21pc2UuYWxsKHJ2KTsKICBjb25zdCBvID0ge307CiAgZm9yIChjb25zdCBbaywgdl0gb2YgcnYpIHsKICAgIG9ba10gPSB2OwogIH0KICByZXR1cm4gbzsKfQogfSksCiAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJkZWJ1ZyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVidWc7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJpbmZvIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbmZvOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAid2FybiIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gd2FybjsgfSk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwpjb25zdCBxdWlldCA9IGZhbHNlOwpmdW5jdGlvbiBsb2cgKG1ldGhvZCwgYXJncykgewogIGlmIChxdWlldCkgewogICAgcmV0dXJuOwogIH0KICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7CiAgaWYgKE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siaXNTdHJpbmciXSkoYXJnc1swXSkpIHsKICAgIGFyZ3NbMF0gPSAnQWRzQnlwYXNzZXI6ICcgKyBhcmdzWzBdOwogIH0gZWxzZSB7CiAgICBhcmdzLnVuc2hpZnQoJ0Fkc0J5cGFzc2VyOicpOwogIH0KICBjb25zdCBmID0gY29uc29sZVttZXRob2RdOwogIGlmICh0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJykgewogICAgZi5hcHBseShjb25zb2xlLCBhcmdzKTsKICB9Cn0KZnVuY3Rpb24gZGVidWcgKCkgewogIGxvZygnZGVidWcnLCBhcmd1bWVudHMpOwp9CmZ1bmN0aW9uIGluZm8gKCkgewogIGxvZygnaW5mbycsIGFyZ3VtZW50cyk7Cn0KZnVuY3Rpb24gd2FybiAoKSB7CiAgbG9nKCd3YXJuJywgYXJndW1lbnRzKTsKfQogfSksCiAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogdmFyIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYWtvYW1cLm5ldCQvLAogICAgcGF0aDogL15cL2Rvd25sb2FkXC8oW14vXSspXC8vLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGxldCBkYXRhID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnBvc3QobG9jYXRpb24uaHJlZiwgbS5wYXRoWzFdKTsKICAgIHRyeSB7CiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FybignSlNPTiBlcnJvcjonLCBlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRhdGEuZGlyZWN0X2xpbmspOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9jb29scm9tXC5jb20kLywKICAgIHBhdGg6IC9eXC9kbHBvcFwucGhwJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtYXRjaGVzID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC88Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iKFteIl0rKSI+Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobWF0Y2hlc1sxXSk7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL14od3d3XC4pP2RsLXByb3RlY3RcLmNvbSQvLAogICAgICBwYXRoOiAvXC9bQS1aMC05XSsvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgaWYgKF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjY2FwdGNoYScpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnZm9ybVtuYW1lPWNjZXJ1cmVdJyk7CiAgICAgIGlmIChmKSB7CiAgICAgICAgY29uc3QgaUluID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W2lkPWluXScpOwogICAgICAgIGlmIChpSW4udmFsdWUpIHsKICAgICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDYwMCk7CiAgICAgICAgICBmLnN1Ym1pdCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBbLCAsIHBdID0gYXdhaXQgd2FpdERPTShpSW4sIHsKICAgICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgICAgIH0sIChtdXRhdGlvbikgPT4gewogICAgICAgICAgICBpZiAoIW11dGF0aW9uLnRhcmdldC52YWx1ZSB8fCBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lICE9PSAndmFsdWUnKSB7CiAgICAgICAgICAgICAgcmV0dXJuIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlJbi52YWx1ZSA9ICdUcmFja2luZyB0b28gbXVjaCBodXJ0cyB1c2Vyc1wnIHByaXZhY3knOwogICAgICAgICAgICBpZiAoIWNhbkZhc3RSZWRpcmVjdCgpKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg2MDApOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAocCkgewogICAgICAgICAgICBhd2FpdCBwOwogICAgICAgICAgICBmLnN1Ym1pdCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kJCgnI3NsaW5rcyA+IGEnKTsKICAgICAgaWYgKGwubGVuZ3RoID09PSAxKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGxbMF0uaHJlZik7CiAgICAgIH0KICAgIH0sCiAgfSk7CiAgZnVuY3Rpb24gY2FuRmFzdFJlZGlyZWN0ICgpIHsKICAgIHJldHVybiAhX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2Zvcm1bbmFtZT1jY2VydXJlXScpLm9uc3VibWl0ICYmICFfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnZm9ybVtuYW1lPWNjZXJ1cmVdIGlucHV0W25hbWU9cHdkXScpOwogIH0KICBmdW5jdGlvbiB3YWl0RE9NIChlbGVtZW50LCBjb25maWcsIGZuKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7CiAgICAgICAgY29uc3QgW2ssIHYsIHJdID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmZpbmQobXV0YXRpb25zLCBmbik7CiAgICAgICAgaWYgKGsgIT09IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lKSB7CiAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICByZXNvbHZlKFtrLCB2LCByXSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9KTsKICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBjb25maWcpOwogICAgfSk7CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZWxzZmlsZVwub3JnJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBkb3duID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNidG5fZG93bmxvYWQnKTsKICAgIGlmIChkb3duKSB7CiAgICAgIGRvd24uY2xpY2soKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgY291bnRkb3duID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNmcm1kbGNlbnRlcicpOwogICAgY29uc3QgbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgY29uc3Qgc3VibWl0ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2lucHV0W3R5cGU9InN1Ym1pdCJdW25hbWU9Im1ldGhvZF9mcmVlIl0nKTsKICAgICAgaWYgKHN1Ym1pdCkgewogICAgICAgIHN1Ym1pdC5jbGljaygpOwogICAgICB9CiAgICB9KTsKICAgIG8ub2JzZXJ2ZShjb3VudGRvd24sIHsKICAgICAgY2hpbGRMaXN0OiB0cnVlCiAgICB9KTsKICAgIGxldCBzY3JpcHQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoLy4qZXZhbFwoZnVuY3Rpb25cKHAsYSxjLGssZSxkXCkuKi8pOwogICAgaWYgKHNjcmlwdC5sZW5ndGggPiAwKSB7CiAgICAgIHNjcmlwdCA9IHNjcmlwdFswXS5yZXBsYWNlKCd8fGltcG9ydGFudCcsICd8MHxpbXBvcnRhbnQnKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmV2aWwoc2NyaXB0KTsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/ZW1iZWR1cGxvYWRcLmNvbSQvLAogICAgcGF0aDogL15cLyQvLAogICAgcXVlcnk6IC9eXD9cd3syfT1cdyskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGRvd25sb2FkUGFnZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuY2F0ZWdvcmllcyBhW3RhcmdldD1fYmxhbmtdJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZG93bmxvYWRQYWdlKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wuZmlsZXByb2plY3RcLmNvbVwuYnIkLywKICAgIHBhdGg6IC9eXC9maWxlc1wvKy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC88YSBpZD0iZG93biIgaHJlZj0iKFteIl0rKSI+Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXih3d3dcLik/aW5kaXNoYXJlXC4ob3JnfG1lKSQvLAogICAgICAvXmJkdXBsb2FkXC4oaW5mb3xhc2lhKSQvLAogICAgICAvXnVwZ3JhbmRcLnNpdGUkLywKICAgICAgL14zemZpbGVcLm5ldCQvLAogICAgICAvXnVwbG9hZHJhclwuY29tJC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYnRuID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2J1dHRvbiNkb3dubG9hZGJ0bi5kb3dubG9hZGJ0bicpOwogICAgYnRuLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTsKICAgIGJ0bi5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaW5zdXJhbmNlLXdhaWZ1XC5jZiQvLAogICAgcXVlcnk6IC91PSguKykkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZm9ybScpOwogICAgY29uc3QgYXJncyA9IHt9OwogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmZvckVhY2goZiwgKHYpID0+IHsKICAgICAgYXJnc1t2Lm5hbWVdID0gdi52YWx1ZTsKICAgIH0pOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdChmLmdldEF0dHJpYnV0ZSgnYWN0aW9uJyksIGFyZ3MpOwogICAgY29uc3QgbCA9IHJlc3BvbnNlLm1hdGNoKC93aW5kb3dcLmxvY2F0aW9uXC5ocmVmLicoW14nXSspJzsvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/amhlYmVyZ1wubmV0JC8sCiAgICBwYXRoOiAvXlwvY2FwdGNoYVwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuZGwtYnV0dG9uJykuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/amhlYmVyZ1wubmV0JC8sCiAgICBwYXRoOiAvXlwvcmVkaXJlY3RcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICAndXNlIHN0cmljdCc7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlQWxsVGltZXIoKTsKICAgIGNvbnN0IG1hdGNoZXMgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoLydzbHVnJzpccyonKFteJ10rKScsXHMqJ2hvc3Rlcic6XHMqJyhbXiddKyknLyk7CiAgICBjb25zdCBzbHVnID0gbWF0Y2hlc1sxXTsKICAgIGNvbnN0IGhvc3RlciA9IG1hdGNoZXNbMl07CiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KCcvZ2V0L2xpbmsvJywgewogICAgICBzbHVnLAogICAgICBob3N0ZXIsCiAgICB9KTsKICAgIGNvbnN0IHJlc3BKU09OID0gSlNPTi5wYXJzZShyZXNwb25zZSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocmVzcEpTT04udXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXm1pcnJvcmFjZVwuY29tJC8sCiAgICBwYXRoOiAvXlwvbVwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG1hID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2EudWstYnV0dG9uOm50aC1jaGlsZCgyKScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1hLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14od3d3XC4pP21pcnJvcmNyZWF0b3JcLmNvbSQvLAogICAgICAvXih3d3dcLik/bWlycm9yZWRcLnRvJC8sCiAgICBdLAogICAgcGF0aDogL15cL2Rvd25saW5rXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuY29sLXNtLmNlbnRlcmVkLmhpZ2hsaWdodCBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHd3d1wuKT9taXJyb3JjcmVhdG9yXC5jb20kLywKICAgICAgL14od3d3XC4pP21pcnJvcmVkXC50byQvLAogICAgXSwKICAgIHBhdGg6IC9eXC9maWxlc1wvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZGxfZm9ybScpLnN1Ym1pdCgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebXVsdGlmaWxlbWlycm9yXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG0gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2xjb2RlIGZvcm0gYnV0dG9uJyk7CiAgICBtLmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLm11bHRpdXBmaWxlXC5jb20kLywKICAgIHBhdGg6IC9eXC9mXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjeXcwJyk7CiAgICBmLnN1Ym1pdCgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebXlsaW5rZ2VuXC5jb20kLywKICAgIHBhdGg6IC9eXC9wXC8oLispJC8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKCcvZy8nICsgbS5wYXRoWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXm15bGlua2dlblwuY29tJC8sCiAgICBwYXRoOiAvXlwvZ1wvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI21haW4tY29udGVudCBhLmJ0bi5idG4tZGVmYXVsdCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3B1dGxvY2tlclwuY29tJC8sCiAgICBwYXRoOiAvXlwvZmlsZVwvWzAtOUEtRl0rJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBjID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb25maXJtX2Zvcm0nKTsKICAgIGMuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL151cGxvYWRoYXZlblwuY29tJC8sCiAgICBwYXRoOiAvXlwvZG93bmxvYWRcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg1MDAwKTsKICAgIGNvbnN0IGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmNvbnRhY3RGb3JtICNkb3dubG9hZE5vd0J0bi5idG4uYnRuLXByaW1hcnknKTsKICAgIGYuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/dXBtaXJyb3JcLmluZm8kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZXRDb29raWUoJ3VzZXInLCAncHBwJyk7CiAgICBpZiAoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNjb3VudERvd25UZXh0JykpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkpOwogICAgfQogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT92aWR0b1wubWUkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2J0bl9kb3dubG9hZCcpLmZvcm07CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg2ICogMTAwMCk7CiAgICBmLnN1Ym1pdCgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eenVwbG9hZFwubWUkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHogPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYnV0dG9uI2xpbmtfYnV0dG9uJyk7CiAgICB6LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTsKICAgIHouY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXjAxXC5ubCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpZnJhbWUjcmVkaXJlY3RmcmFtZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGYuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXjEwY29cLihiaXp8eHl6fGNvfG1lKSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuZ28nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhkLmRhdGFzZXQuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pPygxYmV8MWRsKVwuYml6JC8sCiAgICBwYXRoOiAvXlwvelwucGhwJC8sCiAgICBxdWVyeTogL15cPyguKykvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtLnF1ZXJ5WzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXigxYmV8MWRsKVwuYml6JC8sCiAgICBwYXRoOiAvXlwvW2p0XVwucGhwJC8sCiAgICBxdWVyeTogL15cP3M9LywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmotbGluaycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14xaW5rXC4oY2N8aW5mbykkLywKICAgIHBhdGg6IC9eXC9cdyskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCB1cmwgPSBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IoJ1tuYW1lPWtleXdvcmRzXScpLmNvbnRlbnQ7CiAgICBjb25zdCB1cmxDaGVjayA9IHVybC5tYXRjaCgvXmh0dHBzPzpcL1wvLyk7CiAgICBpZiAoIXVybENoZWNrKSB7CiAgICAgIHVybCA9ICdodHRwOi8vJyArIHVybDsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT8xdGlueVwubmV0JC8sCiAgICBwYXRoOiAvXC9cdysvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZGlyZWN0VXJsID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC93aW5kb3dcLmxvY2F0aW9uPScoW14nXSspJzsvKTsKICAgIGlmICghZGlyZWN0VXJsKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignc2NyaXB0IGNvbnRlbnQgY2hhbmdlZCcpOwogICAgfQogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRpcmVjdFVybFsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14xdlwudG8kLywKICAgIHBhdGg6IC9eXC90XC9bYS16QS1aMC05Lz1dKy8sCiAgfSwKICBhc3luYyBzdGFydCAoKSB7CiAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnL3QvJywgJy9zYWxpZW5kby8nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/NGZ1blwudHckLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI29yaWdpbmFsX3VybCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGkudmFsdWUpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYWQybGlua3NcLmNvbSQvLAogICAgcGF0aDogL15cL1x3LS4rJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh3aW5kb3cubG9jYXRpb24udG9TdHJpbmcoKSwgewogICAgICBwb3N0OiB7CiAgICAgICAgaW1hZ2U6ICdTa2lwIEFkLicsCiAgICAgIH0sCiAgICB9KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmFkNFwuZnIkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgY29uc3QgcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvInNyYyIsICIoW14iXSspIi8pOwogICAgaWYgKCFzKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YXJuKCdjaGFuZ2VkJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhzWzFdKTsKICB9LAp9KTsKKGZ1bmN0aW9uICgpIHsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmFkN1wuYml6JC8sCiAgICAgIHBhdGg6IC9eXC9cZCtcLyguKikkLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAobSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgICAgbGV0IHJlZGlyZWN0TGluayA9IG0ucGF0aFsxXTsKICAgICAgaWYgKCFyZWRpcmVjdExpbmsubWF0Y2goL15odHRwcz86XC9cLy8pKSB7CiAgICAgICAgcmVkaXJlY3RMaW5rID0gJ2h0dHA6Ly8nICsgcmVkaXJlY3RMaW5rOwogICAgICB9CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhyZWRpcmVjdExpbmspOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmFkN1wuYml6JC8sCiAgICAgIHBhdGg6IC9eXC9cdyskLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBjb25zdCBzY3JpcHQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoJ2NvbnN0IHJfdXJsJyk7CiAgICAgIGxldCB1cmwgPSBzY3JpcHQubWF0Y2goLyZ1cmw9KFteJl0rKS8pOwogICAgICB1cmwgPSB1cmxbMV07CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgfSwKICB9KTsKfSkoKTsKKGZ1bmN0aW9uICgpIHsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBbCiAgICAgICAgL14od3d3XC4pP2FkYlwudWckLywKICAgICAgICAvXih3d3dcLik/bHlua1wubXkkLywKICAgICAgICAvXih3d3dcLik/YWR5b3VcLihjb3xtZSkkLywKICAgICAgXSwKICAgICAgcGF0aDogL14oPyFcLyg/OnByaXZhY3l8dGVybXN8Y29udGFjdChcLy4qKT98Iy4qKT8kKS4qJC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgICAgY29uc3QgbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvdG9wXC5sb2NhdGlvblwuaHJlZj0iKFteIl0rKSIvKTsKICAgICAgaWYgKG0pIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobVsxXSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGFyZ3MgPSBhd2FpdCBnZXRBcmd1bWVudHMoKTsKICAgICAgdHJ5TGluayhhcmdzKTsKICAgIH0sCiAgfSk7CiAgZnVuY3Rpb24gZ2V0QXJndW1lbnRzICgpIHsKICAgIGNvbnN0IFBBVFRFUk4gPSAvXHtccypfYXJnc1tefV0rXH1bXn1dK1x9LzsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICBjb25zdCBtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKFBBVFRFUk4pOwogICAgICBpZiAobSkgewogICAgICAgIHJlc29sdmUobSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4gewogICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4gewogICAgICAgICAgbXV0YXRpb24uYWRkZWROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7CiAgICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ3NjcmlwdCcpIHsKICAgICAgICAgICAgICBjb25zdCBtID0gbm9kZS50ZXh0Q29udGVudC5tYXRjaChQQVRURVJOKTsKICAgICAgICAgICAgICBpZiAobSkgewogICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZShtKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7CiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICB9KTsKICAgIH0pLnRoZW4oKG0pID0+IHsKICAgICAgcmV0dXJuIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ldmlsKGAoJHttWzBdfSlgKTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiB0cnlMaW5rIChhcmdzKSB7CiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyAnL3NraXBfdGltZXInOwogICAgY29uc3QgaSA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnBvc3QodXJsLCBhcmdzKS50aGVuKCh0ZXh0KSA9PiB7CiAgICAgICAgY29uc3QgamogPSBKU09OLnBhcnNlKHRleHQpOwogICAgICAgIGlmICghamouZXJyb3JzICYmIGpqLm1lc3NhZ2VzKSB7CiAgICAgICAgICBjbGVhckludGVydmFsKGkpOwogICAgICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGpqLm1lc3NhZ2VzLnVybCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sIDEwMDApOwogIH0KfSkoKTsKKGZ1bmN0aW9uICgpIHsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmFkZlwubHkkLywKICAgICAgcGF0aDogL15cL3JlZGlyZWN0aW5nXC8oLispJC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgY29uc3QgdXJsID0gYXRvYihtLnBhdGhbMV0pOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgcGF0aDogL1wvbG9ja2VkJC8sCiAgICAgIHF1ZXJ5OiAvdXJsPShbXiZdKykvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0IChtKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZXNldENvb2tpZXMoKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNldENvb2tpZSgnRkxZU0VTU0lEJywgZ2VuZXJhdGVSYW5kb21TZXNzaW9uQ29va2llKDQwKSk7CiAgICAgIGNvbnN0IHVybCA9IGRlY29kZVVSSUNvbXBvbmVudChtLnF1ZXJ5WzFdKTsKICAgICAgaWYgKHVybC5tYXRjaCgvXmh0dHAvKSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhkb2N1bWVudC5yZWZlcnJlcik7CiAgICAgIH0KICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgcGF0aDogL3B1c2hyZWRpcmVjdC8sCiAgICAgIHF1ZXJ5OiAvLipkZXN0PShbXiZdKykvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0IChtKSB7CiAgICAgIGNvbnN0IHVybCA9IGRlY29kZVVSSUNvbXBvbmVudChtLnF1ZXJ5WzFdKTsKICAgICAgaWYgKHVybC5tYXRjaCgvXmh0dHAvKSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgICB9CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIHF1ZXJ5OiAvbHA9YWRmbHlfYWxsb3cmLipocmVmPShbXiZdKykvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0IChtKSB7CiAgICAgIGNvbnN0IHVybCA9IGRlY29kZVVSSUNvbXBvbmVudChtLnF1ZXJ5WzFdKTsKICAgICAgaWYgKHVybC5tYXRjaCgvXmh0dHAvKSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgICB9CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlICgpIHsKICAgICAgY29uc3QgaCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdodG1sW2lkPSJtYWluX2h0bWwiXScpOwogICAgICBpZiAoaCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmRvY3VtZW50LndyaXRlID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vcDsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5idG9hID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vcDsKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2V0Q29va2llKCdGTFlTRVNTSUQnLCBnZW5lcmF0ZVJhbmRvbVNlc3Npb25Db29raWUoNDApKTsKICAgICAgY29uc3QgY2xvc2UgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnZGl2W29uY2xpY2s9ImNsb3NlX2JhcigpOyJdJyk7CiAgICAgIGlmIChjbG9zZSkgewogICAgICAgIGNsb3NlLmNsaWNrKCk7CiAgICAgIH0KICAgICAgbGV0IHJ2ID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldChsb2NhdGlvbi5ocmVmLCAnJywgewogICAgICAgICdPcmlnaW4nOiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZSwKICAgICAgICAnUmVmZXJlcic6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lLAogICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmUsCiAgICAgIH0pOwogICAgICBydiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS50b0RPTShydik7CiAgICAgIHJ2ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC92YXIgeXNtbSA9ICcoW14nXSspJy8sIHJ2KTsKICAgICAgcnYgPSBydlsxXTsKICAgICAgcnYgPSBkZWNvZGVUb2tlbihydik7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhydik7CiAgICB9LAogIH0pOwogIGZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tU2Vzc2lvbkNvb2tpZSAobGVuZ3RoKSB7CiAgICBjb25zdCBydiA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBydi5wdXNoKE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLmNoYXJBdCgyKSk7CiAgICB9CiAgICByZXR1cm4gcnYuam9pbignJyk7CiAgfQogIGZ1bmN0aW9uIGRlY29kZVRva2VuICh0b2tlbikgewogICAgbGV0IGEgPSAnJzsKICAgIGxldCBiID0gJyc7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLmxlbmd0aDsgKytpKSB7CiAgICAgIGlmIChpICUgMiA9PT0gMCkgewogICAgICAgIGEgPSBhICsgdG9rZW4uY2hhckF0KGkpOwogICAgICB9IGVsc2UgewogICAgICAgIGIgPSB0b2tlbi5jaGFyQXQoaSkgKyBiOwogICAgICB9CiAgICB9CiAgICB0b2tlbiA9IGEgKyBiOwogICAgYSA9IHRva2VuLnNwbGl0KCcnKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsraSkgewogICAgICBpZiAoL1xkLy50ZXN0KGFbaV0pKSB7CiAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgYS5sZW5ndGg7ICsraikgewogICAgICAgICAgaWYgKC9cZC8udGVzdChhW2pdKSkgewogICAgICAgICAgICBiID0gYVtpXSBeIGFbal07CiAgICAgICAgICAgIGlmIChiIDwgMTApIHsKICAgICAgICAgICAgICBhW2ldID0gYjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpID0gajsKICAgICAgICAgICAgaiA9IGEubGVuZ3RoOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgdG9rZW4gPSBhLmpvaW4oJycpOwogICAgdG9rZW4gPSBhdG9iKHRva2VuKTsKICAgIHRva2VuID0gdG9rZW4uc3Vic3RyaW5nKDE2KTsKICAgIHRva2VuID0gdG9rZW4uc3Vic3RyaW5nKDAsIHRva2VuLmxlbmd0aCAtIDE2KTsKICAgIGlmIChsb2NhdGlvbi5oYXNoKSB7CiAgICAgIHRva2VuICs9IGxvY2F0aW9uLmhhc2g7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vYWRmb2MudXMvKicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5ib2R5OwogICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgICBsZXQgbyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjc2hvd1NraXAnKTsKICAgICAgICBpZiAobykgewogICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgbyA9IG8ucXVlcnlTZWxlY3RvcignYScpOwogICAgICAgICAgcmVzb2x2ZShvLmhyZWYpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG9ic2VydmVyLm9ic2VydmUocm9vdCwgewogICAgICAgIGNoaWxkTGlzdDogdHJ1ZSwKICAgICAgICBzdWJ0cmVlOiB0cnVlLAogICAgICB9KTsKICAgIH0pOwogICAgY29uc3QgdXJsID0gYXdhaXQgcHJvbWlzZTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9hZGxvdFwudXMkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgY29uc3Qgc2NyaXB0ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKCdmb3JtJyk7CiAgICBjb25zdCBwID0gL25hbWU9JyhbXiddKyknIHZhbHVlPScoW14nXSspJy9nOwogICAgY29uc3Qgb3B0ID0gewogICAgICBpbWFnZTogJyAnLAogICAgfTsKICAgIGxldCB0bXAgPSBudWxsOwogICAgd2hpbGUgKCh0bXAgPSBwLmV4ZWMoc2NyaXB0KSkpIHsKICAgICAgb3B0W3RtcFsxXV0gPSB0bXBbMl07CiAgICB9CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoJycsIHsKICAgICAgcGF0aDogb3B0LAogICAgfSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15hZG15XC5saW5rJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Zvcm0uZWRpdF9saW5rJyk7CiAgICBmLnN1Ym1pdCgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9haC1pbmZvcm1hdGlxdWVcLmNvbSQvLAogICAgcGF0aDogL15cL1ppcFVybC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN6aXAzIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eYWhcLnBlJC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBsZXQgc2NyaXB0ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKCdldmFsJyk7CiAgICAgIHNjcmlwdCA9IGRlY29kZVNjcmlwdChzY3JpcHQpOwogICAgICBzY3JpcHQgPSBkZWNvZGVTY3JpcHQoc2NyaXB0KTsKICAgICAgc2NyaXB0ID0gZGVjb2RlU2NyaXB0KHNjcmlwdCk7CiAgICAgIGxldCBwYXRoID0gc2NyaXB0Lm1hdGNoKC8oW147PSBdKyk9KFteKyA7XSspXCsiXC4iXCsoW14rIF0rKVwrIlwuIlwrKFteOyBdKyk7Lyk7CiAgICAgIGlmICghcGF0aCkgewogICAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignc2NyaXB0IGNoYW5nZWQnKTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3dbcGF0aFsyXV0gPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmluZm8oJ3JlY2FwdGNoYScpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBwYXRoID0gW19BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3dbcGF0aFsyXV0sIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3dbcGF0aFszXV0sIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3dbcGF0aFs0XV1dLmpvaW4oJy4nKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgfSwKICB9KTsKICBmdW5jdGlvbiBkZWNvZGVTY3JpcHQgKGVuY29kZWQpIHsKICAgIGxldCBhID0gZW5jb2RlZC5tYXRjaCgvXlxzKjtldmFsXCgoLispXCk7XHMqJC8pOwogICAgYSA9IGFbMV07CiAgICBjb25zdCBiID0gYS5tYXRjaCgvXiguKylcKCcoW14nXSspJywnKFteJ10rKScsJyhbXiddKyknLCcoW14nXSspJ1wpJC8pOwogICAgY29uc3QgYyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ldmlsKGAoJHtiWzFdfSlgKTsKICAgIHJldHVybiBjKGJbMl0sIGJbM10sIGJbNF0sIGJbNV0pOwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmFrYVwuZ3IkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaWZyYW1lI3lvdXJscy1mcmFtZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eYWxcLmx5JC8sCiAgICAgIC9eYWxseVwuc2gkLywKICAgICAgL15hbGx5XC5zaG9ydGVuc1wuY28kLywKICAgICAgL14oZGF1c2VsfG9ubGUpXC5jbyQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNodG1sX2VsZW1lbnQnKTsKICAgIGlmIChpKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJyNtZXNzYScpOwogICAgICBpLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC8iaHJlZiIsIihbXiJdKykiIFwrIGhhc2hcKVwucmVtb3ZlLyk7CiAgICBpZiAoIWkpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhcm4oJ3NpdGUgY2hhbmdlZCcpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpID0gaVsxXSArIGxvY2F0aW9uLmhhc2g7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXih3d3dcLik/YWxsa2V5c2hvcFwuY29tJC8sCiAgICAgIC9eY3Nob3J0XC5vcmckLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgbWF0Y2hlcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvd2luZG93XC5sb2NhdGlvblwuaHJlZiA9ICIoW14iXSspIi8pOwogICAgbWF0Y2hlcyA9IG1hdGNoZXNbMV07CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ubnVrZShtYXRjaGVzKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtYXRjaGVzKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmFwa21vZGlmXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnW25hbWU9ImdldHVybCJdJykuZ2V0QXR0cmlidXRlKCd2YWx1ZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIGNvbnN0IGFqYXhQYXR0ZXJuID0gL1wkLnBvc3RcKCcoW14nXSopJ1tee10rKFx7XHMqb3B0OlxzKidtYWtlX2xvZydbXn1dK1x9XHMqXH0pLC9pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eYmNcLnZjJC8sCiAgICAgIHBhdGg6IC9eLisoaHR0cHM/OlwvXC8uKykkLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAobSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobS5wYXRoWzFdICsgZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoICsgZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eYmNcLnZjJC8sCiAgICAgIHBhdGg6IC9eXC8uKy8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBmaW5kQUpBWFRva2VuKCk7CiAgICAgIGNvbnN0IHRpbWUgPSBmYWtlQUpBWFRva2VuKCk7CiAgICAgIGNvbnN0IHVybCA9IGAvZmx5L2xuLnBocD93ZHM9JHt0b2tlbi53ZHN9JnRpbWU9JHt0aW1lfWA7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwMDApOwogICAgICBsZXQgcnYgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdCh1cmwsIHsKICAgICAgICB4ZGY6IHsKICAgICAgICAgIGFmZzogMzAwLAogICAgICAgICAgYmZnOiA2NDAsCiAgICAgICAgICBjZmc6IDQ4MCwKICAgICAgICAgIGpraTogdG9rZW4uamtpLAogICAgICAgICAgZGZnOiA2NDAsCiAgICAgICAgICBlZmc6IDQ4MCwKICAgICAgICAgIHJ0OiB0b2tlbi5ydCwKICAgICAgICB9LAogICAgICAgIG9qazogdG9rZW4ub2prLAogICAgICB9KTsKICAgICAgcnYgPSBKU09OLnBhcnNlKHJ2KTsKICAgICAgaWYgKHJ2LmVycm9yKSB7CiAgICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdhdXRoIGVycm9yJyk7CiAgICAgIH0KICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJ2Lm1lc3NhZ2UudXJsKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9ebXlsaW5rXC51cyQvLAogICAgICAgIC9eeGFmb3hcLmNvbSQvLAogICAgICAgIC9eenBvelwubmV0JC8sCiAgICAgICAgL153d3dcLmFkamV0XC5ldSQvLAogICAgICBdLAogICAgICBwYXRoOiAvXlwvLisvLAogICAgfSwKICAgIHJlYWR5OiBydW4sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL155c2VhclwuY2gkLywKICAgICAgcGF0aDogL15cLy4rLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGEgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnZGl2LmZseV9oZWFkIGEuY2xvc2UnKTsKICAgICAgY29uc3QgZiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpZnJhbWUuZmx5X2ZyYW1lJyk7CiAgICAgIGlmIChhICYmIGYpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZi5zcmMpOwogICAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IHJ1bigpOwogICAgICB9CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eYWQ1XC5ldSQvLAogICAgICBwYXRoOiAvXlwvW14uXSskLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBjb25zdCBzID0gc2VhcmNoU2NyaXB0KHRydWUpOwogICAgICBsZXQgbSA9IHMuc2NyaXB0Lm1hdGNoKC8oPGZvcm0gbmFtZT0iZm9ybTEibWV0aG9kPSJwb3N0Ii4qKD8hPFxcZm9ybT4pPFwvZm9ybT4pLyk7CiAgICAgIGlmICghbSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBtID0gbVsxXTsKICAgICAgY29uc3QgdHogPSAtKG5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwKTsKICAgICAgbSA9IG0ucmVwbGFjZSgnXCcrdGltZXpvbmUrXCcnLCB0eik7CiAgICAgIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ0Fkc0J5cGFzc2VyRlRXJyk7CiAgICAgIGQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5Om5vbmU7Jyk7CiAgICAgIGQuaW5uZXJIVE1MID0gbTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTsKICAgICAgT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNBZHNCeXBhc3NlckZUVyA+IGZvcm1bbmFtZT1mb3JtMV0nKS5zdWJtaXQoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL150cjVcLmluJC8sCiAgICAgIHBhdGg6IC9eXC8uKy8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBhd2FpdCBydW4odHJ1ZSk7CiAgICB9LAogIH0pOwogIGZ1bmN0aW9uIGRlY29tcHJlc3MgKHNjcmlwdCwgdW56aXApIHsKICAgIGlmICghdW56aXApIHsKICAgICAgcmV0dXJuIHNjcmlwdDsKICAgIH0KICAgIGxldCBtYXRjaGVzID0gc2NyaXB0Lm1hdGNoKC9ldmFsKC4qKS8pOwogICAgaWYgKCFtYXRjaGVzKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignbm8gc2NyaXB0IG1hdGNoZXMgL2V2YWwoLiopLycpOwogICAgfQogICAgbWF0Y2hlcyA9IG1hdGNoZXNbMV07CiAgICBzY3JpcHQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uZXZpbChtYXRjaGVzKTsKICAgIHJldHVybiBzY3JpcHQ7CiAgfQogIGZ1bmN0aW9uIHNlYXJjaFNjcmlwdCAodW56aXApIHsKICAgIGxldCBjb250ZW50ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKCdtYWtlX2xvZycpOwogICAgaWYgKGNvbnRlbnQpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBkaXJlY3Q6IGZhbHNlLAogICAgICAgIHNjcmlwdDogZGVjb21wcmVzcyhjb250ZW50LCB1bnppcCksCiAgICAgIH07CiAgICB9CiAgICBjb250ZW50ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKCdjbGlja19sb2cnKTsKICAgIGlmIChjb250ZW50KSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgZGlyZWN0OiB0cnVlLAogICAgICAgIHNjcmlwdDogZGVjb21wcmVzcyhjb250ZW50LCB1bnppcCksCiAgICAgIH07CiAgICB9CiAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJ3NjcmlwdCBjaGFuZ2VkJyk7CiAgfQogIGZ1bmN0aW9uIGtub2NrU2VydmVyIChzY3JpcHQsIGRpcnR5Rml4KSB7CiAgICBjb25zdCBtYXRjaGVzID0gc2NyaXB0Lm1hdGNoKGFqYXhQYXR0ZXJuKTsKICAgIGlmICghbWF0Y2hlcykgewogICAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJyhpbiBrbm9jayBzZXJ2ZXIpIG5vIHNjcmlwdCBtYXRjaGVzICQucG9zdCcpOwogICAgfQogICAgY29uc3QgbWFrZV91cmwgPSBtYXRjaGVzWzFdOwogICAgY29uc3QgbWFrZV9vcHRzID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmV2aWwoYCgke21hdGNoZXNbMl19KWApOwogICAgY29uc3QgaSA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnBvc3QobWFrZV91cmwsIG1ha2Vfb3B0cykudGhlbihmdW5jdGlvbiAodGV4dCkgewogICAgICAgIGlmIChkaXJ0eUZpeCkgewogICAgICAgICAgdGV4dCA9IHRleHQubWF0Y2goL1x7LitcfS8pWzBdOwogICAgICAgIH0KICAgICAgICBjb25zdCBqaiA9IEpTT04ucGFyc2UodGV4dCk7CiAgICAgICAgaWYgKGpqLm1lc3NhZ2UpIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaSk7CiAgICAgICAgICByZXR1cm4gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGpqLm1lc3NhZ2UudXJsKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwgMTAwMCk7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHJ1biAoZGlydHlGaXgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgbGV0IHJlc3VsdCA9IHNlYXJjaFNjcmlwdCh0cnVlKTsKICAgIGlmICghcmVzdWx0LmRpcmVjdCkgewogICAgICBrbm9ja1NlcnZlcihyZXN1bHQuc2NyaXB0LGRpcnR5Rml4KTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC5zY3JpcHQubWF0Y2goL3RvcFwubG9jYXRpb25cLmhyZWY9JyhbXiddKyknLyk7CiAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdzY3JpcHQgY2hhbmdlZCcpOwogICAgICB9CiAgICAgIHJlc3VsdCA9IHJlc3VsdFsxXTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJlc3VsdCk7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGZpbmRBSkFYVG9rZW4gKCkgewogICAgY29uc3QgcnYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoJ3h5eicpOwogICAgaWYgKCFydikgewogICAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJ3NjcmlwdCBjaGFuZ2VkJyk7CiAgICB9CiAgICBsZXQgd2RzID0gcnYubWF0Y2goL3h5elxzKj1ccyonKFteJ10rKScvKTsKICAgIGlmICghd2RzKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignc2NyaXB0IGNoYW5nZWQnKTsKICAgIH0KICAgIHdkcyA9IHdkc1sxXTsKICAgIGxldCBqa2kgPSBydi5tYXRjaCgvdGtuXHMqPVxzKicoW14nXSspJy8pOwogICAgaWYgKCFqa2kpIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdzY3JpcHQgY2hhbmdlZCcpOwogICAgfQogICAgamtpID0gamtpWzFdOwogICAgY29uc3QgcnQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3JlY2FwdGNoYVRva2VuJyk7CiAgICB3aGlsZSAoIXJ0LnZhbHVlKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwMCk7CiAgICB9CiAgICByZXR1cm4gewogICAgICB3ZHM6IHdkcywKICAgICAgamtpOiBqa2ksCiAgICAgIG9qazogJ2pmaGcnLAogICAgICBydDogcnQudmFsdWUsCiAgICB9OwogIH0KICBmdW5jdGlvbiBmYWtlQUpBWFRva2VuICgpIHsKICAgIGNvbnN0IHNraXBBZCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZ2V0TGluaycpLnBhcmVudEVsZW1lbnQ7CiAgICBjb25zdCBtYXJnaW4gPSA2OwogICAgY29uc3QgZmFrZVBhZ2VYID0gc2tpcEFkLm9mZnNldExlZnQgKyBtYXJnaW4gKyA1MCArIChNYXRoLnJhbmRvbSgpICogMTApOwogICAgY29uc3QgZmFrZVBhZ2VZID0gc2tpcEFkLm9mZnNldFRvcCArIG1hcmdpbiArIDE1ICsgKE1hdGgucmFuZG9tKCkgKiAxKTsKICAgIGNvbnN0IHBvID0gZmFrZVBhZ2VYICsgJywnICsgZmFrZVBhZ2VZOwogICAgY29uc3QgcG9zWCA9IGpRdWVyeU9mZnNldChza2lwQWQpLmxlZnQgKyBtYXJnaW47CiAgICBjb25zdCBwb3NZID0galF1ZXJ5T2Zmc2V0KHNraXBBZCkudG9wICsgbWFyZ2luOwogICAgY29uc3QgcG9zID0gTWF0aC5hYnMoZmFrZVBhZ2VYIC0gcG9zWCkgKyAnLCcgKyBNYXRoLmFicyhmYWtlUGFnZVkgLSBwb3NZKTsKICAgIGNvbnN0IHRzdGFfID0gTWF0aC5mbG9vcigoNSArIE1hdGgucmFuZG9tKCkpICogMTAwMCk7CiAgICBjb25zdCB0aW1lID0gcG8gKyAnOicgKyBwb3MgKyAnOicgKyB0c3RhXzsKICAgIHJldHVybiB0aW1lOwogIH0KICBmdW5jdGlvbiBqUXVlcnlPZmZzZXQgKGVsZW1lbnQpIHsKICAgIGNvbnN0IHIgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgcmV0dXJuIHsKICAgICAgdG9wOiByLnRvcCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLAogICAgICBsZWZ0OiByLmxlZnQgKyBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsCiAgICB9OwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/YmlnbGlzdG9md2Vic2l0ZXNcLmNvbSQvLAogICAgcGF0aDogL15cL2dvXC8oXHcrXC5cdyspJC8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKCdodHRwOi8vJyArIG0ucGF0aFsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly93d3cuYmlsZC5tZS9iaWxkLnBocD9maWxlPSonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI0JpbGQnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly9iaWxkci5uby92aWV3LyonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nLmJpbGRlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IFsKICAgIHsKICAgICAgaG9zdDogL14od3d3XC4pPyhbYS16QS1aMC05XStcLik/YmluYm94XC5pbyQvLAogICAgICBwYXRoOiAvXC9vXC8oW2EtekEtWjAtOV0rKS8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXmdzbXpvbmVcLnNpdGUkLywKICAgICAgcGF0aDogL1wvZ29cLyhbYS16QS1aMC05XSspLywKICAgIH0sCiAgXSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgZGlyZWN0X2xpbmsgPSB3aW5kb3cuYXRvYihtLnBhdGhbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRpcmVjdF9saW5rKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmJsb2dcLmxhbmd3XC53ZWJcLmlkJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCB1cmwgPSBkZWNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXRDb29raWUoJ3dwYl92aXNpdF90aW1lJykpKTsKICAgIGlmICh1cmwubWF0Y2goL15odHRwLykpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlc2V0Q29va2llcygpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmJsdWVtZWRpYWZpbGVzXC5jb20kLywKICAgIHBhdGg6IC9eXC9jcmVhdGluZ2xpbmtzLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGIgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL0ZpbmlzaE1lc3NhZ2UgPSAnPGEgaHJlZj0iKFteIl0rKSIgPi8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGJbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eY2F0Y3V0XC5uZXQkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBhID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9kZWNvZGVVUklDb21wb25lbnRcKCcoW14nXSspJ1wpLyk7CiAgICBhID0gZGVjb2RlVVJJQ29tcG9uZW50KGFbMV0pOwogICAgYSA9IG5ldyBVUkwoYSk7CiAgICBhID0gYS5zZWFyY2hQYXJhbXMuZ2V0KCdhJyk7CiAgICBhID0gYXRvYihhKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/Y2xpXC5ncyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdhLlJlZGlyZWN0TGluaycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15jbGtcLmltJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGNvbnN0IG1hdGNoZXMgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL1wkXCgiXC5jb3VudGRvd24iXClcLmF0dHJcKCJocmVmIiwiKFteIl0rKSJcKS8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1hdGNoZXNbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eY29jb2xlZWNoXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmJ0bi5idG4tYmxvY2suYnRuLXN1Y2Nlc3MnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXihjb2VnfGRpc2luZ2thdClcLmluJC8sCiAgICAgICAgL153d3dcLih0ZWxvbmRhc211fHNpb3Rvbmd8c2loZXJwKVwuY29tJC8sCiAgICAgICAgL153d3dcLmdyZWdldFwuc3BhY2UkLywKICAgICAgXSwKICAgICAgcGF0aDogL15cLy4rJC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKG0pIHsKICAgICAgY29uc3QgbWFwcGVyID0gaG9zdE1hcHBlcihtLmhvc3RbMF0pOwogICAgICBjb25zdCBiNjQgPSBtYXBwZXIoKS5tYXRjaCgvXD9yPShbXHcvXSs9ezAsMn0pLyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhdG9iKGI2NFsxXSkpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXnNpcGt1clwubmV0JC8sCiAgICAgIHBhdGg6IFsKICAgICAgICAvXlwvXHcrJC8sCiAgICAgICAgL15cL21lbnVqdWxpbmtcLy8sCiAgICAgIF0sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBsZXQgZCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjdGVzdGFwayA+IGRpdicpOwogICAgICBkID0gZC5vbmNsaWNrLnRvU3RyaW5nKCk7CiAgICAgIGQgPSBkLm1hdGNoKC93aW5kb3dcLm9wZW5cKCcoW14nXSspJy8pOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZFsxXSk7CiAgICB9LAogIH0pOwogIGZ1bmN0aW9uIGhvc3RNYXBwZXIgKGhvc3QpIHsKICAgIHN3aXRjaCAoaG9zdCkgewogICAgY2FzZSAnZGlzaW5na2F0LmluJzoKICAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2EuYnRuLWJsb2NrLnJlZGlyZWN0Jyk7CiAgICAgICAgcmV0dXJuIGEuaHJlZjsKICAgICAgfTsKICAgIGNhc2UgJ2NvZWcuaW4nOgogICAgY2FzZSAnd3d3LnRlbG9uZGFzbXUuY29tJzoKICAgIGNhc2UgJ3d3dy5zaW90b25nLmNvbSc6CiAgICBjYXNlICd3d3cuc2loZXJwLmNvbSc6CiAgICBjYXNlICd3d3cuZ3JlZ2V0LnNwYWNlJzoKICAgICAgcmV0dXJuICgpID0+IHsKICAgICAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5kb3dubG9hZC1saW5rIGEnKTsKICAgICAgICByZXR1cm4gYS5ocmVmOwogICAgICB9OwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14oPzooXHcrKVwuKT9jb2ludXJsXC5jb20kLywKICAgICAgL14oPzooXHcrKVwuKT9jdXJcLmx2JC8sCiAgICBdLAogICAgcGF0aDogL15cLyhbLVx3XSspJC8sCiAgfSwKICBhc3luYyByZWFkeSAobSkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBob3N0ID0gJ2h0dHA6Ly9jdXIubHYvcmVkaXJlY3RfY3VybHYucGhwJzsKICAgIGNvbnN0IHBhcmFtID0gbS5ob3N0WzFdID09PSB1bmRlZmluZWQgPyB7CiAgICAgIGNvZGU6IG0ucGF0aFsxXSwKICAgIH0gOiB7CiAgICAgIHpvbmU6IG0uaG9zdFsxXSwKICAgICAgbmFtZTogbS5wYXRoWzFdLAogICAgfTsKICAgIGNvbnN0IG1haW5GcmFtZUNvbnRlbnQgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KGhvc3QsIHBhcmFtKTsKICAgIGxldCBkb2NNYWluRnJhbWUgPSBudWxsOwogICAgdHJ5IHsKICAgICAgZG9jTWFpbkZyYW1lID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnRvRE9NKG1haW5GcmFtZUNvbnRlbnQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJ21haW4gZnJhbWUgY2hhbmdlZCcpOwogICAgfQogICAgY29uc3QgckV4dHJhY3RMaW5rID0gL29uY2xpY2s9Im9wZW5fdXJsXCgnKFteJ10rKScsXHMqJ2dvJ1wpLzsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5mb3JFYWNoKF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kJCgnaWZyYW1lJywgZG9jTWFpbkZyYW1lKSwgKGN1cnJGcmFtZSkgPT4gewogICAgICBjb25zdCBjdXJyRnJhbWVBZGRyID0gY3VyckZyYW1lLmdldEF0dHJpYnV0ZSgnc3JjJyk7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQoY3VyckZyYW1lQWRkcikudGhlbigoY3VyckZyYW1lQ29udGVudCkgPT4gewogICAgICAgIGNvbnN0IGFSZWFsTGluayA9IHJFeHRyYWN0TGluay5leGVjKGN1cnJGcmFtZUNvbnRlbnQpOwogICAgICAgIGlmIChhUmVhbExpbmsgPT09IHVuZGVmaW5lZCB8fCBhUmVhbExpbmtbMV0gPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCByZWFsTGluayA9IGFSZWFsTGlua1sxXTsKICAgICAgICByZXR1cm4gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJlYWxMaW5rKTsKICAgICAgfSk7CiAgICB9KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmNvbXlvbmV0XC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGlucHV0ID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W25hbWU9ImVudGVyIl0nKTsKICAgIGlucHV0LmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15jcm9ja29saW5rc1wuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBjID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5oZWFkID4gZGl2Om50aC1jaGlsZCgzKSA+IC5za2lwJyk7CiAgICBjLmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15kYXduc3RhdGlvblwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN0aWRha2FrYW5zZWxhbWFueWEgPiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmR1cmxcLm1lJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2FbY2xhc3M9InByb2NlZWRCdG4iXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXmVhc3l1cmxcLm5ldCQvLAogICAgICAvXihhdHV8Y2xpY2t0aHJ1fHJlZGlyZWN0c3xyZWFkdGhpcylcLmNhJC8sCiAgICAgIC9eZ29zaHJpbmtcLmNvbSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZnJhbWVbbmFtZT1tYWluXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGYuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHd3d1wuKT9zaGlua1wubWUkLywKICAgICAgL14oc2hvbnxsaWtuKVwueHl6JC8sCiAgICAgIC9eZmFzXC5saSQvLAogICAgICAvXih3d3dcLik/Y3JvY29cLihtZXxzaXRlKSQvLAogICAgICAvXmNwbWxpbmtcLm5ldCQvLAogICAgXSwKICAgIHBhdGg6IC9eXC9bXHctXSskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGlmICghX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNjYXB0Y2hhJykpIHsKICAgICAgbGV0IGYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI3NraXAnKTsKICAgICAgaWYgKGYpIHsKICAgICAgICBmLnN1Ym1pdCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNidG4tbWFpbicpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZi5ocmVmKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnZGl2W2NsYXNzJD1PdmVybGF5XScpOwogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmJsb2NrKChub2RlKSA9PiB7CiAgICAgIGlmIChub2RlLmNsYXNzTmFtZS5tYXRjaCgvT3ZlcmxheSQvKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2RpdicpIHsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgJzIxNDc0ODM2NDcnLAogICAgICAgICAgJzInLAogICAgICAgIF0uc29tZSgoeikgPT4gewogICAgICAgICAgcmV0dXJuIHogPT09IG5vZGUuc3R5bGUuekluZGV4OwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sIGRvY3VtZW50LmJvZHkpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IFsKICAgIHsKICAgICAgaG9zdDogL15jcG1saW5rXC5uZXQkLywKICAgICAgcGF0aDogL15cL2dvXC9bXHctXSskLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9eKHd3d1wuKT9jcm9jb1wuKG1lfHNpdGUpJC8sCiAgICAgIHBhdGg6IC9eXC9va1wvXHcrJC8sCiAgICB9LAogIF0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2J0bi1tYWluJyk7CiAgICBjb25zdCBpID0gYS5ocmVmLmxhc3RJbmRleE9mKCdodHRwJyk7CiAgICBhID0gYS5ocmVmLnN1YnN0cihpKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eZmFzXC5saSQvLAogICAgICAvXih3d3dcLik/c2hpbmtcLm1lJC8sCiAgICBdLAogICAgcGF0aDogL15cL2dvXC9cdyskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3NraXAnKTsKICAgIGYuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15maWxlbWVkaWFcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3Qgc2NyaXB0ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC93aW5kb3cubG9jYXRpb24uaHJlZlxzPz1ccz9cKCIoaHR0cC4rPykiXCkvKTsKICAgIGlmIChzY3JpcHQubGVuZ3RoID4gMSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsoc2NyaXB0WzFdKTsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/Zmlsb29wc1wuaW5mbyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjdGV4dCA+IGNlbnRlciBhLCAjdGV4dCA+IGRpdlthbGlnbj1jZW50ZXJdIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d3xsaW5rcylcLmZpdXh5XC4oY298YnopJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2EuYnRuLmEnKS5ocmVmKTsKICB9Cn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZ2FtZW1vZFwucHJvJC8sCiAgICBwYXRoOiAvXlwvZG93bmxvYWQtZmlsZVwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGdwID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN3YWl0LWRvbmUgPiBwID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGdwLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZ2t1cmxcLnVzJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpZnJhbWUgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2drdXJsLWZyYW1lJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaWZyYW1lLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15nb3RvXC5sb25jYXRcLmluJC8sCiAgICBxdWVyeTogL29wZW49KC4rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgdXJsID0gYXRvYihhdG9iKG0ucXVlcnlbMV0pKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15nc3VybFwuKG1lfGluKSQvLAogICAgICAvXihnc3VsfGdldHNsfGdsaW5rcylcLm1lJC8sCiAgICAgIC9eZ3N1clwuaW4kLywKICAgICAgL15nNXVcLnB3JC8sCiAgICAgIC9eZ3VybFwubHkkLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCcjY29udGFpbmVyJyk7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNsaW5rJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYCR7YS5ocmVmfSZhYj0ke19BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cueH1gKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmd1bnRpbmdcLndlYlwuaWQkLywKICAgIHBhdGg6IC9eXC9cdyskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYS5idG4tYmxvY2sucmVkaXJlY3QnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaGVhbHRoeWtrXC5jb20kLywKICAgIHBhdGg6IC9eXC93b3JkcHJlc3NcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBoID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb250ZW50IGNlbnRlciBidXR0b24nKTsKICAgIGguY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmhlbi10YXlcLm5ldCQvLAogICAgcGF0aDogL15cL2dvXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZG93bmxvYWRfdXJsIGRpdiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmhvdHNob3J0dXJsXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGZyYW1lID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ZyYW1lW3Njcm9sbGluZz15ZXNdJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZnJhbWUuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmlpdlwucGwkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb3VudGluZycpOwogICAgbGV0IHJ2ID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnBvc3QobG9jYXRpb24ucGF0aG5hbWUsIHsKICAgICAgYmxvY2tlcjogMCwKICAgICAgc2FsdDogZC5kYXRhc2V0LnNhbHQsCiAgICB9LCB7CiAgICAgICdYLU9DVE9CRVItUkVRVUVTVC1IQU5ETEVSJzogJ29uQWZ0ZXJTaG9ydGN1dFZpZXcnLAogICAgICAnWC1PQ1RPQkVSLVJFUVVFU1QtUEFSVElBTFMnOiAnc2hvcnRjdXQvbGlua19zaG93JywKICAgIH0pOwogICAgcnYgPSBKU09OLnBhcnNlKHJ2KTsKICAgIGQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0udG9ET00ocnZbJ3Nob3J0Y3V0L2xpbmtfc2hvdyddKTsKICAgIHJ2ID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2EnLCBkKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhydi5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXml0d1wubWUkLywKICAgIHBhdGg6IC9eXC9yXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuZ28tZm9ybScpOwogICAgZi5zdWJtaXQoKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXml0eVwuaW0kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBmID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNtYWluJyk7CiAgICBpZiAoZikgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZi5zcmMpOwogICAgICByZXR1cm47CiAgICB9CiAgICBbLCAsIGZdID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmZpbmQoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQkKCdmcmFtZScpLCAoZnJhbWUpID0+IHsKICAgICAgaWYgKGZyYW1lLnNyYy5pbmRleE9mKCdpbnRlcmhlYWRlci5waHAnKSA8IDApIHsKICAgICAgICByZXR1cm4gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZyYW1lLnNyYzsKICAgIH0pOwogICAgaWYgKGYgIT09IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhmKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygva3J5cHRlZD0oW14mXSspLyk7CiAgICBpZiAoIWYpIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdzaXRlIGNoYW5nZWQnKTsKICAgIH0KICAgIGYgPSBmWzFdOwogICAgY29uc3QgZGF0YSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuZGVzKCdrc25zbG10bWswdjRQZHZpdXNhanF1JywgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5oZXhUb1N0cmluZyhmKSwgMCwgMCk7CiAgICBpZiAoZGF0YSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoJ2h0dHA6Ly9pdHkuaW0vMTEwNF8yMV81MDg0Nl8nICsgZGF0YSk7CiAgICB9CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP2tpbmdvZnNocmlua1wuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN0ZXh0cmVzdWx0ID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgewogICAgICBob3N0OiAvXnN0XC5rdXJvZ2F6ZVwubmV0JC8sCiAgICAgIHF1ZXJ5OiAvcj0oLispLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9ec1wueXVraXN1YnNcLmNvbSQvLAogICAgICBxdWVyeTogL2xpbms9KC4rKS8sCiAgICB9LAogIF0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGNvbnN0IHIgPSBhdG9iKG0ucXVlcnlbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHIpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec3RcLmt1cm9nYXplXC5uZXQkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYS5yZWRpcmVjdCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15kbFwubGF5YXJrYWNhMjFcLnZpcCQvLAogICAgcGF0aDogL15cL2lmcmFtZVwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGx2ID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5jb250ZW50ICNza2lwIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsdi5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRsXC5sYXlhcmthY2EyMVwudmlwJC8sCiAgICBwYXRoOiAvXlwvKC4rKVwvLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoJy9pZnJhbWUvdG9wLnBocD9zbHVnPScgKyBtLnBhdGhbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebGVlY2hhbGxcLmRvd25sb2FkJC8sCiAgICBwYXRoOiAvXlwvZmlsZVwvKFthLXpBLVowLTkvPV0rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRlY29kZVVSSUNvbXBvbmVudChhdG9iKG0ucGF0aFsxXSkpKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3d3dy5saWVuc2Nhc2guY29tL2wvKicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjcmVkaXJfYnRuJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/bGlua1wuaW0kLywKICAgIHBhdGg6IC9eXC9cdyskLywKICB9LAogIGFzeW5jIHN0YXJ0ICgpIHsKICAgIGNvbnN0IHRleHQgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLCB7CiAgICAgIGltYWdlOiAnQ29udGludWUnLAogICAgfSk7CiAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvd2luZG93XC5sb2NhdGlvblwucmVwbGFjZVwoJyhbXiddKyknXCkvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmxpbmtcLnRsJC8sCiAgICBwYXRoOiAvXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IG0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2V2YWxcKCguK31cKSlcKS8pOwogICAgbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ldmlsKGAoJHttWzFdfSlgKTsKICAgIGxldCBsID0gbS5tYXRjaCgvKD86XCRcLmFqYXguK3xocmVmPScpKGh0dHAuK3NraXAuK3xodHRwW14nXSspJyxkYXRhLyk7CiAgICBsID0gbFsxXTsKICAgIGlmICghbC5tYXRjaCgvc2tpcC8pKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdG9rZW4gPSBtLm1hdGNoKC8nWC1DU1JGLVRPS0VOJzonKFteJ10rKSd9LC8pOwogICAgbGV0IHJsID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnBvc3QobCwgJycsIHsKICAgICAgJ1gtQ1NSRi1UT0tFTic6IHRva2VuWzFdLAogICAgfSk7CiAgICBybCA9IEpTT04ucGFyc2UocmwpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJsLnVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15saW5rNGFkXC5jb20kLywKICAgIHBhdGg6IC9eXC8oLispJC8sCiAgfSwKICBhc3luYyByZWFkeSAobSkgewogICAgbGV0IGQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZGl2W2lkXj1tb2R1bGVfXScpOwogICAgZCA9IGQuaWQubWF0Y2goL21vZHVsZV8oXGQrKS8pOwogICAgZCA9IGRbMV07CiAgICBjb25zdCB1cmwgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdCgnZm9ybS5waHA/YmxvY2tfaWQ9JyArIGQsIHsKICAgICAgY21kOiAnZ2V0X3NvdXJjZScsCiAgICAgIGFjdDogJ3dhaXRpbmcnLAogICAgICBpZDogbS5wYXRoWzFdLAogICAgfSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICB9LAp9KTsKKGZ1bmN0aW9uKCkgewogIGNvbnN0IGhvc3RSdWxlcyA9IFsKICAgIC9eKChbXHddezh9fHd3dylcLik/KGFsbGFuYWxwYXNzfGRyc3RpY2t5ZmluZ2Vyc3x3aGFja3l2aWR6KVwuY29tJC8sCiAgICAvXigoW1x3XXs4fXx3d3cpXC4pPyhsaW5rYmFiZXN8bGlua2J1Y2tzKVwuY29tJC8sCiAgICAvXigoW1x3XXs4fXx3d3cpXC4pP3RoZXNlYmxvZ3NcLmNvbSQvLAogICAgL153YXJuaW5nLXRoaXMtbGlua2NvZGUtd2lsbC1jZWFzZS13b3JraW5nLXNvb25cLnd3d1wubGlua2J1Y2tzZG5zXC5jb20kLywKICAgIC9eKChbXHddezh9fHd3dylcLik/KGZpbGVzb250aGV8cG9vbnRvd258c2VyaW91c2RlYWxzfHVybGJlYXQpXC5uZXQkLywKICAgIC9eKChbXHddezh9fHd3dylcLik/KHphdG5hd3F5fHJodmdtcml0bXppd2NtfGR3cmZzbHNxcGRmcWZ3eSlcLm5ldCQvLAogICAgL14oKFtcd117OH18d3d3KVwuKT9mcmVlYW5cLnVzJC8sCiAgICAvXigoW1x3XXs4fXx3d3cpXC4pPyhtaW5pdXJsc3xxcWN8cnFxfHRpbnlsaW5rc3x5eXYpXC5jbyQvLAogICAgL14oKFtcd117OH18d3d3KVwuKT95b3VmYXBcLm1lJC8sCiAgXTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBob3N0UnVsZXMsCiAgICAgIHBhdGg6IC9eXC9cdytcL3VybFwvKC4rKSQvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5KG0pIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZUFsbFRpbWVyKCk7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZXNldENvb2tpZXMoKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICAgIGxldCB1cmwgPSBtLnBhdGhbMV0gKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoOwogICAgICBjb25zdCBtYXRjaCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvVXJsRW5jb2RlZDogKFteLF0rKS8pOwogICAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbMV0gPT09ICd0cnVlJykgewogICAgICAgIHVybCA9IGRlY3J5cHQodXJsKTsKICAgICAgfQogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICAgIH0KICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBob3N0UnVsZXMsCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LlhNTEh0dHBSZXF1ZXN0ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vcDsKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmVBbGxUaW1lcigpOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVzZXRDb29raWVzKCk7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoJ3ZlcmlmeScpID49IDApIHsKICAgICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoJy92ZXJpZnknLCAnJyk7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB0b2tlbiA9IGZpbmRUb2tlbihkb2N1bWVudCk7CiAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHNlbmRSZXF1ZXN0KHRva2VuKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm51a2UodXJsKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIHF1ZXJ5OiAvXiguKilbPyZdX2xiR2F0ZT1cZCskLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAobSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2V0Q29va2llKCdfbGJHYXRlUGFzc2VkJywgJ3RydWUnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIG0ucXVlcnlbMV0pOwogICAgfSwKICB9KTsKICBmdW5jdGlvbiBmaW5kVG9rZW4gKGNvbnRleHQpIHsKICAgIGNvbnN0IHNjcmlwdCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygnICAgIHZhciBmID0gd2luZG93W1wnaW5pdFwnICsgXCdMYlwnICsgXCdqc1wnICsgXCdcJ10nLCBjb250ZXh0KTsKICAgIGlmICghc2NyaXB0KSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YXJuKCdwYXR0ZXJuIGNoYW5nZWQnKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBsZXQgYWR1cmwgPSBzY3JpcHQubWF0Y2goL0FkVXJsXHMqOlxzKicoW14nXSspJy8pOwogICAgaWYgKCFhZHVybCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGFkdXJsID0gYWR1cmxbMV07CiAgICBjb25zdCBtMSA9IHNjcmlwdC5tYXRjaCgvQWRQb3BVcmxccyo6XHMqJy4rXD9bXj1dKz0oW1x3XGRdKyknLyk7CiAgICBjb25zdCBtMiA9IHNjcmlwdC5tYXRjaCgvVG9rZW5ccyo6XHMqJyhbXHdcZF0rKScvKTsKICAgIGNvbnN0IHRva2VuID0gbTFbMV0gfHwgbTJbMV07CiAgICBsZXQgbSA9IHNjcmlwdC5tYXRjaCgvPVxzKihcZCspOy8pOwogICAgbGV0IGFrID0gcGFyc2VJbnQobVsxXSwgMTApOwogICAgY29uc3QgcmUgPSAvXCtccyooXGQrKTsvZzsKICAgIGxldCB0bXAgPSBudWxsOwogICAgd2hpbGUoKG0gPSByZS5leGVjKHNjcmlwdCkpICE9PSBudWxsKSB7CiAgICAgIHRtcCA9IG1bMV07CiAgICB9CiAgICBhayArPSBwYXJzZUludCh0bXAsIDEwKTsKICAgIHJldHVybiB7CiAgICAgIHQ6IHRva2VuLAogICAgICBhSzogYWssCiAgICAgIGFkdXJsOiBhZHVybCwKICAgIH07CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHNlbmRSZXF1ZXN0ICh0b2tlbikgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldCh0b2tlbi5hZHVybCk7CiAgICBkZWxldGUgdG9rZW4uYWR1cmw7CiAgICB0b2tlbi5hX2IgPSBmYWxzZTsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5pbmZvKCd3YWl0aW5nIHRoZSBpbnRlcnZhbCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwMCk7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygnc2VuZGluZyB0b2tlbjogJW8nLCB0b2tlbik7CiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldCgnL2ludGVybWlzc2lvbi9sb2FkVGFyZ2V0VXJsJywgdG9rZW4sIHsKICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZSwKICAgICAgT3JpZ2luOiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZSwKICAgIH0pOwogICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UodGV4dCk7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygncmVzcG9uc2U6ICVvJywgZGF0YSk7CiAgICBpZiAoIWRhdGEuU3VjY2VzcyAmJiBkYXRhLkVycm9yc1swXSA9PT0gJ0ludmFsaWQgdG9rZW4nKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YXJuKCdnb3QgaW52YWxpZCB0b2tlbicpOwogICAgICByZXR1cm4gYXdhaXQgcmV0cnkoKTsKICAgIH0KICAgIGlmIChkYXRhLkFkQmxvY2tTcG90dGVkKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YXJuKCdhZGJsb2NrIHNwb3R0ZWQnKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGRhdGEuU3VjY2VzcyAmJiAhZGF0YS5BZEJsb2NrU3BvdHRlZCAmJiBkYXRhLlVybCkgewogICAgICByZXR1cm4gZGF0YS5Vcmw7CiAgICB9CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHJldHJ5ICgpIHsKICAgIGNvbnN0IHRleHQgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpLCB7fSwgewogICAgICAnWC1Gb3J3YXJkZWQtRm9yJzogX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmdlbmVyYXRlUmFuZG9tSVAoKSwKICAgIH0pOwogICAgY29uc3QgZCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS50b0RPTSh0ZXh0KTsKICAgIGNvbnN0IHQgPSBmaW5kVG9rZW4oZCk7CiAgICBpZiAoIXQpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoMTAwMCk7CiAgICAgIHJldHVybiBhd2FpdCByZXRyeSgpOwogICAgfQogICAgcmV0dXJuIGF3YWl0IHNlbmRSZXF1ZXN0KHQpOwogIH0KICBmdW5jdGlvbiBkZWNyeXB0ICh1cmwpIHsKICAgIHVybCA9IENvbnZlcnRGcm9tSGV4KHVybCk7CiAgICBsZXQgdW5zYWZlID0gYCgke0VuY29kZS50b1N0cmluZygpfSkoIiR7dXJsfSIpYDsKICAgIHVuc2FmZSA9ICgwLCBldmFsKSh1bnNhZmUpOwogICAgcmV0dXJuIHVuc2FmZTsKICB9CiAgZnVuY3Rpb24gQ29udmVydEZyb21IZXggKHN0cikgewogICAgY29uc3QgcmVzdWx0ID0gW107CiAgICB3aGlsZSAoc3RyLmxlbmd0aCA+PSAyKSB7CiAgICAgIHJlc3VsdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoc3RyLnN1YnN0cmluZygwLCAyKSwgMTYpKSk7CiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgc3RyLmxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0LmpvaW4oJycpOwogIH0KICBjb25zdCBFbmNvZGUgPSBmdW5jdGlvbiAoc3RyKSB7CiAgICB2YXIgcyA9IFtdLCBqID0gMCwgeCwgcmVzID0gJycsIGsgPSBhcmd1bWVudHMuY2FsbGVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csICcnKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKICAgICAgc1tpXSA9IGk7CiAgICB9CiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKICAgICAgaiA9IChqICsgc1tpXSArIGsuY2hhckNvZGVBdChpICUgay5sZW5ndGgpKSAlIDI1NjsKICAgICAgeCA9IHNbaV07CiAgICAgIHNbaV0gPSBzW2pdOwogICAgICBzW2pdID0geDsKICAgIH0KICAgIGkgPSAwOwogICAgaiA9IDA7CiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHN0ci5sZW5ndGg7IHkrKykgewogICAgICBpID0gKGkgKyAxKSAlIDI1NjsKICAgICAgaiA9IChqICsgc1tpXSkgJSAyNTY7CiAgICAgIHggPSBzW2ldOwogICAgICBzW2ldID0gc1tqXTsKICAgICAgc1tqXSA9IHg7CiAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KHkpIF4gc1soc1tpXSArIHNbal0pICUgMjU2XSk7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH07Cn0pKCk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLmxpbmtkZWNvZGVcLmNvbSQvLAogICAgcGF0aDogL15cLyQvLAogICAgcXVlcnk6IC9eXD8oLispJC8sCiAgfSwKICBhc3luYyByZWFkeSAobSkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBsZXQgbG5rID0gbS5xdWVyeVsxXTsKICAgIGlmIChtLnF1ZXJ5WzFdLm1hdGNoKC9eaHR0cHM/OlwvXC8vKSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobG5rKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGV0IGIgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI3BvcHVwJyk7CiAgICBpZiAoYiAmJiBiLmhyZWYpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGIuaHJlZik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGIgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI20gPiAuVmlzaXRfTGluaycpOwogICAgYiA9IGIub25jbGljay50b1N0cmluZygpLm1hdGNoKC93aW5kb3dcLm9wZW5cKCcoW14nXSspJy8pOwogICAgaWYgKCFiKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXIoJ3BhdHRlcm4gY2hhbmdlZCcpOwogICAgfQogICAgbG5rID0gYlsxXS5tYXRjaCgvXD8oaHR0cHM/OlwvXC8uKikkLyk7CiAgICBpZiAobG5rKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsbmtbMV0pOwogICAgICByZXR1cm47CiAgICB9CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYlsxXSk7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9ebWV0XC5ieiQvLAogICAgICAgIC9edHVpXC5jbGljayQvLAogICAgICAgIC9eZWFybi1ndWlkZVwuY29tJC8sCiAgICAgICAgL15hZHVybFwuaWQkLywKICAgICAgICAvXihjdXR3aXxjdXQtd3xjdXRsfGRtdXMpXC5pbiQvLAogICAgICAgIC9eKHd3d1wuKT9qdXJsXC5pbyQvLAogICAgICAgIC9ebGFwYWtcLmxpbmskLywKICAgICAgICAvXih1bHNoYXJlfHVybGlrZSlcLm5ldCQvLAogICAgICBdLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBOb1JlY2FwdGNoYUhhbmRsZXIoKTsKICAgICAgYXdhaXQgaGFuZGxlci5jYWxsKCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXihkejRsaW5rfGdvY2l0bGlua3wzcmFiY3V0fHNob3J0MndpbnxhZHNydHxzaG9ydGdsb2JhbHxqYWluamludmFuaXxhZ3JhZGFycGFufGJpcmR1cmxzKVwuY29tJC8sCiAgICAgICAgL14ocGF5c2hvcnR1cmx8dXJsdGlwc3xzaHJpbmtlYXJufGl0aWFkfGN1dHNvdWZ8ZW5ld3N0YWxrfGxua3M0YWxsfGplamFrbGFndXx1cmxzaG9ydHgpXC5jb20kLywKICAgICAgICAvXihlYXJuLXVybHxiaXQtdXJsfGN1dC13aW58bGluay16ZXJvfGN1dC1lYXJufG90dXJsfGdsb3J5LWxpbmt8Y29vbG1pdHRlbnxob3NleHgpXC5jb20kLywKICAgICAgICAvXihlbXBpcmVzaG9ydHxlbXBlYXJufHRhcm53aDJpfHRhYmVpa2h8eW91cnctYXl8cmViN2tvbmxpbmV8ZmFjdHVyYWx8YWtsYTR8dGVjaHNhcHBhcmVsKVwuY29tJC8sCiAgICAgICAgL14oc2hyaW5rYnVja3xjbGtwYXl8bGlua3NodHxoYXhyc3xjbGljazItdXJsfGNvb2x0eHRnZW58YXJiYTdjb3xzaG9ydGxpbmtvfGV6NGxpbmtzcylcLmNvbSQvLAogICAgICAgIC9eKHBhcnRxYjJpfGtocmFiYXxhZGxwdXx0YWJha2hlbG98YW1lbml0aWVlc3xjb3NtaWNtb255fGlsaW5rc2hvcnR4fGEtZWd5fGFkc2FmZWxpbmspXC5jb20kLywKICAgICAgICAvXihhZHZhbmNlLXdpc2hpbmdqc3xnb3Z0c21hcnRqb2J8YmxvZ2dpbmdyYWphfHRlY2hrdGl8c3h0c3F1YWR8YWRwYXl0bXxwdXN0a2FsYSlcLmNvbSQvLAogICAgICAgIC9eKHRoZWd5YWFuaXBvaW50fGRvd25sb2FkZG9vbXxsaW5rZmF5fDVicmdlZGlkfGVhcnRocGljbG92ZXJ8YWRpZ3B8dG9taWVudHxkejRpbnZlc3QpXC5jb20kLywKICAgICAgICAvXih0ZWNobWVuLXdvcmxkfHJhemVyZmxpeHN8Z2FtZXNpbmRpYW5zfGRpc2xvb2tzfGVsa2hicmVsN3NyeXxvbmFhaHx1bHRyYXNrb3JhKVwuY29tJC8sCiAgICAgICAgL14od3JhcC13MHJsZHxvbW1hbnRyYW1lZGl0YXRpb258bWF3ZG9rfHRlY2hmaW5kYXxjbGl4Z3xib2FyZGdpZnR8YmVhc3QtYmlyZHN8Y2xpY2stcGFpZClcLmNvbSQvLAogICAgICAgIC9eKHRhbGtpdHRlY2h5fG5ld3Npbmp1bGVzfGt1dHBheXxuaWtrYXJyfHZlYmxpbmt8YWwzYW1hbGx8NmFiYTJkYXl8b3Bsb3Zlcnpob21lKVwuY29tJC8sCiAgICAgICAgL14oa29vcmFtdWJhc2hpcnxoZWFsdGhmYXJ5fGp1c3RsaWtleW9qbmF8c2Fya2FyaWpvYnNyZXN1bHRzc3x6YWxpcGF5fHRoZWZyZWVjaClcLmNvbSQvLAogICAgICAgIC9eKGhpbmRpYmVlbnxwYXN0ZWthbnxlN2tlbHlhbmF8ZWEtaXNseXxhcmlzdG9kZXJhc3xzaG9ydHpvbnx0cmFkaW5nLWFyZWF8YWxzZW9vKVwuY29tJC8sCiAgICAgICAgL14odGVjaHRyZW1lbmRvdXN8ZnJlZXNwaW53aW5zfHctcmFqZW18dGltZXRva2F8Zm9vZHB1ZmZ8bGlua3NvcHxib2xseXdvb2RkcmFtYW5ld3MpXC5jb20kLywKICAgICAgICAvXihsaW5rZXhhfGFkbWV3fHNocnRmbHl8a3V5bGlua3xjdXQ0bGlua3N8YWRza2lwbWV8c2tpcHVybHN8ZWx5LW9tN3xicmVuaGVhbHRoKVwuY29tJC8sCiAgICAgICAgL14oc21hcnRlYXN5c3R1ZHl8Y3lhaGVhbHRofGVyc2hhZGF0fHoyaXxzcnRmbHl8YXJiYTdrcHJvfGhlYWx0aC1nb29vZHxzdGF0ZWdvc3NpcClcLmNvbSQvLAogICAgICAgIC9eKGJsb2dnaW5nZ3lhbmJveHx5b3VydGVjaGd1aWRlcnxnaWZzaXN8M3JhYi1jYXNofHBpbmtoaW5kaXx3aXNoZXMyfHdlYXdwfGE1YmFyZmF3cmlhKVwuY29tJC8sCiAgICAgICAgL14obXlraW5nZ298bGktbmt6fHdpbjRjdXR8a2hhYnJhdGt8cHJvZ3JhbXNmcmV8c2FmZWxpbmtibG9nZ2VyfGxpbmt3ZWF8b3VyY2FyZWVyYmxvZylcLmNvbSQvLAogICAgICAgIC9eKGxpbmtvcmxpbmt8bXJmb3VydGVjaHxmYWJzZGVhbHN8dGVjaDR1dG9kYXl8dXJsc2Ftb3xlYXJud2l0aHNob3J0bGlua3xzd2lnZ3lnb2xkKVwuY29tJC8sCiAgICAgICAgL14oZWFybm1vbmV5dGFsa3xuZXd1cGRhdGVzb25saW5lfHVwdG9vc3xiYWtpbGlua3xnb3NzaXBjb3JuZXJzfHNsZWdsZXxmdXR1cmVmb3VuZGF0aW9ubmdvKVwuY29tJC8sCiAgICAgICAgL14obG9vcGRpZXR8aW5mb3RheGNvfG5ld3NhdGZpdHxnbzk5dGVjaHxmdWxseXRlY2gyNHxhZGZseXVybHxrZWtvbGlua3xyaWZ1cmx8YWMtbW8pXC5jb20kLywKICAgICAgICAvXih2eVwuKT9hZHN2eVwuY29tJC8sCiAgICAgICAgL14od3d3XC4pPyhjbGtwYXlzfGxua2pvYnxlZnNob3J0KVwuY29tJC8sCiAgICAgICAgL15zaHJ0KDh8MTApXC5jb20kLywKICAgICAgICAvXih0cmxpbmt8d29saW5rfHRvY2RvfGN1dHVybHxjb3Vuc2VsbGluZ3Jlc3VsdDIwMTZ8aWl0amVlbWFpbmd1aWRlfGhlYWx0aGhpbmRpZ3lhbilcLmluJC8sCiAgICAgICAgL14odXRpbWV0YWJsZXJlc3VsdHxkYWlseS1zYWxlfGxpbmtzem9uZXx2aXJhbHRlY2huaWNhbClcLmluJC8sCiAgICAgICAgL14ob2tlfGN1b258Y3Vpb3xjdWVlfGN1dXN8Y3V0b3xsaW5rdG9yfGZseWxpbmt8dWl6fHVpaXxleGV8c2hyaW5rbWV8c2hvdGx5KVwuaW8kLywKICAgICAgICAvXmN1KDJ8M3w1fDZ8NylcLmlvJC8sCiAgICAgICAgL14oYWRiaWx0eXxhZHBvcHx1anZ8dHB4fGFkc3J0fDJmbHl8bGluNjV8c2hvcnQyd2lufHN1YXJhbmtyaXxpbmZvdHJlbmR5KVwubWUkLywKICAgICAgICAvXihhZHZhbmNlZGF1dG9yZXBhaXJ0aXBzfHRha2VpdGZvcnxqZWxhamFoaW50ZXJuZXR8dmlydHVhbGRhdGF8bXVoYW1tYWR5b2dhfHMydylcLm1lJC8sCiAgICAgICAgL14oY2VwbXV6aWtpbmRpcilcLm1lJC8sCiAgICAgICAgL15saW5rXC5ha3Vub1wubmV0JC8sCiAgICAgICAgL14oc2FmZWxpbmt1fHRpbnlsaW5rc3xsaWNrbGlua3xsaW5rcmV4fHpsc2hvcnRlfHZpdmFkc3xjbGlja2FyfGJpZ2Iwc3MpXC5uZXQkLywKICAgICAgICAvXih2bnVybHx2aW5hdXJsfGZveHVybHxzaG9ydDJ3aW58Y2FzaGF0fHNocnRmbHl8c2hvcnR5ZXx2ZW50YXgpXC5uZXQkLywKICAgICAgICAvXihsaW5rNHdpbnxsaW5rc2FkfHRvcHVybHx4ZW1saW5rfGRpcmVjdGVkbGluaylcLm5ldCQvLAogICAgICAgIC9eKGNsaWNrMnVybHxsbjQzNXxtZXJkZWthaWQpXC5vbmxpbmUkLywKICAgICAgICAvXih3d3dcLik/YmxvZ2dlcndvcmxkXC5vbmxpbmUkLywKICAgICAgICAvXihsb3RlY2hub2Nhbnx1cGRhdGV0cmlidW58dGVtcGxpbmt8ZXo0bGlua3xzaG9ydGVhcm58YWRidWxsfG9uZXVybHN8YWRzcnR8ZnJlZWJjYylcLm9yZyQvLAogICAgICAgIC9edm94Y1wub3JnJC8sCiAgICAgICAgL14oY2xpa3x0b2tlbmZseXxnZXRsaW5rfHBzbHxwc3N8c2hsbnxscGV8Y2hydHxzenN8bWluaXVybClcLnB3JC8sCiAgICAgICAgL14od3d3XC4pP2x3dFwucHckLywKICAgICAgICAvXihlbDNpZHxhbGxyZXBvcnRzfGNsaWNrc2thcm8pXC5zaXRlJC8sCiAgICAgICAgL14xMjNsaW5rXC5jYXJwYXJ0c3ZpZXQ5N1wuc2l0ZSQvLAogICAgICAgIC9eKHNoaW5rfHNocnRlbnxnZy1sfHZudXJsfGJsb2dnaW5nZGVraHxsbjExfHNoMTF8dHJhZGVndXJ1fG5ld3NrYXJ0fGtpZHNvcnN8eHoyKVwueHl6JC8sCiAgICAgICAgL14odGVjaGluaHVifHZpcmFsbm93fHNob3BoaXByb3x0ZWNobm9jYW52YXN8Z2V0ZnJlc2hjbG91ZHxwcm9maXRzdHVkeXxpam9iYW5hbmEpXC54eXokLywKICAgICAgICAvXihhdXRvY2Fyc21hZ3p8Z2V0cG9ja2V0fHlhc2luZXdzfGR1bnlhbmV3c3xrb21pdXBkYXRlc3xhbGxhcHB8c213ZWJzfG5ld3MtdGVjaClcLnh5eiQvLAogICAgICAgIC9eY3V0ZGxcLnh5eiQvLAogICAgICAgIC9eKGNra3xpaXJ8dGlpKVwuYWkkLywKICAgICAgICAvXnRoaW5cLmF0JC8sCiAgICAgICAgL14odGlwc1wuKT9hdHZcLnB3JC8sCiAgICAgICAgL15za2lwXC5heiQvLAogICAgICAgIC9eKGZ1bm55cXVpenxtZWRpYWtpdGF8a2FiYXJ2aXJhbClcLmJsb2ckLywKICAgICAgICAvXihpY3V0aXR8ZWFybmJpZ3xjdXRlYXJuKVwuY2EkLywKICAgICAgICAvXmUyc1wuY2MkLywKICAgICAgICAvXihhZHp1cmx8bGluazJsaW5rKVwuY2YkLywKICAgICAgICAvXihtbGlua3xjbDI1MHx4cGlja2xlfGluZm9zZWhhdGt1KVwuY2x1YiQvLAogICAgICAgIC9eKDNic3R8Y29pbmxpbmt8aXRpdXJsfGNvc2hpbmt8bGluazVzfGN1cnN8bWFrZXVybHxtb29kZGlzb3JkZXJ8Y3V0bHMpXC5jbyQvLAogICAgICAgIC9eYmVzdHNjaG9sYWVzaGlwZGVncmVlXC5kYXRlJC8sCiAgICAgICAgL15jbGljazJzZWVcLmRlc2kkLywKICAgICAgICAvXih0bnl8dGlueSlcLmVjJC8sCiAgICAgICAgL144b1wuZWUkLywKICAgICAgICAvXnBhNGxcLmVzeVwuZXMkLywKICAgICAgICAvXihzaG9ydGVhcm58ZW5ydClcLmV1JC8sCiAgICAgICAgL14oc2NpZW5jZWxpZmV8Y3BtNGFsbClcLmdhJC8sCiAgICAgICAgL156YVwuZ2wkLywKICAgICAgICAvXnppXC5odCQvLAogICAgICAgIC9ec2hvcnRlZFwuaWQkLywKICAgICAgICAvXihpZ3JhbXxncmFtfHBpbmdpdClcLmltJC8sCiAgICAgICAgL15tZWdhdXJsXC4oaW58bGluaykkLywKICAgICAgICAvXihidXNpbmVzc2lzczJ8dGVjaGFuZHJldmlld3x5ZXNtb3ZpZXNhcHB8a3BzY3RodWxhc2lsb2dpbilcLmluZm8kLywKICAgICAgICAvXnN0Zmx5XC4oaW98cHJlc3MpJC8sCiAgICAgICAgL15seW9uXC5raW0kLywKICAgICAgICAvXmZjXC5sYyQvLAogICAgICAgIC9eKHBldHR5fHNraXBzfHRyfGZsYXopXC5saW5rJC8sCiAgICAgICAgL15wYXlza2lwXC4obWV8b3JnKSQvLAogICAgICAgIC9eYnRjXC5tcyQvLAogICAgICAgIC9ec3BsYXNobmV3c1wub29vJC8sCiAgICAgICAgL15leHByZXNzLWN1dFwub3ZoJC8sCiAgICAgICAgL15zaG9ydFwucGUkLywKICAgICAgICAvXihjbGt8Y2xsKVwuKHByZXNzfGlua3xzaHxpY3UpJC8sCiAgICAgICAgL14obG9wdGV8bWVnYWxpbmspXC5wcm8kLywKICAgICAgICAvXjEyM2xpbmtcLihwd3x2aXApJC8sCiAgICAgICAgL15yb3lhbG93blwucmV2aWV3JC8sCiAgICAgICAgL15lYXJuXC50aGVwbHVzaXRcLnJvJC8sCiAgICAgICAgL15zay1pcFwuKHJ1fHRlY2gpJC8sCiAgICAgICAgL150aW55bGlua1wucnVuJC8sCiAgICAgICAgL14ob2tvfGFpaXxzaG9ydGVuKVwuc2gkLywKICAgICAgICAvXihkdXRjaHljb3JwfGFib3V0dGVjaClcLnNwYWNlJC8sCiAgICAgICAgL15idXlpdG9ubGluZVwuc3RvcmUkLywKICAgICAgICAvXmVhdGluZ3NcLnN0cmVhbSQvLAogICAgICAgIC9edGxcLnRjJC8sCiAgICAgICAgL14oMTkyMTY4MTI1NHxnZWtpfHdlZ25lcnxncHNob3J0KVwudGVjaCQvLAogICAgICAgIC9eKGxpbmt2aXB8NHNob3J0KVwudGskLywKICAgICAgICAvXih3d3dcLik/cG5kXC50bCQvLAogICAgICAgIC9eZ2V0XC51anZcLmFsJC8sCiAgICAgICAgL14odXJsY2xvdWR8aW1hZ2VvcHRpbWl6ZXIpXC51cyQvLAogICAgICAgIC9eKGtveWxpbmtzfGJ1eS1pbi01OTlycylcLndpbiQvLAogICAgICBdLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBSZWNhcHRjaGFIYW5kbGVyKCk7CiAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBbCiAgICAgICAgL14oYXJhYnR2bGlua3xzYWZla3V8ZHo0bGluaylcLmNvbSQvLAogICAgICAgIC9ebGlua3NvZmxpZmVcLmNvJC8sCiAgICAgICAgL153aVwuY3IkLywKICAgICAgICAvXihiaXRjb2lubHl8Y2FzaHVybClcLmluJC8sCiAgICAgICAgL15saW5rc29mXC5saWZlJC8sCiAgICAgICAgL153aWNyXC5tZSQvLAogICAgICAgIC9ec2hydGl0XC50ZWNoJC8sCiAgICAgICAgL15maXJlc2hvcnRzXC50ayQvLAogICAgICAgIC9ebWl0bHlcLnVzJC8sCiAgICAgIF0sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBoYW5kbGVyID0gbmV3IEludmlzaWJsZVJlY2FwdGNoYUhhbmRsZXIoKTsKICAgICAgYXdhaXQgaGFuZGxlci5jYWxsKCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXjEyM3Nob3J0XC5iaXokLywKICAgICAgICAvXihjdXRwYWlkfHRtZWFybnxpY3V0bGluaylcLmNvbSQvLAogICAgICAgIC9eKGN0dWl8Y3V0aSlcLmluJC8sCiAgICAgICAgL156dXRyb3hcLmxpbmskLywKICAgICAgICAvXih0ZWNoY3JhemV8aGVhbHRoaW5zaWRlcilcLm9ubGluZSQvLAogICAgICAgIC9eY3V0d2luXC4odXN8Y29tKSQvLAogICAgICAgIC9eKHd3d1wuKT9zaHJpbmtcLnZpcCQvLAogICAgICBdLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBOb25EaXNhYmxlZFJlY2FwdGNoYUhhbmRsZXIoKTsKICAgICAgYXdhaXQgaGFuZGxlci5jYWxsKCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eKHd3d1wuKT9vdXJsXC5pbyQvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBPVVJMSGFuZGxlcigpOwogICAgICBhd2FpdCBoYW5kbGVyLmNhbGwoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL14od3d3XC4pP2xpbmtkcm9wXC5uZXQkLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgTGlua0Ryb3BIYW5kbGVyKCk7CiAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXnd3d1wuc2hvcnRseVwueHl6JC8sCiAgICAgIHBhdGg6IC9eXC9saW5rJC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBoYW5kbGVyID0gbmV3IFNob3J0bHlIYW5kbGVyKCk7CiAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBbCiAgICAgICAgL14oY3V0LXVybHN8bGluY2xpa3xwcmVtaXVtemVufGJ5NmRrfG1pa3ltb29uc3xtYW4ycHJvKVwuY29tJC8sCiAgICAgICAgL14obGluazR3aW58bG9hZHVybHxjdXQ0bGlua3xyYW9saW5rfGFkc2hvcnRlKVwuY29tJC8sCiAgICAgICAgL15zaG9ydFwucGFzdGV3bWFcLmNvbSQvLAogICAgICAgIC9ebGlua2ZseVwuZ2Fvc21lZGlhXC5jb20kLywKICAgICAgICAvXih3d3dcLik/dmlyYWx1a2tcLmNvbSQvLAogICAgICAgIC9eKHd3d1wuKT9uaWFnb3Nob3J0XC5jb20kLywKICAgICAgICAvXnd3d1wud29ybGRoYWNrXC5uZXQkLywKICAgICAgICAvXihla2xpbmspXC5uZXQkLywKICAgICAgICAvXnJveXVybHNcLmJpZCQvLAogICAgICAgIC9ec2hvcnRpdFwuY2EkLywKICAgICAgICAvXih1cmxlfGFkc2hvcnQpXC5jbyQvLAogICAgICAgIC9eKDEpP2lkc2x5XC4oY29tfGJpZHxuZXR8b3JnKSQvLAogICAgICAgIC9ec2hvcnRhZFwuY2YkLywKICAgICAgICAvXihhZGJpbHR5fHRhaXZlKVwuaW4kLywKICAgICAgICAvXihjdXJzfGNydXN8NGN1dHx1MnN8bDJzKVwuaW8kLywKICAgICAgICAvXjEyM2xpbmtcLihpb3xjb3xwcmVzc3xwcm8pJC8sCiAgICAgICAgL15wZXR0eVwubGluayQvLAogICAgICAgIC9eKHdlZWZ5fGFkYnVsbHx6ZWl6fGxpbms0fGFkY29pbilcLm1lJC8sCiAgICAgICAgL15kenVybFwubWwkLywKICAgICAgICAvXnNwYW1saW5rXC5vcmckLywKICAgICAgICAvXih0d2lrfGFkc2xpbmspXC5wdyQvLAogICAgICAgIC9eZ2l0XC50YyQvLAogICAgICAgIC9eKGFkZnV8bGlua3UpXC51cyQvLAogICAgICBdLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBTdGFnZWRIYW5kbGVyKCk7CiAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCgpOwogICAgfSwKICB9KTsKICBjbGFzcyBBYnN0cmFjdEhhbmRsZXIgewogICAgY29uc3RydWN0b3IgKCkgewogICAgICB0aGlzLl9vdmVybGF5U2VsZWN0b3IgPSBbCiAgICAgICAgJ1tjbGFzcyQ9Ik92ZXJsYXkiXScsCiAgICAgICAgJyNfX3JhbmRvbV9jbGFzc19uYW1lX18nLAogICAgICAgICcjaGVhZGxpbmVhdGFzJywKICAgICAgICAnI215TW9kYWwnLAogICAgICAgICcub3BhY2l0eV93cmFwcGVyJywKICAgICAgICAnI292ZXJsYXknLAogICAgICBdLmpvaW4oJywgJyk7CiAgICAgIHRoaXMuX2Zvcm1TZWxlY3RvciA9IFsKICAgICAgICAnI2dvLWxpbmsnLAogICAgICAgICcuZ28tbGluaycsCiAgICAgICAgJyNvcmlnaW5hbExpbmsuZ2V0LWxpbmsnLAogICAgICAgICdmb3JtW2FjdGlvbj0iL2xpbmtzL2dvIl0nLAogICAgICAgICdmb3JtW2FjdGlvbj0iL2xpbmtzL2xpbmtkcm9wZ28iXScsCiAgICAgIF0uam9pbignLCAnKTsKICAgIH0KICAgIHJlbW92ZU92ZXJsYXkgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKHRoaXMuX292ZXJsYXlTZWxlY3Rvcik7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5ibG9jayh0aGlzLl9vdmVybGF5U2VsZWN0b3IsIGRvY3VtZW50LmJvZHkpOwogICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdpbml0aWFsJzsKICAgICAgfSwgNTAwKTsKICAgIH0KICAgIHJlbW92ZUZyYW1lICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICB9CiAgICBhc3luYyBjYWxsICgpIHsKICAgICAgY29uc3Qgb2sgPSBhd2FpdCB0aGlzLnByZXBhcmUoKTsKICAgICAgaWYgKCFvaykgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBtdyA9IGF3YWl0IHRoaXMuZ2V0TWlkZGxld2FyZSgpOwogICAgICBpZiAoIW13KSB7CiAgICAgICAgdGhpcy53aXRob3V0TWlkZGxld2FyZSgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB1cmwgPSBhd2FpdCB0aGlzLmdldFVSTChtdyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgfQogIH0KICBjbGFzcyBOb1JlY2FwdGNoYUhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgewogICAgcHJlcGFyZSAoKSB7CiAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTsKICAgICAgdGhpcy5yZW1vdmVPdmVybGF5KCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXN5bmMgZ2V0TWlkZGxld2FyZSAoKSB7CiAgICAgIHJldHVybiBhd2FpdCBnZXRKUXVlcnlGb3JtKHRoaXMuX2Zvcm1TZWxlY3Rvcik7CiAgICB9CiAgICB3aXRob3V0TWlkZGxld2FyZSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5pbmZvKCdubyBmb3JtJyk7CiAgICB9CiAgICBhc3luYyBnZXRVUkwgKGpGb3JtKSB7CiAgICAgIHJldHVybiBhd2FpdCBnZXRVUkxGcm9tSlF1ZXJ5Rm9ybShqRm9ybSk7CiAgICB9CiAgfQogIGNsYXNzIFJlY2FwdGNoYUhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgewogICAgYXN5bmMgcHJlcGFyZSAoKSB7CiAgICAgIHRoaXMucmVtb3ZlT3ZlcmxheSgpOwogICAgICBjb25zdCBmID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNjYXB0Y2hhU2hvcnRsaW5rLCBkaXYuZy1yZWNhcHRjaGEnKTsKICAgICAgaWYgKCFmKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmluZm8oJ3JlY2FwdGNoYSBkZXRlY3RlZCwgc3RvcCcpOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygndHJ5aW5nIHRvIGxpc3RlbiBzdWJtaXQgYnV0dG9uJyk7CiAgICAgIGNvbnN0IGIgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2ludmlzaWJsZUNhcHRjaGFTaG9ydGxpbmsnKTsKICAgICAgaWYgKCFiKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMuc3VibWl0TGlzdGVuKGIsIGYpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBhc3luYyBzdWJtaXRMaXN0ZW4gKGIpIHsKICAgICAgY29uc3QgbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgICBpZiAoIWIuZGlzYWJsZWQpIHsKICAgICAgICAgIGIuY2xpY2soKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBvLm9ic2VydmUoYiwgewogICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsCiAgICAgIH0pOwogICAgfQogICAgYXN5bmMgZ2V0TWlkZGxld2FyZSAoKSB7CiAgICAgIHJldHVybiBhd2FpdCBnZXRKUXVlcnlGb3JtKHRoaXMuX2Zvcm1TZWxlY3Rvcik7CiAgICB9CiAgICB3aXRob3V0TWlkZGxld2FyZSAoKSB7CiAgICAgIGNvbnN0IGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2xpbmstdmlldycpOwogICAgICBmLnN1Ym1pdCgpOwogICAgfQogICAgYXN5bmMgZ2V0VVJMIChqRm9ybSkgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDEwMDApOwogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBnZXRVUkxGcm9tSlF1ZXJ5Rm9ybShqRm9ybSk7CiAgICAgICAgICBpZiAodXJsKSB7CiAgICAgICAgICAgIHJldHVybiB1cmw7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhcm4oZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGNsYXNzIEludmlzaWJsZVJlY2FwdGNoYUhhbmRsZXIgZXh0ZW5kcyBSZWNhcHRjaGFIYW5kbGVyIHsKICAgIGFzeW5jIHN1Ym1pdExpc3RlbiAoYiwgZikgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDAwKTsKICAgICAgY29uc3QgY2xpY2sgPSBmLmNsaWVudFdpZHRoID09PSAwIHx8IGYuY2hpbGROb2Rlcy5sZW5ndGggPT09IDA7CiAgICAgIGlmIChjbGljayAmJiAhYi5kaXNhYmxlZCkgewogICAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5pbmZvKCdjbGlja2luZyBzdWJtaXQgYnV0dG9uLCBiZWNhdXNlIHJlY2FwdGNoYSB3YXMgZW1wdHknKTsKICAgICAgICBiLnNldEF0dHJpYnV0ZSgnb25jbGljaycsICcnKTsKICAgICAgICBiLmNsaWNrKCk7CiAgICAgIH0KICAgIH0KICB9CiAgY2xhc3MgTm9uRGlzYWJsZWRSZWNhcHRjaGFIYW5kbGVyIGV4dGVuZHMgUmVjYXB0Y2hhSGFuZGxlciB7CiAgICBhc3luYyBzdWJtaXRMaXN0ZW4gKGIpIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg1MDApOwogICAgICAgIGlmIChncmVjYXB0Y2hhICYmIGdyZWNhcHRjaGEuZ2V0UmVzcG9uc2UoKS5sZW5ndGggIT09IDApIHsKICAgICAgICAgIGIuY2xpY2soKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBjbGFzcyBPVVJMSGFuZGxlciBleHRlbmRzIFJlY2FwdGNoYUhhbmRsZXIgewogICAgYXN5bmMgZ2V0TWlkZGxld2FyZSAoKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdmVyaWZ5OiBhd2FpdCBnZXRKUXVlcnlGb3JtKCcjZ2V0LWxpbmsnKSwKICAgICAgICBnbzogYXdhaXQgZ2V0SlF1ZXJ5Rm9ybSh0aGlzLl9mb3JtU2VsZWN0b3IpLAogICAgICB9OwogICAgfQogICAgYXN5bmMgZ2V0VVJMIChqRm9ybU9iamVjdCkgewogICAgICBhd2FpdCBnZXRVUkxGcm9tSlF1ZXJ5Rm9ybShqRm9ybU9iamVjdC52ZXJpZnkpOwogICAgICByZXR1cm4gYXdhaXQgZ2V0VVJMRnJvbUpRdWVyeUZvcm0oakZvcm1PYmplY3QuZ28pOwogICAgfQogIH0KICBjbGFzcyBMaW5rRHJvcEhhbmRsZXIgZXh0ZW5kcyBSZWNhcHRjaGFIYW5kbGVyIHsKICAgIGFzeW5jIGdldE1pZGRsZXdhcmUgKCkgewogICAgICByZXR1cm4gYXdhaXQgZ2V0SlF1ZXJ5Rm9ybSgnI215bGluazEnKTsKICAgIH0KICB9CiAgY2xhc3MgU3RhZ2VkSGFuZGxlciBleHRlbmRzIEFic3RyYWN0SGFuZGxlciB7CiAgICBwcmVwYXJlICgpIHsKICAgICAgdGhpcy5yZW1vdmVGcmFtZSgpOwogICAgICB0aGlzLnJlbW92ZU92ZXJsYXkoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBhc3luYyBnZXRNaWRkbGV3YXJlICgpIHsKICAgICAgY29uc3QgZiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjbGluay12aWV3Jyk7CiAgICAgIGlmICghZikgewogICAgICAgIHJldHVybiBkb2N1bWVudDsKICAgICAgfQogICAgICBjb25zdCBhcmdzID0gZXh0cmFjdEFyZ3VtZW50KGYpOwogICAgICBjb25zdCB1cmwgPSBmLmdldEF0dHJpYnV0ZSgnYWN0aW9uJyk7CiAgICAgIGxldCBwYWdlID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnBvc3QodXJsLCBhcmdzKTsKICAgICAgcGFnZSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS50b0RPTShwYWdlKTsKICAgICAgcmV0dXJuIHBhZ2U7CiAgICB9CiAgICB3aXRob3V0TWlkZGxld2FyZSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5pbmZvKCdubyBwYWdlJyk7CiAgICB9CiAgICBhc3luYyBnZXRVUkwgKHBhZ2UpIHsKICAgICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZ28tbGluaycsIHBhZ2UpOwogICAgICBjb25zdCBhcmdzID0gZXh0cmFjdEFyZ3VtZW50KGYpOwogICAgICBjb25zdCB1cmwgPSBmLmdldEF0dHJpYnV0ZSgnYWN0aW9uJyk7CiAgICAgIGxldCBkYXRhID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnBvc3QodXJsLCBhcmdzKTsKICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgICAgIGlmIChkYXRhICYmIGRhdGEudXJsKSB7CiAgICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm51a2UoZGF0YS51cmwpOwogICAgICAgIHJldHVybiBkYXRhLnVybDsKICAgICAgfQogICAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJ3dyb25nIGRhdGEnKTsKICAgIH0KICB9CiAgY2xhc3MgU2hvcnRseUhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgewogICAgcHJlcGFyZSAoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXN5bmMgZ2V0TWlkZGxld2FyZSAoKSB7CiAgICAgIGxldCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNteU1vZGFsIC5idG4tcHJpbWFyeScpOwogICAgICBhID0gYS5wYXRobmFtZS5tYXRjaCgvXlwvclwvKC4rKS8pOwogICAgICByZXR1cm4gYVsxXTsKICAgIH0KICAgIHdpdGhvdXRNaWRkbGV3YXJlICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmluZm8oJ25vIHBhZ2UnKTsKICAgIH0KICAgIGFzeW5jIGdldFVSTCAoaWQpIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmpRdWVyeS5wb3N0KCdnZXRsaW5rLnBocCcsIHtpZDogaWR9KS5kb25lKGZ1bmN0aW9uICh1cmwpIHsKICAgICAgICAgIGlmICh1cmwubWF0Y2goL15odHRwLykpIHsKICAgICAgICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBleHRyYWN0QXJndW1lbnQgKGZvcm0pIHsKICAgIGNvbnN0IGFyZ3MgPSB7fTsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5mb3JFYWNoKF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kJCgnaW5wdXQnLCBmb3JtKSwgKHYpID0+IHsKICAgICAgYXJnc1t2Lm5hbWVdID0gdi52YWx1ZTsKICAgIH0pOwogICAgcmV0dXJuIGFyZ3M7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIGdldEpRdWVyeUZvcm0gKHNlbGVjdG9yKSB7CiAgICBsZXQgalF1ZXJ5ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy4kOwogICAgd2hpbGUgKCFqUXVlcnkpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTApOwogICAgICBqUXVlcnkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LiQ7CiAgICB9CiAgICBjb25zdCBmID0galF1ZXJ5KHNlbGVjdG9yKTsKICAgIGlmIChmLmxlbmd0aCA+IDApIHsKICAgICAgcmV0dXJuIGY7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZnVuY3Rpb24gZ2V0VVJMRnJvbUpRdWVyeUZvcm0gKGpGb3JtKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gewogICAgICBpZiAoakZvcm0uaXMoJ2EnKSAmJiBqRm9ybS5hdHRyKCdocmVmJykpIHsKICAgICAgICByZXNvbHZlKGpGb3JtLmF0dHIoJ2hyZWYnKSk7CiAgICAgIH0KICAgICAgY29uc3QgalF1ZXJ5ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy4kOwogICAgICBqUXVlcnkuYWpheCh7CiAgICAgICAgZGF0YVR5cGU6ICdqc29uJywKICAgICAgICB0eXBlOiAnUE9TVCcsCiAgICAgICAgdXJsOiBqRm9ybS5hdHRyKCdhY3Rpb24nKSwKICAgICAgICBkYXRhOiBqRm9ybS5zZXJpYWxpemUoKSwKICAgICAgICBzdWNjZXNzOiAocmVzdWx0KSA9PiB7CiAgICAgICAgICBpZiAocmVzdWx0LnVybCkgewogICAgICAgICAgICByZXNvbHZlKHJlc3VsdC51cmwpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVqZWN0KG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcihyZXN1bHQubWVzc2FnZSkpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZXJyb3I6ICh4aHIsIHN0YXR1cywgZXJyb3IpID0+IHsKICAgICAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YXJuKHhociwgc3RhdHVzLCBlcnJvcik7CiAgICAgICAgICByZWplY3QobmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdyZXF1ZXN0IGVycm9yJykpOwogICAgICAgIH0sCiAgICAgIH0pOwogICAgfSk7CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebGlua2R1aXRcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuY29sLWxnLTggaDEnKS50ZXh0Q29udGVudDsKICAgIGNvbnN0IGNoZWNrID0gbC5tYXRjaCgvXmh0dHBzPzpcL1wvLyk7CiAgICBpZiAoY2hlY2spIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9saW5rcGx1Z2FwcFwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNtY19lbWJlZF9zaWdudXBfc2Nyb2xsIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebGlua3Nhc1wudXMkLywKICAgIHBhdGg6IC9eKFwvXHcrKSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKG0pIHsKICAgIGNvbnN0IHJlY2FwdGNoYSA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS50cnlFdmVyeSgxMDAwLCAoKSA9PiB7CiAgICAgIGNvbnN0IHJlY2FwdGNoYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZy1yZWNhcHRjaGEtcmVzcG9uc2UnKTsKICAgICAgaWYgKCFyZWNhcHRjaGEpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoIXJlY2FwdGNoYS52YWx1ZSkgewogICAgICAgIHJldHVybiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZTsKICAgICAgfQogICAgICByZXR1cm4gcmVjYXB0Y2hhLnZhbHVlOwogICAgfSk7CiAgICBjb25zdCB1cmwgPSBgaHR0cDovL2lwaW5mby5pby8ke19BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5nZW5lcmF0ZVJhbmRvbUlQKCl9L2pzb25gOwogICAgbGV0IGlwaW5mbyA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQodXJsKTsKICAgIGlwaW5mbyA9IEpTT04ucGFyc2UoaXBpbmZvKTsKICAgIGNvbnN0IHBheWxvYWQgPSB7CiAgICAgIGNvZGVBZHM6IDEsCiAgICAgIGNvdW50cnk6IGlwaW5mby5jb3VudHJ5LAogICAgICBpcEFkZHJlc3M6IGlwaW5mby5pcCwKICAgICAgcmVjYXB0Y2hhOiByZWNhcHRjaGEsCiAgICB9OwogICAgY29uc3QgdG9rZW4gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0Q29va2llKCdYU1JGLVRPS0VOJyk7CiAgICBsZXQgZGF0YSA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KCcvZ28nICsgbS5wYXRoWzFdLCBwYXlsb2FkLCB7CiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICdYLVhTUkYtVE9LRU4nOiB0b2tlbiwKICAgIH0pOwogICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZGF0YS5tZXNzYWdlKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmxpbmtzYXNcLnVzJC8sCiAgICBwYXRoOiAvXlwvZ29cLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNidG5TdWJtaXQnKTsKICAgIGlmICghYSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCB1cmwgPSBhLmhyZWY7CiAgICBjb25zdCBwYXR0ZXJuID0gL2h0dHBzPzpcL1wvL2c7CiAgICBsZXQgbGFzdFVSTCA9ICcnOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29uc3QgbWF0Y2hlZCA9IHBhdHRlcm4uZXhlYyh1cmwpOwogICAgICBpZiAoIW1hdGNoZWQpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBsYXN0VVJMID0gbWF0Y2hlZCArIHVybC5zdWJzdHJpbmcocGF0dGVybi5sYXN0SW5kZXgpOwogICAgfQogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGxhc3RVUkwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKGxpbmtzaHJpbmt8bG5rc2hybmspXC5uZXQkLywKICAgIHBhdGg6IC9eXC9bYS16QS1aMC05XSskLywKICB9LAogIGFzeW5jIHN0YXJ0ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuX2ltcHNwY2FiZSA9IDA7CiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgbCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvcmV2Q1woIihbXiJdKykiXCkvKTsKICAgIGwgPSBhdG9iKGxbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKCcvJyArIGwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKGxpbmtzaHJpbmt8bG5rc2hybmspXC5uZXQkLywKICAgIHBhdGg6IC89KC4rKSQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtLnBhdGhbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZHdpbmRseVwuaW8kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBsID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9lbmNEXCgiKFteIl0rKSJcKS8pOwogICAgaWYgKGwpIHsKICAgICAgbCA9IGF0b2IobFsxXSk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnLycgKyBsKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvZG9jdW1lbnRcLmxvY2F0aW9uXC5ocmVmID0gIihbXiJdKykiLyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobFsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXmxpbmtzdXB0b1wuY29tJC8sCiAgICAgIC9edXBsaW5rdG9cLm1lJC8sCiAgICBdLAogICAgcGF0aDogL15cL3ZpZXdcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5zdWJtaXQtY2FwdGNoYS5yb3cgLmNvbC1zbS0zLmNvbC1zbS1vZmZzZXQtNCBidXR0b24nKTsKICAgIGwuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ebGluay10b1wubmV0JC8sCiAgICAgIC9ebGlua3ZlcnRpc2VcLmNvbSQvLAogICAgXSwKICAgIHF1ZXJ5OiAvXlw/cj0oW2EtekEtWjAtOS89XSspJC8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgdXJsID0gYXRvYihtLnF1ZXJ5WzFdKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZGlyZWN0LWxpbmtcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbHYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3dpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCgiKFteIl0rKSJcKTsvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsdlsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14ocmQ/KWxua1wuY28kLywKICAgIHBhdGg6IC9eXC9bXi5dKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpZnJhbWUjZGVzdCcpOwogICAgaWYgKGYpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGYuc3JjKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBsZXQgbyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjdXJsaG9sZGVyJyk7CiAgICBpZiAobykgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsoby52YWx1ZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG8gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI3NraXBCdG4nKTsKICAgIGlmIChvKSB7CiAgICAgIG8gPSBvLnF1ZXJ5U2VsZWN0b3IoJ2EnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG8uaHJlZik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG8gPSBkb2N1bWVudC50aXRsZS5yZXBsYWNlKC8oTE5LLmNvfExpbmtiZWUpXHMqOlxzKi8sICcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhvKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wubG9saW5lelwuY29tJC8sCiAgICBxdWVyeTogL1w/KC4rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG0ucXVlcnlbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5taWplXC5uZXQkLywKICAgIHBhdGg6IC9eXC9cdytcLyguKykkLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBjb25zdCB1cmwgPSBhdG9iKG0ucGF0aFsxXSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ebWluaWRyb2lkXC5uZXQkLywKICAgICAgL15saW5rcG9pXC5pbiQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYS5yZWRpcmVjdCwgYVt0YXJnZXQ9X2JsYW5rXVtyZWw9bm9mb2xsb3ddJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXm1pcnJvcmZpbGVob3N0XC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDMgKiAxMDAwKTsKICAgIGNvbnN0IGZyYW1lID0gZnJhbWVzWzBdOwogICAgY29uc3QgZm9ybSA9IGZyYW1lLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTsKICAgIGZvcm0udGFyZ2V0ID0gJ19wYXJlbnQnOwogICAgZm9ybS5hY3Rpb24gPSBsb2NhdGlvbi50b1N0cmluZygpOwogICAgY29uc3QgaW5wdXQgPSBmcmFtZS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgaW5wdXQudmFsdWUgPSAnRG93bmxvYWQnOwogICAgaW5wdXQudHlwZSA9ICdzdWJtaXQnOwogICAgZm9ybS5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICBmcmFtZS5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGZvcm0pOwogICAgaW5wdXQuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXm1vZXN1YnNcLmNvbSQvLAogICAgcGF0aDogL15cL3VybFwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5nb3RvbGluayA+IGNlbnRlcjpudGgtY2hpbGQoMSkgPiBkaXY6bnRoLWNoaWxkKDEpID4gaTpudGgtY2hpbGQoMiknKTsKICAgIGEgPSBhLnRleHRDb250ZW50OwogICAgY29uc3QgaSA9IGEubGFzdEluZGV4T2YoJ2h0dHAnKTsKICAgIGEgPSBhLnN1YnN0cihpKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL215LWxpbmsucHJvLyonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaWZyYW1lW3Njcm9sbGluZz1hdXRvXScpOwogICAgaWYgKGkpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGkuc3JjKTsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/bXlsaW5rXC56b25lJC8sCiAgICBwYXRoOiAvXlwvW14vXSskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgY29uc3QgbWF0Y2hlcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvPGEgaHJlZj0iaHR0cHM6XC9cLyg/Ond3d1wuKT9teWxpbmtcLnpvbmVcL2xpbmtcL3JlZGlyZWN0XC9cP3VybD0oW14mXSspJi8pOwogICAgY29uc3QgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoZXNbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15vbmVwaWVjZS1leFwuY29tXC5iciQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBtYXRjaGVzID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC88YSBocmVmPSIoW14mXSspKD89IiApLyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobWF0Y2hlc1sxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnd3d1wubmFtaXl0XC5jb20kLywKICAgICAgL15yZWFsc2h0XC5tb2JpJC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjc2VjdGlvbjEgZm9ybSBpbnB1dCNzZWN0aW9uMScpOwogICAgbi5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebm1hY1wudG8kLywKICAgIHBhdGg6IC9eXC9kb3dubG9hZFwvKC4rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgdXJsID0gYXRvYihtLnBhdGhbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15uc2Z3XC5pbiQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbG9uZ191cmwgYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15udXRzaGVsbHVybFwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpZnJhbWUgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaWZyYW1lJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaWZyYW1lLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLm9uaVwudm4kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgbGV0IGRhdGEgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2RhdGE6IihbXiJdKykiLyk7CiAgICBpZiAoIWRhdGEpIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdwYXR0ZXJuIGNoYW5nZWQnKTsKICAgIH0KICAgIGRhdGEgPSBkYXRhWzFdOwogICAgY29uc3QgdXJsID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldCgnL2NsaWNrLmh0bWwnLCBkYXRhKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14od3d3XC4pP291b1wuKGlvfHByZXNzKSQvLAogICAgICAvXihzbG9vbXB8bm92YWVucmV0YSlcLnNwYWNlJC8sCiAgICBdLAogICAgcGF0aDogL15cL2dvXC9cdyskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmb3JtJykuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15wXC5wdyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBsZXQgbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvd2luZG93XC5sb2NhdGlvbiA9ICIoLiopIjsvKTsKICAgIG0gPSBtWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecGRpMlwubmV0JC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvdG9wXC5sb2NhdGlvbiA9ICcoW14nXSspJy8pOwogICAgcyA9IHNbMV07CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsocyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXihwcm9idXNpbmVzc2h1Ynx0ZWNub2diKVwuY29tJC8sCiAgICAgIC9eKHRyYWNreXdlfHN0YXJ2YXRlKVwuaW4kLywKICAgICAgL152aXJhbGNvbGxlY3RcLmluZm8kLywKICAgICAgL14odGVjaG5vZGlhfG91cnRlY2hub2V3fG11dGhhcmFtbXNzfHRoYW5kYXx0aGluYW5hKVwueHl6JC8sCiAgICAgIC9eZW50cmV0ZW5kb25hd2ViXC5nYSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBmID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2Zvcm1baWQkPS1zdWJzY3JpYmVdJyk7CiAgICBpZiAoZikgewogICAgICBmLmFjdGlvbiA9IGYuYWN0aW9uLnJlcGxhY2UoJ2h0dHA6JywgJ2h0dHBzOicpOwogICAgICBmLnN1Ym1pdCgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBmID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9sb2NhdGlvblwuaHJlZj0iKFteIl0rKSIvKTsKICAgIGYgPSBmWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecHVjdWtcLnh5eiQvLAogICAgcGF0aDogL15cL1x3Ky8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBweCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjY29udGVudCBhcnRpY2xlIGNlbnRlciBhLmJ1dHRvbi5pY29uLmZhLWxpbmsnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhweC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3JpY2hsaW5rLmNvbS9hcHAvd2Vic2NyP2NtZD1fY2xpY2sma2V5PSonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ZyYW1lc2V0Jyk7CiAgICBmID0gZi5vbmxvYWQudG9TdHJpbmcoKTsKICAgIGYgPSBmLm1hdGNoKC91cmw9KFteJl0rKS8pOwogICAgaWYgKGYpIHsKICAgICAgZiA9IGRlY29kZVVSSUNvbXBvbmVudChmWzFdKTsKICAgIH0gZWxzZSB7CiAgICAgIGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZnJhbWVbbmFtZT1zaXRlXScpOwogICAgICBmID0gZi5zcmM7CiAgICB9CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15wcmV2aWV3XC5ybHVcLnJ1JC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb250ZW50ID4gLmxvbmdfdXJsID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLnJvblwudm4kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHNjcmlwdCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygnbGlua25leHR0b3AnKTsKICAgIGNvbnN0IGRhdGEgPSBzY3JpcHQubWF0Y2goL2RhdGE6IihbXiJdKykiLyk7CiAgICBsZXQgdXJsID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5kb21haW4gKyAnY2xpY2suaHRtbD8nICsgZGF0YVsxXTsKICAgIHVybCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQodXJsLCB7fSwgewogICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnLAogICAgfSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/c2FcLmFlJC8sCiAgICBwYXRoOiAvXlwvXHcrXC8kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2NvbnN0IHJlYWxfbGluayA9ICcoW14nXSspJzsvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/c2FmZXVybFwuZXUkLywKICAgIHBhdGg6IC9cL1x3Ky8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgZGlyZWN0VXJsID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC93aW5kb3dcLm9wZW5cKCIoW14iXSspIlwpOy8pOwogICAgaWYgKCFkaXJlY3RVcmwpIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdzY3JpcHQgY29udGVudCBjaGFuZ2VkJyk7CiAgICB9CiAgICBkaXJlY3RVcmwgPSBkaXJlY3RVcmxbMV07CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZGlyZWN0VXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ec2VnbWVudG5leHRcLmNvbSQvLAogICAgICAvXih3d3dcLik/dmlkZW9nYW1lc2Jsb2dnZXJcLmNvbSQvLAogICAgXSwKICAgIHBhdGg6IC9eXC9pbnRlcnN0aXRpYWxcLmh0bWwkLywKICAgIHF1ZXJ5OiAvcmV0dXJuX3VybD0oW14mXSspLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZGVjb2RlVVJJQ29tcG9uZW50KG0ucXVlcnlbMV0pKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHd3d1wuKT9zZW1wcm90XC5jb20kLywKICAgICAgL140NlwuMTY2XC4xNjdcLjE2JC8sCiAgICBdLAogICAgcGF0aDogL15cL2FobGlcLnBocC8sCiAgICBxdWVyeTogL15cP3VybD0oLiopLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHNlbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvdmFyIHRoZV91cmwgPSAnKFteJ10rKSc7Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsoc2VtWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHd3d1wuKT9hcHBsb2FkelwucnUkLywKICAgICAgL14od3d3XC4pP3Nlb21hZmlhXC5uZXQkLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgndGFibGUgYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgY29uc3QgaG9zdFJ1bGVzID0gWwogICAgL14oam53MHxjbGxrbWV8Y2xrbWVpbnxjb3JuZWV5fGNlZXN0eSlcLmNvbSQvLAogICAgL14oZGVzdHl5fGZlc3R5eXxnZXN0eXkpXC5jb20kLywKICAgIC9ec2hcLnN0JC8sCiAgICAvXih2aWlkfHdpaWR8Y2xrbWUpXC5tZSQvLAogIF07CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogaG9zdFJ1bGVzLAogICAgICBwYXRoOiAvXlwvZnJlZXplXC8uKy8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgICBjb25zdCBvID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4gewogICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7CiAgICAgICAgICAgIGlmIChtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKCdjbGFzcycpLm1hdGNoKC9hY3RpdmUvKSkgewogICAgICAgICAgICAgIG8uZGlzY29ubmVjdCgpOwogICAgICAgICAgICAgIHJlc29sdmUobXV0YXRpb24udGFyZ2V0LmhyZWYpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBvLm9ic2VydmUoT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNza2lwX2J1dHRvbicpLCB7CiAgICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLAogICAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ2NsYXNzJ10sCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICBjb25zdCB1cmwgPSBhd2FpdCBwcm9taXNlOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogaG9zdFJ1bGVzLAogICAgICBwYXRoOiAvaHR0cHM/OlwvXC8vLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0ICgpIHsKICAgICAgbGV0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggKyB3aW5kb3cubG9jYXRpb24uaGFzaDsKICAgICAgdXJsID0gdXJsLm1hdGNoKC8oaHR0cHM/OlwvXC8uKikkLyk7CiAgICAgIHVybCA9IHVybFsxXTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IGhvc3RSdWxlcywKICAgICAgcGF0aDogL15cL1tcZFx3XSsvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0ICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5faW1wc3BjYWJlID0gMDsKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlQWxsVGltZXIoKTsKICAgICAgY29uc3QgbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvc2Vzc2lvbklkOiAiKFtcZFx3XSspIiwvKTsKICAgICAgaWYgKG0pIHsKICAgICAgICBhZnRlckdvdFNlc3Npb25JZChtWzFdKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHsKICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9zZXNzaW9uSWQ6ICIoW1xkXHddKykiLC8pOwogICAgICAgICAgaWYgKG0pIHsKICAgICAgICAgICAgby5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgIGFmdGVyR290U2Vzc2lvbklkKG1bMV0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgby5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsKICAgICAgICBjaGlsZExpc3Q6IHRydWUsCiAgICAgIH0pOwogICAgfSwKICB9KTsKICBmdW5jdGlvbiBhZnRlckdvdFNlc3Npb25JZCAoc2Vzc2lvbklkKSB7CiAgICBjb25zdCBYX05ld1JlbGljX0lEID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC94cGlkOiIoW14iXSspIi8pOwogICAgY29uc3QgZGF0YSA9IHsKICAgICAgYWRTZXNzaW9uSWQ6IHNlc3Npb25JZCwKICAgIH07CiAgICBjb25zdCBoZWFkZXIgPSB7CiAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCcsCiAgICB9OwogICAgaWYgKFhfTmV3UmVsaWNfSUQpIHsKICAgICAgaGVhZGVyWydYLU5ld1JlbGljLUlEJ10gPSBYX05ld1JlbGljX0lEOwogICAgfQogICAgY29uc3QgaSA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldCgnL3Nob3J0ZXN0LXVybC9lbmQtYWRzZXNzaW9uJywgZGF0YSwgaGVhZGVyKS50aGVuKGZ1bmN0aW9uICh0ZXh0KSB7CiAgICAgICAgY29uc3QgciA9IEpTT04ucGFyc2UodGV4dCk7CiAgICAgICAgaWYgKHIuc3RhdHVzID09ICdvaycgJiYgci5kZXN0aW5hdGlvblVybCkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbChpKTsKICAgICAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmVBbGxUaW1lcigpOwogICAgICAgICAgY29uc3QgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHIuZGVzdGluYXRpb25VcmwpOwogICAgICAgICAgcmV0dXJuIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LCAxMDAwKTsKICB9Cn0pKCk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14oc2hvcnR8c3J0KVwuYW0kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwMDApOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKCcnLCB7CiAgICAgIHBvc3Q6IHsKICAgICAgICBfaW1hZ2U6ICdDb250aW51ZScsCiAgICAgIH0sCiAgICB9KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/c2hvcnRpXC5nYSQvLAogICAgcGF0aDogWwogICAgICAvXlwvXHcrJC8sCiAgICAgIC9eXC91cmxfcmVkaXJlY3RvclwuaHRtbCQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCQoJ2ZyYW1lJyk7CiAgICBjb25zdCBbLCB2LF0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uZmluZChmLCAodmFsdWUpID0+IHsKICAgICAgaWYgKHZhbHVlLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkgewogICAgICAgIHJldHVybiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZTsKICAgICAgfQogICAgICByZXR1cm4gJ1RhcmdldCBmcmFtZSBmb3VuZCc7CiAgICB9KTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh2LnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zaG9ydGlkXC5jbyQvLAogICAgcGF0aDogL15cL1thLXpBLVowLTldKy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2EjbWFraW5nZGlmZmVyZW50dGltZXInKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhzLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZ2V0XC5zaHJpbmstc2VydmljZVwuaXQkLywKICAgIHBhdGg6IC9eXC8oLispLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYC8vd3d3LnNocmluay1zZXJ2aWNlLml0L3Nocmlua2VkLyR7bS5wYXRoWzFdfWApOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5zaHJpbmstc2VydmljZVwuaXQkLywKICAgIHBhdGg6IC9eXC9zaHJpbmtlZFwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW5wdXRbaWRdW25hbWVdJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaS52YWx1ZSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLnNocmluay1zZXJ2aWNlXC5pdCQvLAogICAgcGF0aDogL15cL1tzZV1cLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYm9keSA+IGlucHV0W2lkXVtuYW1lXScpOwogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGkudmFsdWUpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec2h0XC5pbyQvLAogICAgcGF0aDogL15cL1xkK1wvKC4rKSQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGxldCB1cmwgPSBhdG9iKG0ucGF0aFsxXSk7CiAgICB1cmwgPSB1cmwubWF0Y2goL1x7c2h0LWlvXH0oLispXHtzaHQtaW9cfS4qXHtzaHQtaW9cfS8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybFsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zaHRsaW5rXC5jbyQvLAogICAgcGF0aDogL15cL3Nob3J0LXVybFwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG1ldGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnbWV0YVtuYW1lPSJkZXNjcmlwdGlvbiJdJyk7CiAgICBjb25zdCB1cmwgPSBtZXRhLmNvbnRlbnQ7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnNodG1lXC5jbyQvLAogICAgcGF0aDogL15cL1x3Ky8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5jb250ZW50IGRpdiBhIGJ1dHRvbicpOwogICAgcy5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9zaW1pbGFyc2l0ZXNcLmNvbSQvLAogICAgcGF0aDogL15cL2dvdG9cLyhbXj9dKykvCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgbGV0IGwgPSBtLnBhdGhbMV07CiAgICBpZiAoIS9eaHR0cHM/OlwvXC8vLnRlc3QobCkpIHsKICAgICAgbCA9ICdodHRwOi8vJyArIGw7CiAgICB9CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zbGlua1wuYmlkJC8sCiAgICBwYXRoOiAvXlwvc2hvcnRcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy50ZXh0LWNlbnRlciBhI2J0bi1tYWluLmJ0bi5idG4tbWFpbicpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLnNwYXN0ZVwuY29tJC8sCiAgICBwYXRoOiAvXlwvZ29cL1x3KyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaWQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL1x7aWQ6JyhcZCspJ1x9Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgzMDAwKTsKICAgIGNvbnN0IHVybCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KCcvc2l0ZS9nZXRSZWRpcmVjdExpbmsnLCB7CiAgICAgIGlkOiBpZFsxXSwKICAgIH0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLnNwYXN0ZVwuY29tJC8sCiAgICBwYXRoOiAvXlwvKHN8c2l0ZSlcL1x3KyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgY2FwdGNoYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZ2xvYmFsQ2FwdGNoYUNvbmZpcm0nKTsKICAgIGNhcHRjaGEuY2xpY2soKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDEwMDApOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyArK2kpIHsKICAgICAgY29uc3Qgd29yZCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjY3VycmVudENhcFF1ZScpLnRleHRDb250ZW50OwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDApOwogICAgICBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKShgW2RhdGEtaWQ9JyR7d29yZH0nXWApLmNsaWNrKCk7CiAgICB9CiAgICBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3RlbXBsYXRlLWNvbnRhY3Rmb3JtLXN1Ym1pdCcpLmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zdWIydW5sb2NrXC5jb20kLywKICAgIHBhdGg6IC9eXC9saW5rXC9nZXRcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzdSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdhI2xpbmsudW5sb2NrLXN0ZXAtbGluay5nZXRsaW5rJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsoc3UuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zdWIydW5sb2NrXC5jb20kLywKICAgIHBhdGg6IC9eXC9bYS16QS1aMC05XSsvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3Qgc3UgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoLydocmVmJywgJyhbXiddKyknLyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsoc3VbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9zdXBlcmNoZWF0c1wuY29tJC8sCiAgICBwYXRoOiAvXlwvaW50ZXJzdGl0aWFsXC5odG1sJC8sCiAgICBxdWVyeTogLyg/Olw/fCYpb2xkdXJsPShbXiZdKykoPzokfCYpLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobS5xdWVyeVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zdXJmc2Vlc1wuY29tJC8sCiAgICBxdWVyeTogL15cP2dvPShbYS16QS1aMC05XSspJC8sCiAgfSwKICBhc3luYyBzdGFydCAoKSB7CiAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnZ28nLCAnbGluaycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec3VyZnNlZXNcLmNvbSQvLAogICAgcXVlcnk6IC9eXD9saW5rPShbYS16QS1aMC05XSspKGNsaWNrYXJ1cmwpPyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgcyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbnB1dC5idG4uYnRuLXByaW1hcnknKTsKICAgIHMuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnN1cmZzZWVzXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHN1cmwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3dwc2FmZS1saW5reiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsoc3VybC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnN3enpcLnh5eiQvLAogICAgcGF0aDogL15cL2xpbmtcL1x3K1wvJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBnID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2EuYnRuLXdyYXBwZXIubGluaycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGcuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgewogICAgICBob3N0OiAvXih3d3dcLik/c3lsbmtcLm5ldCQvLAogICAgICBxdWVyeTogL2xpbms9KFteJl0rKS8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXih3d3dcLik/Y29tcHVsXC5pbiQvLAogICAgICBwYXRoOiAvXlwvW25wXVwucGhwJC8sCiAgICAgIHF1ZXJ5OiAvdj0oW14mXSspLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXihzcG9ydHMxNHxtb3Rvc3BvcnQpXC5wdyQvLAogICAgICAgIC9ebGluZHVuZ1wuaW4kLywKICAgICAgICAvXm1vdG9uZXdzXC5jbHViJC8sCiAgICAgICAgL153d1syM11cLnBpY25pY3RyYW5zXC5jb20kLywKICAgICAgICAvXihhemhpZXxza2lubnljYXQpXC5uZXQkLywKICAgICAgICAvXnd3MlwuYXdzdWJzXC5jbyQvLAogICAgICAgIC9ecGxhbnRhaGVpbVwuKHdlYlwuaWR8Y29tKSQvLAogICAgICAgIC9eaXJpc3ZlcmFcLmNvbSQvLAogICAgICBdLAogICAgICBxdWVyeTogL15cP2Q9KFthLXpBLVowLTkvPV0rKSQvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogWwogICAgICAgIC9eaVwuZ3RhaW5kXC5jb20kLywKICAgICAgICAvXnBlYmlzbmlzLW11ZGFcLmNvbSQvLAogICAgICAgIC9eaGlrYXJpbm9ha2FyaW9zdFwuaW5mbyQvLAogICAgICBdLAogICAgICBxdWVyeTogL15cPyhbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXC5ibG9nc3BvdFwuY29tPy8sCiAgICAgICAgL14od3d3XC4pP2Rlc2lnbm15aG9tZWVcLmNvbSQvLAogICAgICAgIC9eKHd3d1wuKT9sb3NzdG9yXC5jb20kLywKICAgICAgICAvXigoa3Vyb3NhZmV8a3Vyb3NhZmV0eSlcLik/bWVuYW50aXNlbmphXC5jb20kLywKICAgICAgICAvXmRyaXZlXC5qZXBpdGtlcnRhc1wuY29tJC8sCiAgICAgICAgL15sZXdhdFwud2lidWluZG9cLmNvbSQvLAogICAgICAgIC9eKG9tZ211c2lrfG9tZ2x5cmljc3xrMm5ibG9nKVwuY29tJC8sCiAgICAgICAgL14oc2ltYWhvbGluYXxhdXRlY2gpXC54eXokLywKICAgICAgICAvXih3d3dcLik/aWQtc2VjdXJlbGlua1wueHl6JC8sCiAgICAgICAgL14od3d3XC4pP2NvbnZlcnRoaW5rc1wueHl6JC8sCiAgICAgICAgL14od3d3XC4pP21hcml2ZWxrZWNlXC54eXokLywKICAgICAgICAvXih3d3dcLik/eWFtZXRlc2VucGFpXC54eXokLywKICAgICAgICAvXih3d3dcLik/dG9qcm9zXC50ayQvLAogICAgICAgIC9eKHd3d1wuKT9hbmpheVwuaW5mbyQvLAogICAgICAgIC9eKHd3d1wuKT9rYWtrb2lpc2FmZVwudXMkLywKICAgICAgICAvXih3d3dcLik/a3Vyb3NhZmVcLih3ZWJzaXRlfG9ubGluZSkkLywKICAgICAgICAvXih3d3dcLik/ZHJha29yc2FmZVwudGVjaCQvLAogICAgICAgIC9eKGZtbGF3a2Vyc3xpbmRleG1vdmllKVwuY2x1YiQvLAogICAgICAgIC9ebWljaW5cLm9ubGluZSQvLAogICAgICAgIC9edW5kdWhcLmluLywKICAgICAgICAvXmFkNG1zYW5cLndpbiQvLAogICAgICAgIC9ebm9veXVsXC5jbyQvLAogICAgICAgIC9ecGFmcGFmXC5pbmZvJC8sCiAgICAgICAgL15oaWdodGVjaFwud2ViXC5pZCQvLAogICAgICBdLAogICAgICBxdWVyeTogWwogICAgICAgIC9eXD91cmw9KFthLXpBLVowLTkvPV0rKSQvLAogICAgICAgIC9eXD9pZD0oW2EtekEtWjAtOS89XSspJC8sCiAgICAgICAgL15cP3NpdGU9KFthLXpBLVowLTkvPV0rKSQvLAogICAgICBdLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKHNlaGF0bGVnYXxkYXZpbnN1cmFuY2V8aGVhbHRodG9kfGlyaXN2ZXJhfGFrYW5vc29yYXxzdWJldGVuZXdzKVwuY29tJC8sCiAgICAgICAgL14od3d3XC4pP21lbmFudGlzZW5qYVwuY29tJC8sCiAgICAgICAgL14oYnVzaW5lc3Nmb3J5b3VhbmR8dHJhdmVsd2l0aHRyaWNrc3xzaXR1c2JhcnUpXC5tZSQvLAogICAgICAgIC9ecGxhbnRhaGVpbVwuKHdlYlwuaWR8Y29tKSQvLAogICAgICAgIC9eKHd3d1wuKT9zdGFyem9uZVwuY2MkLywKICAgICAgICAvXih3d3dcLik/a2Fra29paXNhZmVcLnVzJC8sCiAgICAgICAgL14od3d3XC4pP3BvbHJlY1wuc2l0ZSQvLAogICAgICAgIC9eeXVtZWNoYW5cLmNsdWIkLywKICAgICAgICAvXmNla2xpbmt1XC54eXokLywKICAgICAgICAvXmxpbmR1bmdcLihpbnxtZSkkLywKICAgICAgICAvXih3d3dcLik/Ym9sYW9rZVwuY2x1YiQvLAogICAgICBdLAogICAgICBxdWVyeTogL15cP3I9KFthLXpBLVowLTkvPV0rKSQvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogL153d3dcLmNvbXBhcnRpZW5kb2Z1bGxcLm5ldCQvLAogICAgICBwYXRoOiAvXlwvZ28yLywKICAgICAgcXVlcnk6IC9eXD9wPShbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9eYW5pbWVmb3JjZVwuc3RyZWFtJC8sCiAgICAgIHF1ZXJ5OiAvXlw/bD0oW2EtekEtWjAtOS89XSspJC8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXih3d3dcLik/ZHVrdW4tY2l0XC5jb20kLywKICAgICAgcXVlcnk6IC9eXD9zPShbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9edWx0aW1hdGVcLnR1cmtkb3duXC5jb20kLywKICAgICAgcXVlcnk6IC9eXD9zdGVwb25lPShbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9ebGVlY2hwcmVtaXVtXC5saW5rJC8sCiAgICAgIHBhdGg6IC9eXC9jaGVhdFwvLywKICAgICAgcXVlcnk6IC9eXD9saW5rPShbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9eY2xvc2V0b3BpY1wuc2l0ZSQvLAogICAgICBxdWVyeTogL15cP2dvPShbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9eaW5mb3NpYVwueHl6JC8sCiAgICAgIHF1ZXJ5OiAvXlw/a2VzZWhhdGFuPShbYS16QS1aMC05Lz0lXSspJC8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXnJlbWl5dVwubWUkLywKICAgICAgcXVlcnk6IC9eXD9yZWZmPShbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgXSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgcmF3TGluayA9IGF0b2IoZGVjb2RlVVJJQ29tcG9uZW50KG0ucXVlcnlbMV0pKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhyYXdMaW5rKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvKF58XC4pc2FmZWxpbmsoY29udmVydGVyfHJldmlld3g/KVwuY29tPyQvLAogICAgICAgIC9eZ2lnYTc0XC5jb20kLywKICAgICAgICAvXihhd3N1YnNjb3xhZDRtc2FuKVwubWwkLywKICAgICAgICAvXm5la29wb2lcLmdhJC8sCiAgICAgIF0sCiAgICAgIHF1ZXJ5OiAvaWQ9KFtcd1xcXSs9KikvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKG5haXNob3xmaWxta3V8aGVucG9pKVwubG9tcGF0XC5pbiQvLAogICAgICAgIC9eZWRvZ2F3YVwubG9uXC5wdyQvLAogICAgICAgIC9edGVsb2xldFwuaW4kLywKICAgICAgXSwKICAgICAgcXVlcnk6IC9nbz0oW1x3XFxdKz0qKS8sCiAgICB9LAogIF0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGxldCBsID0gYXRvYihtLnF1ZXJ5WzFdKTsKICAgIGNvbnN0IHRhYmxlID0gewogICAgICAnISc6ICdhJywKICAgICAgJyknOiAnZScsCiAgICAgICdfJzogJ2knLAogICAgICAnKCc6ICdvJywKICAgICAgJyonOiAndScsCiAgICB9OwogICAgbCA9IGwucmVwbGFjZSgvWyEpXygqXS9nLCBmdW5jdGlvbiAobSkgewogICAgICByZXR1cm4gdGFibGVbbV07CiAgICB9KTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/c2FmZWxpbmtyZXZpZXdcLmNvbSQvLAogICAgcGF0aDogL15cL1x3K1wvY29zdFwvKFtcdy5dKylcLz8kLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBjb25zdCBsID0gJ2h0dHA6Ly8nICsgbS5wYXRoWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14oZ2FtZWluZm98YXBhc2lofGF1dG9yaWRlKVwucHckLywKICAgICAgL14od3d3XC4pP2xpZmVzdXJhbmNlXC5pbmZvJC8sCiAgICAgIC9ec3BlZWRjYXJcLmNsdWIkLywKICAgICAgL14od3d3XC4pP2JvbGFva2VcLmNsdWIkLywKICAgICAgL14oaW50ZXJjZWxlc3RpYWx8c3dlZXRsYW50ZXJufGRhdmluc3VyYW5jZXx0ZWNobmxhYilcLmNvbSQvLAogICAgICAvXmF3Y2FyXC5pY3UkLywKICAgICAgL15za3lpbnN1cmFuY2VcLm1sJC8sCiAgICAgIC9eKGdldGluZm9zfHNlaGF0c2VnYXJ8bG9uZWx5bW9vbilcLm5ldCQvLAogICAgICAvXnN0dFwuYXdzdWJzXC5jbyQvLAogICAgICAvXih3aWJ1aW5kb3xuYXR1cmFsaGVhbHRoeSlcLnh5eiQvLAogICAgICAvXndhaWZ1c2FmZVwub29vJC8sCiAgICBdLAogICAgcXVlcnk6IC9eXD8oaWR8Y3xrKT0oW2EtekEtWjAtOS89XSspJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Zvcm0nKTsKICAgIGYuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXihsaW5rYWNofGF1dG9saW5rYWNoKVwuY29tJC8sCiAgICBdLAogICAgcXVlcnk6IC9eXD9pZD0oW2EtekEtWjAtOS89XSspJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBnID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5odW1hbmNoZWNrIGZvcm0nKTsKICAgIGcuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgewogICAgICBob3N0OiBbCiAgICAgICAgL15tb3RvbmV3c1wuY2x1YiQvLAogICAgICAgIC9eKHd3d1wuKT9ib2xhb2tlXC5jbHViJC8sCiAgICAgICAgL14oYW5pLXNoYXJlfGF1dG9saW5rYWNoKVwuY29tJC8sCiAgICAgICAgL14oYXV0b2ZhbnN8bGFuZHNjYXBlbmF0dXJlKVwucHckLywKICAgICAgICAvXih3d3dcLik/bGlmZXN1cmFuY2VcLmluZm8kLywKICAgICAgXSwKICAgICAgcXVlcnk6IC9nZXQ9KFteJl0rKS8sCiAgICB9LAogICAgewogICAgICBob3N0OiBbCiAgICAgICAgL14oZ2FtZWluZm8pXC5wdyQvLAogICAgICAgIC9eKHd3d1wuKT9saWZlc3VyYW5jZVwuaW5mbyQvLAogICAgICAgIC9ec3BlZWRjYXJcLmNsdWIkLywKICAgICAgICAvXih3d3dcLik/Ym9sYW9rZVwuY2x1YiQvLAogICAgICAgIC9eKGF1dG9saW5rYWNofGRhdmluc3VyYW5jZSlcLmNvbSQvLAogICAgICAgIC9eYXdjYXJcLmljdSQvLAogICAgICAgIC9ec2t5aW5zdXJhbmNlXC5tbCQvLAogICAgICAgIC9eKGdldGluZm9zKVwubmV0JC8sCiAgICAgICAgL15zdHRcLmF3c3Vic1wuY28kLywKICAgICAgICAvXndpYnVpbmRvXC54eXokLywKICAgICAgXSwKICAgIH0sCiAgXSwKICBhc3luYyByZWFkeSAobSkgewogICAgbGV0IHMgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoLyhjb25zdHx2YXIpIGE9JyhbXiddKyknLyk7CiAgICBpZiAocykgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsoc1syXSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHMgPSBhdG9iKG0ucXVlcnlbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL153YWlmdXNhZmVcLm9vbyQvLAogICAgICAvXm5hdHVyYWxoZWFsdGh5XC54eXokLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDAwKTsKICAgIGNvbnN0IGxuID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNsYW5kaW5nLnJ1cmFzYWZlY3RybCAudG8gYScpOwogICAgbG4uY2xpY2soKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDEwMDApOwogICAgY29uc3QgdGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLnJ1cmFzYWZlY3RybCBpbWcjc2hvd2xpbmsuc3BvaW50Jyk7CiAgICB0bC5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14oc2VoYXRzZWdhcnxsb25lbHltb29uKVwubmV0JC8sCiAgICAgIC9eKGludGVyY2VsZXN0aWFsfHN3ZWV0bGFudGVybilcLmNvbSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDEwMDApOwogICAgY29uc3QgbG4gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2xhbmRpbmcuc29yYWN0cmwgLnRvIGEnKTsKICAgIGxuLmNsaWNrKCk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgyMDAwKTsgCiAgICBjb25zdCB0bCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuc29yYWN0cmwgaW1nI3Nob3dsaW5rLnNwb2ludCcpOwogICAgdGwuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKGxpbmthY2h8dGVjaG5sYWIpXC5jb20kLywKICAgICAgL14oYXBhc2lofGF1dG9yaWRlKVwucHckLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDAwKTsKICAgIGNvbnN0IGxuID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNsYW5kaW5nLnNvcmFjdHJsIC50byBhJyk7CiAgICBsbi5jbGljaygpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwMCk7IAogICAgY29uc3QgdGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLnNvcmFjdHJsIGltZyNzaG93bGluay5zcG9pbnQnKTsKICAgIHRsLmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15sZXdhdFwuaW4kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2xhbmp1dCA+ICNnb2VzID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zYXJkZWF0aFwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzZCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuZG93bmxvYWQtbGluayA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhzZC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmdvb3VcLmluJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBnID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNkb3dubG9hZF9saW5rID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGcuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgewogICAgICBob3N0OiAvXnRvdXQtZGVicmlkXC5uZXQkLywKICAgICAgcGF0aDogL15cL2FwaVwvLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9eMTYzXC4xNzJcLjgzXC4xNDUkLywKICAgICAgcGF0aDogL15cL2RlYlwvYXBpXC8vLAogICAgfSwKICBdLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmRvd25sb2FkLWJveCA+IGRpdiA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh0LmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZHJpdmVodWJcLmxpbmskLywKICAgIHBhdGg6IC9eXC9maWxlXC5waHAvLAogICAgcXVlcnk6IC9eXD9pZD0oLispLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmluZm9ib3ggPiBjZW50ZXIgPiBiID4gYSNwcm9jZWVkLmJ0bi5idG4tZGFuZ2VyJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmtvbWJhdGNoXC5sb25jYXRcLnB3JC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvXC5vcGVuXCgiKFteIl0rKSIsLyk7CiAgICBzID0gc1sxXS5tYXRjaCgvZ289KFteJl0rKS8pOwogICAgcyA9IGF0b2Ioc1sxXSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsocyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15za2lwbGlua1wuaW8kLywKICAgIHBhdGg6IC9eXC9nZXRcL2xpbmtcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5wYW5lbC5wYW5lbC1kZWZhdWx0LnBhbmVsLWJvZHkgPiBjZW50ZXIgPiBjZW50ZXIgPiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsocy5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHYxXC4pP2hleGFmaWxlXC5uZXQkLywKICAgICAgL15za2lwbGlua1wuaW8kLywKICAgIF0sCiAgICBwYXRoOiAvXlwvW2EtekEtWjAtOV0rLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGggPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoLz0iKFteIl0rKSIsZT0wLGY9YS8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGhbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZHJpdmVmaWxlc1wuYmlkJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBkID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC93aW5kb3dcLm9wZW5cKCcoW14nXSspJ1wpOy8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYW5kcm9pZC0xXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2lkPWRvd25sb2FkPjxcL2Rpdj48YSBocmVmPShbXj5dKyk+Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15ib29zdFwuaW5rJC8sCiAgfSwKICBhc3luYyBzdGFydCAoKSB7CiAgICBjb25zdCBiID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2JvZHknKS5nZXRBdHRyaWJ1dGUoJ3Jlc3VsdCcpOwogICAgaWYgKGIpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGF0b2IoYikpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZG93bmxvYWQtbWlycm9yXC5nYSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZG0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2EgaHJlZj0nKFteJ10rKScvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhkbVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL151cmxcLmh1bGJsb2dcLmNvbSQvLAogICAgcGF0aDogL15cL1thLXpBLVowLTldKy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBoID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC8iaHJlZj0nKFteJ10rKScvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhoWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ed3dbMjNdXC5waWNuaWN0cmFuc1wuY29tJC8sCiAgICAgIC9ec2hvcnRcLmF3c3Vic1wuKGNvfG1lKSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZGl2LmtpcmkgPiBjZW50ZXIgPiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHd3d1wuKT9hbmpheVwuaW5mbyQvLAogICAgICAvXih3d3dcLik/dGV0ZXdcLmluZm8kLywKICAgICAgL153d3dcLm5qaWlyXC5jb20kLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdkaXYuZG93bmxvYWQtbGluayA+IGEnKTsKICAgIGEgPSBhLmhyZWYubWF0Y2goL3I9KC4qKSQvKTsKICAgIGEgPSBhdG9iKGFbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15zcGFjZXRpY2FcLmNvbSQvLAogICAgICAvXnNraW5ueWNhdFwub3JnJC8sCiAgICBdLAogICAgcGF0aDogL15cL1x3KyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuYnRuJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRhdW5zaG9ydGVcLnRla25vbG9naWxpbmtcLmNvbSQvLAogICAgcGF0aDogL15cL2xpbmtzaG9ydGVsaW5rXC9zYWZlbGlua1wucGhwJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Rpdi5hcnRpY2xlID4gZGl2Om50aC1jaGlsZCgxKSA+IGNlbnRlciA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsLmhyZWYsIHsKICAgICAgcmVmZXJlcjogZmFsc2UsCiAgICB9KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnRla25vc2FmZVwudGVrbm9sb2dpbGlua1wuY29tJC8sCiAgICBwYXRoOiAvXlwvbGlua3Rla25vbGlua1wvc2FmZWxpbmtzY3JpcHRcLnBocCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjdGVtcGxhdGVtb19jb250ZW50ID4gZGl2ID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwuaHJlZiwgewogICAgICByZWZlcmVyOiBmYWxzZSwKICAgIH0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eemFwXC5pbiQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgeiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcucGFuZWwtYm9keSBidXR0b24nKTsKICAgIHouY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHNhdGFuaWFiYXRjaHxnZXQtY2xpY2syKVwuYmxvZ3Nwb3RcLmNvbSQvLAogICAgICAvXih3d3dcLik/dmVoaWNsZS10ZWNobm9cLmNmJC8sCiAgICAgIC9eKHd3d1wuKT90ZXRld2xpbmtcLm1lJC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgY2xidCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdidXR0b24jZ290b2xpbmsnKTsKICAgIGNsYnQucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoMSk7CiAgICBjbGJ0LmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15pZG5hdGlvblwubmV0JC8sCiAgICBxdWVyeTogL15cP3BhZ2U9LywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2xpbmtvJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnRlY2hmdW5kYVwubmV0JC8sCiAgICBwYXRoOiBbCiAgICAgIC9eXC9saW5rXC8vLAogICAgICAvXlwvc2FmZVwvLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5oaWRlIGEuYnRuJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnRoaW5maVwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2RpdiBwIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaGVsbG9cLnRyaWJ1bnRla25vXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZGl2IHAgdSBiIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IFsKICAgIHsKICAgICAgaG9zdDogL150aW55YXJyb3dzXC5jb20kLywKICAgICAgcGF0aDogL15cL3ByZXZpZXdcLnBocCQvLAogICAgICBxdWVyeTogL15cP3BhZ2U9KFteJl0rKS8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXnd3d1wuamF2bGlicmFyeVwuY29tJC8sCiAgICAgIHF1ZXJ5OiAvdXJsPSguKykkLywKICAgIH0sCiAgXSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRlY29kZVVSSUNvbXBvbmVudChtLnF1ZXJ5WzFdKSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3RvdGFsZGVicmlkXC5vcmckLywKICAgIHBhdGg6L1wvbFwvKGxcLnBocCk/JC8sCiAgICBxdWVyeTogL1w/YWRzPShbYS16QS1aMC05PV0rKSQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGNvbnN0IGwgPSBhdG9iKG0ucXVlcnlbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9edHVya2Rvd25cLmNvbSQvLAogICAgcGF0aDogL15cL2xpbmsvLAogICAgcXVlcnk6IC9eXD9pZD0oLispLywKICB9LAogIGFzeW5jIHJlYWR5IChtKSB7CiAgICBsZXQgaHRtbCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQoYD9hamF4PSR7bS5xdWVyeVsxXX1gKTsKICAgIGh0bWwgPSBKU09OLnBhcnNlKGh0bWwpOwogICAgY29uc3QgcmVzID0gL3N0ZXBvbmU9KC4rKS8uZXhlYyhodG1sLnVybCk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYXRvYihyZXNbMV0pKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnVcLnRvJC8sCiAgICBwYXRoOiAvXlwvW1x3LV0rLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHUgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3dpbmRvdy5sb2NhdGlvbj0nKFteJ10rKSc7Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL151bmZha2VcLml0JC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmcmFtZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmcmFtZScpOwogICAgY29uc3QgaSA9IGZyYW1lLnNyYy5sYXN0SW5kZXhPZignaHR0cDovLycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGZyYW1lLnNyYy5zdWJzdHIoaSkpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL151clwubHkkLywKICAgICAgL151cmx5XC5tb2JpJC8sCiAgICBdLAogICAgcGF0aDogL15cL3goLispLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKCcveCcsICcvZ29paS8nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICB9Cn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9edXJsXC5mbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjY2xpY2tidG4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL151cmxcLmllJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2FbdGl0bGU9IkxpbmsgdG8gb3JpZ2luYWwgVVJMIl0nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgLyhefFwuKXVybGNhc2hcLihjb218bmV0fG9yZykkLywKICAgICAgL14oYmF0NXxkZXRvbmF0aW5nfGNlbGViY2xrfGVpZ2h0dGVlbnxzbWlsaW5nbGlua3N8cGVla2F0bXlnaXJsZnJpZW5kfHBvcm55aG9zdHxjbGIxfHVybGdhbGxlcmllcylcLmNvbSQvLAogICAgICAvXmxvb2JsZVwubmV0JC8sCiAgICAgIC9eeHh4c1wub3JnJC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgaWYgKF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cgJiYgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5saW5rRGVzdFVybCkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5saW5rRGVzdFVybCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG1hdGNoZXMgPSBkb2N1bWVudC5ib2R5LmlubmVySFRNTC5tYXRjaCgvbGlua0Rlc3RVcmwgPSAnKC4rKScvKTsKICAgIGlmIChtYXRjaGVzKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtYXRjaGVzWzFdKTsKICAgICAgcmV0dXJuOwogICAgfQogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9edXJsaW5uXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG0gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnTUVUQVtIVFRQLUVRVUlWPXJlZnJlc2hdJykuZ2V0QXR0cmlidXRlKCdDT05URU5UJykubWF0Y2goL3VybD0nKFteJ10rKScvKTsKICAgIGlmIChtKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtWzFdKTsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnVybG1zXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGlmcmFtZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjY29udGVudCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGlmcmFtZS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT91cmx2MlwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBpZiAod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLmluZGV4T2YoJ2xvY2tlZCcpID49IDApIHsKICAgICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKCcvbG9ja2VkJywgJycpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocGF0aCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IG0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2pldG9uPShbXHddKykvKTsKICAgIGNvbnN0IGwgPSAnaHR0cDovL3VybHYyLmNvbS9hbGdvLnBocD9hY3Rpb249cGFzc2VyJnB4PTAmc289MSZqZXRvbj0nICsgbVsxXTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUgKiAxMDAwKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/dXNraXBcLm1lJC8sCiAgICBwYXRoOiAvXlwvZ29cL1x3KyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjYnRuLW1haW4nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9edXg5XC5kZSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbWV0YSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdtZXRhW2h0dHAtZXF1aXY9InJlZnJlc2giXVtjb250ZW50Kj0idXJsPSJdJyk7CiAgICBjb25zdCB1cmwgPSBtZXRhLmdldEF0dHJpYnV0ZSgnY29udGVudCcpLm1hdGNoKC9odHRwLiovKVswXTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9edmF2aVwuY28kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2dvTGluaycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL152Y3J5cHRcLm5ldCQvLAogICAgcGF0aDogL15cL2Zhc3RzaGllbGRcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCB2ID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Zvcm0gaW5wdXQuYnRuY29udGludWUnKTsKICAgIHYuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wudmlpZGlpXC5pbmZvJC8sCiAgICBxdWVyeTogL3VybD0oW14mXSspLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBjb25zdCB1cmwgPSBkZWNvZGVVUklDb21wb25lbnQobS5xdWVyeVsxXSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wudmlpZGlpXC5pbmZvJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBvID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5iZ2xpbmsnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhvLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT92aXJcLmFsJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9jb25zdCB0YXJnZXRfdXJsID0gJyhbXiddKyknOy8pOwogICAgaWYgKCFtKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignc2l0ZSBjaGFuZ2VkJyk7CiAgICB9CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3Z6dHVybFwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmcmFtZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmcmFtZVtzY3JvbGxpbmc9eWVzXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGZyYW1lLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zdFwud2FyZGhhbmltZVwubmV0JC8sCiAgICBwYXRoOiAvXlwvaVwvXGQrJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN3cmFwcGVyID4gW2NsYXNzXj0idG9tYm8iXSA+IGFbdGFyZ2V0PSJfYmxhbmsiXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153aWtpYWxsXC5vcmckLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGRpdiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdkaXYjcGxhY2UuZ2V0LWJ0bicpOwogICAgY29uc3QgbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgY29uc3QgYSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdkaXYjcGxhY2UuZ2V0LWJ0biA+IGFbaHJlZl0nKTsKICAgICAgaWYgKGEgJiYgYS5ocmVmKSB7CiAgICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgICAgIH0KICAgIH0pOwogICAgby5vYnNlcnZlKGRpdiwgewogICAgICBjaGlsZExpc3Q6IHRydWUKICAgIH0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed29uXC5wZSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnLnByb2dyZXNzLmNhcHRjaGFfbG9hZGVyLCBza2lwYm94Jyk7CiAgICBjb25zdCBjYXB0Y2hhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNyZWNhcHRjaGEnKTsKICAgIGNhcHRjaGEuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7CiAgICAgICAgaWYgKGNhcHRjaGEuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7CiAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICByZXNvbHZlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShjYXB0Y2hhLCB7CiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgfSk7CiAgICB9KTsKICAgIGF3YWl0IHA7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5sb25nVVJMKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3llcC5pdC9wcmV2aWV3LnBocD9wPSonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGxpbmsgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZm9udFtjb2xvcj0iZ3JleSJdJykuaW5uZXJIVE1MOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGxpbmspOwogIH0sCn0pOwooKCkgPT4gewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiAnaHR0cDovL3d3dy55b29jbGljay5jb20vbC8qJywKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICAgIGNvbnN0IHVuaXEgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LnVuaXEgfHwgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy51bmlxaTsKICAgICAgaWYgKCF1bmlxKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgICAgIGNvbnN0IHVybCA9IGAke3BhdGh9P2FqYXg9dHJ1ZSZhZGJsb2NrPWZhbHNlJm9sZD1mYWxzZSZmcmFtZWQ9ZmFsc2UmdW5pcT0ke3VuaXF9YDsKICAgICAgYXdhaXQgZ2V0VVJMKHVybCk7CiAgICB9LAogIH0pOwogIGFzeW5jIGZ1bmN0aW9uIGdldFVSTCAodXJsKSB7CiAgICBjb25zdCB0ZXh0ID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldCh1cmwpOwogICAgY29uc3QgZ29vZFVSTCA9IC9eKGh0dHBzP3xmdHApOlwvXC8oKCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyEkJicoKSorLDs9XXw6KSpAKT8oKChcZHxbMS05XVxkfDFcZFxkfDJbMC00XVxkfDI1WzAtNV0pXC4oXGR8WzEtOV1cZHwxXGRcZHwyWzAtNF1cZHwyNVswLTVdKVwuKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSlcLihcZHxbMS05XVxkfDFcZFxkfDJbMC00XVxkfDI1WzAtNV0pKXwoKChbYS16XXxcZHxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KChbYS16XXxcZHxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKihbYS16XXxcZHxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkpKVwuKSsoKFthLXpdfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoKFthLXpdfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKShbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkqKFthLXpdfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSkpXC4/KSg6XGQqKT8pKFwvKCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyEkJicoKSorLDs9XXw6fEApKyhcLygoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyEkJicoKSorLDs9XXw6fEApKikqKT8pPyhcPygoKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshJCYnKCkqKyw7PV18OnxAKXxbXHVFMDAwLVx1RjhGRl18XC98XD8pKik/KCMoKChbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbISQmJygpKissOz1dfDp8QCl8XC98XD8pKik/JC9pLnRlc3QodGV4dCk7CiAgICBpZiAoZ29vZFVSTCkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodGV4dCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwMCk7CiAgICBhd2FpdCBnZXRVUkwodXJsKTsKICB9Cn0pKCk7CihmdW5jdGlvbiAoKSB7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL14od3d3XC4pPyhbYS16QS1aMC05XStcLik/YmluYm94XC5pbyQvLAogICAgICBwYXRoOiAvXC8oW2EtekEtWjAtOV0rKS8sCiAgICAgIGhhc2g6IC8oPzojKFthLXpBLVowLTldKykpPy8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKG0pIHsKICAgICAgY29uc3Qgc2pjbCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuc2pjbDsKICAgICAgY29uc3QgcGFzdGVfaWQgPSBtLnBhdGhbMV07CiAgICAgIGNvbnN0IHBhc3RlX3NhbHQgPSBtLmhhc2hbMV07CiAgICAgIGNvbnN0IEFQSV9VUkwgPSBgaHR0cHM6Ly9iaW5ib3guaW8vJHtwYXN0ZV9pZH0uanNvbmA7CiAgICAgIGxldCBwYXN0ZUluZm8gPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KEFQSV9VUkwsIGZhbHNlLCB7CiAgICAgICAgT3JpZ2luOiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZSwKICAgICAgICBSZWZlcmVyOiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZSwKICAgICAgICBDb29raWU6ICdyZWZlcnJlcj0xJywKICAgICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lLAogICAgICB9KTsKICAgICAgcGFzdGVJbmZvID0gSlNPTi5wYXJzZShwYXN0ZUluZm8pOwogICAgICBpZiAoIXBhc3RlSW5mby5vaykgewogICAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignZXJyb3Igd2hlbiBnZXR0aW5nIHBhc3RlIGluZm9ybWF0aW9uJyk7CiAgICAgIH0KICAgICAgaWYgKHBhc3RlSW5mby5wYXN0ZS51cmwpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocGFzdGVJbmZvLnBhc3RlLnVybCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHJhd19wYXN0ZSA9IHNqY2wuZGVjcnlwdChwYXN0ZV9zYWx0LCBwYXN0ZUluZm8ucGFzdGUudGV4dCk7CiAgICAgIGlmIChpc0xpbmsocmF3X3Bhc3RlKSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhyYXdfcGFzdGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTsKICAgICAgZWxtLmlkID0gJ3Bhc3RlLXRleHQnOwogICAgICBlbG0uaW5uZXJIVE1MID0gbGlua2lmeShyYXdfcGFzdGUpOwogICAgICBjb25zdCBmcmFtZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjcGFzdGUtZnJhbWUsICNjYXB0Y2hhLXBhZ2UnKTsKICAgICAgZnJhbWUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoZWxtLCBmcmFtZSk7CiAgICB9LAogIH0pOwogIGNvbnN0IHNVcmwgPSAnKFxcYihodHRwcz98ZnRwfGZpbGUpOi8vWy1BLVowLTkrJkAjLyU/PX5ffCE6LC47XSpbLUEtWjAtOSsmQCMvJT1+X3xdKSc7CiAgZnVuY3Rpb24gaXNMaW5rICh0ZXh0KSB7CiAgICBjb25zdCByVXJsID0gbmV3IFJlZ0V4cChgXiR7c1VybH0kYCwgJ2knKTsKICAgIHJldHVybiByVXJsLnRlc3QodGV4dCk7CiAgfQogIGZ1bmN0aW9uIGxpbmtpZnkgKHRleHQpIHsKICAgIGNvbnN0IHJVcmwgPSBuZXcgUmVnRXhwKHNVcmwsICdpZycpOwogICAgcmV0dXJuIHRleHQucmVwbGFjZShyVXJsLCAobWF0Y2gpID0+IHsKICAgICAgcmV0dXJuIGA8YSBocmVmPSIke21hdGNofSI+JHttYXRjaH08L2E+YDsKICAgIH0pOwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/cGFzdGVkXC5jbyQvLAogICAgcGF0aDogL15cL1x3KyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnI2NhcHRjaGFfb3ZlcmxheScpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC4yaVwuKHNrfGN6KSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN3cmFwMyBpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaW1nLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgJ2h0dHA6Ly8qLmFibG9hZC5kZS9pbWFnZS5waHA/aW1nPSonLAogICAgJ2h0dHA6Ly93d3cuaW1hZ2V1cC5ydS8qLyovKi5odG1sJywKICBdLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltYWdlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmFsbC1wb3N0ZXJcLnJ1JC8sCiAgICBxdWVyeTogL15cP3Y9LywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltYWdlbiBpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYnVubnlmb3J1bVwub3JnJC8sCiAgICBxdWVyeTogL15cP3Y9LywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nW3RpdGxlXj1DbGlja10nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYmF5aW1nXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI21haW5JbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15iZWVpbWdcLmNvbSQvLAogICAgcGF0aDogL1wvdmlld1wvLiovLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ltZy5pbWctcmVzcG9uc2l2ZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjLCB7CiAgICAgIHJlcGxhY2U6IHRydWUsCiAgICB9KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3d3dy5iaWxkZXItdXBsb2FkLmV1L3Nob3cucGhwP2ZpbGU9KicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbnB1dFt0eXBlPWltYWdlXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly93d3cuY2FzaW1hZ2VzLmNvbS9pbWcucGhwPyonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCd0ZCBhIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL2N1YmV1cGxvYWQuY29tL2ltLyonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbWcuZ2FsbGVyeUJpZ0ltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRlcGljXC5tZSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjcGljJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXihpbWdkaW5vfGltZ3RpZ2VyfGltZ3phcClcLmNvbSQvLAogICAgcGF0aDogL15cL3ZpZXdlclwucGhwJC8sCiAgICBxdWVyeTogL15cP2ZpbGU9LywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG8gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2N1cnNvcl9sdXBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKG8uc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovLyouZGlyZWN0dXBsb2FkLm5ldC9maWxlLyouaHRtJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNJbWdGcmFtZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXmV3YVwuYWMkLywKICAgICAgL15lbGlsXC5jYyQvLAogICAgXSwKICAgIHBhdGg6IC9eXC8oLiopJC8sCiAgfSwKICBhc3luYyByZWFkeSAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwMCk7CiAgICBjb25zdCB1cmwgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdCgnL3NpdGUvZ2V0LW5ldy1yZWRpcmVjdC1saW5rJywgewogICAgICBjb2RlOiBtLnBhdGhbMV0sCiAgICAgIGFkc19ibG9ja2VkOiBmYWxzZSwKICAgIH0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaW1ndml2XC54eXokLywKICAgIHBhdGg6IC9eXC8uKiQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcubWFpbi1jb250ZW50LWJveCcpOwogICAgY29uc3QgcnYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2RvY3VtZW50XC5sb2NhdGlvblwuaHJlZj0iKFteIl0rKSIvLCBkKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UocnZbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZmFzdHBpY1wucnUkLywKICAgIHBhdGg6IC9eXC92aWV3XC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjcGljQ29udGFpbmVyIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYywgewogICAgICByZWZlcmVyOiB0cnVlLAogICAgfSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15mb3Brb2RpYWtcLnNpdGUkLywKICAgIHBhdGg6IC9eXC9pbWFnZVwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdoZWFkID4gbGlua1tyZWw9aW1hZ2Vfc3JjXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuaHJlZik7CiAgfQp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3d3dy5mb3RvbGluay5zdS92LnBocD9pZD0qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb250ZW50IGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly93d3cuZm90b3Npay5wbC9wb2thel9vYnJhemVrL3BlbG55LyouaHRtbCcsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdhLm5vYm9yZGVyIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXmZyZWFraW1hZ2VcLmNvbSQvLAogICAgICAvXnd3d1wuaG9zdHBpY1wub3JnJC8sCiAgICBdLAogICAgcGF0aDogL15cL3ZpZXdcLnBocCQvLAogICAgcXVlcnk6IC9eXD9maWxlbmFtZT0oW14mXSspLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKCcvaW1hZ2VzLycgKyBtLnF1ZXJ5WzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/ZnJlZWltZ3VwXC5jb20kLywKICAgIHBhdGg6IC9eXC94eHhcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpbWcgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI21haW5pbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmZ1bGxpbWdcLmNvbSQvLAogICAgcXVlcnk6IC9eXD92PShbXiZdKykvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoJy9pbWFnZXMvJyArIG0ucXVlcnlbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaW1hZ2VwMnBcLmNvbSQvLAogICAgcXVlcnk6IC9eXD92PShbXiZdKykvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoJy9pbWFnZXMvJyArIG0ucXVlcnlbMV0gKyAnLmpwZWcnKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICAnaHR0cDovL2Z1bmt5aW1nLmNvbS92aWV3ZXIucGhwP2ltZz0qJywKICAgICdodHRwOi8vZnVua3lpbWcuY29tL3ZpZXcvKicsCiAgXSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN2aWV3ZXIgaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKKGZ1bmN0aW9uICgpIHsKICBjb25zdCBob3N0UnVsZSA9IC9eZ29pbWFnZWhvc3RcLmNvbSQvOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IGhvc3RSdWxlLAogICAgICBwYXRoOiAvXlwveHh4XC9pbWFnZXNcLy8sCiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IGhvc3RSdWxlLAogICAgICBwYXRoOiAvXlwveHh4XC8oLispLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAobSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKCcveHh4L2ltYWdlcy8nICsgbS5wYXRoWzFdKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogaG9zdFJ1bGUsCiAgICAgIHF1ZXJ5OiAvXlw/dj0oLispLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAobSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKCcveHh4L2ltYWdlcy8nICsgbS5xdWVyeVsxXSk7CiAgICB9LAogIH0pOwp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3Lmhvc3RpbmdwaWNzLm5ldC92aWV3ZXIucGhwP2lkPSonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltZ192aWV3ZXInKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IFsKICAgICdodHRwOi8vaWZvdG9zLnBsL3pvYmFjei8qJywKICAgICdodHRwczovL3Bvc3RpbWcuY2MvKicsCiAgXSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ21ldGFbcHJvcGVydHk9Im9nOmltYWdlIl0nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UobS5jb250ZW50KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltYVwuc28kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltYWdlX2Jsb2NrIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltYWR1bFwuY29tJC8sCiAgICBxdWVyeTogL1w/cFttdF09KC4rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSgnLz9kaT0nICsgbS5xdWVyeVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15pbWFnZTJ5b3VcLnJ1JC8sCiAgICBwYXRoOiAvXlwvXGQrXC9cZCsvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdkaXYudF90aXBzMiBkaXYgPiBpbWcnKTsKICAgIGlmICghaSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoJycsIHsKICAgICAgICBwb3N0OiB7CiAgICAgICAgICBfY29uZmlybTogJycsCiAgICAgICAgfSwKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3LmltYWdlYmFtLmNvbS9pbWFnZS8qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgbyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcuaW1hZ2UtY29udGFpbmVyIGltZ1tpZF0nKTsKICAgIGlmIChvKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2Uoby5zcmMsIHsKICAgICAgICByZXBsYWNlOiB0cnVlLAogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdib2R5ID4gZGl2ID4gZGl2ID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG8uaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly93d3cuaW1hZ2Vob3VzaW5nLmNvbS9pbWFnZS8qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ3RkLnRleHRfaXRlbSBpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vaW1hZ2Vuby5jb20vKi5odG1sJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNpbWFnZV9kaXYgaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKKGZ1bmN0aW9uICgpIHsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXih3d3dcLik/aW1hZ2Vwb3J0ZXJcLmNvbSQvLAogICAgICBwYXRoOiAvXlwvXHd7MTJ9XC8uKlwuaHRtbCQvLAogICAgfSwKICAgIHJlYWR5OiBydW4sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKHd3d1wuKT8oaW1hZ2VjYXJyeXxpbWFnZWR1bmt8aW1hZ2Vwb3J0ZXJ8aW1hZ2Vzd2l0Y2gpXC5jb20kLywKICAgICAgICAvXih3d3dcLik/KHBpY2xlZXR8cGljdHVyZWRpcHxwaWN0dXJldHVybilcLmNvbSQvLAogICAgICAgIC9eKHd3d1wuKT9pbWdzcGljZVwuY29tJC8sCiAgICAgICAgL14od3d3XC4pPyhwaWNsYW1ib3x5YW5rb2ltYWdlcylcLm5ldCQvLAogICAgICBdLAogICAgfSwKICAgIHJlYWR5OiBydW4sCiAgfSk7CiAgYXN5bmMgZnVuY3Rpb24gcnVuICgpIHsKICAgIGNvbnN0IG8gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2Rvd25sb2FkX2JveCBpbWdbaWRdJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKG8uc3JjKTsKICB9Cn0pKCk7CihmdW5jdGlvbiAoKSB7CiAgY29uc3QgaG9zdCA9IC9eaW1hZ2VzaGFja1wudXMkLzsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBob3N0LAogICAgICBwYXRoOiAvXlwvcGhvdG9cLy4rXC8oLispXC8oW14vXSspLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAobSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGAvZi8ke20ucGF0aFsxXX0vJHttLnBhdGhbMl19L2ApOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBob3N0LAogICAgICBwYXRoOiAvXlwvZlwvLitcL1teL10rLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2Z1bGxpbWcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgICB9LAogIH0pOwp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vaW1hZ2VzaG9zdC5ydS9waG90by8qL2lkKi5odG1sJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNicGhvdG8gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShhLmhyZWYpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiBbCiAgICAgIHsKICAgICAgICBob3N0OiBbCiAgICAgICAgICAvXnd3d1wuKGZyZWVidW5rZXJ8aW1nY2Fycnl8aW1nc2hvdHMpXC5jb20kLywKICAgICAgICAgIC9ed3d3XC5pbWFnZXNuYWtlXC4oY29tfG9yZykkLywKICAgICAgICBdLAogICAgICAgIHBhdGg6IC9eXC9zaG93XC5waHAkLywKICAgICAgICBxdWVyeTogL15cPy8sCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBob3N0OiAvXnd3d1wuKGZyZWVidW5rZXJ8aW1nc2hvdHMpXC5jb20kLywKICAgICAgICBwYXRoOiAvXlwvc2hvd1wvLywKICAgICAgfSwKICAgICAgewogICAgICAgIGhvc3Q6IFsKICAgICAgICAgIC9ed3d3XC5pbWFnZXNuYWtlXC4oY29tfG9yZykkLywKICAgICAgICAgIC9ed3d3XC5pbWFnZWZydWl0XC5jb20kLywKICAgICAgICBdLAogICAgICAgIHBhdGg6IC9eXC8oaW1nfHNob3cpXC8uKy8sCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBob3N0OiAvXmltYWdlYmFuXC4ocnV8bmV0KSQvLAogICAgICAgIHBhdGg6IC9eXC9zaG93XC9cZHs0fVwvXGR7Mn1cL1xkezJ9XC8uKy8sCiAgICAgIH0sCiAgICAgICdodHRwOi8vZm90b28ucGwvc2hvdy5waHA/aW1nPSouaHRtbCcsCiAgICAgIHsKICAgICAgICBob3N0OiAvXnd3d1wuaW1hZ2VzdGltZVwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL3Nob3dcLnBocFwvLipcLmh0bWwkLywKICAgICAgfSwKICAgIF0sCiAgICByZWFkeTogcnVuLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXnd3d1wuaW1nY2FycnlcLmNvbSQvLAogICAgICAgIC9ed3d3XC5wb3JuYnVzXC5vcmckLywKICAgICAgXSwKICAgICAgcGF0aDogL15cL3Nob3dcLy8sCiAgICB9LAogICAgcmVhZHk6IHJ1bjIsCiAgfSk7CiAgYXN5bmMgZnVuY3Rpb24gcnVuICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltZ19vYmonKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMsIHsKICAgICAgcmVmZXJlcjogdHJ1ZSwKICAgIH0pOwogIH0KICBhc3luYyBmdW5jdGlvbiBydW4yICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltZ19vYmonKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMsIHsKICAgICAgcmVwbGFjZTogdHJ1ZSwKICAgIH0pOwogIH0KfSkoKTsKKGZ1bmN0aW9uICgpIHsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogWwogICAgICB7CiAgICAgICAgaG9zdDogL15pbWFnZW5waWNcLmNvbSQvLAogICAgICAgIHBhdGg6IC9eXC8uKlwvLitcLmh0bWw/JC8sCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBob3N0OiAvXmltYWdldHdpc3RcLmNvbSQvLAogICAgICB9LAogICAgXSwKICAgIHJlYWR5OiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucGFydGlhbChydW4sIHRydWUpLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eKGltYWdleHBvcnR8aW1hZ2VzaGltYWdlKVwuY29tJC8sCiAgICB9LAogICAgcmVhZHk6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5wYXJ0aWFsKHJ1biwgZmFsc2UpLAogIH0pOwogIGFzeW5jIGZ1bmN0aW9uIHJ1biAocnApIHsKICAgIGlmIChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmpRdWVyeSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmpRdWVyeS5wcm90b3R5cGUuYXBwZW5kID0gdW5kZWZpbmVkOwogICAgfQogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbWcucGljJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjLCB7CiAgICAgIHJlcGxhY2U6IHJwLAogICAgfSk7CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vaW1hZ2V1cHBlci5jb20vaS8/KicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICAnaHR0cDovLyouaW1hZ2V2ZW51ZS5jb20vaW1nLnBocD8qJywKICAgICdodHRwOi8vaG90Y2h5eC5jb20vZC9hZHVsdC1pbWFnZS1ob3N0aW5nLXZpZXctMDgucGhwP2lkPSonLAogIF0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjdGhlcGljJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltYWdlemlsbGFcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjcGhvdG8nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMsIHsKICAgICAgcmVmZXJlcjogdHJ1ZSwKICAgIH0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vaW1nLjNlenkubmV0LyouaHRtJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2xpbmtbcmVsPSJpbWFnZV9zcmMiXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShsLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vaW1nMS5pbWFnaWxpdmUuY29tLyovKicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjcGFnZSBhLmJ1dHRvbicpOwogICAgaWYgKGEpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3BhZ2UgPiBpbWc6bm90KFtpZF0pJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wuKGltZ2JhYmVzfGltZ2ZsYXJlKVwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbnB1dFtvbmNsaWNrXScpOwogICAgaWYgKGkpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5EZWNvZGUoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjdGhpc19pbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15pbWdiYXJcLm5ldCQvLAogICAgcGF0aDogL15cL2ltZ19zaG93XC5waHAkLywKICAgIHF1ZXJ5OiAvXlw/dmlld19pZD0vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdjZW50ZXIgaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltZ2JhclwubmV0JC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Rpdi5wYW5lbC50b3AgZm9ybSBpbnB1dFtuYW1lPXNpZF0nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnL2ltZ19zaG93LnBocD92aWV3X2lkPScgKyBpLnZhbHVlKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltZ2JveFwuY29tJC8sCiAgICBwYXRoOiAvXlwvW1xkXHddKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXihpbWdmYW50YXN5fGltZ25lbW98aW1nY3VybHxpbWFnZWRvbWlubylcLmNvbSQvLAogICAgICAgIC9eMGltZ1wubmV0JC8sCiAgICAgICAgL15idW5ueWZvcnVtXC5vcmckLywKICAgICAgXSwKICAgICAgcXVlcnk6IC9eXD9bcHZdPS8sCiAgICB9LAogICAgcmVhZHk6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5wYXJ0aWFsKGhlbHBlciwgZmFsc2UpLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1nc2F5XC5jb20kLywKICAgICAgcXVlcnk6IC9eXD9bcHZdPS8sCiAgICB9LAogICAgcmVhZHk6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5wYXJ0aWFsKGhlbHBlciwgdHJ1ZSksCiAgfSk7CiAgYXN5bmMgZnVuY3Rpb24gaGVscGVyIChkb1JlcGxhY2UpIHsKICAgIGlmIChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmNvbmZpcm1BZ2UpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5jb25maXJtQWdlKDEpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb250YWluZXItaG9tZSBpbWdbb25jbGlja10nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMsIHsKICAgICAgcmVwbGFjZTogZG9SZXBsYWNlLAogICAgfSk7CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15jb3JlcGl4XC5vcmckLywKICAgICAgL14od3d3XC4pP3h4eGltYWdldHBiXC5vcmckLywKICAgICAgL15pbWdob3N0XC4odG9wfGNsdWIpJC8sCiAgICAgIC9ecG9ybmJha2VyXC5tZW4kLywKICAgICAgL15zb21uYXRoMjAwM1wueHl6JC8sCiAgICBdLAogICAgcGF0aDogL15cL2ltYWdlXC8uKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbnB1dCNlbWJlZC1jb2RlLTIudGV4dC1pbnB1dCcpLmdldEF0dHJpYnV0ZSgndmFsdWUnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15pbWdtYXNzXC5jb20kLywKICAgIHBhdGg6IC9eXC9pbWFnZVwvW1xkXHddKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnI2xvYWRpbmcyJyk7CiAgICBjb25zdCBkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5ib3gnKTsKICAgIGQuc3R5bGUuZGlzcGxheSA9ICdpbml0aWFsJzsKICAgIGQuc3R5bGUub3BhY2l0eSA9ICdpbml0aWFsJzsKICB9LAp9KTsKKGZ1bmN0aW9uICgpIHsKICBjb25zdCBQQVRIX1JVTEUgPSAvXlwvKFswLTlhLXpBLVotX10rKShcLnxcL3wkKS87CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKGltZ21vbmtleXxpbWd0cmV4fGltZ3ZlfHVwbG9hZHJyfGltYWdlZWVyfHBpYy1tYW5pYWMpXC5jb20kLywKICAgICAgICAvXihodWxraW1nZXxpbWdzZW58aW1nc3RvfGt2YWRvcilcLmNvbSQvLAogICAgICAgIC9ed3d3XC51aW1nc2hhcmVcLmNvbSQvLAogICAgICAgIC9eKGtyb3BpY3xwaWNkb2xsYXIpXC5jb20kLywKICAgICAgICAvXih3d3dcLik/aW1nc2VlXC5tZSQvLAogICAgICAgIC9eaW1nY2xpY2tcLm5ldCQvLAogICAgICBdLAogICAgICBwYXRoOiBQQVRIX1JVTEUsCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKG0pIHsKICAgICAgYXdhaXQgaGVscGVyKG0ucGF0aFsxXSwgZ2V0TmV4dDEpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmltZ291dGxldFwuY29tJC8sCiAgICAgIHBhdGg6IFBBVEhfUlVMRSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnaW1nLnBpYycpOwogICAgICBpZiAoaSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2RpdltpZF49ImltYWdldmlld2kiXScpOwogICAgICBjb25zdCBub2RlID0gYXdhaXQgd2FpdERPTShkLCAobm9kZSkgPT4gewogICAgICAgIHJldHVybiBub2RlLm5vZGVOYW1lID09PSAnRk9STScgJiYgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2lucHV0W25hbWU9ImlkIl0nLCBub2RlKTsKICAgICAgfSk7CiAgICAgIG5vZGUuc3VibWl0KCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1ncm9ja1wuaW5mbyQvLAogICAgICBwYXRoOiBQQVRIX1JVTEUsCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWN2aWV3Jyk7CiAgICAgIGlmIChpKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuXzB4MzM3YzRiID0gbnVsbDsKICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdldEFtYmlndW91c0Zvcm0oJ2RpdltpZF0gKyBkaXZbaWRdID4gc3R5bGUnLCAobm9kZSkgPT4gewogICAgICAgIHJldHVybiBub2RlLnBhcmVudEVsZW1lbnQ7CiAgICAgIH0pOwogICAgICBub2RlLmNsaWNrKCk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgbm9kZS5jbGljaygpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXnBpY3Jva1wuY29tJC8sCiAgICAgIHBhdGg6IFBBVEhfUlVMRSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnaW1nLnBpY3ZpZXcnKTsKICAgICAgaWYgKGkpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdldEFtYmlndW91c0Zvcm0oJ2JvZHkgPiBkaXYgPiBkaXZbaWRdID4gc3R5bGUnLCAobm9kZSkgPT4gewogICAgICAgIHJldHVybiBub2RlLnBhcmVudEVsZW1lbnQ7CiAgICAgIH0pOwogICAgICBub2RlLmNsaWNrKCk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgbm9kZS5jbGljaygpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmltZ291dGxldFwucHckLywKICAgICAgcGF0aDogUEFUSF9SVUxFLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbWcucGljdmlldycpOwogICAgICBpZiAoaSkgewogICAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuXzB4NWI1MGI3ID0gbnVsbDsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5fMHg1YjUwYjcgPSBudWxsOwogICAgICBsZXQgbm9kZSA9IG51bGw7CiAgICAgIHdoaWxlICghbm9kZSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwMCk7CiAgICAgICAgbm9kZSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdidXR0b25bbmFtZT0ibmV4dCJdJyk7CiAgICAgIH0KICAgICAgbm9kZS5jbGljaygpOwogICAgICBub2RlLmNsaWNrKCk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKHBpY2Jhcm9ufGltZ2Jhcm9ufGt2YWRvcilcLmNvbSQvLAogICAgICAgIC9eaW1nZmlsZXNcLm9yZyQvLAogICAgICBdLAogICAgICBwYXRoOiBQQVRIX1JVTEUsCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWMnKTsKICAgICAgaWYgKGkpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmb3JtJyk7CiAgICAgIGYuc3VibWl0KCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiAvXmh0dHA6XC9cL2ltZ2RyYWdvblwuY29tXC8oZ2V0ZmlsXC5waHB8ZGwpJC8sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnaW1nLnBpYycpOwogICAgICBpZiAoaSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg1MDApOwogICAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNDb250aW51ZUZSTScpOwogICAgICBmLnN1Ym1pdCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmltZ3JvY2tcLnB3JC8sCiAgICAgIHBhdGg6IFBBVEhfUlVMRSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnaW1nLnBpY3ZpZXcnKTsKICAgICAgaWYgKGkpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdldEFtYmlndW91c0Zvcm0oCiAgICAgICAgJ2RpdltpZF0gKyBkaXZbaWRdID4gaW5wdXQ6bm90KFtzdHlsZV0pJywKICAgICAgICAobm9kZSkgPT4gewogICAgICAgICAgY29uc3QgZCA9IG5vZGUucGFyZW50RWxlbWVudDsKICAgICAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0pOwogICAgICBub2RlLmNsaWNrKCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eKGltZ3ZpZXd8aW1ndG93bnxpbWdtYXplfGltZ2RldylcLnB3JC8sCiAgICAgIHBhdGg6IFBBVEhfUlVMRSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBjb25zdCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWN2aWV3Jyk7CiAgICAgIGlmIChpKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuXzB4NThmZjM1ID0gbnVsbDsKICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdldEFtYmlndW91c0Zvcm0oCiAgICAgICAgJ3NjcmlwdCArIGRpdltpZF0gPiBpbnB1dDpub3QoW3N0eWxlXSknLAogICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICBjb25zdCBkID0gbm9kZS5wYXJlbnRFbGVtZW50OwogICAgICAgICAgbm9kZS5jbGljaygpOwogICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfSk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWdhbnRcLmNvbSQvLAogICAgICBwYXRoOiAvXlwvaW1nLShcZCspXC5odG1sJC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGBpbWd2aWV3LSR7bS5wYXRoWzFdfS5odG1sYCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1nYW50XC5jb20kLywKICAgICAgcGF0aDogL15cL2ltZ3ZpZXctXGQrXC5odG1sJC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNwaWNWaWV3Jyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogICAgfSwKICB9KTsKICBmdW5jdGlvbiB3YWl0RE9NIChlbGVtZW50LCBmbikgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4gewogICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4gewogICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgIT09ICdjaGlsZExpc3QnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IFtrLCAsIHJdID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmZpbmQobXV0YXRpb24uYWRkZWROb2RlcywgKGNoaWxkKSA9PiB7CiAgICAgICAgICAgIHJldHVybiBmbihjaGlsZCkgPyBjaGlsZCA6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoayA9PT0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgcmVzb2x2ZShyKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgewogICAgICAgIGNoaWxkTGlzdDogdHJ1ZSwKICAgICAgfSk7CiAgICB9KTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QW1iaWd1b3VzRm9ybSAoc2VsZWN0b3IsIHNoZWxsTm9ybWFsaXplcikgewogICAgY29uc3QgZCA9IGF3YWl0IHdhaXRGb3JtU2hlbGwoc2VsZWN0b3IsIHNoZWxsTm9ybWFsaXplcik7CiAgICBjb25zdCBzdHlsZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdzdHlsZScsIGQpOwogICAgbGV0IHZpc2libGVDbGFzc2VzID0gcGFyc2VTdHlsZShzdHlsZSk7CiAgICB2aXNpYmxlQ2xhc3NlcyA9IGZpbHRlckR1cGxpY2F0ZWQodmlzaWJsZUNsYXNzZXMpOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29uc3QgYnV0dG9uID0gZmluZFZpc2libGVGb3JtKHZpc2libGVDbGFzc2VzKTsKICAgICAgaWYgKGJ1dHRvbikgewogICAgICAgIHJldHVybiBidXR0b247CiAgICAgIH0KICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gd2FpdEZvcm1TaGVsbCAoc2VsZWN0b3IsIG5vcm1hbGl6ZXIpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICBjb25zdCBoYW5kbGUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgbGV0IHNoZWxsID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoc2VsZWN0b3IpOwogICAgICAgIGlmICghc2hlbGwpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2xlYXJJbnRlcnZhbChoYW5kbGUpOwogICAgICAgIHNoZWxsID0gbm9ybWFsaXplcihzaGVsbCk7CiAgICAgICAgcmVzb2x2ZShzaGVsbCk7CiAgICAgIH0sIDUwMCk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gcGFyc2VTdHlsZSAoc3R5bGUpIHsKICAgIHN0eWxlID0gc3R5bGUudGV4dENvbnRlbnQ7CiAgICBjb25zdCBwYXR0ZXJuID0gL1wuKFx3Kylce3Zpc2liaWxpdHk6aW5pdGlhbDtcfS9nOwogICAgbGV0IHJ2ID0gbnVsbDsKICAgIGNvbnN0IGNsYXNzZXMgPSBbXTsKICAgIHdoaWxlICgocnYgPSBwYXR0ZXJuLmV4ZWMoc3R5bGUpKSAhPT0gbnVsbCkgewogICAgICBjbGFzc2VzLnB1c2gocnZbMV0pOwogICAgfQogICAgcmV0dXJuIGNsYXNzZXM7CiAgfQogIGZ1bmN0aW9uIGZpbHRlckR1cGxpY2F0ZWQgKGNsYXNzZXMpIHsKICAgIGNvbnN0IHRhYmxlID0gbmV3IE1hcCgpOwogICAgZm9yIChjb25zdCBjIG9mIGNsYXNzZXMpIHsKICAgICAgaWYgKHRhYmxlLmhhcyhjKSkgewogICAgICAgIHRhYmxlLnNldChjLCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGFibGUuc2V0KGMsIHRydWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gQXJyYXkuZnJvbSh0YWJsZS5lbnRyaWVzKCkpLmZpbHRlcigoW18sIHVuaXF1ZV0pID0+IHsKICAgICAgcmV0dXJuIHVuaXF1ZTsKICAgIH0pLm1hcCgoW18sIGNdKSA9PiB7CiAgICAgIHJldHVybiBjOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGZpbmRWaXNpYmxlRm9ybSAoY2xhc3NlcykgewogICAgZm9yIChjb25zdCBjbGFzc18gb2YgY2xhc3NlcykgewogICAgICBjb25zdCBmb3JtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoYGZvcm0uJHtjbGFzc199YCk7CiAgICAgIGlmICghZm9ybSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IGJ1dHRvbiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbnB1dFt0eXBlPSJidXR0b24iXSwgYnV0dG9uW3R5cGU9ImJ1dHRvbiJdLCBidXR0b25bY2xhc3NdJywgZm9ybSk7CiAgICAgIGlmICghYnV0dG9uKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgdiA9IGdldENvbXB1dGVkU3R5bGUoYnV0dG9uKS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5Jyk7CiAgICAgIGlmICh2ICE9PSAndmlzaWJsZScpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXR1cm4gYnV0dG9uOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGdldE5leHQxIChpKSB7CiAgICByZXR1cm4gaS52YWx1ZTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gaGVscGVyIChpZCwgZ2V0TmV4dCkgewogICAgY29uc3QgcmVjYXB0Y2hhID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNyZWNhcHRjaGFfd2lkZ2V0LCAjY2FwdGNoYScpOwogICAgaWYgKHJlY2FwdGNoYSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygnc3RvcCBiZWNhdXNlIHJlY2FwdGNoYScpOwogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbnB1dFtuYW1lPSJuZXh0Il0nKTsKICAgIGlmIChpKSB7CiAgICAgIGNvbnN0IG5leHQgPSBnZXROZXh0KGkpOwogICAgICBhd2FpdCBnbyhpZCwgT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W25hbWU9InByZSJdJykudmFsdWUsIG5leHQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWN2aWV3LCBpbWcucGljJyk7CiAgICBpZiAoaSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmluZm8oJ2RvIG5vdGhpbmcnKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gZ28gKGlkLCBwcmUsIG5leHQpIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnJywgewogICAgICBwb3N0OiB7CiAgICAgICAgb3A6ICd2aWV3JywKICAgICAgICBpZDogaWQsCiAgICAgICAgcHJlOiBwcmUsCiAgICAgICAgbmV4dDogbmV4dCwKICAgICAgICBhZGI6ICcwJywKICAgICAgfSwKICAgIH0pOwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltZ3RvcnJudFwuaW4kLywKICAgIHBhdGg6IC9eXC92aWV3XC5waHAkLywKICAgIHF1ZXJ5OiAvXlw/aWQ9LiovLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2NlbnRlciBkaXYgdGFibGUudGcgdGJvZHkgdHIgdGQgY2VudGVyIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltZ3ZhdWx0XC5wdyQvLAogICAgcGF0aDogL15cL3ZpZXctaW1hZ2VcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2FydGljbGUgZGl2LnNwYW43IGFbdGFyZ2V0PSJfYmxhbmsiXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL153d3dcLihpbWdza3l8aW1nZmlsZXxpbWdzZWUpXC5uZXQkLywKICAgICAgL153d3dcLmltYWdlc3BpY3lcLnNpdGUkLywKICAgIF0sCiAgICBwYXRoOiAvXlwvc2l0ZVwvdlwvXGQrJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNteVVuaXF1ZUltZycpLnBhcmVudE5vZGU7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXnd3d1wuKGltZ3NreXxpbWdmaWxlfGltZ3NlZSlcLm5ldCQvLAogICAgICAgIC9ed3d3XC5pbWFnZXNwaWN5XC5zaXRlJC8sCiAgICAgIF0sCiAgICAgIHBhdGg6IC9eXC9bYS16fDAtOV17NCwxMH0kLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXih3d3dcLik/aW1nYWlyXC5uZXQkLywKICAgICAgICAvXnd3d1wuY2xvdWRnYWxsZXJ5XC5uZXQkLywKICAgICAgXSwKICAgIH0sCiAgXSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtYXRjaGVzID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9kb2N1bWVudFwuZ2V0RWxlbWVudEJ5SWRcKCJzb0RhQnVnIlwpXC5zcmMgPSAiKFteIl0rKSI7Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKG1hdGNoZXNbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vaXBpYy5zdS8/cGFnZT1pbWcmcGljPSonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2Z6Jyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmlcLmphdnRvclwuY29tJC8sCiAgICBwYXRoOiAvXlwvaW1hZ2VcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNzaG93X2ltZyBpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ea2VwdGFyb2xvXC5odSQvLAogICAgcGF0aDogL14oXC9bXi9dK1wvW14vXStcLmpwZykkLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKCdodHRwOi8vd3d3LmtlcHRhcm9sby5odS9rZXAnICsgbS5wYXRoWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmxvc3RwaWNcLm5ldCQvLAogICAgcXVlcnk6IC9eXD9waG90bz1cZCskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nLm5vdGlubGluZS5jaXJjbGUnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXm1pcmFnZXBpY3NcLmNvbSQvLAogICAgICAgIC9eZnVuZXh0cmFcLmhvc3R6aVwuY29tJC8sCiAgICAgICAgL15iaWxkZXJcLm5peGhlbHBcLmRlJC8sCiAgICAgICAgL15pbWFnZWN1cmxcLihjb218b3JnKSQvLAogICAgICAgIC9eZm90by1waWNcLm5ldCQvLAogICAgICBdLAogICAgICBwYXRoOiAvXlwvdmlld2VyXC5waHAkLywKICAgICAgcXVlcnk6IC9maWxlPShbXiZdKykvLAogICAgfSwKICAgIHN0YXJ0OiBoZWxwZXIsCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWdzaW5cLmNvbSQvLAogICAgICBwYXRoOiAvXlwvdmlld2VyXC5waHAkLywKICAgICAgcXVlcnk6IC9maWxlPShbXiZdKykvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0IChtKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoJy9maWxlcy8nICsgbS5xdWVyeVsxXSk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eKGltZ25pcHxpbWdjZW50cmFsfGltZ2NyZWFtKVwuY29tJC8sCiAgICAgIHBhdGg6IC9eXC92aWV3ZXJyLipcLnBocCQvLAogICAgICBxdWVyeTogL2ZpbGU9KFteJl0rKS8sCiAgICB9LAogICAgc3RhcnQ6IGhlbHBlciwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogWwogICAgICAnaHR0cDovL3d3dy5vdmVycGljLm5ldC92aWV3ZXIucGhwP2ZpbGU9KicsCiAgICBdLAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNtYWluX2ltZycpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL154eHhob3N0XC5tZSQvLAogICAgICBwYXRoOiAvXlwvdmlld2VyXGQrXC5waHAkLywKICAgICAgcXVlcnk6IC9maWxlPShbXiZdKykvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0IChtKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoJ2ZpbGVzLycgKyBtLnF1ZXJ5WzFdKTsKICAgIH0sCiAgfSk7CiAgYXN5bmMgZnVuY3Rpb24gaGVscGVyIChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKCcvaW1hZ2VzLycgKyBtLnF1ZXJ5WzFdKTsKICB9Cn0pKCk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLm1yamhcLm9yZyQvLAogICAgcGF0aDogL15cL2dhbGxlcnlcLnBocCQvLAogICAgcXVlcnk6IC9eXD9lbnRyeT0oLispJC8sCiAgfSwKICBhc3luYyByZWFkeSAobSkgewogICAgY29uc3QgdXJsID0gbS5xdWVyeVsxXTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoJy8nICsgdXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wubm9lbHNoYWNrXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2VsdF90b19hZmYnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15vdmVyZHJlYW1cLmN6JC8sCiAgICAgIC9ecGljbGlja1wub3JnJC8sCiAgICBdLAogICAgcGF0aDogL15cL2ltYWdlXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNmdWxsX2ltYWdlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGltZy5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15pbWdhenVyZVwuY29tJC8sCiAgICAgIC9ec2hhZ2d5aW1nXC5wcm8kLywKICAgICAgL15waWMtbW9uZXlcLnJ1JC8sCiAgICAgIC9eZGFpbHlpbWFnZXNcLnh5eiQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGYgPSBkb2N1bWVudC5mb3Jtc1swXTsKICAgIGNvbnN0IHNpZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbnB1dFtuYW1lPSJzaWciXScsIGYpLnZhbHVlOwogICAgY29uc3QgcGljX2lkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W25hbWU9InBpY19pZCJdJywgZikudmFsdWU7CiAgICBjb25zdCByZWZlcmVyID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W25hbWU9InJlZmVyZXIiXScsIGYpLnZhbHVlOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShgL3BpYy5qcGVnP3BpY19pZD0ke3BpY19pZH0mc2lnPSR7c2lnfSZyZWZlcmVyPSR7cmVmZXJlcn1gKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3d3dy5waWMtdXBsb2FkLmRlL3ZpZXctKi5odG1sJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCcuYWR2ZXJ0Jyk7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ltZy5wcmV2aWV3X3BpY3R1cmVfMmIsIGltZy5vcmlnaW5hbF9waWN0dXJlXzJiJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ecGljNHlvdVwucnUkLywKICAgICAgL15waWM1eW91XC5ydSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGlmIChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2QxID4gaW1nJykgIT0gbnVsbCkgewogICAgICBjb25zdCBVUkxwYXJhbXMgPSBsb2NhdGlvbi5ocmVmLnNwbGl0KCcvJywgNSk7CiAgICAgIGxldCBuZXh0ID0gVVJMcGFyYW1zLmpvaW4oJy8nKTsKICAgICAgbmV4dCA9IG5leHQgKyAnLzEvJzsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNldENvb2tpZSgncDR5Y2xpY2snLCAnMScpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobmV4dCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNkMSBpbWcnKS5zcmM7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaSk7CiAgICB9CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3BpY2Nhc2hcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuY29udGFpbmVyID4gaW1nJyk7CiAgICBjb25zdCBtID0gaS5vbmNsaWNrLnRvU3RyaW5nKCkubWF0Y2goL21zaG93XCgnKFteJ10rKSdcKTsvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UobVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14ocGljZXhwb3NlZHxjcm9lYSlcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbWcucGljJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICAnaHR0cDovL2FtYXRldXJmcmVhay5vcmcvc2hhcmUtKi5odG1sJywKICAgICdodHRwOi8vYW1hdGV1cmZyZWFrLm9yZy9zaGFyZS5waHA/aWQ9KicsCiAgICAnaHR0cDovL3BpY2ZveC5vcmcvKicsCiAgICAnaHR0cDovL3d3dy5ldXJvLXBpYy5ldS9zaGFyZS5waHA/aWQ9KicsCiAgICAnaHR0cDovL3h4eC5mcmVlaW1hZ2UudXMvc2hhcmUucGhwP2lkPSonLAogICAgJ2h0dHA6Ly93d3cucGl4c29yLmNvbS9zaGFyZS5waHA/aWQ9KicsCiAgICAnaHR0cDovL3d3dy5waXhzb3IuY29tL3NoYXJlLSouaHRtbCcsCiAgICAnaHR0cDovL3BpeHNvci5jb20vWFhYL3NoYXJlLSouaHRtbCcsCiAgICAnaHR0cDovL2hvbGR0aGVtb2FuLm5ldC94L3NoYXJlLSouaHRtbCcsCiAgICAnaHR0cDovL3d3dy5pbWd6LnB3L3NoYXJlLSouaHRtbCcsCiAgICAnaHR0cHM6Ly9pbWd1dXIucGljdHVyZXMvc2hhcmUtKi5odG1sJwogIF0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjaWltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShvLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnBpY3BpY1wub25saW5lJC8sCiAgICAgIC9ecGljY2xvY2tcLnJ1JC8sCiAgICBdLAogICAgcGF0aDogL15cL1xkK1wvXGQrXC8kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNwYXlfdGh1bWJfaW1nIGltZycpOwogICAgaSA9IGkuZ2V0QXR0cmlidXRlKCdvbmNsaWNrJyk7CiAgICBpID0gaS5tYXRjaCgvbXNob3dcKCcoLispJ1wpLyk7CiAgICBpID0gaVsxXTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgJ2h0dHA6Ly9waWNzLW1vbmV5LnJ1L2FsbHBpY2ZyZWUvKicsCiAgICAnaHR0cDovL3d3dy5waWNzLW1vbmV5LnJ1L2FsbGltYWdlLyonLAogIF0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecGljcy1tb25leVwucnUkLywKICAgIHBhdGg6IC9eXC92XC5waHAkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdjZW50ZXIgaW1nOm5vdChbaWRdKScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnd3d1wucGljcy1tb25leVwucnUkLywKICAgICAgL14ocGlja2VyLWNsaWNrfHAweHBpY21vbmV5KVwucnUkLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGxldCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNkMSBpbWcsICNwYXlfdGh1bWJfaW1nID4gaW1nJyk7CiAgICBpID0gaS5vbmNsaWNrLnRvU3RyaW5nKCk7CiAgICBpID0gaS5tYXRjaCgvbXNob3dcKCcoLispJ1wpLyk7CiAgICBpID0gaVsxXTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly9waWNzaGFyZS5nZWVuemEuY29tL3BpY3MvKicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjcGljU2hhcmVfaW1hZ2VfY29udGFpbmVyJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnBpY3N0cmVhbVwudHYkLywKICAgIHBhdGg6IC9eXC8uKlwvLipcLmh0bWwkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjdmlldzEgPiBkaXY6bnRoLWNoaWxkKDEpID4gaW1nOm50aC1jaGlsZCgxKScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/cGltcGFuZGhvc3RcLmNvbSQvLAogICAgcGF0aDogL15cL2ltYWdlXC9cZCsvLAogICAgcXVlcnk6IC9eXD9zaXplPW9yaWdpbmFsLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjb3ZlcmZsb3ctd3JhcHBlciBpbWcub3JpZ2luYWwnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaW1nLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3BpbXBhbmRob3N0XC5jb20kLywKICAgIHBhdGg6IC9eXC9pbWFnZVwvXGQrLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobS5wYXRoICsgJz9zaXplPW9yaWdpbmFsJyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3BpeGhvc3RcLnRvJC8sCiAgICBwYXRoOiAvXlwvc2hvd1wvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZSwgI2FkJyk7CiAgICBsZXQgbyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjYWxsJyk7CiAgICBpZiAobykgewogICAgICBvLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgIH0KICAgIG8gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3Nob3dfaW1hZ2UsICNpbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShvLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3BpeHJvdXRlXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG8gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2Rvd25sb2FkX2JveCBpbWcjaW1ncHJldmlldy5waWMnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2Uoby5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecGl4eHhlbHNcLmNjJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpbWcgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI21haW4taW1hZ2UnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaW1nLmRhdGFzZXQuZnVsbCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnBybnRzY3JcLmNvbSQvLAogICAgICAvXnBybnRcLnNjJC8sCiAgICBdLAogICAgcGF0aDogL1wuaHRtbCQvLAogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15wcm50c2NyXC5jb20kLywKICAgICAgL15wcm50XC5zYyQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3NjcmVlbnNob3QtaW1hZ2UnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecHJvbnBpY1wub3JnJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCB1cmxCYXNlSW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ3RhYmxlLm5ld190YWJsZTI6bnRoLWNoaWxkKDEpIGltZy5saW5rJyk7CiAgICBjb25zdCBiYXNlVXJsID0gdXJsQmFzZUltZy5zcmMuc3BsaXQoJ3RoXycpWzBdOwogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ3RhYmxlLm5ld190YWJsZTI6bnRoLWNoaWxkKDIpIGltZy5saW5rJyk7CiAgICBjb25zdCB1cmwgPSBiYXNlVXJsICsgaW1nLnNyYy5zcGxpdCgndGhfJylbMV07CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15xcnJyb1wuY29tJC8sCiAgICBwYXRoOiAvXihcL2ltYWdlc1wvLispXC5odG1sJC8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShtLnBhdGhbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecmFkaWthbFwucnUkLywKICAgIHBhdGg6IC9eXC9iaWdcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJy5iYXNlLXBhZ2VfY2VudGVyID4gZGl2Om50aC1jaGlsZCgyKSA+IGltZzpudGgtY2hpbGQoMSknKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIGNvbnN0IGRlZmF1bHRBY3Rpb24gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucGFydGlhbChhY3Rpb24sICcjY29udGludWV0b2ltYWdlID4gZm9ybSBpbnB1dCcsICdpbWdbY2xhc3NePWNlbnRyZWRdJyk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IFsKICAgICAgewogICAgICAgIGhvc3Q6IFsKICAgICAgICAgIC9eKGltYWdlY29ybnxpbWFnZWRlY29kZXxpbWFnZWtvfGltYWdlc2h0b3JtfGltYWdlcmF2ZW4pXC5jb20kLywKICAgICAgICAgIC9eKGltZ2ljeXxpbWdzYXZ2eXxpbWd0emFyfGltZ3Rvcm5hZG98aW1na2lja3N8aW1nMnNoYXJlKVwuY29tJC8sCiAgICAgICAgICAvXihpbWd0cmlhbHxpbWdyZXB1dGF8aW1nZmFwcGVyfGltZ3BhcnR8aW1nYmFsYW5hfGltZ2phenopXC5jb20kLywKICAgICAgICAgIC9eKGhvc3R1cmltYWdlfGdyZWFzeWltYWdlfGRhbWltYWdlfHh4eHNjcmVlbnN8d3BjOHxkaW10dXMpXC5jb20kLywKICAgICAgICAgIC9eKGltZ2l4eHh8aW1naGl0fGltZ21haW58aW1nLXBsYW5ldHxpbWctcGF5KVwuY29tJC8sCiAgICAgICAgICAvXih0aW5pem98ZXJpbWdlfG5pbXpzaGFyZXxoZG1vemEpXC5jb20kLywKICAgICAgICAgIC9eKHd3d1wuKT8oaW1nbGVtb258aW1hZ2VibGlua3N8bXVsdGlpbWcpXC5jb20kLywKICAgICAgICAgIC9eKGl8eHh4KVwuaGVudGFpeW91dHViZVwuY29tJC8sCiAgICAgICAgICAvXihpXC4pP2ltZ3NlZWRzP1wuY29tJC8sCiAgICAgICAgICAvXmhvdGltYWdlc1wuZXUkLywKICAgICAgICAgIC8oXnxcLik1NTg4OFwuZXUkLywKICAgICAgICAgIC9eKGltZ3NlcnZlfGltZ3Byb2plY3R8aW1ncHl0aG9ufGltZ3BpeHxuYXVnaHR5Z2F0ZXxnYWxsZXJ5Y2xvdWR8eHhpbWd8aW1nLXZpZXcpXC5uZXQkLywKICAgICAgICAgIC9eKHh4eHdlYmRseHh4fHRlZW5zaG90fGltYWdlb258aW1hZ2V0ZWFtfHZveWV1cmltYWdlfHRlZW5pbWFnZXxtZWdhaW1hZ2UpXC5vcmckLywKICAgICAgICAgIC9eKGltZ3N0dWRpb3xpbWdzcG90KVwub3JnJC8sCiAgICAgICAgICAvXihwaWN6fHVucG9ybilcLnNpdGUkLywKICAgICAgICAgIC9ecGljXC5ob3RpbWdcLnNpdGUkLywKICAgICAgICAgIC9eKGRhbGV6b2J1eHxlY29pbWFnZXN8dXZvbmFoYXplKVwueHl6JC8sCiAgICAgICAgICAvXnh4eFwuKHNleGV4fHBvcm5zY3JlZW4pXC54eXokLywKICAgICAgICAgIC9eYWNpZGltZ1wuY2MkLywKICAgICAgICAgIC9edW5kZXJwaWNcLmNsdWIkLywKICAgICAgICAgIC9eaW1nY2xvdWRcLmNvJC8sCiAgICAgICAgICAvXmRhcnBpeFwuZ2EkLywKICAgICAgICAgIC9eKHBvcC1pbWd8YWRzLWltZylcLmluZm8kLywKICAgICAgICAgIC9eY3Vib25hd1wubWwkLywKICAgICAgICAgIC9eKGRvbWFpbmt8cG9ybm8tcGlyYXQpXC5ydSQvLAogICAgICAgICAgL15pcGljdHVyZVwuc3UkLywKICAgICAgICAgIC9eaW1hZ2VzcHVibGljXC50ayQvLAogICAgICAgICAgL15zXC5pbWdob3N0XC50b3AkLywKICAgICAgICAgIC9ed3d3XC5ob3RpbWFnZVwudWskLywKICAgICAgICAgIC9ecGl4dXBcLnVzJC8sCiAgICAgICAgXSwKICAgICAgICBwYXRoOiAvXC9pbWctLipcLmh0bWwvLAogICAgICB9LAogICAgICB7CiAgICAgICAgaG9zdDogL14oaGVudGFpLXBvcHxzdGFyLWhlbnRhaSlcLmNvbSQvLAogICAgICAgIHBhdGg6IC9eXC9bdGldXC9pbWctLipcLmh0bWwvLAogICAgICB9LAogICAgICB7CiAgICAgICAgaG9zdDogL15pbWdraW5nXC5jbyQvLAogICAgICAgIHBhdGg6IC9eXC9pbWc0Py0uKlwuaHRtbC8sCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBob3N0OiAvXmltYVwuZ3kkLywKICAgICAgICBwYXRoOiAvXlwvaVwvLiskLywKICAgICAgfSwKICAgICAgewogICAgICAgIGhvc3Q6IC9ecGljbW96YVwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL1wvP2ltZy0uKlwuaHRtbCQvLAogICAgICB9LAogICAgXSwKICAgIHJlYWR5OiBkZWZhdWx0QWN0aW9uLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1ncmF0XC5jb20kLywKICAgICAgcGF0aDogL15cL2ltZy0uKlwuaHRtbC8sCiAgICB9LAogICAgcmVhZHk6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5wYXJ0aWFsKGFjdGlvbiwgJyNjbG9zZScsICcjbWFpbl9pbWFnZSBpbWcuY2VudGVyLWJsb2NrLmltZy1yZXNwb25zaXZlJyksCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL14od3d3XC4pP2ltZ2ZyZXNoXC5pbmZvJC8sCiAgICAgIHBhdGg6IC9eXC9pbWctLipcLmh0bWwkLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBsZXQgbm9kZSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjY29udGludWV0b2ltYWdlID4gZm9ybSBpbnB1dCcpOwogICAgICBpZiAobm9kZSkgewogICAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgICBub2RlLmNsaWNrKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZXNldENvb2tpZXMoKTsKICAgICAgbm9kZSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbWdbY2xhc3NePWNlbnRyZWRdJyk7CiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShub2RlLnNyYyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KHdpbmRvdy5sb2NhdGlvbi5ocmVmLnRvU3RyaW5nKCksIHsKICAgICAgICBjdGk6IDEsCiAgICAgICAgcmVmOiAnJywKICAgICAgICByYzogMSwKICAgICAgICBycDogMSwKICAgICAgICBidDogMCwKICAgICAgICBidzogJ2VkZ2UnLAogICAgICB9KTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogWwogICAgICB7CiAgICAgICAgaG9zdDogL15pbWdraW5nXC5jbyQvLAogICAgICAgIHBhdGg6IC9eXC9pbWdzLS4qXC5odG1sLywKICAgICAgfSwKICAgICAgewogICAgICAgIGhvc3Q6IC9eKGltZ2tpbmdzfGltYWdlcmFyKVwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL2ltZy0uKlwuaHRtbC8sCiAgICAgIH0sCiAgICBdLAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCB1cmwgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmxpbmtpZDsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSh1cmwpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmltZ2tpbmdzXC5jb20kLywKICAgICAgcGF0aDogL15cL2ltZzItLipcLmh0bWwvLAogICAgfSwKICAgIHJlYWR5OiBkZWZhdWx0QWN0aW9uLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1ncHJpbWVcLmNvbSQvLAogICAgICBwYXRoOiAvXlwvaW1nYS11XC8oLispXC5qcGVnXC5odG1sLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAoKSB7CiAgICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKCcvaW1nYS11JywgJy91JykucmVwbGFjZSgnLmh0bWwnLCAnJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15wb3JueWZhcFwuY29tJC8sCiAgICAgIHBhdGg6IC9cL3BpY1wvLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IHAgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nI215SW1nJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UocC5zcmMpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmZ1bmltZ1wubmV0JC8sCiAgICAgIHBhdGg6IC9cL2ltZy0uKlwuaHRtbC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnL2ltZy0nLCAnL2ltZzMtJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15mdW5pbWdcLm5ldCQvLAogICAgICBwYXRoOiAvXC9pbWczLS4qXC5odG1sLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2NvbnRpbnVldG9pbWFnZSBpbWcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eMjJwaXh4XC54eXokLywKICAgICAgcGF0aDogL15cL2lhLVtpb11cLyguKylcLmpwZWdcLmh0bWwvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0ICgpIHsKICAgICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoJy9pYS0nLCAnLycpLnJlcGxhY2UoJy5odG1sJywgJycpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocGF0aCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eMjJwaXh4XC54eXokLywKICAgICAgcGF0aDogL15cL3gtb1wvKC4rKVwuanBlZ1wuaHRtbC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnL3gtJywgJy8nKS5yZXBsYWNlKCcuaHRtbCcsICcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXjIycGl4eFwueHl6JC8sCiAgICAgIHBhdGg6IC9eXC94LWlcLyguKylcLmpwZWdcLmh0bWwvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0ICgpIHsKICAgICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoJy94JywgJy95Jyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL150cnVlaW1nXC54eXokLywKICAgICAgcGF0aDogL15cL3UtYlwvKC4rKVwuanBlZ1wuaHRtbC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnL3UtJywgJy8nKS5yZXBsYWNlKCcuaHRtbCcsICcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogWwogICAgICB7CiAgICAgICAgaG9zdDogL15pbWFnZXJhclwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL2ltZzItLywKICAgICAgfSwKICAgICAgewogICAgICAgIGhvc3Q6IC9eaW1na2luZ1wuY28kLywKICAgICAgICBwYXRoOiAvXlwvaW1nW3YzXS0uKlwuaHRtbC8sCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBob3N0OiAvXnBpY3N0YXRlXC5jb20kLywKICAgICAgICBwYXRoOiAvXlwvdmlld1wvZnVsbFwvLiovLAogICAgICB9LAogICAgXSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbWdbYWx0XScpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWdwcmltZVwuY29tJC8sCiAgICAgIHBhdGg6IC9eXC9pbWcuKlwuaHRtbCQvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgbGV0IGEgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2NvbnRpbnVldG9pbWFnZSBhJyk7CiAgICAgIGlmIChhKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nW2FsdF0nKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShhLnNyYyk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW14XC50byQvLAogICAgICBwYXRoOiBbCiAgICAgICAgL15cL2ltZy0uKlwuaHRtbC8sCiAgICAgICAgL15cL2lcLy4qLywKICAgICAgXSwKICAgIH0sCiAgICByZWFkeTogX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnBhcnRpYWwoYWN0aW9uLCAnI2NvbnRpbnVlYnV0dG9uLCAjY29udGludWV0b2ltYWdlIGlucHV0W3R5cGU9InN1Ym1pdCJdJywgJ2ltZ1tjbGFzc149Y2VudHJlZF0nKSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBbCiAgICAgICAgL14od3d3XC4pP2ltZ2RyaXZlXC5uZXQkLywKICAgICAgICAvXih3d3dcLik/KGltZ3RheGl8aW1nd2FsbGV0fGltZ2FkdWx0KVwuY29tJC8sCiAgICAgIF0sCiAgICAgIHBhdGg6IC9eXC9pbWctLipcLmh0bWwkLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGxldCBtID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ21ldGFbcHJvcGVydHk9Im9nOmltYWdlIl0nKTsKICAgICAgbSA9IG0uY29udGVudC5yZXBsYWNlKCdzbWFsbCcsICdiaWcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShtKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWFnZXNjYW5uZXJcLmNjJC8sCiAgICAgIHBhdGg6IC9eXC8uKlwuanBnXC5odG1sLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAoKSB7CiAgICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKCcuaHRtbCcsICcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogJ2h0dHBzOi8vaW1nY2xvdWQucHcvaW1hZ2UvKicsCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnbGlua1tyZWw9ImltYWdlX3NyYyJdJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UobC5ocmVmKTsKICAgIH0sCiAgfSk7CiAgYXN5bmMgZnVuY3Rpb24gYWN0aW9uIChmaXJzdFNlbGVjdG9yLCBzZWNvbmRTZWxlY3RvcikgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lLCAjYWRibG9ja19kZXRlY3QsIC5wb3B1cE92ZXJsYXknKTsKICAgIGxldCBub2RlID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoZmlyc3RTZWxlY3Rvcik7CiAgICBpZiAobm9kZSkgewogICAgICBub2RlID0gZmluZEZpcnN0Rm9ybShub2RlKTsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBub2RlLm91dGVySFRNTDsKICAgICAgbm9kZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmb3JtIGlucHV0Jyk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbm9kZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKHNlY29uZFNlbGVjdG9yKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2Uobm9kZS5zcmMpOwogIH0KICBmdW5jdGlvbiBmaW5kRmlyc3RGb3JtIChjaGlsZCkgewogICAgd2hpbGUgKGNoaWxkICYmIGNoaWxkLmxvY2FsTmFtZSAhPT0gJ2Zvcm0nKSB7CiAgICAgIGNoaWxkID0gY2hpbGQucGFyZW50RWxlbWVudDsKICAgIH0KICAgIHJldHVybiBjaGlsZDsKICB9Cn0pKCk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15waWNcLnMtamF2XC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcud3AtcG9zdC1pbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICAnaHR0cDovL3NjcmVlbmxpc3QucnUvZGV0YWlscy5waHA/aW1hZ2VfaWQ9KicsCiAgICAnaHR0cDovL3d3dy5pbWFnZW5ldHouZGUvKi8qLmh0bWwnLAogIF0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNwaWN0dXJlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGltZy5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3LnN1YmlyaW1hZ2VuZXMuY29tLyouaHRtbCcsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjSW1hZ2VuVmlzdWFsaXphZGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vdGlueXBpYy5jb20vdmlldy5waHA/cGljPSonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltZ0VsZW1lbnQnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC50dXJib2ltYWdlaG9zdFwuY29tJC8sCiAgICBwYXRoOiAvXlwvcFwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3VJbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnhhb3V0Y2hvdWNcLmxpdmUkLywKICAgICAgL154eHhcLmZvcGtvZGlha1wuc2l0ZSQvLAogICAgICAvXmJsYW1lbGVzc1wud29yayQvLAogICAgXSwKICAgIHBhdGg6IC9eXC9pbWctLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGlmIChkb2N1bWVudC5yZWZlcnJlciA9PSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmKSB7CiAgICAgIGxldCBpbWcgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2NvbnRhaW5lciA+IGEgPiBpbWcnKTsKICAgICAgaWYgKCFpbWcpIHsKICAgICAgICBpbWcgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2NvbnRhaW5lciA+IGltZycpOwogICAgICB9CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaW1nLnNyYyk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Zvcm0nKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGYuYWN0aW9uLCB7IAogICAgICAgIHBvc3Q6IHsKICAgICAgICAgIGltZ0NvbnRpbnVlOiAnQ29udGludWUgdG8gaW1hZ2UgLi4uJywKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KfSk7CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIl8iLCBmdW5jdGlvbigpIHsgcmV0dXJuIF87IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICIkIiwgZnVuY3Rpb24oKSB7IHJldHVybiAkOyB9KTsKIHZhciB1dGlsX2FqYXhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7CiB2YXIgdXRpbF9jb29raWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwogdmFyIHV0aWxfZGlzcGF0Y2hlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKIHZhciB1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CiB2YXIgdXRpbF9pbWFnZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7CiB2YXIgdXRpbF9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKIHZhciB1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKIHZhciB1dGlsX21pc2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpOwogdmFyIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CmNvbnN0IF8gPSB7CiAgQWRzQnlwYXNzZXJFcnJvcjogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkFkc0J5cGFzc2VyRXJyb3IiXSwKICBldmlsOiB1dGlsX21pc2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siZXZpbCJdLAogIGZpbmQ6IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJmaW5kIl0sCiAgZm9yRWFjaDogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImZvckVhY2giXSwKICBnZW5lcmF0ZVJhbmRvbUlQOiB1dGlsX21pc2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1siZ2VuZXJhdGVSYW5kb21JUCJdLAogIGluZm86IHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bImluZm8iXSwKICBub25lOiB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sibm9uZSJdLAogIHBhcnRpYWw6IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJwYXJ0aWFsIl0sCiAgcmVnaXN0ZXI6IHV0aWxfZGlzcGF0Y2hlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJyZWdpc3RlciJdLAogIHRyeUV2ZXJ5OiB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sidHJ5RXZlcnkiXSwKICB3YWl0OiB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sid2FpdCJdLAogIHdhcm46IHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19bIndhcm4iXSwKfTsKZnVuY3Rpb24gJCAoc2VsZWN0b3IsIGNvbnRleHQpIHsKICByZXR1cm4gT2JqZWN0KHV0aWxfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bInF1ZXJ5U2VsZWN0b3IiXSkoc2VsZWN0b3IsIGNvbnRleHQpOwp9CiQuJCA9IHV0aWxfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bInF1ZXJ5U2VsZWN0b3JPck51bGwiXTsKJC4kJCA9IHV0aWxfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bInF1ZXJ5U2VsZWN0b3JBbGwiXTsKJC5ibG9jayA9IHV0aWxfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bImJsb2NrIl07CiQuZ2V0ID0gdXRpbF9hamF4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImdldCJdOwokLmdldENvb2tpZSA9IHV0aWxfY29va2llX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImdldENvb2tpZSJdOwokLm51a2UgPSB1dGlsX21pc2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1sibnVrZSJdOwokLm9wZW5JbWFnZSA9IHV0aWxfaW1hZ2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX1sib3BlbkltYWdlIl07CiQub3BlbkxpbmsgPSB1dGlsX2xpbmtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX1sib3BlbkxpbmsiXTsKJC5wb3N0ID0gdXRpbF9hamF4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bInBvc3QiXTsKJC5yZW1vdmUgPSB1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJyZW1vdmUiXTsKJC5yZW1vdmVBbGxUaW1lciA9IHV0aWxfbWlzY19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fWyJyZW1vdmVBbGxUaW1lciJdOwokLnJlc2V0Q29va2llcyA9IHV0aWxfY29va2llX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInJlc2V0Q29va2llcyJdOwokLnNlYXJjaEZyb21TY3JpcHRzID0gdXRpbF9kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1sic2VhcmNoRnJvbVNjcmlwdHMiXTsKJC5zZXRDb29raWUgPSB1dGlsX2Nvb2tpZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJzZXRDb29raWUiXTsKJC50b0RPTSA9IHV0aWxfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bInRvRE9NIl07CiQud2luZG93ID0gdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fWyJ1c3ciXTsKIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZ2V0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXQ7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJwb3N0IiwgZnVuY3Rpb24oKSB7IHJldHVybiBwb3N0OyB9KTsKIHZhciB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CiB2YXIgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKIHZhciB1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKY2xhc3MgQWpheEVycm9yIGV4dGVuZHMgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIkFkc0J5cGFzc2VyRXJyb3IiXSB7CiAgY29uc3RydWN0b3IgKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzLCBzdGF0dXMsIHJlc3BvbnNlKSB7CiAgICBzdXBlcihgJHttZXRob2R9ICR7dXJsfSBnb3QgJHtzdGF0dXN9YCk7CiAgICB0aGlzLl9tZXRob2QgPSBtZXRob2Q7CiAgICB0aGlzLl91cmwgPSB1cmw7CiAgICB0aGlzLl9kYXRhID0gZGF0YTsKICAgIHRoaXMuX2hlYWRlcnMgPSBoZWFkZXJzOwogICAgdGhpcy5fc3RhdHVzID0gc3RhdHVzOwogICAgdGhpcy5fcmVzcG9uc2UgPSByZXNwb25zZTsKICB9CiAgZ2V0IG5hbWUgKCkgewogICAgcmV0dXJuICdBamF4RXJyb3InOwogIH0KICBnZXQgbWV0aG9kICgpIHsKICAgIHJldHVybiB0aGlzLl9tZXRob2Q7CiAgfQogIGdldCB1cmwgKCkgewogICAgcmV0dXJuIHRoaXMuX3VybDsKICB9CiAgZ2V0IGRhdGEgKCkgewogICAgcmV0dXJuIHRoaXMuX2RhdGE7CiAgfQogIGdldCBoZWFkZXJzICgpIHsKICAgIHJldHVybiB0aGlzLl9oZWFkZXJzOwogIH0KICBnZXQgc3RhdHVzICgpIHsKICAgIHJldHVybiB0aGlzLl9zdGF0dXM7CiAgfQogIGdldCByZXNwb25zZSAoKSB7CiAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2U7CiAgfQp9CmZ1bmN0aW9uICogZmxhdHRlbk9iamVjdCAob2JqZWN0KSB7CiAgaWYgKCFvYmplY3QpIHsKICAgIHJldHVybjsKICB9CiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob2JqZWN0KSkgewogICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHsKICAgICAgZm9yIChjb25zdCB2XyBvZiB2KSB7CiAgICAgICAgeWllbGQgW1trLCAnJ10sIHZfXTsKICAgICAgfQogICAgfSBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHsKICAgICAgZm9yIChjb25zdCBba18sIHZfXSBvZiBmbGF0dGVuT2JqZWN0KHYpKSB7CiAgICAgICAgeWllbGQgW1trLCAuLi5rX10sIHZfXTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgeWllbGQgW1trXSwgdl07CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGZsYXR0ZW5LZXkgKGtleUxpc3QpIHsKICBjb25zdCBbaGVhZCwgLi4ucmVzdF0gPSBrZXlMaXN0OwogIHJldHVybiBgJHtoZWFkfSR7cmVzdC5tYXAoXyA9PiBgWyR7X31dYCl9YDsKfQpmdW5jdGlvbiBkZWVwSm9pbiAocHJlZml4LCBvYmplY3QpIHsKICBjb25zdCBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTsKICBjb25zdCBtYXBwZWQgPSBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm1hcCJdKShrZXlzLCAoaykgPT4gewogICAgY29uc3QgdiA9IG9iamVjdFtrXTsKICAgIGNvbnN0IGtleSA9IGAke3ByZWZpeH1bJHtrfV1gOwogICAgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0JykgewogICAgICByZXR1cm4gZGVlcEpvaW4oa2V5LCB2KTsKICAgIH0KICAgIGNvbnN0IHRtcCA9IFtrZXksIHZdLm1hcChlbmNvZGVVUklDb21wb25lbnQpOwogICAgcmV0dXJuIHRtcC5qb2luKCc9Jyk7CiAgfSk7CiAgcmV0dXJuIG1hcHBlZC5qb2luKCcmJyk7Cn0KZnVuY3Rpb24gdG9RdWVyeSAoZGF0YSkgewogIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0YTsKICBpZiAoZGF0YSA9PT0gbnVsbCB8fCAodHlwZSAhPT0gJ3N0cmluZycgJiYgdHlwZSAhPT0gJ29iamVjdCcpKSB7CiAgICByZXR1cm4gJyc7CiAgfQogIGlmICh0eXBlID09PSAnc3RyaW5nJykgewogICAgcmV0dXJuIGRhdGE7CiAgfQogIGlmIChkYXRhIGluc3RhbmNlb2YgU3RyaW5nKSB7CiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpOwogIH0KICBjb25zdCBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGF0YSk7CiAgcmV0dXJuIE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibWFwIl0pKGtleXMsIChrKSA9PiB7CiAgICBjb25zdCB2ID0gZGF0YVtrXTsKICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHsKICAgICAgcmV0dXJuIGRlZXBKb2luKGssIHYpOwogICAgfQogICAgY29uc3QgdG1wID0gW2ssIHZdLm1hcChlbmNvZGVVUklDb21wb25lbnQpOwogICAgcmV0dXJuIHRtcC5qb2luKCc9Jyk7CiAgfSkuam9pbignJicpOwp9CmZ1bmN0aW9uIHRvRm9ybSAoZGF0YSkgewogIGNvbnN0IHR5cGUgPSB0eXBlb2YgZGF0YTsKICBpZiAoZGF0YSA9PT0gbnVsbCB8fCAodHlwZSAhPT0gJ3N0cmluZycgJiYgdHlwZSAhPT0gJ29iamVjdCcpKSB7CiAgICByZXR1cm4gJyc7CiAgfQogIGlmICh0eXBlID09PSAnc3RyaW5nJykgewogICAgcmV0dXJuIGRhdGE7CiAgfQogIGlmIChkYXRhIGluc3RhbmNlb2YgU3RyaW5nKSB7CiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpOwogIH0KICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKCk7CiAgZm9yIChjb25zdCBbaywgdl0gb2YgZmxhdHRlbk9iamVjdChkYXRhKSkgewogICAgZm9ybS5hcHBlbmQoZmxhdHRlbktleShrKSwgdik7CiAgfQogIHJldHVybiBmb3JtOwp9CmZ1bmN0aW9uIGFqYXggKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKSB7CiAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImRlYnVnIl0pKCdhamF4JywgbWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMpOwogIGNvbnN0IGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgbC5ocmVmID0gdXJsOwogIGNvbnN0IHJlcUhvc3QgPSBsLmhvc3RuYW1lOwogIGNvbnN0IG92ZXJyaWRlSGVhZGVycyA9IHsKICAgIEhvc3Q6IHJlcUhvc3QgfHwgd2luZG93LmxvY2F0aW9uLmhvc3QsCiAgICBPcmlnaW46IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sCiAgICBSZWZlcmVyOiB3aW5kb3cubG9jYXRpb24uaHJlZiwKICAgICdYLVJlcXVlc3RlZC1XaXRoJzogJ1hNTEh0dHBSZXF1ZXN0JywKICB9OwogIE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZm9yRWFjaCJdKShvdmVycmlkZUhlYWRlcnMsICh2LCBrKSA9PiB7CiAgICBpZiAoaGVhZGVyc1trXSA9PT0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXSkgewogICAgICBkZWxldGUgaGVhZGVyc1trXTsKICAgIH0gZWxzZSB7CiAgICAgIGhlYWRlcnNba10gPSB2OwogICAgfQogIH0pOwogIGlmIChkYXRhKSB7CiAgICBpZiAoaGVhZGVyc1snQ29udGVudC1UeXBlJ10uaW5kZXhPZignanNvbicpID49IDApIHsKICAgICAgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOwogICAgfSBlbHNlIGlmIChoZWFkZXJzWydDb250ZW50LVR5cGUnXS5pbmRleE9mKCdtdWx0aXBhcnQnKSA+PSAwKSB7CiAgICAgIGRhdGEgPSB0b0Zvcm0oZGF0YSk7CiAgICB9IGVsc2UgewogICAgICBkYXRhID0gdG9RdWVyeShkYXRhKTsKICAgIH0KICAgIGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSBkYXRhLmxlbmd0aDsKICB9CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siR01BUEkiXS54bWxIdHRwUmVxdWVzdCh7CiAgICAgIG1ldGhvZDogbWV0aG9kLAogICAgICB1cmw6IHVybCwKICAgICAgZGF0YTogZGF0YSwKICAgICAgaGVhZGVyczogaGVhZGVycywKICAgICAgb25sb2FkIChyZXNwb25zZSkgewogICAgICAgIHJlc3BvbnNlID0gKHR5cGVvZiByZXNwb25zZS5yZXNwb25zZVRleHQgIT09ICd1bmRlZmluZWQnKSA/IHJlc3BvbnNlIDogdGhpczsKICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHsKICAgICAgICAgIHJlamVjdChuZXcgQWpheEVycm9yKG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzLCByZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnJlc3BvbnNlVGV4dCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLnJlc3BvbnNlVGV4dCk7CiAgICAgICAgfQogICAgICB9LAogICAgICBvbmVycm9yIChyZXNwb25zZSkgewogICAgICAgIHJlc3BvbnNlID0gKHR5cGVvZiByZXNwb25zZS5yZXNwb25zZVRleHQgIT09ICd1bmRlZmluZWQnKSA/IHJlc3BvbnNlIDogdGhpczsKICAgICAgICByZWplY3QobmV3IEFqYXhFcnJvcihtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycywgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5yZXNwb25zZVRleHQpKTsKICAgICAgfSwKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGdldCAodXJsLCBkYXRhLCBoZWFkZXJzKSB7CiAgZGF0YSA9IHRvUXVlcnkoZGF0YSk7CiAgZGF0YSA9IGRhdGEgPyAnPycgKyBkYXRhIDogJyc7CiAgaGVhZGVycyA9IGhlYWRlcnMgfHwge307CiAgcmV0dXJuIGFqYXgoJ0dFVCcsIHVybCArIGRhdGEsICcnLCBoZWFkZXJzKTsKfQpmdW5jdGlvbiBwb3N0ICh1cmwsIGRhdGEsIGhlYWRlcnMpIHsKICBjb25zdCBoID0gewogICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgnLAogIH07CiAgaWYgKGhlYWRlcnMpIHsKICAgIE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZm9yRWFjaCJdKShoZWFkZXJzLCAodiwgaykgPT4gewogICAgICBoW2tdID0gdjsKICAgIH0pOwogIH0KICByZXR1cm4gYWpheCgnUE9TVCcsIHVybCwgZGF0YSwgaCk7Cn0KIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2V0Q29va2llIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRDb29raWU7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZXRDb29raWUiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldENvb2tpZTsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInJlc2V0Q29va2llcyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXRDb29raWVzOyB9KTsKIHZhciB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CmZ1bmN0aW9uIHNldENvb2tpZSAoa2V5LCB2YWx1ZSkgewogIGRvY3VtZW50LmNvb2tpZSA9IGAke2tleX09JHt2YWx1ZX07cGF0aD0ke2xvY2F0aW9uLnBhdGhuYW1lfTtgOwp9CmZ1bmN0aW9uIGdldENvb2tpZSAoa2V5KSB7CiAgbGV0IFssIGMsXSA9IE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZmluZCJdKShkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKSwgKHYpID0+IHsKICAgIGNvbnN0IGsgPSB2LnJlcGxhY2UoL15ccyooW2EtekEtWjAtOS1fXSspPS4rJC8sICckMScpOwogICAgaWYgKGsgIT09IGtleSkgewogICAgICByZXR1cm4gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXTsKICAgIH0KICB9KTsKICBpZiAoYyA9PT0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGMgPSBjLnJlcGxhY2UoL15ccypbYS16QS1aMC05LV9dKz0oW147XSspLj8kLywgJyQxJyk7CiAgaWYgKCFjKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGM7Cn0KZnVuY3Rpb24gcmVzZXRDb29raWVzICgpIHsKICBjb25zdCBhID0gZG9jdW1lbnQuZG9tYWluOwogIGNvbnN0IGIgPSBkb2N1bWVudC5kb21haW4ucmVwbGFjZSgvXnd3d1wuLywgJycpOwogIGNvbnN0IGMgPSBkb2N1bWVudC5kb21haW4ucmVwbGFjZSgvXihcdytcLikrPyhcdytcLlx3KykkLywgJyQyJyk7CiAgY29uc3QgZCA9IChuZXcgRGF0ZSgxZTMpKS50b1VUQ1N0cmluZygpOwogIE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZm9yRWFjaCJdKShkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKSwgKHYpID0+IHsKICAgIGNvbnN0IGsgPSB2LnJlcGxhY2UoL15ccyooXHcrKT0uKyQvLCAnJDEnKTsKICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke2t9PTtleHBpcmVzPSR7ZH07YDsKICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke2t9PTtwYXRoPS87ZXhwaXJlcz0ke2R9O2A7CiAgICBjb25zdCBlID0gKGEsIGIsIGMpID0+IGAke2F9PTtwYXRoPS87ZG9tYWluPSR7Yn07ZXhwaXJlcz0ke2N9O2A7CiAgICBkb2N1bWVudC5jb29raWUgPSBlKGssIGEsIGQpOwogICAgZG9jdW1lbnQuY29va2llID0gZShrLCBiLCBkKTsKICAgIGRvY3VtZW50LmNvb2tpZSA9IGUoaywgYywgZCk7CiAgfSk7Cn0KIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiYmxvY2siLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsb2NrOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicXVlcnlTZWxlY3RvciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcXVlcnlTZWxlY3RvcjsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInF1ZXJ5U2VsZWN0b3JBbGwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGw7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJxdWVyeVNlbGVjdG9yT3JOdWxsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBxdWVyeVNlbGVjdG9yT3JOdWxsOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicmVtb3ZlIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW1vdmU7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJzZWFyY2hGcm9tU2NyaXB0cyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2VhcmNoRnJvbVNjcmlwdHM7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJ0b0RPTSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG9ET007IH0pOwogdmFyIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKIHZhciB1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKY2xhc3MgRG9tTm90Rm91bmRFcnJvciBleHRlbmRzIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBZHNCeXBhc3NlckVycm9yIl0gewogIGNvbnN0cnVjdG9yIChzZWxlY3RvcikgewogICAgc3VwZXIoYFxgJHtzZWxlY3Rvcn1cYCBub3QgZm91bmRgKTsKICB9CiAgZ2V0IG5hbWUgKCkgewogICAgcmV0dXJuICdEb21Ob3RGb3VuZEVycm9yJzsKICB9Cn0KZnVuY3Rpb24gcXVlcnlTZWxlY3RvciAoc2VsZWN0b3IsIGNvbnRleHQpIHsKICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQucXVlcnlTZWxlY3RvcikgewogICAgY29udGV4dCA9IGRvY3VtZW50OwogIH0KICBjb25zdCBuID0gY29udGV4dC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKICBpZiAoIW4pIHsKICAgIHRocm93IG5ldyBEb21Ob3RGb3VuZEVycm9yKHNlbGVjdG9yKTsKICB9CiAgcmV0dXJuIG47Cn0KZnVuY3Rpb24gcXVlcnlTZWxlY3Rvck9yTnVsbCAoc2VsZWN0b3IsIGNvbnRleHQpIHsKICB0cnkgewogICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IsIGNvbnRleHQpOwogIH0gY2F0Y2ggKGUpIHsKICAgIHJldHVybiBudWxsOwogIH0KfQpmdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsIChzZWxlY3RvciwgY29udGV4dCkgewogIGlmICghY29udGV4dCB8fCAhY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKSB7CiAgICBjb250ZXh0ID0gZG9jdW1lbnQ7CiAgfQogIGNvbnN0IG5zID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTsKICByZXR1cm4gbnM7Cn0KZnVuY3Rpb24gdG9ET00gKHJhd0hUTUwpIHsKICB0cnkgewogICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwogICAgY29uc3QgRE9NSFRNTCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcocmF3SFRNTCwgJ3RleHQvaHRtbCcpOwogICAgcmV0dXJuIERPTUhUTUw7CiAgfSBjYXRjaCAoZSkgewogICAgdGhyb3cgbmV3IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBZHNCeXBhc3NlckVycm9yIl0oJ2NvdWxkIG5vdCBwYXJzZSBIVE1MIHRvIERPTScpOwogIH0KfQpmdW5jdGlvbiByZW1vdmUgKHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgY29uc3Qgbm9kZXMgPSBxdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yLCBjb250ZXh0KTsKICBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZvckVhY2giXSkobm9kZXMsIChlKSA9PiB7CiAgICBPYmplY3QodXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZGVidWciXSkoJ3JlbW92ZWQnLCBlKTsKICAgIGUucmVtb3ZlKCk7CiAgfSk7Cn0KZnVuY3Rpb24gYmxvY2sgKHNlbGVjdG9yLCBjb250ZXh0PW51bGwpIHsKICBpZiAoIWNvbnRleHQpIHsKICAgIGNvbnRleHQgPSBkb2N1bWVudDsKICB9CiAgbGV0IGZuID0gbnVsbDsKICBpZiAoT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJpc1N0cmluZyJdKShzZWxlY3RvcikpIHsKICAgIGZuID0gKCkgPT4gewogICAgICByZW1vdmUoc2VsZWN0b3IsIGNvbnRleHQpOwogICAgfTsKICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykgewogICAgZm4gPSAobXV0YXRpb24pID0+IHsKICAgICAgbXV0YXRpb24uYWRkZWROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7CiAgICAgICAgaWYgKHNlbGVjdG9yKG5vZGUpKSB7CiAgICAgICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgfSBlbHNlIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3dyb25nIHNlbGVjdG9yJyk7CiAgfQogIGNvbnN0IG8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7CiAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHsKICAgICAgZm4obXV0YXRpb24pOwogICAgfSk7CiAgfSk7CiAgby5vYnNlcnZlKGNvbnRleHQsIHsKICAgIGNoaWxkTGlzdDogdHJ1ZSwKICAgIHN1YnRyZWU6IHRydWUsCiAgfSk7Cn0KZnVuY3Rpb24gc2VhcmNoRnJvbVNjcmlwdHNCeVJlZ0V4cCAocGF0dGVybiwgY29udGV4dCkgewogIGNvbnN0IHNjcmlwdHMgPSBxdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHQnLCBjb250ZXh0KTsKICBjb25zdCBbLCAsIG1dID0gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJmaW5kIl0pKHNjcmlwdHMsIChzKSA9PiB7CiAgICBjb25zdCBtID0gcy50ZXh0Q29udGVudC5tYXRjaChwYXR0ZXJuKTsKICAgIGlmICghbSkgewogICAgICByZXR1cm4gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXTsKICAgIH0KICAgIHJldHVybiBtOwogIH0pOwogIGlmIChtID09PSB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9uZSJdKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIG07Cn0KZnVuY3Rpb24gc2VhcmNoRnJvbVNjcmlwdHNCeVN0cmluZyAocGF0dGVybiwgY29udGV4dCkgewogIGNvbnN0IHNjcmlwdHMgPSBxdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHQnLCBjb250ZXh0KTsKICBjb25zdCBbLCBtLF0gPSBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZpbmQiXSkoc2NyaXB0cywgKHMpID0+IHsKICAgIGNvbnN0IG0gPSBzLnRleHRDb250ZW50LmluZGV4T2YocGF0dGVybik7CiAgICBpZiAobSA8IDApIHsKICAgICAgcmV0dXJuIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl07CiAgICB9CiAgICByZXR1cm4gbTsKICB9KTsKICBpZiAobSA9PT0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiBtLnRleHRDb250ZW50Owp9CmZ1bmN0aW9uIHNlYXJjaEZyb21TY3JpcHRzIChwYXR0ZXJuLCBjb250ZXh0KSB7CiAgaWYgKHBhdHRlcm4gaW5zdGFuY2VvZiBSZWdFeHApIHsKICAgIHJldHVybiBzZWFyY2hGcm9tU2NyaXB0c0J5UmVnRXhwKHBhdHRlcm4sIGNvbnRleHQpOwogIH0gZWxzZSBpZiAoT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJpc1N0cmluZyJdKShwYXR0ZXJuKSkgewogICAgcmV0dXJuIHNlYXJjaEZyb21TY3JpcHRzQnlTdHJpbmcocGF0dGVybiwgY29udGV4dCk7CiAgfSBlbHNlIHsKICAgIHJldHVybiBudWxsOwogIH0KfQogfSksCiAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJvcGVuSW1hZ2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG9wZW5JbWFnZTsgfSk7CiB2YXIgdXRpbF9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTsKIHZhciB1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7CiB2YXIgdXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CiB2YXIgdXRpbF9taXNjX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKIHZhciB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwphc3luYyBmdW5jdGlvbiBvcGVuSW1hZ2UgKGltZ1NyYywgb3B0aW9ucykgewogIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogIGNvbnN0IHJlcGxhY2UgPSAhIW9wdGlvbnMucmVwbGFjZTsKICBjb25zdCByZWZlcmVyID0gISFvcHRpb25zLnJlZmVyZXI7CiAgaWYgKHJlcGxhY2UpIHsKICAgIGF3YWl0IHJlcGxhY2VCb2R5KGltZ1NyYyk7CiAgICByZXR1cm47CiAgfQogIGNvbnN0IHJlZGlyZWN0SW1hZ2UgPSBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdNQVBJIl0uZ2V0VmFsdWUoJ3JlZGlyZWN0X2ltYWdlJyk7CiAgaWYgKHJlZGlyZWN0SW1hZ2UpIHsKICAgIGF3YWl0IE9iamVjdCh1dGlsX2xpbmtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sib3BlbkxpbmsiXSkoaW1nU3JjLCB7CiAgICAgIHJlZmVyZXI6IHJlZmVyZXIsCiAgICB9KTsKICB9Cn0KZnVuY3Rpb24gZW5hYmxlU2Nyb2xsaW5nICgpIHsKICBjb25zdCBvID0gZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gJ0NTUzFDb21wYXQnID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogZG9jdW1lbnQuYm9keTsKICBvLnN0eWxlLm92ZXJmbG93ID0gJyc7Cn0KZnVuY3Rpb24gdG9nZ2xlU2hyaW5raW5nICgpIHsKICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoJ2Fkc2J5cGFzc2VyLXNocmlua2VkJyk7Cn0KZnVuY3Rpb24gY2hlY2tTY2FsaW5nICgpIHsKICBjb25zdCBudyA9IHRoaXMubmF0dXJhbFdpZHRoOwogIGNvbnN0IG5oID0gdGhpcy5uYXR1cmFsSGVpZ2h0OwogIGNvbnN0IGN3ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOwogIGNvbnN0IGNoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDsKICBpZiAoKG53ID4gY3cgfHwgbmggPiBjaCkgJiYgIXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKCdhZHNieXBhc3Nlci1yZXNpemFibGUnKSkgewogICAgdGhpcy5jbGFzc0xpc3QuYWRkKCdhZHNieXBhc3Nlci1yZXNpemFibGUnKTsKICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnYWRzYnlwYXNzZXItc2hyaW5rZWQnKTsKICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0b2dnbGVTaHJpbmtpbmcpOwogIH0gZWxzZSBpZiAoKG53IDw9IGN3ICYmIG5oIDw9IGNoKSAmJiB0aGlzLmNsYXNzTGlzdC5jb250YWlucygnYWRzYnlwYXNzZXItcmVzaXphYmxlJykpIHsKICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0b2dnbGVTaHJpbmtpbmcpOwogICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCdhZHNieXBhc3Nlci1zaHJpbmtlZCcpOwogICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCdhZHNieXBhc3Nlci1yZXNpemFibGUnKTsKICB9Cn0KYXN5bmMgZnVuY3Rpb24gc2NhbGVJbWFnZSAoaSkgewogIGNvbnN0IHNpVVJMID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHTUFQSSJdLmdldFJlc291cmNlVXJsKCdzY2FsZUltYWdlJyk7CiAgYXBwZW5kU3R5bGVVUkwoc2lVUkwpOwogIGlmIChpLm5hdHVyYWxXaWR0aCAmJiBpLm5hdHVyYWxIZWlnaHQpIHsKICAgIGNoZWNrU2NhbGluZy5jYWxsKGkpOwogIH0gZWxzZSB7CiAgICBpLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjaGVja1NjYWxpbmcpOwogIH0KICBsZXQgaCA9IDA7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHsKICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoaCk7CiAgICBoID0gd2luZG93LnNldFRpbWVvdXQoY2hlY2tTY2FsaW5nLmJpbmQoaSksIDEwMCk7CiAgfSk7Cn0KYXN5bmMgZnVuY3Rpb24gY2hhbmdlQmFja2dyb3VuZCAoKSB7CiAgY29uc3QgYmdJbWFnZSA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR01BUEkiXS5nZXRSZXNvdXJjZVVybCgnYmdJbWFnZScpOwogIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyMyMjIyMjInOwogIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgnJHtiZ0ltYWdlfScpYDsKfQphc3luYyBmdW5jdGlvbiBhbGlnbkNlbnRlciAoKSB7CiAgY29uc3QgYWNVUkwgPSBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdNQVBJIl0uZ2V0UmVzb3VyY2VVcmwoJ2FsaWduQ2VudGVyJyk7CiAgYXBwZW5kU3R5bGVVUkwoYWNVUkwpOwp9CmZ1bmN0aW9uIGluamVjdFN0eWxlIChkLCBpKSB7CiAgT2JqZWN0KHV0aWxfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInJlbW92ZSJdKSgnc3R5bGUsIGxpbmtbcmVsPXN0eWxlc2hlZXRdJyk7CiAgZC5pZCA9ICdhZHNieXBhc3Nlci13cmFwcGVyJzsKICBpLmlkID0gJ2Fkc2J5cGFzc2VyLWltYWdlJzsKfQpmdW5jdGlvbiBhcHBlbmRTdHlsZVVSTCAodXJsKSB7CiAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTsKICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JzsKICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnOwogIGxpbmsuaHJlZiA9IHVybDsKICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGxpbmspOwp9CmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VCb2R5IChpbWdTcmMpIHsKICBjb25zdCByZWRpcmVjdEltYWdlID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHTUFQSSJdLmdldFZhbHVlKCdyZWRpcmVjdF9pbWFnZScpOwogIGlmICghcmVkaXJlY3RJbWFnZSkgewogICAgcmV0dXJuOwogIH0KICBpZiAoIWltZ1NyYykgewogICAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIndhcm4iXSkoJ2ZhbHNlIHVybCcpOwogICAgcmV0dXJuOwogIH0KICBPYmplY3QodXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siaW5mbyJdKShgcmVwbGFjaW5nIGJvZHkgd2l0aCBcYCR7aW1nU3JjfVxgIC4uLmApOwogIE9iamVjdCh1dGlsX21pc2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1sicmVtb3ZlQWxsVGltZXIiXSkoKTsKICBlbmFibGVTY3JvbGxpbmcoKTsKICBkb2N1bWVudC5ib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm9keScpOwogIGNvbnN0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpOwogIGNvbnN0IGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTsKICBpLnNyYyA9IGltZ1NyYzsKICBkLmFwcGVuZENoaWxkKGkpOwogIGNvbnN0IGFjID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHTUFQSSJdLmdldFZhbHVlKCdhbGlnbl9jZW50ZXInKTsKICBjb25zdCBzaSA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR01BUEkiXS5nZXRWYWx1ZSgnc2NhbGVfaW1hZ2UnKTsKICBpZiAoYWMgfHwgc2kpIHsKICAgIGluamVjdFN0eWxlKGQsIGkpOwogIH0KICBpZiAoYWMpIHsKICAgIGF3YWl0IGFsaWduQ2VudGVyKCk7CiAgfQogIGNvbnN0IGNiID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHTUFQSSJdLmdldFZhbHVlKCdjaGFuZ2VfYmFja2dyb3VuZCcpOwogIGlmIChjYikgewogICAgYXdhaXQgY2hhbmdlQmFja2dyb3VuZCgpOwogIH0KICBpZiAoc2kpIHsKICAgIGF3YWl0IHNjYWxlSW1hZ2UoaSk7CiAgfQp9CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm9wZW5MaW5rIiwgZnVuY3Rpb24oKSB7IHJldHVybiBvcGVuTGluazsgfSk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwogdmFyIHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwpmdW5jdGlvbiBwcmVwYXJlIChlKSB7CiAgaWYgKCFkb2N1bWVudC5ib2R5KSB7CiAgICBkb2N1bWVudC5ib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYm9keScpOwogIH0KICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpOwogIHJldHVybiBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIndhaXQiXSkoMCk7Cn0KYXN5bmMgZnVuY3Rpb24gZ2V0ICh1cmwpIHsKICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogIGEuaHJlZiA9IHVybDsKICBsZXQgY2xpY2tlZCA9IGZhbHNlOwogIGEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQpID0+IHsKICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgY2xpY2tlZCA9IHRydWU7CiAgfSwgdHJ1ZSk7CiAgYXdhaXQgcHJlcGFyZShhKTsKICBhLmNsaWNrKCk7CiAgY29uc3QgdGljayA9IHNldEludGVydmFsKCgpID0+IHsKICAgIGlmIChjbGlja2VkKSB7CiAgICAgIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJpbmZvIl0pKCdhbHJlYWR5IGNsaWNrZWQnKTsKICAgICAgY2xlYXJJbnRlcnZhbCh0aWNrKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImluZm8iXSkoJ3RyeSBhZ2FpbicpOwogICAgYS5jbGljaygpOwogIH0sIDUwMCk7Cn0KYXN5bmMgZnVuY3Rpb24gcG9zdCAocGF0aCwgcGFyYW1zKSB7CiAgcGFyYW1zID0gcGFyYW1zIHx8IHt9OwogIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7CiAgZm9ybS5tZXRob2QgPSAncG9zdCc7CiAgZm9ybS5hY3Rpb24gPSBwYXRoOwogIE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZm9yRWFjaCJdKShwYXJhbXMsICh2YWx1ZSwga2V5KSA9PiB7CiAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICBpbnB1dC50eXBlID0gJ2hpZGRlbic7CiAgICBpbnB1dC5uYW1lID0ga2V5OwogICAgaW5wdXQudmFsdWUgPSB2YWx1ZTsKICAgIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpOwogIH0pOwogIGF3YWl0IHByZXBhcmUoZm9ybSk7CiAgZm9ybS5zdWJtaXQoKTsKfQphc3luYyBmdW5jdGlvbiBvcGVuTGluayAodG8sIG9wdGlvbnMpIHsKICBpZiAoIU9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siaXNTdHJpbmciXSkodG8pICYmICF0bykgewogICAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIndhcm4iXSkoJ2ZhbHNlIFVSTCcpOwogICAgcmV0dXJuOwogIH0KICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCB3aXRoUmVmZXJlciA9IHR5cGVvZiBvcHRpb25zLnJlZmVyZXIgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMucmVmZXJlcjsKICBjb25zdCBwb3N0RGF0YSA9IG9wdGlvbnMucG9zdDsKICBjb25zdCBmcm9tID0gd2luZG93LmxvY2F0aW9uLnRvU3RyaW5nKCk7CiAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImluZm8iXSkoYCR7ZnJvbX0gLT4gJHt0b31gKTsKICBpZiAocG9zdERhdGEpIHsKICAgIGF3YWl0IHBvc3QodG8sIHBvc3REYXRhKTsKICAgIHJldHVybjsKICB9CiAgaWYgKHdpdGhSZWZlcmVyKSB7CiAgICBhd2FpdCBnZXQodG8pOwogICAgcmV0dXJuOwogIH0KICB3aW5kb3cudG9wLmxvY2F0aW9uLnJlcGxhY2UodG8pOwp9CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInJlbW92ZUFsbFRpbWVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZW1vdmVBbGxUaW1lcjsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm51a2UiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG51a2U7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJnZW5lcmF0ZVJhbmRvbUlQIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZW5lcmF0ZVJhbmRvbUlQOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZXZpbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXZpbDsgfSk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwogdmFyIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CiB2YXIgdXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CmZ1bmN0aW9uIHJlbW92ZUFsbFRpbWVyICgpIHsKICBsZXQgaGFuZGxlID0gd2luZG93LnNldEludGVydmFsKHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub3AiXSwgMTApOwogIHdoaWxlIChoYW5kbGUgPiAwKSB7CiAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChoYW5kbGUtLSk7CiAgfQogIGhhbmRsZSA9IHdpbmRvdy5zZXRUaW1lb3V0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub3AiXSwgMTApOwogIHdoaWxlIChoYW5kbGUgPiAwKSB7CiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGhhbmRsZS0tKTsKICB9Cn0KZnVuY3Rpb24gbnVrZSAodXJsKSB7CiAgdHJ5IHsKICAgIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sidXN3Il0uZG9jdW1lbnQud3JpdGUoJ251a2VkIGJ5IEFkc0J5cGFzc2VyLCBsZWFkaW5nIHRvIC4uLjxici8+Jyk7CiAgfSBjYXRjaCAoZSkgewogICAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIndhcm4iXSkoJ251a2UgZmFpbGVkJywgZSk7CiAgfQogIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgYS5ocmVmID0gdXJsOwogIGEudGV4dENvbnRlbnQgPSB1cmw7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsKfQpmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbUlQICgpIHsKICByZXR1cm4gWzAsIDAsIDAsIDBdLm1hcCgoKSA9PiB7CiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU2KTsKICB9KS5qb2luKCcuJyk7Cn0KZnVuY3Rpb24gZXZpbCAoc2NyaXB0KSB7CiAgcmV0dXJuICgoCiAgICBHTSwKICAgIEdNX2RlbGV0ZVZhbHVlLAogICAgR01fZ2V0UmVzb3VyY2VVUkwsCiAgICBHTV9nZXRWYWx1ZSwKICAgIEdNX29wZW5JblRhYiwKICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQsCiAgICBHTV9zZXRWYWx1ZSwKICAgIEdNX3htbGh0dHBSZXF1ZXN0LAogICAgdW5zYWZlV2luZG93LAogICAgd2luZG93LAogICkgPT4gewogICAgcmV0dXJuIGV2YWwoc2NyaXB0KTsKICB9KSgpOwp9CiB9KQogXSk7","resources":[{"meta":{"name":"align_center.css","url":"https://raw.githubusercontent.com/adsbypasser/adsbypasser/v7.16.0/resources/css/align_center.css","ts":1616867481064,"mimetype":"text/css"},"source":"aHRtbCB7CiAgaGVpZ2h0OiAxMDAlOwp9Cgpib2R5IHsKICBoZWlnaHQ6IDEwMCU7CiAgbWFyZ2luOiAwOwp9CgojYWRzYnlwYXNzZXItd3JhcHBlciB7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgbGluZS1oZWlnaHQ6IDA7Cn0KCiNhZHNieXBhc3Nlci1pbWFnZSB7CiAgbWFyZ2luOiBhdXRvOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICByaWdodDogMDsKfQo="},{"meta":{"name":"scale_image.css","url":"https://raw.githubusercontent.com/adsbypasser/adsbypasser/v7.16.0/resources/css/scale_image.css","ts":1616867481067,"mimetype":"text/css"},"source":"I2Fkc2J5cGFzc2VyLWltYWdlLmFkc2J5cGFzc2VyLXJlc2l6YWJsZSB7CiAgY3Vyc29yOiAtd2Via2l0LXpvb20tb3V0OwogIGN1cnNvcjogLW1vei16b29tLW91dDsKICBjdXJzb3I6IHpvb20tb3V0Owp9CgojYWRzYnlwYXNzZXItaW1hZ2UuYWRzYnlwYXNzZXItcmVzaXphYmxlLmFkc2J5cGFzc2VyLXNocmlua2VkIHsKICBtYXgtd2lkdGg6IDEwMCU7CiAgbWF4LWhlaWdodDogMTAwJTsKICBjdXJzb3I6IC13ZWJraXQtem9vbS1pbjsKICBjdXJzb3I6IC1tb3otem9vbS1pbjsKICBjdXJzb3I6IHpvb20taW47Cn0K"},{"meta":{"name":"imagedoc-darknoise.png","url":"https://raw.githubusercontent.com/adsbypasser/adsbypasser/v7.16.0/resources/img/imagedoc-darknoise.png","ts":1616867481066,"mimetype":"image/png"},"source":"wolQTkcNChoKAAAADUlIRFIAAABYAAAAWAQDAAAAwoPCuy0HAAAAG1BMVEXDvsO+w74BAQHDv8O/w78KCgoDAwN/f3/DtcO1w7XCgMKAwoDDvMO8w7zDoQ8Ew7YAAAAJdFJOUwUFBQUFBQUFBcKHDsOTw70AAAvDgklEQVR4Xg3DijljwrJaEADDkBnDtnIue3lxL0HCjUkJwpp8wrEEw6NWwoJLTAkaE0swbj/Du8K9w64UB37DhS1uKsOzwqLDsMOCWHzDqMKfw4BICSlZwqjDvirCtsObw59Rw7MfQsKjc2tIwpfCtMKADcKlwpvCpcKQTxPCl13Cs8Kow4k3I13CjAzCilrCp2vCoMKIwrFZFAhjwqE/wpDDpjvChMKHIi/Dtl/CrAPCt1zDv8O0w6gLwpQnecKSd8O8w73DpMOgfcK8wobCpcOQM8OlacKVwoc/wrREw6gyF8KOYsKqKkvChsKvw6xNZylOwp49RkpVCsK+fFkME8KIw403w4x7R8OJwoDCnsOcw7xiCDnDlS4rFjIEVQ7DjsO2OgAuQF8fEcO6wo5Ow6EtI8OTCsKBND3DhMKswoYmw71xw4VtCMOtH1MXD8KXVG7CnX04V2PCkDlywrPDocOSw4LCsGAdG8OLw7cFTcO+wpjCvFYjwojDgcOLw78PUcKRW8KlLg7DskstADnClCI1w64lHcKwwqYpOsOmHzAEw4bCnsKZw79mw43DlsOqCi/Dp1HCvsO9Wz0DL8O/w4HDrmTCh8OLwrDCvEPDrsKbwqo5HkDDjA3CvcOZWsOpw7DCtsKvwpTDjENUw7DDmmENw5bDrzbDksKMw55Jw7HDpgjCulDDhMKQwpfDp8KGwrPDrcK7wprCtsKDwrcXwpZ0f8KTw6tlLMO8bMKlEsOaw7sKw58jwpXCt8KXKsOwH8OmwonDscOwPcKuVsOdScO8ZsOlV8Olw5DDiMKlCMKcw6UGw6PCh8Oqwo3DizMrbsK6w4h1woABwoHCvXpIb8OLwol4McKmwrjDojYVw4ldwpEUS8KSw6fCh8K2HcOLMMK2Y13CqR/DvlfCg8O0O8OXwrheelbCgxVSQkNXwqXCgwLDhMKeFXpdJcKaLnrCjnYIIMKQEDJ3RcO7NMOEwosrwqPDt2rDt8KKMlPDlMOtGsKUw7QnLWJvJMK0e18ew5fCg8OXw6bDtQPCqhbDryjDm8OZwrdBCsKFw4HCk3huSMK/RsKKazbDkwoqw5EET8OYwozCsMKcworCpkjCoMK4CivCn2zCs8KSw70wG3M1EEVDJMO+VTfCucKuLjYCwoJcw50ZDsObwqHCgcKgRmorw44UQ8Krw43DoMKCWDLClC/CoQTCsTLDi8KmUFjDnALCmmrCrcOow7vDhMOECsKGEA9Vw5lyE8Ojw7fDksO4wo3CnMOHWcO5wrXDnznCkMOgwqMdw7PDlk4Ow7YUwp/DvsK8wqPCssKCC37CrytFbEDDiVjCv8KmPwpgw4PCocOtFMKyB8Kawq4ow5ptZ2fDmxorCMKKEMOkw5Vmw5XCpcKewqHDjgzDu8K9w6PDlV8oP8Kzw47Cl8Oywp3Dn8OZZU5IWcKdHcKCesKRHC4uOBpBwrE/DcOtwobDhScwA8KJbcKewqPDtMO9w6/Dk8KKFxY8w45Pw74dH8ONNEkzwoEgbMKYDcO5ScKswrPDlm/Drm8YJmEDwqZ9w7zCkcKHw5gdw4fCjcKmUVXDucOXaipaR8OxAzzCrkgsccOVw4zCsMOHeMOIXsOlw4kQRsOswrMpwqjDkxMyw60rJCVvQsOkwoPDmMKuwoPDsELDqcOtw63DvkUQw7PDlyTCtcKRbGHDnC/ChDfCsx3DkywDelvCrsO2wq/DsjkIwqkLw6s0wrDDgk0AI8OPwqIEJMKvw5XCjsOQQMO+UUrCgsOEw5tuw67Di8OLw6fDm2Y6dhLDgcKASxHCh18cTGjDiMK/fMK+w6tCwqbCt3YAZQXDvMKpw73DmyQ1HMO/wppdwo7DmMK+KwAZw7Rsw7NDN3bDncOdSQQJw5LCvWkWB8OGH8KwwoHCpcKywpHDosK0w5jCjD3Cg8OFfR/CjnnDhG4/LGB+woPDvcO8eRHDncOEdsOswoohwonCoMOXCk/Dt1TDk8O6wpTCjE/DtTBnwrDDh8KAAUZlwqLCrsKPw7DCpREsGw0Ww6jCgMOcwrsNw73Dn2rCpCfCiijCgGBLOw3Dpk/Cq3Ydw67Ch0VbwrzDi8KOIsKJwokPV8OBOiDCqiLDi8OkwpUuWzkITGnCqEkLw6Rcw7vCqXPDuUvDscKawq05Py/Ci8KgYhDClMKywq/ClcOGwofCsFHCvVIuwrofw7rCnR8+wrvCsMO0RsKGwo/Cq8K4L3ZCA3kkQyYuw4ZREEjCicK7wr8FJcK8wrNPw4FsdMKvdF7CgRx7OcO2R8KYwotTNmFzMmZ/XMKNY3gJNMKVEMK9wrpTw450w4BudXknw4jCi8Oiwq3CjlrDqEkSd1ZVPMKEwq/DgzlUZMOWwrbDs8KmUsKNQ8Kyc8KswqlxOWcywoTDsMKuP8Oxw4l8w7nDjVcCwrp1RULCs8O6IsKPw7fCqMO2FcOFJgPDq8O0HnErw5IlHUrCtErDpcObwoDCj1FQamvDqcKJwqXDkcOYwpddD8KoPMKfwoTCshcfw5/CjT4LwpAvwqDChMKXJMKPV8K1w4DDv8KDwqx6w6kiIxo8fkXDlsK3GkbDvBlZw7Enw6nDvH7DvC7Dj3VwARjCs0rCjsK9VEnCnlfDiHjDrGnDtcOMEsKFw63CgsOgH8KPKQzCisKDDBzChMKXVAc9w4kGOcKjwpQgw7DDgzTCnhXCggNhw6jCiEgBc1EHw7sGwqsuPEfDnMK5w7rDsMOPw5zCiFrCiMOVwrHCtMKYE8KxwojDmsOeOsOkwqERw7/DvcKkwozDocKbUGHDmcOGw5hXGcO2IcKEO3pYw5jCpcKmw7/DpEdPF2PDksKZw4zCvsOraMO6e2HDgTzDlsOew7vDglUyw6RQBsK1wp0vw5vCgcKHwobDmG0GwpAnTsOFw4nDtykKw6vDksK7FTJiM8O6asO7w7DDtgTDnAI9Lk1aIUsDwocMNsKHTsOPJ8OJwqchMBcWwqFQw5bCp3/DpVoKwp4IwrMneAUhSsOoQ8OZEmnCucOyw45KLsOewpsTwpXChcKLDhrCicKVw5jCkMKEKjXCrsOuS8Kqw4LDp8KyFEnCg8KBWFHDkl4oHn8Ww7PCtRnCuxbDvMKJw554SxHDlsKJKcOPKnMyAhzDncKGLcKwN8OwKB9zwpjDgMK2wqPCuybDgcOyH8OQeMKSYl9YCMK3w6dfwoo/wqDCr0DCiUV0NmNOEMOqwq8xHzfDlsKbw5FIwoHDiGJbT8KXw7PCq0jCosOSBsONEcK1woBDWirCiRDCkMK5w74VdnbDh3LClHLCnsOdw7zDlSzCmMOpwoUIb8Oiw5N2AcOywpjCtHojUsOgwrUIfA06AMKrw59CY8O/VAXDksOUA8O2wpMyfsO0wrAaTcKnw68XI8K7bz8Uw7TDoMKpwpXDncKqw5XDocOGwrbDj8KZFsK7dMOgCcKIwpbDpsOOPMO+w5drJ8Oiw77CvS3CiX3CmmjDtMO9Dz4+TVPDgcKheyMcPMOWfsK5wprDgMOrGX5gU8O+TcK+c8KrM8O+G8ODw6cIw6vCjT7Dl8KBGWcTM8OuZcOqw6bCi1jDqn1Kw4TDnsKuw5V0V8OJwrvCmhPDtAd+VUh1fMKMCBYQcsOxOcKMwroSHl9lw6nCmsKIJsK9LULDncKbwrDCiyR8w63ClMKrwo9Cb8OUOkQBwokbcMK9w5HCpjZXwpnCmk9XwonClx/DjMO8Nh8CS8Okfj7ClxPCnkhywq/ClQlpKMKzw5MIw4rDm2EwwpfDrMOSw7rClMOuwoNDw5DDkCTCpyUOS33DlHvDrsO1WcK5w7gjwpEPw7J1w74Vw6c6RGjDmsK+JcKZwqtAwq7ClnXCkFpyYwcvw5RmLnPDlMKzT8OMYwYFw47CjMKrXcKEDExxwoBQwpPCn8K6ZHnCr8K/TGTDrcK8DMKBF0FUw7nDgGw9w7U2NU9Bwo4IL8OBw41rw7xEQAPDgMKAwp3DkMK4w5Q0wqnDhMOow6RVa0lOwp7CqGg7S8O3w55cFnMBdMOKdMOgTsKRccOLw60OKcOaYTQ1wonClH8ubMKqBsOpYlfCtMKsQMOBwrsiwpbCkEkHw6HCgcOCKcKvTsOAwqvCv1R7LSXDvRMZAMODwo4ZEcOMVMOcwr50OHnDigMiwpk1w61fwoofwqFWwqItRGDCg3/CuyHCusO5wp7DulTDlsK1w6XDucKhwovCnMOnw4NrCcKqwqNgworDiFdDw4XDiQfCocOZwpzDmRLCo1LDq0LDrsKGc8O5w4MHwozCkkbClMO3ekMDw7RWPMOXwobCpMOwwoHCgiUeDsO1dC9TX3UTw78efmLDrsK1CsOuR8OtwpTChcKeIUIYbsOcw7MWX2fClMKHwpo1w7oXw7sfw6rDiWzDiAASw5NkNsOewqvDuENmwpxgw5oJIcO4woDCn0lPDlLCknzDiWY1w67DpDkQZsK+GGXChcKaesOBd8Obw5fDnMKjwq15wokJaMOKT8OAwp4Two8ww6NuGQ4wwqnCligpc1TCncKgw7NWBhZfw5zDkxPDiCp3ICRnVCrDtmhRQm7DkgYaIAh6E0xNeQ15wqrCklfDjMOSE8KBw74Ww7sPw6hRwqLCjjPCngQxSMK1wo/CnMKvOCsEe8OCWMKnBUbCj8Kdw6U2I8OMY8OUZcK2B3jCicOKfMOZw7vDjcOrw5zDpEgVCMOjScOJSRTDnh8+w6HDlMKFw7jDmCrDtMKSVcKjw4YzwrTDpMOEwpfDlMKGwpN4OcKTRGEeKsOwL8K1wqbCgWjCtCfCjcO7Ric/wrhyMXLDi8Kvw6IKMsOGF2/DoFvDqMOQwoRFMWxAT8OJDMOXwovDoFvDokc9w4DCriMjA0tZwrwQAMOrWCkSw5rCisKQw4fDuX4TPMOzwobDsDDCjWPCggLDtyBkw5bCpyJuOFTCgRnDg3HDvcO5wqZfXcOmwotbwr0Iw44heUTCu8KXVcK2bktFwqLCuSlnA8O8w7XDui3CocKdw5vCkMKuNHHCv8K+B8KIB1kcwqQpwp7DuMKfInZXI3wQCwDClMKgwoM5w6wYccKOAMKYHRnDm8KMwp3CmD5sBsKeGATChlfDlsOhw719wrA+w4VTwpgSw7HCmTTDkMKwEcKFwpBDwqRkwpTDrBgJwr4ewrtMDcK1wrDCvTXDjsK6w5XDtcK7wrBxIsKvV8KJwr7Cg8KQUxtSK012wrYsUMK5GsKGw4AhBEh9FjdzL8OQTQEcU0rCvsOTw57DrWsTw6IWUmDCiMKnBMOZHcKQwq7Dpl9THCvCgnDDqFnCqcO3wqTCuQxjQ8KxKMOIZQkDAMKvw77CrUk6w6JeCcOPw7fClknDm8OvwqzDgMKqw6PCvwwEISvDvsK2cMO/F8Oaw43DviASw4jChsOyw7xEeinCoHpIAsKycsKxwoTDk8KYw4MewrnCs8OXwofDhcK7w6tALzFRw7rDrjrCoMKDTsK+w753wrkxwp7Ct8OXPsKyRMOoZcKiHcOdPQjCq2bCgSnCr8ONMMKCw5/DnBHCuFsBBMOmRMK7RsKHw4lxCwDDgQXCvk54wp4aEsKtwrlcE0xPasOzWcOnVsObMjPCj8OgwoIMwqlnwpciQcONPzXCqBXCqcOrw5h7wr5Ww7dOYRXDuDNmw5rCusKjw5Ykw7sFC8KwVVsuPkwqw5XDrk/DssOYDcKNVsOIwpTDjMOwXcOjNcOWRmrCjx3DiihTwonDjcONw4IDIVXChi8fw4VWeRbDuF0Aw45mM8KpEsOow6gKwrtewowWCWrDn8O2w79BUjB3DsOHUCzCnltOCT4wwrl0w6/ChgvDk8KfwqnDsHhVf8Kww4LDqMKfwrfDq2HCs2TCrMOeLsKnwpDDoT4kXMKDw7sCwoUvw6XCjF/CqcOww4A7w5rDkS1/O8ODJcKeJ1rDq8OTw6HDt8Knw64Ww7DCqETDi8OXwpwnw6wsw7PDpgvDuEDDpRnDjDROHwzCrSlUw6Q4BHLDmhLCvMOvw78Aw73DtABmwozDlmTDkAAAAABJRU5Ewq5CYMKC"}]},{"name":"AntiAdware","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http*://*180upload.com/*","http*://*4upfiles.com/*","http*://*get*.adobe.com/*flashplayer/*","http*://*get*.adobe.com/*reader/*","http*://*afterdawn.com/software/*","http*://*akafile.com/akago.php","http*://*chip.de/downloads/*","http*://*clicknupload.com/*","http*://*cloudyvideos.com/*","http*://*coolrom.com/*/*","http*://*clipconverter.cc/download/*","http*://*dailyuploads.net/*","http*://*datafilehost.com/d/*","http*://*davvas.com/*","http*://*d-h.st/*","http*://*download.cnet.com/*","http*://*telecharger.cnet.com/*","http*://*descargar.cnet.com/*","http*://*de.download.cnet.com/*","http*://*filefactory.com/file/*","http*://*filescdn.com/*","http*://*filehippo.com/*download*","http*://*freewarefiles.com/downloads_counter.php*","http*://*google.*/earth/download/ge/agree.html","http*://*hugefiles.net/*","http*://*hulkload.com/*","http*://*kingfiles.net/*","http*://*letitbit.net/download/*","http*://*loveroms.com/*","http*://*up.media1fire.com/*","http*://*mightyupload.com/*","http*://*mp3fil.*/get/*","http*://*mp3juices.to/*","http*://*mp3olimp.net/*","http*://*mp3olimpz.com/*","http*://*opensubtitles.org/*/subtitles/*","http*://*revclouds.com/*","http*://*romhustler.net/download/*","http*://*romhustler.net/rom/*","http*://*secureupload.eu/*","http*://*sendspace.com/file/*","http*://*sharebeast.com/*","http*://*shared.com/*","http*://*softm8.com*","http*://*.softonic.*","http*://*sourceforge.net/*","http*://*tusfiles.net/*","http*://*unlimitzone.com/*","http*://*uploading.com/*","http*://*uploadocean.com/*","http*://*uplod.ws/*","http*://*uploads.to/*","http*://*uptobox.com/*","http*://*userscdn.com/*","http*://*ziddu.com/downloadfile/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1525361829807,"data":{}},"enabled":true,"position":11,"file_url":"https://raw.githubusercontent.com/HandyUserscripts/AntiAdware/master/AntiAdware.user.js","uuid":"9fedc355-cfb6-413e-8632-e448d97efc1d","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgQW50aUFkd2FyZQovLyBAbmFtZTpmciBBbnRpQWR3YXJlCi8vIEBuYW1lOmRlIEFudGlBZHdhcmUKLy8gQG5hbWU6emgtVFcgQW50aUFkd2FyZQovLyBAbmFtZTp6aC1DTiBBbnRpQWR3YXJlCi8vIEBhdXRob3Igbm9uYW1lMTIwCi8vIEBuYW1lc3BhY2UgSGFuZHlVc2Vyc2NyaXB0cwovLyBAaWNvbiBodHRwczovL2kuaW1ndXIuY29tL3RxN1BKcjAucG5nCi8vIEBkZXNjcmlwdGlvbiBSZW1vdmUgZm9yY2VkIGRvd25sb2FkIGFjY2VsZXJhdG9ycywgbWFuYWdlcnMsIGFuZCBhZHdhcmUgb24gc3VwcG9ydGVkIHdlYnNpdGVzCi8vIEBkZXNjcmlwdGlvbjpmciDDiXZpdGV6IGxlcyBhcHBsaWNhdGlvbnMgaW5kw6lzaXJhYmxlcyBsb3JzIGRlcyB0w6lsw6ljaGFyZ2VtZW50cyBzdXIgZGUgbm9tYnJldXggc2l0ZXMgYXZlYyBBbnRpQWR3YXJlICEKLy8gQGRlc2NyaXB0aW9uOmRlIE1pdCBBbnRpQWR3YXJlIHZlcm1laWRlc3QgZHUgYXVmIHphaGxyZWljaGVuIFdlYnNlaXRlbiBkZW4gdmVyc2VoZW50bGljaGVuIERvd25sb2FkIHZvbiB1bmVyd8O8bnNjaHRlbiBQcm9ncmFtbWVuCi8vIEBkZXNjcmlwdGlvbjp6aC1UVyBBbnRpQWR3YXJlLCDorpPkvaDpgb/lhY3lnKjoqLHlpJrntrLnq5nkuIrmhI/lpJbkuIvovInliLDlu6PlkYrou5/pq5QuCi8vIEBkZXNjcmlwdGlvbjp6aC1DTiBBbnRpQWR3YXJlLCDorqnkvaDpgb/lhY3lnKjorrjlpJrnvZHnq5nkuIrmhI/lpJbkuIvovb3liLDlub/lkYrova/kvZMuCi8vIEB2ZXJzaW9uIDEuNDIuMQovLyBAbGljZW5zZSBDcmVhdGl2ZSBDb21tb25zIEJZLU5DLVNBCgovLyBqUXVlcnkgZGVwZW5kZW5jeTsgYW4gb2ZmbGluZSB2ZXJzaW9uIG9mIHRoaXMgaXMgaW5jbHVkZWQgaW4gdGhlIHNjcmlwdCBpbiBjYXNlIGl0IGdvZXMgZG93bgovLyBAcmVxdWlyZSBodHRwOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0yLjAuMy5taW4uanMKCi8vIEBpbmNsdWRlIGh0dHAqOi8vKjE4MHVwbG9hZC5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLyo0dXBmaWxlcy5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypnZXQqLmFkb2JlLmNvbS8qZmxhc2hwbGF5ZXIvKgovLyBAaW5jbHVkZSBodHRwKjovLypnZXQqLmFkb2JlLmNvbS8qcmVhZGVyLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qYWZ0ZXJkYXduLmNvbS9zb2Z0d2FyZS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmFrYWZpbGUuY29tL2FrYWdvLnBocAovLyBAaW5jbHVkZSBodHRwKjovLypjaGlwLmRlL2Rvd25sb2Fkcy8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmNsaWNrbnVwbG9hZC5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypjbG91ZHl2aWRlb3MuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qY29vbHJvbS5jb20vKi8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmNsaXBjb252ZXJ0ZXIuY2MvZG93bmxvYWQvKgovLyBAaW5jbHVkZSBodHRwKjovLypkYWlseXVwbG9hZHMubmV0LyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZGF0YWZpbGVob3N0LmNvbS9kLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZGF2dmFzLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmQtaC5zdC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmRvd25sb2FkLmNuZXQuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qdGVsZWNoYXJnZXIuY25ldC5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypkZXNjYXJnYXIuY25ldC5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypkZS5kb3dubG9hZC5jbmV0LmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmZpbGVmYWN0b3J5LmNvbS9maWxlLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZmlsZXNjZG4uY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZmlsZWhpcHBvLmNvbS8qZG93bmxvYWQqCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmZyZWV3YXJlZmlsZXMuY29tL2Rvd25sb2Fkc19jb3VudGVyLnBocCoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZ29vZ2xlLiovZWFydGgvZG93bmxvYWQvZ2UvYWdyZWUuaHRtbAovLyBAaW5jbHVkZSBodHRwKjovLypodWdlZmlsZXMubmV0LyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qaHVsa2xvYWQuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qa2luZ2ZpbGVzLm5ldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmxldGl0Yml0Lm5ldC9kb3dubG9hZC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmxvdmVyb21zLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVwLm1lZGlhMWZpcmUuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qbWlnaHR5dXBsb2FkLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKm1wM2ZpbC4qL2dldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKm1wM2p1aWNlcy50by8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKm1wM29saW1wLm5ldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKm1wM29saW1wei5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypvcGVuc3VidGl0bGVzLm9yZy8qL3N1YnRpdGxlcy8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnJldmNsb3Vkcy5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypyb21odXN0bGVyLm5ldC9kb3dubG9hZC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnJvbWh1c3RsZXIubmV0L3JvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNlY3VyZXVwbG9hZC5ldS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNlbmRzcGFjZS5jb20vZmlsZS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNoYXJlYmVhc3QuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qc2hhcmVkLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNvZnRtOC5jb20qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKi5zb2Z0b25pYy4qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNvdXJjZWZvcmdlLm5ldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnR1c2ZpbGVzLm5ldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVubGltaXR6b25lLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVwbG9hZGluZy5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLyp1cGxvYWRvY2Vhbi5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLyp1cGxvZC53cy8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVwbG9hZHMudG8vKgovLyBAaW5jbHVkZSBodHRwKjovLyp1cHRvYm94LmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVzZXJzY2RuLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnppZGR1LmNvbS9kb3dubG9hZGZpbGUvKgoKLy8gV2UgZG9uJ3QgdXNlIHRoaXMgbWV0aG9kLCBob3dldmVyIGEgc2lkZSBlZmZlY3Qgb2YgaXQgaXMgdGhhdCBpdCByZXN0b3JlcyB0aGUgR3JlYXNlbW9ua2V5IHNhbmRib3gsIGF2b2lkaW5nIGpRdWVyeSBjb25mbGljdHMKLy8gQGdyYW50IEdNX2FkZFN0eWxlCgovLyBAZ3JhbnQgdW5zYWZlV2luZG93CgovLyBAaG9tZXBhZ2VVUkwgaHR0cHM6Ly9naXRodWIuY29tL0hhbmR5VXNlcnNjcmlwdHMvQW50aUFkd2FyZSNyZWFkbWUKLy8gQHN1cHBvcnRVUkwgaHR0cHM6Ly9naXRodWIuY29tL0hhbmR5VXNlcnNjcmlwdHMvQW50aUFkd2FyZS9pc3N1ZXMKLy8gQHVwZGF0ZVVSTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vSGFuZHlVc2Vyc2NyaXB0cy9BbnRpQWR3YXJlL21hc3Rlci9BbnRpQWR3YXJlLm1ldGEuanMKLy8gQGRvd25sb2FkVVJMIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9IYW5keVVzZXJzY3JpcHRzL0FudGlBZHdhcmUvbWFzdGVyL0FudGlBZHdhcmUudXNlci5qcwoKCi8vIEBydW4tYXQgZG9jdW1lbnQtc3RhcnQKLy8gPT0vVXNlclNjcmlwdD09Cgp2b2lkCmZ1bmN0aW9uICgpIHsKICAgIC8vIElmIHRydWUsIGRpc3BsYXlzIGxvZyBpbiB0aGUgY29uc29sZQogICAgdmFyIG9fZGVidWcgPSBmYWxzZQoKICAgIC8vIFJ1bGVzIGluZm9ybWluZyB3aGF0IHRvIGRvIG9uIGVhY2ggc3VwcG9ydGVkIHdlYnNpdGUKICAgIHZhciBhZHdhcmVSdWxlcyA9IHsKICAgICAgICBhMTgwdXBsb2FkOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnMTgwdXBsb2FkLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyN1c2VfaW5zdGFsbGVyJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI3VzZV9pbnN0YWxsZXInLCAnbGFiZWxbZm9yPXVzZV9pbnN0YWxsZXJdJ10KICAgICAgICB9LAogICAgICAgIGE0dXBmaWxlczogewogICAgICAgICAgICBob3N0OiBbJzR1cGZpbGVzLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyN1c2VfZG93bmxvYWRlciddLAogICAgICAgICAgICBoaWRlOiBbJ2xhYmVsW2Zvcj11c2VfZG93bmxvYWRlcl0nXQogICAgICAgIH0sCiAgICAgICAgQWRvYmU6IHsKICAgICAgICAgICAgaG9zdDogWydnZXRcXGQ/LmFkb2JlLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNvZmZlckNoZWNrYm94JywnI29mZmVyQ2hlY2tib3gxJywnI29mZmVyQ2hlY2tib3gyJywnI29mZmVyQ2hlY2tib3gzJywnI29mZmVyQ2hlY2tib3g0J10sCiAgICAgICAgICAgIGhpZGU6IFsnLkNvbnRlbnRDb2x1bW4uQ29udGVudENvbHVtbi0yJ10KICAgICAgICB9LAogICAgICAgIEFmdGVyZGF3bjogewogICAgICAgICAgICBob3N0OiBbJ2FmdGVyZGF3bi5jb20nXSwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBEb3dubG9hZCBwYWdlIGRpcmVjdGx5IGFjY2Vzc2VkIGZyb20gYW5vdGhlciB3ZWJzaXRlCiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5jb250YWlucygnaW5zdGFsbGVyPTEnKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBwYWdlIHdpdGhvdXQgdGhlIGRvd25sb2FkIG1hbmFnZXIKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5yZXBsYWNlKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnaW5zdGFsbGVyPTEnLCAnaW5zdGFsbGVyPTAnKSkKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBwYWdlCiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPWluc3RhbGxlcl0nKS5wcm9wKCd2YWx1ZScsICcwJykKICAgICAgICAgICAgICAgIHZhciBkb3dubG9hZEJ1dHRvbiA9ICQoJyNkb3dubG9hZC1tYWluLWJ1dHRvbicpCiAgICAgICAgICAgICAgICB2YXIgYWR3YXJlTGluayA9IGRvd25sb2FkQnV0dG9uLnByb3AoJ2hyZWYnKQogICAgICAgICAgICAgICAgYWR3YXJlTGluayA9IGFkd2FyZUxpbmsucmVwbGFjZSgnaW5zdGFsbGVyPTEnLCAnaW5zdGFsbGVyPTAnKQogICAgICAgICAgICAgICAgZG93bmxvYWRCdXR0b24ucHJvcCgnaHJlZicsIGFkd2FyZUxpbmspCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIEFrYWZpbGU6IHsKICAgICAgICAgICAgaG9zdDogWydha2FmaWxlLmNvbSddLAogICAgICAgICAgICAvLyBGaW5kIHRoZSByZWFsIGRvd25sb2FkIGxpbmsgaW4gdGhlIGNvbW1lbnRzIHNlY3Rpb24gYW5kIHJlcGxhY2UgdGhlIGZha2Ugb25lIHdpdGggdGhpcyAoaWYgdGhlIGZha2UgaXMgbm90IGEgdmFsaWQgbGluaykKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGxpbmsgaXMgYWxyZWFkeSBhIHZhbGlkIG9uZSB3ZSBkb24ndCByZXBsYWNlIGl0CiAgICAgICAgICAgICAgICB2YXIgdGVzdEhvc3QgPSBuZXcgUmVnRXhwKCJhaWsud29sZnVwLm5ldCIsICdpJykKICAgICAgICAgICAgICAgIGlmICh0ZXN0SG9zdC50ZXN0KCQoIiNkb3dubG9hZDEiKS5hdHRyKCJocmVmIikpKSByZXR1cm4KICAgICAgICAgICAgICAgIC8vIEdldCBjb21tZW50IHNlY3Rpb24gYW5kIGVudW1lcmF0ZSBlYWNoIGVsZW1lbnQgaGF2aW5nIHRoZSByaWdodCBpZCwgY2hlY2sgaWYgaXQncyBhIHByb3BlciBkb3dubG9hZCBsaW5rCiAgICAgICAgICAgICAgICB2YXIgY29tbWVudHMgPSAkKCcjY29udGludWUnKS5jb21tZW50cygpLmNoaWxkcmVuKCcjZG93bmxvYWQxJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RIb3N0LnRlc3QoJCh0aGlzKS5hdHRyKCJocmVmIikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoIiNkb3dubG9hZDEiKS5hdHRyKCJocmVmIiwgJCh0aGlzKS5hdHRyKCJocmVmIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvL0NoaXA6IHsKICAgICAgICAgICAgLy9ob3N0OiBbJ2NoaXAuZGUnXSwKICAgICAgICAgICAgLy9oaWRlOiBbJy5kb3dubG9hZF9idXR0b24nXSwKICAgICAgICAgICAgLy9leGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8vdmFyIGRsID0gJCgnLk1hbnVhbEluc3RhbGxMaW5rJykucHJvcCgnaHJlZicpCiAgICAgICAgICAgICAgICAvL3ZhciBidG4gPSAkKCcuZGwtYnRuLWRlZmF1bHQgLkRvd25sb2FkLUJ1dHRvbicpCgogICAgICAgICAgICAgICAgLy9idG4ucHJvcCgnaHJlZicsIGRsKQogICAgICAgICAgICAvL30KICAgICAgICAvL30sCiAgICAgICAgQ2xpY2tudXBsb2FkOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnY2xpY2tudXBsb2FkLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNkX2FjY19jaGVja2JveCddLAogICAgICAgICAgICBoaWRlOiBbJyN3X2Rvd25sb2FkJywgJyNkX2FjYyddCiAgICAgICAgfSwKICAgICAgICBDbGlwQ29udmVydGVyOiB7CiAgICAgICAgCWhvc3Q6IFsnY2xpcGNvbnZlcnRlci5jYyddLAogICAgICAgIAl1bmNoZWNrOiBbJyNkbGNwJ10sCiAgICAgICAgCWhpZGU6IFsnZGl2W3N0eWxlPSJ3aWR0aDogMzQwcHg7bWFyZ2luLWxlZnQ6IDI1cHg7bWFyZ2luLXRvcDogN3B4OyJdJ10KICAgICAgICB9LAogICAgICAgIENsb3VkeVZpZGVvczogewogICAgICAgICAgICBob3N0OiBbJ2Nsb3VkeXZpZGVvcy5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdXNlLW1hbmFnZXInXSwKICAgICAgICAgICAgaGlkZTogWycjZG93bmxvYWQtYm94ID4gbGFiZWwnXQogICAgICAgIH0sCiAgICAgICAgQ29vbHJvbTogewogICAgICAgICAgICBob3N0OiBbJ2Nvb2xyb20uY29tJ10sCiAgICAgICAgICAgIGhpZGU6IFsndGFibGVbYWxpZ249ImNlbnRlciJdW3dpZHRoPSIzMDAiXSddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICB2YXIgZG93bmxvYWRCdXR0b24gPSAkKCdpbWdbc3JjKj0iZG93bmxvYWRfbGFyZ2UucG5nIl0nKS5wYXJlbnQoJ2EnKQogICAgICAgICAgICAgICAgICB2YXIgZG93bmxvYWRJZCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJylbM10KCiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG93bmxvYWRCdXR0b24gIT0gJ3VuZGVmaW5lZCcgJiYgZG93bmxvYWRJZC5tYXRjaCgvXlxkKyQvKSkgewogICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHJpZCBvZiBhbGwgZXZlbnRzIG9uIHRoZSBidXR0b24KICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdCdXR0b24gPSBkb3dubG9hZEJ1dHRvbi5jbG9uZSgpCiAgICAgICAgICAgICAgICAgICAgICBuZXdCdXR0b24ucHJvcCgnaHJlZicsICcvZGxwb3AucGhwP2lkPScgKyBkb3dubG9hZElkKQogICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRCdXR0b24ucmVwbGFjZVdpdGgobmV3QnV0dG9uKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgRGFpbHlVcGxvYWRzOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnZGFpbHl1cGxvYWRzLm5ldCddLAogICAgICAgICAgICBoaWRlOiBbJ2xhYmVsW3N0eWxlPSJmb250LXNpemU6eC1zbWFsbCJdJ10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI2Noa0lzQWRkJ10KICAgICAgICB9LAogICAgICAgIERhdGFmaWxlaG9zdDogewogICAgICAgICAgICBob3N0OiBbJ2RhdGFmaWxlaG9zdC5jb20nXSwKICAgICAgICAgICAgaGlkZTogWydmb3JtW25hbWU9Y2JmXSddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBpZCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9eXC9kXC8oXHcrKSQvKVsxXQogICAgICAgICAgICAgICAgLy8gRGF0YUZpbGVIb3N0IGRvZXNuJ3QgYWxsb3cgdG8gZG93bmxvYWQgdXNpbmcgSFRUUFMKICAgICAgICAgICAgICAgIHZhciBhZHdhcmVsZXNzTGluayA9ICdodHRwOicgKyAnLy8nICsgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUgKyAnL2dldC5waHA/ZmlsZT0nICsgaWQKCiAgICAgICAgICAgICAgICB2YXIgbiA9ICQoJyNkbCA+IGEnKS5jbG9uZSgpCgogICAgICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgYWR3YXJlIGxpbmsKICAgICAgICAgICAgICAgIG4ucHJvcCgnaHJlZicsIGFkd2FyZWxlc3NMaW5rKQoKICAgICAgICAgICAgICAgIC8vIEF2b2lkIHJlZGlyZWN0aW9uIHRvIGFkd2FyZQogICAgICAgICAgICAgICAgJCgnI2RsJykucmVwbGFjZVdpdGgobik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIERhdnZhczogewogICAgICAgICAgICBob3N0OiBbJ2RhdnZhcy5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjY2hsaW5rJ10sCiAgICAgICAgICAgIGhpZGU6IFsnbGFiZWxbZm9yPWNobGlua10nLCAnI2NobGluayddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBidG4gPSAkKCcjYnRuX2Rvd25sb2FkJykKICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKGJ0bikpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJ0bi5yZW1vdmVBdHRyKCdvbmNsaWNrJykKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgRGV2SG9zdDogewogICAgICAgICAgICBob3N0OiBbJ2QtaC5zdCddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNkbS1jaGVjayddLAogICAgICAgICAgICBoaWRlOiBbJyNkb3dubG9hZG1hbmFnZXInLCdhOmhhcyg+aW1nW3NyYyo9Ii9hc3NldHMvaW1nL2Rvd25sb2FkMS5wbmciXSknLCAnI2Rvd25sb2FkZmlsZTInXSwKICAgICAgICB9LAogICAgICAgIERvd25sb2FkOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnZG93bmxvYWQuY25ldC5jb20nLCd0ZWxlY2hhcmdlci5jbmV0LmNvbScsJ2Rlc2Nhcmdhci5jbmV0LmNvbSddLAogICAgICAgICAgICBoaWRlOiBbJy5kbG4tc3ViLW1lc3NhZ2UnLCcjdGl0bGUtZGV0YWlsLWRvd25sb2FkLW5vdy1idXR0b24tZGxtLW5vdGljZS1pY29uJywnLmRvd25sb2FkLW5vdy5kaXJlY3QtZG93bmxvYWQtYnV0dG9uLWRsbiddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8vIC0tPiBUaGlzIGlzIGZvciBwcm9ncmFtIHBhZ2VzCiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSByZWFsIGRvd25sb2FkIGxpbmsKICAgICAgICAgICAgICAgIHZhciBhZHdhcmVsZXNzTGluayA9ICQoJy5kb3dubG9hZC1ub3cnKS5hdHRyKCdkYXRhLW5vZGxtLXVybCcpCiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdWNjZXNzZnVsbHkgZm91bmQgaXQKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWR3YXJlbGVzc0xpbmsgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICAvLyBXZSByZXBsYWNlIHRoZSBhZHdhcmUtZW5hYmxlZCBsaW5rIHdpdGggdGhlIGFkd2FyZWxlc3MgbGluawogICAgICAgICAgICAgICAgICAgIHZhciBidG4gPSAkKCJhLmRsbi1hOmhhcygnLmRsbi1jdGEnKSIpCiAgICAgICAgICAgICAgICAgICAgYnRuLnByb3AoJ2hyZWYnLCBhZHdhcmVsZXNzTGluaykKICAgICAgICAgICAgICAgICAgICBidG4uYXR0cignZGF0YS1ocmVmJywgYWR3YXJlbGVzc0xpbmspCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gLS0+IFRoaXMgaXMgZm9yIHNlYXJjaCBsaXN0cwogICAgICAgICAgICAgICAgLy8gQ2hlY2sgZWFjaCBkb3dubG9hZCBidXR0b24gZnJvbSB0aGUgbGlzdAogICAgICAgICAgICAgICAgJCgnLmRvd25sb2FkLW5vdy5saXN0aW5nLWJ1dHRvbi1kbG4nKS5lYWNoKAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGN1cnJJbmRleCwgY3VyckRPTUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJFbGVtZW50ID0gJChjdXJyRE9NRWxlbWVudCkKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZGlyZWN0IGRvd25sb2FkIGxpbmsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJEaXJlY3REbExpbmsgPSBjdXJyRWxlbWVudC5hdHRyKCdkYXRhLW5vZGxtLXVybCcpCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBkaXJlY3QgZG93bmxvYWQgbGluaywgd2UgYWJhbmRvbgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJEaXJlY3REbExpbmsgPT0gJ3VuZGVmaW5lZCcpIHtyZXR1cm59CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBkb3dubG9hZCBsaW5rIHdpdGggdGhlIGRpcmVjdCwgZG93bmxvYWQgbWFuYWdlci1sZXNzIGxpbmsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyckVsZW1lbnQuY2hpbGRyZW4oJy5kbG4tYScpLnByb3AoJ2hyZWYnLCBjdXJyRGlyZWN0RGxMaW5rKQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU29tZWhvdyB0aGlzIGNsYXNzIHByZXZlbnRzIHRoZSBkb3dubG9hZCBmcm9tIGxhdW5jaGluZyBwcm9wZXJseSAoYXQgbGVhc3Qgb24gRmlyZWZveCkKICAgICAgICAgICAgICAgICAgICAgICAgY3VyckVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2Rvd25sb2FkLW5vdycpCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgRmlsZWZhY3Rvcnk6IHsKICAgICAgICAgICAgaG9zdDogWydmaWxlZmFjdG9yeS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjZG93bmxvYWRfbWFuYWdlciA+IGlucHV0OmNoZWNrYm94J10sCiAgICAgICAgICAgIGhpZGU6IFsnI2Rvd25sb2FkX21hbmFnZXInXQogICAgICAgIH0sCiAgICAgICAgRmlsZXNDRE46IHsKICAgICAgICAgICAgaG9zdDogWydmaWxlc2Nkbi5jb20nXSwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAkKCcjYnRuX2Rvd25sb2FkJykucHJvcCgnb25jbGljaycsIG51bGwpCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIEZyZWV3YXJlZmlsZXM6IHsKICAgICAgICAgICAgaG9zdDogWydmcmVld2FyZWZpbGVzLmNvbSddLAogICAgICAgICAgICBoaWRlOiBbJ3NwYW4uc21hbGxsaW5rczpjb250YWlucygiZG93bmxvYWQgbWFuYWdlciIpJ10sCiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGRpcmVjdExpbmsgPSAkKCdhLmR3bmxvY2F0aW9ucycpLnByb3AoJ2hyZWYnKQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXJlY3RMaW5rID09ICd1bmRlZmluZWQnKSB7cmV0dXJufQoKICAgICAgICAgICAgICAgICQoJ3RkW3dpZHRoPTMzMF1bYWxpZ249bGVmdF0gPiBhJykucHJvcCgnaHJlZicsIGRpcmVjdExpbmspCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIEdvb2dsZUVhcnRoOiB7CiAgICAgICAgCWhvc3Q6IFsnZ29vZ2xlLiddLAogICAgICAgIAl1bmNoZWNrOiBbJyNkbC1hZ3JlZS1jaHJvbWUnLCcjZGwtYWdyZWUtY2hyb21lLWRlZmF1bHQnXSwKICAgICAgICAJaGlkZTogWycjZGwtY2hyb21lLXByb21vJ10KICAgICAgICB9LAogICAgICAgIEh1Z2VmaWxlczogewogICAgICAgICAgICBob3N0OiBbJ2h1Z2VmaWxlcy5uZXQnXSwKICAgICAgICAgICAgdW5jaGVjazogWycjZGFwJywnI3VzZV9kb3dubG9hZGVyJ10sCiAgICAgICAgICAgIGhpZGU6IFsic3Bhbjpjb250YWlucygndXNpbmcgZG93bmxvYWQgYWNjZWxlcmF0b3InKSIsICcjZGFwJywgJyN1c2VfZG93bmxvYWRlcicsICdpbWdbc3JjPSJodHRwOi8vaHVnZWZpbGVzLm5ldC9idXR0b24ucG5nIl0nXQogICAgICAgIH0sCiAgICAgICAgSHVsa2xvYWQ6IHsKICAgICAgICAgICAgaG9zdDogWydodWxrbG9hZC5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjc3Buc3JkbGQnLCAnI3VzZS1tYW5hZ2VyJ10sCiAgICAgICAgICAgIGhpZGU6IFsKICAgICAgICAgICAgCSJmb3JtOmNvbnRhaW5zKCdkb3dubG9hZCBUaGUgRlJFRSBkb3dubG9hZCBhY2NlbGVyYXRvcicpIiwnI3NwbnNyZGxkJywnI2Rvd25sb2FkLXRpY2snLAogICAgICAgICAgICAJJ2ltZ1tzcmNePSJodHRwOi8vaHVsa2xvYWQuY29tL2ltYWdlcy9kbGQiXScsIC8vIEZha2UgZG93bmxvYWQgYnV0dG9uCiAgICAgICAgICAgIAknZGl2LmFsZXJ0W29uY2xpY2s9ImdvdG8oKSJdJywgLy8gRmFrZSBzcG9uc29yZWQgbGlua3MKICAgICAgICAgICAgCSdkaXZbc3R5bGUqPSJoZWlnaHQ6IDkwcHg7IGJvcmRlcjogM3B4IHNvbGlkIHJnYigyMDUsIDI0MCwgMjQ2KSJdJyAvLyBGYWtlIGRvd25sb2FkIGJhbm5lciAobGl2ZXJzZWx5KQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICBLaW5nZmlsZXM6IHsKICAgICAgICAgICAgaG9zdDogWydraW5nZmlsZXMubmV0J10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI2NtbGlfZG93bmxvYWRlciddLAogICAgICAgICAgICBoaWRlOiBbJyN0ZXN0MSddLAogICAgICAgICAgICAvLyBBdm9pZHMgYSBwb3B1cCB3aGVuIHVuY2hlY2tpbmcgdGhlIGNoZWNrYm94CiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJCgnI2NtbGlfZG93bmxvYWRlcicpLnByb3AoJ29uY2xpY2snLCBudWxsKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBMZXRpdGJpdDogewogICAgICAgICAgICBob3N0OiBbJ2xldGl0Yml0Lm5ldCddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNza3ltb25rX2NoZWNrYm94J10sCiAgICAgICAgICAgIGhpZGU6IFsnI3NreW1vbmtfY2hlY2tib3gnLCAnbGFiZWxbZm9yPXNreW1vbmtfY2hlY2tib3hdJ10KICAgICAgICB9LAogICAgICAgIExvdmVSb21zOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnbG92ZXJvbXMuY29tJ10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI2Rvd25sb2FkV2l0aE1hbmFnZXInXSwKICAgICAgICAgICAgaGlkZTogWycuZG93bmxvYWQtbGFiZWwnXQogICAgICAgIH0sCiAgICAgICAgVXBNZWRpYTFmaXJlOiB7CiAgICAgICAgICAgIGhvc3Q6IFsndXAubWVkaWExZmlyZS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdXNlLW1hbmFnZXInXSwKICAgICAgICAgICAgaGlkZTogWycjZG93bmxvYWQtYm94JywgJyNzcG9uc29yMicsICdkaXYuY29udGVudG9yID4gY2VudGVyJywgJy5hbGVydDInLCAnaW1nW3NyY149Imh0dHA6Ly91cC5tZWRpYTFmaXJlLmNvbS9uYi9SZWNfYiJdJ10KICAgICAgICB9LAogICAgICAgIE1pZ2h0eXVwbG9hZDogewogICAgICAgICAgICBob3N0OiBbJ21pZ2h0eXVwbG9hZC5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdXNlX2luc3RhbGxlciddLAogICAgICAgICAgICBoaWRlOiBbJyN1c2VfaW5zdGFsbGVyJywgJ2xhYmVsW2Zvcj11c2VfaW5zdGFsbGVyXScsJyNsbmtfZG93bmxvYWQgfiBiciddCiAgICAgICAgfSwKICAgICAgICBNcDNmaWw6IHsKICAgICAgICAgICAgaG9zdDogWydtcDNmaWxcLiddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNjaGVjayA+IGlucHV0OmNoZWNrYm94W25hbWU9Y2hlY2tdJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI2NoZWNrJ10KICAgICAgICB9LAogICAgICAgIE1wM2p1aWNlczogewogICAgICAgICAgICBob3N0OiBbJ21wM2p1aWNlcy50byddLAogICAgICAgICAgICB1bmNoZWNrOiBbJ2lucHV0OmNoZWNrYm94W25hbWU9ZGxfbWFuYWdlcl0nXSwKICAgICAgICAgICAgaGlkZTogWycuZGxfbWFuYWdlciwuY1tzdHlsZT0iaGVpZ2h0OjgwcHgiXSddCiAgICAgICAgfSwKICAgICAgICBNcDNvbGltcDogewogICAgICAgIAlob3N0OiBbJ21wM29saW1wLm5ldHxtcDNvbGltcHouY29tJ10sCiAgICAgICAgCXVuY2hlY2s6IFsnI2Rvd25sb2FkLW1hbmFnZXItY2hlY2tib3gnXSwKICAgICAgICAJaGlkZTogWycjZG93bmxvYWQtbWFuYWdlciddCiAgICAgICAgfSwKICAgICAgICBPcGVuc3VidGl0bGVzOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnb3BlbnN1YnRpdGxlcy5vcmcnXSwKICAgICAgICAgICAgdW5jaGVjazogWycjY2JEb3dubG9hZGVyJ10sCiAgICAgICAgICAgIG9wdHVuY2hlY2s6IHsKICAgICAgICAgICAgICAgIC8vIE5ldmVyIHN0b3AgdG8gdHJ5IHVuY2hlY2tpbmcgdGhlIGNoZWNrYm94CiAgICAgICAgICAgICAgICBjb25zdGFudGNoZWNrOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGhpZGU6IFsnI2NiRG93bmxvYWRlcicsJyNsYi1kd2wnXSwKICAgICAgICAgICAgb3B0aGlkZTogewogICAgICAgICAgICAgICAgLy8gTmV2ZXIgc3RvcCB0byB0cnkgaGlkaW5nIHRoZSBvYmplY3QKICAgICAgICAgICAgICAgIGNvbnN0YW50Y2hlY2s6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgRmlsZWhpcHBvOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnZmlsZWhpcHBvLmNvbSddLAogICAgICAgICAgICAvLyBXaWxsIGRvIG5vdGhpbmcgb24gcGFnZXMgd2l0aG91dCBhIGRvd25sb2FkIG1hbmFnZXIKICAgICAgICAgICAgaGlkZTogWycjcHJvZ3JhbS1oZWFkZXItZG93bmxvYWQtbGluay1kbS10ZXh0JywgJyNkaXJlY3QtZG93bmxvYWQtbGluay1jb250YWluZXInXSwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYWR3T2JqID0gJCgnLnByb2dyYW0taGVhZGVyLWRvd25sb2FkLWxpbmsuZG93bmxvYWQtbWFuYWdlci1lbmFibGVkJykKICAgICAgICAgICAgICAgIC8vIEFwcGVuZCA/ZGlyZWN0IGF0IHRoZSBlbmQgb2YgdGhlIFVSTCBzbyB0aGF0IGl0IGRvZXNuJ3QgcHJvdmlkZSB0aGUgZG93bmxvYWQgbWFuYWdlcgogICAgICAgICAgICAgICAgdmFyIGRpcmVjdFVybCA9IGFkd09iai5hdHRyKCdocmVmJykgKyAnP2RpcmVjdCcKCiAgICAgICAgICAgICAgICBhZHdPYmouYXR0cignaHJlZicsIGRpcmVjdFVybCkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgUmV2Q2xvdWRzOiB7CiAgICAgICAgICAgIGhvc3Q6IFsncmV2Y2xvdWRzLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyN0aWNrLWR3biddLAogICAgICAgICAgICBoaWRlOiBbJy50aWNrLWJveCddCiAgICAgICAgfSwKICAgICAgICBSb21odXN0bGVyOiB7CiAgICAgICAgICAgIGhvc3Q6IFsncm9taHVzdGxlci5uZXQnXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdXNlX2FjY2VsZXJhdG9yJ10sCiAgICAgICAgICAgIGhpZGU6IFsnLmFjY2VsZXJhdG9yJ10KICAgICAgICB9LAogICAgICAgIFNlY3VyZXVwbG9hZDogewogICAgICAgIAlob3N0OiBbJ3NlY3VyZXVwbG9hZC5ldSddLAogICAgICAgIAl1bmNoZWNrOiBbJ2Zvcm1bbmFtZT1kbG1hbmFnZXJdID4gaW5wdXQ6Y2hlY2tib3gnXSwKICAgICAgICAJb3B0dW5jaGVjazogewogICAgICAgICAgICAgICAgLy8gTmV2ZXIgc3RvcCB0byB0cnkgdW5jaGVja2luZyB0aGUgY2hlY2tib3gKICAgICAgICAgICAgICAgIGNvbnN0YW50Y2hlY2s6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAJaGlkZTogWydmb3JtW25hbWU9ZGxtYW5hZ2VyXScsICdpbWdbc3JjPSJodHRwczovL3d3dy5zZWN1cmV1cGxvYWQuZXUvZ2Z4L2RsYnRuLnBuZyJdJywgJ2ltZ1tzcmM9Imh0dHBzOi8vd3d3LnNlY3VyZXVwbG9hZC5ldS9nZngvZnJlZWRsLnBuZyJdJ10sCiAgICAgICAgCW9wdGhpZGU6IHsKICAgICAgICAgICAgICAgIC8vIE5ldmVyIHN0b3AgdG8gdHJ5IGhpZGluZyB0aGUgb2JqZWN0CiAgICAgICAgICAgICAgICBjb25zdGFudGNoZWNrOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIFNlbmRzcGFjZTogewogICAgICAgICAgICBob3N0OiBbJ3NlbmRzcGFjZS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjcXVpY2tjaGsnXSwKICAgICAgICAgICAgaGlkZTogWyJmb3JtID4gZGl2OmNvbnRhaW5zKCd3aXRoIHNlbmRzcGFjZSBhY2NlbGVyYXRvcicpIiwnI3F1aWNrY2hrJ10KICAgICAgICB9LAogICAgICAgIFNoYXJlYmVhc3Q6IHsKICAgICAgICAgICAgaG9zdDogWydzaGFyZWJlYXN0LmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNzaGFyZWJlYXN0X2Rvd25sb2FkZXInXSwKICAgICAgICAgICAgaGlkZTogWycjc2hhcmViZWFzdF9kb3dubG9hZGVyX2NvbnRhaW5lciddCiAgICAgICAgfSwKICAgICAgICBTaGFyZWQ6IHsKICAgICAgICAgICAgaG9zdDogWydzaGFyZWQuY29tJ10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI3VzZS1tYW5hZ2VyJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI3dlYnBpY2stb3B0aW9uJ10KICAgICAgICB9LAogICAgICAgIFNvZnRNODogewogICAgICAgICAgICBob3N0OiBbJy5zb2Z0bTguY29tJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI2RpbmZvMltzdHlsZT0iY2xlYXI6Ym90aDsiXSddLCAvLyBCbGFoIGJsYWggYWJvdXQgQWR3YXJlCiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGJ1dE1hdGNoID0gJy5idXR0b25Eb3dubG9hZC5kYnRuZGwnCiAgICAgICAgICAgICAgICB2YXIgZGxCdXQgPSAkKGJ1dE1hdGNoKQoKICAgICAgICAgICAgICAgIC8vIFRha2UgdGhlIGxhc3QgcGFydCBvZiB0aGUgcGF0aCBvZiB0aGUgVVJMCiAgICAgICAgICAgICAgICB2YXIgZXhlTmFtZSA9IGRsQnV0LnByb3AoJ2hyZWYnKS5zcGxpdCgnLycpLnBvcCgpCgogICAgICAgICAgICAgICAgLy8gRm91bmQgaW4gdGhlIGFkd2FyZSBpbnN0YWxsYXRpb24gZXhlY3V0YWJsZQogICAgICAgICAgICAgICAgdmFyIG5vQWRMbmsgPSAnaHR0cDovL2guc29mdG04LmNvbS8nICsgZXhlTmFtZQoKICAgICAgICAgICAgICAgIC8vIENhbiBiZSBtdWx0aXBsZSBidXR0b25zCiAgICAgICAgICAgICAgICBkbEJ1dC5wcm9wKCdocmVmJywgbm9BZExuaykKICAgICAgICAgICAgICAgIHVuc2FmZVdpbmRvdy4kKGJ1dE1hdGNoKS5vZmYoJ2NsaWNrJykgLy8gUHJldmVudHMgdGhlIGRvd25sb2FkIGZyb20gbGF1bmNoaW5nIHByb3Blcmx5CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIFNvZnRvbmljOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnLnNvZnRvbmljLiddLAogICAgICAgICAgICBoaWRlOiBbJ2gyOmNvbnRhaW5zKCJTb2Z0b25pYyBEb3dubG9hZGVyIikgfiB1bCcsJ2gyOmNvbnRhaW5zKCJTb2Z0b25pYyBEb3dubG9hZGVyIiksIC5ib3gtZG93bmxvYWQtZm9vdGVyJ10sCiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGxpbmtGb2xsb3cgPSAkKCcjZG93bmxvYWRfYWx0ZXJuYXRpdmUgPiBwID4gYVtyZWw9bm9mb2xsb3ddJykKICAgICAgICAgICAgICAgIGlmIChleGlzdHMobGlua0ZvbGxvdykpIHsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5yZXBsYWNlKGxpbmtGb2xsb3cucHJvcCgnaHJlZicpKQogICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBtYW5hZ2VyQnV0dG9uID0gJCgnI2Rvd25sb2FkLWJ1dHRvbi1zZCwgI2Rvd25sb2FkLWJ1dHRvbicpCiAgICAgICAgICAgICAgICB2YXIgZGlyZWN0QnV0dG9uID0gJCgnI2Rvd25sb2FkLWJ1dHRvbi1hbHRlcm5hdGl2ZScpCiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cyhtYW5hZ2VyQnV0dG9uKSB8fCAhZXhpc3RzKGRpcmVjdEJ1dHRvbikpIHtyZXR1cm59CgogICAgICAgICAgICAgICAgdmFyIGRpcmVjdExpbmsgPSBkaXJlY3RCdXR0b24ucHJvcCgnaHJlZicpCgogICAgICAgICAgICAgICAgLy8gQXZvaWQgalF1ZXJ5IGNsaWNrIHJlZGlyZWN0aW9uIHNldCBvbiB0aGUgZG93bmxvYWQgYnV0dG9uCiAgICAgICAgICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHt1bnNhZmVXaW5kb3cuJCgnI2Rvd25sb2FkLWJ1dHRvbi1zZCwgI2Rvd25sb2FkLWJ1dHRvbicpLm9mZignY2xpY2snKX0sIDEwMCkKCiAgICAgICAgICAgICAgICBtYW5hZ2VyQnV0dG9uLnByb3AoJ2hyZWYnLCBkaXJlY3RMaW5rKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBTb3VyY2Vmb3JnZTogewogICAgICAgICAgICBob3N0OiBbJ3NvdXJjZWZvcmdlLm5ldCddLAogICAgICAgICAgICBoaWRlOiBbJy5kaXJlY3QtZGwnLCAnLmluZm8tY2lyY2xlJywgJy5idG4tZGRsLXRvZ2dsZSddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgCS8vIEhvdGZpeDogaWYgdGhlIHVzZXIgaXMgb24gYW4gYWR3YXJlLWJ1bmRsZWQgZG93bmxvYWQgcGFnZQogICAgICAgICAgICAJaWYgKGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lLmNvbnRhaW5zKCcvZG93bmxvYWQnKSAmJiAhZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLmNvbnRhaW5zKCdub3dyYXAnKSkgewogICAgICAgICAgICAJCS8vIEFkZCB0aGUgYXJndW1lbnQgYXMgZmlyc3QgYXJndW1lbnQgKD8pIG9yIHNlY29uZGFyeSBhcmd1bWVudCAoJikKICAgICAgICAgICAgCQl2YXIgcHJlZml4ID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLmNvbnRhaW5zKCc/Jyk/ICcmJyA6ICc/JzsKICAgICAgICAgICAgCQlkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2ggPSBkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2ggKyBwcmVmaXggKyAnbm93cmFwJzsKICAgICAgICAgICAgCX0KCiAgICAgICAgICAgIAl0cnkgewoJICAgICAgICAgICAgCS8vIFNlZW4gaW4gYnJvd3NpbmcgZmlsZXMgcGFnZXMKCSAgICAgICAgICAgIAl2YXIgdG9nZ2xlQnRuID0gJCgnYS5idG4tZGRsLXRvZ2dsZScpOwoJICAgICAgICAgICAgCS8vIEluIGNhc2UgdGhlIHRleHQgY29udGFpbnMgdGhlIHBhdHRlcm4gdGVsbGluZyB0byB0aGUgdXNlciB0aGF0IGFkd2FyZSBpcyBlbmFibGVkCgkgICAgICAgICAgICAJaWYgKGV4aXN0cyh0b2dnbGVCdG4pICYmIHRvZ2dsZUJ0bi5odG1sKCkuY29udGFpbnModG9nZ2xlQnRuLmF0dHIoJ2RhdGEtY29udGVudC1ub3dyYXAnKSkpIHsKCSAgICAgICAgICAgIAkJLy8gV2UgZGlzYWJsZSBpdAoJICAgICAgICAgICAgCQl1bnNhZmVXaW5kb3cuJCgnYS5idG4tZGRsLXRvZ2dsZScpLmNsaWNrKCk7CgkgICAgICAgICAgICAJfQoJICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgICAgICAgIAkvLyAtLT4gVGhpcyBpcyBmb3IgcHJvZ3JhbSBwYWdlcwogICAgICAgICAgICAJLy8gVHJ5IHRvIGdldCB0aGUgcmVhbCBsaW5rCiAgICAgICAgICAgIAl2YXIgcmVhbExpbmsgPSAkKCcuZGlyZWN0LWRsJykucHJvcCgnaHJlZicpCgogICAgICAgICAgICAJLy8gSWYgd2UgZm91bmQgdGhlIGRpcmVjdCBkb3dubG9hZCBsaW5rLCB0aGVuIGl0IG1lYW5zIHRoaXMgZG93bmxvYWQgaXMgYnVuZGxlZCB3aXRoIGEgcGllY2Ugb2YgYWR3YXJlCiAgICAgICAgICAgIAlpZiAodHlwZW9mIHJlYWxMaW5rICE9ICd1bmRlZmluZWQnKSB7CgkgICAgICAgICAgICAJLy8gUmVwbGFjZSB0aGUgZG93bmxvYWQgbGluayB3aXRoIHRoZSByZWFsIG9uZQoJICAgICAgICAgICAgCSQoJyNkb3dubG9hZF9idXR0b24gPiAuc2ZkbCcpLnByb3AoJ2hyZWYnLCByZWFsTGluaykKCgkgICAgICAgICAgICAJLy8gTm93IHdlJ3JlIHRyeWluZyB0byBjaGFuZ2UgdGhlICJJbnN0YWxsZXIgRW5hYmxlZCIgdGV4dCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlCgkgICAgICAgICAgICAJdmFyIGNvbnRhaW5zRmlsZU5hbWUgPSAkKCcuc2ZkbCcpLmF0dHIoJ29sZHRpdGxlJykKCSAgICAgICAgICAgIAl2YXIgZXh0cmFjdEZpbGVOYW1lID0gL1wvKD8hLipcLykoW14gXSspLwoKCSAgICAgICAgICAgIAl2YXIgZmlsZU5hbWUgPSBleHRyYWN0RmlsZU5hbWUuZXhlYyhjb250YWluc0ZpbGVOYW1lKQoKCSAgICAgICAgICAgIAkkKCJzbWFsbDpjb250YWlucygnSW5zdGFsbGVyIEVuYWJsZWQnKSIpLmh0bWwoZmlsZU5hbWVbMV0pCgkgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gLS0+IFRoaXMgaXMgZm9yIHRoZSBtYWluIHBhZ2UgYW5kIHNlYXJjaGVzCiAgICAgICAgICAgICAgICAvLyBUT0RPOiB1c2UgYSBtdXRhdGlvbiBvYnNlcnZlciBmb3Igc2VhcmNoIHBhZ2VzIChub3QgbmVlZGVkIGZvciBtYWluIHBhZ2UpCiAgICAgICAgICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKCIuc2ZkbC5zZmRsLWxpdGUiKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBkb3dubG9hZGluZyB0aGUgYWR3YXJlLWZyZWUgcHJvZ3JhbQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkSHJlZiA9ICQodGhpcykucHJvcCgnaHJlZicpCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGFwcGVuZGVkIG91ciBuby1hZHdhcmUgYXJndW1lbnQsIGxlYXZlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRIcmVmLnN1YnN0cmluZyhvbGRIcmVmLmxlbmd0aC03KSA9PSAnJm5vd3JhcCcpIHtyZXR1cm59CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnaHJlZicsICQodGhpcykucHJvcCgnaHJlZicpICsgJyZub3dyYXAnKQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9LCA1MCkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgVHVzZmlsZXM6IHsKICAgICAgICAgICAgaG9zdDogWyd0dXNmaWxlcy5uZXQnXSwKICAgICAgICAgICAgdW5jaGVjazogWydpbnB1dDpjaGVja2JveFtuYW1lPXF1aWNrXSddLAogICAgICAgICAgICBoaWRlOiBbJ2lucHV0OmNoZWNrYm94W25hbWU9cXVpY2tdIH4gbGFiZWwnLCAnaW5wdXQ6Y2hlY2tib3hbbmFtZT1xdWlja10nLCdhW3RhcmdldD1fYmxhbmtdW2hyZWYqPSJodHRwOi8vc2hhcmVzdXBlci5pbmZvLyJdLGltZ1tzcmM9Imh0dHBzOi8vei50dXNmaWxlcy5uZXQvaS9kbGwucG5nIl0nXQogICAgICAgIH0sCiAgICAgICAgVXBsb2FkaW5nOiB7CiAgICAgICAgICAgIGhvc3Q6IFsndXBsb2FkaW5nLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNmb3JjZV9leGUnXSwKICAgICAgICAgICAgaGlkZTogWycudXNlX2Rvd25sb2FkX21hbmFnZXInXQogICAgICAgIH0sCiAgICAgICAgVXBsb2FkT2NlYW46IHsKICAgICAgICAgICAgaG9zdDogWyd1cGxvYWRvY2Vhbi5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdGljay1kd24nXSwKICAgICAgICAgICAgaGlkZTogWycudGljay1ib3gnXQogICAgICAgIH0sCiAgICAgICAgVXBsb2R3czp7CiAgICAgICAgICAgIGhvc3Q6IFsndXBsb2Qud3MnXSwKICAgICAgICAgICAgdW5jaGVjazogWycjY2hrSXNBZGQnXSwKICAgICAgICAgICAgaGlkZTogWydsYWJlbDpjb250YWlucygib2ZmZXIiKScsJ2ltZ1tzcmM9Imh0dHA6Ly9nb28uZ2wvQ0dIVlZvIl0nXQogICAgICAgIH0sCiAgICAgICAgVXBsb2FkczogewogICAgICAgICAgICBob3N0OiBbJ3VwbG9hZHMudG8nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjY2hrSXNBZGQnXSwKICAgICAgICAgICAgaGlkZTogWydhOmNvbnRhaW5zKCJNQU5BR0VSIiknLCdjZW50ZXI6Y29udGFpbnMoIk9mZmVyIiknXSwKICAgICAgICB9LAogICAgICAgIFVwdG9ib3g6IHsKICAgICAgICAgICAgaG9zdDogWyd1cHRvYm94LmNvbSddLAogICAgICAgICAgICBoaWRlOiBbJ2Rpdi5yZXNlbGxlciA+IHRhYmxlW2FsaWduPWNlbnRlcl0nXSwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gJCgnZGl2LnJlc2VsbGVyID4gdGFibGVbYWxpZ249Y2VudGVyXSBkaXZbYWxpZ249Y2VudGVyXSA+IGEnKQogICAgICAgICAgICAgICAgdmFyIGFkd2FyZSA9IGJ1dHRvbi5wcm9wKCdocmVmJykKCiAgICAgICAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcmVhbCBkb3dubG9hZCBsaW5rIGFuZCBjaGFuZ2UgdGhlIGJ1dHRvbiB3aXRoIHRoaXMgbGluawogICAgICAgICAgICAgICAgdmFyIGRvd25sb2FkID0gYWR3YXJlLm1hdGNoKC8mcHJvZHVjdF9kb3dubG9hZF91cmw9KFteJCZdKykkLylbMV0KICAgICAgICAgICAgICAgIGJ1dHRvbi5wcm9wKCdocmVmJywgZG93bmxvYWQpCgogICAgICAgICAgICAgICAgLy8gUHV0IHRoZSBidXR0b24gaW4gYSB2aXNpYmxlIGxvY2F0aW9uCiAgICAgICAgICAgICAgICAkKCdkaXYucmVzZWxsZXIgPiB0YWJsZVthbGlnbj1jZW50ZXJdJykuYmVmb3JlKGJ1dHRvbikKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgVW5saW1pdHpvbmU6IHsKICAgICAgICAgICAgaG9zdDogWyd1bmxpbWl0em9uZS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjZGxtJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI2RsbSB+IGInLCcjZGxtJ10KICAgICAgICB9LAogICAgICAgIFVzZXJzQ0ROOiB7CiAgICAgICAgICAgIGhvc3Q6IFsndXNlcnNjZG4uY29tJ10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI2Noa0lzQWRkJ10sCiAgICAgICAgICAgIGhpZGU6IFsnbGFiZWw6Y29udGFpbnMoIkRvd25sb2FkIG1hbmFnZXIiKSddCiAgICAgICAgfSwKICAgICAgICBaaWRkdTogewogICAgICAgICAgICBob3N0OiBbJ2Rvd25sb2Fkcy56aWRkdS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjYWNjZWxlcmF0b3InXSwKICAgICAgICAgICAgaGlkZTogWyd0ZC50ZXh0MTI6Y29udGFpbnMoInppZGR1IGFjY2VsZXJhdG9yIiknXQogICAgICAgIH0KICAgIH0KCiAgICAvLyBJZiB0aGUgcmVxdWlyZSB3YXNuJ3QgZXhlY3V0ZWQgKEdvb2dsZSBDaHJvbWUgaW5zdGFsbGF0aW9uIHdpdGhvdXQgVGFtcGVybW9ua2V5KSwgalF1ZXJ5IDIuMDNtaW4KICAgIGlmICh0eXBlb2YgJCA9PSAidW5kZWZpbmVkIikgewogICAgICAgIChmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyPXR5cGVvZiB1bmRlZmluZWQsaT1lLmxvY2F0aW9uLG89ZS5kb2N1bWVudCxzPW8uZG9jdW1lbnRFbGVtZW50LGE9ZS5qUXVlcnksdT1lLiQsbD17fSxjPVtdLHA9IjIuMC4zIixmPWMuY29uY2F0LGg9Yy5wdXNoLGQ9Yy5zbGljZSxnPWMuaW5kZXhPZixtPWwudG9TdHJpbmcseT1sLmhhc093blByb3BlcnR5LHY9cC50cmltLHg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHguZm4uaW5pdChlLG4sdCl9LGI9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2Usdz0vXFMrL2csVD0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEM9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxrPS9eLW1zLS8sTj0vLShbXGRhLXpdKS9naSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0sUz1mdW5jdGlvbigpe28ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSx4LnJlYWR5KCl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpwLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKHI9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOlQuZXhlYyhlKSwhcnx8IXJbMV0mJnQpcmV0dXJuIXR8fHQuanF1ZXJ5Pyh0fHxuKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTtpZihyWzFdKXtpZih0PXQgaW5zdGFuY2VvZiB4P3RbMF06dCx4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoclsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVudHx8dDpvLCEwKSksQy50ZXN0KHJbMV0pJiZ4LmlzUGxhaW5PYmplY3QodCkpZm9yKHIgaW4gdCl4LmlzRnVuY3Rpb24odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gaT1vLmdldEVsZW1lbnRCeUlkKHJbMl0pLGkmJmkucGFyZW50Tm9kZSYmKHRoaXMubGVuZ3RoPTEsdGhpc1swXT1pKSx0aGlzLmNvbnRleHQ9byx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9uLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dW5kZWZpbmVkJiYodGhpcy5zZWxlY3Rvcj1lLnNlbGVjdG9yLHRoaXMuY29udGV4dD1lLmNvbnRleHQpLHgubWFrZUFycmF5KGUsdGhpcykpfSxzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3RoaXMudG9BcnJheSgpOjA+ZT90aGlzW3RoaXMubGVuZ3RoK2VdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD14Lm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdC5jb250ZXh0PXRoaXMuY29udGV4dCx0fSxlYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZWFjaCh0aGlzLGUsdCl9LHJlYWR5OmZ1bmN0aW9uKGUpe3JldHVybiB4LnJlYWR5LnByb21pc2UoKS5kb25lKGUpLHRoaXN9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoMD5lP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJnQ+bj9bdGhpc1tuXV06W10pfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpoLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSx4LmZuLmluaXQucHJvdG90eXBlPXguZm4seC5leHRlbmQ9eC5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8scz1hcmd1bWVudHNbMF18fHt9LGE9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgcyYmKGw9cyxzPWFyZ3VtZW50c1sxXXx8e30sYT0yKSwib2JqZWN0Ij09dHlwZW9mIHN8fHguaXNGdW5jdGlvbihzKXx8KHM9e30pLHU9PT1hJiYocz10aGlzLC0tYSk7dT5hO2ErKylpZihudWxsIT0oZT1hcmd1bWVudHNbYV0pKWZvcih0IGluIGUpbj1zW3RdLHI9ZVt0XSxzIT09ciYmKGwmJnImJih4LmlzUGxhaW5PYmplY3Qocil8fChpPXguaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmeC5pc0FycmF5KG4pP246W10pOm89biYmeC5pc1BsYWluT2JqZWN0KG4pP246e30sc1t0XT14LmV4dGVuZChsLG8scikpOnIhPT11bmRlZmluZWQmJihzW3RdPXIpKTtyZXR1cm4gc30seC5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKHArTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9Db25mbGljdDpmdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09eCYmKGUuJD11KSx0JiZlLmpRdWVyeT09PXgmJihlLmpRdWVyeT1hKSx4fSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihlKXtlP3gucmVhZHlXYWl0Kys6eC5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUpeyhlPT09ITA/LS14LnJlYWR5V2FpdDp4LmlzUmVhZHkpfHwoeC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4wfHwobi5yZXNvbHZlV2l0aChvLFt4XSkseC5mbi50cmlnZ2VyJiZ4KG8pLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpKSl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9sW20uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiIT09eC50eXBlKGUpfHxlLm5vZGVUeXBlfHx4LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYheS5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuITB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoZSl9LHBhcnNlSFRNTDpmdW5jdGlvbihlLHQsbil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpLHQ9dHx8bzt2YXIgcj1DLmV4ZWMoZSksaT0hbiYmW107cmV0dXJuIHI/W3QuY3JlYXRlRWxlbWVudChyWzFdKV06KHI9eC5idWlsZEZyYWdtZW50KFtlXSx0LGkpLGkmJngoaSkucmVtb3ZlKCkseC5tZXJnZShbXSxyLmNoaWxkTm9kZXMpKX0scGFyc2VKU09OOkpTT04ucGFyc2UscGFyc2VYTUw6ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXtuPW5ldyBET01QYXJzZXIsdD1uLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKHIpe3Q9dW5kZWZpbmVkfXJldHVybighdHx8dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZ4LmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZXZhbDtlPXgudHJpbShlKSxlJiYoMT09PWUuaW5kZXhPZigidXNlIHN0cmljdCIpPyh0PW8uY3JlYXRlRWxlbWVudCgic2NyaXB0IiksdC50ZXh0PWUsby5oZWFkLmFwcGVuZENoaWxkKHQpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpOm4oZSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShrLCJtcy0iKS5yZXBsYWNlKE4sRSl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpO2lmKG4pe2lmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBmb3IoaSBpbiBlKWlmKHI9dC5hcHBseShlW2ldLG4pLHI9PT0hMSlicmVha31lbHNlIGlmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOnYuY2FsbChlKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihqKE9iamVjdChlKSk/eC5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6aC5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmcuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGgscj1lLmxlbmd0aCxpPTA7aWYoIm51bWJlciI9PXR5cGVvZiBuKWZvcig7bj5pO2krKyllW3IrK109dFtpXTtlbHNlIHdoaWxlKHRbaV0hPT11bmRlZmluZWQpZVtyKytdPXRbaSsrXTtyZXR1cm4gZS5sZW5ndGg9cixlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLG89MCxzPWUubGVuZ3RoO2ZvcihuPSEhbjtzPm87bysrKXI9ISF0KGVbb10sbyksbiE9PXImJmkucHVzaChlW29dKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPTAsbz1lLmxlbmd0aCxzPWooZSksYT1bXTtpZihzKWZvcig7bz5pO2krKylyPXQoZVtpXSxpLG4pLG51bGwhPXImJihhW2EubGVuZ3RoXT1yKTtlbHNlIGZvcihpIGluIGUpcj10KGVbaV0saSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7cmV0dXJuIGYuYXBwbHkoW10sYSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9bikseC5pc0Z1bmN0aW9uKGUpPyhyPWQuY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHguZ3VpZCsrLGkpOnVuZGVmaW5lZH0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpe3ZhciBhPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT14LnR5cGUobikpe2k9ITA7Zm9yKGEgaW4gbil4LmFjY2VzcyhlLHQsYSxuW2FdLCEwLG8scyl9ZWxzZSBpZihyIT09dW5kZWZpbmVkJiYoaT0hMCx4LmlzRnVuY3Rpb24ocil8fChzPSEwKSxsJiYocz8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoeChlKSxuKX0pKSx0KSlmb3IoO3U+YTthKyspdChlW2FdLG4scz9yOnIuY2FsbChlW2FdLGEsdChlW2FdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxub3c6RGF0ZS5ub3csc3dhcDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHM9e307Zm9yKG8gaW4gdClzW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2k9bi5hcHBseShlLHJ8fFtdKTtmb3IobyBpbiB0KWUuc3R5bGVbb109c1tvXTtyZXR1cm4gaX19KSx4LnJlYWR5LnByb21pc2U9ZnVuY3Rpb24odCl7cmV0dXJuIG58fChuPXguRGVmZXJyZWQoKSwiY29tcGxldGUiPT09by5yZWFkeVN0YXRlP3NldFRpbWVvdXQoeC5yZWFkeSk6KG8uYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSkpLG4ucHJvbWlzZSh0KX0seC5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7bFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBqKGUpe3ZhciB0PWUubGVuZ3RoLG49eC50eXBlKGUpO3JldHVybiB4LmlzV2luZG93KGUpPyExOjE9PT1lLm5vZGVUeXBlJiZ0PyEwOiJhcnJheSI9PT1ufHwiZnVuY3Rpb24iIT09biYmKDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfXQ9eChvKSxmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxnLG0seSx2PSJzaXp6bGUiKy1uZXcgRGF0ZSxiPWUuZG9jdW1lbnQsdz0wLFQ9MCxDPXN0KCksaz1zdCgpLE49c3QoKSxFPSExLFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KEU9ITAsMCk6MH0saj10eXBlb2YgdW5kZWZpbmVkLEQ9MTw8MzEsQT17fS5oYXNPd25Qcm9wZXJ0eSxMPVtdLHE9TC5wb3AsSD1MLnB1c2gsTz1MLnB1c2gsRj1MLnNsaWNlLFA9TC5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDtuPnQ7dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsVz0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLCQ9Vy5yZXBsYWNlKCJ3IiwidyMiKSxCPSJcXFsiK00rIiooIitXKyIpIitNKyIqKD86KFsqXiR8IX5dPz0pIitNKyIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIiskKyIpfCl8KSIrTSsiKlxcXSIsST0iOigiK1crIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxcKClbXFxdXXwiK0IucmVwbGFjZSgzLDgpKyIpKil8LiopXFwpfCkiLHo9UmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89UmVnRXhwKCJeIitNKyIqLCIrTSsiKiIpLFg9UmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9UmVnRXhwKE0rIipbK35dIiksWT1SZWdFeHAoIj0iK00rIiooW15cXF0nXCJdKikiK00rIipcXF0iLCJnIiksVj1SZWdFeHAoSSksRz1SZWdFeHAoIl4iKyQrIiQiKSxKPXtJRDpSZWdFeHAoIl4jKCIrVysiKSIpLENMQVNTOlJlZ0V4cCgiXlxcLigiK1crIikiKSxUQUc6UmVnRXhwKCJeKCIrVy5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6UmVnRXhwKCJeIitCKSxQU0VVRE86UmVnRXhwKCJeIitJKSxDSElMRDpSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOlJlZ0V4cCgiXig/OiIrUisiKSQiLCJpIiksbmVlZHNDb250ZXh0OlJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxRPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxLPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sWj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGV0PS9eaFxkJC9pLHR0PS8nfFxcL2csbnQ9UmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIikscnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9PXJ8fG4/dDowPnI/U3RyaW5nLmZyb21DaGFyQ29kZShyKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHI+PjEwLDU2MzIwfDEwMjMmcil9O3RyeXtPLmFwcGx5KEw9Ri5jYWxsKGIuY2hpbGROb2RlcyksYi5jaGlsZE5vZGVzKSxMW2IuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGl0KXtPPXthcHBseTpMLmxlbmd0aD9mdW5jdGlvbihlLHQpe0guYXBwbHkoZSxGLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBvdChlLHQscixpKXt2YXIgbyxzLGEsdSxsLGYsZyxtLHgsdztpZigodD90Lm93bmVyRG9jdW1lbnR8fHQ6YikhPT1wJiZjKHQpLHQ9dHx8cCxyPXJ8fFtdLCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHI7aWYoMSE9PSh1PXQubm9kZVR5cGUpJiY5IT09dSlyZXR1cm5bXTtpZihoJiYhaSl7aWYobz1LLmV4ZWMoZSkpaWYoYT1vWzFdKXtpZig5PT09dSl7aWYocz10LmdldEVsZW1lbnRCeUlkKGEpLCFzfHwhcy5wYXJlbnROb2RlKXJldHVybiByO2lmKHMuaWQ9PT1hKXJldHVybiByLnB1c2gocykscn1lbHNlIGlmKHQub3duZXJEb2N1bWVudCYmKHM9dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKSYmeSh0LHMpJiZzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxzZXtpZihvWzJdKXJldHVybiBPLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigoYT1vWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIE8uYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSkpLHJ9aWYobi5xc2EmJighZHx8IWQudGVzdChlKSkpe2lmKG09Zz12LHg9dCx3PTk9PT11JiZlLDE9PT11JiYib2JqZWN0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zj1ndChlKSwoZz10LmdldEF0dHJpYnV0ZSgiaWQiKSk/bT1nLnJlcGxhY2UodHQsIlxcJCYiKTp0LnNldEF0dHJpYnV0ZSgiaWQiLG0pLG09IltpZD0nIittKyInXSAiLGw9Zi5sZW5ndGg7d2hpbGUobC0tKWZbbF09bSttdChmW2xdKTt4PVUudGVzdChlKSYmdC5wYXJlbnROb2RlfHx0LHc9Zi5qb2luKCIsIil9aWYodyl0cnl7cmV0dXJuIE8uYXBwbHkocix4LnF1ZXJ5U2VsZWN0b3JBbGwodykpLHJ9Y2F0Y2goVCl7fWZpbmFsbHl7Z3x8dC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4ga3QoZS5yZXBsYWNlKHosIiQxIiksdCxyLGkpfWZ1bmN0aW9uIHN0KCl7dmFyIGU9W107ZnVuY3Rpb24gdChuLHIpe3JldHVybiBlLnB1c2gobis9IiAiKT5pLmNhY2hlTGVuZ3RoJiZkZWxldGUgdFtlLnNoaWZ0KCldLHRbbl09cn1yZXR1cm4gdH1mdW5jdGlvbiBhdChlKXtyZXR1cm4gZVt2XT0hMCxlfWZ1bmN0aW9uIHV0KGUpe3ZhciB0PXAuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChuKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gbHQoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1lLmxlbmd0aDt3aGlsZShyLS0paS5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiYofnQuc291cmNlSW5kZXh8fEQpLSh+ZS5zb3VyY2VJbmRleHx8RCk7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIHB0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PW4mJnQudHlwZT09PWV9fWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBodChlKXtyZXR1cm4gYXQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3QsYXQoZnVuY3Rpb24obixyKXt2YXIgaSxvPWUoW10sbi5sZW5ndGgsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0pbltpPW9bc11dJiYobltpXT0hKHJbaV09bltpXSkpfSl9KX1zPW90LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdD8iSFRNTCIhPT10Lm5vZGVOYW1lOiExfSxuPW90LnN1cHBvcnQ9e30sYz1vdC5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdD1lP2Uub3duZXJEb2N1bWVudHx8ZTpiLHI9dC5kZWZhdWx0VmlldztyZXR1cm4gdCE9PXAmJjk9PT10Lm5vZGVUeXBlJiZ0LmRvY3VtZW50RWxlbWVudD8ocD10LGY9dC5kb2N1bWVudEVsZW1lbnQsaD0hcyh0KSxyJiZyLmF0dGFjaEV2ZW50JiZyIT09ci50b3AmJnIuYXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIixmdW5jdGlvbigpe2MoKX0pLG4uYXR0cmlidXRlcz11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKHQuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj4iLGUuZmlyc3RDaGlsZC5jbGFzc05hbWU9ImkiLDI9PT1lLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImkiKS5sZW5ndGh9KSxuLmdldEJ5SWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGYuYXBwZW5kQ2hpbGQoZSkuaWQ9diwhdC5nZXRFbGVtZW50c0J5TmFtZXx8IXQuZ2V0RWxlbWVudHNCeU5hbWUodikubGVuZ3RofSksbi5nZXRCeUlkPyhpLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCE9PWomJmgpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4mJm4ucGFyZW50Tm9kZT9bbl06W119fSxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0pOihkZWxldGUgaS5maW5kLklELGkuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPT1qJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIG4mJm4udmFsdWU9PT10fX0pLGkuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWo/dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTp1bmRlZmluZWR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGkuZmluZC5DTEFTUz1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp1bmRlZmluZWR9LGc9W10sZD1bXSwobi5xc2E9US50ZXN0KHQucXVlcnlTZWxlY3RvckFsbCkpJiYodXQoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8ZC5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxkLnB1c2goIjpjaGVja2VkIil9KSx1dChmdW5jdGlvbihlKXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7bi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxlLmFwcGVuZENoaWxkKG4pLnNldEF0dHJpYnV0ZSgidCIsIiIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3RePScnXSIpLmxlbmd0aCYmZC5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGQucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxkLnB1c2goIiwuKjoiKX0pKSwobi5tYXRjaGVzU2VsZWN0b3I9US50ZXN0KG09Zi53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGYubW96TWF0Y2hlc1NlbGVjdG9yfHxmLm9NYXRjaGVzU2VsZWN0b3J8fGYubXNNYXRjaGVzU2VsZWN0b3IpKSYmdXQoZnVuY3Rpb24oZSl7bi5kaXNjb25uZWN0ZWRNYXRjaD1tLmNhbGwoZSwiZGl2IiksbS5jYWxsKGUsIltzIT0nJ106eCIpLGcucHVzaCgiIT0iLEkpfSksZD1kLmxlbmd0aCYmUmVnRXhwKGQuam9pbigifCIpKSxnPWcubGVuZ3RoJiZSZWdFeHAoZy5qb2luKCJ8IikpLHk9US50ZXN0KGYuY29udGFpbnMpfHxmLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sUz1mLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUscil7aWYoZT09PXIpcmV0dXJuIEU9ITAsMDt2YXIgaT1yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpO3JldHVybiBpPzEmaXx8IW4uc29ydERldGFjaGVkJiZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09aT9lPT09dHx8eShiLGUpPy0xOnI9PT10fHx5KGIscik/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLHIpOjA6NCZpPy0xOjE6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxfTpmdW5jdGlvbihlLG4pe3ZhciByLGk9MCxvPWUucGFyZW50Tm9kZSxzPW4ucGFyZW50Tm9kZSxhPVtlXSx1PVtuXTtpZihlPT09bilyZXR1cm4gRT0hMCwwO2lmKCFvfHwhcylyZXR1cm4gZT09PXQ/LTE6bj09PXQ/MTpvPy0xOnM/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLG4pOjA7aWYobz09PXMpcmV0dXJuIGN0KGUsbik7cj1lO3doaWxlKHI9ci5wYXJlbnROb2RlKWEudW5zaGlmdChyKTtyPW47d2hpbGUocj1yLnBhcmVudE5vZGUpdS51bnNoaWZ0KHIpO3doaWxlKGFbaV09PT11W2ldKWkrKztyZXR1cm4gaT9jdChhW2ldLHVbaV0pOmFbaV09PT1iPy0xOnVbaV09PT1iPzE6MH0sdCk6cH0sb3QubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBvdChlLG51bGwsbnVsbCx0KX0sb3QubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpLHQ9dC5yZXBsYWNlKFksIj0nJDEnXSIpLCEoIW4ubWF0Y2hlc1NlbGVjdG9yfHwhaHx8ZyYmZy50ZXN0KHQpfHxkJiZkLnRlc3QodCkpKXRyeXt2YXIgcj1tLmNhbGwoZSx0KTtpZihyfHxuLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIHJ9Y2F0Y2goaSl7fXJldHVybiBvdCh0LHAsbnVsbCxbZV0pLmxlbmd0aD4wfSxvdC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx5KGUsdCl9LG90LmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSk7dmFyIHI9aS5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0sbz1yJiZBLmNhbGwoaS5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/cihlLHQsIWgpOnVuZGVmaW5lZDtyZXR1cm4gbz09PXVuZGVmaW5lZD9uLmF0dHJpYnV0ZXN8fCFoP2UuZ2V0QXR0cmlidXRlKHQpOihvPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJm8uc3BlY2lmaWVkP28udmFsdWU6bnVsbDpvfSxvdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sb3QudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxyPVtdLGk9MCxvPTA7aWYoRT0hbi5kZXRlY3REdXBsaWNhdGVzLGw9IW4uc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoUyksRSl7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPXIucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKHJbaV0sMSl9cmV0dXJuIGV9LG89b3QuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9byhlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9byh0KTtyZXR1cm4gbn0saT1vdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzphdCxtYXRjaDpKLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UobnQscnQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKG50LHJ0KSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8b3QuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmb3QuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNV0mJmVbMl07cmV0dXJuIEouQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dW5kZWZpbmVkP2VbMl09ZVs0XTpuJiZWLnRlc3QobikmJih0PWd0KG4sITApKSYmKHQ9bi5pbmRleE9mKCIpIixuLmxlbmd0aC10KS1uLmxlbmd0aCkmJihlWzBdPWVbMF0uc2xpY2UoMCx0KSxlWzJdPW4uc2xpY2UoMCx0KSksZS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9Q1tlKyIgIl07cmV0dXJuIHR8fCh0PVJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJkMoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1qJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vdC5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/IiE9Ij09PXQ6dD8oaSs9IiIsIj0iPT09dD9pPT09bjoiIT0iPT09dD9pIT09bjoiXj0iPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOiIqPSI9PT10P24mJmkuaW5kZXhPZihuKT4tMToiJD0iPT09dD9uJiZpLnNsaWNlKC1uLmxlbmd0aCk9PT1uOiJ+PSI9PT10PygiICIraSsiICIpLmluZGV4T2Yobik+LTE6Inw9Ij09PXQ/aT09PW58fGkuc2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Im50aCIhPT1lLnNsaWNlKDAsMykscz0ibGFzdCIhPT1lLnNsaWNlKC00KSxhPSJvZi10eXBlIj09PXQ7cmV0dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMscCxmLGgsZCxnPW8hPT1zPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIsbT10LnBhcmVudE5vZGUseT1hJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkseD0hdSYmIWE7aWYobSl7aWYobyl7d2hpbGUoZyl7cD10O3doaWxlKHA9cFtnXSlpZihhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7ZD1nPSJvbmx5Ij09PWUmJiFkJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGQ9W3M/bS5maXJzdENoaWxkOm0ubGFzdENoaWxkXSxzJiZ4KXtjPW1bdl18fChtW3ZdPXt9KSxsPWNbZV18fFtdLGg9bFswXT09PXcmJmxbMV0sZj1sWzBdPT09dyYmbFsyXSxwPWgmJm0uY2hpbGROb2Rlc1toXTt3aGlsZShwPSsraCYmcCYmcFtnXXx8KGY9aD0wKXx8ZC5wb3AoKSlpZigxPT09cC5ub2RlVHlwZSYmKytmJiZwPT09dCl7Y1tlXT1bdyxoLGZdO2JyZWFrfX1lbHNlIGlmKHgmJihsPSh0W3ZdfHwodFt2XT17fSkpW2VdKSYmbFswXT09PXcpZj1sWzFdO2Vsc2Ugd2hpbGUocD0rK2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoKGE/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09cC5ub2RlVHlwZSkmJisrZiYmKHgmJigocFt2XXx8KHBbdl09e30pKVtlXT1bdyxmXSkscD09PXQpKWJyZWFrO3JldHVybiBmLT1pLGY9PT1yfHwwPT09ZiVyJiZmL3I+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnBzZXVkb3NbZV18fGkuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiByW3ZdP3IodCk6ci5sZW5ndGg+MT8obj1bZSxlLCIiLHRdLGkuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2F0KGZ1bmN0aW9uKGUsbil7dmFyIGksbz1yKGUsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0paT1QLmNhbGwoZSxvW3NdKSxlW2ldPSEobltpXT1vW3NdKX0pOmZ1bmN0aW9uKGUpe3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6YXQoZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPWEoZS5yZXBsYWNlKHosIiQxIikpO3JldHVybiByW3ZdP2F0KGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLHM9cihlLG51bGwsaSxbXSksYT1lLmxlbmd0aDt3aGlsZShhLS0pKG89c1thXSkmJihlW2FdPSEodFthXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLCFuLnBvcCgpfX0pLGhhczphdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG90KGUsdCkubGVuZ3RoPjB9fSksY29udGFpbnM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8byh0KSkuaW5kZXhPZihlKT4tMX19KSxsYW5nOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBHLnRlc3QoZXx8IiIpfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIitlKSxlPWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXt2YXIgbjtkbyBpZihuPWg/dC5sYW5nOnQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHx0LmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBuPW4udG9Mb3dlckNhc2UoKSxuPT09ZXx8MD09PW4uaW5kZXhPZihlKyItIik7d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zn0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1wLmFjdGl2ZUVsZW1lbnQmJighcC5oYXNGb2N1c3x8cC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVOYW1lPiJAInx8Mz09PWUubm9kZVR5cGV8fDQ9PT1lLm5vZGVUeXBlKXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWkucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBldC50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gWi50ZXN0KGUubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYiYnV0dG9uIj09PWUudHlwZXx8ImJ1dHRvbiI9PT10fSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHx0LnRvTG93ZXJDYXNlKCk9PT1lLnR5cGUpfSxmaXJzdDpodChmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aHQoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmh0KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bMD5uP24rdDpuXX0pLGV2ZW46aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0wO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MTtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDt0PisrcjspZS5wdXNoKHIpO3JldHVybiBlfSl9fSxpLnBzZXVkb3MubnRoPWkucHNldWRvcy5lcTtmb3IodCBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlpLnBzZXVkb3NbdF09cHQodCk7Zm9yKHQgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlpLnBzZXVkb3NbdF09ZnQodCk7ZnVuY3Rpb24gZHQoKXt9ZHQucHJvdG90eXBlPWkuZmlsdGVycz1pLnBzZXVkb3MsaS5zZXRGaWx0ZXJzPW5ldyBkdDtmdW5jdGlvbiBndChlLHQpe3ZhciBuLHIsbyxzLGEsdSxsLGM9a1tlKyIgIl07aWYoYylyZXR1cm4gdD8wOmMuc2xpY2UoMCk7YT1lLHU9W10sbD1pLnByZUZpbHRlcjt3aGlsZShhKXsoIW58fChyPV8uZXhlYyhhKSkpJiYociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHUucHVzaChvPVtdKSksbj0hMSwocj1YLmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKHosIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2ZvcihzIGluIGkuZmlsdGVyKSEocj1KW3NdLmV4ZWMoYSkpfHxsW3NdJiYhKHI9bFtzXShyKSl8fChuPXIuc2hpZnQoKSxvLnB1c2goe3ZhbHVlOm4sdHlwZTpzLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/b3QuZXJyb3IoZSk6ayhlLHUpLnNsaWNlKDApfWZ1bmN0aW9uIG10KGUpe3ZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO2Zvcig7bj50O3QrKylyKz1lW3RdLnZhbHVlO3JldHVybiByfWZ1bmN0aW9uIHl0KGUsdCxuKXt2YXIgaT10LmRpcixvPW4mJiJwYXJlbnROb2RlIj09PWkscz1UKys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLHIpe3doaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylyZXR1cm4gZSh0LG4scil9OmZ1bmN0aW9uKHQsbixhKXt2YXIgdSxsLGMscD13KyIgIitzO2lmKGEpe3doaWxlKHQ9dFtpXSlpZigoMT09PXQubm9kZVR5cGV8fG8pJiZlKHQsbixhKSlyZXR1cm4hMH1lbHNlIHdoaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylpZihjPXRbdl18fCh0W3ZdPXt9KSwobD1jW2ldKSYmbFswXT09PXApe2lmKCh1PWxbMV0pPT09ITB8fHU9PT1yKXJldHVybiB1PT09ITB9ZWxzZSBpZihsPWNbaV09W3BdLGxbMV09ZSh0LG4sYSl8fHIsbFsxXT09PSEwKXJldHVybiEwfX1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiB4dChlLHQsbixyLGkpe3ZhciBvLHM9W10sYT0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O2Zvcig7dT5hO2ErKykobz1lW2FdKSYmKCFufHxuKG8scixpKSkmJihzLnB1c2gobyksbCYmdC5wdXNoKGEpKTtyZXR1cm4gc31mdW5jdGlvbiBidChlLHQsbixyLGksbyl7cmV0dXJuIHImJiFyW3ZdJiYocj1idChyKSksaSYmIWlbdl0mJihpPWJ0KGksbykpLGF0KGZ1bmN0aW9uKG8scyxhLHUpe3ZhciBsLGMscCxmPVtdLGg9W10sZD1zLmxlbmd0aCxnPW98fEN0KHR8fCIqIixhLm5vZGVUeXBlP1thXTphLFtdKSxtPSFlfHwhbyYmdD9nOnh0KGcsZixlLGEsdSkseT1uP2l8fChvP2U6ZHx8cik/W106czptO2lmKG4mJm4obSx5LGEsdSkscil7bD14dCh5LGgpLHIobCxbXSxhLHUpLGM9bC5sZW5ndGg7d2hpbGUoYy0tKShwPWxbY10pJiYoeVtoW2NdXT0hKG1baFtjXV09cCkpfWlmKG8pe2lmKGl8fGUpe2lmKGkpe2w9W10sYz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJmwucHVzaChtW2NdPXApO2kobnVsbCx5PVtdLGwsdSl9Yz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJihsPWk/UC5jYWxsKG8scCk6ZltjXSk+LTEmJihvW2xdPSEoc1tsXT1wKSl9fWVsc2UgeT14dCh5PT09cz95LnNwbGljZShkLHkubGVuZ3RoKTp5KSxpP2kobnVsbCxzLHksdSk6Ty5hcHBseShzLHkpfSl9ZnVuY3Rpb24gd3QoZSl7dmFyIHQsbixyLG89ZS5sZW5ndGgscz1pLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1zfHxpLnJlbGF0aXZlWyIgIl0sbD1zPzE6MCxjPXl0KGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0sYSwhMCkscD15dChmdW5jdGlvbihlKXtyZXR1cm4gUC5jYWxsKHQsZSk+LTF9LGEsITApLGY9W2Z1bmN0aW9uKGUsbixyKXtyZXR1cm4hcyYmKHJ8fG4hPT11KXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOnAoZSxuLHIpKX1dO2Zvcig7bz5sO2wrKylpZihuPWkucmVsYXRpdmVbZVtsXS50eXBlXSlmPVt5dCh2dChmKSxuKV07ZWxzZXtpZihuPWkuZmlsdGVyW2VbbF0udHlwZV0uYXBwbHkobnVsbCxlW2xdLm1hdGNoZXMpLG5bdl0pe2ZvcihyPSsrbDtvPnI7cisrKWlmKGkucmVsYXRpdmVbZVtyXS50eXBlXSlicmVhaztyZXR1cm4gYnQobD4xJiZ2dChmKSxsPjEmJm10KGUuc2xpY2UoMCxsLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtsLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoeiwiJDEiKSxuLHI+bCYmd3QoZS5zbGljZShsLHIpKSxvPnImJnd0KGU9ZS5zbGljZShyKSksbz5yJiZtdChlKSl9Zi5wdXNoKG4pfXJldHVybiB2dChmKX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuPTAsbz10Lmxlbmd0aD4wLHM9ZS5sZW5ndGg+MCxhPWZ1bmN0aW9uKGEsbCxjLGYsaCl7dmFyIGQsZyxtLHk9W10sdj0wLHg9IjAiLGI9YSYmW10sVD1udWxsIT1oLEM9dSxrPWF8fHMmJmkuZmluZC5UQUcoIioiLGgmJmwucGFyZW50Tm9kZXx8bCksTj13Kz1udWxsPT1DPzE6TWF0aC5yYW5kb20oKXx8LjE7Zm9yKFQmJih1PWwhPT1wJiZsLHI9bik7bnVsbCE9KGQ9a1t4XSk7eCsrKXtpZihzJiZkKXtnPTA7d2hpbGUobT1lW2crK10paWYobShkLGwsYykpe2YucHVzaChkKTticmVha31UJiYodz1OLHI9KytuKX1vJiYoKGQ9IW0mJmQpJiZ2LS0sYSYmYi5wdXNoKGQpKX1pZih2Kz14LG8mJnghPT12KXtnPTA7d2hpbGUobT10W2crK10pbShiLHksbCxjKTtpZihhKXtpZih2PjApd2hpbGUoeC0tKWJbeF18fHlbeF18fCh5W3hdPXEuY2FsbChmKSk7eT14dCh5KX1PLmFwcGx5KGYseSksVCYmIWEmJnkubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb3QudW5pcXVlU29ydChmKX1yZXR1cm4gVCYmKHc9Tix1PUMpLGJ9O3JldHVybiBvP2F0KGEpOmF9YT1vdC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLG89TltlKyIgIl07aWYoIW8pe3R8fCh0PWd0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlvPXd0KHRbbl0pLG9bdl0/ci5wdXNoKG8pOmkucHVzaChvKTtvPU4oZSxUdChpLHIpKX1yZXR1cm4gb307ZnVuY3Rpb24gQ3QoZSx0LG4pe3ZhciByPTAsaT10Lmxlbmd0aDtmb3IoO2k+cjtyKyspb3QoZSx0W3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIGt0KGUsdCxyLG8pe3ZhciBzLHUsbCxjLHAsZj1ndChlKTtpZighbyYmMT09PWYubGVuZ3RoKXtpZih1PWZbMF09ZlswXS5zbGljZSgwKSx1Lmxlbmd0aD4yJiYiSUQiPT09KGw9dVswXSkudHlwZSYmbi5nZXRCeUlkJiY5PT09dC5ub2RlVHlwZSYmaCYmaS5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZih0PShpLmZpbmQuSUQobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLHQpfHxbXSlbMF0sIXQpcmV0dXJuIHI7ZT1lLnNsaWNlKHUuc2hpZnQoKS52YWx1ZS5sZW5ndGgpfXM9Si5uZWVkc0NvbnRleHQudGVzdChlKT8wOnUubGVuZ3RoO3doaWxlKHMtLSl7aWYobD11W3NdLGkucmVsYXRpdmVbYz1sLnR5cGVdKWJyZWFrO2lmKChwPWkuZmluZFtjXSkmJihvPXAobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLFUudGVzdCh1WzBdLnR5cGUpJiZ0LnBhcmVudE5vZGV8fHQpKSl7aWYodS5zcGxpY2UocywxKSxlPW8ubGVuZ3RoJiZtdCh1KSwhZSlyZXR1cm4gTy5hcHBseShyLG8pLHI7YnJlYWt9fX1yZXR1cm4gYShlLGYpKG8sdCwhaCxyLFUudGVzdChlKSkscn1uLnNvcnRTdGFibGU9di5zcGxpdCgiIikuc29ydChTKS5qb2luKCIiKT09PXYsbi5kZXRlY3REdXBsaWNhdGVzPUUsYygpLG4uc29ydERldGFjaGVkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocC5jcmVhdGVFbGVtZW50KCJkaXYiKSl9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxsdCgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP3VuZGVmaW5lZDplLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksbi5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxsdCgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT91bmRlZmluZWQ6ZS5kZWZhdWx0VmFsdWV9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8bHQoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIG4/dW5kZWZpbmVkOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6ZVt0XT09PSEwP3QudG9Mb3dlckNhc2UoKTpudWxsfSkseC5maW5kPW90LHguZXhwcj1vdC5zZWxlY3RvcnMseC5leHByWyI6Il09eC5leHByLnBzZXVkb3MseC51bmlxdWU9b3QudW5pcXVlU29ydCx4LnRleHQ9b3QuZ2V0VGV4dCx4LmlzWE1MRG9jPW90LmlzWE1MLHguY29udGFpbnM9b3QuY29udGFpbnN9KGUpO3ZhciBEPXt9O2Z1bmN0aW9uIEEoZSl7dmFyIHQ9RFtlXT17fTtyZXR1cm4geC5lYWNoKGUubWF0Y2godyl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9eC5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/RFtlXXx8QShlKTp4LmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsaSxvLHMsYT1bXSx1PSFlLm9uY2UmJltdLGw9ZnVuY3Rpb24ocCl7Zm9yKHQ9ZS5tZW1vcnkmJnAsbj0hMCxzPWl8fDAsaT0wLG89YS5sZW5ndGgscj0hMDthJiZvPnM7cysrKWlmKGFbc10uYXBwbHkocFswXSxwWzFdKT09PSExJiZlLnN0b3BPbkZhbHNlKXt0PSExO2JyZWFrfXI9ITEsYSYmKHU/dS5sZW5ndGgmJmwodS5zaGlmdCgpKTp0P2E9W106Yy5kaXNhYmxlKCkpfSxjPXthZGQ6ZnVuY3Rpb24oKXtpZihhKXt2YXIgbj1hLmxlbmd0aDsoZnVuY3Rpb24gcyh0KXt4LmVhY2godCxmdW5jdGlvbih0LG4pe3ZhciByPXgudHlwZShuKTsiZnVuY3Rpb24iPT09cj9lLnVuaXF1ZSYmYy5oYXMobil8fGEucHVzaChuKTpuJiZuLmxlbmd0aCYmInN0cmluZyIhPT1yJiZzKG4pfSl9KShhcmd1bWVudHMpLHI/bz1hLmxlbmd0aDp0JiYoaT1uLGwodCkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmeC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXguaW5BcnJheSh0LGEsbikpPi0xKWEuc3BsaWNlKG4sMSksciYmKG8+PW4mJm8tLSxzPj1uJiZzLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3guaW5BcnJheShlLGEpPi0xOiEoIWF8fCFhLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGE9W10sbz0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PXQ9dW5kZWZpbmVkLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWF9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT11bmRlZmluZWQsdHx8Yy5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIXV9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWF8fG4mJiF1fHwodD10fHxbXSx0PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLHI/dS5wdXNoKHQpOmwodCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW59fTtyZXR1cm4gY30seC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0PVtbInJlc29sdmUiLCJkb25lIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLHguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLHguQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLG49InBlbmRpbmciLHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBpLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4geC5EZWZlcnJlZChmdW5jdGlvbihuKXt4LmVhY2godCxmdW5jdGlvbih0LG8pe3ZhciBzPW9bMF0sYT14LmlzRnVuY3Rpb24oZVt0XSkmJmVbdF07aVtvWzFdXShmdW5jdGlvbigpe3ZhciBlPWEmJmEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhuLm5vdGlmeSk6bltzKyJXaXRoIl0odGhpcz09PXI/bi5wcm9taXNlKCk6dGhpcyxhP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/eC5leHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIudGhlbix4LmVhY2godCxmdW5jdGlvbihlLG8pe3ZhciBzPW9bMl0sYT1vWzNdO3Jbb1sxXV09cy5hZGQsYSYmcy5hZGQoZnVuY3Rpb24oKXtuPWF9LHRbMV5lXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9jayksaVtvWzBdXT1mdW5jdGlvbigpe3JldHVybiBpW29bMF0rIldpdGgiXSh0aGlzPT09aT9yOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxpW29bMF0rIldpdGgiXT1zLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWQuY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT0xIT09cnx8ZSYmeC5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLG89MT09PWk/ZTp4LkRlZmVycmVkKCkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTpyLG49PT1hP28ubm90aWZ5V2l0aCh0LG4pOi0taXx8by5yZXNvbHZlV2l0aCh0LG4pfX0sYSx1LGw7aWYocj4xKWZvcihhPUFycmF5KHIpLHU9QXJyYXkociksbD1BcnJheShyKTtyPnQ7dCsrKW5bdF0mJnguaXNGdW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgpLmRvbmUocyh0LGwsbikpLmZhaWwoby5yZWplY3QpLnByb2dyZXNzKHModCx1LGEpKTotLWk7cmV0dXJuIGl8fG8ucmVzb2x2ZVdpdGgobCxuKSxvLnByb21pc2UoKX19KSx4LnN1cHBvcnQ9ZnVuY3Rpb24odCl7dmFyIG49by5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHI9by5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT1vLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHM9by5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxhPXMuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7cmV0dXJuIG4udHlwZT8obi50eXBlPSJjaGVja2JveCIsdC5jaGVja09uPSIiIT09bi52YWx1ZSx0Lm9wdFNlbGVjdGVkPWEuc2VsZWN0ZWQsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSEwLHQuYm94U2l6aW5nUmVsaWFibGU9ITAsdC5waXhlbFBvc2l0aW9uPSExLG4uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW4uY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hYS5kaXNhYmxlZCxuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxuLnZhbHVlPSJ0IixuLnR5cGU9InJhZGlvIix0LnJhZGlvVmFsdWU9InQiPT09bi52YWx1ZSxuLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsInQiKSxuLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxyLmFwcGVuZENoaWxkKG4pLHQuY2hlY2tDbG9uZT1yLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmZvY3VzaW5CdWJibGVzPSJvbmZvY3VzaW4iaW4gZSxpLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsaS5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1pLnN0eWxlLmJhY2tncm91bmRDbGlwLHgoZnVuY3Rpb24oKXt2YXIgbixyLHM9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveCIsYT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07YSYmKG49by5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixhLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGkpLGkuaW5uZXJIVE1MPSIiLGkuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSUiLHguc3dhcChhLG51bGwhPWEuc3R5bGUuem9vbT97em9vbToxfTp7fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1pLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1pLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1pLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxlLm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGkuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksYS5yZW1vdmVDaGlsZChuKSl9KSx0KTp0fSh7fSk7dmFyIEwscSxIPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gRigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz14LmV4cGFuZG8rTWF0aC5yYW5kb20oKX1GLnVpZD0xLEYuYWNjZXB0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZT8xPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGU6ITB9LEYucHJvdG90eXBlPXtrZXk6ZnVuY3Rpb24oZSl7aWYoIUYuYWNjZXB0cyhlKSlyZXR1cm4gMDt2YXIgdD17fSxuPWVbdGhpcy5leHBhbmRvXTtpZighbil7bj1GLnVpZCsrO3RyeXt0W3RoaXMuZXhwYW5kb109e3ZhbHVlOm59LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsdCl9Y2F0Y2gocil7dFt0aGlzLmV4cGFuZG9dPW4seC5leHRlbmQoZSx0KX19cmV0dXJuIHRoaXMuY2FjaGVbbl18fCh0aGlzLmNhY2hlW25dPXt9KSxufSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5rZXkoZSksbz10aGlzLmNhY2hlW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgdClvW3RdPW47ZWxzZSBpZih4LmlzRW1wdHlPYmplY3QobykpeC5leHRlbmQodGhpcy5jYWNoZVtpXSx0KTtlbHNlIGZvcihyIGluIHQpb1tyXT10W3JdO3JldHVybiBvfSxnZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNhY2hlW3RoaXMua2V5KGUpXTtyZXR1cm4gdD09PXVuZGVmaW5lZD9uOm5bdF19LGFjY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJiJzdHJpbmciPT10eXBlb2YgdCYmbj09PXVuZGVmaW5lZD8ocj10aGlzLmdldChlLHQpLHIhPT11bmRlZmluZWQ/cjp0aGlzLmdldChlLHguY2FtZWxDYXNlKHQpKSk6KHRoaXMuc2V0KGUsdCxuKSxuIT09dW5kZWZpbmVkP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXMua2V5KGUpLHM9dGhpcy5jYWNoZVtvXTtpZih0PT09dW5kZWZpbmVkKXRoaXMuY2FjaGVbb109e307ZWxzZXt4LmlzQXJyYXkodCk/cj10LmNvbmNhdCh0Lm1hcCh4LmNhbWVsQ2FzZSkpOihpPXguY2FtZWxDYXNlKHQpLHQgaW4gcz9yPVt0LGldOihyPWkscj1yIGluIHM/W3JdOnIubWF0Y2godyl8fFtdKSksbj1yLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHNbcltuXV19fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiF4LmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oZSl7ZVt0aGlzLmV4cGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfX0sTD1uZXcgRixxPW5ldyBGLHguZXh0ZW5kKHthY2NlcHREYXRhOkYuYWNjZXB0cyxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBMLmhhc0RhdGEoZSl8fHEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEwuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0wucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3EucmVtb3ZlKGUsdCl9fSkseC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpc1swXSxvPTAscz1udWxsO2lmKGU9PT11bmRlZmluZWQpe2lmKHRoaXMubGVuZ3RoJiYocz1MLmdldChpKSwxPT09aS5ub2RlVHlwZSYmIXEuZ2V0KGksImhhc0RhdGFBdHRycyIpKSl7Zm9yKG49aS5hdHRyaWJ1dGVzO24ubGVuZ3RoPm87bysrKXI9bltvXS5uYW1lLDA9PT1yLmluZGV4T2YoImRhdGEtIikmJihyPXguY2FtZWxDYXNlKHIuc2xpY2UoNSkpLFAoaSxyLHNbcl0pKTtxLnNldChpLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gc31yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5zZXQodGhpcyxlKX0pOnguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCl7dmFyIG4scj14LmNhbWVsQ2FzZShlKTtpZihpJiZ0PT09dW5kZWZpbmVkKXtpZihuPUwuZ2V0KGksZSksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPUwuZ2V0KGksciksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPVAoaSxyLHVuZGVmaW5lZCksbiE9PXVuZGVmaW5lZClyZXR1cm4gbn1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPUwuZ2V0KHRoaXMscik7TC5zZXQodGhpcyxyLHQpLC0xIT09ZS5pbmRleE9mKCItIikmJm4hPT11bmRlZmluZWQmJkwuc2V0KHRoaXMsZSx0KX0pfSxudWxsLHQsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtMLnJlbW92ZSh0aGlzLGUpfSl9fSk7ZnVuY3Rpb24gUChlLHQsbil7dmFyIHI7aWYobj09PXVuZGVmaW5lZCYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShPLCItJDEiKS50b0xvd2VyQ2FzZSgpLG49ZS5nZXRBdHRyaWJ1dGUociksInN0cmluZyI9PXR5cGVvZiBuKXt0cnl7bj0idHJ1ZSI9PT1uPyEwOiJmYWxzZSI9PT1uPyExOiJudWxsIj09PW4/bnVsbDorbisiIj09PW4/K246SC50ZXN0KG4pP0pTT04ucGFyc2Uobik6bn1jYXRjaChpKXt9TC5zZXQoZSx0LG4pfWVsc2Ugbj11bmRlZmluZWQ7cmV0dXJuIG59eC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gZT8odD0odHx8ImZ4IikrInF1ZXVlIixyPXEuZ2V0KGUsdCksbiYmKCFyfHx4LmlzQXJyYXkobik/cj1xLmFjY2VzcyhlLHQseC5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W10pOnVuZGVmaW5lZH0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj14LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPXguX3F1ZXVlSG9va3MoZSx0KSxzPWZ1bmN0aW9uKCl7eC5kZXF1ZXVlKGUsdCl9OyJpbnByb2dyZXNzIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkmJigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwoZSxzLG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIHEuZ2V0KGUsbil8fHEuYWNjZXNzKGUsbix7ZW1wdHk6eC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7cS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSkseC5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iZngiLG4tLSksbj5hcmd1bWVudHMubGVuZ3RoP3gucXVldWUodGhpc1swXSxlKTp0PT09dW5kZWZpbmVkP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49eC5xdWV1ZSh0aGlzLGUsdCk7eC5fcXVldWVIb29rcyh0aGlzLGUpLCJmeCI9PT1lJiYiaW5wcm9ncmVzcyIhPT1uWzBdJiZ4LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmRlcXVldWUodGhpcyxlKX0pfSxkZWxheTpmdW5jdGlvbihlLHQpe3JldHVybiBlPXguZng/eC5meC5zcGVlZHNbZV18fGU6ZSx0PXR8fCJmeCIsdGhpcy5xdWV1ZSh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9c2V0VGltZW91dCh0LGUpO24uc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChyKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MSxpPXguRGVmZXJyZWQoKSxvPXRoaXMscz10aGlzLmxlbmd0aCxhPWZ1bmN0aW9uKCl7LS1yfHxpLnJlc29sdmVXaXRoKG8sW29dKX07InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9dW5kZWZpbmVkKSxlPWV8fCJmeCI7d2hpbGUocy0tKW49cS5nZXQob1tzXSxlKyJxdWV1ZUhvb2tzIiksbiYmbi5lbXB0eSYmKHIrKyxuLmVtcHR5LmFkZChhKSk7cmV0dXJuIGEoKSxpLnByb21pc2UodCl9fSk7dmFyIFIsTSxXPS9bXHRcclxuXGZdL2csJD0vXHIvZyxCPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2k7eC5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyx4LmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3gucmVtb3ZlQXR0cih0aGlzLGUpfSl9LHByb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyx4LnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3gucHJvcEZpeFtlXXx8ZV19KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1PSJzdHJpbmciPT10eXBlb2YgZSYmZTtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKHUpZm9yKHQ9KGV8fCIiKS5tYXRjaCh3KXx8W107YT5zO3MrKylpZihuPXRoaXNbc10scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFcsIiAiKToiICIpKXtvPTA7d2hpbGUoaT10W28rK10pMD5yLmluZGV4T2YoIiAiK2krIiAiKSYmKHIrPWkrIiAiKTtuLmNsYXNzTmFtZT14LnRyaW0ocil9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8scz0wLGE9dGhpcy5sZW5ndGgsdT0wPT09YXJndW1lbnRzLmxlbmd0aHx8InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpOiIiKSl7bz0wO3doaWxlKGk9dFtvKytdKXdoaWxlKHIuaW5kZXhPZigiICIraSsiICIpPj0wKXI9ci5yZXBsYWNlKCIgIitpKyIgIiwiICIpO24uY2xhc3NOYW1lPWU/eC50cmltKHIpOiIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJiJzdHJpbmciPT09bj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVDbGFzcyhlKTp4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykudG9nZ2xlQ2xhc3MoZS5jYWxsKHRoaXMsbix0aGlzLmNsYXNzTmFtZSx0KSx0KX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCJzdHJpbmciPT09bil7dmFyIHQsaT0wLG89eCh0aGlzKSxzPWUubWF0Y2godyl8fFtdO3doaWxlKHQ9c1tpKytdKW8uaGFzQ2xhc3ModCk/by5yZW1vdmVDbGFzcyh0KTpvLmFkZENsYXNzKHQpfWVsc2Uobj09PXJ8fCJib29sZWFuIj09PW4pJiYodGhpcy5jbGFzc05hbWUmJnEuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8ZT09PSExPyIiOnEuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PSIgIitlKyIgIixuPTAscj10aGlzLmxlbmd0aDtmb3IoO3I+bjtuKyspaWYoMT09PXRoaXNbbl0ubm9kZVR5cGUmJigiICIrdGhpc1tuXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFcsIiAiKS5pbmRleE9mKHQpPj0wKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj14LmlzRnVuY3Rpb24oZSksdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciBpOzE9PT10aGlzLm5vZGVUeXBlJiYoaT1yP2UuY2FsbCh0aGlzLG4seCh0aGlzKS52YWwoKSk6ZSxudWxsPT1pP2k9IiI6Im51bWJlciI9PXR5cGVvZiBpP2krPSIiOnguaXNBcnJheShpKSYmKGk9eC5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLHQ9eC52YWxIb29rc1t0aGlzLnR5cGVdfHx4LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sdCYmInNldCJpbiB0JiZ0LnNldCh0aGlzLGksInZhbHVlIikhPT11bmRlZmluZWR8fCh0aGlzLnZhbHVlPWkpKX0pO2lmKGkpcmV0dXJuIHQ9eC52YWxIb29rc1tpLnR5cGVdfHx4LnZhbEhvb2tzW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sdCYmImdldCJpbiB0JiYobj10LmdldChpLCJ2YWx1ZSIpKSE9PXVuZGVmaW5lZD9uOihuPWkudmFsdWUsInN0cmluZyI9PXR5cGVvZiBuP24ucmVwbGFjZSgkLCIiKTpudWxsPT1uPyIiOm4pfX19KSx4LmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy52YWx1ZTtyZXR1cm4hdHx8dC5zcGVjaWZpZWQ/ZS52YWx1ZTplLnRleHR9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5vcHRpb25zLGk9ZS5zZWxlY3RlZEluZGV4LG89InNlbGVjdC1vbmUiPT09ZS50eXBlfHwwPmkscz1vP251bGw6W10sYT1vP2krMTpyLmxlbmd0aCx1PTA+aT9hOm8/aTowO2Zvcig7YT51O3UrKylpZihuPXJbdV0sISghbi5zZWxlY3RlZCYmdSE9PWl8fCh4LnN1cHBvcnQub3B0RGlzYWJsZWQ/bi5kaXNhYmxlZDpudWxsIT09bi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpfHxuLnBhcmVudE5vZGUuZGlzYWJsZWQmJngubm9kZU5hbWUobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD14KG4pLnZhbCgpLG8pcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89eC5tYWtlQXJyYXkodCkscz1pLmxlbmd0aDt3aGlsZShzLS0pcj1pW3NdLChyLnNlbGVjdGVkPXguaW5BcnJheSh4KHIpLnZhbCgpLG8pPj0wKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19LGF0dHI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLG8scz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIHR5cGVvZiBlLmdldEF0dHJpYnV0ZT09PXI/eC5wcm9wKGUsdCxuKTooMT09PXMmJnguaXNYTUxEb2MoZSl8fCh0PXQudG9Mb3dlckNhc2UoKSxpPXguYXR0ckhvb2tzW3RdfHwoeC5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9NOlIpKSxuPT09dW5kZWZpbmVkP2kmJiJnZXQiaW4gaSYmbnVsbCE9PShvPWkuZ2V0KGUsdCkpP286KG89eC5maW5kLmF0dHIoZSx0KSxudWxsPT1vP3VuZGVmaW5lZDpvKTpudWxsIT09bj9pJiYic2V0ImluIGkmJihvPWkuc2V0KGUsbix0KSkhPT11bmRlZmluZWQ/bzooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTooeC5yZW1vdmVBdHRyKGUsdCksdW5kZWZpbmVkKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9MCxvPXQmJnQubWF0Y2godyk7aWYobyYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1vW2krK10pcj14LnByb3BGaXhbbl18fG4seC5leHByLm1hdGNoLmJvb2wudGVzdChuKSYmKGVbcl09ITEpLGUucmVtb3ZlQXR0cmlidXRlKG4pfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCF4LnN1cHBvcnQucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJngubm9kZU5hbWUoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIG89MSE9PXN8fCF4LmlzWE1MRG9jKGUpLG8mJih0PXgucHJvcEZpeFt0XXx8dCxpPXgucHJvcEhvb2tzW3RdKSxuIT09dW5kZWZpbmVkP2kmJiJzZXQiaW4gaSYmKHI9aS5zZXQoZSxuLHQpKSE9PXVuZGVmaW5lZD9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fEIudGVzdChlLm5vZGVOYW1lKXx8ZS5ocmVmP2UudGFiSW5kZXg6LTF9fX19KSxNPXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PT09ITE/eC5yZW1vdmVBdHRyKGUsbik6ZS5zZXRBdHRyaWJ1dGUobixuKSxufX0seC5lYWNoKHguZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGUsdCl7dmFyIG49eC5leHByLmF0dHJIYW5kbGVbdF18fHguZmluZC5hdHRyO3guZXhwci5hdHRySGFuZGxlW3RdPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT14LmV4cHIuYXR0ckhhbmRsZVt0XSxvPXI/dW5kZWZpbmVkOih4LmV4cHIuYXR0ckhhbmRsZVt0XT11bmRlZmluZWQpIT1uKGUsdCxyKT90LnRvTG93ZXJDYXNlKCk6bnVsbDtyZXR1cm4geC5leHByLmF0dHJIYW5kbGVbdF09aSxvfX0pLHguc3VwcG9ydC5vcHRTZWxlY3RlZHx8KHgucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9fSkseC5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXt4LnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSkseC5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7eC52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguaXNBcnJheSh0KT9lLmNoZWNrZWQ9eC5pbkFycmF5KHgoZSkudmFsKCksdCk+PTA6dW5kZWZpbmVkfX0seC5zdXBwb3J0LmNoZWNrT258fCh4LnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSk7dmFyIEk9L15rZXkvLHo9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLF89L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFg9L14oW14uXSopKD86XC4oLispfCkkLztmdW5jdGlvbiBVKCl7cmV0dXJuITB9ZnVuY3Rpb24gWSgpe3JldHVybiExfWZ1bmN0aW9uIFYoKXt0cnl7cmV0dXJuIG8uYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fXguZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oZSx0LG4saSxvKXt2YXIgcyxhLHUsbCxjLHAsZixoLGQsZyxtLHk9cS5nZXQoZSk7aWYoeSl7bi5oYW5kbGVyJiYocz1uLG49cy5oYW5kbGVyLG89cy5zZWxlY3Rvciksbi5ndWlkfHwobi5ndWlkPXguZ3VpZCsrKSwobD15LmV2ZW50cyl8fChsPXkuZXZlbnRzPXt9KSwoYT15LmhhbmRsZSl8fChhPXkuaGFuZGxlPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgeD09PXJ8fGUmJnguZXZlbnQudHJpZ2dlcmVkPT09ZS50eXBlP3VuZGVmaW5lZDp4LmV2ZW50LmRpc3BhdGNoLmFwcGx5KGEuZWxlbSxhcmd1bWVudHMpfSxhLmVsZW09ZSksdD0odHx8IiIpLm1hdGNoKHcpfHxbIiJdLGM9dC5sZW5ndGg7d2hpbGUoYy0tKXU9WC5leGVjKHRbY10pfHxbXSxkPW09dVsxXSxnPSh1WzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCYmKGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShvP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXguZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6bSxkYXRhOmksaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOm8sbmVlZHNDb250ZXh0Om8mJnguZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChvKSxuYW1lc3BhY2U6Zy5qb2luKCIuIil9LHMpLChoPWxbZF0pfHwoaD1sW2RdPVtdLGguZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJmYuc2V0dXAuY2FsbChlLGksZyxhKSE9PSExfHxlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcihkLGEsITEpKSxmLmFkZCYmKGYuYWRkLmNhbGwoZSxwKSxwLmhhbmRsZXIuZ3VpZHx8KHAuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLG8/aC5zcGxpY2UoaC5kZWxlZ2F0ZUNvdW50KyssMCxwKTpoLnB1c2gocCkseC5ldmVudC5nbG9iYWxbZF09ITApO2U9bnVsbH19LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHMsYSx1LGwsYyxwLGYsaCxkLGcsbT1xLmhhc0RhdGEoZSkmJnEuZ2V0KGUpO2lmKG0mJih1PW0uZXZlbnRzKSl7dD0odHx8IiIpLm1hdGNoKHcpfHxbIiJdLGw9dC5sZW5ndGg7d2hpbGUobC0tKWlmKGE9WC5leGVjKHRbbF0pfHxbXSxoPWc9YVsxXSxkPShhWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksaCl7cD14LmV2ZW50LnNwZWNpYWxbaF18fHt9LGg9KHI/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGgsZj11W2hdfHxbXSxhPWFbMl0mJlJlZ0V4cCgiKF58XFwuKSIrZC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxzPW89Zi5sZW5ndGg7d2hpbGUoby0tKWM9ZltvXSwhaSYmZyE9PWMub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWMuZ3VpZHx8YSYmIWEudGVzdChjLm5hbWVzcGFjZSl8fHImJnIhPT1jLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFjLnNlbGVjdG9yKXx8KGYuc3BsaWNlKG8sMSksYy5zZWxlY3RvciYmZi5kZWxlZ2F0ZUNvdW50LS0scC5yZW1vdmUmJnAucmVtb3ZlLmNhbGwoZSxjKSk7cyYmIWYubGVuZ3RoJiYocC50ZWFyZG93biYmcC50ZWFyZG93bi5jYWxsKGUsZCxtLmhhbmRsZSkhPT0hMXx8eC5yZW1vdmVFdmVudChlLGgsbS5oYW5kbGUpLGRlbGV0ZSB1W2hdKX1lbHNlIGZvcihoIGluIHUpeC5ldmVudC5yZW1vdmUoZSxoK3RbbF0sbixyLCEwKTt4LmlzRW1wdHlPYmplY3QodSkmJihkZWxldGUgbS5oYW5kbGUscS5yZW1vdmUoZSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbih0LG4scixpKXt2YXIgcyxhLHUsbCxjLHAsZixoPVtyfHxvXSxkPXkuY2FsbCh0LCJ0eXBlIik/dC50eXBlOnQsZz15LmNhbGwodCwibmFtZXNwYWNlIik/dC5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihhPXU9cj1yfHxvLDMhPT1yLm5vZGVUeXBlJiY4IT09ci5ub2RlVHlwZSYmIV8udGVzdChkK3guZXZlbnQudHJpZ2dlcmVkKSYmKGQuaW5kZXhPZigiLiIpPj0wJiYoZz1kLnNwbGl0KCIuIiksZD1nLnNoaWZ0KCksZy5zb3J0KCkpLGM9MD5kLmluZGV4T2YoIjoiKSYmIm9uIitkLHQ9dFt4LmV4cGFuZG9dP3Q6bmV3IHguRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPWk/MjozLHQubmFtZXNwYWNlPWcuam9pbigiLiIpLHQubmFtZXNwYWNlX3JlPXQubmFtZXNwYWNlP1JlZ0V4cCgiKF58XFwuKSIrZy5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLHQucmVzdWx0PXVuZGVmaW5lZCx0LnRhcmdldHx8KHQudGFyZ2V0PXIpLG49bnVsbD09bj9bdF06eC5tYWtlQXJyYXkobixbdF0pLGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxpfHwhZi50cmlnZ2VyfHxmLnRyaWdnZXIuYXBwbHkocixuKSE9PSExKSl7aWYoIWkmJiFmLm5vQnViYmxlJiYheC5pc1dpbmRvdyhyKSl7Zm9yKGw9Zi5kZWxlZ2F0ZVR5cGV8fGQsXy50ZXN0KGwrZCl8fChhPWEucGFyZW50Tm9kZSk7YTthPWEucGFyZW50Tm9kZSloLnB1c2goYSksdT1hO3U9PT0oci5vd25lckRvY3VtZW50fHxvKSYmaC5wdXNoKHUuZGVmYXVsdFZpZXd8fHUucGFyZW50V2luZG93fHxlKX1zPTA7d2hpbGUoKGE9aFtzKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl0LnR5cGU9cz4xP2w6Zi5iaW5kVHlwZXx8ZCxwPShxLmdldChhLCJldmVudHMiKXx8e30pW3QudHlwZV0mJnEuZ2V0KGEsImhhbmRsZSIpLHAmJnAuYXBwbHkoYSxuKSxwPWMmJmFbY10scCYmeC5hY2NlcHREYXRhKGEpJiZwLmFwcGx5JiZwLmFwcGx5KGEsbik9PT0hMSYmdC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0LnR5cGU9ZCxpfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLl9kZWZhdWx0JiZmLl9kZWZhdWx0LmFwcGx5KGgucG9wKCksbikhPT0hMXx8IXguYWNjZXB0RGF0YShyKXx8YyYmeC5pc0Z1bmN0aW9uKHJbZF0pJiYheC5pc1dpbmRvdyhyKSYmKHU9cltjXSx1JiYocltjXT1udWxsKSx4LmV2ZW50LnRyaWdnZXJlZD1kLHJbZF0oKSx4LmV2ZW50LnRyaWdnZXJlZD11bmRlZmluZWQsdSYmKHJbY109dSkpLHQucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZT14LmV2ZW50LmZpeChlKTt2YXIgdCxuLHIsaSxvLHM9W10sYT1kLmNhbGwoYXJndW1lbnRzKSx1PShxLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2UudHlwZV18fFtdLGw9eC5ldmVudC5zcGVjaWFsW2UudHlwZV18fHt9O2lmKGFbMF09ZSxlLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWwucHJlRGlzcGF0Y2h8fGwucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGUpIT09ITEpe3M9eC5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsZSx1KSx0PTA7d2hpbGUoKGk9c1t0KytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7ZS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIWUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWUubmFtZXNwYWNlX3JlfHxlLm5hbWVzcGFjZV9yZS50ZXN0KG8ubmFtZXNwYWNlKSkmJihlLmhhbmRsZU9iaj1vLGUuZGF0YT1vLmRhdGEscj0oKHguZXZlbnQuc3BlY2lhbFtvLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8by5oYW5kbGVyKS5hcHBseShpLmVsZW0sYSksciE9PXVuZGVmaW5lZCYmKGUucmVzdWx0PXIpPT09ITEmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBsLnBvc3REaXNwYXRjaCYmbC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGUpLGUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxzPVtdLGE9dC5kZWxlZ2F0ZUNvdW50LHU9ZS50YXJnZXQ7aWYoYSYmdS5ub2RlVHlwZSYmKCFlLmJ1dHRvbnx8ImNsaWNrIiE9PWUudHlwZSkpZm9yKDt1IT09dGhpczt1PXUucGFyZW50Tm9kZXx8dGhpcylpZih1LmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1lLnR5cGUpe2ZvcihyPVtdLG49MDthPm47bisrKW89dFtuXSxpPW8uc2VsZWN0b3IrIiAiLHJbaV09PT11bmRlZmluZWQmJihyW2ldPW8ubmVlZHNDb250ZXh0P3goaSx0aGlzKS5pbmRleCh1KT49MDp4LmZpbmQoaSx0aGlzLG51bGwsW3VdKS5sZW5ndGgpLHJbaV0mJnIucHVzaChvKTtyLmxlbmd0aCYmcy5wdXNoKHtlbGVtOnUsaGFuZGxlcnM6cn0pfXJldHVybiB0Lmxlbmd0aD5hJiZzLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczp0LnNsaWNlKGEpfSksc30scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWUud2hpY2gmJihlLndoaWNoPW51bGwhPXQuY2hhckNvZGU/dC5jaGFyQ29kZTp0LmtleUNvZGUpLGV9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzPXQuYnV0dG9uO3JldHVybiBudWxsPT1lLnBhZ2VYJiZudWxsIT10LmNsaWVudFgmJihuPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fG8scj1uLmRvY3VtZW50RWxlbWVudCxpPW4uYm9keSxlLnBhZ2VYPXQuY2xpZW50WCsociYmci5zY3JvbGxMZWZ0fHxpJiZpLnNjcm9sbExlZnR8fDApLShyJiZyLmNsaWVudExlZnR8fGkmJmkuY2xpZW50TGVmdHx8MCksZS5wYWdlWT10LmNsaWVudFkrKHImJnIuc2Nyb2xsVG9wfHxpJiZpLnNjcm9sbFRvcHx8MCktKHImJnIuY2xpZW50VG9wfHxpJiZpLmNsaWVudFRvcHx8MCkpLGUud2hpY2h8fHM9PT11bmRlZmluZWR8fChlLndoaWNoPTEmcz8xOjImcz8zOjQmcz8yOjApLGV9fSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt4LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scixpPWUudHlwZSxzPWUsYT10aGlzLmZpeEhvb2tzW2ldO2F8fCh0aGlzLmZpeEhvb2tzW2ldPWE9ei50ZXN0KGkpP3RoaXMubW91c2VIb29rczpJLnRlc3QoaSk/dGhpcy5rZXlIb29rczp7fSkscj1hLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGEucHJvcHMpOnRoaXMucHJvcHMsZT1uZXcgeC5FdmVudChzKSx0PXIubGVuZ3RoO3doaWxlKHQtLSluPXJbdF0sZVtuXT1zW25dO3JldHVybiBlLnRhcmdldHx8KGUudGFyZ2V0PW8pLDM9PT1lLnRhcmdldC5ub2RlVHlwZSYmKGUudGFyZ2V0PWUudGFyZ2V0LnBhcmVudE5vZGUpLGEuZmlsdGVyP2EuZmlsdGVyKGUscyk6ZX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1WKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1WKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnVuZGVmaW5lZH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmeC5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnVuZGVmaW5lZH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHgubm9kZU5hbWUoZS50YXJnZXQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe2UucmVzdWx0IT09dW5kZWZpbmVkJiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmV4dGVuZChuZXcgeC5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO3I/eC5ldmVudC50cmlnZ2VyKGksbnVsbCx0KTp4LmV2ZW50LmRpc3BhdGNoLmNhbGwodCxpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZuLnByZXZlbnREZWZhdWx0KCl9fSx4LnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfSx4LkV2ZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4LkV2ZW50PyhlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHxlLmdldFByZXZlbnREZWZhdWx0JiZlLmdldFByZXZlbnREZWZhdWx0KCk/VTpZKTp0aGlzLnR5cGU9ZSx0JiZ4LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHx4Lm5vdygpLHRoaXNbeC5leHBhbmRvXT0hMCx1bmRlZmluZWQpOm5ldyB4LkV2ZW50KGUsdCl9LHguRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6WSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpZLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlkscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9VSxlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVUsZSYmZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9VSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0seC5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oZSx0KXt4LmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dGhpcyxpPWUucmVsYXRlZFRhcmdldCxvPWUuaGFuZGxlT2JqO3JldHVybighaXx8aSE9PXImJiF4LmNvbnRhaW5zKHIsaSkpJiYoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSx4LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fHguZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9ZnVuY3Rpb24oZSl7eC5ldmVudC5zaW11bGF0ZSh0LGUudGFyZ2V0LHguZXZlbnQuZml4KGUpLCEwKX07eC5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpezA9PT1uKysmJm8uYWRkRXZlbnRMaXN0ZW5lcihlLHIsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpezA9PT0tLW4mJm8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsITApfX19KSx4LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7InN0cmluZyIhPXR5cGVvZiB0JiYobj1ufHx0LHQ9dW5kZWZpbmVkKTtmb3IocyBpbiBlKXRoaXMub24ocyx0LG4sZVtzXSxpKTtyZXR1cm4gdGhpc31pZihudWxsPT1uJiZudWxsPT1yPyhyPXQsbj10PXVuZGVmaW5lZCk6bnVsbD09ciYmKCJzdHJpbmciPT10eXBlb2YgdD8ocj1uLG49dW5kZWZpbmVkKToocj1uLG49dCx0PXVuZGVmaW5lZCkpLHI9PT0hMSlyPVk7ZWxzZSBpZighcilyZXR1cm4gdGhpcztyZXR1cm4gMT09PWkmJihvPXIscj1mdW5jdGlvbihlKXtyZXR1cm4geCgpLm9mZihlKSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5ndWlkPW8uZ3VpZHx8KG8uZ3VpZD14Lmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQuYWRkKHRoaXMsZSxyLG4sdCl9KX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaix4KGUuZGVsZWdhdGVUYXJnZXQpLm9mZihyLm5hbWVzcGFjZT9yLm9yaWdUeXBlKyIuIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKGkgaW4gZSl0aGlzLm9mZihpLHQsZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuKHQ9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpJiYobj10LHQ9dW5kZWZpbmVkKSxuPT09ITEmJihuPVkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07cmV0dXJuIG4/eC5ldmVudC50cmlnZ2VyKGUsdCxuLCEwKTp1bmRlZmluZWR9fSk7dmFyIEc9L14uW146I1xbXC4sXSokLyxKPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFE9eC5leHByLm1hdGNoLm5lZWRzQ29udGV4dCxLPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3guZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG49W10scj10aGlzLGk9ci5sZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayh4KGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7aT50O3QrKylpZih4LmNvbnRhaW5zKHJbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKHQ9MDtpPnQ7dCsrKXguZmluZChlLHJbdF0sbik7cmV0dXJuIG49dGhpcy5wdXNoU3RhY2soaT4xP3gudW5pcXVlKG4pOm4pLG4uc2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj90aGlzLnNlbGVjdG9yKyIgIitlOmUsbn0saGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXgoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKDtuPmU7ZSsrKWlmKHguY29udGFpbnModGhpcyx0W2VdKSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITApKX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhldCh0aGlzLGV8fFtdLCExKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhZXQodGhpcywic3RyaW5nIj09dHlwZW9mIGUmJlEudGVzdChlKT94KGUpOmV8fFtdLCExKS5sZW5ndGh9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLHM9US50ZXN0KGUpfHwic3RyaW5nIiE9dHlwZW9mIGU/eChlLHR8fHRoaXMuY29udGV4dCk6MDtmb3IoO2k+cjtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZigxMT5uLm5vZGVUeXBlJiYocz9zLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZ4LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtuPW8ucHVzaChuKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGg+MT94LnVuaXF1ZShvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2cuY2FsbCh4KGUpLHRoaXNbMF0pOmcuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIGU/eChlLHQpOngubWFrZUFycmF5KGUmJmUubm9kZVR5cGU/W2VdOmUpLHI9eC5tZXJnZSh0aGlzLmdldCgpLG4pO3JldHVybiB0aGlzLnB1c2hTdGFjayh4LnVuaXF1ZShyKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pO2Z1bmN0aW9uIFooZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfXguZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gWihlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBaKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4geC5zaWJsaW5nKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4geC5zaWJsaW5nKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRlbnREb2N1bWVudHx8eC5tZXJnZShbXSxlLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9eC5tYXAodGhpcyx0LG4pO3JldHVybiJVbnRpbCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmInN0cmluZyI9PXR5cGVvZiByJiYoaT14LmZpbHRlcihyLGkpKSx0aGlzLmxlbmd0aD4xJiYoS1tlXXx8eC51bmlxdWUoaSksSi50ZXN0KGUpJiZpLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2soaSl9fSkseC5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT94LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOnguZmluZC5tYXRjaGVzKGUseC5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxkaXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9biE9PXVuZGVmaW5lZDt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJngoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxzaWJsaW5nOmZ1bmN0aW9uKGUsdCl7dmFyIG49W107Zm9yKDtlO2U9ZS5uZXh0U2libGluZykxPT09ZS5ub2RlVHlwZSYmZSE9PXQmJm4ucHVzaChlKTtyZXR1cm4gbn19KTtmdW5jdGlvbiBldChlLHQsbil7aWYoeC5pc0Z1bmN0aW9uKHQpKXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiEhdC5jYWxsKGUscixlKSE9PW59KTtpZih0Lm5vZGVUeXBlKXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihHLnRlc3QodCkpcmV0dXJuIHguZmlsdGVyKHQsZSxuKTt0PXguZmlsdGVyKHQsZSl9cmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBnLmNhbGwodCxlKT49MCE9PW59KX12YXIgdHQ9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSxudD0vPChbXHc6XSspLyxydD0vPHwmIz9cdys7LyxpdD0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLG90PS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLHN0PS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGF0PS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSx1dD0vXnRydWVcLyguKikvLGx0PS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxjdD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2N0Lm9wdGdyb3VwPWN0Lm9wdGlvbixjdC50Ym9keT1jdC50Zm9vdD1jdC5jb2xncm91cD1jdC5jYXB0aW9uPWN0LnRoZWFkLGN0LnRoPWN0LnRkLHguZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dW5kZWZpbmVkP3gudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fG8pLmNyZWF0ZVRleHROb2RlKGUpKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PXB0KHRoaXMsZSk7dC5hcHBlbmRDaGlsZChlKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWU/eC5maWx0ZXIoZSx0aGlzKTp0aGlzLGk9MDtmb3IoO251bGwhPShuPXJbaV0pO2krKyl0fHwxIT09bi5ub2RlVHlwZXx8eC5jbGVhbkRhdGEobXQobikpLG4ucGFyZW50Tm9kZSYmKHQmJnguY29udGFpbnMobi5vd25lckRvY3VtZW50LG4pJiZkdChtdChuLCJzY3JpcHQiKSksbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7Zm9yKDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJih4LmNsZWFuRGF0YShtdChlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbD09ZT8hMTplLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4geC5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZihlPT09dW5kZWZpbmVkJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhaXQudGVzdChlKSYmIWN0WyhudC5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1lLnJlcGxhY2UodHQsIjwkMT48LyQyPiIpO3RyeXtmb3IoO3I+bjtuKyspdD10aGlzW25dfHx7fSwxPT09dC5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goaSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9eC5tYXAodGhpcyxmdW5jdGlvbihlKXtyZXR1cm5bZS5uZXh0U2libGluZyxlLnBhcmVudE5vZGVdfSksdD0wO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihuKXt2YXIgcj1lW3QrK10saT1lW3QrK107aSYmKHImJnIucGFyZW50Tm9kZSE9PWkmJihyPXRoaXMubmV4dFNpYmxpbmcpLHgodGhpcykucmVtb3ZlKCksaS5pbnNlcnRCZWZvcmUobixyKSl9LCEwKSx0P3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlbW92ZShlLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oZSx0LG4pe2U9Zi5hcHBseShbXSxlKTt2YXIgcixpLG8scyxhLHUsbD0wLGM9dGhpcy5sZW5ndGgscD10aGlzLGg9Yy0xLGQ9ZVswXSxnPXguaXNGdW5jdGlvbihkKTtpZihnfHwhKDE+PWN8fCJzdHJpbmciIT10eXBlb2YgZHx8eC5zdXBwb3J0LmNoZWNrQ2xvbmUpJiZzdC50ZXN0KGQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9cC5lcShyKTtnJiYoZVswXT1kLmNhbGwodGhpcyxyLGkuaHRtbCgpKSksaS5kb21NYW5pcChlLHQsbil9KTtpZihjJiYocj14LmJ1aWxkRnJhZ21lbnQoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsIW4mJnRoaXMpLGk9ci5maXJzdENoaWxkLDE9PT1yLmNoaWxkTm9kZXMubGVuZ3RoJiYocj1pKSxpKSl7Zm9yKG89eC5tYXAobXQociwic2NyaXB0IiksZnQpLHM9by5sZW5ndGg7Yz5sO2wrKylhPXIsbCE9PWgmJihhPXguY2xvbmUoYSwhMCwhMCkscyYmeC5tZXJnZShvLG10KGEsInNjcmlwdCIpKSksdC5jYWxsKHRoaXNbbF0sYSxsKTtpZihzKWZvcih1PW9bby5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCx4Lm1hcChvLGh0KSxsPTA7cz5sO2wrKylhPW9bbF0sYXQudGVzdChhLnR5cGV8fCIiKSYmIXEuYWNjZXNzKGEsImdsb2JhbEV2YWwiKSYmeC5jb250YWlucyh1LGEpJiYoYS5zcmM/eC5fZXZhbFVybChhLnNyYyk6eC5nbG9iYWxFdmFsKGEudGV4dENvbnRlbnQucmVwbGFjZShsdCwiIikpKX1yZXR1cm4gdGhpc319KSx4LmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSl7dmFyIG4scj1bXSxpPXgoZSksbz1pLmxlbmd0aC0xLHM9MDtmb3IoO28+PXM7cysrKW49cz09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx4KGlbc10pW3RdKG4pLGguYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSkseC5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhPWUuY2xvbmVOb2RlKCEwKSx1PXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpO2lmKCEoeC5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx4LmlzWE1MRG9jKGUpKSlmb3Iocz1tdChhKSxvPW10KGUpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspeXQob1tyXSxzW3JdKTtpZih0KWlmKG4pZm9yKG89b3x8bXQoZSkscz1zfHxtdChhKSxyPTAsaT1vLmxlbmd0aDtpPnI7cisrKWd0KG9bcl0sc1tyXSk7ZWxzZSBndChlLGEpO3JldHVybiBzPW10KGEsInNjcmlwdCIpLHMubGVuZ3RoPjAmJmR0KHMsIXUmJm10KGUsInNjcmlwdCIpKSxhfSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsbCxjPTAscD1lLmxlbmd0aCxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9W107Zm9yKDtwPmM7YysrKWlmKGk9ZVtjXSxpfHwwPT09aSlpZigib2JqZWN0Ij09PXgudHlwZShpKSl4Lm1lcmdlKGgsaS5ub2RlVHlwZT9baV06aSk7ZWxzZSBpZihydC50ZXN0KGkpKXtvPW98fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSkscz0obnQuZXhlYyhpKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxhPWN0W3NdfHxjdC5fZGVmYXVsdCxvLmlubmVySFRNTD1hWzFdK2kucmVwbGFjZSh0dCwiPCQxPjwvJDI+IikrYVsyXSxsPWFbMF07d2hpbGUobC0tKW89by5sYXN0Q2hpbGQ7eC5tZXJnZShoLG8uY2hpbGROb2Rlcyksbz1mLmZpcnN0Q2hpbGQsby50ZXh0Q29udGVudD0iIn1lbHNlIGgucHVzaCh0LmNyZWF0ZVRleHROb2RlKGkpKTtmLnRleHRDb250ZW50PSIiLGM9MDt3aGlsZShpPWhbYysrXSlpZigoIXJ8fC0xPT09eC5pbkFycmF5KGkscikpJiYodT14LmNvbnRhaW5zKGkub3duZXJEb2N1bWVudCxpKSxvPW10KGYuYXBwZW5kQ2hpbGQoaSksInNjcmlwdCIpLHUmJmR0KG8pLG4pKXtsPTA7d2hpbGUoaT1vW2wrK10pYXQudGVzdChpLnR5cGV8fCIiKSYmbi5wdXNoKGkpfXJldHVybiBmfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLGE9eC5ldmVudC5zcGVjaWFsLHU9MDtmb3IoOyhuPWVbdV0pIT09dW5kZWZpbmVkO3UrKyl7aWYoRi5hY2NlcHRzKG4pJiYobz1uW3EuZXhwYW5kb10sbyYmKHQ9cS5jYWNoZVtvXSkpKXtpZihyPU9iamVjdC5rZXlzKHQuZXZlbnRzfHx7fSksci5sZW5ndGgpZm9yKHM9MDsoaT1yW3NdKSE9PXVuZGVmaW5lZDtzKyspYVtpXT94LmV2ZW50LnJlbW92ZShuLGkpOngucmVtb3ZlRXZlbnQobixpLHQuaGFuZGxlKTtxLmNhY2hlW29dJiZkZWxldGUgcS5jYWNoZVtvXX1kZWxldGUgTC5jYWNoZVtuW0wuZXhwYW5kb11dfX0sX2V2YWxVcmw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX19KTtmdW5jdGlvbiBwdChlLHQpe3JldHVybiB4Lm5vZGVOYW1lKGUsInRhYmxlIikmJngubm9kZU5hbWUoMT09PXQubm9kZVR5cGU/dDp0LmZpcnN0Q2hpbGQsInRyIik/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8ZS5hcHBlbmRDaGlsZChlLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6ZX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIGh0KGUpe3ZhciB0PXV0LmV4ZWMoZS50eXBlKTtyZXR1cm4gdD9lLnR5cGU9dFsxXTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7Zm9yKDtuPnI7cisrKXEuc2V0KGVbcl0sImdsb2JhbEV2YWwiLCF0fHxxLmdldCh0W3JdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIGd0KGUsdCl7dmFyIG4scixpLG8scyxhLHUsbDtpZigxPT09dC5ub2RlVHlwZSl7aWYocS5oYXNEYXRhKGUpJiYobz1xLmFjY2VzcyhlKSxzPXEuc2V0KHQsbyksbD1vLmV2ZW50cykpe2RlbGV0ZSBzLmhhbmRsZSxzLmV2ZW50cz17fTtmb3IoaSBpbiBsKWZvcihuPTAscj1sW2ldLmxlbmd0aDtyPm47bisrKXguZXZlbnQuYWRkKHQsaSxsW2ldW25dKX1MLmhhc0RhdGEoZSkmJihhPUwuYWNjZXNzKGUpLHU9eC5leHRlbmQoe30sYSksTC5zZXQodCx1KSl9fWZ1bmN0aW9uIG10KGUsdCl7dmFyIG49ZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6ZS5xdWVyeVNlbGVjdG9yQWxsP2UucXVlcnlTZWxlY3RvckFsbCh0fHwiKiIpOltdO3JldHVybiB0PT09dW5kZWZpbmVkfHx0JiZ4Lm5vZGVOYW1lKGUsdCk/eC5tZXJnZShbZV0sbik6bn1mdW5jdGlvbiB5dChlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09biYmb3QudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6KCJpbnB1dCI9PT1ufHwidGV4dGFyZWEiPT09bikmJih0LmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZSl9eC5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS53cmFwQWxsKGUuY2FsbCh0aGlzLHQpKX0pOih0aGlzWzBdJiYodD14KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdEVsZW1lbnRDaGlsZCllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXMpfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9eCh0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD14LmlzRnVuY3Rpb24oZSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt4KHRoaXMpLndyYXBBbGwodD9lLmNhbGwodGhpcyxuKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7eC5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fHgodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pO3ZhciB2dCx4dCxidD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sd3Q9L15tYXJnaW4vLFR0PVJlZ0V4cCgiXigiK2IrIikoLiopJCIsImkiKSxDdD1SZWdFeHAoIl4oIitiKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksa3Q9UmVnRXhwKCJeKFsrLV0pPSgiK2IrIikiLCJpIiksTnQ9e0JPRFk6ImJsb2NrIn0sRXQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFN0PXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LGp0PVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sRHQ9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXTtmdW5jdGlvbiBBdChlLHQpe2lmKHQgaW4gZSlyZXR1cm4gdDt2YXIgbj10LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkscj10LGk9RHQubGVuZ3RoO3doaWxlKGktLSlpZih0PUR0W2ldK24sdCBpbiBlKXJldHVybiB0O3JldHVybiByfWZ1bmN0aW9uIEx0KGUsdCl7cmV0dXJuIGU9dHx8ZSwibm9uZSI9PT14LmNzcyhlLCJkaXNwbGF5Iil8fCF4LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gZS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCl9ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbixyLGksbz1bXSxzPTAsYT1lLmxlbmd0aDtmb3IoO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJihvW3NdPXEuZ2V0KHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhvW3NdfHwibm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmTHQocikmJihvW3NdPXEuYWNjZXNzKHIsIm9sZGRpc3BsYXkiLFJ0KHIubm9kZU5hbWUpKSkpOm9bc118fChpPUx0KHIpLChuJiYibm9uZSIhPT1ufHwhaSkmJnEuc2V0KHIsIm9sZGRpc3BsYXkiLGk/bjp4LmNzcyhyLCJkaXNwbGF5IikpKSk7Zm9yKHM9MDthPnM7cysrKXI9ZVtzXSxyLnN0eWxlJiYodCYmIm5vbmUiIT09ci5zdHlsZS5kaXNwbGF5JiYiIiE9PXIuc3R5bGUuZGlzcGxheXx8KHIuc3R5bGUuZGlzcGxheT10P29bc118fCIiOiJub25lIikpO3JldHVybiBlfXguZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9LHM9MDtpZih4LmlzQXJyYXkodCkpe2ZvcihyPXF0KGUpLGk9dC5sZW5ndGg7aT5zO3MrKylvW3Rbc11dPXguY3NzKGUsdFtzXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gbiE9PXVuZGVmaW5lZD94LnN0eWxlKGUsdCxuKTp4LmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBIdCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBIdCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtMdCh0aGlzKT94KHRoaXMpLnNob3coKTp4KHRoaXMpLmhpZGUoKX0pfX0pLHguZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49dnQoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNzc0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLHMsYT14LmNhbWVsQ2FzZSh0KSx1PWUuc3R5bGU7cmV0dXJuIHQ9eC5jc3NQcm9wc1thXXx8KHguY3NzUHJvcHNbYV09QXQodSxhKSkscz14LmNzc0hvb2tzW3RdfHx4LmNzc0hvb2tzW2FdLG49PT11bmRlZmluZWQ/cyYmImdldCJpbiBzJiYoaT1zLmdldChlLCExLHIpKSE9PXVuZGVmaW5lZD9pOnVbdF06KG89dHlwZW9mIG4sInN0cmluZyI9PT1vJiYoaT1rdC5leGVjKG4pKSYmKG49KGlbMV0rMSkqaVsyXStwYXJzZUZsb2F0KHguY3NzKGUsdCkpLG89Im51bWJlciIpLG51bGw9PW58fCJudW1iZXIiPT09byYmaXNOYU4obil8fCgibnVtYmVyIiE9PW98fHguY3NzTnVtYmVyW2FdfHwobis9InB4IikseC5zdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fCh1W3RdPSJpbmhlcml0IikscyYmInNldCJpbiBzJiYobj1zLnNldChlLG4scikpPT09dW5kZWZpbmVkfHwodVt0XT1uKSksdW5kZWZpbmVkKX19LGNzczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHMsYT14LmNhbWVsQ2FzZSh0KTtyZXR1cm4gdD14LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdChlLnN0eWxlLGEpKSxzPXguY3NzSG9va3NbdF18fHguY3NzSG9va3NbYV0scyYmImdldCJpbiBzJiYoaT1zLmdldChlLCEwLG4pKSxpPT09dW5kZWZpbmVkJiYoaT12dChlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBTdCYmKGk9U3RbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLG49PT0hMHx8eC5pc051bWVyaWMobyk/b3x8MDppKTppfX0pLHZ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scz1ufHxxdChlKSxhPXM/cy5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxzW3RdOnVuZGVmaW5lZCx1PWUuc3R5bGU7cmV0dXJuIHMmJigiIiE9PWF8fHguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHwoYT14LnN0eWxlKGUsdCkpLEN0LnRlc3QoYSkmJnd0LnRlc3QodCkmJihyPXUud2lkdGgsaT11Lm1pbldpZHRoLG89dS5tYXhXaWR0aCx1Lm1pbldpZHRoPXUubWF4V2lkdGg9dS53aWR0aD1hLGE9cy53aWR0aCx1LndpZHRoPXIsdS5taW5XaWR0aD1pLHUubWF4V2lkdGg9bykpLGF9O2Z1bmN0aW9uIE90KGUsdCxuKXt2YXIgcj1UdC5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsxXS0obnx8MCkpKyhyWzJdfHwicHgiKTp0fWZ1bmN0aW9uIEZ0KGUsdCxuLHIsaSl7dmFyIG89bj09PShyPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09dD8xOjAscz0wO2Zvcig7ND5vO28rPTIpIm1hcmdpbiI9PT1uJiYocys9eC5jc3MoZSxuK2p0W29dLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYocy09eC5jc3MoZSwicGFkZGluZyIranRbb10sITAsaSkpLCJtYXJnaW4iIT09biYmKHMtPXguY3NzKGUsImJvcmRlciIranRbb10rIldpZHRoIiwhMCxpKSkpOihzKz14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxpKSwicGFkZGluZyIhPT1uJiYocys9eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gUHQoZSx0LG4pe3ZhciByPSEwLGk9IndpZHRoIj09PXQ/ZS5vZmZzZXRXaWR0aDplLm9mZnNldEhlaWdodCxvPXF0KGUpLHM9eC5zdXBwb3J0LmJveFNpemluZyYmImJvcmRlci1ib3giPT09eC5jc3MoZSwiYm94U2l6aW5nIiwhMSxvKTtpZigwPj1pfHxudWxsPT1pKXtpZihpPXZ0KGUsdCxvKSwoMD5pfHxudWxsPT1pKSYmKGk9ZS5zdHlsZVt0XSksQ3QudGVzdChpKSlyZXR1cm4gaTtyPXMmJih4LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGV8fGk9PT1lLnN0eWxlW3RdKSxpPXBhcnNlRmxvYXQoaSl8fDB9cmV0dXJuIGkrRnQoZSx0LG58fChzPyJib3JkZXIiOiJjb250ZW50IikscixvKSsicHgifWZ1bmN0aW9uIFJ0KGUpe3ZhciB0PW8sbj1OdFtlXTtyZXR1cm4gbnx8KG49TXQoZSx0KSwibm9uZSIhPT1uJiZufHwoeHQ9KHh0fHx4KCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikuY3NzKCJjc3NUZXh0IiwiZGlzcGxheTpibG9jayAhaW1wb3J0YW50IikpLmFwcGVuZFRvKHQuZG9jdW1lbnRFbGVtZW50KSx0PSh4dFswXS5jb250ZW50V2luZG93fHx4dFswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LHQud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpLHQuY2xvc2UoKSxuPU10KGUsdCkseHQuZGV0YWNoKCkpLE50W2VdPW4pLG59ZnVuY3Rpb24gTXQoZSx0KXt2YXIgbj14KHQuY3JlYXRlRWxlbWVudChlKSkuYXBwZW5kVG8odC5ib2R5KSxyPXguY3NzKG5bMF0sImRpc3BsYXkiKTtyZXR1cm4gbi5yZW1vdmUoKSxyfXguZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx0KXt4LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuPzA9PT1lLm9mZnNldFdpZHRoJiZidC50ZXN0KHguY3NzKGUsImRpc3BsYXkiKSk/eC5zd2FwKGUsRXQsZnVuY3Rpb24oKXtyZXR1cm4gUHQoZSx0LHIpfSk6UHQoZSx0LHIpOnVuZGVmaW5lZH0sc2V0OmZ1bmN0aW9uKGUsbixyKXt2YXIgaT1yJiZxdChlKTtyZXR1cm4gT3QoZSxuLHI/RnQoZSx0LHIseC5zdXBwb3J0LmJveFNpemluZyYmImJvcmRlci1ib3giPT09eC5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxpKTowKX19fSkseChmdW5jdGlvbigpe3guc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0fHwoeC5jc3NIb29rcy5tYXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/eC5zd2FwKGUse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LHZ0LFtlLCJtYXJnaW5SaWdodCJdKTp1bmRlZmluZWR9fSksIXguc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ4LmZuLnBvc2l0aW9uJiZ4LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXt4LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj8obj12dChlLHQpLEN0LnRlc3Qobik/eChlKS5wb3NpdGlvbigpW3RdKyJweCI6bik6dW5kZWZpbmVkfX19KX0pLHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA+PWUub2Zmc2V0V2lkdGgmJjA+PWUub2Zmc2V0SGVpZ2h0fSx4LmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiF4LmV4cHIuZmlsdGVycy5oaWRkZW4oZSl9KSx4LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe3ZhciByPTAsaT17fSxvPSJzdHJpbmciPT10eXBlb2Ygbj9uLnNwbGl0KCIgIik6W25dO2Zvcig7ND5yO3IrKylpW2UranRbcl0rdF09b1tyXXx8b1tyLTJdfHxvWzBdO3JldHVybiBpfX0sd3QudGVzdChlKXx8KHguY3NzSG9va3NbZSt0XS5zZXQ9T3QpfSk7dmFyIFd0PS8lMjAvZywkdD0vXFtcXSQvLEJ0PS9ccj9cbi9nLEl0PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSx6dD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7eC5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB4LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9eC5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/eC5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYheCh0aGlzKS5pcygiOmRpc2FibGVkIikmJnp0LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFJdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhb3QudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj14KHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6eC5pc0FycmF5KG4pP3gubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShCdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoQnQsIlxyXG4iKX19KS5nZXQoKX19KSx4LnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dD14LmlzRnVuY3Rpb24odCk/dCgpOm51bGw9PXQ/IiI6dCxyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KX07aWYodD09PXVuZGVmaW5lZCYmKHQ9eC5hamF4U2V0dGluZ3MmJnguYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSx4LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYheC5pc1BsYWluT2JqZWN0KGUpKXguZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpX3QobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpLnJlcGxhY2UoV3QsIisiKX07ZnVuY3Rpb24gX3QoZSx0LG4scil7dmFyIGk7aWYoeC5pc0FycmF5KHQpKXguZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8JHQudGVzdChlKT9yKGUsaSk6X3QoZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaT90OiIiKSsiXSIsaSxuLHIpfSk7ZWxzZSBpZihufHwib2JqZWN0IiE9PXgudHlwZSh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KV90KGUrIlsiK2krIl0iLHRbaV0sbixyKX14LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx4LmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pO3ZhciBYdCxVdCxZdD14Lm5vdygpLFZ0PS9cPy8sR3Q9LyMuKiQvLEp0PS8oWz8mXSlfPVteJl0qLyxRdD0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLEt0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFp0PS9eKD86R0VUfEhFQUQpJC8sZW49L15cL1wvLyx0bj0vXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sbm49eC5mbi5sb2FkLHJuPXt9LG9uPXt9LHNuPSIqLyIuY29uY2F0KCIqIik7dHJ5e1V0PWkuaHJlZn1jYXRjaChhbil7VXQ9by5jcmVhdGVFbGVtZW50KCJhIiksVXQuaHJlZj0iIixVdD1VdC5ocmVmfVh0PXRuLmV4ZWMoVXQudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIHVuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpfHxbXTtpZih4LmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBsbihlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1vbjtmdW5jdGlvbiBzKGEpe3ZhciB1O3JldHVybiBpW2FdPSEwLHguZWFjaChlW2FdfHxbXSxmdW5jdGlvbihlLGEpe3ZhciBsPWEodCxuLHIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgbHx8b3x8aVtsXT9vPyEodT1sKTp1bmRlZmluZWQ6KHQuZGF0YVR5cGVzLnVuc2hpZnQobCkscyhsKSwhMSl9KSx1fXJldHVybiBzKHQuZGF0YVR5cGVzWzBdKXx8IWlbIioiXSYmcygiKiIpfWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG4scixpPXguYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXRbbl0hPT11bmRlZmluZWQmJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJnguZXh0ZW5kKCEwLGUsciksZX14LmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe2lmKCJzdHJpbmciIT10eXBlb2YgZSYmbm4pcmV0dXJuIG5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgcixpLG8scz10aGlzLGE9ZS5pbmRleE9mKCIgIik7cmV0dXJuIGE+PTAmJihyPWUuc2xpY2UoYSksZT1lLnNsaWNlKDAsYSkpLHguaXNGdW5jdGlvbih0KT8obj10LHQ9dW5kZWZpbmVkKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIikscy5sZW5ndGg+MCYmeC5hamF4KHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1sKHI/eCgiPGRpdj4iKS5hcHBlbmQoeC5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5jb21wbGV0ZShuJiZmdW5jdGlvbihlLHQpe3MuZWFjaChuLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LHguZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHguZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpVdCx0eXBlOiJHRVQiLGlzTG9jYWw6S3QudGVzdChYdFsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpzbix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOngucGFyc2VKU09OLCJ0ZXh0IHhtbCI6eC5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/Y24oY24oZSx4LmFqYXhTZXR0aW5ncyksdCk6Y24oeC5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6dW4ocm4pLGFqYXhUcmFuc3BvcnQ6dW4ob24pLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLHQ9dHx8e307dmFyIG4scixpLG8scyxhLHUsbCxjPXguYWpheFNldHVwKHt9LHQpLHA9Yy5jb250ZXh0fHxjLGY9Yy5jb250ZXh0JiYocC5ub2RlVHlwZXx8cC5qcXVlcnkpP3gocCk6eC5ldmVudCxoPXguRGVmZXJyZWQoKSxkPXguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGc9Yy5zdGF0dXNDb2RlfHx7fSxtPXt9LHk9e30sdj0wLGI9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoMj09PXYpe2lmKCFvKXtvPXt9O3doaWxlKHQ9UXQuZXhlYyhpKSlvW3RbMV0udG9Mb3dlckNhc2UoKV09dFsyXX10PW9bZS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbnVsbD09dD9udWxsOnR9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiAyPT09dj9pOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHZ8fChlPXlbbl09eVtuXXx8ZSxtW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ8fChjLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZigyPnYpZm9yKHQgaW4gZSlnW3RdPVtnW3RdLGVbdF1dO2Vsc2UgVC5hbHdheXMoZVtULnN0YXR1c10pO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXt2YXIgdD1lfHxiO3JldHVybiBuJiZuLmFib3J0KHQpLGsoMCx0KSx0aGlzfX07aWYoaC5wcm9taXNlKFQpLmNvbXBsZXRlPWQuYWRkLFQuc3VjY2Vzcz1ULmRvbmUsVC5lcnJvcj1ULmZhaWwsYy51cmw9KChlfHxjLnVybHx8VXQpKyIiKS5yZXBsYWNlKEd0LCIiKS5yZXBsYWNlKGVuLFh0WzFdKyIvLyIpLGMudHlwZT10Lm1ldGhvZHx8dC50eXBlfHxjLm1ldGhvZHx8Yy50eXBlLGMuZGF0YVR5cGVzPXgudHJpbShjLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2godyl8fFsiIl0sbnVsbD09Yy5jcm9zc0RvbWFpbiYmKGE9dG4uZXhlYyhjLnVybC50b0xvd2VyQ2FzZSgpKSxjLmNyb3NzRG9tYWluPSEoIWF8fGFbMV09PT1YdFsxXSYmYVsyXT09PVh0WzJdJiYoYVszXXx8KCJodHRwOiI9PT1hWzFdPyI4MCI6IjQ0MyIpKT09PShYdFszXXx8KCJodHRwOiI9PT1YdFsxXT8iODAiOiI0NDMiKSkpKSxjLmRhdGEmJmMucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2YgYy5kYXRhJiYoYy5kYXRhPXgucGFyYW0oYy5kYXRhLGMudHJhZGl0aW9uYWwpKSxsbihybixjLHQsVCksMj09PXYpcmV0dXJuIFQ7dT1jLmdsb2JhbCx1JiYwPT09eC5hY3RpdmUrKyYmeC5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxjLnR5cGU9Yy50eXBlLnRvVXBwZXJDYXNlKCksYy5oYXNDb250ZW50PSFadC50ZXN0KGMudHlwZSkscj1jLnVybCxjLmhhc0NvbnRlbnR8fChjLmRhdGEmJihyPWMudXJsKz0oVnQudGVzdChyKT8iJiI6Ij8iKStjLmRhdGEsZGVsZXRlIGMuZGF0YSksYy5jYWNoZT09PSExJiYoYy51cmw9SnQudGVzdChyKT9yLnJlcGxhY2UoSnQsIiQxXz0iK1l0KyspOnIrKFZ0LnRlc3Qocik/IiYiOiI/IikrIl89IitZdCsrKSksYy5pZk1vZGlmaWVkJiYoeC5sYXN0TW9kaWZpZWRbcl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLHgubGFzdE1vZGlmaWVkW3JdKSx4LmV0YWdbcl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIseC5ldGFnW3JdKSksKGMuZGF0YSYmYy5oYXNDb250ZW50JiZjLmNvbnRlbnRUeXBlIT09ITF8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsYy5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGMuZGF0YVR5cGVzWzBdJiZjLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dP2MuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0rKCIqIiE9PWMuZGF0YVR5cGVzWzBdPyIsICIrc24rIjsgcT0wLjAxIjoiIik6Yy5hY2NlcHRzWyIqIl0pO2ZvcihsIGluIGMuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIobCxjLmhlYWRlcnNbbF0pO2lmKGMuYmVmb3JlU2VuZCYmKGMuYmVmb3JlU2VuZC5jYWxsKHAsVCxjKT09PSExfHwyPT09dikpcmV0dXJuIFQuYWJvcnQoKTtiPSJhYm9ydCI7Zm9yKGwgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pVFtsXShjW2xdKTtpZihuPWxuKG9uLGMsdCxUKSl7VC5yZWFkeVN0YXRlPTEsdSYmZi50cmlnZ2VyKCJhamF4U2VuZCIsW1QsY10pLGMuYXN5bmMmJmMudGltZW91dD4wJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSxjLnRpbWVvdXQpKTt0cnl7dj0xLG4uc2VuZChtLGspfWNhdGNoKEMpe2lmKCEoMj52KSl0aHJvdyBDO2soLTEsQyl9fWVsc2UgaygtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24gayhlLHQsbyxhKXt2YXIgbCxtLHksYix3LEM9dDsyIT09diYmKHY9MixzJiZjbGVhclRpbWVvdXQocyksbj11bmRlZmluZWQsaT1hfHwiIixULnJlYWR5U3RhdGU9ZT4wPzQ6MCxsPWU+PTIwMCYmMzAwPmV8fDMwND09PWUsbyYmKGI9cG4oYyxULG8pKSxiPWZuKGMsYixULGwpLGw/KGMuaWZNb2RpZmllZCYmKHc9VC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHcmJih4Lmxhc3RNb2RpZmllZFtyXT13KSx3PVQuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx3JiYoeC5ldGFnW3JdPXcpKSwyMDQ9PT1lfHwiSEVBRCI9PT1jLnR5cGU/Qz0ibm9jb250ZW50IjozMDQ9PT1lP0M9Im5vdG1vZGlmaWVkIjooQz1iLnN0YXRlLG09Yi5kYXRhLHk9Yi5lcnJvcixsPSF5KSk6KHk9QywoZXx8IUMpJiYoQz0iZXJyb3IiLDA+ZSYmKGU9MCkpKSxULnN0YXR1cz1lLFQuc3RhdHVzVGV4dD0odHx8QykrIiIsbD9oLnJlc29sdmVXaXRoKHAsW20sQyxUXSk6aC5yZWplY3RXaXRoKHAsW1QsQyx5XSksVC5zdGF0dXNDb2RlKGcpLGc9dW5kZWZpbmVkLHUmJmYudHJpZ2dlcihsPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW1QsYyxsP206eV0pLGQuZmlyZVdpdGgocCxbVCxDXSksdSYmKGYudHJpZ2dlcigiYWpheENvbXBsZXRlIixbVCxjXSksLS14LmFjdGl2ZXx8eC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIFR9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5nZXQoZSx1bmRlZmluZWQsdCwic2NyaXB0Iil9fSkseC5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsdCl7eFt0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4geC5pc0Z1bmN0aW9uKG4pJiYoaT1pfHxyLHI9bixuPXVuZGVmaW5lZCkseC5hamF4KHt1cmw6ZSx0eXBlOnQsZGF0YVR5cGU6aSxkYXRhOm4sc3VjY2VzczpyfSl9fSk7ZnVuY3Rpb24gcG4oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLHI9PT11bmRlZmluZWQmJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIGEpaWYoYVtpXSYmYVtpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pO2JyZWFrfXN8fChzPWkpfW89b3x8c31yZXR1cm4gbz8obyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dKTp1bmRlZmluZWR9ZnVuY3Rpb24gZm4oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsPXt9LGM9ZS5kYXRhVHlwZXMuc2xpY2UoKTtpZihjWzFdKWZvcihzIGluIGUuY29udmVydGVycylsW3MudG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW3NdO289Yy5zaGlmdCgpO3doaWxlKG8paWYoZS5yZXNwb25zZUZpZWxkc1tvXSYmKG5bZS5yZXNwb25zZUZpZWxkc1tvXV09dCksIXUmJnImJmUuZGF0YUZpbHRlciYmKHQ9ZS5kYXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpLHU9byxvPWMuc2hpZnQoKSlpZigiKiI9PT1vKW89dTtlbHNlIGlmKCIqIiE9PXUmJnUhPT1vKXtpZihzPWxbdSsiICIrb118fGxbIiogIitvXSwhcylmb3IoaSBpbiBsKWlmKGE9aS5zcGxpdCgiICIpLGFbMV09PT1vJiYocz1sW3UrIiAiK2FbMF1dfHxsWyIqICIrYVswXV0pKXtzPT09ITA/cz1sW2ldOmxbaV0hPT0hMCYmKG89YVswXSxjLnVuc2hpZnQoYVsxXSkpO2JyZWFrfWlmKHMhPT0hMClpZihzJiZlWyJ0aHJvd3MiXSl0PXModCk7ZWxzZSB0cnl7dD1zKHQpfWNhdGNoKHApe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOnM/cDoiTm8gY29udmVyc2lvbiBmcm9tICIrdSsiIHRvICIrb319fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX14LmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiB4Lmdsb2JhbEV2YWwoZSksZX19fSkseC5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2UuY2FjaGU9PT11bmRlZmluZWQmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiKX0pLHguYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKHIsaSl7dD14KCI8c2NyaXB0PiIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKCJsb2FkIGVycm9yIixuPWZ1bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJmkoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxvLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIGhuPVtdLGRuPS8oPSlcPyg/PSZ8JCl8XD9cPy87eC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPWhuLnBvcCgpfHx4LmV4cGFuZG8rIl8iK1l0Kys7cmV0dXJuIHRoaXNbZV09ITAsZX19KSx4LmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLHMsYT10Lmpzb25wIT09ITEmJihkbi50ZXN0KHQudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIHQuZGF0YSYmISh0LmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJmRuLnRlc3QodC5kYXRhKSYmImRhdGEiKTtyZXR1cm4gYXx8Impzb25wIj09PXQuZGF0YVR5cGVzWzBdPyhpPXQuanNvbnBDYWxsYmFjaz14LmlzRnVuY3Rpb24odC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2ssYT90W2FdPXRbYV0ucmVwbGFjZShkbiwiJDEiK2kpOnQuanNvbnAhPT0hMSYmKHQudXJsKz0oVnQudGVzdCh0LnVybCk/IiYiOiI/IikrdC5qc29ucCsiPSIraSksdC5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHN8fHguZXJyb3IoaSsiIHdhcyBub3QgY2FsbGVkIiksc1swXX0sdC5kYXRhVHlwZXNbMF09Impzb24iLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7cz1hcmd1bWVudHN9LHIuYWx3YXlzKGZ1bmN0aW9uKCl7ZVtpXT1vLHRbaV0mJih0Lmpzb25wQ2FsbGJhY2s9bi5qc29ucENhbGxiYWNrLGhuLnB1c2goaSkpLHMmJnguaXNGdW5jdGlvbihvKSYmbyhzWzBdKSxzPW89dW5kZWZpbmVkfSksInNjcmlwdCIpOnVuZGVmaW5lZH0pLHguYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3ZhciBnbj14LmFqYXhTZXR0aW5ncy54aHIoKSxtbj17MDoyMDAsMTIyMzoyMDR9LHluPTAsdm49e307ZS5BY3RpdmVYT2JqZWN0JiZ4KGUpLm9uKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHZuKXZuW2VdKCk7dm49dW5kZWZpbmVkfSkseC5zdXBwb3J0LmNvcnM9ISFnbiYmIndpdGhDcmVkZW50aWFscyJpbiBnbix4LnN1cHBvcnQuYWpheD1nbj0hIWduLHguYWpheFRyYW5zcG9ydChmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5zdXBwb3J0LmNvcnN8fGduJiYhZS5jcm9zc0RvbWFpbj97c2VuZDpmdW5jdGlvbihuLHIpe3ZhciBpLG8scz1lLnhocigpO2lmKHMub3BlbihlLnR5cGUsZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpLGUueGhyRmllbGRzKWZvcihpIGluIGUueGhyRmllbGRzKXNbaV09ZS54aHJGaWVsZHNbaV07ZS5taW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUoZS5taW1lVHlwZSksZS5jcm9zc0RvbWFpbnx8blsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoblsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO2ZvcihpIGluIG4pcy5zZXRSZXF1ZXN0SGVhZGVyKGksbltpXSk7dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0JiYoZGVsZXRlIHZuW29dLHQ9cy5vbmxvYWQ9cy5vbmVycm9yPW51bGwsImFib3J0Ij09PWU/cy5hYm9ydCgpOiJlcnJvciI9PT1lP3Iocy5zdGF0dXN8fDQwNCxzLnN0YXR1c1RleHQpOnIobW5bcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsInN0cmluZyI9PXR5cGVvZiBzLnJlc3BvbnNlVGV4dD97dGV4dDpzLnJlc3BvbnNlVGV4dH06dW5kZWZpbmVkLHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPXQoKSxzLm9uZXJyb3I9dCgiZXJyb3IiKSx0PXZuW289eW4rK109dCgiYWJvcnQiKSxzLnNlbmQoZS5oYXNDb250ZW50JiZlLmRhdGF8fG51bGwpfSxhYm9ydDpmdW5jdGlvbigpe3QmJnQoKX19OnVuZGVmaW5lZH0pO3ZhciB4bixibix3bj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sVG49UmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrYisiKShbYS16JV0qKSQiLCJpIiksQ249L3F1ZXVlSG9va3MkLyxrbj1bQW5dLE5uPXsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpLHI9bi5jdXIoKSxpPVRuLmV4ZWModCksbz1pJiZpWzNdfHwoeC5jc3NOdW1iZXJbZV0/IiI6InB4Iikscz0oeC5jc3NOdW1iZXJbZV18fCJweCIhPT1vJiYrcikmJlRuLmV4ZWMoeC5jc3Mobi5lbGVtLGUpKSxhPTEsdT0yMDtpZihzJiZzWzNdIT09byl7bz1vfHxzWzNdLGk9aXx8W10scz0rcnx8MTtkbyBhPWF8fCIuNSIscy89YSx4LnN0eWxlKG4uZWxlbSxlLHMrbyk7d2hpbGUoYSE9PShhPW4uY3VyKCkvcikmJjEhPT1hJiYtLXUpfXJldHVybiBpJiYocz1uLnN0YXJ0PStzfHwrcnx8MCxuLnVuaXQ9byxuLmVuZD1pWzFdP3MrKGlbMV0rMSkqaVsyXToraVsyXSksbn1dfTtmdW5jdGlvbiBFbigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eG49dW5kZWZpbmVkfSkseG49eC5ub3coKX1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHIsaT0oTm5bdF18fFtdKS5jb25jYXQoTm5bIioiXSksbz0wLHM9aS5sZW5ndGg7Zm9yKDtzPm87bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBqbihlLHQsbil7dmFyIHIsaSxvPTAscz1rbi5sZW5ndGgsYT14LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO3ZhciB0PXhufHxFbigpLG49TWF0aC5tYXgoMCxsLnN0YXJ0VGltZStsLmR1cmF0aW9uLXQpLHI9bi9sLmR1cmF0aW9ufHwwLG89MS1yLHM9MCx1PWwudHdlZW5zLmxlbmd0aDtmb3IoO3U+cztzKyspbC50d2VlbnNbc10ucnVuKG8pO3JldHVybiBhLm5vdGlmeVdpdGgoZSxbbCxvLG5dKSwxPm8mJnU/bjooYS5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPWEucHJvbWlzZSh7ZWxlbTplLHByb3BzOnguZXh0ZW5kKHt9LHQpLG9wdHM6eC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTp4bnx8RW4oKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXguVHdlZW4oZSxsLm9wdHMsdCxuLGwub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxsLm9wdHMuZWFzaW5nKTtyZXR1cm4gbC50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2wudHdlZW5zLmxlbmd0aDowO2lmKGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7cj5uO24rKylsLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/YS5yZXNvbHZlV2l0aChlLFtsLHRdKTphLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKERuKGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO3M+bztvKyspaWYocj1rbltvXS5jYWxsKGwsZSxjLGwub3B0cykpcmV0dXJuIHI7cmV0dXJuIHgubWFwKGMsU24sbCkseC5pc0Z1bmN0aW9uKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKGUsbCkseC5meC50aW1lcih4LmV4dGVuZCh1LHtlbGVtOmUsYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBEbihlLHQpe3ZhciBuLHIsaSxvLHM7Zm9yKG4gaW4gZSlpZihyPXguY2FtZWxDYXNlKG4pLGk9dFtyXSxvPWVbbl0seC5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSkscz14LmNzc0hvb2tzW3JdLHMmJiJleHBhbmQiaW4gcyl7bz1zLmV4cGFuZChvKSxkZWxldGUgZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfXguQW5pbWF0aW9uPXguZXh0ZW5kKGpuLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7eC5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9yKDtpPnI7cisrKW49ZVtyXSxObltuXT1ObltuXXx8W10sTm5bbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9rbi51bnNoaWZ0KGUpOmtuLnB1c2goZSl9fSk7ZnVuY3Rpb24gQW4oZSx0LG4pe3ZhciByLGksbyxzLGEsdSxsPXRoaXMsYz17fSxwPWUuc3R5bGUsZj1lLm5vZGVUeXBlJiZMdChlKSxoPXEuZ2V0KGUsImZ4c2hvdyIpO24ucXVldWV8fChhPXguX3F1ZXVlSG9va3MoZSwiZngiKSxudWxsPT1hLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHU9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHUoKX0pLGEudW5xdWV1ZWQrKyxsLmFsd2F5cyhmdW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLHgucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksMT09PWUubm9kZVR5cGUmJigiaGVpZ2h0ImluIHR8fCJ3aWR0aCJpbiB0KSYmKG4ub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLCJpbmxpbmUiPT09eC5jc3MoZSwiZGlzcGxheSIpJiYibm9uZSI9PT14LmNzcyhlLCJmbG9hdCIpJiYocC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksbi5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsbC5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLHduLmV4ZWMoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZj8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09aXx8IWh8fGhbcl09PT11bmRlZmluZWQpY29udGludWU7Zj0hMH1jW3JdPWgmJmhbcl18fHguc3R5bGUoZSxyKX1pZigheC5pc0VtcHR5T2JqZWN0KGMpKXtoPyJoaWRkZW4iaW4gaCYmKGY9aC5oaWRkZW4pOmg9cS5hY2Nlc3MoZSwiZnhzaG93Iix7fSksbyYmKGguaGlkZGVuPSFmKSxmP3goZSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe3goZSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7cS5yZW1vdmUoZSwiZnhzaG93Iik7Zm9yKHQgaW4gYyl4LnN0eWxlKGUsdCxjW3RdKX0pO2ZvcihyIGluIGMpcz1TbihmP2hbcl06MCxyLGwpLHIgaW4gaHx8KGhbcl09cy5zdGFydCxmJiYocy5lbmQ9cy5zdGFydCxzLnN0YXJ0PSJ3aWR0aCI9PT1yfHwiaGVpZ2h0Ij09PXI/MTowKSl9fWZ1bmN0aW9uIExuKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBMbi5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfXguVHdlZW49TG4sTG4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMbixpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHwic3dpbmciLHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1yLHRoaXMudW5pdD1vfHwoeC5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPUxuLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpMbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj1Mbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5wb3M9dD10aGlzLm9wdGlvbnMuZHVyYXRpb24/eC5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpMbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxMbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9TG4ucHJvdG90eXBlLExuLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZS5lbGVtW2UucHJvcF18fGUuZWxlbS5zdHlsZSYmbnVsbCE9ZS5lbGVtLnN0eWxlW2UucHJvcF0/KHQ9eC5jc3MoZS5lbGVtLGUucHJvcCwiIiksdCYmImF1dG8iIT09dD90OjApOmUuZWxlbVtlLnByb3BdfSxzZXQ6ZnVuY3Rpb24oZSl7eC5meC5zdGVwW2UucHJvcF0/eC5meC5zdGVwW2UucHJvcF0oZSk6ZS5lbGVtLnN0eWxlJiYobnVsbCE9ZS5lbGVtLnN0eWxlW3guY3NzUHJvcHNbZS5wcm9wXV18fHguY3NzSG9va3NbZS5wcm9wXSk/eC5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCk6ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX0sTG4ucHJvcEhvb2tzLnNjcm9sbFRvcD1Mbi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx4LmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49eC5mblt0XTt4LmZuW3RdPWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUocW4odCwhMCksZSxyLGkpfX0pLHguZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKEx0KS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmlzRW1wdHlPYmplY3QoZSksbz14LnNwZWVkKHQsbixyKSxzPWZ1bmN0aW9uKCl7dmFyIHQ9am4odGhpcyx4LmV4dGVuZCh7fSxlKSxvKTsoaXx8cS5nZXQodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gcy5maW5pc2g9cyxpfHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKHMpOnRoaXMucXVldWUoby5xdWV1ZSxzKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChuKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj10LHQ9ZSxlPXVuZGVmaW5lZCksdCYmZSE9PSExJiZ0aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZSsicXVldWVIb29rcyIsbz14LnRpbWVycyxzPXEuZ2V0KHRoaXMpO2lmKGkpc1tpXSYmc1tpXS5zdG9wJiZyKHNbaV0pO2Vsc2UgZm9yKGkgaW4gcylzW2ldJiZzW2ldLnN0b3AmJkNuLnRlc3QoaSkmJnIoc1tpXSk7Zm9yKGk9by5sZW5ndGg7aS0tOylvW2ldLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW2ldLnF1ZXVlIT09ZXx8KG9baV0uYW5pbS5zdG9wKG4pLHQ9ITEsby5zcGxpY2UoaSwxKSk7KHR8fCFuKSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49cS5nZXQodGhpcykscj1uW2UrInF1ZXVlIl0saT1uW2UrInF1ZXVlSG9va3MiXSxvPXgudGltZXJzLHM9cj9yLmxlbmd0aDowO2ZvcihuLmZpbmlzaD0hMCx4LnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCghMCksby5zcGxpY2UodCwxKSk7Zm9yKHQ9MDtzPnQ7dCsrKXJbdF0mJnJbdF0uZmluaXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pO2Z1bmN0aW9uIHFuKGUsdCl7dmFyIG4scj17aGVpZ2h0OmV9LGk9MDtmb3IodD10PzE6MDs0Pmk7aSs9Mi10KW49anRbaV0sclsibWFyZ2luIituXT1yWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoci5vcGFjaXR5PXIud2lkdGg9ZSkscn14LmVhY2goe3NsaWRlRG93bjpxbigic2hvdyIpLHNsaWRlVXA6cW4oImhpZGUiKSxzbGlkZVRvZ2dsZTpxbigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSkseC5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP3guZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8eC5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiF4LmlzRnVuY3Rpb24odCkmJnR9O3JldHVybiByLmR1cmF0aW9uPXguZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiByLmR1cmF0aW9uP3IuZHVyYXRpb246ci5kdXJhdGlvbiBpbiB4LmZ4LnNwZWVkcz94LmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTp4LmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ci5xdWV1ZXx8ci5xdWV1ZT09PSEwKSYmKHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7eC5pc0Z1bmN0aW9uKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZ4LmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0seC5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfX0seC50aW1lcnM9W10seC5meD1Mbi5wcm90b3R5cGUuaW5pdCx4LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PXgudGltZXJzLG49MDtmb3IoeG49eC5ub3coKTt0Lmxlbmd0aD5uO24rKyllPXRbbl0sZSgpfHx0W25dIT09ZXx8dC5zcGxpY2Uobi0tLDEpO3QubGVuZ3RofHx4LmZ4LnN0b3AoKSx4bj11bmRlZmluZWR9LHguZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ4LnRpbWVycy5wdXNoKGUpJiZ4LmZ4LnN0YXJ0KCl9LHguZnguaW50ZXJ2YWw9MTMseC5meC5zdGFydD1mdW5jdGlvbigpe2JufHwoYm49c2V0SW50ZXJ2YWwoeC5meC50aWNrLHguZnguaW50ZXJ2YWwpKX0seC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChibiksYm49bnVsbH0seC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0seC5meC5zdGVwPXt9LHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4geC5ncmVwKHgudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSkseC5mbi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXVuZGVmaW5lZD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXt4Lm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7dmFyIHQsbixpPXRoaXNbMF0sbz17dG9wOjAsbGVmdDowfSxzPWkmJmkub3duZXJEb2N1bWVudDtpZihzKXJldHVybiB0PXMuZG9jdW1lbnRFbGVtZW50LHguY29udGFpbnModCxpKT8odHlwZW9mIGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09ciYmKG89aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksbj1IbihzKSx7dG9wOm8udG9wK24ucGFnZVlPZmZzZXQtdC5jbGllbnRUb3AsbGVmdDpvLmxlZnQrbi5wYWdlWE9mZnNldC10LmNsaWVudExlZnR9KTpvfSx4Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbCxjPXguY3NzKGUsInBvc2l0aW9uIikscD14KGUpLGY9e307InN0YXRpYyI9PT1jJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxhPXAub2Zmc2V0KCksbz14LmNzcyhlLCJ0b3AiKSx1PXguY3NzKGUsImxlZnQiKSxsPSgiYWJzb2x1dGUiPT09Y3x8ImZpeGVkIj09PWMpJiYobyt1KS5pbmRleE9mKCJhdXRvIik+LTEsbD8ocj1wLnBvc2l0aW9uKCkscz1yLnRvcCxpPXIubGVmdCk6KHM9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLHguaXNGdW5jdGlvbih0KSYmKHQ9dC5jYWxsKGUsbixhKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1hLnRvcCtzKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LWEubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpwLmNzcyhmKX19LHguZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbj10aGlzWzBdLHI9e3RvcDowLGxlZnQ6MH07cmV0dXJuImZpeGVkIj09PXguY3NzKG4sInBvc2l0aW9uIik/dD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihlPXRoaXMub2Zmc2V0UGFyZW50KCksdD10aGlzLm9mZnNldCgpLHgubm9kZU5hbWUoZVswXSwiaHRtbCIpfHwocj1lLm9mZnNldCgpKSxyLnRvcCs9eC5jc3MoZVswXSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxyLmxlZnQrPXguY3NzKGVbMF0sImJvcmRlckxlZnRXaWR0aCIsITApKSx7dG9wOnQudG9wLXIudG9wLXguY3NzKG4sIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LXIubGVmdC14LmNzcyhuLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnR8fHM7d2hpbGUoZSYmIXgubm9kZU5hbWUoZSwiaHRtbCIpJiYic3RhdGljIj09PXguY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8c30pfX0pLHguZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LG4pe3ZhciByPSJwYWdlWU9mZnNldCI9PT1uO3guZm5bdF09ZnVuY3Rpb24oaSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCxpLG8pe3ZhciBzPUhuKHQpO3JldHVybiBvPT09dW5kZWZpbmVkP3M/c1tuXTp0W2ldOihzP3Muc2Nyb2xsVG8ocj9lLnBhZ2VYT2Zmc2V0Om8scj9vOmUucGFnZVlPZmZzZXQpOnRbaV09byx1bmRlZmluZWQpfSx0LGksYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KTtmdW5jdGlvbiBIbihlKXtyZXR1cm4geC5pc1dpbmRvdyhlKT9lOjk9PT1lLm5vZGVUeXBlJiZlLmRlZmF1bHRWaWV3fXguZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrZSxjb250ZW50OnQsIiI6Im91dGVyIitlfSxmdW5jdGlvbihuLHIpe3guZm5bcl09ZnVuY3Rpb24ocixpKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoJiYobnx8ImJvb2xlYW4iIT10eXBlb2Ygcikscz1ufHwocj09PSEwfHxpPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQsbixyKXt2YXIgaTtyZXR1cm4geC5pc1dpbmRvdyh0KT90LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTo5PT09dC5ub2RlVHlwZT8oaT10LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIrZV0saVsic2Nyb2xsIitlXSx0LmJvZHlbIm9mZnNldCIrZV0saVsib2Zmc2V0IitlXSxpWyJjbGllbnQiK2VdKSk6cj09PXVuZGVmaW5lZD94LmNzcyh0LG4scyk6eC5zdHlsZSh0LG4scixzKX0sdCxvP3I6dW5kZWZpbmVkLG8sbnVsbCl9fSl9KSx4LmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHguZm4uYW5kU2VsZj14LmZuLmFkZEJhY2ssIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz14OiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiB4fSksIm9iamVjdCI9PXR5cGVvZiBlJiYib2JqZWN0Ij09dHlwZW9mIGUuZG9jdW1lbnQmJihlLmpRdWVyeT1lLiQ9eCl9KSh3aW5kb3cpOwogICAgICAgIGxvZygnVXNpbmcgaW5saW5lIGpRdWVyeScpCiAgICB9IGVsc2UgewogICAgICAgIGxvZygnVXNpbmcgQHJlcXVpcmUgalF1ZXJ5JykKICAgIH0KCiAgICAvLyBHZW5lcmljIGZ1bmN0aW9ucwoKICAgIC8vIEF2b2lkcyBjb25mbGljdHMgd2hlbiB0aGUgbWFpbiBwYWdlIGlzIGFsc28gdXNpbmcgalF1ZXJ5IG9yIGFub3RoZXIgbGlicmFyeSB1c2luZyAnJCcKICAgIC8vIHRoaXMuJCA9IHRoaXMualF1ZXJ5ID0galF1ZXJ5Lm5vQ29uZmxpY3QodHJ1ZSk7CiAgICAvLyAtLT4gSW5zdGVhZCBJIHVzZSBAZ3JhbnQgR01fYWRkU3R5bGUgd2hpY2ggcmVzdG9yZXMgdGhlIHNhbmRib3ggYW5kIHRodXMgYXZvaWQgdXMgdGhpcyB0cmljawoKICAgIC8vIFRoaXMgalF1ZXJ5IHBsdWdpbiB3aWxsIGdhdGhlciB0aGUgY29tbWVudHMgd2l0aGluCiAgICAvLyB0aGUgY3VycmVudCBqUXVlcnkgY29sbGVjdGlvbiwgcmV0dXJuaW5nIGFsbCB0aGUKICAgIC8vIGNvbW1lbnRzIGluIGEgbmV3IGpRdWVyeSBjb2xsZWN0aW9uLgogICAgLy8KICAgIC8vIE5PVEU6IENvbW1lbnRzIGFyZSB3cmFwcGVkIGluIERJViB0YWdzLgoKICAgIGpRdWVyeS5mbi5jb21tZW50cyA9IGZ1bmN0aW9uIChibG5EZWVwKSB7CiAgICAgICAgdmFyIGJsbkRlZXAgPSAoYmxuRGVlcCB8fCBmYWxzZSk7CiAgICAgICAgdmFyIGpDb21tZW50cyA9ICQoW10pOwoKICAgICAgICAvLyBMb29wIG92ZXIgZWFjaCBub2RlIHRvIHNlYXJjaCBpdHMgY2hpbGRyZW4gZm9yCiAgICAgICAgLy8gY29tbWVudCBub2RlcyBhbmQgZWxlbWVudCBub2RlcyAoaWYgZGVlcCBzZWFyY2gpLgogICAgICAgIHRoaXMuZWFjaCgKICAgICAgICAgICAgZnVuY3Rpb24gKGludEksIG9iak5vZGUpIHsKICAgICAgICAgICAgICAgIHZhciBvYmpDaGlsZE5vZGUgPSBvYmpOb2RlLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICB2YXIgc3RyUGFyZW50SUQgPSAkKHRoaXMpLmF0dHIoImlkIik7CgogICAgICAgICAgICAgICAgLy8gS2VlcCBsb29waW5nIG92ZXIgdGhlIHRvcC1sZXZlbCBjaGlsZHJlbgogICAgICAgICAgICAgICAgLy8gd2hpbGUgd2UgaGF2ZSBhIG5vZGUgdG8gZXhhbWluZS4KICAgICAgICAgICAgICAgIHdoaWxlIChvYmpDaGlsZE5vZGUpIHsKCiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgbm9kZSBpcyBhIGNvbW1lbnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKG9iakNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gOCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBjb21tZW50IG5vZGUuIEFkZCBpdCB0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbm9kZXMgY29sbGVjdGlvbiB3cmFwcGVkIGluIGEKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRElWIChhcyB3ZSBtYXkgaGF2ZSBIVE1MKS4KICAgICAgICAgICAgICAgICAgICAgICAgakNvbW1lbnRzID0gakNvbW1lbnRzLmFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8ZGl2IHJlbD0nIiArIHN0clBhcmVudElEICsgIic+IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpDaGlsZE5vZGUubm9kZVZhbHVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L2Rpdj4iCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgIGJsbkRlZXAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKG9iakNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gMSkKICAgICAgICAgICAgICAgICAgICApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIHRoaXMgbm9kZSBkZWVwbHkuCiAgICAgICAgICAgICAgICAgICAgICAgIGpDb21tZW50cyA9IGpDb21tZW50cy5hZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG9iakNoaWxkTm9kZSkuY29tbWVudHModHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNpYmxpbmcuCiAgICAgICAgICAgICAgICAgICAgb2JqQ2hpbGROb2RlID0gb2JqQ2hpbGROb2RlLm5leHRTaWJsaW5nOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICAvLyBSZXR1cm4gdGhlIGpRdWVyeSBjb21tZW50cyBjb2xsZWN0aW9uLgogICAgICAgIHJldHVybiAoakNvbW1lbnRzKTsKICAgIH0KCiAgICAvLyBUZXN0cyBpZiBhIHN0cmluZyBpcyBwYXJ0IG9mIGFub3RoZXIgb25lLgogICAgU3RyaW5nLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh0ZXN0U3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZih0ZXN0U3RyaW5nKSAhPSAtMQogICAgfQoKICAgIC8vIEFsbG93cyB0byByZW1vdmUgYSBzdWJzdHJpbmcgZnJvbSBhIHN0cmluZyBldmVuIHdoZW4gcHJlc2VudCBtdWx0aXBsZSB0aW1lcwogICAgU3RyaW5nLnByb3RvdHlwZS5yZW1vdmVBbGwgPSBmdW5jdGlvbiAodGVzdFN0cmluZykgewogICAgICAgIHZhciByZXRTdHJpbmcgPSB0aGlzOwogICAgICAgIHdoaWxlICgoY3VyckluZGV4ID0gcmV0U3RyaW5nLmluZGV4T2YodGVzdFN0cmluZykpICE9IC0xKSB7CiAgICAgICAgICAgIHJldFN0cmluZyA9IHJldFN0cmluZy5yZW1vdmVPbmNlKHRlc3RTdHJpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0U3RyaW5nCiAgICB9CgogICAgLy8gQWxsb3dzIHRvIHJlbW92ZSBhIHN1YnN0cmluZyBmcm9tIGEgc3RyaW5nIG9uZSB0aW1lLgogICAgU3RyaW5nLnByb3RvdHlwZS5yZW1vdmVPbmNlID0gZnVuY3Rpb24gKHRlc3RTdHJpbmcpIHsKICAgICAgICB2YXIgY3VyckluZGV4ID0gdGhpcy5pbmRleE9mKHRlc3RTdHJpbmcpCiAgICAgICAgaWYgKGN1cnJJbmRleCAhPSAtMSkgcmV0dXJuIHRoaXMuc3Vic3RyaW5nKDAsIGN1cnJJbmRleCkgKyB0aGlzLnN1YnN0cmluZyhjdXJySW5kZXggKyB0ZXN0U3RyaW5nLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcwogICAgfQoKICAgIC8vIEdlbmVyaWMgbG9nIGZ1bmN0aW9uCiAgICBmdW5jdGlvbiBsb2coc3RyaW5nKSB7CiAgICAgICAgaWYgKG9fZGVidWcpIGNvbnNvbGUubG9nKHN0cmluZykKICAgIH0KCiAgICAvLyBDaGVjayBpZiBhIEpRb2JqZWN0IGlzIHZhbGlkCiAgICBmdW5jdGlvbiBleGlzdHMoSlFvYmplY3QpIHsKICAgICAgICByZXR1cm4gKEpRb2JqZWN0Lmxlbmd0aCAhPSAwKQogICAgfQoKICAgIC8vIENoZWNrIGlmIGFuIGlucHV0IGNoZWNrYm94IGlzIGNoZWNrZWQKICAgIGZ1bmN0aW9uIGlzQ2hlY2tlZChKUW9iamVjdCkgewogICAgICAgIHJldHVybiBKUW9iamVjdC5wcm9wKCJjaGVja2VkIikKICAgIH0KCiAgICAvLyBVbmNoZWNrIGFuIGlucHV0IGNoZWNrYm94CiAgICBmdW5jdGlvbiB1bmNoZWNrKEpRb2JqZWN0KSB7CiAgICAgICAgaWYgKCFleGlzdHMoSlFvYmplY3QpKSByZXR1cm4gZmFsc2UKICAgICAgICBpZiAoaXNDaGVja2VkKEpRb2JqZWN0KSkgSlFvYmplY3QuY2xpY2soKQogICAgICAgIC8vIFRoZSBvYmplY3QgZXhpc3RzLCB3ZSBoYXZlIHVuY2hlY2tlZCBpdCBpZiBpdCB3YXMgY2hlY2tlZAogICAgICAgIHJldHVybiB0cnVlCiAgICB9CgogICAgLy8gSGlkZSBhbiBlbGVtZW50IChkb2Vzbid0IGRlbGV0ZSBpdCkKICAgIGZ1bmN0aW9uIGhpZGUoSlFvYmplY3QpIHsKICAgICAgICBpZiAoIWV4aXN0cyhKUW9iamVjdCkpIHJldHVybiBmYWxzZQogICAgICAgIEpRb2JqZWN0LmF0dHIoInN0eWxlIiwgImRpc3BsYXkgOiBub25lICFpbXBvcnRhbnQiKQogICAgICAgIHJldHVybiB0cnVlCiAgICB9CgogICAgLy8gRm9yY2UgYW4gZWxlbWVudCB0byBzaG93CiAgICBmdW5jdGlvbiBzaG93KEpRb2JqZWN0KSB7CiAgICAgICAgaWYgKCFleGlzdHMoSlFvYmplY3QpKSByZXR1cm4gZmFsc2UKCiAgICAgICAgLy8gRklYTUU6IGF2b2lkIHRvIGJsaW5kbHkgc2V0IHRoZSBkaXNwbGF5IHRvIGJsb2NrIChjYW4gYmUgaW5saW5lIHRvbykKICAgICAgICBKUW9iamVjdC5hdHRyKCJzdHlsZSIsICJkaXNwbGF5IDogYmxvY2sgIWltcG9ydGFudCIpCiAgICAgICAgcmV0dXJuIHRydWUKICAgIH0KCiAgICBmb3IgKHZhciBpIGluIGFkd2FyZVJ1bGVzKSB7CiAgICAgICAgLy8gQ3JlYXRlIGEgUmVnRXhwIHRvIHRlc3QgaWYgd2UgYXJlIG9uIHRoaXMgZG9tYWluCiAgICAgICAgdmFyIHRlc3RIb3N0cyA9IG5ldyBSZWdFeHAoYWR3YXJlUnVsZXNbaV0uaG9zdC5qb2luKCd8JyksICdpJykKICAgICAgICAvLyBJZiB3ZSBhcmUgb24gb25lIG9mIHRoZSBkb21haW5zCiAgICAgICAgaWYgKHRlc3RIb3N0cy50ZXN0KGRvY3VtZW50LmRvbWFpbikpIHsKICAgICAgICAgICAgdmFyIGN1cnJSdWxlID0gYWR3YXJlUnVsZXNbaV0KICAgICAgICAgICAgYnJlYWsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHR5cGVvZiBjdXJyUnVsZSA9PSAidW5kZWZpbmVkIikgcmV0dXJuCgogICAgdmFyIGFwcGx5UnVsZXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgbG9nKCdUcnlpbmcgdG8gZXhlY3V0ZSBjdXN0b20gZnVuY3Rpb246ICcgKyBjdXJyUnVsZS5leGVjKQogICAgICAgIGlmIChjdXJyUnVsZS5leGVjICE9IHVuZGVmaW5lZCkgY3VyclJ1bGUuZXhlYygpOwogICAgICAgIGxvZygiSXRlcmF0aW5nIHRocm91Z2ggdW5jaGVja3MiKQoKICAgICAgICAvLyBJZiB0aGVyZSBpcyBzb21ldGhpbmcgdG8gdW5jaGVjawogICAgICAgIGlmIChjdXJyUnVsZS51bmNoZWNrICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAvLyBJdGVyYXRlIGVhY2ggY2hlY2tib3ggdG8gdW5jaGVjayBpdAogICAgICAgICAgICAkLmVhY2goY3VyclJ1bGUudW5jaGVjaywgZnVuY3Rpb24gKGtleSwgY3VyclVuY2hlY2spIHsKICAgICAgICAgICAgICAgIGxvZygiVHJ5aW5nIHRvIHVuY2hlY2sgWyIgKyBrZXkgKyAnXScgKyBjdXJyVW5jaGVjaykKICAgICAgICAgICAgICAgIC8vIENvbnN0YW50bHkgdHJ5aW5nIHRvIHVuY2hlY2sgdGhlIGNoZWNrYm94CiAgICAgICAgICAgICAgICBpZiAoY3VyclJ1bGUub3B0dW5jaGVjayAhPSB1bmRlZmluZWQgJiYgY3VyclJ1bGUub3B0dW5jaGVjay5jb25zdGFudGNoZWNrID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICB1bmNoZWNrKCQoY3VyclVuY2hlY2spKQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY0hpZGUgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuY2hlY2sgaXQKICAgICAgICAgICAgICAgICAgICAgICAgdW5jaGVjaygkKGN1cnJVbmNoZWNrKSkKICAgICAgICAgICAgICAgICAgICB9LCAxMDApCiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1bmNoZWNraW5nIGl0IG9uY2UKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoZWNrYm94IHdhcyBzdWNjZXNzZnVsbHkgdW5jaGVja2VkCiAgICAgICAgICAgICAgICAgICAgaWYgKHVuY2hlY2soJChjdXJyVW5jaGVjaykpKSByZXR1cm4KICAgICAgICAgICAgICAgICAgICBsb2coIkNvdWxkbid0IHVuY2hlY2sgdGhlIGNoZWNrYm94IikKICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gdW5jaGVjayBpdCBsYXRlcgogICAgICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY1VuY2hlY2sgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB1bmNoZWNrIHN1Y2NlZWRlZCB0aGlzIHRpbWUsIHdlIHN0b3AgdGhlIHVuY2hlY2tpbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuY2hlY2soJChjdXJyVW5jaGVjaykpKSBjbGVhckludGVydmFsKHBlcmlvZGljVW5jaGVjaykKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjb250aW51ZSB0byBjaGVjawogICAgICAgICAgICAgICAgICAgIH0sIDEwMCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZXJlIGlzIHNvbWV0aGluZyB0byBoaWRlCiAgICAgICAgaWYgKGN1cnJSdWxlLmhpZGUgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIC8vIEl0ZXJhdGUgZWFjaCBoaWRlIHRvIGhpZGUgaXQKICAgICAgICAgICAgJC5lYWNoKGN1cnJSdWxlLmhpZGUsIGZ1bmN0aW9uIChrZXksIGN1cnJIaWRlKSB7CiAgICAgICAgICAgICAgICBsb2coIlRyeWluZyB0byBoaWRlICIgKyBjdXJySGlkZSkKICAgICAgICAgICAgICAgIC8vIElmIHdlIHRyeSB0byBjb250aW51ZSBoaWRpbmcgaXQgZXZlbiBpZiB0aGUgaGlkaW5nIHdhcyBhbHJlYWR5IHN1Y2Nlc3NmdWwKICAgICAgICAgICAgICAgIGlmIChjdXJyUnVsZS5vcHRoaWRlICE9IHVuZGVmaW5lZCAmJiBjdXJyUnVsZS5vcHRoaWRlLmNvbnN0YW50Y2hlY2sgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGhpZGUoJChjdXJySGlkZSkpCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmlvZGljSGlkZSA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSBpdAogICAgICAgICAgICAgICAgICAgICAgICBoaWRlKCQoY3VyckhpZGUpKQogICAgICAgICAgICAgICAgICAgIH0sIDEwMCkKICAgICAgICAgICAgICAgICAgICAvLyBIaWRlIGl0IG9uY2UsIHRoZW4gc3RvcCB0cnlpbmcgdG8gaGlkZSBpdCAodXN1YWwgY2FzZSwgaXQgc3RheXMgaGlkZGVuKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IHRvIGhpZGUgd2FzIGhpZGRlbgogICAgICAgICAgICAgICAgICAgIGlmIChoaWRlKCQoY3VyckhpZGUpKSkgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGhpZGUgaXQgbGF0ZXIKICAgICAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNIaWRlID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgaGlkZSBzdWNjZWVkZWQgdGhpcyB0aW1lLCB3ZSBzdG9wIHRvIHRyeSBoaWRpbmcgaXQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZGUoJChjdXJySGlkZSkpKSBjbGVhckludGVydmFsKHBlcmlvZGljSGlkZSkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjb250aW51ZSB0byB0cnkgaGlkaW5nIGl0CiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHNob3cKICAgICAgICBpZiAoY3VyclJ1bGUuc2hvdyAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgLy8gSXRlcmF0ZSBlYWNoIHNob3cgdG8gc2hvdyBpdAogICAgICAgICAgICAkLmVhY2goY3VyclJ1bGUuc2hvdywgZnVuY3Rpb24gKGtleSwgY3VyclNob3cpIHsKICAgICAgICAgICAgICAgIGxvZygiVHJ5aW5nIHRvIHNob3cgIiArIGN1cnJTaG93KQoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgdG8gc2hvdyB3YXMgc3VjY2Vzc2Z1bGx5IHNob3duCiAgICAgICAgICAgICAgICBpZiAoc2hvdygkKGN1cnJTaG93KSkpIHJldHVybgoKICAgICAgICAgICAgICAgIC8vIFRyeSB0byBzaG93IGl0IGxhdGVyCiAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNTaG93ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHNob3coJChjdXJyU2hvdykpCiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHNob3cgc3VjY2VlZGVkIHRoaXMgdGltZSwgd2Ugc3RvcCB0byB0cnkgc2hvd2luZyBpdAogICAgICAgICAgICAgICAgICAgIGlmIChzaG93KCQoY3VyclNob3cpKSkgY2xlYXJJbnRlcnZhbChwZXJpb2RpY1Nob3cpCiAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjb250aW51ZSB0byB0cnkgc2hvd2luZyBpdAogICAgICAgICAgICAgICAgfSwgMTAwKQogICAgICAgICAgICB9KQogICAgICAgIH0KICAgIH0KCiAgICAvLyBHb29nbGUgQ2hyb21lIHRyaWNrOiBzb21ldGltZXMgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCBhZnRlciB0aGF0IERPTUNvbnRlbnRMb2FkZWQgd2FzIHRyaWdnZXJlZCwgaW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHJ1biBvdXIgY29kZQogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT0gImNvbXBsZXRlIikgewogICAgICAgIGFwcGx5UnVsZXMoKQogICAgICAgIGxvZygiRGlyZWN0bHkgYXBwbHlpbmcgcnVsZXMiKQogICAgfSBlbHNlIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGFwcGx5UnVsZXMpCiAgICAgICAgbG9nKCJXYWl0aW5nIGZvciBET01Db250ZW50TG9hZGVkIHRvIGFwcGx5IHJ1bGVzIikKICAgIH0KfSgpCg==","requires":[{"meta":{"name":"jquery-2.0.3.min.js","url":"http://code.jquery.com/jquery-2.0.3.min.js","ts":1614525786900,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2Mi4wLjMgfCAoYykgMjAwNSwgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiB8IGpxdWVyeS5vcmcvbGljZW5zZQovL0Agc291cmNlTWFwcGluZ1VSTD1qcXVlcnktMi4wLjMubWluLm1hcAoqLwooZnVuY3Rpb24oZSx1bmRlZmluZWQpe3ZhciB0LG4scj10eXBlb2YgdW5kZWZpbmVkLGk9ZS5sb2NhdGlvbixvPWUuZG9jdW1lbnQscz1vLmRvY3VtZW50RWxlbWVudCxhPWUualF1ZXJ5LHU9ZS4kLGw9e30sYz1bXSxwPSIyLjAuMyIsZj1jLmNvbmNhdCxoPWMucHVzaCxkPWMuc2xpY2UsZz1jLmluZGV4T2YsbT1sLnRvU3RyaW5nLHk9bC5oYXNPd25Qcm9wZXJ0eSx2PXAudHJpbSx4PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB4LmZuLmluaXQoZSxuLHQpfSxiPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLHc9L1xTKy9nLFQ9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxDPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8saz0vXi1tcy0vLE49Ly0oW1xkYS16XSkvZ2ksRT1mdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9LFM9ZnVuY3Rpb24oKXtvLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLFMsITEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsUywhMSkseC5yZWFkeSgpfTt4LmZuPXgucHJvdG90eXBlPXtqcXVlcnk6cCxjb25zdHJ1Y3Rvcjp4LGluaXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoIWUpcmV0dXJuIHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihyPSI8Ij09PWUuY2hhckF0KDApJiYiPiI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpULmV4ZWMoZSksIXJ8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2YgeD90WzBdOnQseC5tZXJnZSh0aGlzLHgucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6bywhMCkpLEMudGVzdChyWzFdKSYmeC5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpeC5pc0Z1bmN0aW9uKHRoaXNbcl0pP3RoaXNbcl0odFtyXSk6dGhpcy5hdHRyKHIsdFtyXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGk9by5nZXRFbGVtZW50QnlJZChyWzJdKSxpJiZpLnBhcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09aSksdGhpcy5jb250ZXh0PW8sdGhpcy5zZWxlY3Rvcj1lLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTp4LmlzRnVuY3Rpb24oZSk/bi5yZWFkeShlKTooZS5zZWxlY3RvciE9PXVuZGVmaW5lZCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx4Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBkLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90aGlzLnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4geC5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh4Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0seC5mbi5pbml0LnByb3RvdHlwZT14LmZuLHguZXh0ZW5kPXguZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLHM9YXJndW1lbnRzWzBdfHx7fSxhPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihsPXMscz1hcmd1bWVudHNbMV18fHt9LGE9MiksIm9iamVjdCI9PXR5cGVvZiBzfHx4LmlzRnVuY3Rpb24ocyl8fChzPXt9KSx1PT09YSYmKHM9dGhpcywtLWEpO3U+YTthKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW2FdKSlmb3IodCBpbiBlKW49c1t0XSxyPWVbdF0scyE9PXImJihsJiZyJiYoeC5pc1BsYWluT2JqZWN0KHIpfHwoaT14LmlzQXJyYXkocikpKT8oaT8oaT0hMSxvPW4mJnguaXNBcnJheShuKT9uOltdKTpvPW4mJnguaXNQbGFpbk9iamVjdChuKT9uOnt9LHNbdF09eC5leHRlbmQobCxvLHIpKTpyIT09dW5kZWZpbmVkJiYoc1t0XT1yKSk7cmV0dXJuIHN9LHguZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhwK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vQ29uZmxpY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGUuJD09PXgmJihlLiQ9dSksdCYmZS5qUXVlcnk9PT14JiYoZS5qUXVlcnk9YSkseH0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oZSl7ZT94LnJlYWR5V2FpdCsrOngucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihlKXsoZT09PSEwPy0teC5yZWFkeVdhaXQ6eC5pc1JlYWR5KXx8KHguaXNSZWFkeT0hMCxlIT09ITAmJi0teC5yZWFkeVdhaXQ+MHx8KG4ucmVzb2x2ZVdpdGgobyxbeF0pLHguZm4udHJpZ2dlciYmeChvKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKSkpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PT14LnR5cGUoZSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9lKyIiOiJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGU/bFttLmNhbGwoZSldfHwib2JqZWN0Ijp0eXBlb2YgZX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXtpZigib2JqZWN0IiE9PXgudHlwZShlKXx8ZS5ub2RlVHlwZXx8eC5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXkuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEwfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKGUpfSxwYXJzZUhUTUw6ZnVuY3Rpb24oZSx0LG4pe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0PXR8fG87dmFyIHI9Qy5leGVjKGUpLGk9IW4mJltdO3JldHVybiByP1t0LmNyZWF0ZUVsZW1lbnQoclsxXSldOihyPXguYnVpbGRGcmFnbWVudChbZV0sdCxpKSxpJiZ4KGkpLnJlbW92ZSgpLHgubWVyZ2UoW10sci5jaGlsZE5vZGVzKSl9LHBhcnNlSlNPTjpKU09OLnBhcnNlLHBhcnNlWE1MOmZ1bmN0aW9uKGUpe3ZhciB0LG47aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7bj1uZXcgRE9NUGFyc2VyLHQ9bi5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC94bWwiKX1jYXRjaChyKXt0PXVuZGVmaW5lZH1yZXR1cm4oIXR8fHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmeC5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihlKXt2YXIgdCxuPWV2YWw7ZT14LnRyaW0oZSksZSYmKDE9PT1lLmluZGV4T2YoInVzZSBzdHJpY3QiKT8odD1vLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLHQudGV4dD1lLG8uaGVhZC5hcHBlbmRDaGlsZCh0KS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpKTpuKGUpKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaywibXMtIikucmVwbGFjZShOLEUpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLHM9aihlKTtpZihuKXtpZihzKXtmb3IoO28+aTtpKyspaWYocj10LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBpZihzKXtmb3IoO28+aTtpKyspaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjp2LmNhbGwoZSl9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYoaihPYmplY3QoZSkpP3gubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOmguY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTpnLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoLHI9ZS5sZW5ndGgsaT0wO2lmKCJudW1iZXIiPT10eXBlb2Ygbilmb3IoO24+aTtpKyspZVtyKytdPXRbaV07ZWxzZSB3aGlsZSh0W2ldIT09dW5kZWZpbmVkKWVbcisrXT10W2krK107cmV0dXJuIGUubGVuZ3RoPXIsZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT1bXSxvPTAscz1lLmxlbmd0aDtmb3Iobj0hIW47cz5vO28rKylyPSEhdChlW29dLG8pLG4hPT1yJiZpLnB1c2goZVtvXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpLGE9W107aWYocylmb3IoO28+aTtpKyspcj10KGVbaV0saSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7ZWxzZSBmb3IoaSBpbiBlKXI9dChlW2ldLGksbiksbnVsbCE9ciYmKGFbYS5sZW5ndGhdPXIpO3JldHVybiBmLmFwcGx5KFtdLGEpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYobj1lW3RdLHQ9ZSxlPW4pLHguaXNGdW5jdGlvbihlKT8ocj1kLmNhbGwoYXJndW1lbnRzLDIpLGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KGQuY2FsbChhcmd1bWVudHMpKSl9LGkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHx4Lmd1aWQrKyxpKTp1bmRlZmluZWR9LGFjY2VzczpmdW5jdGlvbihlLHQsbixyLGksbyxzKXt2YXIgYT0wLHU9ZS5sZW5ndGgsbD1udWxsPT1uO2lmKCJvYmplY3QiPT09eC50eXBlKG4pKXtpPSEwO2ZvcihhIGluIG4peC5hY2Nlc3MoZSx0LGEsblthXSwhMCxvLHMpfWVsc2UgaWYociE9PXVuZGVmaW5lZCYmKGk9ITAseC5pc0Z1bmN0aW9uKHIpfHwocz0hMCksbCYmKHM/KHQuY2FsbChlLHIpLHQ9bnVsbCk6KGw9dCx0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbC5jYWxsKHgoZSksbil9KSksdCkpZm9yKDt1PmE7YSsrKXQoZVthXSxuLHM/cjpyLmNhbGwoZVthXSxhLHQoZVthXSxuKSkpO3JldHVybiBpP2U6bD90LmNhbGwoZSk6dT90KGVbMF0sbik6b30sbm93OkRhdGUubm93LHN3YXA6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzPXt9O2ZvcihvIGluIHQpc1tvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPXNbb107cmV0dXJuIGl9fSkseC5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKHQpe3JldHVybiBufHwobj14LkRlZmVycmVkKCksImNvbXBsZXRlIj09PW8ucmVhZHlTdGF0ZT9zZXRUaW1lb3V0KHgucmVhZHkpOihvLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLFMsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsUywhMSkpKSxuLnByb21pc2UodCl9LHguZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2xbIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gaihlKXt2YXIgdD1lLmxlbmd0aCxuPXgudHlwZShlKTtyZXR1cm4geC5pc1dpbmRvdyhlKT8hMToxPT09ZS5ub2RlVHlwZSYmdD8hMDoiYXJyYXkiPT09bnx8ImZ1bmN0aW9uIiE9PW4mJigwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiZ0PjAmJnQtMSBpbiBlKX10PXgobyksZnVuY3Rpb24oZSx1bmRlZmluZWQpe3ZhciB0LG4scixpLG8scyxhLHUsbCxjLHAsZixoLGQsZyxtLHksdj0ic2l6emxlIistbmV3IERhdGUsYj1lLmRvY3VtZW50LHc9MCxUPTAsQz1zdCgpLGs9c3QoKSxOPXN0KCksRT0hMSxTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PyhFPSEwLDApOjB9LGo9dHlwZW9mIHVuZGVmaW5lZCxEPTE8PDMxLEE9e30uaGFzT3duUHJvcGVydHksTD1bXSxxPUwucG9wLEg9TC5wdXNoLE89TC5wdXNoLEY9TC5zbGljZSxQPUwuaW5kZXhPZnx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3RoO2Zvcig7bj50O3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sUj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLFc9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIiwkPVcucmVwbGFjZSgidyIsIncjIiksQj0iXFxbIitNKyIqKCIrVysiKSIrTSsiKig/OihbKl4kfCF+XT89KSIrTSsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrJCsiKXwpfCkiK00rIipcXF0iLEk9IjooIitXKyIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitCLnJlcGxhY2UoMyw4KSsiKSopfC4qKVxcKXwpIix6PVJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPVJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSxYPVJlZ0V4cCgiXiIrTSsiKihbPit+XXwiK00rIikiK00rIioiKSxVPVJlZ0V4cChNKyIqWyt+XSIpLFk9UmVnRXhwKCI9IitNKyIqKFteXFxdJ1wiXSopIitNKyIqXFxdIiwiZyIpLFY9UmVnRXhwKEkpLEc9UmVnRXhwKCJeIiskKyIkIiksSj17SUQ6UmVnRXhwKCJeIygiK1crIikiKSxDTEFTUzpSZWdFeHAoIl5cXC4oIitXKyIpIiksVEFHOlJlZ0V4cCgiXigiK1cucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOlJlZ0V4cCgiXiIrQiksUFNFVURPOlJlZ0V4cCgiXiIrSSksQ0hJTEQ6UmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzooWystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4iK00rIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrTSsiKigoPzotXFxkKT9cXGQqKSIrTSsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sUT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sSz0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLFo9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxldD0vXmhcZCQvaSx0dD0vJ3xcXC9nLG50PVJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitNKyI/fCgiK00rIil8LikiLCJpZyIpLHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iMHgiK3QtNjU1MzY7cmV0dXJuIHIhPT1yfHxuP3Q6MD5yP1N0cmluZy5mcm9tQ2hhckNvZGUocis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxyPj4xMCw1NjMyMHwxMDIzJnIpfTt0cnl7Ty5hcHBseShMPUYuY2FsbChiLmNoaWxkTm9kZXMpLGIuY2hpbGROb2RlcyksTFtiLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChpdCl7Tz17YXBwbHk6TC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtILmFwcGx5KGUsRi5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb3QoZSx0LHIsaSl7dmFyIG8scyxhLHUsbCxmLGcsbSx4LHc7aWYoKHQ/dC5vd25lckRvY3VtZW50fHx0OmIpIT09cCYmYyh0KSx0PXR8fHAscj1yfHxbXSwhZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiByO2lmKDEhPT0odT10Lm5vZGVUeXBlKSYmOSE9PXUpcmV0dXJuW107aWYoaCYmIWkpe2lmKG89Sy5leGVjKGUpKWlmKGE9b1sxXSl7aWYoOT09PXUpe2lmKHM9dC5nZXRFbGVtZW50QnlJZChhKSwhc3x8IXMucGFyZW50Tm9kZSlyZXR1cm4gcjtpZihzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxzZSBpZih0Lm93bmVyRG9jdW1lbnQmJihzPXQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSkmJnkodCxzKSYmcy5pZD09PWEpcmV0dXJuIHIucHVzaChzKSxyfWVsc2V7aWYob1syXSlyZXR1cm4gTy5hcHBseShyLHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLHI7aWYoKGE9b1szXSkmJm4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBPLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpKSxyfWlmKG4ucXNhJiYoIWR8fCFkLnRlc3QoZSkpKXtpZihtPWc9dix4PXQsdz05PT09dSYmZSwxPT09dSYmIm9iamVjdCIhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Y9Z3QoZSksKGc9dC5nZXRBdHRyaWJ1dGUoImlkIikpP209Zy5yZXBsYWNlKHR0LCJcXCQmIik6dC5zZXRBdHRyaWJ1dGUoImlkIixtKSxtPSJbaWQ9JyIrbSsiJ10gIixsPWYubGVuZ3RoO3doaWxlKGwtLSlmW2xdPW0rbXQoZltsXSk7eD1VLnRlc3QoZSkmJnQucGFyZW50Tm9kZXx8dCx3PWYuam9pbigiLCIpfWlmKHcpdHJ5e3JldHVybiBPLmFwcGx5KHIseC5xdWVyeVNlbGVjdG9yQWxsKHcpKSxyfWNhdGNoKFQpe31maW5hbGx5e2d8fHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGt0KGUucmVwbGFjZSh6LCIkMSIpLHQscixpKX1mdW5jdGlvbiBzdCgpe3ZhciBlPVtdO2Z1bmN0aW9uIHQobixyKXtyZXR1cm4gZS5wdXNoKG4rPSIgIik+aS5jYWNoZUxlbmd0aCYmZGVsZXRlIHRbZS5zaGlmdCgpXSx0W25dPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIGVbdl09ITAsZX1mdW5jdGlvbiB1dChlKXt2YXIgdD1wLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2gobil7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGx0KGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9ZS5sZW5ndGg7d2hpbGUoci0tKWkuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmKH50LnNvdXJjZUluZGV4fHxEKS0ofmUuc291cmNlSW5kZXh8fEQpO2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBwdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1uJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09bnx8ImJ1dHRvbiI9PT1uKSYmdC50eXBlPT09ZX19ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIGF0KGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0LGF0KGZ1bmN0aW9uKG4scil7dmFyIGksbz1lKFtdLG4ubGVuZ3RoLHQpLHM9by5sZW5ndGg7d2hpbGUocy0tKW5baT1vW3NdXSYmKG5baV09IShyW2ldPW5baV0pKX0pfSl9cz1vdC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQ/IkhUTUwiIT09dC5ub2RlTmFtZTohMX0sbj1vdC5zdXBwb3J0PXt9LGM9b3Quc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLm93bmVyRG9jdW1lbnR8fGU6YixyPXQuZGVmYXVsdFZpZXc7cmV0dXJuIHQhPT1wJiY5PT09dC5ub2RlVHlwZSYmdC5kb2N1bWVudEVsZW1lbnQ/KHA9dCxmPXQuZG9jdW1lbnRFbGVtZW50LGg9IXModCksciYmci5hdHRhY2hFdmVudCYmciE9PXIudG9wJiZyLmF0dGFjaEV2ZW50KCJvbmJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXtjKCl9KSxuLmF0dHJpYnV0ZXM9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksbi5nZXRFbGVtZW50c0J5VGFnTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZCh0LmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2EnPjwvZGl2PjxkaXYgY2xhc3M9J2EgaSc+PC9kaXY+IixlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lPSJpIiwyPT09ZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpIikubGVuZ3RofSksbi5nZXRCeUlkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBmLmFwcGVuZENoaWxkKGUpLmlkPXYsIXQuZ2V0RWxlbWVudHNCeU5hbWV8fCF0LmdldEVsZW1lbnRzQnlOYW1lKHYpLmxlbmd0aH0pLG4uZ2V0QnlJZD8oaS5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQhPT1qJiZoKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuJiZuLnBhcmVudE5vZGU/W25dOltdfX0saS5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKG50LHJ0KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19KTooZGVsZXRlIGkuZmluZC5JRCxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT09aiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVlPT09dH19KSxpLmZpbmQuVEFHPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHlwZW9mIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1qP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6dW5kZWZpbmVkfTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT0wLG89dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTtpZigiKiI9PT1lKXt3aGlsZShuPW9baSsrXSkxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBvfSxpLmZpbmQuQ0xBU1M9bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT09aiYmaD90LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSk6dW5kZWZpbmVkfSxnPVtdLGQ9W10sKG4ucXNhPVEudGVzdCh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHV0KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGQucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8ZC5wdXNoKCI6Y2hlY2tlZCIpfSksdXQoZnVuY3Rpb24oZSl7dmFyIG49dC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO24uc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZChuKS5zZXRBdHRyaWJ1dGUoInQiLCIiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0Xj0nJ10iKS5sZW5ndGgmJmQucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxkLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksZC5wdXNoKCIsLio6Iil9KSksKG4ubWF0Y2hlc1NlbGVjdG9yPVEudGVzdChtPWYud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxmLm1vek1hdGNoZXNTZWxlY3Rvcnx8Zi5vTWF0Y2hlc1NlbGVjdG9yfHxmLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnV0KGZ1bmN0aW9uKGUpe24uZGlzY29ubmVjdGVkTWF0Y2g9bS5jYWxsKGUsImRpdiIpLG0uY2FsbChlLCJbcyE9JyddOngiKSxnLnB1c2goIiE9IixJKX0pLGQ9ZC5sZW5ndGgmJlJlZ0V4cChkLmpvaW4oInwiKSksZz1nLmxlbmd0aCYmUmVnRXhwKGcuam9pbigifCIpKSx5PVEudGVzdChmLmNvbnRhaW5zKXx8Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LFM9Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHIpe2lmKGU9PT1yKXJldHVybiBFPSEwLDA7dmFyIGk9ci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKTtyZXR1cm4gaT8xJml8fCFuLnNvcnREZXRhY2hlZCYmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PWk/ZT09PXR8fHkoYixlKT8tMTpyPT09dHx8eShiLHIpPzE6bD9QLmNhbGwobCxlKS1QLmNhbGwobCxyKTowOjQmaT8tMToxOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MX06ZnVuY3Rpb24oZSxuKXt2YXIgcixpPTAsbz1lLnBhcmVudE5vZGUscz1uLnBhcmVudE5vZGUsYT1bZV0sdT1bbl07aWYoZT09PW4pcmV0dXJuIEU9ITAsMDtpZighb3x8IXMpcmV0dXJuIGU9PT10Py0xOm49PT10PzE6bz8tMTpzPzE6bD9QLmNhbGwobCxlKS1QLmNhbGwobCxuKTowO2lmKG89PT1zKXJldHVybiBjdChlLG4pO3I9ZTt3aGlsZShyPXIucGFyZW50Tm9kZSlhLnVuc2hpZnQocik7cj1uO3doaWxlKHI9ci5wYXJlbnROb2RlKXUudW5zaGlmdChyKTt3aGlsZShhW2ldPT09dVtpXSlpKys7cmV0dXJuIGk/Y3QoYVtpXSx1W2ldKTphW2ldPT09Yj8tMTp1W2ldPT09Yj8xOjB9LHQpOnB9LG90Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gb3QoZSxudWxsLG51bGwsdCl9LG90Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx0PXQucmVwbGFjZShZLCI9JyQxJ10iKSwhKCFuLm1hdGNoZXNTZWxlY3Rvcnx8IWh8fGcmJmcudGVzdCh0KXx8ZCYmZC50ZXN0KHQpKSl0cnl7dmFyIHI9bS5jYWxsKGUsdCk7aWYocnx8bi5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiByfWNhdGNoKGkpe31yZXR1cm4gb3QodCxwLG51bGwsW2VdKS5sZW5ndGg+MH0sb3QuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSkseShlLHQpfSxvdC5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpO3ZhciByPWkuYXR0ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLG89ciYmQS5jYWxsKGkuYXR0ckhhbmRsZSx0LnRvTG93ZXJDYXNlKCkpP3IoZSx0LCFoKTp1bmRlZmluZWQ7cmV0dXJuIG89PT11bmRlZmluZWQ/bi5hdHRyaWJ1dGVzfHwhaD9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNwZWNpZmllZD9vLnZhbHVlOm51bGw6b30sb3QuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LG90LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQscj1bXSxpPTAsbz0wO2lmKEU9IW4uZGV0ZWN0RHVwbGljYXRlcyxsPSFuLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KFMpLEUpe3doaWxlKHQ9ZVtvKytdKXQ9PT1lW29dJiYoaT1yLnB1c2gobykpO3doaWxlKGktLSllLnNwbGljZShyW2ldLDEpfXJldHVybiBlfSxvPW90LmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPW8oZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2UgZm9yKDt0PWVbcl07cisrKW4rPW8odCk7cmV0dXJuIG59LGk9b3Quc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86YXQsbWF0Y2g6SixhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKG50LHJ0KSxlWzNdPShlWzRdfHxlWzVdfHwiIikucmVwbGFjZShudCxydCksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fG90LmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJm90LmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzVdJiZlWzJdO3JldHVybiBKLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXSYmZVs0XSE9PXVuZGVmaW5lZD9lWzJdPWVbNF06biYmVi50ZXN0KG4pJiYodD1ndChuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUNbZSsiICJdO3JldHVybiB0fHwodD1SZWdFeHAoIihefCIrTSsiKSIrZSsiKCIrTSsifCQpIikpJiZDKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09aiYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9b3QuYXR0cihyLGUpO3JldHVybiBudWxsPT1pPyIhPSI9PT10OnQ/KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2krIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10P2k9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLHM9Imxhc3QiIT09ZS5zbGljZSgtNCksYT0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLHAsZixoLGQsZz1vIT09cz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLG09dC5wYXJlbnROb2RlLHk9YSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHg9IXUmJiFhO2lmKG0pe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYoYT9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2Q9Zz0ib25seSI9PT1lJiYhZCYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihkPVtzP20uZmlyc3RDaGlsZDptLmxhc3RDaGlsZF0scyYmeCl7Yz1tW3ZdfHwobVt2XT17fSksbD1jW2VdfHxbXSxoPWxbMF09PT13JiZsWzFdLGY9bFswXT09PXcmJmxbMl0scD1oJiZtLmNoaWxkTm9kZXNbaF07d2hpbGUocD0rK2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoMT09PXAubm9kZVR5cGUmJisrZiYmcD09PXQpe2NbZV09W3csaCxmXTticmVha319ZWxzZSBpZih4JiYobD0odFt2XXx8KHRbdl09e30pKVtlXSkmJmxbMF09PT13KWY9bFsxXTtlbHNlIHdoaWxlKHA9KytoJiZwJiZwW2ddfHwoZj1oPTApfHxkLnBvcCgpKWlmKChhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpJiYrK2YmJih4JiYoKHBbdl18fChwW3ZdPXt9KSlbZV09W3csZl0pLHA9PT10KSlicmVhaztyZXR1cm4gZi09aSxmPT09cnx8MD09PWYlciYmZi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9aS5wc2V1ZG9zW2VdfHxpLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8b3QuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gclt2XT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxpLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9hdChmdW5jdGlvbihlLG4pe3ZhciBpLG89cihlLHQpLHM9by5sZW5ndGg7d2hpbGUocy0tKWk9UC5jYWxsKGUsb1tzXSksZVtpXT0hKG5baV09b1tzXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihlLDAsbil9KTpyfX0scHNldWRvczp7bm90OmF0KGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1hKGUucmVwbGFjZSh6LCIkMSIpKTtyZXR1cm4gclt2XT9hdChmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxzPXIoZSxudWxsLGksW10pLGE9ZS5sZW5ndGg7d2hpbGUoYS0tKShvPXNbYV0pJiYoZVthXT0hKHRbYV09bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSwhbi5wb3AoKX19KSxoYXM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvdChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fG8odCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzphdChmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGV8fCIiKXx8b3QuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UobnQscnQpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG8gaWYobj1oP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWZ9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09cC5hY3RpdmVFbGVtZW50JiYoIXAuaGFzRm9jdXN8fHAuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlTmFtZT4iQCJ8fDM9PT1lLm5vZGVUeXBlfHw0PT09ZS5ub2RlVHlwZSlyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFpLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZXQudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFoudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8dC50b0xvd2VyQ2FzZSgpPT09ZS50eXBlKX0sZmlyc3Q6aHQoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Omh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTpodChmdW5jdGlvbihlLHQsbil7cmV0dXJuWzA+bj9uK3Q6bl19KSxldmVuOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MDtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpodChmdW5jdGlvbihlLHQpe3ZhciBuPTE7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpodChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpodChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7dD4rK3I7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0saS5wc2V1ZG9zLm50aD1pLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0paS5wc2V1ZG9zW3RdPXB0KHQpO2Zvcih0IGlue3N1Ym1pdDohMCxyZXNldDohMH0paS5wc2V1ZG9zW3RdPWZ0KHQpO2Z1bmN0aW9uIGR0KCl7fWR0LnByb3RvdHlwZT1pLmZpbHRlcnM9aS5wc2V1ZG9zLGkuc2V0RmlsdGVycz1uZXcgZHQ7ZnVuY3Rpb24gZ3QoZSx0KXt2YXIgbixyLG8scyxhLHUsbCxjPWtbZSsiICJdO2lmKGMpcmV0dXJuIHQ/MDpjLnNsaWNlKDApO2E9ZSx1PVtdLGw9aS5wcmVGaWx0ZXI7d2hpbGUoYSl7KCFufHwocj1fLmV4ZWMoYSkpKSYmKHImJihhPWEuc2xpY2UoclswXS5sZW5ndGgpfHxhKSx1LnB1c2gobz1bXSkpLG49ITEsKHI9WC5leGVjKGEpKSYmKG49ci5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOnJbMF0ucmVwbGFjZSh6LCIgIil9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtmb3IocyBpbiBpLmZpbHRlcikhKHI9SltzXS5leGVjKGEpKXx8bFtzXSYmIShyPWxbc10ocikpfHwobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6cyxtYXRjaGVzOnJ9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtpZighbilicmVha31yZXR1cm4gdD9hLmxlbmd0aDphP290LmVycm9yKGUpOmsoZSx1KS5zbGljZSgwKX1mdW5jdGlvbiBtdChlKXt2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjtmb3IoO24+dDt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiB5dChlLHQsbil7dmFyIGk9dC5kaXIsbz1uJiYicGFyZW50Tm9kZSI9PT1pLHM9VCsrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixyKXt3aGlsZSh0PXRbaV0paWYoMT09PXQubm9kZVR5cGV8fG8pcmV0dXJuIGUodCxuLHIpfTpmdW5jdGlvbih0LG4sYSl7dmFyIHUsbCxjLHA9dysiICIrcztpZihhKXt3aGlsZSh0PXRbaV0paWYoKDE9PT10Lm5vZGVUeXBlfHxvKSYmZSh0LG4sYSkpcmV0dXJuITB9ZWxzZSB3aGlsZSh0PXRbaV0paWYoMT09PXQubm9kZVR5cGV8fG8paWYoYz10W3ZdfHwodFt2XT17fSksKGw9Y1tpXSkmJmxbMF09PT1wKXtpZigodT1sWzFdKT09PSEwfHx1PT09cilyZXR1cm4gdT09PSEwfWVsc2UgaWYobD1jW2ldPVtwXSxsWzFdPWUodCxuLGEpfHxyLGxbMV09PT0hMClyZXR1cm4hMH19ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGktLSlpZighZVtpXSh0LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24geHQoZSx0LG4scixpKXt2YXIgbyxzPVtdLGE9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDtmb3IoO3U+YTthKyspKG89ZVthXSkmJighbnx8bihvLHIsaSkpJiYocy5wdXNoKG8pLGwmJnQucHVzaChhKSk7cmV0dXJuIHN9ZnVuY3Rpb24gYnQoZSx0LG4scixpLG8pe3JldHVybiByJiYhclt2XSYmKHI9YnQocikpLGkmJiFpW3ZdJiYoaT1idChpLG8pKSxhdChmdW5jdGlvbihvLHMsYSx1KXt2YXIgbCxjLHAsZj1bXSxoPVtdLGQ9cy5sZW5ndGgsZz1vfHxDdCh0fHwiKiIsYS5ub2RlVHlwZT9bYV06YSxbXSksbT0hZXx8IW8mJnQ/Zzp4dChnLGYsZSxhLHUpLHk9bj9pfHwobz9lOmR8fHIpP1tdOnM6bTtpZihuJiZuKG0seSxhLHUpLHIpe2w9eHQoeSxoKSxyKGwsW10sYSx1KSxjPWwubGVuZ3RoO3doaWxlKGMtLSkocD1sW2NdKSYmKHlbaFtjXV09IShtW2hbY11dPXApKX1pZihvKXtpZihpfHxlKXtpZihpKXtsPVtdLGM9eS5sZW5ndGg7d2hpbGUoYy0tKShwPXlbY10pJiZsLnB1c2gobVtjXT1wKTtpKG51bGwseT1bXSxsLHUpfWM9eS5sZW5ndGg7d2hpbGUoYy0tKShwPXlbY10pJiYobD1pP1AuY2FsbChvLHApOmZbY10pPi0xJiYob1tsXT0hKHNbbF09cCkpfX1lbHNlIHk9eHQoeT09PXM/eS5zcGxpY2UoZCx5Lmxlbmd0aCk6eSksaT9pKG51bGwscyx5LHUpOk8uYXBwbHkocyx5KX0pfWZ1bmN0aW9uIHd0KGUpe3ZhciB0LG4scixvPWUubGVuZ3RoLHM9aS5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9c3x8aS5yZWxhdGl2ZVsiICJdLGw9cz8xOjAsYz15dChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LGEsITApLHA9eXQoZnVuY3Rpb24oZSl7cmV0dXJuIFAuY2FsbCh0LGUpPi0xfSxhLCEwKSxmPVtmdW5jdGlvbihlLG4scil7cmV0dXJuIXMmJihyfHxuIT09dSl8fCgodD1uKS5ub2RlVHlwZT9jKGUsbixyKTpwKGUsbixyKSl9XTtmb3IoO28+bDtsKyspaWYobj1pLnJlbGF0aXZlW2VbbF0udHlwZV0pZj1beXQodnQoZiksbildO2Vsc2V7aWYobj1pLmZpbHRlcltlW2xdLnR5cGVdLmFwcGx5KG51bGwsZVtsXS5tYXRjaGVzKSxuW3ZdKXtmb3Iocj0rK2w7bz5yO3IrKylpZihpLnJlbGF0aXZlW2Vbcl0udHlwZV0pYnJlYWs7cmV0dXJuIGJ0KGw+MSYmdnQoZiksbD4xJiZtdChlLnNsaWNlKDAsbC0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWVbbC0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKHosIiQxIiksbixyPmwmJnd0KGUuc2xpY2UobCxyKSksbz5yJiZ3dChlPWUuc2xpY2UocikpLG8+ciYmbXQoZSkpfWYucHVzaChuKX1yZXR1cm4gdnQoZil9ZnVuY3Rpb24gVHQoZSx0KXt2YXIgbj0wLG89dC5sZW5ndGg+MCxzPWUubGVuZ3RoPjAsYT1mdW5jdGlvbihhLGwsYyxmLGgpe3ZhciBkLGcsbSx5PVtdLHY9MCx4PSIwIixiPWEmJltdLFQ9bnVsbCE9aCxDPXUsaz1hfHxzJiZpLmZpbmQuVEFHKCIqIixoJiZsLnBhcmVudE5vZGV8fGwpLE49dys9bnVsbD09Qz8xOk1hdGgucmFuZG9tKCl8fC4xO2ZvcihUJiYodT1sIT09cCYmbCxyPW4pO251bGwhPShkPWtbeF0pO3grKyl7aWYocyYmZCl7Zz0wO3doaWxlKG09ZVtnKytdKWlmKG0oZCxsLGMpKXtmLnB1c2goZCk7YnJlYWt9VCYmKHc9TixyPSsrbil9byYmKChkPSFtJiZkKSYmdi0tLGEmJmIucHVzaChkKSl9aWYodis9eCxvJiZ4IT09dil7Zz0wO3doaWxlKG09dFtnKytdKW0oYix5LGwsYyk7aWYoYSl7aWYodj4wKXdoaWxlKHgtLSliW3hdfHx5W3hdfHwoeVt4XT1xLmNhbGwoZikpO3k9eHQoeSl9Ty5hcHBseShmLHkpLFQmJiFhJiZ5Lmxlbmd0aD4wJiZ2K3QubGVuZ3RoPjEmJm90LnVuaXF1ZVNvcnQoZil9cmV0dXJuIFQmJih3PU4sdT1DKSxifTtyZXR1cm4gbz9hdChhKTphfWE9b3QuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPU5bZSsiICJdO2lmKCFvKXt0fHwodD1ndChlKSksbj10Lmxlbmd0aDt3aGlsZShuLS0pbz13dCh0W25dKSxvW3ZdP3IucHVzaChvKTppLnB1c2gobyk7bz1OKGUsVHQoaSxyKSl9cmV0dXJuIG99O2Z1bmN0aW9uIEN0KGUsdCxuKXt2YXIgcj0wLGk9dC5sZW5ndGg7Zm9yKDtpPnI7cisrKW90KGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBrdChlLHQscixvKXt2YXIgcyx1LGwsYyxwLGY9Z3QoZSk7aWYoIW8mJjE9PT1mLmxlbmd0aCl7aWYodT1mWzBdPWZbMF0uc2xpY2UoMCksdS5sZW5ndGg+MiYmIklEIj09PShsPXVbMF0pLnR5cGUmJm4uZ2V0QnlJZCYmOT09PXQubm9kZVR5cGUmJmgmJmkucmVsYXRpdmVbdVsxXS50eXBlXSl7aWYodD0oaS5maW5kLklEKGwubWF0Y2hlc1swXS5yZXBsYWNlKG50LHJ0KSx0KXx8W10pWzBdLCF0KXJldHVybiByO2U9ZS5zbGljZSh1LnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1zPUoubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3aGlsZShzLS0pe2lmKGw9dVtzXSxpLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigocD1pLmZpbmRbY10pJiYobz1wKGwubWF0Y2hlc1swXS5yZXBsYWNlKG50LHJ0KSxVLnRlc3QodVswXS50eXBlKSYmdC5wYXJlbnROb2RlfHx0KSkpe2lmKHUuc3BsaWNlKHMsMSksZT1vLmxlbmd0aCYmbXQodSksIWUpcmV0dXJuIE8uYXBwbHkocixvKSxyO2JyZWFrfX19cmV0dXJuIGEoZSxmKShvLHQsIWgscixVLnRlc3QoZSkpLHJ9bi5zb3J0U3RhYmxlPXYuc3BsaXQoIiIpLnNvcnQoUykuam9pbigiIik9PT12LG4uZGV0ZWN0RHVwbGljYXRlcz1FLGMoKSxuLnNvcnREZXRhY2hlZD11dChmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHAuY3JlYXRlRWxlbWVudCgiZGl2IikpfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8bHQoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj91bmRlZmluZWQ6ZS5nZXRBdHRyaWJ1dGUodCwidHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/MToyKX0pLG4uYXR0cmlidXRlcyYmdXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8aW5wdXQvPiIsZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8bHQoInZhbHVlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fCJpbnB1dCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dW5kZWZpbmVkOmUuZGVmYXVsdFZhbHVlfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGx0KFIsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiBuP3VuZGVmaW5lZDoocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOmVbdF09PT0hMD90LnRvTG93ZXJDYXNlKCk6bnVsbH0pLHguZmluZD1vdCx4LmV4cHI9b3Quc2VsZWN0b3JzLHguZXhwclsiOiJdPXguZXhwci5wc2V1ZG9zLHgudW5pcXVlPW90LnVuaXF1ZVNvcnQseC50ZXh0PW90LmdldFRleHQseC5pc1hNTERvYz1vdC5pc1hNTCx4LmNvbnRhaW5zPW90LmNvbnRhaW5zfShlKTt2YXIgRD17fTtmdW5jdGlvbiBBKGUpe3ZhciB0PURbZV09e307cmV0dXJuIHguZWFjaChlLm1hdGNoKHcpfHxbXSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KSx0fXguQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9InN0cmluZyI9PXR5cGVvZiBlP0RbZV18fEEoZSk6eC5leHRlbmQoe30sZSk7dmFyIHQsbixyLGksbyxzLGE9W10sdT0hZS5vbmNlJiZbXSxsPWZ1bmN0aW9uKHApe2Zvcih0PWUubWVtb3J5JiZwLG49ITAscz1pfHwwLGk9MCxvPWEubGVuZ3RoLHI9ITA7YSYmbz5zO3MrKylpZihhW3NdLmFwcGx5KHBbMF0scFsxXSk9PT0hMSYmZS5zdG9wT25GYWxzZSl7dD0hMTticmVha31yPSExLGEmJih1P3UubGVuZ3RoJiZsKHUuc2hpZnQoKSk6dD9hPVtdOmMuZGlzYWJsZSgpKX0sYz17YWRkOmZ1bmN0aW9uKCl7aWYoYSl7dmFyIG49YS5sZW5ndGg7KGZ1bmN0aW9uIHModCl7eC5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj14LnR5cGUobik7ImZ1bmN0aW9uIj09PXI/ZS51bmlxdWUmJmMuaGFzKG4pfHxhLnB1c2gobik6biYmbi5sZW5ndGgmJiJzdHJpbmciIT09ciYmcyhuKX0pfSkoYXJndW1lbnRzKSxyP289YS5sZW5ndGg6dCYmKGk9bixsKHQpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGEmJnguZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgobj14LmluQXJyYXkodCxhLG4pKT4tMSlhLnNwbGljZShuLDEpLHImJihvPj1uJiZvLS0scz49biYmcy0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT94LmluQXJyYXkoZSxhKT4tMTohKCFhfHwhYS5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBhPVtdLG89MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT10PXVuZGVmaW5lZCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFhfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIHU9dW5kZWZpbmVkLHR8fGMuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiF1fSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiFhfHxuJiYhdXx8KHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxyP3UucHVzaCh0KTpsKHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFufX07cmV0dXJuIGN9LHguZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIseC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix4LkNhbGxiYWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHguRGVmZXJyZWQoZnVuY3Rpb24obil7eC5lYWNoKHQsZnVuY3Rpb24odCxvKXt2YXIgcz1vWzBdLGE9eC5pc0Z1bmN0aW9uKGVbdF0pJiZlW3RdO2lbb1sxXV0oZnVuY3Rpb24oKXt2YXIgZT1hJiZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bcysiV2l0aCJdKHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMsYT9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3guZXh0ZW5kKGUscik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRoZW4seC5lYWNoKHQsZnVuY3Rpb24oZSxvKXt2YXIgcz1vWzJdLGE9b1szXTtyW29bMV1dPXMuYWRkLGEmJnMuYWRkKGZ1bmN0aW9uKCl7bj1hfSx0WzFeZV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2spLGlbb1swXV09ZnVuY3Rpb24oKXtyZXR1cm4gaVtvWzBdKyJXaXRoIl0odGhpcz09PWk/cjp0aGlzLGFyZ3VtZW50cyksdGhpc30saVtvWzBdKyJXaXRoIl09cy5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1kLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9MSE9PXJ8fGUmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxvPTE9PT1pP2U6eC5EZWZlcnJlZCgpLHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVudHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6cixuPT09YT9vLm5vdGlmeVdpdGgodCxuKTotLWl8fG8ucmVzb2x2ZVdpdGgodCxuKX19LGEsdSxsO2lmKHI+MSlmb3IoYT1BcnJheShyKSx1PUFycmF5KHIpLGw9QXJyYXkocik7cj50O3QrKyluW3RdJiZ4LmlzRnVuY3Rpb24oblt0XS5wcm9taXNlKT9uW3RdLnByb21pc2UoKS5kb25lKHModCxsLG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhzKHQsdSxhKSk6LS1pO3JldHVybiBpfHxvLnJlc29sdmVXaXRoKGwsbiksby5wcm9taXNlKCl9fSkseC5zdXBwb3J0PWZ1bmN0aW9uKHQpe3ZhciBuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxyPW8uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9by5jcmVhdGVFbGVtZW50KCJkaXYiKSxzPW8uY3JlYXRlRWxlbWVudCgic2VsZWN0IiksYT1zLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgib3B0aW9uIikpO3JldHVybiBuLnR5cGU/KG4udHlwZT0iY2hlY2tib3giLHQuY2hlY2tPbj0iIiE9PW4udmFsdWUsdC5vcHRTZWxlY3RlZD1hLnNlbGVjdGVkLHQucmVsaWFibGVNYXJnaW5SaWdodD0hMCx0LmJveFNpemluZ1JlbGlhYmxlPSEwLHQucGl4ZWxQb3NpdGlvbj0hMSxuLmNoZWNrZWQ9ITAsdC5ub0Nsb25lQ2hlY2tlZD1uLmNsb25lTm9kZSghMCkuY2hlY2tlZCxzLmRpc2FibGVkPSEwLHQub3B0RGlzYWJsZWQ9IWEuZGlzYWJsZWQsbj1vLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksbi52YWx1ZT0idCIsbi50eXBlPSJyYWRpbyIsdC5yYWRpb1ZhbHVlPSJ0Ij09PW4udmFsdWUsbi5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJ0Iiksbi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0Iiksci5hcHBlbmRDaGlsZChuKSx0LmNoZWNrQ2xvbmU9ci5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsdC5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImluIGUsaS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGkuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIix0LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09aS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCx4KGZ1bmN0aW9uKCl7dmFyIG4scixzPSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jazstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3giLGE9by5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2EmJihuPW8uY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweCIsYS5hcHBlbmRDaGlsZChuKS5hcHBlbmRDaGlsZChpKSxpLmlubmVySFRNTD0iIixpLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElIix4LnN3YXAoYSxudWxsIT1hLnN0eWxlLnpvb20/e3pvb206MX06e30sZnVuY3Rpb24oKXt0LmJveFNpemluZz00PT09aS5vZmZzZXRXaWR0aH0pLGUuZ2V0Q29tcHV0ZWRTdHlsZSYmKHQucGl4ZWxQb3NpdGlvbj0iMSUiIT09KGUuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpfHx7fSkudG9wLHQuYm94U2l6aW5nUmVsaWFibGU9IjRweCI9PT0oZS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt3aWR0aDoiNHB4In0pLndpZHRoLHI9aS5hcHBlbmRDaGlsZChvLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxyLnN0eWxlLmNzc1RleHQ9aS5zdHlsZS5jc3NUZXh0PXMsci5zdHlsZS5tYXJnaW5SaWdodD1yLnN0eWxlLndpZHRoPSIwIixpLnN0eWxlLndpZHRoPSIxcHgiLHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0eWxlKHIsbnVsbCl8fHt9KS5tYXJnaW5SaWdodCkpLGEucmVtb3ZlQ2hpbGQobikpfSksdCk6dH0oe30pO3ZhciBMLHEsSD0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIEYoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89eC5leHBhbmRvK01hdGgucmFuZG9tKCl9Ri51aWQ9MSxGLmFjY2VwdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU/MT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlOiEwfSxGLnByb3RvdHlwZT17a2V5OmZ1bmN0aW9uKGUpe2lmKCFGLmFjY2VwdHMoZSkpcmV0dXJuIDA7dmFyIHQ9e30sbj1lW3RoaXMuZXhwYW5kb107aWYoIW4pe249Ri51aWQrKzt0cnl7dFt0aGlzLmV4cGFuZG9dPXt2YWx1ZTpufSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHQpfWNhdGNoKHIpe3RbdGhpcy5leHBhbmRvXT1uLHguZXh0ZW5kKGUsdCl9fXJldHVybiB0aGlzLmNhY2hlW25dfHwodGhpcy5jYWNoZVtuXT17fSksbn0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMua2V5KGUpLG89dGhpcy5jYWNoZVtpXTtpZigic3RyaW5nIj09dHlwZW9mIHQpb1t0XT1uO2Vsc2UgaWYoeC5pc0VtcHR5T2JqZWN0KG8pKXguZXh0ZW5kKHRoaXMuY2FjaGVbaV0sdCk7ZWxzZSBmb3IociBpbiB0KW9bcl09dFtyXTtyZXR1cm4gb30sZ2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jYWNoZVt0aGlzLmtleShlKV07cmV0dXJuIHQ9PT11bmRlZmluZWQ/bjpuW3RdfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB0PT09dW5kZWZpbmVkfHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJm49PT11bmRlZmluZWQ/KHI9dGhpcy5nZXQoZSx0KSxyIT09dW5kZWZpbmVkP3I6dGhpcy5nZXQoZSx4LmNhbWVsQ2FzZSh0KSkpOih0aGlzLnNldChlLHQsbiksbiE9PXVuZGVmaW5lZD9uOnQpfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzLmtleShlKSxzPXRoaXMuY2FjaGVbb107aWYodD09PXVuZGVmaW5lZCl0aGlzLmNhY2hlW29dPXt9O2Vsc2V7eC5pc0FycmF5KHQpP3I9dC5jb25jYXQodC5tYXAoeC5jYW1lbENhc2UpKTooaT14LmNhbWVsQ2FzZSh0KSx0IGluIHM/cj1bdCxpXToocj1pLHI9ciBpbiBzP1tyXTpyLm1hdGNoKHcpfHxbXSkpLG49ci5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSBzW3Jbbl1dfX0saGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4heC5pc0VtcHR5T2JqZWN0KHRoaXMuY2FjaGVbZVt0aGlzLmV4cGFuZG9dXXx8e30pfSxkaXNjYXJkOmZ1bmN0aW9uKGUpe2VbdGhpcy5leHBhbmRvXSYmZGVsZXRlIHRoaXMuY2FjaGVbZVt0aGlzLmV4cGFuZG9dXX19LEw9bmV3IEYscT1uZXcgRix4LmV4dGVuZCh7YWNjZXB0RGF0YTpGLmFjY2VwdHMsaGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gTC5oYXNEYXRhKGUpfHxxLmhhc0RhdGEoZSl9LGRhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMLmFjY2VzcyhlLHQsbil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtMLnJlbW92ZShlLHQpfSxfZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHEuYWNjZXNzKGUsdCxuKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtxLnJlbW92ZShlLHQpfX0pLHguZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPXRoaXNbMF0sbz0wLHM9bnVsbDtpZihlPT09dW5kZWZpbmVkKXtpZih0aGlzLmxlbmd0aCYmKHM9TC5nZXQoaSksMT09PWkubm9kZVR5cGUmJiFxLmdldChpLCJoYXNEYXRhQXR0cnMiKSkpe2ZvcihuPWkuYXR0cmlidXRlcztuLmxlbmd0aD5vO28rKylyPW5bb10ubmFtZSwwPT09ci5pbmRleE9mKCJkYXRhLSIpJiYocj14LmNhbWVsQ2FzZShyLnNsaWNlKDUpKSxQKGkscixzW3JdKSk7cS5zZXQoaSwiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIHN9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe0wuc2V0KHRoaXMsZSl9KTp4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQpe3ZhciBuLHI9eC5jYW1lbENhc2UoZSk7aWYoaSYmdD09PXVuZGVmaW5lZCl7aWYobj1MLmdldChpLGUpLG4hPT11bmRlZmluZWQpcmV0dXJuIG47aWYobj1MLmdldChpLHIpLG4hPT11bmRlZmluZWQpcmV0dXJuIG47aWYobj1QKGkscix1bmRlZmluZWQpLG4hPT11bmRlZmluZWQpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1MLmdldCh0aGlzLHIpO0wuc2V0KHRoaXMscix0KSwtMSE9PWUuaW5kZXhPZigiLSIpJiZuIT09dW5kZWZpbmVkJiZMLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5yZW1vdmUodGhpcyxlKX0pfX0pO2Z1bmN0aW9uIFAoZSx0LG4pe3ZhciByO2lmKG49PT11bmRlZmluZWQmJjE9PT1lLm5vZGVUeXBlKWlmKHI9ImRhdGEtIit0LnJlcGxhY2UoTywiLSQxIikudG9Mb3dlckNhc2UoKSxuPWUuZ2V0QXR0cmlidXRlKHIpLCJzdHJpbmciPT10eXBlb2Ygbil7dHJ5e249InRydWUiPT09bj8hMDoiZmFsc2UiPT09bj8hMToibnVsbCI9PT1uP251bGw6K24rIiI9PT1uPytuOkgudGVzdChuKT9KU09OLnBhcnNlKG4pOm59Y2F0Y2goaSl7fUwuc2V0KGUsdCxuKX1lbHNlIG49dW5kZWZpbmVkO3JldHVybiBufXguZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIGU/KHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1xLmdldChlLHQpLG4mJighcnx8eC5pc0FycmF5KG4pP3I9cS5hY2Nlc3MoZSx0LHgubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdKTp1bmRlZmluZWR9LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49eC5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz14Ll9xdWV1ZUhvb2tzKGUsdCkscz1mdW5jdGlvbigpe3guZGVxdWV1ZShlLHQpCn07ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLHMsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gcS5nZXQoZSxuKXx8cS5hY2Nlc3MoZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtxLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSx4LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPSJmeCIsbi0tKSxuPmFyZ3VtZW50cy5sZW5ndGg/eC5xdWV1ZSh0aGlzWzBdLGUpOnQ9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj14LnF1ZXVlKHRoaXMsZSx0KTt4Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PW5bMF0mJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9eC5EZWZlcnJlZCgpLG89dGhpcyxzPXRoaXMubGVuZ3RoLGE9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLGU9ZXx8ImZ4Ijt3aGlsZShzLS0pbj1xLmdldChvW3NdLGUrInF1ZXVlSG9va3MiKSxuJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKGEpKTtyZXR1cm4gYSgpLGkucHJvbWlzZSh0KX19KTt2YXIgUixNLFc9L1tcdFxyXG5cZl0vZywkPS9cci9nLEI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTt4LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbeC5wcm9wRml4W2VdfHxlXX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM9MCxhPXRoaXMubGVuZ3RoLHU9InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpOiIgIikpe289MDt3aGlsZShpPXRbbysrXSkwPnIuaW5kZXhPZigiICIraSsiICIpJiYocis9aSsiICIpO24uY2xhc3NOYW1lPXgudHJpbShyKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1PTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZih1KWZvcih0PShlfHwiIikubWF0Y2godyl8fFtdO2E+cztzKyspaWYobj10aGlzW3NdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShXLCIgIik6IiIpKXtvPTA7d2hpbGUoaT10W28rK10pd2hpbGUoci5pbmRleE9mKCIgIitpKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK2krIiAiLCIgIik7bi5jbGFzc05hbWU9ZT94LnRyaW0ocik6IiJ9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmInN0cmluZyI9PT1uP3Q/dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJlbW92ZUNsYXNzKGUpOnguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1uKXt2YXIgdCxpPTAsbz14KHRoaXMpLHM9ZS5tYXRjaCh3KXx8W107d2hpbGUodD1zW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZShuPT09cnx8ImJvb2xlYW4iPT09bikmJih0aGlzLmNsYXNzTmFtZSYmcS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6cS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPXguaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIGk7MT09PXRoaXMubm9kZVR5cGUmJihpPXI/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PWk/aT0iIjoibnVtYmVyIj09dHlwZW9mIGk/aSs9IiI6eC5pc0FycmF5KGkpJiYoaT14Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksdD14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYic2V0ImluIHQmJnQuc2V0KHRoaXMsaSwidmFsdWUiKSE9PXVuZGVmaW5lZHx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4gdD14LnZhbEhvb2tzW2kudHlwZV18fHgudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYiZ2V0ImluIHQmJihuPXQuZ2V0KGksInZhbHVlIikpIT09dW5kZWZpbmVkP246KG49aS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIG4/bi5yZXBsYWNlKCQsIiIpOm51bGw9PW4/IiI6bil9fX0pLHguZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgsbz0ic2VsZWN0LW9uZSI9PT1lLnR5cGV8fDA+aSxzPW8/bnVsbDpbXSxhPW8/aSsxOnIubGVuZ3RoLHU9MD5pP2E6bz9pOjA7Zm9yKDthPnU7dSsrKWlmKG49clt1XSwhKCFuLnNlbGVjdGVkJiZ1IT09aXx8KHguc3VwcG9ydC5vcHREaXNhYmxlZD9uLmRpc2FibGVkOm51bGwhPT1uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSl8fG4ucGFyZW50Tm9kZS5kaXNhYmxlZCYmeC5ub2RlTmFtZShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PXgobikudmFsKCksbylyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz14Lm1ha2VBcnJheSh0KSxzPWkubGVuZ3RoO3doaWxlKHMtLSlyPWlbc10sKHIuc2VsZWN0ZWQ9eC5pbkFycmF5KHgocikudmFsKCksbyk+PTApJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX0sYXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gdHlwZW9mIGUuZ2V0QXR0cmlidXRlPT09cj94LnByb3AoZSx0LG4pOigxPT09cyYmeC5pc1hNTERvYyhlKXx8KHQ9dC50b0xvd2VyQ2FzZSgpLGk9eC5hdHRySG9va3NbdF18fCh4LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP006UikpLG49PT11bmRlZmluZWQ/aSYmImdldCJpbiBpJiZudWxsIT09KG89aS5nZXQoZSx0KSk/bzoobz14LmZpbmQuYXR0cihlLHQpLG51bGw9PW8/dW5kZWZpbmVkOm8pOm51bGwhPT1uP2kmJiJzZXQiaW4gaSYmKG89aS5zZXQoZSxuLHQpKSE9PXVuZGVmaW5lZD9vOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOih4LnJlbW92ZUF0dHIoZSx0KSx1bmRlZmluZWQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaCh3KTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgucHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pJiYoZVtyXT0hMSksZS5yZW1vdmVBdHRyaWJ1dGUobil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXguc3VwcG9ydC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmeC5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gbz0xIT09c3x8IXguaXNYTUxEb2MoZSksbyYmKHQ9eC5wcm9wRml4W3RdfHx0LGk9eC5wcm9wSG9va3NbdF0pLG4hPT11bmRlZmluZWQ/aSYmInNldCJpbiBpJiYocj1pLnNldChlLG4sdCkpIT09dW5kZWZpbmVkP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8Qi50ZXN0KGUubm9kZU5hbWUpfHxlLmhyZWY/ZS50YWJJbmRleDotMX19fX0pLE09e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9PT0hMT94LnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSx4LmVhY2goeC5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj14LmV4cHIuYXR0ckhhbmRsZVt0XXx8eC5maW5kLmF0dHI7eC5leHByLmF0dHJIYW5kbGVbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXguZXhwci5hdHRySGFuZGxlW3RdLG89cj91bmRlZmluZWQ6KHguZXhwci5hdHRySGFuZGxlW3RdPXVuZGVmaW5lZCkhPW4oZSx0LHIpP3QudG9Mb3dlckNhc2UoKTpudWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVt0XT1pLG99fSkseC5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx4LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt4LnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5pc0FycmF5KHQpP2UuY2hlY2tlZD14LmluQXJyYXkoeChlKS52YWwoKSx0KT49MDp1bmRlZmluZWR9fSx4LnN1cHBvcnQuY2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgST0vXmtleS8sej0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sXz0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWD0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFUoKXtyZXR1cm4hMH1mdW5jdGlvbiBZKCl7cmV0dXJuITF9ZnVuY3Rpb24gVigpe3RyeXtyZXR1cm4gby5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319eC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixpLG8pe3ZhciBzLGEsdSxsLGMscCxmLGgsZCxnLG0seT1xLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihzPW4sbj1zLmhhbmRsZXIsbz1zLnNlbGVjdG9yKSxuLmd1aWR8fChuLmd1aWQ9eC5ndWlkKyspLChsPXkuZXZlbnRzKXx8KGw9eS5ldmVudHM9e30pLChhPXkuaGFuZGxlKXx8KGE9eS5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09cnx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dW5kZWZpbmVkOnguZXZlbnQuZGlzcGF0Y2guYXBwbHkoYS5lbGVtLGFyZ3VtZW50cyl9LGEuZWxlbT1lKSx0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sYz10Lmxlbmd0aDt3aGlsZShjLS0pdT1YLmV4ZWModFtjXSl8fFtdLGQ9bT11WzFdLGc9KHVbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KG8/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9eC5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTptLGRhdGE6aSxoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6byxuZWVkc0NvbnRleHQ6byYmeC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KG8pLG5hbWVzcGFjZTpnLmpvaW4oIi4iKX0scyksKGg9bFtkXSl8fChoPWxbZF09W10saC5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmZi5zZXR1cC5jYWxsKGUsaSxnLGEpIT09ITF8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSwhMSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLHApLHAuaGFuZGxlci5ndWlkfHwocC5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksbz9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLHApOmgucHVzaChwKSx4LmV2ZW50Lmdsb2JhbFtkXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8scyxhLHUsbCxjLHAsZixoLGQsZyxtPXEuaGFzRGF0YShlKSYmcS5nZXQoZSk7aWYobSYmKHU9bS5ldmVudHMpKXt0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sbD10Lmxlbmd0aDt3aGlsZShsLS0paWYoYT1YLmV4ZWModFtsXSl8fFtdLGg9Zz1hWzFdLGQ9KGFbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoKXtwPXguZXZlbnQuc3BlY2lhbFtoXXx8e30saD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxmPXVbaF18fFtdLGE9YVsyXSYmUmVnRXhwKCIoXnxcXC4pIitkLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLHM9bz1mLmxlbmd0aDt3aGlsZShvLS0pYz1mW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxhJiYhYS50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGMpKTtzJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRlYXJkb3duLmNhbGwoZSxkLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsaCxtLmhhbmRsZSksZGVsZXRlIHVbaF0pfWVsc2UgZm9yKGggaW4gdSl4LmV2ZW50LnJlbW92ZShlLGgrdFtsXSxuLHIsITApO3guaXNFbXB0eU9iamVjdCh1KSYmKGRlbGV0ZSBtLmhhbmRsZSxxLnJlbW92ZShlLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzLGEsdSxsLGMscCxmLGg9W3J8fG9dLGQ9eS5jYWxsKHQsInR5cGUiKT90LnR5cGU6dCxnPXkuY2FsbCh0LCJuYW1lc3BhY2UiKT90Lm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGE9dT1yPXJ8fG8sMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiYhXy50ZXN0KGQreC5ldmVudC50cmlnZ2VyZWQpJiYoZC5pbmRleE9mKCIuIik+PTAmJihnPWQuc3BsaXQoIi4iKSxkPWcuc2hpZnQoKSxnLnNvcnQoKSksYz0wPmQuaW5kZXhPZigiOiIpJiYib24iK2QsdD10W3guZXhwYW5kb10/dDpuZXcgeC5FdmVudChkLCJvYmplY3QiPT10eXBlb2YgdCYmdCksdC5pc1RyaWdnZXI9aT8yOjMsdC5uYW1lc3BhY2U9Zy5qb2luKCIuIiksdC5uYW1lc3BhY2VfcmU9dC5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIitnLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsdC5yZXN1bHQ9dW5kZWZpbmVkLHQudGFyZ2V0fHwodC50YXJnZXQ9ciksbj1udWxsPT1uP1t0XTp4Lm1ha2VBcnJheShuLFt0XSksZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGl8fCFmLnRyaWdnZXJ8fGYudHJpZ2dlci5hcHBseShyLG4pIT09ITEpKXtpZighaSYmIWYubm9CdWJibGUmJiF4LmlzV2luZG93KHIpKXtmb3IobD1mLmRlbGVnYXRlVHlwZXx8ZCxfLnRlc3QobCtkKXx8KGE9YS5wYXJlbnROb2RlKTthO2E9YS5wYXJlbnROb2RlKWgucHVzaChhKSx1PWE7dT09PShyLm93bmVyRG9jdW1lbnR8fG8pJiZoLnB1c2godS5kZWZhdWx0Vmlld3x8dS5wYXJlbnRXaW5kb3d8fGUpfXM9MDt3aGlsZSgoYT1oW3MrK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXQudHlwZT1zPjE/bDpmLmJpbmRUeXBlfHxkLHA9KHEuZ2V0KGEsImV2ZW50cyIpfHx7fSlbdC50eXBlXSYmcS5nZXQoYSwiaGFuZGxlIikscCYmcC5hcHBseShhLG4pLHA9YyYmYVtjXSxwJiZ4LmFjY2VwdERhdGEoYSkmJnAuYXBwbHkmJnAuYXBwbHkoYSxuKT09PSExJiZ0LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIHQudHlwZT1kLGl8fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYuX2RlZmF1bHQmJmYuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxuKSE9PSExfHwheC5hY2NlcHREYXRhKHIpfHxjJiZ4LmlzRnVuY3Rpb24ocltkXSkmJiF4LmlzV2luZG93KHIpJiYodT1yW2NdLHUmJihyW2NdPW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWQscltkXSgpLHguZXZlbnQudHJpZ2dlcmVkPXVuZGVmaW5lZCx1JiYocltjXT11KSksdC5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZlbnQuZml4KGUpO3ZhciB0LG4scixpLG8scz1bXSxhPWQuY2FsbChhcmd1bWVudHMpLHU9KHEuZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbZS50eXBlXXx8W10sbD14LmV2ZW50LnNwZWNpYWxbZS50eXBlXXx8e307aWYoYVswXT1lLGUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhbC5wcmVEaXNwYXRjaHx8bC5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsZSkhPT0hMSl7cz14LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxlLHUpLHQ9MDt3aGlsZSgoaT1zW3QrK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXtlLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDt3aGlsZSgobz1pLmhhbmRsZXJzW24rK10pJiYhZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghZS5uYW1lc3BhY2VfcmV8fGUubmFtZXNwYWNlX3JlLnRlc3Qoby5uYW1lc3BhY2UpKSYmKGUuaGFuZGxlT2JqPW8sZS5kYXRhPW8uZGF0YSxyPSgoeC5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxhKSxyIT09dW5kZWZpbmVkJiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGwucG9zdERpc3BhdGNoJiZsLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHM9W10sYT10LmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihhJiZ1Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPT10aGlzO3U9dS5wYXJlbnROb2RlfHx0aGlzKWlmKHUuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWUudHlwZSl7Zm9yKHI9W10sbj0wO2E+bjtuKyspbz10W25dLGk9by5zZWxlY3RvcisiICIscltpXT09PXVuZGVmaW5lZCYmKHJbaV09by5uZWVkc0NvbnRleHQ/eChpLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChpLHRoaXMsbnVsbCxbdV0pLmxlbmd0aCkscltpXSYmci5wdXNoKG8pO3IubGVuZ3RoJiZzLnB1c2goe2VsZW06dSxoYW5kbGVyczpyfSl9cmV0dXJuIHQubGVuZ3RoPmEmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOnQuc2xpY2UoYSl9KSxzfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLHM9dC5idXR0b247cmV0dXJuIG51bGw9PWUucGFnZVgmJm51bGwhPXQuY2xpZW50WCYmKG49ZS50YXJnZXQub3duZXJEb2N1bWVudHx8byxyPW4uZG9jdW1lbnRFbGVtZW50LGk9bi5ib2R5LGUucGFnZVg9dC5jbGllbnRYKyhyJiZyLnNjcm9sbExlZnR8fGkmJmkuc2Nyb2xsTGVmdHx8MCktKHImJnIuY2xpZW50TGVmdHx8aSYmaS5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPXQuY2xpZW50WSsociYmci5zY3JvbGxUb3B8fGkmJmkuc2Nyb2xsVG9wfHwwKS0ociYmci5jbGllbnRUb3B8fGkmJmkuY2xpZW50VG9wfHwwKSksZS53aGljaHx8cz09PXVuZGVmaW5lZHx8KGUud2hpY2g9MSZzPzE6MiZzPzM6NCZzPzI6MCksZX19LGZpeDpmdW5jdGlvbihlKXtpZihlW3guZXhwYW5kb10pcmV0dXJuIGU7dmFyIHQsbixyLGk9ZS50eXBlLHM9ZSxhPXRoaXMuZml4SG9va3NbaV07YXx8KHRoaXMuZml4SG9va3NbaV09YT16LnRlc3QoaSk/dGhpcy5tb3VzZUhvb2tzOkkudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPWEucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoYS5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyB4LkV2ZW50KHMpLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPXNbbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9byksMz09PWUudGFyZ2V0Lm5vZGVUeXBlJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksYS5maWx0ZXI/YS5maWx0ZXIoZSxzKTplfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PVYoKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp1bmRlZmluZWR9LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PVYoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZ4Lm5vZGVOYW1lKHRoaXMsImlucHV0Iik/KHRoaXMuY2xpY2soKSwhMSk6dW5kZWZpbmVkfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5yZXN1bHQhPT11bmRlZmluZWQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXguZXh0ZW5kKG5ldyB4LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj94LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnguZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHgucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9LHguRXZlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHguRXZlbnQ/KGUmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9VOlkpOnRoaXMudHlwZT1lLHQmJnguZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fHgubm93KCksdGhpc1t4LmV4cGFuZG9dPSEwLHVuZGVmaW5lZCk6bmV3IHguRXZlbnQoZSx0KX0seC5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6WSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1VLGUmJmUucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9VSxlJiZlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1VLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSx4LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3guZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmo7cmV0dXJuKCFpfHxpIT09ciYmIXguY29udGFpbnMocixpKSkmJihlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmby5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmby5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPW58fHQsdD11bmRlZmluZWQpO2ZvcihzIGluIGUpdGhpcy5vbihzLHQsbixlW3NdLGkpO3JldHVybiB0aGlzfWlmKG51bGw9PW4mJm51bGw9PXI/KHI9dCxuPXQ9dW5kZWZpbmVkKTpudWxsPT1yJiYoInN0cmluZyI9PXR5cGVvZiB0PyhyPW4sbj11bmRlZmluZWQpOihyPW4sbj10LHQ9dW5kZWZpbmVkKSkscj09PSExKXI9WTtlbHNlIGlmKCFyKXJldHVybiB0aGlzO3JldHVybiAxPT09aSYmKG89cixyPWZ1bmN0aW9uKGUpe3JldHVybiB4KCkub2ZmKGUpLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmd1aWQ9by5ndWlkfHwoby5ndWlkPXguZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5hZGQodGhpcyxlLHIsbix0KX0pfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24oZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLHgoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4odD09PSExfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkmJihuPXQsdD11bmRlZmluZWQpLG49PT0hMSYmKG49WSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtyZXR1cm4gbj94LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApOnVuZGVmaW5lZH19KTt2YXIgRz0vXi5bXjojXFtcLixdKiQvLEo9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sUT14LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LEs9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hTdGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9eChlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IoO24+ZTtlKyspaWYoeC5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZXQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFldCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmUS50ZXN0KGUpP3goZSk6ZXx8W10sITEpLmxlbmd0aH0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10scz1RLnRlc3QoZSl8fCJzdHJpbmciIT10eXBlb2YgZT94KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7aT5yO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKDExPm4ubm9kZVR5cGUmJihzP3MuaW5kZXgobik+LTE6MT09PW4ubm9kZVR5cGUmJnguZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSkpe249by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP3gudW5pcXVlKG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/Zy5jYWxsKHgoZSksdGhpc1swXSk6Zy5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgZT94KGUsdCk6eC5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj14Lm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSk7ZnVuY3Rpb24gWihlLHQpe3doaWxlKChlPWVbdF0pJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBaKGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFooZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29udGVudERvY3VtZW50fHx4Lm1lcmdlKFtdLGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT14Lm1hcCh0aGlzLHQsbik7cmV0dXJuIlVudGlsIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5nIj09dHlwZW9mIHImJihpPXguZmlsdGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihLW2VdfHx4LnVuaXF1ZShpKSxKLnRlc3QoZSkmJmkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5maW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRpcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT1uIT09dW5kZWZpbmVkO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmeChlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pO2Z1bmN0aW9uIGV0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKEcudGVzdCh0KSlyZXR1cm4geC5maWx0ZXIodCxlLG4pO3Q9eC5maWx0ZXIodCxlKX1yZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGcuY2FsbCh0LGUpPj0wIT09bn0pfXZhciB0dD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLG50PS88KFtcdzpdKykvLHJ0PS88fCYjP1x3KzsvLGl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksb3Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksc3Q9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYXQ9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHV0PS9edHJ1ZVwvKC4qKS8sbHQ9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLGN0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Y3Qub3B0Z3JvdXA9Y3Qub3B0aW9uLGN0LnRib2R5PWN0LnRmb290PWN0LmNvbGdyb3VwPWN0LmNhcHRpb249Y3QudGhlYWQsY3QudGg9Y3QudGQseC5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT11bmRlZmluZWQ/eC50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8bykuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1wdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMpOnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNsZWFuRGF0YShtdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJmR0KG10KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsPT1lPyExOmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB4LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKGU9PT11bmRlZmluZWQmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFpdC50ZXN0KGUpJiYhY3RbKG50LmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPWUucmVwbGFjZSh0dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7cj5uO24rKyl0PXRoaXNbbl18fHt9LDE9PT10Lm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEobXQodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChpKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtpJiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1vdmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQsbil7ZT1mLmFwcGx5KFtdLGUpO3ZhciByLGksbyxzLGEsdSxsPTAsYz10aGlzLmxlbmd0aCxwPXRoaXMsaD1jLTEsZD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGQpO2lmKGd8fCEoMT49Y3x8InN0cmluZyIhPXR5cGVvZiBkfHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJnN0LnRlc3QoZCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWQuY2FsbCh0aGlzLHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihyPXguYnVpbGRGcmFnbWVudChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcyksaT1yLmZpcnN0Q2hpbGQsMT09PXIuY2hpbGROb2Rlcy5sZW5ndGgmJihyPWkpLGkpKXtmb3Iobz14Lm1hcChtdChyLCJzY3JpcHQiKSxmdCkscz1vLmxlbmd0aDtjPmw7bCsrKWE9cixsIT09aCYmKGE9eC5jbG9uZShhLCEwLCEwKSxzJiZ4Lm1lcmdlKG8sbXQoYSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1tsXSxhLGwpO2lmKHMpZm9yKHU9b1tvLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKG8saHQpLGw9MDtzPmw7bCsrKWE9b1tsXSxhdC50ZXN0KGEudHlwZXx8IiIpJiYhcS5hY2Nlc3MoYSwiZ2xvYmFsRXZhbCIpJiZ4LmNvbnRhaW5zKHUsYSkmJihhLnNyYz94Ll9ldmFsVXJsKGEuc3JjKTp4Lmdsb2JhbEV2YWwoYS50ZXh0Q29udGVudC5yZXBsYWNlKGx0LCIiKSkpfXJldHVybiB0aGlzfX0pLHguZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlKXt2YXIgbixyPVtdLGk9eChlKSxvPWkubGVuZ3RoLTEscz0wO2Zvcig7bz49cztzKyspbj1zPT09bz90aGlzOnRoaXMuY2xvbmUoITApLHgoaVtzXSlbdF0obiksaC5hcHBseShyLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KSx4LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jbG9uZU5vZGUoITApLHU9eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoISh4LnN1cHBvcnQubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHguaXNYTUxEb2MoZSkpKWZvcihzPW10KGEpLG89bXQoZSkscj0wLGk9by5sZW5ndGg7aT5yO3IrKyl5dChvW3JdLHNbcl0pO2lmKHQpaWYobilmb3Iobz1vfHxtdChlKSxzPXN8fG10KGEpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspZ3Qob1tyXSxzW3JdKTtlbHNlIGd0KGUsYSk7cmV0dXJuIHM9bXQoYSwic2NyaXB0Iikscy5sZW5ndGg+MCYmZHQocywhdSYmbXQoZSwic2NyaXB0IikpLGF9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsLGM9MCxwPWUubGVuZ3RoLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1bXTtmb3IoO3A+YztjKyspaWYoaT1lW2NdLGl8fDA9PT1pKWlmKCJvYmplY3QiPT09eC50eXBlKGkpKXgubWVyZ2UoaCxpLm5vZGVUeXBlP1tpXTppKTtlbHNlIGlmKHJ0LnRlc3QoaSkpe289b3x8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShudC5leGVjKGkpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGE9Y3Rbc118fGN0Ll9kZWZhdWx0LG8uaW5uZXJIVE1MPWFbMV0raS5yZXBsYWNlKHR0LCI8JDE+PC8kMj4iKSthWzJdLGw9YVswXTt3aGlsZShsLS0pbz1vLmxhc3RDaGlsZDt4Lm1lcmdlKGgsby5jaGlsZE5vZGVzKSxvPWYuZmlyc3RDaGlsZCxvLnRleHRDb250ZW50PSIifWVsc2UgaC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUoaSkpO2YudGV4dENvbnRlbnQ9IiIsYz0wO3doaWxlKGk9aFtjKytdKWlmKCghcnx8LTE9PT14LmluQXJyYXkoaSxyKSkmJih1PXguY29udGFpbnMoaS5vd25lckRvY3VtZW50LGkpLG89bXQoZi5hcHBlbmRDaGlsZChpKSwic2NyaXB0IiksdSYmZHQobyksbikpe2w9MDt3aGlsZShpPW9bbCsrXSlhdC50ZXN0KGkudHlwZXx8IiIpJiZuLnB1c2goaSl9cmV0dXJuIGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYT14LmV2ZW50LnNwZWNpYWwsdT0wO2Zvcig7KG49ZVt1XSkhPT11bmRlZmluZWQ7dSsrKXtpZihGLmFjY2VwdHMobikmJihvPW5bcS5leHBhbmRvXSxvJiYodD1xLmNhY2hlW29dKSkpe2lmKHI9T2JqZWN0LmtleXModC5ldmVudHN8fHt9KSxyLmxlbmd0aClmb3Iocz0wOyhpPXJbc10pIT09dW5kZWZpbmVkO3MrKylhW2ldP3guZXZlbnQucmVtb3ZlKG4saSk6eC5yZW1vdmVFdmVudChuLGksdC5oYW5kbGUpO3EuY2FjaGVbb10mJmRlbGV0ZSBxLmNhY2hlW29dfWRlbGV0ZSBMLmNhY2hlW25bTC5leHBhbmRvXV19fSxfZXZhbFVybDpmdW5jdGlvbihlKXtyZXR1cm4geC5hamF4KHt1cmw6ZSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfX0pO2Z1bmN0aW9uIHB0KGUsdCl7cmV0dXJuIHgubm9kZU5hbWUoZSwidGFibGUiKSYmeC5ub2RlTmFtZSgxPT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTplfWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gaHQoZSl7dmFyIHQ9dXQuZXhlYyhlLnR5cGUpO3JldHVybiB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBkdChlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDtmb3IoO24+cjtyKyspcS5zZXQoZVtyXSwiZ2xvYmFsRXZhbCIsIXR8fHEuZ2V0KHRbcl0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gZ3QoZSx0KXt2YXIgbixyLGksbyxzLGEsdSxsO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihxLmhhc0RhdGEoZSkmJihvPXEuYWNjZXNzKGUpLHM9cS5zZXQodCxvKSxsPW8uZXZlbnRzKSl7ZGVsZXRlIHMuaGFuZGxlLHMuZXZlbnRzPXt9O2ZvcihpIGluIGwpZm9yKG49MCxyPWxbaV0ubGVuZ3RoO3I+bjtuKyspeC5ldmVudC5hZGQodCxpLGxbaV1bbl0pfUwuaGFzRGF0YShlKSYmKGE9TC5hY2Nlc3MoZSksdT14LmV4dGVuZCh7fSxhKSxMLnNldCh0LHUpKX19ZnVuY3Rpb24gbXQoZSx0KXt2YXIgbj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTplLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W107cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJngubm9kZU5hbWUoZSx0KT94Lm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIHl0KGUsdCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1uJiZvdC50ZXN0KGUudHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX14LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk6KHRoaXNbMF0mJih0PXgoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14KHRoaXMpLG49dC5jb250ZW50cygpO24ubGVuZ3RoP24ud3JhcEFsbChlKTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PXguaXNGdW5jdGlvbihlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXt4Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8eCh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSk7dmFyIHZ0LHh0LGJ0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyx3dD0vXm1hcmdpbi8sVHQ9UmVnRXhwKCJeKCIrYisiKSguKikkIiwiaSIpLEN0PVJlZ0V4cCgiXigiK2IrIikoPyFweClbYS16JV0rJCIsImkiKSxrdD1SZWdFeHAoIl4oWystXSk9KCIrYisiKSIsImkiKSxOdD17Qk9EWToiYmxvY2sifSxFdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sanQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxEdD1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIEF0KGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1EdC5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9RHRbaV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBlLmdldENvbXB1dGVkU3R5bGUodCxudWxsKX1mdW5jdGlvbiBIdChlLHQpe3ZhciBuLHIsaSxvPVtdLHM9MCxhPWUubGVuZ3RoO2Zvcig7YT5zO3MrKylyPWVbc10sci5zdHlsZSYmKG9bc109cS5nZXQociwib2xkZGlzcGxheSIpLG49ci5zdHlsZS5kaXNwbGF5LHQ/KG9bc118fCJub25lIiE9PW58fChyLnN0eWxlLmRpc3BsYXk9IiIpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZMdChyKSYmKG9bc109cS5hY2Nlc3Mociwib2xkZGlzcGxheSIsUnQoci5ub2RlTmFtZSkpKSk6b1tzXXx8KGk9THQociksKG4mJiJub25lIiE9PW58fCFpKSYmcS5zZXQociwib2xkZGlzcGxheSIsaT9uOnguY3NzKHIsImRpc3BsYXkiKSkpKTtmb3Iocz0wO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJih0JiYibm9uZSIhPT1yLnN0eWxlLmRpc3BsYXkmJiIiIT09ci5zdHlsZS5kaXNwbGF5fHwoci5zdHlsZS5kaXNwbGF5PXQ/b1tzXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGV9eC5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30scz0wO2lmKHguaXNBcnJheSh0KSl7Zm9yKHI9cXQoZSksaT10Lmxlbmd0aDtpPnM7cysrKW9bdFtzXV09eC5jc3MoZSx0W3NdLCExLHIpO3JldHVybiBvfXJldHVybiBuIT09dW5kZWZpbmVkP3guc3R5bGUoZSx0LG4pOnguY3NzKGUsdCl9LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe0x0KHRoaXMpP3godGhpcykuc2hvdygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj12dChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjoiY3NzRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5bGUpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpLHU9ZS5zdHlsZTtyZXR1cm4gdD14LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdCh1LGEpKSxzPXguY3NzSG9va3NbdF18fHguY3NzSG9va3NbYV0sbj09PXVuZGVmaW5lZD9zJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITEscikpIT09dW5kZWZpbmVkP2k6dVt0XToobz10eXBlb2Ygbiwic3RyaW5nIj09PW8mJihpPWt0LmV4ZWMobikpJiYobj0oaVsxXSsxKSppWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSx0KSksbz0ibnVtYmVyIiksbnVsbD09bnx8Im51bWJlciI9PT1vJiZpc05hTihuKXx8KCJudW1iZXIiIT09b3x8eC5jc3NOdW1iZXJbYV18fChuKz0icHgiKSx4LnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KHVbdF09ImluaGVyaXQiKSxzJiYic2V0ImluIHMmJihuPXMuc2V0KGUsbixyKSk9PT11bmRlZmluZWR8fCh1W3RdPW4pKSx1bmRlZmluZWQpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpO3JldHVybiB0PXguY3NzUHJvcHNbYV18fCh4LmNzc1Byb3BzW2FdPUF0KGUuc3R5bGUsYSkpLHM9eC5jc3NIb29rc1t0XXx8eC5jc3NIb29rc1thXSxzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITAsbikpLGk9PT11bmRlZmluZWQmJihpPXZ0KGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFN0JiYoaT1TdFt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksbj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmkpOml9fSksdnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPW58fHF0KGUpLGE9cz9zLmdldFByb3BlcnR5VmFsdWUodCl8fHNbdF06dW5kZWZpbmVkLHU9ZS5zdHlsZTtyZXR1cm4gcyYmKCIiIT09YXx8eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXguc3R5bGUoZSx0KSksQ3QudGVzdChhKSYmd3QudGVzdCh0KSYmKHI9dS53aWR0aCxpPXUubWluV2lkdGgsbz11Lm1heFdpZHRoLHUubWluV2lkdGg9dS5tYXhXaWR0aD11LndpZHRoPWEsYT1zLndpZHRoLHUud2lkdGg9cix1Lm1pbldpZHRoPWksdS5tYXhXaWR0aD1vKSksYX07ZnVuY3Rpb24gT3QoZSx0LG4pe3ZhciByPVR0LmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gRnQoZSx0LG4scixpKXt2YXIgbz1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT10PzE6MCxzPTA7Zm9yKDs0Pm87bys9MikibWFyZ2luIj09PW4mJihzKz14LmNzcyhlLG4ranRbb10sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJihzLT14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYocy09eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkpKSk6KHMrPXguY3NzKGUsInBhZGRpbmciK2p0W29dLCEwLGkpLCJwYWRkaW5nIiE9PW4mJihzKz14LmNzcyhlLCJib3JkZXIiK2p0W29dKyJXaWR0aCIsITAsaSkpKTtyZXR1cm4gc31mdW5jdGlvbiBQdChlLHQsbil7dmFyIHI9ITAsaT0id2lkdGgiPT09dD9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0LG89cXQoZSkscz14LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLG8pO2lmKDA+PWl8fG51bGw9PWkpe2lmKGk9dnQoZSx0LG8pLCgwPml8fG51bGw9PWkpJiYoaT1lLnN0eWxlW3RdKSxDdC50ZXN0KGkpKXJldHVybiBpO3I9cyYmKHguc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8aT09PWUuc3R5bGVbdF0pLGk9cGFyc2VGbG9hdChpKXx8MH1yZXR1cm4gaStGdChlLHQsbnx8KHM/ImJvcmRlciI6ImNvbnRlbnQiKSxyLG8pKyJweCJ9ZnVuY3Rpb24gUnQoZSl7dmFyIHQ9byxuPU50W2VdO3JldHVybiBufHwobj1NdChlLHQpLCJub25lIiE9PW4mJm58fCh4dD0oeHR8fHgoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKS5jc3MoImNzc1RleHQiLCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiKSkuYXBwZW5kVG8odC5kb2N1bWVudEVsZW1lbnQpLHQ9KHh0WzBdLmNvbnRlbnRXaW5kb3d8fHh0WzBdLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksdC5jbG9zZSgpLG49TXQoZSx0KSx4dC5kZXRhY2goKSksTnRbZV09biksbn1mdW5jdGlvbiBNdChlLHQpe3ZhciBuPXgodC5jcmVhdGVFbGVtZW50KGUpKS5hcHBlbmRUbyh0LmJvZHkpLHI9eC5jc3MoblswXSwiZGlzcGxheSIpO3JldHVybiBuLnJlbW92ZSgpLHJ9eC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7cmV0dXJuIG4/MD09PWUub2Zmc2V0V2lkdGgmJmJ0LnRlc3QoeC5jc3MoZSwiZGlzcGxheSIpKT94LnN3YXAoZSxFdCxmdW5jdGlvbigpe3JldHVybiBQdChlLHQscil9KTpQdChlLHQscik6dW5kZWZpbmVkfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPXImJnF0KGUpO3JldHVybiBPdChlLG4scj9GdChlLHQscix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sdnQsW2UsIm1hcmdpblJpZ2h0Il0pOnVuZGVmaW5lZH19KSwheC5zdXBwb3J0LnBpeGVsUG9zaXRpb24mJnguZm4ucG9zaXRpb24mJnguZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4pe3JldHVybiBuPyhuPXZ0KGUsdCksQ3QudGVzdChuKT94KGUpLnBvc2l0aW9uKClbdF0rInB4IjpuKTp1bmRlZmluZWR9fX0pfSkseC5leHByJiZ4LmV4cHIuZmlsdGVycyYmKHguZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4gMD49ZS5vZmZzZXRXaWR0aCYmMD49ZS5vZmZzZXRIZWlnaHR9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStqdFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSx3dC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1PdCl9KTt2YXIgV3Q9LyUyMC9nLCR0PS9cW1xdJC8sQnQ9L1xyP1xuL2csSXQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLHp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmenQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUl0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFvdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKEJ0LCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShCdCwiXHJcbiIpfX0pLmdldCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt0PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LHJbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZih0PT09dW5kZWZpbmVkJiYodD14LmFqYXhTZXR0aW5ncyYmeC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLHguaXNBcnJheShlKXx8ZS5qcXVlcnkmJiF4LmlzUGxhaW5PYmplY3QoZSkpeC5lYWNoKGUsZnVuY3Rpb24oKXtpKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlfdChuLGVbbl0sdCxpKTtyZXR1cm4gci5qb2luKCImIikucmVwbGFjZShXdCwiKyIpfTtmdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaTtpZih4LmlzQXJyYXkodCkpeC5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHwkdC50ZXN0KGUpP3IoZSxpKTpfdChlKyJbIisoIm9iamVjdCI9PXR5cGVvZiBpP3Q6IiIpKyJdIixpLG4scil9KTtlbHNlIGlmKG58fCJvYmplY3QiIT09eC50eXBlKHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpX3QoZSsiWyIraSsiXSIsdFtpXSxuLHIpfXguZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfX0pLHguZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCkKfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pO3ZhciBYdCxVdCxZdD14Lm5vdygpLFZ0PS9cPy8sR3Q9LyMuKiQvLEp0PS8oWz8mXSlfPVteJl0qLyxRdD0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLEt0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFp0PS9eKD86R0VUfEhFQUQpJC8sZW49L15cL1wvLyx0bj0vXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sbm49eC5mbi5sb2FkLHJuPXt9LG9uPXt9LHNuPSIqLyIuY29uY2F0KCIqIik7dHJ5e1V0PWkuaHJlZn1jYXRjaChhbil7VXQ9by5jcmVhdGVFbGVtZW50KCJhIiksVXQuaHJlZj0iIixVdD1VdC5ocmVmfVh0PXRuLmV4ZWMoVXQudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIHVuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpfHxbXTtpZih4LmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBsbihlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1vbjtmdW5jdGlvbiBzKGEpe3ZhciB1O3JldHVybiBpW2FdPSEwLHguZWFjaChlW2FdfHxbXSxmdW5jdGlvbihlLGEpe3ZhciBsPWEodCxuLHIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgbHx8b3x8aVtsXT9vPyEodT1sKTp1bmRlZmluZWQ6KHQuZGF0YVR5cGVzLnVuc2hpZnQobCkscyhsKSwhMSl9KSx1fXJldHVybiBzKHQuZGF0YVR5cGVzWzBdKXx8IWlbIioiXSYmcygiKiIpfWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG4scixpPXguYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXRbbl0hPT11bmRlZmluZWQmJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJnguZXh0ZW5kKCEwLGUsciksZX14LmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe2lmKCJzdHJpbmciIT10eXBlb2YgZSYmbm4pcmV0dXJuIG5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgcixpLG8scz10aGlzLGE9ZS5pbmRleE9mKCIgIik7cmV0dXJuIGE+PTAmJihyPWUuc2xpY2UoYSksZT1lLnNsaWNlKDAsYSkpLHguaXNGdW5jdGlvbih0KT8obj10LHQ9dW5kZWZpbmVkKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIikscy5sZW5ndGg+MCYmeC5hamF4KHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1sKHI/eCgiPGRpdj4iKS5hcHBlbmQoeC5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5jb21wbGV0ZShuJiZmdW5jdGlvbihlLHQpe3MuZWFjaChuLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LHguZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHguZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpVdCx0eXBlOiJHRVQiLGlzTG9jYWw6S3QudGVzdChYdFsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpzbix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOngucGFyc2VKU09OLCJ0ZXh0IHhtbCI6eC5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/Y24oY24oZSx4LmFqYXhTZXR0aW5ncyksdCk6Y24oeC5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6dW4ocm4pLGFqYXhUcmFuc3BvcnQ6dW4ob24pLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLHQ9dHx8e307dmFyIG4scixpLG8scyxhLHUsbCxjPXguYWpheFNldHVwKHt9LHQpLHA9Yy5jb250ZXh0fHxjLGY9Yy5jb250ZXh0JiYocC5ub2RlVHlwZXx8cC5qcXVlcnkpP3gocCk6eC5ldmVudCxoPXguRGVmZXJyZWQoKSxkPXguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGc9Yy5zdGF0dXNDb2RlfHx7fSxtPXt9LHk9e30sdj0wLGI9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoMj09PXYpe2lmKCFvKXtvPXt9O3doaWxlKHQ9UXQuZXhlYyhpKSlvW3RbMV0udG9Mb3dlckNhc2UoKV09dFsyXX10PW9bZS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbnVsbD09dD9udWxsOnR9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiAyPT09dj9pOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHZ8fChlPXlbbl09eVtuXXx8ZSxtW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ8fChjLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZigyPnYpZm9yKHQgaW4gZSlnW3RdPVtnW3RdLGVbdF1dO2Vsc2UgVC5hbHdheXMoZVtULnN0YXR1c10pO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXt2YXIgdD1lfHxiO3JldHVybiBuJiZuLmFib3J0KHQpLGsoMCx0KSx0aGlzfX07aWYoaC5wcm9taXNlKFQpLmNvbXBsZXRlPWQuYWRkLFQuc3VjY2Vzcz1ULmRvbmUsVC5lcnJvcj1ULmZhaWwsYy51cmw9KChlfHxjLnVybHx8VXQpKyIiKS5yZXBsYWNlKEd0LCIiKS5yZXBsYWNlKGVuLFh0WzFdKyIvLyIpLGMudHlwZT10Lm1ldGhvZHx8dC50eXBlfHxjLm1ldGhvZHx8Yy50eXBlLGMuZGF0YVR5cGVzPXgudHJpbShjLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2godyl8fFsiIl0sbnVsbD09Yy5jcm9zc0RvbWFpbiYmKGE9dG4uZXhlYyhjLnVybC50b0xvd2VyQ2FzZSgpKSxjLmNyb3NzRG9tYWluPSEoIWF8fGFbMV09PT1YdFsxXSYmYVsyXT09PVh0WzJdJiYoYVszXXx8KCJodHRwOiI9PT1hWzFdPyI4MCI6IjQ0MyIpKT09PShYdFszXXx8KCJodHRwOiI9PT1YdFsxXT8iODAiOiI0NDMiKSkpKSxjLmRhdGEmJmMucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2YgYy5kYXRhJiYoYy5kYXRhPXgucGFyYW0oYy5kYXRhLGMudHJhZGl0aW9uYWwpKSxsbihybixjLHQsVCksMj09PXYpcmV0dXJuIFQ7dT1jLmdsb2JhbCx1JiYwPT09eC5hY3RpdmUrKyYmeC5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxjLnR5cGU9Yy50eXBlLnRvVXBwZXJDYXNlKCksYy5oYXNDb250ZW50PSFadC50ZXN0KGMudHlwZSkscj1jLnVybCxjLmhhc0NvbnRlbnR8fChjLmRhdGEmJihyPWMudXJsKz0oVnQudGVzdChyKT8iJiI6Ij8iKStjLmRhdGEsZGVsZXRlIGMuZGF0YSksYy5jYWNoZT09PSExJiYoYy51cmw9SnQudGVzdChyKT9yLnJlcGxhY2UoSnQsIiQxXz0iK1l0KyspOnIrKFZ0LnRlc3Qocik/IiYiOiI/IikrIl89IitZdCsrKSksYy5pZk1vZGlmaWVkJiYoeC5sYXN0TW9kaWZpZWRbcl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLHgubGFzdE1vZGlmaWVkW3JdKSx4LmV0YWdbcl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIseC5ldGFnW3JdKSksKGMuZGF0YSYmYy5oYXNDb250ZW50JiZjLmNvbnRlbnRUeXBlIT09ITF8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsYy5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGMuZGF0YVR5cGVzWzBdJiZjLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dP2MuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0rKCIqIiE9PWMuZGF0YVR5cGVzWzBdPyIsICIrc24rIjsgcT0wLjAxIjoiIik6Yy5hY2NlcHRzWyIqIl0pO2ZvcihsIGluIGMuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIobCxjLmhlYWRlcnNbbF0pO2lmKGMuYmVmb3JlU2VuZCYmKGMuYmVmb3JlU2VuZC5jYWxsKHAsVCxjKT09PSExfHwyPT09dikpcmV0dXJuIFQuYWJvcnQoKTtiPSJhYm9ydCI7Zm9yKGwgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pVFtsXShjW2xdKTtpZihuPWxuKG9uLGMsdCxUKSl7VC5yZWFkeVN0YXRlPTEsdSYmZi50cmlnZ2VyKCJhamF4U2VuZCIsW1QsY10pLGMuYXN5bmMmJmMudGltZW91dD4wJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSxjLnRpbWVvdXQpKTt0cnl7dj0xLG4uc2VuZChtLGspfWNhdGNoKEMpe2lmKCEoMj52KSl0aHJvdyBDO2soLTEsQyl9fWVsc2UgaygtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24gayhlLHQsbyxhKXt2YXIgbCxtLHksYix3LEM9dDsyIT09diYmKHY9MixzJiZjbGVhclRpbWVvdXQocyksbj11bmRlZmluZWQsaT1hfHwiIixULnJlYWR5U3RhdGU9ZT4wPzQ6MCxsPWU+PTIwMCYmMzAwPmV8fDMwND09PWUsbyYmKGI9cG4oYyxULG8pKSxiPWZuKGMsYixULGwpLGw/KGMuaWZNb2RpZmllZCYmKHc9VC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHcmJih4Lmxhc3RNb2RpZmllZFtyXT13KSx3PVQuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx3JiYoeC5ldGFnW3JdPXcpKSwyMDQ9PT1lfHwiSEVBRCI9PT1jLnR5cGU/Qz0ibm9jb250ZW50IjozMDQ9PT1lP0M9Im5vdG1vZGlmaWVkIjooQz1iLnN0YXRlLG09Yi5kYXRhLHk9Yi5lcnJvcixsPSF5KSk6KHk9QywoZXx8IUMpJiYoQz0iZXJyb3IiLDA+ZSYmKGU9MCkpKSxULnN0YXR1cz1lLFQuc3RhdHVzVGV4dD0odHx8QykrIiIsbD9oLnJlc29sdmVXaXRoKHAsW20sQyxUXSk6aC5yZWplY3RXaXRoKHAsW1QsQyx5XSksVC5zdGF0dXNDb2RlKGcpLGc9dW5kZWZpbmVkLHUmJmYudHJpZ2dlcihsPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW1QsYyxsP206eV0pLGQuZmlyZVdpdGgocCxbVCxDXSksdSYmKGYudHJpZ2dlcigiYWpheENvbXBsZXRlIixbVCxjXSksLS14LmFjdGl2ZXx8eC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIFR9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5nZXQoZSx1bmRlZmluZWQsdCwic2NyaXB0Iil9fSkseC5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsdCl7eFt0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4geC5pc0Z1bmN0aW9uKG4pJiYoaT1pfHxyLHI9bixuPXVuZGVmaW5lZCkseC5hamF4KHt1cmw6ZSx0eXBlOnQsZGF0YVR5cGU6aSxkYXRhOm4sc3VjY2VzczpyfSl9fSk7ZnVuY3Rpb24gcG4oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLHI9PT11bmRlZmluZWQmJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIGEpaWYoYVtpXSYmYVtpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pO2JyZWFrfXN8fChzPWkpfW89b3x8c31yZXR1cm4gbz8obyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dKTp1bmRlZmluZWR9ZnVuY3Rpb24gZm4oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsPXt9LGM9ZS5kYXRhVHlwZXMuc2xpY2UoKTtpZihjWzFdKWZvcihzIGluIGUuY29udmVydGVycylsW3MudG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW3NdO289Yy5zaGlmdCgpO3doaWxlKG8paWYoZS5yZXNwb25zZUZpZWxkc1tvXSYmKG5bZS5yZXNwb25zZUZpZWxkc1tvXV09dCksIXUmJnImJmUuZGF0YUZpbHRlciYmKHQ9ZS5kYXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpLHU9byxvPWMuc2hpZnQoKSlpZigiKiI9PT1vKW89dTtlbHNlIGlmKCIqIiE9PXUmJnUhPT1vKXtpZihzPWxbdSsiICIrb118fGxbIiogIitvXSwhcylmb3IoaSBpbiBsKWlmKGE9aS5zcGxpdCgiICIpLGFbMV09PT1vJiYocz1sW3UrIiAiK2FbMF1dfHxsWyIqICIrYVswXV0pKXtzPT09ITA/cz1sW2ldOmxbaV0hPT0hMCYmKG89YVswXSxjLnVuc2hpZnQoYVsxXSkpO2JyZWFrfWlmKHMhPT0hMClpZihzJiZlWyJ0aHJvd3MiXSl0PXModCk7ZWxzZSB0cnl7dD1zKHQpfWNhdGNoKHApe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOnM/cDoiTm8gY29udmVyc2lvbiBmcm9tICIrdSsiIHRvICIrb319fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX14LmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiB4Lmdsb2JhbEV2YWwoZSksZX19fSkseC5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2UuY2FjaGU9PT11bmRlZmluZWQmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiKX0pLHguYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKHIsaSl7dD14KCI8c2NyaXB0PiIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKCJsb2FkIGVycm9yIixuPWZ1bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJmkoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxvLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIGhuPVtdLGRuPS8oPSlcPyg/PSZ8JCl8XD9cPy87eC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPWhuLnBvcCgpfHx4LmV4cGFuZG8rIl8iK1l0Kys7cmV0dXJuIHRoaXNbZV09ITAsZX19KSx4LmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLHMsYT10Lmpzb25wIT09ITEmJihkbi50ZXN0KHQudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIHQuZGF0YSYmISh0LmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJmRuLnRlc3QodC5kYXRhKSYmImRhdGEiKTtyZXR1cm4gYXx8Impzb25wIj09PXQuZGF0YVR5cGVzWzBdPyhpPXQuanNvbnBDYWxsYmFjaz14LmlzRnVuY3Rpb24odC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2ssYT90W2FdPXRbYV0ucmVwbGFjZShkbiwiJDEiK2kpOnQuanNvbnAhPT0hMSYmKHQudXJsKz0oVnQudGVzdCh0LnVybCk/IiYiOiI/IikrdC5qc29ucCsiPSIraSksdC5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHN8fHguZXJyb3IoaSsiIHdhcyBub3QgY2FsbGVkIiksc1swXX0sdC5kYXRhVHlwZXNbMF09Impzb24iLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7cz1hcmd1bWVudHN9LHIuYWx3YXlzKGZ1bmN0aW9uKCl7ZVtpXT1vLHRbaV0mJih0Lmpzb25wQ2FsbGJhY2s9bi5qc29ucENhbGxiYWNrLGhuLnB1c2goaSkpLHMmJnguaXNGdW5jdGlvbihvKSYmbyhzWzBdKSxzPW89dW5kZWZpbmVkfSksInNjcmlwdCIpOnVuZGVmaW5lZH0pLHguYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3ZhciBnbj14LmFqYXhTZXR0aW5ncy54aHIoKSxtbj17MDoyMDAsMTIyMzoyMDR9LHluPTAsdm49e307ZS5BY3RpdmVYT2JqZWN0JiZ4KGUpLm9uKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHZuKXZuW2VdKCk7dm49dW5kZWZpbmVkfSkseC5zdXBwb3J0LmNvcnM9ISFnbiYmIndpdGhDcmVkZW50aWFscyJpbiBnbix4LnN1cHBvcnQuYWpheD1nbj0hIWduLHguYWpheFRyYW5zcG9ydChmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5zdXBwb3J0LmNvcnN8fGduJiYhZS5jcm9zc0RvbWFpbj97c2VuZDpmdW5jdGlvbihuLHIpe3ZhciBpLG8scz1lLnhocigpO2lmKHMub3BlbihlLnR5cGUsZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpLGUueGhyRmllbGRzKWZvcihpIGluIGUueGhyRmllbGRzKXNbaV09ZS54aHJGaWVsZHNbaV07ZS5taW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUoZS5taW1lVHlwZSksZS5jcm9zc0RvbWFpbnx8blsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoblsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO2ZvcihpIGluIG4pcy5zZXRSZXF1ZXN0SGVhZGVyKGksbltpXSk7dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0JiYoZGVsZXRlIHZuW29dLHQ9cy5vbmxvYWQ9cy5vbmVycm9yPW51bGwsImFib3J0Ij09PWU/cy5hYm9ydCgpOiJlcnJvciI9PT1lP3Iocy5zdGF0dXN8fDQwNCxzLnN0YXR1c1RleHQpOnIobW5bcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsInN0cmluZyI9PXR5cGVvZiBzLnJlc3BvbnNlVGV4dD97dGV4dDpzLnJlc3BvbnNlVGV4dH06dW5kZWZpbmVkLHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPXQoKSxzLm9uZXJyb3I9dCgiZXJyb3IiKSx0PXZuW289eW4rK109dCgiYWJvcnQiKSxzLnNlbmQoZS5oYXNDb250ZW50JiZlLmRhdGF8fG51bGwpfSxhYm9ydDpmdW5jdGlvbigpe3QmJnQoKX19OnVuZGVmaW5lZH0pO3ZhciB4bixibix3bj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sVG49UmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrYisiKShbYS16JV0qKSQiLCJpIiksQ249L3F1ZXVlSG9va3MkLyxrbj1bQW5dLE5uPXsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpLHI9bi5jdXIoKSxpPVRuLmV4ZWModCksbz1pJiZpWzNdfHwoeC5jc3NOdW1iZXJbZV0/IiI6InB4Iikscz0oeC5jc3NOdW1iZXJbZV18fCJweCIhPT1vJiYrcikmJlRuLmV4ZWMoeC5jc3Mobi5lbGVtLGUpKSxhPTEsdT0yMDtpZihzJiZzWzNdIT09byl7bz1vfHxzWzNdLGk9aXx8W10scz0rcnx8MTtkbyBhPWF8fCIuNSIscy89YSx4LnN0eWxlKG4uZWxlbSxlLHMrbyk7d2hpbGUoYSE9PShhPW4uY3VyKCkvcikmJjEhPT1hJiYtLXUpfXJldHVybiBpJiYocz1uLnN0YXJ0PStzfHwrcnx8MCxuLnVuaXQ9byxuLmVuZD1pWzFdP3MrKGlbMV0rMSkqaVsyXToraVsyXSksbn1dfTtmdW5jdGlvbiBFbigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eG49dW5kZWZpbmVkfSkseG49eC5ub3coKX1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHIsaT0oTm5bdF18fFtdKS5jb25jYXQoTm5bIioiXSksbz0wLHM9aS5sZW5ndGg7Zm9yKDtzPm87bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBqbihlLHQsbil7dmFyIHIsaSxvPTAscz1rbi5sZW5ndGgsYT14LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO3ZhciB0PXhufHxFbigpLG49TWF0aC5tYXgoMCxsLnN0YXJ0VGltZStsLmR1cmF0aW9uLXQpLHI9bi9sLmR1cmF0aW9ufHwwLG89MS1yLHM9MCx1PWwudHdlZW5zLmxlbmd0aDtmb3IoO3U+cztzKyspbC50d2VlbnNbc10ucnVuKG8pO3JldHVybiBhLm5vdGlmeVdpdGgoZSxbbCxvLG5dKSwxPm8mJnU/bjooYS5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPWEucHJvbWlzZSh7ZWxlbTplLHByb3BzOnguZXh0ZW5kKHt9LHQpLG9wdHM6eC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTp4bnx8RW4oKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXguVHdlZW4oZSxsLm9wdHMsdCxuLGwub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxsLm9wdHMuZWFzaW5nKTtyZXR1cm4gbC50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2wudHdlZW5zLmxlbmd0aDowO2lmKGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7cj5uO24rKylsLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/YS5yZXNvbHZlV2l0aChlLFtsLHRdKTphLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKERuKGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO3M+bztvKyspaWYocj1rbltvXS5jYWxsKGwsZSxjLGwub3B0cykpcmV0dXJuIHI7cmV0dXJuIHgubWFwKGMsU24sbCkseC5pc0Z1bmN0aW9uKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKGUsbCkseC5meC50aW1lcih4LmV4dGVuZCh1LHtlbGVtOmUsYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBEbihlLHQpe3ZhciBuLHIsaSxvLHM7Zm9yKG4gaW4gZSlpZihyPXguY2FtZWxDYXNlKG4pLGk9dFtyXSxvPWVbbl0seC5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSkscz14LmNzc0hvb2tzW3JdLHMmJiJleHBhbmQiaW4gcyl7bz1zLmV4cGFuZChvKSxkZWxldGUgZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfXguQW5pbWF0aW9uPXguZXh0ZW5kKGpuLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7eC5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9yKDtpPnI7cisrKW49ZVtyXSxObltuXT1ObltuXXx8W10sTm5bbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9rbi51bnNoaWZ0KGUpOmtuLnB1c2goZSl9fSk7ZnVuY3Rpb24gQW4oZSx0LG4pe3ZhciByLGksbyxzLGEsdSxsPXRoaXMsYz17fSxwPWUuc3R5bGUsZj1lLm5vZGVUeXBlJiZMdChlKSxoPXEuZ2V0KGUsImZ4c2hvdyIpO24ucXVldWV8fChhPXguX3F1ZXVlSG9va3MoZSwiZngiKSxudWxsPT1hLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHU9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHUoKX0pLGEudW5xdWV1ZWQrKyxsLmFsd2F5cyhmdW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLHgucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksMT09PWUubm9kZVR5cGUmJigiaGVpZ2h0ImluIHR8fCJ3aWR0aCJpbiB0KSYmKG4ub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLCJpbmxpbmUiPT09eC5jc3MoZSwiZGlzcGxheSIpJiYibm9uZSI9PT14LmNzcyhlLCJmbG9hdCIpJiYocC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksbi5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsbC5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLHduLmV4ZWMoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZj8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09aXx8IWh8fGhbcl09PT11bmRlZmluZWQpY29udGludWU7Zj0hMH1jW3JdPWgmJmhbcl18fHguc3R5bGUoZSxyKX1pZigheC5pc0VtcHR5T2JqZWN0KGMpKXtoPyJoaWRkZW4iaW4gaCYmKGY9aC5oaWRkZW4pOmg9cS5hY2Nlc3MoZSwiZnhzaG93Iix7fSksbyYmKGguaGlkZGVuPSFmKSxmP3goZSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe3goZSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7cS5yZW1vdmUoZSwiZnhzaG93Iik7Zm9yKHQgaW4gYyl4LnN0eWxlKGUsdCxjW3RdKX0pO2ZvcihyIGluIGMpcz1TbihmP2hbcl06MCxyLGwpLHIgaW4gaHx8KGhbcl09cy5zdGFydCxmJiYocy5lbmQ9cy5zdGFydCxzLnN0YXJ0PSJ3aWR0aCI9PT1yfHwiaGVpZ2h0Ij09PXI/MTowKSl9fWZ1bmN0aW9uIExuKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBMbi5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfXguVHdlZW49TG4sTG4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMbixpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHwic3dpbmciLHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1yLHRoaXMudW5pdD1vfHwoeC5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPUxuLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpMbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj1Mbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5wb3M9dD10aGlzLm9wdGlvbnMuZHVyYXRpb24/eC5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpMbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxMbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9TG4ucHJvdG90eXBlLExuLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZS5lbGVtW2UucHJvcF18fGUuZWxlbS5zdHlsZSYmbnVsbCE9ZS5lbGVtLnN0eWxlW2UucHJvcF0/KHQ9eC5jc3MoZS5lbGVtLGUucHJvcCwiIiksdCYmImF1dG8iIT09dD90OjApOmUuZWxlbVtlLnByb3BdfSxzZXQ6ZnVuY3Rpb24oZSl7eC5meC5zdGVwW2UucHJvcF0/eC5meC5zdGVwW2UucHJvcF0oZSk6ZS5lbGVtLnN0eWxlJiYobnVsbCE9ZS5lbGVtLnN0eWxlW3guY3NzUHJvcHNbZS5wcm9wXV18fHguY3NzSG9va3NbZS5wcm9wXSk/eC5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCk6ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX0sTG4ucHJvcEhvb2tzLnNjcm9sbFRvcD1Mbi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx4LmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49eC5mblt0XTt4LmZuW3RdPWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUocW4odCwhMCksZSxyLGkpfX0pLHguZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKEx0KS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmlzRW1wdHlPYmplY3QoZSksbz14LnNwZWVkKHQsbixyKSxzPWZ1bmN0aW9uKCl7dmFyIHQ9am4odGhpcyx4LmV4dGVuZCh7fSxlKSxvKTsoaXx8cS5nZXQodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gcy5maW5pc2g9cyxpfHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKHMpOnRoaXMucXVldWUoby5xdWV1ZSxzKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChuKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj10LHQ9ZSxlPXVuZGVmaW5lZCksdCYmZSE9PSExJiZ0aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZSsicXVldWVIb29rcyIsbz14LnRpbWVycyxzPXEuZ2V0KHRoaXMpO2lmKGkpc1tpXSYmc1tpXS5zdG9wJiZyKHNbaV0pO2Vsc2UgZm9yKGkgaW4gcylzW2ldJiZzW2ldLnN0b3AmJkNuLnRlc3QoaSkmJnIoc1tpXSk7Zm9yKGk9by5sZW5ndGg7aS0tOylvW2ldLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW2ldLnF1ZXVlIT09ZXx8KG9baV0uYW5pbS5zdG9wKG4pLHQ9ITEsby5zcGxpY2UoaSwxKSk7KHR8fCFuKSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49cS5nZXQodGhpcykscj1uW2UrInF1ZXVlIl0saT1uW2UrInF1ZXVlSG9va3MiXSxvPXgudGltZXJzLHM9cj9yLmxlbmd0aDowO2ZvcihuLmZpbmlzaD0hMCx4LnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCghMCksby5zcGxpY2UodCwxKSk7Zm9yKHQ9MDtzPnQ7dCsrKXJbdF0mJnJbdF0uZmluaXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pO2Z1bmN0aW9uIHFuKGUsdCl7dmFyIG4scj17aGVpZ2h0OmV9LGk9MDtmb3IodD10PzE6MDs0Pmk7aSs9Mi10KW49anRbaV0sclsibWFyZ2luIituXT1yWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoci5vcGFjaXR5PXIud2lkdGg9ZSkscn14LmVhY2goe3NsaWRlRG93bjpxbigic2hvdyIpLHNsaWRlVXA6cW4oImhpZGUiKSxzbGlkZVRvZ2dsZTpxbigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSkseC5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP3guZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8eC5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiF4LmlzRnVuY3Rpb24odCkmJnR9O3JldHVybiByLmR1cmF0aW9uPXguZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiByLmR1cmF0aW9uP3IuZHVyYXRpb246ci5kdXJhdGlvbiBpbiB4LmZ4LnNwZWVkcz94LmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTp4LmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ci5xdWV1ZXx8ci5xdWV1ZT09PSEwKSYmKHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7eC5pc0Z1bmN0aW9uKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZ4LmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0seC5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfX0seC50aW1lcnM9W10seC5meD1Mbi5wcm90b3R5cGUuaW5pdCx4LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PXgudGltZXJzLG49MDtmb3IoeG49eC5ub3coKTt0Lmxlbmd0aD5uO24rKyllPXRbbl0sZSgpfHx0W25dIT09ZXx8dC5zcGxpY2Uobi0tLDEpO3QubGVuZ3RofHx4LmZ4LnN0b3AoKSx4bj11bmRlZmluZWR9LHguZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ4LnRpbWVycy5wdXNoKGUpJiZ4LmZ4LnN0YXJ0KCl9LHguZnguaW50ZXJ2YWw9MTMseC5meC5zdGFydD1mdW5jdGlvbigpe2JufHwoYm49c2V0SW50ZXJ2YWwoeC5meC50aWNrLHguZnguaW50ZXJ2YWwpKX0seC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChibiksYm49bnVsbH0seC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0seC5meC5zdGVwPXt9LHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4geC5ncmVwKHgudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSkseC5mbi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXVuZGVmaW5lZD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXt4Lm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7dmFyIHQsbixpPXRoaXNbMF0sbz17dG9wOjAsbGVmdDowfSxzPWkmJmkub3duZXJEb2N1bWVudDtpZihzKXJldHVybiB0PXMuZG9jdW1lbnRFbGVtZW50LHguY29udGFpbnModCxpKT8odHlwZW9mIGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09ciYmKG89aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksbj1IbihzKSx7dG9wOm8udG9wK24ucGFnZVlPZmZzZXQtdC5jbGllbnRUb3AsbGVmdDpvLmxlZnQrbi5wYWdlWE9mZnNldC10LmNsaWVudExlZnR9KTpvfSx4Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbCxjPXguY3NzKGUsInBvc2l0aW9uIikscD14KGUpLGY9e307InN0YXRpYyI9PT1jJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxhPXAub2Zmc2V0KCksbz14LmNzcyhlLCJ0b3AiKSx1PXguY3NzKGUsImxlZnQiKSxsPSgiYWJzb2x1dGUiPT09Y3x8ImZpeGVkIj09PWMpJiYobyt1KS5pbmRleE9mKCJhdXRvIik+LTEsbD8ocj1wLnBvc2l0aW9uKCkscz1yLnRvcCxpPXIubGVmdCk6KHM9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLHguaXNGdW5jdGlvbih0KSYmKHQ9dC5jYWxsKGUsbixhKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1hLnRvcCtzKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LWEubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpwLmNzcyhmKX19LHguZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbj10aGlzWzBdLHI9e3RvcDowLGxlZnQ6MH07cmV0dXJuImZpeGVkIj09PXguY3NzKG4sInBvc2l0aW9uIik/dD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihlPXRoaXMub2Zmc2V0UGFyZW50KCksdD10aGlzLm9mZnNldCgpLHgubm9kZU5hbWUoZVswXSwiaHRtbCIpfHwocj1lLm9mZnNldCgpKSxyLnRvcCs9eC5jc3MoZVswXSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxyLmxlZnQrPXguY3NzKGVbMF0sImJvcmRlckxlZnRXaWR0aCIsITApKSx7dG9wOnQudG9wLXIudG9wLXguY3NzKG4sIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LXIubGVmdC14LmNzcyhuLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnR8fHM7d2hpbGUoZSYmIXgubm9kZU5hbWUoZSwiaHRtbCIpJiYic3RhdGljIj09PXguY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8c30pfX0pLHguZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LG4pe3ZhciByPSJwYWdlWU9mZnNldCI9PT1uO3guZm5bdF09ZnVuY3Rpb24oaSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCxpLG8pe3ZhciBzPUhuKHQpO3JldHVybiBvPT09dW5kZWZpbmVkP3M/c1tuXTp0W2ldOihzP3Muc2Nyb2xsVG8ocj9lLnBhZ2VYT2Zmc2V0Om8scj9vOmUucGFnZVlPZmZzZXQpOnRbaV09byx1bmRlZmluZWQpfSx0LGksYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KTtmdW5jdGlvbiBIbihlKXtyZXR1cm4geC5pc1dpbmRvdyhlKT9lOjk9PT1lLm5vZGVUeXBlJiZlLmRlZmF1bHRWaWV3fXguZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrZSxjb250ZW50OnQsIiI6Im91dGVyIitlfSxmdW5jdGlvbihuLHIpe3guZm5bcl09ZnVuY3Rpb24ocixpKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoJiYobnx8ImJvb2xlYW4iIT10eXBlb2Ygcikscz1ufHwocj09PSEwfHxpPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQsbixyKXt2YXIgaTtyZXR1cm4geC5pc1dpbmRvdyh0KT90LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTo5PT09dC5ub2RlVHlwZT8oaT10LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIrZV0saVsic2Nyb2xsIitlXSx0LmJvZHlbIm9mZnNldCIrZV0saVsib2Zmc2V0IitlXSxpWyJjbGllbnQiK2VdKSk6cj09PXVuZGVmaW5lZD94LmNzcyh0LG4scyk6eC5zdHlsZSh0LG4scixzKX0sdCxvP3I6dW5kZWZpbmVkLG8sbnVsbCl9fSl9KSx4LmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHguZm4uYW5kU2VsZj14LmZuLmFkZEJhY2ssIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz14OiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiB4fSksIm9iamVjdCI9PXR5cGVvZiBlJiYib2JqZWN0Ij09dHlwZW9mIGUuZG9jdW1lbnQmJihlLmpRdWVyeT1lLiQ9eCl9KSh3aW5kb3cpOwo="}]},{"name":"Filecrypt cleaner","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["filecrypt.cc/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1526307676798,"data":{}},"enabled":false,"position":12,"file_url":"https://code.ponywave.de/workspace/test/fuck/filecryptcleaner.user.js","uuid":"aa255f04-b20c-4244-b349-aa0d060fb834","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBGaWxlY3J5cHQgY2xlYW5lcgovLyBAbmFtZXNwYWNlICAgIGh0dHA6Ly90YW1wZXJtb25rZXkubmV0LwovLyBAdmVyc2lvbiAgICAgIDAuMTIKLy8gQGRlc2NyaXB0aW9uICBSZW1vdmVzIEJhbm5lciBmcm9tIGZpbGVjcnlwdC5jYwovLyBAYXV0aG9yICAgICAgIEFrYW1hcnUKLy8gQGhvbWVwYWdlVVJMICBodHRwczovL2FrYW1hcnUuZGUKLy8gQHVwZGF0ZVVSTCAgICBodHRwczovL2NvZGUucG9ueXdhdmUuZGUvd29ya3NwYWNlL3Rlc3QvZnVjay9maWxlY3J5cHRjbGVhbmVyLnVzZXIuanMKLy8gQG1hdGNoICAgICAgICBmaWxlY3J5cHQuY2MvKgoKLy8gQGdyYW50ICAgICAgICBub25lCgoKLy8gPT0vVXNlclNjcmlwdD09Ci8qIGpzaGludCAtVzA5NyAqLwondXNlIHN0cmljdCc7CgovLyBUaGlzIGZldGNoZXMgYWxsIG9mIHRoZSA8aW1nPiB0YWdzIGFuZCBzdG9yZXMgdGhlbSBpbiAidGFncyIuCnZhciB0YWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpOwoKLy8gVGhpcyBsb29wcyBvdmVyIGFsbCBvZiB0aGUgPGltZz4gdGFncy4KZm9yICh2YXIgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKSB7CgogIC8vIFRoaXMgcmVwbGFjZXMgdGhlIHNyYyBhdHRyaWJ1dGUgb2YgdGhlIHRhZyB3aXRoIHRoZSBtb2RpZmllZCBvbmUKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL3VsaTIucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL3VsaTIucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZpbGVjcnlwdC5jYy9ibG9iL3VsaTIucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly9maWxlY3J5cHQuY2MvYmxvYi91bGkyLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly93d3cuZmlsZWNyeXB0LmNjL2ltYWdlcy91bGkyLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vd3d3LmZpbGVjcnlwdC5jYy9pbWFnZXMvdWxpMi5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwOi8vZmlsZWNyeXB0LmNjL2ltYWdlcy94cjJtMnZjcy5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwczovL2ZpbGVjcnlwdC5jYy9pbWFnZXMveHIybTJ2Y3MucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL3d3dy5maWxlY3J5cHQuY2MvaW1hZ2VzL3hyMm0ydmNzLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vd3d3LmZpbGVjcnlwdC5jYy9pbWFnZXMveHIybTJ2Y3MucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZpbGVjcnlwdC5jYy9pbWFnZXMvc29ydGUucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL3NvcnRlLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9maWxlY3J5cHQuY2MvYmxvYi9zb3J0ZS5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwczovL2ZpbGVjcnlwdC5jYy9ibG9iL3NvcnRlLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly93d3cuZmlsZWNyeXB0LmNjL2ltYWdlcy9zb3J0ZS5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwczovL3d3dy5maWxlY3J5cHQuY2MvaW1hZ2VzL3NvcnRlLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL2praDMyNGtqaC5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwczovL2ZpbGVjcnlwdC5jYy9pbWFnZXMvamtoMzI0a2poLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly93d3cuZmlsZWNyeXB0LmNjL2ltYWdlcy9qa2gzMjRramgucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly93d3cuZmlsZWNyeXB0LmNjL2ltYWdlcy9qa2gzMjRramgucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL2Y0YTEwYTE3LmpwZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL2Y0YTEwYTE3LmpwZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vd3d3LmZpbGVjcnlwdC5jYy9pbWFnZXMvZjRhMTBhMTcuanBnJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL3d3dy5maWxlY3J5cHQuY2MvaW1hZ2VzL2Y0YTEwYTE3LmpwZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vZmlsZWNyeXB0LmNjL2Jsb2IvNXZwZGVub2QucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZpbGVjcnlwdC5jYy9ibG9iLzV2cGRlbm9kLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly90aGV2cG5kZWFsLmRvd25sb2FkL2IvNWFkODdlNDQxOWQ1NDI4YjE5MTMyYjM4LzkyNDkwODA1MCcsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vdGhldnBuZGVhbC5kb3dubG9hZC9iLzVhZDg3ZTQ0MTlkNTQyOGIxOTEzMmIzOC85MjQ5MDgwNTAnLCAnJyk7Cn0="},{"name":"Twitter background restorer","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["https://twitter.com/"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"data":{"backgroundURL":"shttps://img.ponywave.de/di/H0XJ/Noire_(Profilhintergrund)_Hyperdimension_Neptunia_Re;Birth1.jpg"},"ts":1527247725611},"enabled":false,"position":13,"file_url":"https://openuserjs.org/install/agubelu/Twitter_background_restorer.user.js","uuid":"dc85c590-3b26-4c53-91bb-4975dedcb51e","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFR3aXR0ZXIgYmFja2dyb3VuZCByZXN0b3JlcgovLyBAbmFtZXNwYWNlICAgYWd1YmVsdQovLyBAaW5jbHVkZSAgICAgaHR0cHM6Ly90d2l0dGVyLmNvbS8KLy8gQGdyYW50ICAgICAgIEdNX2dldFZhbHVlCi8vIEBncmFudCAgICAgICBHTV9zZXRWYWx1ZQovLyBAdmVyc2lvbiAgICAgMQovLyA9PS9Vc2VyU2NyaXB0PT0KCiAgdmFyIGJnX3VybCA9IEdNX2dldFZhbHVlKCJiYWNrZ3JvdW5kVVJMIiwgZmFsc2UpOwoKICBpZighYmdfdXJsKSB7CiAgIGJnX3VybCA9IHByb21wdCgiUGxlYXNlIGlucHV0IHlvdXIgYmFja2dyb3VuZCBpbWFnZSBVUkw6IiwgIiIpOwogICBHTV9zZXRWYWx1ZSgiYmFja2dyb3VuZFVSTCIsIGJnX3VybCk7CiAgfQoKICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJyIgKyBiZ191cmwgKyAiJykiOwogIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9ICJuby1yZXBlYXQiOwogIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZEF0dGFjaG1lbnQgPSAiZml4ZWQiOw=="},{"name":"Romsmania.cc - Swap download link","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://romsmania.cc/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1538310704784,"data":{}},"enabled":true,"position":14,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/romsmania-link-swapper.user.js","uuid":"a298c7e0-6776-4c9f-aeab-70a9659bc1d1","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBSb21zbWFuaWEuY2MgLSBTd2FwIGRvd25sb2FkIGxpbmsKLy8gQHZlcnNpb24gICAgICAxLjEuMgovLyBAZGVzY3JpcHRpb24gIFN3YXBzIHRoZSBkb3dubG9hZCBidXR0b24gbGluayBhbmQgZm9yY2VzIGRvd25sb2FkIHdpdGhvdXQgdGltZW91dAovLyBAYXV0aG9yICAgICAgIEJyYXdsCi8vIEBtYXRjaCAgICAgICAgaHR0cHM6Ly9yb21zbWFuaWEuY2MvKgovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vcm9tc21hbmlhLmNjL2Zhdmljb24uaWNvCi8vIEBkb3dubG9hZFVSTCAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEvcmF3L3JvbXNtYW5pYS1saW5rLXN3YXBwZXIudXNlci5qcwovLyBAdXBkYXRlVVJMICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9yb21zbWFuaWEtbGluay1zd2FwcGVyLnVzZXIuanMKLy8gQHN1cHBvcnRVUkwgICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMSNjb21tZW50cwovLyBAZ3JhbnQgICAgICAgIG5vbmUKLy8gPT0vVXNlclNjcmlwdD09CgooZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CiAgICAKICAgIGlmIChkb2N1bWVudC5VUkwuc3BsaXQoJy8nKVszXSA9PT0gJ2Rvd25sb2FkJykgewogICAgICAgIC8vIEZvcmNlIGRvd25sb2FkIGFuZCBjbGVhciBjb3VudGRvd24KICAgICAgICBmb3IodmFyIGk9MDsgaTwxMDAwMDA7IGkrKykgY2xlYXJUaW1lb3V0KGkpOyAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDQzMzk0NAogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3dhaXRfX3RleHQnKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3dhaXRfX2xpbmsnKVswXTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUmVwbGFjZSBETCBMaW5rCiAgICAgICAgdmFyIGRsTGlua0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rvd25sb2FkX2xpbmsnKTsKICAgICAgICBkbExpbmtFbC5ocmVmID0gZGxMaW5rRWwuaHJlZi5yZXBsYWNlKCc/ZmFzdCcsICcnKTsKCiAgICAgICAgLy8gSGlkZSAic2hvdyBtb3JlIgogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vcmUnKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIAogICAgICAgIC8vIEFwcGVuZCBpbmZvCiAgICAgICAgdmFyIGFib3V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwogICAgICAgIGFib3V0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJMaW5rIHN3YXBwZWQgd2l0aCBMaW5rIFN3YXBwZXIgVXNlcnNjcmlwdCIpKTsKICAgICAgICBkbExpbmtFbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhYm91dCwgZGxMaW5rRWwubmV4dFNpYmxpbmcpOwogICAgfQoKfSkoKTsK"},{"name":"EmuParadise Download Workaround","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.emuparadise.me/*/*/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1538315498494,"data":{}},"enabled":true,"position":15,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/emuparadise-download-workaround.user.js","uuid":"86973ddc-e3ce-44bb-9b12-f678538e835e","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBFbXVQYXJhZGlzZSBEb3dubG9hZCBXb3JrYXJvdW5kCi8vIEB2ZXJzaW9uICAgICAgMS4xLjIuMQovLyBAZGVzY3JpcHRpb24gIFJlcGxhY2VzIHRoZSBkb3dubG9hZCBidXR0b24gbGluayB3aXRoIGEgd29ya2luZyBvbmUuIE5vdyB3aXRob3V0IGpRdWVyeSEKLy8gQGF1dGhvciAgICAgICBFcHR1biwgQnJhd2wKLy8gQG1hdGNoICAgICAgICBodHRwczovL3d3dy5lbXVwYXJhZGlzZS5tZS8qLyovKgovLyBAZG93bmxvYWRVUkwgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9lbXVwYXJhZGlzZS1kb3dubG9hZC13b3JrYXJvdW5kLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCAgICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcvZW11cGFyYWRpc2UtZG93bmxvYWQtd29ya2Fyb3VuZC51c2VyLmpzCi8vIEBzdXBwb3J0VVJMICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEjY29tbWVudHMKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwogICAgCiAgICB2YXIgdXJsV2l0aG91dEFuY2hvciA9IGRvY3VtZW50LlVSTC5zcGxpdCgnIycpWzBdOwogICAgdmFyIGlkID0gdXJsV2l0aG91dEFuY2hvci5zcGxpdCgnLycpWzVdOwogICAgdmFyIGRsTGlua0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZG93bmxvYWQtbGluaycpWzBdOwoKICAgIHZhciBsaW5rRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICBsaW5rRWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0Rvd25sb2FkIHVzaW5nIHRoZSB3b3JrYXJvdW5kIHNjcmlwdCAobWlkZGxlIGNsaWNrIGluIEZpcmVmb3gpJykpOwogICAgbGlua0VsLmhyZWYgPSAnL3JvbXMvZ2V0LWRvd25sb2FkLnBocD9naWQ9JyArIGlkICsgJyZ0ZXN0PXRydWUnCiAgICBsaW5rRWwudGFyZ2V0ID0gJ19ibGFuaycKCiAgICBkbExpbmtFbC5pbnNlcnRCZWZvcmUobGlua0VsLCBkbExpbmtFbC5maXJzdENoaWxkKTsKICAgIGxpbmtFbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKICAgIGxpbmtFbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKCn0pKCk7Cg=="},{"name":"Fuck You Discord","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://old.reddit.com/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1545167415570,"data":{}},"enabled":false,"position":16,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/fuck-you-discord.user.js","uuid":"ea7d525b-a3bb-4644-bbca-2de685782a18","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBGdWNrIFlvdSBEaXNjb3JkCi8vIEB2ZXJzaW9uICAgICAgMS4wLjEuMQovLyBAZGVzY3JpcHRpb24gIFN3YXBzIERpc2NvcmRhcHAgSW1hZ2UgTGlua3MKLy8gQGF1dGhvciAgICAgICBCcmF3bAovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vb2xkLnJlZGRpdC5jb20vKgovLyBAZG93bmxvYWRVUkwgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9mdWNrLXlvdS1kaXNjb3JkLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCAgICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcvZnVjay15b3UtZGlzY29yZC51c2VyLmpzCi8vIEBzdXBwb3J0VVJMICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEjY29tbWVudHMKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwogICAgdmFyIHBhdHRlcm4gPSAvXmh0dHBzPzpcL1wvLitcLmRpc2NvcmRhcHBcLig/OmNvbXxuZXQpXC9hdHRhY2htZW50c1wvXGQrXC9cZCtcLy4rXC4oPzpwbmd8anBnfGpwZWd8Z2lmfGJtcCkvOwogICAgCiAgICB2YXIgYWxsX2xpbmtzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTsKICAgIGZvcih2YXIgaT0wOyBpIDwgYWxsX2xpbmtzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGxpbmsgPSBhbGxfbGlua3NbaV07CiAgICAgICAgaWYocGF0dGVybi50ZXN0KGxpbmspKSB7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJodHRwczovL2FuZGk3LnViZXIuc3BhY2UvaW1nLnBocD91cmw9IiArIGxpbmsuaHJlZjsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHZhciBhbGxfaW1hZ2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpOwogICAgZm9yKHZhciBpPTA7IGkgPCBhbGxfaW1hZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGltYWdlID0gYWxsX2ltYWdlc1tpXTsKICAgICAgICBpZihwYXR0ZXJuLnRlc3QoaW1hZ2UpKSB7CiAgICAgICAgICAgIGltYWdlLnNyYyA9ICJodHRwczovL2FuZGk3LnViZXIuc3BhY2UvaW1nLnBocD91cmw9IiArIGltYWdlLnNyYzsKICAgICAgICB9CiAgICB9Cgp9KSgpOwo="},{"name":"YouTube (Old Design) - No Translation","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.youtube.com/watch?v=*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1548697487946,"data":{}},"enabled":false,"position":17,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/youtube-no-translation.user.js","uuid":"7afb5e7b-eaca-4afc-9a35-d47f2e95d5e6","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBZb3VUdWJlIChPbGQgRGVzaWduKSAtIE5vIFRyYW5zbGF0aW9uCi8vIEB2ZXJzaW9uICAgICAgMS4wLjAKLy8gQGRlc2NyaXB0aW9uICBVc2VzIHRoZSBvcmlnaW5hbCB0aXRsZSBmb3IgdmlkZW8gcGFnZXMKLy8gQGF1dGhvciAgICAgICBCcmF3bAovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9KgovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vcy55dGltZy5jb20veXRzL2ltZy9mYXZpY29uLXZmbDhxU1YyRi5pY28KLy8gQGRvd25sb2FkVVJMICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcveW91dHViZS1uby10cmFuc2xhdGlvbi51c2VyLmpzCi8vIEB1cGRhdGVVUkwgICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEvcmF3L3lvdXR1YmUtbm8tdHJhbnNsYXRpb24udXNlci5qcwovLyBAc3VwcG9ydFVSTCAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxI2NvbW1lbnRzCi8vIEBncmFudCAgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKICAgIAogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVvdy10aXRsZSIpLmlubmVyVGV4dCA9IGRvY3VtZW50LnRpdGxlLnN1YnN0cmluZygwLCBkb2N1bWVudC50aXRsZS5sZW5ndGggLSAxMCk7Cgp9KSgpOwo="},{"name":"Zeit.de - Kein ZEIT PLUS","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.zeit.de/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1548697543065,"data":{}},"enabled":true,"position":18,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/kein-zeit-plus.user.js","uuid":"08c51ebb-c99d-4e7d-a99e-873e08dc1756","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBaZWl0LmRlIC0gS2VpbiBaRUlUIFBMVVMKLy8gQHZlcnNpb24gICAgICAxLjAuMAovLyBAZGVzY3JpcHRpb24gIEVudGZlcm50IFpFSVQgUExVUyBBcnRpa2VsCi8vIEBhdXRob3IgICAgICAgQnJhd2wKLy8gQG1hdGNoICAgICAgICBodHRwczovL3d3dy56ZWl0LmRlLyoKLy8gQGljb24gICAgICAgICBodHRwczovL3d3dy56ZWl0LmRlL2Zhdmljb24uaWNvCi8vIEBkb3dubG9hZFVSTCAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEvcmF3L2tlaW4temVpdC1wbHVzLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCAgICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcva2Vpbi16ZWl0LXBsdXMudXNlci5qcwovLyBAc3VwcG9ydFVSTCAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxI2NvbW1lbnRzCi8vIEBncmFudCAgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKICAgIAogICAgdmFyIGFydGljbGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2FydGljbGUnKTsKICAgIHZhciB6cGx1c2FydGljbGUgPSBudWxsOwogICAgZm9yKHZhciBpID0gMDsgaSA8IGFydGljbGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICBpZih0eXBlb2YgYXJ0aWNsZXNbaV0uZGF0YXNldFsienBsdXMiXSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHpwbHVzYXJ0aWNsZSA9IGFydGljbGVzW2ldOwogICAgICAgICAgenBsdXNhcnRpY2xlLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICB9CiAgICB9Cgp9KSgpOwo="},{"name":"Google.de - \"Es fehlt\" gar nichts","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.google.com/search*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1551373828622,"data":{}},"enabled":true,"position":19,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/google-es-fehlt-gar-nichts.user.js","uuid":"91a44956-59ac-48f0-8bce-d212ad13ce81","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBHb29nbGUuZGUgLSAiRXMgZmVobHQiIGdhciBuaWNodHMKLy8gQHZlcnNpb24gICAgICAxLjAuMS4xCi8vIEBkZXNjcmlwdGlvbiAgR3JhdXQgIkVzIGZlaGx0IiBFcmdlYm5pc3NlIGF1cwovLyBAYXV0aG9yICAgICAgIEJyYXdsMzQ1Ci8vIEBtYXRjaCAgICAgICAgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2gqCi8vIEBpY29uICAgICAgICAgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zMi9mYXZpY29ucz9kb21haW49d3d3Lmdvb2dsZS5jb20KLy8gQGRvd25sb2FkVVJMICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcvZ29vZ2xlLWVzLWZlaGx0LWdhci1uaWNodHMudXNlci5qcwovLyBAdXBkYXRlVVJMICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9nb29nbGUtZXMtZmVobHQtZ2FyLW5pY2h0cy51c2VyLmpzCi8vIEBzdXBwb3J0VVJMICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEjY29tbWVudHMKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBhbGxfbWlzc2luZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzIik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbF9taXNzaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG1pc3NpbmdQYXJlbnQgPSBhbGxfbWlzc2luZ1tpXS5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50OwogICAgICAgIG1pc3NpbmdQYXJlbnQuc3R5bGUub3BhY2l0eSA9IDAuMzsKICAgIH0KCn0pKCk7Cg=="},{"name":"blockblockadblock","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_prototypes":true,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1565462276679,"data":{}},"enabled":true,"position":20,"file_url":"https://github.com/Mechazawa/BlockBlockAdBlock/raw/master/blockblockadblock.user.js","uuid":"200d4fa2-fd29-434a-80b8-0d5142335612","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIGJsb2NrYmxvY2thZGJsb2NrCi8vIEBkZXNjcmlwdGlvbiBCbG9ja3MgQmxvY2tBZEJsb2NrLmpzIGZyb20gcnVubmluZwovLyBAbmFtZXNwYWNlICAgTWVjaGF6YXdhCi8vIEBhdXRob3IgICAgICBNZWNoYXphd2EKLy8gQGluY2x1ZGUgICAgICoKLy8gQHZlcnNpb24gICAgIDQKLy8gQGxpY2Vuc2UgICAgIFVubGljZW5zZQovLyBAdXBkYXRlVVJMICAgaHR0cHM6Ly9naXRodWIuY29tL01lY2hhemF3YS9CbG9ja0Jsb2NrQWRCbG9jay9yYXcvbWFzdGVyL0Jsb2NrQmxvY2tBZEJsb2NrLnVzZXIuanMKLy8gQHJ1bi1hdCAgICAgIGRvY3VtZW50LXN0YXJ0Ci8vIEBncmFudCAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKCgovLyBJIGhhdmUgYSBidW5jaCBtb3JlIHdheXMgb2YgZGV0ZWN0aW5nIGl0IGluIGNhc2UgdGhpcyBtZXRob2QgZXZlciBnZXRzIGJsb2NrZWQKKGZ1bmN0aW9uKHdpbmRvdykgewogICAgdmFyIHdpbmRvd0tleXNEZWZhdWx0ID0gT2JqZWN0LmtleXMod2luZG93KTsKICAgIHZhciBpc0ZpcmVmb3ggPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTE7CgogICAgdmFyIHBpdm90ID0gJ0x5OTNkM2N1WjI5dloyeGxMbU52YlM5aFpITmxibk5sTDNOMFlYSjBMMmx0WVdkbGN5OW1ZWFpwWTI5dUxtbGpidz09JzsKCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHdpbmRvd0tleXNTdXNwZWN0ID0gT2JqZWN0LmtleXMod2luZG93KQogICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB3aW5kb3dLZXlzRGVmYXVsdC5pbmRleE9mKHgpID09PSAtMSAmJiB4Lmxlbmd0aCA9PSAxMjt9KTsKCiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHdpbmRvd0tleXNTdXNwZWN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzdXNwZWN0TmFtZSA9IHdpbmRvd0tleXNTdXNwZWN0W2ldOwoKICAgICAgICAgICAgaWYoaXNGaXJlZm94KSB7CiAgICAgICAgICAgICAgICB2YXIgc3VzcGVjdCA9IHdpbmRvd1tzdXNwZWN0TmFtZV07CiAgICAgICAgICAgICAgICB2YXIgc3VzcGVjdEtleXMgPSBPYmplY3Qua2V5cyhzdXNwZWN0KTsKICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGlpIGluIHN1c3BlY3RLZXlzKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHN1c3BlY3Rbc3VzcGVjdEtleXNbaWldXS50b1NvdXJjZSgpOwogICAgICAgICAgICAgICAgICAgIGZvdW5kID0gc291cmNlLmluZGV4T2YocGl2b3QpICE9PSAtMTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvdW5kID0gL1xEXGRcRC8uZXhlYyhzdXNwZWN0TmFtZSkgIT09IG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKGZvdW5kKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRm91bmQgQmxvY2tBZEJsb2NrIHdpdGggbmFtZSAnICsgc3VzcGVjdE5hbWUpOwogICAgICAgICAgICAgICAgZGVsZXRlIHdpbmRvd1tzdXNwZWN0TmFtZV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKfSkod2luZG93KTsK"},{"name":"shrtz.me Ad Patch","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http://*/*","https://*/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1565462292927,"data":{}},"enabled":false,"position":21,"file_url":"https://greasyfork.org/scripts/386992-shrtz-me-ad-patch/code/shrtzme%20Ad%20Patch.user.js","uuid":"eee13c42-e3dd-4776-a1da-e723f3e6e7b5","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBzaHJ0ei5tZSBBZCBQYXRjaAovLyBAbmFtZXNwYWNlICAgIFNob3J0em9uCi8vIEB2ZXJzaW9uICAgICAgMC4xCi8vIEBkZXNjcmlwdGlvbiAgUGF0Y2hlcyBtb3N0IFNob3J0em9uIHNocnR6Lm1lIGxpbmtzIHRvIHJlbW92ZSBhZHMsIHRpbWVyLCBhbmQgbWFrZSB0aGVtIGF1dG9tYXRpY2FsbHkgcHJvY2VlZCBhZnRlciBjYXB0Y2hhIGlzIHNvbHZlZC4KLy8gQGF1dGhvciAgICAgICA0Y2hhbm5lbCBQaXJhdGUKLy8gQGluY2x1ZGUgICAgICBodHRwOi8vKi8qCi8vIEBpbmNsdWRlICAgICAgaHR0cHM6Ly8qLyoKLy8gQHJlcXVpcmUgICAgICBodHRwOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0zLjMuMS5taW4uanMKLy8gQGdyYW50ICAgICAgICBub25lCi8vIEBydW4tYXQgICAgICAgZG9jdW1lbnQtc3RhcnQKLy8gPT0vVXNlclNjcmlwdD09Cgp2YXIgdGltZVZhbCA9IDEwMDsKCmF1dG9Qcm9jZWVkID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoJCgnI2NvdW50ZG93bicpLmxlbmd0aCkgewogICAgICAgIHZhciBlID0gJCgnI2dvLWxpbmsnKTsKICAgICAgICB2YXIgbiA9IGUuZmluZCgiYnV0dG9uIik7CiAgICAgICAgJCgnI3RpbWVyJykudGV4dChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNTk2KSkKICAgICAgICAkLmFqYXgoewogICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAogICAgICAgICAgICB0eXBlOiAnUE9TVCcsCiAgICAgICAgICAgIHVybDogZS5hdHRyKCdhY3Rpb24nKSwKICAgICAgICAgICAgZGF0YTogZS5zZXJpYWxpemUoKSwKICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24odCkgewogICAgICAgICAgICAgICAgJ2Jhbm5lcicgPT09IGFkX3R5cGUgJiYgKG4uYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKSwgJCgnYS5nZXQtbGluaycpLnRleHQoYXRvYignVEdWaGRtbHVaeUJ6YUdsMGRIa2dZV1FnYzJsMFpTNHVMaUIzWVdsMElHOXVaU0J0YjIxbGJuUWdZbkp2JykpLCAkKCcjdGltZXInKS50ZXh0KCcwJykpLCAnaW50ZXJzdGl0aWFsJyA9PT0gYWRfdHlwZSAmJiBuLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJykKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24odCwgZSwgbikgewogICAgICAgICAgICAgICAgaWYgKHQudXJsLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodC51cmwpOwogICAgICAgICAgICAgICAgICAgICQoJyNjb3VudGRvd24nKS5wYXJlbnQoKS5maW5kKCdoNCcpLnRleHQoYXRvYignV1c5MWNpQnNhVzVySUdseklISmxZV1I1TGlCU1pXUnBjbVZqZEdsdVp5QjBieUI1YjNWeUlHeHBibXNnYm05M0lRJykpOwogICAgICAgICAgICAgICAgICAgICQoJyNjb3VudGRvd24nKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHQsIGUsIG4pIHsKICAgICAgICAgICAgICAgICQoJyN0aW1lcicpLnRleHQoJ1JFRUUnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKHQsIGUpIHt9CiAgICAgICAgfSkKICAgIH0KICAgIHZhciBhdXRvU3VibWl0ID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdWJCdG4gPSAkKCcjaW52aXNpYmxlQ2FwdGNoYVNob3J0bGluaycpOwogICAgICAgIHZhciBzdWJCdG5UeHQgPSAnVjJGcGRHbHVaeUJtYjNJZ2VXOTFJSFJ2SUhOdmJIWmxJSFJvWlNCallYQjBZMmhoTGk0dSc7CiAgICAgICAgaWYgKHN1YkJ0bi5sZW5ndGggJiYgc3ViQnRuLmlzKCc6ZW5hYmxlZCcpICYmIHN1YkJ0bi50ZXh0KCkgPT0gYXRvYihzdWJCdG5UeHQpKSB7CiAgICAgICAgICAgIHN1YkJ0bi50ZXh0KGF0b2IoJ1VISnZZMlZ6YzJsdVp5QnpiMngyWldRZ1kyRndkR05vWVNCaGJuTjNaWElnYm05M0xpNHUnKSk7CiAgICAgICAgICAgIHN1YkJ0bi5jbGljaygpOwogICAgICAgIH0KICAgICAgICBpZiAoc3ViQnRuLmxlbmd0aCAmJiBzdWJCdG4uaXMoJzpkaXNhYmxlZCcpKSB7CiAgICAgICAgICAgIHN1YkJ0bi50ZXh0KGF0b2Ioc3ViQnRuVHh0KSk7CiAgICAgICAgfQogICAgfSwgdGltZVZhbCk7Cn0KCmF1dG9GaXhQYWdlID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoJCgnZm9vdGVyJykubGVuZ3RoKSB7CiAgICAgICAgJCgnLnRleHQtbGVmdCxzdHJvbmcnKS5yZW1vdmUoKTsKICAgICAgICAkKCcjbGluay12aWV3JykuY29udGVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiAodGhpcy5ub2RlVHlwZSA9PSAzKTsKICAgICAgICB9KS5yZW1vdmUoKTsKICAgICAgICAkKCcjbGluay12aWV3JykuZmluZCgnYnIsY2VudGVyOmVxKDEpJykucmVtb3ZlKCk7CiAgICAgICAgJCgnLmNvb2tpZS1tZXNzYWdlLC5jb29raWUtY29uZmlybScpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICQoJ2NlbnRlcjplcSgwKSwjbWFpbk5hdiwuYmFubmVyLWlubmVyLGZvb3RlcicpLnJlbW92ZSgpOwogICAgICAgICQoJy5ib3gtbWFpbicpLmNzcyh7CiAgICAgICAgICAgICdib3JkZXInOiAnbm9uZScKICAgICAgICB9KTsKICAgICAgICAkKCcjaW52aXNpYmxlQ2FwdGNoYVNob3J0bGluaycpLmh0bWwoJ1N1Ym1pdCcpOwogICAgfQp9CgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAgIGlmICgkKCJodG1sOmNvbnRhaW5zKGF0b2IoVFdGa1pTQjNhWFJvSU9LWnBTQnBiaUJKYm1ScFlRPT0pKSIpKSB7CiAgICAgICAgd2luZG93LnNldEludGVydmFsKCdhdXRvRml4UGFnZSgpOyBhdXRvUHJvY2VlZCgpOycsIHRpbWVWYWwpOwogICAgfQp9KTsKd2luZG93LnNldEludGVydmFsKCdjaGVja0FkYmxvY2tVc2VyID0gY2hlY2tBZHNieXBhc3NlclVzZXIgPSBjaGVja1ByaXZhdGVNb2RlID0gbnVsbDsnLCB0aW1lVmFsKTs=","requires":[{"meta":{"name":"jquery-3.3.1.min.js","url":"http://code.jquery.com/jquery-3.3.1.min.js","ts":1566068227859,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2My4zLjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPVtdLHI9ZS5kb2N1bWVudCxpPU9iamVjdC5nZXRQcm90b3R5cGVPZixvPW4uc2xpY2UsYT1uLmNvbmNhdCxzPW4ucHVzaCx1PW4uaW5kZXhPZixsPXt9LGM9bC50b1N0cmluZyxmPWwuaGFzT3duUHJvcGVydHkscD1mLnRvU3RyaW5nLGQ9cC5jYWxsKE9iamVjdCksaD17fSxnPWZ1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdC5ub2RlVHlwZX0seT1mdW5jdGlvbiBlKHQpe3JldHVybiBudWxsIT10JiZ0PT09dC53aW5kb3d9LHY9e3R5cGU6ITAsc3JjOiEwLG5vTW9kdWxlOiEwfTtmdW5jdGlvbiBtKGUsdCxuKXt2YXIgaSxvPSh0PXR8fHIpLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKG8udGV4dD1lLG4pZm9yKGkgaW4gdiluW2ldJiYob1tpXT1uW2ldKTt0LmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB4KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9sW2MuY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBiPSIzLjMuMSIsdz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdy5mbi5pbml0KGUsdCl9LFQ9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nO3cuZm49dy5wcm90b3R5cGU9e2pxdWVyeToiMy4zLjEiLGNvbnN0cnVjdG9yOncsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBvLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9vLmNhbGwodGhpcyk6ZTwwP3RoaXNbZSt0aGlzLmxlbmd0aF06dGhpc1tlXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGUpe3ZhciB0PXcubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGUpO3JldHVybiB0LnByZXZPYmplY3Q9dGhpcyx0fSxlYWNoOmZ1bmN0aW9uKGUpe3JldHVybiB3LmVhY2godGhpcyxlKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh3Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6cyxzb3J0Om4uc29ydCxzcGxpY2U6bi5zcGxpY2V9LHcuZXh0ZW5kPXcuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksIm9iamVjdCI9PXR5cGVvZiBhfHxnKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSluPWFbdF0sYSE9PShyPWVbdF0pJiYobCYmciYmKHcuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmQXJyYXkuaXNBcnJheShuKT9uOltdKTpvPW4mJncuaXNQbGFpbk9iamVjdChuKT9uOnt9LGFbdF09dy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LHcuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKygiMy4zLjEiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1jLmNhbGwoZSkpJiYoISh0PWkoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj1mLmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJnAuY2FsbChuKT09PWQpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSl7bShlKX0sZWFjaDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtpZihDKGUpKXtmb3Iobj1lLmxlbmd0aDtyPG47cisrKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVha31lbHNlIGZvcihyIGluIGUpaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKFQsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKEMoT2JqZWN0KGUpKT93Lm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTpzLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6dS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGgscz0hbjtvPGE7bysrKShyPSF0KGVbb10sbykpIT09cyYmaS5wdXNoKGVbb10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLHM9W107aWYoQyhlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmcy5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJnMucHVzaChpKTtyZXR1cm4gYS5hcHBseShbXSxzKX0sZ3VpZDoxLHN1cHBvcnQ6aH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih3LmZuW1N5bWJvbC5pdGVyYXRvcl09bltTeW1ib2wuaXRlcmF0b3JdKSx3LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7bFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBDKGUpe3ZhciB0PSEhZSYmImxlbmd0aCJpbiBlJiZlLmxlbmd0aCxuPXgoZSk7cmV0dXJuIWcoZSkmJiF5KGUpJiYoImFycmF5Ij09PW58fDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfXZhciBFPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLHUsbCxjLGYscCxkLGgsZyx5LHYsbSx4LGI9InNpenpsZSIrMSpuZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxFPWFlKCksaz1hZSgpLFM9YWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoZj0hMCksMH0sTj17fS5oYXNPd25Qcm9wZXJ0eSxBPVtdLGo9QS5wb3AscT1BLnB1c2gsTD1BLnB1c2gsSD1BLnNsaWNlLE89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFA9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixSPSIoPzpcXFxcLnxbXFx3LV18W15cMC1cXHhhMF0pKyIsST0iXFxbIitNKyIqKCIrUisiKSg/OiIrTSsiKihbKl4kfCF+XT89KSIrTSsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK1IrIikpfCkiK00rIipcXF0iLFc9IjooIitSKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitJKyIpKil8LiopXFwpfCkiLCQ9bmV3IFJlZ0V4cChNKyIrIiwiZyIpLEI9bmV3IFJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxGPW5ldyBSZWdFeHAoIl4iK00rIiosIitNKyIqIiksXz1uZXcgUmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLHo9bmV3IFJlZ0V4cCgiPSIrTSsiKihbXlxcXSdcIl0qPykiK00rIipcXF0iLCJnIiksWD1uZXcgUmVnRXhwKFcpLFU9bmV3IFJlZ0V4cCgiXiIrUisiJCIpLFY9e0lEOm5ldyBSZWdFeHAoIl4jKCIrUisiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitSKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitSKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrSSksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1cpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1ArIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LEc9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxZPS9eaFxkJC9pLFE9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLEo9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxLPS9bK35dLyxaPW5ldyBSZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrTSsiP3woIitNKyIpfC4pIiwiaWciKSxlZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0sdGU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxyZT1mdW5jdGlvbigpe3AoKX0saWU9bWUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYoImZvcm0iaW4gZXx8ImxhYmVsImluIGUpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0wuYXBwbHkoQT1ILmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEFbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7TD17YXBwbHk6QS5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtxLmFwcGx5KGUsSC5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb2UoZSx0LHIsaSl7dmFyIG8scyxsLGMsZixoLHYsbT10JiZ0Lm93bmVyRG9jdW1lbnQsVD10P3Qubm9kZVR5cGU6OTtpZihyPXJ8fFtdLCJzdHJpbmciIT10eXBlb2YgZXx8IWV8fDEhPT1UJiY5IT09VCYmMTEhPT1UKXJldHVybiByO2lmKCFpJiYoKHQ/dC5vd25lckRvY3VtZW50fHx0OncpIT09ZCYmcCh0KSx0PXR8fGQsZykpe2lmKDExIT09VCYmKGY9Si5leGVjKGUpKSlpZihvPWZbMV0pe2lmKDk9PT1UKXtpZighKGw9dC5nZXRFbGVtZW50QnlJZChvKSkpcmV0dXJuIHI7aWYobC5pZD09PW8pcmV0dXJuIHIucHVzaChsKSxyfWVsc2UgaWYobSYmKGw9bS5nZXRFbGVtZW50QnlJZChvKSkmJngodCxsKSYmbC5pZD09PW8pcmV0dXJuIHIucHVzaChsKSxyfWVsc2V7aWYoZlsyXSlyZXR1cm4gTC5hcHBseShyLHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLHI7aWYoKG89ZlszXSkmJm4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBMLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG8pKSxyfWlmKG4ucXNhJiYhU1tlKyIgIl0mJigheXx8IXkudGVzdChlKSkpe2lmKDEhPT1UKW09dCx2PWU7ZWxzZSBpZigib2JqZWN0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7KGM9dC5nZXRBdHRyaWJ1dGUoImlkIikpP2M9Yy5yZXBsYWNlKHRlLG5lKTp0LnNldEF0dHJpYnV0ZSgiaWQiLGM9Yikscz0oaD1hKGUpKS5sZW5ndGg7d2hpbGUocy0tKWhbc109IiMiK2MrIiAiK3ZlKGhbc10pO3Y9aC5qb2luKCIsIiksbT1LLnRlc3QoZSkmJmdlKHQucGFyZW50Tm9kZSl8fHR9aWYodil0cnl7cmV0dXJuIEwuYXBwbHkocixtLnF1ZXJ5U2VsZWN0b3JBbGwodikpLHJ9Y2F0Y2goZSl7fWZpbmFsbHl7Yz09PWImJnQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIHUoZS5yZXBsYWNlKEIsIiQxIiksdCxyLGkpfWZ1bmN0aW9uIGFlKCl7dmFyIGU9W107ZnVuY3Rpb24gdChuLGkpe3JldHVybiBlLnB1c2gobisiICIpPnIuY2FjaGVMZW5ndGgmJmRlbGV0ZSB0W2Uuc2hpZnQoKV0sdFtuKyIgIl09aX1yZXR1cm4gdH1mdW5jdGlvbiBzZShlKXtyZXR1cm4gZVtiXT0hMCxlfWZ1bmN0aW9uIHVlKGUpe3ZhciB0PWQuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBsZShlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxpPW4ubGVuZ3RoO3doaWxlKGktLSlyLmF0dHJIYW5kbGVbbltpXV09dH1mdW5jdGlvbiBjZShlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQudHlwZT09PWV9fWZ1bmN0aW9uIHBlKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBkZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImZvcm0iaW4gdD90LnBhcmVudE5vZGUmJiExPT09dC5kaXNhYmxlZD8ibGFiZWwiaW4gdD8ibGFiZWwiaW4gdC5wYXJlbnROb2RlP3QucGFyZW50Tm9kZS5kaXNhYmxlZD09PWU6dC5kaXNhYmxlZD09PWU6dC5pc0Rpc2FibGVkPT09ZXx8dC5pc0Rpc2FibGVkIT09IWUmJmllKHQpPT09ZTp0LmRpc2FibGVkPT09ZToibGFiZWwiaW4gdCYmdC5kaXNhYmxlZD09PWV9fWZ1bmN0aW9uIGhlKGUpe3JldHVybiBzZShmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxzZShmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIGdlKGUpe3JldHVybiBlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9bj1vZS5zdXBwb3J0PXt9LG89b2UuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiEhdCYmIkhUTUwiIT09dC5ub2RlTmFtZX0scD1vZS5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdCxpLGE9ZT9lLm93bmVyRG9jdW1lbnR8fGU6dztyZXR1cm4gYSE9PWQmJjk9PT1hLm5vZGVUeXBlJiZhLmRvY3VtZW50RWxlbWVudD8oZD1hLGg9ZC5kb2N1bWVudEVsZW1lbnQsZz0hbyhkKSx3IT09ZCYmKGk9ZC5kZWZhdWx0VmlldykmJmkudG9wIT09aSYmKGkuYWRkRXZlbnRMaXN0ZW5lcj9pLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIscmUsITEpOmkuYXR0YWNoRXZlbnQmJmkuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixyZSkpLG4uYXR0cmlidXRlcz11ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKGQuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVEudGVzdChkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLG4uZ2V0QnlJZD11ZShmdW5jdGlvbihlKXtyZXR1cm4gaC5hcHBlbmRDaGlsZChlKS5pZD1iLCFkLmdldEVsZW1lbnRzQnlOYW1lfHwhZC5nZXRFbGVtZW50c0J5TmFtZShiKS5sZW5ndGh9KSxuLmdldEJ5SWQ/KHIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShaLGVlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19LHIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmZyl7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gbj9bbl06W119fSk6KHIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShaLGVlKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSxyLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJmcpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLHIuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOm4ucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LHIuZmluZC5DTEFTUz1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmcpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sdj1bXSx5PVtdLChuLnFzYT1RLnRlc3QoZC5xdWVyeVNlbGVjdG9yQWxsKSkmJih1ZShmdW5jdGlvbihlKXtoLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrYisiJz48L2E+PHNlbGVjdCBpZD0nIitiKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnkucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHkucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitQKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrYisiLV0iKS5sZW5ndGh8fHkucHVzaCgifj0iKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHx5LnB1c2goIjpjaGVja2VkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrYisiKyoiKS5sZW5ndGh8fHkucHVzaCgiLiMuK1srfl0iKX0pLHVlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnkucHVzaCgibmFtZSIrTSsiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmeS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGguYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ5LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikseS5wdXNoKCIsLio6Iil9KSksKG4ubWF0Y2hlc1NlbGVjdG9yPVEudGVzdChtPWgubWF0Y2hlc3x8aC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGgubW96TWF0Y2hlc1NlbGVjdG9yfHxoLm9NYXRjaGVzU2VsZWN0b3J8fGgubXNNYXRjaGVzU2VsZWN0b3IpKSYmdWUoZnVuY3Rpb24oZSl7bi5kaXNjb25uZWN0ZWRNYXRjaD1tLmNhbGwoZSwiKiIpLG0uY2FsbChlLCJbcyE9JyddOngiKSx2LnB1c2goIiE9IixXKX0pLHk9eS5sZW5ndGgmJm5ldyBSZWdFeHAoeS5qb2luKCJ8IikpLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKCJ8IikpLHQ9US50ZXN0KGguY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHg9dHx8US50ZXN0KGguY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sRD10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGY9ITAsMDt2YXIgcj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gcnx8KDEmKHI9KGUub3duZXJEb2N1bWVudHx8ZSk9PT0odC5vd25lckRvY3VtZW50fHx0KT9lLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpOjEpfHwhbi5zb3J0RGV0YWNoZWQmJnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSk9PT1yP2U9PT1kfHxlLm93bmVyRG9jdW1lbnQ9PT13JiZ4KHcsZSk/LTE6dD09PWR8fHQub3duZXJEb2N1bWVudD09PXcmJngodyx0KT8xOmM/TyhjLGUpLU8oYyx0KTowOjQmcj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZj0hMCwwO3ZhciBuLHI9MCxpPWUucGFyZW50Tm9kZSxvPXQucGFyZW50Tm9kZSxhPVtlXSxzPVt0XTtpZighaXx8IW8pcmV0dXJuIGU9PT1kPy0xOnQ9PT1kPzE6aT8tMTpvPzE6Yz9PKGMsZSktTyhjLHQpOjA7aWYoaT09PW8pcmV0dXJuIGNlKGUsdCk7bj1lO3doaWxlKG49bi5wYXJlbnROb2RlKWEudW5zaGlmdChuKTtuPXQ7d2hpbGUobj1uLnBhcmVudE5vZGUpcy51bnNoaWZ0KG4pO3doaWxlKGFbcl09PT1zW3JdKXIrKztyZXR1cm4gcj9jZShhW3JdLHNbcl0pOmFbcl09PT13Py0xOnNbcl09PT13PzE6MH0sZCk6ZH0sb2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBvZShlLG51bGwsbnVsbCx0KX0sb2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpLHQ9dC5yZXBsYWNlKHosIj0nJDEnXSIpLG4ubWF0Y2hlc1NlbGVjdG9yJiZnJiYhU1t0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigheXx8IXkudGVzdCh0KSkpdHJ5e3ZhciByPW0uY2FsbChlLHQpO2lmKHJ8fG4uZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gcn1jYXRjaChlKXt9cmV0dXJuIG9lKHQsZCxudWxsLFtlXSkubGVuZ3RoPjB9LG9lLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpLHgoZSx0KX0sb2UuYXR0cj1mdW5jdGlvbihlLHQpeyhlLm93bmVyRG9jdW1lbnR8fGUpIT09ZCYmcChlKTt2YXIgaT1yLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxvPWkmJk4uY2FsbChyLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9pKGUsdCwhZyk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1vP286bi5hdHRyaWJ1dGVzfHwhZz9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNwZWNpZmllZD9vLnZhbHVlOm51bGx9LG9lLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZSh0ZSxuZSl9LG9lLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sb2UudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxyPVtdLGk9MCxvPTA7aWYoZj0hbi5kZXRlY3REdXBsaWNhdGVzLGM9IW4uc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoRCksZil7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPXIucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKHJbaV0sMSl9cmV0dXJuIGM9bnVsbCxlfSxpPW9lLmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsbz1lLm5vZGVUeXBlO2lmKG8pe2lmKDE9PT1vfHw5PT09b3x8MTE9PT1vKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPWkoZSl9ZWxzZSBpZigzPT09b3x8ND09PW8pcmV0dXJuIGUubm9kZVZhbHVlfWVsc2Ugd2hpbGUodD1lW3IrK10pbis9aSh0KTtyZXR1cm4gbn0sKHI9b2Uuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86c2UsbWF0Y2g6VixhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKFosZWUpLGVbM109KGVbM118fGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKFosZWUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxvZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZvZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gVi5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWEobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFosZWUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUVbZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2UrIigiK00rInwkKSIpKSYmRShlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoInN0cmluZyI9PXR5cGVvZiBlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPW9lLmF0dHIocixlKTtyZXR1cm4gbnVsbD09aT8iIT0iPT09dDohdHx8KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2kucmVwbGFjZSgkLCIgIikrIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10JiYoaT09PW58fGkuc2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iKSl9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLGE9Imxhc3QiIT09ZS5zbGljZSgtNCkscz0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLGYscCxkLGgsZz1vIT09YT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHk9dC5wYXJlbnROb2RlLHY9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG09IXUmJiFzLHg9ITE7aWYoeSl7aWYobyl7d2hpbGUoZyl7cD10O3doaWxlKHA9cFtnXSlpZihzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXY6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7aD1nPSJvbmx5Ij09PWUmJiFoJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGg9W2E/eS5maXJzdENoaWxkOnkubGFzdENoaWxkXSxhJiZtKXt4PShkPShsPShjPShmPShwPXkpW2JdfHwocFtiXT17fSkpW3AudW5pcXVlSURdfHwoZltwLnVuaXF1ZUlEXT17fSkpW2VdfHxbXSlbMF09PT1UJiZsWzFdKSYmbFsyXSxwPWQmJnkuY2hpbGROb2Rlc1tkXTt3aGlsZShwPSsrZCYmcCYmcFtnXXx8KHg9ZD0wKXx8aC5wb3AoKSlpZigxPT09cC5ub2RlVHlwZSYmKyt4JiZwPT09dCl7Y1tlXT1bVCxkLHhdO2JyZWFrfX1lbHNlIGlmKG0mJih4PWQ9KGw9KGM9KGY9KHA9dClbYl18fChwW2JdPXt9KSlbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSlbZV18fFtdKVswXT09PVQmJmxbMV0pLCExPT09eCl3aGlsZShwPSsrZCYmcCYmcFtnXXx8KHg9ZD0wKXx8aC5wb3AoKSlpZigocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT12OjE9PT1wLm5vZGVUeXBlKSYmKyt4JiYobSYmKChjPShmPXBbYl18fChwW2JdPXt9KSlbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSlbZV09W1QseF0pLHA9PT10KSlicmVhaztyZXR1cm4oeC09aSk9PT1yfHx4JXI9PTAmJngvcj49MH19fSxQU0VVRE86ZnVuY3Rpb24oZSx0KXt2YXIgbixpPXIucHNldWRvc1tlXXx8ci5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIGlbYl0/aSh0KTppLmxlbmd0aD4xPyhuPVtlLGUsIiIsdF0sci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/c2UoZnVuY3Rpb24oZSxuKXt2YXIgcixvPWkoZSx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSllW3I9TyhlLG9bYV0pXT0hKG5bcl09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gaShlLDAsbil9KTppfX0scHNldWRvczp7bm90OnNlKGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1zKGUucmVwbGFjZShCLCIkMSIpKTtyZXR1cm4gcltiXT9zZShmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhPXIoZSxudWxsLGksW10pLHM9ZS5sZW5ndGg7d2hpbGUocy0tKShvPWFbc10pJiYoZVtzXT0hKHRbc109bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSx0WzBdPW51bGwsIW4ucG9wKCl9fSksaGFzOnNlKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gb2UoZSx0KS5sZW5ndGg+MH19KSxjb250YWluczpzZShmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoWixlZSksZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQuaW5uZXJUZXh0fHxpKHQpKS5pbmRleE9mKGUpPi0xfX0pLGxhbmc6c2UoZnVuY3Rpb24oZSl7cmV0dXJuIFUudGVzdChlfHwiIil8fG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2UpLGU9ZS5yZXBsYWNlKFosZWUpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG97aWYobj1nP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4obj1uLnRvTG93ZXJDYXNlKCkpPT09ZXx8MD09PW4uaW5kZXhPZihlKyItIil9d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09aH0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kLmFjdGl2ZUVsZW1lbnQmJighZC5oYXNGb2N1c3x8ZC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpkZSghMSksZGlzYWJsZWQ6ZGUoITApLGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYhIWUuY2hlY2tlZHx8Im9wdGlvbiI9PT10JiYhIWUuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LCEwPT09ZS5zZWxlY3RlZH0sZW1wdHk6ZnVuY3Rpb24oZSl7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWlmKGUubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFyLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gWS50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGUubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYiYnV0dG9uIj09PWUudHlwZXx8ImJ1dHRvbiI9PT10fSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHwidGV4dCI9PT10LnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpoZShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aGUoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmhlKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24rdDpuXX0pLGV2ZW46aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpoZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0OmhlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19KS5wc2V1ZG9zLm50aD1yLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pci5wc2V1ZG9zW3RdPWZlKHQpO2Zvcih0IGlue3N1Ym1pdDohMCxyZXNldDohMH0pci5wc2V1ZG9zW3RdPXBlKHQpO2Z1bmN0aW9uIHllKCl7fXllLnByb3RvdHlwZT1yLmZpbHRlcnM9ci5wc2V1ZG9zLHIuc2V0RmlsdGVycz1uZXcgeWUsYT1vZS50b2tlbml6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLGksbyxhLHMsdSxsLGM9a1tlKyIgIl07aWYoYylyZXR1cm4gdD8wOmMuc2xpY2UoMCk7cz1lLHU9W10sbD1yLnByZUZpbHRlcjt3aGlsZShzKXtuJiYhKGk9Ri5leGVjKHMpKXx8KGkmJihzPXMuc2xpY2UoaVswXS5sZW5ndGgpfHxzKSx1LnB1c2gobz1bXSkpLG49ITEsKGk9Xy5leGVjKHMpKSYmKG49aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOmlbMF0ucmVwbGFjZShCLCIgIil9KSxzPXMuc2xpY2Uobi5sZW5ndGgpKTtmb3IoYSBpbiByLmZpbHRlcikhKGk9VlthXS5leGVjKHMpKXx8bFthXSYmIShpPWxbYV0oaSkpfHwobj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6YSxtYXRjaGVzOml9KSxzPXMuc2xpY2Uobi5sZW5ndGgpKTtpZighbilicmVha31yZXR1cm4gdD9zLmxlbmd0aDpzP29lLmVycm9yKGUpOmsoZSx1KS5zbGljZSgwKX07ZnVuY3Rpb24gdmUoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBtZShlLHQsbil7dmFyIHI9dC5kaXIsaT10Lm5leHQsbz1pfHxyLGE9biYmInBhcmVudE5vZGUiPT09byxzPUMrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4saSl7d2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxhKXJldHVybiBlKHQsbixpKTtyZXR1cm4hMX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMsZixwPVtULHNdO2lmKHUpe3doaWxlKHQ9dFtyXSlpZigoMT09PXQubm9kZVR5cGV8fGEpJiZlKHQsbix1KSlyZXR1cm4hMH1lbHNlIHdoaWxlKHQ9dFtyXSlpZigxPT09dC5ub2RlVHlwZXx8YSlpZihmPXRbYl18fCh0W2JdPXt9KSxjPWZbdC51bmlxdWVJRF18fChmW3QudW5pcXVlSURdPXt9KSxpJiZpPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXQ9dFtyXXx8dDtlbHNle2lmKChsPWNbb10pJiZsWzBdPT09VCYmbFsxXT09PXMpcmV0dXJuIHBbMl09bFsyXTtpZihjW29dPXAscFsyXT1lKHQsbix1KSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24geGUoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGktLSlpZighZVtpXSh0LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24gYmUoZSx0LG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKylvZShlLHRbcl0sbik7cmV0dXJuIG59ZnVuY3Rpb24gd2UoZSx0LG4scixpKXtmb3IodmFyIG8sYT1bXSxzPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7czx1O3MrKykobz1lW3NdKSYmKG4mJiFuKG8scixpKXx8KGEucHVzaChvKSxsJiZ0LnB1c2gocykpKTtyZXR1cm4gYX1mdW5jdGlvbiBUZShlLHQsbixyLGksbyl7cmV0dXJuIHImJiFyW2JdJiYocj1UZShyKSksaSYmIWlbYl0mJihpPVRlKGksbykpLHNlKGZ1bmN0aW9uKG8sYSxzLHUpe3ZhciBsLGMsZixwPVtdLGQ9W10saD1hLmxlbmd0aCxnPW98fGJlKHR8fCIqIixzLm5vZGVUeXBlP1tzXTpzLFtdKSx5PSFlfHwhbyYmdD9nOndlKGcscCxlLHMsdSksdj1uP2l8fChvP2U6aHx8cik/W106YTp5O2lmKG4mJm4oeSx2LHMsdSkscil7bD13ZSh2LGQpLHIobCxbXSxzLHUpLGM9bC5sZW5ndGg7d2hpbGUoYy0tKShmPWxbY10pJiYodltkW2NdXT0hKHlbZFtjXV09ZikpfWlmKG8pe2lmKGl8fGUpe2lmKGkpe2w9W10sYz12Lmxlbmd0aDt3aGlsZShjLS0pKGY9dltjXSkmJmwucHVzaCh5W2NdPWYpO2kobnVsbCx2PVtdLGwsdSl9Yz12Lmxlbmd0aDt3aGlsZShjLS0pKGY9dltjXSkmJihsPWk/TyhvLGYpOnBbY10pPi0xJiYob1tsXT0hKGFbbF09ZikpfX1lbHNlIHY9d2Uodj09PWE/di5zcGxpY2UoaCx2Lmxlbmd0aCk6diksaT9pKG51bGwsYSx2LHUpOkwuYXBwbHkoYSx2KX0pfWZ1bmN0aW9uIENlKGUpe2Zvcih2YXIgdCxuLGksbz1lLmxlbmd0aCxhPXIucmVsYXRpdmVbZVswXS50eXBlXSxzPWF8fHIucmVsYXRpdmVbIiAiXSx1PWE/MTowLGM9bWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxmPW1lKGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSk+LTF9LHMsITApLHA9W2Z1bmN0aW9uKGUsbixyKXt2YXIgaT0hYSYmKHJ8fG4hPT1sKXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOmYoZSxuLHIpKTtyZXR1cm4gdD1udWxsLGl9XTt1PG87dSsrKWlmKG49ci5yZWxhdGl2ZVtlW3VdLnR5cGVdKXA9W21lKHhlKHApLG4pXTtlbHNle2lmKChuPXIuZmlsdGVyW2VbdV0udHlwZV0uYXBwbHkobnVsbCxlW3VdLm1hdGNoZXMpKVtiXSl7Zm9yKGk9Kyt1O2k8bztpKyspaWYoci5yZWxhdGl2ZVtlW2ldLnR5cGVdKWJyZWFrO3JldHVybiBUZSh1PjEmJnhlKHApLHU+MSYmdmUoZS5zbGljZSgwLHUtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW3UtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShCLCIkMSIpLG4sdTxpJiZDZShlLnNsaWNlKHUsaSkpLGk8byYmQ2UoZT1lLnNsaWNlKGkpKSxpPG8mJnZlKGUpKX1wLnB1c2gobil9cmV0dXJuIHhlKHApfWZ1bmN0aW9uIEVlKGUsdCl7dmFyIG49dC5sZW5ndGg+MCxpPWUubGVuZ3RoPjAsbz1mdW5jdGlvbihvLGEscyx1LGMpe3ZhciBmLGgseSx2PTAsbT0iMCIseD1vJiZbXSxiPVtdLHc9bCxDPW98fGkmJnIuZmluZC5UQUcoIioiLGMpLEU9VCs9bnVsbD09dz8xOk1hdGgucmFuZG9tKCl8fC4xLGs9Qy5sZW5ndGg7Zm9yKGMmJihsPWE9PT1kfHxhfHxjKTttIT09ayYmbnVsbCE9KGY9Q1ttXSk7bSsrKXtpZihpJiZmKXtoPTAsYXx8Zi5vd25lckRvY3VtZW50PT09ZHx8KHAoZikscz0hZyk7d2hpbGUoeT1lW2grK10paWYoeShmLGF8fGQscykpe3UucHVzaChmKTticmVha31jJiYoVD1FKX1uJiYoKGY9IXkmJmYpJiZ2LS0sbyYmeC5wdXNoKGYpKX1pZih2Kz1tLG4mJm0hPT12KXtoPTA7d2hpbGUoeT10W2grK10peSh4LGIsYSxzKTtpZihvKXtpZih2PjApd2hpbGUobS0tKXhbbV18fGJbbV18fChiW21dPWouY2FsbCh1KSk7Yj13ZShiKX1MLmFwcGx5KHUsYiksYyYmIW8mJmIubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb2UudW5pcXVlU29ydCh1KX1yZXR1cm4gYyYmKFQ9RSxsPXcpLHh9O3JldHVybiBuP3NlKG8pOm99cmV0dXJuIHM9b2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPVNbZSsiICJdO2lmKCFvKXt0fHwodD1hKGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSkobz1DZSh0W25dKSlbYl0/ci5wdXNoKG8pOmkucHVzaChvKTsobz1TKGUsRWUoaSxyKSkpLnNlbGVjdG9yPWV9cmV0dXJuIG99LHU9b2Uuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLHUsbCxjLGYscD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxkPSFpJiZhKGU9cC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09ZC5sZW5ndGgpe2lmKCh1PWRbMF09ZFswXS5zbGljZSgwKSkubGVuZ3RoPjImJiJJRCI9PT0obD11WzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmZyYmci5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZighKHQ9KHIuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShaLGVlKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtwJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZSh1LnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1vPVYubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3aGlsZShvLS0pe2lmKGw9dVtvXSxyLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigoZj1yLmZpbmRbY10pJiYoaT1mKGwubWF0Y2hlc1swXS5yZXBsYWNlKFosZWUpLEsudGVzdCh1WzBdLnR5cGUpJiZnZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKHUuc3BsaWNlKG8sMSksIShlPWkubGVuZ3RoJiZ2ZSh1KSkpcmV0dXJuIEwuYXBwbHkobixpKSxuO2JyZWFrfX19cmV0dXJuKHB8fHMoZSxkKSkoaSx0LCFnLG4sIXR8fEsudGVzdChlKSYmZ2UodC5wYXJlbnROb2RlKXx8dCksbn0sbi5zb3J0U3RhYmxlPWIuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1iLG4uZGV0ZWN0RHVwbGljYXRlcz0hIWYscCgpLG4uc29ydERldGFjaGVkPXVlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGxlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxuLmF0dHJpYnV0ZXMmJnVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGxlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxsZShQLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLG9lfShlKTt3LmZpbmQ9RSx3LmV4cHI9RS5zZWxlY3RvcnMsdy5leHByWyI6Il09dy5leHByLnBzZXVkb3Msdy51bmlxdWVTb3J0PXcudW5pcXVlPUUudW5pcXVlU29ydCx3LnRleHQ9RS5nZXRUZXh0LHcuaXNYTUxEb2M9RS5pc1hNTCx3LmNvbnRhaW5zPUUuY29udGFpbnMsdy5lc2NhcGVTZWxlY3Rvcj1FLmVzY2FwZTt2YXIgaz1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmdyhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LEQ9dy5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBOKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgQT0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBqKGUsdCxuKXtyZXR1cm4gZyh0KT93LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiEhdC5jYWxsKGUscixlKSE9PW59KTp0Lm5vZGVUeXBlP3cuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KToic3RyaW5nIiE9dHlwZW9mIHQ/dy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHUuY2FsbCh0LGUpPi0xIT09bn0pOncuZmlsdGVyKHQsZSxuKX13LmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT93LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOncuZmluZC5tYXRjaGVzKGUsdy5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSx3LmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYody5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKyl3LmZpbmQoZSxpW3RdLG4pO3JldHVybiByPjE/dy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmRC50ZXN0KGUpP3coZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgcSxMPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KHcuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZihuPW58fHEsInN0cmluZyI9PXR5cGVvZiBlKXtpZighKGk9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpMLmV4ZWMoZSkpfHwhaVsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKGlbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIHc/dFswXTp0LHcubWVyZ2UodGhpcyx3LnBhcnNlSFRNTChpWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OnIsITApKSxBLnRlc3QoaVsxXSkmJncuaXNQbGFpbk9iamVjdCh0KSlmb3IoaSBpbiB0KWcodGhpc1tpXSk/dGhpc1tpXSh0W2ldKTp0aGlzLmF0dHIoaSx0W2ldKTtyZXR1cm4gdGhpc31yZXR1cm4obz1yLmdldEVsZW1lbnRCeUlkKGlbMl0pKSYmKHRoaXNbMF09byx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTpnKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKHcpOncubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9dy5mbixxPXcocik7dmFyIEg9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sTz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTt3LmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXcoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYody5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZ3KGUpO2lmKCFELnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/YS5pbmRleChuKT4tMToxPT09bi5ub2RlVHlwZSYmdy5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP3cudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP3UuY2FsbCh3KGUpLHRoaXNbMF0pOnUuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sody51bmlxdWVTb3J0KHcubWVyZ2UodGhpcy5nZXQoKSx3KGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pO2Z1bmN0aW9uIFAoZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfXcuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gayhlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFAoZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gUChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gayhlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBrKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBrKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gUygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIE4oZSwiaWZyYW1lIik/ZS5jb250ZW50RG9jdW1lbnQ6KE4oZSwidGVtcGxhdGUiKSYmKGU9ZS5jb250ZW50fHxlKSx3Lm1lcmdlKFtdLGUuY2hpbGROb2RlcykpfX0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9dy5tYXAodGhpcyx0LG4pO3JldHVybiJVbnRpbCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmInN0cmluZyI9PXR5cGVvZiByJiYoaT13LmZpbHRlcihyLGkpKSx0aGlzLmxlbmd0aD4xJiYoT1tlXXx8dy51bmlxdWVTb3J0KGkpLEgudGVzdChlKSYmaS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGkpfX0pO3ZhciBNPS9bXlx4MjBcdFxyXG5cZl0rL2c7ZnVuY3Rpb24gUihlKXt2YXIgdD17fTtyZXR1cm4gdy5lYWNoKGUubWF0Y2goTSl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9dy5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/UihlKTp3LmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsaSxvPVtdLGE9W10scz0tMSx1PWZ1bmN0aW9uKCl7Zm9yKGk9aXx8ZS5vbmNlLHI9dD0hMDthLmxlbmd0aDtzPS0xKXtuPWEuc2hpZnQoKTt3aGlsZSgrK3M8by5sZW5ndGgpITE9PT1vW3NdLmFwcGx5KG5bMF0sblsxXSkmJmUuc3RvcE9uRmFsc2UmJihzPW8ubGVuZ3RoLG49ITEpfWUubWVtb3J5fHwobj0hMSksdD0hMSxpJiYobz1uP1tdOiIiKX0sbD17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihuJiYhdCYmKHM9by5sZW5ndGgtMSxhLnB1c2gobikpLGZ1bmN0aW9uIHQobil7dy5lYWNoKG4sZnVuY3Rpb24obixyKXtnKHIpP2UudW5pcXVlJiZsLmhhcyhyKXx8by5wdXNoKHIpOnImJnIubGVuZ3RoJiYic3RyaW5nIiE9PXgocikmJnQocil9KX0oYXJndW1lbnRzKSxuJiYhdCYmdSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXcuaW5BcnJheSh0LG8sbikpPi0xKW8uc3BsaWNlKG4sMSksbjw9cyYmcy0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3cuaW5BcnJheShlLG8pPi0xOm8ubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihvPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxvPW49IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hb30sbG9jazpmdW5jdGlvbigpe3JldHVybiBpPWE9W10sbnx8dHx8KG89bj0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFpfSxmaXJlV2l0aDpmdW5jdGlvbihlLG4pe3JldHVybiBpfHwobj1bZSwobj1ufHxbXSkuc2xpY2U/bi5zbGljZSgpOm5dLGEucHVzaChuKSx0fHx1KCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gbC5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXJ9fTtyZXR1cm4gbH07ZnVuY3Rpb24gSShlKXtyZXR1cm4gZX1mdW5jdGlvbiBXKGUpe3Rocm93IGV9ZnVuY3Rpb24gJChlLHQsbixyKXt2YXIgaTt0cnl7ZSYmZyhpPWUucHJvbWlzZSk/aS5jYWxsKGUpLmRvbmUodCkuZmFpbChuKTplJiZnKGk9ZS50aGVuKT9pLmNhbGwoZSx0LG4pOnQuYXBwbHkodm9pZCAwLFtlXS5zbGljZShyKSl9Y2F0Y2goZSl7bi5hcHBseSh2b2lkIDAsW2VdKX19dy5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKHQpe3ZhciBuPVtbIm5vdGlmeSIsInByb2dyZXNzIix3LkNhbGxiYWNrcygibWVtb3J5Iiksdy5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLHcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLHcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxyPSJwZW5kaW5nIixpPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiByfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gby5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGkudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uKHQpe3cuZWFjaChuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZyhlW3JbNF1dKSYmZVtyWzRdXTtvW3JbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmZyhlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCk6dFtyWzBdKyJXaXRoIl0odGhpcyxpP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxyLGkpe3ZhciBvPTA7ZnVuY3Rpb24gYSh0LG4scixpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLHU9YXJndW1lbnRzLGw9ZnVuY3Rpb24oKXt2YXIgZSxsO2lmKCEodDxvKSl7aWYoKGU9ci5hcHBseShzLHUpKT09PW4ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO2w9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sZyhsKT9pP2wuY2FsbChlLGEobyxuLEksaSksYShvLG4sVyxpKSk6KG8rKyxsLmNhbGwoZSxhKG8sbixJLGkpLGEobyxuLFcsaSksYShvLG4sSSxuLm5vdGlmeVdpdGgpKSk6KHIhPT1JJiYocz12b2lkIDAsdT1bZV0pLChpfHxuLnJlc29sdmVXaXRoKShzLHUpKX19LGM9aT9sOmZ1bmN0aW9uKCl7dHJ5e2woKX1jYXRjaChlKXt3LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJncuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLGMuc3RhY2tUcmFjZSksdCsxPj1vJiYociE9PVcmJihzPXZvaWQgMCx1PVtlXSksbi5yZWplY3RXaXRoKHMsdSkpfX07dD9jKCk6KHcuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYoYy5zdGFja1RyYWNlPXcuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLGUuc2V0VGltZW91dChjKSl9fXJldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uKGUpe25bMF1bM10uYWRkKGEoMCxlLGcoaSk/aTpJLGUubm90aWZ5V2l0aCkpLG5bMV1bM10uYWRkKGEoMCxlLGcodCk/dDpJKSksblsyXVszXS5hZGQoYSgwLGUsZyhyKT9yOlcpKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT93LmV4dGVuZChlLGkpOml9fSxvPXt9O3JldHVybiB3LmVhY2gobixmdW5jdGlvbihlLHQpe3ZhciBhPXRbMl0scz10WzVdO2lbdFsxXV09YS5hZGQscyYmYS5hZGQoZnVuY3Rpb24oKXtyPXN9LG5bMy1lXVsyXS5kaXNhYmxlLG5bMy1lXVszXS5kaXNhYmxlLG5bMF1bMl0ubG9jayxuWzBdWzNdLmxvY2spLGEuYWRkKHRbM10uZmlyZSksb1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBvW3RbMF0rIldpdGgiXSh0aGlzPT09bz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LG9bdFswXSsiV2l0aCJdPWEuZmlyZVdpdGh9KSxpLnByb21pc2UobyksdCYmdC5jYWxsKG8sbyksb30sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49dCxyPUFycmF5KG4pLGk9by5jYWxsKGFyZ3VtZW50cyksYT13LkRlZmVycmVkKCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cltlXT10aGlzLGlbZV09YXJndW1lbnRzLmxlbmd0aD4xP28uY2FsbChhcmd1bWVudHMpOm4sLS10fHxhLnJlc29sdmVXaXRoKHIsaSl9fTtpZih0PD0xJiYoJChlLGEuZG9uZShzKG4pKS5yZXNvbHZlLGEucmVqZWN0LCF0KSwicGVuZGluZyI9PT1hLnN0YXRlKCl8fGcoaVtuXSYmaVtuXS50aGVuKSkpcmV0dXJuIGEudGhlbigpO3doaWxlKG4tLSkkKGlbbl0scyhuKSxhLnJlamVjdCk7cmV0dXJuIGEucHJvbWlzZSgpfX0pO3ZhciBCPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO3cuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbih0LG4pe2UuY29uc29sZSYmZS5jb25zb2xlLndhcm4mJnQmJkIudGVzdCh0Lm5hbWUpJiZlLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIit0Lm1lc3NhZ2UsdC5zdGFjayxuKX0sdy5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbih0KXtlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9O3ZhciBGPXcuRGVmZXJyZWQoKTt3LmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7dy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LHcuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS13LnJlYWR5V2FpdDp3LmlzUmVhZHkpfHwody5pc1JlYWR5PSEwLCEwIT09ZSYmLS13LnJlYWR5V2FpdD4wfHxGLnJlc29sdmVXaXRoKHIsW3ddKSl9fSksdy5yZWFkeS50aGVuPUYudGhlbjtmdW5jdGlvbiBfKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixfKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLF8pLHcucmVhZHkoKX0iY29tcGxldGUiPT09ci5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1yLnJlYWR5U3RhdGUmJiFyLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9lLnNldFRpbWVvdXQody5yZWFkeSk6KHIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsXyksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixfKSk7dmFyIHo9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXgobikpe2k9ITA7Zm9yKHMgaW4gbil6KGUsdCxzLG5bc10sITAsbyxhKX1lbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLGcocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwodyhlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxYPS9eLW1zLS8sVT0vLShbYS16XSkvZztmdW5jdGlvbiBWKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBHKGUpe3JldHVybiBlLnJlcGxhY2UoWCwibXMtIikucmVwbGFjZShVLFYpfXZhciBZPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gUSgpe3RoaXMuZXhwYW5kbz13LmV4cGFuZG8rUS51aWQrK31RLnVpZD0xLFEucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LFkoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpW0codCldPW47ZWxzZSBmb3IociBpbiB0KWlbRyhyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtHKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChHKToodD1HKHQpKWluIHI/W3RdOnQubWF0Y2goTSl8fFtdKS5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHx3LmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiF3LmlzRW1wdHlPYmplY3QodCl9fTt2YXIgSj1uZXcgUSxLPW5ldyBRLFo9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxlZT0vW0EtWl0vZztmdW5jdGlvbiB0ZShlKXtyZXR1cm4idHJ1ZSI9PT1lfHwiZmFsc2UiIT09ZSYmKCJudWxsIj09PWU/bnVsbDplPT09K2UrIiI/K2U6Wi50ZXN0KGUpP0pTT04ucGFyc2UoZSk6ZSl9ZnVuY3Rpb24gbmUoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJjE9PT1lLm5vZGVUeXBlKWlmKHI9ImRhdGEtIit0LnJlcGxhY2UoZWUsIi0kJiIpLnRvTG93ZXJDYXNlKCksInN0cmluZyI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249dGUobil9Y2F0Y2goZSl7fUsuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufXcuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBLLmhhc0RhdGEoZSl8fEouaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEsuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0sucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSi5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9fSksdy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWUpe2lmKHRoaXMubGVuZ3RoJiYoaT1LLmdldChvKSwxPT09by5ub2RlVHlwZSYmIUouZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7bj1hLmxlbmd0aDt3aGlsZShuLS0pYVtuXSYmMD09PShyPWFbbl0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9RyhyLnNsaWNlKDUpKSxuZShvLHIsaVtyXSkpO0ouc2V0KG8sImhhc0RhdGFBdHRycyIsITApfXJldHVybiBpfXJldHVybiJvYmplY3QiPT10eXBlb2YgZT90aGlzLmVhY2goZnVuY3Rpb24oKXtLLnNldCh0aGlzLGUpfSk6eih0aGlzLGZ1bmN0aW9uKHQpe3ZhciBuO2lmKG8mJnZvaWQgMD09PXQpe2lmKHZvaWQgMCE9PShuPUsuZ2V0KG8sZSkpKXJldHVybiBuO2lmKHZvaWQgMCE9PShuPW5lKG8sZSkpKXJldHVybiBufWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Sy5zZXQodGhpcyxlLHQpfSl9LG51bGwsdCxhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0sucmVtb3ZlKHRoaXMsZSl9KX19KSx3LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1KLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPUouYWNjZXNzKGUsdCx3Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj13LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPXcuX3F1ZXVlSG9va3MoZSx0KSxhPWZ1bmN0aW9uKCl7dy5kZXF1ZXVlKGUsdCl9OyJpbnByb2dyZXNzIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkmJigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwoZSxhLG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIEouZ2V0KGUsbil8fEouYWNjZXNzKGUsbix7ZW1wdHk6dy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7Si5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksdy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iZngiLG4tLSksYXJndW1lbnRzLmxlbmd0aDxuP3cucXVldWUodGhpc1swXSxlKTp2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dy5xdWV1ZSh0aGlzLGUsdCk7dy5fcXVldWVIb29rcyh0aGlzLGUpLCJmeCI9PT1lJiYiaW5wcm9ncmVzcyIhPT1uWzBdJiZ3LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3LmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9dy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4Ijt3aGlsZShhLS0pKG49Si5nZXQob1thXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgcmU9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsaWU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK3JlKyIpKFthLXolXSopJCIsImkiKSxvZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGFlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIm5vbmUiPT09KGU9dHx8ZSkuc3R5bGUuZGlzcGxheXx8IiI9PT1lLnN0eWxlLmRpc3BsYXkmJncuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpJiYibm9uZSI9PT13LmNzcyhlLCJkaXNwbGF5Iil9LHNlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYT17fTtmb3IobyBpbiB0KWFbb109ZS5zdHlsZVtvXSxlLnN0eWxlW29dPXRbb107aT1uLmFwcGx5KGUscnx8W10pO2ZvcihvIGluIHQpZS5zdHlsZVtvXT1hW29dO3JldHVybiBpfTtmdW5jdGlvbiB1ZShlLHQsbixyKXt2YXIgaSxvLGE9MjAscz1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIHcuY3NzKGUsdCwiIil9LHU9cygpLGw9biYmblszXXx8KHcuY3NzTnVtYmVyW3RdPyIiOiJweCIpLGM9KHcuY3NzTnVtYmVyW3RdfHwicHgiIT09bCYmK3UpJiZpZS5leGVjKHcuY3NzKGUsdCkpO2lmKGMmJmNbM10hPT1sKXt1Lz0yLGw9bHx8Y1szXSxjPSt1fHwxO3doaWxlKGEtLSl3LnN0eWxlKGUsdCxjK2wpLCgxLW8pKigxLShvPXMoKS91fHwuNSkpPD0wJiYoYT0wKSxjLz1vO2MqPTIsdy5zdHlsZShlLHQsYytsKSxuPW58fFtdfXJldHVybiBuJiYoYz0rY3x8K3V8fDAsaT1uWzFdP2MrKG5bMV0rMSkqblsyXTorblsyXSxyJiYoci51bml0PWwsci5zdGFydD1jLHIuZW5kPWkpKSxpfXZhciBsZT17fTtmdW5jdGlvbiBjZShlKXt2YXIgdCxuPWUub3duZXJEb2N1bWVudCxyPWUubm9kZU5hbWUsaT1sZVtyXTtyZXR1cm4gaXx8KHQ9bi5ib2R5LmFwcGVuZENoaWxkKG4uY3JlYXRlRWxlbWVudChyKSksaT13LmNzcyh0LCJkaXNwbGF5IiksdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLCJub25lIj09PWkmJihpPSJibG9jayIpLGxlW3JdPWksaSl9ZnVuY3Rpb24gZmUoZSx0KXtmb3IodmFyIG4scixpPVtdLG89MCxhPWUubGVuZ3RoO288YTtvKyspKHI9ZVtvXSkuc3R5bGUmJihuPXIuc3R5bGUuZGlzcGxheSx0Pygibm9uZSI9PT1uJiYoaVtvXT1KLmdldChyLCJkaXNwbGF5Iil8fG51bGwsaVtvXXx8KHIuc3R5bGUuZGlzcGxheT0iIikpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGlbb109Y2UocikpKToibm9uZSIhPT1uJiYoaVtvXT0ibm9uZSIsSi5zZXQociwiZGlzcGxheSIsbikpKTtmb3Iobz0wO288YTtvKyspbnVsbCE9aVtvXSYmKGVbb10uc3R5bGUuZGlzcGxheT1pW29dKTtyZXR1cm4gZX13LmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthZSh0aGlzKT93KHRoaXMpLnNob3coKTp3KHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKykvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksZ2U9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtnZS5vcHRncm91cD1nZS5vcHRpb24sZ2UudGJvZHk9Z2UudGZvb3Q9Z2UuY29sZ3JvdXA9Z2UuY2FwdGlvbj1nZS50aGVhZCxnZS50aD1nZS50ZDtmdW5jdGlvbiB5ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmTihlLHQpP3cubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gdmUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspSi5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fEouZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9dmFyIG1lPS88fCYjP1x3KzsvO2Z1bmN0aW9uIHhlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHA9W10sZD0wLGg9ZS5sZW5ndGg7ZDxoO2QrKylpZigobz1lW2RdKXx8MD09PW8paWYoIm9iamVjdCI9PT14KG8pKXcubWVyZ2UocCxvLm5vZGVUeXBlP1tvXTpvKTtlbHNlIGlmKG1lLnRlc3Qobykpe2E9YXx8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShkZS5leGVjKG8pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHU9Z2Vbc118fGdlLl9kZWZhdWx0LGEuaW5uZXJIVE1MPXVbMV0rdy5odG1sUHJlZmlsdGVyKG8pK3VbMl0sYz11WzBdO3doaWxlKGMtLSlhPWEubGFzdENoaWxkO3cubWVyZ2UocCxhLmNoaWxkTm9kZXMpLChhPWYuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9IiJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD0iIixkPTA7d2hpbGUobz1wW2QrK10paWYociYmdy5pbkFycmF5KG8scik+LTEpaSYmaS5wdXNoKG8pO2Vsc2UgaWYobD13LmNvbnRhaW5zKG8ub3duZXJEb2N1bWVudCxvKSxhPXllKGYuYXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGwmJnZlKGEpLG4pe2M9MDt3aGlsZShvPWFbYysrXSloZS50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9IWZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoci5jcmVhdGVFbGVtZW50KCJkaXYiKSksdD1yLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLHQuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLHQuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGUuYXBwZW5kQ2hpbGQodCksaC5jaGVja0Nsb25lPWUuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGUuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixoLm5vQ2xvbmVDaGVja2VkPSEhZS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIGJlPXIuZG9jdW1lbnRFbGVtZW50LHdlPS9ea2V5LyxUZT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sQ2U9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIEVlKCl7cmV0dXJuITB9ZnVuY3Rpb24ga2UoKXtyZXR1cm4hMX1mdW5jdGlvbiBTZSgpe3RyeXtyZXR1cm4gci5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319ZnVuY3Rpb24gRGUoZSx0LG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXsic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApO2ZvcihzIGluIHQpRGUoZSxzLG4scix0W3NdLG8pO3JldHVybiBlfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9a2U7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksKGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHcoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KS5ndWlkPWEuZ3VpZHx8KGEuZ3VpZD13Lmd1aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe3cuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX13LmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx5PUouZ2V0KGUpO2lmKHkpe24uaGFuZGxlciYmKG49KG89bikuaGFuZGxlcixpPW8uc2VsZWN0b3IpLGkmJncuZmluZC5tYXRjaGVzU2VsZWN0b3IoYmUsaSksbi5ndWlkfHwobi5ndWlkPXcuZ3VpZCsrKSwodT15LmV2ZW50cyl8fCh1PXkuZXZlbnRzPXt9KSwoYT15LmhhbmRsZSl8fChhPXkuaGFuZGxlPWZ1bmN0aW9uKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdyYmdy5ldmVudC50cmlnZ2VyZWQhPT10LnR5cGU/dy5ldmVudC5kaXNwYXRjaC5hcHBseShlLGFyZ3VtZW50cyk6dm9pZCAwfSksbD0odD0odHx8IiIpLm1hdGNoKE0pfHxbIiJdKS5sZW5ndGg7d2hpbGUobC0tKWQ9Zz0ocz1DZS5leGVjKHRbbF0pfHxbXSlbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQmJihmPXcuZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0oaT9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZCxmPXcuZXZlbnQuc3BlY2lhbFtkXXx8e30sYz13LmV4dGVuZCh7dHlwZTpkLG9yaWdUeXBlOmcsZGF0YTpyLGhhbmRsZXI6bixndWlkOm4uZ3VpZCxzZWxlY3RvcjppLG5lZWRzQ29udGV4dDppJiZ3LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksbmFtZXNwYWNlOmguam9pbigiLiIpfSxvKSwocD11W2RdKXx8KChwPXVbZF09W10pLmRlbGVnYXRlQ291bnQ9MCxmLnNldHVwJiYhMSE9PWYuc2V0dXAuY2FsbChlLHIsaCxhKXx8ZS5hZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIoZCxhKSksZi5hZGQmJihmLmFkZC5jYWxsKGUsYyksYy5oYW5kbGVyLmd1aWR8fChjLmhhbmRsZXIuZ3VpZD1uLmd1aWQpKSxpP3Auc3BsaWNlKHAuZGVsZWdhdGVDb3VudCsrLDAsYyk6cC5wdXNoKGMpLHcuZXZlbnQuZ2xvYmFsW2RdPSEwKX19LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcseT1KLmhhc0RhdGEoZSkmJkouZ2V0KGUpO2lmKHkmJih1PXkuZXZlbnRzKSl7bD0odD0odHx8IiIpLm1hdGNoKE0pfHxbIiJdKS5sZW5ndGg7d2hpbGUobC0tKWlmKHM9Q2UuZXhlYyh0W2xdKXx8W10sZD1nPXNbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQpe2Y9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXVbZD0ocj9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZF18fFtdLHM9c1syXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIraC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxhPW89cC5sZW5ndGg7d2hpbGUoby0tKWM9cFtvXSwhaSYmZyE9PWMub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWMuZ3VpZHx8cyYmIXMudGVzdChjLm5hbWVzcGFjZSl8fHImJnIhPT1jLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFjLnNlbGVjdG9yKXx8KHAuc3BsaWNlKG8sMSksYy5zZWxlY3RvciYmcC5kZWxlZ2F0ZUNvdW50LS0sZi5yZW1vdmUmJmYucmVtb3ZlLmNhbGwoZSxjKSk7YSYmIXAubGVuZ3RoJiYoZi50ZWFyZG93biYmITEhPT1mLnRlYXJkb3duLmNhbGwoZSxoLHkuaGFuZGxlKXx8dy5yZW1vdmVFdmVudChlLGQseS5oYW5kbGUpLGRlbGV0ZSB1W2RdKX1lbHNlIGZvcihkIGluIHUpdy5ldmVudC5yZW1vdmUoZSxkK3RbbF0sbixyLCEwKTt3LmlzRW1wdHlPYmplY3QodSkmJkoucmVtb3ZlKGUsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0PXcuZXZlbnQuZml4KGUpLG4scixpLG8sYSxzLHU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGw9KEouZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbdC50eXBlXXx8W10sYz13LmV2ZW50LnNwZWNpYWxbdC50eXBlXXx8e307Zm9yKHVbMF09dCxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl1W25dPWFyZ3VtZW50c1tuXTtpZih0LmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWMucHJlRGlzcGF0Y2h8fCExIT09Yy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsdCkpe3M9dy5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsdCxsKSxuPTA7d2hpbGUoKG89c1tuKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7dC5jdXJyZW50VGFyZ2V0PW8uZWxlbSxyPTA7d2hpbGUoKGE9by5oYW5kbGVyc1tyKytdKSYmIXQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl0LnJuYW1lc3BhY2UmJiF0LnJuYW1lc3BhY2UudGVzdChhLm5hbWVzcGFjZSl8fCh0LmhhbmRsZU9iaj1hLHQuZGF0YT1hLmRhdGEsdm9pZCAwIT09KGk9KCh3LmV2ZW50LnNwZWNpYWxbYS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGEuaGFuZGxlcikuYXBwbHkoby5lbGVtLHUpKSYmITE9PT0odC5yZXN1bHQ9aSkmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHQpLHQucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJmUuYnV0dG9uPj0xKSlmb3IoO2whPT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKGFbaV09ci5uZWVkc0NvbnRleHQ/dyhpLHRoaXMpLmluZGV4KGwpPi0xOncuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksYVtpXSYmby5wdXNoKHIpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIGw9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LkV2ZW50LnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6Zyh0KT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdCh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W2VdfSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbdy5leHBhbmRvXT9lOm5ldyB3LkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09U2UoKSYmdGhpcy5mb2N1cylyZXR1cm4gdGhpcy5mb2N1cygpLCExfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcz09PVNlKCkmJnRoaXMuYmx1cilyZXR1cm4gdGhpcy5ibHVyKCksITF9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKCJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2smJk4odGhpcywiaW5wdXQiKSlyZXR1cm4gdGhpcy5jbGljaygpLCExfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4gTihlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LHcucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LHcuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB3LkV2ZW50KSlyZXR1cm4gbmV3IHcuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT9FZTprZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZ3LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbdy5leHBhbmRvXT0hMH0sdy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOncuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOmtlLGlzUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1FZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sdy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmd2UudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJlRlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSx3LmV2ZW50LmFkZFByb3ApLHcuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oZSx0KXt3LmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dGhpcyxpPWUucmVsYXRlZFRhcmdldCxvPWUuaGFuZGxlT2JqO3JldHVybiBpJiYoaT09PXJ8fHcuY29udGFpbnMocixpKSl8fChlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLHcuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRGUodGhpcyxlLHQsbixyKX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBEZSh0aGlzLGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaix3KGUuZGVsZWdhdGVUYXJnZXQpLm9mZihyLm5hbWVzcGFjZT9yLm9yaWdUeXBlKyIuIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKGkgaW4gZSl0aGlzLm9mZihpLHQsZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuITEhPT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8KG49dCx0PXZvaWQgMCksITE9PT1uJiYobj1rZSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX19KTt2YXIgTmU9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopW14+XSopXC8+L2dpLEFlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLGplPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLHFlPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBMZShlLHQpe3JldHVybiBOKGUsInRhYmxlIikmJk4oMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpP3coZSkuY2hpbGRyZW4oInRib2R5IilbMF18fGU6ZX1mdW5jdGlvbiBIZShlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIE9lKGUpe3JldHVybiJ0cnVlLyI9PT0oZS50eXBlfHwiIikuc2xpY2UoMCw1KT9lLnR5cGU9ZS50eXBlLnNsaWNlKDUpOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBQZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKEouaGFzRGF0YShlKSYmKG89Si5hY2Nlc3MoZSksYT1KLnNldCh0LG8pLGw9by5ldmVudHMpKXtkZWxldGUgYS5oYW5kbGUsYS5ldmVudHM9e307Zm9yKGkgaW4gbClmb3Iobj0wLHI9bFtpXS5sZW5ndGg7bjxyO24rKyl3LmV2ZW50LmFkZCh0LGksbFtpXVtuXSl9Sy5oYXNEYXRhKGUpJiYocz1LLmFjY2VzcyhlKSx1PXcuZXh0ZW5kKHt9LHMpLEsuc2V0KHQsdSkpfX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09biYmcGUudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6ImlucHV0IiE9PW4mJiJ0ZXh0YXJlYSIhPT1ufHwodC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIFJlKGUsdCxuLHIpe3Q9YS5hcHBseShbXSx0KTt2YXIgaSxvLHMsdSxsLGMsZj0wLHA9ZS5sZW5ndGgsZD1wLTEseT10WzBdLHY9Zyh5KTtpZih2fHxwPjEmJiJzdHJpbmciPT10eXBlb2YgeSYmIWguY2hlY2tDbG9uZSYmamUudGVzdCh5KSlyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWUuZXEoaSk7diYmKHRbMF09eS5jYWxsKHRoaXMsaSxvLmh0bWwoKSkpLFJlKG8sdCxuLHIpfSk7aWYocCYmKGk9eGUodCxlWzBdLm93bmVyRG9jdW1lbnQsITEsZSxyKSxvPWkuZmlyc3RDaGlsZCwxPT09aS5jaGlsZE5vZGVzLmxlbmd0aCYmKGk9byksb3x8cikpe2Zvcih1PShzPXcubWFwKHllKGksInNjcmlwdCIpLEhlKSkubGVuZ3RoO2Y8cDtmKyspbD1pLGYhPT1kJiYobD13LmNsb25lKGwsITAsITApLHUmJncubWVyZ2Uocyx5ZShsLCJzY3JpcHQiKSkpLG4uY2FsbChlW2ZdLGwsZik7aWYodSlmb3IoYz1zW3MubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsdy5tYXAocyxPZSksZj0wO2Y8dTtmKyspbD1zW2ZdLGhlLnRlc3QobC50eXBlfHwiIikmJiFKLmFjY2VzcyhsLCJnbG9iYWxFdmFsIikmJncuY29udGFpbnMoYyxsKSYmKGwuc3JjJiYibW9kdWxlIiE9PShsLnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpP3cuX2V2YWxVcmwmJncuX2V2YWxVcmwobC5zcmMpOm0obC50ZXh0Q29udGVudC5yZXBsYWNlKHFlLCIiKSxjLGwpKX1yZXR1cm4gZX1mdW5jdGlvbiBJZShlLHQsbil7Zm9yKHZhciByLGk9dD93LmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8dy5jbGVhbkRhdGEoeWUocikpLHIucGFyZW50Tm9kZSYmKG4mJncuY29udGFpbnMoci5vd25lckRvY3VtZW50LHIpJiZ2ZSh5ZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX13LmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKE5lLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5jbG9uZU5vZGUoITApLHU9dy5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoIShoLm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx3LmlzWE1MRG9jKGUpKSlmb3IoYT15ZShzKSxyPTAsaT0obz15ZShlKSkubGVuZ3RoO3I8aTtyKyspTWUob1tyXSxhW3JdKTtpZih0KWlmKG4pZm9yKG89b3x8eWUoZSksYT1hfHx5ZShzKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKVBlKG9bcl0sYVtyXSk7ZWxzZSBQZShlLHMpO3JldHVybihhPXllKHMsInNjcmlwdCIpKS5sZW5ndGg+MCYmdmUoYSwhdSYmeWUoZSwic2NyaXB0IikpLHN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9dy5ldmVudC5zcGVjaWFsLG89MDt2b2lkIDAhPT0obj1lW29dKTtvKyspaWYoWShuKSl7aWYodD1uW0ouZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKWlbcl0/dy5ldmVudC5yZW1vdmUobixyKTp3LnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7bltKLmV4cGFuZG9dPXZvaWQgMH1uW0suZXhwYW5kb10mJihuW0suZXhwYW5kb109dm9pZCAwKX19fSksdy5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gSWUodGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBJZSh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxMZSh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PUxlKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsIT1lJiZlLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdy5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWUmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFBZS50ZXN0KGUpJiYhZ2VbKGRlLmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPXcuaHRtbFByZWZpbHRlcihlKTt0cnl7Zm9yKDtuPHI7bisrKTE9PT0odD10aGlzW25dfHx7fSkubm9kZVR5cGUmJih3LmNsZWFuRGF0YSh5ZSh0LCExKSksdC5pbm5lckhUTUw9ZSk7dD0wfWNhdGNoKGUpe319dCYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBSZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbih0KXt2YXIgbj10aGlzLnBhcmVudE5vZGU7dy5pbkFycmF5KHRoaXMsZSk8MCYmKHcuY2xlYW5EYXRhKHllKHRoaXMpKSxuJiZuLnJlcGxhY2VDaGlsZCh0LHRoaXMpKX0sZSl9fSksdy5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLGk9dyhlKSxvPWkubGVuZ3RoLTEsYT0wO2E8PW87YSsrKW49YT09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx3KGlbYV0pW3RdKG4pLHMuYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSk7dmFyIFdlPW5ldyBSZWdFeHAoIl4oIityZSsiKSg/IXB4KVthLXolXSskIiwiaSIpLCRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gbiYmbi5vcGVuZXJ8fChuPWUpLG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KX0sQmU9bmV3IFJlZ0V4cChvZS5qb2luKCJ8IiksImkiKTshZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aWYoYyl7bC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIixjLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjYwJTt0b3A6MSUiLGJlLmFwcGVuZENoaWxkKGwpLmFwcGVuZENoaWxkKGMpO3ZhciB0PWUuZ2V0Q29tcHV0ZWRTdHlsZShjKTtpPSIxJSIhPT10LnRvcCx1PTEyPT09bih0Lm1hcmdpbkxlZnQpLGMuc3R5bGUucmlnaHQ9IjYwJSIscz0zNj09PW4odC5yaWdodCksbz0zNj09PW4odC53aWR0aCksYy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGE9MzY9PT1jLm9mZnNldFdpZHRofHwiYWJzb2x1dGUiLGJlLnJlbW92ZUNoaWxkKGwpLGM9bnVsbH19ZnVuY3Rpb24gbihlKXtyZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGUpKX12YXIgaSxvLGEscyx1LGw9ci5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPXIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yy5zdHlsZSYmKGMuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixjLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsaC5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWMuc3R5bGUuYmFja2dyb3VuZENsaXAsdy5leHRlbmQoaCx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLG99LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxzfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxpfSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLHV9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLGF9fSkpfSgpO2Z1bmN0aW9uIEZlKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuc3R5bGU7cmV0dXJuKG49bnx8JGUoZSkpJiYoIiIhPT0oYT1uLmdldFByb3BlcnR5VmFsdWUodCl8fG5bdF0pfHx3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KGE9dy5zdHlsZShlLHQpKSwhaC5waXhlbEJveFN0eWxlcygpJiZXZS50ZXN0KGEpJiZCZS50ZXN0KHQpJiYocj1zLndpZHRoLGk9cy5taW5XaWR0aCxvPXMubWF4V2lkdGgscy5taW5XaWR0aD1zLm1heFdpZHRoPXMud2lkdGg9YSxhPW4ud2lkdGgscy53aWR0aD1yLHMubWluV2lkdGg9aSxzLm1heFdpZHRoPW8pKSx2b2lkIDAhPT1hP2ErIiI6YX1mdW5jdGlvbiBfZShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtpZighZSgpKXJldHVybih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuZ2V0fX19dmFyIHplPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxYZT0vXi0tLyxVZT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sVmU9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LEdlPVsiV2Via2l0IiwiTW96IiwibXMiXSxZZT1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlO2Z1bmN0aW9uIFFlKGUpe2lmKGUgaW4gWWUpcmV0dXJuIGU7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1HZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPUdlW25dK3QpaW4gWWUpcmV0dXJuIGV9ZnVuY3Rpb24gSmUoZSl7dmFyIHQ9dy5jc3NQcm9wc1tlXTtyZXR1cm4gdHx8KHQ9dy5jc3NQcm9wc1tlXT1RZShlKXx8ZSksdH1mdW5jdGlvbiBLZShlLHQsbil7dmFyIHI9aWUuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8InB4Iik6dH1mdW5jdGlvbiBaZShlLHQsbixyLGksbyl7dmFyIGE9IndpZHRoIj09PXQ/MTowLHM9MCx1PTA7aWYobj09PShyPyJib3JkZXIiOiJjb250ZW50IikpcmV0dXJuIDA7Zm9yKDthPDQ7YSs9MikibWFyZ2luIj09PW4mJih1Kz13LmNzcyhlLG4rb2VbYV0sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJih1LT13LmNzcyhlLCJwYWRkaW5nIitvZVthXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYodS09dy5jc3MoZSwiYm9yZGVyIitvZVthXSsiV2lkdGgiLCEwLGkpKSk6KHUrPXcuY3NzKGUsInBhZGRpbmciK29lW2FdLCEwLGkpLCJwYWRkaW5nIiE9PW4/dSs9dy5jc3MoZSwiYm9yZGVyIitvZVthXSsiV2lkdGgiLCEwLGkpOnMrPXcuY3NzKGUsImJvcmRlciIrb2VbYV0rIldpZHRoIiwhMCxpKSk7cmV0dXJuIXImJm8+PTAmJih1Kz1NYXRoLm1heCgwLE1hdGguY2VpbChlWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXS1vLXUtcy0uNSkpKSx1fWZ1bmN0aW9uIGV0KGUsdCxuKXt2YXIgcj0kZShlKSxpPUZlKGUsdCxyKSxvPSJib3JkZXItYm94Ij09PXcuY3NzKGUsImJveFNpemluZyIsITEsciksYT1vO2lmKFdlLnRlc3QoaSkpe2lmKCFuKXJldHVybiBpO2k9ImF1dG8ifXJldHVybiBhPWEmJihoLmJveFNpemluZ1JlbGlhYmxlKCl8fGk9PT1lLnN0eWxlW3RdKSwoImF1dG8iPT09aXx8IXBhcnNlRmxvYXQoaSkmJiJpbmxpbmUiPT09dy5jc3MoZSwiZGlzcGxheSIsITEscikpJiYoaT1lWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXSxhPSEwKSwoaT1wYXJzZUZsb2F0KGkpfHwwKStaZShlLHQsbnx8KG8/ImJvcmRlciI6ImNvbnRlbnQiKSxhLHIsaSkrInB4In13LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUZlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1HKHQpLHU9WGUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9SmUocykpLGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09KG89dHlwZW9mIG4pJiYoaT1pZS5leGVjKG4pKSYmaVsxXSYmKG49dWUoZSx0LGkpLG89Im51bWJlciIpLG51bGwhPW4mJm49PT1uJiYoIm51bWJlciI9PT1vJiYobis9aSYmaVszXXx8KHcuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSxoLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW3RdPSJpbmhlcml0IiksYSYmInNldCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9Ryh0KTtyZXR1cm4gWGUudGVzdCh0KXx8KHQ9SmUocykpLChhPXcuY3NzSG9va3NbdF18fHcuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPUZlKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFZlJiYoaT1WZVt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksdy5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobilyZXR1cm4hemUudGVzdCh3LmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP2V0KGUsdCxyKTpzZShlLFVlLGZ1bmN0aW9uKCl7cmV0dXJuIGV0KGUsdCxyKX0pfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG89JGUoZSksYT0iYm9yZGVyLWJveCI9PT13LmNzcyhlLCJib3hTaXppbmciLCExLG8pLHM9ciYmWmUoZSx0LHIsYSxvKTtyZXR1cm4gYSYmaC5zY3JvbGxib3hTaXplKCk9PT1vLnBvc2l0aW9uJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLXBhcnNlRmxvYXQob1t0XSktWmUoZSx0LCJib3JkZXIiLCExLG8pLS41KSkscyYmKGk9aWUuZXhlYyhuKSkmJiJweCIhPT0oaVszXXx8InB4IikmJihlLnN0eWxlW3RdPW4sbj13LmNzcyhlLHQpKSxLZShlLG4scyl9fX0pLHcuY3NzSG9va3MubWFyZ2luTGVmdD1fZShoLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoRmUoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXNlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSx3LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wLGk9e30sbz0ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgiICIpOltuXTtyPDQ7cisrKWlbZStvZVtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSwibWFyZ2luIiE9PWUmJih3LmNzc0hvb2tzW2UrdF0uc2V0PUtlKX0pLHcuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPSRlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPXcuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj93LnN0eWxlKGUsdCxuKTp3LmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX19KTtmdW5jdGlvbiB0dChlLHQsbixyLGkpe3JldHVybiBuZXcgdHQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX13LlR3ZWVuPXR0LHR0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8dy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh3LmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9dHQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOnR0LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPXR0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD13LmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6dHQucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sdHQucHJvdG90eXBlLmluaXQucHJvdG90eXBlPXR0LnByb3RvdHlwZSx0dC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXToodD13LmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ/dDowfSxzZXQ6ZnVuY3Rpb24oZSl7dy5meC5zdGVwW2UucHJvcF0/dy5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8bnVsbD09ZS5lbGVtLnN0eWxlW3cuY3NzUHJvcHNbZS5wcm9wXV0mJiF3LmNzc0hvb2tzW2UucHJvcF0/ZS5lbGVtW2UucHJvcF09ZS5ub3c6dy5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCl9fX0sdHQucHJvcEhvb2tzLnNjcm9sbFRvcD10dC5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx3LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LHcuZng9dHQucHJvdG90eXBlLmluaXQsdy5meC5zdGVwPXt9O3ZhciBudCxydCxpdD0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sb3Q9L3F1ZXVlSG9va3MkLztmdW5jdGlvbiBhdCgpe3J0JiYoITE9PT1yLmhpZGRlbiYmZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXQpOmUuc2V0VGltZW91dChhdCx3LmZ4LmludGVydmFsKSx3LmZ4LnRpY2soKSl9ZnVuY3Rpb24gc3QoKXtyZXR1cm4gZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bnQ9dm9pZCAwfSksbnQ9RGF0ZS5ub3coKX1mdW5jdGlvbiB1dChlLHQpe3ZhciBuLHI9MCxpPXtoZWlnaHQ6ZX07Zm9yKHQ9dD8xOjA7cjw0O3IrPTItdClpWyJtYXJnaW4iKyhuPW9lW3JdKV09aVsicGFkZGluZyIrbl09ZTtyZXR1cm4gdCYmKGkub3BhY2l0eT1pLndpZHRoPWUpLGl9ZnVuY3Rpb24gbHQoZSx0LG4pe2Zvcih2YXIgcixpPShwdC50d2VlbmVyc1t0XXx8W10pLmNvbmNhdChwdC50d2VlbmVyc1siKiJdKSxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBjdChlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYyxmPSJ3aWR0aCJpbiB0fHwiaGVpZ2h0ImluIHQscD10aGlzLGQ9e30saD1lLnN0eWxlLGc9ZS5ub2RlVHlwZSYmYWUoZSkseT1KLmdldChlLCJmeHNob3ciKTtuLnF1ZXVlfHwobnVsbD09KGE9dy5fcXVldWVIb29rcyhlLCJmeCIpKS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCxzPWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHxzKCl9KSxhLnVucXVldWVkKysscC5hbHdheXMoZnVuY3Rpb24oKXtwLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx3LnF1ZXVlKGUsImZ4IikubGVuZ3RofHxhLmVtcHR5LmZpcmUoKX0pfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLGl0LnRlc3QoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZz8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09aXx8IXl8fHZvaWQgMD09PXlbcl0pY29udGludWU7Zz0hMH1kW3JdPXkmJnlbcl18fHcuc3R5bGUoZSxyKX1pZigodT0hdy5pc0VtcHR5T2JqZWN0KHQpKXx8IXcuaXNFbXB0eU9iamVjdChkKSl7ZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxudWxsPT0obD15JiZ5LmRpc3BsYXkpJiYobD1KLmdldChlLCJkaXNwbGF5IikpLCJub25lIj09PShjPXcuY3NzKGUsImRpc3BsYXkiKSkmJihsP2M9bDooZmUoW2VdLCEwKSxsPWUuc3R5bGUuZGlzcGxheXx8bCxjPXcuY3NzKGUsImRpc3BsYXkiKSxmZShbZV0pKSksKCJpbmxpbmUiPT09Y3x8ImlubGluZS1ibG9jayI9PT1jJiZudWxsIT1sKSYmIm5vbmUiPT09dy5jc3MoZSwiZmxvYXQiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9bH0pLG51bGw9PWwmJihjPWguZGlzcGxheSxsPSJub25lIj09PWM/IiI6YykpLGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExO2ZvcihyIGluIGQpdXx8KHk/ImhpZGRlbiJpbiB5JiYoZz15LmhpZGRlbik6eT1KLmFjY2VzcyhlLCJmeHNob3ciLHtkaXNwbGF5Omx9KSxvJiYoeS5oaWRkZW49IWcpLGcmJmZlKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Z3x8ZmUoW2VdKSxKLnJlbW92ZShlLCJmeHNob3ciKTtmb3IociBpbiBkKXcuc3R5bGUoZSxyLGRbcl0pfSkpLHU9bHQoZz95W3JdOjAscixwKSxyIGluIHl8fCh5W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9fWZ1bmN0aW9uIGZ0KGUsdCl7dmFyIG4scixpLG8sYTtmb3IobiBpbiBlKWlmKHI9RyhuKSxpPXRbcl0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT13LmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKXtvPWEuZXhwYW5kKG8pLGRlbGV0ZSBlW3JdO2ZvcihuIGluIG8pbiBpbiBlfHwoZVtuXT1vW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9ZnVuY3Rpb24gcHQoZSx0LG4pe3ZhciByLGksbz0wLGE9cHQucHJlZmlsdGVycy5sZW5ndGgscz13LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO2Zvcih2YXIgdD1udHx8c3QoKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPTEtKG4vbC5kdXJhdGlvbnx8MCksbz0wLGE9bC50d2VlbnMubGVuZ3RoO288YTtvKyspbC50d2VlbnNbb10ucnVuKHIpO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbbCxyLG5dKSxyPDEmJmE/bjooYXx8cy5ub3RpZnlXaXRoKGUsW2wsMSwwXSkscy5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOncuZXh0ZW5kKHt9LHQpLG9wdHM6dy5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOncuZWFzaW5nLl9kZWZhdWx0fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6bnR8fHN0KCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj13LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO248cjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0PyhzLm5vdGlmeVdpdGgoZSxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKGUsW2wsdF0pKTpzLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKGZ0KGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO288YTtvKyspaWYocj1wdC5wcmVmaWx0ZXJzW29dLmNhbGwobCxlLGMsbC5vcHRzKSlyZXR1cm4gZyhyLnN0b3ApJiYody5fcXVldWVIb29rcyhsLmVsZW0sbC5vcHRzLnF1ZXVlKS5zdG9wPXIuc3RvcC5iaW5kKHIpKSxyO3JldHVybiB3Lm1hcChjLGx0LGwpLGcobC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwoZSxsKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKSx3LmZ4LnRpbWVyKHcuZXh0ZW5kKHUse2VsZW06ZSxhbmltOmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGx9dy5BbmltYXRpb249dy5leHRlbmQocHQse3R3ZWVuZXJzOnsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpO3JldHVybiB1ZShuLmVsZW0sZSxpZS5leGVjKHQpLG4pLG59XX0sdHdlZW5lcjpmdW5jdGlvbihlLHQpe2coZSk/KHQ9ZSxlPVsiKiJdKTplPWUubWF0Y2goTSk7Zm9yKHZhciBuLHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbj1lW3JdLHB0LnR3ZWVuZXJzW25dPXB0LnR3ZWVuZXJzW25dfHxbXSxwdC50d2VlbmVyc1tuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXJzOltjdF0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9wdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6cHQucHJlZmlsdGVycy5wdXNoKGUpfX0pLHcuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT93LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fGcoZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIWcodCkmJnR9O3JldHVybiB3LmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiB3LmZ4LnNwZWVkcz9yLmR1cmF0aW9uPXcuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249dy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7ZyhyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmdy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHcuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT13LmlzRW1wdHlPYmplY3QoZSksbz13LnNwZWVkKHQsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIHQ9cHQodGhpcyx3LmV4dGVuZCh7fSxlKSxvKTsoaXx8Si5nZXQodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChuKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj10LHQ9ZSxlPXZvaWQgMCksdCYmITEhPT1lJiZ0aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZSsicXVldWVIb29rcyIsbz13LnRpbWVycyxhPUouZ2V0KHRoaXMpO2lmKGkpYVtpXSYmYVtpXS5zdG9wJiZyKGFbaV0pO2Vsc2UgZm9yKGkgaW4gYSlhW2ldJiZhW2ldLnN0b3AmJm90LnRlc3QoaSkmJnIoYVtpXSk7Zm9yKGk9by5sZW5ndGg7aS0tOylvW2ldLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW2ldLnF1ZXVlIT09ZXx8KG9baV0uYW5pbS5zdG9wKG4pLHQ9ITEsby5zcGxpY2UoaSwxKSk7IXQmJm58fHcuZGVxdWV1ZSh0aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXtyZXR1cm4hMSE9PWUmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49Si5nZXQodGhpcykscj1uW2UrInF1ZXVlIl0saT1uW2UrInF1ZXVlSG9va3MiXSxvPXcudGltZXJzLGE9cj9yLmxlbmd0aDowO2ZvcihuLmZpbmlzaD0hMCx3LnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCghMCksby5zcGxpY2UodCwxKSk7Zm9yKHQ9MDt0PGE7dCsrKXJbdF0mJnJbdF0uZmluaXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pLHcuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj13LmZuW3RdO3cuZm5bdF09ZnVuY3Rpb24oZSxyLGkpe3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZSh1dCh0LCEwKSxlLHIsaSl9fSksdy5lYWNoKHtzbGlkZURvd246dXQoInNob3ciKSxzbGlkZVVwOnV0KCJoaWRlIiksc2xpZGVUb2dnbGU6dXQoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQsZSxuLHIpfX0pLHcudGltZXJzPVtdLHcuZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9MCxuPXcudGltZXJzO2ZvcihudD1EYXRlLm5vdygpO3Q8bi5sZW5ndGg7dCsrKShlPW5bdF0pKCl8fG5bdF0hPT1lfHxuLnNwbGljZSh0LS0sMSk7bi5sZW5ndGh8fHcuZnguc3RvcCgpLG50PXZvaWQgMH0sdy5meC50aW1lcj1mdW5jdGlvbihlKXt3LnRpbWVycy5wdXNoKGUpLHcuZnguc3RhcnQoKX0sdy5meC5pbnRlcnZhbD0xMyx3LmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7cnR8fChydD0hMCxhdCgpKX0sdy5meC5zdG9wPWZ1bmN0aW9uKCl7cnQ9bnVsbH0sdy5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sdy5mbi5kZWxheT1mdW5jdGlvbih0LG4pe3JldHVybiB0PXcuZng/dy5meC5zcGVlZHNbdF18fHQ6dCxuPW58fCJmeCIsdGhpcy5xdWV1ZShuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5zZXRUaW1lb3V0KG4sdCk7ci5zdG9wPWZ1bmN0aW9uKCl7ZS5jbGVhclRpbWVvdXQoaSl9fSl9LGZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHQ9ci5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChyLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtlLnR5cGU9ImNoZWNrYm94IixoLmNoZWNrT249IiIhPT1lLnZhbHVlLGgub3B0U2VsZWN0ZWQ9dC5zZWxlY3RlZCwoZT1yLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixlLnR5cGU9InJhZGlvIixoLnJhZGlvVmFsdWU9InQiPT09ZS52YWx1ZX0oKTt2YXIgZHQsaHQ9dy5leHByLmF0dHJIYW5kbGU7dy5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcuYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSx3LmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGUuZ2V0QXR0cmlidXRlP3cucHJvcChlLHQsbik6KDE9PT1vJiZ3LmlzWE1MRG9jKGUpfHwoaT13LmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwody5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9kdDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgdy5yZW1vdmVBdHRyKGUsdCk6aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbisiIiksbik6aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjpudWxsPT0ocj13LmZpbmQuYXR0cihlLHQpKT92b2lkIDA6cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIWgucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJk4oZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKE0pO2lmKGkmJjE9PT1lLm5vZGVUeXBlKXdoaWxlKG49aVtyKytdKWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLGR0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD93LnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSx3LmVhY2gody5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj1odFt0XXx8dy5maW5kLmF0dHI7aHRbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG8sYT10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHJ8fChvPWh0W2FdLGh0W2FdPWksaT1udWxsIT1uKGUsdCxyKT9hOm51bGwsaHRbYV09byksaX19KTt2YXIgZ3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7dy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdy5wcm9wRml4W2VdfHxlXX0pfX0pLHcuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmdy5pc1hNTERvYyhlKXx8KHQ9dy5wcm9wRml4W3RdfHx0LGk9dy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXcuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6Z3QudGVzdChlLm5vZGVOYW1lKXx8eXQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSksaC5vcHRTZWxlY3RlZHx8KHcucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSx3LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3cucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KTtmdW5jdGlvbiB2dChlKXtyZXR1cm4oZS5tYXRjaChNKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiB4dChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZT9lLm1hdGNoKE0pfHxbXTpbXX13LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHMsdT0wO2lmKGcoZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt3KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsbXQodGhpcykpKX0pO2lmKCh0PXh0KGUpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1tdChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIrdnQoaSkrIiAiKXthPTA7d2hpbGUobz10W2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9dnQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1PTA7aWYoZyhlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3codGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCxtdCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigodD14dChlKSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9bXQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK3Z0KGkpKyIgIil7YT0wO3doaWxlKG89dFthKytdKXdoaWxlKHIuaW5kZXhPZigiICIrbysiICIpPi0xKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGUscj0ic3RyaW5nIj09PW58fEFycmF5LmlzQXJyYXkoZSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmcj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVDbGFzcyhlKTpnKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt3KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sbXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpLG8sYTtpZihyKXtpPTAsbz13KHRoaXMpLGE9eHQoZSk7d2hpbGUodD1hW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZSB2b2lkIDAhPT1lJiYiYm9vbGVhbiIhPT1ufHwoKHQ9bXQodGhpcykpJiZKLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIix0KSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIix0fHwhMT09PWU/IiI6Si5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYoIiAiK3Z0KG10KG4pKSsiICIpLmluZGV4T2YodCk+LTEpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGJ0PS9cci9nO3cuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj1nKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgaTsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PShpPXI/ZS5jYWxsKHRoaXMsbix3KHRoaXMpLnZhbCgpKTplKT9pPSIiOiJudW1iZXIiPT10eXBlb2YgaT9pKz0iIjpBcnJheS5pc0FycmF5KGkpJiYoaT13Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHQ9dy52YWxIb29rc1t0aGlzLnR5cGVdfHx3LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHQmJnZvaWQgMCE9PXQuc2V0KHRoaXMsaSwidmFsdWUiKXx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4odD13LnZhbEhvb2tzW2kudHlwZV18fHcudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJnZXQiaW4gdCYmdm9pZCAwIT09KG49dC5nZXQoaSwidmFsdWUiKSk/bjoic3RyaW5nIj09dHlwZW9mKG49aS52YWx1ZSk/bi5yZXBsYWNlKGJ0LCIiKTpudWxsPT1uPyIiOm59fX0pLHcuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5maW5kLmF0dHIoZSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9dD90OnZ0KHcudGV4dChlKSl9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT1lLm9wdGlvbnMsbz1lLnNlbGVjdGVkSW5kZXgsYT0ic2VsZWN0LW9uZSI9PT1lLnR5cGUscz1hP251bGw6W10sdT1hP28rMTppLmxlbmd0aDtmb3Iocj1vPDA/dTphP286MDtyPHU7cisrKWlmKCgobj1pW3JdKS5zZWxlY3RlZHx8cj09PW8pJiYhbi5kaXNhYmxlZCYmKCFuLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFOKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9dyhuKS52YWwoKSxhKXJldHVybiB0O3MucHVzaCh0KX1yZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUub3B0aW9ucyxvPXcubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7d2hpbGUoYS0tKSgocj1pW2FdKS5zZWxlY3RlZD13LmluQXJyYXkody52YWxIb29rcy5vcHRpb24uZ2V0KHIpLG8pPi0xKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19fSksdy5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7dy52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZS5jaGVja2VkPXcuaW5BcnJheSh3KGUpLnZhbCgpLHQpPi0xfX0saC5jaGVja09ufHwody52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmUudmFsdWV9KX0pLGguZm9jdXNpbj0ib25mb2N1c2luImluIGU7dmFyIHd0PS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxUdD1mdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfTt3LmV4dGVuZCh3LmV2ZW50LHt0cmlnZ2VyOmZ1bmN0aW9uKHQsbixpLG8pe3ZhciBhLHMsdSxsLGMscCxkLGgsdj1baXx8cl0sbT1mLmNhbGwodCwidHlwZSIpP3QudHlwZTp0LHg9Zi5jYWxsKHQsIm5hbWVzcGFjZSIpP3QubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYocz1oPXU9aT1pfHxyLDMhPT1pLm5vZGVUeXBlJiY4IT09aS5ub2RlVHlwZSYmIXd0LnRlc3QobSt3LmV2ZW50LnRyaWdnZXJlZCkmJihtLmluZGV4T2YoIi4iKT4tMSYmKG09KHg9bS5zcGxpdCgiLiIpKS5zaGlmdCgpLHguc29ydCgpKSxjPW0uaW5kZXhPZigiOiIpPDAmJiJvbiIrbSx0PXRbdy5leHBhbmRvXT90Om5ldyB3LkV2ZW50KG0sIm9iamVjdCI9PXR5cGVvZiB0JiZ0KSx0LmlzVHJpZ2dlcj1vPzI6Myx0Lm5hbWVzcGFjZT14LmpvaW4oIi4iKSx0LnJuYW1lc3BhY2U9dC5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIreC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLHQucmVzdWx0PXZvaWQgMCx0LnRhcmdldHx8KHQudGFyZ2V0PWkpLG49bnVsbD09bj9bdF06dy5tYWtlQXJyYXkobixbdF0pLGQ9dy5ldmVudC5zcGVjaWFsW21dfHx7fSxvfHwhZC50cmlnZ2VyfHwhMSE9PWQudHJpZ2dlci5hcHBseShpLG4pKSl7aWYoIW8mJiFkLm5vQnViYmxlJiYheShpKSl7Zm9yKGw9ZC5kZWxlZ2F0ZVR5cGV8fG0sd3QudGVzdChsK20pfHwocz1zLnBhcmVudE5vZGUpO3M7cz1zLnBhcmVudE5vZGUpdi5wdXNoKHMpLHU9czt1PT09KGkub3duZXJEb2N1bWVudHx8cikmJnYucHVzaCh1LmRlZmF1bHRWaWV3fHx1LnBhcmVudFdpbmRvd3x8ZSl9YT0wO3doaWxlKChzPXZbYSsrXSkmJiF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpaD1zLHQudHlwZT1hPjE/bDpkLmJpbmRUeXBlfHxtLChwPShKLmdldChzLCJldmVudHMiKXx8e30pW3QudHlwZV0mJkouZ2V0KHMsImhhbmRsZSIpKSYmcC5hcHBseShzLG4pLChwPWMmJnNbY10pJiZwLmFwcGx5JiZZKHMpJiYodC5yZXN1bHQ9cC5hcHBseShzLG4pLCExPT09dC5yZXN1bHQmJnQucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIHQudHlwZT1tLG98fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fGQuX2RlZmF1bHQmJiExIT09ZC5fZGVmYXVsdC5hcHBseSh2LnBvcCgpLG4pfHwhWShpKXx8YyYmZyhpW21dKSYmIXkoaSkmJigodT1pW2NdKSYmKGlbY109bnVsbCksdy5ldmVudC50cmlnZ2VyZWQ9bSx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmguYWRkRXZlbnRMaXN0ZW5lcihtLFR0KSxpW21dKCksdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZoLnJlbW92ZUV2ZW50TGlzdGVuZXIobSxUdCksdy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLHUmJihpW2NdPXUpKSx0LnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj13LmV4dGVuZChuZXcgdy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTt3LmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLHcuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3cuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIHcuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSksaC5mb2N1c2lufHx3LmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7dy5ldmVudC5zaW11bGF0ZSh0LGUudGFyZ2V0LHcuZXZlbnQuZml4KGUpKX07dy5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPUouYWNjZXNzKHIsdCk7aXx8ci5hZGRFdmVudExpc3RlbmVyKGUsbiwhMCksSi5hY2Nlc3Mocix0LChpfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsaT1KLmFjY2VzcyhyLHQpLTE7aT9KLmFjY2VzcyhyLHQsaSk6KHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4sITApLEoucmVtb3ZlKHIsdCkpfX19KTt2YXIgQ3Q9ZS5sb2NhdGlvbixFdD1EYXRlLm5vdygpLGt0PS9cPy87dy5wYXJzZVhNTD1mdW5jdGlvbih0KXt2YXIgbjtpZighdHx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiBudWxsO3RyeXtuPShuZXcgZS5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LCJ0ZXh0L3htbCIpfWNhdGNoKGUpe249dm9pZCAwfXJldHVybiBuJiYhbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGh8fHcuZXJyb3IoIkludmFsaWQgWE1MOiAiK3QpLG59O3ZhciBTdD0vXFtcXSQvLER0PS9ccj9cbi9nLE50PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxBdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24ganQoZSx0LG4scil7dmFyIGk7aWYoQXJyYXkuaXNBcnJheSh0KSl3LmVhY2godCxmdW5jdGlvbih0LGkpe258fFN0LnRlc3QoZSk/cihlLGkpOmp0KGUrIlsiKygib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPWk/dDoiIikrIl0iLGksbixyKX0pO2Vsc2UgaWYobnx8Im9iamVjdCIhPT14KHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpanQoZSsiWyIraSsiXSIsdFtpXSxuLHIpfXcucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1nKHQpP3QoKTp0O3Jbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG51bGw9PW4/IiI6bil9O2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhdy5pc1BsYWluT2JqZWN0KGUpKXcuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpanQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSx3LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHcucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT13LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT93Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF3KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmQXQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIU50LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXcodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP3cubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShEdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoRHQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgcXQ9LyUyMC9nLEx0PS8jLiokLyxIdD0vKFs/Jl0pXz1bXiZdKi8sT3Q9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxQdD0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxNdD0vXig/OkdFVHxIRUFEKSQvLFJ0PS9eXC9cLy8sSXQ9e30sV3Q9e30sJHQ9IiovIi5jb25jYXQoIioiKSxCdD1yLmNyZWF0ZUVsZW1lbnQoImEiKTtCdC5ocmVmPUN0LmhyZWY7ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7InN0cmluZyIhPXR5cGVvZiB0JiYobj10LHQ9IioiKTt2YXIgcixpPTAsbz10LnRvTG93ZXJDYXNlKCkubWF0Y2goTSl8fFtdO2lmKGcobikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1XdDtmdW5jdGlvbiBhKHMpe3ZhciB1O3JldHVybiBpW3NdPSEwLHcuZWFjaChlW3NdfHxbXSxmdW5jdGlvbihlLHMpe3ZhciBsPXModCxuLHIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgbHx8b3x8aVtsXT9vPyEodT1sKTp2b2lkIDA6KHQuZGF0YVR5cGVzLnVuc2hpZnQobCksYShsKSwhMSl9KSx1fXJldHVybiBhKHQuZGF0YVR5cGVzWzBdKXx8IWlbIioiXSYmYSgiKiIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPXcuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJncuZXh0ZW5kKCEwLGUsciksZX1mdW5jdGlvbiBYdChlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1LnNoaWZ0KCksdm9pZCAwPT09ciYmKHI9ZS5taW1lVHlwZXx8dC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKHIpZm9yKGkgaW4gcylpZihzW2ldJiZzW2ldLnRlc3Qocikpe3UudW5zaGlmdChpKTticmVha31pZih1WzBdaW4gbilvPXVbMF07ZWxzZXtmb3IoaSBpbiBuKXtpZighdVswXXx8ZS5jb252ZXJ0ZXJzW2krIiAiK3VbMF1dKXtvPWk7YnJlYWt9YXx8KGE9aSl9bz1vfHxhfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXX1mdW5jdGlvbiBVdChlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fXcuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpDdC5ocmVmLHR5cGU6IkdFVCIsaXNMb2NhbDpQdC50ZXN0KEN0LnByb3RvY29sKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7IioiOiR0LHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi9cYnhtbFxiLyxodG1sOi9cYmh0bWwvLGpzb246L1xianNvblxiL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOkpTT04ucGFyc2UsInRleHQgeG1sIjp3LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD96dCh6dChlLHcuYWpheFNldHRpbmdzKSx0KTp6dCh3LmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjpGdChJdCksYWpheFRyYW5zcG9ydDpGdChXdCksYWpheDpmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgdCYmKG49dCx0PXZvaWQgMCksbj1ufHx7fTt2YXIgaSxvLGEscyx1LGwsYyxmLHAsZCxoPXcuYWpheFNldHVwKHt9LG4pLGc9aC5jb250ZXh0fHxoLHk9aC5jb250ZXh0JiYoZy5ub2RlVHlwZXx8Zy5qcXVlcnkpP3coZyk6dy5ldmVudCx2PXcuRGVmZXJyZWQoKSxtPXcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLHg9aC5zdGF0dXNDb2RlfHx7fSxiPXt9LFQ9e30sQz0iY2FuY2VsZWQiLEU9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZihjKXtpZighcyl7cz17fTt3aGlsZSh0PU90LmV4ZWMoYSkpc1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1zW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYz9hOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09YyYmKGU9VFtlLnRvTG93ZXJDYXNlKCldPVRbZS50b0xvd2VyQ2FzZSgpXXx8ZSxiW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWMmJihoLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihjKUUuYWx3YXlzKGVbRS5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpeFt0XT1beFt0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8QztyZXR1cm4gaSYmaS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKHYucHJvbWlzZShFKSxoLnVybD0oKHR8fGgudXJsfHxDdC5ocmVmKSsiIikucmVwbGFjZShSdCxDdC5wcm90b2NvbCsiLy8iKSxoLnR5cGU9bi5tZXRob2R8fG4udHlwZXx8aC5tZXRob2R8fGgudHlwZSxoLmRhdGFUeXBlcz0oaC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKE0pfHxbIiJdLG51bGw9PWguY3Jvc3NEb21haW4pe2w9ci5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e2wuaHJlZj1oLnVybCxsLmhyZWY9bC5ocmVmLGguY3Jvc3NEb21haW49QnQucHJvdG9jb2wrIi8vIitCdC5ob3N0IT1sLnByb3RvY29sKyIvLyIrbC5ob3N0fWNhdGNoKGUpe2guY3Jvc3NEb21haW49ITB9fWlmKGguZGF0YSYmaC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBoLmRhdGEmJihoLmRhdGE9dy5wYXJhbShoLmRhdGEsaC50cmFkaXRpb25hbCkpLF90KEl0LGgsbixFKSxjKXJldHVybiBFOyhmPXcuZXZlbnQmJmguZ2xvYmFsKSYmMD09dy5hY3RpdmUrKyYmdy5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxoLnR5cGU9aC50eXBlLnRvVXBwZXJDYXNlKCksaC5oYXNDb250ZW50PSFNdC50ZXN0KGgudHlwZSksbz1oLnVybC5yZXBsYWNlKEx0LCIiKSxoLmhhc0NvbnRlbnQ/aC5kYXRhJiZoLnByb2Nlc3NEYXRhJiYwPT09KGguY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmKGguZGF0YT1oLmRhdGEucmVwbGFjZShxdCwiKyIpKTooZD1oLnVybC5zbGljZShvLmxlbmd0aCksaC5kYXRhJiYoaC5wcm9jZXNzRGF0YXx8InN0cmluZyI9PXR5cGVvZiBoLmRhdGEpJiYobys9KGt0LnRlc3Qobyk/IiYiOiI/IikraC5kYXRhLGRlbGV0ZSBoLmRhdGEpLCExPT09aC5jYWNoZSYmKG89by5yZXBsYWNlKEh0LCIkMSIpLGQ9KGt0LnRlc3Qobyk/IiYiOiI/IikrIl89IitFdCsrK2QpLGgudXJsPW8rZCksaC5pZk1vZGlmaWVkJiYody5sYXN0TW9kaWZpZWRbb10mJkUuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLHcubGFzdE1vZGlmaWVkW29dKSx3LmV0YWdbb10mJkUuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsdy5ldGFnW29dKSksKGguZGF0YSYmaC5oYXNDb250ZW50JiYhMSE9PWguY29udGVudFR5cGV8fG4uY29udGVudFR5cGUpJiZFLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaC5jb250ZW50VHlwZSksRS5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGguZGF0YVR5cGVzWzBdJiZoLmFjY2VwdHNbaC5kYXRhVHlwZXNbMF1dP2guYWNjZXB0c1toLmRhdGFUeXBlc1swXV0rKCIqIiE9PWguZGF0YVR5cGVzWzBdPyIsICIrJHQrIjsgcT0wLjAxIjoiIik6aC5hY2NlcHRzWyIqIl0pO2ZvcihwIGluIGguaGVhZGVycylFLnNldFJlcXVlc3RIZWFkZXIocCxoLmhlYWRlcnNbcF0pO2lmKGguYmVmb3JlU2VuZCYmKCExPT09aC5iZWZvcmVTZW5kLmNhbGwoZyxFLGgpfHxjKSlyZXR1cm4gRS5hYm9ydCgpO2lmKEM9ImFib3J0IixtLmFkZChoLmNvbXBsZXRlKSxFLmRvbmUoaC5zdWNjZXNzKSxFLmZhaWwoaC5lcnJvciksaT1fdChXdCxoLG4sRSkpe2lmKEUucmVhZHlTdGF0ZT0xLGYmJnkudHJpZ2dlcigiYWpheFNlbmQiLFtFLGhdKSxjKXJldHVybiBFO2guYXN5bmMmJmgudGltZW91dD4wJiYodT1lLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtFLmFib3J0KCJ0aW1lb3V0Iil9LGgudGltZW91dCkpO3RyeXtjPSExLGkuc2VuZChiLGspfWNhdGNoKGUpe2lmKGMpdGhyb3cgZTtrKC0xLGUpfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGsodCxuLHIscyl7dmFyIGwscCxkLGIsVCxDPW47Y3x8KGM9ITAsdSYmZS5jbGVhclRpbWVvdXQodSksaT12b2lkIDAsYT1zfHwiIixFLnJlYWR5U3RhdGU9dD4wPzQ6MCxsPXQ+PTIwMCYmdDwzMDB8fDMwND09PXQsciYmKGI9WHQoaCxFLHIpKSxiPVV0KGgsYixFLGwpLGw/KGguaWZNb2RpZmllZCYmKChUPUUuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSkmJih3Lmxhc3RNb2RpZmllZFtvXT1UKSwoVD1FLmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIikpJiYody5ldGFnW29dPVQpKSwyMDQ9PT10fHwiSEVBRCI9PT1oLnR5cGU/Qz0ibm9jb250ZW50IjozMDQ9PT10P0M9Im5vdG1vZGlmaWVkIjooQz1iLnN0YXRlLHA9Yi5kYXRhLGw9IShkPWIuZXJyb3IpKSk6KGQ9QywhdCYmQ3x8KEM9ImVycm9yIix0PDAmJih0PTApKSksRS5zdGF0dXM9dCxFLnN0YXR1c1RleHQ9KG58fEMpKyIiLGw/di5yZXNvbHZlV2l0aChnLFtwLEMsRV0pOnYucmVqZWN0V2l0aChnLFtFLEMsZF0pLEUuc3RhdHVzQ29kZSh4KSx4PXZvaWQgMCxmJiZ5LnRyaWdnZXIobD8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFtFLGgsbD9wOmRdKSxtLmZpcmVXaXRoKGcsW0UsQ10pLGYmJih5LnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW0UsaF0pLC0tdy5hY3RpdmV8fHcuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiBFfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdy5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHcuZ2V0KGUsdm9pZCAwLHQsInNjcmlwdCIpfX0pLHcuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLHQpe3dbdF09ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIGcobikmJihpPWl8fHIscj1uLG49dm9pZCAwKSx3LmFqYXgody5leHRlbmQoe3VybDplLHR5cGU6dCxkYXRhVHlwZTppLGRhdGE6bixzdWNjZXNzOnJ9LHcuaXNQbGFpbk9iamVjdChlKSYmZSkpfX0pLHcuX2V2YWxVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIHcuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sdy5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHRoaXNbMF0mJihnKGUpJiYoZT1lLmNhbGwodGhpc1swXSkpLHQ9dyhlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RFbGVtZW50Q2hpbGQpZT1lLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3codGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXcodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3codGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoZSkubm90KCJib2R5IikuZWFjaChmdW5jdGlvbigpe3codGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9fSksdy5leHByLnBzZXVkb3MuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiF3LmV4cHIucHNldWRvcy52aXNpYmxlKGUpfSx3LmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiEhKGUub2Zmc2V0V2lkdGh8fGUub2Zmc2V0SGVpZ2h0fHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0sdy5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgZS5YTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIgVnQ9ezA6MjAwLDEyMjM6MjA0fSxHdD13LmFqYXhTZXR0aW5ncy54aHIoKTtoLmNvcnM9ISFHdCYmIndpdGhDcmVkZW50aWFscyJpbiBHdCxoLmFqYXg9R3Q9ISFHdCx3LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24odCl7dmFyIG4scjtpZihoLmNvcnN8fEd0JiYhdC5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBhLHM9dC54aHIoKTtpZihzLm9wZW4odC50eXBlLHQudXJsLHQuYXN5bmMsdC51c2VybmFtZSx0LnBhc3N3b3JkKSx0LnhockZpZWxkcylmb3IoYSBpbiB0LnhockZpZWxkcylzW2FdPXQueGhyRmllbGRzW2FdO3QubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKHQubWltZVR5cGUpLHQuY3Jvc3NEb21haW58fGlbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGlbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoYSBpbiBpKXMuc2V0UmVxdWVzdEhlYWRlcihhLGlbYV0pO249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7biYmKG49cj1zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbmFib3J0PXMub250aW1lb3V0PXMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsImFib3J0Ij09PWU/cy5hYm9ydCgpOiJlcnJvciI9PT1lPyJudW1iZXIiIT10eXBlb2Ygcy5zdGF0dXM/bygwLCJlcnJvciIpOm8ocy5zdGF0dXMscy5zdGF0dXNUZXh0KTpvKFZ0W3Muc3RhdHVzXXx8cy5zdGF0dXMscy5zdGF0dXNUZXh0LCJ0ZXh0IiE9PShzLnJlc3BvbnNlVHlwZXx8InRleHQiKXx8InN0cmluZyIhPXR5cGVvZiBzLnJlc3BvbnNlVGV4dD97YmluYXJ5OnMucmVzcG9uc2V9Ont0ZXh0OnMucmVzcG9uc2VUZXh0fSxzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxzLm9ubG9hZD1uKCkscj1zLm9uZXJyb3I9cy5vbnRpbWVvdXQ9bigiZXJyb3IiKSx2b2lkIDAhPT1zLm9uYWJvcnQ/cy5vbmFib3J0PXI6cy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09cy5yZWFkeVN0YXRlJiZlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtuJiZyKCl9KX0sbj1uKCJhYm9ydCIpO3RyeXtzLnNlbmQodC5oYXNDb250ZW50JiZ0LmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKG4pdGhyb3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19KSx3LmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7ZS5jcm9zc0RvbWFpbiYmKGUuY29udGVudHMuc2NyaXB0PSExKX0pLHcuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiB3Lmdsb2JhbEV2YWwoZSksZX19fSksdy5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUuY2FjaGUmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiKX0pLHcuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKGksbyl7dD13KCI8c2NyaXB0PiIpLnByb3Aoe2NoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKCJsb2FkIGVycm9yIixuPWZ1bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJm8oImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxyLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIFl0PVtdLFF0PS8oPSlcPyg/PSZ8JCl8XD9cPy87dy5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPVl0LnBvcCgpfHx3LmV4cGFuZG8rIl8iK0V0Kys7cmV0dXJuIHRoaXNbZV09ITAsZX19KSx3LmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLGEscz0hMSE9PXQuanNvbnAmJihRdC50ZXN0KHQudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIHQuZGF0YSYmMD09PSh0LmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJlF0LnRlc3QodC5kYXRhKSYmImRhdGEiKTtpZihzfHwianNvbnAiPT09dC5kYXRhVHlwZXNbMF0pcmV0dXJuIGk9dC5qc29ucENhbGxiYWNrPWcodC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2sscz90W3NdPXRbc10ucmVwbGFjZShRdCwiJDEiK2kpOiExIT09dC5qc29ucCYmKHQudXJsKz0oa3QudGVzdCh0LnVybCk/IiYiOiI/IikrdC5qc29ucCsiPSIraSksdC5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIGF8fHcuZXJyb3IoaSsiIHdhcyBub3QgY2FsbGVkIiksYVswXX0sdC5kYXRhVHlwZXNbMF09Impzb24iLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7YT1hcmd1bWVudHN9LHIuYWx3YXlzKGZ1bmN0aW9uKCl7dm9pZCAwPT09bz93KGUpLnJlbW92ZVByb3AoaSk6ZVtpXT1vLHRbaV0mJih0Lmpzb25wQ2FsbGJhY2s9bi5qc29ucENhbGxiYWNrLFl0LnB1c2goaSkpLGEmJmcobykmJm8oYVswXSksYT1vPXZvaWQgMH0pLCJzY3JpcHQifSksaC5jcmVhdGVIVE1MRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT1yLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikuYm9keTtyZXR1cm4gZS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09ZS5jaGlsZE5vZGVzLmxlbmd0aH0oKSx3LnBhcnNlSFRNTD1mdW5jdGlvbihlLHQsbil7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybltdOyJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSk7dmFyIGksbyxhO3JldHVybiB0fHwoaC5jcmVhdGVIVE1MRG9jdW1lbnQ/KChpPSh0PXIuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPXIubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQoaSkpOnQ9ciksbz1BLmV4ZWMoZSksYT0hbiYmW10sbz9bdC5jcmVhdGVFbGVtZW50KG9bMV0pXToobz14ZShbZV0sdCxhKSxhJiZhLmxlbmd0aCYmdyhhKS5yZW1vdmUoKSx3Lm1lcmdlKFtdLG8uY2hpbGROb2RlcykpfSx3LmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPXRoaXMscz1lLmluZGV4T2YoIiAiKTtyZXR1cm4gcz4tMSYmKHI9dnQoZS5zbGljZShzKSksZT1lLnNsaWNlKDAscykpLGcodCk/KG49dCx0PXZvaWQgMCk6dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoaT0iUE9TVCIpLGEubGVuZ3RoPjAmJncuYWpheCh7dXJsOmUsdHlwZTppfHwiR0VUIixkYXRhVHlwZToiaHRtbCIsZGF0YTp0fSkuZG9uZShmdW5jdGlvbihlKXtvPWFyZ3VtZW50cyxhLmh0bWwocj93KCI8ZGl2PiIpLmFwcGVuZCh3LnBhcnNlSFRNTChlKSkuZmluZChyKTplKX0pLmFsd2F5cyhuJiZmdW5jdGlvbihlLHQpe2EuZWFjaChmdW5jdGlvbigpe24uYXBwbHkodGhpcyxvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9KX0pLHRoaXN9LHcuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7dy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHcuZXhwci5wc2V1ZG9zLmFuaW1hdGVkPWZ1bmN0aW9uKGUpe3JldHVybiB3LmdyZXAody50aW1lcnMsZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10LmVsZW19KS5sZW5ndGh9LHcub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGM9dy5jc3MoZSwicG9zaXRpb24iKSxmPXcoZSkscD17fTsic3RhdGljIj09PWMmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9Zi5vZmZzZXQoKSxvPXcuY3NzKGUsInRvcCIpLHU9dy5jc3MoZSwibGVmdCIpLChsPSgiYWJzb2x1dGUiPT09Y3x8ImZpeGVkIj09PWMpJiYobyt1KS5pbmRleE9mKCJhdXRvIik+LTEpPyhhPShyPWYucG9zaXRpb24oKSkudG9wLGk9ci5sZWZ0KTooYT1wYXJzZUZsb2F0KG8pfHwwLGk9cGFyc2VGbG9hdCh1KXx8MCksZyh0KSYmKHQ9dC5jYWxsKGUsbix3LmV4dGVuZCh7fSxzKSkpLG51bGwhPXQudG9wJiYocC50b3A9dC50b3Atcy50b3ArYSksbnVsbCE9dC5sZWZ0JiYocC5sZWZ0PXQubGVmdC1zLmxlZnQraSksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUscCk6Zi5jc3MocCl9fSx3LmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWU/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7dy5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciB0LG4scj10aGlzWzBdO2lmKHIpcmV0dXJuIHIuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KHQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7dG9wOnQudG9wK24ucGFnZVlPZmZzZXQsbGVmdDp0LmxlZnQrbi5wYWdlWE9mZnNldH0pOnt0b3A6MCxsZWZ0OjB9fSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09dy5jc3MociwicG9zaXRpb24iKSl0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt0PXRoaXMub2Zmc2V0KCksbj1yLm93bmVyRG9jdW1lbnQsZT1yLm9mZnNldFBhcmVudHx8bi5kb2N1bWVudEVsZW1lbnQ7d2hpbGUoZSYmKGU9PT1uLmJvZHl8fGU9PT1uLmRvY3VtZW50RWxlbWVudCkmJiJzdGF0aWMiPT09dy5jc3MoZSwicG9zaXRpb24iKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT13KGUpLm9mZnNldCgpKS50b3ArPXcuY3NzKGUsImJvcmRlclRvcFdpZHRoIiwhMCksaS5sZWZ0Kz13LmNzcyhlLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSl9cmV0dXJue3RvcDp0LnRvcC1pLnRvcC13LmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtdy5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGUmJiJzdGF0aWMiPT09dy5jc3MoZSwicG9zaXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxiZX0pfX0pLHcuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPSJwYWdlWU9mZnNldCI9PT10O3cuZm5bZV09ZnVuY3Rpb24ocil7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihlLHIsaSl7dmFyIG87aWYoeShlKT9vPWU6OT09PWUubm9kZVR5cGUmJihvPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PWkpcmV0dXJuIG8/b1t0XTplW3JdO28/by5zY3JvbGxUbyhuP28ucGFnZVhPZmZzZXQ6aSxuP2k6by5wYWdlWU9mZnNldCk6ZVtyXT1pfSxlLHIsYXJndW1lbnRzLmxlbmd0aCl9fSksdy5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsdCl7dy5jc3NIb29rc1t0XT1fZShoLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSxuKXtpZihuKXJldHVybiBuPUZlKGUsdCksV2UudGVzdChuKT93KGUpLnBvc2l0aW9uKClbdF0rInB4IjpufSl9KSx3LmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLHQpe3cuZWFjaCh7cGFkZGluZzoiaW5uZXIiK2UsY29udGVudDp0LCIiOiJvdXRlciIrZX0sZnVuY3Rpb24obixyKXt3LmZuW3JdPWZ1bmN0aW9uKGksbyl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aCYmKG58fCJib29sZWFuIiE9dHlwZW9mIGkpLHM9bnx8KCEwPT09aXx8ITA9PT1vPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKHQsbixpKXt2YXIgbztyZXR1cm4geSh0KT8wPT09ci5pbmRleE9mKCJvdXRlciIpP3RbImlubmVyIitlXTp0LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTo5PT09dC5ub2RlVHlwZT8obz10LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIrZV0sb1sic2Nyb2xsIitlXSx0LmJvZHlbIm9mZnNldCIrZV0sb1sib2Zmc2V0IitlXSxvWyJjbGllbnQiK2VdKSk6dm9pZCAwPT09aT93LmNzcyh0LG4scyk6dy5zdHlsZSh0LG4saSxzKX0sdCxhP2k6dm9pZCAwLGEpfX0pfSksdy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7dy5mblt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9fSksdy5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLHcuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KSx3LnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxnKGUpKXJldHVybiByPW8uY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHcuZ3VpZCsrLGl9LHcuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/dy5yZWFkeVdhaXQrKzp3LnJlYWR5KCEwKX0sdy5pc0FycmF5PUFycmF5LmlzQXJyYXksdy5wYXJzZUpTT049SlNPTi5wYXJzZSx3Lm5vZGVOYW1lPU4sdy5pc0Z1bmN0aW9uPWcsdy5pc1dpbmRvdz15LHcuY2FtZWxDYXNlPUcsdy50eXBlPXgsdy5ub3c9RGF0ZS5ub3csdy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9dy50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gd30pO3ZhciBKdD1lLmpRdWVyeSxLdD1lLiQ7cmV0dXJuIHcubm9Db25mbGljdD1mdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09dyYmKGUuJD1LdCksdCYmZS5qUXVlcnk9PT13JiYoZS5qUXVlcnk9SnQpLHd9LHR8fChlLmpRdWVyeT1lLiQ9dyksd30pOwo="}]},{"name":"Wanikani Open Framework","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https://(www|preview).wanikani.com//"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1569496792154,"data":{}},"enabled":false,"position":22,"file_url":"https://greasyfork.org/scripts/38582-wanikani-open-framework/code/Wanikani%20Open%20Framework.user.js","uuid":"7f924af5-f9b9-42ef-bb24-3855f9e901fb","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFdhbmlrYW5pIE9wZW4gRnJhbWV3b3JrCi8vIEBuYW1lc3BhY2UgICByZmluZGxleQovLyBAZGVzY3JpcHRpb24gRnJhbWV3b3JrIGZvciB3cml0aW5nIHNjcmlwdHMgZm9yIFdhbmlrYW5pCi8vIEB2ZXJzaW9uICAgICAxLjAuNTAKLy8gQGluY2x1ZGUgICAgIC9eaHR0cHM6Ly8od3d3fHByZXZpZXcpLndhbmlrYW5pLmNvbS8vCi8vIEBjb3B5cmlnaHQgICAyMDE4KywgUm9iaW4gRmluZGxleQovLyBAbGljZW5zZSAgICAgTUlUOyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi8vIEBydW4tYXQgICAgICBkb2N1bWVudC1zdGFydAovLyBAZ3JhbnQgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbihnbG9iYWwpIHsKCSd1c2Ugc3RyaWN0JzsKCgkvKiBlc2xpbnQgbm8tbXVsdGktc3BhY2VzOiBvZmYgKi8KCS8qIGdsb2JhbHMgd2tvZiAqLwoKCXZhciB2ZXJzaW9uID0gJzEuMC41MCc7Cgl2YXIgaWdub3JlX21pc3NpbmdfaW5kZXhlZGRiID0gZmFsc2U7CgoJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBTdXBwb3J0ZWQgTW9kdWxlcwoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCXZhciBzdXBwb3J0ZWRfbW9kdWxlcyA9IHsKCQlBcGl2MjogICAgeyB1cmw6ICdodHRwczovL2dyZWFzeWZvcmsub3JnL3NjcmlwdHMvMzg1ODEtd2FuaWthbmktb3Blbi1mcmFtZXdvcmstYXBpdjItbW9kdWxlL2NvZGUvV2FuaWthbmklMjBPcGVuJTIwRnJhbWV3b3JrJTIwLSUyMEFwaXYyJTIwbW9kdWxlLmpzP3ZlcnNpb249NzQ3ODY2J30sCgkJSXRlbURhdGE6IHsgdXJsOiAnaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzM4NTgwLXdhbmlrYW5pLW9wZW4tZnJhbWV3b3JrLWl0ZW1kYXRhLW1vZHVsZS9jb2RlL1dhbmlrYW5pJTIwT3BlbiUyMEZyYW1ld29yayUyMC0lMjBJdGVtRGF0YSUyMG1vZHVsZS5qcz92ZXJzaW9uPTc2Nzg2OCd9LAoJCU1lbnU6ICAgICB7IHVybDogJ2h0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy8zODU3OC13YW5pa2FuaS1vcGVuLWZyYW1ld29yay1tZW51LW1vZHVsZS9jb2RlL1dhbmlrYW5pJTIwT3BlbiUyMEZyYW1ld29yayUyMC0lMjBNZW51JTIwbW9kdWxlLmpzP3ZlcnNpb249NzQ1Mzg4J30sCgkJUHJvZ3Jlc3M6IHsgdXJsOiAnaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzM4NTc3LXdhbmlrYW5pLW9wZW4tZnJhbWV3b3JrLXByb2dyZXNzLW1vZHVsZS9jb2RlL1dhbmlrYW5pJTIwT3BlbiUyMEZyYW1ld29yayUyMC0lMjBQcm9ncmVzcyUyMG1vZHVsZS5qcz92ZXJzaW9uPTYwMTQ3Myd9LAoJCVNldHRpbmdzOiB7IHVybDogJ2h0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy8zODU3Ni13YW5pa2FuaS1vcGVuLWZyYW1ld29yay1zZXR0aW5ncy1tb2R1bGUvY29kZS9XYW5pa2FuaSUyME9wZW4lMjBGcmFtZXdvcmslMjAtJTIwU2V0dGluZ3MlMjBtb2R1bGUuanM/dmVyc2lvbj02MDc4NzEnfSwKCX07CgoJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBQdWJsaXNoZWQgaW50ZXJmYWNlCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJdmFyIHB1Ymxpc2hlZF9pbnRlcmZhY2UgPSB7CgkJaW5jbHVkZTogaW5jbHVkZSwgICAgICAgICAgICAgIC8vIGluY2x1ZGUobW9kdWxlX2xpc3QpICAgICAgICA9PiBQcm9taXNlCgkJcmVhZHk6ICAgcmVhZHksICAgICAgICAgICAgICAgIC8vIHJlYWR5KG1vZHVsZV9saXN0KSAgICAgICAgICA9PiBQcm9taXNlCgoJCWxvYWRfZmlsZTogICBsb2FkX2ZpbGUsICAgICAgICAvLyBsb2FkX2ZpbGUodXJsLCB1c2VfY2FjaGUpICAgPT4gUHJvbWlzZQoJCWxvYWRfY3NzOiAgICBsb2FkX2NzcywgICAgICAgICAvLyBsb2FkX2Nzcyh1cmwsIHVzZV9jYWNoZSkgICAgPT4gUHJvbWlzZQoJCWxvYWRfc2NyaXB0OiBsb2FkX3NjcmlwdCwgICAgICAvLyBsb2FkX3NjcmlwdCh1cmwsIHVzZV9jYWNoZSkgPT4gUHJvbWlzZQoKCQlmaWxlX2NhY2hlOiB7CgkJCWRpcjogICAge30sICAgICAgICAgICAgICAgIC8vIE9iamVjdCBjb250YWluaW5nIGRpcmVjdG9yeSBvZiBmaWxlcy4KCQkJbHM6ICAgICBmaWxlX2NhY2hlX2xpc3QsICAgLy8gbHMoKQoJCQljbGVhcjogIGZpbGVfY2FjaGVfY2xlYXIsICAvLyBjbGVhcigpICAgICAgICAgICAgID0+IFByb21pc2UKCQkJZGVsZXRlOiBmaWxlX2NhY2hlX2RlbGV0ZSwgLy8gZGVsZXRlKG5hbWUpICAgICAgICA9PiBQcm9taXNlCgkJCWZsdXNoOiAgZmlsZV9jYWNoZV9mbHVzaCwgIC8vIGZsdXNoKCkgICAgICAgICAgICAgPT4gUHJvbWlzZQoJCQlsb2FkOiAgIGZpbGVfY2FjaGVfbG9hZCwgICAvLyBsb2FkKG5hbWUpICAgICAgICAgID0+IFByb21pc2UKCQkJc2F2ZTogICBmaWxlX2NhY2hlX3NhdmUsICAgLy8gc2F2ZShuYW1lLCBjb250ZW50KSA9PiBQcm9taXNlCgkJCW5vX2NhY2hlOmZpbGVfbm9jYWNoZSwgICAgIC8vIG5vX2NhY2hlKG1vZHVsZXMpCgkJfSwKCgkJb246ICAgICAgd2FpdF9ldmVudCwgICAgICAgICAgIC8vIG9uKGV2ZW50LCBjYWxsYmFjaykKCQl0cmlnZ2VyOiB0cmlnZ2VyX2V2ZW50LCAgICAgICAgLy8gdHJpZ2dlcihldmVudFssIGRhdGExWywgZGF0YTJbLCAuLi5dXV0pCgoJCWdldF9zdGF0ZTogIGdldF9zdGF0ZSwgICAgICAgICAvLyBnZXQoc3RhdGVfdmFyKQoJCXNldF9zdGF0ZTogIHNldF9zdGF0ZSwgICAgICAgICAvLyBzZXQoc3RhdGVfdmFyLCB2YWx1ZSkKCQl3YWl0X3N0YXRlOiB3YWl0X3N0YXRlLCAgICAgICAgLy8gd2FpdChzdGF0ZV92YXIsIHZhbHVlWywgY2FsbGJhY2tbLCBwZXJzaXN0ZW50XV0pID0+IGlmIG5vIGNhbGxiYWNrLCByZXR1cm4gb25lLXNob3QgUHJvbWlzZQoKCQl2ZXJzaW9uOiB7CgkJCXZhbHVlOiB2ZXJzaW9uLAoJCQljb21wYXJlX3RvOiBjb21wYXJlX3RvLCAgICAvLyBjb21wYXJlX3ZlcnNpb24odmVyc2lvbikKCQl9Cgl9OwoKCXB1Ymxpc2hlZF9pbnRlcmZhY2Uuc3VwcG9ydF9maWxlcyA9IHsKCQknanF1ZXJ5X3VpLmpzJzogJ2h0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5dWkvMS4xMi4xL2pxdWVyeS11aS5taW4uanMnLAoJCSdqcXVpX3drbWFpbi5jc3MnOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3JmaW5kbGV5L3dhbmlrYW5pLW9wZW4tZnJhbWV3b3JrLzE1NTBhZjgzODNlYzI4YWQ0MDZjZjQwMWFlZTJkZTRjNTI0NDZmNmMvanF1aS13a21haW4uY3NzJywKCX07CgoJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglmdW5jdGlvbiBzcGxpdF9saXN0KHN0cikge3JldHVybiBzdHIucmVwbGFjZSgvXlxzK3xccyooLClccyp8XHMrJC9nLCAnJDEnKS5zcGxpdCgnLCcpLmZpbHRlcihmdW5jdGlvbihuYW1lKSB7cmV0dXJuIChuYW1lLmxlbmd0aCA+IDApO30pO30KCWZ1bmN0aW9uIHByb21pc2UoKXt2YXIgYSxiLGM9bmV3IFByb21pc2UoZnVuY3Rpb24oZCxlKXthPWQ7Yj1lO30pO2MucmVzb2x2ZT1hO2MucmVqZWN0PWI7cmV0dXJuIGM7fQoKCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIENvbXBhcmUgdGhlIGZyYW1ld29yayB2ZXJzaW9uIGFnYWluc3QgYSBzcGVjaWZpYyB2ZXJzaW9uLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGNvbXBhcmVfdG8oY2xpZW50X3ZlcnNpb24pIHsKCQl2YXIgY2xpZW50X3ZlciA9IGNsaWVudF92ZXJzaW9uLnNwbGl0KCcuJykubWFwKGQgPT4gTnVtYmVyKGQpKTsKCQl2YXIgd2tvZl92ZXIgPSB2ZXJzaW9uLnNwbGl0KCcuJykubWFwKGQgPT4gTnVtYmVyKGQpKTsKCQl2YXIgbGVuID0gTWF0aC5tYXgoY2xpZW50X3Zlci5sZW5ndGgsIHdrb2ZfdmVyLmxlbmd0aCk7CgkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgewoJCQl2YXIgYSA9IGNsaWVudF92ZXJbaWR4XSB8fCAwOwoJCQl2YXIgYiA9IHdrb2ZfdmVyW2lkeF0gfHwgMDsKCQkJaWYgKGEgPT09IGIpIGNvbnRpbnVlOwoJCQlpZiAoYSA8IGIpIHJldHVybiAnbmV3ZXInOwoJCQlyZXR1cm4gJ29sZGVyJzsKCQl9CgkJcmV0dXJuICdzYW1lJzsKCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSW5jbHVkZSBhIGxpc3Qgb2YgbW9kdWxlcy4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgl2YXIgaW5jbHVkZV9wcm9taXNlcyA9IHt9OwoKCWZ1bmN0aW9uIGluY2x1ZGUobW9kdWxlX2xpc3QpIHsKCQlpZiAod2tvZi5nZXRfc3RhdGUoJ3drb2Yud2tvZicpICE9PSAncmVhZHknKSB7CgkJCXJldHVybiB3a29mLnJlYWR5KCd3a29mJykudGhlbihmdW5jdGlvbigpe3JldHVybiB3a29mLmluY2x1ZGUobW9kdWxlX2xpc3QpO30pOwoJCX0KCQl2YXIgaW5jbHVkZV9wcm9taXNlID0gcHJvbWlzZSgpOwoJCXZhciBtb2R1bGVfbmFtZXMgPSBzcGxpdF9saXN0KG1vZHVsZV9saXN0KTsKCQl2YXIgc2NyaXB0X2NudCA9IG1vZHVsZV9uYW1lcy5sZW5ndGg7CgkJaWYgKHNjcmlwdF9jbnQgPT09IDApIHsKCQkJaW5jbHVkZV9wcm9taXNlLnJlc29sdmUoe2xvYWRlZDpbXSwgZmFpbGVkOltdfSk7CgkJCXJldHVybiBpbmNsdWRlX3Byb21pc2U7CgkJfQoKCQl2YXIgZG9uZV9jbnQgPSAwOwoJCXZhciBsb2FkZWQgPSBbXSwgZmFpbGVkID0gW107CgkJdmFyIG5vX2NhY2hlID0gc3BsaXRfbGlzdChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2tvZi5pbmNsdWRlLm5vY2FjaGUnKSB8fCAnJyk7CgkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbW9kdWxlX25hbWVzLmxlbmd0aDsgaWR4KyspIHsKCQkJdmFyIG1vZHVsZV9uYW1lID0gbW9kdWxlX25hbWVzW2lkeF07CgkJCXZhciBtb2R1bGUgPSBzdXBwb3J0ZWRfbW9kdWxlc1ttb2R1bGVfbmFtZV07CgkJCWlmICghbW9kdWxlKSB7CgkJCQlmYWlsZWQucHVzaCh7bmFtZTptb2R1bGVfbmFtZSwgdXJsOnVuZGVmaW5lZH0pOwoJCQkJY2hlY2tfZG9uZSgpOwoJCQkJY29udGludWU7CgkJCX0KCQkJdmFyIGF3YWl0X2xvYWQgPSBpbmNsdWRlX3Byb21pc2VzW21vZHVsZV9uYW1lXTsKCQkJdmFyIHVzZV9jYWNoZSA9IChub19jYWNoZS5pbmRleE9mKG1vZHVsZV9uYW1lKSA8IDApICYmIChub19jYWNoZS5pbmRleE9mKCcqJykgPCAwKTsKCQkJaWYgKCF1c2VfY2FjaGUpIGZpbGVfY2FjaGVfZGVsZXRlKG1vZHVsZS51cmwpOwoJCQlpZiAoYXdhaXRfbG9hZCA9PT0gdW5kZWZpbmVkKSBpbmNsdWRlX3Byb21pc2VzW21vZHVsZV9uYW1lXSA9IGF3YWl0X2xvYWQgPSBsb2FkX3NjcmlwdChtb2R1bGUudXJsLCB1c2VfY2FjaGUpOwoJCQlhd2FpdF9sb2FkLnRoZW4ocHVzaF9sb2FkZWQsIHB1c2hfZmFpbGVkKTsKCQl9CgoJCXJldHVybiBpbmNsdWRlX3Byb21pc2U7CgoJCWZ1bmN0aW9uIHB1c2hfbG9hZGVkKHVybCkgewoJCQlsb2FkZWQucHVzaCh1cmwpOwoJCQljaGVja19kb25lKCk7CgkJfQoKCQlmdW5jdGlvbiBwdXNoX2ZhaWxlZCh1cmwpIHsKCQkJZmFpbGVkLnB1c2godXJsKTsKCQkJY2hlY2tfZG9uZSgpOwoJCX0KCgkJZnVuY3Rpb24gY2hlY2tfZG9uZSgpIHsKCQkJaWYgKCsrZG9uZV9jbnQgPCBzY3JpcHRfY250KSByZXR1cm47CgkJCWlmIChmYWlsZWQubGVuZ3RoID09PSAwKSBpbmNsdWRlX3Byb21pc2UucmVzb2x2ZSh7bG9hZGVkOmxvYWRlZCwgZmFpbGVkOmZhaWxlZH0pOwoJCQllbHNlIGluY2x1ZGVfcHJvbWlzZS5yZWplY3Qoe2Vycm9yOidGYWlsdXJlIGxvYWRpbmcgbW9kdWxlJywgbG9hZGVkOmxvYWRlZCwgZmFpbGVkOmZhaWxlZH0pOwoJCX0KCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gV2FpdCBmb3IgYWxsIG1vZHVsZXMgdG8gcmVwb3J0IHRoYXQgdGhleSBhcmUgcmVhZHkKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiByZWFkeShtb2R1bGVfbGlzdCkgewoJCXZhciBtb2R1bGVfbmFtZXMgPSBzcGxpdF9saXN0KG1vZHVsZV9saXN0KTsKCgkJdmFyIHJlYWR5X3Byb21pc2VzID0gWyBdOwoJCWZvciAodmFyIGlkeCBpbiBtb2R1bGVfbmFtZXMpIHsKCQkJdmFyIG1vZHVsZV9uYW1lID0gbW9kdWxlX25hbWVzW2lkeF07CgkJCXJlYWR5X3Byb21pc2VzLnB1c2god2FpdF9zdGF0ZSgnd2tvZi4nICsgbW9kdWxlX25hbWUsICdyZWFkeScpKTsKCQl9CgoJCWlmIChyZWFkeV9wcm9taXNlcy5sZW5ndGggPT09IDApIHsKCQkJcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwoJCX0gZWxzZSBpZiAocmVhZHlfcHJvbWlzZXMubGVuZ3RoID09PSAxKSB7CgkJCXJldHVybiByZWFkeV9wcm9taXNlc1swXTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gUHJvbWlzZS5hbGwocmVhZHlfcHJvbWlzZXMpOwoJCX0KCX0KCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIExvYWQgYSBmaWxlIGFzeW5jaHJvbm91c2x5LCBhbmQgcGFzcyB0aGUgZmlsZSBhcyByZXNvbHZlZCBQcm9taXNlIGRhdGEuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gbG9hZF9maWxlKHVybCwgdXNlX2NhY2hlKSB7CgkJdmFyIGZldGNoX3Byb21pc2UgPSBwcm9taXNlKCk7CgkJdmFyIG5vX2NhY2hlID0gc3BsaXRfbGlzdChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2tvZi5sb2FkX2ZpbGUubm9jYWNoZScpIHx8ICcnKTsKCQlpZiAobm9fY2FjaGUuaW5kZXhPZih1cmwpID49IDAgfHwgbm9fY2FjaGUuaW5kZXhPZignKicpID49IDApIHVzZV9jYWNoZSA9IGZhbHNlOwoJCWlmICh1c2VfY2FjaGUgPT09IHRydWUpIHsKCQkJcmV0dXJuIGZpbGVfY2FjaGVfbG9hZCh1cmwsIHVzZV9jYWNoZSkuY2F0Y2goZmV0Y2hfdXJsKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gZmV0Y2hfdXJsKCk7CgkJfQoKCQkvLyBSZXRyaWV2ZSBmaWxlIGZyb20gc2VydmVyCgkJZnVuY3Rpb24gZmV0Y2hfdXJsKCl7CgkJCXZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgkJCXJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc19yZXN1bHQ7CgkJCXJlcXVlc3Qub3BlbignR0VUJywgdXJsLCB0cnVlKTsKCQkJcmVxdWVzdC5zZW5kKCk7CgkJCXJldHVybiBmZXRjaF9wcm9taXNlOwoJCX0KCgkJZnVuY3Rpb24gcHJvY2Vzc19yZXN1bHQoZXZlbnQpewoJCQlpZiAoZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgIT09IDQpIHJldHVybjsKCQkJaWYgKGV2ZW50LnRhcmdldC5zdGF0dXMgPj0gNDAwIHx8IGV2ZW50LnRhcmdldC5zdGF0dXMgPT09IDApIHJldHVybiBmZXRjaF9wcm9taXNlLnJlamVjdChldmVudC50YXJnZXQuc3RhdHVzKTsKCQkJaWYgKHVzZV9jYWNoZSkgewoJCQkJZmlsZV9jYWNoZV9zYXZlKHVybCwgZXZlbnQudGFyZ2V0LnJlc3BvbnNlKQoJCQkJLnRoZW4oZmV0Y2hfcHJvbWlzZS5yZXNvbHZlLmJpbmQobnVsbCxldmVudC50YXJnZXQucmVzcG9uc2UpKTsKCQkJfSBlbHNlIHsKCQkJCWZldGNoX3Byb21pc2UucmVzb2x2ZShldmVudC50YXJnZXQucmVzcG9uc2UpOwoJCQl9CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBMb2FkIGFuZCBpbnN0YWxsIGEgc3BlY2lmaWMgZmlsZSB0eXBlIGludG8gdGhlIERPTS4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBsb2FkX2FuZF9hcHBlbmQodXJsLCB0YWdfbmFtZSwgbG9jYXRpb24sIHVzZV9jYWNoZSkgewoJCXVybCA9IHVybC5yZXBsYWNlKC8iL2csJ1wnJyk7CgkJaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFnX25hbWUrJ1t1aWQ9IicrdXJsKyciXScpICE9PSBudWxsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CgkJcmV0dXJuIGxvYWRfZmlsZSh1cmwsIHVzZV9jYWNoZSkudGhlbihhcHBlbmRfdG9fdGFnKTsKCgkJZnVuY3Rpb24gYXBwZW5kX3RvX3RhZyhjb250ZW50KSB7CgkJCXZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ19uYW1lKTsKCQkJdGFnLmlubmVySFRNTCA9IGNvbnRlbnQ7CgkJCXRhZy5zZXRBdHRyaWJ1dGUoJ3VpZCcsIHVybCk7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb24pLmFwcGVuZENoaWxkKHRhZyk7CgkJCXJldHVybiB1cmw7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBMb2FkIGFuZCBpbnN0YWxsIGEgQ1NTIGZpbGUuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gbG9hZF9jc3ModXJsLCB1c2VfY2FjaGUpIHsKCQlyZXR1cm4gbG9hZF9hbmRfYXBwZW5kKHVybCwgJ3N0eWxlJywgJ2hlYWQnLCB1c2VfY2FjaGUpOwoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBMb2FkIGFuZCBpbnN0YWxsIEphdmFzY3JpcHQuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gbG9hZF9zY3JpcHQodXJsLCB1c2VfY2FjaGUpIHsKCQlyZXR1cm4gbG9hZF9hbmRfYXBwZW5kKHVybCwgJ3NjcmlwdCcsICdib2R5JywgdXNlX2NhY2hlKTsKCX0KCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJdmFyIHN0YXRlX2xpc3RlbmVycyA9IHt9OwoJdmFyIHN0YXRlX3ZhbHVlcyA9IHt9OwoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBHZXQgdGhlIHZhbHVlIG9mIGEgc3RhdGUgdmFyaWFibGUsIGFuZCBub3RpZnkgbGlzdGVuZXJzLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGdldF9zdGF0ZShzdGF0ZV92YXIpIHsKCQlyZXR1cm4gc3RhdGVfdmFsdWVzW3N0YXRlX3Zhcl07Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIFNldCB0aGUgdmFsdWUgb2YgYSBzdGF0ZSB2YXJpYWJsZSwgYW5kIG5vdGlmeSBsaXN0ZW5lcnMuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gc2V0X3N0YXRlKHN0YXRlX3ZhciwgdmFsdWUpIHsKCQl2YXIgb2xkX3ZhbHVlID0gc3RhdGVfdmFsdWVzW3N0YXRlX3Zhcl07CgkJaWYgKG9sZF92YWx1ZSA9PT0gdmFsdWUpIHJldHVybjsKCQlzdGF0ZV92YWx1ZXNbc3RhdGVfdmFyXSA9IHZhbHVlOwoKCQkvLyBEbyBsaXN0ZW5lciBjYWxsYmFja3MsIGFuZCByZW1vdmUgbm9uLXBlcnNpc3RlbnQgbGlzdGVuZXJzCgkJdmFyIGxpc3RlbmVycyA9IHN0YXRlX2xpc3RlbmVyc1tzdGF0ZV92YXJdOwoJCXZhciBwZXJzaXN0ZW50X2xpc3RlbmVycyA9IFsgXTsKCQlmb3IgKHZhciBpZHggaW4gbGlzdGVuZXJzKSB7CgkJCXZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpZHhdOwoJCQl2YXIga2VlcCA9IHRydWU7CgkJCWlmIChsaXN0ZW5lci52YWx1ZSA9PT0gdmFsdWUgfHwgbGlzdGVuZXIudmFsdWUgPT09ICcqJykgewoJCQkJa2VlcCA9IGxpc3RlbmVyLnBlcnNpc3RlbnQ7CgkJCQl0cnkgewoJCQkJCWxpc3RlbmVyLmNhbGxiYWNrKHZhbHVlLCBvbGRfdmFsdWUpOwoJCQkJfSBjYXRjaCAoZSkge30KCQkJfQoJCQlpZiAoa2VlcCkgcGVyc2lzdGVudF9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7CgkJfQoJCXN0YXRlX2xpc3RlbmVyc1tzdGF0ZV92YXJdID0gcGVyc2lzdGVudF9saXN0ZW5lcnM7Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIFdoZW4gc3RhdGUgb2Ygc3RhdGVfdmFyIGNoYW5nZXMgdG8gdmFsdWUsIGNhbGwgY2FsbGJhY2suCgkvLyBJZiBwZXJzaXN0ZW50ID09PSB0cnVlLCBjb250aW51ZSBsaXN0ZW5pbmcgZm9yIGFkZGl0aW9uYWwgc3RhdGUgY2hhbmdlcwoJLy8gSWYgdmFsdWUgaXMgJyonLCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBmb3IgYWxsIHN0YXRlIGNoYW5nZXMuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gd2FpdF9zdGF0ZShzdGF0ZV92YXIsIHZhbHVlLCBjYWxsYmFjaywgcGVyc2lzdGVudCkgewoJCXZhciBwcm9taXNlOwoJCWlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7CgkJCXByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKCQkJCWNhbGxiYWNrID0gcmVzb2x2ZTsKCQkJfSk7CgkJfQoJCWlmIChzdGF0ZV9saXN0ZW5lcnNbc3RhdGVfdmFyXSA9PT0gdW5kZWZpbmVkKSBzdGF0ZV9saXN0ZW5lcnNbc3RhdGVfdmFyXSA9IFsgXTsKCQlwZXJzaXN0ZW50ID0gKHBlcnNpc3RlbnQgPT09IHRydWUpOwoJCXZhciBjdXJyZW50X3ZhbHVlID0gc3RhdGVfdmFsdWVzW3N0YXRlX3Zhcl07CgkJaWYgKHBlcnNpc3RlbnQgfHwgdmFsdWUgIT09IGN1cnJlbnRfdmFsdWUpIHN0YXRlX2xpc3RlbmVyc1tzdGF0ZV92YXJdLnB1c2goe2NhbGxiYWNrOmNhbGxiYWNrLCBwZXJzaXN0ZW50OnBlcnNpc3RlbnQsIHZhbHVlOnZhbHVlfSk7CgoJCS8vIElmIGl0J3MgYWxyZWFkeSBhdCB0aGUgZGVzaXJlZCBzdGF0ZSwgY2FsbCB0aGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkuCgkJaWYgKHZhbHVlID09PSBjdXJyZW50X3ZhbHVlKSB7CgkJCXRyeSB7CgkJCQljYWxsYmFjayh2YWx1ZSwgY3VycmVudF92YWx1ZSk7CgkJCX0gY2F0Y2ggKGVycikge30KCQl9CgkJcmV0dXJuIHByb21pc2U7Cgl9CgkvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCXZhciBldmVudF9saXN0ZW5lcnMgPSB7fTsKCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gRmlyZSBhbiBldmVudCwgd2hpY2ggdGhlbiBjYWxscyBjYWxsYmFja3MgZm9yIGFueSBsaXN0ZW5lcnMuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gdHJpZ2dlcl9ldmVudChldmVudCkgewoJCXZhciBsaXN0ZW5lcnMgPSBldmVudF9saXN0ZW5lcnNbZXZlbnRdOwoJCWlmIChsaXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuOwoJCXZhciBhcmdzID0gW107CgkJQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJncyxhcmd1bWVudHMpOwoJCWFyZ3Muc2hpZnQoKTsKCQlmb3IgKHZhciBpZHggaW4gbGlzdGVuZXJzKSB0cnkgewoJCQlsaXN0ZW5lcnNbaWR4XS5hcHBseShudWxsLGFyZ3MpOwoJCX0gY2F0Y2ggKGVycikge30KCQlyZXR1cm4gZ2xvYmFsLndrb2Y7Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIEFkZCBhIGxpc3RlbmVyIGZvciBhbiBldmVudC4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiB3YWl0X2V2ZW50KGV2ZW50LCBjYWxsYmFjaykgewoJCWlmIChldmVudF9saXN0ZW5lcnNbZXZlbnRdID09PSB1bmRlZmluZWQpIGV2ZW50X2xpc3RlbmVyc1tldmVudF0gPSBbXTsKCQlldmVudF9saXN0ZW5lcnNbZXZlbnRdLnB1c2goY2FsbGJhY2spOwoJCXJldHVybiBnbG9iYWwud2tvZjsKCX0KCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJdmFyIGZpbGVfY2FjaGVfb3Blbl9wcm9taXNlOwoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBPcGVuIHRoZSBmaWxlX2NhY2hlIGRhdGFiYXNlIChvciByZXR1cm4gaGFuZGxlIGlmIG9wZW4pLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGZpbGVfY2FjaGVfb3BlbigpIHsKCQlpZiAoZmlsZV9jYWNoZV9vcGVuX3Byb21pc2UpIHJldHVybiBmaWxlX2NhY2hlX29wZW5fcHJvbWlzZTsKCQl2YXIgb3Blbl9wcm9taXNlID0gcHJvbWlzZSgpOwoJCWZpbGVfY2FjaGVfb3Blbl9wcm9taXNlID0gb3Blbl9wcm9taXNlOwoJCXZhciByZXF1ZXN0OwoJCXJlcXVlc3QgPSBpbmRleGVkREIub3Blbignd2tvZi5maWxlX2NhY2hlJyk7CgkJcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSB1cGdyYWRlX2RiOwoJCXJlcXVlc3Qub25zdWNjZXNzID0gZ2V0X2RpcjsKCQlyZXF1ZXN0Lm9uZXJyb3IgPSBlcnJvcjsKCQlyZXR1cm4gb3Blbl9wcm9taXNlOwoKCQlmdW5jdGlvbiBlcnJvcigpIHsKCQkJY29uc29sZS5sb2coJ2luZGV4ZWREQiBjb3VsZCBub3Qgb3BlbiEnKTsKCQkJd2tvZi5maWxlX2NhY2hlLmRpciA9IHt9OwoJCQlpZiAoaWdub3JlX21pc3NpbmdfaW5kZXhlZGRiKSB7CgkJCQlvcGVuX3Byb21pc2UucmVzb2x2ZShudWxsKTsKCQkJfSBlbHNlIHsKCQkJCW9wZW5fcHJvbWlzZS5yZWplY3QoKTsKCQkJfQoJCX0KCgkJZnVuY3Rpb24gdXBncmFkZV9kYihldmVudCl7CgkJCXZhciBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CgkJCXZhciBzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmaWxlcycsIHtrZXlQYXRoOiduYW1lJ30pOwoJCX0KCgkJZnVuY3Rpb24gZ2V0X2RpcihldmVudCl7CgkJCXZhciBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CgkJCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmaWxlcycsICdyZWFkb25seScpOwoJCQl2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnZmlsZXMnKTsKCQkJdmFyIHJlcXVlc3QgPSBzdG9yZS5nZXQoJ1tkaXJdJyk7CgkJCXJlcXVlc3Qub25zdWNjZXNzID0gcHJvY2Vzc19kaXI7CgkJCXRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBvcGVuX3Byb21pc2UucmVzb2x2ZS5iaW5kKG51bGwsIGRiKTsKCQkJb3Blbl9wcm9taXNlLnRoZW4oc2V0VGltZW91dC5iaW5kKG51bGwsIGZpbGVfY2FjaGVfY2xlYW51cCwgMTAwMDApKTsKCQl9CgoJCWZ1bmN0aW9uIHByb2Nlc3NfZGlyKGV2ZW50KXsKCQkJaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQgPT09IHVuZGVmaW5lZCkgewoJCQkJd2tvZi5maWxlX2NhY2hlLmRpciA9IHt9OwoJCQl9IGVsc2UgewoJCQkJd2tvZi5maWxlX2NhY2hlLmRpciA9IEpTT04ucGFyc2UoZXZlbnQudGFyZ2V0LnJlc3VsdC5jb250ZW50KTsKCQkJfQoJCX0KCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gTGlzdHMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGVfY2FjaGUuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gZmlsZV9jYWNoZV9saXN0KCkgewoJCWNvbnNvbGUubG9nKE9iamVjdC5rZXlzKHdrb2YuZmlsZV9jYWNoZS5kaXIpLnNvcnQoKS5qb2luKCdcbicpKTsKCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gQ2xlYXIgdGhlIGZpbGVfY2FjaGUgZGF0YWJhc2UuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gZmlsZV9jYWNoZV9jbGVhcigpIHsKCQlyZXR1cm4gZmlsZV9jYWNoZV9vcGVuKCkudGhlbihjbGVhcik7CgoJCWZ1bmN0aW9uIGNsZWFyKGRiKSB7CgkJCXZhciBjbGVhcl9wcm9taXNlID0gcHJvbWlzZSgpOwoJCQl3a29mLmZpbGVfY2FjaGUuZGlyID0ge307CgkJCWlmIChkYiA9PT0gbnVsbCkgcmV0dXJuIGNsZWFyX3Byb21pc2UucmVzb2x2ZSgpOwoJCQl2YXIgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignZmlsZXMnLCAncmVhZHdyaXRlJyk7CgkJCXZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdmaWxlcycpOwoJCQlzdG9yZS5jbGVhcigpOwoJCQl0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gY2xlYXJfcHJvbWlzZS5yZXNvbHZlOwoJCX0KCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gRGVsZXRlIGEgZmlsZSBmcm9tIHRoZSBmaWxlX2NhY2hlIGRhdGFiYXNlLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGZpbGVfY2FjaGVfZGVsZXRlKHBhdHRlcm4pIHsKCQlyZXR1cm4gZmlsZV9jYWNoZV9vcGVuKCkudGhlbihkZWwpOwoKCQlmdW5jdGlvbiBkZWwoZGIpIHsKCQkJdmFyIGRlbF9wcm9taXNlID0gcHJvbWlzZSgpOwoJCQlpZiAoZGIgPT09IG51bGwpIHJldHVybiBkZWxfcHJvbWlzZS5yZXNvbHZlKCk7CgkJCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmaWxlcycsICdyZWFkd3JpdGUnKTsKCQkJdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2ZpbGVzJyk7CgkJCXZhciBmaWxlcyA9IE9iamVjdC5rZXlzKHdrb2YuZmlsZV9jYWNoZS5kaXIpLmZpbHRlcihmdW5jdGlvbihmaWxlKXsKCQkJCWlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7CgkJCQkJcmV0dXJuIGZpbGUubWF0Y2gocGF0dGVybikgIT09IG51bGw7CgkJCQl9IGVsc2UgewoJCQkJCXJldHVybiAoZmlsZSA9PT0gcGF0dGVybik7CgkJCQl9CgkJCX0pOwoJCQlmaWxlcy5mb3JFYWNoKGZ1bmN0aW9uKGZpbGUpewoJCQkJc3RvcmUuZGVsZXRlKGZpbGUpOwoJCQkJZGVsZXRlIHdrb2YuZmlsZV9jYWNoZS5kaXJbZmlsZV07CgkJCX0pOwoJCQlmaWxlX2NhY2hlX2Rpcl9zYXZlKCk7CgkJCXRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBkZWxfcHJvbWlzZS5yZXNvbHZlLmJpbmQobnVsbCwgZmlsZXMpOwoJCQlyZXR1cm4gZGVsX3Byb21pc2U7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBGb3JjZSBpbW1lZGlhdGUgc2F2ZSBvZiBmaWxlX2NhY2hlIGRpcmVjdG9yeS4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBmaWxlX2NhY2hlX2ZsdXNoKCkgewoJCWZpbGVfY2FjaGVfZGlyX3NhdmUodHJ1ZSAvKiBpbW1lZGlhdGVseSAqLyk7Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIExvYWQgYSBmaWxlIGZyb20gdGhlIGZpbGVfY2FjaGUgZGF0YWJhc2UuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gZmlsZV9jYWNoZV9sb2FkKG5hbWUpIHsKCQl2YXIgbG9hZF9wcm9taXNlID0gcHJvbWlzZSgpOwoJCXJldHVybiBmaWxlX2NhY2hlX29wZW4oKS50aGVuKGxvYWQpOwoKCQlmdW5jdGlvbiBsb2FkKGRiKSB7CgkJCWlmICh3a29mLmZpbGVfY2FjaGUuZGlyW25hbWVdID09PSB1bmRlZmluZWQpIHsKCQkJCWxvYWRfcHJvbWlzZS5yZWplY3QobmFtZSk7CgkJCQlyZXR1cm4gbG9hZF9wcm9taXNlOwoJCQl9CgkJCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmaWxlcycsICdyZWFkb25seScpOwoJCQl2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnZmlsZXMnKTsKCQkJdmFyIHJlcXVlc3QgPSBzdG9yZS5nZXQobmFtZSk7CgkJCXdrb2YuZmlsZV9jYWNoZS5kaXJbbmFtZV0ubGFzdF9sb2FkZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7CgkJCWZpbGVfY2FjaGVfZGlyX3NhdmUoKTsKCQkJcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmaW5pc2g7CgkJCXJlcXVlc3Qub25lcnJvciA9IGVycm9yOwoJCQlyZXR1cm4gbG9hZF9wcm9taXNlOwoKCQkJZnVuY3Rpb24gZmluaXNoKGV2ZW50KXsKCQkJCWlmIChldmVudC50YXJnZXQucmVzdWx0ID09PSB1bmRlZmluZWQpIHsKCQkJCQlsb2FkX3Byb21pc2UucmVqZWN0KG5hbWUpOwoJCQkJfSBlbHNlIHsKCQkJCQlsb2FkX3Byb21pc2UucmVzb2x2ZShldmVudC50YXJnZXQucmVzdWx0LmNvbnRlbnQpOwoJCQkJfQoJCQl9CgoJCQlmdW5jdGlvbiBlcnJvcihldmVudCl7CgkJCQlsb2FkX3Byb21pc2UucmVqZWN0KG5hbWUpOwoJCQl9CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBTYXZlIGEgZmlsZSBpbnRvIHRoZSBmaWxlX2NhY2hlIGRhdGFiYXNlLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGZpbGVfY2FjaGVfc2F2ZShuYW1lLCBjb250ZW50LCBleHRyYV9hdHRyaWJzKSB7CgkJcmV0dXJuIGZpbGVfY2FjaGVfb3BlbigpLnRoZW4oc2F2ZSk7CgoJCWZ1bmN0aW9uIHNhdmUoZGIpIHsKCQkJdmFyIHNhdmVfcHJvbWlzZSA9IHByb21pc2UoKTsKCQkJaWYgKGRiID09PSBudWxsKSByZXR1cm4gc2F2ZV9wcm9taXNlLnJlc29sdmUobmFtZSk7CgkJCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmaWxlcycsICdyZWFkd3JpdGUnKTsKCQkJdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2ZpbGVzJyk7CgkJCXN0b3JlLnB1dCh7bmFtZTpuYW1lLGNvbnRlbnQ6Y29udGVudH0pOwoJCQl2YXIgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpOwoJCQl3a29mLmZpbGVfY2FjaGUuZGlyW25hbWVdID0gT2JqZWN0LmFzc2lnbih7YWRkZWQ6bm93LCBsYXN0X2xvYWRlZDpub3d9LCBleHRyYV9hdHRyaWJzKTsKCQkJZmlsZV9jYWNoZV9kaXJfc2F2ZSh0cnVlIC8qIGltbWVkaWF0ZWx5ICovKTsKCQkJdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IHNhdmVfcHJvbWlzZS5yZXNvbHZlLmJpbmQobnVsbCwgbmFtZSk7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBTYXZlIGEgdGhlIGZpbGVfY2FjaGUgZGlyZWN0b3J5IGNvbnRlbnRzLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCXZhciBmY19zeW5jX3RpbWVyOwoJZnVuY3Rpb24gZmlsZV9jYWNoZV9kaXJfc2F2ZShpbW1lZGlhdGVseSkgewoJCWlmIChmY19zeW5jX3RpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dChmY19zeW5jX3RpbWVyKTsKCQl2YXIgZGVsYXkgPSAoaW1tZWRpYXRlbHkgPyAwIDogMjAwMCk7CgkJZmNfc3luY190aW1lciA9IHNldFRpbWVvdXQoc2F2ZSwgZGVsYXkpOwoKCQlmdW5jdGlvbiBzYXZlKCl7CgkJCWZpbGVfY2FjaGVfb3BlbigpLnRoZW4oc2F2ZTIpOwoJCX0KCgkJZnVuY3Rpb24gc2F2ZTIoZGIpewoJCQlmY19zeW5jX3RpbWVyID0gdW5kZWZpbmVkOwoJCQl2YXIgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignZmlsZXMnLCAncmVhZHdyaXRlJyk7CgkJCXZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdmaWxlcycpOwoJCQlzdG9yZS5wdXQoe25hbWU6J1tkaXJdJyxjb250ZW50OkpTT04uc3RyaW5naWZ5KHdrb2YuZmlsZV9jYWNoZS5kaXIpfSk7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBSZW1vdmUgZmlsZXMgdGhhdCBoYXZlbid0IGJlZW4gYWNjZXNzZWQgaW4gYSB3aGlsZS4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBmaWxlX2NhY2hlX2NsZWFudXAoKSB7CgkJdmFyIHRocmVzaG9sZCA9IG5ldyBEYXRlKCkgLSAxNCo4NjQwMDAwMDsgLy8gMTQgZGF5cwoJCXZhciBvbGRfZmlsZXMgPSBbXTsKCQlmb3IgKHZhciBmbmFtZSBpbiB3a29mLmZpbGVfY2FjaGUuZGlyKSB7CgkJCWlmIChmbmFtZS5tYXRjaCgvXndrb2ZcLnNldHRpbmdzXC4vKSkgY29udGludWU7IC8vIERvbid0IGZsdXNoIHNldHRpbmdzIGZpbGVzLgoJCQl2YXIgZmRhdGUgPSBuZXcgRGF0ZSh3a29mLmZpbGVfY2FjaGUuZGlyW2ZuYW1lXS5sYXN0X2xvYWRlZCk7CgkJCWlmIChmZGF0ZSA8IHRocmVzaG9sZCkgb2xkX2ZpbGVzLnB1c2goZm5hbWUpOwoJCX0KCQlpZiAob2xkX2ZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoJCWNvbnNvbGUubG9nKCdDbGVhbmluZyBvdXQgJytvbGRfZmlsZXMubGVuZ3RoKycgb2xkIGZpbGUocykgZnJvbSAid2tvZi5maWxlX2NhY2hlIjonKTsKCQlmb3IgKHZhciBmbnVtIGluIG9sZF9maWxlcykgewoJCQljb25zb2xlLmxvZygnICAnKyhOdW1iZXIoZm51bSkrMSkrJzogJytvbGRfZmlsZXNbZm51bV0pOwoJCQl3a29mLmZpbGVfY2FjaGUuZGVsZXRlKG9sZF9maWxlc1tmbnVtXSk7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBQcm9jZXNzIG5vLWNhY2hlIHJlcXVlc3RzLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGZpbGVfbm9jYWNoZShsaXN0KSB7CgkJaWYgKGxpc3QgPT09IHVuZGVmaW5lZCkgewoJCQlsaXN0ID0gc3BsaXRfbGlzdChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2tvZi5pbmNsdWRlLm5vY2FjaGUnKSB8fCAnJyk7CgkJCWxpc3QgPSBsaXN0LmNvbmNhdChzcGxpdF9saXN0KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3a29mLmxvYWRfZmlsZS5ub2NhY2hlJykgfHwgJycpKTsKCQkJY29uc29sZS5sb2cobGlzdC5qb2luKCcsJykpOwoJCX0gZWxzZSBpZiAodHlwZW9mIGxpc3QgPT09ICdzdHJpbmcnKSB7CgkJCXZhciBub19jYWNoZSA9IHNwbGl0X2xpc3QobGlzdCk7CgkJCXZhciBpZHgsIG1vZHVsZXMgPSBbXSwgdXJscyA9IFtdOwoJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IG5vX2NhY2hlLmxlbmd0aDsgaWR4KyspIHsKCQkJCXZhciBpdGVtID0gbm9fY2FjaGVbaWR4XTsKCQkJCWlmIChzdXBwb3J0ZWRfbW9kdWxlc1tpdGVtXSAhPT0gdW5kZWZpbmVkKSB7CgkJCQkJbW9kdWxlcy5wdXNoKGl0ZW0pOwoJCQkJfSBlbHNlIHsKCQkJCQl1cmxzLnB1c2goaXRlbSk7CgkJCQl9CgkJCX0KCQkJY29uc29sZS5sb2coJ01vZHVsZXM6ICcrbW9kdWxlcy5qb2luKCcsJykpOwoJCQljb25zb2xlLmxvZygnICAgVVJMczogJyt1cmxzLmpvaW4oJywnKSk7CgkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3a29mLmluY2x1ZGUubm9jYWNoZScsIG1vZHVsZXMuam9pbignLCcpKTsKCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3drb2YubG9hZF9maWxlLm5vY2FjaGUnLCB1cmxzLmpvaW4oJywnKSk7CgkJfQoJfQoKCWZ1bmN0aW9uIGRvY19yZWFkeSgpIHsKCQl3a29mLnNldF9zdGF0ZSgnd2tvZi5kb2N1bWVudCcsICdyZWFkeScpOwoJfQoKCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkvLyBCb290bG9hZGVyIFN0YXJ0dXAKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBzdGFydHVwKCkgewoJCWdsb2JhbC53a29mID0gcHVibGlzaGVkX2ludGVyZmFjZTsKCgkJLy8gTWFyayBkb2N1bWVudCBzdGF0ZSBhcyAncmVhZHknLgoJCWlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7CgkJCWRvY19yZWFkeSgpOwoJCX0gZWxzZSB7CgkJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZG9jX3JlYWR5LCBmYWxzZSk7ICAvLyBOb3RpZnkgbGlzdGVuZXJzIHRoYXQgd2UgYXJlIHJlYWR5LgoJCX0KCgkJLy8gT3BlbiBjYWNoZSwgc28gd2tvZi5maWxlX2NhY2hlLmRpciBpcyBhdmFpbGFibGUgdG8gY29uc29sZSBpbW1lZGlhdGVseS4KCQlmaWxlX2NhY2hlX29wZW4oKTsKCQl3a29mLnNldF9zdGF0ZSgnd2tvZi53a29mJywgJ3JlYWR5Jyk7Cgl9CglzdGFydHVwKCk7Cgp9KSh3aW5kb3cpOw=="},{"name":"Wanikani Ultimate Timeline","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https://(www|preview).wanikani.com/(dashboard)?$/"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1569496814431,"data":{}},"enabled":false,"position":23,"file_url":"https://greasyfork.org/scripts/13475-wanikani-ultimate-timeline/code/Wanikani%20Ultimate%20Timeline.user.js","uuid":"7f921d4d-9651-4d39-9aad-f16c23a1e0de","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFdhbmlrYW5pIFVsdGltYXRlIFRpbWVsaW5lCi8vIEBuYW1lc3BhY2UgICByZmluZGxleQovLyBAZGVzY3JpcHRpb24gUmV2aWV3IHNjaGVkdWxlIGV4cGxvcmVyIGZvciBXYW5pS2FuaQovLyBAdmVyc2lvbiAgICAgNy4wLjI0Ci8vIEBpbmNsdWRlICAgICAvXmh0dHBzOi8vKHd3d3xwcmV2aWV3KS53YW5pa2FuaS5jb20vKGRhc2hib2FyZCk/JC8KLy8gQGNvcHlyaWdodCAgIDIwMTgrLCBSb2JpbiBGaW5kbGV5Ci8vIEBsaWNlbnNlICAgICBNSVQ7IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKLy8gQHJ1bi1hdCAgICAgIGRvY3VtZW50LWVuZAovLyBAZ3JhbnQgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCndpbmRvdy50aW1lbGluZSA9IHt9OwoKKGZ1bmN0aW9uKGdvYmopIHsKCiAgICAvKiBnbG9iYWwgJCwgd2tvZiAqLwogICAgLyogZXNsaW50IG5vLW11bHRpLXNwYWNlczogIm9mZiIgKi8KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEluaXRpYWxpemF0aW9uIG9mIHRoZSBXYW5pa2FuaSBPcGVuIEZyYW1ld29yay4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgdmFyIHNjcmlwdF9uYW1lID0gJ1VsdGltYXRlIFRpbWVsaW5lJzsKICAgIHZhciB3a29mX3ZlcnNpb25fbmVlZGVkID0gJzEuMC4yNyc7CiAgICBpZiAoIXdpbmRvdy53a29mKSB7CiAgICAgICAgaWYgKGNvbmZpcm0oc2NyaXB0X25hbWUrJyByZXF1aXJlcyBXYW5pa2FuaSBPcGVuIEZyYW1ld29yay5cbkRvIHlvdSB3YW50IHRvIGJlIGZvcndhcmRlZCB0byB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucz8nKSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdodHRwczovL2NvbW11bml0eS53YW5pa2FuaS5jb20vdC9pbnN0cnVjdGlvbnMtaW5zdGFsbGluZy13YW5pa2FuaS1vcGVuLWZyYW1ld29yay8yODU0OSc7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh3a29mLnZlcnNpb24uY29tcGFyZV90byh3a29mX3ZlcnNpb25fbmVlZGVkKSA9PT0gJ29sZGVyJykgewogICAgICAgIGlmIChjb25maXJtKHNjcmlwdF9uYW1lKycgcmVxdWlyZXMgV2FuaWthbmkgT3BlbiBGcmFtZXdvcmsgdmVyc2lvbiAnK3drb2ZfdmVyc2lvbl9uZWVkZWQrJy5cbkRvIHlvdSB3YW50IHRvIGJlIGZvcndhcmRlZCB0byB0aGUgdXBkYXRlIHBhZ2U/JykpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9lbi9zY3JpcHRzLzM4NTgyLXdhbmlrYW5pLW9wZW4tZnJhbWV3b3JrJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdrb2YuaW5jbHVkZSgnSXRlbURhdGEsTWVudSxTZXR0aW5ncycpOwogICAgd2tvZi5yZWFkeSgnZG9jdW1lbnQsSXRlbURhdGEsTWVudSxTZXR0aW5ncycpLnRoZW4obG9hZF9zZXR0aW5ncykudGhlbihzdGFydHVwKTsKCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIENoYXJ0IGRlZmluaW5nIHRoZSBhdXRvLXNjYWxpbmcgZmFjdG9ycyBvZiB0aGUgWC1heGlzLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2YXIgeHNjYWxlID0gewogICAgICAgIC8vIFNjYWxpbmcgY2hhcnQuICBFYWNoIGNvbHVtbiByZXByZXNlbnRzIGEgc2NhbGluZyByYW5nZSwKICAgICAgICAvLyBhbmQgZWFjaCByb3cgaXMgc29tZXRoaW5nIHRoYXQgd2UgYXJlIHNjYWxpbmcuCiAgICAgICAgaG91cnNfcGVyX2xhYmVsOiAgIFsgIDEgLCAgMyAsICA2ICwgIDEyICwgIDI0ICwgIDQ4ICwgNzIwIF0sCiAgICAgICAgcmVkX3RpY19jaG9pY2VzOiAgIFsnMWQnLCcxZCcsJzFkJywgJzFkJywgJzF3JywnMXdzJywgJzFtJ10sIC8vIFJlZCBtYWpvciB0aWNzIChyZWQgbGFiZWwpCiAgICAgICAgbWFqb3JfdGljX2Nob2ljZXM6IFsnMWgnLCczaCcsJzZoJywnMTJoJywgJzFkJywnMWRzJywgJzVEJ10sIC8vIE1ham9yIHRpY3MgKGhhcyBsYWJlbCkKICAgICAgICBtaW5vcl90aWNfY2hvaWNlczogWyAnLScsJzFoJywnMWgnLCAnM2gnLCAnNmgnLCcxMmgnLCAnMWQnXSwgLy8gTWlub3IgdGljcyAobm8gbGFiZWwpCiAgICAgICAgYnVuZGxlX2Nob2ljZXMgICA6IFsgIDEgLCAgMSAsICAxICwgICAzICwgICA2ICwgIDEyICwgIDI0IF0sIC8vIEhvdyBtYW55IGhvdXJzIGFyZSBidW5kbGVkIHRvZ2V0aGVyLgogICAgICAgIGlkeDogMAogICAgfTsKCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEludGVyYWwgZ2xvYmFsIG9iamVjdCBmb3IgY2VudHJhbGl6aW5nIGRhdGEgYW5kIGNvbmZpZ3VyYXRpb24uCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBncmFwaCA9IHsKICAgICAgICBlbGVtOiBudWxsLAogICAgICAgIG1hcmdpbjogewogICAgICAgICAgICB0b3A6IDE2LAogICAgICAgICAgICBsZWZ0OiAyOCwKICAgICAgICAgICAgYm90dG9tOiAxNiwKICAgICAgICB9LAogICAgICAgIHhfYXhpczogewogICAgICAgICAgICB3aWR0aDogMCwKICAgICAgICAgICAgbWF4X2hvdXJzOiAwLAogICAgICAgICAgICBwaXhlbHNfcGVyX3RpYzogMCwKICAgICAgICB9LAogICAgICAgIHlfYXhpczogewogICAgICAgICAgICBoZWlnaHQ6IDEwMCwKICAgICAgICAgICAgbWluX2hlaWdodDogODAsCiAgICAgICAgICAgIG1heF9oZWlnaHQ6IDMwMCwKICAgICAgICAgICAgbWF4X3Jldmlld3M6IDAsCiAgICAgICAgfSwKICAgICAgICByYWRpY2FsX2NhY2hlOiB7fSwKICAgIH07CiAgICBnb2JqLmdyYXBoID0gZ3JhcGg7CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBHbG9iYWwgdXRpbGl0eSBmdW5jdGlvbnMuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHRvX3RpdGxlX2Nhc2Uoc3RyKSB7cmV0dXJuIHN0ci5yZXBsYWNlKC9cd1xTKi9nLCBmdW5jdGlvbih0eHQpe3JldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7fSk7fQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2xvYmFsIHZhcmlhYmxlcwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2YXIgc2V0dGluZ3MsIHNldHRpbmdzX2RpYWxvZzsKICAgIHZhciB0el9vZnMgPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgICB2YXIgdGltZV9zaGlmdCA9IE1hdGguY2VpbCh0el9vZnMgLyA2MCkgKiA2MCAtIHR6X29mczsKCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTG9hZCB0aGUgc2NyaXB0IHNldHRpbmdzLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBsb2FkX3NldHRpbmdzKCkgewogICAgICAgIHZhciBkZWZhdWx0cyA9IHsKICAgICAgICAgICAgbWluaW1pemVkOiBmYWxzZSwKICAgICAgICAgICAgcGxhY2VtZW50OiAnYmVmb3JlX25leHRyZXZpZXcnLAogICAgICAgICAgICB0aW1lX2Zvcm1hdDogJzEyaG91cicsCiAgICAgICAgICAgIGdyYXBoX2hlaWdodDogMTAwLAogICAgICAgICAgICBtYXhfZGF5czogMTQsCiAgICAgICAgICAgIGRheXM6IDMuNSwKICAgICAgICAgICAgbWF4X2Jhcl93aWR0aDogNDAsCiAgICAgICAgICAgIG1heF9iYXJfaGVpZ2h0OiAwLAogICAgICAgICAgICBmaXhlZF9iYXJfaGVpZ2h0OiBmYWxzZSwKICAgICAgICAgICAgYmFyX3N0eWxlOiAnaXRlbV90eXBlJywKICAgICAgICAgICAgc3JzX2N1cnJfbmV4dDogJ2N1cnInLAogICAgICAgICAgICBjdXJyZW50X2xldmVsX21hcmtlcnM6ICdya3YnLAogICAgICAgICAgICBidXJuX21hcmtlcnM6ICdzaG93JywKICAgICAgICAgICAgc2hvd19yZXZpZXdfZGV0YWlsczogJ2Z1bGwnLAogICAgICAgICAgICByZXZpZXdfZGV0YWlsc19zdW1tYXJ5OiAnaXRlbV90eXBlJywKICAgICAgICAgICAgcmV2aWV3X2RldGFpbHNfYnV0dG9uczogdHJ1ZSwKICAgICAgICAgICAgc2hvd19iYXJfc3R5bGVfZHJvcGRvd246IHRydWUsCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gd2tvZi5TZXR0aW5ncy5sb2FkKCd0aW1lbGluZScsIGRlZmF1bHRzKS50aGVuKGZ1bmN0aW9uKGRhdGEpewogICAgICAgICAgICBzZXR0aW5ncyA9IHdrb2Yuc2V0dGluZ3MudGltZWxpbmU7CiAgICAgICAgICAgIHN3aXRjaCAoc2V0dGluZ3Muc2hvd19tYXJrZXJzKSB7CiAgICAgICAgICAgICAgICBjYXNlICdub25lJzoKICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5jdXJyZW50X2xldmVsX21hcmtlcnMgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYnVybl9tYXJrZXJzID0gJ2hpZGUnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnY3Vycic6CiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuY3VycmVudF9sZXZlbF9tYXJrZXJzID0gJ3Jrdic7CiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYnVybl9tYXJrZXJzID0gJ2hpZGUnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYnVybic6CiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuY3VycmVudF9sZXZlbF9tYXJrZXJzID0gJ25vbmUnOwogICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmJ1cm5fbWFya2VycyA9ICdzaG93JzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2JvdGgnOgogICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmN1cnJlbnRfbGV2ZWxfbWFya2VycyA9ICdya3YnOwogICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmJ1cm5fbWFya2VycyA9ICdzaG93JzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZWxldGUgc2V0dGluZ3Muc2hvd19tYXJrZXJzOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTdGFydHVwCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHN0YXJ0dXAoKSB7CiAgICAgICAgaW5zdGFsbF9jc3MoKTsKICAgICAgICBpbnN0YWxsX21lbnVfbGluaygpOwogICAgICAgIHBsYWNlX3RpbWVsaW5lKHRydWUgLyogZmlyc3RfdGltZSAqLyk7CiAgICAgICAgZmV0Y2hfYW5kX3VwZGF0ZSgpOwogICAgICAgIHN0YXJ0X3JlZnJlc2hfdGltZXIoKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEluc3RhbGwgYSBsaW5rIHRvIHRoZSBzZXR0aW5ncyBpbiB0aGUgbWVudS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaW5zdGFsbF9tZW51X2xpbmsoKQogICAgewogICAgICAgIHdrb2YuTWVudS5pbnNlcnRfc2NyaXB0X2xpbmsoewogICAgICAgICAgICBuYW1lOiAndGltZWxpbmUnLAogICAgICAgICAgICBzdWJtZW51OiAnU2V0dGluZ3MnLAogICAgICAgICAgICB0aXRsZTogJ1VsdGltYXRlIFRpbWVsaW5lJywKICAgICAgICAgICAgb25fY2xpY2s6IG9wZW5fc2V0dGluZ3MKICAgICAgICB9KTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFRvcC1sZXZlbCBIVE1MIGZvciB0aGUgc2NyaXB0LgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2YXIgdGltZWxpbmVfaHRtbCA9CiAgICAgICAgJzxzZWN0aW9uIGlkPSJ0aW1lbGluZSI+JysKICAgICAgICAnICA8aDQgY2xhc3M9Im5vX21pbiI+UmV2aWV3cyBUaW1lbGluZTwvaDQ+JysKICAgICAgICAnICA8aSBjbGFzcz0ibGluayBvcGVuIG5vc2VsZWN0IG5vX21pbiBpY29uLWNoZXZyb24tdXAiIHRpdGxlPSJPcGVuIHRoZSB0aW1lbGluZSI+PC9pPicrCiAgICAgICAgJyAgPGkgY2xhc3M9ImxpbmsgbWluaW1pemUgbm9zZWxlY3QgaWNvbi1jaGV2cm9uLWRvd24iIHRpdGxlPSJNaW5pbWl6ZSB0aGUgdGltZWxpbmUiPjwvaT4nKwogICAgICAgICcgIDxpIGNsYXNzPSJsaW5rIHJlZnJlc2ggbm9zZWxlY3QgaWNvbi1yZWZyZXNoIiB0aXRsZT0iUmVmcmVzaCI+PC9pPicrCiAgICAgICAgJyAgPGkgY2xhc3M9Imxpbmsgc2V0dGluZ3Mgbm9zZWxlY3QgaWNvbi1nZWFyIiB0aXRsZT0iQ2hhbmdlIHRpbWVsaW5lIHNldHRpbmdzIj48L2k+JysKICAgICAgICAnICA8c3BhbiBjbGFzcz0iYmFyX3N0eWxlIGhpZGRlbiI+PGxhYmVsPkJhciBTdHlsZTogPC9sYWJlbD48c2VsZWN0PicrCiAgICAgICAgJyAgICA8b3B0aW9uIG5hbWU9ImNvdW50Ij5SZXZpZXcgQ291bnQ8L29wdGlvbj4nKwogICAgICAgICcgICAgPG9wdGlvbiBuYW1lPSJpdGVtX3R5cGUiPkl0ZW0gVHlwZTwvb3B0aW9uPicrCiAgICAgICAgJyAgICA8b3B0aW9uIG5hbWU9InNyc19zdGFnZSI+U1JTIExldmVsPC9vcHRpb24+JysKICAgICAgICAnICAgIDxvcHRpb24gbmFtZT0ibGV2ZWwiPkxldmVsPC9vcHRpb24+JysKICAgICAgICAnICA8L3NlbGVjdD48L3NwYW4+JysKICAgICAgICAnICA8Zm9ybSBjbGFzcz0icmFuZ2VfZm9ybSIgY2xhc3M9ImhpZGRlbiI+PGxhYmVsPjxzcGFuIGNsYXNzPSJyYW5nZV9yZXZpZXdzIj4wPC9zcGFuPiByZXZpZXdzIGluIDxzcGFuIGNsYXNzPSJyYW5nZV9kYXlzIj4zIGRheXM8L3NwYW4+IDxpbnB1dCBjbGFzcz0icmFuZ2VfaW5wdXQiIHR5cGU9InJhbmdlIiBtaW49IjAuMjUiIG1heD0iNyIgdmFsdWU9IjMiIHN0ZXA9IjAuMjUiIG5hbWU9InJhbmdlX2lucHV0Ij48L2xhYmVsPjwvZm9ybT48YnIgY2xlYXI9ImFsbCIgY2xhc3M9Im5vX21pbiI+JysKICAgICAgICAnICA8ZGl2IGNsYXNzPSJncmFwaF93cmFwIj4nKwogICAgICAgICcgICAgPGRpdiBjbGFzcz0icmV2aWV3X2luZm8gaGlkZGVuIj48ZGl2IGNsYXNzPSJpbm5lciI+PC9kaXY+PC9kaXY+JysKICAgICAgICAnICAgIDxkaXYgY2xhc3M9ImdyYXBoX3BhbmVsIj48L2Rpdj4nKwogICAgICAgICcgIDwvZGl2PicrCiAgICAgICAgJzwvc2VjdGlvbj4nOwoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSW5zdGFsbCB0aGUgc3R5bGUgc2hlZXQgZm9yIHRoZSBzY3JpcHQuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGluc3RhbGxfY3NzKCkgewogICAgICAgIHZhciB0aW1lbGluZV9jc3MgPQogICAgICAgICAgICAnLm5vc2VsZWN0IHstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgdXNlci1zZWxlY3Q6bm9uZTsgY3Vyc29yOmRlZmF1bHQ7fScrCiAgICAgICAgICAgICcuZGFzaGJvYXJkIHNlY3Rpb24ucmV2aWV3LXN0YXR1cyB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNmZmZmZmY7fScrCiAgICAgICAgICAgICcuZGFzaGJvYXJkIHNlY3Rpb24ucmV2aWV3LXN0YXR1cyB1bCBsaSB0aW1lIHt3aGl0ZS1zcGFjZTogbm93cmFwOyBvdmVyZmxvdy14OiBoaWRkZW47IGhlaWdodDogMS41ZW07IG1hcmdpbi1ib3R0b206IDA7fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lIHttYXJnaW4tYm90dG9tOiAwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDRkNGQ0O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lID4gaDQge2NsZWFyOm5vbmU7IGZsb2F0OmxlZnQ7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOjBweDsgbWFyZ2luLWJvdHRvbTo0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgbWFyZ2luLXJpZ2h0OjEycHg7fScrCiAgICAgICAgICAgICdAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsjdGltZWxpbmUgaDQge2Rpc3BsYXk6IG5vbmU7fX0nKwogICAgICAgICAgICAnI3RpbWVsaW5lID4gLmxpbmsge2NvbG9yOnJnYmEoMCwwLDAsMC4zKTsgZm9udC1zaXplOjEuMWVtOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgY3Vyc29yOnBvaW50ZXI7IG1hcmdpbi1yaWdodDo0cHg7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgPiAubGluazpob3ZlciB7Y29sb3I6cmdiYSgyNTUsMzEsMzEsMC41KTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZTpub3QoLm1pbikgPiAubGluay5vcGVuLCAjdGltZWxpbmUubWluID4gOm5vdCgubm9fbWluKSB7ZGlzcGxheTpub25lO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lID4gLnJhbmdlX2Zvcm0ge2Zsb2F0OnJpZ2h0OyBtYXJnaW4tYm90dG9tOjBweDsgdGV4dC1hbGlnbjpyaWdodDt9JysKCiAgICAgICAgICAgICcjdGltZWxpbmUgLmJhcl9zdHlsZSBsYWJlbCB7ZGlzcGxheTppbmxpbmU7IG1hcmdpbi1sZWZ0OjgwcHg7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLmJhcl9zdHlsZSBzZWxlY3Qge2hlaWdodDphdXRvOyBwYWRkaW5nOjA7IHdpZHRoOmF1dG87IHZlcnRpY2FsLWFsaWduOmJhc2VsaW5lOyBiYWNrZ3JvdW5kLWNvbG9yOiNlM2UzZTM7IGJvcmRlcjoxcHggc29saWQgI2FhYTsgYm9yZGVyLXJhZGl1czoycHg7fScrCiAgICAgICAgICAgICdAbWVkaWEgKG1heC13aWR0aDogOTc5cHgpIHsnKwogICAgICAgICAgICAnICAjdGltZWxpbmUgLmJhcl9zdHlsZSB7ZmxvYXQ6bGVmdDsgY2xlYXI6Ym90aDsgbWFyZ2luLWxlZnQ6aW5oZXJpdDt9JysKICAgICAgICAgICAgJyAgI3RpbWVsaW5lIC5iYXJfc3R5bGUgbGFiZWwge21hcmdpbi1sZWZ0OmluaGVyaXQ7fScrCiAgICAgICAgICAgICd9JysKICAgICAgICAgICAgJ0BtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgeyN0aW1lbGluZSAubGluayB7ZmxvYXQ6bGVmdDt9fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lID4gLmdyYXBoX3BhbmVsIGRpdiwgI3RpbWVsaW5lID4gLmdyYXBoX3BhbmVsIGNhbnZhcyB7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSA+IC5ncmFwaF9wYW5lbCBkaXYge2JvcmRlcjoxcHggc29saWQgI2Q0ZDRkNDt9JysKCiAgICAgICAgICAgICcjdGltZWxpbmUgLmdyYXBoX3dyYXAge3Bvc2l0aW9uOnJlbGF0aXZlO30nKwoKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8ge3Bvc2l0aW9uOmFic29sdXRlOyBwYWRkaW5nLWJvdHRvbToxNTBweDsgei1pbmRleDo1O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuaW5uZXIge3BhZGRpbmc6NHB4IDhweCA4cHggOHB4OyBjb2xvcjojZWVlZWVlOyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMC44KTsgYm9yZGVyLXJhZGl1czo0cHg7IGZvbnQtd2VpZ2h0OmJvbGQ7IHotaW5kZXg6MjsgYm94LXNpemluZzpib3JkZXItYm94O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuc3VtbWFyeSB7Zm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsIkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsgZm9udC1zaXplOjEzcHg7IGRpc3BsYXk6aW5saW5lLWJsb2NrO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuc3VtbWFyeSBkaXYge3BhZGRpbmc6MHB4IDhweDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLmluZGVudCB7cGFkZGluZzowOyBtYXJnaW4tYm90dG9tOjhweDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLmluZGVudDpsYXN0LWNoaWxkIHttYXJnaW4tYm90dG9tOjA7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvIC5zdW1tYXJ5IC5maXhlZCB7dGV4dC1hbGlnbjpyaWdodDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLnRvdCB7Y29sb3I6IzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjojZWZlZmVmOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNlZmVmZWYsICNjZmNmY2YpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuaXRlbXNfd3JhcCB7cG9zaXRpb246cmVsYXRpdmU7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnN1bW1hcnkgLmZpeGVkIHtkaXNwbGF5OmlubGluZS1ibG9jazt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLmluZGVudD5kaXYge2Rpc3BsYXk6bm9uZX0nKwoKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJpdGVtX3R5cGUiXSAuc3VtbWFyeSAuaXRlbV90eXBlIHtkaXNwbGF5OmJsb2NrO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9InNyc19zdGFnZSJdIC5zdW1tYXJ5IC5zcnNfc3RhZ2Uge2Rpc3BsYXk6YmxvY2s7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ibGV2ZWwiXSAuc3VtbWFyeSAubGV2ZWwge2Rpc3BsYXk6YmxvY2s7fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9ImNvdW50Il0gLml0ZW1fbGlzdCA+IGxpIHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2VmZWZlZiwgI2NmY2ZjZik7IGNvbG9yOiMwMDA7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0iY291bnQiXSAuaXRlbV9saXN0ID4gbGkgc3ZnIHtzdHJva2U6IzAwMDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJpdGVtX3R5cGUiXSAucmFkIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDk2ZTc7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzBhZiwgIzAwOTNkZCk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0iaXRlbV90eXBlIl0gLmthbiB7YmFja2dyb3VuZC1jb2xvcjojZWUwMGExOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmMGEsICNkZDAwOTMpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9Iml0ZW1fdHlwZSJdIC52b2Mge2JhY2tncm91bmQtY29sb3I6Izk4MDBlODsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjYTBmLCAjOTMwMGRkKTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJzcnNfc3RhZ2UiXSAuYXBwciB7YmFja2dyb3VuZC1jb2xvcjojZGQwMDkzOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZjAwYWEsICNiMzAwNzcpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9InNyc19zdGFnZSJdIC5ndXJ1IHtiYWNrZ3JvdW5kLWNvbG9yOiM4ODJkOWU7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2FhMzhjNywgIzY2MjI3Nyk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ic3JzX3N0YWdlIl0gLm1hc3Qge2JhY2tncm91bmQtY29sb3I6IzI5NGRkYjsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNTE2ZWUxLCAjMjE0MmM0KTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJzcnNfc3RhZ2UiXSAuZW5saSB7YmFja2dyb3VuZC1jb2xvcjojMDA5M2RkOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMGFhZmYsICMwMDc3YjMpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9InNyc19zdGFnZSJdIC5idXJuIHtiYWNrZ3JvdW5kLWNvbG9yOiM0MzQzNDM7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzQzNDM0MywgIzFhMWExYSk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ic3JzX3N0YWdlIl0gbGkuYnVybiB7Ym9yZGVyOjFweCBzb2xpZCAjNzc3O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9ImxldmVsIl0gLmx2bGdycDAge2JhY2tncm91bmQtY29sb3I6IzVlYjZlODsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNWViNmU4LCAjMWQ4YWM5KTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJsZXZlbCJdIC5sdmxncnAxIHtiYWNrZ3JvdW5kLWNvbG9yOiNlMjVlYmM7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2UyNWViYywgI2MyMjQ5NSk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ibGV2ZWwiXSAubHZsZ3JwMiB7YmFja2dyb3VuZC1jb2xvcjojYWY3OWMzOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNhZjc5YzMsICM4NzQ3OWUpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9ImxldmVsIl0gLmx2bGdycDMge2JhY2tncm91bmQtY29sb3I6Izc2OGNlNzsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNzY4Y2U3LCAjMjY0YWQ5KTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJsZXZlbCJdIC5sdmxncnA0IHtiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNjQ7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzVlNWU2NCwgIzMxMzEzNSk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ibGV2ZWwiXSAubHZsZ3JwNSB7YmFja2dyb3VuZC1jb2xvcjojZjVjNjY3OyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmNWM2NjcsICNmMGE1MGYpOyBjb2xvcjojMzMzfScrCgogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9ImxldmVsIl0gLmx2bGdycDUgc3ZnIHtzdHJva2U6IzMzM30nKwoKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLmluZGVudD4uY3VyIHtkaXNwbGF5OmJsb2NrOyBmb250LXN0eWxlOml0YWxpYzsgY29sb3I6IzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjojZmZmZjg4OyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZmZmYWEsICNlZWVlNzcpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuc3VtbWFyeSAuaW5kZW50Pi5idXIge2Rpc3BsYXk6YmxvY2s7IGZvbnQtc3R5bGU6aXRhbGljOyBjb2xvcjojZmZmZmZmOyBiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzQ0NDQ0NCwgIzAwMDAwMCk7fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lIC5pdGVtX2xpc3Qge21hcmdpbjogOHB4IDAgMCAwOyBwYWRkaW5nOiAwcHg7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLml0ZW1fbGlzdCA+IGxpIHtwYWRkaW5nOjAgM3B4OyBtYXJnaW46MXB4IDFweDsgZGlzcGxheTppbmxpbmUtYmxvY2s7IGJvcmRlci1yYWRpdXM6NHB4OyBmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsOyBjdXJzb3I6ZGVmYXVsdDsgYm94LXNpemluZzpib3JkZXItYm94OyBib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lW2RhdGEtZGV0YWlsPSJmdWxsIl0gLml0ZW1fbGlzdCA+IGxpIHtjdXJzb3I6cG9pbnRlcjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAuaXRlbV9pbmZvIHtwb3NpdGlvbjphYnNvbHV0ZTsgYmFja2dyb3VuZDojMzMzOyBib3JkZXI6OHB4IHNvbGlkIHJnYmEoMCwwLDAsMC43KTsgYm9yZGVyLXJhZGl1czo2cHg7IGxlZnQ6NHB4OyBwYWRkaW5nOjAgOHB4OyB6LWluZGV4OjEwO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5pdGVtX2luZm8gLml0ZW0ge2ZvbnQtc2l6ZToyZW07IGxpbmUtaGVpZ2h0OjEuMmVtO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyBzdmcucmFkaWNhbCB7ZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDo4NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLW1pdGVybGltaXQ6Mjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAuaXRlbV9saXN0IHN2Zy5yYWRpY2FsIHt3aWR0aDoxZW07IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDJweCk7IHN0cm9rZS13aWR0aDo4NTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAuaXRlbV9pbmZvIC5pdGVtIHN2Zy5yYWRpY2FsIHt3aWR0aDoyOHB4OyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgycHgpO30nKwoKICAgICAgICAgICAgJyN0aW1lbGluZSAuZGV0YWlsX2J1dHRvbnMge2Rpc3BsYXk6aW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IG1hcmdpbi1sZWZ0OjhweDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAuZGV0YWlsX2J1dHRvbnMgYnV0dG9uIHtkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMzBweDsgcGFkZGluZzowOyBtYXJnaW4tYm90dG9tOjJweDt9JysKCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIHtvdmVyZmxvdzpoaWRkZW47fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5ncmlkIHtwb2ludGVyLWV2ZW50czpub25lO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZ3JpZCBwYXRoIHtmaWxsOm5vbmU7c3Ryb2tlOmJsYWNrO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmdyaWQgLmxpZ2h0IHtzdHJva2U6I2ZmZmZmZjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmdyaWQgLnNoYWRvdyB7c3Ryb2tlOiNkNWQ1ZDU7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5ncmlkIC5tYWpvciB7b3BhY2l0eTowLjE1O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZ3JpZCAubWlub3Ige29wYWNpdHk6MC4wNTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmdyaWQgLnJlZHRpYyB7c3Ryb2tlOiNmMjI7b3BhY2l0eToxO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZ3JpZCAubWF4IHtzdHJva2U6I2YyMjtvcGFjaXR5OjAuMjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmJvdW5kYXJ5IHtmaWxsOiMwMDA7b3BhY2l0eTowO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAucmVzaXplX2dyaXAge2ZpbGw6bm9uZTtjdXJzb3I6cm93LXJlc2l6ZTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLnJlc2l6ZV9ncmlwIC5saWdodCB7c3Ryb2tlOiNmZmZmZmY7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5yZXNpemVfZ3JpcCAuc2hhZG93IHtzdHJva2U6I2JiYjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgdGV4dC5yZWR0aWMge2ZpbGw6I2YyMjtmb250LXdlaWdodDpib2xkO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAubGFiZWwteCB0ZXh0IHt0ZXh0LWFuY2hvcjpzdGFydDtmb250LXNpemU6MC44ZW07fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5sYWJlbC15IHRleHQge3RleHQtYW5jaG9yOmVuZDtmb250LXNpemU6MC44ZW07fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIHRleHQge3BvaW50ZXItZXZlbnRzOm5vbmU7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5iYXJzIHJlY3Qge3N0cm9rZTpub25lO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuYmFyLm92ZXJsYXkge29wYWNpdHk6MDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmJrZ2Qge2ZpbGw6I2Y3ZjdmNzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLnJhZCB7ZmlsbDojMDBhMWYxO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAua2FuIHtmaWxsOiNmMTAwYTE7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC52b2Mge2ZpbGw6I2ExMDBmMTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLnN1bSB7ZmlsbDojMjk0ZGRiO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuYXBwciB7ZmlsbDojZGQwMDkzO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZ3VydSB7ZmlsbDojODgyZDllO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAubWFzdCB7ZmlsbDojMjk0ZGRiO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZW5saSB7ZmlsbDojMDA5M2RkO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuYnVybiB7ZmlsbDojNDM0MzQzO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuY291bnQge2ZpbGw6Izc3OGFkODt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDAge2ZpbGw6IzVlYjZlODt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDEge2ZpbGw6I2UyNWViYzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDIge2ZpbGw6I2FmNzljMzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDMge2ZpbGw6Izc2OGNlNzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDQge2ZpbGw6IzVlNWU2NDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDUge2ZpbGw6I2Y1YzY2Nzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmJhcnMgLmN1ciB7ZmlsbDojZmZmZmZmO29wYWNpdHk6MC42O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuYmFycyAuYnVyIHtmaWxsOiMwMDAwMDA7b3BhY2l0eTowLjQ7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5tYXJrZXJzIHtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC41O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAubWFya2VycyAuYnVyIHtmaWxsOiMwMDAwMDA7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5tYXJrZXJzIC5jdXIge2ZpbGw6I2ZmZmZmZjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmhpZ2hsaWdodCAuYm91bmRhcnkge2N1cnNvcjpwb2ludGVyO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lW2RhdGEtZGV0YWlsPSJub25lIl0gLmhpZ2hsaWdodCAuYm91bmRhcnkge2N1cnNvcjphdXRvO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuaGlnaGxpZ2h0IC5tYXJrZXIge3BvaW50ZXItZXZlbnRzOm5vbmU7c2hhcGUtcmVuZGVyaW5nOmNyaXNwRWRnZXM7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5oaWdobGlnaHQgcGF0aC5tYXJrZXIge2ZpbGw6IzAwYTFmMTsgc3Ryb2tlOiMwMGExZjE7IHN0cm9rZS13aWR0aDoyO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuaGlnaGxpZ2h0IHJlY3QubWFya2VyIHtmaWxsOnJnYmEoMCwxNjEsMjQxLDAuMSk7IHN0cm9rZTojMDBhMWYxOyBzdHJva2Utd2lkdGg6MTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcubGluazpob3ZlciAqIHtmaWxsOnJnYigyNTUsMzEsMzEpO30nKwogICAgICAgICAgICAnYm9keS5tdXRlX3BvcG92ZXIgLnBvcG92ZXIuc3JzIHtkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9JysKICAgICAgICAgICAgJyc7CgogICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxzdHlsZT4nK3RpbWVsaW5lX2NzcysnPC9zdHlsZT4nKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUGxhY2UgdGhlIHRpbWVsaW5lIG9uIHRoZSBkYXNoYm9hcmQsIG9yIGFkanVzdCBpdHMgbG9jYXRpb24gb24gdGhlIHBhZ2UuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHBsYWNlX3RpbWVsaW5lKGZpcnN0X3RpbWUpIHsKICAgICAgICB2YXIgdGltZWxpbmUgPSAoZmlyc3RfdGltZSA/ICQodGltZWxpbmVfaHRtbCkgOiAkKCcjdGltZWxpbmUnKSk7CiAgICAgICAgc3dpdGNoIChzZXR0aW5ncy5wbGFjZW1lbnQpIHsKICAgICAgICAgICAgY2FzZSAnYWZ0ZXJfbmV4dHJldmlldycgICA6ICQoJ3NlY3Rpb24ucmV2aWV3LXN0YXR1cycpLmFmdGVyKHRpbWVsaW5lKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2FmdGVyX3Nyc3Byb2dyZXNzJyAgOiAkKCdzZWN0aW9uLnNycy1wcm9ncmVzcycpLmFmdGVyKHRpbWVsaW5lKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2FmdGVyX2xldmVscHJvZ3Jlc3MnOiAkKCdzZWN0aW9uLnByb2dyZXNzaW9uJykuYWZ0ZXIodGltZWxpbmUpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAnYWZ0ZXJfdW5sb2NrcycgICAgICA6ICQoJ3NlY3Rpb24ucmVjZW50LXVubG9ja3MnKS5jbG9zZXN0KCdkaXYucm93JykuYWZ0ZXIodGltZWxpbmUpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAnYWZ0ZXJfcmVjZW50Y2hhdCcgICA6ICQoJ3NlY3Rpb24uZm9ydW0tdG9waWNzLWxpc3QnKS5jbG9zZXN0KCdkaXYucm93JykuYWZ0ZXIodGltZWxpbmUpOyBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDogJCgnc2VjdGlvbi5yZXZpZXctc3RhdHVzJykuYmVmb3JlKHRpbWVsaW5lKTsgYnJlYWs7IC8vICdiZWZvcmVfbmV4dHJldmlldycKICAgICAgICB9CiAgICAgICAgaWYgKGZpcnN0X3RpbWUpIHsKICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBVSSBmcm9tIHNldHRpbmdzCiAgICAgICAgICAgIGdyYXBoLmVsZW0gPSB0aW1lbGluZS5maW5kKCcuZ3JhcGhfcGFuZWwnKTsKICAgICAgICAgICAgZ3JhcGgueF9heGlzLndpZHRoID0gZ3JhcGguZWxlbS53aWR0aCgpIC0gZ3JhcGgubWFyZ2luLmxlZnQ7CiAgICAgICAgICAgIGdyYXBoLnlfYXhpcy5oZWlnaHQgPSBzZXR0aW5ncy5ncmFwaF9oZWlnaHQgLSAoZ3JhcGgubWFyZ2luLnRvcCArIGdyYXBoLm1hcmdpbi5ib3R0b20pOwogICAgICAgICAgICB1cGRhdGVfbWluaW1pemUoKTsKICAgICAgICAgICAgaW5pdF91aSgpOwoKICAgICAgICAgICAgLy8gSW5zdGFsbCBldmVudCBoYW5kbGVycwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcubGluay5vcGVuLCAubGluay5taW5pbWl6ZScpLm9uKCdjbGljaycsIHRvZ2dsZV9taW5pbWl6ZSk7CiAgICAgICAgICAgIHRpbWVsaW5lLmZpbmQoJy5saW5rLnJlZnJlc2gnKS5vbignY2xpY2snLCBmZXRjaF9hbmRfdXBkYXRlKTsKICAgICAgICAgICAgdGltZWxpbmUuZmluZCgnLmxpbmsuc2V0dGluZ3MnKS5vbignY2xpY2snLCBvcGVuX3NldHRpbmdzKTsKICAgICAgICAgICAgdGltZWxpbmUuZmluZCgnLmJhcl9zdHlsZSBzZWxlY3QnKS5vbignY2hhbmdlJywgYmFyX3N0eWxlX2NoYW5nZWQpOwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcucmFuZ2VfaW5wdXQnKS5vbignaW5wdXQgY2hhbmdlJywgZGF5c19jaGFuZ2VkKTsKICAgICAgICAgICAgdGltZWxpbmUuZmluZCgnLnJldmlld19pbmZvPi5pbm5lcicpLm9uKCdtb3VzZWVudGVyJywgJy5pdGVtX2xpc3QgPiBsaScsIGl0ZW1faG92ZXIpOwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcucmV2aWV3X2luZm8+LmlubmVyJykub24oJ21vdXNlbGVhdmUnLCAnLml0ZW1fbGlzdCcsIGl0ZW1faG92ZXIpOwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcucmV2aWV3X2luZm8+LmlubmVyJykub24oJ2NsaWNrJywgJy5kZXRhaWxfYnV0dG9ucyBidXR0b24nLCBkZXRhaWxfYnV0dG9uX2NsaWNrZWQpOwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcucmV2aWV3X2luZm8+LmlubmVyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fSk7CiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB3aW5kb3dfcmVzaXplZCk7CiAgICAgICAgfQogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBUb2dnbGUgd2hldGhlciB0aGUgdGltZWxpbmUgaXMgbWluaW1pemVkLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiB0b2dnbGVfbWluaW1pemUoKSB7CiAgICAgICAgc2V0dGluZ3MubWluaW1pemVkID0gIXNldHRpbmdzLm1pbmltaXplZDsKICAgICAgICB1cGRhdGVfbWluaW1pemUoKTsKICAgICAgICBzYXZlX3NldHRpbmdzKCk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEhpZGUgb3IgdW5oaWRlIHRoZSB0aW1lbGluZSB3aGVuIHRoZSB1c2VyIG1pbmltaXplcy9yZXN0b3Jlcy4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gdXBkYXRlX21pbmltaXplKCkgewogICAgICAgIHZhciB0aW1lbGluZSA9ICQoJyN0aW1lbGluZScpOwogICAgICAgIHZhciBpc19taW4gPSB0aW1lbGluZS5oYXNDbGFzcygnbWluJyk7CiAgICAgICAgaWYgKHNldHRpbmdzLm1pbmltaXplZCAmJiAhaXNfbWluKSB7CiAgICAgICAgICAgIHRpbWVsaW5lLmFkZENsYXNzKCdtaW4nKTsKICAgICAgICB9IGVsc2UgaWYgKCFzZXR0aW5ncy5taW5pbWl6ZWQgJiYgaXNfbWluKSB7CiAgICAgICAgICAgIHRpbWVsaW5lLnJlbW92ZUNsYXNzKCdtaW4nKTsKICAgICAgICB9CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFVwZGF0ZSB0aGUgdGltZWxpbmUgYWZ0ZXIgdGhlIHVzZXIgY2hhbmdlcyB0aGUgbnVtYmVyIG9mIGRheXMgdG8gZGlzcGxheS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZGF5c19jaGFuZ2VkKCkgewogICAgICAgIHZhciBkYXlzID0gTnVtYmVyKCQoJyN0aW1lbGluZSAucmFuZ2VfaW5wdXQnKS52YWwoKSk7CiAgICAgICAgaWYgKGRheXMgPT09IHNldHRpbmdzLmRheXMpIHJldHVybjsKICAgICAgICBzZXR0aW5ncy5kYXlzID0gZGF5czsKICAgICAgICB1cGRhdGVfc2xpZGVyX2RheXMoKTsKICAgICAgICBidW5kbGVfYnlfdGltZXNsb3QoKTsKICAgICAgICB1cGRhdGVfc2xpZGVyX3Jldmlld3MoKTsKICAgICAgICBkcmF3X3RpbWVsaW5lKCk7CiAgICAgICAgc2F2ZV9zZXR0aW5ncygpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBIYW5kbGVyIGZvciB3aGVuIHVzZXIgY2hhbmdlcyB0aGUgQmFyIFN0eWxlLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBiYXJfc3R5bGVfY2hhbmdlZCgpIHsKICAgICAgICBzZXR0aW5ncy5iYXJfc3R5bGUgPSAkKCcjdGltZWxpbmUgLmJhcl9zdHlsZSBzZWxlY3QgOnNlbGVjdGVkJykuYXR0cignbmFtZScpOwogICAgICAgIGRyYXdfdGltZWxpbmUoKTsKICAgICAgICBzYXZlX3NldHRpbmdzKCk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEhhbmRsZXIgZm9yIHdoZW4gdXNlciBjbGlja3MgJ1NhdmUnIGluIHRoZSBzZXR0aW5ncyB3aW5kb3cuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHNldHRpbmdzX3NhdmVkKCkgewogICAgICAgIHNldHRpbmdzID0gd2tvZi5zZXR0aW5ncy50aW1lbGluZTsKICAgICAgICBwbGFjZV90aW1lbGluZShmYWxzZSAvKiBmaXJzdF90aW1lICovKTsKICAgICAgICBpbml0X3VpKCk7CiAgICAgICAgYnVuZGxlX2J5X3RpbWVzbG90KCk7CiAgICAgICAgZHJhd190aW1lbGluZSgpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBJbml0aWFsaXplIHRoZSB1c2VyIGludGVyZmFjZS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaW5pdF91aSgpIHsKICAgICAgICBpbml0X3NsaWRlcigpOwogICAgICAgIGlmIChzZXR0aW5ncy5zaG93X2Jhcl9zdHlsZV9kcm9wZG93bikgewogICAgICAgICAgICAkKCcjdGltZWxpbmUgLmJhcl9zdHlsZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKCcjdGltZWxpbmUgLmJhcl9zdHlsZScpLmFkZENsYXNzKCdoaWRkZW4nKTsKICAgICAgICB9CiAgICAgICAgJCgnI3RpbWVsaW5lIC5iYXJfc3R5bGUgb3B0aW9uW25hbWU9Iicrc2V0dGluZ3MuYmFyX3N0eWxlKyciXScpLnByb3AoJ3NlbGVjdGVkJyx0cnVlKTsKICAgICAgICAkKCcjdGltZWxpbmUnKS5hdHRyKCdkYXRhLWRldGFpbCcsIHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMpOwogICAgICAgICQoJyN0aW1lbGluZSAucmV2aWV3X2luZm8nKS5hdHRyKCdkYXRhLW1vZGUnLCBzZXR0aW5ncy5yZXZpZXdfZGV0YWlsc19zdW1tYXJ5KTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSW5pdGlhbGl6ZSB0aGUgc2NhbGUgc2xpZGVyLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBpbml0X3NsaWRlcigpIHsKICAgICAgICB2YXIgcmFuZ2UgPSAkKCcjdGltZWxpbmUgLnJhbmdlX2lucHV0Jyk7CiAgICAgICAgaWYgKHNldHRpbmdzLmRheXMgPiBzZXR0aW5ncy5tYXhfZGF5cykgewogICAgICAgICAgICBzZXR0aW5ncy5kYXlzID0gc2V0dGluZ3MubWF4X2RheXM7CiAgICAgICAgICAgIHNhdmVfc2V0dGluZ3MoKTsKICAgICAgICB9CiAgICAgICAgcmFuZ2UuYXR0cignbWF4Jywgc2V0dGluZ3MubWF4X2RheXMpOwogICAgICAgIHJhbmdlLmF0dHIoJ3ZhbHVlJywgc2V0dGluZ3MuZGF5cyk7CiAgICAgICAgdXBkYXRlX3NsaWRlcl9kYXlzKCk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFVwZGF0ZSB0aGUgJ3Jldmlld3MnIHRleHQgb2YgdGhlIHNjYWxlIHNsaWRlci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gdXBkYXRlX3NsaWRlcl9yZXZpZXdzKCkgewogICAgICAgIHZhciByZXZpZXdfY291bnQgPSAkKCcjdGltZWxpbmUgLnJhbmdlX3Jldmlld3MnKTsKICAgICAgICByZXZpZXdfY291bnQudGV4dChncmFwaC50b3RhbF9yZXZpZXdzKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gVXBkYXRlIHRoZSAnZGF5cycgdGV4dCBvZiB0aGUgc2NhbGUgc2xpZGVyLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiB1cGRhdGVfc2xpZGVyX2RheXMoKSB7CiAgICAgICAgdmFyIGRheXMgPSBzZXR0aW5ncy5kYXlzOwogICAgICAgIHZhciBwZXJpb2QgPSAkKCcjdGltZWxpbmUgLnJhbmdlX2RheXMnKTsKICAgICAgICBpZiAoZGF5cyA8PSAxKSB7CiAgICAgICAgICAgIHBlcmlvZC50ZXh0KChkYXlzKjI0KSsnIGhvdXJzJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGVyaW9kLnRleHQoZGF5cy50b0ZpeGVkKDIpKycgZGF5cycpOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU2F2ZSB0aGUgc2NyaXB0IHNldHRpbmdzIChhZnRlciBhIDUwMG1zIGRlbGF5KS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgdmFyIHNhdmVfZGVsYXlfdGltZXI7CiAgICBmdW5jdGlvbiBzYXZlX3NldHRpbmdzKCkgewogICAgICAgIGlmIChzYXZlX2RlbGF5X3RpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dChzYXZlX2RlbGF5X3RpbWVyKTsKICAgICAgICBzYXZlX2RlbGF5X3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICB3a29mLlNldHRpbmdzLnNhdmUoJ3RpbWVsaW5lJyk7CiAgICAgICAgfSwgNTAwKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSGFuZGxlciBmb3IgcmVzaXppbmcgdGhlIHBhbmVsIGJ5IGRyYWdnaW5nIHRoZSBib3R0b20gb2YgdGhlIGdyYXBoLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHJlc2l6ZV9wYW5lbChlKSB7CiAgICAgICAgaWYgKGUuYnV0dG9uICE9PSAwKSByZXR1cm47CiAgICAgICAgdmFyIHBhbmVsID0gJCgnI3RpbWVsaW5lID4gLmdyYXBoX3BhbmVsJyk7CiAgICAgICAgdmFyIHN0YXJ0X3kgPSBlLnBhZ2VZOwogICAgICAgIHZhciBzdGFydF9oZWlnaHQgPSBzZXR0aW5ncy5ncmFwaF9oZWlnaHQ7CiAgICAgICAgJCgnYm9keScpCiAgICAgICAgLmFkZENsYXNzKCdtdXRlX3BvcG92ZXInKQogICAgICAgIC5vbignbW91c2Vtb3ZlLnRpbWVsaW5lX3Jlc2l6ZSB0b3VjaG1vdmUudGltZWxpbmVfcmVzaXplJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzdGFydF9oZWlnaHQgKyAoZS5wYWdlWSAtIHN0YXJ0X3kpOwogICAgICAgICAgICBpZiAoaGVpZ2h0IDwgZ3JhcGgueV9heGlzLm1pbl9oZWlnaHQpIGhlaWdodCA9IGdyYXBoLnlfYXhpcy5taW5faGVpZ2h0OwogICAgICAgICAgICBpZiAoaGVpZ2h0ID4gZ3JhcGgueV9heGlzLm1heF9oZWlnaHQpIGhlaWdodCA9IGdyYXBoLnlfYXhpcy5tYXhfaGVpZ2h0OwogICAgICAgICAgICBzZXR0aW5ncy5ncmFwaF9oZWlnaHQgPSBoZWlnaHQ7CiAgICAgICAgICAgIGdyYXBoLnlfYXhpcy5oZWlnaHQgPSBoZWlnaHQgLSAoZ3JhcGgubWFyZ2luLnRvcCArIGdyYXBoLm1hcmdpbi5ib3R0b20pOwogICAgICAgICAgICBkcmF3X3RpbWVsaW5lKCk7CiAgICAgICAgfSkKICAgICAgICAub24oJ21vdXNldXAudGltZWxpbmVfcmVzaXplIHRvdWNoZW5kLnRpbWVsaW5lX3Jlc2l6ZScsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICBzYXZlX3NldHRpbmdzKCk7CiAgICAgICAgICAgICQoJ2JvZHknKS5vZmYoJy50aW1lbGluZV9yZXNpemUnKS5yZW1vdmVDbGFzcygnbXV0ZV9wb3BvdmVyJyk7CiAgICAgICAgfSk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEV2ZW50IGhhbmRsZXIgZm9yIGhvdmVyaW5nIG92ZXIgdGhlIHRpbWUgc2NhbGUgZm9yIGhpZ2hsaWdodGluZy4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2YXIgaGlnaGxpZ2h0ID0ge3N0YXJ0OjAsIGVuZDowLCBkcmFnZ2luZzpmYWxzZSwgaGlnaGxpZ2h0ZWQ6IGZhbHNlfTsKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodF9ob3ZlcihlKSB7CiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMgPT09ICdub25lJykgcmV0dXJuOwogICAgICAgIGlmIChoaWdobGlnaHQuZHJhZ2dpbmcpIHJldHVybiB0cnVlOwogICAgICAgIHZhciBidW5kbGVfaWR4ID0gbmVhcmVzdF9idW5kbGUoZS5wYWdlWCk7CiAgICAgICAgdmFyIHg7CiAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnbW91c2VlbnRlcic6CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ21vdXNlbW92ZSc6CiAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0LmhpZ2hsaWdodGVkKSByZXR1cm47CiAgICAgICAgICAgICAgICB4ID0gYnVuZGxlX3RvX3goYnVuZGxlX2lkeCk7CiAgICAgICAgICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCAubWFya2VyLnN0YXJ0JykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnK3grJywwKScpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdtb3VzZWxlYXZlJzoKICAgICAgICAgICAgICAgIGlmIChoaWdobGlnaHQuZHJhZ2dpbmcgfHwgaGlnaGxpZ2h0LmhpZ2hsaWdodGVkKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIGhpZGVfaGlnaGxpZ2h0KCk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ3RvdWNoc3RhcnQnOgogICAgICAgICAgICBjYXNlICdtb3VzZWRvd24nOgogICAgICAgICAgICAgICAgaWYgKGUuYnV0dG9uICE9PSAwKSByZXR1cm47CiAgICAgICAgICAgICAgICBoaWdobGlnaHQuaGlnaGxpZ2h0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0LmRyYWdnaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGhpZ2hsaWdodC5zdGFydCA9IGJ1bmRsZV9pZHg7CiAgICAgICAgICAgICAgICB4ID0gYnVuZGxlX3RvX3goYnVuZGxlX2lkeCk7CiAgICAgICAgICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCAubWFya2VyLnN0YXJ0JykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnK3grJywwKScpOwogICAgICAgICAgICAgICAgJCgnI3RpbWVsaW5lIC5oaWdobGlnaHQgLm1hcmtlci5lbmQnKS5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKC0xMDAsMCknKTsKICAgICAgICAgICAgICAgICQoJyN0aW1lbGluZSAuaGlnaGxpZ2h0IHJlY3QubWFya2VyJykuYXR0cignd2lkdGgnLDApLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyt4KycsMCknKTsKICAgICAgICAgICAgICAgICQoJ2JvZHknKS5vbignbW91c2Vtb3ZlLnRpbWVsaW5lX2hpZ2hsaWdodCcsIGhpZ2hsaWdodF9kcmFnKTsKICAgICAgICAgICAgICAgICQoJ2JvZHknKS5vbigndG91Y2hlbmQudGltZWxpbmVfaGlnaGxpZ2h0IG1vdXNldXAudGltZWxpbmVfaGlnaGxpZ2h0JywgaGlnaGxpZ2h0X3JlbGVhc2UpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFdmVuIGhhbmRsZXIgZm9yIGRyYWdnaW5nIHdoZW4gaGlnaGxpZ2h0aW5nIGEgdGltZSByYW5nZS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBoaWdobGlnaHRfZHJhZyhlKSB7CiAgICAgICAgdmFyIGJ1bmRsZV9pZHggPSBuZWFyZXN0X2J1bmRsZShlLnBhZ2VYKTsKICAgICAgICBoaWdobGlnaHQuZW5kID0gYnVuZGxlX2lkeDsKICAgICAgICB2YXIgeDEgPSBidW5kbGVfdG9feChoaWdobGlnaHQuc3RhcnQpOwogICAgICAgIHZhciB4MiA9IGJ1bmRsZV90b194KGhpZ2hsaWdodC5lbmQpOwogICAgICAgICQoJyN0aW1lbGluZSAuaGlnaGxpZ2h0IC5tYXJrZXIuZW5kJykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnK3gyKycsMCknKTsKICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCByZWN0Lm1hcmtlcicpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJytNYXRoLm1pbih4MSx4MikrJy41LDAuNSknKS5hdHRyKCd3aWR0aCcsTWF0aC5hYnMoeDIteDEpKTsKICAgICAgICBzaG93X3Jldmlld19pbmZvKGZhbHNlIC8qIHN0aWNreSAqLyk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEV2ZW50IGhhbmRsZXIgZm9yIHRoZSBlbmQgb2YgYSAnZHJhZycgd2hlbiBoaWdobGlnaHRpbmcgYSB0aW1lIHJhbmdlLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGhpZ2hsaWdodF9yZWxlYXNlKGUpIHsKICAgICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjsKICAgICAgICBoaWdobGlnaHQuZHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICAkKCdib2R5Jykub2ZmKCcudGltZWxpbmVfaGlnaGxpZ2h0Jyk7CiAgICAgICAgdmFyIGJ1bmRsZV9pZHggPSBuZWFyZXN0X2J1bmRsZShlLnBhZ2VYKTsKICAgICAgICBoaWdobGlnaHQuZW5kID0gYnVuZGxlX2lkeDsKICAgICAgICBpZiAoaGlnaGxpZ2h0LnN0YXJ0ID09PSBoaWdobGlnaHQuZW5kKSB7CiAgICAgICAgICAgIGhpZGVfaGlnaGxpZ2h0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHgxID0gYnVuZGxlX3RvX3goTWF0aC5taW4oaGlnaGxpZ2h0LnN0YXJ0LCBoaWdobGlnaHQuZW5kKSk7CiAgICAgICAgICAgIHZhciB4MiA9IGJ1bmRsZV90b194KE1hdGgubWF4KGhpZ2hsaWdodC5zdGFydCwgaGlnaGxpZ2h0LmVuZCkpOwogICAgICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCAubWFya2VyLnN0YXJ0JykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnK3gxKycsMCknKTsKICAgICAgICAgICAgJCgnI3RpbWVsaW5lIC5oaWdobGlnaHQgLm1hcmtlci5lbmQnKS5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcreDIrJywwKScpOwogICAgICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCByZWN0Lm1hcmtlcicpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyt4MSsnLjUsMC41KScpLmF0dHIoJ3dpZHRoJyx4Mi14MSk7CiAgICAgICAgICAgIGhpZ2hsaWdodC5oaWdobGlnaHRlZCA9IHRydWU7CiAgICAgICAgICAgIHNob3dfcmV2aWV3X2luZm8odHJ1ZSAvKiBzdGlja3kgKi8pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEhpZGUgdGhlIHRpbWVsaW5lJ3MgaGlnaGxpZ2h0IGN1cnNvcnMuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaGlkZV9oaWdobGlnaHQoKSB7CiAgICAgICAgaGlnaGxpZ2h0LnN0YXJ0ID0gLTE7CiAgICAgICAgaGlnaGxpZ2h0LmVuZCA9IC0xOwogICAgICAgIGhpZ2hsaWdodC5oaWdobGlnaHRlZCA9IGZhbHNlOwogICAgICAgICQoJyN0aW1lbGluZSAuaGlnaGxpZ2h0IHJlY3QubWFya2VyJykuYXR0cignd2lkdGgnLDApLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTEwMCwwLjUpJyk7CiAgICAgICAgJCgnI3RpbWVsaW5lIC5oaWdobGlnaHQgLm1hcmtlci5zdGFydCcpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTEwMCwwKScpOwogICAgICAgICQoJyN0aW1lbGluZSAuaGlnaGxpZ2h0IC5tYXJrZXIuZW5kJykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgtMTAwLDApJyk7CiAgICAgICAgaGlkZV9yZXZpZXdfaW5mbygpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBuZWFyZXN0X2J1bmRsZSgpCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gbmVhcmVzdF9idW5kbGUoeCkgewogICAgICAgIHZhciBwYW5lbF9sZWZ0ID0gTWF0aC5mbG9vcigkKCcjdGltZWxpbmUgLmdyYXBoX3BhbmVsJykub2Zmc2V0KCkubGVmdCk7CiAgICAgICAgeCAtPSBwYW5lbF9sZWZ0ICsgZ3JhcGgubWFyZ2luLmxlZnQ7CiAgICAgICAgaWYgKHggPCAwKSB4ID0gMDsKICAgICAgICB2YXIgdGljID0geCAqIGdyYXBoLnhfYXhpcy5tYXhfaG91cnMgLyBncmFwaC54X2F4aXMud2lkdGg7CiAgICAgICAgdmFyIGJ1bmRsZV9pZHggPSBncmFwaC50aW1lc2xvdHNbTWF0aC5taW4oZ3JhcGgueF9heGlzLm1heF9ob3Vycy0xLCBNYXRoLmZsb29yKHRpYykpXTsKICAgICAgICB2YXIgYnVuZGxlID0gZ3JhcGguYnVuZGxlc1tidW5kbGVfaWR4XTsKICAgICAgICB2YXIgc3RhcnQgPSBidW5kbGUuc3RhcnRfdGltZTsKICAgICAgICB2YXIgZW5kID0gYnVuZGxlLmVuZF90aW1lOwogICAgICAgIHJldHVybiAodGljIDw9ICgoc3RhcnQrZW5kKS8yKSA/IGJ1bmRsZV9pZHggOiBidW5kbGVfaWR4KzEpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBDb252ZXJ0IGEgYnVuZGxlX2lkeCB0byBhIGdyYXBoIGhvdXIgb2Zmc2V0LgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGJ1bmRsZV90b190aWMoYnVuZGxlX2lkeCkgewogICAgICAgIGlmIChidW5kbGVfaWR4ID49IGdyYXBoLmJ1bmRsZXMubGVuZ3RoKSByZXR1cm4gZ3JhcGgueF9heGlzLm1heF9ob3VyczsKICAgICAgICByZXR1cm4gZ3JhcGguYnVuZGxlc1tidW5kbGVfaWR4XS5zdGFydF90aW1lOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBDb252ZXJ0IGEgYnVuZGxlX2lkeCB0byBhIGdyYXBoIFggb2Zmc2V0LgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGJ1bmRsZV90b194KGJ1bmRsZV9pZHgpIHsKICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChidW5kbGVfdG9fdGljKGJ1bmRsZV9pZHgpICogZ3JhcGgudGljX3NwYWNpbmcpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBPcGVuIHRoZSBzZXR0aW5ncyBkaWFsb2cKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gb3Blbl9zZXR0aW5ncygpIHsKICAgICAgICB2YXIgY29uZmlnID0gewogICAgICAgICAgICBzY3JpcHRfaWQ6ICd0aW1lbGluZScsCiAgICAgICAgICAgIHRpdGxlOiAnVWx0aW1hdGUgVGltZWxpbmUnLAogICAgICAgICAgICBvbl9zYXZlOiBzZXR0aW5nc19zYXZlZCwKICAgICAgICAgICAgY29udGVudDogewogICAgICAgICAgICAgICAgdGFiczoge3R5cGU6J3RhYnNldCcsIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICAgICBwZ0dyYXBoOiB7dHlwZToncGFnZScsIGxhYmVsOidHcmFwaCcsIGhvdmVyX3RpcDonR3JhcGggU2V0dGluZ3MnLCBjb250ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdycFBsYWNlbWVudDoge3R5cGU6J2dyb3VwJywgbGFiZWw6J1BsYWNlbWVudCcsIGNvbnRlbnQ6ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50OiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonUGxhY2VtZW50IG9uIERhc2hib2FyZCcsIGRlZmF1bHQ6J2JlZm9yZV9uZXh0cmV2aWV3JywgY29udGVudDp7YmVmb3JlX25leHRyZXZpZXc6J0JlZm9yZSAiTmV4dCBSZXZpZXciJyxhZnRlcl9uZXh0cmV2aWV3OidBZnRlciAiTmV4dCBSZXZpZXciJyxhZnRlcl9zcnNwcm9ncmVzczonQWZ0ZXIgIlNSUyBQcm9ncmVzcyInLGFmdGVyX2xldmVscHJvZ3Jlc3M6J0FmdGVyICJMZXZlbCBQcm9ncmVzcyInLGFmdGVyX3VubG9ja3M6J0FmdGVyICJOZXcgVW5sb2NrcyInLGFmdGVyX3JlY2VudGNoYXQ6J0FmdGVyIFJlY2VudCBGb3J1bSBBY3Rpdml0eSd9LCBob3Zlcl90aXA6J0Nob29zZSB3aGVyZSB0aGUgdGltZWxpbmUgd2lsbFxuYmUgcG9zaXRpb25lZCBvbiB0aGUgZGFzaGJvYXJkLid9LAogICAgICAgICAgICAgICAgICAgICAgICB9fSwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JwVGltZToge3R5cGU6J2dyb3VwJywgbGFiZWw6J1RpbWUnLCBjb250ZW50OnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9ybWF0OiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonVGltZSBGb3JtYXQnLCBkZWZhdWx0OicxMmhvdXInLCBjb250ZW50OnsnMTJob3VyJzonMTItaG91cicsJzI0aG91cic6JzI0LWhvdXInLCAnaG91cnNfb25seSc6ICdIb3VycyBvbmx5J30sIGhvdmVyX3RpcDonRGlzcGxheSB0aW1lIGluIDEyIG9yIDI0LWhvdXIgZm9ybWF0LCBvciBob3Vycy1mcm9tLW5vdy4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kYXlzOiB7dHlwZTonbnVtYmVyJywgbGFiZWw6J1NsaWRlciBSYW5nZSBNYXggKGRheXMpJywgbWluOjEsIG1heDoxMjUsIGRlZmF1bHQ6NywgaG92ZXJfdGlwOidDaG9vc2UgbWF4aW11bSByYW5nZSBvZiB0aGUgdGltZWxpbmUgc2xpZGVyIChpbiBkYXlzKS4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICAgICAgICAgIGdycEJhcnM6IHt0eXBlOidncm91cCcsIGxhYmVsOidCYXJzJywgY29udGVudDp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYmFyX3dpZHRoOiB7dHlwZTonbnVtYmVyJywgbGFiZWw6J01heCBCYXIgV2lkdGggKHBpeGVscyknLCBkZWZhdWx0OjAsIGhvdmVyX3RpcDonU2V0IHRoZSBtYXhpbXVtIGJhciB3aWR0aCAoaW4gcGl4ZWxzKS5cbigwID0gdW5saW1pdGVkKSd9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2Jhcl9oZWlnaHQ6IHt0eXBlOidudW1iZXInLCBsYWJlbDonTWF4IEdyYXBoIEhlaWdodCAocmV2aWV3cyknLCBkZWZhdWx0OjAsIGhvdmVyX3RpcDonU2V0IHRoZSBtYXhpbXVtIGdyYXBoIGhlaWdodCAoaW4gcmV2aWV3cykuXG4oMCA9IHVubGltaXRlZClcblVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZSBhIGh1Z2UgYmFja2xvZy4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX2Jhcl9oZWlnaHQ6IHt0eXBlOidjaGVja2JveCcsIGxhYmVsOidGb3JjZSBHcmFwaCB0byBNYXggSGVpZ2h0JywgZGVmYXVsdDpmYWxzZSwgaG92ZXJfdGlwOidGb3JjZSB0aGUgZ3JhcGggaGVpZ2h0IHRvIGFsd2F5cyBiZSB0aGUgTWF4IEdyYXBoIEhlaWdodC5cblVzZWZ1bCB3aGVuIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmV2aWV3cyB5b3UgZG8gaW4gb25lIHNpdHRpbmcuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJfc3R5bGU6IHt0eXBlOidkcm9wZG93bicsIGxhYmVsOidCYXIgU3R5bGUnLCBkZWZhdWx0OidpdGVtX3R5cGUnLCBjb250ZW50OnsnY291bnQnOidSZXZpZXcgQ291bnQnLCdpdGVtX3R5cGUnOidJdGVtIFR5cGUnLCdzcnNfc3RhZ2UnOidTUlMgTGV2ZWwnLCdsZXZlbCc6J0xldmVsJ30sIGhvdmVyX3RpcDonQ2hvb3NlIGhvdyBiYXJzIGFyZSBzdWJkaXZpZGVkLid9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JzX2N1cnJfbmV4dDoge3R5cGU6J2Ryb3Bkb3duJywgbGFiZWw6J0N1cnJlbnQgLyBOZXh0IFNSUyBMZXZlbCcsIGRlZmF1bHQ6J2N1cnInLCBjb250ZW50OnsnY3Vycic6J0N1cnJlbnQgU1JTIExldmVsJywnbmV4dCc6J05leHQgU1JTIExldmVsJ30sIGhvdmVyX3RpcDonU2VsZWN0IHdoZXRoZXIgU1JTIGlzIGNvbG9yLWNvZGVkIGJ5XG5jdXJyZW50IFNSUyBsZXZlbCwgb3IgbmV4dCBTUlMgbGV2ZWwuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIH19LAogICAgICAgICAgICAgICAgICAgICAgICBncnBNYXJrZXJzOiB7dHlwZTonZ3JvdXAnLCBsYWJlbDonTWFya2VycycsIGNvbnRlbnQ6ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9sZXZlbF9tYXJrZXJzOiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonQ3VycmVudCBMZXZlbCBNYXJrZXJzJywgZGVmYXVsdDoncmt2JywgY29udGVudDp7J25vbmUnOidOb25lJywncmsnOidSYWQgKyBLYW4nLCdya3YnOidSYWQgKyBLYW4gKyBWb2MnfSwgaG92ZXJfdGlwOidTZWxlY3Qgd2hpY2ggaXRlbSB0eXBlcyB3aWxsIHRyaWdnZXIgYSBDdXJyZW50IExldmVsXG5tYXJrZXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZ3JhcGguJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXJuX21hcmtlcnM6IHt0eXBlOidkcm9wZG93bicsIGxhYmVsOidCdXJuIE1hcmtlcnMnLCBkZWZhdWx0OidzaG93JywgY29udGVudDp7J3Nob3cnOidTaG93JywnaGlkZSc6J0hpZGUnfSwgaG92ZXJfdGlwOidTZWxlY3Qgd2hldGhlciBCdXJuIG1hcmtlcnMgYXJlIHNob3duXG5hdCB0aGUgYm90dG9tIG9mIHRoZSBncmFwaC4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICAgICAgcGdSZXZpZXdEZXRhaWxzOiB7dHlwZToncGFnZScsIGxhYmVsOidSZXZpZXcgRGV0YWlscycsIGhvdmVyX3RpcDonUmV2aWV3IERldGFpbHMgUG9wLXVwJywgY29udGVudDogewogICAgICAgICAgICAgICAgICAgICAgICBzaG93X3Jldmlld19kZXRhaWxzOiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonU2hvdyBSZXZpZXcgRGV0YWlscycsIGRlZmF1bHQ6J2Z1bGwnLCBjb250ZW50Onsnbm9uZSc6J05vbmUnLCdzdW1tYXJ5JzonU3VtbWFyeScsJ2l0ZW1fbGlzdCc6J0l0ZW0gTGlzdCcsJ2Z1bGwnOidGdWxsIEl0ZW0gRGV0YWlscyd9LCBob3Zlcl90aXA6J0Nob29zZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIHRvIGRpc3BsYXlcbndoZW4gYSBiYXIgb3IgdGltZSByYW5nZSBpcyBzZWxlY3RlZC4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgcmV2aWV3X2RldGFpbHNfc3VtbWFyeToge3R5cGU6J2Ryb3Bkb3duJywgbGFiZWw6J1JldmlldyBEZXRhaWxzIFN1bW1hcnknLCBkZWZhdWx0OidpdGVtX3R5cGUnLCBjb250ZW50OnsnY291bnQnOidSZXZpZXcgQ291bnQnLCdpdGVtX3R5cGUnOidJdGVtIFR5cGUnLCdzcnNfc3RhZ2UnOidTUlMgTGV2ZWwnLCdsZXZlbCc6J0xldmVsJ30sIGhvdmVyX3RpcDonQ2hvb3NlIHdoaWNoIHN1bW1hcnkgaW5mb3JtYXRpb24gdG9cbmRpc3BsYXkgb24gdGhlIFJldmlldyBEZXRhaWxzIHBvcC11cC4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgcmV2aWV3X2RldGFpbHNfYnV0dG9uczoge3R5cGU6J2NoZWNrYm94JywgbGFiZWw6J1Nob3cgUmV2aWV3IERldGFpbHMgQnV0dG9ucycsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidTaG93IGNvbmZpZ3VyYXRpb24gYnV0dG9ucyBvbiBSZXZpZXcgRGV0YWlscyBwb3AtdXAuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfYmFyX3N0eWxlX2Ryb3Bkb3duOiB7dHlwZTonY2hlY2tib3gnLCBsYWJlbDonU2hvdyBCYXIgU3R5bGUgRHJvcGRvd24nLCBkZWZhdWx0OmZhbHNlLCBob3Zlcl90aXA6J1Nob3cgdGhlIEJhciBTdHlsZSBkcm9wZG93biBhYm92ZSB0aGUgdGltZWxpbmUuJ30sCiAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICB9fSwKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdmFyIHNldHRpbmdzX2RpYWxvZyA9IG5ldyB3a29mLlNldHRpbmdzKGNvbmZpZyk7CiAgICAgICAgc2V0dGluZ3NfZGlhbG9nLm9wZW4oKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgaG91cnMgcGVyIGJhci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZ2V0X2hvdXJzX3Blcl9iYXIoKSB7CiAgICAgICAgZ3JhcGgueF9heGlzLndpZHRoID0gZ3JhcGguZWxlbS53aWR0aCgpIC0gZ3JhcGgubWFyZ2luLmxlZnQ7CiAgICAgICAgZ3JhcGgueF9heGlzLm1heF9ob3VycyA9IE1hdGgucm91bmQoc2V0dGluZ3MuZGF5cyAqIDI0KTsKCiAgICAgICAgLy8gTm8gbW9yZSB0aGFuIDEgbGFiZWwgZXZlcnkgNTAgcGl4ZWxzCiAgICAgICAgdmFyIG1pbl9waXhlbHNfcGVyX2xhYmVsID0gNTA7CiAgICAgICAgZ3JhcGgubWluX2hvdXJzX3Blcl9sYWJlbCA9IG1pbl9waXhlbHNfcGVyX2xhYmVsICogZ3JhcGgueF9heGlzLm1heF9ob3VycyAvIGdyYXBoLnhfYXhpcy53aWR0aDsKICAgICAgICB4c2NhbGUuaWR4ID0gMDsKICAgICAgICB3aGlsZSAoKHhzY2FsZS5ob3Vyc19wZXJfbGFiZWxbeHNjYWxlLmlkeF0gPD0gZ3JhcGgubWluX2hvdXJzX3Blcl9sYWJlbCkgJiYKICAgICAgICAgICAgICAgKHhzY2FsZS5pZHggPCB4c2NhbGUuaG91cnNfcGVyX2xhYmVsLmxlbmd0aC0xKSkgewogICAgICAgICAgICB4c2NhbGUuaWR4Kys7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4geHNjYWxlLmJ1bmRsZV9jaG9pY2VzW3hzY2FsZS5pZHhdOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBNYXAgbGV0dGVycyBpbiB0aGUgeHNjYWxlIGNoYXJ0IHRvIGNvcnJlc3BvbmRpbmcgbGFiZWwtZ2VuZXJhdGluZyBmdW5jdGlvbnMuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBsYWJlbF9mdW5jdGlvbnMgPSB7CiAgICAgICAgJ20nOiBtb250aF9sYWJlbCwKICAgICAgICAndyc6IHdlZWtfbGFiZWwsCiAgICAgICAgJ0QnOiBtZGF5X2xhYmVsLAogICAgICAgICdkJzogZGF5X2xhYmVsLAogICAgICAgICdoJzogaG91cl9sYWJlbCwKICAgICAgICAnLSc6IG5vX2xhYmVsLAogICAgfTsKCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRnVuY3Rpb25zIGZvciBnZW5lcmF0aW5nIHRpbWUtc2NhbGUgbGFiZWxzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIG1vbnRoX2xhYmVsKGRhdGUsIHF0eSwgdXNlX3Nob3J0KSB7CiAgICAgICAgaWYgKGRhdGUuZ2V0SG91cnMoKSAhPT0gMCB8fCBkYXRlLmdldERhdGUoKSAhPT0gMSkgcmV0dXJuOwogICAgICAgIHJldHVybiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01heScsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddW2RhdGUuZ2V0TW9udGgoKV07CiAgICB9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHdlZWtfbGFiZWwoZGF0ZSwgcXR5LCB1c2Vfc2hvcnQpIHsKICAgICAgICBpZiAoZGF0ZS5nZXRIb3VycygpICE9PSAwIHx8IGRhdGUuZ2V0RGF5KCkgIT09IDApIHJldHVybjsKICAgICAgICByZXR1cm4gKHVzZV9zaG9ydCA/ICdTJyA6ICdTdW4nKTsKICAgIH0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gbWRheV9sYWJlbChkYXRlLCBxdHksIHVzZV9zaG9ydCkgewogICAgICAgIGlmIChkYXRlLmdldEhvdXJzKCkgIT09IDApIHJldHVybjsKICAgICAgICB2YXIgbWRheSA9IGRhdGUuZ2V0RGF0ZSgpOwogICAgICAgIGlmIChtZGF5ICUgcXR5ICE9PSAwKSByZXR1cm47CiAgICAgICAgcmV0dXJuIG1kYXk7CiAgICB9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGRheV9sYWJlbChkYXRlLCBxdHksIHVzZV9zaG9ydCkgewogICAgICAgIGlmIChkYXRlLmdldEhvdXJzKCkgIT09IDApIHJldHVybjsKICAgICAgICB2YXIgbGFiZWwgPSBbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddW2RhdGUuZ2V0RGF5KCldOwogICAgICAgIHJldHVybiAodXNlX3Nob3J0ID8gbGFiZWxbMF0gOiBsYWJlbCk7CiAgICB9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGhvdXJfbGFiZWwoZGF0ZSwgcXR5LCB1c2Vfc2hvcnQpIHsKICAgICAgICB2YXIgaGggPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgaWYgKChoaCAlIHF0eSkgIT09IDApIHJldHVybjsKICAgICAgICBpZiAoc2V0dGluZ3MudGltZV9mb3JtYXQgPT09ICcyNGhvdXInKSB7CiAgICAgICAgICAgIHJldHVybiAoJzAnK2hoKyc6MDAnKS5zbGljZSgtNSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICgoKGhoICsgMTEpICUgMTIpICsgMSkgKyAnYXAnW01hdGguZmxvb3IoaGgvMTIpXSArICdtJzsKICAgICAgICB9CiAgICB9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGhvdXJfb25seV9sYWJlbChkYXRlLCBxdHksIHVzZV9zaG9ydCwgdGljX2lkeCkgewogICAgICAgIGlmICh0aWNfaWR4ICUgcXR5ICE9PSAwKSByZXR1cm47CiAgICAgICAgcmV0dXJuIHRpY19pZHggKyAodXNlX3Nob3J0ID8gJ2gnIDogJyBocnMnKTsKICAgIH0KCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIG5vX2xhYmVsKCkge3JldHVybjt9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRHJhdyB0aGUgdGltZWxpbmUKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZHJhd190aW1lbGluZSgpIHsKICAgICAgICB2YXIgcGFuZWwgPSBncmFwaC5lbGVtLAogICAgICAgICAgICBwYW5lbF9oZWlnaHQgPSBzZXR0aW5ncy5ncmFwaF9oZWlnaHQsCiAgICAgICAgICAgIHBhbmVsX3dpZHRoID0gZ3JhcGguZWxlbS53aWR0aCgpLAogICAgICAgICAgICBncmFwaF9oZWlnaHQgPSBwYW5lbF9oZWlnaHQgLSAoZ3JhcGgubWFyZ2luLnRvcCArIGdyYXBoLm1hcmdpbi5ib3R0b20pOwoKICAgICAgICB2YXIgbWF0Y2ggPSB4c2NhbGUucmVkX3RpY19jaG9pY2VzW3hzY2FsZS5pZHhdLm1hdGNoKC9eKFxkKikoLikocz8pJC8pOwogICAgICAgIHZhciByZWRfcXR5ID0gTnVtYmVyKG1hdGNoWzFdKTsKICAgICAgICB2YXIgcmVkX2Z1bmMgPSBsYWJlbF9mdW5jdGlvbnNbbWF0Y2hbMl1dOwogICAgICAgIHZhciByZWRfdXNlX3Nob3J0ID0gKG1hdGNoWzNdID09PSAncycpOwoKICAgICAgICBtYXRjaCA9IHhzY2FsZS5tYWpvcl90aWNfY2hvaWNlc1t4c2NhbGUuaWR4XS5tYXRjaCgvXihcZCopKC4pKHM/KSQvKTsKICAgICAgICB2YXIgbWFqX3F0eSA9IE51bWJlcihtYXRjaFsxXSk7CiAgICAgICAgdmFyIG1hal9mdW5jID0gbGFiZWxfZnVuY3Rpb25zW21hdGNoWzJdXTsKICAgICAgICB2YXIgbWFqX3VzZV9zaG9ydCA9IChtYXRjaFszXSA9PT0gJ3MnKTsKCiAgICAgICAgbWF0Y2ggPSB4c2NhbGUubWlub3JfdGljX2Nob2ljZXNbeHNjYWxlLmlkeF0ubWF0Y2goL14oXGQqKSguKShzPykkLyk7CiAgICAgICAgdmFyIG1pbl9xdHkgPSBOdW1iZXIobWF0Y2hbMV0pOwogICAgICAgIHZhciBtaW5fZnVuYyA9IGxhYmVsX2Z1bmN0aW9uc1ttYXRjaFsyXV07CiAgICAgICAgdmFyIG1pbl91c2Vfc2hvcnQgPSAobWF0Y2hbM10gPT09ICdzJyk7CgogICAgICAgIGlmIChzZXR0aW5ncy50aW1lX2Zvcm1hdCA9PT0gJ2hvdXJzX29ubHknKSB7CiAgICAgICAgICAgIHJlZF9mdW5jID0gZnVuY3Rpb24oKSB7cmV0dXJuIDA7fTsKICAgICAgICAgICAgbWFqX2Z1bmMgPSBob3VyX29ubHlfbGFiZWw7CiAgICAgICAgICAgIG1pbl9mdW5jID0gaG91cl9vbmx5X2xhYmVsOwogICAgICAgIH0KCiAgICAgICAgdmFyIGJ1bmRsZV9zaXplID0geHNjYWxlLmJ1bmRsZV9jaG9pY2VzW3hzY2FsZS5pZHhdOwoKICAgICAgICAvLyBTdHJpbmcgZm9yIGJ1aWxkaW5nIGh0bWwuCiAgICAgICAgdmFyIGdyaWQgPSAnJzsKICAgICAgICB2YXIgbGFiZWxfeCA9IFtdOwogICAgICAgIHZhciBsYWJlbF95ID0gJyc7CiAgICAgICAgdmFyIGJhcnMgPSAnJywgYmFyX292ZXJsYXlzID0gJyc7CiAgICAgICAgdmFyIG1hcmtlcnMgPSAnJzsKCiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBEcmF3IHZlcnRpY2FsIGF4aXMgZ3JpZAoKICAgICAgICAvLyBDYWxjdWxhdGUgbWFqb3IgYW5kIG1pbm9yIHZlcnRpY2FsIGdyYXBoIHRpY3MuCiAgICAgICAgdmFyIGluY19zID0gMSwgaW5jX2wgPSA1OwogICAgICAgIHZhciBtYXhfcmV2aWV3cyA9IGdyYXBoLm1heF9yZXZpZXdzOwogICAgICAgIGlmIChzZXR0aW5ncy5tYXhfYmFyX2hlaWdodCA+IDApIHsKICAgICAgICAgICAgaWYgKHNldHRpbmdzLmZpeGVkX2Jhcl9oZWlnaHQgfHwgKG1heF9yZXZpZXdzID4gc2V0dGluZ3MubWF4X2Jhcl9oZWlnaHQpKSBtYXhfcmV2aWV3cyA9IHNldHRpbmdzLm1heF9iYXJfaGVpZ2h0OwogICAgICAgIH0KICAgICAgICB3aGlsZSAoTWF0aC5jZWlsKG1heF9yZXZpZXdzIC8gaW5jX3MpID4gNSkgewogICAgICAgICAgICBzd2l0Y2ggKGluY19zLnRvU3RyaW5nKClbMF0pIHsKICAgICAgICAgICAgICAgIGNhc2UgJzEnOiBpbmNfcyAqPSAyOyBpbmNfbCAqPSAyOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJzInOiBpbmNfcyA9IE1hdGgucm91bmQoMi41ICogaW5jX3MpOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJzUnOiBpbmNfcyAqPSAyOyBpbmNfbCAqPSA1OyBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gRHJhdyB2ZXJ0aWNhbCBncmFwaCB0aWNzICgjIG9mIFJldmlld3MpLgogICAgICAgIHZhciB0aWNfY2xhc3MsIHk7CiAgICAgICAgZ3JhcGgueV9heGlzLm1heF9yZXZpZXdzID0gTWF0aC5tYXgoMywgTWF0aC5jZWlsKG1heF9yZXZpZXdzIC8gaW5jX3MpICogaW5jX3MpOwogICAgICAgIGZvciAodmFyIHRpYyA9IDA7IHRpYyA8PSBncmFwaC55X2F4aXMubWF4X3Jldmlld3M7IHRpYyArPSBpbmNfcykgewogICAgICAgICAgICB0aWNfY2xhc3MgPSAoKHRpYyAlIGluY19sKSA9PT0gMCA/ICdtYWpvcicgOiAnbWlub3InKTsKICAgICAgICAgICAgeSA9IChncmFwaC5tYXJnaW4udG9wICsgZ3JhcGhfaGVpZ2h0KSAtIE1hdGgucm91bmQoZ3JhcGhfaGVpZ2h0ICogKHRpYyAvIGdyYXBoLnlfYXhpcy5tYXhfcmV2aWV3cykpOwogICAgICAgICAgICBpZiAodGljID4gMCkgewogICAgICAgICAgICAgICAgZ3JpZCArPSAnPHBhdGggY2xhc3M9IicrdGljX2NsYXNzKyciIGQ9Ik0nK2dyYXBoLm1hcmdpbi5sZWZ0KycsJyt5KydoJytncmFwaC54X2F4aXMud2lkdGgrJyIgLz4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhYmVsX3kgKz0gJzx0ZXh0IGNsYXNzPSInK3RpY19jbGFzcysnIiB4PSInKyhncmFwaC5tYXJnaW4ubGVmdC00KSsnIiB5PSInK3krJyIgZHk9IjAuNGVtIj4nK3RpYysnPC90ZXh0Pic7CiAgICAgICAgfQoKICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIERyYXcgaG9yaXpvbnRhbCBheGlzIGdyaWQKCiAgICAgICAgZ3JhcGgudGljX3NwYWNpbmcgPSAoZ3JhcGgueF9heGlzLndpZHRoKSAvIChncmFwaC54X2F4aXMubWF4X2hvdXJzKTsgLy8gV2lkdGggb2YgYSB0aW1lIHNsb3QuCiAgICAgICAgdmFyIHByZXZfbGFiZWwgPSAtOWUxMDsKICAgICAgICBmb3IgKHZhciB0aWNfaWR4ID0gMDsgdGljX2lkeCA8IGdyYXBoLnhfYXhpcy5tYXhfaG91cnM7IHRpY19pZHgrKykgewogICAgICAgICAgICB2YXIgdGltZSA9IG5ldyBEYXRlKGdyYXBoLnN0YXJ0X3RpbWUuZ2V0VGltZSgpICsgdGljX2lkeCAqIDM2MDAwMDApOwoKICAgICAgICAgICAgdmFyIHJlZF9sYWJlbCA9IHJlZF9mdW5jKHRpbWUsIHJlZF9xdHksIHJlZF91c2Vfc2hvcnQsIHRpY19pZHgpOwogICAgICAgICAgICB2YXIgbWFqX2xhYmVsID0gbWFqX2Z1bmModGltZSwgbWFqX3F0eSwgbWFqX3VzZV9zaG9ydCwgdGljX2lkeCk7CiAgICAgICAgICAgIHZhciBtaW5fbGFiZWwgPSBtaW5fZnVuYyh0aW1lLCBtaW5fcXR5LCBtaW5fdXNlX3Nob3J0LCB0aWNfaWR4KTsKCiAgICAgICAgICAgIHZhciB4ID0gZ3JhcGgubWFyZ2luLmxlZnQgKyBNYXRoLnJvdW5kKCh0aWNfaWR4IC0gdGltZV9zaGlmdC82MCkgKiBncmFwaC50aWNfc3BhY2luZyk7CiAgICAgICAgICAgIHZhciBsYWJlbDsKICAgICAgICAgICAgaWYgKHJlZF9sYWJlbCkgewogICAgICAgICAgICAgICAgaWYgKHRpY19pZHggPiAwKSBncmlkICs9ICc8cGF0aCBjbGFzcz0icmVkdGljIiBkPSJNJyt4KycsMHYnKyhncmFwaC5tYXJnaW4udG9wK2dyYXBoX2hlaWdodC0xKSsnIiAvPic7CiAgICAgICAgICAgICAgICBpZiAoIW1hal91c2Vfc2hvcnQgJiYgdGljX2lkeCAtIHByZXZfbGFiZWwgPCBncmFwaC5taW5faG91cnNfcGVyX2xhYmVsKjAuNTgpIGxhYmVsX3gucG9wKCk7CiAgICAgICAgICAgICAgICBsYWJlbF94LnB1c2goJzx0ZXh0IGNsYXNzPSJyZWR0aWMiIHg9IicrKHgrNCkrJyIgeT0iJysoZ3JhcGgubWFyZ2luLnRvcC04KSsnIj4nK3JlZF9sYWJlbCsnPC90ZXh0PicpOwogICAgICAgICAgICAgICAgcHJldl9sYWJlbCA9IHRpY19pZHg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFqX2xhYmVsKSB7CiAgICAgICAgICAgICAgICBpZiAodGljX2lkeCA+IDApIGdyaWQgKz0gJzxwYXRoIGNsYXNzPSJtYWpvciIgZD0iTScreCsnLDB2JysoZ3JhcGgubWFyZ2luLnRvcCtncmFwaF9oZWlnaHQtMSkrJyIgLz4nOwogICAgICAgICAgICAgICAgaWYgKG1hal91c2Vfc2hvcnQgfHwgdGljX2lkeCAtIHByZXZfbGFiZWwgPiBncmFwaC5taW5faG91cnNfcGVyX2xhYmVsKjAuNTgpIHsKICAgICAgICAgICAgICAgICAgICBsYWJlbF94LnB1c2goJzx0ZXh0IGNsYXNzPSJtYWpvciIgeD0iJysoeCs0KSsnIiB5PSInKyhncmFwaC5tYXJnaW4udG9wLTgpKyciPicrbWFqX2xhYmVsKyc8L3RleHQ+Jyk7CiAgICAgICAgICAgICAgICAgICAgcHJldl9sYWJlbCA9IHRpY19pZHg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAobWluX2xhYmVsKSB7CiAgICAgICAgICAgICAgICBpZiAodGljX2lkeCA+IDApIGdyaWQgKz0gJzxwYXRoIGNsYXNzPSJtaW5vciIgZD0iTScreCsnLCcrKGdyYXBoLm1hcmdpbi50b3AtNikrJ3YnKyhncmFwaF9oZWlnaHQrNikrJyIgLz4nOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIERyYXcgYmFycwoKICAgICAgICB2YXIgbWluX2Jhcl9oZWlnaHQgPSBNYXRoLmNlaWwoZ3JhcGgueV9heGlzLm1heF9yZXZpZXdzIC8gZ3JhcGgueV9heGlzLmhlaWdodCk7CiAgICAgICAgZm9yICh2YXIgYnVuZGxlX2lkeCBpbiBncmFwaC5idW5kbGVzKSB7CiAgICAgICAgICAgIHZhciBidW5kbGUgPSBncmFwaC5idW5kbGVzW2J1bmRsZV9pZHhdOwogICAgICAgICAgICB2YXIgYmFyX3BhcnRzID0gW107CiAgICAgICAgICAgIHZhciBzdGF0cyA9IGJ1bmRsZS5zdGF0czsKCiAgICAgICAgICAgIHZhciB4MSA9IE1hdGgucm91bmQoYnVuZGxlLnN0YXJ0X3RpbWUgKiBncmFwaC50aWNfc3BhY2luZyk7CiAgICAgICAgICAgIHZhciB4MiA9IE1hdGgucm91bmQoYnVuZGxlLmVuZF90aW1lICogZ3JhcGgudGljX3NwYWNpbmcpOwogICAgICAgICAgICBpZiAoc2V0dGluZ3MubWF4X2Jhcl93aWR0aCA+IDApIHgyID0gTWF0aC5taW4oeDEgKyBzZXR0aW5ncy5tYXhfYmFyX3dpZHRoLCB4Mik7CgogICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzLmJhcl9zdHlsZSkgewogICAgICAgICAgICAgICAgY2FzZSAnY291bnQnOgogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5jb3VudCkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidjb3VudCcsIGhlaWdodDpzdGF0cy5jb3VudH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ2l0ZW1fdHlwZSc6CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLnJhZCkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidyYWQnLCBoZWlnaHQ6c3RhdHMucmFkfSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmthbikgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidrYW4nLCBoZWlnaHQ6c3RhdHMua2FufSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLnZvYykgYmFyX3BhcnRzLnB1c2goe2NsYXNzOid2b2MnLCBoZWlnaHQ6c3RhdHMudm9jfSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnc3JzX3N0YWdlJzoKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuYXBwcikgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidhcHByJywgaGVpZ2h0OnN0YXRzLmFwcHJ9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZ3VydSkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidndXJ1JywgaGVpZ2h0OnN0YXRzLmd1cnV9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMubWFzdCkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidtYXN0JywgaGVpZ2h0OnN0YXRzLm1hc3R9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZW5saSkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidlbmxpJywgaGVpZ2h0OnN0YXRzLmVubGl9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuYnVybikgYmFyX3BhcnRzLnB1c2goe2NsYXNzOididXJuJywgaGVpZ2h0OnN0YXRzLmJ1cm59KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICdsZXZlbCc6CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZ3JwX2lkeCA9IDA7IGdycF9pZHggPD0gNTsgZ3JwX2lkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncnBfbmFtZSA9ICdsdmxncnAnK2dycF9pZHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0c1tncnBfbmFtZV0pIGJhcl9wYXJ0cy5wdXNoKHtjbGFzczonbHZsZ3JwJytncnBfaWR4LCBoZWlnaHQ6c3RhdHNbZ3JwX25hbWVdfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBiYXJfb2Zmc2V0ID0gMDsKICAgICAgICAgICAgZm9yICh2YXIgcGFydF9pZHggaW4gYmFyX3BhcnRzKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFydCA9IGJhcl9wYXJ0c1twYXJ0X2lkeF07CiAgICAgICAgICAgICAgICBpZiAoKHBhcnRfaWR4ID09IGJhcl9wYXJ0cy5sZW5ndGgtMSkgJiYgKGJhcl9vZmZzZXQgKyBwYXJ0LmhlaWdodCA8IG1pbl9iYXJfaGVpZ2h0KSkgewogICAgICAgICAgICAgICAgICAgIHBhcnQuaGVpZ2h0ID0gbWluX2Jhcl9oZWlnaHQgLSBiYXJfb2Zmc2V0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYmFycyArPSAnPHJlY3QgY2xhc3M9ImJhciAnK3BhcnQuY2xhc3MrJyIgeD0iJysoeDErMSkrJyIgeT0iJytiYXJfb2Zmc2V0KyciIHdpZHRoPSInKyh4Mi14MS0zKSsnIiBoZWlnaHQ9IicrcGFydC5oZWlnaHQrJyIgLz4nOwogICAgICAgICAgICAgICAgYmFyX29mZnNldCArPSBwYXJ0LmhlaWdodDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYmFyX3BhcnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGJhcl9vdmVybGF5cyArPSAnPHJlY3QgY2xhc3M9ImJhciBvdmVybGF5IiB4PSInK3gxKyciIHk9IjAiIHdpZHRoPSInKyh4Mi14MSkrJyIgaGVpZ2h0PSInK2dyYXBoLnlfYXhpcy5tYXhfcmV2aWV3cysnIiBkYXRhLWJ1bmRsZT0iJytidW5kbGVfaWR4KyciIC8+JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG1hcmtlcl94OwogICAgICAgICAgICBtYXJrZXJfeCA9IGdyYXBoLm1hcmdpbi5sZWZ0ICsgTWF0aC5mbG9vcigoeDEreDIpLzIpOwogICAgICAgICAgICBpZiAoYnVuZGxlLnN0YXRzLmhhc19jdXJyX21hcmtlciAmJiBzZXR0aW5ncy5jdXJyZW50X2xldmVsX21hcmtlcnMgIT09ICdub25lJykgewogICAgICAgICAgICAgICAgbWFya2VycyArPSAnPHBhdGggY2xhc3M9ImN1ciIgZD0iTScrbWFya2VyX3grJywnKyhncmFwaC5tYXJnaW4udG9wK2dyYXBoX2hlaWdodCsxKSsnbC0zLDZoNnoiIC8+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIGJ1bmRsZS5zdGF0cy5idXJuX2NvdW50ID4gMCAmJiBzZXR0aW5ncy5idXJuX21hcmtlcnMgPT09ICdzaG93JykgewogICAgICAgICAgICAgICAgbWFya2VycyArPSAnPHBhdGggY2xhc3M9ImJ1ciIgZD0iTScrbWFya2VyX3grJywnKyhncmFwaC5tYXJnaW4udG9wK2dyYXBoX2hlaWdodCs4KSsnbC0zLDZoNnoiIC8+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBBc3NlbWJsZSB0aGUgSFRNTAoKICAgICAgICBwYW5lbC5odG1sKAogICAgICAgICAgICAnPHN2ZyBjbGFzcz0iZ3JhcGggbm9zZWxlY3QiIHdpZHRoPSInK3BhbmVsX3dpZHRoKyciIGhlaWdodD0iJytwYW5lbF9oZWlnaHQrJyI+JysKICAgICAgICAgICAgJyAgPHJlY3QgY2xhc3M9ImJrZ2QiIHg9IicrZ3JhcGgubWFyZ2luLmxlZnQrJyIgeT0iJytncmFwaC5tYXJnaW4udG9wKyciIHdpZHRoPSInK2dyYXBoLnhfYXhpcy53aWR0aCsnIiBoZWlnaHQ9IicrZ3JhcGhfaGVpZ2h0KyciIC8+JysKICAgICAgICAgICAgJyAgPGcgY2xhc3M9ImdyaWQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuNSwwLjUpIj4nKwogICAgICAgICAgICBncmlkKwogICAgICAgICAgICAnICAgIDxwYXRoIGNsYXNzPSJzaGFkb3ciIGQ9Ik0nKyhncmFwaC5tYXJnaW4ubGVmdC0yKSsnLDB2JysoZ3JhcGgubWFyZ2luLnRvcCtncmFwaF9oZWlnaHQpKycsaCcrKGdyYXBoLm1hcmdpbi5sZWZ0K2dyYXBoLnhfYXhpcy53aWR0aCsxKSsnIiAvPicrCiAgICAgICAgICAgICcgICAgPHBhdGggY2xhc3M9ImxpZ2h0IiBkPSJNJysoZ3JhcGgubWFyZ2luLmxlZnQtMSkrJywwdicrKGdyYXBoLm1hcmdpbi50b3ArZ3JhcGhfaGVpZ2h0LTEpKyciIC8+JysKICAgICAgICAgICAgJyAgICA8cGF0aCBjbGFzcz0ibGlnaHQiIGQ9Ik0nKyhncmFwaC5tYXJnaW4ubGVmdC0yKSsnLCcrKGdyYXBoLm1hcmdpbi50b3ArZ3JhcGhfaGVpZ2h0KzEpKydoJysoZ3JhcGgubWFyZ2luLmxlZnQrZ3JhcGgueF9heGlzLndpZHRoKzEpKyciIC8+JysKICAgICAgICAgICAgJyAgPC9nPicrCiAgICAgICAgICAgICcgIDxnIGNsYXNzPSJsYWJlbC14Ij4nKwogICAgICAgICAgICBsYWJlbF94LmpvaW4oJycpKwogICAgICAgICAgICAnICA8L2c+JysKICAgICAgICAgICAgJyAgPGcgY2xhc3M9ImxhYmVsLXkiPicrCiAgICAgICAgICAgIGxhYmVsX3krCiAgICAgICAgICAgICcgIDwvZz4nKwogICAgICAgICAgICAnICA8ZyBjbGFzcz0ibWFya2VycyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC41LDAuNSkiPicrCiAgICAgICAgICAgIG1hcmtlcnMrCiAgICAgICAgICAgICcgIDwvZz4nKwogICAgICAgICAgICAnICA8ZyBjbGFzcz0iYmFycyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoJytncmFwaC5tYXJnaW4ubGVmdCsnLCcrKGdyYXBoLm1hcmdpbi50b3ArZ3JhcGhfaGVpZ2h0KSsnKSBzY2FsZSgxLCcrKC0xICogZ3JhcGhfaGVpZ2h0IC8gZ3JhcGgueV9heGlzLm1heF9yZXZpZXdzKSsnKSI+JysKICAgICAgICAgICAgYmFycysKICAgICAgICAgICAgYmFyX292ZXJsYXlzKwogICAgICAgICAgICAnICA8L2c+JysKICAgICAgICAgICAgJyAgPGcgY2xhc3M9InJlc2l6ZV9ncmlwIj4nKwogICAgICAgICAgICAnICAgIDxwYXRoIGNsYXNzPSJzaGFkb3ciIGQ9Ik0nKyhwYW5lbF93aWR0aC0yKSsnLCcrcGFuZWxfaGVpZ2h0KydsMiwtMm0wLC00bC02LDZtLTQsMGwxMCwtMTAiIC8+JysKICAgICAgICAgICAgJyAgICA8cGF0aCBjbGFzcz0ibGlnaHQiIGQ9Ik0nKyhwYW5lbF93aWR0aC0zKSsnLCcrcGFuZWxfaGVpZ2h0KydsMywtM20wLC00bC03LDdtLTQsMGwxMSwtMTEiIC8+JysKICAgICAgICAgICAgJyAgICA8cmVjdCBjbGFzcz0iYm91bmRhcnkiIHg9IjAiIHk9IicrKHBhbmVsX2hlaWdodC0xMykrJyIgd2lkdGg9IicrcGFuZWxfd2lkdGgrJyIgaGVpZ2h0PSIxMyIgLz4nKwogICAgICAgICAgICAnICA8L2c+JysKICAgICAgICAgICAgJyAgPGcgY2xhc3M9ImhpZ2hsaWdodCI+JysKICAgICAgICAgICAgJyAgICA8cmVjdCBjbGFzcz0ibWFya2VyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAwLDAuNSkiIHg9IicrZ3JhcGgubWFyZ2luLmxlZnQrJyIgeT0iJytncmFwaC5tYXJnaW4udG9wKyciIHdpZHRoPSIwIiBoZWlnaHQ9IicrZ3JhcGhfaGVpZ2h0KyciIC8+JysKICAgICAgICAgICAgJyAgICA8cGF0aCBjbGFzcz0ibWFya2VyIHN0YXJ0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAwLDApIiBkPSJNJytncmFwaC5tYXJnaW4ubGVmdCsnLCcrKGdyYXBoLm1hcmdpbi50b3AtMSkrJ2wtMywtNWg2bC0zLDV2JysoZ3JhcGhfaGVpZ2h0KzEpKyciIC8+JysKICAgICAgICAgICAgJyAgICA8cGF0aCBjbGFzcz0ibWFya2VyIGVuZCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMCwwKSIgZD0iTScrZ3JhcGgubWFyZ2luLmxlZnQrJywnKyhncmFwaC5tYXJnaW4udG9wLTEpKydsLTMsLTVoNmwtMyw1dicrKGdyYXBoX2hlaWdodCsxKSsnIiAvPicrCiAgICAgICAgICAgICcgICAgPHJlY3QgY2xhc3M9ImJvdW5kYXJ5IiB4PSInKyhncmFwaC5tYXJnaW4ubGVmdC0yKSsnIiB5PSIwIiB3aWR0aD0iJysoZ3JhcGgueF9heGlzLndpZHRoKzIpKyciIGhlaWdodD0iJytncmFwaC5tYXJnaW4udG9wKyciIC8+JysKICAgICAgICAgICAgJyAgPC9nPicrCiAgICAgICAgICAgICc8L3N2Zz4nCiAgICAgICAgKTsKICAgICAgICBwYW5lbC5oZWlnaHQocGFuZWxfaGVpZ2h0KTsKCiAgICAgICAgLy8gQXR0YWNoIGV2ZW50IGhhbmRsZXJzCiAgICAgICAgcGFuZWwuZmluZCgnLnJlc2l6ZV9ncmlwIC5ib3VuZGFyeScpLm9uKCdtb3VzZWRvd24gdG91Y2hzdGFydCcsIHJlc2l6ZV9wYW5lbCk7CiAgICAgICAgcGFuZWwuZmluZCgnLmhpZ2hsaWdodCAuYm91bmRhcnknKS5vbignbW91c2VlbnRlciBtb3VzZWxlYXZlIG1vdXNlbW92ZSBtb3VzZWRvd24gdG91Y2hzdGFydCcsIGhpZ2hsaWdodF9ob3Zlcik7CiAgICAgICAgcGFuZWwuZmluZCgnLmJhci5vdmVybGF5Jykub24oJ21vdXNlZW50ZXIgbW91c2VsZWF2ZScsIGJhcl9ob3Zlcik7CiAgICAgICAgcGFuZWwuZmluZCgnLmJhci5vdmVybGF5Jykub24oJ2NsaWNrJywgYmFyX2NsaWNrKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRXZlbnQgaGFuZGxlciBmb3IgY2xpY2tpbmcgdGltZWxpbmUgYmFycy4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gYmFyX2NsaWNrKGUpIHsKICAgICAgICBpZiAoc2V0dGluZ3Muc2hvd19yZXZpZXdfZGV0YWlscyA9PT0gJ25vbmUnKSByZXR1cm47CiAgICAgICAgaWYgKGhpZ2hsaWdodC5oaWdobGlnaHRlZCkgaGlkZV9oaWdobGlnaHQoKTsKICAgICAgICB2YXIgYnVuZGxlX2lkeCA9IE51bWJlcihlLnRhcmdldC5hdHRyaWJ1dGVzWydkYXRhLWJ1bmRsZSddLnZhbHVlKTsKICAgICAgICBoaWdobGlnaHQuc3RhcnQgPSBidW5kbGVfaWR4OwogICAgICAgIGhpZ2hsaWdodC5lbmQgPSBidW5kbGVfaWR4ICsgMTsKICAgICAgICBoaWdobGlnaHQuaGlnaGxpZ2h0ZWQgPSB0cnVlOwogICAgICAgIGdyYXBoLmVsZW0ub2ZmKCcuYmFyX2hvdmVyX21vdmUnKTsKICAgICAgICBzaG93X3Jldmlld19pbmZvKHRydWUgLyogc3RpY2t5ICovLCBlKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRXZlbnQgaGFuZGxlciBmb3IgaG92ZXJpbmcgb3ZlciB0aW1lbGluZSBiYXJzLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBiYXJfaG92ZXIoZSkgewogICAgICAgIGlmIChzZXR0aW5ncy5zaG93X3Jldmlld19kZXRhaWxzID09PSAnbm9uZScpIHJldHVybjsKICAgICAgICBpZiAoaGlnaGxpZ2h0LmhpZ2hsaWdodGVkKSByZXR1cm47CiAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnbW91c2VlbnRlcic6CiAgICAgICAgICAgICAgICB2YXIgYnVuZGxlX2lkeCA9IE51bWJlcihlLnRhcmdldC5hdHRyaWJ1dGVzWydkYXRhLWJ1bmRsZSddLnZhbHVlKTsKICAgICAgICAgICAgICAgIGhpZ2hsaWdodC5zdGFydCA9IGJ1bmRsZV9pZHg7CiAgICAgICAgICAgICAgICBoaWdobGlnaHQuZW5kID0gYnVuZGxlX2lkeCArIDE7CiAgICAgICAgICAgICAgICBzaG93X3Jldmlld19pbmZvKGZhbHNlIC8qIHN0aWNreSAqLywgZSk7CiAgICAgICAgICAgICAgICBncmFwaC5lbGVtLm9uKCdtb3VzZW1vdmUuYmFyX2hvdmVyX21vdmUnLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICAgICBncmFwaC5yZXZpZXdfaW5mby5jc3MoJ3RvcCcsIGUuY2xpZW50WSAtIGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIDMwKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdtb3VzZWxlYXZlJzoKICAgICAgICAgICAgICAgIGdyYXBoLmVsZW0ub2ZmKCcuYmFyX2hvdmVyX21vdmUnKTsKICAgICAgICAgICAgICAgIGhpZGVfcmV2aWV3X2luZm8oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gQnVpbGQgYW5kIGRpc3BsYXkgdGhlIFJldmlldyBJbmZvIHBvcC11cC4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gc2hvd19yZXZpZXdfaW5mbyhzdGlja3ksIGUpIHsKICAgICAgICB2YXIgaW5mbyA9ICQoJyN0aW1lbGluZSAucmV2aWV3X2luZm8nKTsKICAgICAgICBpZiAoc3RpY2t5KSB7CiAgICAgICAgICAgICQoJ2JvZHknKS5vZmYoJy50aW1lbGluZV9oaWRlaW5mbycpOwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkKCdib2R5Jykub24oJ2NsaWNrLnRpbWVsaW5lX2hpZGVpbmZvJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgJCgnYm9keScpLm9mZignLnRpbWVsaW5lX2hpZGVpbmZvJyk7CiAgICAgICAgICAgICAgICAgICAgaGlkZV9oaWdobGlnaHQoKTsKICAgICAgICAgICAgICAgICAgICBoaWRlX3Jldmlld19pbmZvKCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwgMTApOwogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXJ0ID0gTWF0aC5taW4oaGlnaGxpZ2h0LnN0YXJ0LCBoaWdobGlnaHQuZW5kKTsKICAgICAgICB2YXIgZW5kID0gTWF0aC5tYXgoaGlnaGxpZ2h0LnN0YXJ0LCBoaWdobGlnaHQuZW5kKTsKCiAgICAgICAgdmFyIGJ1bmRsZSA9IHtpdGVtczpbXX07CiAgICAgICAgZm9yICh2YXIgYnVuZGxlX2lkeCA9IHN0YXJ0OyBidW5kbGVfaWR4IDwgZW5kOyBidW5kbGVfaWR4KyspIHsKICAgICAgICAgICAgYnVuZGxlLml0ZW1zID0gYnVuZGxlLml0ZW1zLmNvbmNhdChncmFwaC5idW5kbGVzW2J1bmRsZV9pZHhdLml0ZW1zKTsKICAgICAgICB9CgogICAgICAgIGNhbGNfYnVuZGxlX3N0YXRzKGJ1bmRsZSk7CgogICAgICAgIC8vIFByaW50IHRoZSBkYXRlIG9yIGRhdGUgcmFuZ2UuCiAgICAgICAgdmFyIGFsbG93X25vdyA9ICgoc3RhcnQgPT09IDApICYmIChncmFwaC5idW5kbGVfc2l6ZSA9PT0gMSkpOwogICAgICAgIHZhciBodG1sID0gJzxkaXY+JzsKICAgICAgICBodG1sICs9IGZvcm1hdF9kYXRlKG5ldyBEYXRlKGdyYXBoLnN0YXJ0X3RpbWUuZ2V0VGltZSgpICsgYnVuZGxlX3RvX3RpYyhzdGFydCkgKiAzNjAwMDAwKSwgYWxsb3dfbm93KTsKICAgICAgICBpZiAoKChlbmQtc3RhcnQpID4gMSkgfHwgKGdyYXBoLmJ1bmRsZV9zaXplID4gMSkpIHsKICAgICAgICAgICAgaHRtbCArPSAnIHRvICcgKyBmb3JtYXRfZGF0ZShuZXcgRGF0ZShncmFwaC5zdGFydF90aW1lLmdldFRpbWUoKSArIGJ1bmRsZV90b190aWMoZW5kKSAqIDM2MDAwMDApKTsKICAgICAgICB9CiAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKCiAgICAgICAgLy8gUG9wdWxhdGUgaXRlbSB0eXBlIHN1bW1hcmllcy4KICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InRvdCI+JysoYnVuZGxlLnN0YXRzLmNvdW50KSsnIHJldmlld3M8L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImluZGVudCI+JzsKCiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iaXRlbV90eXBlIHJhZCI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nKyhidW5kbGUuc3RhdHMucmFkIHx8IDApKyc8L3NwYW4+IHJhZGljYWxzPC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJpdGVtX3R5cGUga2FuIj48c3BhbiBjbGFzcz0iZml4ZWQiPicrKGJ1bmRsZS5zdGF0cy5rYW4gfHwgMCkrJzwvc3Bhbj4ga2Fuamk8L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9Iml0ZW1fdHlwZSB2b2MiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLnZvYyB8fCAwKSsnPC9zcGFuPiB2b2NhYnVsYXJ5PC9kaXY+JzsKCiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3JzX3N0YWdlIGFwcHIiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmFwcHIgfHwgMCkrJzwvc3Bhbj4gYXBwcmVudGljZTwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3JzX3N0YWdlIGd1cnUiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmd1cnUgfHwgMCkrJzwvc3Bhbj4gZ3VydTwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3JzX3N0YWdlIG1hc3QiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLm1hc3QgfHwgMCkrJzwvc3Bhbj4gbWFzdGVyPC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzcnNfc3RhZ2UgZW5saSI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nKyhidW5kbGUuc3RhdHMuZW5saSB8fCAwKSsnPC9zcGFuPiBlbmxpZ2h0ZW5lZDwvZGl2Pic7CiAgICAgICAgaWYgKHNldHRpbmdzLnNyc19jdXJyX25leHQgPT09ICduZXh0JykgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzcnNfc3RhZ2UgYnVybiI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nKyhidW5kbGUuc3RhdHMuYnVybiB8fCAwKSsnPC9zcGFuPiBidXJuPC9kaXY+JzsKICAgICAgICB9CgogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImxldmVsIGx2bGdycDAiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmx2bGdycDAgfHwgMCkrJzwvc3Bhbj4gbGV2ZWxzIDEtMTA8L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImxldmVsIGx2bGdycDEiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmx2bGdycDEgfHwgMCkrJzwvc3Bhbj4gbGV2ZWxzIDExLTIwPC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJsZXZlbCBsdmxncnAyIj48c3BhbiBjbGFzcz0iZml4ZWQiPicrKGJ1bmRsZS5zdGF0cy5sdmxncnAyIHx8IDApKyc8L3NwYW4+IGxldmVscyAyMS0zMDwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ibGV2ZWwgbHZsZ3JwMyI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nKyhidW5kbGUuc3RhdHMubHZsZ3JwMyB8fCAwKSsnPC9zcGFuPiBsZXZlbHMgMzEtNDA8L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImxldmVsIGx2bGdycDQiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmx2bGdycDQgfHwgMCkrJzwvc3Bhbj4gbGV2ZWxzIDQxLTUwPC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJsZXZlbCBsdmxncnA1Ij48c3BhbiBjbGFzcz0iZml4ZWQiPicrKGJ1bmRsZS5zdGF0cy5sdmxncnA1IHx8IDApKyc8L3NwYW4+IGxldmVscyA1MS02MDwvZGl2Pic7CgogICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CgogICAgICAgIGlmICgoYnVuZGxlLnN0YXRzLmN1cnJfY291bnQgPiAwKSB8fCAoYnVuZGxlLnN0YXRzLmJ1cm5fY291bnQgPiAwKSkgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJpbmRlbnQiPic7CiAgICAgICAgICAgIGlmIChidW5kbGUuc3RhdHMuY3Vycl9jb3VudCA+IDApIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImN1ciI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nK2J1bmRsZS5zdGF0cy5jdXJyX2NvdW50Kyc8L3NwYW4+IEN1cnJlbnQgTGV2ZWw8L2Rpdj4nOwogICAgICAgICAgICBpZiAoYnVuZGxlLnN0YXRzLmJ1cm5fY291bnQgPiAwKSBodG1sICs9ICc8ZGl2IGNsYXNzPSJidXIiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JytidW5kbGUuc3RhdHMuYnVybl9jb3VudCsnPC9zcGFuPiBCdXJuIEl0ZW0nKyhidW5kbGUuc3RhdHMuYnVybl9jb3VudCA+IDEgPyAncycgOiAnJykrJzwvZGl2Pic7CiAgICAgICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAgICAgICAgfQoKICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwoKICAgICAgICBpZiAoc2V0dGluZ3MucmV2aWV3X2RldGFpbHNfYnV0dG9ucykgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJkZXRhaWxfYnV0dG9ucyI+JzsKICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz0iY291bnQiPlJldmlldyBDb3VudDwvYnV0dG9uPic7CiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9Iml0ZW1fdHlwZSI+SXRlbSBUeXBlPC9idXR0b24+JzsKICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz0ic3JzX3N0YWdlIj5TUlMgTGV2ZWw8L2J1dHRvbj4nOwogICAgICAgICAgICBodG1sICs9ICc8YnV0dG9uIGNsYXNzPSJsZXZlbCI+TGV2ZWw8L2J1dHRvbj4nOwogICAgICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMgPT09ICdpdGVtX2xpc3QnIHx8IHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMgPT09ICdmdWxsJykgewogICAgICAgICAgICBodG1sID0gcG9wdWxhdGVfaXRlbV9saXN0KGJ1bmRsZSwgaHRtbCk7CiAgICAgICAgfQoKICAgICAgICBpbmZvLmZpbmQoJy5pbm5lcicpLmh0bWwoaHRtbCk7CiAgICAgICAgZ3JhcGgucmV2aWV3X2luZm8gPSBpbmZvOwoKICAgICAgICB2YXIgbnVtX3dpZHRoID0gYnVuZGxlLnN0YXRzLmNvdW50LnRvU3RyaW5nKCk7CiAgICAgICAgaW5mby5maW5kKCcuc3VtbWFyeSAuZml4ZWQnKS5jc3MoJ3dpZHRoJywgKG51bV93aWR0aC50b1N0cmluZygpLmxlbmd0aCAqIDkgKyA4KSArICdweCcpOwoKICAgICAgICB2YXIgdG9wLCBsZWZ0LCByaWdodCwgd2lkdGg7CiAgICAgICAgdmFyIGhhbGZfd2lkdGggPSBncmFwaC54X2F4aXMud2lkdGgvMjsKICAgICAgICB2YXIgeCA9IGJ1bmRsZV90b194KHN0YXJ0KTsKICAgICAgICBpbmZvLmNzcygnbWF4LXdpZHRoJywgaGFsZl93aWR0aCk7CiAgICAgICAgaWYgKGhpZ2hsaWdodC5kcmFnZ2luZykgewogICAgICAgICAgICB0b3AgPSBncmFwaC5tYXJnaW4udG9wICsgZ3JhcGgueV9heGlzLmhlaWdodCArIGdyYXBoLm1hcmdpbi5ib3R0b207CiAgICAgICAgICAgIGlmICh4IDwgaGFsZl93aWR0aCkgewogICAgICAgICAgICAgICAgbGVmdCA9IGdyYXBoLm1hcmdpbi5sZWZ0ICsgeDsKICAgICAgICAgICAgICAgIGluZm8uY3NzKHtsZWZ0OmxlZnQsIHJpZ2h0OidhdXRvJywgdG9wOnRvcH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmlnaHQgPSAwOwogICAgICAgICAgICAgICAgaW5mby5jc3Moe2xlZnQ6J2F1dG8nLCByaWdodDpyaWdodCwgdG9wOnRvcH0pOwogICAgICAgICAgICAgICAgaWYgKHggPCBncmFwaC54X2F4aXMud2lkdGggLSBpbmZvLm91dGVyV2lkdGgoKSkgewogICAgICAgICAgICAgICAgICAgIGxlZnQgPSBncmFwaC5tYXJnaW4ubGVmdCArIHg7CiAgICAgICAgICAgICAgICAgICAgaW5mby5jc3Moe2xlZnQ6bGVmdCwgcmlnaHQ6J2F1dG8nLCB0b3A6dG9wfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGUpIHsKICAgICAgICAgICAgdG9wID0gZS5jbGllbnRZIC0gZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gMzA7CiAgICAgICAgICAgIGlmICh4IDwgaGFsZl93aWR0aCkgewogICAgICAgICAgICAgICAgbGVmdCA9IGdyYXBoLm1hcmdpbi5sZWZ0ICsgYnVuZGxlX3RvX3goc3RhcnQrMSkgKyA0OwogICAgICAgICAgICAgICAgaW5mby5jc3Moe2xlZnQ6bGVmdCwgcmlnaHQ6J2F1dG8nLCB0b3A6dG9wfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByaWdodCA9IGdyYXBoLnhfYXhpcy53aWR0aCAtIGJ1bmRsZV90b194KHN0YXJ0KSArIDQ7CiAgICAgICAgICAgICAgICBpbmZvLmNzcyh7bGVmdDonYXV0bycsIHJpZ2h0OnJpZ2h0LCB0b3A6dG9wfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGluZm8ucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQb3B1bGF0ZSB0aGUgbGlzdCBvZiBpdGVtcyBwcmVzZW50IGluIGEgdGltZSBidW5kbGUuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHBvcHVsYXRlX2l0ZW1fbGlzdChidW5kbGUsIGh0bWwpIHsKICAgICAgICB2YXIgc3JzX3RvX2NsYXNzID0gewogICAgICAgICAgICBjdXJyOiBbJ2FwcHInLCdhcHByJywnYXBwcicsJ2FwcHInLCdhcHByJywnZ3VydScsJ2d1cnUnLCdtYXN0JywnZW5saSddLAogICAgICAgICAgICBuZXh0OiBbJ2FwcHInLCdhcHByJywnYXBwcicsJ2FwcHInLCdndXJ1JywnZ3VydScsJ21hc3QnLCdlbmxpJywnYnVybiddCiAgICAgICAgfTsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJpdGVtX2luZm8gaGlkZGVuIj48L2Rpdj48dWwgY2xhc3M9Iml0ZW1fbGlzdCI+JzsKICAgICAgICBmb3IgKHZhciBpdGVtX2lkeCBpbiBidW5kbGUuaXRlbXMpIHsKICAgICAgICAgICAgdmFyIGl0ZW0gPSBidW5kbGUuaXRlbXNbaXRlbV9pZHhdOwogICAgICAgICAgICB2YXIgY2xhc3NlcyA9IFsKICAgICAgICAgICAgICAgIGl0ZW0ub2JqZWN0LnNsaWNlKDAsMyksCiAgICAgICAgICAgICAgICBzcnNfdG9fY2xhc3Nbc2V0dGluZ3Muc3JzX2N1cnJfbmV4dF1baXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2VdLAogICAgICAgICAgICAgICAgJ2x2bGdycCcrTWF0aC5mbG9vcigoaXRlbS5kYXRhLmxldmVsLTEpLzEwKQogICAgICAgICAgICBdOwogICAgICAgICAgICB2YXIgaXRlbV9uYW1lOwogICAgICAgICAgICBpZiAoaXRlbS5vYmplY3QgPT09ICdyYWRpY2FsJykgewogICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGF0YS5jaGFyYWN0ZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxpIGNsYXNzPSInK2NsYXNzZXMuam9pbignICcpKyciPicraXRlbS5kYXRhLmNoYXJhY3RlcnMrJzwvbGk+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxpIGNsYXNzPSInK2NsYXNzZXMuam9pbignICcpKyciIGRhdGEtcmFkbmFtZT0iJytpdGVtLmRhdGEuc2x1ZysnIj4uLi48L2xpPic7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLml0ZW1fbGlzdCA+IGxpW2RhdGEtcmFkbmFtZT0iJytpdGVtLmRhdGEuc2x1ZysnIl0nOwogICAgICAgICAgICAgICAgICAgIGxvYWRfcmFkaWNhbF9zdmcoaXRlbSkudGhlbihwb3B1bGF0ZV9yYWRpY2FsX3N2Zy5iaW5kKG51bGwsIHNlbGVjdG9yKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8bGkgY2xhc3M9IicrY2xhc3Nlcy5qb2luKCcgJykrJyI+JytpdGVtLmRhdGEuc2x1ZysnPC9saT4nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGh0bWwgKz0gJzwvdWw+JzsKICAgICAgICByZXR1cm4gaHRtbDsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSW5zZXJ0IGFuIHN2ZyBpbnRvIGEgc3BlY2lmaWVkIERPTSBlbGVtZW50LgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBwb3B1bGF0ZV9yYWRpY2FsX3N2ZyhzZWxlY3Rvciwgc3ZnKSB7CiAgICAgICAgJChzZWxlY3RvcikuaHRtbChzdmcpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFdmVudCBoYW5kbGVyIGZvciBidXR0b25zIG9uIHRoZSBSZXZpZXcgSW5mbyBwb3AtdXAuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGRldGFpbF9idXR0b25fY2xpY2tlZChlKSB7CiAgICAgICAgdmFyIG1vZGUgPSBlLnRhcmdldC5jbGFzc05hbWU7CiAgICAgICAgJCgnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbycpLmF0dHIoJ2RhdGEtbW9kZScsIG1vZGUpOwogICAgICAgIHNldHRpbmdzLnJldmlld19kZXRhaWxzX3N1bW1hcnkgPSBtb2RlOwogICAgICAgIHNhdmVfc2V0dGluZ3MoKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRXZlbnQgaGFuZGxlciBmb3IgaG92ZXJpbmcgb3ZlciBhbiBpdGVtIGluIHRoZSBSZXZpZXcgRGV0YWlsIHBvcC11cC4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaXRlbV9ob3ZlcihlKSB7CiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMgIT09ICdmdWxsJykgcmV0dXJuOwogICAgICAgIHZhciBpbmZvID0gJCgnI3RpbWVsaW5lIC5pdGVtX2luZm8nKTsKICAgICAgICBzd2l0Y2ggKGUudHlwZSkgewogICAgICAgICAgICBjYXNlICdtb3VzZWVudGVyJzoKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkKGUuY3VycmVudFRhcmdldCk7CiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGdyYXBoLmN1cnJlbnRfYnVuZGxlLml0ZW1zW3RhcmdldC5pbmRleCgpXTsKICAgICAgICAgICAgICAgIHZhciBwb3MgPSB0YXJnZXQucG9zaXRpb24oKTsKICAgICAgICAgICAgICAgIGluZm8uY3NzKHt0b3A6cG9zLnRvcCt0YXJnZXQub3V0ZXJIZWlnaHQoKSszfSk7CiAgICAgICAgICAgICAgICBwb3B1bGF0ZV9pdGVtX2luZm8oaW5mbywgaXRlbSk7CiAgICAgICAgICAgICAgICBpbmZvLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6CiAgICAgICAgICAgICAgICBpbmZvLmFkZENsYXNzKCdoaWRkZW4nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSGFuZGxlciBmb3IgcmVzaXppbmcgdGhlIHRpbWVsaW5lIHdoZW4gdGhlIHdpbmRvdyBzaXplIGNoYW5nZXMuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHdpbmRvd19yZXNpemVkKCkgewogICAgICAgIHZhciBuZXdfd2lkdGggPSBncmFwaC5lbGVtLndpZHRoKCk7CiAgICAgICAgaWYgKG5ld193aWR0aCAhPSBncmFwaC54X2F4aXMud2lkdGggKyBncmFwaC5tYXJnaW4ubGVmdCkgewogICAgICAgICAgICBidW5kbGVfYnlfdGltZXNsb3QoKTsKICAgICAgICAgICAgZHJhd190aW1lbGluZSgpOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2VuZXJhdGUgdGhlIEhUTUwgY29udGVudCBvZiB0aGUgSXRlbSBEZXRhaWwgcG9wLXVwLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBwb3B1bGF0ZV9pdGVtX2luZm8oaW5mbywgaXRlbSkgewogICAgICAgIHZhciBodG1sOwogICAgICAgIHN3aXRjaCAoaXRlbS5vYmplY3QpIHsKICAgICAgICAgICAgY2FzZSAncmFkaWNhbCc6CiAgICAgICAgICAgICAgICBpZiAoaXRlbS5kYXRhLmNoYXJhY3RlcnMpIHsKICAgICAgICAgICAgICAgICAgICBodG1sID0gJzxzcGFuIGNsYXNzPSJpdGVtIj5SYWRpY2FsOiA8c3BhbiBjbGFzcz0ic2x1ZyIgbGFuZz0iamEiPicraXRlbS5kYXRhLmNoYXJhY3RlcnMrJzwvc3Bhbj48L3NwYW4+PGJyPic7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGh0bWwgPSAnPHNwYW4gY2xhc3M9Iml0ZW0iPlJhZGljYWw6IDxzcGFuIGNsYXNzPSJzbHVnIiBkYXRhLXJhZG5hbWU9IicraXRlbS5kYXRhLnNsdWcrJyI+Li4uPC9zcGFuPjwvc3Bhbj48YnI+JzsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSAnI3RpbWVsaW5lIC5pdGVtX2luZm8gW2RhdGEtcmFkbmFtZT0iJytpdGVtLmRhdGEuc2x1ZysnIl0nOwogICAgICAgICAgICAgICAgICAgIGxvYWRfcmFkaWNhbF9zdmcoaXRlbSkudGhlbihwb3B1bGF0ZV9yYWRpY2FsX3N2Zy5iaW5kKG51bGwsIHNlbGVjdG9yKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ2thbmppJzoKICAgICAgICAgICAgICAgIGh0bWwgPSAnPHNwYW4gY2xhc3M9Iml0ZW0iPkthbmppOiA8c3BhbiBjbGFzcz0ic2x1ZyIgbGFuZz0iamEiPicraXRlbS5kYXRhLnNsdWcrJzwvc3Bhbj48L3NwYW4+PGJyPic7CiAgICAgICAgICAgICAgICBodG1sICs9IGdldF9pbXBvcnRhbnRfcmVhZGluZyhpdGVtKSsnPGJyPic7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ3ZvY2FidWxhcnknOgogICAgICAgICAgICAgICAgaHRtbCA9ICc8c3BhbiBjbGFzcz0iaXRlbSI+Vm9jYWI6IDxzcGFuIGNsYXNzPSJzbHVnIiBsYW5nPSJqYSI+JytpdGVtLmRhdGEuc2x1ZysnPC9zcGFuPjwvc3Bhbj48YnI+JzsKICAgICAgICAgICAgICAgIGh0bWwgKz0gJ1JlYWRpbmc6ICcrZ2V0X3JlYWRpbmcoaXRlbSkrJzxicj4nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGh0bWwgKz0gJ01lYW5pbmc6ICcrZ2V0X21lYW5pbmdzKGl0ZW0pKyc8YnI+JzsKICAgICAgICBodG1sICs9ICdMZXZlbDogJytpdGVtLmRhdGEubGV2ZWwrJzxicj4nOwogICAgICAgIGh0bWwgKz0gJ1NSUyBMZXZlbDogJytpdGVtLmFzc2lnbm1lbnRzLnNyc19zdGFnZV9uYW1lOwogICAgICAgIGluZm8uaHRtbChodG1sKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTG9hZCBhIHJhZGljYWwncyBzdmcgZmlsZS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gbG9hZF9yYWRpY2FsX3N2ZyhpdGVtKSB7CiAgICAgICAgdmFyIHByb21pc2UgPSBncmFwaC5yYWRpY2FsX2NhY2hlW2l0ZW0uZGF0YS5zbHVnXTsKICAgICAgICBpZiAocHJvbWlzZSkgcmV0dXJuIHByb21pc2U7CiAgICAgICAgaWYgKGl0ZW0uZGF0YS5jaGFyYWN0ZXJfaW1hZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHByb21pc2U7CiAgICAgICAgdmFyIHVybCA9IGl0ZW0uZGF0YS5jaGFyYWN0ZXJfaW1hZ2VzLmZpbHRlcihmdW5jdGlvbihpbWcpewogICAgICAgICAgICByZXR1cm4gKGltZy5jb250ZW50X3R5cGUgPT09ICdpbWFnZS9zdmcreG1sJyAmJiAhaW1nLm1ldGFkYXRhLmlubGluZV9zdHlsZXMpOwogICAgICAgIH0pWzBdLnVybDsKICAgICAgICBwcm9taXNlID0gd2tvZi5sb2FkX2ZpbGUodXJsKTsKICAgICAgICBncmFwaC5yYWRpY2FsX2NhY2hlW2l0ZW0uZGF0YS5zbHVnXSA9IHByb21pc2U7CiAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEV4dHJhY3QgdGhlIG1lYW5pbmdzIChpbmNsdWRpbmcgc3lub255bXMpIGZyb20gYW4gaXRlbS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZ2V0X21lYW5pbmdzKGl0ZW0pIHsKICAgICAgICB2YXIgbWVhbmluZ3MgPSBbXTsKICAgICAgICBpZiAoaXRlbS5zdHVkeV9tYXRlcmlhbHMgJiYgaXRlbS5zdHVkeV9tYXRlcmlhbHMubWVhbmluZ19zeW5vbnltcykgewogICAgICAgICAgICBtZWFuaW5ncyA9IGl0ZW0uc3R1ZHlfbWF0ZXJpYWxzLm1lYW5pbmdfc3lub255bXM7CiAgICAgICAgfQogICAgICAgIG1lYW5pbmdzID0gbWVhbmluZ3MuY29uY2F0KGl0ZW0uZGF0YS5tZWFuaW5ncy5tYXAobWVhbmluZyA9PiBtZWFuaW5nLm1lYW5pbmcpKTsKICAgICAgICByZXR1cm4gdG9fdGl0bGVfY2FzZShtZWFuaW5ncy5qb2luKCcsICcpKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRXh0cmFjdCB0aGUgJ2ltcG9ydGFudCcgcmVhZGluZ3MgZnJvbSBhIGthbmppLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBnZXRfaW1wb3J0YW50X3JlYWRpbmcoaXRlbSkgewogICAgICAgIHZhciByZWFkaW5ncyA9IGl0ZW0uZGF0YS5yZWFkaW5ncy5maWx0ZXIocmVhZGluZyA9PiByZWFkaW5nLnByaW1hcnkpOwogICAgICAgIHJldHVybiB0b190aXRsZV9jYXNlKHJlYWRpbmdzWzBdLnR5cGUpKyc6ICcrcmVhZGluZ3MubWFwKHJlYWRpbmcgPT4gcmVhZGluZy5yZWFkaW5nKS5qb2luKCcsICcpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFeHRyYWN0IHRoZSBsaXN0IG9mIHJlYWRpbmdzIGZyb20gYW4gaXRlbS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZ2V0X3JlYWRpbmcoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLmRhdGEucmVhZGluZ3MubWFwKHJlYWRpbmcgPT4gcmVhZGluZy5yZWFkaW5nKS5qb2luKCcsICcpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBIaWRlIHRoZSBSZXZpZXcgSW5mbyBwb3AtdXAuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGhpZGVfcmV2aWV3X2luZm8oKSB7CiAgICAgICAgJCgnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbycpLmFkZENsYXNzKCdoaWRkZW4nKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2VuZXJhdGUgYSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGZvcm1hdF9kYXRlKHRpbWUsIGFsbG93X25vdykgewogICAgICAgIHZhciBzdHI7CiAgICAgICAgaWYgKGFsbG93X25vdyAmJiB0aW1lLmdldFRpbWUoKSA+PSBncmFwaC5zdGFydF90aW1lLmdldFRpbWUoKSkgcmV0dXJuICdOb3cnOwogICAgICAgIGlmICh0aW1lLmdldERhdGUoKSA9PT0gKG5ldyBEYXRlKCkpLmdldERhdGUoKSkgewogICAgICAgICAgICBzdHIgPSAnVG9kYXknOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0ciA9ICdTdW5Nb25UdWVXZWRUaHVGcmlTYXQnLnN1YnN0cih0aW1lLmdldERheSgpKjMsIDMpOwogICAgICAgIH0KICAgICAgICBpZiAoc2V0dGluZ3MudGltZV9mb3JtYXQgPT09ICcyNGhvdXInKSB7CiAgICAgICAgICAgIHN0ciArPSAnICcgKyAoJzAnICsgdGltZS5nZXRIb3VycygpKS5zbGljZSgtMikgKyAnOicgKyAoJzAnK3RpbWVfc2hpZnQpLnNsaWNlKC0yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHIgKz0gJyAnICsgKCcwJyArICgoKHRpbWUuZ2V0SG91cnMoKSsxMSklMTIpKzEpKS5zbGljZSgtMikgKyAnOicrKCcwJyt0aW1lX3NoaWZ0KS5zbGljZSgtMikgKyAnYXAnW01hdGguZmxvb3IodGltZS5nZXRIb3VycygpLzEyKV0gKyAnbSc7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHI7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEZldGNoIGl0ZW0gaW5mbywgYW5kIHJlZHJhdyB0aGUgdGltZWxpbmUuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGZldGNoX2FuZF91cGRhdGUoKSB7CiAgICAgICAgcmV0dXJuIHdrb2YuSXRlbURhdGEuZ2V0X2l0ZW1zKCdzdWJqZWN0cywgYXNzaWdubWVudHMsIHN0dWR5X21hdGVyaWFscycpCiAgICAgICAgLnRoZW4ocHJvY2Vzc19pdGVtcykKICAgICAgICAudGhlbihkcmF3X3RpbWVsaW5lKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUHJvY2VzcyB0aGUgZmV0Y2hlZCBpdGVtcy4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gcHJvY2Vzc19pdGVtcyhmZXRjaGVkX2l0ZW1zKSB7CiAgICAgICAgLy8gUmVtb3ZlIGFueSB1bmxlYXJuZWQgaXRlbXMuCiAgICAgICAgZ3JhcGguaXRlbXMgPSBbXTsKICAgICAgICBmb3IgKHZhciBpZHggaW4gZmV0Y2hlZF9pdGVtcykgewogICAgICAgICAgICB2YXIgaXRlbSA9IGZldGNoZWRfaXRlbXNbaWR4XTsKICAgICAgICAgICAgaWYgKCFpdGVtLmFzc2lnbm1lbnRzIHx8ICFpdGVtLmFzc2lnbm1lbnRzLmF2YWlsYWJsZV9hdCB8fCBpdGVtLmFzc2lnbm1lbnRzLnNyc19zdGFnZSA8PSAwKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGl0ZW0uZGF0YS5sZXZlbCA+IHdrb2YudXNlci5sZXZlbCkgY29udGludWU7CiAgICAgICAgICAgIGdyYXBoLml0ZW1zLnB1c2goaXRlbSk7CiAgICAgICAgfQoKICAgICAgICBncmFwaC5pdGVtcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShhLmFzc2lnbm1lbnRzLmF2YWlsYWJsZV9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5hc3NpZ25tZW50cy5hdmFpbGFibGVfYXQpLmdldFRpbWUoKSk7CiAgICAgICAgfSk7CgogICAgICAgIGJ1bmRsZV9ieV90aW1lc2xvdCgpOwogICAgICAgIHVwZGF0ZV9zbGlkZXJfcmV2aWV3cygpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBCdW5kbGUgdGhlIGl0ZW1zIGludG8gdGltZXNsb3RzLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBidW5kbGVfYnlfdGltZXNsb3QoKSB7CiAgICAgICAgdmFyIGJ1bmRsZV9zaXplID0gZ3JhcGguYnVuZGxlX3NpemUgPSBnZXRfaG91cnNfcGVyX2JhcigpOwogICAgICAgIHZhciBidW5kbGVzID0gZ3JhcGguYnVuZGxlcyA9IFtdOwogICAgICAgIHZhciB0aW1lc2xvdHMgPSBncmFwaC50aW1lc2xvdHMgPSBbXTsKCiAgICAgICAgLy8gUmV3aW5kIHRoZSBjbG9jayB0byB0aGUgc3RhcnQgb2YgYSBidW5kbGUgcGVyaW9kLgogICAgICAgIHZhciBzdGFydF90aW1lID0gdG9TdGFydE9mVVRDSG91cihuZXcgRGF0ZSgpKTsKICAgICAgICB3aGlsZSAoc3RhcnRfdGltZS5nZXRIb3VycygpICUgYnVuZGxlX3NpemUgIT09IDApIHN0YXJ0X3RpbWUgPSBuZXcgRGF0ZShzdGFydF90aW1lLmdldFRpbWUoKSAtIDM2MDAwMDApOwogICAgICAgIGdyYXBoLnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOwoKICAgICAgICAvLyBGaW5kIHRoZSB0aWMgb2YgdGhlIGxhc3QgYnVuZGxlIChyb3VuZCBkb3duIGlmIG9ubHkgYSBwYXJ0aWFsKS4KICAgICAgICBncmFwaC50b3RhbF9yZXZpZXdzID0gMDsKICAgICAgICBncmFwaC5tYXhfcmV2aWV3cyA9IDA7CiAgICAgICAgdmFyIGhvdXIgPSAwLCBpdGVtX2lkeCA9IDAsIGl0ZW1fY291bnQgPSAwOwogICAgICAgIHZhciBidW5kbGUgPSB7c3RhcnRfdGltZTpob3VyLCBpdGVtczpbXX07CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgdGltZXNsb3RzLnB1c2goYnVuZGxlcy5sZW5ndGgpOwogICAgICAgICAgICBob3VyKys7CiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHBhc3QgZW5kIG9mIHRoZSB0aW1lbGluZSAoaW5jbHVkaW5nIHJvdW5kaW5nIHVwIHRvIHRoZSBuZWFyZXN0IGJ1bmRsZSkKICAgICAgICAgICAgLy8gTmVlZCB0byB1c2UgZGF0ZSBmdW5jdGlvbiB0byBhY2NvdW50IGZvciB0aW1lIHNoaWZ0cyAoZS5nLiBEYXlsaWdodCBTYXZpbmdzIFRpbWUpCiAgICAgICAgICAgIHZhciB0aW1lID0gbmV3IERhdGUoc3RhcnRfdGltZS5nZXRUaW1lKCkgKyBob3VyICogMzYwMDAwMCk7CiAgICAgICAgICAgIGlmICgodGltZS5nZXRIb3VycygpICUgYnVuZGxlX3NpemUpICE9PSAwKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBzdGFydF9pZHggPSBpdGVtX2lkeDsKICAgICAgICAgICAgd2hpbGUgKChpdGVtX2lkeCA8IGdyYXBoLml0ZW1zLmxlbmd0aCkgJiYKICAgICAgICAgICAgICAgICAgIChuZXcgRGF0ZShncmFwaC5pdGVtc1tpdGVtX2lkeF0uYXNzaWdubWVudHMuYXZhaWxhYmxlX2F0KSA8IHRpbWUpKSB7CiAgICAgICAgICAgICAgICBpdGVtX2lkeCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBidW5kbGUuaXRlbXMgPSBncmFwaC5pdGVtcy5zbGljZShzdGFydF9pZHgsIGl0ZW1faWR4KTsKICAgICAgICAgICAgYnVuZGxlLmVuZF90aW1lID0gaG91cjsKICAgICAgICAgICAgY2FsY19idW5kbGVfc3RhdHMoYnVuZGxlKTsKICAgICAgICAgICAgZ3JhcGguYnVuZGxlcy5wdXNoKGJ1bmRsZSk7CgogICAgICAgICAgICBncmFwaC50b3RhbF9yZXZpZXdzICs9IGJ1bmRsZS5pdGVtcy5sZW5ndGg7CiAgICAgICAgICAgIGlmIChidW5kbGUuaXRlbXMubGVuZ3RoID4gZ3JhcGgubWF4X3Jldmlld3MpIGdyYXBoLm1heF9yZXZpZXdzID0gYnVuZGxlLml0ZW1zLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGhvdXIgPj0gZ3JhcGgueF9heGlzLm1heF9ob3VycykgYnJlYWs7CgogICAgICAgICAgICBidW5kbGUgPSB7c3RhcnRfdGltZTpob3VyLCBpdGVtczpbXX07CiAgICAgICAgfQogICAgICAgIGdyYXBoLnhfYXhpcy5tYXhfaG91cnMgPSBob3VyOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBDYWxjdWxhdGUgc3RhdHMgZm9yIGEgYnVuZGxlCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGNhbGNfYnVuZGxlX3N0YXRzKGJ1bmRsZSkgewogICAgICAgIHZhciBpdHlwZV90b19pbnQgPSB7cmFkaWNhbDowLCBrYW5qaToxLCB2b2NhYnVsYXJ5OjJ9OwogICAgICAgIHZhciBpdHlwZV90b19jbGFzcyA9IHtyYWRpY2FsOidyYWQnLCBrYW5qaTona2FuJywgdm9jYWJ1bGFyeTondm9jJ307CiAgICAgICAgdmFyIHNyc190b19jbGFzcyA9IHsKICAgICAgICAgICAgY3VycjogWydhcHByJywnYXBwcicsJ2FwcHInLCdhcHByJywnYXBwcicsJ2d1cnUnLCdndXJ1JywnbWFzdCcsJ2VubGknXSwKICAgICAgICAgICAgbmV4dDogWydhcHByJywnYXBwcicsJ2FwcHInLCdhcHByJywnZ3VydScsJ2d1cnUnLCdtYXN0JywnZW5saScsJ2J1cm4nXQogICAgICAgIH07CiAgICAgICAgYnVuZGxlLml0ZW1zLnNvcnQoZnVuY3Rpb24oYSwgYil7CiAgICAgICAgICAgIHZhciBhX2l0eXBlID0gaXR5cGVfdG9faW50W2Eub2JqZWN0XTsKICAgICAgICAgICAgdmFyIGJfaXR5cGUgPSBpdHlwZV90b19pbnRbYi5vYmplY3RdOwogICAgICAgICAgICBpZiAoYV9pdHlwZSAhPT0gYl9pdHlwZSkgcmV0dXJuIGFfaXR5cGUgLSBiX2l0eXBlOwogICAgICAgICAgICBpZiAoYS5kYXRhLmxldmVsICE9PSBiLmRhdGEubGV2ZWwpIHJldHVybiBhLmRhdGEubGV2ZWwgLSBiLmRhdGEubGV2ZWw7CiAgICAgICAgICAgIHJldHVybiBhLmRhdGEuc2x1Zy5sb2NhbGVDb21wYXJlKGIuZGF0YS5zbHVnKTsKICAgICAgICB9KTsKICAgICAgICBidW5kbGUuc3RhdHMgPSB7CiAgICAgICAgICAgIGNvdW50OjAsCiAgICAgICAgICAgIHJhZDowLCBrYW46MCwgdm9jOjAsCiAgICAgICAgICAgIGFwcHI6MCwgZ3VydTowLCBtYXN0OjAsIGVubGk6MCwgYnVybjowLAogICAgICAgICAgICBsdmxncnAwOjAsIGx2bGdycDE6MCwgbHZsZ3JwMjowLCBsdmxncnAzOjAsIGx2bGdycDQ6MCwgbHZsZ3JwNTowLAogICAgICAgICAgICBjdXJyX2NvdW50OiAwLAogICAgICAgICAgICBoYXNfY3Vycl9tYXJrZXI6IGZhbHNlLAogICAgICAgICAgICBidXJuX2NvdW50OiAwCiAgICAgICAgfTsKICAgICAgICB2YXIgc3RhdHMgPSBidW5kbGUuc3RhdHM7CiAgICAgICAgZm9yICh2YXIgaXRlbV9pZHggaW4gYnVuZGxlLml0ZW1zKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gYnVuZGxlLml0ZW1zW2l0ZW1faWR4XTsKICAgICAgICAgICAgc3RhdHMuY291bnQrKzsKICAgICAgICAgICAgc3RhdHNbaXR5cGVfdG9fY2xhc3NbaXRlbS5vYmplY3RdXSsrOwogICAgICAgICAgICBzdGF0c1tzcnNfdG9fY2xhc3Nbc2V0dGluZ3Muc3JzX2N1cnJfbmV4dF1baXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2VdXSsrOwogICAgICAgICAgICBzdGF0c1snbHZsZ3JwJytNYXRoLmZsb29yKChpdGVtLmRhdGEubGV2ZWwtMSkvMTApXSsrOwogICAgICAgICAgICBpZiAoaXRlbS5kYXRhLmxldmVsID09PSB3a29mLnVzZXIubGV2ZWwpIHsKICAgICAgICAgICAgICAgIHN0YXRzLmN1cnJfY291bnQrKzsKICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5jdXJyZW50X2xldmVsX21hcmtlcnMuaW5kZXhPZihpdGVtLm9iamVjdFswXSkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgIHN0YXRzLmhhc19jdXJyX21hcmtlciA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVuZGxlLnN0YXRzLmJ1cm5fY291bnQgPSBidW5kbGUuc3RhdHNbc3JzX3RvX2NsYXNzW3NldHRpbmdzLnNyc19jdXJyX25leHRdWzhdXTsKICAgICAgICBncmFwaC5jdXJyZW50X2J1bmRsZSA9IGJ1bmRsZTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUmV0dXJuIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBVVEMgaG91ci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gdG9TdGFydE9mVVRDSG91cihkYXRlKSB7CiAgICAgICAgdmFyIGQgPSAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlLmdldFRpbWUoKSA6IGRhdGUpOwogICAgICAgIGQgPSBNYXRoLmZsb29yKGQvMzYwMDAwMCkqMzYwMDAwMDsKICAgICAgICByZXR1cm4gKGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gbmV3IERhdGUoZCkgOiBkKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU3RhcnQgYSB0aW1lciB0byByZWZyZXNoIHRoZSB0aW1lbGluZSAod2l0aG91dCBmZXRjaCkgYXQgdGhlIHRvcCBvZiB0aGUgaG91ci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gc3RhcnRfcmVmcmVzaF90aW1lcigpIHsKICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTsKICAgICAgICB2YXIgbmV4dF9ob3VyID0gdG9TdGFydE9mVVRDSG91cihub3cpICsgMzYwMTAwMDsgLy8gMSBzZWNvbmQgcGFzdCB0aGUgbmV4dCBVVEMgaG91ci4KICAgICAgICB2YXIgd2FpdF90aW1lID0gKG5leHRfaG91ciAtIG5vdyk7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICBidW5kbGVfYnlfdGltZXNsb3QoKTsKICAgICAgICAgICAgdXBkYXRlX3NsaWRlcl9yZXZpZXdzKCk7CiAgICAgICAgICAgIGRyYXdfdGltZWxpbmUoKTsKICAgICAgICAgICAgc3RhcnRfcmVmcmVzaF90aW1lcigpOwogICAgICAgIH0sIHdhaXRfdGltZSk7CiAgICB9Cgp9KSh3aW5kb3cudGltZWxpbmUpOwo="},{"name":"Wanikani Dashboard Progress Plus","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https://(www|preview).wanikani.com/(dashboard)?$/"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1569496825154,"data":{}},"enabled":false,"position":24,"file_url":"https://greasyfork.org/scripts/9552-wanikani-dashboard-progress-plus/code/Wanikani%20Dashboard%20Progress%20Plus.user.js","uuid":"8e94d762-0bc9-4a42-8145-e177a790cfb5","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFdhbmlrYW5pIERhc2hib2FyZCBQcm9ncmVzcyBQbHVzCi8vIEBuYW1lc3BhY2UgICByZmluZGxleQovLyBAZGVzY3JpcHRpb24gRGlzcGxheSBkZXRhaWxlZCBsZXZlbCBwcm9ncmVzcy4KLy8gQHZlcnNpb24gICAgIDMuMC4yCi8vIEBpbmNsdWRlICAgICAvXmh0dHBzOi8vKHd3d3xwcmV2aWV3KS53YW5pa2FuaS5jb20vKGRhc2hib2FyZCk/JC8KLy8gQGNvcHlyaWdodCAgIDIwMTgrLCBSb2JpbiBGaW5kbGV5Ci8vIEBsaWNlbnNlICAgICBNSVQ7IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKLy8gQHJ1bi1hdCAgICAgIGRvY3VtZW50LWVuZAovLyBAZ3JhbnQgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCndpbmRvdy5kcHAgPSB7fTsKCihmdW5jdGlvbihnb2JqKSB7CgogICAgLyogZ2xvYmFsICQsIHdrb2YgKi8KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEluaXRpYWxpemF0aW9uIG9mIHRoZSBXYW5pa2FuaSBPcGVuIEZyYW1ld29yay4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgdmFyIHNjcmlwdF9uYW1lID0gJ0Rhc2hib2FyZCBQcm9ncmVzcyBQbHVzJzsKICAgIGlmICghd2luZG93Lndrb2YpIHsKICAgICAgICBpZiAoY29uZmlybShzY3JpcHRfbmFtZSsnIHJlcXVpcmVzIFdhbmlrYW5pIE9wZW4gRnJhbWV3b3JrLlxuRG8geW91IHdhbnQgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zPycpKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ2h0dHBzOi8vY29tbXVuaXR5LndhbmlrYW5pLmNvbS90L2luc3RydWN0aW9ucy1pbnN0YWxsaW5nLXdhbmlrYW5pLW9wZW4tZnJhbWV3b3JrLzI4NTQ5JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdrb2YuaW5jbHVkZSgnSXRlbURhdGEsIE1lbnUsIFNldHRpbmdzJyk7CiAgICB3a29mLnJlYWR5KCdkb2N1bWVudCxJdGVtRGF0YSxNZW51LFNldHRpbmdzJykudGhlbihsb2FkX3NldHRpbmdzKS50aGVuKHN0YXJ0dXApOwoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBHbG9iYWwgdmFyaWFibGVzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBzZXR0aW5ncywgc2V0dGluZ3NfZGlhbG9nOwoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBMb2FkIHRoZSBzY3JpcHQgc2V0dGluZ3MuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGxvYWRfc2V0dGluZ3MoKSB7CiAgICAgICAgdmFyIGRlZmF1bHRzID0gewogICAgICAgICAgICB2aXNpYmxlX2l0ZW1zOiAnYWxsJywKICAgICAgICAgICAgbG9ja2VkX3Bvc2l0aW9uOiAnZmlyc3QnLAogICAgICAgICAgICBzaG93XzkwcGVyY2VudDogdHJ1ZSwKICAgICAgICAgICAgc2hvd19jaGFyOiB0cnVlLAogICAgICAgICAgICBlbmFibGVfcG9wdXA6IHRydWUsCiAgICAgICAgICAgIHNob3dfbWVhbmluZzogdHJ1ZSwKICAgICAgICAgICAgc2hvd19yZWFkaW5nOiB0cnVlLAogICAgICAgICAgICBzaG93X3NyczogdHJ1ZSwKICAgICAgICAgICAgc2hvd19uZXh0X3JldmlldzogdHJ1ZSwKICAgICAgICAgICAgc2hvd19wYXNzZWQ6IHRydWUsCiAgICAgICAgICAgIHRpbWVfZm9ybWF0OiAnMTJob3VyJywKICAgICAgICB9OwogICAgICAgIHJldHVybiB3a29mLlNldHRpbmdzLmxvYWQoJ2RwcCcsIGRlZmF1bHRzKS50aGVuKGZ1bmN0aW9uKGRhdGEpewogICAgICAgICAgICBzZXR0aW5ncyA9IHdrb2Yuc2V0dGluZ3MuZHBwOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBPcGVuIHRoZSBzZXR0aW5ncyBkaWFsb2cKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gb3Blbl9zZXR0aW5ncygpIHsKICAgICAgICB2YXIgY29uZmlnID0gewogICAgICAgICAgICBzY3JpcHRfaWQ6ICdkcHAnLAogICAgICAgICAgICB0aXRsZTogJ0Rhc2hib2FyZCBQcm9ncmVzcyBQbHVzJywKICAgICAgICAgICAgb25fc2F2ZTogc2V0dGluZ3Nfc2F2ZWQsCiAgICAgICAgICAgIG9uX3JlZnJlc2g6IHJlZnJlc2hfc2V0dGluZ3MsCiAgICAgICAgICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgIHRhYnM6IHt0eXBlOid0YWJzZXQnLCBjb250ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgcGdMYXlvdXQ6IHt0eXBlOidwYWdlJywgbGFiZWw6J01haW4gVmlldycsIGhvdmVyX3RpcDonU2V0dGluZ3MgZm9yIHRoZSBtYWluIHZpZXcuJywgY29udGVudDogewogICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlX2l0ZW1zOiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonVmlzaWJsZSBJdGVtcycsIGRlZmF1bHQ6J2FsbCcsIGNvbnRlbnQ6e2FsbDonQWxsIEl0ZW1zJyxhcHByX29ubHk6J0FwcHJlbnRpY2UgT25seScsZ3VydV9vbmx5OidHdXJ1KyBPbmx5J30sIGhvdmVyX3RpcDonQ2hvb3NlIHdoaWNoIGl0ZW1zIHRvIHNob3cuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfOTBwZXJjZW50OiB7dHlwZTonY2hlY2tib3gnLCBsYWJlbDonU2hvdyA5MCUgQnJhY2tldCcsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidTaG93IHRoZSBicmFja2V0IGFyb3VuZCA5MCUgb2YgaXRlbXMuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfY2hhcjoge3R5cGU6J2NoZWNrYm94JywgbGFiZWw6J1Nob3cgS2FuamkvUmFkaWNhbCcsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidTaG93IHRoZSBrYW5qaSBvciByYWRpY2FsIGluc2lkZSBlYWNoIHRpbGUuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZF9wb3NpdGlvbjoge3R5cGU6J2Ryb3Bkb3duJywgbGFiZWw6J0xvY2tlZCBJdGVtIFBvc2l0aW9uJywgZGVmYXVsdDonZmlyc3QnLCBjb250ZW50OntmaXJzdDonRmlyc3QnLGxhc3Q6J0xhc3QnfSwgaG92ZXJfdGlwOidDaG9vc2Ugd2hlcmUgbG9ja2VkIGl0ZW1zIGFyZSBwbGFjZWQuJ30sCiAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICAgICAgcGdQb3B1cEluZm86IHt0eXBlOidwYWdlJywgbGFiZWw6J1BvcC11cCBJbmZvJywgaG92ZXJfdGlwOidJbmZvcm1hdGlvbiBzaG93biBpbiB0aGUgcG9wdXAgYm94LicsIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX3BvcHVwOiB7dHlwZTonY2hlY2tib3gnLCBsYWJlbDonRW5hYmxlIFBvcC11cCBJbmZvIEJveCcsIGRlZmF1bHQ6dHJ1ZSwgcmVmcmVzaF9vbl9jaGFuZ2U6dHJ1ZSwgaG92ZXJfdGlwOidDaG9vc2Ugd2hldGhlciB0byBzaG93IHBvcC11cCBpbmZvIGJveCB3aGVuIGhvdmVyaW5nIG92ZXIgYW4gaXRlbS4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JwUG9wdXBJbmZvOiB7dHlwZTonZ3JvdXAnLCBsYWJlbDonUG9wLXVwIEluZm8nLCBob3Zlcl90aXA6J0luZm9ybWF0aW9uIHRvIGRpc3BsYXkgaW4gdGhlIHBvcC11cCBib3guJywgY29udGVudDp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X21lYW5pbmc6IHt0eXBlOidjaGVja2JveCcsIGxhYmVsOidTaG93IE1lYW5pbmcnLCBkZWZhdWx0OnRydWUsIGhvdmVyX3RpcDonQ2hvb3NlIHdoZXRoZXIgdG8gc2hvdyB0aGUgaXRlbVwncyBtZWFuaW5nIGluIHRoZSBwb3AtdXAgaW5mby4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfcmVhZGluZzoge3R5cGU6J2NoZWNrYm94JywgbGFiZWw6J1Nob3cgUmVhZGluZycsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidDaG9vc2Ugd2hldGhlciB0byBzaG93IHRoZSBpdGVtXCdzIHJlYWRpbmcgaW4gdGhlIHBvcC11cCBpbmZvLid9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd19zcnM6IHt0eXBlOidjaGVja2JveCcsIGxhYmVsOidTaG93IFNSUyBMZXZlbCcsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidDaG9vc2Ugd2hldGhlciB0byBzaG93IHRoZSBpdGVtXCdzIFNSUyBsZXZlbCBpbiB0aGUgcG9wLXVwIGluZm8uJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X25leHRfcmV2aWV3OiB7dHlwZTonY2hlY2tib3gnLCBsYWJlbDonU2hvdyBOZXh0IFJldmlldyBEYXRlJywgZGVmYXVsdDp0cnVlLCBob3Zlcl90aXA6J0Nob29zZSB3aGV0aGVyIHRvIHNob3cgdGhlIGl0ZW1cJ3MgbmV4dCByZXZpZXcgZGF0ZSBpbiB0aGUgcG9wLXVwIGluZm8uJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X3Bhc3NlZDoge3R5cGU6J2NoZWNrYm94JywgbGFiZWw6J1Nob3cgUGFzc2VkIERhdGUnLCBkZWZhdWx0OnRydWUsIGhvdmVyX3RpcDonQ2hvb3NlIHdoZXRoZXIgdG8gc2hvdyB0aGUgZGF0ZSB0aGF0IHRoZSBpdGVtIHBhc3NlZCBpbiB0aGUgcG9wLXVwIGluZm8uJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX2Zvcm1hdDoge3R5cGU6J2Ryb3Bkb3duJywgbGFiZWw6J1RpbWUgRm9ybWF0JywgZGVmYXVsdDonMTJob3VyJywgY29udGVudDp7JzEyaG91cic6JzEyLWhvdXInLCcyNGhvdXInOicyNC1ob3VyJ30sIGhvdmVyX3RpcDonRGlzcGxheSB0aW1lIGluIDEyIG9yIDI0LWhvdXIgZm9ybWF0Lid9LAogICAgICAgICAgICAgICAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgIH19CiAgICAgICAgICAgICAgICB9fQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB2YXIgc2V0dGluZ3NfZGlhbG9nID0gbmV3IHdrb2YuU2V0dGluZ3MoY29uZmlnKTsKICAgICAgICBzZXR0aW5nc19kaWFsb2cub3BlbigpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSZWZyZXNoIHNldHRpbmdzIGRpYWxvZwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHJlZnJlc2hfc2V0dGluZ3Moc2V0dGluZ3MpIHsKICAgICAgICBpZiAoc2V0dGluZ3MuZW5hYmxlX3BvcHVwKSB7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19tZWFuaW5nJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuY2xvc2VzdCgnLnJvdycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAkKCcjZHBwX3Nob3dfcmVhZGluZycpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLmNsb3Nlc3QoJy5yb3cnKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgJCgnI2RwcF9zaG93X3NycycpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLmNsb3Nlc3QoJy5yb3cnKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgJCgnI2RwcF9zaG93X25leHRfcmV2aWV3JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuY2xvc2VzdCgnLnJvdycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAkKCcjZHBwX3Nob3dfcGFzc2VkJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuY2xvc2VzdCgnLnJvdycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAkKCcjZHBwX3RpbWVfZm9ybWF0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuY2xvc2VzdCgnLnJvdycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19tZWFuaW5nJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5jbG9zZXN0KCcucm93JykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19yZWFkaW5nJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5jbG9zZXN0KCcucm93JykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19zcnMnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmNsb3Nlc3QoJy5yb3cnKS5hZGRDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgJCgnI2RwcF9zaG93X25leHRfcmV2aWV3JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5jbG9zZXN0KCcucm93JykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19wYXNzZWQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmNsb3Nlc3QoJy5yb3cnKS5hZGRDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgJCgnI2RwcF90aW1lX2Zvcm1hdCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSkuY2xvc2VzdCgnLnJvdycpLmFkZENsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU3RhcnR1cAogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBzdGFydHVwKCkgewogICAgICAgIGluc3RhbGxfY3NzKCk7CiAgICAgICAgaW5zdGFsbF9tZW51KCk7CiAgICAgICAgaW5pdF91aSgpOwoKICAgICAgICB3a29mLkl0ZW1EYXRhLmdldF9pdGVtcyh7CiAgICAgICAgICAgIHdrX2l0ZW1zOnsKICAgICAgICAgICAgICAgIG9wdGlvbnM6ewogICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzOnRydWUsCiAgICAgICAgICAgICAgICAgICAgcmV2aWV3X3N0YXRpc3RpY3M6dHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGZpbHRlcnM6ewogICAgICAgICAgICAgICAgICAgIGxldmVsOicrMCcsCiAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBlOidyYWRpY2FsLGthbmppJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pCiAgICAgICAgLnRoZW4ocHJvY2Vzc19pdGVtcyk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIENTUyBTdHlsaW5nCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBwcm9ncmVzc19jc3MgPQogICAgICAgICcjd2tvZnNfZHBwIC5yb3cuZGlzYWJsZWQgbGFiZWwge29wYWNpdHk6MC41O30nKwoKICAgICAgICAnZGl2LnByb2dyZXNzLWVudHJpZXMge2dyaWQtZ2FwOjEycHggMHB4O30nKwogICAgICAgICdkaXYucHJvZ3Jlc3MtZW50cnkge3BhZGRpbmc6NHB4O30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnkucGN0OTAge2JhY2tncm91bmQ6I2ZmZjsgYm9yZGVyLXJhZGl1czowOyBib3JkZXItY29sb3I6Izc3NzsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGg6MXB4IDA7IHBhZGRpbmctdG9wOjNweDsgcGFkZGluZy1ib3R0b206M3B4O30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnkucGN0OTAucGN0OTBfbGVmdCB7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4OyBib3JkZXItdG9wLWxlZnQtcmFkaXVzOjdweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo3cHg7IHBhZGRpbmctbGVmdDozcHg7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeS5wY3Q5MC5wY3Q5MF9yaWdodCB7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6N3B4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo3cHg7IHBhZGRpbmctcmlnaHQ6M3B4O30nKwogICAgICAgICcucHJvZ3Jlc3Npb25bZGF0YS1oaWRlLWNoYXI9InRydWUiXSAucHJvZ3Jlc3MtZW50cnkgYSB7Y29sb3I6dHJhbnNwYXJlbnQ7IHRleHQtc2hhZG93OnVuc2V0O30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnkuZHBwLW5vc2hvdyB7ZGlzcGxheTpub25lO30nKwoKICAgICAgICAvLyBSYWRpY2FsIGNvbG9ycwogICAgICAgICcucHJvZ3Jlc3MtZW50cnlbZGF0YS1zcnMtbHZsPSIwIl0gLnJhZGljYWwtaWNvbiwgLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iMCJdIC5rYW5qaS1pY29uIHtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1pbWFnZTogdXJsKCInKwogICAgICAgICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNjQUFBQW5DQVlBQUFDTW8xRTFBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGwnKwogICAgICAgICdQQUFBQUY1SlJFRlVlTnJzMDdFTndDQU1CRUR3c3BrcDB6cEJRaUpOK2krT0FxU3ZYalkzdS9zZTUxejdqY2dxdGRpNktyWFl5dWE3MXBGWTdEdTV5SDlYcWNXQUFBSUlJSUFBQWdnZ2dBQUNDQ0NBQUEnKwogICAgICAgICdJSUlJQUFBZ2dnZnJOSGdBRUFYcTVJYWJzTkJPd0FBQUFBU1VWT1JLNUNZSUk9JysKICAgICAgICAnIik7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjAiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMGFhZmY7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjEiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMGFhZmY7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjIiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMGFhZmY7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDBkZWcsIzAwYWFmZiwjMDBhYWZmKTt9JysKICAgICAgICAnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iMyJdIC5yYWRpY2FsLWljb24ge2JhY2tncm91bmQtY29sb3I6IzAwYWFmZjsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMGRlZywjMDBhYWZmLCMwMGFhZmYpO30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnlbZGF0YS1zcnMtbHZsPSI0Il0gLnJhZGljYWwtaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojMDBhYWZmOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCMwMGFhZmYsIzAwYWFmZik7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjUiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiNiNjlhY2Q7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDBkZWcsIzkwNjViMywjYjY5YWNkKTt9JysKICAgICAgICAnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iNiJdIC5yYWRpY2FsLWljb24ge2JhY2tncm91bmQtY29sb3I6I2I2OWFjZDsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMGRlZywjOTA2NWIzLCNiNjlhY2QpO30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnlbZGF0YS1zcnMtbHZsPSI3Il0gLnJhZGljYWwtaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojOWFhNWNmOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM3NDgzYmUsIzlhYTVjZik7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjgiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiNhM2MzZDM7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDBkZWcsIzc1YTViZCwjYTNjM2QzKTt9JysKICAgICAgICAnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iOSJdIC5yYWRpY2FsLWljb24ge2JhY2tncm91bmQtY29sb3I6Izk5OTk5OTsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMGRlZywjNzM3MzczLCM5OTk5OTkpO30nKwoKICAgICAgICAvLyBLYW5qaSBjb2xvcnMKICAgICAgICAnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iMCJdIC5rYW5qaS1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjAwYWE7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjEiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojZmYwMGFhOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCNjYzAwODgsI2ZmMDBhYSk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjIiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojZmYwMGFhOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCNjYzAwODgsI2ZmMDBhYSk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjMiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojZmYwMGFhOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCNjYzAwODgsI2ZmMDBhYSk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjQiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojZmYwMGFhOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCNjYzAwODgsI2ZmMDBhYSk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjUiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojYjY5YWNkOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM5MDY1YjMsI2I2OWFjZCk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjYiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojYjY5YWNkOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM5MDY1YjMsI2I2OWFjZCk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjciXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojOWFhNWNmOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM3NDgzYmUsIzlhYTVjZik7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjgiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojYTNjM2QzOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM3NWE1YmQsI2EzYzNkMyk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjkiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojOTk5OTk5OyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM3MzczNzMsIzk5OTk5OSk7fScrCgogICAgICAgICcucHJvZ3Jlc3MtZW50cmllcyAucG9wb3ZlciB7Ym9yZGVyLXJhZGl1czo1cHg7IGJvcmRlcjo1cHggc29saWQgcmdiYSg3NSw3NSw3NSwwLjgpOyBib3gtc2hhZG93Om5vbmU7fScrCiAgICAgICAgJy5wcm9ncmVzc2lvbiAucG9wb3Zlci5yaWdodCAuYXJyb3cge2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDc1LDc1LDc1LDAuOCk7IGxlZnQ6LTE2cHg7fScrCiAgICAgICAgJy5wcm9ncmVzc2lvbiAucG9wb3Zlci5yaWdodCAuYXJyb3c6YWZ0ZXIge2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDt9JysKICAgICAgICAnLnByb2dyZXNzaW9uIC5wb3BvdmVyLmxlZnQgLmFycm93IHtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDc1LDc1LDc1LDAuNTUpO30nKwogICAgICAgICcucHJvZ3Jlc3Npb24gLnBvcG92ZXIgLnBvcG92ZXItY29udGVudCB7dGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjt9JysKICAgICAgICAnLnByb2dyZXNzaW9uIC5wb3BvdmVyIC5zcnMge2ZvbnQtc2l6ZTo3NSU7IGZvbnQtd2VpZ2h0OmJvbGQ7fScrCiAgICAgICAgJy5wcm9ncmVzc2lvbiAucG9wb3ZlciAubmV4dCB7Zm9udC1zaXplOjc1JTsgZm9udC13ZWlnaHQ6Ym9sZDt9JysKCiAgICAgICAgJy5wcm9ncmVzc2lvbltkYXRhLXNob3ctaXRlbS1uYW1lPSJmYWxzZSJdIC5sYXR0aWNlLXNpbmdsZS1jaGFyYWN0ZXIgbGk+YSB7Y29sb3I6cmdiYSgwLDAsMCwwKTt0ZXh0LXNoYWRvdzowIDAgMCByZ2JhKDAsMCwwLDApO30nOwoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBJbnN0YWxsIHN0eWxlc2hlZXQuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGluc3RhbGxfY3NzKCkgewogICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxzdHlsZT4nK3Byb2dyZXNzX2NzcysnPC9zdHlsZT4nKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSW5zdGFsbCBtZW51IGxpbmsKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaW5zdGFsbF9tZW51KCkgewoJCS8vIFNldCB1cCBtZW51IGl0ZW0gdG8gb3BlbiBzY3JpcHQuCgkJd2tvZi5NZW51Lmluc2VydF9zY3JpcHRfbGluayh7bmFtZTonZHBwJyxzdWJtZW51OidTZXR0aW5ncycsdGl0bGU6J0Rhc2hib2FyZCBQcm9ncmVzcyBQbHVzJyxvbl9jbGljazpvcGVuX3NldHRpbmdzfSk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEluaXRpYWxpemUgdGhlIHVzZXIgaW50ZXJmYWNlLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBpbml0X3VpKCkgewogICAgICAgICQoJy5wcm9ncmVzc2lvbicpLmF0dHIoJ2RhdGEtaGlkZS1jaGFyJywgIXNldHRpbmdzLnNob3dfY2hhcik7CiAgICAgICAgaWYgKHNldHRpbmdzLmVuYWJsZV9wb3B1cCkgewogICAgICAgICAgICAkKCcucHJvZ3Jlc3MtZW50cmllcycpLnBvcG92ZXIoewogICAgICAgICAgICAgICAgc2VsZWN0b3I6Jy5wcm9ncmVzcy1lbnRyeScsCiAgICAgICAgICAgICAgICB0cmlnZ2VyOidob3ZlcicsCiAgICAgICAgICAgICAgICBhbmltYXRpb246IGZhbHNlLAogICAgICAgICAgICAgICAgaHRtbDp0cnVlLAogICAgICAgICAgICAgICAgY29udGVudDpnZW5lcmF0ZV9pdGVtX2luZm8sCiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6cGxhY2VfaXRlbV9pbmZvLAogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKCcucHJvZ3Jlc3MtZW50cmllcycpLnBvcG92ZXIoJ2Rlc3Ryb3knKTsKICAgICAgICB9CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEhhbmRsZXIgZm9yIHdoZW4gdXNlciBjbGlja3MgJ1NhdmUnIGluIHRoZSBzZXR0aW5ncyB3aW5kb3cuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHNldHRpbmdzX3NhdmVkKG5ld19zZXR0aW5ncykgewogICAgICAgIGluaXRfdWkoKTsKICAgICAgICBwb3B1bGF0ZV9pdGVtX2luZm8oJ3JhZGljYWwnKTsKICAgICAgICBwb3B1bGF0ZV9pdGVtX2luZm8oJ2thbmppJyk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBvcHVsYXRlIGxldmVsIGluZm8gZnJvbSBBUEkuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHByb2Nlc3NfaXRlbXMoZGF0YSkgewogICAgICAgIGdvYmouaXRlbXMgPSB3a29mLkl0ZW1EYXRhLmdldF9pbmRleChkYXRhLCAnaXRlbV90eXBlJyk7CgogICAgICAgIHBvcHVsYXRlX2l0ZW1faW5mbygncmFkaWNhbCcpOwogICAgICAgIHBvcHVsYXRlX2l0ZW1faW5mbygna2FuamknKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2VuZXJhdGUgY29udGVudCBmb3IgcG9wb3Zlci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZ2VuZXJhdGVfaXRlbV9pbmZvKCkgewogICAgICAgIC8vIFBvcHVsYXRlIHRoZSBuZXh0IHJldmlldyBkYXRlLgogICAgICAgIHZhciBlbGVtID0gJCh0aGlzKQogICAgICAgIHZhciBpdGVtID0gJCh0aGlzKS5kYXRhKCdpdGVtJyk7CiAgICAgICAgdmFyIGh0bWwgPSBbXTsKCiAgICAgICAgLy8gRnVuY3Rpb25zIGZvciBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgaW5mb3JtYXRpb24uCiAgICAgICAgZnVuY3Rpb24gYWNjZXB0ZWRfZmlyc3QoYSwgYikgewogICAgICAgICAgICBpZiAoYS5hY2NlcHRlZF9hbnN3ZXIgPT09IGIuYWNjZXB0ZWRfYW5zd2VyKSByZXR1cm4gMDsKICAgICAgICAgICAgaWYgKGEuYWNjZXB0ZWRfYW5zd2VyKSByZXR1cm4gLTE7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwcmltYXJ5KGEpIHtyZXR1cm4gYS5wcmltYXJ5O30KICAgICAgICBmdW5jdGlvbiB0b19tZWFuaW5nKGEpIHtyZXR1cm4gYS5tZWFuaW5nO30KICAgICAgICBmdW5jdGlvbiB0b19yZWFkaW5nKGEpIHtyZXR1cm4gYS5yZWFkaW5nO30KCiAgICAgICAgLy8gTWVhbmluZwogICAgICAgIGlmIChzZXR0aW5ncy5zaG93X21lYW5pbmcpIHsKICAgICAgICAgICAgdmFyIG1lYW5pbmcgPSBpdGVtLmRhdGEubWVhbmluZ3MuZmlsdGVyKHByaW1hcnkpLnNvcnQoYWNjZXB0ZWRfZmlyc3QpLm1hcCh0b19tZWFuaW5nKS5qb2luKCcsICcpOwogICAgICAgICAgICBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJtZWFuaW5nIj4nK21lYW5pbmcrJzwvc3Bhbj4nKTsKICAgICAgICB9CgogICAgICAgIC8vIFJlYWRpbmcKICAgICAgICBpZiAoc2V0dGluZ3Muc2hvd19yZWFkaW5nICYmIGl0ZW0ub2JqZWN0ID09PSAna2FuamknKSB7CiAgICAgICAgICAgIHZhciByZWFkaW5nID0gaXRlbS5kYXRhLnJlYWRpbmdzLmZpbHRlcihwcmltYXJ5KS5zb3J0KGFjY2VwdGVkX2ZpcnN0KS5tYXAodG9fcmVhZGluZykuam9pbignLCAnKTsKICAgICAgICAgICAgaHRtbC5wdXNoKCc8c3BhbiBjbGFzcz0icmVhZGluZyIgbGFuZz0iamEiPicrcmVhZGluZysnPC9zcGFuPicpOwogICAgICAgIH0KCiAgICAgICAgLy8gU1JTIFN0YWdlCiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfc3JzICYmIGl0ZW0uYXNzaWdubWVudHMgJiYgaXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2VfbmFtZSkgewogICAgICAgICAgICBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJzcnMiPlNSUzogJytpdGVtLmFzc2lnbm1lbnRzLnNyc19zdGFnZV9uYW1lKyc8L3NwYW4+Jyk7CiAgICAgICAgfQoKICAgICAgICAvLyBQYXNzIERhdGUgYW5kIE5leHQgUmV2aWV3CiAgICAgICAgdmFyIG5leHQgPSBbXTsKICAgICAgICB2YXIgZGF0ZTsKICAgICAgICBpZiAoaXRlbS5hc3NpZ25tZW50cyAmJiBpdGVtLmFzc2lnbm1lbnRzLmF2YWlsYWJsZV9hdCkgewogICAgICAgICAgICBpZiAoaXRlbS5hc3NpZ25tZW50cy5wYXNzZWQpIHsKICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5zaG93X3Bhc3NlZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmFzc2lnbm1lbnRzLnBhc3NlZF9hdCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gZm9ybWF0RGF0ZShuZXcgRGF0ZShpdGVtLmFzc2lnbm1lbnRzLnBhc3NlZF9hdCksIGZhbHNlIC8qIGlzX25leHRfZGF0ZSAqLyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9ICdBIGxvbmcgdGltZSBhZ28uLi4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2goJ1Bhc3NlZDogJytkYXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2UgPT0gOSkgewogICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfcGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGZvcm1hdERhdGUobmV3IERhdGUoaXRlbS5hc3NpZ25tZW50cy5idXJuZWRfYXQpLCBmYWxzZSAvKiBpc19uZXh0X2RhdGUgKi8pOwogICAgICAgICAgICAgICAgICAgIG5leHQucHVzaCgnQnVybmVkOiAnK2RhdGUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2goJ0J1cm5lZCEnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChzZXR0aW5ncy5zaG93X25leHRfcmV2aWV3KSB7CiAgICAgICAgICAgICAgICBkYXRlID0gZm9ybWF0RGF0ZShuZXcgRGF0ZShpdGVtLmFzc2lnbm1lbnRzLmF2YWlsYWJsZV9hdCksIHRydWUgLyogaXNfbmV4dF9kYXRlICovKTsKICAgICAgICAgICAgICAgIG5leHQucHVzaCgnTmV4dDogJytkYXRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5leHQucHVzaCgnTG9ja2VkIScpOwogICAgICAgIH0KCiAgICAgICAgLy8gUG9wdWxhdGUgcmVtYWluaW5nIGRhdGEgZm9yIHBvcHVwIHdpbmRvdy4KICAgICAgICBpZiAobmV4dC5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgaHRtbC5wdXNoKCc8c3BhbiBjbGFzcz0ibmV4dCI+JytuZXh0LmpvaW4oJzxicj4nKSsnPC9zcGFuPicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGh0bWwuam9pbignPGJyPicpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhlIGVsZW1lbnQuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHBsYWNlX2l0ZW1faW5mbygpIHsKICAgICAgICB2YXIgZWxlbSA9IHRoaXMuJGVsZW1lbnQuZXEoMCk7CiAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50KCk7CiAgICAgICAgcmV0dXJuICgoZWxlbS5wb3NpdGlvbigpLmxlZnQgKyBlbGVtLndpZHRoKCkgLSBwYXJlbnQucG9zaXRpb24oKS5sZWZ0KSA8PSAocGFyZW50LndpZHRoKCkvMikgPyAncmlnaHQnIDogJ2xlZnQnKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUG9wdWxhdGUgbGV2ZWwgaW5mbyBmcm9tIEFQSS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gcG9wdWxhdGVfaXRlbV9pbmZvKGl0eXBlKSB7CiAgICAgICAgdmFyIGdyb3VwLGVsZW1zOwogICAgICAgIGlmIChpdHlwZSA9PT0gJ3JhZGljYWwnKSB7CiAgICAgICAgICAgIGdyb3VwID0gJCgnLnByb2dyZXNzLWVudHJpZXMnKS5lcSgwKTsKICAgICAgICAgICAgZ3JvdXAuYXR0cignZGF0YS10eXBlJywncmFkaWNhbCcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdyb3VwID0gJCgnLnByb2dyZXNzLWVudHJpZXMnKS5lcSgxKTsKICAgICAgICAgICAgZ3JvdXAuYXR0cignZGF0YS10eXBlJywna2FuamknKTsKICAgICAgICB9CiAgICAgICAgZWxlbXMgPSBncm91cC5maW5kKCcucHJvZ3Jlc3MtZW50cnknKTsKICAgICAgICB2YXIgaXRlbXMgPSB3a29mLkl0ZW1EYXRhLmdldF9pbmRleChnb2JqLml0ZW1zW2l0eXBlXSwgJ3NsdWcnKTsKCiAgICAgICAgLy8gUG9wdWxhdGUgaXRlbSBkYXRhLgogICAgICAgIGVsZW1zLmVhY2goZnVuY3Rpb24oaWR4LCBlbGVtKXsKICAgICAgICAgICAgZWxlbSA9ICQoZWxlbSk7CiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cigndGl0bGUnKTsKICAgICAgICAgICAgdmFyIGEgPSBlbGVtLmZpbmQoJ2EnKTsKICAgICAgICAgICAgdmFyIHNsdWc7CiAgICAgICAgICAgIGlmIChpdHlwZSA9PT0gJ3JhZGljYWwnKSB7CiAgICAgICAgICAgICAgICBzbHVnID0gYS5hdHRyKCdocmVmJykuc3BsaXQoJy8nKVsyXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNsdWcgPSBhLnRleHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW3NsdWddOwogICAgICAgICAgICBlbGVtLmRhdGEoJ2l0ZW0nLCBpdGVtKTsKCiAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoJ2RwcC1wcm9ncmVzcycpOwoKICAgICAgICAgICAgLy8gUG9wdWxhdGUgJ2RhdGEtc3JzLWx2bCcsIHdoaWNoIGlzIGEgc3R5bGluZyBzZWxlY3Rvci4KICAgICAgICAgICAgdmFyIHNycyA9IChpdGVtLmFzc2lnbm1lbnRzID8gaXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2UgOiAwKTsgLy8gMCA9PSBsb2NrZWQKICAgICAgICAgICAgZWxlbS5hdHRyKCdkYXRhLXNycy1sdmwnLCBzcnMpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBTb3J0IGl0ZW1zIGJ5IHNycyBsZXZlbCwgdGhlbiByZXZpZXcgZGF0ZSwgdGhlbiBtZWFuaW5nLgogICAgICAgIHZhciBzcnNfbG9ja2VkID0gKHNldHRpbmdzLmxvY2tlZF9wb3NpdGlvbiA9PT0gJ2ZpcnN0JyA/IDAgOiAxMCk7CiAgICAgICAgZWxlbXMuc29ydChmdW5jdGlvbihhLGIpewogICAgICAgICAgICBpZiAoaXR5cGUgPT09ICdyYWRpY2FsJykgewogICAgICAgICAgICAgICAgYSA9IGl0ZW1zWyQoYSkuZmluZCgnLnJhZGljYWwtaWNvbicpLmF0dHIoJ2hyZWYnKS5zcGxpdCgnLycpWzJdXTsKICAgICAgICAgICAgICAgIGIgPSBpdGVtc1skKGIpLmZpbmQoJy5yYWRpY2FsLWljb24nKS5hdHRyKCdocmVmJykuc3BsaXQoJy8nKVsyXV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhID0gaXRlbXNbJChhKS50ZXh0KCldOwogICAgICAgICAgICAgICAgYiA9IGl0ZW1zWyQoYikudGV4dCgpXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGFfcGFzc2VkID0gKGEgJiYgYS5hc3NpZ25tZW50cyAmJiBhLmFzc2lnbm1lbnRzLnBhc3NlZCk7CiAgICAgICAgICAgIHZhciBiX3Bhc3NlZCA9IChiICYmIGIuYXNzaWdubWVudHMgJiYgYi5hc3NpZ25tZW50cy5wYXNzZWQpOwogICAgICAgICAgICBpZiAoIWFfcGFzc2VkICYmIGJfcGFzc2VkKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChhX3Bhc3NlZCAmJiAhYl9wYXNzZWQpIHJldHVybiAxOwogICAgICAgICAgICB2YXIgYV9zcnMgPSAoYSAmJiBhLmFzc2lnbm1lbnRzICYmIGEuYXNzaWdubWVudHMuc3JzX3N0YWdlID8gYS5hc3NpZ25tZW50cy5zcnNfc3RhZ2UgOiBzcnNfbG9ja2VkKTsKICAgICAgICAgICAgdmFyIGJfc3JzID0gKGIgJiYgYi5hc3NpZ25tZW50cyAmJiBiLmFzc2lnbm1lbnRzLnNyc19zdGFnZSA/IGIuYXNzaWdubWVudHMuc3JzX3N0YWdlIDogc3JzX2xvY2tlZCk7CiAgICAgICAgICAgIGlmIChhX3NycyA8IGJfc3JzKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChhX3NycyA+IGJfc3JzKSByZXR1cm4gMTsKICAgICAgICAgICAgdmFyIGFfYXZhaWwgPSAoYSAmJiBhLmFzc2lnbm1lbnRzICYmIGEuYXNzaWdubWVudHMuYXZhaWxhYmxlX2F0ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYS5hc3NpZ25tZW50cy5hdmFpbGFibGVfYXQpLmdldFRpbWUoKSA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgICAgICAgICAgdmFyIGJfYXZhaWwgPSAoYiAmJiBiLmFzc2lnbm1lbnRzICYmIGIuYXNzaWdubWVudHMuYXZhaWxhYmxlX2F0ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5hc3NpZ25tZW50cy5hdmFpbGFibGVfYXQpLmdldFRpbWUoKSA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgICAgICAgICAgaWYgKGFfYXZhaWwgPCBiX2F2YWlsKSByZXR1cm4gMTsKICAgICAgICAgICAgaWYgKGFfYXZhaWwgPiBiX2F2YWlsKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChhLmRhdGEuc2x1ZyA8IGIuZGF0YS5zbHVnKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChhLmRhdGEuc2x1ZyA+IGIuZGF0YS5zbHVnKSByZXR1cm4gMTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSk7CiAgICAgICAgZWxlbXMuZGV0YWNoKCkuYXBwZW5kVG8oZ3JvdXApOwoKICAgICAgICBlbGVtcy5yZW1vdmVDbGFzcygnZHBwLW5vc2hvdyBwY3Q5MF9sZWZ0IHBjdDkwIHBjdDkwX3JpZ2h0Jyk7CiAgICAgICAgdmFyIHNyc2x2bDsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzLnZpc2libGVfaXRlbXMpIHsKICAgICAgICAgICAgY2FzZSAnYXBwcl9vbmx5JzoKICAgICAgICAgICAgICAgIGZvciAoc3JzbHZsPTU7IHNyc2x2bDw9OTsgc3JzbHZsKyspIHsKICAgICAgICAgICAgICAgICAgICAkKCcucHJvZ3Jlc3MtZW50cnlbZGF0YS1zcnMtbHZsPSInK3Nyc2x2bCsnIl0nKS5hZGRDbGFzcygnZHBwLW5vc2hvdycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2d1cnVfb25seSc6CiAgICAgICAgICAgICAgICBmb3IgKHNyc2x2bD0wOyBzcnNsdmw8PTQ7IHNyc2x2bCsrKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iJytzcnNsdmwrJyJdJykuYWRkQ2xhc3MoJ2RwcC1ub3Nob3cnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc2V0dGluZ3Muc2hvd185MHBlcmNlbnQgJiYgaXR5cGUgPT09ICdrYW5qaScpIHsKICAgICAgICAgICAgLy8gQWRkIG1hcmtlciBhdCA5MCUsIGluZGljYXRpbmcgd2hlbiBsZXZlbCB3aWxsIGJlIGNvbXBsZXRlLgogICAgICAgICAgICAvLyBGaXJzdCwgbWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCAxMCUgb2YgaXRlbXMgbGVmdC4KICAgICAgICAgICAgdmFyIGlkeDkwID0gTWF0aC5mbG9vcihlbGVtcy5sZW5ndGggKiAwLjEpOwogICAgICAgICAgICB2YXIgbGVuID0gZWxlbXMuY2hpbGRyZW4oJzpub3QoLmRwcC1ub3Nob3cpJykubGVuZ3RoOwogICAgICAgICAgICBpZiAoaWR4OTAgPCBsZW4pIHsKICAgICAgICAgICAgICAgIHZhciB2aXNpYmxlX2VsZW1zID0gZWxlbXMuZmlsdGVyKCc6bm90KC5kcHAtbm9zaG93KScpOwogICAgICAgICAgICAgICAgdmlzaWJsZV9lbGVtcy5lcShpZHg5MCkuYWRkQ2xhc3MoJ3BjdDkwX2xlZnQnKTsKICAgICAgICAgICAgICAgIHZpc2libGVfZWxlbXMuc2xpY2UoaWR4OTApLmFkZENsYXNzKCdwY3Q5MCcpOwogICAgICAgICAgICAgICAgdmlzaWJsZV9lbGVtcy5sYXN0KCkuYWRkQ2xhc3MoJ3BjdDkwX3JpZ2h0Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByaW50IGRhdGUgaW4gcHJldHR5IGZvcm1hdC4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShkLCBpc19uZXh0X2RhdGUpewogICAgICAgIHZhciBzID0gJyc7CiAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICAgICAgdmFyIFlZID0gZC5nZXRGdWxsWWVhcigpLAogICAgICAgICAgICBNTSA9IGQuZ2V0TW9udGgoKSwKICAgICAgICAgICAgREQgPSBkLmdldERhdGUoKSwKICAgICAgICAgICAgaGggPSBkLmdldEhvdXJzKCksCiAgICAgICAgICAgIG1tID0gZC5nZXRNaW51dGVzKCksCiAgICAgICAgICAgIG9uZV9kYXkgPSAyNCo2MCo2MCoxMDAwOwoKICAgICAgICBpZiAoaXNfbmV4dF9kYXRlICYmIGQgPCBub3cpIHJldHVybiAiQXZhaWxhYmxlIE5vdyI7CiAgICAgICAgdmFyIHNhbWVfZGF5ID0gKChZWSA9PSBub3cuZ2V0RnVsbFllYXIoKSkgJiYgKE1NID09IG5vdy5nZXRNb250aCgpKSAmJiAoREQgPT0gbm93LmdldERhdGUoKSkgPyAxIDogMCk7CgogICAgICAgIC8vICAgIElmIHRvZGF5OiAgIlRvZGF5IDg6MTVwbSIKICAgICAgICAvLyAgICBvdGhlcndpc2U6ICJXZWQsIEFwciAxNSwgODoxNXBtIgogICAgICAgIGlmIChzYW1lX2RheSkgewogICAgICAgICAgICBzICs9ICdUb2RheSAnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMgKz0gWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVtkLmdldERheSgpXSsnLCAnKwogICAgICAgICAgICAgICAgWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYXknLCdKdW4nLCdKdWwnLCdBdWcnLCdTZXAnLCdPY3QnLCdOb3YnLCdEZWMnXVtNTV0rJyAnK0REKycsICc7CiAgICAgICAgfQogICAgICAgIGlmIChzZXR0aW5ncy50aW1lX2Zvcm1hdCA9PT0gJzI0aG91cicpIHsKICAgICAgICAgICAgcyArPSAoJzAnK2hoKS5zbGljZSgtMikrJzonKygnMCcrbW0pLnNsaWNlKC0yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzICs9ICgoKGhoKzExKSUxMikrMSkrJzonKygnMCcrbW0pLnNsaWNlKC0yKStbJ2FtJywncG0nXVtNYXRoLmZsb29yKGQuZ2V0SG91cnMoKS8xMildOwogICAgICAgIH0KCiAgICAgICAgLy8gQXBwZW5kICIoWCBkYXlzKSIuCiAgICAgICAgaWYgKGlzX25leHRfZGF0ZSAmJiAhc2FtZV9kYXkpIHsKICAgICAgICAgICAgdmFyIGRheXMgPSAoTWF0aC5mbG9vcigoZC5nZXRUaW1lKCktZC5nZXRUaW1lem9uZU9mZnNldCgpKjYwKjEwMDApL29uZV9kYXkpLU1hdGguZmxvb3IoKG5vdy5nZXRUaW1lKCktZC5nZXRUaW1lem9uZU9mZnNldCgpKjYwKjEwMDApL29uZV9kYXkpKTsKICAgICAgICAgICAgaWYgKGRheXMpIHMgKz0gJyAoJytkYXlzKycgZGF5JysoZGF5cz4xPydzJzonJykrJyknOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHM7CiAgICB9Cgp9KSh3aW5kb3cuZHBwKTsK"},{"name":"Replace Text","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1570721213155,"data":{}},"enabled":true,"position":25,"uuid":"ada1e30c-e7af-4950-af97-01317d5b1849","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBSZXBsYWNlIFRleHQKLy8gQG5hbWVzcGFjZSAgICBodHRwczovL2FrYW1hcnUuZGUvCi8vIEB2ZXJzaW9uICAgICAgMC4xCi8vIEBkZXNjcmlwdGlvbiAgLQovLyBAYXV0aG9yICAgICAgIEFrYW1hcnUKLy8gQG1hdGNoICAgICAgICAqCi8vIEBncmFudCAgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KKGZ1bmN0aW9uICgpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICB2YXIgd29yZHMgPSB7CiAgICAgICAgLy8gU3ludGF4OiAnU2VhcmNoIHdvcmQnIDogJ1JlcGxhY2Ugd29yZCcsCiAgICAgICAgJ0Rpc2NvcmQgc2VydmVyJzonJywKICAgICAgICAnam9pbiBvdXInOicnLAogICAgICAgICdqb2luIG91ciBEaXNjb3JkIHNlcnZlcic6JycKICAgICAgICB9OwoKCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgY29kZSBpcwogICAgLy8gRG9uJ3QgZWRpdCBiZWxvdyB0aGlzCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCiAgICB2YXIgcmVnZXhzID0gW10sIHJlcGxhY2VtZW50cyA9IFtdLAogICAgICAgIHRhZ3NXaGl0ZWxpc3QgPSBbJ1BSRScsICdCTE9DS1FVT1RFJywgJ0NPREUnLCAnSU5QVVQnLCAnQlVUVE9OJywgJ1RFWFRBUkVBJ10sCiAgICAgICAgcklzUmVnZXhwID0gL15cLyguKylcLyhbZ2ltXSspPyQvLAogICAgICAgIHdvcmQsIHRleHQsIHRleHRzLCBpLCB1c2VyUmVnZXhwOwoKICAgIC8vIHByZXBhcmVSZWdleCBieSBKb2VTaW1tb25zCiAgICAvLyB1c2VkIHRvIHRha2UgYSBzdHJpbmcgYW5kIHJlYWR5IGl0IGZvciB1c2UgaW4gbmV3IFJlZ0V4cCgpCiAgICBmdW5jdGlvbiBwcmVwYXJlUmVnZXgoc3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW1xbXF1cXlwmXCRcLlwoXClcP1wvXFxcK1x7XH1cfF0pL2csICdcXCQxJyk7CiAgICB9CgogICAgLy8gZnVuY3Rpb24gdG8gZGVjaWRlIHdoZXRoZXIgYSBwYXJlbnQgdGFnIHdpbGwgaGF2ZSBpdHMgdGV4dCByZXBsYWNlZCBvciBub3QKICAgIGZ1bmN0aW9uIGlzVGFnT2sodGFnKSB7CiAgICAgICAgcmV0dXJuIHRhZ3NXaGl0ZWxpc3QuaW5kZXhPZih0YWcpID09PSAtMTsKICAgIH0KCiAgICBkZWxldGUgd29yZHNbJyddOyAvLyBzbyB0aGUgdXNlciBjYW4gYWRkIGVhY2ggZW50cnkgZW5kaW5nIHdpdGggYSBjb21tYSwKICAgICAgICAgICAgICAgICAgICAgIC8vIEkgcHV0IGFuIGV4dHJhIGVtcHR5IGtleS92YWx1ZSBwYWlyIGluIHRoZSBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBiZWZvcmUgY29udGludWluZwoKICAgIC8vIGNvbnZlcnQgdGhlICd3b3JkcycgSlNPTiBvYmplY3QgdG8gYW4gQXJyYXkKICAgIGZvciAod29yZCBpbiB3b3JkcykgewogICAgICAgIGlmICggdHlwZW9mIHdvcmQgPT09ICdzdHJpbmcnICYmIHdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpICkgewogICAgICAgICAgICB1c2VyUmVnZXhwID0gd29yZC5tYXRjaChySXNSZWdleHApOwoKICAgICAgICAgICAgLy8gYWRkIHRoZSBzZWFyY2gvbmVlZGxlL3F1ZXJ5CiAgICAgICAgICAgIGlmICh1c2VyUmVnZXhwKSB7CiAgICAgICAgICAgICAgICByZWdleHMucHVzaCgKICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKHVzZXJSZWdleHBbMV0sICdnJykKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZWdleHMucHVzaCgKICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKHByZXBhcmVSZWdleCh3b3JkKS5yZXBsYWNlKC9cXD9cKi9nLCBmdW5jdGlvbiAoZnVsbE1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxsTWF0Y2ggPT09ICdcXConID8gJyonIDogJ1teIF0qJzsKICAgICAgICAgICAgICAgICAgICB9KSwgJ2cnKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gYWRkIHRoZSByZXBsYWNlbWVudAogICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaCggd29yZHNbd29yZF0gKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gZG8gdGhlIHJlcGxhY2VtZW50CiAgICB0ZXh0cyA9IGRvY3VtZW50LmV2YWx1YXRlKCcvL2JvZHkvL3RleHQoKVsgbm9ybWFsaXplLXNwYWNlKC4pICE9ICIiIF0nLCBkb2N1bWVudCwgbnVsbCwgNiwgbnVsbCk7CiAgICBmb3IgKGkgPSAwOyB0ZXh0ID0gdGV4dHMuc25hcHNob3RJdGVtKGkpOyBpICs9IDEpIHsKICAgICAgICBpZiAoIGlzVGFnT2sodGV4dC5wYXJlbnROb2RlLnRhZ05hbWUpICkgewogICAgICAgICAgICByZWdleHMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CiAgICAgICAgICAgICAgICB0ZXh0LmRhdGEgPSB0ZXh0LmRhdGEucmVwbGFjZSggdmFsdWUsIHJlcGxhY2VtZW50c1tpbmRleF0gKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKfSgpKTs="},{"name":"Youtube Peek Preview","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":["https://twitter.com/*"],"orig_includes":[],"orig_matches":["*://*/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"data":{"userSettings":"s{\"regions\":[\"DE\"],\"noTooltip\":true,\"allowOnYoutube\":false}"},"ts":1571246066949},"enabled":true,"position":26,"file_url":"https://greasyfork.org/scripts/370755-youtube-peek-preview/code/Youtube%20Peek%20Preview.user.js","uuid":"08dff494-f978-49b2-a69c-1ceff99b0120","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBZb3V0dWJlIFBlZWsgUHJldmlldwovLyBAbmFtZXNwYWNlICAgIGh0dHA6Ly90YW1wZXJtb25rZXkubmV0LwovLyBAdmVyc2lvbiAgICAgIDAuMi4zCi8vIEBkZXNjcmlwdGlvbiAgU2VlIHZpZGVvIHRodW1ibmFpbHMsIHJhdGluZ3MgYW5kIG90aGVyIGRldGFpbHMgd2hlbiB5b3UgbW91c2Ugb3ZlciBhIFlvdXR1YmUgbGluayBmcm9tIGFsbW9zdCBhbnkgd2Vic2l0ZQovLyBAYXV0aG9yICAgICAgIHNjcmlwdHBvc3QKLy8gQG1hdGNoICAgICAgICAqOi8vKi8qCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly90d2l0dGVyLmNvbS8qCi8vIEBncmFudCAgICAgICAgR01fc2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgIEdNX2RlbGV0ZVZhbHVlCi8vIEBncmFudCAgICAgICAgR01fcmVnaXN0ZXJNZW51Q29tbWFuZAovLyA9PS9Vc2VyU2NyaXB0PT0KKGZ1bmN0aW9uICgpIHsKICAgIC8vIFJlbW92ZSBkZXByZWNhdGVkIHN0b3JhZ2Ugc3RydWN0dXJlIGZyb20gZWFybGllciB2ZXJzaW9ucy4KICAgIC8vIENvbmZpZ3VyZSBzZXR0aW5ncyB0aHJvdWdoIHlvdXIgYnJvd3NlciBleHRlbnNpb24gaWNvbiwgdW5kZXIgIllvdXR1YmUgUGVlayBTZXR0aW5ncyIKICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShHTV9nZXRWYWx1ZSgndXNlclNldHRpbmdzJywgJ3t9JykpOwogICAgaWYgKHNldHRpbmdzLmhhc093blByb3BlcnR5KCdSRUdJT05TJykpIHsKICAgICAgICBHTV9kZWxldGVWYWx1ZSgndXNlclNldHRpbmdzJyk7CiAgICB9Cn0pKCk7Ci8qIQoqIENsYW1wLmpzIDAuNS4xCioKKiBDb3B5cmlnaHQgMjAxMS0yMDEzLCBKb3NlcGggU2NobWl0dCBodHRwOi8vam9lLnNoCiogUmVsZWFzZWQgdW5kZXIgdGhlIFdURlBMIGxpY2Vuc2UKKiBodHRwOi8vc2FtLnpveS5vcmcvd3RmcGwvCiovCihmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIENsYW1wcyBhIHRleHQgbm9kZS4KICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQuIEVsZW1lbnQgY29udGFpbmluZyB0aGUgdGV4dCBub2RlIHRvIGNsYW1wLgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMuIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY2xhbXBlci4KICAgICAqLwogICAgZnVuY3Rpb24gY2xhbXAoZWxlbWVudCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIHZhciBzZWxmID0gdGhpcywgd2luID0gd2luZG93LCBvcHQgPSB7CiAgICAgICAgICAgIGNsYW1wOiBvcHRpb25zLmNsYW1wIHx8IDIsCiAgICAgICAgICAgIHVzZU5hdGl2ZUNsYW1wOiB0eXBlb2YgKG9wdGlvbnMudXNlTmF0aXZlQ2xhbXApICE9ICd1bmRlZmluZWQnID8gb3B0aW9ucy51c2VOYXRpdmVDbGFtcCA6IHRydWUsCiAgICAgICAgICAgIHNwbGl0T25DaGFyczogb3B0aW9ucy5zcGxpdE9uQ2hhcnMgfHwgWycuJywgJy0nLCAn4oCTJywgJ+KAlCcsICcgJ10sCiAgICAgICAgICAgIGFuaW1hdGU6IG9wdGlvbnMuYW5pbWF0ZSB8fCBmYWxzZSwKICAgICAgICAgICAgdHJ1bmNhdGlvbkNoYXI6IG9wdGlvbnMudHJ1bmNhdGlvbkNoYXIgfHwgJ+KApicsCiAgICAgICAgICAgIHRydW5jYXRpb25IVE1MOiBvcHRpb25zLnRydW5jYXRpb25IVE1MCiAgICAgICAgfSwgc3R5ID0gZWxlbWVudC5zdHlsZSwgb3JpZ2luYWxUZXh0ID0gZWxlbWVudC5pbm5lckhUTUwsIHN1cHBvcnRzTmF0aXZlQ2xhbXAgPSB0eXBlb2YgKGVsZW1lbnQuc3R5bGUud2Via2l0TGluZUNsYW1wKSAhPSAndW5kZWZpbmVkJywgY2xhbXBWYWx1ZSA9IG9wdC5jbGFtcCwgaXNDU1NWYWx1ZSA9IGNsYW1wVmFsdWUuaW5kZXhPZiAmJiAoY2xhbXBWYWx1ZS5pbmRleE9mKCdweCcpID4gLTEgfHwgY2xhbXBWYWx1ZS5pbmRleE9mKCdlbScpID4gLTEpLCB0cnVuY2F0aW9uSFRNTENvbnRhaW5lcjsKICAgICAgICBpZiAob3B0LnRydW5jYXRpb25IVE1MKSB7CiAgICAgICAgICAgIHRydW5jYXRpb25IVE1MQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgICAgICB0cnVuY2F0aW9uSFRNTENvbnRhaW5lci5pbm5lckhUTUwgPSBvcHQudHJ1bmNhdGlvbkhUTUw7CiAgICAgICAgfQogICAgICAgIC8vIFVUSUxJVFkgRlVOQ1RJT05TCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJuIHRoZSBjdXJyZW50IHN0eWxlIGZvciBhbiBlbGVtZW50LgogICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW0gVGhlIGVsZW1lbnQgdG8gY29tcHV0ZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBUaGUgc3R5bGUgcHJvcGVydHkuCiAgICAgICAgICogQHJldHVybnMge251bWJlcn0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBjb21wdXRlU3R5bGUoZWxlbSwgcHJvcCkgewogICAgICAgICAgICBpZiAoIXdpbi5nZXRDb21wdXRlZFN0eWxlKSB7CiAgICAgICAgICAgICAgICB3aW4uZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uIChlbCwgcHNldWRvKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbCA9IGVsOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZSA9IC8oXC0oW2Etel0pezF9KS9nOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PSAnZmxvYXQnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9ICdzdHlsZUZsb2F0JzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlLnRlc3QocHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSBwcm9wLnJlcGxhY2UocmUsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzWzJdLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWwuY3VycmVudFN0eWxlICYmIGVsLmN1cnJlbnRTdHlsZVtwcm9wXSA/IGVsLmN1cnJlbnRTdHlsZVtwcm9wXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHdpbi5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIG9mIHRleHQgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQgYmFzZWQKICAgICAgICAgKiBvbiB0aGUgY3VycmVudCBoZWlnaHQgb2YgdGhlIGVsZW1lbnQgYW5kIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgdGV4dC4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRNYXhMaW5lcyhoZWlnaHQpIHsKICAgICAgICAgICAgdmFyIGF2YWlsSGVpZ2h0ID0gaGVpZ2h0IHx8IGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBsaW5lSGVpZ2h0ID0gZ2V0TGluZUhlaWdodChlbGVtZW50KTsKICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGguZmxvb3IoYXZhaWxIZWlnaHQgLyBsaW5lSGVpZ2h0KSwgMCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gaGVpZ2h0IGEgZ2l2ZW4gZWxlbWVudCBzaG91bGQgaGF2ZSBiYXNlZCBvbiB0aGUgbGluZS0KICAgICAgICAgKiBoZWlnaHQgb2YgdGhlIHRleHQgYW5kIHRoZSBnaXZlbiBjbGFtcCB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRNYXhIZWlnaHQoY2xtcCkgewogICAgICAgICAgICB2YXIgbGluZUhlaWdodCA9IGdldExpbmVIZWlnaHQoZWxlbWVudCk7CiAgICAgICAgICAgIHJldHVybiBsaW5lSGVpZ2h0ICogY2xtcDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgbGluZS1oZWlnaHQgb2YgYW4gZWxlbWVudCBhcyBhbiBpbnRlZ2VyLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldExpbmVIZWlnaHQoZWxlbSkgewogICAgICAgICAgICB2YXIgbGggPSBjb21wdXRlU3R5bGUoZWxlbSwgJ2xpbmUtaGVpZ2h0Jyk7CiAgICAgICAgICAgIGlmIChsaCA9PSAnbm9ybWFsJykgewogICAgICAgICAgICAgICAgLy8gTm9ybWFsIGxpbmUgaGVpZ2h0cyB2YXJ5IGZyb20gYnJvd3NlciB0byBicm93c2VyLiBUaGUgc3BlYyByZWNvbW1lbmRzCiAgICAgICAgICAgICAgICAvLyBhIHZhbHVlIGJldHdlZW4gMS4wIGFuZCAxLjIgb2YgdGhlIGZvbnQgc2l6ZS4gVXNpbmcgMS4xIHRvIHNwbGl0IHRoZSBkaWZmLgogICAgICAgICAgICAgICAgbGggPSBwYXJzZUludChjb21wdXRlU3R5bGUoZWxlbSwgJ2ZvbnQtc2l6ZScpKSAqIDEuMjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobGgpOwogICAgICAgIH0KICAgICAgICAvLyBNRUFUIEFORCBQT1RBVE9FUyAoTU1NTSwgUE9UQVRPRVMuLi4pCiAgICAgICAgdmFyIHNwbGl0T25DaGFycyA9IG9wdC5zcGxpdE9uQ2hhcnMuc2xpY2UoMCksIHNwbGl0Q2hhciA9IHNwbGl0T25DaGFyc1swXSwgY2h1bmtzLCBsYXN0Q2h1bms7CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0cyBhbiBlbGVtZW50J3MgbGFzdCBjaGlsZC4gVGhhdCBtYXkgYmUgYW5vdGhlciBub2RlIG9yIGEgbm9kZSdzIGNvbnRlbnRzLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldExhc3RDaGlsZChlbGVtKSB7CiAgICAgICAgICAgIC8vQ3VycmVudCBlbGVtZW50IGhhcyBjaGlsZHJlbiwgbmVlZCB0byBnbyBkZWVwZXIgYW5kIGdldCBsYXN0IGNoaWxkIGFzIGEgdGV4dCBub2RlCiAgICAgICAgICAgIGlmIChlbGVtLmxhc3RDaGlsZC5jaGlsZHJlbiAmJiBlbGVtLmxhc3RDaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TGFzdENoaWxkKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW0uY2hpbGRyZW4pLnBvcCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL1RoaXMgaXMgdGhlIGFic29sdXRlIGxhc3QgY2hpbGQsIGEgdGV4dCBub2RlLCBidXQgc29tZXRoaW5nJ3Mgd3Jvbmcgd2l0aCBpdC4gUmVtb3ZlIGl0IGFuZCBrZWVwIHRyeWluZwogICAgICAgICAgICBlbHNlIGlmICghZWxlbS5sYXN0Q2hpbGQgfHwgIWVsZW0ubGFzdENoaWxkLm5vZGVWYWx1ZSB8fCBlbGVtLmxhc3RDaGlsZC5ub2RlVmFsdWUgPT0gJycgfHwgZWxlbS5sYXN0Q2hpbGQubm9kZVZhbHVlID09IG9wdC50cnVuY2F0aW9uQ2hhcikgewogICAgICAgICAgICAgICAgZWxlbS5sYXN0Q2hpbGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtLmxhc3RDaGlsZCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TGFzdENoaWxkKGVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vVGhpcyBpcyB0aGUgbGFzdCBjaGlsZCB3ZSB3YW50LCByZXR1cm4gaXQKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5sYXN0Q2hpbGQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmVtb3ZlcyBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSBmcm9tIHRoZSB0ZXh0IHVudGlsIGl0cyB3aWR0aCBvcgogICAgICAgICAqIGhlaWdodCBpcyBiZW5lYXRoIHRoZSBwYXNzZWQtaW4gbWF4IHBhcmFtLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHRydW5jYXRlKHRhcmdldCwgbWF4SGVpZ2h0KSB7CiAgICAgICAgICAgIGlmICghbWF4SGVpZ2h0KSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIFJlc2V0cyBnbG9iYWwgdmFyaWFibGVzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzZXQoKSB7CiAgICAgICAgICAgICAgICBzcGxpdE9uQ2hhcnMgPSBvcHQuc3BsaXRPbkNoYXJzLnNsaWNlKDApOwogICAgICAgICAgICAgICAgc3BsaXRDaGFyID0gc3BsaXRPbkNoYXJzWzBdOwogICAgICAgICAgICAgICAgY2h1bmtzID0gbnVsbDsKICAgICAgICAgICAgICAgIGxhc3RDaHVuayA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG5vZGVWYWx1ZSA9IHRhcmdldC5ub2RlVmFsdWUucmVwbGFjZShvcHQudHJ1bmNhdGlvbkNoYXIsICcnKTsKICAgICAgICAgICAgLy9HcmFiIHRoZSBuZXh0IGNodW5rcwogICAgICAgICAgICBpZiAoIWNodW5rcykgewogICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBhcmUgbW9yZSBjaGFyYWN0ZXJzIHRvIHRyeSwgZ3JhYiB0aGUgbmV4dCBvbmUKICAgICAgICAgICAgICAgIGlmIChzcGxpdE9uQ2hhcnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIHNwbGl0Q2hhciA9IHNwbGl0T25DaGFycy5zaGlmdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy9ObyBjaGFyYWN0ZXJzIHRvIGNodW5rIGJ5LiBHbyBjaGFyYWN0ZXItYnktY2hhcmFjdGVyCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzcGxpdENoYXIgPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNodW5rcyA9IG5vZGVWYWx1ZS5zcGxpdChzcGxpdENoYXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vSWYgdGhlcmUgYXJlIGNodW5rcyBsZWZ0IHRvIHJlbW92ZSwgcmVtb3ZlIHRoZSBsYXN0IG9uZSBhbmQgc2VlIGlmCiAgICAgICAgICAgIC8vIHRoZSBub2RlVmFsdWUgZml0cy4KICAgICAgICAgICAgaWYgKGNodW5rcy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2h1bmtzJywgY2h1bmtzKTsKICAgICAgICAgICAgICAgIGxhc3RDaHVuayA9IGNodW5rcy5wb3AoKTsKICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdsYXN0Q2h1bmsnLCBsYXN0Q2h1bmspOwogICAgICAgICAgICAgICAgYXBwbHlFbGxpcHNpcyh0YXJnZXQsIGNodW5rcy5qb2luKHNwbGl0Q2hhcikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vTm8gbW9yZSBjaHVua3MgY2FuIGJlIHJlbW92ZWQgdXNpbmcgdGhpcyBjaGFyYWN0ZXIKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjaHVua3MgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vSW5zZXJ0IHRoZSBjdXN0b20gSFRNTCBiZWZvcmUgdGhlIHRydW5jYXRpb24gY2hhcmFjdGVyCiAgICAgICAgICAgIGlmICh0cnVuY2F0aW9uSFRNTENvbnRhaW5lcikgewogICAgICAgICAgICAgICAgdGFyZ2V0Lm5vZGVWYWx1ZSA9IHRhcmdldC5ub2RlVmFsdWUucmVwbGFjZShvcHQudHJ1bmNhdGlvbkNoYXIsICcnKTsKICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGFyZ2V0Lm5vZGVWYWx1ZSArICcgJyArIHRydW5jYXRpb25IVE1MQ29udGFpbmVyLmlubmVySFRNTCArIG9wdC50cnVuY2F0aW9uQ2hhcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL1NlYXJjaCBwcm9kdWNlZCB2YWxpZCBjaHVua3MKICAgICAgICAgICAgaWYgKGNodW5rcykgewogICAgICAgICAgICAgICAgLy9JdCBmaXRzCiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGllbnRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgLy9UaGVyZSdzIHN0aWxsIG1vcmUgY2hhcmFjdGVycyB0byB0cnkgc3BsaXR0aW5nIG9uLCBub3QgcXVpdGUgZG9uZSB5ZXQKICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXRPbkNoYXJzLmxlbmd0aCA+PSAwICYmIHNwbGl0Q2hhciAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICBhcHBseUVsbGlwc2lzKHRhcmdldCwgY2h1bmtzLmpvaW4oc3BsaXRDaGFyKSArIHNwbGl0Q2hhciArIGxhc3RDaHVuayk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vRmluaXNoZWQhCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmlubmVySFRNTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9ObyB2YWxpZCBjaHVua3MgcHJvZHVjZWQKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvL05vIHZhbGlkIGNodW5rcyBldmVuIHdoZW4gc3BsaXR0aW5nIGJ5IGxldHRlciwgdGltZSB0byBtb3ZlCiAgICAgICAgICAgICAgICAvL29uIHRvIHRoZSBuZXh0IG5vZGUKICAgICAgICAgICAgICAgIGlmIChzcGxpdENoYXIgPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICBhcHBseUVsbGlwc2lzKHRhcmdldCwgJycpOwogICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGdldExhc3RDaGlsZChlbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICByZXNldCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vSWYgeW91IGdldCBoZXJlIGl0IG1lYW5zIHN0aWxsIHRvbyBiaWcsIGxldCdzIGtlZXAgdHJ1bmNhdGluZwogICAgICAgICAgICBpZiAob3B0LmFuaW1hdGUpIHsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHRydW5jYXRlKHRhcmdldCwgbWF4SGVpZ2h0KTsKICAgICAgICAgICAgICAgIH0sIG9wdC5hbmltYXRlID09PSB0cnVlID8gMTAgOiBvcHQuYW5pbWF0ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1bmNhdGUodGFyZ2V0LCBtYXhIZWlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFwcGx5RWxsaXBzaXMoZWxlbSwgc3RyKSB7CiAgICAgICAgICAgIGVsZW0ubm9kZVZhbHVlID0gc3RyICsgb3B0LnRydW5jYXRpb25DaGFyOwogICAgICAgIH0KICAgICAgICAvLyBDT05TVFJVQ1RPUgogICAgICAgIGlmIChjbGFtcFZhbHVlID09ICdhdXRvJykgewogICAgICAgICAgICBjbGFtcFZhbHVlID0gZ2V0TWF4TGluZXMoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNDU1NWYWx1ZSkgewogICAgICAgICAgICBjbGFtcFZhbHVlID0gZ2V0TWF4TGluZXMocGFyc2VJbnQoY2xhbXBWYWx1ZSkpOwogICAgICAgIH0KICAgICAgICB2YXIgY2xhbXBlZFRleHQ7CiAgICAgICAgaWYgKHN1cHBvcnRzTmF0aXZlQ2xhbXAgJiYgb3B0LnVzZU5hdGl2ZUNsYW1wKSB7CiAgICAgICAgICAgIHN0eS5vdmVyZmxvdyA9ICdoaWRkZW4nOwogICAgICAgICAgICBzdHkudGV4dE92ZXJmbG93ID0gJ2VsbGlwc2lzJzsKICAgICAgICAgICAgc3R5LndlYmtpdEJveE9yaWVudCA9ICd2ZXJ0aWNhbCc7CiAgICAgICAgICAgIHN0eS5kaXNwbGF5ID0gJy13ZWJraXQtYm94JzsKICAgICAgICAgICAgc3R5LndlYmtpdExpbmVDbGFtcCA9IGNsYW1wVmFsdWU7CiAgICAgICAgICAgIGlmIChpc0NTU1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBzdHkuaGVpZ2h0ID0gb3B0LmNsYW1wICsgJ3B4JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGhlaWdodCA9IGdldE1heEhlaWdodChjbGFtcFZhbHVlKTsKICAgICAgICAgICAgaWYgKGhlaWdodCA8PSBlbGVtZW50LmNsaWVudEhlaWdodCkgewogICAgICAgICAgICAgICAgY2xhbXBlZFRleHQgPSB0cnVuY2F0ZShnZXRMYXN0Q2hpbGQoZWxlbWVudCksIGhlaWdodCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ29yaWdpbmFsJzogb3JpZ2luYWxUZXh0LAogICAgICAgICAgICAnY2xhbXBlZCc6IGNsYW1wZWRUZXh0CiAgICAgICAgfTsKICAgIH0KICAgIHdpbmRvdy4kY2xhbXAgPSBjbGFtcDsKfSkoKTsKKGZ1bmN0aW9uICgpIHsKICAgIC8vIEJlZ2luIHNjcmlwdDogWW91dHViZSBQZWVrCiAgICAndXNlIHN0cmljdCc7CiAgICBjb25zdCBERUZBVUxUX09QVElPTlMgPSB7CiAgICAgICAgcmVnaW9uczogW10sCiAgICAgICAgbm9Ub29sdGlwOiB0cnVlLAogICAgICAgIGFsbG93T25Zb3V0dWJlOiBmYWxzZQogICAgfTsKICAgIGNvbnN0IE9QVElPTlMgPSBKU09OLnBhcnNlKEdNX2dldFZhbHVlKCd1c2VyU2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeShERUZBVUxUX09QVElPTlMpKSk7CiAgICBjb25zdCBhcGlLZXkgPSAnQUl6YVN5Qm5pYlZsVkRHQzd0X3dkM1pFclZLNlhGM2hwM0c3eHRBJzsKICAgIGNvbnN0IHJlID0gewogICAgICAgIGlzVmlkZW9MaW5rOiAvKD86eW91dHViZVwuY29tXC8oPzp3YXRjaFw/Lip2PXxhdHRyaWJ1dGlvbl9saW5rKXx5b3V0dVwuYmVcL3x5MnVcLmJlXC8pL2ksCiAgICAgICAgZ2V0VmlkZW9JZDogLyg/OnlvdXR1YmVcLmNvbVwvd2F0Y2hcPy4qdj18eW91dHVcLmJlXC98eTJ1XC5iZVwvKShbLV9BLVphLXowLTldezExfSkvaSwKICAgICAgICBnZXRUaW1lTGVuZ3RoOiAvXGQrW0EtWl0vZywKICAgIH07CiAgICBjb25zdCBjYWNoZSA9IHt9OwogICAgY29uc3QgZGVsYXlfb3BlbiA9IDEwMDsKICAgIGNvbnN0IGRlbGF5X2Nsb3NlID0gMDsKICAgIGxldCB0bW9fb3BlbjsKICAgIGxldCB0bW9fY2xvc2U7CiAgICBjb25zdCBfc3R5bGVzaGVldCA9IFN0cmluZy5yYXcgYDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgaWQ9Inl0LXBlZWsiPi55dC1wZWVrLC55dC1wZWVrLWxvYWRpbmd7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMjM0NTY3ODl9Lnl0LXBlZWssLnl0LXBlZWstY2Zne2JveC1zaGFkb3c6dmFyKC0tc2hhZG93LWJpZyk7LS1zaGFkb3ctYmlnOjAgNHB4IDhweCBoc2xhKDAsMCUsMCUsLjIpLDAgOHB4IDE2cHggaHNsYSgwLDAlLDAlLC4yKSwwIDRweCA0cHggaHNsYSgwLDAlLDEwMCUsLjEpfS55dC1wZWVrLWxvYWRpbmd7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjZweCAwO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6IzhhYTRiMTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YW5pbWF0aW9uLWR1cmF0aW9uOjFzO2FuaW1hdGlvbi1uYW1lOnNwaW47YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNjcsLjg4LC41MywuMzcpfS55dC1wZWVrIC55dC1wZWVrLWxvYWRpbmd7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7bWFyZ2luOmF1dG87YmFja2dyb3VuZDowIDA7Ym9yZGVyLWNvbG9yOmhzbGEoMjAwLDIwJSw2MiUsLjUpO3dpZHRoOjMycHg7aGVpZ2h0OjMycHh9Lnl0LXBlZWsgLnl0LXBlZWstY2hhbiwueXQtcGVlay1ibG9ja2Vke2JvcmRlci10b3A6MXB4IHNvbGlkIGhzbGEoMCwwJSwxMDAlLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3h9QGtleWZyYW1lcyBzcGlue2Zyb217dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS55dC1wZWVre2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kOiMyMzI2Mjg7bWFyZ2luOjA7cGFkZGluZzowO2NvbG9yOiM5OTkhaW1wb3J0YW50O2ZvbnQ6NDAwIDEycHgvMS4yICJzZWdvZSB1aSIsYXJpYWwsc2Fucy1zZXJpZiFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czozcHghaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbn0ueXQtcGVlay1jb2xze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7cG9zaXRpb246cmVsYXRpdmV9Lnl0LXBlZWstY29scz5kaXZ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG99Lnl0LXBlZWstaW5mb3tib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOjIzMHB4O2Rpc3BsYXk6ZmxleDtmbGV4OjEgMCBhdXRvO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ueXQtcGVlay1yb3d7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS55dC1wZWVrLWluZm8+ZGl2e3BhZGRpbmc6NnB4IDEycHh9Lnl0LXBlZWsgLnl0LXBlZWstdGl0bGV7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2ZmZn0ueXQtcGVlayAueXQtcGVlay1kZXNje3BhZGRpbmctdG9wOjA7Zm9udC1zaXplOjE0cHh9Lnl0LXBlZWsgLnl0LXBlZWstZGF0ZXtkaXNwbGF5OmlubGluZS1ibG9jaztvcmRlcjotMX0ueXQtcGVlayAueXQtcGVlay12aWV3c3tkaXNwbGF5OmlubGluZS1ibG9ja30ueXQtcGVlayAueXQtcGVlay1jaGFue2NvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7d2lkdGg6MTAwJX0ueXQtcGVlay1wcmV2aWV3e3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvcmRlcjotMTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ueXQtcGVlay10aHVtYntwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjE2OXB4O3dpZHRoOjMwMHB4fS55dC1wZWVrLXRodW1iIGltZ3tvYmplY3QtZml0Om5vbmU7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS55dC1wZWVrLWxlbmd0aHtmb250OjcwMCAxMnB4LzEgYXJpYWwsc2Fucy1zZXJpZjtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206OHB4O2xlZnQ6NHB4O3BhZGRpbmc6MnB4IDVweDtjb2xvcjojZmZmO2JhY2tncm91bmQ6aHNsYSgwLDAlLDAlLC45KTtib3JkZXItcmFkaXVzOjNweH0ueXQtcGVlay1zY29yZXttYXJnaW46MXB4IDA7d2lkdGg6MTAwJTtoZWlnaHQ6M3B4O2JhY2tncm91bmQ6I2NjY30ueXQtcGVlay1zY29yZSBkaXZ7aGVpZ2h0OmluaGVyaXQ7YmFja2dyb3VuZDojMDA5OGU1fS55dC1wZWVrLWJsb2NrZWR7cGFkZGluZzo1cHggMTJweDtjb2xvcjojYjJiMmIyO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjttYXgtd2lkdGg6NTMwcHh9Lnl0LXBlZWstYmxvY2tlZCBlbXtmb250LXdlaWdodDo3MDA7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgMnB4O2JhY2tncm91bmQ6I2RjMTQzYztib3JkZXItcmFkaXVzOjJweH0ueXQtcGVlay1jZmd7Zm9udDo0MDAgMTJweC8xLjM1IHNhbnMtc2VyaWY7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MTVweDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzowIDE1cHg7d2lkdGg6MzAwcHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiMwMDA7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MCAwIDNweCAzcHg7Ym9yZGVyLXdpZHRoOjAgMXB4IDFweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiM5OTk7bWF4LWhlaWdodDoxMDB2aDtvdmVyZmxvdzphdXRvO3otaW5kZXg6MTIzNDU2Nzl9Lnl0LXBlZWstY2ZnLWZvb3RlciwueXQtcGVlay1jZmctaXRlbXtwYWRkaW5nOjEwcHggMH0ueXQtcGVlay1jZmctaGVhZGluZ3twYWRkaW5nOjEwcHggMDtmb250OjQwMCAxNHB4LzEgc2Fucy1zZXJpZn0ueXQtcGVlay1jZmctbGFiZWx7Zm9udC13ZWlnaHQ6NzAwfS55dC1wZWVrLWNmZy1pdGVtIGxhYmVse2Rpc3BsYXk6YmxvY2t9Lnl0LXBlZWstY2ZnLWRlc2N7Y29sb3I6IzhjOGM4YzttYXJnaW46LjI1ZW0gMCAwfS55dC1wZWVrLWNmZy1pdGVtIHRleHRhcmVhe2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MTAwcHg7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjJlbX0ueXQtcGVlay1jZmcgYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQ6NDAwIDEycHgvMSBzYW5zLXNlcmlmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbjowIC41ZW0gMCAwO3BhZGRpbmc6MTBweCAxOHB4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnM7Y3Vyc29yOmRlZmF1bHR9Lnl0LXBlZWstY2ZnLXNhdmV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNkODI2MjZ9Lnl0LXBlZWstY2ZnLWNhbmNlbHtjb2xvcjojMDAwO2JhY2tncm91bmQ6MCAwfS55dC1wZWVrLWNmZy1zYXZlOmhvdmVye2JhY2tncm91bmQ6I2I3MTQxNH0ueXQtcGVlay1jZmctY2FuY2VsOmhvdmVye2JhY2tncm91bmQ6I2U1ZTVlNX0ueXQtcGVlay1taXNzaW5nIC55dC1wZWVrLWNoYW4sLnl0LXBlZWstbWlzc2luZyAueXQtcGVlay1yb3csLnl0LXBlZWstbWlzc2luZyAueXQtcGVlay10aHVtYntkaXNwbGF5Om5vbmV9Lnl0LXBlZWssLnl0LXBlZWstbG9hZGluZywueXQtcGVlay10aHVtYiBpbWd7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMjVzfS55dC1wZWVrLXJlYWR5e29wYWNpdHk6MSFpbXBvcnRhbnR9PC9zdHlsZT5gOwogICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIF9zdHlsZXNoZWV0KTsKICAgIGZ1bmN0aW9uIGNvbnRhaW5zRW5jb2RlZENvbXBvbmVudHMoeCkgewogICAgICAgIHJldHVybiAoZGVjb2RlVVJJKHgpICE9PSBkZWNvZGVVUklDb21wb25lbnQoeCkpOwogICAgfQogICAgLyoqCiAgICAgKiBDaGVjayBpZiB3ZSdyZSBvbiBhIHBhcnRpY3VsYXIgZG9tYWluIG5hbWUuCiAgICAgKiBAcGFyYW0gaG9zdCBOYW1lIG9mIHRoZSB3ZWJzaXRlLgogICAgICovCiAgICBmdW5jdGlvbiBzaXRlKGhvc3QpIHsKICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhvc3QuaW5jbHVkZXMoaG9zdCk7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZXYpIHsKICAgICAgICBsZXQgdGFyZ2V0ID0gZXYudGFyZ2V0OwogICAgICAgIHRhcmdldCA9IHRhcmdldC5jbG9zZXN0KCdhJyk7CiAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBsZXQgaHJlZiA9IHRhcmdldC5ocmVmOwogICAgICAgIGlmICghaHJlZikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIC8vIFNvbWUgc2l0ZXMgcHV0IHRoZSBVUkwgaW4gYSBkYXRhc2V0LiAobm90ZTogdHdpdHRlciBibG9ja3MgZ29vZyBBUEkpCiAgICAgICAgaWYgKHNpdGUoJ3R3aXR0ZXIuY29tJykpIHsKICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IHRhcmdldC5kYXRhc2V0LmV4cGFuZGVkVXJsOwogICAgICAgICAgICBpZiAoZGF0YVVybCkKICAgICAgICAgICAgICAgIGhyZWYgPSBkYXRhVXJsOwogICAgICAgIH0KICAgICAgICAvLyBDaGVjayBpZiB0aGUgVVJMIGdvZXMgdG8gYSB5b3V0dWJlIHZpZGVvLgogICAgICAgIGlmICghcmUuaXNWaWRlb0xpbmsudGVzdChocmVmKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIC8vIE5lZWQgdG8ga25vdyBpZiBpdCdzIGFuIGF0dHJpYnV0aW9uIGxpbmsgc28gd2UgY2FuIHJlYWQgdGhlIGVuY29kZWQgcGFyYW1zLgogICAgICAgIGlmICgvYXR0cmlidXRpb25fbGlua1w/L2kudGVzdChocmVmKSkgewogICAgICAgICAgICBjb25zdCBVUklDb21wb25lbnQgPSBocmVmLnN1YnN0cihocmVmLmluZGV4T2YoJyUyRndhdGNoJTNGdiUzRCcpKTsKICAgICAgICAgICAgaWYgKGNvbnRhaW5zRW5jb2RlZENvbXBvbmVudHMoVVJJQ29tcG9uZW50KSkgewogICAgICAgICAgICAgICAgaHJlZiA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbScgKyBkZWNvZGVVUklDb21wb25lbnQoVVJJQ29tcG9uZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBGaW5hbGx5IGdldCB0aGUgdmlkZW8gSUQ7CiAgICAgICAgY29uc3QgaWQgPSByZS5nZXRWaWRlb0lkLmV4ZWMoaHJlZilbMV07CiAgICAgICAgaWYgKCFpZCkKICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgdmlkZW8gSUQnKTsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRtb19vcGVuKTsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRtb19jbG9zZSk7CiAgICAgICAgY29uc3Qgbm9Ub29sdGlwID0gSlNPTi5wYXJzZShHTV9nZXRWYWx1ZSgndXNlclNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoREVGQVVMVF9PUFRJT05TKSkpLm5vVG9vbHRpcDsKICAgICAgICBpZiAobm9Ub29sdGlwKSB7CiAgICAgICAgICAgIHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7CiAgICAgICAgfQogICAgICAgIHRtb19vcGVuID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAoIWNhY2hlLmhhc093blByb3BlcnR5KGlkKSkgewogICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSAnc25pcHBldCxjb250ZW50RGV0YWlscyxzdGF0aXN0aWNzJzsKICAgICAgICAgICAgICAgIHJlcXVlc3RWaWRlb0RhdGEoZXYsIGlkLCBwYXJ0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBoYW5kbGVTdWNjZXNzKGV2LCBpZCwgY2FjaGVbaWRdKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIGRlbGF5X29wZW4pOwogICAgICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoZXYpIHsKICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoYW5kbGVNb3VzZUxlYXZlKTsKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0bW9fb3Blbik7CiAgICAgICAgICAgIHRtb19vcGVuID0gbnVsbDsKICAgICAgICAgICAgdG1vX2Nsb3NlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgcmVtb3ZlUGVla0JveGVzKCk7CiAgICAgICAgICAgIH0sIGRlbGF5X2Nsb3NlKTsKICAgICAgICB9CiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoYW5kbGVNb3VzZUxlYXZlKTsKICAgIH0KICAgIGZ1bmN0aW9uIGxvYWRJbWFnZShwYXRoKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewogICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGV2ID0+IHJlc29sdmUoaW1nKTsKICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSBldiA9PiByZXNvbHZlKHVuZGVmaW5lZCk7CiAgICAgICAgICAgIGltZy5zcmMgPSBwYXRoIHx8ICcnOwogICAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gZ2V0U2NvcmVQZXJjZW50KGxvdmVycywgaGF0ZXJzKSB7CiAgICAgICAgaWYgKGlzTmFOKGxvdmVycykgfHwgaXNOYU4oaGF0ZXJzKSkKICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgxMDAgKiBsb3ZlcnMgLyAobG92ZXJzICsgaGF0ZXJzKSk7CiAgICB9CiAgICBmdW5jdGlvbiB0b0RpZ2l0YWxUaW1lKHN0cikgewogICAgICAgIGlmICghc3RyKQogICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgIGZ1bmN0aW9uIHBhZChzKSB7CiAgICAgICAgICAgIHJldHVybiBzLmxlbmd0aCA8IDIgPyBgMCR7c31gIDogczsKICAgICAgICB9CiAgICAgICAgY29uc3QgaG91cnMgPSAvKFxkKylILy5leGVjKHN0cik7CiAgICAgICAgY29uc3QgbWlucyA9IC8oXGQrKU0vLmV4ZWMoc3RyKTsKICAgICAgICBjb25zdCBzZWNzID0gLyhcZCspUy8uZXhlYyhzdHIpOwogICAgICAgIGNvbnN0IG91dHB1dCA9IFtdOwogICAgICAgIGlmIChob3VycykKICAgICAgICAgICAgb3V0cHV0LnB1c2gocGFkKGhvdXJzWzFdKSk7CiAgICAgICAgb3V0cHV0LnB1c2gobWlucyA/IHBhZChtaW5zWzFdKSA6ICcwMCcpOwogICAgICAgIG91dHB1dC5wdXNoKHNlY3MgPyBwYWQoc2Vjc1sxXSkgOiAnMDAnKTsKICAgICAgICByZXR1cm4gb3V0cHV0LmpvaW4oJzonKTsKICAgIH0KICAgIGZ1bmN0aW9uIGluc2VydFBlZWtCb3goZXYsIGQpIHsKICAgICAgICBjb25zdCBhID0gZXYudGFyZ2V0OwogICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShHTV9nZXRWYWx1ZSgndXNlclNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoREVGQVVMVF9PUFRJT05TKSkpOwogICAgICAgIC8vIFRva2VuczoKICAgICAgICBjb25zdCB0aXRsZSA9IGQuc25pcHBldC5sb2NhbGl6ZWQudGl0bGU7CiAgICAgICAgY29uc3QgZGVzYyA9IGQuc25pcHBldC5sb2NhbGl6ZWQuZGVzY3JpcHRpb247CiAgICAgICAgY29uc3QgZGF0ZSA9IGRhdGVBc0FnZShkLnNuaXBwZXQucHVibGlzaGVkQXQpOwogICAgICAgIGNvbnN0IGNoYW4gPSBkLnNuaXBwZXQuY2hhbm5lbFRpdGxlOwogICAgICAgIGNvbnN0IHRodW1icyA9IGQuc25pcHBldC50aHVtYm5haWxzOwogICAgICAgIGNvbnN0IGltYWdlUGF0aCA9IHRodW1icy5oYXNPd25Qcm9wZXJ0eSgnbWVkaXVtJykgPyB0aHVtYnMubWVkaXVtLnVybCA6IHVuZGVmaW5lZDsKICAgICAgICBsZXQgYmxvY2tNYXRjaGVkID0gW107CiAgICAgICAgbGV0IGJsb2NrT3RoZXIgPSBbXTsKICAgICAgICBpZiAoc2V0dGluZ3MucmVnaW9ucy5sZW5ndGggJiYgZC5jb250ZW50RGV0YWlscy5oYXNPd25Qcm9wZXJ0eSgncmVnaW9uUmVzdHJpY3Rpb24nKSkgewogICAgICAgICAgICBjb25zdCBibG9ja2VkID0gZC5jb250ZW50RGV0YWlscy5yZWdpb25SZXN0cmljdGlvbi5ibG9ja2VkOwogICAgICAgICAgICBpZiAoYmxvY2tlZCkgewogICAgICAgICAgICAgICAgYmxvY2tNYXRjaGVkID0gYmxvY2tlZC5maWx0ZXIodiA9PiBzZXR0aW5ncy5yZWdpb25zLmluY2x1ZGVzKHYpKS5tYXAodiA9PiBgPGVtPiR7dn08L2VtPmApOwogICAgICAgICAgICAgICAgYmxvY2tPdGhlciA9IGJsb2NrZWQuZmlsdGVyKHYgPT4gIXNldHRpbmdzLnJlZ2lvbnMuaW5jbHVkZXModikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZpZXdDb3VudCA9ICtkLnN0YXRpc3RpY3Mudmlld0NvdW50OwogICAgICAgIGNvbnN0IHZpZXdzID0gdmlld0NvdW50ID8gdmlld0NvdW50LnRvTG9jYWxlU3RyaW5nKCkgOiB1bmRlZmluZWQ7CiAgICAgICAgY29uc3Qgc2NvcmUgPSBnZXRTY29yZVBlcmNlbnQoK2Quc3RhdGlzdGljcy5saWtlQ291bnQsICtkLnN0YXRpc3RpY3MuZGlzbGlrZUNvdW50KTsKICAgICAgICBjb25zdCBsZW5ndGggPSB0b0RpZ2l0YWxUaW1lKGQuY29udGVudERldGFpbHMuZHVyYXRpb24pOwogICAgICAgIGxvYWRJbWFnZShpbWFnZVBhdGgpLnRoZW4oaW1nID0+IHsKICAgICAgICAgICAgZmluaXNoZWRMb2FkaW5nKCk7CiAgICAgICAgICAgIGlmICghaW1nKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdhbHQnLCB0aXRsZSk7CiAgICAgICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcueXQtcGVlay10aHVtYicpLmFwcGVuZENoaWxkKGltZyk7CiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIGltZy5jbGFzc0xpc3QuYWRkKCd5dC1wZWVrLXJlYWR5Jyk7CiAgICAgICAgICAgIH0sIDcwKTsKICAgICAgICB9KTsKICAgICAgICAvLyBDcmVhdGUgSFRNTDoKICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gYAogICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jb2xzIj4KICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1pbmZvIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLXZpZXdzIj4ke3ZpZXdzID8gdmlld3MgKyAnIHZpZXdzJyA6ICcnfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1kYXRlIj4ke2RhdGUgPyBkYXRlIDogJyd9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay10aXRsZSI+JHt0aXRsZSA/IHRpdGxlIDogYE5vdCBmb3VuZGB9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1kZXNjIj4ke2Rlc2MgPyBkZXNjIDogJyd9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jaGFuIj4ke2NoYW4gPyBjaGFuIDogJyd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLXByZXZpZXciPgogICAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstdGh1bWIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstbG9hZGluZyB5dC1wZWVrLXJlYWR5Ij48L2Rpdj4KICAgICAgICAke2xlbmd0aCA/IGA8ZGl2IGNsYXNzPSJ5dC1wZWVrLWxlbmd0aCI+JHtsZW5ndGh9PC9kaXY+YCA6IGBgfQogICAgICAgICR7c2NvcmUgPyBgPGRpdiBjbGFzcz0ieXQtcGVlay1zY29yZSI+PGRpdiBzdHlsZT0id2lkdGg6ICR7c2NvcmV9JTsiPjwvZGl2PjwvZGl2PmAgOiBgYH0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgICR7YmxvY2tNYXRjaGVkLmxlbmd0aCA/IGA8ZGl2IGNsYXNzPSJ5dC1wZWVrLWJsb2NrZWQiPjxzcGFuPkJsb2NrZWQgaW46PC9zcGFuPiAke2Jsb2NrTWF0Y2hlZC5qb2luKCcgJyl9ICR7YmxvY2tPdGhlci5qb2luKCcgJyl9PC9kaXY+YCA6IGBgfQogICAgYDsKICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgneXQtcGVlaycpOwogICAgICAgIGlmICghdGl0bGUpIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3l0LXBlZWstbWlzc2luZycpOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudCgnYmVmb3JlZW5kJywgY29udGFpbmVyKTsKICAgICAgICAvLyBDbGFtcCBsb25nIGxpbmVzIG9mIHRleHQ6CiAgICAgICAgY29uc3QgJHRpdGxlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy55dC1wZWVrLXRpdGxlJyk7CiAgICAgICAgY29uc3QgJGRlc2NyaXB0aW9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy55dC1wZWVrLWRlc2MnKTsKICAgICAgICAkY2xhbXAoJHRpdGxlLCB7IGNsYW1wOiA0LCB1c2VOYXRpdmVDbGFtcDogZmFsc2UgfSk7CiAgICAgICAgJGNsYW1wKCRkZXNjcmlwdGlvbiwgeyBjbGFtcDogNCwgdXNlTmF0aXZlQ2xhbXA6IGZhbHNlIH0pOwogICAgICAgIC8vIEZpbmQgb3B0aW1hbCBwb3NpdGlvbiB3aXRoaW4gdmlld3BvcnQ6CiAgICAgICAgc2V0UG9zaXRpb24oYSwgY29udGFpbmVyKTsKICAgICAgICAvLyBBbGxvdyBmb3Igc21vb3RoIENTUyB0cmFuc2l0aW9uOgogICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3l0LXBlZWstcmVhZHknKTsKICAgICAgICB9LCAwKTsKICAgICAgICAvLyBFdmVudCBsaXN0ZW5lciB0byByZW1vdmUgY29udGFpbmVyIGJlY2F1c2UgaXQgc2hvdWxkbid0IGJlIGludGVyYWN0ZWQgd2l0aDoKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGV2ID0+IHsKICAgICAgICAgICAgcmVtb3ZlUGVla0JveGVzKCk7CiAgICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiByZW1vdmVQZWVrQm94ZXMoKSB7CiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5dC1wZWVrJyk7CiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgneXQtcGVlay1yZWFkeScpOwogICAgICAgICAgICAvLyBBbGxvdyBmb3Igc21vb3RoIENTUyB0cmFuc2l0aW9uOgogICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpOwogICAgICAgICAgICB9LCAyNTApOwogICAgICAgIH0KICAgIH0KICAgIC8vIFV0aWxpdHkgdG8gY2hlY2sgaWYgYSBwZWVrIGJveCBpcyBjdXJyZW50bHkgb3BlbiBpbiB0aGUgZG9jdW1lbnQuCiAgICBmdW5jdGlvbiBhY3RpdmVQZWVrQm94KCkgewogICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXQtcGVlaycpOwogICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybiBlbGVtZW50c1swXTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YXJ0ZWRMb2FkaW5nKGV2KSB7CiAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ3l0LXBlZWstbG9hZGluZycsICd5dC1wZWVrLXJlYWR5Jyk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2JlZm9yZWVuZCcsIGluZGljYXRvcik7CiAgICAgICAgc2V0UG9zaXRpb24oZXYudGFyZ2V0LCBpbmRpY2F0b3IpOwogICAgfQogICAgZnVuY3Rpb24gZmluaXNoZWRMb2FkaW5nKCkgewogICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXQtcGVlay1sb2FkaW5nJyk7CiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgneXQtcGVlay1yZWFkeScpOwogICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpOwogICAgICAgICAgICB9LCAyNTApOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGhhbmRsZVN1Y2Nlc3MoZXYsIGlkLCBkKSB7CiAgICAgICAgcmVtb3ZlUGVla0JveGVzKCk7CiAgICAgICAgaWYgKCFkKSB7CiAgICAgICAgICAgIGQgPSB7fTsKICAgICAgICAgICAgZC5pZCA9IGlkOwogICAgICAgICAgICBkLmNvbnRlbnREZXRhaWxzID0gewogICAgICAgICAgICAgICAgZHVyYXRpb246IHVuZGVmaW5lZAogICAgICAgICAgICB9OwogICAgICAgICAgICBkLnNuaXBwZXQgPSB7CiAgICAgICAgICAgICAgICBjaGFubmVsVGl0bGU6ICcnLAogICAgICAgICAgICAgICAgdGh1bWJuYWlsczogeyBtZWRpdW06IHsgdXJsOiB1bmRlZmluZWQgfSB9LAogICAgICAgICAgICAgICAgbG9jYWxpemVkOiB7CiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHVuZGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYFRoZSB2aWRlbyBtaWdodCBiZSByZW1vdmVkLmAKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwdWJsaXNoZWRBdDogdW5kZWZpbmVkCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGQuc3RhdGlzdGljcyA9IHt9OwogICAgICAgIH0KICAgICAgICBpbnNlcnRQZWVrQm94KGV2LCBkKTsKICAgICAgICBpZiAoIWNhY2hlLmhhc093blByb3BlcnR5KGlkKSkKICAgICAgICAgICAgY2FjaGVbaWRdID0gZDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcXVlc3RWaWRlb0RhdGEoZXYsIGlkLCBwYXJ0cykgewogICAgICAgIHN0YXJ0ZWRMb2FkaW5nKGV2KTsKICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICB4aHIub3BlbignR0VUJywgYGh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMvdmlkZW9zP2lkPSR7aWR9JnBhcnQ9JHtwYXJ0c30ma2V5PSR7YXBpS2V5fWApOwogICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkgewogICAgICAgICAgICAgICAgZmluaXNoZWRMb2FkaW5nKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRtb19vcGVuKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICgheGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOwogICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgewogICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3MoZXYsIGlkLCByZXNwb25zZS5pdGVtc1swXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVFcnJvcigpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBmaW5pc2hlZExvYWRpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLnNlbmQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGRhdGVBc0FnZShpbnB1dFZhbHVlKSB7CiAgICAgICAgaWYgKCFpbnB1dFZhbHVlKQogICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoaW5wdXRWYWx1ZSk7CiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkudmFsdWVPZigpIC0gZGF0ZS52YWx1ZU9mKCkpOwogICAgICAgIGxldCB5ID0gcGFyc2VJbnQoZGlmZmVyZW5jZS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDQpLCAxMCkgLSAxOTcwOwogICAgICAgIGxldCBtID0gK2RpZmZlcmVuY2UuZ2V0TW9udGgoKTsKICAgICAgICBsZXQgZCA9IGRpZmZlcmVuY2UuZ2V0RGF0ZSgpIC0gMTsKICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgIGlmICh5ID4gMCkKICAgICAgICAgICAgcmVzdWx0ID0gKHkgPT09IDEpID8geSArICcgeWVhciBhZ28nIDogeSArICcgeWVhcnMgYWdvJzsKICAgICAgICBlbHNlIGlmIChtID4gMCkKICAgICAgICAgICAgcmVzdWx0ID0gKG0gPT09IDEpID8gbSArICcgbW9udGggYWdvJyA6IG0gKyAnIG1vbnRocyBhZ28nOwogICAgICAgIGVsc2UgaWYgKGQgPiAwKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IChkID09PSAxKSA/IGQgKyAnIGRheSBhZ28nIDogZCArICcgZGF5cyBhZ28nOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gJ1RvZGF5JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIC8qKgogICAgICoKICAgICAqIEBwYXJhbSBzb3VyY2UgRWxlbWVudCB0byB1c2UgZm9yIHRoZSByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIHBvc2l0aW9uLgogICAgICovCiAgICBmdW5jdGlvbiBzZXRQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpIHsKICAgICAgICBjb25zdCBzcmNSZWN0ID0gc291cmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IGNsZWFyYW5jZUhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0IDwgNjAgPyA2MCA6IGVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgICAgIC8vIFZpZXdwb3J0IGRpbWVuc2lvbnM6CiAgICAgICAgY29uc3QgdncgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7CiAgICAgICAgY29uc3QgdmggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgICAgIC8vIENhbGN1bGF0ZToKICAgICAgICBjb25zdCBsZWZ0T2ZUYXJnZXQgPSB2dyA8IChzcmNSZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoKTsKICAgICAgICAvLyBBZGQgZXh0cmEgc3BhY2UgZm9yIGJyb3dzZXIgc3RhdHVzIHRvb2x0aXAuCiAgICAgICAgY29uc3QgdG9wT2ZUYXJnZXQgPSB2aCA8IChzcmNSZWN0LnRvcCArIHNyY1JlY3QuaGVpZ2h0ICsgY2xlYXJhbmNlSGVpZ2h0ICsgMjQpOwogICAgICAgIC8vIEFwcGx5IHBvc2l0aW9uOgogICAgICAgIGlmIChsZWZ0T2ZUYXJnZXQpIHsKICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9IHZ3IC0gc3JjUmVjdC5yaWdodCArICdweCc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBzcmNSZWN0LmxlZnQgKyAncHgnOwogICAgICAgIH0KICAgICAgICBpZiAodG9wT2ZUYXJnZXQgJiYgKHZoIC8gMiA8IHNyY1JlY3QudG9wKSkgewogICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJvdHRvbSA9ICh2aCAtIHNyY1JlY3QudG9wKSAtIHdpbmRvdy5zY3JvbGxZICsgJ3B4JzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gc3JjUmVjdC5ib3R0b20gKyB3aW5kb3cuc2Nyb2xsWSArICdweCc7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaW5zZXJ0U2V0dGluZ3NEaWFsb2coKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy55dC1wZWVrLWNmZycpKQogICAgICAgICAgICByZXR1cm4gY2xvc2VTZXR0aW5nc0RpYWxvZygpOwogICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKEdNX2dldFZhbHVlKCd1c2VyU2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeShERUZBVUxUX09QVElPTlMpKSk7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlU2V0dGluZ3NDbGljayk7CiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3l0LXBlZWstY2ZnJyk7CiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGAKICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jZmctaGVhZGluZyI+WW91dHViZSBQZWVrPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstY2ZnLWl0ZW0iPgogICAgICAgIDxsYWJlbCBjbGFzcz0ieXQtcGVlay1jZmctbGFiZWwiIGZvcj0ieXQtcGVlay1jZmctcmVnaW9ucyI+V2FybiBtZSBpZiB0aGUgdmlkZW8gaXMgYmxvY2tlZCBpbjo8L2xhYmVsPgogICAgICAgIDx0ZXh0YXJlYSBpZD0ieXQtcGVlay1jZmctcmVnaW9ucyI+JHtkYXRhLnJlZ2lvbnMuam9pbignICcpfTwvdGV4dGFyZWE+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jZmctZGVzYyI+U3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgcmVnaW9uIGNvZGVzLiBFLmcuIFVTIEdCIENBLiBMZWF2ZSBibGFuayB0byBpZ25vcmUuPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLWNmZy1pdGVtIj4KICAgICAgICA8bGFiZWw+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ5dC1wZWVrLWNmZy1ub1Rvb2x0aXAiJHtkYXRhLm5vVG9vbHRpcCA/IGAgY2hlY2tlZGAgOiBgYH0+CiAgICAgICAgICBSZW1vdmUgdG9vbHRpcHMgZnJvbSB2aWRlbyBsaW5rcwogICAgICAgIDwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jZmctZGVzYyI+QmVjYXVzZSB0b29sdGlwcyBjYW4gZ2V0IGluIHRoZSB3YXkgb2YgdGhlIHZpZGVvIHByZXZpZXcuPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLWNmZy1pdGVtIj4KICAgICAgICA8bGFiZWw+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ5dC1wZWVrLWNmZy15b3V0dWJlIiR7ZGF0YS5hbGxvd09uWW91dHViZSA/IGAgY2hlY2tlZGAgOiBgYH0+CiAgICAgICAgICBFbmFibGUgb24geW91dHViZS5jb20KICAgICAgICA8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstY2ZnLWRlc2MiPlBlZWsgaXNuJ3QgaW50ZW5kZWQgZm9yIHVzZSBvbiB5b3V0dWJlLmNvbSwgYnV0IHlvdSBjYW4gc3RpbGwgdXNlIGl0IHRoZXJlLiAodGhpcyBjaGFuZ2UgdGFrZXMgZWZmZWN0IGFmdGVyIHJlbG9hZGluZyk8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstY2ZnLWZvb3RlciI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ieXQtcGVlay1jZmctc2F2ZSIgaWQ9Inl0LXBlZWstY2ZnLXNhdmUiPlNBVkU8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJ5dC1wZWVrLWNmZy1jYW5jZWwiIGlkPSJ5dC1wZWVrLWNmZy1jYW5jZWwiPkNBTkNFTDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgfQogICAgZnVuY3Rpb24gaGFuZGxlU2F2ZVNldHRpbmdzKCkgewogICAgICAgIGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy55dC1wZWVrLWNmZycpOwogICAgICAgIGlmICghZGlhbG9nKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgLy8gUmV0cmlldmUgdmFsdWVzOgogICAgICAgIGNvbnN0IHJlZ2lvbnNJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5dC1wZWVrLWNmZy1yZWdpb25zJyk7CiAgICAgICAgY29uc3Qgbm9Ub29sdGlwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneXQtcGVlay1jZmctbm9Ub29sdGlwJyk7CiAgICAgICAgY29uc3QgYWxsb3dPbllvdXR1YmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneXQtcGVlay1jZmcteW91dHViZScpOwogICAgICAgIC8vIEZvcm1hdCB2YWx1ZXM6CiAgICAgICAgbGV0IHJlZ2lvbnMgPSByZWdpb25zSW5wdXQudmFsdWUudHJpbSgpLnJlcGxhY2UoL1xzXHMrL2csICcgJykudG9VcHBlckNhc2UoKTsKICAgICAgICAvLyBQcmVwYXJlIGRhdGEgb2JqZWN0IGZvciBzdG9yYWdlOgogICAgICAgIGNvbnN0IGRiX2VudHJ5ID0gewogICAgICAgICAgICByZWdpb25zOiByZWdpb25zLnNwbGl0KC9ccy8pLAogICAgICAgICAgICBub1Rvb2x0aXA6IG5vVG9vbHRpcElucHV0LmNoZWNrZWQsCiAgICAgICAgICAgIGFsbG93T25Zb3V0dWJlOiBhbGxvd09uWW91dHViZS5jaGVja2VkCiAgICAgICAgfTsKICAgICAgICBHTV9zZXRWYWx1ZSgndXNlclNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoZGJfZW50cnkpKTsKICAgICAgICBjbG9zZVNldHRpbmdzRGlhbG9nKCk7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVTZXR0aW5nc0NsaWNrKGV2KSB7CiAgICAgICAgaWYgKGV2LnRhcmdldC5pZCA9PT0gJ3l0LXBlZWstY2ZnLWNhbmNlbCcpIHsKICAgICAgICAgICAgY2xvc2VTZXR0aW5nc0RpYWxvZygpOwogICAgICAgIH0KICAgICAgICBpZiAoZXYudGFyZ2V0LmlkID09PSAneXQtcGVlay1jZmctc2F2ZScpIHsKICAgICAgICAgICAgaGFuZGxlU2F2ZVNldHRpbmdzKCk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gY2xvc2VTZXR0aW5nc0RpYWxvZygpIHsKICAgICAgICBjb25zdCBkaWFsb2cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcueXQtcGVlay1jZmcnKTsKICAgICAgICBpZiAoZGlhbG9nKQogICAgICAgICAgICBkaWFsb2cucmVtb3ZlKCk7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVNZW51Q29tbWFuZCgpIHsKICAgICAgICBpbnNlcnRTZXR0aW5nc0RpYWxvZygpOwogICAgfQogICAgR01fcmVnaXN0ZXJNZW51Q29tbWFuZCgnWW91dHViZSBQZWVrIFNldHRpbmdzJywgaGFuZGxlTWVudUNvbW1hbmQpOwogICAgaWYgKHNpdGUoJ3lvdXR1YmUuY29tJykgJiYgIU9QVElPTlMuYWxsb3dPbllvdXR1YmUpCiAgICAgICAgcmV0dXJuOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgaGFuZGxlTW91c2VPdmVyKTsKfSkoKTsK"},{"name":"Affiliate killer","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"data":{"hideOriginLink":"sone"},"ts":1573407921893},"enabled":false,"position":27,"file_url":"https://userscripts-mirror.org/scripts/source/411363.user.js","uuid":"3b1d9fd3-b030-4d0d-9916-34e2cf7608ee","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQGlkICAgICAgICAgICAgIEFmZmlsaWF0ZV9raWxsZXIKLy8gQG5hbWUgICAgICAgICAgIEFmZmlsaWF0ZSBraWxsZXIKLy8gQHZlcnNpb24gICAgICAgIDMuOAovLyBAbmFtZXNwYWNlICAgICAgaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQ1NgovLyBAaG9tZXBhZ2VVUkwgICAgaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQ1NgovLyBAbGljZW5zZSAgICAgICAgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLzIuMS9qcC8KLy8gQGF1dGhvciAgICAgICAgIG5vaQovLyBAZGVzY3JpcHRpb24gICAgTm8gbW9yZSBBZmZpbGlhdGUgTGluayEgUGx6IE9yaWdpbmFsIFVSTCEKLy8gQGluY2x1ZGUgICAgICAgIGh0dHAqCi8vIEBncmFudCAgICAgICAgICBHTV9sb2cKLy8gQGdyYW50ICAgICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICAgICBHTV9nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgR01fcmVnaXN0ZXJNZW51Q29tbWFuZAovLyBAZ3JhbnQgICAgICAgICAgdW5zYWZlV2luZG93Ci8vID09L1VzZXJTY3JpcHQ9PQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gVGhlIG9yaWdpbmFsIHNjcmlwdCBpcyBiZWxvdzogICAgICAgICAgICAgICAgICAgLy8KLy8g44Ki44OV44Kj44Oq44Ko44Kk44OI5q6644GXIGZvciBncmVhc2Vtb25rZXkgICAgICAgICAgICAgLy8KLy8gaHR0cDovL2QuaGF0ZW5hLm5lLmpwL2RlcmF3LzIwMDYwOTAyLzExNTcxNDM4MDYgLy8KLy8gYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gQSBLaWxsZXIgTW9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gaHR0cDovL3d3dzdiLmJpZ2xvYmUubmUuanAvfnlhbWovICAgICAgICAgICAgICAgLy8KLy8gYW5kIHJlcXVpcmUgZWNsLmpzIGF1dG9yOmRyayAgICAgICAgICAgICAgICAgICAgLy8KLy8gaHR0cDovL3d3dy5kcms3LmpwLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gaHR0cDovL3d3dy5kcms3LmpwL3B1Yi9qcy9lY2xfdGVzdC9lY2xfbmV3LmpzICAgLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK5YmN5pu444GNCgroh6rliIbnlKjjga7jgrnjgq/jg6rjg5fjg4jjgafjgZnjgYzjgIHnn6XkurrjgYvjgonmrLLjgZfjgYTjgajjgYTjgYbopoHmnJvjgYzjgYLjgaPjgZ/jga7jgaflhazplovjgIIK5YuJ5by344GM44Gm44KJ6L+95Yqg44GX44Gm44Gj44Gf44Gu44Gn5q2j55u0576O44GX44GP44Gq44GE44Gn44GZ44CCCuOBk+OBruOCueOCr+ODquODl+ODiOOBruWIqeeUqOOBr+WQhOiHquOBruiHquW3seiyrOS7u+OBp+OBiumhmOOBhOOBl+OBvuOBmeOAggrlvZPjgrnjgq/jg6rjg5fjg4jjgpLliKnnlKjjgZfjgZ/jgZPjgajjgavjgojjgorooqvjgaPjgZ/jgYLjgonjgobjgovmkI3lrrPjgavlr77jgZfjgablhY3osqzjgajjgZXjgZvjgabjgYTjgZ/jgaDjgY3jgb7jgZnjgIIKCkkgbWFkZSB0aGlzIHNjcmlwdCBmb3IgbXlzZWxmLgphbmQgdXBsb2FkZWQgaXQsIHNpbmNlIG15IGFjcXVhaW50YW5jZSB3YW50ZWQgaXQuCkFkZCB0byBPcmlnaW5hbCBTY3JpcHQgdG9vIG11Y2ggLHRoZSBzb3VyY2UgY29kZSBpcyBkaXJ0eS4KClBsZWFzZSB1c2UgdGhpcyBzY3JpcHQgb24gZWFjaCBvbmUgb2YgcmVzcG9uc2liaWxpdHkuIAoKSU4gTk8gRVZFTlQgU0hBTEwgRUlUSEVSIFBBUlRZIEJFIExJQUJMRSBUTyBUSEUgT1RIRVIgUEFSVFkuCgoK44Ki44OV44Kj44Gu5L+u5q2j5Y+W44KK44GT44G844GX44Gu5aCx5ZGK44KC5Y+X44GR5LuY44GR44Gm44GE44G+44GZ44CCCuKGkuS9k+iqv+OBjOiJr+OBkeOCjOOBsOebtOOBl+OBvuOBmeOAggrjgb7jgaDlrp/pqJPmrrXpmo7jga7jgZ/jgoHjg5bjg6njgqbjgrbjgZTjgajjg5Xjg6rjg7zjgrrjgZnjgovloLTlkIjjgoLjgYLjgovjgYvjgoLjgZfjgozjgarjgYTjga7jgafloLHlkYrjgY/jgaDjgZXjgYTjgIIK4oaS5L2T6Kq/44GM772S772ZCgrigLvjgZPjga7jgrnjgq/jg6rjg5fjg4jjga/jgIFBIEtpbGxlciBNb2TkvZzogIXmp5jjgajpgKPntaHkuI3lj6/jga7jgZ/jgoHnhKHmlq3jgaflvJXnlKjjgZfjgabjgYTjgb7jgZnjgIIK5LiH44GM5LiA5L2c6ICF5qeY44GL44KJ5oqX6K2w44GM44GC44Gj44Gf5aC05ZCI44CB5Y2z5Yi75YWs6ZaL5YGc5q2i44GX44G+44GZ44CCCgrjgZPjga7jgr3jg7zjgrnjga/ln7rmnKznmoTjgavmlLnlpInjgIHlho3phY3luIPoh6rnlLHjgafjgZnjgIIK44CMQSBLaWxsZXIgTW9k44CN44Gu5byV55So6YOo5YiG44Gv5ZCE6Ieq5Yik5pat44GX44Gm44GP44Gg44GV44GE44CCCuOBvuOBn+OAgemFjeW4g+OBmeOCi+WgtOWQiOOBr+W8leeUqOWFg+OBqOOBl+OBpuW9k+aWueOBruWQjeWJjeOCkuWFpeOCjOOBpuOBj+OCjOOCi+OBoOOBkeOBp09L44Gn44GZ44CCCuOBqOOBr+OBhOOBiOaCquizquOBoOOBo+OBn+OCiuipkOasuuOBquOBqeOBrueUqOmAlOOBp+OBruaUueWkieOBr+W9k+eEtk5H44Gn44GZ44CCCgrms6jmhI/ngrnjga/jg5XjgqHjgqTjg6vkv53lrZjjga7pmpvjgIHmloflrZfjgqjjg7PjgrPjg7zjg4njga9VVEYtOOOBp+S/neWtmOOBl+OBpuOBj+OBoOOBleOBhOOAgijmloflrZfljJbjgZHlm57pgb8pCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCuWJjeaPkOadoeS7tgoK4peL5b+F6aCICuODu+OCr+ODg+OCreODvChjb29raWUp44Gu5YmK6Zmk44CB44GK44KI44Gz5a6a5pyf55qE44Gq5YmK6ZmkCgrjg7vjg53jgqTjg7Pjg4jjgrXjgqTjg4jjgarjganlvZPjgrnjgq/jg6rjg5fjg4jjgpLli5XkvZzjgZXjgZvjgZ/jgY/jgarjgYTjgrXjgqTjg4jjgpLoqK3lrprjgZnjgosK5L6L77yJ44Ki44OJ44Kq44Oz44GuU2NyaXB0aXNo44GnVOODneOCpOODs+ODiOOCteOCpOODiOOBrumZpOWkluOCkuioreWumuOBmeOCi+WgtOWQiAog44K544Kv44Oq44OX44OI566h55CG55S76Z2i44GL44KJQWZmaWxpYXRlX0tpbGxlcuOBruioreWumuOCkuOCr+ODquODg+OCr+OBlwogZXhjbHVkZeOBq+mZpOWkluOBl+OBn+OBhOOCteOCpOODiOOBrlVSTOOCkuaMh+WumuOBmeOCiyjmraPopo/ooajnj77jgYzkvb/jgYjjgarjgYTvvJ8pCmh0dHA6Ly90bWFsbC50c2l0ZS5qcC8qCmh0dHBzOi8vdG1hbGwudHNpdGUuanAvKgpodHRwOi8vdHNpdGUuanAvKgpodHRwczovL3RzaXRlLmpwLyoK44Gq44GpKOacgOW+jOOBruOCouOCueOCv+ODquOCueOCrygqKeOCkuW/mOOCjOOBmuOBqykKCgril4vku6XkuIvjga/lv4XpoIjjgafjga/jgarjgYTjgZHjganjgoTjgaPjgZ/mlrnjgYzjgYTjgYQKCgox44CB5Z+65pys55qE44GrYWRibG9ja+ezu+OCouODieOCquODs+OBqOS9teeUqOaOqOWlqCjlrprnlaopCuWkp+S9k+OBruOCouODleOCo+ODquOCqOOCpOODiOOBr+OBk+OCjOOBp+aKueauuuOBleOCjOOBvuOBmeOAggrml6XmnKzoqp7jga7jg5XjgqPjg6vjgr/jg7zjgpLpganlvZPjgavos7zoqq3jgZfjgb7jgZfjgofjgYbjgIIK6Kqk54iGKOmWouS/guOBquOBhOOCguOBruOBvuOBp+mdnuihqOekuinjgoLjgYLjgovjga7jgafms6jmhI8KCjLjgIFQZWVyQmxvY2vjgarjganjga7pgJrkv6Hjg5XjgqPjg6vjgr/jg6rjg7PjgrDjgr3jg5Xjg4go5Yid5b+D6ICF5ZCR44GNKQppcOOCkumBruaWreOBmeOCi+OBn+OCgeihqOekuuOBleOCjOOBquOBj+OBquOCiuOCueODg+OCreODqijjgZ/jgaDjgZfjgZ/jgb7jgavplqLkv4LjgarjgYTjga7jgoLpga7mlq3jgZnjgovjga7jgafms6jmhI8pCuW/jeiAhWFkTWF444Gu44KI44GG44Gq5bqD5ZGK44GM6KGo56S644GV44KM44KL44Gg44GR44Gn5aCx6YWs44GM55m655Sf44GZ44KL5LuV57WE44G/44GM44GC44KL44Gu44Gn5bCO5YWl5o6o5aWoCgrlsI7lhaXmlrnms5XjgarjganvvJrohLFHb29nbGXvvKB3aWtp44GuUGVlckJsb2Nr6Kej6Kqs44Oa44O844K4Cmh0dHA6Ly93d3c0LmF0d2lraS5qcC9ub2dvb2dsZS9wYWdlcy8xOS5odG1sCgoz44CB5Y+v6IO944Gq44KJ44Ki44OJ44Kq44OzTm9SZWRpcmVjdOOBqOS9teeUqOaOqOWlqCjjgoTjgoTkuIrntJrogIXlkJHjgZEpCuODquODgOOCpOODrOOCr+ODiOOCkuODluODreODg+OCr+OBl+OBpui7oumAgeWFiFVSTOOCkuihqOekuuOBl+OBpuOBj+OCjOOCi+OBruOBp+OCouODleOCo+ODquOCqOOCpOODiOODquODs+OCr+OCkuS/ruato+OBl+OBvuOBmeOAggrkvZXmlYXjgZPjga7jgqLjg4njgqrjg7PjgYvjgajjgYTjgYbjgajku5bjga7jg6rjg4DjgqTjg6zjgq/jg4jjg5bjg63jg4Pjgq/ns7vjgqLjg4njgqrjg7Pjgafjga/jgrnjg6vjg7zjgZfjgabjgZfjgb7jgYbjgojjgYbjgaoKbWV0YeOCv+OCsOOChGh0dHDjg6rjgq/jgqjjgrnjg4jjgarjganjga7jg6rjg4DjgqTjg6zjgq/jg4jjgoLjg5bjg63jg4Pjgq/lj6/og73jgaDjgYvjgonjgafjgZnjgIIK6KaB6Kit5a6a44CCKOKGk+OBruaWueOBp+ewoeaYk+ino+iqrOOBguOCiuOBvuOBmSkKCuKAu+aWh+Wtl+WMluOBkeWVj+mhjOOBjOeZuueUn+OBmeOCi+ODmuODvOOCuOOBguOCiig0MDPjgqjjg6njg7zjgarjgakpCuOBk+OCjOOBr+a1t+WkluOBruOCouODieOCquODs+OBruOBn+OCgeaXpeacrOiqnuOBruOCqOODs+OCs+ODvOODieODu+ODh+OCs+ODvOODieOBq+WkseaVl+OBl+OBpuOBhOOCi+OBm+OBhOOAggrllY/poYzjgajjgarjgaPjgabjgYTjgotVUkzjgbjjga7jg6rjg4DjgqTjg6zjgq/jg4jjgpLoqLHlj6/jgZnjgovjgajmraPjgZfjgYRVUkzjgbjpo5vjgbPjgb7jgZnjgYzjgIEK44Ki44OV44Kj44Oq44Ko44Kk44OI44Oq44Oz44Kv44G444Gu6Kix5Y+v44Gr44Gq44KJ44Gq44GE44KI44GG6ICD44GI44Gm6Kix5Y+v44GX44G+44GX44KH44GGCgo044CB5Y+v6IO944Gq44KJUmVmZXJyZXIgQ29udHJvbOezu+OCouODieOCquODs+OBqOS9teeUqOaOqOWlqCjjgoTjgoTkuIrntJrogIXlkJHjgZEpCuODhOOCpOODg+OCv+ODvOOChOODluODreOCsFVSTOOBquOBqeOCkueZu+mMsuOBl+OAgeODquODleOCoeODqeOBquOBqeOCkuWFg+OBq+WgsemFrOOCkuaJleOBhuOCouODleOCo+ODquOCqOOCpOODiOOBjOOBguOCi+aooeanmO+8nwrnp4Hjga/jgIxSZWZDb250cm9s44CN44Go44GE44GG44Ki44OJ44Kq44Oz44KS5L2/44Gj44Gm44GE44G+44GZ44GM44CBRmlyZWZveDI544Gn44Ki44OJ44Kq44Oz44OQ44O844GM5YmK6Zmk44GV44KM44Gf44Gu44GnCuePvuWcqOOBruODquODleOCoeODqVVSTOOBjOeiuuiqjeOBp+OBjeOBquOBj+OBquOCiuOBvuOBl+OBn+OAgijjgqLjg4njgqrjg7Pjg5Djg7zlvqnmtLvjgZnjgovjgqLjg4njgqrjg7PjgpLlhaXjgozjgozjgbDlhajmqZ/og73kvb/jgYjjgb7jgZkpCuKAu+OBk+OBoeOCieOCguaWh+Wtl+WMluOBkeWVj+mhjOOBguOCiuOAggoK4oC744GX44Gj44GL44KK6Kit5a6a44GX44Gq44GE44Go55S75YOP44GM6KGo56S644GV44KM44Gq44GE44CB44OV44Kh44Kk44Or44GM44OA44Km44Oz44Ot44O844OJ44Gn44GN44Gq44GE44Gq44Gp44Gu5ZWP6aGM44GM55m655Sf44GX44G+44GZ44CCCuS4gOW/nOS4i+OBruaWueOBp+OBiuWLp+OCgeioreWumuOCkui8ieOBm+OBvuOBmeOAggoKNeOAgVJTU+ezu+OBr+OAjFJTU+W6g+WRiuWJiumZpOekvuOAjeOBquOBqeOBruW6g+WRiuWJiumZpOOCkuWIqeeUqOOBl+OBpuOBj+OBoOOBleOBhOOAggrlvZPjgrnjgq/jg6rjg5fjg4jjgafjga/ln7rmnKznmoTjgatSU1Pjga7jgqLjg5XjgqPjg6rjg7Pjgq/jgavlr77lv5zjgZfjgb7jgZvjgpPjgIIKKOWvvuW/nOOBp+OBjeOBquOBhOWgtOWQiOOBjOOBu+OBqOOCk+OBqeOBruOBn+OCgSkKCgril4vjgZPjgaDjgo/jgorjgZ/jgYTmlrnnlKgK5LiL6KiY44K144Kk44OI44Gn6Imy44CF44Go44Gp44GG44GeCgrohLFHb29nbGXvvKB3aWtpCmh0dHA6Ly93d3c0LmF0d2lraS5qcC9ub2dvb2dsZS8KCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCuOCouODieOCquODs+OBrk5vUmVkaXJlY3TjgYzoia/jgY/jgo/jgYvjgonjgarjgYTvvIHmraPopo/ooajnj77jgaPjgabkvZXvvJ/jgaPjgabkurrnlKgo44Go44Gv44GE44GI6Ieq5YiG44KC5YuJ5by35LitKQoK44G+44Ga5Yid5pyf44Gr55m76Yyy44GV44KM44Gm44GE44KL44KC44Gu44KS5YWo6YOo5YmK6ZmkCgox44CB5Lul5LiL44KS6L+95Yqg44GZ44KL44Go5YWo44Gm44GuVVJM44Gn44Oq44OA44Kk44Os44Kv44OI44KS44OW44Ot44OD44Kv44GX44Gm44GP44KM44KL44KI44GG44Gr44Gq44KL44CCCgpeaHR0cAoo4oaR6Lui6YCB5YWD44Gr44Gg44GR44OB44Kn44OD44Kv44KS5YWl44KM44KL44CC44GT44GT44GM5LiA55Wq5YWI6aCt44Gn44GC44KL44Go44GE44GG5oSP5ZGz44Gu44Kt44Oj44Os44OD44OIKF4p44KS5b+Y44KM44Ga44GrKQrigLvihpHjgZPjgozjgYzntbblr77jgavkuIDnlarkuIvjgavjgarjgovjgojjgYbjgavjgZnjgovjgIIKCjLjgIHoqLHlj6/jgZfjgZ/jgYTjg6rjg4DjgqTjg6zjgq/jg4hVUkzjga/ku6XkuIvjga7jgojjgYbjgavov73liqDjgZnjgovjgIIKICAg44Ob44Ov44Kk44OI44Oq44K544OI44Gu44KI44GG44Gq44KC44Gu44CCCiAgIOKAu+S4iuiomOino+iqrDHjga7jgIxeaHR0cOOAjeOCiOOCiuOCguS4iuOBq+i/veWKoOOBmeOCi+OBk+OBqAoKICAg5L6L77yaaHR0cDovL2hvZ2Vob2dlLmNvLmpw44G+44Gf44GvaHR0cHM6Ly9ob2dlaG9nZS5jby5qcOOCkuioseWPr+OBmeOCi+WgtOWQiAoKXmh0dHBzPzovL2hvZ2Vob2dlLmNvLmpwCijihpHou6LpgIHlhYPjgajoqLHlj6/jgavjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgovjgILjgq3jg6Pjg6zjg4Pjg4goXinjgpLlv5jjgozjgZrjgaspCgogICAg44GT44Gu5aC05ZCI5oyH5a6a44GX44GfVVJM44Gu5b6M44Gr5L2V44GM5p2l44Gm44KC44GE44GE44Gu44GnCiAgICBodHRwOi8vaG9nZWhvZ2UuY28uanAvaG9tZXBhZ2UvaW5kZXguaHRtbOOBquOBqeOCguioseWPr+OBleOCjOOCiwoKCjPjgIHjgIzou6LpgIHlhYPjgI3jgavjg4Hjgqfjg4Pjgq/lhaXjgozjgovjgajku4rooajnpLrjgZXjgozjgabjgYTjgotVUkwo6Lui6YCB5YWDKeOBi+OCieOBruODquODgOOCpOODrOOCr+ODiOOBruioreWumgogICAg44OB44Kn44OD44Kv44KS5aSW44GZ44Go4oCd6Lui6YCB5YWI4oCd44GuVVJM44Gr5a++44GZ44KL6Kit5a6aCiAgICDigLvihpHjgZPjgZPjga/jgYvjgarjgorph43opoEKCjTjgIHjgIzoqLHlj6/jgI3jgavjg4Hjgqfjg4Pjgq/lhaXjgozjgovjgajjg6rjg4DjgqTjg6zjgq/jg4jjgpLmraLjgoHjgZrjgavou6LpgIEo44OR44K544K544Or44O8KQogICAg44OB44Kn44OD44Kv44KS5aSW44GZ44Go44Oq44OA44Kk44Os44Kv44OI44KS44OW44Ot44OD44Kv44GX44Gm6Lui6YCB5YWIVVJM44KS6KGo56S6CiAgICDjg5vjg6/jgqTjg4jjg6rjgrnjg4jjga7jgojjgYbjgavkvb/jgYbjga7jgafov73liqDjgZnjgovloLTlkIjjga/ln7rmnKznmoTjgavoqLHlj6/jgavjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgosKCiAgICDkvovjgYjjgbAKICAgIF5odHRwOi8vaG9nZS5jb20vc2hvcC8g44OW44Ot44OD44KvCiAgICBeaHR0cDovL2hvZ2UuY29tLyDoqLHlj68KICAgIF5odHRwIOODluODreODg+OCrwogICAg44Gu44KI44GG44Gr5LiK44GL44KJ6Kit5a6a44GX44Gf5aC05ZCI44GvaHR0cDovL2hvZ2UuY29tL3Nob3Av44Gu44OW44Ot44OD44Kv44GM5pyA5YSq5YWI44GnCiAgICDjgZ3jgozku6XlpJbjga5odHRwOi8vaG9nZS5jb20v44Gv6Kix5Y+vKOS+i+OBiOOBsGh0dHA6Ly9ob2dlLmNvbS9zdG9yZS9pbmRleC5odG1s44Gq44Gp44Gv6Kix5Y+vKeOBqOOBquOCiuOAgQogICAg5pyA5b6M44GraHR0cDovL2hvZ2UuY29tL+S7peWkluOBrlVSTOOBr+WFqOmDqOODluODreODg+OCr+OBqOOBquOCi+OAggoKNeOAgeOAjEROU+OAjeOBq+mWouOBl+OBpuOBr+WfuuacrOeahOOBq+ODgeOCp+ODg+OCr+OBl+OBquOBj+OBpk9LCgrigLvms6jmhI/ngrkK6Lui6YCB5YWD44Gr44OB44Kn44OD44Kv44KS5YWl44KM44KL44GL44Gp44GG44GL44Gv44Gh44KD44KT44Go6ICD44GI44Gq44GE44GoCuODluODreODg+OCr+OBmeOBueOBjeOBqOOBk+OCjeOCkuOCueODq+ODvOOBl+OBpuaEj+WRs+OBquOBhOOBk+OBqOOBq+OAggrlj6/og73jgarjgonjgbDjg4njg6HjgqTjg7PjgaDjgZHjgafjgarjgY/ntLDjgYvjgY/mjIflrprjgZnjgovmlrnjgYzkuIflhajjgIIKCgrmnIDkvY7pmZDopprjgYjjgabjgYrjgY/jgajkvr/liKnjgarmraPopo/ooajnj77opo/liYctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK5YmN5o+Q44Go44GX44Gm5b2T54S25Y2K6KeS6Iux5pWw5a2X44Gn44GZ44CCCuiqpOino+immuaCn+OBp+iqrOaYjuOBmeOCi+OBqOOAgeaWh+Wtl+OCkuaknOe0ouOBmeOCi+OBn+OCgeOBruihqOePvuOBp+OBmeOAggoKXmh0dHAKKOKGkeWFiOmgreOBjGh0dHDjgajjgYTjgYbmhI/lkbPjgILjgq3jg6Pjg6zjg4Pjg4goXinjga/jgZPjgZPjgYzkuIDnlarlhYjpoK3jgafjgYLjgovjgajjgYTjgYbmhI/lkbPjgIIpCgpodHRwcz8KKOKGkWh0dHDjgb7jgZ/jga9odHRwc+OBruOBqeOBo+OBoeOBp+OCguOBhOOBhOOCiOOBqOOBhOOBhuaEj+WRs+OAguOCr+OCqOOCueODgeODp+ODs+ODnuODvOOCryg/KeOBruWJjTHmloflrZfjga7mnInnhKHjga4y44OR44K/44O844OzKQoKKGNvLmpwfGNvbXxuZS5qcCkKKOKGkWNvLmpw44G+44Gf44GvY29t44G+44Gf44GvbmUuanDjgajjgYTjgYbmhI/lkbPjgILjg5HjgqTjg5fjg6njgqTjg7MofCnjgafljLrliIfjgovjgajkvZXjg5Hjgr/jg7zjg7PjgavjgoLlr77lv5zlj6/og73jgILmi6zlvKfjgaflm7LjgoDjga7jgpLlv5jjgozjgZrjgaspCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpSZWZDb250cm9s44Gu44GK44GZ44GZ44KB6Kit5a6aCgrjgJDmpoLopoHjgJEK44Oq44OV44Kh44Op44Go44Gv5LuK6KaL44Gm44GE44KL44K144Kk44OI44Gu5YmN44Gr6KaL44Gm44GE44Gf44K144Kk44OIVVJM44Gq44Gp44Gu5bGl5q205oOF5aCx44Gn44CBCuOBneOBruaDheWgseOBq+OBr+aknOe0ouOBl+OBn+WNmOiqnuOBquOBqeOCguWQq+OBvuOCjOOCi+WgtOWQiOOBjOOBguOCiuOBvuOBmeOAggrjgqLjg4njgqrjg7Pjgavjgojjgormm7jjgY3mj5vjgYjjgZ/jgormtojjgZfjgabjgZfjgb7jgYrjgYbjgajjgYTjgYbjgo/jgZHjgafjgZnjgIIKCuOAkOioreWumuOAkQoKMeOAgeacgOWIneOBq+OAjOS4gOimp+OBq+OBquOBhOOCteOCpOODiOOBq+mWouOBmeOCi+imj+WumuWApOOAjeOCkuOAjOWBveijheOAjSjmjqjlpagp44GC44KL44GE44Gv44CM6Zi75q2i44CN44GX44KI44GG44CCCgrjg7vlgb3oo4Xjg7vjg7vjg7vjgZPjgaHjgonjgpLmjqjlpajjgILjgZ3jga7jgrXjgqTjg4jjga7jg4njg6HjgqTjg7NVUkzjgpLjg6rjg5XjgqHjg6nmg4XloLHjgavjgZnjgosK44O76Zi75q2i44O744O744O744Oq44OV44Kh44Op5oOF5aCx44KS5raI5Y6744GX44CB44G+44Gj44GV44KJ44Gq54q25oWL44Gr44GZ44KLKOS4gOmDqOOCteOCpOODiOOBp+ODquODleOCoeODqeOBjOOBvuOBo+OBn+OBj+eEoeOBhOOBqOihqOekuuOBp+OBjeOBquOBj+OBquOCiykK44O76YCa5bi444O744O744O75pys5p2l44Gu44Oq44OV44Kh44Op44Gn44GZ44CC5ZWP6aGM44GM5Ye644Gm56K66KqN44GZ44KL44Go44GN5Lul5aSW44Gv6YG444Gw44Gq44GE5pa544GM44GE44GE44Gn44GZ44CCCuODu+OCq+OCueOCv+ODoOODu+ODu+ODu+iHqueUseOBq+ODquODleOCoeODqeOBrlVSTOOCkuabuOOBjeaPm+OBiOOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOBjOOAgeaZrumAmuOBruS6uuOBr+S4jeimgeOBp+OBl+OCh+OBhuOAggoKMuOAgeWAi+WIpeeZu+mMsuOBp+OCqOODqeODvOWbnumBvwoK6KGo56S644GV44KM44Gq44GE44O744OA44Km44Oz44Ot44O844OJ44GV44KM44Gq44GE44O75aSJ44Gq44Ko44Op44O844GM5Ye644KL44Gq44Gp5ZWP6aGM44GM55m655Sf44GX44Gf44KJ44CBCuOCueODhuODg+ODlzHjgafoqK3lrprjgZfjgZ/lhajkvZPjga7jg6rjg5XjgqHjg6njgIzlgb3oo4XjgI3jgpLjgIzpgJrluLjjgI3jgavoqK3lrprjgZfjgabllY/poYzjgYzop6PmtojjgZXjgozjgovjgYvnorroqo0K44KC44GX44Gd44KM44Gn5ZWP6aGM44GM6Kej5raI44GX44Gf44KJ5Lul5LiL44Gu44KI44GG44Gr5YCL5Yil6L+95Yqg44GX44KI44GGCgrllY/poYzjga7jgrXjgqTjg4jjgafog4zmma/jgpLlj7Pjgq/jg6rjg4Pjgq/jgZfjgablj7Pjgq/jg6rjg4Pjgq/jg6Hjg4vjg6Xjg7zjgpLlh7rjgZkK44CM44GT44Gu44K144Kk44OI44Gr6Zai44GZ44KLIFJlZkNvbnRyb2wg44Kq44OX44K344On44Oz44CN44KS44Kv44Oq44OD44KvCgrjgZnjgovjgajjgZ3jga7jgrXjgqTjg4jjga7jg6rjg5XjgqHjg6nli5XkvZzjgpLmjIflrprjgafjgY3jgovjga7jgafjgZ3jga7jgb7jgb5PS+OCkuaKvOOBmeOAggrigLvjg4fjg5Xjgqnjg6vjg4jjgafjgIzpgJrluLjjgI3jgYzpgbjmip7jgZXjgozjgabjgYTjgovjga/jgZrjgafjgZkKCue1guOCj+OBo+OBn+OCieW/mOOCjOOBmuOBq+WFqOS9k+OBruODquODleOCoeODqeOCkuOAjOWBveijheOAjeOBq+aIu+OBneOBhuOAggoKCjPjgIHjgYrjgZnjgZnjgoHoqK3lrpoKCuS7peS4i+OBrlVSTOOCkuODquODleOCoeODqeOAjOmAmuW4uOOAjeOBp+i/veWKoOOBmeOCi+OAggoK4oC744Gg44Gf44GX6L+95Yqg44Gv5ZCE6Ieq44Gu6Ieq5bex6LKs5Lu744Gn44GK6aGY44GE44GX44G+44GZ44CCCijlrp/pmpvjgavoh6rliIbjgafnorroqo3jgZfjgabjgYvjgonov73liqDjgpLjgYrli6fjgoHjgZfjgb7jgZkpCgrjg7tnb29nbGXjgqLjgqvjgqbjg7Pjg4go56K644GLeW91dHViZeOBi+OCouODs+ODieODreOCpOODieODnuODvOOCseODg+ODiCkKYWNjb3VudHMuZ29vZ2xlLmNvbQoK44O744OL44Kz44OL44Kz5YuV55S757O7CmNvbS5uaWNvdmlkZW8uanAKbmljb2Jsb21hZ2EuanAKCuODu3BpeGl2Cnd3dy5waXhpdi5uZXQKCuODu3ZlY3RvcuOBruODleODquODvOOCveODleODiOODgOOCpuODs+ODreODvOODieOBquOBqQpmdHAudmVjdG9yLmNvLmpwCm15LnZlY3Rvci5jby5qcAoK44O744K944OV44Oe44OD44OXCnBvaW50LnNvZm1hcC5jb20KCuODu+OCveODleODiOODkOODs+OCr+ezuyjlpJrliIbjg5fjg63jg5DjgqTjg4DjgoTpm7voqbHmlpnph5Hns7spCndlYi1tZWlzYWkuc29mdGJhbmt0ZWxlY29tLmNvLmpwCndlYm1laXNhaS5qcAoK44O744Km44Kn44OW6a2a5ouTCm1lZ2Fsb2Rvbi5qcAoK44O744Gh44Ga5Li4Cm1hcC5jaGl6dW1hcnUuY29tCgrjg7vjgoLjgorjgZ/jgb0KZmluZC5tb3JpdGFwby5qcAoKCuKAu+S4iuiomOS7peWkluOBp+OCguihqOekuuOBleOCjOOBquOBhOODu+ODgOOCpuODs+ODreODvOODieOBleOCjOOBquOBhOODu+WkieOBquOCqOODqeODvOOBjOWHuuOCi+OBquOBqQrllY/poYzjgYznmbrnlJ/jgZnjgovjgrXjgqTjg4jjga/jgaHjgonjgbvjgonjgajjgYLjgorjgb7jgZnjgIIK44Gd44Gu5aC05ZCI44Gv5YaN5bqm44K544OG44OD44OXMuOBq+aIu+OCjeOBhgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKuabtOaWsOWxpeattCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgowNi8yOS8yMDE0IC0gdjMuOCAgZml4OnYzLjfjgafjga7kv67mraPjg5/jgrnjga7kv67mraPjg7vjg7vjg7sKMDYvMjkvMjAxNCAtIHYzLjcgIGZpeDrli5XkvZzjgZfjgarjgYvjgaPjgZ/jg5DjgrDkv67mraMKMDYvMjcvMjAxNCAtIHYzLjYgIGZpeDrkvqHmoLzjgrPjg6Djgafkv67mraPpgJTkuK3jgafmraLjgb7jgovnl4fnirbkv67mraPjgILku5YKMDYvMjYvMjAxNCAtIHYzLjUgIGFkZDrmtbflpJbjga7jgqLjg5XjgqPjgavkuIDpg6jlr77lv5wKMDYvMjUvMjAxNCAtIHYzLjQgIGZpeDropoHntKDntpnjgY7otrPjgZfjgavlr77lv5wo57aZ44GO6Laz44GX44Gu5aSa44GE44Oa44O844K444Gq44Gp44Gv5Yem55CG44GM6YeN44GP44Gq44KL5aC05ZCI44GC44KKKQowNi8yMS8yMDE0IC0gdjMuMyAgYWRkOltraWxsZXJd44Gu5paH5a2X6Z2e6KGo56S65qmf6IO96L+95YqgKOOCueOCr+ODquODl+ODiOOBjOODquODs+OCr+OBruS/ruato+ODn+OCueOBguOBo+OBpuOCguawl+OBq+OBl+OBquOBhOOBquOCiemdnuihqOekuuOBp+OBqeOBhuOBnikKMDYvMTgvMjAxNCAtIHYzLjIgIGZpeDrkuIDpg6jjga7jgrXjgqTjg4jjgafjgYrjgYvjgZfjgY/jgarjgaPjgabjgYTjgZ/jga7jgpLkv67mraMKMDYvMTMvMjAxNCAtIHYzLjEgIGRlbDpAdXBkYXRlVVJMCjA2LzEyLzIwMTQgLSB2My4wICBhZGQ644GZ44G544Gm44Gu6KaB57Sg44KS44OB44Kn44OD44Kv44GZ44KL44KI44GG44Gr5aSJ5pu044CC5LuW6Imy44CFCjA2LzA3LzIwMTQgLSB2Mi4xMSBhZGQ6Z29vZ2xl44OI44Op44OD44Kr44O86Zmk5Y67CjA2LzA3LzIwMTQgLSB2Mi4xMCBmaXg65Lim44Gz6aCG44KS44Ki44Or44OV44Kh44OZ44OD44OI6aCG44Gr5pW055CGCjA0LzE2LzIwMTQgLSB2Mi40ICBmaXg644Oa44O844K45YaF44K544Kv44Ot44O844Or55So44Oc44K/44Oz44Gv6Zmk5aSWCjA0LzAyLzIwMTQgLSB2Mi4zICBmaXg65paH5a2X5YyW44GR5Zue6YG/44GrZWNsLmpz44KScmVxdWlyZeOBmeOCi+OCiOOBhuOBq+WkieabtOOAguS7luiJsuOAheS/ruatowowMy8yNS8yMDE0IC0gdjIuMiAgZGVsOuaaq+WumueahOOBq+OCueOCr+ODquODl+ODiOWun+ihjOODh+OCo+ODrOOCpOOCkuWJiumZpAowMy8yNS8yMDE0IC0gdjIuMSAgYWRkOkFtYXpvbuOBruODquODgOOCpOODrOOCr+ODiOmZpOWOuwowMy8yMy8yMDE0IC0gdjIuMCAgYWRkOkFtYXpvbuOBruOCueODnuODvOODiOODleOCqeODs1VSTOOBq+WvvuW/nAowMy8yMi8yMDE0IC0gdjEuOSAgZml4Okdvb2dsZUltYWdl5qSc57Si44Gv6Zmk5aSW44CCb25jbGlja+mZpOWOu+OCkuS/ruato+OBl+OBn+ODquODs+OCr+OBruOBv+mBqeW/nOOBmeOCi+OCiOOBhuOBq+WkieabtOOAggowMy8yMi8yMDE0IC0gdjEuOCAgZml4OuiqrOaYjuaWh+WQueOBo+mjm+OCk+OBoOOBruOBp+abuOOBjeebtOOBl+OAgkFtYXpvbuOBruS/ruatowowMy8xNC8yMDE0IC0gdjEuMCAgcmVsZWFzZQoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCuWCmeW/mOmMsgrjg7tHb29nbGVJbWFnZeaknOe0ouOBp+OBhuOBvuOBj+WLleOBi+OBquOBhOOBruOBp0BleGNsdWRl44Gr6L+95Yqg44CCKnRibT1pc2NoKuOBr0dvb2dsZUltYWdl5qSc57Si55SoCiAg6Kmz57Sw44Km44Kj44Oz44OJ44Km44Gu5Y+z5YG044K144Og44ON44Kk44Or55S75YOP44Kv44Oq44OD44Kv44Gn6LW35YuV44GZ44KL54m55q6K44Gq44K544Kv44Oq44OX44OI44Gn44CBaWZyYW1l5YaF44Gr6KaB57Sg44KS5YWl44KM6L6844KT44Gn44GE44KL5qeY5a2QCiAgRjXjg6rjg63jg7zjg4njgZnjgovjgahpZnJhbWXlhoXjgpLjgrPjg5Tjg7zjgZfjgZ/opoHntKDjga7mlrkoaWZyYW1l44GY44KD44Gq44GP44Gq44KLKeOBq+WIh+OCiuabv+OCj+OCi+OBquOBqeiJsuOAheaMmeWLleOBjOOBiuOBi+OBl+OBhArihpJhZGRFdmVudExpc3RlbmVy44Gn55uj6KaW6L+95Yqg44Gn5a++5b+cCgrjg7vjg4fjgrPjg7zjg4njgqjjg6njg7zjga/jganjgYbjgoTjgolkZWNVUknjgaDjgahFVUMtSlDjgoRTaGlmdC1KSVPjga7mloflrZfliJfjgYzmnaXjgovjgajnmbrnlJ/jgZnjgovmqKHmp5jvvJ8K4oaSZWNsLmpzKEVzY2FwZSBDb2RlYyBMaWJyYXJ5KeOCkuOBiuWAn+OCiuOBmeOCi+OBk+OBqOOBqwrihpJyZXF1aXJl44GL44KJ5Z+L44KB6L6844G/44Gr5aSJ5pu0KEdyZWFzeUZvcmvjgadyZXF1aXJl5L2/44GG44Go6Imy44CF44Go6Z2i5YCS44Gq44Gf44KBKQoK44O7bGlua2lmaWVy44Gu56iu6aGeKGxpbmtpZnkgcGx1cynjgavjgojjgaPjgabjga/jg4fjgqPjg6zjgqTjgpIxMDDlhaXjgozjgarjgYTjgajooajnpLrjgafjgY3jgarjgYTloLTlkIjjgYLjgooK4oaS5qW95aSp44Gu5Z+L44KB6L6844G/5Z6L44OW44Ot44Kw44OE44O844Or44Gu6Kqt44G/6L6844G/44GM6YGF44GE44Gu44GnNTAw44Gr5aSJ5pu0CuKGkmZhY2Vib29r44Gu5qW95aSp5bqD5ZGK44Gu6Kqt44G/6L6844G/44GM6YGF44GPODAw44Gr5aSJ5pu0KOOBk+OCjOOBp+OCguiqreOBv+i+vOOBv+OBjOmBheOBhOOBqOS/ruato+OBp+OBjeOBquOBhOOBkeOBqeOBk+OCjOS7peS4iuOBr+OCueODiOODrOOCueOBruOBn+OCgeWmpeWNlCkK4oaSbXkgeWFob2/jga7jg5rjg7zjgrjjgYzoqq3jgb/ovrzjgb/jgYzpgYXjgY8zMDAw44KC5b+F6KaB44Gq44Gf44KB44OH44Kj44Os44Kk44KS5buD5q2i44GX44Gm44Oh44Kk44Oz6Zai5pWw44Gu6LW35YuV44KS44K/44Kk44Oe44O844Kr44Km44Oz44OI44Gr44GX44GfCuKGkmFkZEV2ZW50TGlzdGVuZXLjgavlpInmm7QKCuODu2FtYXpvbuOBruWfi+OCgei+vOOBv+Wei2ZsYXNo44Gu5aC05ZCI44CB44Oq44OA44Kk44Os44Kv44OI55m655Sf44GZ44KL44Gu44GnTm9SZWRpcmVjdOOBp+ODluODreODg+OCr+W+jOS/ruatowoK44O75rW35aSW6KO944Ki44OJ44Kq44Oz44Gu44Gf44KB44GLbm9yZWRpcmVjdOOBjOODluODreODg+OCr+OBmeOCi+OBqOaXpeacrOiqnuOBjOaWh+Wtl+WMluOBkeOCkui1t+OBk+OBmeaooeanmCjmpb3lpKnjgarjganjgafnorroqo0pCuKGkuOCouODleOCo+ODquOCqOOCpOODiOODquODs+OCr+OBmOOCg+OBquOBhOWgtOWQiOOBr+ODquODgOOCpOODrOOCr+ODiOOCkuioseWPr+OBmeOCi+OBqOWVj+mhjOOBr+ino+a2iOOBmeOCiwrihpLmpb3lpKnjgpLoqLHlj6/jgZfjgaHjgoPjgYbjgajjgqLjg5XjgqPjg6rjgqjjgqTjg4jjg6rjg7Pjgq/jgpLouI/jgpPjgafjgZfjgb7jgYbjga7jgafkuovliY3jgavkv67mraPlj6/og73jgarjgoLjga7jga/kv67mraPjgZfjgZ8o44G+44Gg5LuW44Gr44GC44KL44GL6Kq/5p+75LitKQoK44O7YW1hem9u44Gu5a6a5pyf44GK44OI44Kv5L6/44Oa44O844K444Gn44GG44G+44GP6KGo56S644GV44KM44Gq44GE5LqL6LGh44KS6Kej5rG644Gn44GN44Gq44GE44Gu44GnCiAg6Kmy5b2T44Oa44O844K4KGh0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2wvMjc5OTM5OTA1MSnjgpLpmaTlpJZAZXhjbHVkZQrihpLlr77lv5zlrozkuoYK4oaS5LuW44Gr44KCYW1hem9u5YaF44Gn44GT44Gu44Oh44OL44Ol44O85qyE44KS5L2/44Gj44Gm44KL44Oa44O844K444GM44GC44KL5qih5qeY44CCYW1hem9u6Ieq5L2T44KS55yB44GP44GL5qSc6KiO5LitCgrjg7vjg5bjg63jgrDjg5Hjg7zjg4Tjga7ln4vjgoHovrzjgb/lnovjgrnjgq/jg6rjg5fjg4goLmpz57O7KeOBq+mWouOBmeOCi2Z1bmN0aW9uIGtpbGxKU+OBjOmgk+aMq+S4reOBruOBn+OCgei1t+WLleeuh+aJgOOCkuOCs+ODoeODs+ODiOOCouOCpuODiAoK44O75Lul5LiL44Gv6ZaJ6Y6W77yf44Od44O844OIODA4MOOBq+OBquOBo+OBn+OCiOOBhuOBoOOBkeOBqeS4jeWuieWumuOBquOBruOBp+OBqOOCiuOBguOBiOOBmmdyZWFzeWZvcmvjgbjnp7vooYwKICBodHRwczovL3VzZXJzY3JpcHRzLW1pcnJvci5vcmcvc2NyaXB0cy9zaG93LzQxMTM2MwogIGh0dHBzOi8vdXNlcnNjcmlwdHMtbWlycm9yLm9yZy9zY3JpcHRzL3NvdXJjZS80MTEzNjMudXNlci5qcwoK44O7QHVwZGF0ZVVSTOOCkuWJiumZpCjjgqTjg7Pjgrnjg4jjg7zjg6vjgZfjgZ/jgajjgY3jga7jgrXjgqTjg4hVUkzjgpLjgqLjg4njgqrjg7PjgYzkv53mjIHjgZfjgabjgYTjgovjga7jgafmm7TmlrDlj6/og73jgarmqKHmp5gpCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgovLz09PT09PT09PT09PT3jg5fjg63jgrDjg6njg6Dplovlp4s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQooZnVuY3Rpb24oKSB7CgkvL+ODiOODqeODg+OCreODs+OCsOmZpOWOuwoJcmVtVHJhY2soZG9jdW1lbnQpOwoKCS8v44Om44O844K244O86Kit5a6aKGtpbGxlcuihqOekuuioreWumikKCXZhciBoaWRlT3JpZ2luTGluayA9ICJvbmUiOwoJaGlkZU9yaWdpbkxpbmsgPSB1c2VyQ2ZnKCJoaWRlT3JpZ2luTGluayIpOwoKCS8v5paH5a2X44Ko44Oz44Kz44O844OJ55So44Gu6Zai5pWw6Kqt44G/6L6844G/CgllY2woKTsKCgkvL+ODoeOCpOODs+WHpueQhuWun+ihjAoJd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge21haW4oZG9jdW1lbnQpfSwgMTIwMCApOwkJLy/lh6bnkIbjga4y6YeN5YyW44Gr44Gq44KL44GR44Gp44K144Kk44OI44GU44Go44Gr5YiG44GR44KL44KI44KK44Oe44K344GL44Gq77yfCgoJLy9kb23oqq3jgb/ovrzjgb/lvowoTm9zY3JpcHTjgafmraLjgoHjgabjgovloLTlkIjjga9kb23oqq3jgb/ovrzjgpPjgafjgarjgYTjgaPjgb3jgYTjgILjgYvjgajjgYTjgaPjgabjgZPjga7otbfli5XjgpLmtojjgZnjgajoqq3jgb/ovrzjgb/pgYXlu7bjga7jgYLjgovjgrXjgqTjg4jjgZTjgajjgavliIbjgZHjgovlv4XopoHjgYzjgYLjgospCglkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oZXZ0KXsKCQl2YXIgbm9kZSA9IGV2dC50YXJnZXQ7CgkJd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge21haW4obm9kZSl9LCAxNTAwICk7Cgl9LCBmYWxzZSk7CgkvL+e2meOBjui2s+OBl+imgee0oOWvvuW/nAoJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgZnVuY3Rpb24oZSkgewoJCXdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHttYWluKGUudGFyZ2V0KX0sIDE1MDAgKTsKCX0sIGZhbHNlKTsKCgoJLy/jg6HjgqTjg7Plh6bnkIY9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJZnVuY3Rpb24gbWFpbihkb2N1bWVudCl7Ci8vYWxlcnQoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50KSk7CnRyeXsKCi8vCQl2YXIgYWxsTGlua3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOwoJCXZhciBhbGxMaW5rcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CgkJdmFyIGN1dE51bSA9IiI7CgkJdmFyIHN0clVybCA9ICIiOwkvL+S/ruato+OBl+OBn1VSTAoKCgkJLy/ln4vjgoHovrzjgb/lnotqYXZh44K544Kv44Oq44OX44OICi8vCQlraWxsSlMoZG9jdW1lbnQpOwoKCQlmb3IgKGkgPSAwOyBpIDwgYWxsTGlua3MubGVuZ3RoOyBpKyspewoKCgkJCS8vaHJlZuOCkuWQq+OBvuOBquOBhOODquODs+OCr+OBr+mZpOWklgoJCQlpZihhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PSBudWxsCgkJCSAgfHwgYWxsTGlua3NbaV0uaHJlZiA9PSB1bmRlZmluZWQKCQkJICB8fCBhbGxMaW5rc1tpXS5ocmVmID09ICIiKXsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQl2YXIgaHJlZiA9IGFsbExpbmtzW2ldLmhyZWY7CS8v5YWD44GuVVJMKOalteWKm+S4iuabuOOBjeOBl+OBquOBhOOBk+OBqO+8gSkKLy8JCQlzdHJVcmwgPSBocmVmOwoJCQlzdHJVcmwgPSBkZWNVUkkoaHJlZik7CgoJCQkvL+S6i+WJjeS/ruatoz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoKCQkJLy/jgqLjg57jgr7jg7Pjga7jg6rjg4DjgqTjg6zjgq/jg4jpmaTljrsKCQkJaWYoaHJlZi5tYXRjaCgiYW1hem9uLmNvLmpwIikgJiYgaHJlZi5tYXRjaCgvXC9yZWRpcmVjdC8pICl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9leGVjL29iaWRvcy9yZWRpcmVjdD90YWc9YmVzdGdhdGUtMjImcGF0aD1odHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5jby5qcCUyRmdwJTJGb2ZmZXItbGlzdGluZyUyRkIwMENMN0xDM08lMkYlM0Zjb25kaXRpb24lM0RuZXcKCQkJCWlmKGhyZWYubWF0Y2goLyhcJnxcPylwYXRoPWh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwicGF0aCIpOwoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9yZWRpcmVjdC5odG1sL3JlZj1hbWJfbGlua182ODY5NDQyOV8yP2llPVVURjgmbG9jYXRpb249aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uY28uanAlMkZncCUyRmhlbHAlMkZjdXN0b21lciUyRmRpc3BsYXkuaHRtbCUzRm5vZGVJZCUzRDIwMDUwNTgwMCZ0b2tlbj0wQUUxREZBQ0M5NTRGOTE5ODYwNzQ1MDRGNTdDMTM2MkM4NUZCNkU4JnBmX3JkX209QU4xVlJRRU5GUkpONSZwZl9yZF9zPW1lcmNoYW5kaXNlZC1zZWFyY2gtbGVmdC0yJnBmX3JkX3I9MFBXN0cxUkZBS0tWNTkyQ0VYQ0omcGZfcmRfdD0xMDEmcGZfcmRfcD0xNTc5Njg2NDkmcGZfcmRfaT0yNzk5Mzk5MDUxCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJsb2NhdGlvbj1odHRwIikpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsImxvY2F0aW9uIik7CgovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2V4ZWMvb2JpZG9zL3JlZGlyZWN0P2xpbmtfY29kZT11cjImY2FtcD0yNDcmdGFnPW5hcml0YW5ldG1hcC0yMiZjcmVhdGl2ZT0xMjExJnBhdGg9ZXh0ZXJuYWwtc2VhcmNoJTNGc2VhcmNoLXR5cGU9c3MlMjZrZXl3b3JkPSUyNUUzJTI1ODMlMjVBQSUyNUUzJTI1ODIlMjVCOSUyNUUzJTI1ODMlMjU4OCUyNUUzJTI1ODMlMjVBOSUyNUU2JTI1OTIlMjU4MyUyNUU5JTI1ODAlMjU4MCUyNUVGJTI1QkMlMjVBMSUyNUVGJTI1QkMlMjVBMiUyNUVGJTI1QkMlMjVBMyUyNUUzJTI1ODAlMjU4MCUyNmluZGV4PWJvb2tzLWpwCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvZXhlYy9vYmlkb3MvcmVkaXJlY3Q/bGlua19jb2RlPXVyMiZjYW1wPTI0NyZ0YWc9bmFyaXRhbmV0bWFwLTIyJmNyZWF0aXZlPTEyMTEmcGF0aD1leHRlcm5hbC1zZWFyY2g/c2VhcmNoLXR5cGU9c3Mma2V5d29yZD0lRTMlODMlQUElRTMlODIlQjklRTMlODMlODglRTMlODMlQTklRTYlOTIlODMlRTklODAlODAlRUYlQkMlQTElRUYlQkMlQTIlRUYlQkMlQTMlRTMlODAlODAmaW5kZXg9Ym9va3MtanAKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goLyhcP3xcJilwYXRoPS8pKXsKCQkJCQl2YXIgc3RyS2V5ID0gIiI7CgkJCQkJaWYocGFyYW1zWyJrZXl3b3JkIl0gIT0gdW5kZWZpbmVkKXsKCQkJCQkJc3RyS2V5ID0gJyZrZXl3b3JkPScgKyBwYXJhbXNbImtleXdvcmQiXTsKCQkJCQl9CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oLiopcmVkaXJlY3RcPy4qJC9pLCckMScgKyBnZXRSZWRpcmVjdFVybChocmVmLCJwYXRoIikgKyBzdHJLZXkpOwoJCQkJfWVsc2V7CgkJCQl9CgkJCQlzZXRMaW5rKCk7CgovL+ato+OBl+OBhGh0dHA6Ly93d3cuYmVzdGdhdGUubmV0L2dvLnBodG1sP3Byb2R1Y3RpZD1naWdhYnl0ZWdiYnhpNzQ3NzByJmlkPTM2MjUwNjMKLy9odHRwOi8vd3d3LmJlc3RnYXRlLm5ldC9nby5waHRtbD9zaXRlaWQ9QTAwMDAwMSZjYXRlZ29yeWlkPTAwMTAwNjAwODAwMDAwMCZwcm9kdWN0aWQ9Z2lnYWJ5dGVnYmJ4aTc0NzcwciZzb3J0PWVwYzEmb3JkZXJOdW1iZXI9MSZwb2ludFByaWNlPTEwNTQwOCZwcmljZT0xMDU0MDgmaWQ9MzYyNTA2MyZ0eXBlPWIKCQkJLy9iZXN0Z2F0ZeOBruODquODs+OCr+OCkuWPr+iDveOBqumZkOOCiuWJiumZpAoJCQl9ZWxzZSBpZihsb2NhdGlvbi5ocmVmLmluZGV4T2YoInd3dy5iZXN0Z2F0ZS5uZXQiKSA8IDEwICYmIGxvY2F0aW9uLmhyZWYuaW5kZXhPZigid3d3LmJlc3RnYXRlLm5ldCIpID4gMCl7CgkJCQlpZihocmVmLm1hdGNoKCJwcm9kdWN0aWQ9IikgJiYgaHJlZi5tYXRjaCgic2l0ZWlkPSIpKXsKCgkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oLiopZ28ucGh0bWxcPy4qJC9pLCIkMWdvLnBodG1sPyIpICsgInByb2R1Y3RpZD0iICsgcGFyYW1zWyJwcm9kdWN0aWQiXSArICImaWQ9IiArIHBhcmFtc1siaWQiXTsKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cuYmVzdGdhdGUubmV0L2hvcF9hdWN0aW9uLnBocD91cmw9aHR0cCUzQSUyRiUyRnBhZ2UxMy5hdWN0aW9ucy55YWhvby5jby5qcCUyRmpwJTJGYXVjdGlvbiUyRnIxMTI0ODQzOTMmdHlwZT1hdAoJCQkJLy9iZXN0Z2F0ZeOBq+OBguOCi+ODpOODleOCquOCr+ODquODs+OCr+S/ruatowoJCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiaG9wX2F1Y3Rpb24ucGhwIikgJiYgaHJlZi5tYXRjaCgidXJsPWh0dHAiKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKLy/mraPjgZfjgYRodHRwOi8vd3d3LmNvbmVjby5uZXQvZ29zaG9wLmFzcD9tX2lkPThhMTBjZGFiNTk4OWFjOTNlYjEyNTkwNDJmOTc1MGE0JnNob3BfaWQ9MTIyMgovL2h0dHA6Ly93d3cuY29uZWNvLm5ldC9nb3Nob3AuYXNwP21faWQ9OGExMGNkYWI1OTg5YWM5M2ViMTI1OTA0MmY5NzUwYTQmY29tX2lkPTExMzEwMTAxNzkmc2hvcF9pZD0xMjIyJmNfaWQ9MDExNTUwMjImZ29zaG9wPTEmdGE9NS45CgkJCS8vY29uZWNv44Gu44Oq44Oz44Kv44KS5Y+v6IO944Gq6ZmQ44KK5YmK6ZmkCgkJCX1lbHNlIGlmKGxvY2F0aW9uLmhyZWYuaW5kZXhPZigid3d3LmNvbmVjby5uZXQiKSA8IDEwICYmIGxvY2F0aW9uLmhyZWYuaW5kZXhPZigid3d3LmNvbmVjby5uZXQiKSA+IDAgCgkJCSAgJiYgaHJlZi5tYXRjaCgibV9pZD0iKSAmJiBocmVmLm1hdGNoKCJzaG9wX2lkPSIpICYmIGhyZWYubWF0Y2goImNvbV9pZD0iKSl7CgoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKC4qKWdvc2hvcC5hc3BcPy4qJC9pLCJodHRwOi8vd3d3LmNvbmVjby5uZXQvZ29zaG9wLmFzcD8iKSArICJtX2lkPSIgKyBwYXJhbXNbIm1faWQiXSArICImc2hvcF9pZD0iICsgcGFyYW1zWyJzaG9wX2lkIl07CgkJCQlzZXRMaW5rKCk7CgoJCQkvL2NvbmVjb+OBruS+oeagvOavlOi8g+ODquOCueODiCjjg6zjg5Pjg6Xjg7zjga7kuIvjga7mlrkpCgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL15odHRwcz86XC9cL3d3dy5jb25lY28ubmV0XC9mcmFtZXMuYXNwLykpewoJCQkJdmFyIHBhcmFtcyA9IGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CgovL+imi+OChOOBmeOBj+S4gOW6puODh+OCs+ODvOODiWh0dHA6Ly93d3cuY29uZWNvLm5ldC9mcmFtZXMuYXNwP01BSU5fVVJMPUFNZHAvQjAwOFY2RDVNMC9yZWY9YXNjX2RmX0IwMDhWNkQ1TTA5Nzc1ODIvP3RhZz1jb25lY28tMjImY3JlYXRpdmU9OTMxMSZjcmVhdGl2ZUFTSU49QjAwOFY2RDVNMCZsaW5rQ29kZT1kZjAmbWU9QU4xVlJRRU5GUkpONSZDQVRFR09SWV9JRD0yODMyMDAwJlNJRD1DTyZTSE9QX0lEPTI4MzImQ09NQ0FUX0lEPTAxODAyMDgwJkNPTV9JRD0xMTMwNjI3Mjk1JkNPTV9OQU1FPSU4M0wlODMlODQlODNtJTgzJTkzKyU4M2UlODMlOTMlODNMJTgxJTVCJTkzZCU5MSVFQytYK01hcmsrSStLUkYrJTgzeiU4MyU4RiU4M0MlODNnJnRhPTU3Ci8vICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmNvbmVjby5uZXQvZnJhbWVzLmFzcD9NQUlOX1VSTD1BTWRwJTJGQjAwOFY2RDVNMCUyRnJlZiUzRGFzYyU1RmRmJTVGQjAwOFY2RDVNMDk3NzU4MiUyRiUzRnRhZyUzRGNvbmVjbyUyRDIyJTI2Y3JlYXRpdmUlM0Q5MzExJTI2Y3JlYXRpdmVBU0lOJTNEQjAwOFY2RDVNMCUyNmxpbmtDb2RlJTNEZGYwJTI2bWUlM0RBTjFWUlFFTkZSSk41JkNBVEVHT1JZX0lEPTI4MzIwMDAmU0lEPUNPJlNIT1BfSUQ9MjgzMiZDT01DQVRfSUQ9MDE4MDIwODAmQ09NX0lEPTExMzA2MjcyOTUmQ09NX05BTUU9JTI1ODNMJTI1ODMlMjU4NCUyNTgzbSUyNTgzJTI1OTMlMkIlMjU4M2UlMjU4MyUyNTkzJTI1ODNMJTI1ODElMjU1QiUyNTkzZCUyNTkxJTI1RUMlMkJYJTJCTWFyayUyQkklMkJLUkYlMkIlMjU4M3olMjU4MyUyNThGJTI1ODNDJTI1ODNnJnRhPTU3CgkJCQkvL2FtYXpvbuOBruWfi+OCgei+vOOBvwoJCQkJaWYoZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJNQUlOX1VSTCIpLm1hdGNoKC9eQU1kcC8pKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChzdHJVcmwsIk1BSU5fVVJMIikucmVwbGFjZSgvQU1kcC8sJ2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2RwJyk7CgovL2h0dHA6Ly93d3cuY29uZWNvLm5ldC9mcmFtZXMuYXNwP01BSU5fVVJMPVJUYy8wMDExMzRjZS4wZmMzYjEzMy9fUlR2cmdqMTAwMDAwNjM/dXJsPWh0dHAlM0ElMkYlMkZpdGVtLnJha3V0ZW4uY28uanAlMkZkdGMlMkY0OTYwOTk5OTY0MTY0JTJGJkNBVEVHT1JZX0lEPTI2ODMwMDAmU0lEPUNPJlNIT1BfSUQ9MjY4MyZDT01DQVRfSUQ9MDE4MDIwODAmQ09NX0lEPTExMzA2MjcyOTUmQ09NX05BTUU9JTgzTCU4MyU4NCU4M20lODMlOTMrJTkxJUVDJThGJUUzJTkzZCU5MSVFQyU4MWkxMCU4QyU4NSU4MWpYK01hcmsrSStLUkYlMkRXSCU4MWklODN6JTgzJThGJTgzQyU4M2clODFqKyUyOFhNQVJLSUtSRldIJTI5JTI4JTgzJTVDJTgzdCU4MyU3RCU4M2IlODN2JThBeSU5M1YlOEVzJThGJUVBJTkzWCUyOSsmdGE9MTgKLy9odHRwOi8vd3d3LmNvbmVjby5uZXQvZnJhbWVzLmFzcD9NQUlOX1VSTD1SVGMlMkYwMDExMzRjZSUyRTBmYzNiMTMzJTJGJTVGUlR2cmdqMTAwMDAwNjMlM0Z1cmwlM0RodHRwJTI1M0ElMjUyRiUyNTJGaXRlbSUyRXJha3V0ZW4lMkVjbyUyRWpwJTI1MkZkdGMlMjUyRjQ5NjA5OTk5NjQxNjQlMjUyRiZDQVRFR09SWV9JRD0yNjgzMDAwJlNJRD1DTyZTSE9QX0lEPTI2ODMmQ09NQ0FUX0lEPTAxODAyMDgwJkNPTV9JRD0xMTMwNjI3Mjk1JkNPTV9OQU1FPSUyNTgzTCUyNTgzJTI1ODQlMjU4M20lMjU4MyUyNTkzJTJCJTI1OTElMjVFQyUyNThGJTI1RTMlMjU5M2QlMjU5MSUyNUVDJTI1ODFpMTAlMjU4QyUyNTg1JTI1ODFqWCUyQk1hcmslMkJJJTJCS1JGJTI1MkRXSCUyNTgxaSUyNTgzeiUyNTgzJTI1OEYlMjU4M0MlMjU4M2clMjU4MWolMkIlMjUyOFhNQVJLSUtSRldIJTI1MjklMjUyOCUyNTgzJTI1NUMlMjU4M3QlMjU4MyUyNTdEJTI1ODNiJTI1ODN2JTI1OEF5JTI1OTNWJTI1OEVzJTI1OEYlMjVFQSUyNTkzWCUyNTI5JTJCJnRhPTE4CgkJCQkvL+alveWkqeOBruWfi+OCgei+vOOBvwoJCQkJfWVsc2UgaWYoZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJNQUlOX1VSTCIpLm1hdGNoKC9eUlRjLykpewoJCQkJCWlmKGdldFJlZGlyZWN0VXJsKHN0clVybCwiTUFJTl9VUkwiKS5tYXRjaCgvKFw/fFwmKXVybD0vKSl7CgkJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGdldFJlZGlyZWN0VXJsKHN0clVybCwiTUFJTl9VUkwiKSwidXJsIik7CgkJCQkJfQoKLy9odHRwOi8vd3d3LmNvbmVjby5uZXQvZnJhbWVzLmFzcD9NQUlOX1VSTD1MU2ZzJTJEYmluJTJGY2xpY2slM0ZpZCUzRGQ3c0FxR3pjRm1BJTI2b2ZmZXJpZCUzRDI2MTgyMCUyRTEyJTI2c3ViaWQlM0QxJTI2dHlwZSUzRDEwJTI2dG1waWQlM0QxMDM3OCUyNlJEJTVGUEFSTTElM0RodHRwJTI1MjUzQSUyNTI1MkYlMjUyNTJGd3d3JTI1MjUyRXNvZm1hcCUyNTI1MkVjb20lMjUyNTJGcHJvZHVjdCUyNTI1NUZkZXRhaWwlMjUyNTJGZXhlYyUyNTI1MkYlMjUyNTVGJTI1MjUyRnNrdSUyNTI1M0QxMjA1MjQ3MSUyNTI1MkYlMjUyNTJEJTI1MjUyRmdpZCUyNTI1M0RQUzA1MDIwMDAwJkNBVEVHT1JZX0lEPTEyMTUwMDAmU0lEPUNPJlNIT1BfSUQ9MTIxNSZDT01DQVRfSUQ9MDE1MDYwMTAmQ09NX0lEPTExMjA4MjA2OTMmQ09NX05BTUU9RnJhY3RhbCUyQkRlc2lnbiUyQkRlZmluZSUyQlI0JTJCQmxhY2slMkJQZWFybCUyQiUyNTI4RkQlMjUyRENBJTI1MkRERUYlMjUyRFI0JTI1MkRCTCUyNTJGWjElMjUyOSZ0YT0xNS4zCgkJCQkvL2xpbmtzaGFyZeWfi+OCgei+vOOBvwoJCQkJfWVsc2UgaWYoZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJNQUlOX1VSTCIpLm1hdGNoKC9eTFNmcy8pKXsKCQkJCQlpZihzdHJVcmwubWF0Y2goLyhcP3xcJilSRF9QQVJNMT0vKSl7CgkJCQkJCS8v5L2V5pWF44GLMumHjeOCqOODs+OCs+ODvOODieOBleOCjOOBpuOBhOOCiwoJCQkJCQlzdHJVcmwgPSBkZWNVUkkoZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJSRF9QQVJNMSIpKTsKCQkJCQl9CgovL2h0dHA6Ly93d3cuY29uZWNvLm5ldC9mcmFtZXMuYXNwP01BSU5fVVJMPVZDc2VydmxldCUyRnJlZmVycmFsJTNGc2lkJTNEMTM5NDAlMjZwaWQlM0Q4NzcwODQzODMlMjZ2YyU1RnVybCUzRGh0dHAlMjUzQSUyNTJGJTI1MkZ3d3clMjUyRWRvc3BhcmElMjUyRWNvJTI1MkVqcCUyNTJGNXNob3BwaW5nJTI1MkZkZXRhaWwlMjU1RnBhcnRzJTI1MkVwaHAlMjUzRmljJTI1M0QzODUxMTklMjUyNndhYWQlMjUzRHZ4MmJBRFVwJkNBVEVHT1JZX0lEPTExMDUwMDAmU0lEPUNPJlNIT1BfSUQ9MTEwNSZDT01DQVRfSUQ9MDE1MDYwMTAmQ09NX0lEPTExMzEyMjgwNTImQ09NX05BTUU9RnVsbW8lMkJRJTJCRUNBMzM2MEIlMjUyREJUJTI1MjhVMyUyNTI5JnRhPTI5LjYKCQkJCS8vbmV0bW5n5Z+L44KB6L6844G/CgkJCQl9ZWxzZSBpZihnZXRSZWRpcmVjdFVybChzdHJVcmwsIk1BSU5fVVJMIikubWF0Y2goL15WQ3NlcnZsZXQvKSl7CgkJCQkJaWYoc3RyVXJsLm1hdGNoKC8oXD98XCYpdmNfdXJsPS8pKXsKCQkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJ2Y191cmwiKTsKCQkJCQl9CgovL2h0dHA6Ly93d3cuY29uZWNvLm5ldC9mcmFtZXMuYXNwP01BSU5fVVJMPWh0dHAlM0ElMkYlMkZzaG9wJTJFaGlrYXJpdHYlMkVuZXQlMkZzaG9wcGluZyUyRmNvbW1vZGl0eSUyRnBsYWxhJTJGNTQxMjY3NDc1MyUyRiUzRnNpZCUzRGMlMjZjaWQlM0RjJkNBVEVHT1JZX0lEPTM0MjUwMDAmU0lEPUNPJlNIT1BfSUQ9MzQyNSZDT01DQVRfSUQ9MDE4MDIwODAmQ09NX0lEPTExMzA2MjcyOTUmQ09NX05BTUU9JTI1QzMlMjVERCUyNUI3JTI1QjAlMjU5M2QlMjU5MSUyNUVDWE1hcmtJS1JGJTI1MkRXSCUyNTI4JTI1Q0UlMjVEQyUyNUIyJTI1QzQlMjUyOSUyQjUwOTRCMDA1JnRhPTE4CgkJCQkvL+mAmuW4uOOBrlVSTAoJCQkJfWVsc2UgaWYoZ2V0UmVkaXJlY3RVcmwoaHJlZiwiTUFJTl9VUkwiKS5tYXRjaCgvXmh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiTUFJTl9VUkwiKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9sLmZhY2Vib29rLmNvbS9sLnBocD91PeODquODgOOCpOODrOOCr+ODiFVSTCZoPS1BUUdpaEJSWiZlbmM9QVpNVTBSN3owMUNfVF9JU01wbUFNSEx5UnBXN1dxamRiOEltM1RQa09iOVk4WEozeFpKZDZtdGNJcU16ZUZpcTFmNHd2dmhidVhkeDlUZm9BcXQ0Nm1xYTBwQVdBYTJKak5iWUhiZloyUE1uUElLdlYtUVliUWJpMS1WUy0yWlNXR0JyRXpFcWlqaEVMMlFKTnhUOXNIVlkmcz0xCgkJCS8vZmFjZWJvb2vjg6rjg4DjgqTjg6zjgq/jg4jpmaTljrsKCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJmYWNlYm9vay5jb20vbC5waHA/dT0iKSA+IC0xICl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1Iik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9jLmtha2FrdS5jb20vZm9yd2FyZGVyL2ZvcndhcmQuYXNweD9TaG9wQ0Q9MzkwNCZQcmRLZXk9SzAwMDA2MTY5ODkmVXJsPWh0dHAlM0ElMkYlMkZrYWtha3UlMkVjb20lMkZqdW1wJTJGYWYlMkYwMDUxJTJGb3V0c2lkZSU1RjMwOTkzJTJFaHRtbCZIYXNoPTNmNmQ1YjBjOWYzOTg5ZDc2YWNkMmUxNjk3YWRhMDQ0CgkJCS8v5L6h5qC844Kz44Og44GuVVJM44KS5LqL5YmN44Gr5L+u5q2jCgkJCX1lbHNlIGlmKGxvY2F0aW9uLmhyZWYuaW5kZXhPZigia2FrYWt1LmNvbS8iKSA+IC0xICYmIGhyZWYuaW5kZXhPZigia2FrYWt1LmNvbS8iKSA8IDEwICYmIGhyZWYuaW5kZXhPZigia2FrYWt1LmNvbS8iKSA+IC0xKXsKCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJilVcmw9aHR0cC8pKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJVcmwiKTsKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9rYWtha3UuY29tL2tzZWFyY2gvcmVkaXJlY3QuYXNwP3U9aHR0cCUzQSUyRiUyRmhiJTJFYWZsJTJFcmFrdXRlbiUyRWNvJTJFanAlMkZoZ2MlMkZnMDBwdWt3MSUyRTRmM2hsNzAzJTJFZzAwcHVrdzElMkU0ZjNobWU0MSUyRiU1RlJUa2NvbTEwMDAwMTExJTNGcGMlM0RodHRwJTI1M0ElMjUyRiUyNTJGaXRlbSUyRXJha3V0ZW4lMkVjbyUyRWpwJTI1MkZqaXNtJTI1MkY0OTUzMTAzMTY4NjE5JTJENDIlMkQ0NDc5JTJEbiUyNTJGJTI2YW1wJTNCbSUzRGh0dHAlMjUzQSUyNTJGJTI1MkZtJTJFcmFrdXRlbiUyRWNvJTJFanAlMjUyRmppc20lMjUyRmklMjUyRjEwMTc3NzExJTI1MkYmaD04MWJkZjQyMGUyOTI4OWM0YzU2MzE3MmM2YmE3ZWNjZAoJCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJyZWRpcmVjdC5hc3AiKSA+IC0xICYmIGhyZWYubWF0Y2goLyhcP3xcJil1PWh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidSIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgkJCX1lbHNlewoJCQl9CgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCgoJCQkvL+ODquODs+OCr+S/ruato+mWi+Wniy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJCQkvL+OCouODleOCo+ODquOCqOOCpOODiOmWoumAoyjjgqLjg5XjgqPjg6rjgqjjgqTjg4jlsILploDns7spLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgovL2h0dHA6Ly9hNS50dWhhbi5uZS5qcC9yLnBocD9zaXRlPWNvbmVjbyZlYz0xNzE1JnBhZ2V0eXBlPWNvbmVjbyZza3U9NDU0OTIxMDAyMDU2MCZjYXQ9MDEwMTEwMTAmcHJpY2U9NTk4ODYmb3A9Y2F0ZWdvcnlfbmFtZSUzRCUyNTgzJTI1NjYlMjU4MyUyNTU4JTI1ODMlMjU0RSUyNTgzJTI1NjclMjU4MyUyNTYyJTI1ODMlMjU3NiUyNTgzJTI1NzAlMjU4MyUyNTVDJTI1ODMlMjU1MiUyNTgzJTI1OTMlMjZpdGVtX2lkJTNEMTEzMDgyOTA2MCUyNnRhJTNEMjAlMjZpdGVtX25hbWUlM0RGTVZEMDUwMk5QJTJCRVNQUklNTyUyQkQ1NTElMjUyRkdYJTJCU1AlMjUyOENlbGVyb24lMkJHMTYxMCUyNTJGMkdCJTI1MkY1MDBHQiUyNTJGRFZEJTI1MkZXaW43JTJCUHJvJTI1MjkmdXJsPWh0dHAlM0ElMkYlMkZ3d3cuY29uZWNvLm5ldCUyRmdvc2hvcC5hc3AlM0ZtX2lkJTNEZWEyZmFmY2RiNDI1MWUxM2Y3YzkxNzJmMGQwODllOTglMjZjb21faWQlM0QxMTMwODI5MDYwJTI2c2hvcF9pZCUzRDE3MTUlMjZjX2lkJTNEMDEwMTEwMTAlMjZnb3Nob3AlM0QxJTI2dGElM0QyMAoJCQkvL2E1LnR1aGFu77yIY29uZWNv44Gn56K66KqN77yJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCWlmKGhyZWYuaW5kZXhPZigiYTUudHVoYW4ubmUuanAiKSA+IC0xICYmIGhyZWYubWF0Y2goIiZ1cmw9aHR0cCIpKXsKLy8JCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8gKltcc1xTXSomdXJsPWh0dHAvLCJodHRwIik7CgoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgoJCQkJc2V0TGluaygpOwovLwkJCQlhbGxMaW5rc1tpXS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgImhlaWdodDphdXRvIWltcG9ydGFudDtiYWNrZ3JvdW5kOm5vbmU7Iik7CgovL3NhbXBsZQovL2h0dHA6Ly9weC5hOC5uZXQvc3Z0L2VqcD9hOG1hdD0xMEZaOEwrOVU4WFBVKzVXUytDMjhQViZhOGVqcHJlZGlyZWN0PWh0dHAlM0ElMkYlMkZpdGVtLnJha3V0ZW4uY28uanAlMkZ0di15YSUy5ZWG5ZOBJTJGCgkJCS8vYTgubmV0PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIuYTgubmV0Iik+LTEpewoJCQkJaWYoaHJlZi5pbmRleE9mKCJhOGVqcHJlZGlyZWN0Iik+LTEpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsImE4ZWpwcmVkaXJlY3QiKTsKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cuYTgubmV0L2NnaS1iaW4vcmVkaXJlY3Q/YXI9aHR0cCUzYSUyZiUyZnd3dy5hOC5uZXQlMmZhcyUyZmFzX3Byb21vJTJmJmE4PWdYVUk3WC1SZkFrY25vRWNub1U2c1JzMFhNMVJmb1VSQm80Uk5vbExtcGpFWTNCeHgKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3JlZGlyZWN0XD9hcj0vKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiYXIiKTsKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9weC5hOC5uZXQvc3Z0L2VqcD9hOG1hdD0xMEJNMk0rN1FNVlcyK01aSSsxNVVaSkwKLy/kv67mraNodHRwOi8vcHguYTgubmV0L3N2dC9lanA/YThtYXQ9KytNWkkrMTVVWkpMCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJhOG1hdD0iKSAmJiBocmVmLm1hdGNoKC9cKy8pKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL2E4bWF0PS4qP1wrLio/XCsvLCJhOG1hdD0/KysiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgoKLy9odHRwOi8vd3d3LmFjY2Vzc3RyYWRlLm5ldC9hdC9jLmh0bWw/cms96Iux5pWw5a2XJnVybD1odHRwJTNBJTJGJTJGd3d3LuOCteOCpOODiC5odG1sJTNGc29ydCUzRDVkJTI2cGFnZSUzRDEKCQkJLy9hY2Nlc3N0cmFkZT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiYWNjZXNzdHJhZGUubmV0LyIpID4gLTEpewoKCQkJCWlmKHN0clVybC5tYXRjaCgiJnVybD1odHRwIikpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9pcy5hY2Nlc3N0cmFkZS5uZXQvY2dpLWJpbi9pc2F0VjIvQWNjZXNzVHJhZGVQL2VudHJ5VjIuY2dpP3JrPTAxMDA0czFzMDA3eHkxJm5pZD1nMTM1NTYxMzUwNCZydXJsPWh0dHAlM0ElMkYlMkZ3d3cuYWNjZXNzdHJhZGUubmUuanAlMkYmbWVkaWE9aHR0cCUzQSUyRiUyRmguYWNjZXNzdHJhZGUubmV0JTJGJmF0c3M9MDEwMDRzMXMwMDd4eTEtM2RlNWI0ZTc1YTVlZjdmNWE4Y2FhOTc1MTk2ZWZiOWEKCQkJCWlmKGhyZWYubWF0Y2goIiZydXJsPWh0dHAiKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwicnVybCIpOwoKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9jbGljay5hZGxhbnRpcy5qcC9hZC9jbGljaz9haWQ9TnpRMk1EY3clMjUwQSZhdD0yJmNpZD1OVEF3TkRZJTI1M0QlMjUwQSZjb252X2lkPU5EUXhORFklMjUzRCUyNTBBJnVybD1odHRwJTI1M0ElMjUyRiUyNTJGYWRmLnNoaW5vYmkuanAlMjUyRnIlMjUyRjcyYjg3ZDQ2NzczOWZjZTVlNDZmNzE3N2ViMDE0ZTM3JTI1M0Z1dG1fc291cmNlJTI1M0RhZG1jbXBueSUyNTI2dXRtX21lZGl1bSUyNTNEYmFubmVyJTI1MjZ1dG1fY2FtcGFpZ24lMjUzRDcyODkwJnppZD1tWXQ5VTk4dTVCYzc5T1FZc2RQdFh3JTNEJTNECgkJCS8vYWRsYW50aXM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJhZGxhbnRpcy5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJ1cmw9IikgPiAtMSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmwiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2FtYW5haW1hZ2VzLmNvbS9sc2dhdGU/bHN0aWQ9cE02YjBqZFFnVk0tWTlpYkZnVGU2WnYxTjBvRDJuWXVNQSZsc3VybD1odHRwJTNBJTJGJTJGYW1hbmFpbWFnZXMuY29tJTJGbHAlMkZjcmVhdGl2ZSUyRmFmcGwxMzAyMjUuaHRtbCUzRnJ0bSUzRGFkX2xzJTI2d2FhZCUzREpHcEQxUmVaCgkJCS8vYW1hbmFpbWFnZXM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJhbWFuYWltYWdlcy5jb20iKSA+IC0xICYmIGhyZWYuaW5kZXhPZigibHN1cmw9aHR0cCIpID4gLTEpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwibHN1cmwiKTsKCQkJCXNldExpbmsoKTsKCgoJCQkvL2ZjMj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJibG9nLmZjMi5jb20vZ29vZHMvIikgPiAtMSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLyhibG9nXC5mYzJcLmNvbVwvZ29vZHNcL1x3K1wvKS4rJC9pLCAiJDEiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3d3dy5nb29nbGUuY28uanAvYWNsaz9zYT1sJmFpPUNzY3ZLc2hzNFUtZTZKTUhBbEFYZjc0RzRCSy1McTVjRXY3MnBqSEhIdnZPeXZnRUlCQkFCS0FWUTB0TDJvQU5naWN2QmhPd1RvQUdaaXMzYkE4Z0JCNmtDeE9ncXQ5SGpSRDZxQkNWUDBOWWZ1SmMzeFR3RF9ZUFkzM0NHMkZPZUJNRVBSWTR0Y2hPa214XzlzYUJKcE44d3dBVUZvQVltZ0FmUDliSWtrQWNCNEJLcWdLblYtN0M2ejU4QiZzaWc9QU9ENjRfMUVSTElyMmxpX09VNWpldl9nRjIzTHlNa3VBdyZjdHlwZT01JnJjdD1qJnE9JUUzJTgyJUFEJUUzJTgzJUJDJUUzJTgzJTlDJUUzJTgzJUJDJUUzJTgzJTg5JUUzJTgxJUFFJUU5JUFCJTk4JUUzJTgxJTk1JnZlZD0wQ0NzUXdnOCZhZHVybD1odHRwOi8vcHJvZHVjdC5yYWt1dGVuLmNvLmpwL3Byb2R1Y3QvLS85ZWQ2YzdlYWQ5NGUzZDA4N2ZhNGY4ODg5NmNkNzI1Yy8lM0ZzYzJpZCUzRGdtY18yMTEyMTNfOWVkNmM3ZWFkOTRlM2QwODdmYTRmODg4OTZjZDcyNWMlMjZzY2lkJTNEc19rd2FfcGxhJmNhZD1yamEKCQkJLy9nb29nbGVBZD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8JCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoImdvb2dsZWFkcy5nLmRvdWJsZWNsaWNrLm5ldC9hY2xrPyIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJhZHVybD1odHRwIikgPiAtMSl7CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL2h0dHBzPzpcL1wvKHd3dy4pP2dvb2dsZShhZHMpPy4vKSl7CgkJCQlpZihocmVmLmluZGV4T2YoIiZhZHVybD1odHRwIikgPiAtMSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiYWR1cmwiKTsKCQkJCQlzdHJVcmwgPSBzdHJVcmwucmVwbGFjZSgvXD9hZGlkPS4qJC8sIiIpOwoKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHBzOi8vd3d3Lmdvb2dsZS5jby5qcC91cmw/c2E9aSZyY3Q9aiZxPSZlc3JjPXMmc291cmNlPWltYWdlcyZjZD0mY2FkPXJqYSZ1YWN0PTgmZG9jaWQ9UDVTcnIzb2NPN0xVbE0mdGJuaWQ9ZHdyZkhnMTVJX1dIbU06JnZlZD0wQ0FFUWp4dyZ1cmw9aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uY28uanAlMkZULW1hcnQlMjVFNiUyNTk3JTI1QTUlMjVFNiUyNTlDJTI1QUMtJTI1RTMlMjU4MiUyNUFEJTI1RTMlMjU4MyUyNUJDJTI1RTMlMjU4MyUyNTlDJTI1RTMlMjU4MyUyNUJDJTI1RTMlMjU4MyUyNTg5JTI1RTMlMjU4MiUyNUI5JTI1RTMlMjU4MiUyNUJGJTI1RTMlMjU4MyUyNUIzJTI1RTMlMjU4MyUyNTg5LSUyNUU5JTI1QUIlMjU5OCUyNUUzJTI1ODElMjU5NSUyNUU4JTI1QUElMjVCRiUyNUU3JTI1QUYlMjU4MCUyNUU0JTI1QkIlMjU5OCUyNUUzJTI1ODElMjU4RC0lMjVFNiUyNUE1JTI1QkQlMjVFNSUyNTk5JTI1QTgtJTI1RTMlMjU4MiUyNUI3JTI1RTMlMjU4MyUyNUIzJTI1RTMlMjU4MiUyNUJCJTI1RTMlMjU4MiUyNUI1JTI1RTMlMjU4MiUyNUE0JTI1RTMlMjU4MiUyNUI2JTI1RTMlMjU4MyUyNUJDJTI1RTQlMjVCOCUyNUE2JTI1RTglMjVBMSUyNThDJTI1RTglMjVCQyUyNUI4JTI1RTUlMjU4NSUyNUE1JTI1RTUlMjU5MyUyNTgxJTJGZHAlMkZCMDBIVjhHSVBVJmVpPVZDODRVLXVfQ1lUVmtBV0kzSURnRHcmcHNpZz1BRlFqQ05Fd2Y4OTVscTEydVFwYi15UzdubmVYR2JyOGFRJnVzdD0xMzk2Mjc3NDU4Mzk3MTQ3CgkJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoIiZ1cmw9aHR0cCIpID4gLTEpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL3JlZmVyLmlzdG9ja3Bob3RvLmNvbS90YS5waHA/bGM9MDc2NzUwMDQxMDM4MDA0NjUxJmF0aWQ9MTI0MDcxJTdDQmFubmVySUQlM0QxMjQwNzElN0NSZWZlcnJhbE1ldGhvZCUzREJhbm5lciZ1cmw9aHR0cCUzQSUyRiUyRm5paG9uZ28uaXN0b2NrcGhvdG8uY29tCgkJCS8vaXN0b2NrcGhvdG89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIuaXN0b2NrcGhvdG8uIikgPiAtMSAmJiBocmVmLm1hdGNoKC8oXD98XCYpdXJsPWh0dHAvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmwiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2xzLmotYS1uZXQuanAvP2E9MzY4ODImZD00OTQ3MTQmdXJsPWh0dHAlM0ElMkYlMkZ3d3clMkUxMGtlaXlhJTJFY29tJTJGaXRlbSUyRjUwODMlMkVodG1sCgkJCS8vSmFuZXTvvIhjb25lY2/jgafnorroqo3vvIk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIuai1hLW5ldC5qcCIpID4gLTEgJiYgaHJlZi5tYXRjaCgiJnVybD1odHRwIikpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cubGlua3NoYXJlLm5lLmpwL3NjbGFuZC9tZ20vP2lkPWd6ZlNYOSpESTVrCgkJCS8vbGlua3NoYXJlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiLmxpbmtzaGFyZS4iKSA+IC0xICYmIGhyZWYuaW5kZXhPZigiaWQ9IikgPiAtMSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siaWQiXSwiIikucmVwbGFjZSgiaWQ9IiwiIik7CgoJCQkJc2V0TGluaygpOwoKCQkJLy9saW5rc3luZXJneSBsaW5rc2hhcmXjgonjgZfjgYTvvIhjb25lY2/jgarjganjgafnorroqo3vvIk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIubGlua3N5bmVyZ3kuIikgPiAtMSAmJiBocmVmLmluZGV4T2YoIlJEX1BBUk0xPSIpID4gLTEpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiUkRfUEFSTTEiKTsKCgkJCQlzZXRMaW5rKCk7CgovL2h0dHBzOi8vd3d3Mi5saXZlYWRzLmpwL3dpZGdldHNfc3JjL2NjLnBocD9jPXZzJTNEMjQzOTg3MSUyNmFtcCUzQnZwJTNEODc2NDg5OTU0JTI2YW1wJTNCdmNwdG4lM0RmZWI5MmVjMV8yXzEwNjAwMSUyNmFtcCUzQnZjX3VybCUzRGh0dHAlMjUzQSUyNTJGJTI1MkYKCQkJLy9saXZlYWRzLmpwPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoInd3dzIubGl2ZWFkcy5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJ2Y191cmwiKSA+IC0xKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvJmFtcDsvZywgIiYiKTsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKHN0clVybCwidmNfdXJsIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9hbHRmYXJtLm1lZGlhcGxleC5jb20vYWQvY2svMTA1OTEtNjIwNDUtMjY2MTYtNTg4P0FDRD1YUXU0QzNLUjBPYy1RU011T09rV3haa3h6bExhNlJpdWJ3JkRVUkw9aHR0cCUzQSUyRiUyRmFsaWVud2FyZS5qcCUyRgovL2h0dHA6Ly9hZGZhcm0ubWVkaWFwbGV4LmNvbS9hZC9jay8xMDU5MS0xNzMzOTItMzAxNjUtMD9BQ0Q9MTA1OTExNzMzOTIzMDE2NTAmIW1wcm89aHR0cDovL2x0LmRlbGwuY29tL2x0L2x0LmFzcHg/Q0lEPTIxNTAxJkxJRD00OTk2ODQ4JkRHQz1MUyZER1NlZz1ESFMmQUNEPUdTQVhFTmlNY3ZJLUNWNDM4cFF6OUIzY29HbU5tMFZLZWcmRFVSTD1odHRwJTNBJTJGJTJGd3d3LmRlbGwuY29tJTJGanAlMkZwJTJGZGVhbHMlMjMhZGxwZ2lkJTNEbW9iaWxpdHktbGFwdG9wLWRlYWxzCgoJCQkvL21lZGlhcGxleC5jb20o5qSc57Si44GZ44KL44Go44Km44Kj44Or44K544GM44Gp44GG44Gu44Go44GL5Ye644Gm44GP44KL44Oq44OA44Kk44Os44Kv44OI44K144Kk44OIKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goIi5tZWRpYXBsZXguY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgiRFVSTD0iKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiRFVSTCIpOwoJCQkJfQoKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2MuYWYubW9zaGltby5jb20vYWYvYy9jbGljaz9hX2lkPTQyMDg1OSZwX2lkPTE3MCZwY19pZD0xODUmcGxfaWQ9NDA2MiZ1cmw9aHR0cDovL3d3dy5hbWF6b24uY28uanAvZHAvQjAwME1HQlBOSQoJCQkvL+OCguOBl+OCguOCouODleOCo+ODquOCqOOCpOODiD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJjLmFmLm1vc2hpbW8uY29tIikgJiYgaHJlZi5tYXRjaCgidXJsPSIpKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vaW50ci5zaGlub2JpLmpwL0xhbmRpbmdIYW5kbGVyP25tPTQ2MDk1JmNvbW1lcmNpYWxfaWQ9MgoJCQkvL+W/jeiAhWFkbWF4PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgic2hpbm9iaS5qcC9MYW5kaW5nSGFuZGxlciIpKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvXD8uKiQvLCIiKTsKCQkJCXNldExpbmsoKTsKCgkJCS8vdHJhZmZpY2dhdGU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoc3RyVXJsLmluZGV4T2YoInRyYWZmaWNnYXRlLm5ldCIpID4gLTEpewoKLy9odHRwOi8vYWQyLnRyYWZmaWNnYXRlLm5ldC90L3IvMTgvNzAyLzQ0NjYyLzAvLS9odHRwczovL3Nob3AuZWxlY29tLmNvLmpwL1N0b3JlL1Byb2R1Y3QuYXNweD9KYW5DZD00OTUzMTAzMDYyODQ5CgkJCQlpZihocmVmLm1hdGNoKCIvLS9odHRwIikpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvLipcLy1cL2h0dHAvLCJodHRwIik7CgkJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vYWQyLnRyYWZmaWNnYXRlLm5ldC90L3IvMS80NS8xNzU5NjJfMTk5NzAyLzAvVFNUT1hQejE0VE5iUG5oMTlZMnRWX29ERnI2UkxsTgovL+S/ruato2h0dHA6Ly9hZDIudHJhZmZpY2dhdGUubmV0L3Qvci8xLzQ1LzE3NTk2Ml8xOTk3MDIvMC8KCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3RyYWZmaWNnYXRlLm5ldFwvdFwvclwvLykpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKC4qdHJhZmZpY2dhdGUubmV0XC90XC9yXC8uKj9cLy4qP1wvLio/XC8uKj9cLykuKiQvaSwiJDEiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgoJCQkvL3RyYWZmaWNnYXRl44Gud2ViYW50ZW5uYShnYeOBjOW6g+WRiuS4u+aDheWgsSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy9odHRwOi8vdHIud2ViYW50ZW5uYS5pbmZvL3JkP3dhYWQ9dk9BbXhDdHYmZ2E9V0F5bExULTEKCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgidHIud2ViYW50ZW5uYS5pbmZvIikpewoJCQkJaWYoaHJlZi5tYXRjaCgiJmdhPSIpKXsKCQkJCQkvL+S9leaVheOBi+ODkeODqeODoeODvOOCv+OBlOOBqOa2iOOBmeOBqOOCqOODqeODvOOBjOWHuuOCi+OBruOBp+aVsOWApOOBoOOBkeWJiumZpAoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siZ2EiXSwiIik7CgoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL2NrLmpwLmFwLnZhbHVlY29tbWVyY2UuY29tL3NlcnZsZXQvcmVmZXJyYWw/c2lkPTEzOTQwJnBpZD04NzcwODQzODMmdmNfdXJsPWh0dHA6Ly93d3cuZG9zcGFyYS5jby5qcC81c2hvcHBpbmcvZGV0YWlsX3BhcnRzLnBocD9pYz04MDU1MiZ3YWFkPXZ4MmJBRFVwCi8vaHR0cDovL2F0cS5jay52YWx1ZWNvbW1lcmNlLmNvbS9zZXJ2bGV0L2F0cS9yZWZlcnJhbD9zaWQ9MjIxOTQ0MSZwaWQ9ODc3NTEwNzUzJnZjcHRuPWF1Y3QvcC9sdnF6OG92SGQ2MHVoS0ZndXBjRm5nLS0mdmNfdXJsPWh0dHAlM0ElMkYlMkZwYWdlMy5hdWN0aW9ucy55YWhvby5jby5qcCUyRmpwJTJGYXVjdGlvbiUyRmM0MjQ0NDU2NDYKCQkJLy92YWx1ZWNvbW1lcmNl77yIY29uZWNv44Gn56K66KqN77yJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigidmFsdWVjb21tZXJjZS5jb20vIikgPiAtMSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJaWYoaHJlZi5pbmRleE9mKCJ2Y191cmwiKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ2Y191cmwiKTsKCQkJCX0KCi8vaHR0cDovL2NrLmpwLmFwLnZhbHVlY29tbWVyY2UuY29tL3NlcnZsZXQvcmVmZXJyYWw/dmE9MjI2Njc3MyZzaWQ9MzA5MTM0NCZwaWQ9ODgyMjYwMTc3JnZjaWQ9YkdtVV9BSGpsbHY4NE10LWZaNHdlREl0amNPbW1HY0FGYUpzc3VjcHdkejlrRjc1anFCRG1RJnZjcHViPTAuNjIxNDAxNzI5ODkzMDQyCgkJCQkvL3ZhbHVlY29tbWVyY2XkuI3lrozlhago54Sh6aeE44Gg44GR44Gp5LiN6KaB44Gq44OR44Op44Oh44O844K/44KS5YmK6ZmkKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQkJLy92Y191cmzjga7mjIflrprjgYzjgarjgYTjgoLjga7jga9waWQo44Om44O844K244O8SUTvvJ8p44Gob2ZmZXJpZCjllYblupdJRO+8nynjgavjgojjgaPjgabjgqrjg6rjgrjjg4rjg6vjg6rjg7Pjgq/jgbjpo5vjgbbmqKHmp5gKCQkJCWlmKGhyZWYuaW5kZXhPZigidmE9IikgPiAtMSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidmEiXSwiIik7CgkJCQl9CgkJCQlpZihocmVmLmluZGV4T2YoInZjaWQ9IikgPiAtMSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidmNpZCJdLCIiKTsKCQkJCX0KCQkJCWlmKGhyZWYuaW5kZXhPZigidmNwdWI9IikgPiAtMSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidmNwdWIiXSwiIik7CgkJCQl9CgoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vaXRyYWNrMi52YWx1ZWNvbW1lcmNlLm5lLmpwL2NnaS1iaW4vMjUwNzE2NS92Y19lbnRyeS5wbD9JVFJBQ0tfSU5GTz0wODgyMjYwMTYzMDIzOTI2MjcxNDA2MDIwOTUyMTQmQ09PS0lFX1BBVEg9L2NnaS1iaW4vMjUwNzE2NS8mQ09PS0lFX0RPTUFJTj0udmFsdWVjb21tZXJjZS5uZS5qcCZWSUVXX1VSTD1odHRwJTNBJTJGJTJGd3d3LnRha2FzaGltYXlhLmNvLmpwJTJGc2hvcHBpbmclMkZmb29kJTJGMDQwMDAwMDExNSUyRiZSRUZFUlJFUj1hSFIwY0RvdkwyTnJMbXB3TG1Gd0xuWmhiSFZsWTI5dGJXVnlZMlV1WTI5dEx3JkNPT0tJRV9FWFBJUkVTPUZyaSwlMjAwMSUyMEF1ZyUyMDIwMTQlMjAwOTo1MjoxNCUyMEdNVCZ2YT0yMzkyNjI3JnZzPTMwOTEzNDQmdnA9ODgyMjYwMTYzCi8vaHR0cDovL3d3dy5kYWltYXJ1LW1hdHN1emFrYXlhLmpwL3ZjZW50cnkvP0lUUkFDS19JTkZPPTA4ODIyNjAxNzcwMjI2Njc3MzE0MDYwMjA5NTcyMiZDT09LSUVfUEFUSD0vJkNPT0tJRV9ET01BSU49d3d3LmRhaW1hcnUtbWF0c3V6YWtheWEuanAmVklFV19VUkw9aHR0cCUzQSUyRiUyRnd3dy5kYWltYXJ1LW1hdHN1emFrYXlhLmpwJTJGJlJFRkVSUkVSPWFIUjBjRG92TDJGa0xtcHdMbUZ3TG5aaGJIVmxZMjl0YldWeVkyVXVZMjl0THcmQ09PS0lFX0VYUElSRVM9RnJpLCUyMDAxJTIwQXVnJTIwMjAxNCUyMDA5OjU3OjIyJTIwR01UJnZzPTMwOTEzNDQmdnA9ODgyMjYwMTc3JnZhPTIyNjY3NzMKCQkJLy92YWx1ZWNvbW1lcmNlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigidmFsdWVjb21tZXJjZS5uZS5qcCIpID4gLTEKCQkJICAgICAgfHwgaHJlZi5pbmRleE9mKCJkYWltYXJ1LW1hdHN1emFrYXlhIikgPiAtMSl7CgkJCQlpZihocmVmLmluZGV4T2YoIlZJRVdfVVJMIikgPiAtMSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiVklFV19VUkwiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgoJCQl9ZWxzZXsKCgkJCX0KCgoKCgkJCS8vUlNTLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkvL+WfuuacrOeahOOBq+OBr+WvvuW/nOOBl+OBquOBhCjjgIxSU1PluoPlkYrliYrpmaTnpL7jgI3jgarjganjgZnjgafjgavluoPlkYrliYrpmaTjgZfjgabjgY/jgozjgovjgrXjg7zjg5PjgrnjgYzjgYLjgovjgZ/jgoEpCgoKLy9odHRwOi8vcHNyZC55YWhvby5jby5qcC9QQUdFPVAvTE9DPVBSRC9SPTEvTz1QL01JRD1zdG9yZS13YXgvVEJJRD0vU0lHPTEyNDN0dmFsNi9FWFA9MTIwNjEwMTI0My8qLWh0dHAlM0EvL3JkLnN0b3JlLnlhaG9vLmNvLmpwL3dheC9mdS1lc2EtMTBjZS5odG1sCgkJCS8veWFob2/jga5SU1PvvJ89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJaWYoaHJlZi5pbmRleE9mKCJ5YWhvby5jby5qcCIpID4gMCl7CgkJCQlpZihocmVmLm1hdGNoKCIvKi1odHRwIikpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvLipcL1wqXC1odHRwLywiaHR0cCIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgkJCS8v44Gd44Gu5LuWOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6CgoJCQl9ZWxzZXsKCQkJfQoKCgoJCQkvL+OCteOCpOODiOWIpS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCS8vU2hvcOezuzo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6CgoJCQkvL2FtYXpvbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQlpZihocmVmLm1hdGNoKC9eaHR0cHM/OlwvXC8od3d3Lik/YW1hem9uLihqcHxjby5qcHxjb218Y2F8Y29tLmJyfGNvbS5teHxjby51a3xkZXxmcnxpdHxlc3xjbnxpbnxjb20uYXUpLykpewoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9wcm9kdWN0L2ltYWdlcy80MDQ4OTE5Mzc3L3JlZj1kcF9vdGhlcnZpZXdzX3pfMD9pZT1VVEY4JmltZz0wJnM9Ym9va3MKCQkJCS8v5ZWG5ZOB55S75YOP44Gu5YiH44KK5pu/44GIVVJM44Gg44Gj44Gf44KJ6Zmk5aSWCgkJCQlpZihocmVmLm1hdGNoKCIvZ3AvcHJvZHVjdC9pbWFnZXMvIikpewoJCQkJCS8v5L2V44KC44GX44Gq44GECgovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwLy9yZWY9YXNfc2xfcGRfdGZfbGM/dGFnPWE4LWFmZmktNjI0OTgtMjImY2FtcD0xJmNyZWF0aXZlPTEmbGlua0NvZGU9dXIxJnJlZi1yZWZVUkw9aHR0cCUzQSUyRiUyRnJjbS1qcC5hbWF6b24uY28uanAlMkYKCQkJCS8vcmNtLWpwLmFtYXpvbgoJCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvYW1hem9uLihqcHxjby5qcHxjb218Y2F8Y29tLmJyfGNvbS5teHxjby51a3xkZXxmcnxpdHxlc3xjbnxpbnxjb20uYXUpXC9cLy8pKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLyguKi5hbWF6b24uLio/XC8pXC8oLiokKS9pLCIkMSIpOwoKLy9odHRwOi8vYWZmaWxpYXRlLmFtYXpvbi5jby5qcC9ncC9yZWRpcmVjdC5odG1sL3JlZj1hbWJfbGlua184NDM5MzQ5Nl8xP19lbmNvZGluZz1VVEY4JmxvY2F0aW9uPWh0dHAlM0ElMkYlMkZ3d3cuYW1hem9uLmNvLmpwJTJGYiUzRm5vZGUlM0Q0NjUzOTImdG9rZW49MEFFMURGQUNDOTU0RjkxOTg2MDc0NTA0RjU3QzEzNjJDODVGQjZFOCZwZl9yZF9tPUFOMVZSUUVORlJKTjUmcGZfcmRfcz1jZW50ZXItMyZwZl9yZF9yPSZwZl9yZF90PTUwMSZwZl9yZF9wPSZwZl9yZF9pPWFzc29jX21haW4KCQkJCS8vYWZmaWxpYXRlLmFtYXpvbi5jby5qcAoJCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiYWZmaWxpYXRlLmFtYXpvbiIpICYmIGhyZWYubWF0Y2goImxvY2F0aW9uPSIpKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJsb2NhdGlvbiIpOwoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9zL3JlZj1uYl9zYl9ub3NzP19fbWtfamFfSlA944Kr44K/44Kr44OKJnVybD1zZWFyY2gtYWxpYXM9dmlkZW9nYW1lcyZwY3Qtb2ZmPTIwLSZmaWVsZC1rZXl3b3Jkcz3jg6Ljg7Pjg4/jg7MKLy/mnIDlsI9VUkxodHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9mZWF0dXJlLmh0bWwvP2RvY0lkPTMwNzcxMDUyNjYKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9mZWF0dXJlLmh0bWwvcmVmPWFtYl9saW5rXzYyNTI0NDA5XzE/aWU9VVRGOCZkb2NJZD0zMDc3MTA1MjY2JnBmX3JkX209QU4xVlJRRU5GUkpONSZwZl9yZF9zPXJpZ2h0LTMmcGZfcmRfcj0xNUpYUlc5NU5UQTFIUjFIVEZCSiZwZl9yZF90PTE0MDEmcGZfcmRfcD0xMDg4NzcwMDkmcGZfcmRfaT0zMDc3MTA1NTY2JnRhZz1qZ3B0bzEtMjIKCQkJCS8v5LuK5bm05LiA55Wq5aOy44KM44Gf44Op44Oz44Kt44Oz44KwCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJncC9mZWF0dXJlLmh0bWwiKSAmJiBocmVmLm1hdGNoKC9cPy8pKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyhmZWF0dXJlLmh0bWwpLiokL2ksICIkMS8/ZG9jSWQ9IiArIHBhcmFtc1siZG9jSWQiXSk7CgovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvNDA0NzMxODc1Mi9yZWY9YXNfbGlfdGZfdGw/aWU9VVRGOCZjYW1wPTI0NyZjcmVhdGl2ZT0xMjExJmNyZWF0aXZlQVNJTj00MDQ3MzE4NzUyJmxpbmtDb2RlPeOCouODleOCo+ODquOCqOOCpOODiElE44GL44KC44GX44KM44Gq44GEJnRhZz3jgr/jgrDlkI0KCQkJCS8v44Kq44OV44Kh44O844Oq44K544OICgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJncC9vZmZlci1saXN0aW5nLyIpKXsKCQkJCQl2YXIgc2V0UGFnZSA9ICIiOwoJCQkJCXZhciBzZXRDb25kID0gIiI7CgkJCQkJdmFyIHNldFNQRmlsdGVyID0gIiI7CgoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyhvZmZlci1saXN0aW5nKVwvKFx3KykuKiQvaSwgIiQxLyQyLyIpOwoKCQkJCQkvL+ODmuODvOOCuOenu+WLleeUqOODkeODqeODoeODvOOCvwoJCQkJCWlmKGhyZWYubWF0Y2goInN0YXJ0SW5kZXgiKSl7CgkJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJCXNldFBhZ2UgPSAiP3N0YXJ0SW5kZXg9IiArIHBhcmFtc1sic3RhcnRJbmRleCJdOwoJCQkJCQlzdHJVcmwgPSBzdHJVcmwgKyBzZXRQYWdlOwoJCQkJCX0KCi8v5q2j44GX44GEaHR0cDovL3d3dy5hbWF6b24uY28uanAvZ3Avb2ZmZXItbGlzdGluZy9CMDBDUzlMT01ZLz9jb25kaXRpb249dXNlZAovL+ato+OBl+OBhGh0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvQjAwQ1M5TE9NWS8/Y29uZGl0aW9uPW5ldwovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvQjAwQ1M5TE9NWS9zcj0vcWlkPS9yZWY9b2xwX3RhYl9uZXc/aWU9VVRGOCZjb2xpZD0mY29saWlkPSZjb25kaXRpb249bmV3Jm1lPSZxaWQ9JnNlbGxlcj0mc3I9Ci8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvZ3Avb2ZmZXItbGlzdGluZy9CMDBDUzlMT01ZL3NyPS9xaWQ9L3JlZj1vbHBfdGFiX2FsbD9pZT1VVEY4JmNvbGlkPSZjb2xpaWQ9JmNvbmRpdGlvbj1hbGwmbWU9JnFpZD0mc2VsbGVyPSZzaGlwUHJvbW9GaWx0ZXI9JnNvcnQ9c2lwJnNyPQoJCQkJCS8v44GZ44G544Gm44CB5paw5ZOB44CB5Lit5Y+k44Gu5YiH44KK5pu/44GIY29uZGl0aW9uPXVzZWQKCQkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpY29uZGl0aW9uPS8pKXsKCQkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkJaWYoc3RyVXJsLm1hdGNoKC9cPy8pKXsKCQkJCQkJCXNldENvbmQgPSAiJmNvbmRpdGlvbj0iICsgcGFyYW1zWyJjb25kaXRpb24iXTsKCQkJCQkJfWVsc2V7CgkJCQkJCQlzZXRDb25kID0gIj9jb25kaXRpb249IiArIHBhcmFtc1siY29uZGl0aW9uIl07CgkJCQkJCX0KCQkJCQkJc3RyVXJsID0gc3RyVXJsICsgc2V0Q29uZDsKCQkJCQl9CgovL+ato+OBl+OBhGh0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvQjAwQ1M5TE9NWS8/Y29uZGl0aW9uPWFsbCZzaGlwUHJvbW9GaWx0ZXI9MQovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvQjAwQ1M5TE9NWS9zcj0vcWlkPS9yZWY9b2xwX3Nzc19hbGw/aWU9VVRGOCZjb2xpZD0mY29saWlkPSZjb25kaXRpb249YWxsJm1lPSZxaWQ9JnNlbGxlcj0mc2hpcFByb21vRmlsdGVyPTEmc29ydD1zaXAmc3I9CgkJCQkJLy9hbWF6b27jga7jgb/ooajnpLooc2hpcFByb21vRmlsdGVy44GMMeOBoOOBqGFtYXpvbueZuumAgeOBruOBv+OBruaooeanmCkKCQkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpc2hpcFByb21vRmlsdGVyLykpewoJCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCQlpZihzdHJVcmwubWF0Y2goL1w/LykpewoJCQkJCQkJc2V0U1BGaWx0ZXIgPSAiJnNoaXBQcm9tb0ZpbHRlcj0iICsgcGFyYW1zWyJzaGlwUHJvbW9GaWx0ZXIiXTsKCQkJCQkJfWVsc2V7CgkJCQkJCQlzZXRTUEZpbHRlciA9ICI/c2hpcFByb21vRmlsdGVyPSIgKyBwYXJhbXNbInNoaXBQcm9tb0ZpbHRlciJdOwoJCQkJCQl9CgkJCQkJCXN0clVybCA9IHN0clVybCArIHNldFNQRmlsdGVyOwoJCQkJCX0KCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvZ3AvYmVzdHNlbGxlcnMvdmlkZW9nYW1lcy9yZWY9cGRfdHNfemdjX3ZnX3ZpZGVvZ2FtZXNfbW9yZT9wZl9yZF9wPTEyNDM4Mzg0OSZwZl9yZF9zPXJpZ2h0LTUmcGZfcmRfdD0xMDEmcGZfcmRfaT00ODk5ODYmcGZfcmRfbT1BTjFWUlFFTkZSSk41JnBmX3JkX3I9MTdXUjQxMU5HSFg3MTFXRVZTVEYKCQkJCS8v44OZ44K544OI44K744Op44O8CgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCIvYmVzdHNlbGxlcnMvIikgJiYgaHJlZi5tYXRjaCgicmVmPSIpKXsKCQkJCQl2YXIgc3RyUGcgPSAiIjsKCQkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpcGc9LykpewoJCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCQlzdHJQZyA9ICI/cGc9IiArIHBhcmFtc1sicGciXTsKCQkJCQl9CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9yZWY9LiokLywgIiIpOwoJCQkJCXN0clVybCA9IHN0clVybCArIHN0clBnOwoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9PVVRET09SLVBST0RVQ1RTKCVFMyU4MiVBMiVFMyU4MiVBNiVFMyU4MyU4OCVFMyU4MyU4OSVFMyU4MiVBMiVFMyU4MyU5NyVFMyU4MyVBRCVFMyU4MyU4MCVFMyU4MiVBRiVFMyU4MyU4NCkvYi9yZWY9ZHBfYXBwYXJlbF9ieWxpbmVfZXR5P19lbmNvZGluZz1VVEY4Jm5vZGU9MjMzMTY0NjA1MQoJCQkJLy/oqbLlvZPlupfoiJfjga7llYblk4HkuIDopqcKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL1wvYlwvLykgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKW5vZGU9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvKFwvYlwvKS4qJC9pLCAiJDE/bm9kZT0iICsgcGFyYW1zWyJub2RlIl0pOwoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9zL3JlZj1zOV9kbmF2X2J3X2lyMDNfcz9fX21rX2phX0pQPSU4MyU0QSU4MyU1RSU4MyU0QSU4MyU2OSZub2RlPTIzODY4NzAwNTEmc2VhcmNoLWFsaWFzPW1vYmlsZS1hcHBzJmZpZWxkLXRoZW1lX2Jyb3dzZS1iaW49MjM4ODA2MDA1MSZwZl9yZF9tPUFOMVZSUUVORlJKTjUmcGZfcmRfcz1jZW50ZXItMTAmcGZfcmRfcj0wRDJEN0Q4TUJIOUQ2UlJCV0EzWCZwZl9yZF90PTEwMSZwZl9yZF9wPTE1MjY0OTYwOSZwZl9yZF9pPTIzODExMzAwNTEKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9zL3JlZj1zOV9kbmF2X2J3X2lyMDJfcz9fX21rX2phX0pQPSU4MyU0QSU4MyU1RSU4MyU0QSU4MyU2OSZub2RlPTIzODY4NzAwNTEmc2VhcmNoLWFsaWFzPW1vYmlsZS1hcHBzJmZpZWxkLXRoZW1lX2Jyb3dzZS1iaW49MjM4ODA1OTA1MSZwZl9yZF9tPUFOMVZSUUVORlJKTjUmcGZfcmRfcz1jZW50ZXItMTAmcGZfcmRfcj0wRDJEN0Q4TUJIOUQ2UlJCV0EzWCZwZl9yZF90PTEwMSZwZl9yZF9wPTE1MjY0OTYwOSZwZl9yZF9pPTIzODExMzAwNTEKCQkJCS8v44Ki44Oe44K+44Oz44Ki44OX44Oq44Gu44K444Oj44Oz44Or77yfCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9cL3NcLy8pICYmIGhyZWYubWF0Y2goLyhcP3xcJilub2RlPS8pKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoKCQkJCQl2YXIgc3RyQW16RmllbGQgPSAiIjsKCgkJCQkJaWYoaHJlZi5tYXRjaCgvZmllbGQtdGhlbWVfYnJvd3NlLWJpbj0vKSl7CgkJCQkJCXN0ckFtekZpZWxkID0gIiZmaWVsZC10aGVtZV9icm93c2UtYmluPSIgKyBwYXJhbXNbImZpZWxkLXRoZW1lX2Jyb3dzZS1iaW4iXTsKCQkJCQl9CgoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyhcL3NcLykuKiQvaSwgIiQxP25vZGU9IiArIHBhcmFtc1sibm9kZSJdICsgc3RyQW16RmllbGQpOwoKLy/mraPjgZfjgYTjgqLjg4njg6zjgrlodHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9hdy9kL0IwMDNZVTNYVU0KLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9hdy9yZC5odG1sP3VpZD3jgqLjg5XjgqNJROOCieOBl+OBjeOCguOBriZhdD3jgqLjg5XjgqNJROOCieOBl+OBjeOCguOBriZhPUIwMDNZVTNYVU0mdXJsPSUyRmdwJTJGYXclMkZkLmh0bWwmbGM9bXNuCgkJCQkvL+OCueODnuODm+eUqOOCouODieODrOOCuSjmmqvlrprlr77lv5wpCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9cL2dwXC9hd1wvLykpewoJCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJil1aWQ9LykgfHwgaHJlZi5tYXRjaCgvKFw/fFwmKWF0PS8pKXsKCQkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvKGFtYXpvblwuKGpwfGNvLmpwfGNvbXxjYXxjb20uYnJ8Y29tLm14fGNvLnVrfGRlfGZyfGl0fGVzfGNufGlufGNvbS5hdSkpXC8uKiQvaSwgIiQxIiArICIvZ3AvYXcvZC8iICsgcGFyYW1zWyJhIl0pOwoJCQkJCX0KCgkJCQkJLy/jgIxhbWF6b24uY28uanAvZHAv5ZWG5ZOBSUQvP3RhZz3oibLjgIXjgI3nlKjjgavlv7Xjga7jgZ/jgoHlr77lv5wKCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhcL2dwXC9hd1wvZFwvKSguKihcL3wpKT90YWc9LiokL2ksICIkMSIgKyAiJDIiKTsKCQkJCQkvL+OAjGFtYXpvbi5jby5qcC9ncC9hdy9kL+WVhuWTgUlEL3JlZj3jg6rjg5XjgqHjg6kvP3RhZz3oibLjgIXjgI3jga7loLTlkIjlj5bjgorjgZPjgbzjgZnjgojjgYbjgarjga7jgaflr77lv5wKCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhcL2dwXC9hd1wvZFwvKSguKilcL3JlZi4qJC9pLCAiJDEiICsgIiQyLyIpOwoJCQkJCS8v44CMYW1hem9uLmNvLmpwL+aWh+Wtly9kcC/llYblk4FJROOAjeeUqOOBq+W/teOBruOBn+OCgeWvvuW/nAoJCQkJCXN0clVybD1zdHJVcmwucmVwbGFjZSgvKGFtYXpvblwuKGpwfGNvLmpwfGNvbXxjYXxjb20uYnJ8Y29tLm14fGNvLnVrfGRlfGZyfGl0fGVzfGNufGlufGNvbS5hdSkpXC8uKihcL2dwXC9hd1wvZFwvLiokKS9pLCAiJDEiICsgIiQzIik7CgoJCQkJCS8v5ZWG5ZOB6Kqs5piO44Gu44Oq44Oz44Kv44Gn5b+F6KaB44Gq44OR44Op44Oh44O844K/44G+44Gn5raI44GZ44Gu44Gn6KOc44Gm44KTCgkJCQkJaWYoIXN0clVybC5tYXRjaCgiZHNjPSIpICYmIGhyZWYubWF0Y2goImRzYz0iKSl7CgkJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJCXN0clVybCA9IHN0clVybCArICI/ZHNjPSIgKyBwYXJhbXNbImRzYyJdOwoJCQkJCX0KCQkJCQkvL+ips+e0sOiqrOaYjuOBruODquODs+OCr+OBp+W/heimgeOBquODkeODqeODoeODvOOCv+OBvuOBp+a2iOOBmeOBruOBp+ijnOOBpuOCkwoJCQkJCWlmKCFzdHJVcmwubWF0Y2goInBkPSIpICYmIGhyZWYubWF0Y2goInBkPSIpKXsKCQkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkJc3RyVXJsID0gc3RyVXJsICsgIj9wZD0iICsgcGFyYW1zWyJwZCJdOwoJCQkJCX0KCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvcy8/aWU9VVRGOCZrZXl3b3Jkcz0lRUYlQkQlODglRUYlQkQlODQlRUYlQkMlOTUlRUYlQkMlOTklRUYlQkMlOTgmdGFnPXlhaGh5ZC0yMiZpbmRleD1hcHMmanAtYWQtYXA9MCZodmFkaWQ9Mzg3OTE4NzUzMzcmaHZkZXY9YyZyZWY9cGRfc2xfNWd2bmk4c2RiaV9iCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvZ3Avc2VhcmNoP2tleXdvcmRzPVNELUFOVzE0NzVQODEmX19ta19qYV9KUD0lODNKJTgzJTVFJTgzSiU4M2kmdGFnPW1lbW90b3JhLTIyCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9cL3NcLy8pIAoJCQkJICB8fCBocmVmLm1hdGNoKC9cL3NlYXJjaFw/LykpewoJCQkJCS8va2V5d29yZHMoa2V5d29yZHPjgahmaWVsZC1rZXl3b3Jkc+OBrjLnqK7poZ7jgYLjgovmqKHmp5jvvIkKCQkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpa2V5d29yZHM9LykpewoJCQkJCQl2YXIgc3RyUGFnZSA9ICIiOwkvL+ihqOekuuODmuODvOOCuOaVsAoJCQkJCQl2YXIgc3RyUHJpY2VPZmYgPSAiIjsJLy/libLlvJXnjocKCgkJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJCWlmKGhyZWYubWF0Y2goInBhZ2U9IikpewoJCQkJCQkJc3RyUGFnZSA9ICImcGFnZT0iICsgcGFyYW1zWyJwYWdlIl07CgkJCQkJCX0KCQkJCQkJaWYoaHJlZi5tYXRjaCgicGN0LW9mZj0iKSl7CgkJCQkJCQlzdHJQcmljZU9mZiA9ICImcGN0LW9mZj0iICsgcGFyYW1zWyJwY3Qtb2ZmIl07CgkJCQkJCX0KCQkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvKC4qXC8oc1wvfHNlYXJjaCkpLiokL2ksICIkMT9rZXl3b3Jkcz0iICsgcGFyYW1zWyJrZXl3b3JkcyJdICsgc3RyUGFnZSArIHN0clByaWNlT2ZmKTsKCgkJCQkJLy9maWVsZC1rZXl3b3JkcwoJCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goLyhcP3xcJilmaWVsZC1rZXl3b3Jkcz0vKSl7CgkJCQkJCXZhciBzdHJQYWdlID0gIiI7CS8v6KGo56S644Oa44O844K45pWwCgkJCQkJCXZhciBzdHJQcmljZU9mZiA9ICIiOwkvL+WJsuW8leeOhwoKCQkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkJaWYoaHJlZi5tYXRjaCgicGFnZT0iKSl7CgkJCQkJCQlzdHJQYWdlID0gIiZwYWdlPSIgKyBwYXJhbXNbInBhZ2UiXTsKCQkJCQkJfQoJCQkJCQlpZihocmVmLm1hdGNoKCJwY3Qtb2ZmPSIpKXsKCQkJCQkJCXN0clByaWNlT2ZmID0gIiZwY3Qtb2ZmPSIgKyBwYXJhbXNbInBjdC1vZmYiXTsKCQkJCQkJfQoJCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC8oLipcLyhzXC98c2VhcmNoKSkuKiQvaSwgIiQxP2ZpZWxkLWtleXdvcmRzPSIgKyBwYXJhbXNbImZpZWxkLWtleXdvcmRzIl0gKyBzdHJQYWdlICsgc3RyUHJpY2VPZmYpOwoKCQkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpcmg9LykpewoJCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC8oLipcL3NcLykuKiQvaSwgIiQxP3JoPSIgKyBwYXJhbXNbInJoIl0pOwoJCQkJCX0KCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvRzI0NiVFMyU4MiVCNyVFMyU4MyVBQSVFMyU4MyVCQyVFMyU4MiVCQS0yNCVFNSU5RSU4QiVFMyU4MyVBRiVFMyU4MiVBNCVFMyU4MyU4OSVFNiVCNiVCMiVFNiU5OSVCNiVFMyU4MyVBMiVFMyU4MyU4QiVFMyU4MiVCRiVFMyU4MyVCQy0xOTIwJUMzJTk3MTA4MC0lRTUlODUlQTUlRTUlOEElOUIlRTclQUIlQUYlRTUlQUQlOTAlRTMlODMlOUYlRTMlODMlOEJELVN1YjE1JUUzJTgzJTk0JUUzJTgzJUIzJUUzJTgzJUJCRFZJLUQlRTIlODAlQkJIRENQJUU1JUFGJUJFJUU1JUJGJTlDJUUzJTgzJUJCSERNSS1HMjQ2SExBQklEL2RwL0IwMEFER00xQTglM0ZTdWJzY3JpcHRpb25JZCUzRDA1NzFCQkdUUVo1WVlQRURTWTAyJTI2dGFnJTNEa2FrYWt1LXBjLXBjb3RoZXItMjIlMjZsaW5rQ29kZSUzRHhtMiUyNmNhbXAlM0QyMDI1JTI2Y3JlYXRpdmUlM0QxNjU5NTMlMjZjcmVhdGl2ZUFTSU4lM0RCMDBBREdNMUE4JTI2bWUlM2RBTjFWUlFFTkZSSk41CgkJCQkvL+mAmuW4uOOBruWVhuWTgVVSTAoJCQkJfWVsc2UgewoKCQkJCQl2YXIgc3RyTmV3VXJsPWhyZWYucmVwbGFjZSgvKGFtYXpvblwuKGpwfGNvLmpwfGNvbXxjYXxjb20uYnJ8Y29tLm14fGNvLnVrfGRlfGZyfGl0fGVzfGNufGlufGNvbS5hdSkpXC8uKlwvKEFTSU58cHJvZHVjdHxkcClcLyhcdyspKFwvfFw/fFwlM0YpLiokL2ksICIkMS8iICsgImRwLyIgKyAiJDQvIik7CgkJCQkJaWYgKGhyZWYgPT0gc3RyTmV3VXJsKSB7CgkJCQkJCS8v44CMYW1hem9uLmNvLmpwL+aWh+Wtly9kcC/llYblk4FJRC8/dGFnPeiJsuOAheOAjeOBruWgtOWQiOOBrumZpOWOuwoJCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC8oYW1hem9uXC4oanB8Y28uanB8Y29tfGNhfGNvbS5icnxjb20ubXh8Y28udWt8ZGV8ZnJ8aXR8ZXN8Y258aW58Y29tLmF1KSlcLy4qXC8oQVNJTnxwcm9kdWN0fGRwKVwvKFx3KykkL2ksICIkMS8iICsgImRwLyIgKyAiJDQiKTsKCgoJCQkJCQkvL+OAjGFtYXpvbi5jby5qcC9kcC/llYblk4FJRC8/dGFnPeiJsuOAheOAjeOBruWgtOWQiOWPluOCiuOBk+OBvOOBmeOCiOOBhuOBquOBruOBp+WvvuW/nAoJCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhcL2RwXC8pKC4qKFwvfCkpXD90YWc9LiokL2ksICIkMSIgKyAiJDIiKTsKCQkJCQkJLy/jgIxhbWF6b24uY28uanAvZHAv5ZWG5ZOBSUQvcmVmPeODquODleOCoeODqS8/dGFnPeiJsuOAheOAjeOBruWgtOWQiOWPluOCiuOBk+OBvOOBmeOCiOOBhuOBquOBruOBp+WvvuW/nAoJCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhcL2RwXC8pKC4qKVwvcmVmLiokL2ksICIkMSIgKyAiJDIvIik7CgoJCQkJCQkvL+OAjGFtYXpvbi5jby5qcC/mloflrZcvZHAv5ZWG5ZOBSUTjgI3mloflrZfjgYzmrovjgovjga7jgafliYrpmaQKCQkJCQkJLy9BbWF6b27lrprmnJ/jgYrjg4jjgq/kvr/jga/pmaTlpJYKCQkJCQkJaWYoIXN0clVybC5tYXRjaCgiL2dwL3N1YnNjcmliZS1hbmQtc2F2ZS8iKSl7CgkJCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhhbWF6b25cLihqcHxjby5qcHxjb218Y2F8Y29tLmJyfGNvbS5teHxjby51a3xkZXxmcnxpdHxlc3xjbnxpbnxjb20uYXUpKVwvLiooXC9kcFwvLiokKS9pLCAiJDEiICsgIiQzIik7CgkJCQkJCX0KCgkJCQkJfWVsc2V7CgkJCQkJCXN0clVybCA9IHN0ck5ld1VybDsKCQkJCQl9CgkJCQl9CgovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2V4ZWMvb2JpZG9zL2V4dGVybmFsLXNlYXJjaD9zZWFyY2gtdHlwZT1zcyZ0YWc944Ki44OV44Kj44Oq44Ko44Kk44OISUQma2V5d29yZD3mpJzntKLjg6/jg7zjg4kmaW5kZXg9Ym9va3MtanAKCQkJCS8v44Gd44KM44Gn44KC44Ki44OV44Kj44Oq44Ko44Kk44OIdGFn44GM5q6L44Gj44Gm44Gf44KJ5YmK6ZmkCgkJCQlpZihzdHJVcmwubWF0Y2goLyhcP3xcJil0YWc9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidGFnIl0sJycpOwoJCQkJfQoKCQkJCS8v5raI44GX6YGO44GO44Gf44OR44Op44Oh44O844K/44KS6L+95YqgCgkJCQlpZihocmVmLm1hdGNoKC9cPy8pKXsKCQkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkvL+OCq+ODhuOCtOODqijjgrjjg6Pjg7Pjg6spCgkJCQkJaWYoaHJlZi5tYXRjaCgiaW5kZXg9IikgJiYgIXN0clVybC5tYXRjaCgiaW5kZXg9IikpewoJCQkJCQlpZihzdHJVcmwubWF0Y2goL1w/LykpewoJCQkJCQkJc3RyVXJsID0gc3RyVXJsICsgIiZpbmRleD0iICsgcGFyYW1zWyJpbmRleCJdOwoJCQkJCQl9ZWxzZXsKCQkJCQkJCXN0clVybCA9IHN0clVybCArICI/aW5kZXg9IiArIHBhcmFtc1siaW5kZXgiXTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQkvL1VSTOS/ruatowoJCQkJaWYoc3RyVXJsLmluZGV4T2YoImFtYXpvbi5qcCIpID4gLTEpewoJCQkJCXN0clVybCAgPSBzdHJVcmwucmVwbGFjZSgvYW1hem9uLmpwLywiYW1hem9uLmNvLmpwIik7CgkJCQl9CgoJCQkJc2V0TGluaygpOwkvL+ODquODs+OCr+WkieabtAoKCgkJCS8vQXBwbGVTdG9yZT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJhb3MucHJmLmhuIikpewovL2h0dHA6Ly9hb3MucHJmLmhuL2NsaWNrL2NhbXJlZjoxMGxkNGovcHVicmVmOk9yYm90aXglMjBTcGhlcm8vZGVzdGluYXRpb246aHR0cCUzQSUyRiUyRnN0b3JlLmFwcGxlLmNvbSUyRmpwJTJGcHJvZHVjdCUyRkhEMTYyTEwlMkZBJTJGb3Jib3RpeC1zcGhlcm8tMjAtJTI1RTMlMjU4MyUyNUFEJTI1RTMlMjU4MyUyNTlDJTI1RTMlMjU4MyUyNTg2JTI1RTMlMjU4MiUyNUEzJTI1RTMlMjU4MyUyNTgzJTI1RTMlMjU4MiUyNUFGJTI1RTMlMjU4MyUyNTlDJTI1RTMlMjU4MyUyNUJDJTI1RTMlMjU4MyUyNUFCJTNGZm5vZGUlM0Q0MwovL+ODh+OCs+ODvOODiWh0dHA6Ly9hb3MucHJmLmhuL2NsaWNrL2NhbXJlZjoxMGxkNGovcHVicmVmOk9yYm90aXggU3BoZXJvL2Rlc3RpbmF0aW9uOmh0dHA6Ly9zdG9yZS5hcHBsZS5jb20vanAvcHJvZHVjdC9IRDE2MkxML0Evb3Jib3RpeC1zcGhlcm8tMjAt44Ot44Oc44OG44Kj44OD44Kv44Oc44O844OrP2Zub2RlPTQzCi8vaHR0cDovL2Fvcy5wcmYuaG4vY2xpY2svY2FtcmVmOjEwbGRhbi9wdWJyZWY6SXBob25lJTIwNXMlMjBDYXNlL2Rlc3RpbmF0aW9uOmh0dHAlM0ElMkYlMkZzdG9yZS5hcHBsZS5jb20lMkZqcCUyRnByb2R1Y3QlMkZNRjA0MUZFJTJGQSUyRmlwaG9uZS01cy1jYXNlLSVFMyU4MyU5NiVFMyU4MyVBOSVFMyU4MiVBNiVFMyU4MyVCMyUzRmZub2RlJTNENDcKLy/jg4fjgrPjg7zjg4lodHRwOi8vYW9zLnByZi5obi9jbGljay9jYW1yZWY6MTBsZGFuL3B1YnJlZjpJcGhvbmUgNXMgQ2FzZS9kZXN0aW5hdGlvbjpodHRwOi8vc3RvcmUuYXBwbGUuY29tL2pwL3Byb2R1Y3QvTUYwNDFGRS9BL2lwaG9uZS01cy1jYXNlLeODluODqeOCpuODsz9mbm9kZT00NwoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8uKmRlc3RpbmF0aW9uOi8sIiIpLnJlcGxhY2UoL1w/Zm5vZGU9LiokLywiIik7CgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwczovL2l0dW5lcy5hcHBsZS5jb20vanAvYXBwL2NhbWVyYSsvaWQzMjk2NzA1Nzc/bXQ9OCZ1bz00JmF0PTExbGMydwovL2h0dHBzOi8vd2lkZ2V0cy5pdHVuZXMuYXBwbGUuY29tL3dpZGdldC5odG1sP2M9anAmYnJjPUZGRkZGRiZibGM9RkZGRkZGJnRyYz1GRkZGRkYmdGxjPUZGRkZGRiZkPSZ0PSZtPW11c2ljJmU9YWxidW0mdz0yNTAmaD0zMDAmaWRzPTY2MDEwNzgwNCZ3dD1kaXNjb3ZlcnkmcGFydG5lcklkPSZhZmZpbGlhdGVfaWQ9JmF0PTExbGMydyZjdD0KCQkJLy9pdHVuZXMo44OR44Op44Oh44O844K/YXTjgYzjgqLjg5XjgqPjg6rjgqjjgqTjg4hJROOAgnVv44Gv44Gk44GE44Gn44Gr5YmK6ZmkKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJpdHVuZXMuYXBwbGUuY29tIikgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKWF0PS8pIAoJCQkgICAgICB8fCBocmVmLm1hdGNoKCJ0dW5lcy5hcHBsZS5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpdW89LykKCQkJICAgICAgfHwgaHJlZi5tYXRjaCgiaXR1bmVzLmFwcGxlLmNvbSIpICYmIGhyZWYubWF0Y2goLyhcP3xcJilhSWQ9LykpewoKCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJilhdD0vKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oXD98XCYpYXQ9LiovLCIiKTsKCQkJCX0KCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJil1bz0vKSl7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLyhcP3xcJil1bz0uKi8sIiIpOwoJCQkJfQoKLy9odHRwczovL2Jhbm5lcnMuaXR1bmVzLmFwcGxlLmNvbS9iYW5uZXIuaHRtbD9wYXJ0bmVySWQ9JmFJZD0xMWxjMncmaWQ9NjYwMTA3ODA0JmM9anAmbD1qYS1KUCZidD1jYXRhbG9nJnQ9Y2F0YWxvZ19ibGFjayZ3PTMwMCZoPTI1MAoJCQkJLy9pdHVuZXPjg5Djg4rjg7wo44OR44Op44Oh44O844K/YUlk44GM44Ki44OV44Kj44Oq44Ko44Kk44OISUQpCgkJCQlpZihzdHJVcmwubWF0Y2goLyhcP3xcJilhSWQ9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gIGhyZWYucmVwbGFjZShwYXJhbXNbImFJZCJdLCIiKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwOi8vd3d3LmFyay1wYy5jby5qcC9pLzIwMTA0NzU1Lz9jaWQ9a2FrYWt1CgkJCS8vYXJrLXBj44Gu44OI44Op44OD44Kr44O8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiYXJrLXBjLmNvLmpwIikgPiAtMSAmJiBocmVmLmluZGV4T2YoIj9jaWQ9IikgPiAtMSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1w/Y2lkPS4qJC8sIiIpOwoJCQkJCgkJCQlzZXRMaW5rKCk7CgovL+ato+OBl+OBhGh0dHA6Ly93d3cuYXNrdWwuY28uanAvcC/llYblk4FJRC8KLy9odHRwOi8vd3d3LmFza3VsLmNvLmpwL3N0bj9tb2RlPWFmZmlsaWF0ZSZ0b29sPTIxNSZmcmFtZVVSTD0vcC/llYblk4FJRC8mc2NfZT1jcF9hX2FzX3ZjX3BzX2FfcF9rYWtha3UKCQkJLy9hc2t1bD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoInd3dy5hc2t1bC5jby5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCIvcC8iKSA+IC0xKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKHd3dy5hc2t1bC5jby5qcClcLy4qKFwvcFwvKSguKlwvKS4qJC9pLCIkMSIrICIkMiIgKyAiJDMiKTsKCgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9hc2t1bGNvcnBvcmF0aW9uLnR0Lm9tdHJkYy5uZXQvbTIvYXNrdWxjb3Jwb3JhdGlvbi91Ym94L3BhZ2U/bWJveD1Mb2hhY29fcGNfeXNocHBvaW50X3JlZGlyZWN0Jm1ib3hEZWZhdWx0PWh0dHAlM0ElMkYlMkZsb2hhY28uanAlMkZldmVudCUyRmJvbnVzX3dpbnRlciUyRiUzRmJrJTNEeSUyNnNjX2UlM0RqX2FzX3lhX3BjX25fcGMKLy9odHRwOi8vYXNrdWxjb3Jwb3JhdGlvbi50dC5vbXRyZGMubmV0L20yL2Fza3VsY29ycG9yYXRpb24vdWJveC9wYWdlP21ib3g9TG9oYWNvX3BjX3lzaHBwb2ludF9yZWRpcmVjdCZtYm94RGVmYXVsdD1odHRwOi8vbG9oYWNvLmpwL2V2ZW50L2JvbnVzX3dpbnRlci8/Yms9eQoJCQkvL2Fza3VsY29ycG9yYXRpb249PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvYXNrdWxjb3Jwb3JhdGlvbi50dC5vbXRyZGMubmV0LykgJiYgaHJlZi5tYXRjaCgvbWJveERlZmF1bHQvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJtYm94RGVmYXVsdCIpOwoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oXD98XCYpYms9LiokLywnJyk7CgoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3LmRlbmEtZWMuY29tL2l0ZW0vMTY3NDI1MjkxP2FmZl9pZD1ja2sKCQkJLy9kZW5hPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiZGVuYS1lYy5jb20iKSA+IC0xICYmIGhyZWYuaW5kZXhPZigiP2FmZl9pZD0iKSA+IC0xKXsKCQkJCWN1dE51bSA9IGhyZWYuaW5kZXhPZigiP2FmZl9pZD0iKTsKCQkJCXN0clVybD1ocmVmLnNsaWNlKDAsY3V0TnVtKTsKCgkJCQlzZXRMaW5rKCk7CgovL2h0dHBzOi8vd3d3Lm15ZG9jb21vLmNvbS9vbmxpbmVzaG9wL3Byb2R1Y3RzL3NtYXJ0X3Bob25lL1NPMDJGLmh0bWw/Y2lkPU9MU19QUkRfU08wMkZfZnJvbV9rZGNfUFJEX1NPMDJGCgkJCS8vZG9jb21vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigibXlkb2NvbW8uY29tIikgPiAtMSAmJiBocmVmLmluZGV4T2YoIi5odG1sPyIpID4gLTEpewoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8uaHRtbD8uKiQvLCIuaHRtbCIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3LmRvbWlub3MuanAvYWZmaWxpYXRlL2xzZGxwLnBocD9zaXRlSUQ9Mnh6N1U5UmczVVUtRVFhN0tmSXlmcjFqTUVvVjA3bk5mdwoJCQkvL2RvbWlub3M9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJkb21pbm9zLmpwIikgPiAtMSAmJiBocmVmLmluZGV4T2YoInNpdGVJRD0iKSA+IC0xKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJzaXRlSUQiXSwiIik7CgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwOi8vd3d3LmRvc3BhcmEuY28uanAvNXNob3BwaW5nL2RldGFpbF9wYXJ0cy5waHA/Ymc9MiZicj05OCZzYnI9NTI5JmljPTM1NjcxNC8KCQkJLy9kb3NwYXJh44Gu5LiN6KaB44Gn5LiN5piO44Gq44OR44Op44Oh44O844K/5YmK6ZmkPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiZG9zcGFyYS5jby5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJpYz0iKSA+IC0xKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLy5waHAuKiQvLCIucGhwP2ljPSIpICsgcGFyYW1zWyJpYyJdICsgIiZsZj0wIjsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3JvdmVyLmViYXkuY29tL3JvdmVyLzEvNzExLTUzMjAwLTE5MjU1LTAvMT9mZjM9NCZwdWI9NTU3NTA0NjQ0MyZ0b29saWQ9MTAwMDEmY2FtcGlkPTUzMzczMTAyMTQmY3VzdG9taWQ9Jm1wcmU9aHR0cCUzQSUyRiUyRnd3dy5lYmF5LmNvbSUyRml0bSUyRkJVTEstV0hPTEVTQUxFLUFSQUNITk9QSE9CSUEtQUxVTUlOSVVNLU1FVEFMLUNBU0UtQ09WRVItQlVNUEVSLUZPUi1JUEhPTkUtNS0lMkYxMTEwNDI4MDQzNzUlM0ZwdCUzRFVLX01vYmlsZVBob25lc19Nb2JpbGVQaG9uZXNDYXNlc1BvdWNoZXMlMjZ2YXIlM0QlMjZoYXNoJTNEaXRlbTE5ZGFhYWJhOTcKCQkJLy9lYmF5PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoIi5lYmF5LmNvbSIpID4gLTEgKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgoJCQkJaWYoaHJlZi5pbmRleE9mKCJtcHJlPWh0dHAiKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJtcHJlIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKLy9odHRwOi8vd3d3LmViYXkuY29tL3JwcC92ZXJhYnJhZGxleS92ZXJhLWJyYWRsZXktb24tZWJheS8/Y3VzdG9taWQ9d0twYmNEcXBFZU9HTG9ySWdaWXFEUTF4ZjRfczd3azNfMF8wXzAmcHViPTU1NzQ2NTI0NTMmYWZlcG49NTMzNzI1OTg4NyZjYW1waWQ9NTMzNzI1OTg4NyZfdHJrc2lkPXAyMDUwNjAxLm0xMjU2Jl9pcGc9MTkyJl90cmtwYXJtcz0lMjZjbGtpZCUzRDIxMzAzODU4OTEzMTM4MTMyMDQmYWZlcG49NTMzNzI1OTg4NwoJCQkJaWYoaHJlZi5pbmRleE9mKCJjdXN0b21pZD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJjdXN0b21pZCJdLCIiKS5yZXBsYWNlKCJjdXN0b21pZD0iLCIiKTsKCQkJCX0KCQkJCWlmKGhyZWYuaW5kZXhPZigiX3Rya3NpZD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJfdHJrc2lkIl0sIiIpLnJlcGxhY2UoIl90cmtzaWQ9IiwiIik7CgkJCQl9CgovL2h0dHA6Ly93d3cua3NkZW5raS5jb20vZWMvY29tbW9kaXR5LzAwMDAwMDAwLzQ5MDU1MjQ4MTEzODQmdmNwdG49RFBGLUM3MEElMjBXLwoJCQkvL2tz6Zu75rCX44Gu5LiN6KaB44Gn5LiN5piO44Gq44OR44Op44Oh44O844K/5YmK6ZmkPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigidmNwdG4iKSA+IC0xKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKFwmfFw/KXZjcHRuLiokLywiIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9sb2hhY28uanAvcHJvZHVjdC8yNjkwODMyLz9zY19lPWFfYXNfdmNfcHNfYV9rYWtha3UKLy9odHRwOi8vbG9oYWNvLmpwL2xrc2VhcmNoLz9jYXRlZ29yeUxsPSZjYXRlZ29yeUw9JmNhdGVnb3J5TT0mY2F0ZWdvcnlTPSZzZWFyY2hXb3JkPSVFNiU4RSU4MyVFOSU5OSVBNCVFNiVBOSU5RiZhbmRPcj0maXRlbUV4cGw9MCZyZXN1bHRUeXBlPSZyZXN1bHRDb3VudD0maXRlbVNwZWM9JnNvcnREaXI9JnNjX2U9bF9kdF95YV9zZV9jX3BjXzU4MDAwMDAwMDAwXzQ1ODY1MyZpb25laWQ9U0lfNjkyMjU1MDM4X18xJnNpc3NyPTEKCQkJLy9sb2hhY289PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJsb2hhY28uanAiKSA+IC0xKXsKCQkJCWlmKHN0clVybC5pbmRleE9mKCJzY19lPSIpID4gLTEpewoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyguKikoXD98XCYpc2NfZT0uKiQvaSwnJDEnKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly93d3cubmVjZGlyZWN0LmpwL3JlZGlyL25kZW50cnlscy5hc3A/bHN0aWQ9Q0JUdFlYTWt3d0ktVGFLajFWWm01WTc4dzB3SnBZYlhZZyZsc3VybD1odHRwJTNBJTJGJTJGd3d3Lm5lY2RpcmVjdC5qcCUyRnNob3AlMkZub3RlJTJGbGF2aWUlMkZzaCUyRmluZGV4Lmh0bWwKCQkJLy9ORUM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigibmVjZGlyZWN0LmpwIikgPiAtMSAmJiBocmVmLm1hdGNoKC8oXD98XCYpbHN1cmw9aHR0cC8pKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsImxzdXJsIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cubmlzc2VuLmNvLmpwL3Nob19pdGVtL3JlZ3VsYXIvNjQwMC82NDAwXzEyODYxLmFzcD9ib29rPTY0MDAmY2F0PW90aGVyMDAzLwoJCQkvL+ODi+ODg+OCu+ODs+OBruS4jeimgeOBp+S4jeaYjuOBquODkeODqeODoeODvOOCv+WJiumZpD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoIm5pc3Nlbi5jby5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCIuYXNwIikgPiAtMSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLy5hc3AuKiQvLCIuYXNwIik7CgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwOi8vd3d3LmUtbmxzLmNvbS9hY2Nlc3NfcHJvZC5waHA/YWdlbmN5X2lkPWFmNzM5NTQ2LW8wOCZwY29kZT03NzEzCgkJCS8vbmxzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJlLW5scy5jb20iKSAmJiBocmVmLm1hdGNoKCJhZ2VuY3lfaWQ9IikgKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJhZ2VuY3lfaWQiXSwiIikucmVwbGFjZSgvYWdlbmN5X2lkPS8sIiIpOwoKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2NvbWljLnBpeGl2Lm5ldC93b3Jrcy81OT9hZHM9dHgtdzU5CgkJCS8vcGl4aXY9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoInBpeGl2Lm5ldCIpPjAgJiYgaHJlZi5tYXRjaCgiYWRzPSIpKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvXD8uKiQvLCIiKTsKCQkJCXNldExpbmsoKTsKCgovL2h0dHA6Ly9wdC5hZmwucmFrdXRlbi5jby5qcC9jL+aVsOWtly9fUlR2cmdq5pWw5a2XP3VybD1odHRwJTNBJTJGJTJGaXRlbS5yYWt1dGVuLmNvLmpwJTJG44K144Kk44OI5ZCN44Go44GLCgkJCS8v5qW95aSpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigicmFrdXRlbi5jby5qcCIpPjApewovLwkJCQl2YXIgcmFrdGVuUHJtcyA9ICIiOwoKLy9odHRwOi8vaXRlbS5yYWt1dGVuLmNvLmpwL2pldC1wYy80MzAwXzE1Ly0taHlicmlkLS1odHRwOi8vaXRlbS5yYWt1dGVuLmNvLmpwL2pldC1wYy80MzAwXzE1LyZzdWJpZD0mdHlwZT0xMCZ0bXBpZD0xMTA0NQoJCQkJLy/mpb3lpKnjga7jg6rjg4DjgqTjg6zjgq/jg4jpmaTljrsKCQkJCWlmKGhyZWYuaW5kZXhPZigiLS1oeWJyaWQtLWh0dHAiKSA+IC0xKXsKCQkJCQljdXROdW0gPSBocmVmLmluZGV4T2YoIi0taHlicmlkLS0iKTsKCQkJCQlzdHJVcmwgPSBocmVmLnNsaWNlKGN1dE51bSsxMCk7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLyhcP3xcJilzdWJpZD0uKiQvLCcnKTsKCQkJCX0KCgkJCQkvL+OCouODleOCo+ODquOCqOOCpOODiOmZpOWOuwoJCQkJaWYoaHJlZi5pbmRleE9mKCJwdC5hZmwucmFrdXRlbi5jby5qcCIpPi0xICYmIGhyZWYubWF0Y2goLyhcP3xcJil1cmw9LykpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoKCQkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiaGIuYWZsLnJha3V0ZW4uY28uanAiKT4tMSAmJiBocmVmLm1hdGNoKC8oXD98XCYpcGM9LykpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInBjIik7CgoJCQkJfQoKLy9odHRwOi8vcmQucmFrdXRlbi5jby5qcC9hLz9SMj1odHRwOi8vcmFua2luZy5yYWt1dGVuLmNvLmpwL2RhaWx5L2dlbmRlcj1mZW1hbGUvP3NjaWQ9c19rd2FfZHNhJmxzaWQ9MDAwMDA2CgkJCQlpZihocmVmLm1hdGNoKCJyZC5yYWt1dGVuLmNvLmpwIikgJiYgaHJlZi5tYXRjaCgiUjI9IikpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsIlIyIik7CgoJCQkJfQoKLyoKLy9odHRwOi8vZXNlYXJjaC5yYWt1dGVuLmNvLmpwL3Jtcy9zZC9lc2VhcmNoL3ZjP3N2PTImdj0yJmU9MCZzPTI4JnN1Yj0wJms9MCZvaWQ9MDAwJmM9MjgzNiZzaXRlbT0lQTUlRDElQTUlQkQlQTUlQjMlQTUlRjMlQTUlQzclQTUlQjklQTUlQUYrMTgwY20rQk9OJmY9QSZuaXRlbT0mZz0wJm1pbj0mbWF4PSZwPTAKCQkJCS8vZXNlYXJjaOOBr+ODkeODqeODoeODvOOCv+OBruaWh+Wtl+OCqOODs+OCs+ODvOODiVVURjgo77yfKeOCkuODh+OCs+ODvOODieOBmeOCi+OCieOBl+OBhAoJCQkJaWYoaHJlZi5tYXRjaCgiL2VzZWFyY2gucmFrdXRlbi5jby5qcCIpICYmIGhyZWYubWF0Y2goInNpdGVtPSIpKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoKCQkJCQlyYWt0ZW5Qcm1zID0gcmFrdXRlblBhcmFtKCk7CgoJCQkJCXN0clVybCA9ICJodHRwOi8vZXNlYXJjaC5yYWt1dGVuLmNvLmpwL3Jtcy9zZC9lc2VhcmNoL3ZjPyIgKyByYWt0ZW5Qcm1zOwoKCQkJCX0KCi8vaHR0cDovL3NlYXJjaC5yYWt1dGVuLmNvLmpwL3NlYXJjaC9tYWxsP3Y9MiZzPTEmcD0xJm1pbj0mbWF4PSZnPTEwMTE2NCZzaXRlbT13ZWIrbW9uZXkmc3Q9QSZuaXRlbT0lOTIlOTklOEIlRTAlOTQlQTArJTgyJUEwJTgyJUMyJTgyJURDJTgyJUVBK0NvbmZpZGVudGlhbCsrRmFsbG91dAoJCQkJaWYoaHJlZi5tYXRjaCgiL3NlYXJjaC5yYWt1dGVuLmNvLmpwIikgJiYgaHJlZi5tYXRjaCgic2l0ZW09IikpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgoJCQkJCXJha3RlblBybXMgPSByYWt1dGVuUGFyYW0oKTsKCgkJCQkJc3RyVXJsID0gImh0dHA6Ly9zZWFyY2gucmFrdXRlbi5jby5qcC9zZWFyY2gvbWFsbD9zaXRlbT0iICsgcmFrdGVuUHJtczsKCQkJCQkKCQkJCX0KCi8vaHR0cDovL3NlYXJjaC5ib29rcy5yYWt1dGVuLmNvLmpwL2Jrc2VhcmNoL25tP3NpdGVtPSVCRiVCNyVDQSVBMSVDQSVERCVDRSVCNCZzdj0zMCZ2PTImc3B2PTIKCQkJCWlmKGhyZWYubWF0Y2goIi9zZWFyY2guYm9va3MucmFrdXRlbi5jby5qcCIpICYmIGhyZWYubWF0Y2goInNpdGVtPSIpKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoKCQkJCQlyYWt0ZW5Qcm1zID0gcmFrdXRlblBhcmFtKCk7CgoJCQkJCXN0clVybCA9ICJodHRwOi8vc2VhcmNoLmJvb2tzLnJha3V0ZW4uY28uanAvYmtzZWFyY2gvbm0/c2l0ZW09IiArIHJha3RlblBybXMgKyAiJnNwdj0yIjsKCQkJCQkKCQkJCX0KKi8KCgkJCQkvL+OBiuOBneOCieOBj+ODkeODqeODoeODvOOCv+OBrnNjaWTjga/jg4jjg6njg4Pjgqvjg7zjgadzYzJpZOOBjOOCouODleOCo0lE44Go5oCd44KP44KM44KL44Gu44Gn44G+44Go44KB44Gm5YmK6ZmkCgkJCQlzdHJVcmwgPSBzdHJVcmwucmVwbGFjZSgvKFwvfFw/fFwmKXNjaWQ9LiokLywiIikucmVwbGFjZSgvKFwvfFw/fFwmKXNjMmlkPS4qJC8sIiIpOwoKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3d3dy5zZWthaW1vbi5jb20vaXRyYWNrL3ZjdXJsX2VudHJ5LnBsP0lUUkFDS19JTkZPPTA4Nzg2NzIxNDQwMjM1NjUxMTE0MDYyNTIzNDUxMiZDT09LSUVfUEFUSD0vJkNPT0tJRV9ET01BSU49LnNla2FpbW9uLmNvbSZWSUVXX1VSTD1odHRwJTNBJTJGJTJGd3d3LnNla2FpbW9uLmNvbSUyRlZhbHVlQ29tbWVyY2UlMkYmUkVGRVJSRVI9YUhSMGNEb3ZMMk5yTG1wd0xtRndMblpoYkhWbFkyOXRiV1Z5WTJVdVkyOXRMdyZDT09LSUVfRVhQSVJFUz1TdW4sJTIwMjQlMjBBdWclMjAyMDE0JTIwMjM6NDU6MTIlMjBHTVQmdnM9MjI1NDIzNyZ2cD04Nzg2NzIxNDQKCQkJLy9zZWthaW1vbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goIi5zZWthaW1vbi5jb20iKSAmJiBocmVmLm1hdGNoKCJWSUVXX1VSTD1odHRwIikpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiVklFV19VUkwiKTsKCQkJCXNldExpbmsoKTsKCgoJCQkvL+mnv+ays+Wxiz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJzdXJ1Z2EteWEuanAiKSl7CgovL2h0dHA6Ly9hZmZpbGlhdGUuc3VydWdhLXlhLmpwL21vZHVsZXMvYWYvYWZfanVtcC5waHA/dXNlcl9pZD0yMjcmZ29vZHNfdXJsPWh0dHAlM0ElMkYlMkZ3d3cuc3VydWdhLXlhLmpwJTJGZ2FtZS5odG1sCgkJCQlpZihocmVmLm1hdGNoKCJnb29kc191cmw9IikpewoJCQkJCWlmKGdldFJlZGlyZWN0VXJsKGhyZWYsImdvb2RzX3VybCIpICE9ICIiKXsKCQkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiZ29vZHNfdXJsIik7CgkJCQkJCXNldExpbmsoKTsKCQkJCQl9CgkJCQl9CgoKCQkJLy/jg4Tjgq/jg6Ljga7jg4jjg6njg4Pjgqvjg7w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJ0c3VrdW1vLmNvLmpwIikgPiAtMSAmJiBocmVmLmluZGV4T2YoIj9jaWQ9IikgPiAtMSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1w/Y2lkPS4qJC8sIiIpOwoJCQkJc2V0TGluaygpOwoKCgkJCS8veWFob289PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJ5YWhvby5jby5qcCIpID4gMCl7CgovL2h0dHA6Ly9yZC5saXN0aW5nLnlhaG9vLmNvLmpwL28vc2hvcC9GT1I9UzFpNDNJd3FqbFk2RDdwUWU1N3V4bUdMbnN0WFhRbzF4YnZYaHlldVZoZ3BTYjlKN2pqZ3RIczEuY0RycUEtLTsvYWNsaztfeWx0PUEzSnZkbEpJYURGVFgzNEFNbE9rS2RoRTtfeWx1PVgzb0RNVFJrWlRCemEzRjBCRTlXVEFOT0JGSURNUVJoWkdkeWFXUURPVEkxTVRFNU5EQXhNd1JqYjNOMEEyOWFMbGxPU0hoTGFGZDJhd1JqY25SMmFXUURNekExTnpNMk5UYzJOVE1FWjJOc2JuUnBaQU5sZUhSbGNtNWhiQzE1YWkxd1lYSjBibVZ5TFdjekxXRmtMVEF3TURBME1BUnZiVzBEWlFSelpXTURiM1l0ZEc5d0JITndZV05sYVdRRE1URTFOVEF4TnpFeU5BLS0/c2E9bCZhaT1DYkJVTFNHZ3hVOC1PTE5IQi1RT2U4SUM0QnIzVDh0NEV6WW5yaTNLYm5zbmhVQWdBRUFFZ2lxM0dHeWdDVU9PQ3VMMzVfX19fX3dGZ2ljdkJoT3dUb0FHN2p2UFpBOGdCQWFrQ29iRWtGR0FHUlQ2cUJDQlAwUGxXdWJ2Y2F2eDJjMW9IeHVnRl9jSzBDV2xuWmVOWGo0eUw3T0xoeUtvR0FJQUhyZkdNSnBBSEFRJnNpZz16T3U4cjFJNzVCNklmMlE4Vld6amtrVEtGVjRfYTF5YWlYV18yTVFXeEo0Z2VDRnY1X3k3LyoqaHR0cDovL3d3dy55b2RvYmFzaGkuY29tL2VjL2NhdGVnb3J5L2luZGV4Lmh0bWwlM0Z3b3JkJTNESEQ1OTglMjZ5YWQxJTNEZSUyNnlhZDMlM0RoZDU5OCUyNnlhZDQlM0QzMDU3MzY1NzY1MyUyNnhmciUzRHlhZCUyNnV0bV9zb3VyY2UlM0R5YWhvbyUyNnV0bV9tZWRpdW0lM0RjcGMlMjZ1dG1fdGVybSUzREhENTk4CgkJCQkvL3lhaG9v5bqD5ZGKIOOCueODneODs+OCteODvOODieOCteODvOODgQoJCQkJaWYoaHJlZi5tYXRjaCgvXCpcKmh0dHAvKSl7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLy4qXC9cKlwqaHR0cCguKiQpL2ksJ2h0dHAkMScgKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9yZC55YWhvby5jby5qcC9zaG9wcGluZy9hZHdvcmRzL2V2dD03MTc1OC8wYmM4MHI2LypodHRwOi8vcmQueWFob28uY28uanAvc2hwL2xpc3RpbmcvYWQvZXZ0PTg2MjcwL2V2aj0wYmM4MHI2Lz9odHRwOi8vc3RvcmUuc2hvcHBpbmcueWFob28uY28uanAvZWFzdG5vYm9ydS95MDAxMTkuaHRtbAoJCQkJLy95YWhvb+W6g+WRiijjg6Tjg5Xjgqrjgq/jga7jgqvjg6zjg7Pjg4Djg7zov73liqDjgYzmloflrZfljJbjgZHjga7jgZ/jgoHoqr/mlbTkuK3jgIIKCQkJCS8v44Ki44OV44KjSUTjgYzlkKvjgb7jgozjgovjgYvjgoLjgo/jgYvjgonjgarjgYTjga7jgafkuIDmmYLlh43ntZAp4oaSL2FkL+OBrlVSTOOBruOBv+OBq+WkieabtOOBp+anmOWtkOimiwoJCQkJaWYoaHJlZi5tYXRjaCgvXD9odHRwLykgJiYgaHJlZi5tYXRjaCgvXC9hZFwvLykpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvLipcL1w/aHR0cC8sImh0dHAiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9hcmQueWFob28uY28uanAvU0lHPTE1OXJpcWRsai9NPTMwMDgzOTYyMi4zMDE2OTE2OTcuMzAzMjc5NDUwLjMxMjEwMTE3OS9EPWpwX2F1Y19zanAvUz0yMDg0MjMxNzU2OlNRQi9feWx0PUE3ZFBlQjUxSjRWVHRTb0FlckJNMmpwOC9ZPWpwL0VYUD0xNDAxMjQyNTE3L0w9bVFSOHo3ZFBlX0lGclpwYlV5dGRJd0pIZHZCOElsT0ZKM1VBQ0lqdC9CPU9zYldBTGRQaEFzLS9KPTE0MDEyMzUzMTc2MzEyMjAvU0lHPTEyNDY5ZGg3MS9BPTMwMTg5NzQyMS9SPTAvKmh0dHA6Ly84MTkwLmNvLmpwL3JkL3JkLnBocD9haWQ9eWF1X3NvdXRoXzE0MDUyNl8zCi8vaHR0cDovL2FyZC55YWhvby5jby5qcC9TSUc9MTU5ZjFjOTNxL009MzAwODQyMDU0LjMwMTY5NDU3OS4zMDMyNzk0MjYuMzEyNDQxNzYzL0Q9anBfYXVjX2Rpci9TPTIwODQwMDAwMDM6WVNQL1k9anAvRVhQPTE0MDEyNDM5NDMvTD03djhHbzdkUEY5a0ZyWnBiVXl0ZEl3QWpkdkI4SWxPRkxRY0FCQi5hL0I9RFZYOUFMZFBoQXMtL0o9MTQwMTIzNjc0MzM3NzQxMS9TSUc9MTFqMm1sbGI5L0E9MzAxODk3MzczL1I9MC8qaHR0cDovL2NhcmQueWFob28uY28uanAvY2FtcGFpZ24vCgkJCQkvL3lhaG9v5bqD5ZGKCgkJCQlpZihocmVmLm1hdGNoKC9cL1wqaHR0cC8pKXsKCQkJCQlzdHJVcmwgPSBzdHJVcmwucmVwbGFjZSgvLipcL1wqaHR0cC8sImh0dHAiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9yZC5hbmUueWFob28uY28uanAvcmQ/ZXA9WnU4TTcxdlQ5bWRuZ0FHd2dnWGM3WFNuZjlrdXN6dkh5RmM1VFpiamwyVG5nc2ZDcGNoMHB4cGpjYWdfZy45M3VxVHIyWnlNMVpOT2x4czJMeFNrUE8xTmRWLmwzdHB1OWU2bWhZTDhHOXdxT0tSeGhPSlc0eGozWFFLS3hRdnRxeXF0VUpLZWlmUnVyMjRTdnRlMVVuT0pfMEtXazBKVDhOTkR5R3B2cmRNR1l3LS0mYT1oWTFWamU4X3hENU1ESW83SnctLSZzPUZTaThQcDQ5bFEtLSZ0PURwRVlRSmw2eVFBdnJpZDFzb1E4MzRhbSZDPTkmRD0xJkk9JlJJPWI4MTliOTRjNGUxNjQ0MzQ3NmMzOWU4NDJmMWJjMjQ0JlM9MTI0YTNmZjgwYTg0JmFzPTEmZj0xJmZmPTAmZnFfZD0xLDEsMSwwJmZxX209MywzLDMsMCZmcV93PTEsMSwxLDAmZz00JmxwPWh0dHAlM2EvL3Byb21vdGlvbmFsYWRzLnlhaG9vLmNvLmpwL2Fkcy9saXN0aW5nMDQvJTNmbz1KUDEwMDAmbWFmPTAmbWlkPTAmbz05JnA9OSZxZmlkPSZyPTAmcmZtPSZzZmlkPTAmc2t3aWQ9MCZGPTAmdGxpZD0wJnU9ZGV0YWlsLmNoaWVidWt1cm8ueWFob28uY28uanAvcWEvcXVlc3Rpb25fZGV0YWlsLwoJCQkJLy95YWhvb+W6g+WRiiBZYWhvbyHjg4fjgqPjgrnjg5fjg6zjgqTjgqLjg4njg43jg4Pjg4jjg6/jg7zjgq/vvIhZRE7vvIkKCQkJCWlmKGhyZWYubWF0Y2goL2xwPWh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwibHAiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9vcGVudXNlci5hdWN0aW9ucy55YWhvby5jby5qcC9qcC9zaG93L2F1Y3Rpb25zP3VzZXJJRD3jg6bjg7zjgrbjg7xJRCZ1PeODpuODvOOCtuODvElECgkJCQkvL3lhaG9v44Kq44O844Kv44K344On44Oz44Gu44Ki44OV44Kj44OI44Op44OD44Kr44O844KJ44GX44GN44KC44GuCgkJCQlpZihocmVmLm1hdGNoKCJhdWN0aW9ucy55YWhvby5jby5qcCIpICYmIGhyZWYubWF0Y2goLyhcP3xcJil1PS8pKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgidT0iICsgcGFyYW1zWyJ1Il0sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8q5b+F6aCI44Gu44Gf44KB6Zmk5Y675LiN5Y+v44CC44Kz44Oh44Oz44OI44Ki44Km44OICi8vaHR0cDovL25hdmkuYXVjdGlvbnMueWFob28uY28uanAvanAvY29uZmlnL3JlbWVtYmVyP2FJRD0xODUzOTQxNTkmLmNydW1iPWcvL3NJbTdQMnJkJi5kb25lPWh0dHA6Ly9hdWN0aW9ucy5zZWFyY2gueWFob28uY28uanAvc2VhcmNoP2VpPVVURi04JnA9cm92ZW50YSZhdWNjYXQ9MCZ0YWJfZXg9Y29tbWVyY2UmZWk9VVRGLTgKCQkJCS8veWFob2/jga7jgrvjgq3jg6Xjg6rjg4bjgqPnlKjjga7jg4jjg6njg4Pjgqvjg7zjgajjgYTjgYbjgYvjg6rjg5XjgqHjg6njgb/jgZ/jgYTjgarjgoLjga4o5YCL5Lq65oOF5aCx56K66KqN44Gu44Ot44Kw44Kk44Oz44Gn5b+F6aCI44Gu44Gf44KB6Zmk5Y675LiN5Y+vKQoJCQkJLy8uZG9uZeOBqOOBhOOBhuODkeODqeODoeODvOOCv+OBr+ODquODleOCoeODqeeahOOBquOCguOBruOBqOaAneOCj+OCjOOCiwoJCQkJaWYoaHJlZi5tYXRjaCgvZG9uZT1odHRwLykpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvXCYuZG9uZT1odHRwLiokLywiIik7Ci8vCQkJCQlzZXRMaW5rKCk7CgkJCQl9CiovCgovL2h0dHA6Ly93d3cueW9kb2Jhc2hpLmNvbS9lYy9jYXRlZ29yeS9pbmRleC5odG1sP3dvcmQ9SEQ1OTgmeWFkMT1lJnlhZDM9aGQ1OTgmeWFkND0zMDU3MzY1NzY1MyZ4ZnI9eWFkCgkJCS8v44Oo44OJ44OQ44K3PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigieW9kb2Jhc2hpLmNvbSIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJ5YWQiKSA+IC0xKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLyguKmluZGV4Lmh0bWxcP3dvcmQ9KS4qJC9pLCIkMSIpICsgcGFyYW1zWyJ3b3JkIl07CgoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vdHJhY2tpbmcueW91cmd1aWRlLmNvLmpwL2luL3lhLTU3NTA0Mi9odHRwOi8vc2hvcHBpbmcueW91cmd1aWRlLmNvLmpwL3dvcmQvSEQ1OTgvCgkJCS8vdHJhY2tpbmcueW91cmd1aWRlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigidHJhY2tpbmcueW91cmd1aWRlLmNvLmpwL2luLyIpID4gLTEpewoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8uKnRyYWNraW5nLnlvdXJndWlkZS5jby5qcFwvaW5cLy4qXC8oaHR0cC4qJCkvaSwiJDEiKTsKCgkJCQlzZXRMaW5rKCk7CgoKCQkJLy/lkIzkurrns7s6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OgoKLy9odHRwOi8vd3d3LmFraWJhaW4uY29tL2FmYmMucGhwP2FmaWQ944Ki44OV44Kj44Oq44Ko44Kk44OISUQo5pWw5a2XKSZ1cmw9ZDYvCi8vaHR0cDovL3d3dy5ha2liYWluLmNvbS9hZmZpbGlhdGUucGhwP2FmYmlkPeWVhuWTgUlEJnR5cGU9MCZsaW5rPTEmZGlyPTEmYWZpZD0yCgkJCS8v44Ki44Kt44OQ44Kk44OzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiYWtpYmFpbi5jb20iKT4tMSAmJiBocmVmLmluZGV4T2YoImFmaWQ9IikgPiAtMSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siYWZpZCJdLCIiKTsKCi8vaHR0cDovL3d3dy5ha2liYWluLmNvbS9hZmIucGhwP2FmYmlkPeWVhuWTgUlEJnR5cGU9NCZsaW5rPTAmZGlyPTEo4oaQ44Kr44OG44K044OqKSZhZmlkPeOCouODleOCo+ODquOCqOOCpOODiElEKOaVsOWtlykKLy/mraPjgZfjgYRVUkxodHRwOi8vd3d3LmFraWJhaW4uY29tL2QxKOKGkOOCq+ODhuOCtOODqikvP2Nscz1jbnRkdGwmY2lkPeWVhuWTgUlECgkJCQlpZihocmVmLm1hdGNoKCJhZmJpZD0iKSAmJiBocmVmLm1hdGNoKCJkaXI9IikpewoJCQkJCXN0clVybCA9ICJodHRwOi8vd3d3LmFraWJhaW4uY29tL2QiICsgcGFyYW1zWyJkaXIiXSArICIvP2Nscz1jbnRkdGwmY2lkPSIgKyBwYXJhbXNbImFmYmlkIl07CgkJCQl9CgoJCQkJc2V0TGluaygpOwoKCi8vaHR0cDovL3d3dy5kaWdpa2V0LmNvbS9pbmRleC9fZGF0YS9BRklEPWRsZG91amluLwovL2h0dHA6Ly93d3cuZGlnaWtldC5jb20vd29yay9zaG93L19kYXRhL0lEPUlUTTAwOTk0NjUvQUZJRD1kbGRvdWppbi8KCQkJCWlmKGhyZWYuaW5kZXhPZigiQUZJRD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL0FGSUQ9LipcLy8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL3d3dy5kLWRyb3BzLmNvbS8/YWZfY2Q9QUYxMjY5NgoJCQkvL2QtZHJvcCjplonpjpbihpLlho3plovvvJ8pPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goImQtZHJvcHMuY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgiYWZfY2Q9IikpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKFw/fFwmKWFmX2NkPS4qJC8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL3d3dy5kZC1zdHlsZS5jb20vaW5kZXgucGhwP2FkPTIwNDEKCQkJLy9kZC1TdHlsZT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJkZC1zdHlsZS5jb20iKSl7CgkJCQlpZihocmVmLm1hdGNoKCJhZD0iKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oXD98XCYpYWQ9LiokLywiIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKCQkJLy/jg4fjgrjjgrHjg4Pjg4g9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJkaWdpa2V0LmNvbSIpPi0xKXsKLy9odHRwOi8vd3d3LmRpZ2lrZXQuY29tL3AvYWZsaW5rL19kYXRhL0FGSUQ9ZGxkb3VqaW4vP1VSTD1odHRwJTNBJTJGJTJGd3d3LmRpZ2lrZXQuY29tJTJGY29tbW9uJTJGYWZmaWxpYXRlJTJGCgkJCQlpZihocmVmLmluZGV4T2YoIlVSTD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJVUkwiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly93d3cuZGlnaWtldC5jb20vd29yay9zaG93L19kYXRhL0lEPUlUTTAwOTIwMjAvQUZJRD1rMTA0MDA0MS8KCQkJCWlmKGhyZWYubWF0Y2goL1wvQUZJRD0vKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cQUZJRD0uKj9cLy8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgoJCQkvL0RM44GS44Gj44Gh44KFPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiZ2V0Y2h1LmNvbSIpPi0xICYmIGhyZWYuaW5kZXhPZigiYWYiKSA+IC0xKXsKCQkJCS8v5b+144Gu44Gf44KB5YWI44Gr44Ki44OV44KjSUTmtojljrsKCQkJCWlmKGhyZWYuaW5kZXhPZigiYWZmPSIpID4gLTEpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siYWZmIl0sIiIpOwoJCQkJfQovL2h0dHA6Ly9vcmRlci5nZXRjaHUuY29tL3IucGhwP2FmZj0wMDE1NjAtMDEtMDAmdD0yJmdjZD1EMDAyNTQ3NAovL+ato+OBl+OBhFVSTGh0dHA6Ly9kbC5nZXRjaHUuY29tL2luZGV4LnBocD9hY3Rpb249Z2QmZ2NkPUQwMDI4ODU5CgkJCQlpZihocmVmLmluZGV4T2YoImdjZD0iKSA+IC0xKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCXN0clVybCA9ICJodHRwOi8vZGwuZ2V0Y2h1LmNvbS9pbmRleC5waHA/YWN0aW9uPWdkJmdjZD0iICsgcGFyYW1zWyJnY2QiXTsKCQkJCX0KCgovL+ato+OBl+OBhFVSTGh0dHA6Ly9kbC5nZXRjaHUuY29tL2luZGV4LnBocD9hY3Rpb249bVN0YXRpYyZ0bm89U3RnUExvZ19ORVcKLy/jg4fjgrPjg7zjg4lVUkxodHRwOi8vb3JkZXIuZ2V0Y2h1LmNvbS9yLnBocD9hZmY9JnVybD1odHRwOi8vZGwuZ2V0Y2h1LmNvbS9pbmRleC5waHA/YWN0aW9uPW1TdGF0aWMmdG5vPVN0Z1BMb2dfTkVXKwovL2h0dHA6Ly9vcmRlci5nZXRjaHUuY29tL3IucGhwP2FmZj0wMDAwMTAtMDItMDAmdXJsPWh0dHAlM0ElMkYlMkZkbC5nZXRjaHUuY29tJTJGaW5kZXgucGhwJTNGYWN0aW9uJTNEbVN0YXRpYyUyNnRubyUzRFN0Z1BMb2dfTkVXKwoJCQkJLy9VUkzjg6rjg4DjgqTjg6zjgq/jg4jjga7loLTlkIgKCQkJCWlmKGhyZWYubWF0Y2goInVybD0iKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgoJCQkJCS8v5LiN6KaB44Gq5pyA5b6M44GuK+OCkuWJiumZpAoJCQkJCWlmKHN0clVybC5jaGFyQXQoc3RyVXJsLmxlbmd0aCAtIDEpID09ICIrIil7CgkJCQkJCXN0clVybCA9IHN0clVybC5zbGljZSgwLC0xKTsKCQkJCQl9CgkJCQl9CgovL2h0dHA6Ly9pbWFnZS5nZXRjaHUuY29tL2FwaS9nZXR1cmwucGh0bWwvaWQvNzY5MDAyL2FmLzYwMS9hZnR5cGUvMS9zaWQvODUxL3VybC9zb2Z0LnBodG1sLS8/aWQ9NzY5MDAyCi8v5q2j44GX44GEVVJMaHR0cDovL3d3dy5nZXRjaHUuY29tL3NvZnQucGh0bWw/aWQ9NzY5MDAyCgkJCQlpZihocmVmLm1hdGNoKCIvYWYvIikgJiYgaHJlZi5tYXRjaCgiL2FmdHlwZS8iKSAmJiBocmVmLm1hdGNoKCIvc2lkLyIpKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWZcLy4qP1wvLywiLyIpOwoJCQkJCXN0clVybCA9IHN0clVybC5yZXBsYWNlKC9cL2FmdHlwZVwvLio/XC8vLCIvIik7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoL1wvc2lkXC8uKj9cLy8sIi8iKTsKCQkJCQkKCQkJCQlzdHJVcmwgPSAiaHR0cDovL3d3dy5nZXRjaHUuY29tLyIgKyBzdHJVcmwucmVwbGFjZSgvLipcL3VybFwvKC4qPyktXC8vaSwiJDEiKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgoKCQkJLy9EbHNpdGU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIuZGxzaXRlLmNvbSIpID4gLTEgJiYgIGhyZWYubWF0Y2goLyhcL3wlMkYpZGxhZihcL3wlMkYpLykpewoKCi8v5q2j44GX44GEVVJMIGh0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgo4oaQ44K444Oj44Oz44OrKS93b3JrLz0vcHJvZHVjdF9pZC9SSueVquWPty8KLy9odHRwOi8vd3d3LmRsc2l0ZS5jb20vaG9tZS9kbGFmLz0vYWlkL+ODpuODvOOCtuODvElEL3VybC9odHRwOi8vd3d3LmRsc2l0ZS5jb20vbWFuaWF4L3dvcmsvPS9wcm9kdWN0X2lkL1JK55Wq5Y+3Lmh0bWwvP21lZGl1bT1ibG9nJnByb2dyYW09b25fc2FsZSZzb3VyY2U9YmxvZ3BhcnRzX3ZfcmFua2luZwovL2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvd29yay89L3Byb2R1Y3RfaWQvUkrnlarlj7cvP21lZGl1bT1ibG9nJnByb2dyYW09b25fc2FsZSZzb3VyY2U9YmxvZ3BhcnRzX1JhbmtpbmdQYXJ0cyZ1bmlxdWVfb3A9YWYKCQkJCS8v5ZWG5ZOB44Oa44O844K444G444Gu44K444Oj44Oz44OX44Kv44OD44K344On44Oz44KS5YmK6ZmkCgkJCQlpZihocmVmLmluZGV4T2YoIi91cmwvaHR0cCIpID4gLTEpewoJCQkJCWN1dE51bT1ocmVmLmluZGV4T2YoIi91cmwvaHR0cCIpOwoJCQkJCXN0clVybD1ocmVmLnNsaWNlKGN1dE51bSs1KTsKCgkJCQkJc3RyVXJsPXN0clVybC5yZXBsYWNlKC8uaHRtbC4qJC8sIi8iKTsKCgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoL1w/LiokLywiLyIpOwoKLy/mraPjgZfjgYRVUkwgaHR0cDovL3d3dy5kbHNpdGUuY29tL21hbmlheC93b3JrLz0vcHJvZHVjdF9pZC9SSueVquWPty8KLy9odHRwOi8vd3d3LmRsc2l0ZS5jb20vbWFuaWF4L2RsYWYvPS9saW5rL3dvcmsvYWlkL+ODpuODvOOCtuODvElEL2lkL1JK55Wq5Y+3Lmh0bWwKLy9odHRwOi8vbWFuaWF4LmRsc2l0ZS5jb20vZGxhZi89L2xpbmsvd29yay9haWQv44Om44O844K244O8SUQvaWQvUkrnlarlj7cuaHRtbAoJCQkJLy/llYblk4Hjg5rjg7zjgrgKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL2lkXC8oUnxCfFYpSi8pICl7CgoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLy5odG1sLiokLywiLyIpLnJlcGxhY2UoL2FpZFwvICpbXHNcU10qXC9pZC8sJz0vcHJvZHVjdF9pZCcpLnJlcGxhY2UoL1wvZGxhZlwvPVwvbGluay8sJycpOwoKLy/mraPjgZfjgYRVUkxodHRwOi8vd3d3LmRsc2l0ZS5jb20vbWFuaWF4L2NpcmNsZS9wcm9maWxlLz0vbWFrZXJfaWQvUkfnlarlj7cuaHRtbAovL2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvZGxhZi89L2xpbmsvcHJvZmlsZS9haWQv44Om44O844K244O8SUQvbWFrZXIvUkfnlarlj7cuaHRtbAoJCQkJLy/lh7rniYjjgrDjg6vjg7zjg5cKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL21ha2VyXC8oUnxCKUcvKSl7CgkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvZGxhZlwvICpbXHNcU10qXC9tYWtlci8sJ21ha2VyJyk7CgovL2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvZGxhZi89L2FpZC8vdXJsL2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9ob21lL3dlbGNvbWUKCQkJCS8v44OI44OD44OX44Oa44O844K444Go44GL44O744O744O75LiA5bqm44Om44O844K244O8SUTjga5VUkzplovjgY/jgajjgq/jg4Pjgq3jg7zjgYzmrovjgovjgaPjgb3jgYQKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goIi91cmwvIikpewoJCQkJCWlmKGhyZWYuaW5kZXhPZigiL3VybC8iKSA+IC0xKXsKCQkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvXC91cmxcL2h0dHA6XC9cLy4qJC8sIiIpLnJlcGxhY2UoLy5odG0vLCIvIik7CgoJCQkJCX0KCi8vaHR0cDovL3d3dy5kbHNpdGUuY29tL2hvbWUvZGxhZi89L2FpZC/jg6bjg7zjgrbjg7xJRC9saW5rL3RvcC5odG1sCi8vaHR0cDovL3d3dy5kbHNpdGUuY29tL21hbmlheC9kbGFmLz0vYWlkL+ODpuODvOOCtuODvElEL3llYXIvMjAxNC9tb250aC81L2RheS8zMS9saW5rL25ld3MuaHRtbAovL+OBk+OBhuOBmeOCi+OBqOOCouODleOCo+ODquOCqOOCpOODiOa2iOOBm+OCi2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvZGxhZi89L3llYXIvMjAxNC9tb250aC81L2RheS8zMS9saW5rL25ld3MuaHRtbAovL2RsYWYvPS/jgYLjgorjgafjgrXjgqTjg4jjgavooYzjgY/jgajjg4jjg6njg4Pjgqvjg7zjg5Hjg6njg6Hjg7zjgr/jgYzku5jjgYTjgaHjgoPjgYbjgZHjganogp3lv4Pjga7jgqLjg5XjgqPjg6rjgqjjgqTjg4hJROeEoeOBhOOBruOBp+OBiuOBneOCieOBj+eEoeWuswovL+ato+OBl+OBhFVSTGh0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvbmV3Lz0veWVhci8yMDE0L21vbi81L2RheS8zMS8KCQkJCS8v44Gd44Gu5LuWCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCIvYWlkLyIpKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWlkXC8uKj9cLy8sIi8iKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgkJCQkvL0NTU+S/ruatowoJCQkJZGxzaXRlQ1NTKCkKCgkJCS8vRGxzaXRl5q6L44KKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiLmRsc2l0ZS5jb20iKSA+IC0xKXsKCQkJCWlmKGhyZWYuaW5kZXhPZigiLz8iKSA+IC0xKXsKCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC9cL1w/LiokLywiLyIpOwoJCQkJCXNldExpbmsoKTsKCQkJCQlkbHNpdGVDU1MoKQoJCQkJfQoKCgkJCS8vRE1NPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goLy5kbW0uY28obXwuanApLykgJiYgaHJlZi5pbmRleE9mKCJfYXJ0aWNsZT0iKTwwKXsKCQkJCWlmKGhyZWYuaW5kZXhPZigiX2x1cmw9IikgPiAtMSl7CgkJCQkJY3V0TnVtPWhyZWYuaW5kZXhPZigiX2x1cmw9Iik7CgkJCQkJc3RyVXJsPWhyZWYuc2xpY2UoY3V0TnVtKzYpOwoJCQkJfQoKaHR0cDovL3d3dy5kbW0uY28uanAvZGMvZG91amluLy0vbGlzdC89L2FydGljbGU9bWFrZXIvaWQ9MjUxMzgvY2hlZWthbWE1OC0wMDEKCQkJCWlmKGhyZWYuaW5kZXhPZigiL2lkPSIpID4gLTEpewoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyguKlwvaWQ9Lio/XC8pLiokL2ksJyQxJyk7CgkJCQl9CgovL2h0dHA6Ly93d3cuZG1tLmNvLmpwL21vbm8vYm9vay8tL2RldGFpbC89L2NpZD3llYblk4FJRC/jgqLjg5XjgqPjg6rjgqjjgqTjg4hJRAoJCQkJaWYoaHJlZi5pbmRleE9mKCIvY2lkPSIpID4gLTEpewoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyguKlwvY2lkPS4qP1wvKS4qJC9pLCckMScpOwoJCQkJfQoKLy9odHRwOi8vd3d3LmRtbS5jby5qcC9wcG0vPS9famxvZmY9MS8xMjNkLTAwNgovL2h0dHA6Ly93d3cuZG1tLmNvLmpwL2RpZ2l0YWwvZG91amluLz0vX2psb2ZmPTEvZG91amluLTAwMQovL2h0dHA6Ly93d3cuZG1tLmNvbS9yZW50YWwvLS9kZXRhaWwvPS9jaWQ9MDAwXzM4NC9famxvZmY9MS8KCQkJCWlmKGhyZWYuaW5kZXhPZigiX2psb2ZmPSIpPi0xKXsKCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC9cL19qbG9mZj0uKiQvaSwnLycpOwoJCQkJCi8vaHR0cDovL3d3dy5kbW0uY29tL2RpZ2l0YWwvdmlkZW8vbW9uZG8vbW9yb3lhbWFfcG9yb3JpL2luZGV4X2h0bWwvPS9jaF9uYXZpPS9qbG9mZi0wMDEKCQkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiamxvZmYtIik+LTEpewoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoL1wvamxvZmYtLiokLywnLycpOwoJCQkJfQoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vYWQuYy1hdHMuanAvYWQvcC9yP19zaXRlPTY3Jl9hcnRpY2xlPTc0Jl9saW5rPTkzJl9pbWFnZT05MwovL2h0dHA6Ly9hZC5tYWlzdC5qcC9hZC9wL3I/X3NpdGU9MTAxNjUmX2xvYz0xMDQ1MCZfY2FtcGFpZ249NjYzJl9hcnRpY2xlPTU3NzcmX2xpbms9MzQzNDYmX2ltYWdlPTM1NTIxJl9kZWxpdmVyPTEKLy9odHRwOi8vYWQuZG1tLmNvbS9hZC9wL3I/X3NpdGU9OTk5OTk5OSZfYXJ0aWNsZT0xMDUyJl9saW5rPei7oumAgeWFiOOBrlVSTOaMh+WumueUqOOBruaVsOWtlyZfaW1hZ2U95LiN5piO44Gq5pWw5a2XCi8vaHR0cDovL2FwcC1hZGZvcmNlLmpwL2FkL3Avcj9fc2l0ZT05MzY0Jl9hcnRpY2xlPTU2Njc0Jl9saW5rPTE3MzEyOTAmX2ltYWdlPTE3MzEyOTEmc3VpZD1lYWUwOGZmNmQ1MWU2OGU4MTc4OGNhYTM3Y2Q3ZWI4MDQzNTI3MmM3YWE2OGJmNjQzMjM3MzkwNGRmZmU5NjdjJnNhZD0zMjQzNzkyMzgKLy/mnIDlsI/mp4vmiJAoX2xpbmvjgYzlv4XopoHjgarloLTlkIjjgoLjgYLjgovvvJ8paHR0cDovL2FwcC1hZGZvcmNlLmpwL2FkL3Avcj9fYXJ0aWNsZT01NjY3NCZfaW1hZ2U9MTczMTI5MQoJCQkvL0RNTeezu+OBquOBruOBi+OBqu+8n19zaXRl44GM44Ki44OV44Kj44Go5oCd44KP44KM44KL44GM5raI44GZ44Go5oCS44KJ44KM44KL5aC05ZCI44GM44GC44KL44Gu44Gn44GC44KK44GI44Gq44GE5aSn44GN44GE5pWw5a2X5oyH5a6a44CCX2FydGljbGXjgYxVUkzmjIflrpo9PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoIl9hcnRpY2xlPSIpPi0xKXsKCQkJCXZhciBzdHJTaXRlID0gIiI7CgkJCQl2YXIgc3RyTGluayA9ICIiOwoJCQkJdmFyIHN0ckltYWdlID0gIiI7CgoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCgkJCQlpZihocmVmLmluZGV4T2YoIl9zaXRlPSIpPi0xKXsKCQkJCQlzdHJTaXRlID0gIiZfc2l0ZT05OTk5OTk5OTk5OSI7CgkJCQl9CgkJCQlpZihocmVmLmluZGV4T2YoIl9saW5rPSIpPi0xKXsKCQkJCQlpZihwYXJhbXNbIl9saW5rIl0gIT0gIiIpewoJCQkJCQlzdHJMaW5rID0gIiZfbGluaz0iICsgcGFyYW1zWyJfbGluayJdOwoJCQkJCX0KCQkJCX0KCQkJCWlmKGhyZWYuaW5kZXhPZigiX2ltYWdlPSIpPi0xKXsKCQkJCQlpZihwYXJhbXNbIl9pbWFnZSJdICE9ICIiKXsKCQkJCQkJc3RySW1hZ2UgPSAiJl9pbWFnZT0iICsgcGFyYW1zWyJfaW1hZ2UiXTsKCQkJCQl9CgkJCQl9CgoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cPy4qJC8sIj9fYXJ0aWNsZT0iKSArIHBhcmFtc1siX2FydGljbGUiXSArIHN0clNpdGUgKyBzdHJMaW5rICsgc3RySW1hZ2U7CgoJCQkJc2V0TGluaygpOwoKCQkJLy/jgY7jgoXjgaPjgag9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiZ3l1dHRvLmNvbSIpICYmIGhyZWYubWF0Y2goL1wvYWYtLykpewoKCi8vZ3l1dHRvLmNvbS9ib29rL2FmLTEyOTkvYi02MS9hZnR5cGUtMi8o4oaQ5pyA5b6M44Gu44K544Op44OD44K344Ol44GM54Sh44GEVVJM44KC44GC44KL44Gu44Gn5rOo5oSPKQoJCQkJaWYoaHJlZi5tYXRjaCgvYWZ0eXBlLipcLy8pKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWYtLiphZnR5cGUuKj9cLy8sIi8iKTsKCi8vaHR0cDovL2d5dXR0by5jb20vY2FydC9hZi05MjU2L2FmdHlwZS0xP2FjdGlvbj1hZGQmaWQ9MTA0NDA5Jml0ZW1fcHJpY2VfaWQ9MTUyODE5Ci8v5q2j44GX44GEVVJMaHR0cDovL2d5dXR0by5jb20vY2FydC8/YWN0aW9uPWFkZCZpZD0xMDQ0MDkmaXRlbV9wcmljZV9pZD0xNTI4MTkKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goImlkPSIpICYmIGhyZWYubWF0Y2goIml0ZW1fcHJpY2VfaWQiKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9hZi0uKlw/LywiPyIpOwoKLy9odHRwOi8vZ3l1dHRvLmNvbS9hZi05ODc4KOKGkOOCouODleOCo+ODquOCqOOCpOODiElEKS9zZWFyY2gvc2VhcmNoX2xpc3QucGhwP3ByZVBhZ2U9JmFjdGlvbj1zb3J0JmdlbnJlX2lkPTIwNjg3Jm1vZGU9c2VhcmNoJnN1Yl9jYXRlZ29yeV9pZD0xNiZzZWFyY2hfaXRlbV9zZWFyY2hfaWQ9JnNldF9jYXRlZ29yeV9mbGFnPTEmc3R5cGU9bmV3CgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9cL2FmLS4qP1wvLykgJiYgIWhyZWYubWF0Y2goImFmdHlwZSIpKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWYtLio/XC8vLCIvIik7CgoJCQkJfWVsc2V7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cL2FmLS4qJC8sIiIpOwoJCQkJfQoKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2d5dXQudG8vY2F0ZWdvcnkucGh0bWw/YWZpZD03NjctVCZpdGVtPTExNTY4NAovL+S/ruato2h0dHA6Ly9neXV0LnRvL2l0ZW0xMTU2ODQKLy/jgZ3jga7lvozpo5vjgbZodHRwOi8vZ3l1dHRvLmNvbS9pL2l0ZW0xMTU2ODQKCQkJLy/jgY7jgoXjgaPjgag9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiZ3l1dC50byIpKXsKCQkJCWlmKGhyZWYubWF0Y2goImFmaWQ9IikgJiYgaHJlZi5tYXRjaCgiaXRlbT0iKSl7CgkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQlzdHJVcmwgPSAiaHR0cDovL2d5dXQudG8vaXRlbSIgKyBwYXJhbXNbIml0ZW0iXTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cubWVsb25ib29rcy5jb20vaW5kZXgucGhwP21haW5fcGFnZT1hZmZpX2dvJmFmZmlfdXJsPWh0dHAlM0ElMkYlMkZ3d3cubWVsb25ib29rcy5jb20lMkZpbmRleC5waHAlM0ZtYWluX3BhZ2UlM0RpbmRleCUyNmFnZSUzRDElMjZjYXRlZ29yeSUzRDAmYWZmaV9pZD1kb3VqaW4KCQkJLy/jg6Hjg63jg7Pjg5bjg4Pjgq/jgrk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgibWVsb25ib29rcy5jb20iKSl7CgkJCQlpZihocmVmLm1hdGNoKCJhZmZpX3VybD0iKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiYWZmaV91cmwiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9Ci8vaHR0cDovL3d3dy5tZWxvbmJvb2tzLmNvbS9pbmRleC5waHA/bWFpbl9wYWdlPXByb2R1Y3RfaW5mbyZwcm9kdWN0c19pZD1JVDAwMDAxNTk5NjkjLlU0bm53MUZRSlVNLnR3aXR0ZXIKCQkJCWlmKGhyZWYubWF0Y2goIiMuIikpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvI1wuLiokLywiIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKLy9odHRwOi8vbWFya2V0LnN1cnBhcmEuY29tL2dvLz9JSUQ95ZWG5ZOBSUQmQUZJRD3jgqLjg5XjgqPjg6rjgqjjgqTjg4hJRAovL2h0dHA6Ly9tYXJrZXQuc3VycGFyYS5jb20vZ28vP0FGSUQ944Ki44OV44Kj44Oq44Ko44Kk44OISUQmSUlEPeWVhuWTgUlECgkJCS8v44K144O844OR44OpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goInN1cnBhcmEuY29tIikgJiYgaHJlZi5tYXRjaCgiQUZJRCIpKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJBRklEIl0sIiIpOwoKCQkJCXNldExpbmsoKTsKCgkJCS8v44Gd44Gu5LuWOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCgoJCQl9ZWxzZXsKCQkJfQoKCgkJCS8v44K544Oe44Ob6Zai6YCjKOeEoemnhOOBi+OCguOBl+OCjOOBquOBhOOBkeOBqeS9meWIhuOBquODkeODqeODoeODvOOCv+WJiumZpCktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9odHRwOi8vYXBwZHJpdmVyLmpwL3Mvc21hcnQtYy9jbGljaz9kaWdlc3Q9ZmYzZTQyYjgzZWVhNjU4NzM2Y2FkZTgwZmQ2YzBhN2ZhYWY0NDc0ODRmY2RhZDBkMDBhY2YyNTNhMmE0YzIzZCZjYW1wYWlnbl9pZD0xNzU3MSZpZGVudGlmaWVyPTJ3NG9sVnRDCgkJCS8vYXBwLWFkZm9yY2U9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQlpZihocmVmLm1hdGNoKCJhcHBkcml2ZXIuanAvcy8iKSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL2lkZW50aWZpZXI9LiokLywnaWRlbnRpZmllcj0nKTsKCQkJCQoJCQkJc2V0TGluaygpOwoKCgkJCS8v44Gd44Gu5LuWOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCgkJCX1lbHNlewoKCQkJfQoKCgoKCQkJLy/mtbflpJbjgqLjg5XjgqPjgrXjgqTjg4jplqLpgKMo54Sh6aeE44GL44KC44GX44KM44Gq44GE44GR44Gp5L2Z5YiG44Gq44OR44Op44Oh44O844K/5YmK6ZmkKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKLy9odHRwOi8vc2NyaXB0cy5hZmZpbGlhdGVmdXR1cmUuY29tL0FGQ2xpY2suYXNwP2FmZmlsaWF0ZUlEPTMwNjgwMCZtZXJjaGFudElEPTYyODYmcHJvZ3JhbW1lSUQ9MTczNTcmbWVkaWFJRD0xNDE1OTUmdHJhY2tpbmc9RWJzZXRwaG90b3MuY29tJnVybD0KLy9odHRwOi8vc2NyaXB0cy5hZmZpbGlhdGVmdXR1cmUuY29tL0FGQ2xpY2suYXNwP21lcmNoYW50SUQ9OTk5OTk5OTkmcHJvZ3JhbW1lSUQ9MTczNTcmbWVkaWFJRD05OTk5OTk5OTkmdHJhY2tpbmc9CgkJCS8vYWZmaWxpYXRlIGZ1dHVyZSjmtbflpJYpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJaWYoaHJlZi5tYXRjaCgiYWZmaWxpYXRlZnV0dXJlLmNvbSIpICYmIGhyZWYubWF0Y2goImFmZmlsaWF0ZUlEPSIpKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1w/LiokLywiIikgKyAiP3Byb2dyYW1tZUlEPSIgKyBwYXJhbXNbInByb2dyYW1tZUlEIl0gKyAiJm1lcmNoYW50SUQ9OTk5OTk5OTkmbWVkaWFJRD05OTk5OTk5OTkmdHJhY2tpbmc9IjsKCQkJCXNldExpbmsoKTsKCgovL2h0dHA6Ly9hZmZpbGlhdGVzLmpsaXN0LmNvbS9jbGljay80NzIxP3VybD1odHRwOi8vd3d3LmpsaXN0LmNvbS9wcm9kdWN0L1BSRTM2NTcKCQkJLy9BZmZpbGlhdGUgamxpc3Qo5rW35aSW57O7KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJhZmZpbGlhdGVzLmpsaXN0LmNvbSIpKXsKCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJil1cmw9aHR0cC8pKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmwiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly93d3cuYXdpbjEuY29tL2NyZWFkLnBocD9hd2lubWlkPTU2MTgmYXdpbmFmZmlkPSEhIWlkISEhJmNsaWNrcmVmPSZwPWh0dHAlM0ElMkYlMkZ3d3cub2thZGlyZWN0LmNvbSUyRm91dGxldCUyRiAKCQkJLy9BZmZpbGlhdGUgV2luZG93KOa1t+Wkluezuyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiYXdpbjEuY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgvKFw/fFwmKXA9aHR0cC8pKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJwIik7CgkJCQkJc2V0TGluaygpOwoKLy9odHRwczovL3d3dy5hd2luMS5jb20vYXdjbGljay5waHA/bWlkPTEwNzQmaWQ9MTc2OTE3CgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpaWQ9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siaWQiXSwiIikucmVwbGFjZSgvKFw/fFwmKWlkPS8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL3d3dy5jZGphcGFuLmNvLmpwL2FmZi9jbGljay5jZ2kvUHl0SlRHVzdMb2svNDc1OS9BMDEzNjExL2dvb2RzJTJGZ29vZHNfZGV0YWlsLmh0bWw/S0VZPU5FT0dEUy0xMDY0OTkKLy/mraPjgZfjgYRodHRwOi8vd3d3LmNkamFwYW4uY28uanAvcHJvZHVjdC9ORU9HRFMtMTA2NDk5CgkJCS8vY2RKYXBhbijmtbflpJYpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvd3d3LmNkamFwYW4uY28uanBcL2FmZlwvLykpewoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCgkJCQlpZihwYXJhbXNbIktFWSJdICE9ICIiKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWZmXC8uKktFWT0vLCIvcHJvZHVjdC8iKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly93d3cuY2RqYXBhbi5jby5qcC9jZ2ktYmluL2FmZmNsaWNrLmNnaT9LRVk9JnRvPWh0dHAlM0ElMkYlMkZ3d3cuY2RqYXBhbi5jby5qcCUyRmRldGFpbHZpZXcuaHRtbCZjbGljaz01OWNUaSUyRkguZFlEQXNUQXFlMXVhVE81UGE4V0ImaXNfbmVvbG9nPTAKCQkJLy9jZEphcGFuKOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC93d3cuY2RqYXBhbi5jby5qcFwvY2dpLWJpblwvYWZmY2xpY2suY2dpLykgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKXRvPWh0dHAvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ0byIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3LmNsaXhnYWxvcmUuY29tL1BTYWxlLmFzcHg/QklEPTMzMjI4JkFmSUQ9MTgxNjAxJkFkSUQ9NDY4NSZMUD13d3cud2luZW1ha2Vyc2Nob2ljZS5jb20uYXUKCQkJLy9jbGl4Z2Fsb3JlKOa1t+Wkluezu+OCouODleOCoyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJjbGl4Z2Fsb3JlLmNvbSIpID4gLTEgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKUxQPS8pKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsIkxQIik7CgkJCQlpZighc3RyVXJsLm1hdGNoKC9eaHR0cC8pKXsKCQkJCQlzdHJVcmwgPSAiaHR0cDovLyIgKyBzdHJVcmw7CgkJCQl9CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cuamRvcW9jeS5jb20vY2xpY2stNzQ3NDc3OS0xMDY3NjAyNj91cmw9aHR0cCUzQSUyRiUyRnd3dy5kaXNuZXlzdG9yZS5jb20lMkZ0cmFuc2ZlciUyRjIyNDUxMCUyRnRlZXMtdG9wcy1zaGlydHMtY2xvdGhlcy1jb3VudHJ5LWJlYXItamFtYm9yZWUtYXR0cmFjdGlvbi1wb3N0ZXItdGVlLWZvci1hZHVsdHMtbGltaXRlZC1hdmFpbGFiaWxpdHklMkZtcCUKLy9odHRwOi8vd3d3LnRrcWxoY2UuY29tL2NsaWNrLTc0NzQ3NzktMTA2NzYwMjY/dXJsPWh0dHAlM0ElMkYlMkZ3d3cuZGlzbmV5c3RvcmUuY29tJTJGdHJhbnNmZXIlMkYyMjQ1MTAlMkZ0ZWVzLXRvcHMtc2hpcnRzLWNsb3RoZXMtY291bnRyeS1iZWFyLWphbWJvcmVlLWF0dHJhY3Rpb24tcG9zdGVyLXRlZS1mb3ItYWR1bHRzLWxpbWl0ZWQtYXZhaWxhYmlsaXR5JTJGbXAlMkYxMzU2Mjk2JTJGMTAwMDIyOCUyRiUzRkNNUCUzREFGTC1BZmZMU0dlbiUyNmF0dCUzRExTR2VuQWZmbCZjanNrdT03NTA1MDU1ODgwNDkwTQoJCQkvL0NvbW1pc3Npb24gSnVuY3Rpb24o5rW35aSWKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCS8v44Oq44OA44Kk44Os44Kv44OI5b6M44Gr5rCX5LyR44KB56iL5bqm44Gr5L+u5q2jCgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiamRvcW9jeS5jb20iKSA+IC0xICB8fCBocmVmLm1hdGNoKCJ0a3FsaGNlLmNvbSIpKXsKCQkJCWlmKGhyZWYubWF0Y2goInVybD1odHRwIikpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoJCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3d3dy5qZG9xb2N5LmNvbS9jbGljay03NDc0Nzc5LTEwNjc2MDI2CgkJCQl9ZWxzZXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvY2xpY2stLio/LS8sIi9jbGljay0wLSIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL2NqLmRvdG9taS5jb20vcGIxMTVndjMyTC92MTYvS0tNTk1PUUovSi9KL0ovSj93PWQlM0MlM0NxMjJ5JTNBJTJGJTJGNTU1LnNteHp4bDcubHh2JTNBSDklMkZsdXJsdC05LUFBQ0RDRUc5JTNDJTNDUCUzQ3EyMnklM0ElMkYlMkY1NTUuc214enhsNy5seHYlMkYlM0MKCQkJLy9Db21taXNzaW9uIEp1bmN0aW9uKOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJkb3RvbWkuY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgvXD8vKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cPy4qJC8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL2dldC5lc2VsbGVyYXRlLm5ldC9nZXQvQUxQNDA0ODk1NjM2L2RlZmF1bHQuaHRtP3NrdWlkPVNLVTgyOTE2NDEzMzIwJmFmZmlkPUFGTDgzOTE2NTA2MjAmYXQ9CgkJCS8vZXNlbGxlcmF0ZSjmtbflpJbns7spPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goImVzZWxsZXJhdGUubmV0IikpewoJCQkJaWYoaHJlZi5tYXRjaCgvKFw/fFwmKWFmZmlkPUFGTC8pKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFmZmlkIl0sIiIpLnJlcGxhY2UoLyhcP3xcJilhZmZpZD0vLCIiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly90cmFjay5tb3JlbmljaGUuY29tL2hpdC5waHA/dz0yNDUzNjImcz0yNTYKCQkJLy9Nb3JlTmljaGUo5rW35aSW57O7KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJ0cmFjay5tb3JlbmljaGUuY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgvKFw/fFwmKXc9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidyJdLCIiKS5yZXBsYWNlKC8oXD98XCYpdz0vLCIiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly90cmFjay5vbWd1ay5jb20vP0FJRD01NzM4NzQmTUlEPTUxOTUxMiZQSUQ9MTEyODUmQ0lEPTQxNDgyMjMmQ1JJRD02MjM1NSZXSUQ9NTAyMTAKCQkJLy9PbmxpbmUgTWVkaWEgR3JvdXAo5rW35aSWKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCS8vQUlE44GM44Ki44OV44KjUElE44GM44Oa44O844K444Gn44Gp44Gh44KJ44KC5raI44Gb44Gq44GE44CC6aOb44KT44Gg44GC44Go44Gu44Oa44O844K444KS5L+u5q2j44GX44Gm5a++5b+cKOawl+S8keOCgSkKCQkJLy9DUklE44Gv55S75YOPVVJM44Gj44G944GECgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3RyYWNrLm9tZyh1a3wyfC4qKS5jb20vKSAmJiBocmVmLm1hdGNoKCJXSUQ9IikpewoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvXD8uKiQvLCIiKSArICI/QUlEPSIgKyBwYXJhbXNbIkFJRCJdICsgIiZQSUQ9IiArIHBhcmFtc1siUElEIl0gKyAiJkNSSUQ9IiArIHBhcmFtc1siQ1JJRCJdOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3Lm15ZGVhbC5jb20ubXkvdHJhdmVsLz9hX2FpZD0xMjM0NTY3ODkxCgkJCS8vT25saW5lIE1lZGlhIEdyb3VwKOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9teWRlYWwuY29tLm15LykgJiYgaHJlZi5tYXRjaCgiYV9haWQ9IikpewoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFfYWlkIl0sIiIpLnJlcGxhY2UoImFfYWlkPSIsIiIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3LnBhaWRvbnJlc3VsdHMubmV0L2MvMzc2NDUvMS84NzYvMAoJCQkvL3BhaWQgb24gcmVzdWx0cyjmtbflpJYpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3BhaWRvbnJlc3VsdHMubmV0XC9jXC8vKSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL3BhaWRvbnJlc3VsdHMubmV0XC9jXC8oLio/KVwvaS8sIjk5OTk5OTk5OTkiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3NlY3VyZS5zdHJhd2JlcnJ5bmV0LmNvbS9jalBhZ2UuYXNweD91cmw9aHR0cCUzQS8vdXMuc3RyYXdiZXJyeW5ldC5jb20vbmV3LWN1c3RvbWVyLwoJCQkvL3NlY3VyZS5zdHJhd2JlcnJ5bmV0P+a1t+WkluOBquOBruOBp+OCiOOBj+OCj+OBi+OCk+OBquOBhOOBkeOBqUNvbW1pc3Npb24gSnVuY3Rpb27jgYvjgonpo5vjgpPjgaAKCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgic2VjdXJlLnN0cmF3YmVycnluZXQuY29tIikgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKXVybD1odHRwLykpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHBzOi8vd3d3LnNoYXJlYXNhbGUuY29tL3IuY2ZtP3U9ODQxMTU2JmI9MjM0Nzg2Jm09Mjc2MDEmYWZmdHJhY2s9JnVybGxpbms9d3d3JTJFdGlja2V0Zmx5JTJFY29tJQoJCQkvL3NoYXJlYXNhbGUo5rW35aSWKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJLy91cmxsaW5r44Gu5oyH5a6a44GM44Gq44GE44KC44Gu44KC44GC44Gj44Gf44GR44Gp44CB5L+u5q2j5LiN5Y+v6IO944Gg44Gj44GfKOODkeODqeODoeODvOOCv3Xjgaht44KS6Ieq5YiG44Gu54mp44Gr5beu44GX5pu/44GI44KM44Gw6KGM44GR44KL44G/44Gf44GEKQoJCQkvL2I95pys5p2l44GuVVJM44CBdT3jgqLjg5XjgqPjg6rjgqjjgqTjg4hJROOAgW0944Ki44OV44Kj44Oq44Ko44Kk44OISUTjgajntJDjgaXjgYTjgabjgYTjgovkvZXjgYvjga7mlbDlgKQKCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgic2hhcmVhc2FsZS5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpdXJsbGluaz0vKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmxsaW5rIik7CgoJCQkJaWYoIXN0clVybC5tYXRjaCgvXmh0dHAvKSl7CgkJCQkJc3RyVXJsID0gImh0dHA6Ly8iICsgc3RyVXJsOwoJCQkJfQoKCQkJCXNldExpbmsoKTsKCgovL2h0dHA6Ly9jbGt1ay50cmFkZWRvdWJsZXIuY29tL2NsaWNrP3A9MjE4NzQmYT0yMjEyNzUwJmc9MjEyMjU2MzImZXBpPWJkcGNzZGJwY3VrMjcxMgoJCQkvL1RyYWRlZG91YmxlcijmtbflpJbns7spPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3RyYWRlZG91Ymxlci5jb21cLy8pKXsKCQkJCWlmKGhyZWYubWF0Y2goImc9IikpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cPy4qJC8sIiIpOwoKCQkJCQlzdHJVcmwgPSBzdHJVcmwgKyAiP3A9IiArIHBhcmFtc1sicCJdICsgIiZhPSIgKyBwYXJhbXNbImEiXTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9zb2x1dGlvbnMudHJhZGVkb3VibGVyLmNvbS9yZWRpcmVjdC9leHBlZGlhLz90ZF9wcm9ncmFtX2lkPTIxODc0JkFGRkNJRD1leHBlLnVrLjAwMS4wMDAuMjIxMjc1MC4wJmN1aWQ9ZTYxMDIxZWFmM2NlMjg0YzE2NDc4MjU1MmEwOWUxMDAmQUZGTElEPSZ1cmw9aHR0cCUzQSUyRiUyRnd3dy5leHBlZGlhLmNvLnVrCgkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpdXJsPWh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKLy9odHRwOi8vdHJhY2sud2ViZ2FpbnMuY29tL2NsaWNrLmh0bWw/d2dwcm9ncmFtaWQ9NTU4NiZ3Z2NhbXBhaWduaWQ9JTVFJTVFJTVFY2FtcGFpZ25faWQlNUUlNUUlNUUmd2d0YXJnZXQ9aHR0cDovL3RyYWNrLndlYmdhaW5zLmNvbS9jbGljay5odG1sP3dnY2FtcGFpZ25pZD0lNUUlNUUlNUVjYW1wYWlnbl9pZCU1RSU1RSU1RSZ3Z3Byb2dyYW1pZD01NTg2JndndGFyZ2V0PWh0dHA6Ly93d3cuaWRlbnRpdHlkaXJlY3QuY28udWsvbXktc3BlY2lhbC1jaHJpc3RtYXMtYWR2ZW50dXJlLWJpZy5odG1sP21pZD0xMzA2NCZ1dG1fc291cmNlPXdlYmdhaW5zJnV0bV9tZWRpdW09YWZmaWxpYXRlJnV0bV9jYW1wYWlnbj0xMzA2NAoJCQkvL3dlYmdhaW5zKOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJ0cmFjay53ZWJnYWlucy5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpd2d0YXJnZXQ9aHR0cC8pKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsIndndGFyZ2V0Iik7CgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwOi8vYWQuemFub3guY29tL3BwYy8/MTI2MjExMTFDMTQ1MjcwOTEwMFQmVUxQPWh0dHAlM0El44Oq44OA44Kk44Os44Kv44OI5YWICgkJCS8vWmFub3go5rW35aSWKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJhZC56YW5veC5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpVUxQPWh0dHAvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJVTFAiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3IucmVmaW5lZGFkcy5jb20vYnMtbWFwcGluZy5waHA/dj16MSZhaWQ9MzgxNCZvaWQ9MTAzMSZ6YW5waWQ9MTkxNjk0NzQ2NTY1MTk4NzQ1NiZ1c2VyaWQ9MTAyMTU4MyZ1cmw9aHR0cCUzQSUyRiUyRnd3dzMuYmFzZS5kZSUyRmFkcyUzRnJ0JTNEOCUyNmV0JTNEMTYlMjZpJTNENjMwMjclMjZzZSUzRHAlMjZjcyUzRDUwNDQlMjZldiUzRFtNRURJQUNPREVdJTI2dXNlcmlkJTNEMTAyMTU4MwoJCQkvL1phbm94KOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgicmVmaW5lZGFkcy5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpdXJsPWh0dHAvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmwiKTsKCQkJCXNldExpbmsoKTsKCgoJCQl9ZWxzZXsKCgkJCX0KCgoKCgoKCQkJLy/lhbHpgJrjg4jjg6njg4Pjgqvjg7zns7so44OI44Op44OD44Kr44O85bCC6ZaA57O7KS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCQkJLy/ooYzli5XliIbmnpDns7s6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCi8vaHR0cDovL3d3dy5zdXJ1Z2EteWEuanAvZGF0YWJhc2UvMTA3MTAwMDAxMDAwLmh0bWw/dXRtX3NvdXJjZT1jb25lY28mdXRtX21lZGl1bT1DUEMmdXRtX2NhbXBhaWduPWtha2FrdV9uZXcmaTRjPTE5MCZpNGE9NQovL2h0dHA6Ly93d3cuY2FyYXZhbi15dS5jb20vc2hvcC9nL2c0OTA1NTI0ODExMzg0Lz91dG1fc291cmNlPWtha2FrdS5jb20mdXRtX21lZGl1bT1wcmljZUNvbXBhcmlzb24mdXRtX2NhbXBhaWduPWtha2FrdS5jb20KLy9odHRwOi8vcC50bC82YlhRP3V0bV9jb250ZW50PWJ1ZmZlcmQwMDQ1CgkJCS8v5YiG5p6Q44OI44Op44OD44Kr44O8CgkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJil1dG1fLykpewoJCQkJaWYoaHJlZi5pbmRleE9mKCJ1dG1fc291cmNlIikgPiAtMSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oXD98XCYpdXRtX3NvdXJjZT0uKiQvLCIiKTsKCQkJCX0KCgkJCQlpZihocmVmLm1hdGNoKCJ1dG1fY2FtcGFpZ24iKSl7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLyhcP3xcJil1dG1fY2FtcGFpZ249LiokLywiIik7CgkJCQl9CgoJCQkJaWYoaHJlZi5tYXRjaCgidXRtX21lZGl1bSIpKXsKCQkJCQlzdHJVcmwgPSBzdHJVcmwucmVwbGFjZSgvKFw/fFwmKXV0bV9tZWRpdW09LiokLywiIik7CgkJCQl9CgoJCQkJaWYoaHJlZi5tYXRjaCgidXRtX2NvbnRlbnQiKSl7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLyhcP3xcJil1dG1fY29udGVudD0uKiQvLCIiKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgoJCQkvLzJjaOezuzo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCgoJCQkvLzJjaD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXC9pbWUuKG51fHN0KVwvfGp1bXAuMmNoLm5ldFwvXD98cGlua3Rvd2VyLmNvbVwvKS8pKXsKCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLy4qKFwvaW1lLihudXxzdClcL3xqdW1wLjJjaC5uZXRcL1w/fHBpbmt0b3dlci5jb21cLykvLCJodHRwOi8vIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9yb3V0ZTUub3JnLz9xPWh0dHA6Ly93d3cua2luY2hvLmNvLmpwL3duZXcvMjAwOTAzL2xpcXVpZF9jb3JkbGVzcy9pbmRleC5odG1sCgkJCS8vUkVBRDJDSAoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9yb3V0ZTUub3JnXC9cP3E9LykpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwicSIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vYnVianMuY29tL2h0dHA6Ly93d3cuNGdhbWVyLm5ldC9nYW1lcy8xMDYvRzAxMDY0OS8yMDE0MDMwNTAxMi8KCQkJLy9S44Gh44KD44KT44Gt44KLPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL2J1YmpzLmNvbVwvaHR0cC8pKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvaHR0cHM/OlwvXC9idWJqcy5jb21cL2h0dHAvLCJodHRwIik7CgkJCQlzZXRMaW5rKCk7CgoKCQkJLy/jgqLjg5XjgqPjg6rjgqjjgqTjg4jns7s6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCQkJLy/igLvjgrfjg6fjg4Pjg5fns7vni6zoh6rjga7jg4jjg6njg4Pjgqvjg7zjgarjganjga/jgrfjg6fjg4Pjg5fliKXjgavov73liqAKCi8v5pmu6YCa44GuVVJMLmh0bWw/YWRfY29kZT0yODgwUzBOTEdDUDE0MDUxNwoJCQkvL2FkX2NvZGXjga/luoPlkYrjga7nsr7luqbjgpLjgYLjgZLjgovjgonjgZfjgYTjga7jgafliYrpmaQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpYWRfY29kZT0vKSl7CgkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFkX2NvZGUiXSwiIikucmVwbGFjZSgvKFw/fCYpYWRfY29kZT0vLCIiKTsKCQkJCXNldExpbmsoKTsKCgkJCS8vYWlk44Gv44Ki44Kv44K744K5SUTjgajjgYTjgYbjgoLjga7jgonjgZfjgY/jgIHluoPlkYrjga7nsr7luqbjgpLjgYLjgZLjgovjgonjgZfjgYTjga7jgafliYrpmaQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goLyhcP3xcJilhaWQ9LykKCQkJICAvL29rd2F2ZeOBr+mZpOWklgoJCQkgICYmICFsb2NhdGlvbi5ocmVmLm1hdGNoKCJva3dhdmUuanAiKQoJCQkgIC8v44Ok44OV44Kq44Kv44KC6Zmk5aSWCgkJCSAgJiYgIWxvY2F0aW9uLmhyZWYubWF0Y2goImF1Y3Rpb25zLnlhaG9vIikKCQkJICAvL2FmZmlsaWF0ZSB3aW5kb3co5rW35aSWKeOCgumZpOWklgoJCQkgICYmICFocmVmLm1hdGNoKCJhZmZpbGlhdGV3aW5kb3cuY29tIikKCQkJICAvL1phbm94KOa1t+WklinjgoLpmaTlpJYKCQkJICAmJiAhaHJlZi5tYXRjaCgicmVmaW5lZGFkcy5jb20iKSl7CgkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFpZCJdLCIiKS5yZXBsYWNlKC8oXD98JilhaWQ9LywiIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9hZGNsci5qcC9jL3FvamRtdWlqP3BjX21haXN0X2J1eWVyPTI1ODEmX2N2cG9pbnQ9ODExJl94dWlkPXh1aWR4NDY3N2IwY2YzOHgzMWMKCQkJLy9hZGNscj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goImFkY2xyLmpwIikgJiYgaHJlZi5tYXRjaCgvXD8vKSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1w/LiokLywiIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9kbXMubmV0bW5nLmNvbS9zaS9DTS9UcmFja2luZy9UcmFja1JlZGlyZWN0LmFzcHg/c2ljbGllbnRpZD0yNTIwJnJlZGlyZWN0dXJsPWh0dHAlM0ElMkYlMkZwdC5hZmwucmFrdXRlbi5jby5qcCUyRmMlMkYwMDExMzRjZS4wZmMzYjEzMyUyRl9SVHZyZ2oxMDAwMDA2MyUzRnVybCUzRGh0dHAlM0ElMkYlMkZpdGVtLnJha3V0ZW4uY28uanAlMkZkdGMlMkY0OTYwOTk5OTY0MTY0JTJGJlNJQ3VzdFRyYW5zVHlwZT05ODU0JnRyYW5zYWN0aW9uYW1vdW50PTE4JngxPTI2ODMmeDI9MDE4MDIwODAmeDM9MTEzMDYyNzI5NSZ4ND0manNjcmlwdD0wCi8vaHR0cDovL2Rtcy5uZXRtbmcuY29tL3NpL0NNL1RyYWNraW5nL1RyYWNrUmVkaXJlY3QuYXNweD9zaWNsaWVudGlkPTI1MjAmcmVkaXJlY3R1cmw9aHR0cDovL3d3dy5hbWF6b24uY28uanAvZHAvQjAwMTlEUEhWTy9yZWY9YXNjX2RmX0IwMDE5RFBIVk85NTM5NDkvP3RhZz1jb25lY28tY2UtMjImY3JlYXRpdmU9OTMxMSZjcmVhdGl2ZUFTSU49QjAwMTlEUEhWTyZsaW5rQ29kZT1hc24mbWU9QU4xVlJRRU5GUkpONSZTSUN1c3RUcmFuc1R5cGU9OTg1NCZ0cmFuc2FjdGlvbmFtb3VudD01Mi42JngxPTI4MjgmeDI9MDExMDk5OTkmeDM9MTA5MDkwOTIxMiZ4ND04ZjAwMWIyNDg3Y2RhNTRjYzQ2NDk2YzMzMDg2NjhjMSZqc2NyaXB0PTAKCQkJLy9uZXRtbmc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJkbXMubmV0bW5nLmNvbSIpID4gLTEpewoJCQkJaWYoaHJlZi5pbmRleE9mKCJyZWRpcmVjdHVybD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJyZWRpcmVjdHVybCIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgkJCS8v5aSa5YiG44OI44Op44OD44Kr44O844Go5oCd44KP44KM44KLKGxpc3QuUTEw44Go44GL44Gn56K66KqNKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoImphZWh1aWQiKSA+IC0xKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKFw/fFwmKWphZWh1aWQ9LiokLywiIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9kbXMubmV0bW5nLmNvbS9zaS9jbS90cmFja2luZy9jbGlja3JlZGlyZWN0LmFzcHg/c2l0cmFja2luZ2lkPTU2NTIzMTU1MCZzaWNsaWVudGlkPTc3MjImc2lhZHRyYWNraWQ9MzE4OTEwMzIzNjYmc2luZXR3b3JrPXMmc2ltb2JpbGU9JnNpZGV2aWNlPWMKLy9odHRwOi8vdHJhY2suc2VhcmNoaWduaXRlLmNvbS9zaS9jbS90cmFja2luZy9jbGlja3JlZGlyZWN0LmFzcHg/c2l0cmFja2luZ2lkPTY5NjI5NjQwNiZzaWNsaWVudGlkPTk5OTImc2lhZHRyYWNraWQ9NDI2OTcyNzg2ODQmc2luZXR3b3JrPXMmc2ltb2JpbGU9JnNpZGV2aWNlPWMKCQkJLy/jg5Hjg6njg6Hjg7zjgr9zaXRyYWNraW5naWTku6XpmY3pmaTljrso5a6f6aiT55qE5a6f6KOFKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJzaXRyYWNraW5naWQiKSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oLipzaXRyYWNraW5naWQpLiokL2ksJyQxPScpICsgcGFyYW1zWyJzaXRyYWNraW5naWQiXTsKCQkJCXNldExpbmsoKTsKCgkJCS8vdHJhZmZpY2dhdGXjga7jg4jjg6njg4Pjgqvjg7zlnovjgqLjg5XjgqPjg6rjgqjjgqTjg4jjgonjgZfjgY3jg5Hjg6njg6Hjg7zjgr/jgpLkuovliY3jgavmtojjgZko5bqD5ZGK57WM55Sx5b6M44Gr44Kq44Oq44K444OK44OrVVJM44Grd2FwcuOBjOOBpOOBj+OCieOBl+OBhO+8nyk9PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpd2Fwcj0vKSl7CgkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbIndhcHIiXSwiIik7CgkJCQlzZXRMaW5rKCk7CgoJCQkvL3RyYWZmaWNnYXRl44GLTGlua3N5bmVyZ3njga7jg4jjg6njg4Pjgqvjg7zlnovjgqLjg5XjgqPjg6rjgqjjgqTjg4jjgonjgZfjgY3jg5Hjg6njg6Hjg7zjgr/jgpLkuovliY3jgavmtojjgZko44Kq44Oq44K444OK44OrVVJM44GrcGFydG5lcklk44GM44Gk44GP44KJ44GX44GE77yfKT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvKFw/fFwmKXBhcnRuZXJpZD0vKSl7CgkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbInBhcnRuZXJpZCJdLCIiKS5yZXBsYWNlKCJwYXJ0bmVyaWQ9IiwiIik7CgkJCQlzZXRMaW5rKCk7CgoJCQkvL+OCouODleOCo+ODquOCqOOCpOODiOOBqOaAneOBl+OBjeS4jeimgeOBquODkeODqeODoeODvOOCv3Zvcz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpdm9zPS8pKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKFw/fFwmKXZvcz0uKiQvLCIiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3RleHRhZC5uZXQ6MTAwMDEvY2dpLWJpbi9yZWRpci5jZ2k/dWlkPTEwNDczJmJpZD0yJmZyb209dmlkZW8mc2l0ZT1odHRwOi8vd3d3LjJpY2EubmV0LyVFNiU5NiU5OSVFOSU4NyU5MS8KCQkJLy90ZXh0YWQKCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvdGV4dGFkLm5ldC8pICYmIGhyZWYubWF0Y2goL3NpdGU9aHR0cC8pKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInNpdGUiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3d3dy54YWlkLmpwL3IvP2RpZD01MDAwMzY3NzgmZ3VpZD1PTiZfeHVpZD14dWlkeDQ2NzdhMzcyMTd4NWU2CgkJCS8veGFpZOW6g+WRiui/vei3oT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoInhhaWQuanAiKSA+IC0xICYmIGhyZWYuaW5kZXhPZigiX3h1aWQ9IikgPiAtMSl7CgkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJfeHVpZCJdLCIiKTsKCQkJCQlzZXRMaW5rKCk7CgoJCQkvL+OBneOBruS7ljo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OgoKCQkJfWVsc2V7CgkJCQkvL3dhYWTjgpLlrp/pqJPnmoTjgavliYrpmaQKCQkJCWlmKGhyZWYubWF0Y2goIiZ3YWFkIikpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sid2FhZCJdLCIiKS5yZXBsYWNlKCJ3YWFkPSIsIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgkJCX0KCgoKCgoJCQkvL+acgOe1guS/ruatoz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCWlmKHN0clVybC5tYXRjaCgiYWZmaWxpYXRlX3R5cGU9IikpewoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFmZmlsaWF0ZV90eXBlIl0sIiIpLnJlcGxhY2UoImFmZmlsaWF0ZV90eXBlPSIsIiIpOwoJCQkJc2V0TGluaygpOwoJCQl9CgoJCQlpZihzdHJVcmwubWF0Y2goImFmZmlsaWF0ZV9pZD0iKSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siYWZmaWxpYXRlX2lkIl0sIiIpLnJlcGxhY2UoImFmZmlsaWF0ZV9pZD0iLCIiKTsKCQkJCXNldExpbmsoKTsKCQkJfQoKLy9odHRwOi8vd3d3LmRpc25leXN0b3JlLmNvbS90cmFuc2Zlci8yMjQ1MTAvP0NNUD1BRkwtQWZmTFNHZW4mYXR0PUxTR2VuQWZmbCZ1cmw9JkxTSUQ9MHwxMDY3NjAyNnwKCQkJLy9Db21taXNzaW9uIEp1bmN0aW9uKOa1t+Wkluezuynjga7mrovjgorvvJ8KCQkJaWYoaHJlZi5tYXRjaCgvTFNJRD0uKj9cfC4qP1x8LykpewoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9MU0lEPS4qP1x8Lio/XHwvLCIiKTsKCQkJCXNldExpbmsoKTsKCQkJfQoKCgkJCS8v5pyA57WC5L+u5q2j44GT44GT44G+44GnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoKCQl9Ly9tYWluIGZvcuaWh+OBk+OBk+OBvuOBpz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KfWNhdGNoKGUpewovLwl0aHJvdyhlKTsKCUdNX2xvZyhlKTsKfQoKCi8q5a++5b+c5LiN5Y+v6IO944Gg44Gj44Gf44KC44Gu5LiA6KanKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKCi8vaHR0cDovL3N0b3JlLnNob3BwaW5nLnlhaG9vLmNvLmpwLyjljYrop5Loi7HmlbDlrZfjga7jg57jgqTjgrfjg6fjg4Pjg5dJRCkvKOWNiuinkuiLseaVsOWtl+OBruWVhuWTgUlEKS5odG1sCgkvL3lhaG9v44Gu44Oe44Kk44K344On44OD44OXVVJMPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy9odHRwOi8vcmQuYW5lLnlhaG9vLmNvLmpwL3JkP2VwPVJXLnUyZnUxanRyc1Bna0FvUzNvcFV2Vmh3ZURFSU5iaktXSnpiTEVlcTB4MUxweHRvU1UxLlBjUzBjOXhkc0VocmEzMVhUMUR3dl91elZBQkV3V2l2N193b19oYXRMRl9Na2kxb1BRaTNwNi51NHV1YmVIUWVYQ1pCV3M5UzJNWXFwOTk4MHpLSV9FblhJTmJZZHY5MDFTMThFUVlzRjBER1RiNXFkaW5uN19XS3p2RnhqQ3FMc1Bka2txJmE9MmFfN1V0Z194RDVoOXJLZFRBLS0mcz1HN3BIVkxBOXhEM0tsQS0tJnQ9dDUubkFqTl8wejJjdmctLSZDPTkmRD0xJkk9JlJJPTY2YmYzZDEyNjQxYzE4YTM5ZTI0YTMzZjZhYjhmYzUxJlM9MzZjMmMxYTBkYzA0JmFzPTEmZj0xJmZmPTAmZnFfZD0xLDEsMSwwJmZxX209MSwxLDEsMCZmcV93PTEsMSwxLDAmZz00JmxwPSZtYWY9MCZtaWQ9MCZvPTkmcD05JnFmaWQ9JnI9MCZyZm09JnNmaWQ9MCZza3dpZD0wJkY9MCZ0bGlkPTAmdT1hdWN0aW9ucy55YWhvby5jby5qcAovL+ato+OBl+OBhFVSTGh0dHA6Ly93d3cuY2hvLXJlaS5jb20vCgkvL3lhaG9v44Gu5bqD5ZGKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy9odHRwOi8vY2xpY2subGlua3N5bmVyZ3kuY29tL2ZzLWJpbi9jbGljaz9pZD1HU0FYRU5pTWN2SSZvZmZlcmlkPTM5MjUwLjEwMDAwMjM5JnR5cGU9NCZzdWJpZD0wCgkvL2xpbmtzaGFyZWxpbmtzeW5lcmd5PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy9odHRwOi8vY2suanAuYXAudmFsdWVjb21tZXJjZS5jb20vc2VydmxldC9yZWZlcnJhbD92YT0yMjY2NzczJnNpZD0zMDkxMzQ0JnBpZD04ODIyNjAxNzcmdmNpZD1iR21VX0FIamxsdjg0TXQtZlo0d2VESXRqY09tbUdjQUZhSnNzdWNwd2R6OWtGNzVqcUJEbVEmdmNwdWI9MC42MjE0MDE3Mjk4OTMwNDIKCS8vdmFsdWVjb21tZXJjZeS4jeWujOWFqCjnhKHpp4TjgaDjgZHjgankuI3opoHjgarjg5Hjg6njg6Hjg7zjgr/jgpLliYrpmaQp4oaQ44K544Kv44Oq44OX44OI44Gr6L+95Yqg5riICgkv4oaR44Gu44Oq44Oz44Kv44Gu5b6M44KC44Ki44OV44Kj44Oq44Oz44Kv44KS57WM55Sx44GZ44KL44Gu44Gg44GR44Gp44CB5L+u5q2j5Y+v6IO944Gg44Gj44Gf44Gu44Gn44Gd44Gh44KJ44Gv5L+u5q2jKOWKueaenOOBjOOBguOCi+OBi+OBr+S4jeaYjikKCgovL2h0dHA6Ly9jb2ludXJsLmNvbS9nZXQucGhwP2lkPTIwNDg3Ci8v4oaR44GuVVJM44GL44KJ4oaT44GuVVJM44GM55Sf5oiQ44GV44KM44KL44CCCi8vaHR0cDovL2NvaW51cmwuY29tL25ld2NsaWNrLnBocD9wPXRBYmNsZVY1a2p1ZU1DclRXZDR3M3lWRTZ0SlBwaDlYMHVGbWpzUWlZaXlZeExOJTJCS1IlMkI1TjZVc0dXamRMM1ZlU2pwcyUyQmslMkY1MTc0Vk12azAxMHF2b3B1ZEJxVllSQUJPdGtRWlNyNzBVRVZLOGNUOFVIbUNxN3ZndE51SGJOcGpjeTJEM25VT2F2NEo1NzdNNjBHeFVtbVIlMkZoMWdFR1hyVlgwcGgwcFE0VG15ejQ3TWFic2ZDS0FRTDNTT2JDViUyQgoJLy/jg5Pjg4Pjg4jjgrPjgqTjg7Mo5Luu5oOz6YCa6LKoKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCS8v44Gp44Gh44KJ44KC5L+u5q2j5LiN5Y+v44Gq44Gu44Gn44Gd44KC44Gd44KC5YmK6Zmk44GX44Gf5pa544GM44GE44GECgoKLy9hbWF6b27jgrnjg6njgqTjg4njgrfjg6fjg7zjgqbjgqPjgrjjgqfjg4Pjg4gKLy9hbWF6b27jgY/jgovjgY/jgovjgqbjgqPjgrjjgqfjg4Pjg4gKLy/ihpHjgqLjg5XjgqPjg6rjgqjjgqTjg4hJROOCkuabuOOBjeaPm+OBiOOCi+OBqOmdnuihqOekuuOBq+OBquOCi+OAguOCouODleOCo0lE5b+F6aCI77yfCgoqKuWvvuW/nOS4jeWPr+iDveOBoOOBo+OBn+OCguOBruS4gOimp+OBk+OBk+OBvuOBpyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgovL2phdmFzY3JpcHTjgr/jgrAo5pyq5a6f6KOF6Kq/5pW05a6f6aiT5LitKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy88c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3LmRsc2l0ZS5jb20vanMvYmxvZ19wYXJ0cy5qcyIgY2hhcnNldD0iVVRGLTgiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij53aW5kb3dbImh0dHA6Ly93d3cuZGxzaXRlLmNvbS8iXS5jcmVhdGVCbG9nUGFydHMoeyJ0eXBlIjoiUmFua2luZ1BhcnRzIiwidHlwZSI6IlJhbmtpbmdQYXJ0cyIsImFpZCI6ImRvamluIiwiZGlzcGxheSI6ImltYWdlIiwiaW1hZ2UiOiJsYXJnZSIsImNvdW50IjoiNSIsInNpdGUiOiJtYW5pYXgiLCJhbm5vdW5jZSI6IjEiLCJncm8iOiIwIiwibWVuIjoiMCIsImxvbGkiOiIwIiwic2hvdGEiOiIwIiwia2luc2hpbiI6IjAiLCJqeXV1a2FuIjoiMCIsInBlcmlvZCI6IjI0aCIsInRpdGxlIjoiMjTmmYLplpPjg6njg7Pjgq3jg7PjgrAiLCJ3aWR0aCI6IjE5MCIsInJvdW5kIjoiMCIsImRlY29yYXRpb24iOiIwIiwiY2hhcmFjdGVyIjoiIiwibG9nbyI6ImRsc2l0ZSIsImJhbm5lciI6IjEiLCJ3cmFwcGVyIjoiMSIsImJ1dHRvblR5cGUiOiIwMiIsImJvZHlDb2xvciI6IiNmZmUzZWEiLCJ0aXRsZUNvbG9yIjoiI2ZmYTYwMCIsInRpdGxlVGV4dENvbG9yIjoiI2ZmZmZmZiJ9KTs8L3NjcmlwdD4KCQkvL0RMc2l0ZeWfi+OCgei+vOOBv2phdmFzY3JpcHQKCQkvL+OCueOCr+ODquODl+ODiOOBq+iHquWLleiqreOBv+i+vOOBv+mWouaVsOOBjOOBguOBo+OBpuOCouODleOCo+ODquOCqOOCpOODiOODquODs+OCr+OBjOW+qea0u+OBl+OBpuOBl+OBvuOBhuOAguWvvuetluaWueazleiAg+OBiOS4rQoJCS8v5YCZ6KOcMe+8muOCueOCr+ODquODl+ODiOOBruOCouODleOCo+ODquOCqOOCpOODiElE566H5omA44KS5aSJ5pu044GX44Gm44Kq44OW44K444Kn44Kv44OI44KS5paw6KaP44Gn55Sf5oiQ4oaS5L2V5pWF44GL44Kq44O844OI44Ot44O844OJ44Gn44K544Kv44Oq44OX44OI44Gg44GR44Gu44Oa44O844K444Gr6aOb44G2CgkJLy/lgJnoo5wy77yaaHR0cDovL3d3dy5kbHNpdGUuY29tL2pzL2Jsb2dfcGFydHMuanPjga7plqLmlbDjgpLkuIrmm7jjgY3ihpLli4nlvLfkuK0KCQlmdW5jdGlvbiBraWxsSlMoZG9jdW1lbnQpewoKCQkJdmFyIGFsbFNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7CgoJCQlmb3IgKGkgPSAwOyBpIDwgYWxsU2NyaXB0cy5sZW5ndGg7IGkrKyl7CgkJCQl2YXIgYmxvZ1BhcnRzID0gYWxsU2NyaXB0c1tpXS5pbm5lckhUTUw7CgoJCQkJaWYoYmxvZ1BhcnRzLm1hdGNoKC8iYWlkIjouKiwvKSl7Ci8vYWxlcnQoYWxsU2NyaXB0c1tpXS5pbm5lckhUTUwpOwoJCQkJCWJsb2dQYXJ0cyA9IGJsb2dQYXJ0cy5yZXBsYWNlKC8iYWlkIjouKiwiZGlzcGxheSIvLCciYWlkIjoiIiwiZGlzcGxheScpOwoKCi8v4oaT44Ki44OV44Kj44Oq44Ko44Kk44OISUTjga7lhaXjgaPjgZ/jgrnjgq/jg6rjg5fjg4jjgr/jgrDjgpLmtojjgZfjgabjgb/jgZ/jgZHjganjgZnjgafjgavjgqTjg7Pjgrnjgr/jg7PjgrnljJbjgZXjgozjgZ/lvozjgaDjgajmhI/lkbPjgYzjgarjgYTvvJ8KYWxsU2NyaXB0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGFsbFNjcmlwdHNbaV0pOwoKLy/mnIDliJ3jga7jgrnjgq/jg6rjg5fjg4jjgr/jgrDjgpLnlJ/miJDjgIJibG9nX3BhcnRzLmpz44KS6Kqt44G/6L6844KA44Gg44GR44Gg44GX5pyA5Yid44GL44KJ6Kqt44G/6L6844G+44KM44Gm44KL44GX6L+95Yqg5LiN6KaB77yfCnZhciBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKZWxlLnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKZWxlLnNyYyA9ICJodHRwOi8vd3d3LmRsc2l0ZS5jb20vanMvYmxvZ19wYXJ0cy5qcyI7CmVsZS5jaGFyc2V0ID0gIlVURi04IjsKCi8v5qyh44Gu44K544Kv44Oq44OX44OI44K/44Kw44CC44OW44Ot44Kw44OR44O844OE44KS55Sf5oiQ44GZ44KL44Gf44KB44Gu5byV5pWw44Gu44G/CnZhciBlbGUyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CmVsZTIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwplbGUyLmlubmVySFRNTCA9IGJsb2dQYXJ0czsKCi8vYWxsU2NyaXB0c1tpXS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGVsZSk7Ci8vYWxsU2NyaXB0c1tpXS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGVsZTIpOwovL+KGkeOCquODluOCuOOCp+OCr+ODiGVsZTLjgpLopoHntKDjgajjgZfjgabov73liqDjgZnjgovjgajkvZXmlYXjgYvjg5rjg7zjgrjjgpLpgbfnp7vjgZfjgabjgZfjgb7jgYYKCgkJCQl9CgkJCX0vL2ZvcuaWh+OBk+OBk+OBvuOBpwoKLyoKCQkJLy/jgrnjgq/jg6rjg5fjg4jjgr/jgrDjgavnlJ/miJDjgZXjgozjgovlrp/pmpvjga7jg5bjg63jgrDjg5Hjg7zjg4TjgavlpInmm7TjgpLliqDjgYjjgabjgb/jgovvvJ8KCQkJdmFyIGFsbFNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJETHNpdGVfYnBfYm9keSIpOwoJCQlmb3IgKGkgPSAwOyBpIDwgYWxsU2NyaXB0cy5sZW5ndGg7IGkrKyl7CgoJCQl9Ly9mb3LmlofjgZPjgZPjgb7jgacKKi8KCQl9CgovL2phdmFzY3JpcHTjgr/jgrDjgZPjgZPjgb7jgac9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgoKCgkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1tYWlu44Gu5YWx6YCa44OV44Kh44Oz44Kv44K344On44OzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8vQSBtb2Qga2lsbGVy44KI44KK5oqc57KLKOODh+OCs+ODvOODiemDqOWIhjHjgYvmiYDjga7jgb/mm7jjgY3mj5vjgYhkZWNVUkkpLS0tLS0tLS0tLS0KCQlmdW5jdGlvbiBjcmVhdGVQYXJhbUFycmF5KHVybCkKCQl7CgkJICAgIHZhciBwYXJhbXMgID0gbmV3IEFycmF5KCk7CgkJICAgIHZhciBwb3MgPSB1cmwuaW5kZXhPZigiPyIpOwoKCQkgICAgaWYocG9zIDwgMCkgewoJCSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHVybCA6IiArIHVybCk7CgkJICAgIH0KCQkgICAgdmFyIHRtcEFyeSA9IHVybC5zdWJzdHJpbmcocG9zKzEsdXJsLmxlbmd0aCkuc3BsaXQoIiYiKTsKCgkJICAgIGZvcih2YXIgaT0wOyBpPHRtcEFyeS5sZW5ndGg7IGkrKykgewoJCSAgICAgICAgdmFyIHN0ciA9IHRtcEFyeVtpXTsKCQkgICAgICAgIHZhciBhbXBlcnNhbmRQb3MgPSBzdHIuaW5kZXhPZigiPSIpOwoJCSAgICAgICAgaWYoYW1wZXJzYW5kUG9zIDwgMCkgewoJCSAgICAgICAgICAgIHBhcmFtc1tzdHJdID0gIiI7CgkJICAgICAgICB9CgkJICAgICAgICBlbHNlIHsKCQkgICAgICAgICAgICB2YXIga2V5ID1zdHIuc3Vic3RyaW5nKDAsYW1wZXJzYW5kUG9zKTsKCQkgICAgICAgICAgICB2YXIgdmFsPXN0ci5zdWJzdHJpbmcoYW1wZXJzYW5kUG9zKzEsc3RyLmxlbmd0aCk7CgkJICAgICAgICAgICAgcGFyYW1zW2tleV0gPSB2YWw7CgkJICAgICAgICB9CgkJICAgIH0KCQkgICAgcGFyYW1zLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CgkJICAgICAgICB2YXIgdGhpc0Z1bmMgPSB0aGlzLnRvU3RyaW5nOwoJCSAgICAgICAgZGVsZXRlIHRoaXMudG9TdHJpbmc7CgkJICAgICAgICB2YXIgcmV0dXJuVmFsID0gIiI7CgkJICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzKSB7CgkJICAgICAgICAgICAgcmV0dXJuVmFsID1yZXR1cm5WYWwgKyBrZXkgKyAiPSIgKyB0aGlzW2tleV0gKyAiJiI7CgkJICAgICAgICB9CgkJICAgICAgICB0aGlzLnRvU3RyaW5nID0gdGhpc0Z1bmM7CgkJICAgICAgICByZXR1cm4gcmV0dXJuVmFsOwoJCSAgICB9CgkJICAgIHJldHVybiBwYXJhbXM7CgkJfQoKCQlmdW5jdGlvbiBnZXRSZWRpcmVjdFVybCh1cmwsIHBhcmFtTmFtZSkKCQl7CgkJICAgIHZhciBwYXJhbXMgPSBjcmVhdGVQYXJhbUFycmF5KHVybCk7CgkJICAgIHZhciByZWRpcmVjdFVybCA9IHBhcmFtc1twYXJhbU5hbWVdOwoJCSAgICByZXR1cm4gZGVjVVJJKHJlZGlyZWN0VXJsKTsKCQkgICAgdGhyb3cgbmV3IEVycm9yKCk7CgkJfQoKLy9BIG1vZCBraWxsZXLjgojjgormipznsovjgZPjgZPjgb7jgactLS0tLS0tLS0tLQoKCgoJCS8vVVJM44KS5aSJ5pu077yG44Kq44Oq44K444OK44OrVVJM6L+95YqgCgkJZnVuY3Rpb24gc2V0TGluaygpewp0cnl7CgovLwkJCXN0clVybCA9IGRlY1VSSShzdHJVcmwpOwoKCQkJLy/kvZXjgoLjgZfjgarjgYQKCQkJaWYoaHJlZi5pbmRleE9mKCJjb25lY28ubmV0L3BvaW50IikgPiAtMSAKCQkJICAvL+ODq+ODvOODl+mYsuatoueUqAoJCQkgIHx8IGRlY1VSSShkZWNVUkkoYWxsTGlua3NbaV0uaHJlZikpID09IHN0clVybAoJCQkgIC8v44Oa44O844K444K544Kv44Ot44O844Or57O744Gv6Zmk5aSWCgkJCSAgfHwgaHJlZi5tYXRjaChsb2NhdGlvbi5ocmVmICsgIiMiKSB8fCBkZWNVUkkoaHJlZikubWF0Y2goZGVjVVJJKGxvY2F0aW9uLmhyZWYpICsgIiMiKQoJCQkgIC8vZ29vZ2xl44Kk44Oh44O844K45qSc57Si44Gu6Zmk5aSWKOOCteODoOODjeOCpOODq+S4gOimp+OAguips+e0sOeUu+mdouOBruaWueOBp+OBr+OBquOBhCkKCQkJICB8fCBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgIT0gbnVsbCAmJiBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikubWF0Y2goInJnX2wiKQoJCQkgIC8vZ29vZ2xl44Kk44Oh44O844K45qSc57Si44Gu6Zmk5aSWKOips+e0sOeUu+mdouOBruWPs+WBtOOCteODoOODjeS4gOimp+OBq+OBr+inpuOCjOOBquOBhCkKCQkJICB8fCBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgIT0gbnVsbCAmJiBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikubWF0Y2goImlyY19yaW1hc2siKQopewoKCQkJCS8v5L2V44KC44GX44Gq44GECgoJCQkvL+ODq+ODvOODl+mYsuatouOBq+S7peS4i+OBryYm44Gn44Gq44GR44KM44Gw44Gq44KJ44Gq44GECgkJCX1lbHNlIGlmKGhyZWYgIT0gc3RyVXJsICYmICFhbGxMaW5rc1tpXS5pbm5lckhUTUwubWF0Y2goIktpbGxlciIpICYmIGFsbExpbmtzW2ldLmdldEF0dHJpYnV0ZSgiQWtpbGxfY2hlY2siKSAhPSAia2lsbGVkIil7CgoKCQkJCS8vY2xhc3PlkI3jgoLlvJXjgY3ntpnjgYzjgarjgYTjgajphY3nva7jgYzjgZrjgozjgovjgZ/jgoHntpnmib8oQW1hem9u44Gn56K66KqN44CC5a++6LGh44GuY2xhc3PjgatDU1PjgafoqK3lrprjgZfjgabjgos/KQoJCQkJdmFyIHNldENsYXNzID0gIiI7CgkJCQlpZihhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgIT0gbnVsbCl7CgkJCQkJc2V0Q2xhc3MgPSAnIGNsYXNzPSInICsgYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpICsgJyInOwoJCQkJfQoKCQkJCS8v44Ok44OV44Kq44Kv44Gq44Gp44Gn5L+u5q2j44GX44Gf44Oq44Oz44Kv44GraWTjgYzjgarjgYTjgajkvY3nva7jgYzjgZrjgozjgabnlLvlg4/jgYzjgarjgY/jgarjgovjga7jgafoqK3lrpoKCQkJCXZhciBzZXRJZCA9ICIiOwoJCQkJaWYoYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJpZCIpICE9IG51bGwpewoJCQkJCXNldElkID0gJyBpZD0iJyArIGFsbExpbmtzW2ldLmdldEF0dHJpYnV0ZSgiaWQiKSArICciJzsKCQkJCX0KCgkJCQkvL0FSRUHjgr/jgrDjga7loLTlkIjlvJXjgY3ntpnjgY7lv4XpoIjvvJ8KCQkJCXZhciBzZXRDb29yZHMgPSAiIjsKCQkJCWlmKGFsbExpbmtzW2ldLmdldEF0dHJpYnV0ZSgiY29vcmRzIikgIT0gbnVsbCl7CgkJCQkJc2V0Q29vcmRzID0gJyBjb29yZHM9IicgKyBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNvb3JkcyIpICsgJyInOwoJCQkJfQoKCQkJCS8v5paw44GX44GE44Km44Kj44Oz44OJ44KmKOOCv+ODlinjgavplovjgY/oqK3lrprjgaDjgZHjga/ntpnmib8KCQkJCXZhciBzZXRCbGFuayA9ICIiOwoJCQkJaWYoYWxsTGlua3NbaV0udGFyZ2V0ID09ICJfYmxhbmsiKXsKCQkJCQlzZXRCbGFuayA9ICcgdGFyZ2V0PSJfYmxhbmsiJzsKCQkJCX0KCgkJCQkvL+WFg+OBruODquODs+OCr+OBq2Nzc+OBp+iDjOaZr+aMh+WumuOBl+OBpuOBguOBo+OBn+WgtOWQiOe2meaJvwoJCQkJdmFyIHNldFN0eWxlID0iIjsKCQkJCWlmKGFsbExpbmtzW2ldLmdldEF0dHJpYnV0ZSgic3R5bGUiKSAhPSBudWxsKXsKCQkJCQlpZihhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIikubWF0Y2goImJhY2tncm91bmQiKSAmJiBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIikubWF0Y2goInVybCIpKXsKCQkJCQkJc2V0U3R5bGUgPSBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CgkJCQkJfQoJCQkJfQoKCQkJCS8vc29sdHkgZGVzaWdu44GuQW1hem9uIE1vZGVybiBSYW5raW5n44Gr5a++5b+cCgkJCQkvL2ltZ+OCv+OCsOOBjOOBguOBo+OBpuWFg+OBruODquODs+OCr+OBq+mrmOOBleOBqOW5heOBruioreWumuOBjOOBguOBo+OBn+WgtOWQiOWkieaVsOOBq+OCu+ODg+ODiOOBl+OBpuW+jOOBp+W+qeWFgwoJCQkJdmFyIHN0ckhXID0gIiI7CgkJCQlpZihhbGxMaW5rc1tpXS5pbm5lckhUTUwubWF0Y2goLyg8aW1nIHw8SU1HICkvKQoJCQkJICAmJiBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIikgIT0gbnVsbCl7CgkJCQkJaWYoYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJzdHlsZSIpLm1hdGNoKCJoZWlnaHQ6IikpewkKCgkJCQkJCXN0ckhXID0gImhlaWdodDoiICsgYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJzdHlsZSIpLnJlcGxhY2UoLy4qaGVpZ2h0OiguKj8pXDsuKiQvaSwiJDEiKSArICI7IgoJCQkJCX0KCQkJCQlpZihhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIikubWF0Y2goIndpZHRoOiIpKXsJCgkJCQkJCXN0ckhXICs9ICJ3aWR0aDoiICsgYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJzdHlsZSIpLnJlcGxhY2UoLy4qd2lkdGg6KC4qPylcOy4qJC9pLCIkMSIpICsgIjsiCgkJCQkJfQoJCQkJfQoKCQkJCS8v5L+u5q2j44GX44Gf44Oq44Oz44Kv5YaF44Gr5YWD44Gu44K/44Kw5YaF44Gu6KaB57Sg44KS5q6L44GZKGltZ+OBquOBqSkKCQkJCXZhciBzdHJUeHQgPSBhbGxMaW5rc1tpXS5pbm5lckhUTUw7CgoKCQkJCS8v5YWD44Gu44Oq44Oz44Kv44Gu5b6M44Gr5L+u5q2j44GX44Gf44Oq44Oz44Kv44KS6L+95YqgCgkJCQlhbGxMaW5rc1tpXS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyZW5kJywgJzwnICsgYWxsTGlua3NbaV0udGFnTmFtZSArIHNldElkICsgc2V0Q2xhc3MgKyBzZXRCbGFuayArIHNldENvb3JkcyArICcgaHJlZj0iJyArIHN0clVybCArICciPicgKyBzdHJUeHQgKyAnPC9hPicpOyAKCgkJCQkvL+WFg+OBruODquODs+OCr+OBjGHjgr/jgrDjgZjjgoPjgarjgYvjgaPjgZ/loLTlkIjjgIFh44K/44Kw44Gr44GX44Gm44OO44O844OJ5L+u5q2jCgkJCQlpZihhbGxMaW5rc1tpXS50YWdOYW1lICE9ICJhIiAmJiBhbGxMaW5rc1tpXS50YWdOYW1lICE9ICJBIil7CgkJCQkJdmFyIG9sZE5vZGUgPSBhbGxMaW5rc1tpXTsKCgkJCQkJdmFyIG5ld05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CgkJCQkJbmV3Tm9kZS5ocmVmID0gb2xkTm9kZS5ocmVmOwoJCQkJCW5ld05vZGUuaW5uZXJIVE1MID0gb2xkTm9kZS5pbm5lckhUTUw7CgoJCQkJCW9sZE5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoIG5ld05vZGUsIG9sZE5vZGUgKTsKCQkJCX0KCgkJCQkvL+S/ruato+ebtOWJjeOBq+S/ruato+a4iOOBv+OBqOOBhOOBhuWIpOWumueUqOODleODqeOCsOi/veWKoAoJCQkJYWxsTGlua3NbaV0uc2V0QXR0cmlidXRlKCJBa2lsbF9jaGVjayIsImtpbGxlZCIpOwoKCQkJCS8vKOKAu+KAu+azqOaEj++8ge+8ge+8ge+8ge+8geS4iuOBruODleODqeOCsOOBrumWk+OBq+WHpueQhuOCkuaMn+OBvuOBquOBhO+8ge+8ge+8ge+8geKAu+KAu+KAuykKCQkJCS8v5YWD44Gu44Oq44Oz44Kv44Gv5Lit6Lqr44KS5raI44GX44Gm44Oq44Oz44Kv44Gg44GR5q6L44GZCgkJCQkvL2tpbGxlcuWFqOmDqOihqOekugoJCQkJaWYoaGlkZU9yaWdpbkxpbmsgPT0gInNob3ciKXsKCQkJCQlhbGxMaW5rc1tpXS5pbm5lckhUTUwgPSAnW0tpbGxlcl0nOwoKCQkJCS8v5YWo6YOo5raI44GZCgkJCQl9ZWxzZSBpZihoaWRlT3JpZ2luTGluayA9PSAiaGlkZSIpewoJCQkJCWFsbExpbmtzW2ldLmlubmVySFRNTCA9ICcnOwoKIAkJCQkvL1traWxsXeOCkuacgOWIneOBoOOBkeihqOekuuOBmeOCi+ioreWumuOBruWgtOWQiAoJCQkJfWVsc2UgaWYoaGlkZU9yaWdpbkxpbmsgPT0gIm9uZSIpewoJCQkJCS8v5LiA5YCL5YmN44Gu6KaB57Sg44GM5L+u5q2j5riI44G/a2lsbGVk44Gg44Gj44Gf5aC05ZCI6Z2e6KGo56S6CgkJCQkJaWYoYWxsTGlua3NbaS0xXS5nZXRBdHRyaWJ1dGUoIkFraWxsX2NoZWNrIikgPT0gImtpbGxlZCIpewoJCQkJCQlhbGxMaW5rc1tpXS5pbm5lckhUTUwgPSAnJzsKCQkJCQkvL+OBneOBhuOBmOOCg+OBquOBi+OBo+OBn+OCiWtpbGxlcuihqOekugoJCQkJCX1lbHNlewoJCQkJCQlhbGxMaW5rc1tpXS5pbm5lckhUTUwgPSAnW0tpbGxlcl0nOwoJCQkJCX0KCQkJCX0KCgkJCQkvL2FtYXpvbuOBquOBqeOBp+WFg+OBruODquODs+OCr+OBq2NsYXNz44GM44Gq44GE44Go5L2N572u44GM44Ga44KM44KL44Gu44Gn5b6p5YWDCgkJCQlpZihhbGxMaW5rc1tpKzFdLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSAhPSBudWxsKXsKCQkJCQlhbGxMaW5rc1tpXS5zZXRBdHRyaWJ1dGUoImNsYXNzIixhbGxMaW5rc1tpKzFdLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSk7CgkJCQl9CgoJCQkJLy/jg6Tjg5Xjgqrjgq/jgarjganjgaflhYPjga7jg6rjg7Pjgq/jgatpZOOBjOOBquOBhOOBqOS9jee9ruOBjOOBmuOCjOOCi+OBruOBp+W+qeWFgwoJCQkJaWYoYWxsTGlua3NbaSsxXS5nZXRBdHRyaWJ1dGUoImlkIikgIT0gbnVsbCl7CgkJCQkJYWxsTGlua3NbaV0uc2V0QXR0cmlidXRlKCJpZCIsYWxsTGlua3NbaSsxXS5nZXRBdHRyaWJ1dGUoImlkIikpOwoJCQkJfQoKCQkJCS8v5L6h5qC844Kz44Og44GoY29uZWNv44Gu44Oc44K/44Oz44GL44KJb25jbGlja+OBp+i1t+WLleOBleOCjOOCi+ODiOODqeODg+OCq+ODvOOCkumZpOWOuyjlrp/pqJPnmoTlrp/oo4UpCgkJCQlhbGxMaW5rc1tpKzFdLnJlbW92ZUF0dHJpYnV0ZSgib25jbGljayIpOwoJCQkJYWxsTGlua3NbaSsxXS5yZW1vdmVBdHRyaWJ1dGUoIm9ubW91c2VjbGljayIpOwoKCQkJCS8v5YWx6YCa44K544K/44Kk44OrCgkJCQl2YXIgc3RyU3R5bGUgPSAnbWF4LWhlaWdodDoyMHB4O21heC13aWR0aDo1MHB4O2hlaWdodDphdXRvO3dpZHRoOmF1dG87YmFja2dyb3VuZDpyZ2JhKDI1NSwwLDAsMC4yKTttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt6LWluZGV4Ojk5OTt0ZXh0LWluZGVudDowOyc7CgoJCQkJLy9BUkVB44K/44Kw44G+44Gf44Gv6KaB57Sg5YaF44GraW1n44K/44Kw44GM44GC44Gj44Gf5aC05ZCICgkJCQlpZihzZXRDb29yZHMgIT0gIiIKCQkJCSAgfHwgYWxsTGlua3NbaSsxXS5pbm5lckhUTUwubWF0Y2goLyg8aW1nIHw8SU1HICkvKSl7CgoJCQkJCS8v5YWD44Gu44Oq44Oz44Kv44GrQ1NT5LuY5YqgCgkJCQkJYWxsTGlua3NbaV0uc2V0QXR0cmlidXRlKCJzdHlsZSIsIHN0clN0eWxlICsgJ3Bvc2l0aW9uOmFic29sdXRlOycpOwoKCQkJCQkvL+WFg+OBruODquODs+OCr+OBq3N0eWxl44Gn6auY44GV44Go5bmF44Gu5oyH5a6a44GM44GC44Gj44Gf5aC05ZCI44Gv5LiK5pu444GNCgkJCQkJaWYoc3RySFcgIT0gIiIpewoJCQkJCQlhbGxMaW5rc1tpKzFdLnNldEF0dHJpYnV0ZSgic3R5bGUiLCBzdHJIVyk7CgkJCQkJfQoKCQkJCQkvL0FSRUHjgr/jgrDjga7loLTlkIjjgIHkv67mraPjgZfjgZ/jg6rjg7Pjgq/jgYzmnIDliJ3jga7lrZDjg47jg7zjg4njgZjjgoPjgarjgYTjgajjgYTjgZHjgarjgYTjga7jgaflhaXjgozmm7/jgYgKCQkJCQlpZihzZXRDb29yZHMgIT0gIiIpewoJCQkJCQlhbGxMaW5rc1tpKzFdLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYWxsTGlua3NbaV0pOwkvL+WFpeOCjOabv+OBiAovLwkJCQkJCWFsbExpbmtzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYWxsTGlua3NbaV0pOwkvL+WJiumZpAoJCQkJCX0KCQkJCS8v44Gd44KM5Lul5aSWCgkJCQl9ZWxzZXsKCQkJCQkvL+WFg+OBruODquODs+OCr+OBq0NTU+S7mOWKoAoJCQkJCWFsbExpbmtzW2ldLnNldEF0dHJpYnV0ZSgic3R5bGUiLCBzdHJTdHlsZSArICdwb3NpdGlvbjpyZWxhdGl2ZTsnKTsKCQkJCX0KCgkJCQkvL+WFg+OBruODquODs+OCr+OBq2Nzc+OBp+iDjOaZr+aMh+WumuOBjOOBguOBo+OBn+WgtOWQiAoJCQkJaWYoc2V0U3R5bGUpewoJCQkJCWFsbExpbmtzW2krMV0uc2V0QXR0cmlidXRlKCJzdHlsZSIsIHNldFN0eWxlKTsKCQkJCX0KCgoJCQl9CgovLwkJCXRocm93IG5ldyBFcnJvcigpOwp9Y2F0Y2goZSl7Ci8vCXRocm93KGUpOwoJR01fbG9nKGUpOwp9CgoJCX0KCgoJCS8vRGxzaXRl44Gu44Oq44Oz44Kv5L+u5q2j55SoQ1NTCgkJZnVuY3Rpb24gZGxzaXRlQ1NTKCl7CnRyeXsKCQkJaWYoaHJlZiAhPSBzdHJVcmwpewoKCQkJCS8vQ1NT5LuY5YqgCgkJCQlhbGxMaW5rc1tpXS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgJ2hlaWdodDphdXRvO3dpZHRoOmF1dG87ZmxvYXQ6bGVmdDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDAsMCwwLjIpO21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50OycpOwoJCQkJLy/nlLvlg4/ln4vjgoHovrzjgb/jgr/jgqTjg5fku6XlpJbjgatDU1Pku5jliqAKCQkJCWlmKGFsbExpbmtzW2krMV0uaW5uZXJIVE1MLmluZGV4T2YoInNyYz0iKTw9MCl7CgkJCQkJYWxsTGlua3NbaSsxXS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgIm1hcmdpbi1sZWZ0OjU1cHg7Iik7CgkJCQl9CgkJCX0KLy8JCQl0aHJvdyBuZXcgRXJyb3IoKTsKfWNhdGNoKGUpewovLwl0aHJvdyhlKTsKCUdNX2xvZyhlKTsKfQoKCQl9CgoKCi8qKirjg5Hjg6njg6Hjg7zjgr/lpJrjgZnjgY7jgarjga7jgaflh43ntZDjgILlhYPjgYvjgonlv4XopoHjgarjgYTjgYvjgoLvvJ8oc28gbWFueSB3aGl0ZWxpc3QuYmxhY2tsaXN0IGlzIC4uLj8gSSBoYXZlIG5vIGlkZWEuKQoJCS8v5qW95aSp44OR44Op44Oh44O844K/CgkJZnVuY3Rpb24gcmFrdXRlblBhcmFtKCl7CgkJCQl2YXIgc3RyU2l0ZW0gPSAiIjsJLy/mpJzntKIKCQkJCXZhciBzdHJOaXRlbSA9ICIiOwkvL+aknOe0oumZpOWklgoJCQkJdmFyIHN0clBhZ2UgPSAiIjsJLy/jg5rjg7zjgrjmlbAKCQkJCXZhciBzdHJUeXBlID0gIiI7CS8v44K144O844OQ77yfCgkJCQl2YXIgc3RyU2lkID0gIiI7CS8v44K344On44OD44OXSUQo44K344On44OD44OX5YaF5qSc57Si55So77yfKQoJCQkJdmFyIHN0ckdlbnJlID0gIiI7CS8v44K444Oj44Oz44OrCgkJCQl2YXIgc3RyVmlldyA9ICIiOwkvL+ihqOekuuaWueazlQoJCQkJdmFyIHN0ckZyb21EID0gIiI7CS8v55m65aOy5pel56+E5Zuy5aeL54K5CgkJCQl2YXIgc3RyVG9EID0gIiI7CS8v55m65aOy5pel56+E5Zuy57WC54K5CgkJCQl2YXIgc3RyTWlucCA9ICIiOwkvL+acgOS9juS+oeagvAoJCQkJdmFyIHN0ck1heHAgPSAiIjsJLy/mnIDlpKfkvqHmoLwKCgkJfQoqLwoKCi8vCQl0aHJvdyBuZXcgRXJyb3IoKTsKCX0vL21haW7ntYLkuoYKCgoKCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSDov73liqDplqLmlbAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgovL0dvb2dsZeODiOODqeODg+OCq+ODvOmZpOWOuz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKZnVuY3Rpb24gcmVtVHJhY2sobm9kZSl7CgoJdmFyIHJlc3VsdExpbmtzID0gZG9jdW1lbnQuZXZhbHVhdGUoJy4vL2FbQG9ubW91c2Vkb3duXScsIG5vZGUsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKCglmb3IgKGkgPSAwOyBpIDwgcmVzdWx0TGlua3Muc25hcHNob3RMZW5ndGg7IGkrKyl7CgkJdmFyIG9sZExpbmsgPSByZXN1bHRMaW5rcy5zbmFwc2hvdEl0ZW0oaSk7CS8v5qSc57Si57WQ5p6c44GuVVJMKE9yaWdpbmFsIFVSTCkKCgkJaWYgKG9sZExpbmsuZ2V0QXR0cmlidXRlKCdvbm1vdXNlZG93bicpKSB7CgkJCW9sZExpbmsucmVtb3ZlQXR0cmlidXRlKCdvbm1vdXNlZG93bicpOwoJCX0KCX0KfQoKCi8vVVJM44OH44Kz44O844OJCmZ1bmN0aW9uIGRlY1VSSShzdHIpewoJdmFyIGNoYXJDb2RlID0gIiI7CglpZiAoc3RyLm1hdGNoKCIlIikpIHsKCQl0cnkgewoJCQljaGFyQ29kZSA9IEdldEVzY2FwZUNvZGVUeXBlKHN0cik7CgkJCWlmICggY2hhckNvZGUgPT0gIlVURjgiICkgewoJCQkJc3RyID0gVW5lc2NhcGVVVEY4KHN0cik7CgkJCX1lbHNlIGlmICggY2hhckNvZGUgPT0gIkVVQ0pQIiApIHsKCQkJCXN0ciA9IFVuZXNjYXBlRVVDSlAoc3RyKTsKCQkJfWVsc2UgaWYgKCBjaGFyQ29kZSA9PSAiU0pJUyIgKSB7CgkJCQlzdHIgPSBVbmVzY2FwZVNKSVMoc3RyKTsKCQkJfWVsc2UgaWYgKCBjaGFyQ29kZSA9PSAiVW5pY29kZSIgKSB7CgkJCQlzdHIgPSB1bmVzY2FwZShzdHIpOwoJCQl9CgkJCQoJCQlyZXR1cm4gc3RyOwoJCQkKCQl9Y2F0Y2goZSl7CgkJCS8vdGhyb3coZSk7CgkJCUdNX2xvZyhlKTsKCQl9Cgl9ZWxzZXsKCQlyZXR1cm4gc3RyOwoJfQovL3Rocm93IG5ldyBFcnJvcigpOwp9CgoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCmZ1bmN0aW9uIHVzZXJDZmcobmFtZSl7CgkvL+ODpuODvOOCtuioreWumuOBi+OCieiqreOBv+i+vOOBvyhMb2FkIHVzZXIncyBzZXR0aW5ncykKCXZhciBzdHJUZXh0ID0gR01fZ2V0VmFsdWUobmFtZSk7CgoJaWYoc3RyVGV4dCA9PSAiaGlkZSIpewoJCUdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoInNob3cgYWxsIFtraWxsZXJdIC1ub3cgaGlkZSBhbGwtIiwgc2hvd0NmZyk7CgoJfWVsc2UgaWYoc3RyVGV4dCA9PSAic2hvdyIpewoJCUdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoInNob3cgYSBba2lsbGVyXSBvbmx5IG9yaWdpbmFsIC1ub3cgc2hvdyBhbGwtIiwgb25lQ2ZnKTsKCi8vCX1lbHNlIGlmKHN0clRleHQgPT0gIm9uZSIpewoJfWVsc2V7CgkJR01fcmVnaXN0ZXJNZW51Q29tbWFuZCgiaGlkZSBhbGwgW2tpbGxlcl0oSXQncyB0cm91YmxlZCx3aGVuIGNvcnJlY3Rpb24gbWlzdG9vay4pIC1ub3cgb25seSBvbmUtIiwgaGlkZUNmZyk7CgoJCWlmKHN0clRleHQgIT0gIm9uZSIpewoJCQlzdHJUZXh0ID0gIm9uZSI7CgkJCUdNX3NldFZhbHVlKCBuYW1lLCBzdHJUZXh0KTsKCQkJd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpOwoJCX0KCX0KCXJldHVybiBzdHJUZXh0Owp9CmZ1bmN0aW9uIHNob3dDZmcoKXsKCUdNX3NldFZhbHVlKCAiaGlkZU9yaWdpbkxpbmsiLCAic2hvdyIpOwoJd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpOwp9CmZ1bmN0aW9uIGhpZGVDZmcoKXsKCUdNX3NldFZhbHVlKCAiaGlkZU9yaWdpbkxpbmsiLCAiaGlkZSIpOwoJd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpOwp9CmZ1bmN0aW9uIG9uZUNmZygpewoJR01fc2V0VmFsdWUoICJoaWRlT3JpZ2luTGluayIsICJvbmUiKTsKCXdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKTsKfQoKCgovL0ZvciBDaHJvbWU6Q2hhbmdlICJHTV9zZXRWYWx1ZSAmIEdNX2dldFZhbHVlIiB0byBXZWJTdHJhZ2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghdGhpcy5HTV9nZXRWYWx1ZSB8fCB0aGlzLkdNX2dldFZhbHVlLnRvU3RyaW5nKCkuaW5kZXhPZigibm90IHN1cHBvcnRlZCIpPi0xKSB7Cgl0aGlzLkdNX2dldFZhbHVlPWZ1bmN0aW9uIChrZXksZGVmKSB7CgkJcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOwoJfTsKCXRoaXMuR01fc2V0VmFsdWU9ZnVuY3Rpb24gKGtleSx2YWx1ZSkgewoJCXJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7Cgl9Owp9CgoKCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vR3JlYXNlRm9ya+OBjHJlcXVpcmXjga7lr6nmn7vlv4XopoHjgarjga7jgafjgYTjgaPjgZ3jga7jgZPjgajln4vjgoHovrzjgb/jgb7jgZfjgZ/jgIIKLy9yZXF1aXJlIChjKWh0dHA6Ly93d3cuZHJrNy5qcC9wdWIvanMvZWNsX3Rlc3QvZWNsX25ldy5qcwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoKCmZ1bmN0aW9uIGVjbCgpewp0cnl7CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT3lvJXnlKjplovlp4s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCS8vCgkvLyBFc2NhcGUgQ29kZWMgTGlicmFyeTogZWNsLmpzIChWZXIuMDQxMjA4KQoJLy8KCS8vIENvcHlyaWdodCAoQykgaHR0cDovL251cnVjb20tYXJjaGl2ZXMuaHAuaW5mb3NlZWsuY28uanAvZGlnaXRhbC8KCS8vCgoJRXNjYXBlU0pJUz1mdW5jdGlvbihzdHIpewoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvW14qKy4tOUEtWl9hLXotXS9nLGZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1zLmNoYXJDb2RlQXQoMCksbTsKCSAgICAgICAgcmV0dXJuIGM8MTI4PyhjPDE2PyIlMCI6IiUiKStjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOjY1Mzc2PGMmJmM8NjU0NDA/IiUiKyhjLTY1MjE2KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTooYz1KQ1QxMTI4MC5pbmRleE9mKHMpKTwwPyIlODFFIjoiJSIrKChtPSgoYzw4MjcyP2M6KGM9SkNUMTEyODAubGFzdEluZGV4T2YocykpKS0oYyU9MTg4KSkvMTg4KTwzMT9tKzEyOTptKzE5MykudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrKDY0PChjKz1jPDYzPzY0OjY1KSYmYzw5MXx8OTU9PWN8fDk2PGMmJmM8MTIzP1N0cmluZy5mcm9tQ2hhckNvZGUoYyk6IiUiK2MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkpCgkgICAgfSkKCX07CgoJVW5lc2NhcGVTSklTPWZ1bmN0aW9uKHN0cil7CgkgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lKDhbMS05QS1GXXxbOUVdWzAtOUEtRl18RlswLTlBLUNdKSglWzQtNjg5QS1GXVswLTlBLUZdfCU3WzAtOUEtRV18W0Atfl0pfCUoWzAtN11bMC05QS1GXXxBWzEtOUEtRl18W0ItRF1bMC05QS1GXSkvaWcsZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBjPXBhcnNlSW50KHMuc3Vic3RyaW5nKDEsMyksMTYpLGw9cy5sZW5ndGg7CgkgICAgICAgIHJldHVybiAzPT1sP1N0cmluZy5mcm9tQ2hhckNvZGUoYzwxNjA/YzpjKzY1MjE2KTpKQ1QxMTI4MC5jaGFyQXQoKGM8MTYwP2MtMTI5OmMtMTkzKSoxODgrKDQ9PWw/cy5jaGFyQ29kZUF0KDMpLTY0OihjPXBhcnNlSW50KHMuc3Vic3RyaW5nKDQpLDE2KSk8MTI3P2MtNjQ6Yy02NSkpCgkgICAgfSkKCX07CgoJRXNjYXBlRVVDSlA9ZnVuY3Rpb24oc3RyKXsKCSAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teKisuLTlBLVpfYS16LV0vZyxmdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGM9cy5jaGFyQ29kZUF0KDApOwoJICAgICAgICByZXR1cm4gKGM8MTI4PyhjPDE2PyIlMCI6IiUiKStjLnRvU3RyaW5nKDE2KTo2NTM3NjxjJiZjPDY1NDQwPyIlOEUlIisoYy02NTIxNikudG9TdHJpbmcoMTYpOihjPUpDVDg4MzYuaW5kZXhPZihzKSk8MD8iJUExJUE2IjoiJSIrKChjLShjJT05NCkpLzk0KzE2MSkudG9TdHJpbmcoMTYpKyIlIisoYysxNjEpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKQoJICAgIH0pCgl9OwoKCVVuZXNjYXBlRVVDSlA9ZnVuY3Rpb24oc3RyKXsKCSAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyglQVsxLTlBLUZdfCVbQi1FXVswLTlBLUZdfCVGWzAtOUEtRV0pezJ9fCU4RSUoQVsxLTlBLUZdfFtCLURdWzAtOUEtRl0pfCVbMC03XVswLTlBLUZdL2lnLGZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1wYXJzZUludChzLnN1YnN0cmluZygxKSwxNik7CgkgICAgICAgIHJldHVybiBjPDE2MT9TdHJpbmcuZnJvbUNoYXJDb2RlKGM8MTI4P2M6cGFyc2VJbnQocy5zdWJzdHJpbmcoNCksMTYpKzY1MjE2KTpKQ1Q4ODM2LmNoYXJBdCgoYy0xNjEpKjk0K3BhcnNlSW50KHMuc3Vic3RyaW5nKDQpLDE2KS0xNjEpCgkgICAgfSkKCX07CgoJRXNjYXBlSklTNz1mdW5jdGlvbihzdHIpewoJICAgIHZhciB1PVN0cmluZy5mcm9tQ2hhckNvZGUscmk9dSg5MiwxMjAsNDgsNDgsNDUsOTIsMTIwLDU1LDcwKSxyaj11KDY1Mzc3LDQ1LDY1NDM5LDkzLDQzKSwKCSAgICBIPWZ1bmN0aW9uKGMpewoJICAgICAgICByZXR1cm4gNDE8YyYmYzw1OCYmNDQhPWN8fDY0PGMmJmM8OTF8fDk1PT1jfHw5NjxjJiZjPDEyMz91KGMpOiIlIitjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpCgkgICAgfSwKCSAgICBJPWZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1zLmNoYXJDb2RlQXQoMCk7CgkgICAgICAgIHJldHVybiAoYzwxNj8iJTAiOiIlIikrYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKQoJICAgIH0sCgkgICAgckk9bmV3IFJlZ0V4cDtySS5jb21waWxlKCJbXiorLi05QS1aX2Etei1dIiwiZyIpOwoJICAgIHJldHVybiAoImciK3N0cisiZyIpLnJlcGxhY2UoUmVnRXhwKCJbIityaSsiXSsiLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiAiJTFCJTI4QiIrcy5yZXBsYWNlKHJJLEkpCgkgICAgfSkucmVwbGFjZShSZWdFeHAoIlsiK3JqLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBjLGk9MCx0PSIlMUIlMjhJIjt3aGlsZShjPXMuY2hhckNvZGVBdChpKyspKXQrPUgoYy02NTM0NCk7cmV0dXJuIHQKCSAgICB9KS5yZXBsYWNlKFJlZ0V4cCgiW14iK3JpK3JqLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBhLGMsaT0wLHQ9IiUxQiUyNEIiO3doaWxlKGE9cy5jaGFyQXQoaSsrKSl0Kz0oYz1KQ1Q4ODM2LmluZGV4T2YoYSkpPDA/IiUyMSUyNiI6SCgoYy0oYyU9OTQpKS85NCszMykrSChjKzMzKTtyZXR1cm4gdAoJICAgIH0pLnNsaWNlKDgsLTEpCgl9OwoKCVVuZXNjYXBlSklTNz1mdW5jdGlvbihzdHIpewoJICAgIHZhciBpPTAscCxxLHM9IiIsdT1TdHJpbmcuZnJvbUNoYXJDb2RlLAoJICAgIFA9KCIlMjhCIitzdHIucmVwbGFjZSgvJTQ5L2csIkkiKS5yZXBsYWNlKC8lMUIlMjQlNFswMl18JTFCJTI0QC9pZywiJTFCJTI0QiIpKS5zcGxpdCgvJTFCL2kpLAoJICAgIEk9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiB1KHBhcnNlSW50KHMuc3Vic3RyaW5nKDEpLDE2KSkKCSAgICB9LAoJICAgIEo9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiB1KCgzPT1zLmxlbmd0aD9wYXJzZUludChzLnN1YnN0cmluZygxKSwxNik6cy5jaGFyQ29kZUF0KDApKSs2NTM0NCkKCSAgICB9LAoJICAgIEs9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBsPXMubGVuZ3RoOwoJICAgICAgICByZXR1cm4gSkNUODgzNi5jaGFyQXQoNDxsPyhwYXJzZUludChzLnN1YnN0cmluZygxKSwxNiktMzMpKjk0K3BhcnNlSW50KHMuc3Vic3RyaW5nKDQpLDE2KS0zMzoyPGw/KDM3PT0obD1zLmNoYXJDb2RlQXQoMCkpPyhwYXJzZUludChzLnN1YnN0cmluZygxLDMpLDE2KS0zMykqOTQrcy5jaGFyQ29kZUF0KDMpOihsLTMzKSo5NCtwYXJzZUludChzLnN1YnN0cmluZygyKSwxNikpLTMzOihzLmNoYXJDb2RlQXQoMCktMzMpKjk0K3MuY2hhckNvZGVBdCgxKS0zMykKCSAgICB9LAoJICAgIHJJPW5ldyBSZWdFeHAscko9bmV3IFJlZ0V4cCxySz1uZXcgUmVnRXhwOwoJICAgIHJJLmNvbXBpbGUoIiVbMC03XVswLTlBLUZdIiwiaWciKTtySi5jb21waWxlKCIoJTJbMS05QS1GXXwlWzMtNV1bMC05QS1GXSl8WyEtX10iLCJpZyIpOwoJICAgIHJLLmNvbXBpbGUoIiglMlsxLTlBLUZdfCVbMy02XVswLTlBLUZdfCU3WzAtOUEtRV0pezJ9fCglMlsxLTlBLUZdfCVbMy02XVswLTlBLUZdfCU3WzAtOUEtRV0pWyEtfl18WyEtfl0oJTJbMS05QS1GXXwlWzMtNl1bMC05QS1GXXwlN1swLTlBLUVdKXxbIS1+XXsyfSIsImlnIik7CgkgICAgd2hpbGUocD1QW2krK10pcys9IiUyNEIiPT0ocT1wLnN1YnN0cmluZygwLDQpKT9wLnN1YnN0cmluZyg0KS5yZXBsYWNlKHJLLEspOiIlMjhJIj09cT9wLnN1YnN0cmluZyg0KS5yZXBsYWNlKHJKLEopOnAucmVwbGFjZShySSxJKS5zdWJzdHJpbmcoMik7CgkgICAgcmV0dXJuIHMKCX07CgoJRXNjYXBlSklTOD1mdW5jdGlvbihzdHIpewoJICAgIHZhciB1PVN0cmluZy5mcm9tQ2hhckNvZGUscj11KDkyLDEyMCw0OCw0OCw0NSw5MiwxMjAsNTUsNzAsNjUzNzcsNDUsNjU0MzksOTMsNDMpLAoJICAgIEg9ZnVuY3Rpb24oYyl7CgkgICAgICAgIHJldHVybiA0MTxjJiZjPDU4JiY0NCE9Y3x8NjQ8YyYmYzw5MXx8OTU9PWN8fDk2PGMmJmM8MTIzP3UoYyk6IiUiK2MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkKCSAgICB9LAoJICAgIEk9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBjPXMuY2hhckNvZGVBdCgwKTsKCSAgICAgICAgcmV0dXJuIChjPDE2PyIlMCI6IiUiKSsoYzwxMjg/YzpjLTY1MjE2KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKQoJICAgIH0sCgkgICAgckk9bmV3IFJlZ0V4cDtySS5jb21waWxlKCJbXiorLi05QS1aX2Etei1dIiwiZyIpOwoJICAgIHJldHVybiAoImciK3N0cisiZyIpLnJlcGxhY2UoUmVnRXhwKCJbIityLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiAiJTFCJTI4QiIrcy5yZXBsYWNlKHJJLEkpCgkgICAgfSkucmVwbGFjZShSZWdFeHAoIlteIityLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBhLGMsaT0wLHQ9IiUxQiUyNEIiO3doaWxlKGE9cy5jaGFyQXQoaSsrKSl0Kz0oYz1KQ1Q4ODM2LmluZGV4T2YoYSkpPDA/IiUyMSUyNiI6SCgoYy0oYyU9OTQpKS85NCszMykrSChjKzMzKTtyZXR1cm4gdAoJICAgIH0pLnNsaWNlKDgsLTEpCgl9OwoKCVVuZXNjYXBlSklTOD1mdW5jdGlvbihzdHIpewoJICAgIHZhciBpPTAscCxzPSIiLAoJICAgIFA9KCIlMjhCIitzdHIucmVwbGFjZSgvJTFCJTI0JTRbMDJdfCUxQiUyNEAvaWcsIiUxQiUyNEIiKSkuc3BsaXQoLyUxQi9pKSwKCSAgICBJPWZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1wYXJzZUludChzLnN1YnN0cmluZygxKSwxNik7CgkgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGM8MTI4P2M6Yys2NTIxNikKCSAgICB9LAoJICAgIEs9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBsPXMubGVuZ3RoOwoJICAgICAgICByZXR1cm4gSkNUODgzNi5jaGFyQXQoNDxsPyhwYXJzZUludChzLnN1YnN0cmluZygxKSwxNiktMzMpKjk0K3BhcnNlSW50KHMuc3Vic3RyaW5nKDQpLDE2KS0zMzoyPGw/KDM3PT0obD1zLmNoYXJDb2RlQXQoMCkpPyhwYXJzZUludChzLnN1YnN0cmluZygxLDMpLDE2KS0zMykqOTQrcy5jaGFyQ29kZUF0KDMpOihsLTMzKSo5NCtwYXJzZUludChzLnN1YnN0cmluZygyKSwxNikpLTMzOihzLmNoYXJDb2RlQXQoMCktMzMpKjk0K3MuY2hhckNvZGVBdCgxKS0zMykKCSAgICB9LAoJICAgIHJJPW5ldyBSZWdFeHAscks9bmV3IFJlZ0V4cDsKCSAgICBySS5jb21waWxlKCIlKFswLTddWzAtOUEtRl18QVsxLTlBLUZdfFtCLURdWzAtOUEtRl0pIiwiaWciKTsKCSAgICBySy5jb21waWxlKCIoJTJbMS05QS1GXXwlWzMtNl1bMC05QS1GXXwlN1swLTlBLUVdKXsyfXwoJTJbMS05QS1GXXwlWzMtNl1bMC05QS1GXXwlN1swLTlBLUVdKVshLX5dfFshLX5dKCUyWzEtOUEtRl18JVszLTZdWzAtOUEtRl18JTdbMC05QS1FXSl8WyEtfl17Mn0iLCJpZyIpOwoJICAgIHdoaWxlKHA9UFtpKytdKXMrPSIlMjRCIj09cC5zdWJzdHJpbmcoMCw0KT9wLnN1YnN0cmluZyg0KS5yZXBsYWNlKHJLLEspOnAucmVwbGFjZShySSxJKS5zdWJzdHJpbmcoMik7CgkgICAgcmV0dXJuIHMKCX07CgoJRXNjYXBlVW5pY29kZT1mdW5jdGlvbihzdHIpewoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvW14qKy4tOUEtWl9hLXotXS9nLGZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1zLmNoYXJDb2RlQXQoMCk7CgkgICAgICAgIHJldHVybiAoYzwxNj8iJTAiOmM8MjU2PyIlIjpjPDQwOTY/IiV1MCI6IiV1IikrYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKQoJICAgIH0pCgl9OwoKCVVuZXNjYXBlVW5pY29kZT1mdW5jdGlvbihzdHIpewoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvJXVbMC05QS1GXXs0fXwlWzAtOUEtRl17Mn0vaWcsZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrcy5zdWJzdHJpbmcocy5sZW5ndGgvMykpCgkgICAgfSkKCX07CgoJRXNjYXBlVVRGNz1mdW5jdGlvbihzdHIpewoJICAgIHZhciBCPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5zcGxpdCgiIiksCgkgICAgRT1mdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGM9cy5jaGFyQ29kZUF0KDApOwoJICAgICAgICByZXR1cm4gQltjPj4xMF0rQltjPj40JjYzXStCWyhjJjE1KTw8MnwoYz1zLmNoYXJDb2RlQXQoMSkpPj4xNF0rKDA8PWM/QltjPj44JjYzXStCW2M+PjImNjNdK0JbKGMmMyk8PDR8KGM9cy5jaGFyQ29kZUF0KDIpKT4+MTJdKygwPD1jP0JbYz4+NiY2M10rQltjJjYzXToiIik6IiIpCgkgICAgfSwKCSAgICByZT1uZXcgUmVnRXhwO3JlLmNvbXBpbGUoIlteK117MSwzfSIsImciKTsKCSAgICByZXR1cm4gKHN0cisiZyIpLnJlcGxhY2UoL1teKisuLTlBLVpfYS16LV0rWyorLi05QS1aX2Etei1dfFsrXS9nLGZ1bmN0aW9uKHMpewoJICAgICAgICBpZigiKyI9PXMpcmV0dXJuICIrLSI7CgkgICAgICAgIHZhciBsPXMubGVuZ3RoLTEsdz1zLmNoYXJBdChsKTsKCSAgICAgICAgcmV0dXJuICIrIitzLnN1YnN0cmluZygwLGwpLnJlcGxhY2UocmUsRSkrKCIrIj09dz8iLSstIjoiKiI9PXd8fCIuIj09d3x8Il8iPT13P3c6Ii0iK3cpCgkgICAgfSkuc2xpY2UoMCwtMSkKCX07CgoJVW5lc2NhcGVVVEY3PWZ1bmN0aW9uKHN0cil7CgkgICAgdmFyIGk9MCxCPXt9OwoJICAgIHdoaWxlKGk8NjQpQlsiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuY2hhckF0KGkpXT1pKys7CgkgICAgcmV0dXJuIHN0ci5yZXBsYWNlKFJlZ0V4cCgiWytdWysvLTlBLVphLXpdKi0/IiwiZyIpLGZ1bmN0aW9uKHMpewoJICAgICAgICBpZigiKy0iPT1zKXJldHVybiAiKyI7CgkgICAgICAgIHZhciBiPUJbcy5jaGFyQXQoMSldLGMsaT0xLHQ9IiI7CgkgICAgICAgIHdoaWxlKDA8PWIpewoJICAgICAgICAgICAgaWYoKGM9aSY3KTw2KWM9YzwzP2I8PDEwfEJbcy5jaGFyQXQoKytpKV08PDR8KGI9QltzLmNoYXJBdCgrK2kpXSk+PjI6KGImMyk8PDE0fEJbcy5jaGFyQXQoKytpKV08PDh8QltzLmNoYXJBdCgrK2kpXTw8MnwoYj1CW3MuY2hhckF0KCsraSldKT4+NDsKCSAgICAgICAgICAgIGVsc2V7Yz0oYiYxNSk8PDEyfEJbcy5jaGFyQXQoKytpKV08PDZ8QltzLmNoYXJBdCgrK2kpXTtiPUJbcy5jaGFyQXQoKytpKV19CgkgICAgICAgICAgICBpZihjKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYykKCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gdAoJICAgIH0pCgl9OwoKCUVzY2FwZVVURjg9ZnVuY3Rpb24oc3RyKXsKCSAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teKisuLTlBLVpfYS16LV0vZyxmdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGM9cy5jaGFyQ29kZUF0KDApOwoJICAgICAgICByZXR1cm4gKGM8MTY/IiUwIitjLnRvU3RyaW5nKDE2KTpjPDEyOD8iJSIrYy50b1N0cmluZygxNik6YzwyMDQ4PyIlIisoYz4+NnwxOTIpLnRvU3RyaW5nKDE2KSsiJSIrKGMmNjN8MTI4KS50b1N0cmluZygxNik6IiUiKyhjPj4xMnwyMjQpLnRvU3RyaW5nKDE2KSsiJSIrKGM+PjYmNjN8MTI4KS50b1N0cmluZygxNikrIiUiKyhjJjYzfDEyOCkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpCgkgICAgfSkKCX07CgoJVW5lc2NhcGVVVEY4PWZ1bmN0aW9uKHN0cil7CgkgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lKEUoMCVbQUJdfFsxLUNFRl0lWzg5QUJdfEQlWzg5XSlbMC05QS1GXXxDWzItOUEtRl18RFswLTlBLUZdKSVbODlBQl1bMC05QS1GXXwlWzAtN11bMC05QS1GXS9pZyxmdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGM9cGFyc2VJbnQocy5zdWJzdHJpbmcoMSksMTYpOwoJICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjPDEyOD9jOmM8MjI0PyhjJjMxKTw8NnxwYXJzZUludChzLnN1YnN0cmluZyg0KSwxNikmNjM6KChjJjE1KTw8NnxwYXJzZUludChzLnN1YnN0cmluZyg0KSwxNikmNjMpPDw2fHBhcnNlSW50KHMuc3Vic3RyaW5nKDcpLDE2KSY2MykKCSAgICB9KQoJfTsKCglFc2NhcGVVVEYxNkxFPWZ1bmN0aW9uKHN0cil7CgkgICAgdmFyIEg9ZnVuY3Rpb24oYyl7CgkgICAgICAgIHJldHVybiA0MTxjJiZjPDU4JiY0NCE9Y3x8NjQ8YyYmYzw5MXx8OTU9PWN8fDk2PGMmJmM8MTIzP1N0cmluZy5mcm9tQ2hhckNvZGUoYyk6KGM8MTY/IiUwIjoiJSIpK2MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkKCSAgICB9OwoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvW14gXXwgL2csZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBjPXMuY2hhckNvZGVBdCgwKTtyZXR1cm4gSChjJjI1NSkrSChjPj44KQoJICAgIH0pCgl9OwoKCVVuZXNjYXBlVVRGMTZMRT1mdW5jdGlvbihzdHIpewoJICAgIHZhciB1PVN0cmluZy5mcm9tQ2hhckNvZGUsYj11KDkyLDEyMCw0OCw0OCw0NSw5MiwxMjAsNzAsNzApOwoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvXiVGRiVGRS9pLCIiKS5yZXBsYWNlKFJlZ0V4cCgiJVswLTlBLUZdezJ9JVswLTlBLUZdezJ9fCVbMC05QS1GXXsyfVsiK2IrIl18WyIrYisiXSVbMC05QS1GXXsyfXxbIitiKyJdezJ9IiwiaWciKSxmdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGw9cy5sZW5ndGg7CgkgICAgICAgIHJldHVybiB1KDQ8bD8iMHgiK3Muc3Vic3RyaW5nKDQsNikrcy5zdWJzdHJpbmcoMSwzKToyPGw/Mzc9PShsPXMuY2hhckNvZGVBdCgwKSk/cGFyc2VJbnQocy5zdWJzdHJpbmcoMSwzKSwxNil8cy5jaGFyQ29kZUF0KDMpPDw4Omx8cGFyc2VJbnQocy5zdWJzdHJpbmcoMiksMTYpPDw4OnMuY2hhckNvZGVBdCgwKXxzLmNoYXJDb2RlQXQoMSk8PDgpCgkgICAgfSkKCX07CgoJR2V0RXNjYXBlQ29kZVR5cGU9ZnVuY3Rpb24oc3RyKXsKCSAgICBpZigvJXVbMC05QS1GXXs0fS9pLnRlc3Qoc3RyKSlyZXR1cm4gIlVuaWNvZGUiOwoJICAgIGlmKC8lKFswLTlBLURGXVswLTlBLUZdJVs4QV0wJXxFMCU4MHxbMC03XVswLTlBLUZdfENbMDFdKSVbOEFdMHwlMDB8JVs3Rl1GL2kudGVzdChzdHIpKXJldHVybiAiVVRGMTZMRSI7CgkgICAgaWYoLyVFWzAtOUEtRl0lWzhBXTAlWzhBXTB8JVtDRF1bMC05QS1GXSVbOEFdMC9pLnRlc3Qoc3RyKSlyZXR1cm4gIlVURjgiOwoJICAgIGlmKC8lRltERV0vaS50ZXN0KHN0cikpcmV0dXJuIC8lOFswLTlBLURdfCU5WzAtOUEtRl18JUEwL2kudGVzdChzdHIpPyJVVEYxNkxFIjoiRVVDSlAiOwoJICAgIGlmKC8lMUIvaS50ZXN0KHN0cikpcmV0dXJuIC8lW0EtRF1bMC05QS1GXS9pLnRlc3Qoc3RyKT8iSklTOCI6IkpJUzciOwoJICAgIHZhciBTPXN0ci5zdWJzdHJpbmcoMCw2MTQzKS5yZXBsYWNlKC8lWzAtOUEtRl17Mn18W14gXXwgL2lnLGZ1bmN0aW9uKHMpewoJICAgICAgICByZXR1cm4gcy5sZW5ndGg8Mz8iNDAiOnMuc3Vic3RyaW5nKDEpCgkgICAgfSksYyxDLGk9MCxUOwoJICAgIHdoaWxlKDA8PShjPXBhcnNlSW50KFMuc3Vic3RyaW5nKGksaSs9MiksMTYpKSYmaTw0MDkyKWlmKDEyODw9Yyl7CgkgICAgICAgIGlmKChDPXBhcnNlSW50KFMuc3Vic3RyaW5nKGksaSsyKSwxNikpPDEyOClpKz0yOwoJICAgICAgICBlbHNlIGlmKDE5NDw9YyYmYzwyNDAmJkM8MTkyKXsKCSAgICAgICAgICAgIGlmKGM8MjI0KXtUPSJVVEY4IjtpKz0yO2NvbnRpbnVlfQoJICAgICAgICAgICAgaWYoMj09cGFyc2VJbnQoUy5jaGFyQXQoaSsyKSwxNik+PjIpe1Q9IlVURjgiO2krPTQ7Y29udGludWV9CgkgICAgICAgIH0KCSAgICAgICAgaWYoMTQyPT1jJiYxNjE8PUMmJkM8MjI0KXtpZighVClUPSJFVUNKUCI7aWYoIkVVQ0pQIj09VCljb250aW51ZX0KCSAgICAgICAgaWYoYzwxNjEpcmV0dXJuICJTSklTIjsKCSAgICAgICAgaWYoYzwyMjQmJiFUKQoJICAgICAgICAgICAgaWYoKDE2ND09YyYmQzwyNDR8fDE2NT09YyYmQzwyNDcpJiYxNjE8PUMpaSs9MjsKCSAgICAgICAgICAgIGVsc2UgVD0yMjQ8PUM/IkVVQ0pQIjoiU0pJUyI7CgkgICAgICAgIGVsc2UgVD0iRVVDSlAiCgkgICAgfQoJICAgIHJldHVybiBUP1Q6IkVVQ0pQIgoJfTsKCglKQ1QxMTI4MD1GdW5jdGlvbigndmFyIGE9InpLVjMzfmpaNHpOPX5qaTM2WGF6TTkzeSF7fmsyeSFvfmswWmxXNnpOPzNXejNXP3tFS3pLWzMzW2B5fDstfmpeWU9UeiQhfmtOeXxMMSQzNTN+alYzektrM35rLTRQNHpLXzIrfmpZNHkheFlIUn5qbHokX35qazR6JGUzWDVIZTwweSF3eXxYM1s6fmx8VlVbRjNWWjA1Nkh5IW56L20xWEQ2MSsxWFkxRTE9MXl8YnpLaXohSDAzNHpLan5tRXojYzVaQTMtM1gkMX5tQnokJDN+bHl6Iyw0WU41fm1FeiN7WktaM1YlN1l9IUozWC1ZRVhfSigzfm1BeiA9VjtrRTAveXxGM3khfX5tPnovVX5tSX5qXzIrfm1BfmpwMjt+bUB+azMyO35tPlZ9MnV+bUVYIzJ4fm1CeSt4MjI0Mih+bUJ5LDsyMjQyKH5tYXktPjImWGtHMjt+bUl5LV8yJk5YZDI7fm1Heix7NDw2Oi46QipCOlhDND42Oi4+QipCQlhTQStBOlhdRSZFPH5yI3orNjI1eiBzMit6Tj1gSFhJQFlNWElBWFpZVU04WDRLLzpRIVomMzMgM1lXWFt+bUJge3pLdDR6ICh6Vi96IDN6UncyJVdkMzldUzExeiRQQVhINVhiO1pRV1UxWmdXUCUzfm9Ae0RnbCNnZH1UKXtVb3t5NV9ke2VAfUMofSBXVTl8Y0J7d31ienZWfClbfSBIfHpUfWR8fDB+e11RfChse3x4e2l2e2R3fSg1fVtafGt1WiB9Y3F7e3l8aWp9Lkl7aWRib2YlY3VeZH1Sal55fC1Ne0VTWUdZZllzWnNsU2A/WmRZT19fZ0xZUlomZnZiNG9LZmhTZl5kPFllYXNjMWYmYT1obllHe1FZe0RgQnNhfHUsfURsfF9Re0MleEt8QXF9Qz58YyNyeVc9fWVZe0wrYCldW1lGX1ViXmg0fVtYfD9yfHVfZXh9VExAWVJdantTclhnbyp8R3Z8ckt9QiNtdXtSMX1oc3xkUHtDN3xeUXQzfEBQe1lWViB8OCZ9I0R9ZWZ7ZS97Umx8PkhuaX1SMXtaI3tEW31DUWxRfHxFfVtze1NHXytpOGVwbFlbPVt8ZWNbJFlYbiNgaGNtfVlSfHtDaShfW3FsfD84cDNdLX1edHt3eX00bGEmcGN8M2V7UnB7THFpSl0sXSBga2MoXUBjaFluck1gT14sWkxZaFpCXXl3eWZHWX5hZXghX1F3d3thIXwpKmxIck17TituJllZan5aIGIgYyNlX1toWlNvbnxyT3RgfWhCWGFeaXtsaHw8MHx8cntLSntrbmkpfHgsfDBhdVl7RCFeU2Nle3c7fEBTfGNBfVhue0MxaCR7RV1aLVhnWipYUGJwXV5fcWJIXmVbYFlNfGF8fCs9XSFMY31ddmRCYz1qLVlTWkRdWW15WUxZS1o5Wj5YY2N6YzJ7WWh9OUZjI1oubHt9KER7R3t7bVJoQ3xMM2IjfHhLW0JlcGojdXRgSFsse0U5WXJ9MWJ7W2Vde1pGazdbWlliWjBYTF19WWVbKGBkfWMhfCp5YERnPWI7Z1JdSG09aEpob31SLVtufTk7e04hWzdrX3tVYm1OXXJmI3BUZVt4OH0hUWNzX3JzW21gfD5OfV5WfSk3e15yfC9FfSksfUhIe09ZZTJ7U2t4KWU8Xy5jai5jam9NaGNeZH0wdVlaZCFeSl9AZyxbW1s/e2lAXVt8M1N9WWwzfCExfGVafDVJWXd8MUR9ZTd8Q3Z7T0hibngtYHd2Yls2WzR9ID1nK2s6e0M6fWVke1NdfDJNXS19V1p8L3F7TEZ8ZFl1Xn1Hc15je1o9fWg+fC9pfHtXXTp8aXB7Tjp8enR8Uzx7REhbcF90dkR7TjxbOEF4b3tYNGEuXm9eWD5ZZmE1OWAjWkJZZ1l+X3ReOWBqWkhabmA+R1tvYWpaO1gsaSlaLl5+WUplIFppWkZee11bWyNadF58XUZqeF0mXzVkZGRXXVAwQ1stXX1dZHx5IHtDX2pVcWxdIHxPcGFBW1p7bHB8cnp9Ok11I11fWWY2e0VwP2Y1YCRbNl5EXVtedVskWzZeLlo4XV1lUGMyVS89XUteXyteTXtxKnw5dFl1WixzKGRTe2k9fGJOYkJ7dUd9MGpaT2E6Wy1dZFl0dTNdOl08e0RKX1NaSXFyX2BsPVl0YGdrVG5YYjNkQGtpcTBhYFp7fCFCfH1lfVd3e1NwLF5afDA+X1p9MzZ8XUF8LXR9bHR7UjZwaXx2OGhQdSN7Qz5ZT1pIWW1nL1o0bmljS1t9aEZfQmd8WVJaN2N8Y3JrellaWX1faVhjWi58KVV8TDV7Un5xaV5VZ2FAWVt4Yn0mcWRiZDZoNXxCdHdbfWM8e0RzNTNbWTddP1o8fGUwe0xbWktdbVhLWiNaMl50YXZmMGBQRVtPU09hUGA0Z2lgcWpkWU1neXMvP1tuYyx9RUViLGVMXWdbbntFX2IvdmN2Z2Iue2tjd2lgfnYlfDA6fGlLe0poX3ZmNWxifUtMfChvaT1McnpoaFlfXkBgemdmW35nKVtKXzBma19We1QpfUlfe0QmXy9kOVcvfE1VWylmJHhXfT8keHI0PHtMYnt5NH0mdXtYSnxjbXtJdXtqUX1DTWtEe0NYfDdBfUd+e2t0KW5CfGQ1fDwtfVdKfUB8fGRAfEl5fVRzfGlMfC9efG5vfDA7fUw2e1BtXTd9JHpmOnxyMn0/Q19re1IofS13fGBHe0d5W2ddYlZqZT1fMHxQVHteWV55anRUW1tbbCFZZV9gWk5dQFtuXylqM25FZ01hXVl0WXBaeV0uZC1ZX2NqYn5ZfltuY35zQ2kzfHpnfUIwfWRve09ee3wkYF98RHt9VSZ8MCt7SjN8OCpdaWF5eHthe3hKXzl8LGN7RWVdUVhsWWJdJFslWU1jKl13W2FhZmVdYVZZaVtmWkVpaVt4cTJZUVpIZ11ZfmgjfFk6dGhyZV5AXnxfRl5DYlRiR18xXnFmN3tMLWBWRnggWnJ8QEVaO2drWkBzbGdrb2BbZX1UOntDdV5wZGRaX2B5YXZeRWErWyNaQmJTYk9gZWxRZkx1aX0uRnx0eFljYlFgWGVoY0dlfmZjXlJsVntEXzBaQWVqW2wmalNoeEdbaXBCXz11OmVVfTNlOFs9anx7RCh9ZE97RG9bQllVWjAvXUFZRV1BTFloWmNZbFlQL14tXntZdF8xXy07WVRgUDRCWkc9SU9aJl1IW2VdWVlkWzleRlsxWWRaeFo/WntaPF1CYTJbNVliWzBaNGw/XWRfO18pYT9ZR0VZaVl2YF9YbVpzNFpqWV5aYl02Z3FHYVheOVl9ZFhacltnfF1ZfUsgYUZacF5rXkZdTWBee08xWXNdWkNnQ3Y0fEU+fThlYjd9bGB7TDVbWl9mYVF8YzJ9Rmp9aHdeI3xOZ3xCfHx3MnxTaHt2K1tHfWFCfE1ZfUF7fDhvfVh+e0U4cGFaOl1pXk5qcV1uZXcpYC1aPmhhb3VuV2hOfWMje0RmWnxmS11LcUdaPTp1fGZxb3Fjdn0yc3NtfS5ye117bklmVntKVylbS3wsWntVeGN8XWxfS2RDYiVdY2ZvYnlhM2BwfUdefExaaVNDXVV8KFh8a0JsVmdba05vKHtPOmc6fC1OfHFUfTk/e01CaUx9U3F7YFB8M2F8dS57VWFxOntfb3xeU31qWHtGb2IwYDt8I3lfQFtWW0t8Y3dbPF8gfUtVfDBGfWQzfGV0e1E3e0x1WnR0c21mXmtZWmBBZmB9JHh9VWB8V3d9ZF18ID59SyxyJnxYSXwqZXtDL2EtYm1yMWZJZDRbO2I+dFFfOl1oa3tiLXBNZ2VdZ2Zwby58KHdbamdWe0VDMVosWWhhWV5xLF9HW2NfZ1tKMFlYXWBbaF5oWUteX1lpYixgIHtpNnZmQFlNXmhkT0taWm4oamdaPmJ6U0RjXlolW1tvOVsyPS9ZSFooXy9HdV9gKnw4entEVVp4WXRednV2WmpoaV5sYyZnVWQ0fDxVaUFgel0kYi9aP2x9WUleamFIeGV8O0Z9bCR7c1F9NWd9aEF8ZTR9P297aWh9VXp7QylqUGU0XUheSltFZ1t8QU1aTWxjfTose2l6fSMqfGdje0lxfC86fHpLe2wmfSN1fG15ZHt7TSZ2fm5WfTtMfChnfEldb2dkZGIweHNkN15WfSkkdVF7SHphenNneHRzT15sfUY+WkJdcnx7N3tqQGNVXnt7Q2JpWW9IbG5nXWYrblFbYmtUbi99PC1kOXEge0tYYWRaWW8rbnxsW3xsY31WMntbYXtTNFphbX5aYV5ge0hIe3h4X1N2Rnxhaz1jXlt2XjdfcllUYGxkQF06X3ViJVskW21dKFNodX1HMntFLlpVX0xfUnt0emB2aihmP159aHN3en1HZFp9e1M6aGBhRHw/V3xgZGdHfGlme2E4fEoxe04sfS1BbzN7SCN7bWZzUHxbIGJ6bit9X1F7TVR7dTRrSGNqX3FgZVpqWzhvMGp5e3A3fUN8W31sKXtNdVlZe3xGZiFZa24ze3JUfG0sXlJ8LFJ9JH5Za2d4e1AhXT5pWGg2W2xbL31KZ2Nne0pZWi5ecVlmWUlabFtnWiNYaltQYzdZeVpEXitZdDs0O2BlOFl5WlZiUTdZelp4WGphLjdTWWxbc10yXi9IYSRbNlpHWXJiJVhpWWRmMl1IXWtaa1oqWlFbWllTXkhaWGNDYyVafFsoYlZaXV06T0pRX0RaQ2c8WyxdJVphYSBbZ3tDMDBIWVtjJVtDaHlaLFpfYFBiWGErZWhgXiZqUGkwYVtnZ3ZobGVrTF13e1lwXnZ9W2V7fjtrJWEma158blJfel9Rbmd9W0V9KldxOntrXntGSlpwWFJobWgzXnA+ZGVePV83YHxaYmFBWnRkaFo/bjRaTF11YDlaTmMzZyVbNmI9ZS5aVmZDW1paXl5eaER7RSg5YyhreVo9YmJ8U3F7a2B8dm1yPml6bEhbdXxlYH00OX1ZJX1GVHtbentSa31CentUQ2MvbE1pQXFrZihtJGhEYztxb29pW31ebzpjXnxRbX1hX3ttcloocEFgLH08MnNZfCBhZGZfJXx9YH1ZNVU7fS80fEQ+fCRYe2p3e0M8fEYuaEt8KkF7TVJaOFpzbT9pbVptXz9icllXWnJZeGB5VlpjM2FAZj9hS15vakVkIHtiTn0vM1pIXS8kWVpobV4maiA5fChTfGJdbUZ9VUl7cSZhTV1MY3JaNV4ufFtqYFRfVl9HYWt9OUpbIFpDWkR8Xmh7Tjl7fiZbNlpke31CfTJPfGN2XUt9M3N9VXl8bCxmaWhXe0VHYGpfUU9wflokRl56ZXhTYGRjSVNmaFpCWFB8LnZufF9IWVF8KTl8Y3JdPGAmWjZdbV8oWmhQY1NnPmBaXTVgfjFgMFhjYjRrMXtPIWJ6fENOX1R7TFJ8YS9nRmNEfGo8e1ouX1tmKW1QYzoxYFd0SWFUMWNnWWtaT2FWWk9ZRnJFZVt9VCR9Q2h9bWt7Sy1eQF1mSHtIZGlgYypaJnxLdHtpZltDe1E7e3hZQmBkWUlYOlpCW31dKlt7e3A5fDRHWVJoMmFve0RTfFYrW3pkJGBGW1pYS2FkYipBXSBZc11NYWlmfmEvWjJibWNsYjh7SnJvX3J6fHg5Y0hvamJae0d6WnhfKV06e3dBYXllRGx4fTw9YGd7SDF7bCN9OWl8KT18bFB7UXF9Lih7TGF8IVl7aTJFWmZwPWMqfUNje0VEdlZCfDtnfTJ0e1c0YXZeQm49XXJpLHx5P3wzK31UKmNrWip7RmZyNWUlfHNCe2x4XjBdZVpiXTlbU2dBalNfRHx1SFp4XWRpdmVbYy5ZUGtjcS99ZGJ7RVFoJmhRfGVnfUchbGppbHxCT11Ye1FyX0drR2x+WWlZV3U9YzNlYn0yOXYzfER8fTRpfHwue012fSlWe1NQMXtGWH1DWlc2e2NtfHZPe3BTfGUjfUF+fDFpfTgxfE13fWVzfDVbfTN3e0NgaDlhTF1ve31wW0dgPmklYTFaQGBMbjJiRFskX2hgfVpPamhkVHJIe1tqXzprfmt2W1NkdV1DdEx9NDF7SSB8W1t7XVpwJF1YanhqSHRfZVRob2EjaD5zU3Q4fGdLfFRWaVtZe3Q9fUJzfGI3WnByJXtndHxZb3tDU1sve2l0ZXZhfGNmXmhnbn0oJF9jXndtYl5XbSt8NTVqcmJGfHs5XiBxNntDJmMrWktkSmtxX3hPWXFaWVNZWFlsYDhdLWN4WkFxL2IlYipfVnNhWy9ZYmphYy9PYUdaNGZ6YXxhKWdZe1A/fCBJfFkgfCxwaTFuN305Ym05YWR8PWR7YVZ8MkBbKH1CYGQmfFV6fUJ9e2BxfC9IfCFKa017RlV8Q0J8Lnt9QXp9I1B8bGt9S3t8MnJrN3teOF4/YC98az58S2F7U3F9R3p9aW97RHhaaFt5S18jfTk8e1RSZGdjXWB+Wj5KWW1ZSl18YCFaS1pdZ1VjeHxeRVtyWkNkYGY5b1FbTmNEXyRabFo7WnJ9bVh8PSF8JDZaUFpZdElvJWZqfUNwY058Qix7VkR3fmdifUBoWmdgUXtMY21BWyhib2A8fEAkfG8xfFNzfTlaX310Q3xHYHtGL3w5bmR9aT19Vi17TDhhYWVTVF1kYVJidWpoXnhscHE4fH16czRialtTYEp8XT9He1Aje3JEe11JYE9sSHtIbV1WWXVTWVViUmMqNltqYDhdcFpbYnRfL15KYypbPFo/WUV8WGJ8P19aXlZjYXNdaHt0OXxVd2QpXyg9MF42WmJ7TmN9IEVbcVpBZVhbYV1QXnxfSj5lOGBXXmpfWX1Se3tKcF9fXUVlI2U6aVdiOXFfd0tidWpyYlJ9Q1lgLHttSn1nentRXnt0fk58PyBnU2dhYFZffHw6I21pfTN0fC9JYFh7Tip8Y3R8Mmd7a219Z2l8ez17akN9Rjt8RX17WlpqWWYqZnJtdX04VGRyb2l7VFt8K359SEd7Y0p9RE17THB7Q3RkJn0kaGkzfEZafCBtfUtyfDM4fV5jfG1ffFRye1F2fDM2fT9VcD58O1N7RFZ7a19hc31CS3tQfX05cHx0YGpSe3NBbTR7RD1iNHBXYVt9WGl7RWp3RWtJfTNTfEU/dT1YMHtqZn0gU3xOTXxKQ3txb14zY21dLXxKVXgve0Nqe3M+e0NydFtVWHV2fER+fGp8ZHtZWFpSfUFxfTByfShfe3BKZmlfen0wYnwtdmkpWiBtRmUse2Y0fHFgYnt9Xlp7SE17cmJlSFp8Xnhfb3xYTXxMJXx1RlhtfUBDX3t7SGhwJWE3fDBwW1hwK15LfTlVe2JQfTogdFR9Qnx9KyR8YjJ8W158fmh7RkFieVtge314Z3lncnR+aDFbbGlgYzR2enwsN3B+Yih8bXZpTn1ecGdbe04vfGczfF4wYyxnRXxmJXw3TntxW3x0Y3xUS0F7TFV9SUB8QVpwKH1HLXN6e0YgfHFae31GfGYtfVJHbjZ7Wl1fNX0pQn1VSntGRmIyXTRaSUB2PWssXXRfRGc1QmpdWi1dTF12cnBkdmRHbGt8Z0Z9R118SVd9WTBbR3wgL2JvfFRlXixfQn0jbl5ee1FIWUlbP2h4Z3tbYF1EXklZUllUYiZrSltjcmlbZ185XVVkfl5fXTxwQF9lX1hkTm0tXi98NSl8aF97Sjt7a2FjVm9wZiFxO2FzcWR9bil8Lm18YmZ7UVd8VSl9Yit7dEx8d2BgTnx0b3t0IFpPfFRdakZ9Q0J8MFF7ZTVad3xrIHxXZX01OntIT3t0UHdmX3VhampCZlh9LVZfQ197e3J+Z2d8VWRlO3MrfUtOWEh9ISBgS31lV3tVcHdiayVvZ2FXfTlFWU59WVl8JnZ8U0x7QzNbNXMuXVldSV11e002e3BZWmBeLGBaYkNZUlsxbU5nPnJzazBZbVtqckVdUllpWlRyKllKe0dlfCUtbGZ8eShgPVt0fUU2e2shfDMpfVprfSBdW0d7RX5jRnt1M1Uuckp8YTlwI28jWkV8P3x7c1ljI3Z2e0U9fExDfWN1e044YC9gM2A5cnRbNHxIZXtjcXxpU1l4WWB9ViB8KFF8dDR7Qz9da19WbHZrKUJaXnI8e0NMfSNofVIrWzx8aT19WHx7S0FvXXxXPGBLe05XfFp4fSM7fGZle0lNcjx8S350Sl94fUF5TFo/e0d2YkxuUmdOfVgme0g3fHh+fUpte10tfCBHcE51MH0ub2s+fGM0e1BZaXNyRFp8ZndoOXxoZm9Ae0h+WFNiT11PZHZdJWBOXWIxWV1dfGVJWn1fLVpBXWFqLD5lRm4ralthUV8rXWhbSl9tX2ddJV93Zi5gJWsxZSNaP3tDdll1X0JefGdrYFhmaF5NM2BhZkdaLVp8W217TH18azNjcFtpdCBePllVaX5kPntUKn1ZSntRNXtKeGEkaGd8JTRgfXxMQWd2YiB9R317UD18PDtVeHtfc2tSe2NWfC0qfHMte01wfFhQfCRHfF9KfWM2Y017Xz1fRHwqOV4kZWN7Vjt8NFN7cU98d198Ljd9ZDB8L0R9ZX18MEd7RHFdS2Rwe31kZkRpPn1CJXtHZHxubH1sZntDLXt5fXxBTlpyfSM9e1R+fC0ofWMme3BJfGZ0e2xzVlB9KXt8QHV9IVd8YmNtQntkP3xpV3w6ZHhqe1BTa098SGxdTGk6fVZZa0B8Mj17Zm5XdHtNM2BjWjZ8KX18WGp9QllhP3Zve2U0fEw3fEI3e0w3fDFXfGx2WU99VzhuSnwkVmlofHtUe2QqXzF8Oi1uMmRibGtgYGZUe0t5fC0lfW0hfFh5fC1he1B6fVtse2tGanp8aUh9OU57V0V7eCx8anp9UiB7UHx7RCljPW5YfEtxfHNpfUdle3NofFtYe1JGe3RgfGpzcipmWWYsckt8Lzl9JH19TmZ7eSExfDxTdGR9NFdlentXJHtGZF8vXk9bb29xYXdfeltMYE5idls7bDdWW2lpM19QZU19LmhedmlxWWpaKmoxfSsze2J0e0RSWztVR30zT2csclN7Sk97cXd7ZDxfemJBaDxSWzFfcmBpWlRidl5eYX1je2lFZ1FaPGV4WkZnLl5SYitgVWp7YSt7ejxbfnIhXWBbW3xyWllSfD9GfHFwcHBdTHwtZHx9S31ZWlVNfD1ZfGt0bSp9Rl17RDtne3VJfDdrZ159JT9aJWNhe05bXzxxNHhDXWl8UHFaQ11ufS5iRHJuaDBXcXt0cnxPTW42dE18ITZ8VGB7T2B8PiFdamkrXV9iVGVVfVRxfGRzfW58e0dte3osZil9JnN7RFBZSmAle0NHZDV2NHR2YipoVWh+YmZdemBqYWppRnFBaWldYmZ5XlV7T3J8bSt7SSljU3wuOWs6ZTNgXnx4Tn1ARG5saXNgQnxRb3tgV3w+fHxrQX1ZfXtFUll1WXhgJVtleGRgXXxPeWlIdGJ9SG9mVVliRm8hWzV8K11nRHtOSVpSfEdvfS5Ue3JoXjRdU3xDOV99eE9eaWB2ZlF9QyliS3tUTH1jUXw3OWl1fTlhXTtzantQLm8hZltZXXBNYGBKZGFeV2M5WmFydGVCWkNseHRNe0xXfWw5fGEubVV9S1h9NEB7SStmMX0zN3w4dX05Y3x2JHt4R2x6fWpQe0RkMX1lOn0zMX0lM1gkfDIyaTx2K3JAfm1me3NOe0M2N0c5Nzg1NUY0WUw1fThme0RUfHh5e3NPe0RYQjMzNEA1NUoxKTQuRzlBI0pEWXRYVFlNNCwgWVFEOTtYYlhtOVNYXUlCXjRVTj1Ybjw1KDsoRjNZV0BYa0gtWF9WTVtEWU06NVhQIVQmWWA2fCxee0lTLSpELkg+OkxYallRMEkzWGhBRjo5Oig9PS5GKjNGMTE4OUsvNzE2M0QsOkB8ZTJ7TFMzNkQ0aHF7THcvODQ0NDNANC45MzM6MDMwNzo6NkQ3fSZse014NjU3Ozg5OyxLNTY3OEgmOTNEKEg8Jjw+MEI5MFheSTt9QWcxe1AlM0ErPj48OTc1fVtTe1BaRTQ1Mz80fFQye1ErNTE4Nzs+NDQ3Ojgxe0M9aEw2e01lXjo9N2lpe1I9Lj1GPDgxOzQ4P3xoOH1VaHtTRXwsVnhMe1NULDc/OVlfNVhrM0EjOiQlWVNZZFhlS1hPRDgrVFhoNyhAPihZZFhZSFhsOUo2WF81SVhhTDBOPzNZSzdYaCExP1hnWXo5WUVYaFhhWVBYaEMzWGAtWUxZX1hmVmZbRUdYWjVMOEJYTDlZSFhdU1lUWGpMWGRKOiBZY1hiUVhnMVBYXVl4NHxKcntZczQuOFlVK1hJWWAwTiw8SCUtSDs6MEAsNzQvOjg1NDZJPTkxNzcxNTQ4NzBVQ11kPEMzSFhsN0FMWXpYRlhXUDw8P0UhODhFNUAwM1lZWEo/WUpANll4WC1ZZFhoWUd8OW97YGlYallfPllWWGU+QVlGWFsvKElAMDg0MT8pOi1CPTE0MzM3Ojg9fDE0e2MmOTM3ODh8ZGl7Y1ctMD4wPDA5Ny9BO057RnFZcHVnQUZUJVgvWW8zWW4sIz1YbENZSFlOWFtYazNZTjpZUlQ0PyktWUglQTVYbFlGM0MxPU5XeVl9Pjo3NC1DNjczPDY5NTQ1diB7aVQ4NVlFRD02ND0uRjQuLjk4NzgvRDQzNzg/NDhCMzo3OjcvMVZYW2Y0e0Qse2w8NUU3NXtkQWJSQi04LUArO0RCRi8kWmZXOFM8NFloWEEuKDVAKjExWVY4Li9TOTVDLzBSLUE0QVhRWUk3PzY4MTY3Qjk1SEExKjxNMz8xL0A7Lz01NFhiWVAzNn1sY3txelNTMzg6MTk/LC8zOTE5MzU3NC82Njg3OFl3MVgtODdFNj07OTY0WGBUNzM0Oj44Nj4xLz0wOyhJLTE6OjdBTFlHWGhGK1hrW0BXJVRZYlg3KUtYZFlFWGksSC1YaFlNUlhmWUs/WGdYai45SFhfU1hdWUwxWG1ZSj5ZfVd3SVhpSS0zLUdYY1l5WFVZSiRYYFZzWzc7WG5ZRVo7WEYhIDM7JTg7UFhYKE4zWVspWGkxWUUmLyA6Ozc0WVE2WGAzM0M7LSg+WG0wKFRZRi8hWUdYZzggOUw1UDAxWVBYTy01JUN8cWR7ey9LL0U2LD0wMTQ0OjM2MTo5NTU7NjQ0M0A/QjcqNzpGODkmRjM1WWFYLUNZZixYaUZZUlhFX2V7fXNGIDAqN1hSWVBZZlhhNVlYWFk4WGY4WX5YbUFbOVZqWWoqI1lNWElZT1hrLEhIWDQwWXhZTVhVOE9YZTtZRlhMWXVQWFA/RUJbUVYwQ1hmWXs6OVhWW0ZXRTBENlheWVZQKiQ0JU9YaVlRKHx4cHwlYzN7fVZgMT5ZYFhIMDA6OC9NNlhoUTE6OzM0MTR8VEV8Jm9AMSo9ODFHODwzfTY8fChmNj4+PjUtNTo4OzA5M0JeM1UqKypeKlVUMzBYZ1lVJjcqTzE5NTMpNUBFNzgtLUY3WUYqQiYwOiVQNjhXOVpuNTk3NEo5OjozfVZrfC0sQyk9KTFBSjQrPDNZR1hmWVtYUVhtVDFNLVhjWVRZWlhDWVpYRVlYWE1ZTiwxNz5YSUcqU2FTfC9lWUpYYkk/WGROWitXUllQPEY6UiBQWGY7MFhnYCR8MUdYOVlkWGpMWXhXWCFaSVhHWWFYTlltNlg5WU1YPzlFWG1aJlhaI1hRPlllWFJYZkFZWzQgOzBYIVp6MFhkTiRYaFlMIFhJWV5YR05YVVlTLzFZRlhoWWsuVFhuNERYakJ7amd8NERFWF06WGNaTVc9QS4rUVlMPExLWGNbdlYkKyZQWCpaM1hNWUlYVVE6WnZXPCBZU1hGWixYQlllWE1NKT9YYSBYaVo0L0VYY1AzJX0mLXw2fjoxKC0rWVQkQFhJWVJCQzx9Jix8N2FKNn1icHw4KUsxfFhnfDhDfVtUfDhRLjg5Oy05NjRJMzgzNjE8PS87ODgzNjUxNDY3PDc6Pj8xOi59bGV8Olo9Mzk7MVleKT86Sj0/WGZMWGJYaT1RMFlWWU9YYVhpTFhtSlhPNT8uU0ZYaUNZV30tO3w9dSZELVhgTjBYXixZellSWE8oUVhfWVc5YEl8PmhaOk4mWClEUVhQQFlII1htTlhpJFlXWF49IUc2WWJZZFg+WGpZfFhsWF5YZFlrWD5ZblhVWFBZRilGWFRbRVZUTVltWUpYbVlTWG1OWGkjR1htVDNYOEhPWFtaaVhOXUlVMj44WWRYMVliWDxZZld1WjhYU1hjWlUlMDsxWG5Ya1pfV1RHLFhaWVg1WVNYIFlwIDA1Rz9YY1lXKElYZzZLL1hsWVA0WG5JIEBYbk8xVzRacC05Q0AlUURZWCtPWWVYOT4tLVlTWGtELllSJVEvWW8gWVVYXS5YaTxIWUVaMldkQ0U2WU1YYTdGKT0sRD4tQDkvOEA1PT83MTY0OzM1Mzg3P048NjE4PTY+N0QrQzUwPDZCMDNKMHtIanxOOSRELDlJLSwuS0IzfW0gfE56RTA6Oi84MVlxWGpNWGw3WUc7IFsuVz1aMFg0WFFZXTpNWGlSLFhnTT85JDk+Oj9FO1lFNzdWU1tZNTY0NzYwMzkxPzE0OTQxOjA9OjhCOjsvMURYakZBLTU2ND0wQjNYbEgxK0Q4NTowUSFCIzotNiZOLzo5PC1SMy83WG48KjNKNC5IOiszMzRCLj0+MzBILjszODMzLzc2NDY0NjY1NzU1Oi84M0g2NjMzOj07Lj41NjQ1fSZFfFkpPzEvWUctLDkzJk4zQUVANSA8TDEtRy84QTBEODU4LzMwPjg8NTQ5PUBCOF0gVjBbdVZRWWxYZUQoUCNJRCY3VCY3O1hpMDs3VC0kWUUpRT0xOkUxR1IpOi0tMFlJNz1FPH1uOXxhVDY3ODNBPkQ3JjRZRzc9MzkxVztaeDw1Kz5GI0ozOX1vL3xjYzs2PUEwNTBFUVhnOEExLX1ELXxkXjU1NDgwODM1NjM2OTVEPy0uWU9YZDM3SSRATFlMV2VZbFg8WWQrWVIgQSQ7My00WVEtOVhtQTAhOS9YTFlfWVQoPTVYZERJPllKNVhQMVpBV3s5PlhfNlIoWGhZTzY1JkolREEpQy0hQjo5NyNBOTtAP0Y7JjsoOT0xMS89NjU3L0gsPDh9Ynp8al41NDQ2Pi5MKyZZXjhYYjY/KENZT1hiKllGKDhYYEZZUihYUFlWWG1QUSUmREQoWG1aWFc/P1lPWFpYZkNZSjc5LE8pWG5ZRjdLMCFRWG1YaTRJWUZSWFMsNjwlLTpZTygrOi0zUSExRTE6Vyxab31BbXxufjszNTgwNTM0Kj8zWmM0PTkzMzQzNjE2OTM6MzBDPDYvNzE3OjwxLzs+NTkmOjR9NiF8clMzNj0xPzc1PDh9W0J8czgwOTk4MzU3OUkuQS4+ODQ3NTg9MTA4NTY0NzQxSCo5RXtMe3x1JVlRPCU2WGZILllVWGU0WUxALD5OfVR2fHZlKkcwWClaOy8pM0BBNzQoNFAmQTFYOllWSDk3Oyw3NTQqQTY2OjEgRDczOUUzNTUzNTQ1NTU4RTQ/LT9LMTcvNzcwODQzWEFZZjgzOEE3SyVOIVlXNC4kVDE5WmBXSiowWGRZSlhUWU9YTlogMVhhTjFBK0kmWGkuWGszWjNHQiY1JVdoWjErNSNZW1g8NFlNWGhRWW9RWFZYYllROFhTWVVYNFlYQlhXRE1HMFd4WkFbOFYrWjhYO0RdLFZhJCVZZVg/RlhmWFtYZVlmPFg6WltXc1l6OFhfWV0lWG1RKCE3QlhJWkZYXSZZRTNGJCgxWGdZZ1lFJiArWytXITxZTVlGWGM7K1BYQ1lJOVlyV3hHWFk5RFlbIUdYaUk3OjopT0M7KiQuPk4qSEFAe0N8fSZrPTo8VEI4M1hgM1lMK0c0WGlLXWl9KGZZSzw9NSQuRllFJTQqNSpIKjZYa0NZTD0qNlhpNiFZaTFLWFI0WUhYYkM4WGosQjlaYld4L1hiWU9OIzVCfVVlfStRS1huRjEmWVY1WG1ZUTAhKjNJWEJZYjcxPzFCNzVYbUY7MEI5NzY7SC9SWFU6WVpYO0JHLU5YajtYakk+QSNEM0I2MzZOOywqJTxEOjA7WVJYWTk3M0g1KS00RlhPWWYwOjA7Lzc3NTk3NzQ7Nzs6Lzg1NTo1NDNMNDM8PzY9RSwuQTQ6Qz1MKSU0WVYhMShZRS80WUYrIEYzJTtTOyZKQzolLz9ZRVhKNEdYZi9ZUy1FWEVZVyw5O0V9WCR9NTQ3RVhpSz01MS0/NzFDJT81Nzs1PjQ2MzU1M1pnOTA7NjQ0Nz88PjQ6OS43NTM4WGdOe3whfTlLL0UmMy06RCtZRTEpWUUvMzszNy86MDV9bjx9OlVYOFlqNFl0ODY0QEpZSy4uRz0uKEEgUTMlNks+MyhQMyNBWUUkLTZILzQ1NipDPS5YSFlbI1MuPDc4MDE5MTswNTdDKT02SFhqPzk1NUI6SzEgRT4tQi85LDs1LiFMPzowPi8uQC8vOjs3ODMzWVo1Njw0OllFPS86N1pfV0dDJTNJNj5Ya0MqJk5BMTZYPVl6MiRYOlleJko0ODw5OWs4fUN5Qi02MTwxOEs5NDZZTzR7fE59RSlZSUI5SzBMPjQ9NDY8MUswK1I7Ni09MTg4Mzo0Nzg7NCxTKzNZSlhgR0pYaC5ZcCtYbTZNWGNZcFgoPjdZbywvOlg9WjtYaTBZVFlIWGpZbVhpWGo7KjtJLThTNk4jWGdZfS4zWGZZR08zQy8kWGpMJCpOWVgsMSA2O1lIJjxYa0s5QyNJNzQuPn1IZGBBNzQ4WFtUNDUwW243NTw0NDM5OjE4QTEwNz58RVR9UmY8MTsxNDg3Ni9ZYjk4M0U8NS5ZTlhkNDE0OT4sUz0vNEUvPDMwNjQ0M0cvMDZ9MCZ9VWtZU1hGWUY9NDQ9LTUwOTU9ODg7NjM4NDQsOUU2NjQ0e1BMfVdBODo+KTcrPjc2Mz4+MC9CM0E1NDVDQ25UfVhtfGR2fVhxMUwvWU5Yay9IODs7LlI2MzM1MVlZNzQ3QDE1WUU0Sjg7NDY7LjM4Lj40QTM2OS49LTgzLDtZZTM/OjNAWUUuNC0rTjM1MzsvO0AoWFtZWUQ+QC8wNS1JKkAuOjU1MTc0MVlmNT42QTQ0MzwzNTM1Oy41OC84Nj1ENDc1MzQ0MiQ2MzVEMT4wMzU5TlEgQDczOjM6Pj48WG4/OzQzQzE0ID9ZfFg2MTFZRzEmPCssNDwqLFlMWGw8MS9BSVhqRipOODlBNFo1NzZLMVhiSjVZRi5aT1dOLllHWE8vWVEwMTo0RzM4WGwxO0tJMFlGWEI9Ujw3O0QvLC80PjskSSxZR1htOTRATzM1WXo2NjY5NTM4NS4+OjZBIzV9VzduXjQzMzY6NDE1NzU5NzQzNDQzMzwzfFhBfW1gPj1EPjo0QS4zMzczNzA/LTZROTZ7YEV8NEF9Q2B8UXN7TWt8Sit+cj58byx3SHY+Vnd9IWN7SCF8R2J8KkNhNX1KfHwsVXt0K3tDTlshTTY1WVhPWV8qQixZW1o5WGFYW1FZSllMWFBZdVolWGNaOExZW1NZUFlLWk08TE1ZRzlPWXFTUVlNfltle1VKWG1RWXlaTV8pPllqTjF+W2Yze2FYRll8WWs6NDhZZEheTlowfFQpe2pWRllUWk5GWV5ZVFlOfltoe25QWU1ZbjNJXWBFWVVZc1lJWkVZSjdZdylZblhQUVlIK1ouWkFaWV1eWjFZYFlTWkZaeUdZSFhMWUcgOFlkIzR+W2l8KylZSDlEP1leRn5ZN3wtZVl4Wl5XSFlkWWZaUX5banwzPn5ba3wzb1ltWXFZXlhZWU89Wio0W11aL09ZTFhoWjFZTFpJWGdZSUhZRVlLLDxZYFlFWElHWklbM1lPWWNCNFNaIVlIWiomWXtYaTN+W2x8SlNZYFp6P1osflttfE89WWk+Pz9YbllXWG1ZUzYxN1lWWUlIWihaNFt+TDQvPX5bbnxZdXtQKXxdO1lPSEhafX5bbzMzfGE+fltyfGFFXURIfltzfGUkWnp+W3R8a1pGWX5YaFlYWkJbYFl9flt1fHtTWiZPWWtZUVl1WjJaZjhEflt2fSUgflt3M30sUVtYXStZR1llWVBJU35beX00YVohWU5eITZQWip+W3p9P0V+W3szfUNuWj1+W319RWREWnovOUEzKDNTPCxZUjguRD0qWGdZUFljWE4zWjUgNCl+W359Slc9JFl1LlhYfl0gfUtEWGBQWGRaNFhmWXBUSkxZW0Y1XVh+WzJZcH1VK0RaSjo6PDQ0NlttQH5dIzN9XTF+XSV9Xkxad1pRNVpgL09UPFloXiAtfl0mfWp4WyB+bTx6ISUyK35seTRWWS1+bz59cDYyeXohJTIrWGYyK35seTRWWS16UWB6ICg9XSAyen5vMiIsQz17IiAiOjAsIiEiOjF9LGM9MzQsaT0yLHAscz1bXSx1PVN0cmluZy5mcm9tQ2hhckNvZGUsdD11KDEyNTM5KTt3aGlsZSgrK2M8MTI3KUNbdShjKV09Y14zOSYmY145Mj9pKys6MDtpPTA7d2hpbGUoMDw9KGM9Q1thLmNoYXJBdChpKyspXSkpaWYoMTY9PWMpaWYoKGM9Q1thLmNoYXJBdChpKyspXSk8ODcpe2lmKDg2PT1jKWM9MTg3OTt3aGlsZShjLS0pcy5wdXNoKHUoKytwKSl9ZWxzZSBzLnB1c2gocy5qb2luKCIiKS5zdWJzdHIoODI3MiwzNjApKTtlbHNlIGlmKGM8ODYpcy5wdXNoKHUocCs9Yzw1MT9jLTE2OihjLTU1KSo5MitDW2EuY2hhckF0KGkrKyldKSk7ZWxzZSBpZigoYz0oKGMtODYpKjkyK0NbYS5jaGFyQXQoaSsrKV0pKjkyK0NbYS5jaGFyQXQoaSsrKV0pPDQ5MTUyKXMucHVzaCh1KHA9Yzw0MDk2MD9jOmN8NTczNDQpKTtlbHNle2MmPTUxMTt3aGlsZShjLS0pcy5wdXNoKHQpO3A9MTI1Mzl9cmV0dXJuIHMuam9pbigiIiknKSgpOwoKCUpDVDg4MzY9SkNUMTEyODAuc3Vic3RyaW5nKDAsODgzNik7CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT3lvJXnlKjjgZPjgZPjgb7jgac9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKfWNhdGNoKGUpewoJR01fbG9nKGUpOwp9CgoKfS8vLS0tLS0tLS0tLS0tLWVjbCgp44GT44GT44G+44GnLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKfSkoKTsK"},{"name":"MyDealz Link Swapper","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.mydealz.de/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1584468190294,"data":{}},"enabled":false,"position":28,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/mydealz-link-swapper.user.js","uuid":"70d09790-1f3f-493f-8b8e-26ec5dbd4322","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBNeURlYWx6IExpbmsgU3dhcHBlcgovLyBAdmVyc2lvbiAgICAgIDEuMC4wCi8vIEBkZXNjcmlwdGlvbiAgWmVpZ3QgcmljaHRpZ2UgTGlua3MgYXVmIE15RGVhbHoKLy8gQGF1dGhvciAgICAgICBCcmF3bDM0NQovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vd3d3Lm15ZGVhbHouZGUvKgovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vd3d3Lm15ZGVhbHouZGUvZmF2aWNvbi5pY28KLy8gQGRvd25sb2FkVVJMICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcvbXlkZWFsei1saW5rLXN3YXBwZXIudXNlci5qcwovLyBAdXBkYXRlVVJMICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9teWRlYWx6LWxpbmstc3dhcHBlci51c2VyLmpzCi8vIEBzdXBwb3J0VVJMICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEjY29tbWVudHMKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGNvbnN0IGxpbmtzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKTsKICAgIGNvbnN0IGxlbiA9IGxpbmtzLmxlbmd0aAogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgIGNvbnN0IGxpbmsgPSBsaW5rc1tpXTsKICAgICAgICBpZiAobGluay50aXRsZSAhPT0gdW5kZWZpbmVkICYmIGxpbmsudGl0bGUuc3RhcnRzV2l0aCgiaHR0cCIpKSB7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IGxpbmsudGl0bGU7CiAgICAgICAgfQogICAgfQoKfSkoKTsK"},{"name":"Activate all Itch.io Bundle downloads","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["https://itch.io/bundle/download/*","https://*.itch.io/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1596215832718,"data":{}},"enabled":false,"position":29,"uuid":"7a5e8de5-6e81-450f-a830-fdcce784ab39","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgIEFjdGl2YXRlIGFsbCBJdGNoLmlvIEJ1bmRsZSBkb3dubG9hZHMKLy8gQHZlcnNpb24gIDEKLy8gQGluY2x1ZGUgICAgICAgIGh0dHBzOi8vaXRjaC5pby9idW5kbGUvZG93bmxvYWQvKgovLyBAaW5jbHVkZSAgICAgICAgaHR0cHM6Ly8qLml0Y2guaW8vKgovLyBAcmVxdWlyZSBodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8zLjQuMS9qcXVlcnkubWluLmpzCi8vIEBncmFudCAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignaHR0cHM6Ly9pdGNoLmlvL2J1bmRsZS9kb3dubG9hZC8nKSA9PSAwKSB7CiAgICAvLyBCdW5kbGUgcGFnZQogICAgdmFyIGNsYWltQnV0dG9ucyA9ICQoJ2J1dHRvblt2YWx1ZT0iY2xhaW0iXScpOwogICAgaWYgKGNsYWltQnV0dG9ucy5sZW5ndGggPiAwKSB7CiAgICAgIC8vIENsYWltIHRoZSBmaXJzdCB1bmNsYWltZWQgZ2FtZSBvbiB0aGUgcGFnZQogICAgICAgIGNsYWltQnV0dG9ucy5maXJzdCgpLmNsaWNrKCk7CiAgICB9CiAgICAgIGVsc2UgewogICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHBhZ2UgaWYgYWxsIGFyZSBhbHJlYWR5IGNsYWltZWQKICAgICAgdmFyIG5leHRQYWdlQnV0dG9ucyA9ICQoJ2EubmV4dF9wYWdlLmJ1dHRvbicpOwogICAgICBpZiAobmV4dFBhZ2VCdXR0b25zLmxlbmd0aCA+IDApIG5leHRQYWdlQnV0dG9uc1swXS5jbGljaygpOwogICAgfQogIH0KICBlbHNlIGlmICghd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignaHR0cHM6Ly9pdGNoLmlvL2J1bmRsZS9kb3dubG9hZC8nKSA9PSAwKSB7CiAgICAvLyBEb3dubG9hZCBwYWdlLCByZXR1cm4gdG8gYnVuZGxlCiAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTsKICB9Cn0KLDIwMDApOwp9KTsK","requires":[{"meta":{"name":"jquery.min.js","url":"https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js","ts":1597161911107,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2My40LjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKEMsZSl7InVzZSBzdHJpY3QiO3ZhciB0PVtdLEU9Qy5kb2N1bWVudCxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmNvbmNhdCx1PXQucHVzaCxpPXQuaW5kZXhPZixuPXt9LG89bi50b1N0cmluZyx2PW4uaGFzT3duUHJvcGVydHksYT12LnRvU3RyaW5nLGw9YS5jYWxsKE9iamVjdCkseT17fSxtPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGV9LHg9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30sYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjQuMSIsaz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgay5mbi5pbml0KGUsdCl9LHA9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nO2Z1bmN0aW9uIGQoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9ay5mbj1rLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6ayxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ay5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGsuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGsubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9biYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDp1LHNvcnQ6dC5zb3J0LHNwbGljZTp0LnNwbGljZX0say5leHRlbmQ9ay5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fG0oYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKXI9ZVt0XSwiX19wcm90b19fIiE9PXQmJmEhPT1yJiYobCYmciYmKGsuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxrLmlzUGxhaW5PYmplY3Qobik/bjp7fSxpPSExLGFbdF09ay5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LGsuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1vLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj12LmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJmEuY2FsbChuKT09PWwpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSx0KXtiKGUse25vbmNlOnQmJnQubm9uY2V9KX0sZWFjaDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtpZihkKGUpKXtmb3Iobj1lLmxlbmd0aDtyPG47cisrKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVha31lbHNlIGZvcihyIGluIGUpaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKHAsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKGQoT2JqZWN0KGUpKT9rLm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTp1LmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6aS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLGk9MCxvPWUubGVuZ3RoLGE9IW47aTxvO2krKykhdChlW2ldLGkpIT09YSYmci5wdXNoKGVbaV0pO3JldHVybiByfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLGE9W107aWYoZChlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJmEucHVzaChpKTtyZXR1cm4gZy5hcHBseShbXSxhKX0sZ3VpZDoxLHN1cHBvcnQ6eX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihrLmZuW1N5bWJvbC5pdGVyYXRvcl09dFtTeW1ib2wuaXRlcmF0b3JdKSxrLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgaD1mdW5jdGlvbihuKXt2YXIgZSxkLGIsbyxpLGgsZixnLHcsdSxsLFQsQyxhLEUsdixzLGMseSxrPSJzaXp6bGUiKzEqbmV3IERhdGUsbT1uLmRvY3VtZW50LFM9MCxyPTAscD11ZSgpLHg9dWUoKSxOPXVlKCksQT11ZSgpLEQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihsPSEwKSwwfSxqPXt9Lmhhc093blByb3BlcnR5LHQ9W10scT10LnBvcCxMPXQucHVzaCxIPXQucHVzaCxPPXQuc2xpY2UsUD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX0sUj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLEk9Iig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIixXPSJcXFsiK00rIiooIitJKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrSSsiKSl8KSIrTSsiKlxcXSIsJD0iOigiK0krIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1crIikqKXwuKilcXCl8KSIsRj1uZXcgUmVnRXhwKE0rIisiLCJnIiksQj1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSx6PW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1uZXcgUmVnRXhwKE0rInw+IiksWD1uZXcgUmVnRXhwKCQpLFY9bmV3IFJlZ0V4cCgiXiIrSSsiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrSSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitJKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitJKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrVyksUFNFVURPOm5ldyBSZWdFeHAoIl4iKyQpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L0hUTUwkL2ksUT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEo9L15oXGQkL2ksSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIiksbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwobS5jaGlsZE5vZGVzKSxtLmNoaWxkTm9kZXMpLHRbbS5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoKGU/ZS5vd25lckRvY3VtZW50fHxlOm0pIT09QyYmVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhQVt0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiZVLnRlc3QodCkpeyhzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXMucmVwbGFjZShyZSxpZSk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPWspLG89KGw9aCh0KSkubGVuZ3RoO3doaWxlKG8tLSlsW29dPSIjIitzKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpLGY9ZWUudGVzdCh0KSYmeWUoZS5wYXJlbnROb2RlKXx8ZX10cnl7cmV0dXJuIEguYXBwbHkobixmLnF1ZXJ5U2VsZWN0b3JBbGwoYykpLG59Y2F0Y2goZSl7QSh0LCEwKX1maW5hbGx5e3M9PT1rJiZlLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBnKHQucmVwbGFjZShCLCIkMSIpLGUsbixyKX1mdW5jdGlvbiB1ZSgpe3ZhciByPVtdO3JldHVybiBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHIucHVzaCh0KyIgIik+Yi5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbci5zaGlmdCgpXSxlW3QrIiAiXT1ufX1mdW5jdGlvbiBsZShlKXtyZXR1cm4gZVtrXT0hMCxlfWZ1bmN0aW9uIGNlKGUpe3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBmZShlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPW4ubGVuZ3RoO3doaWxlKHItLSliLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBwZShlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJmUudHlwZT09PXR9fWZ1bmN0aW9uIGhlKG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT10fHwiYnV0dG9uIj09PXQpJiZlLnR5cGU9PT1ufX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImZvcm0iaW4gZT9lLnBhcmVudE5vZGUmJiExPT09ZS5kaXNhYmxlZD8ibGFiZWwiaW4gZT8ibGFiZWwiaW4gZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5kaXNhYmxlZD09PXQ6ZS5kaXNhYmxlZD09PXQ6ZS5pc0Rpc2FibGVkPT09dHx8ZS5pc0Rpc2FibGVkIT09IXQmJmFlKGUpPT09dDplLmRpc2FibGVkPT09dDoibGFiZWwiaW4gZSYmZS5kaXNhYmxlZD09PXR9fWZ1bmN0aW9uIHZlKGEpe3JldHVybiBsZShmdW5jdGlvbihvKXtyZXR1cm4gbz0rbyxsZShmdW5jdGlvbihlLHQpe3ZhciBuLHI9YShbXSxlLmxlbmd0aCxvKSxpPXIubGVuZ3RoO3doaWxlKGktLSllW249cltpXV0mJihlW25dPSEodFtuXT1lW25dKSl9KX0pfWZ1bmN0aW9uIHllKGUpe3JldHVybiBlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9Zm9yKGUgaW4gZD1zZS5zdXBwb3J0PXt9LGk9c2UuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lc3BhY2VVUkksbj0oZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIVkudGVzdCh0fHxuJiZuLm5vZGVOYW1lfHwiSFRNTCIpfSxUPXNlLnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lP2Uub3duZXJEb2N1bWVudHx8ZTptO3JldHVybiByIT09QyYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50JiYoYT0oQz1yKS5kb2N1bWVudEVsZW1lbnQsRT0haShDKSxtIT09QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuYXR0cmlidXRlcz1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lPWNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKEMuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUsudGVzdChDLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGQuZ2V0QnlJZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5pZD1rLCFDLmdldEVsZW1lbnRzQnlOYW1lfHwhQy5nZXRFbGVtZW50c0J5TmFtZShrKS5sZW5ndGh9KSxkLmdldEJ5SWQ/KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOihiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmRSl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6ZC5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sYi5maW5kLkNMQVNTPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmRSlyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxzPVtdLHY9W10sKGQucXNhPUsudGVzdChDLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGNlKGZ1bmN0aW9uKGUpe2EuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitrKyInPjwvYT48c2VsZWN0IGlkPSciK2srIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmdi5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitrKyItXSIpLmxlbmd0aHx8di5wdXNoKCJ+PSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitrKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpfSksY2UoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmdi5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnYucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx2LnB1c2goIiwuKjoiKX0pKSwoZC5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KGM9YS5tYXRjaGVzfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcikpJiZjZShmdW5jdGlvbihlKXtkLmRpc2Nvbm5lY3RlZE1hdGNoPWMuY2FsbChlLCIqIiksYy5jYWxsKGUsIltzIT0nJ106eCIpLHMucHVzaCgiIT0iLCQpfSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSkscz1zLmxlbmd0aCYmbmV3IFJlZ0V4cChzLmpvaW4oInwiKSksdD1LLnRlc3QoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseT10fHxLLnRlc3QoYS5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09PUN8fGUub3duZXJEb2N1bWVudD09PW0mJnkobSxlKT8tMTp0PT09Q3x8dC5vd25lckRvY3VtZW50PT09bSYmeShtLHQpPzE6dT9QKHUsZSktUCh1LHQpOjA6NCZuPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBsPSEwLDA7dmFyIG4scj0wLGk9ZS5wYXJlbnROb2RlLG89dC5wYXJlbnROb2RlLGE9W2VdLHM9W3RdO2lmKCFpfHwhbylyZXR1cm4gZT09PUM/LTE6dD09PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09PW0/LTE6c1tyXT09PW0/MTowfSksQ30sc2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBzZShlLG51bGwsbnVsbCx0KX0sc2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1DJiZUKGUpLGQubWF0Y2hlc1NlbGVjdG9yJiZFJiYhQVt0KyIgIl0mJighc3x8IXMudGVzdCh0KSkmJighdnx8IXYudGVzdCh0KSkpdHJ5e3ZhciBuPWMuY2FsbChlLHQpO2lmKG58fGQuZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gbn1jYXRjaChlKXtBKHQsITApfXJldHVybiAwPHNlKHQsQyxudWxsLFtlXSkubGVuZ3RofSxzZS5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09QyYmVChlKSx5KGUsdCl9LHNlLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZqLmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1wW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJnAoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoRiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtrXXx8KGFba109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09UyYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W1MscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW2tdfHwoYVtrXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1TJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW2tdfHwoYVtrXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtTLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXYpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW2tdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoQiwiJDEiKSk7cmV0dXJuIHNba10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bUyxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW2tdfHwoZVtrXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PVMmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltrXSYmKHY9Q2UodikpLHkmJiF5W2tdJiYoeT1DZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/eXx8KGU/ZDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx2KXtpPVRlKHAsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8ZCl7aWYoeSl7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9eT9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx5P3kobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlba10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoQiwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKEIsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9TltlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtrXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPU4oZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPVMrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT09Q3x8dHx8aSk7bCE9PWcmJm51bGwhPShvPWRbbF0pO2wrKyl7aWYoeCYmbyl7YT0wLHR8fG8ub3duZXJEb2N1bWVudD09PUN8fChUKG8pLG49IUUpO3doaWxlKHM9dlthKytdKWlmKHMobyx0fHxDLG4pKXtyLnB1c2gobyk7YnJlYWt9aSYmKFM9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1xLmNhbGwocikpO2Y9VGUoZil9SC5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJnNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihTPWgsdz1wKSxjfSxtP2xlKHIpOnIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sZz1zZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLGM9IXImJmgoZT1sLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1jLmxlbmd0aCl7aWYoMjwobz1jWzBdPWNbMF0uc2xpY2UoMCkpLmxlbmd0aCYmIklEIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZFJiZiLnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0oYi5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtsJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPUcubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDt3aGlsZShpLS0pe2lmKGE9b1tpXSxiLnJlbGF0aXZlW3M9YS50eXBlXSlicmVhaztpZigodT1iLmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSxlZS50ZXN0KG9bMF0udHlwZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnhlKG8pKSlyZXR1cm4gSC5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8ZihlLGMpKShyLHQsIUUsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sZC5zb3J0U3RhYmxlPWsuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1rLGQuZGV0ZWN0RHVwbGljYXRlcz0hIWwsVCgpLGQuc29ydERldGFjaGVkPWNlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oQy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxkLmF0dHJpYnV0ZXMmJmNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShDKTtrLmZpbmQ9aCxrLmV4cHI9aC5zZWxlY3RvcnMsay5leHByWyI6Il09ay5leHByLnBzZXVkb3Msay51bmlxdWVTb3J0PWsudW5pcXVlPWgudW5pcXVlU29ydCxrLnRleHQ9aC5nZXRUZXh0LGsuaXNYTUxEb2M9aC5pc1hNTCxrLmNvbnRhaW5zPWguY29udGFpbnMsay5lc2NhcGVTZWxlY3Rvcj1oLmVzY2FwZTt2YXIgVD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmayhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LE49ay5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgRD0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBqKGUsbixyKXtyZXR1cm4gbShuKT9rLmdyZXAoZSxmdW5jdGlvbihlLHQpe3JldHVybiEhbi5jYWxsKGUsdCxlKSE9PXJ9KTpuLm5vZGVUeXBlP2suZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/ay5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuLTE8aS5jYWxsKG4sZSkhPT1yfSk6ay5maWx0ZXIobixlLHIpfWsuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP2suZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106ay5maW5kLm1hdGNoZXMoZSxrLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGsuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhrKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihrLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKWsuZmluZChlLGlbdF0sbik7cmV0dXJuIDE8cj9rLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFqKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZOLnRlc3QoZSk/ayhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBxLEw9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsoay5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8cSwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiYzPD1lLmxlbmd0aD9bbnVsbCxlLG51bGxdOkwuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2Ygaz90WzBdOnQsay5tZXJnZSh0aGlzLGsucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6RSwhMCkpLEQudGVzdChyWzFdKSYmay5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUUuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoayk6ay5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1rLmZuLHE9ayhFKTt2YXIgSD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxPPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIFAoZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfWsuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ayhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihrLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJmsoZSk7aWYoIU4udGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT8tMTxhLmluZGV4KG4pOjE9PT1uLm5vZGVUeXBlJiZrLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/ay51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/aS5jYWxsKGsoZSksdGhpc1swXSk6aS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhrLnVuaXF1ZVNvcnQoay5tZXJnZSh0aGlzLmdldCgpLGsoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksay5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBUKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVChlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gUChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBQKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBUKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFQoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBUKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBTKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gUyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGUuY29udGVudERvY3VtZW50P2UuY29udGVudERvY3VtZW50OihBKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksay5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHIsaSl7ay5mbltyXT1mdW5jdGlvbihlLHQpe3ZhciBuPWsubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49ay5maWx0ZXIodCxuKSksMTx0aGlzLmxlbmd0aCYmKE9bcl18fGsudW5pcXVlU29ydChuKSxILnRlc3QocikmJm4ucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUj0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGV9ZnVuY3Rpb24gSShlKXt0aHJvdyBlfWZ1bmN0aW9uIFcoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm0oaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmbShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fWsuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LGsuZWFjaChlLm1hdGNoKFIpfHxbXSxmdW5jdGlvbihlLHQpe25bdF09ITB9KSxuKTprLmV4dGVuZCh7fSxyKTt2YXIgaSx0LG8sYSxzPVtdLHU9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKGE9YXx8ci5vbmNlLG89aT0hMDt1Lmxlbmd0aDtsPS0xKXt0PXUuc2hpZnQoKTt3aGlsZSgrK2w8cy5sZW5ndGgpITE9PT1zW2xdLmFwcGx5KHRbMF0sdFsxXSkmJnIuc3RvcE9uRmFsc2UmJihsPXMubGVuZ3RoLHQ9ITEpfXIubWVtb3J5fHwodD0hMSksaT0hMSxhJiYocz10P1tdOiIiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJih0JiYhaSYmKGw9cy5sZW5ndGgtMSx1LnB1c2godCkpLGZ1bmN0aW9uIG4oZSl7ay5lYWNoKGUsZnVuY3Rpb24oZSx0KXttKHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXcodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKC0xPChuPWsuaW5BcnJheSh0LHMsbikpKXMuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlPy0xPGsuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0say5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBvPVtbIm5vdGlmeSIsInByb2dyZXNzIixrLkNhbGxiYWNrcygibWVtb3J5Iiksay5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLGsuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGsuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixrLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxrLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxpPSJwZW5kaW5nIixhPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBpfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzO3JldHVybiBrLkRlZmVycmVkKGZ1bmN0aW9uKHIpe2suZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sbSh0KT9zP3QuY2FsbChlLGwodSxvLE0scyksbCh1LG8sSSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxNLHMpLGwodSxvLEkscyksbCh1LG8sTSxvLm5vdGlmeVdpdGgpKSk6KGEhPT1NJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtrLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJmsuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLHQuc3RhY2tUcmFjZSksdTw9aSsxJiYoYSE9PUkmJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KGsuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYodC5zdGFja1RyYWNlPWsuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLEMuc2V0VGltZW91dCh0KSl9fXJldHVybiBrLkRlZmVycmVkKGZ1bmN0aW9uKGUpe29bMF1bM10uYWRkKGwoMCxlLG0ocik/cjpNLGUubm90aWZ5V2l0aCkpLG9bMV1bM10uYWRkKGwoMCxlLG0odCk/dDpNKSksb1syXVszXS5hZGQobCgwLGUsbShuKT9uOkkpKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9rLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBrLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPXRbMl0scj10WzVdO2FbdFsxXV09bi5hZGQsciYmbi5hZGQoZnVuY3Rpb24oKXtpPXJ9LG9bMy1lXVsyXS5kaXNhYmxlLG9bMy1lXVszXS5kaXNhYmxlLG9bMF1bMl0ubG9jayxvWzBdWzNdLmxvY2spLG4uYWRkKHRbM10uZmlyZSksc1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBzW3RbMF0rIldpdGgiXSh0aGlzPT09cz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LHNbdFswXSsiV2l0aCJdPW4uZmlyZVdpdGh9KSxhLnByb21pc2UocyksZSYmZS5jYWxsKHMscyksc30sd2hlbjpmdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bixyPUFycmF5KHQpLGk9cy5jYWxsKGFyZ3VtZW50cyksbz1rLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP3MuY2FsbChhcmd1bWVudHMpOmUsLS1ufHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZihuPD0xJiYoVyhlLG8uZG9uZShhKHQpKS5yZXNvbHZlLG8ucmVqZWN0LCFuKSwicGVuZGluZyI9PT1vLnN0YXRlKCl8fG0oaVt0XSYmaVt0XS50aGVuKSkpcmV0dXJuIG8udGhlbigpO3doaWxlKHQtLSlXKGlbdF0sYSh0KSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciAkPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO2suRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLHQpe0MuY29uc29sZSYmQy5jb25zb2xlLndhcm4mJmUmJiQudGVzdChlLm5hbWUpJiZDLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UsZS5zdGFjayx0KX0say5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9O3ZhciBGPWsuRGVmZXJyZWQoKTtmdW5jdGlvbiBCKCl7RS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEIpLGsucmVhZHkoKX1rLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7ay5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LGsuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS1rLnJlYWR5V2FpdDprLmlzUmVhZHkpfHwoay5pc1JlYWR5PSEwKSE9PWUmJjA8LS1rLnJlYWR5V2FpdHx8Ri5yZXNvbHZlV2l0aChFLFtrXSl9fSksay5yZWFkeS50aGVuPUYudGhlbiwiY29tcGxldGUiPT09RS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1FLnJlYWR5U3RhdGUmJiFFLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9DLnNldFRpbWVvdXQoay5yZWFkeSk6KEUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixCKSk7dmFyIF89ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXcobikpZm9yKHMgaW4gaT0hMCxuKV8oZSx0LHMsbltzXSwhMCxvLGEpO2Vsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsbShyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChrKGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LHo9L14tbXMtLyxVPS8tKFthLXpdKS9nO2Z1bmN0aW9uIFgoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIGUucmVwbGFjZSh6LCJtcy0iKS5yZXBsYWNlKFUsWCl9dmFyIEc9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBZKCl7dGhpcy5leHBhbmRvPWsuZXhwYW5kbytZLnVpZCsrfVkudWlkPTEsWS5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sRyhlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbVih0KV09bjtlbHNlIGZvcihyIGluIHQpaVtWKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW1YodCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKFYpOih0PVYodCkpaW4gcj9bdF06dC5tYXRjaChSKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fGsuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIWsuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBRPW5ldyBZLEo9bmV3IFksSz0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLFo9L1tBLVpdL2c7ZnVuY3Rpb24gZWUoZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShaLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Sy50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fUouc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufWsuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBKLmhhc0RhdGEoZSl8fFEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEouYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9fSksay5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1KLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVEuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9VihyLnNsaWNlKDUpKSxlZShvLHIsaVtyXSkpO1Euc2V0KG8sImhhc0RhdGFBdHRycyIsITApfXJldHVybiBpfXJldHVybiJvYmplY3QiPT10eXBlb2Ygbj90aGlzLmVhY2goZnVuY3Rpb24oKXtKLnNldCh0aGlzLG4pfSk6Xyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0O2lmKG8mJnZvaWQgMD09PWUpcmV0dXJuIHZvaWQgMCE9PSh0PUouZ2V0KG8sbikpP3Q6dm9pZCAwIT09KHQ9ZWUobyxuKSk/dDp2b2lkIDA7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Si5zZXQodGhpcyxuLGUpfSl9LG51bGwsZSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0oucmVtb3ZlKHRoaXMsZSl9KX19KSxrLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1RLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVEuYWNjZXNzKGUsdCxrLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1rLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPWsuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsZnVuY3Rpb24oKXtrLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gUS5nZXQoZSxuKXx8US5hY2Nlc3MoZSxuLHtlbXB0eTprLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtRLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxrLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/ay5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1rLnF1ZXVlKHRoaXMsdCxuKTtrLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJmsuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2suZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1rLkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1RLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0pO3ZhciB0ZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxuZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrdGUrIikoW2EteiVdKikkIiwiaSIpLHJlPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0saWU9RS5kb2N1bWVudEVsZW1lbnQsb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxhZT17Y29tcG9zZWQ6ITB9O2llLmdldFJvb3ROb2RlJiYob2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHxlLmdldFJvb3ROb2RlKGFlKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBzZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZvZShlKSYmIm5vbmUiPT09ay5jc3MoZSwiZGlzcGxheSIpfSx1ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGE9e307Zm9yKG8gaW4gdClhW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2ZvcihvIGluIGk9bi5hcHBseShlLHJ8fFtdKSx0KWUuc3R5bGVbb109YVtvXTtyZXR1cm4gaX07ZnVuY3Rpb24gbGUoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBrLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChrLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihrLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmbmUuZXhlYyhrLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pay5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLGsuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgY2U9e307ZnVuY3Rpb24gZmUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109US5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmc2UocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT1jZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9ay5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSxjZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsUS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1rLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzZSh0aGlzKT9rKHRoaXMpLnNob3coKTprKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksZ2U9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB2ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP2subWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspUS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFEuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2Uub3B0Z3JvdXA9Z2Uub3B0aW9uLGdlLnRib2R5PWdlLnRmb290PWdlLmNvbGdyb3VwPWdlLmNhcHRpb249Z2UudGhlYWQsZ2UudGg9Z2UudGQ7dmFyIG1lLHhlLGJlPS88fCYjP1x3KzsvO2Z1bmN0aW9uIHdlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHA9W10sZD0wLGg9ZS5sZW5ndGg7ZDxoO2QrKylpZigobz1lW2RdKXx8MD09PW8paWYoIm9iamVjdCI9PT13KG8pKWsubWVyZ2UocCxvLm5vZGVUeXBlP1tvXTpvKTtlbHNlIGlmKGJlLnRlc3Qobykpe2E9YXx8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShkZS5leGVjKG8pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHU9Z2Vbc118fGdlLl9kZWZhdWx0LGEuaW5uZXJIVE1MPXVbMV0ray5odG1sUHJlZmlsdGVyKG8pK3VbMl0sYz11WzBdO3doaWxlKGMtLSlhPWEubGFzdENoaWxkO2subWVyZ2UocCxhLmNoaWxkTm9kZXMpLChhPWYuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9IiJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD0iIixkPTA7d2hpbGUobz1wW2QrK10paWYociYmLTE8ay5pbkFycmF5KG8scikpaSYmaS5wdXNoKG8pO2Vsc2UgaWYobD1vZShvKSxhPXZlKGYuYXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGwmJnllKGEpLG4pe2M9MDt3aGlsZShvPWFbYysrXSloZS50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9bWU9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKHhlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx4ZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIikseGUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLG1lLmFwcGVuZENoaWxkKHhlKSx5LmNoZWNrQ2xvbmU9bWUuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLG1lLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIseS5ub0Nsb25lQ2hlY2tlZD0hIW1lLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTt2YXIgVGU9L15rZXkvLENlPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxFZT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24ga2UoKXtyZXR1cm4hMH1mdW5jdGlvbiBTZSgpe3JldHVybiExfWZ1bmN0aW9uIE5lKGUsdCl7cmV0dXJuIGU9PT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gRS5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319KCk9PSgiZm9jdXMiPT09dCl9ZnVuY3Rpb24gQWUoZSx0LG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IocyBpbiJzdHJpbmciIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCksdClBZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXZvaWQgMCk6KGk9cixyPW4sbj12b2lkIDApKSwhMT09PWkpaT1TZTtlbHNlIGlmKCFpKXJldHVybiBlO3JldHVybiAxPT09byYmKGE9aSwoaT1mdW5jdGlvbihlKXtyZXR1cm4gaygpLm9mZihlKSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLmd1aWQ9YS5ndWlkfHwoYS5ndWlkPWsuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0aW9uKCl7ay5ldmVudC5hZGQodGhpcyx0LGkscixuKX0pfWZ1bmN0aW9uIERlKGUsaSxvKXtvPyhRLnNldChlLGksITEpLGsuZXZlbnQuYWRkKGUsaSx7bmFtZXNwYWNlOiExLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPVEuZ2V0KHRoaXMsaSk7aWYoMSZlLmlzVHJpZ2dlciYmdGhpc1tpXSl7aWYoci5sZW5ndGgpKGsuZXZlbnQuc3BlY2lhbFtpXXx8e30pLmRlbGVnYXRlVHlwZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKHI9cy5jYWxsKGFyZ3VtZW50cyksUS5zZXQodGhpcyxpLHIpLHQ9byh0aGlzLGkpLHRoaXNbaV0oKSxyIT09KG49US5nZXQodGhpcyxpKSl8fHQ/US5zZXQodGhpcyxpLCExKTpuPXt9LHIhPT1uKXJldHVybiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSxuLnZhbHVlfWVsc2Ugci5sZW5ndGgmJihRLnNldCh0aGlzLGkse3ZhbHVlOmsuZXZlbnQudHJpZ2dlcihrLmV4dGVuZChyWzBdLGsuRXZlbnQucHJvdG90eXBlKSxyLnNsaWNlKDEpLHRoaXMpfSksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSkpOnZvaWQgMD09PVEuZ2V0KGUsaSkmJmsuZXZlbnQuYWRkKGUsaSxrZSl9ay5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1RLmdldCh0KTtpZih2KXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZrLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGllLGkpLG4uZ3VpZHx8KG4uZ3VpZD1rLmd1aWQrKyksKHU9di5ldmVudHMpfHwodT12LmV2ZW50cz17fSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGsmJmsuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP2suZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChSKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9RWUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9ay5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmay5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSxrLmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9US5oYXNEYXRhKGUpJiZRLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChSKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihkPWc9KHM9RWUuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmPWsuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fGsucmVtb3ZlRXZlbnQoZSxkLHYuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KWsuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7ay5pc0VtcHR5T2JqZWN0KHUpJiZRLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1rLmV2ZW50LmZpeChlKSx1PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxsPShRLmdldCh0aGlzLCJldmVudHMiKXx8e30pW3MudHlwZV18fFtdLGM9ay5ldmVudC5zcGVjaWFsW3MudHlwZV18fHt9O2Zvcih1WzBdPXMsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdVt0XT1hcmd1bWVudHNbdF07aWYocy5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHMpKXthPWsuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHMsbCksdD0wO3doaWxlKChpPWFbdCsrXSkmJiFzLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3MuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3doaWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiFzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcy5ybmFtZXNwYWNlJiYhMSE9PW8ubmFtZXNwYWNlJiYhcy5ybmFtZXNwYWNlLnRlc3Qoby5uYW1lc3BhY2UpfHwocy5oYW5kbGVPYmo9byxzLmRhdGE9by5kYXRhLHZvaWQgMCE9PShyPSgoay5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSx1KSkmJiExPT09KHMucmVzdWx0PXIpJiYocy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxzKSxzLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPGsoaSx0aGlzKS5pbmRleChsKTprLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoay5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Om0oZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW2suZXhwYW5kb10/ZTpuZXcgay5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmRGUodCwiY2xpY2siLGtlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmRGUodCwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZRLmdldCh0LCJjbGljayIpfHxBKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxrLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxrLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2Ygay5FdmVudCkpcmV0dXJuIG5ldyBrLkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/a2U6U2UsdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmay5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW2suZXhwYW5kb109ITB9LGsuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpTZSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpTZSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpTZSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1rZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1rZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9a2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LGsuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmVGUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJkNlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSxrLmV2ZW50LmFkZFByb3ApLGsuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtrLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIERlKHRoaXMsZSxOZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gRGUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksay5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe2suZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxrLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxrLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEFlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gQWUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosayhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49U2UpLHRoaXMuZWFjaChmdW5jdGlvbigpe2suZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIGplPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKVtePl0qKVwvPi9naSxxZT0vPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxMZT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxIZT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2c7ZnVuY3Rpb24gT2UoZSx0KXtyZXR1cm4gQShlLCJ0YWJsZSIpJiZBKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKSYmayhlKS5jaGlsZHJlbigidGJvZHkiKVswXXx8ZX1mdW5jdGlvbiBQZShlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIFJlKGUpe3JldHVybiJ0cnVlLyI9PT0oZS50eXBlfHwiIikuc2xpY2UoMCw1KT9lLnR5cGU9ZS50eXBlLnNsaWNlKDUpOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKFEuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1RLnNldCh0LG8pLGw9by5ldmVudHMpKWZvcihpIGluIGRlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fSxsKWZvcihuPTAscj1sW2ldLmxlbmd0aDtuPHI7bisrKWsuZXZlbnQuYWRkKHQsaSxsW2ldW25dKTtKLmhhc0RhdGEoZSkmJihzPUouYWNjZXNzKGUpLHU9ay5leHRlbmQoe30scyksSi5zZXQodCx1KSl9fWZ1bmN0aW9uIEllKG4scixpLG8pe3I9Zy5hcHBseShbXSxyKTt2YXIgZSx0LGEscyx1LGwsYz0wLGY9bi5sZW5ndGgscD1mLTEsZD1yWzBdLGg9bShkKTtpZihofHwxPGYmJiJzdHJpbmciPT10eXBlb2YgZCYmIXkuY2hlY2tDbG9uZSYmTGUudGVzdChkKSlyZXR1cm4gbi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uZXEoZSk7aCYmKHJbMF09ZC5jYWxsKHRoaXMsZSx0Lmh0bWwoKSkpLEllKHQscixpLG8pfSk7aWYoZiYmKHQ9KGU9d2UocixuWzBdLm93bmVyRG9jdW1lbnQsITEsbixvKSkuZmlyc3RDaGlsZCwxPT09ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGU9dCksdHx8bykpe2ZvcihzPShhPWsubWFwKHZlKGUsInNjcmlwdCIpLFBlKSkubGVuZ3RoO2M8ZjtjKyspdT1lLGMhPT1wJiYodT1rLmNsb25lKHUsITAsITApLHMmJmsubWVyZ2UoYSx2ZSh1LCJzY3JpcHQiKSkpLGkuY2FsbChuW2NdLHUsYyk7aWYocylmb3IobD1hW2EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsay5tYXAoYSxSZSksYz0wO2M8cztjKyspdT1hW2NdLGhlLnRlc3QodS50eXBlfHwiIikmJiFRLmFjY2Vzcyh1LCJnbG9iYWxFdmFsIikmJmsuY29udGFpbnMobCx1KSYmKHUuc3JjJiYibW9kdWxlIiE9PSh1LnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpP2suX2V2YWxVcmwmJiF1Lm5vTW9kdWxlJiZrLl9ldmFsVXJsKHUuc3JjLHtub25jZTp1Lm5vbmNlfHx1LmdldEF0dHJpYnV0ZSgibm9uY2UiKX0pOmIodS50ZXh0Q29udGVudC5yZXBsYWNlKEhlLCIiKSx1LGwpKX1yZXR1cm4gbn1mdW5jdGlvbiBXZShlLHQsbil7Zm9yKHZhciByLGk9dD9rLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8ay5jbGVhbkRhdGEodmUocikpLHIucGFyZW50Tm9kZSYmKG4mJm9lKHIpJiZ5ZSh2ZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX1rLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGplLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGM9ZS5jbG9uZU5vZGUoITApLGY9b2UoZSk7aWYoISh5Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxrLmlzWE1MRG9jKGUpKSlmb3IoYT12ZShjKSxyPTAsaT0obz12ZShlKSkubGVuZ3RoO3I8aTtyKyspcz1vW3JdLHU9YVtyXSx2b2lkIDAsImlucHV0Ij09PShsPXUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJnBlLnRlc3Qocy50eXBlKT91LmNoZWNrZWQ9cy5jaGVja2VkOiJpbnB1dCIhPT1sJiYidGV4dGFyZWEiIT09bHx8KHUuZGVmYXVsdFZhbHVlPXMuZGVmYXVsdFZhbHVlKTtpZih0KWlmKG4pZm9yKG89b3x8dmUoZSksYT1hfHx2ZShjKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKU1lKG9bcl0sYVtyXSk7ZWxzZSBNZShlLGMpO3JldHVybiAwPChhPXZlKGMsInNjcmlwdCIpKS5sZW5ndGgmJnllKGEsIWYmJnZlKGUsInNjcmlwdCIpKSxjfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpPWsuZXZlbnQuc3BlY2lhbCxvPTA7dm9pZCAwIT09KG49ZVtvXSk7bysrKWlmKEcobikpe2lmKHQ9bltRLmV4cGFuZG9dKXtpZih0LmV2ZW50cylmb3IociBpbiB0LmV2ZW50cylpW3JdP2suZXZlbnQucmVtb3ZlKG4scik6ay5yZW1vdmVFdmVudChuLHIsdC5oYW5kbGUpO25bUS5leHBhbmRvXT12b2lkIDB9bltKLmV4cGFuZG9dJiYobltKLmV4cGFuZG9dPXZvaWQgMCl9fX0pLGsuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFdlKHRoaXMsZSwhMCl9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gV2UodGhpcyxlKX0sdGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gXyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2sudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHwodGhpcy50ZXh0Q29udGVudD1lKX0pfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBJZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8T2UodGhpcyxlKS5hcHBlbmRDaGlsZChlKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1PZSh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJihrLmNsZWFuRGF0YSh2ZShlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbCE9ZSYmZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGsuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhcWUudGVzdChlKSYmIWdlWyhkZS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1rLmh0bWxQcmVmaWx0ZXIoZSk7dHJ5e2Zvcig7bjxyO24rKykxPT09KHQ9dGhpc1tuXXx8e30pLm5vZGVUeXBlJiYoay5jbGVhbkRhdGEodmUodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChlKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gSWUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2suaW5BcnJheSh0aGlzLG4pPDAmJihrLmNsZWFuRGF0YSh2ZSh0aGlzKSksdCYmdC5yZXBsYWNlQ2hpbGQoZSx0aGlzKSl9LG4pfX0pLGsuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsYSl7ay5mbltlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXSxyPWsoZSksaT1yLmxlbmd0aC0xLG89MDtvPD1pO28rKyl0PW89PT1pP3RoaXM6dGhpcy5jbG9uZSghMCksayhyW29dKVthXSh0KSx1LmFwcGx5KG4sdC5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4pfX0pO3ZhciAkZT1uZXcgUmVnRXhwKCJeKCIrdGUrIikoPyFweClbYS16JV0rJCIsImkiKSxGZT1mdW5jdGlvbihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIHQmJnQub3BlbmVyfHwodD1DKSx0LmdldENvbXB1dGVkU3R5bGUoZSl9LEJlPW5ldyBSZWdFeHAocmUuam9pbigifCIpLCJpIik7ZnVuY3Rpb24gX2UoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHxGZShlKSkmJigiIiE9PShhPW4uZ2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSl8fG9lKGUpfHwoYT1rLnN0eWxlKGUsdCkpLCF5LnBpeGVsQm94U3R5bGVzKCkmJiRlLnRlc3QoYSkmJkJlLnRlc3QodCkmJihyPXMud2lkdGgsaT1zLm1pbldpZHRoLG89cy5tYXhXaWR0aCxzLm1pbldpZHRoPXMubWF4V2lkdGg9cy53aWR0aD1hLGE9bi53aWR0aCxzLndpZHRoPXIscy5taW5XaWR0aD1pLHMubWF4V2lkdGg9bykpLHZvaWQgMCE9PWE/YSsiIjphfWZ1bmN0aW9uIHplKGUsdCl7cmV0dXJue2dldDpmdW5jdGlvbigpe2lmKCFlKCkpcmV0dXJuKHRoaXMuZ2V0PXQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtkZWxldGUgdGhpcy5nZXR9fX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aWYodSl7cy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIix1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjYwJTt0b3A6MSUiLGllLmFwcGVuZENoaWxkKHMpLmFwcGVuZENoaWxkKHUpO3ZhciBlPUMuZ2V0Q29tcHV0ZWRTdHlsZSh1KTtuPSIxJSIhPT1lLnRvcCxhPTEyPT09dChlLm1hcmdpbkxlZnQpLHUuc3R5bGUucmlnaHQ9IjYwJSIsbz0zNj09PXQoZS5yaWdodCkscj0zNj09PXQoZS53aWR0aCksdS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGk9MTI9PT10KHUub2Zmc2V0V2lkdGgvMyksaWUucmVtb3ZlQ2hpbGQocyksdT1udWxsfX1mdW5jdGlvbiB0KGUpe3JldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkpfXZhciBuLHIsaSxvLGEscz1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LnN0eWxlJiYodS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLHUuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIix5LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09dS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxrLmV4dGVuZCh5LHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCkscn0scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG99LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCksYX0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksaX19KSl9KCk7dmFyIFVlPVsiV2Via2l0IiwiTW96IiwibXMiXSxYZT1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLFZlPXt9O2Z1bmN0aW9uIEdlKGUpe3ZhciB0PWsuY3NzUHJvcHNbZV18fFZlW2VdO3JldHVybiB0fHwoZSBpbiBYZT9lOlZlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49VWUubGVuZ3RoO3doaWxlKG4tLSlpZigoZT1VZVtuXSt0KWluIFhlKXJldHVybiBlfShlKXx8ZSl9dmFyIFllPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxRZT0vXi0tLyxKZT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS2U9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9O2Z1bmN0aW9uIFplKGUsdCxuKXt2YXIgcj1uZS5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsyXS0obnx8MCkpKyhyWzNdfHwicHgiKTp0fWZ1bmN0aW9uIGV0KGUsdCxuLHIsaSxvKXt2YXIgYT0id2lkdGgiPT09dD8xOjAscz0wLHU9MDtpZihuPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKSJtYXJnaW4iPT09biYmKHUrPWsuY3NzKGUsbityZVthXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHUtPWsuY3NzKGUsInBhZGRpbmciK3JlW2FdLCEwLGkpKSwibWFyZ2luIiE9PW4mJih1LT1rLmNzcyhlLCJib3JkZXIiK3JlW2FdKyJXaWR0aCIsITAsaSkpKToodSs9ay5jc3MoZSwicGFkZGluZyIrcmVbYV0sITAsaSksInBhZGRpbmciIT09bj91Kz1rLmNzcyhlLCJib3JkZXIiK3JlW2FdKyJXaWR0aCIsITAsaSk6cys9ay5jc3MoZSwiYm9yZGVyIityZVthXSsiV2lkdGgiLCEwLGkpKTtyZXR1cm4hciYmMDw9byYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLW8tdS1zLS41KSl8fDApLHV9ZnVuY3Rpb24gdHQoZSx0LG4pe3ZhciByPUZlKGUpLGk9KCF5LmJveFNpemluZ1JlbGlhYmxlKCl8fG4pJiYiYm9yZGVyLWJveCI9PT1rLmNzcyhlLCJib3hTaXppbmciLCExLHIpLG89aSxhPV9lKGUsdCxyKSxzPSJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2lmKCRlLnRlc3QoYSkpe2lmKCFuKXJldHVybiBhO2E9ImF1dG8ifXJldHVybigheS5ib3hTaXppbmdSZWxpYWJsZSgpJiZpfHwiYXV0byI9PT1hfHwhcGFyc2VGbG9hdChhKSYmImlubGluZSI9PT1rLmNzcyhlLCJkaXNwbGF5IiwhMSxyKSkmJmUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJihpPSJib3JkZXItYm94Ij09PWsuY3NzKGUsImJveFNpemluZyIsITEsciksKG89cyBpbiBlKSYmKGE9ZVtzXSkpLChhPXBhcnNlRmxvYXQoYSl8fDApK2V0KGUsdCxufHwoaT8iYm9yZGVyIjoiY29udGVudCIpLG8scixhKSsicHgifWZ1bmN0aW9uIG50KGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBudC5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfWsuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49X2UoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsZ3JpZEFyZWE6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TdGFydDohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1N0YXJ0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1WKHQpLHU9UWUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9R2UocykpLGE9ay5jc3NIb29rc1t0XXx8ay5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09PShvPXR5cGVvZiBuKSYmKGk9bmUuZXhlYyhuKSkmJmlbMV0mJihuPWxlKGUsdCxpKSxvPSJudW1iZXIiKSxudWxsIT1uJiZuPT1uJiYoIm51bWJlciIhPT1vfHx1fHwobis9aSYmaVszXXx8KGsuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSx5LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW3RdPSJpbmhlcml0IiksYSYmInNldCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9Vih0KTtyZXR1cm4gUWUudGVzdCh0KXx8KHQ9R2UocykpLChhPWsuY3NzSG9va3NbdF18fGsuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPV9lKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIEtlJiYoaT1LZVt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksay5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHUpe2suY3NzSG9va3NbdV09e2dldDpmdW5jdGlvbihlLHQsbil7aWYodClyZXR1cm4hWWUudGVzdChrLmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP3R0KGUsdSxuKTp1ZShlLEplLGZ1bmN0aW9uKCl7cmV0dXJuIHR0KGUsdSxuKX0pfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9RmUoZSksbz0heS5zY3JvbGxib3hTaXplKCkmJiJhYnNvbHV0ZSI9PT1pLnBvc2l0aW9uLGE9KG98fG4pJiYiYm9yZGVyLWJveCI9PT1rLmNzcyhlLCJib3hTaXppbmciLCExLGkpLHM9bj9ldChlLHUsbixhLGkpOjA7cmV0dXJuIGEmJm8mJihzLT1NYXRoLmNlaWwoZVsib2Zmc2V0Iit1WzBdLnRvVXBwZXJDYXNlKCkrdS5zbGljZSgxKV0tcGFyc2VGbG9hdChpW3VdKS1ldChlLHUsImJvcmRlciIsITEsaSktLjUpKSxzJiYocj1uZS5leGVjKHQpKSYmInB4IiE9PShyWzNdfHwicHgiKSYmKGUuc3R5bGVbdV09dCx0PWsuY3NzKGUsdSkpLFplKDAsdCxzKX19fSksay5jc3NIb29rcy5tYXJnaW5MZWZ0PXplKHkucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChfZShlLCJtYXJnaW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdWUoZSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLGsuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGksbyl7ay5jc3NIb29rc1tpK29dPXtleHBhbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj17fSxyPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KCIgIik6W2VdO3Q8NDt0KyspbltpK3JlW3RdK29dPXJbdF18fHJbdC0yXXx8clswXTtyZXR1cm4gbn19LCJtYXJnaW4iIT09aSYmKGsuY3NzSG9va3NbaStvXS5zZXQ9WmUpfSksay5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiBfKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxhPTA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHI9RmUoZSksaT10Lmxlbmd0aDthPGk7YSsrKW9bdFthXV09ay5jc3MoZSx0W2FdLCExLHIpO3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP2suc3R5bGUoZSx0LG4pOmsuY3NzKGUsdCl9LGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfX0pLCgoay5Ud2Vlbj1udCkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpudCxpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHxrLmVhc2luZy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KGsuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1udC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6bnQucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49bnQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PWsuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpudC5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSkuaW5pdC5wcm90b3R5cGU9bnQucHJvdG90eXBlLChudC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXToodD1rLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ/dDowfSxzZXQ6ZnVuY3Rpb24oZSl7ay5meC5zdGVwW2UucHJvcF0/ay5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8IWsuY3NzSG9va3NbZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW0dlKGUucHJvcCldP2UuZWxlbVtlLnByb3BdPWUubm93Omsuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19KS5zY3JvbGxUb3A9bnQucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0say5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfSxfZGVmYXVsdDoic3dpbmcifSxrLmZ4PW50LnByb3RvdHlwZS5pbml0LGsuZnguc3RlcD17fTt2YXIgcnQsaXQsb3QsYXQsc3Q9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLHV0PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gbHQoKXtpdCYmKCExPT09RS5oaWRkZW4mJkMucmVxdWVzdEFuaW1hdGlvbkZyYW1lP0MucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGx0KTpDLnNldFRpbWVvdXQobHQsay5meC5pbnRlcnZhbCksay5meC50aWNrKCkpfWZ1bmN0aW9uIGN0KCl7cmV0dXJuIEMuc2V0VGltZW91dChmdW5jdGlvbigpe3J0PXZvaWQgMH0pLHJ0PURhdGUubm93KCl9ZnVuY3Rpb24gZnQoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpaVsibWFyZ2luIisobj1yZVtyXSldPWlbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihpLm9wYWNpdHk9aS53aWR0aD1lKSxpfWZ1bmN0aW9uIHB0KGUsdCxuKXtmb3IodmFyIHIsaT0oZHQudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoZHQudHdlZW5lcnNbIioiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gZHQobyxlLHQpe3ZhciBuLGEscj0wLGk9ZHQucHJlZmlsdGVycy5sZW5ndGgscz1rLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihhKXJldHVybiExO2Zvcih2YXIgZT1ydHx8Y3QoKSx0PU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi1lKSxuPTEtKHQvbC5kdXJhdGlvbnx8MCkscj0wLGk9bC50d2VlbnMubGVuZ3RoO3I8aTtyKyspbC50d2VlbnNbcl0ucnVuKG4pO3JldHVybiBzLm5vdGlmeVdpdGgobyxbbCxuLHRdKSxuPDEmJmk/dDooaXx8cy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTpvLHByb3BzOmsuZXh0ZW5kKHt9LGUpLG9wdHM6ay5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOmsuZWFzaW5nLl9kZWZhdWx0fSx0KSxvcmlnaW5hbFByb3BlcnRpZXM6ZSxvcmlnaW5hbE9wdGlvbnM6dCxzdGFydFRpbWU6cnR8fGN0KCksZHVyYXRpb246dC5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1rLlR3ZWVuKG8sbC5vcHRzLGUsdCxsLm9wdHMuc3BlY2lhbEVhc2luZ1tlXXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gobiksbn0sc3RvcDpmdW5jdGlvbihlKXt2YXIgdD0wLG49ZT9sLnR3ZWVucy5sZW5ndGg6MDtpZihhKXJldHVybiB0aGlzO2ZvcihhPSEwO3Q8bjt0KyspbC50d2VlbnNbdF0ucnVuKDEpO3JldHVybiBlPyhzLm5vdGlmeVdpdGgobyxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKG8sW2wsZV0pKTpzLnJlamVjdFdpdGgobyxbbCxlXSksdGhpc319KSxjPWwucHJvcHM7Zm9yKCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihpPXRbcj1WKG4pXSxvPWVbbl0sQXJyYXkuaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLChhPWsuY3NzSG9va3Nbcl0pJiYiZXhwYW5kImluIGEpZm9yKG4gaW4gbz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXSxvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpO2Vsc2UgdFtyXT1pfShjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtyPGk7cisrKWlmKG49ZHQucHJlZmlsdGVyc1tyXS5jYWxsKGwsbyxjLGwub3B0cykpcmV0dXJuIG0obi5zdG9wKSYmKGsuX3F1ZXVlSG9va3MobC5lbGVtLGwub3B0cy5xdWV1ZSkuc3RvcD1uLnN0b3AuYmluZChuKSksbjtyZXR1cm4gay5tYXAoYyxwdCxsKSxtKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKG8sbCksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyksay5meC50aW1lcihrLmV4dGVuZCh1LHtlbGVtOm8sYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsfWsuQW5pbWF0aW9uPWsuZXh0ZW5kKGR0LHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KTtyZXR1cm4gbGUobi5lbGVtLGUsbmUuZXhlYyh0KSxuKSxufV19LHR3ZWVuZXI6ZnVuY3Rpb24oZSx0KXttKGUpPyh0PWUsZT1bIioiXSk6ZT1lLm1hdGNoKFIpO2Zvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSxkdC50d2VlbmVyc1tuXT1kdC50d2VlbmVyc1tuXXx8W10sZHQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj0id2lkdGgiaW4gdHx8ImhlaWdodCJpbiB0LHA9dGhpcyxkPXt9LGg9ZS5zdHlsZSxnPWUubm9kZVR5cGUmJnNlKGUpLHY9US5nZXQoZSwiZnhzaG93Iik7Zm9yKHIgaW4gbi5xdWV1ZXx8KG51bGw9PShhPWsuX3F1ZXVlSG9va3MoZSwiZngiKSkudW5xdWV1ZWQmJihhLnVucXVldWVkPTAscz1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8cygpfSksYS51bnF1ZXVlZCsrLHAuYWx3YXlzKGZ1bmN0aW9uKCl7cC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0say5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9KX0pKSx0KWlmKGk9dFtyXSxzdC50ZXN0KGkpKXtpZihkZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGc/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCF2fHx2b2lkIDA9PT12W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT12JiZ2W3JdfHxrLnN0eWxlKGUscil9aWYoKHU9IWsuaXNFbXB0eU9iamVjdCh0KSl8fCFrLmlzRW1wdHlPYmplY3QoZCkpZm9yKHIgaW4gZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxudWxsPT0obD12JiZ2LmRpc3BsYXkpJiYobD1RLmdldChlLCJkaXNwbGF5IikpLCJub25lIj09PShjPWsuY3NzKGUsImRpc3BsYXkiKSkmJihsP2M9bDooZmUoW2VdLCEwKSxsPWUuc3R5bGUuZGlzcGxheXx8bCxjPWsuY3NzKGUsImRpc3BsYXkiKSxmZShbZV0pKSksKCJpbmxpbmUiPT09Y3x8ImlubGluZS1ibG9jayI9PT1jJiZudWxsIT1sKSYmIm5vbmUiPT09ay5jc3MoZSwiZmxvYXQiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9bH0pLG51bGw9PWwmJihjPWguZGlzcGxheSxsPSJub25lIj09PWM/IiI6YykpLGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExLGQpdXx8KHY/ImhpZGRlbiJpbiB2JiYoZz12LmhpZGRlbik6dj1RLmFjY2VzcyhlLCJmeHNob3ciLHtkaXNwbGF5Omx9KSxvJiYodi5oaWRkZW49IWcpLGcmJmZlKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Zm9yKHIgaW4gZ3x8ZmUoW2VdKSxRLnJlbW92ZShlLCJmeHNob3ciKSxkKWsuc3R5bGUoZSxyLGRbcl0pfSkpLHU9cHQoZz92W3JdOjAscixwKSxyIGluIHZ8fCh2W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P2R0LnByZWZpbHRlcnMudW5zaGlmdChlKTpkdC5wcmVmaWx0ZXJzLnB1c2goZSl9fSksay5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP2suZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8bShlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhbSh0KSYmdH07cmV0dXJuIGsuZngub2ZmP3IuZHVyYXRpb249MDoibnVtYmVyIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIGsuZnguc3BlZWRzP3IuZHVyYXRpb249ay5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj1rLmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXttKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZrLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0say5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoc2UpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWsuaXNFbXB0eU9iamVjdCh0KSxvPWsuc3BlZWQoZSxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgZT1kdCh0aGlzLGsuZXh0ZW5kKHt9LHQpLG8pOyhpfHxRLmdldCh0aGlzLCJmaW5pc2giKSkmJmUuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGksZSxvKXt2YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG8pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGkmJihvPWUsZT1pLGk9dm9pZCAwKSxlJiYhMSE9PWkmJnRoaXMucXVldWUoaXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9ITAsdD1udWxsIT1pJiZpKyJxdWV1ZUhvb2tzIixuPWsudGltZXJzLHI9US5nZXQodGhpcyk7aWYodClyW3RdJiZyW3RdLnN0b3AmJmEoclt0XSk7ZWxzZSBmb3IodCBpbiByKXJbdF0mJnJbdF0uc3RvcCYmdXQudGVzdCh0KSYmYShyW3RdKTtmb3IodD1uLmxlbmd0aDt0LS07KW5bdF0uZWxlbSE9PXRoaXN8fG51bGwhPWkmJm5bdF0ucXVldWUhPT1pfHwoblt0XS5hbmltLnN0b3AobyksZT0hMSxuLnNwbGljZSh0LDEpKTshZSYmb3x8ay5kZXF1ZXVlKHRoaXMsaSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiExIT09YSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdD1RLmdldCh0aGlzKSxuPXRbYSsicXVldWUiXSxyPXRbYSsicXVldWVIb29rcyJdLGk9ay50aW1lcnMsbz1uP24ubGVuZ3RoOjA7Zm9yKHQuZmluaXNoPSEwLGsucXVldWUodGhpcyxhLFtdKSxyJiZyLnN0b3AmJnIuc3RvcC5jYWxsKHRoaXMsITApLGU9aS5sZW5ndGg7ZS0tOylpW2VdLmVsZW09PT10aGlzJiZpW2VdLnF1ZXVlPT09YSYmKGlbZV0uYW5pbS5zdG9wKCEwKSxpLnNwbGljZShlLDEpKTtmb3IoZT0wO2U8bztlKyspbltlXSYmbltlXS5maW5pc2gmJm5bZV0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIHQuZmluaXNofSl9fSksay5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHIpe3ZhciBpPWsuZm5bcl07ay5mbltyXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGZ0KHIsITApLGUsdCxuKX19KSxrLmVhY2goe3NsaWRlRG93bjpmdCgic2hvdyIpLHNsaWRlVXA6ZnQoImhpZGUiKSxzbGlkZVRvZ2dsZTpmdCgidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHIpe2suZm5bZV09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmFuaW1hdGUocixlLHQsbil9fSksay50aW1lcnM9W10say5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49ay50aW1lcnM7Zm9yKHJ0PURhdGUubm93KCk7dDxuLmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8ay5meC5zdG9wKCkscnQ9dm9pZCAwfSxrLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2sudGltZXJzLnB1c2goZSksay5meC5zdGFydCgpfSxrLmZ4LmludGVydmFsPTEzLGsuZnguc3RhcnQ9ZnVuY3Rpb24oKXtpdHx8KGl0PSEwLGx0KCkpfSxrLmZ4LnN0b3A9ZnVuY3Rpb24oKXtpdD1udWxsfSxrLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxrLmZuLmRlbGF5PWZ1bmN0aW9uKHIsZSl7cmV0dXJuIHI9ay5meCYmay5meC5zcGVlZHNbcl18fHIsZT1lfHwiZngiLHRoaXMucXVldWUoZSxmdW5jdGlvbihlLHQpe3ZhciBuPUMuc2V0VGltZW91dChlLHIpO3Quc3RvcD1mdW5jdGlvbigpe0MuY2xlYXJUaW1lb3V0KG4pfX0pfSxvdD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYXQ9RS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxvdC50eXBlPSJjaGVja2JveCIseS5jaGVja09uPSIiIT09b3QudmFsdWUseS5vcHRTZWxlY3RlZD1hdC5zZWxlY3RlZCwob3Q9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS52YWx1ZT0idCIsb3QudHlwZT0icmFkaW8iLHkucmFkaW9WYWx1ZT0idCI9PT1vdC52YWx1ZTt2YXIgaHQsZ3Q9ay5leHByLmF0dHJIYW5kbGU7ay5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gXyh0aGlzLGsuYXR0cixlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ay5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSxrLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGUuZ2V0QXR0cmlidXRlP2sucHJvcChlLHQsbik6KDE9PT1vJiZrLmlzWE1MRG9jKGUpfHwoaT1rLmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwoay5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9odDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgay5yZW1vdmVBdHRyKGUsdCk6aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbisiIiksbik6aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjpudWxsPT0ocj1rLmZpbmQuYXR0cihlLHQpKT92b2lkIDA6cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXkucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJkEoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKFIpO2lmKGkmJjE9PT1lLm5vZGVUeXBlKXdoaWxlKG49aVtyKytdKWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLGh0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD9rLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxrLmVhY2goay5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgYT1ndFt0XXx8ay5maW5kLmF0dHI7Z3RbdF09ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIG58fChpPWd0W29dLGd0W29dPXIscj1udWxsIT1hKGUsdCxuKT9vOm51bGwsZ3Rbb109aSkscn19KTt2YXIgdnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7ZnVuY3Rpb24gbXQoZSl7cmV0dXJuKGUubWF0Y2goUil8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZToic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goUil8fFtdfWsuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIF8odGhpcyxrLnByb3AsZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2sucHJvcEZpeFtlXXx8ZV19KX19KSxrLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09PW8mJmsuaXNYTUxEb2MoZSl8fCh0PWsucHJvcEZpeFt0XXx8dCxpPWsucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP2kmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1rLmZpbmQuYXR0cihlLCJ0YWJpbmRleCIpO3JldHVybiB0P3BhcnNlSW50KHQsMTApOnZ0LnRlc3QoZS5ub2RlTmFtZSl8fHl0LnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifX0pLHkub3B0U2VsZWN0ZWR8fChrLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3QmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksay5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtrLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksay5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYSxzLHU9MDtpZihtKHQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7ayh0aGlzKS5hZGRDbGFzcyh0LmNhbGwodGhpcyxlLHh0KHRoaXMpKSl9KTtpZigoZT1idCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eHQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK210KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXIuaW5kZXhPZigiICIrbysiICIpPDAmJihyKz1vKyIgIik7aSE9PShzPW10KHIpKSYmbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixzKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLnJlbW92ZUNsYXNzKHQuY2FsbCh0aGlzLGUseHQodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoImNsYXNzIiwiIik7aWYoKGU9YnQodCkpLmxlbmd0aCl3aGlsZShuPXRoaXNbdSsrXSlpZihpPXh0KG4pLHI9MT09PW4ubm9kZVR5cGUmJiIgIittdChpKSsiICIpe2E9MDt3aGlsZShvPWVbYSsrXSl3aGlsZSgtMTxyLmluZGV4T2YoIiAiK28rIiAiKSlyPXIucmVwbGFjZSgiICIrbysiICIsIiAiKTtpIT09KHM9bXQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihpLHQpe3ZhciBvPXR5cGVvZiBpLGE9InN0cmluZyI9PT1vfHxBcnJheS5pc0FycmF5KGkpO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJmE/dD90aGlzLmFkZENsYXNzKGkpOnRoaXMucmVtb3ZlQ2xhc3MoaSk6bShpKT90aGlzLmVhY2goZnVuY3Rpb24oZSl7ayh0aGlzKS50b2dnbGVDbGFzcyhpLmNhbGwodGhpcyxlLHh0KHRoaXMpLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7aWYoYSl7dD0wLG49ayh0aGlzKSxyPWJ0KGkpO3doaWxlKGU9clt0KytdKW4uaGFzQ2xhc3MoZSk/bi5yZW1vdmVDbGFzcyhlKTpuLmFkZENsYXNzKGUpfWVsc2Ugdm9pZCAwIT09aSYmImJvb2xlYW4iIT09b3x8KChlPXh0KHRoaXMpKSYmUS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsZSksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKCJjbGFzcyIsZXx8ITE9PT1pPyIiOlEuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHI9MDt0PSIgIitlKyIgIjt3aGlsZShuPXRoaXNbcisrXSlpZigxPT09bi5ub2RlVHlwZSYmLTE8KCIgIittdCh4dChuKSkrIiAiKS5pbmRleE9mKHQpKXJldHVybiEwO3JldHVybiExfX0pO3ZhciB3dD0vXHIvZztrLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKG4pe3ZhciByLGUsaSx0PXRoaXNbMF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bShuKSx0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ7MT09PXRoaXMubm9kZVR5cGUmJihudWxsPT0odD1pP24uY2FsbCh0aGlzLGUsayh0aGlzKS52YWwoKSk6bik/dD0iIjoibnVtYmVyIj09dHlwZW9mIHQ/dCs9IiI6QXJyYXkuaXNBcnJheSh0KSYmKHQ9ay5tYXAodCxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLChyPWsudmFsSG9va3NbdGhpcy50eXBlXXx8ay52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmInNldCJpbiByJiZ2b2lkIDAhPT1yLnNldCh0aGlzLHQsInZhbHVlIil8fCh0aGlzLnZhbHVlPXQpKX0pKTp0PyhyPWsudmFsSG9va3NbdC50eXBlXXx8ay52YWxIb29rc1t0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiByJiZ2b2lkIDAhPT0oZT1yLmdldCh0LCJ2YWx1ZSIpKT9lOiJzdHJpbmciPT10eXBlb2YoZT10LnZhbHVlKT9lLnJlcGxhY2Uod3QsIiIpOm51bGw9PWU/IiI6ZTp2b2lkIDB9fSksay5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD1rLmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6bXQoay50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlwZSxzPWE/bnVsbDpbXSx1PWE/bysxOmkubGVuZ3RoO2ZvcihyPW88MD91OmE/bzowO3I8dTtyKyspaWYoKChuPWlbcl0pLnNlbGVjdGVkfHxyPT09bykmJiFuLmRpc2FibGVkJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IUEobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD1rKG4pLnZhbCgpLGEpcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89ay5tYWtlQXJyYXkodCksYT1pLmxlbmd0aDt3aGlsZShhLS0pKChyPWlbYV0pLnNlbGVjdGVkPS0xPGsuaW5BcnJheShrLnZhbEhvb2tzLm9wdGlvbi5nZXQociksbykpJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSxrLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtrLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9LTE8ay5pbkFycmF5KGsoZSkudmFsKCksdCl9fSx5LmNoZWNrT258fChrLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSkseS5mb2N1c2luPSJvbmZvY3VzaW4iaW4gQzt2YXIgVHQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLEN0PWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9O2suZXh0ZW5kKGsuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsLGMsZixwPVtufHxFXSxkPXYuY2FsbChlLCJ0eXBlIik/ZS50eXBlOmUsaD12LmNhbGwoZSwibmFtZXNwYWNlIik/ZS5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihvPWY9YT1uPW58fEUsMyE9PW4ubm9kZVR5cGUmJjghPT1uLm5vZGVUeXBlJiYhVHQudGVzdChkK2suZXZlbnQudHJpZ2dlcmVkKSYmKC0xPGQuaW5kZXhPZigiLiIpJiYoZD0oaD1kLnNwbGl0KCIuIikpLnNoaWZ0KCksaC5zb3J0KCkpLHU9ZC5pbmRleE9mKCI6Iik8MCYmIm9uIitkLChlPWVbay5leHBhbmRvXT9lOm5ldyBrLkV2ZW50KGQsIm9iamVjdCI9PXR5cGVvZiBlJiZlKSkuaXNUcmlnZ2VyPXI/MjozLGUubmFtZXNwYWNlPWguam9pbigiLiIpLGUucm5hbWVzcGFjZT1lLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsZS5yZXN1bHQ9dm9pZCAwLGUudGFyZ2V0fHwoZS50YXJnZXQ9biksdD1udWxsPT10P1tlXTprLm1ha2VBcnJheSh0LFtlXSksYz1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LHJ8fCFjLnRyaWdnZXJ8fCExIT09Yy50cmlnZ2VyLmFwcGx5KG4sdCkpKXtpZighciYmIWMubm9CdWJibGUmJiF4KG4pKXtmb3Iocz1jLmRlbGVnYXRlVHlwZXx8ZCxUdC50ZXN0KHMrZCl8fChvPW8ucGFyZW50Tm9kZSk7bztvPW8ucGFyZW50Tm9kZSlwLnB1c2gobyksYT1vO2E9PT0obi5vd25lckRvY3VtZW50fHxFKSYmcC5wdXNoKGEuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93fHxDKX1pPTA7d2hpbGUoKG89cFtpKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlmPW8sZS50eXBlPTE8aT9zOmMuYmluZFR5cGV8fGQsKGw9KFEuZ2V0KG8sImV2ZW50cyIpfHx7fSlbZS50eXBlXSYmUS5nZXQobywiaGFuZGxlIikpJiZsLmFwcGx5KG8sdCksKGw9dSYmb1t1XSkmJmwuYXBwbHkmJkcobykmJihlLnJlc3VsdD1sLmFwcGx5KG8sdCksITE9PT1lLnJlc3VsdCYmZS5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gZS50eXBlPWQscnx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Yy5fZGVmYXVsdCYmITEhPT1jLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksdCl8fCFHKG4pfHx1JiZtKG5bZF0pJiYheChuKSYmKChhPW5bdV0pJiYoblt1XT1udWxsKSxrLmV2ZW50LnRyaWdnZXJlZD1kLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmZi5hZGRFdmVudExpc3RlbmVyKGQsQ3QpLG5bZF0oKSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLEN0KSxrLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsYSYmKG5bdV09YSkpLGUucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWsuZXh0ZW5kKG5ldyBrLkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMH0pO2suZXZlbnQudHJpZ2dlcihyLG51bGwsdCl9fSksay5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ay5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gay5ldmVudC50cmlnZ2VyKGUsdCxuLCEwKX19KSx5LmZvY3VzaW58fGsuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24obixyKXt2YXIgaT1mdW5jdGlvbihlKXtrLmV2ZW50LnNpbXVsYXRlKHIsZS50YXJnZXQsay5ldmVudC5maXgoZSkpfTtrLmV2ZW50LnNwZWNpYWxbcl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLHQ9US5hY2Nlc3MoZSxyKTt0fHxlLmFkZEV2ZW50TGlzdGVuZXIobixpLCEwKSxRLmFjY2VzcyhlLHIsKHR8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyx0PVEuYWNjZXNzKGUsciktMTt0P1EuYWNjZXNzKGUscix0KTooZS5yZW1vdmVFdmVudExpc3RlbmVyKG4saSwhMCksUS5yZW1vdmUoZSxyKSl9fX0pO3ZhciBFdD1DLmxvY2F0aW9uLGt0PURhdGUubm93KCksU3Q9L1w/LztrLnBhcnNlWE1MPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e3Q9KG5ldyBDLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIil9Y2F0Y2goZSl7dD12b2lkIDB9cmV0dXJuIHQmJiF0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8ay5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH07dmFyIE50PS9cW1xdJC8sQXQ9L1xyP1xuL2csRHQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBxdChuLGUscixpKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKWsuZWFjaChlLGZ1bmN0aW9uKGUsdCl7cnx8TnQudGVzdChuKT9pKG4sdCk6cXQobisiWyIrKCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dD9lOiIiKSsiXSIsdCxyLGkpfSk7ZWxzZSBpZihyfHwib2JqZWN0IiE9PXcoZSkpaShuLGUpO2Vsc2UgZm9yKHQgaW4gZSlxdChuKyJbIit0KyJdIixlW3RdLHIsaSl9ay5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPW0odCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQobnVsbD09bj8iIjpuKX07aWYobnVsbD09ZSlyZXR1cm4iIjtpZihBcnJheS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIWsuaXNQbGFpbk9iamVjdChlKSlrLmVhY2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IobiBpbiBlKXF0KG4sZVtuXSx0LGkpO3JldHVybiByLmpvaW4oIiYiKX0say5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBrLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9ay5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/ay5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhayh0aGlzKS5pcygiOmRpc2FibGVkIikmJmp0LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFEdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhcGUudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj1rKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6QXJyYXkuaXNBcnJheShuKT9rLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2UoQXQsIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKEF0LCJcclxuIil9fSkuZ2V0KCl9fSk7dmFyIEx0PS8lMjAvZyxIdD0vIy4qJC8sT3Q9LyhbPyZdKV89W14mXSovLFB0PS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvZ20sUnQ9L14oPzpHRVR8SEVBRCkkLyxNdD0vXlwvXC8vLEl0PXt9LFd0PXt9LCR0PSIqLyIuY29uY2F0KCIqIiksRnQ9RS5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gQnQobyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9IioiKTt2YXIgbixyPTAsaT1lLnRvTG93ZXJDYXNlKCkubWF0Y2goUil8fFtdO2lmKG0odCkpd2hpbGUobj1pW3IrK10pIisiPT09blswXT8obj1uLnNsaWNlKDEpfHwiKiIsKG9bbl09b1tuXXx8W10pLnVuc2hpZnQodCkpOihvW25dPW9bbl18fFtdKS5wdXNoKHQpfX1mdW5jdGlvbiBfdCh0LGksbyxhKXt2YXIgcz17fSx1PXQ9PT1XdDtmdW5jdGlvbiBsKGUpe3ZhciByO3JldHVybiBzW2VdPSEwLGsuZWFjaCh0W2VdfHxbXSxmdW5jdGlvbihlLHQpe3ZhciBuPXQoaSxvLGEpO3JldHVybiJzdHJpbmciIT10eXBlb2Ygbnx8dXx8c1tuXT91PyEocj1uKTp2b2lkIDA6KGkuZGF0YVR5cGVzLnVuc2hpZnQobiksbChuKSwhMSl9KSxyfXJldHVybiBsKGkuZGF0YVR5cGVzWzBdKXx8IXNbIioiXSYmbCgiKiIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPWsuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJmsuZXh0ZW5kKCEwLGUsciksZX1GdC5ocmVmPUV0LmhyZWYsay5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOkV0LmhyZWYsdHlwZToiR0VUIixpc0xvY2FsOi9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLnRlc3QoRXQucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6JHQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOmsucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P3p0KHp0KGUsay5hamF4U2V0dGluZ3MpLHQpOnp0KGsuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOkJ0KEl0KSxhamF4VHJhbnNwb3J0OkJ0KFd0KSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSx0PXR8fHt9O3ZhciBjLGYscCxuLGQscixoLGcsaSxvLHY9ay5hamF4U2V0dXAoe30sdCkseT12LmNvbnRleHR8fHYsbT12LmNvbnRleHQmJih5Lm5vZGVUeXBlfHx5LmpxdWVyeSk/ayh5KTprLmV2ZW50LHg9ay5EZWZlcnJlZCgpLGI9ay5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksdz12LnN0YXR1c0NvZGV8fHt9LGE9e30scz17fSx1PSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGgpe2lmKCFuKXtuPXt9O3doaWxlKHQ9UHQuZXhlYyhwKSluW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdPShuW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdfHxbXSkuY29uY2F0KHRbMl0pfXQ9bltlLnRvTG93ZXJDYXNlKCkrIiAiXX1yZXR1cm4gbnVsbD09dD9udWxsOnQuam9pbigiLCAiKX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGg/cDpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWgmJihlPXNbZS50b0xvd2VyQ2FzZSgpXT1zW2UudG9Mb3dlckNhc2UoKV18fGUsYVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1oJiYodi5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoaClULmFsd2F5cyhlW1Quc3RhdHVzXSk7ZWxzZSBmb3IodCBpbiBlKXdbdF09W3dbdF0sZVt0XV07cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHU7cmV0dXJuIGMmJmMuYWJvcnQodCksbCgwLHQpLHRoaXN9fTtpZih4LnByb21pc2UoVCksdi51cmw9KChlfHx2LnVybHx8RXQuaHJlZikrIiIpLnJlcGxhY2UoTXQsRXQucHJvdG9jb2wrIi8vIiksdi50eXBlPXQubWV0aG9kfHx0LnR5cGV8fHYubWV0aG9kfHx2LnR5cGUsdi5kYXRhVHlwZXM9KHYuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChSKXx8WyIiXSxudWxsPT12LmNyb3NzRG9tYWluKXtyPUUuY3JlYXRlRWxlbWVudCgiYSIpO3RyeXtyLmhyZWY9di51cmwsci5ocmVmPXIuaHJlZix2LmNyb3NzRG9tYWluPUZ0LnByb3RvY29sKyIvLyIrRnQuaG9zdCE9ci5wcm90b2NvbCsiLy8iK3IuaG9zdH1jYXRjaChlKXt2LmNyb3NzRG9tYWluPSEwfX1pZih2LmRhdGEmJnYucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2Ygdi5kYXRhJiYodi5kYXRhPWsucGFyYW0odi5kYXRhLHYudHJhZGl0aW9uYWwpKSxfdChJdCx2LHQsVCksaClyZXR1cm4gVDtmb3IoaSBpbihnPWsuZXZlbnQmJnYuZ2xvYmFsKSYmMD09ay5hY3RpdmUrKyYmay5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSx2LnR5cGU9di50eXBlLnRvVXBwZXJDYXNlKCksdi5oYXNDb250ZW50PSFSdC50ZXN0KHYudHlwZSksZj12LnVybC5yZXBsYWNlKEh0LCIiKSx2Lmhhc0NvbnRlbnQ/di5kYXRhJiZ2LnByb2Nlc3NEYXRhJiYwPT09KHYuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmKHYuZGF0YT12LmRhdGEucmVwbGFjZShMdCwiKyIpKToobz12LnVybC5zbGljZShmLmxlbmd0aCksdi5kYXRhJiYodi5wcm9jZXNzRGF0YXx8InN0cmluZyI9PXR5cGVvZiB2LmRhdGEpJiYoZis9KFN0LnRlc3QoZik/IiYiOiI/Iikrdi5kYXRhLGRlbGV0ZSB2LmRhdGEpLCExPT09di5jYWNoZSYmKGY9Zi5yZXBsYWNlKE90LCIkMSIpLG89KFN0LnRlc3QoZik/IiYiOiI/IikrIl89IitrdCsrK28pLHYudXJsPWYrbyksdi5pZk1vZGlmaWVkJiYoay5sYXN0TW9kaWZpZWRbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGsubGFzdE1vZGlmaWVkW2ZdKSxrLmV0YWdbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsay5ldGFnW2ZdKSksKHYuZGF0YSYmdi5oYXNDb250ZW50JiYhMSE9PXYuY29udGVudFR5cGV8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsdi5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLHYuZGF0YVR5cGVzWzBdJiZ2LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dP3YuYWNjZXB0c1t2LmRhdGFUeXBlc1swXV0rKCIqIiE9PXYuZGF0YVR5cGVzWzBdPyIsICIrJHQrIjsgcT0wLjAxIjoiIik6di5hY2NlcHRzWyIqIl0pLHYuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIoaSx2LmhlYWRlcnNbaV0pO2lmKHYuYmVmb3JlU2VuZCYmKCExPT09di5iZWZvcmVTZW5kLmNhbGwoeSxULHYpfHxoKSlyZXR1cm4gVC5hYm9ydCgpO2lmKHU9ImFib3J0IixiLmFkZCh2LmNvbXBsZXRlKSxULmRvbmUodi5zdWNjZXNzKSxULmZhaWwodi5lcnJvciksYz1fdChXdCx2LHQsVCkpe2lmKFQucmVhZHlTdGF0ZT0xLGcmJm0udHJpZ2dlcigiYWpheFNlbmQiLFtULHZdKSxoKXJldHVybiBUO3YuYXN5bmMmJjA8di50aW1lb3V0JiYoZD1DLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtULmFib3J0KCJ0aW1lb3V0Iil9LHYudGltZW91dCkpO3RyeXtoPSExLGMuc2VuZChhLGwpfWNhdGNoKGUpe2lmKGgpdGhyb3cgZTtsKC0xLGUpfX1lbHNlIGwoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGwoZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPXQ7aHx8KGg9ITAsZCYmQy5jbGVhclRpbWVvdXQoZCksYz12b2lkIDAscD1yfHwiIixULnJlYWR5U3RhdGU9MDxlPzQ6MCxpPTIwMDw9ZSYmZTwzMDB8fDMwND09PWUsbiYmKHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLHZvaWQgMD09PXImJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pO2JyZWFrfWF8fChhPWkpfW89b3x8YX1pZihvKXJldHVybiBvIT09dVswXSYmdS51bnNoaWZ0KG8pLG5bb119KHYsVCxuKSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoay5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKGsuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLWsuYWN0aXZlfHxrLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBrLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxrLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtrW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksay5hamF4KGsuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxrLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxrLl9ldmFsVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGsuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbigpe319LGRhdGFGaWx0ZXI6ZnVuY3Rpb24oZSl7ay5nbG9iYWxFdmFsKGUsdCl9fSl9LGsuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PWsoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1rKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtrKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLGsuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hay5leHByLnBzZXVkb3MudmlzaWJsZShlKX0say5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LGsuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIFV0PXswOjIwMCwxMjIzOjIwNH0sWHQ9ay5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhWHQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gWHQseS5hamF4PVh0PSEhWHQsay5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHxYdCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChVdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksay5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxrLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gay5nbG9iYWxFdmFsKGUpLGV9fX0pLGsuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxrLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1rKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVnQsR3Q9W10sWXQ9Lyg9KVw/KD89JnwkKXxcP1w/LztrLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9R3QucG9wKCl8fGsuZXhwYW5kbysiXyIra3QrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLGsuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPSExIT09ZS5qc29ucCYmKFl0LnRlc3QoZS51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgZS5kYXRhJiYwPT09KGUuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmWXQudGVzdChlLmRhdGEpJiYiZGF0YSIpO2lmKGF8fCJqc29ucCI9PT1lLmRhdGFUeXBlc1swXSlyZXR1cm4gcj1lLmpzb25wQ2FsbGJhY2s9bShlLmpzb25wQ2FsbGJhY2spP2UuanNvbnBDYWxsYmFjaygpOmUuanNvbnBDYWxsYmFjayxhP2VbYV09ZVthXS5yZXBsYWNlKFl0LCIkMSIrcik6ITEhPT1lLmpzb25wJiYoZS51cmwrPShTdC50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmpzb25wKyI9IityKSxlLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gb3x8ay5lcnJvcihyKyIgd2FzIG5vdCBjYWxsZWQiKSxvWzBdfSxlLmRhdGFUeXBlc1swXT0ianNvbiIsaT1DW3JdLENbcl09ZnVuY3Rpb24oKXtvPWFyZ3VtZW50c30sbi5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1pP2soQykucmVtb3ZlUHJvcChyKTpDW3JdPWksZVtyXSYmKGUuanNvbnBDYWxsYmFjaz10Lmpzb25wQ2FsbGJhY2ssR3QucHVzaChyKSksbyYmbShpKSYmaShvWzBdKSxvPWk9dm9pZCAwfSksInNjcmlwdCJ9KSx5LmNyZWF0ZUhUTUxEb2N1bWVudD0oKFZ0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKS5ib2R5KS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09VnQuY2hpbGROb2Rlcy5sZW5ndGgpLGsucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/W106KCJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdHx8KHkuY3JlYXRlSFRNTERvY3VtZW50Pygocj0odD1FLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZj1FLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKHIpKTp0PUUpLG89IW4mJltdLChpPUQuZXhlYyhlKSk/W3QuY3JlYXRlRWxlbWVudChpWzFdKV06KGk9d2UoW2VdLHQsbyksbyYmby5sZW5ndGgmJmsobykucmVtb3ZlKCksay5tZXJnZShbXSxpLmNoaWxkTm9kZXMpKSk7dmFyIHIsaSxvfSxrLmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPXRoaXMscz1lLmluZGV4T2YoIiAiKTtyZXR1cm4tMTxzJiYocj1tdChlLnNsaWNlKHMpKSxlPWUuc2xpY2UoMCxzKSksbSh0KT8obj10LHQ9dm9pZCAwKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIiksMDxhLmxlbmd0aCYmay5hamF4KHt1cmw6ZSx0eXBlOml8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP2soIjxkaXY+IikuYXBwZW5kKGsucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuYWx3YXlzKG4mJmZ1bmN0aW9uKGUsdCl7YS5lYWNoKGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pfSksdGhpc30say5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXtrLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSksay5leHByLnBzZXVkb3MuYW5pbWF0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGsuZ3JlcChrLnRpbWVycyxmdW5jdGlvbihlKXtyZXR1cm4gdD09PWUuZWxlbX0pLmxlbmd0aH0say5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9ay5jc3MoZSwicG9zaXRpb24iKSxjPWsoZSksZj17fTsic3RhdGljIj09PWwmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9Yy5vZmZzZXQoKSxvPWsuY3NzKGUsInRvcCIpLHU9ay5jc3MoZSwibGVmdCIpLCgiYWJzb2x1dGUiPT09bHx8ImZpeGVkIj09PWwpJiYtMTwobyt1KS5pbmRleE9mKCJhdXRvIik/KGE9KHI9Yy5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxtKHQpJiYodD10LmNhbGwoZSxuLGsuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpjLmNzcyhmKX19LGsuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihlKXtrLm9mZnNldC5zZXRPZmZzZXQodGhpcyx0LGUpfSk7dmFyIGUsbixyPXRoaXNbMF07cmV0dXJuIHI/ci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8oZT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LHt0b3A6ZS50b3Arbi5wYWdlWU9mZnNldCxsZWZ0OmUubGVmdCtuLnBhZ2VYT2Zmc2V0fSk6e3RvcDowLGxlZnQ6MH06dm9pZCAwfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09ay5jc3MociwicG9zaXRpb24iKSl0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt0PXRoaXMub2Zmc2V0KCksbj1yLm93bmVyRG9jdW1lbnQsZT1yLm9mZnNldFBhcmVudHx8bi5kb2N1bWVudEVsZW1lbnQ7d2hpbGUoZSYmKGU9PT1uLmJvZHl8fGU9PT1uLmRvY3VtZW50RWxlbWVudCkmJiJzdGF0aWMiPT09ay5jc3MoZSwicG9zaXRpb24iKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT1rKGUpLm9mZnNldCgpKS50b3ArPWsuY3NzKGUsImJvcmRlclRvcFdpZHRoIiwhMCksaS5sZWZ0Kz1rLmNzcyhlLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSl9cmV0dXJue3RvcDp0LnRvcC1pLnRvcC1rLmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtay5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGUmJiJzdGF0aWMiPT09ay5jc3MoZSwicG9zaXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxpZX0pfX0pLGsuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LGkpe3ZhciBvPSJwYWdlWU9mZnNldCI9PT1pO2suZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoeChlKT9yPWU6OT09PWUubm9kZVR5cGUmJihyPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PW4pcmV0dXJuIHI/cltpXTplW3RdO3I/ci5zY3JvbGxUbyhvP3IucGFnZVhPZmZzZXQ6bixvP246ci5wYWdlWU9mZnNldCk6ZVt0XT1ufSx0LGUsYXJndW1lbnRzLmxlbmd0aCl9fSksay5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsbil7ay5jc3NIb29rc1tuXT16ZSh5LnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0PV9lKGUsbiksJGUudGVzdCh0KT9rKGUpLnBvc2l0aW9uKClbbl0rInB4Ijp0fSl9KSxrLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLHMpe2suZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpzLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24ocixvKXtrLmZuW29dPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCYmKHJ8fCJib29sZWFuIiE9dHlwZW9mIGUpLGk9cnx8KCEwPT09ZXx8ITA9PT10PyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gXyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4geChlKT8wPT09by5pbmRleE9mKCJvdXRlciIpP2VbImlubmVyIithXTplLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09ZS5ub2RlVHlwZT8ocj1lLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChlLmJvZHlbInNjcm9sbCIrYV0sclsic2Nyb2xsIithXSxlLmJvZHlbIm9mZnNldCIrYV0sclsib2Zmc2V0IithXSxyWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09bj9rLmNzcyhlLHQsaSk6ay5zdHlsZShlLHQsbixpKX0scyxuP2U6dm9pZCAwLG4pfX0pfSksay5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsbil7ay5mbltuXT1mdW5jdGlvbihlLHQpe3JldHVybiAwPGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vbihuLG51bGwsZSx0KTp0aGlzLnRyaWdnZXIobil9fSksay5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLGsuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KSxrLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fGsuZ3VpZCsrLGl9LGsuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/ay5yZWFkeVdhaXQrKzprLnJlYWR5KCEwKX0say5pc0FycmF5PUFycmF5LmlzQXJyYXksay5wYXJzZUpTT049SlNPTi5wYXJzZSxrLm5vZGVOYW1lPUEsay5pc0Z1bmN0aW9uPW0say5pc1dpbmRvdz14LGsuY2FtZWxDYXNlPVYsay50eXBlPXcsay5ub3c9RGF0ZS5ub3csay5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9ay50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4ga30pO3ZhciBRdD1DLmpRdWVyeSxKdD1DLiQ7cmV0dXJuIGsubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gQy4kPT09ayYmKEMuJD1KdCksZSYmQy5qUXVlcnk9PT1rJiYoQy5qUXVlcnk9UXQpLGt9LGV8fChDLmpRdWVyeT1DLiQ9ayksa30pOwo="}]},{"name":"Tweak New Twitter","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://twitter.com/*","https://mobile.twitter.com/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1606763936073,"data":{}},"enabled":false,"position":30,"file_url":"https://greasyfork.org/scripts/387773-tweak-new-twitter/code/Tweak%20New%20Twitter.user.js","uuid":"aa309ae0-8106-4a23-b438-eee71789405f","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFR3ZWFrIE5ldyBUd2l0dGVyCi8vIEBkZXNjcmlwdGlvbiBTdGF5IG9uIHRoZSBMYXRlc3QgVHdlZXRzIHRpbWVsaW5lLCByZWR1Y2UgImVuZ2FnZW1lbnQiIGFuZCB0b25lIGRvd24gc29tZSBvZiBUd2l0dGVyJ3MgVUkKLy8gQG5hbWVzcGFjZSAgIGh0dHBzOi8vZ2l0aHViLmNvbS9pbnNpbi90d2Vhay1uZXctdHdpdHRlci8KLy8gQG1hdGNoICAgICAgIGh0dHBzOi8vdHdpdHRlci5jb20vKgovLyBAbWF0Y2ggICAgICAgaHR0cHM6Ly9tb2JpbGUudHdpdHRlci5jb20vKgovLyBAdmVyc2lvbiAgICAgMjYKLy8gPT0vVXNlclNjcmlwdD09CgovLyNyZWdpb24gQ29uZmlnICYgdmFyaWFibGVzCi8qKgogKiBEZWZhdWx0IGNvbmZpZyBlbmFibGVzIGFsbCBmZWF0dXJlcy4KICoKICogWW91J2xsIG5lZWQgdG8gZWRpdCB0aGUgY29uZmlnIG9iamVjdCBtYW51YWxseSBmb3Igbm93IGlmIHlvdSdyZSB1c2luZyB0aGlzCiAqIGFzIGEgdXNlciBzY3JpcHQuCiAqLwpsZXQgY29uZmlnID0gewogIGFsd2F5c1VzZUxhdGVzdFR3ZWV0czogdHJ1ZSwKICBmYXN0QmxvY2s6IHRydWUsCiAgaGlkZUFjY291bnRTd2l0Y2hlcjogdHJ1ZSwKICBoaWRlQm9va21hcmtzTmF2OiB0cnVlLAogIGhpZGVFeHBsb3JlTmF2OiB0cnVlLAogIGhpZGVMaXN0c05hdjogdHJ1ZSwKICBoaWRlTWVzc2FnZXNEcmF3ZXI6IHRydWUsCiAgaGlkZU1vcmVUd2VldHM6IHRydWUsCiAgaGlkZVNpZGViYXJDb250ZW50OiB0cnVlLAogIGhpZGVXaG9Ub0ZvbGxvd0V0YzogdHJ1ZSwKICBuYXZCYXNlRm9udFNpemU6IHRydWUsCiAgLyoqIEB0eXBlIHsnc2VwYXJhdGUnfCdoaWRlJ3wnaWdub3JlJ30gKi8KICByZXR3ZWV0czogKCdzZXBhcmF0ZScpLAogIC8qKiBAdHlwZSB7J2hpZ2hsaWdodCd8J2hpZGUnfCdpZ25vcmUnfSAqLwogIHZlcmlmaWVkQWNjb3VudHM6ICgnaWdub3JlJyksCn0KCmNvbmZpZy5lbmFibGVEZWJ1Z0xvZ2dpbmcgPSBmYWxzZQoKY29uc3QgSE9NRSA9ICdIb21lJwpjb25zdCBMQVRFU1RfVFdFRVRTID0gJ0xhdGVzdCBUd2VldHMnCmNvbnN0IE1FU1NBR0VTID0gJ01lc3NhZ2VzJwpjb25zdCBUSU1FTElORV9SRVRXRUVUUyA9ICdUaW1lbGluZSBSZXR3ZWV0cycKCmNvbnN0IFBST0ZJTEVfVElUTEVfUkUgPSAvXChAW2EtelxkX117MSwxNX1cKSQvaQpjb25zdCBUSVRMRV9OT1RJRklDQVRJT05fUkUgPSAvXlwoXGQrXCs/XCkgLwpjb25zdCBVUkxfVFdFRVRfSURfUkUgPSAvXC9zdGF0dXNcLyhcZCspJC8KY29uc3QgVVJMX1BIT1RPX1JFID0gL3Bob3RvXC9cZCQvCgpsZXQgU2VsZWN0b3JzID0gewogIEFDQ09VTlRfU1dJVENIRVI6ICdkaXZbZGF0YS10ZXN0aWQ9IlNpZGVOYXZfQWNjb3VudFN3aXRjaGVyX0J1dHRvbiJdJywKICBNRVNTQUdFU19EUkFXRVI6ICdkaXZbZGF0YS10ZXN0aWQ9IkRNRHJhd2VyIl0nLAogIE5BVl9IT01FX0xJTks6ICdhW2RhdGEtdGVzdGlkPSJBcHBUYWJCYXJfSG9tZV9MaW5rIl0nLAogIFBSSU1BUllfQ09MVU1OOiAnZGl2W2RhdGEtdGVzdGlkPSJwcmltYXJ5Q29sdW1uIl0nLAogIFBSSU1BUllfTkFWOiAnbmF2W2FyaWEtbGFiZWw9IlByaW1hcnkiXScsCiAgUFJPTU9URURfVFdFRVQ6ICdbZGF0YS10ZXN0aWQ9InBsYWNlbWVudFRyYWNraW5nIl0nLAogIFNJREVCQVJfQ09MVU1OOiAnZGl2W2RhdGEtdGVzdGlkPSJzaWRlYmFyQ29sdW1uIl0nLAogIFRJTUVMSU5FX0hFQURJTkc6ICdoMltyb2xlPSJoZWFkaW5nIl0nLAogIFRXRUVUOiAnZGl2W2RhdGEtdGVzdGlkPSJ0d2VldCJdJywKICBWRVJJRklFRF9USUNLOiAnc3ZnW2FyaWEtbGFiZWw9IlZlcmlmaWVkIGFjY291bnQiXScsCn0KCk9iamVjdC5hc3NpZ24oU2VsZWN0b3JzLCB7CiAgU0lERUJBUl9GT09URVI6IGAke1NlbGVjdG9ycy5TSURFQkFSX0NPTFVNTn0gbmF2YCwKICBTSURFQkFSX1BFT1BMRTogYCR7U2VsZWN0b3JzLlNJREVCQVJfQ09MVU1OfSBhc2lkZWAsCiAgU0lERUJBUl9UUkVORFM6IGAke1NlbGVjdG9ycy5TSURFQkFSX0NPTFVNTn0gc2VjdGlvbmAsCiAgVElNRUxJTkU6IGAke1NlbGVjdG9ycy5QUklNQVJZX0NPTFVNTn0gc2VjdGlvbiA+IGgxICsgZGl2W2FyaWEtbGFiZWxdID4gZGl2YCwKfSkKCi8qKiBUaXRsZSBvZiB0aGUgY3VycmVudCBwYWdlLCB3aXRob3V0IHRoZSAnIC8gVHdpdHRlcicgc3VmZml4ICovCmxldCBjdXJyZW50UGFnZSA9ICcnCgovKiogTm90aWZpY2F0aW9uIGNvdW50IGluIHRoZSB0aXRsZSAoaW5jbHVkaW5nIHRyYWlsaW5nIHNwYWNlKSwgZS5nLiAnKDEpICcgKi8KbGV0IGN1cnJlbnROb3RpZmljYXRpb25Db3VudCA9ICcnCgovKiogQ3VycmVudCBVUkwgcGF0aCAqLwpsZXQgY3VycmVudFBhdGggPSAnJwoKLyoqIEZsYWcgZm9yIGEgSG9tZSAvIExhdGVzdCBUd2VldHMgbGluayBoYXZpbmcgYmVlbiBjbGlja2VkICovCmxldCBob21lTGlua0NsaWNrZWQgPSBmYWxzZQoKLyoqCiAqIE11dGF0aW9uT2JzZXJ2ZXJzIGFjdGl2ZSBvbiB0aGUgY3VycmVudCBwYWdlCiAqIEB0eXBlIE11dGF0aW9uT2JzZXJ2ZXJbXQogKi8KbGV0IHBhZ2VPYnNlcnZlcnMgPSBbXQovLyNlbmRyZWdpb24KCi8vI3JlZ2lvbiBVdGlsaXR5IGZ1bmN0aW9ucwpmdW5jdGlvbiBhZGRTdHlsZShjc3MpIHsKICBsZXQgJHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKQogICRzdHlsZS5kYXRhc2V0Lmluc2VydGVkQnkgPSAndHdlYWstbmV3LXR3aXR0ZXInCiAgJHN0eWxlLnRleHRDb250ZW50ID0gY3NzCiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCgkc3R5bGUpCiAgcmV0dXJuICRzdHlsZQp9CgovKioKICogQHJldHVybnMge1Byb21pc2U8SFRNTEVsZW1lbnQ+fQogKi8KZnVuY3Rpb24gZ2V0RWxlbWVudChzZWxlY3RvciwgewogIG5hbWUgPSBudWxsLAogIHN0b3BJZiA9IG51bGwsCiAgdGFyZ2V0ID0gZG9jdW1lbnQsCiAgdGltZW91dCA9IEluZmluaXR5LAp9ID0ge30pIHsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgIGxldCByYWZJZAogICAgbGV0IHRpbWVvdXRJZAoKICAgIGZ1bmN0aW9uIHN0b3AoJGVsZW1lbnQsIHJlYXNvbikgewogICAgICBpZiAoJGVsZW1lbnQgPT0gbnVsbCkgewogICAgICAgIGxvZyhgc3RvcHBlZCB3YWl0aW5nIGZvciAke25hbWUgfHwgc2VsZWN0b3J9IGFmdGVyICR7cmVhc29ufWApCiAgICAgIH0KICAgICAgaWYgKHJhZklkKSB7CiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpCiAgICAgIH0KICAgICAgaWYgKHRpbWVvdXRJZCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpCiAgICAgIH0KICAgICAgcmVzb2x2ZSgkZWxlbWVudCkKICAgIH0KCiAgICBpZiAodGltZW91dCAhPT0gSW5maW5pdHkpIHsKICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChzdG9wLCB0aW1lb3V0LCBudWxsLCBgJHt0aW1lb3V0fW1zIHRpbWVvdXRgKQogICAgfQoKICAgIGZ1bmN0aW9uIHF1ZXJ5RWxlbWVudCgpIHsKICAgICAgbGV0ICRlbGVtZW50ID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpCiAgICAgIGlmICgkZWxlbWVudCkgewogICAgICAgIHN0b3AoJGVsZW1lbnQpCiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RvcElmICE9IG51bGwgJiYgc3RvcElmKCkgPT09IHRydWUpIHsKICAgICAgICBzdG9wKG51bGwsICdzdG9wSWYgY29uZGl0aW9uIG1ldCcpCiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocXVlcnlFbGVtZW50KQogICAgICB9CiAgICB9CgogICAgcXVlcnlFbGVtZW50KCkKICB9KQp9CgpmdW5jdGlvbiBsb2coLi4uYXJncykgewogIGlmIChjb25maWcuZW5hYmxlRGVidWdMb2dnaW5nKSB7CiAgICBjb25zb2xlLmxvZyhgVFdUJHtjdXJyZW50UGFnZSA/IGAoJHtjdXJyZW50UGFnZX0pYCA6ICcnfWAsIC4uLmFyZ3MpCiAgfQp9CgovKioKICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgQVBJLgogKgogKiBUaGUgbGlzdGVuZXIgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IHRvIHN1cHBvcnQgdXNpbmcgYW4gb2JzZXJ2ZXIgYW5kIGl0cwogKiBvcHRpb25zIGFzIGEgdHJpZ2dlciBmb3IgYW55IGNoYW5nZSwgd2l0aG91dCBsb29raW5nIGF0IE11dGF0aW9uUmVjb3Jkcy4KICoKICogQHBhcmFtIHtOb2RlfSAkZWxlbWVudAogKiBAcGFyYW0ge011dGF0aW9uQ2FsbGJhY2t9IGNhbGxiYWNrCiAqIEBwYXJhbSB7TXV0YXRpb25PYnNlcnZlckluaXR9IG9wdGlvbnMKICovCmZ1bmN0aW9uIG9ic2VydmVFbGVtZW50KCRlbGVtZW50LCBjYWxsYmFjaywgb3B0aW9ucyA9IHtjaGlsZExpc3Q6IHRydWV9KSB7CiAgbGV0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spCiAgY2FsbGJhY2soW10sIG9ic2VydmVyKQogIG9ic2VydmVyLm9ic2VydmUoJGVsZW1lbnQsIG9wdGlvbnMpCiAgcmV0dXJuIG9ic2VydmVyCn0KCmZ1bmN0aW9uIHBhZ2VJc05vdChwYWdlKSB7CiAgcmV0dXJuICgpID0+IHBhZ2UgIT0gY3VycmVudFBhZ2UKfQoKZnVuY3Rpb24gcGF0aElzTm90KHBhdGgpIHsKICByZXR1cm4gKCkgPT4gcGF0aCAhPSBjdXJyZW50UGF0aAp9CgpmdW5jdGlvbiBzKG4pIHsKICByZXR1cm4gbiA9PSAxID8gJycgOiAncycKfQovLyNlbmRyZWdpb24KCi8vI3JlZ2lvbiBHbG9iYWwgb2JzZXJ2ZXJzCmZ1bmN0aW9uIG9ic2VydmVIdG1sRm9udFNpemUoKSB7CiAgbGV0ICRodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpCiAgbGV0ICRzdHlsZSA9IGFkZFN0eWxlKCcnKQogIGxldCBsYXN0Rm9udFNpemUgPSAnJwoKICBsb2coJ29ic2VydmluZyBodG1sIHN0eWxlIGF0dHJpYnV0ZSBmb3IgZm9udC1zaXplIGNoYW5nZXMnKQogIGxldCBvYnNlcnZlciA9IG9ic2VydmVFbGVtZW50KCRodG1sLCAoKSA9PiB7CiAgICBpZiAoJGh0bWwuc3R5bGUuZm9udFNpemUgIT0gbGFzdEZvbnRTaXplKSB7CiAgICAgIGxhc3RGb250U2l6ZSA9ICRodG1sLnN0eWxlLmZvbnRTaXplCiAgICAgIGxvZyhgc2V0dGluZyBuYXYgZm9udCBzaXplIHRvICR7bGFzdEZvbnRTaXplfWApCiAgICAgICRzdHlsZS50ZXh0Q29udGVudCA9IFsKICAgICAgICBgJHtTZWxlY3RvcnMuUFJJTUFSWV9OQVZ9IGRpdltkaXI9ImF1dG8iXSBzcGFuIHsgZm9udC1zaXplOiAke2xhc3RGb250U2l6ZX07IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH1gLAogICAgICAgIGAke1NlbGVjdG9ycy5QUklNQVJZX05BVn0gZGl2W2Rpcj0iYXV0byJdIHsgbWFyZ2luLXRvcDogLTRweDsgfWAKICAgICAgXS5qb2luKCdcbicpCiAgICB9CiAgfSwgewogICAgYXR0cmlidXRlczogdHJ1ZSwKICAgIGF0dHJpYnV0ZUZpbHRlcjogWydzdHlsZSddCiAgfSkKCiAgcmV0dXJuIHsKICAgIGRpc2Nvbm5lY3QoKSB7CiAgICAgICRzdHlsZS5yZW1vdmUoKQogICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCkKICAgIH0KICB9Cn0KCmFzeW5jIGZ1bmN0aW9uIG9ic2VydmVUaXRsZSgpIHsKICBsZXQgJHRpdGxlID0gYXdhaXQgZ2V0RWxlbWVudCgndGl0bGUnLCB7bmFtZTogJzx0aXRsZT4nfSkKICBsb2coJ29ic2VydmluZyA8dGl0bGU+JykKICByZXR1cm4gb2JzZXJ2ZUVsZW1lbnQoJHRpdGxlLCAoKSA9PiBvblRpdGxlQ2hhbmdlKCR0aXRsZS50ZXh0Q29udGVudCksIHsKICAgIGNoaWxkTGlzdDogdHJ1ZSwKICB9KQp9Cgphc3luYyBmdW5jdGlvbiBvYnNlcnZlUG9wdXBzKCkgewogIGxldCAka2V5Ym9hcmRXcmFwcGVyID0gYXdhaXQgZ2V0RWxlbWVudCgnW2RhdGEtYXQtc2hvcnRjdXRrZXlzXScsIHsKICAgIG5hbWU6ICdrZXlib2FyZCB3cmFwcGVyJywKICB9KQogIGxvZygnb2JzZXJ2aW5nIHBvcHVwcycpCiAgb2JzZXJ2ZUVsZW1lbnQoJGtleWJvYXJkV3JhcHBlci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLCAobXV0YXRpb25zKSA9PiB7CiAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHsKICAgICAgLy8gVGhlIGZpcnN0IHBvcHVwIHRha2VzIGFub3RoZXIgdGljayB0byByZW5kZXIgY29udGVudAogICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goJGVsID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBvblBvcHVwKCRlbCkpKQogICAgfSkKICB9KQp9Ci8vI2VuZHJlZ2lvbgoKLy8jcmVnaW9uIFBhZ2Ugb2JzZXJ2ZXJzCmFzeW5jIGZ1bmN0aW9uIG9ic2VydmVTaWRlYmFyQXBwZWFyYW5jZShwYWdlKSB7CiAgbGV0ICRwcmltYXJ5Q29sdW1uID0gYXdhaXQgZ2V0RWxlbWVudChTZWxlY3RvcnMuUFJJTUFSWV9DT0xVTU4sIHsKICAgIG5hbWU6ICdwcmltYXJ5IGNvbHVtbicsCiAgICBzdG9wSWY6IHBhZ2VJc05vdChwYWdlKSwKICB9KQogIGxvZygnb2JzZXJ2aW5nIHJlc3BvbnNpdmUgc2lkZWJhcicpCiAgcGFnZU9ic2VydmVycy5wdXNoKAogICAgb2JzZXJ2ZUVsZW1lbnQoJHByaW1hcnlDb2x1bW4ucGFyZW50Tm9kZSwgKG11dGF0aW9ucykgPT4gewogICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHsKICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKGVsKSA9PiB7CiAgICAgICAgICBpZiAoLyoqIEB0eXBlIHtIVE1MRWxlbWVudH0gKi8gKGVsKS5kYXRhc2V0LnRlc3RpZCA9PSAnc2lkZWJhckNvbHVtbicpIHsKICAgICAgICAgICAgbG9nKCdzaWRlYmFyIGFwcGVhcmVkJykKICAgICAgICAgICAgaGlkZVNpZGViYXJDb250ZW50cyhwYWdlKQogICAgICAgICAgfQogICAgICAgIH0pCiAgICAgIH0pCiAgICB9KQogICkKfQoKYXN5bmMgZnVuY3Rpb24gb2JzZXJ2ZVRpbWVsaW5lKHBhZ2UpIHsKICBsZXQgJHRpbWVsaW5lID0gYXdhaXQgZ2V0RWxlbWVudChTZWxlY3RvcnMuVElNRUxJTkUsIHsKICAgIG5hbWU6ICd0aW1lbGluZScsCiAgICBzdG9wSWY6IHBhZ2VJc05vdChwYWdlKSwKICB9KQogIGlmICgkdGltZWxpbmUgPT0gbnVsbCkgewogICAgcmV0dXJuCiAgfQoKICAvLyBPbiAyMDIwLTA0LTAzIFR3aXR0ZXIgc3dpdGNoZWQgdG8gYSBuZXcgd2F5IG9mIHJlbmRlcmluZyB0aGUgdGltZWxpbmUgd2hpY2ggcmVwbGFjZXMgYW4gaW5pdGlhbAogIC8vIGNvbnRhaW5lciB3aXRoIHRoZSByZWFsIGVsZW1lbnQgd2hpY2ggaG9sZHMgdGltZWxpbmUgdHdlZXRzIGFuZCByZWR1Y2VzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKICAvLyB3cmFwcGluZyB0aGUgdGltZWxpbmUuCiAgLy8KICAvLyB2MS45IHdhcyByZWxlYXNlZCB0byBoYW5kbGUgdGhpcy4KICAvLwogIC8vIE9uIDIwMjAtMDQtMDUgdGhleSBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBvbGQgbWV0aG9kLgogIC8vCiAgLy8gVGhpcyBhdHRlbXB0cyB0byBzdXBwb3J0IGJvdGggYXBwcm9hY2hlcyBpbiBjYXNlIHRoZXkga2VlcGluZyBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgdHdvLgoKICAvLyBUaGUgIm5ldyIgaW5pdGFsIHRpbWVsaW5lIGVsZW1lbnQgaXMgYSBwbGFjZWhvbGRlciB3aGljaCBkb2Vzbid0IGhhdmUgYSBzdHlsZSBhdHRyaWJ1dGUKICAvLyBUaGUgIm9sZCIgdGltZWxpbmUgaGFzIDIgd3JhcHBlciBkaXZzIHdoaWNoIGFwcGx5IHBhZGRpbmcgdmlhIHRoZSBET00gLnN0eWxlIG9iamVjdAogIGlmICgkdGltZWxpbmUuaGFzQXR0cmlidXRlKCdzdHlsZScpKSB7CiAgICAvLyBUaGUgIm9sZCIgdGltZWxpbmUgaXMgbmVzdGVkIG9uZSBsZXZlbCBkZWVwZXIgYW5kIHRoZSBpbml0aWFsIGNvbnRhaW5lciBoYXMgcGFkZGluZy1ib3R0b20KICAgIC8vIDxkaXYgYXJpYS1sYWJlbD0iVGltZWxpbmU6IFlvdXIgSG9tZSBUaW1lbGluZSI+CiAgICAvLyAgIDxkaXYgc3R5bGU9InBhZGRpbmctYm90dG9tOiAwcHgiPiA8IS0tIGN1cnJlbnQgJHRpbWVsaW5lIC0tPgogICAgLy8gICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOiAuLi5weDsgcGFkZGluZy1ib3R0b206IC4uLnB4Ij4gPCEtLSB3ZSB3YW50IHRvIG9ic2VydmUgdGhpcyAtLT4KICAgIC8vICAgICAgIDxkaXY+IDwhLS0gdHdlZXQgZWxlbWVudHMgYXJlIGF0IHRoaXMgbGV2ZWwgLS0+CiAgICAvLyAgICAgICAuLi4KICAgIGlmICgkdGltZWxpbmUuc3R5bGUucGFkZGluZ0JvdHRvbSkgewogICAgICAkdGltZWxpbmUgPSAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLyAoJHRpbWVsaW5lLmZpcnN0RWxlbWVudENoaWxkKQogICAgICBsb2coJ29ic2VydmluZyAib2xkIiB0aW1lbGluZScsIHskdGltZWxpbmV9KQogICAgfQogICAgZWxzZSB7CiAgICAgIGxvZygnb2JzZXJ2aW5nICJuZXciIHRpbWVsaW5lJywgeyR0aW1lbGluZX0pCiAgICB9CiAgICBwYWdlT2JzZXJ2ZXJzLnB1c2goCiAgICAgIG9ic2VydmVFbGVtZW50KCR0aW1lbGluZSwgKCkgPT4gb25UaW1lbGluZUNoYW5nZSgkdGltZWxpbmUsIHBhZ2UpKQogICAgKQogIH0KICBlbHNlIHsKICAgIGxvZygnd2FpdGluZyBmb3IgcmVhbCAibmV3IiB0aW1lbGluZScpCiAgICBwYWdlT2JzZXJ2ZXJzLnB1c2goCiAgICAgIG9ic2VydmVFbGVtZW50KCR0aW1lbGluZS5wYXJlbnROb2RlLCAobXV0YXRpb25zKSA9PiB7CiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7CiAgICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKCR0aW1lbGluZSkgPT4gewogICAgICAgICAgICBsb2coJ29ic2VydmluZyAibmV3IiB0aW1lbGluZScsIHskdGltZWxpbmV9KQogICAgICAgICAgICBwYWdlT2JzZXJ2ZXJzLnB1c2goCiAgICAgICAgICAgICAgb2JzZXJ2ZUVsZW1lbnQoJHRpbWVsaW5lLCAoKSA9PiBvblRpbWVsaW5lQ2hhbmdlKCR0aW1lbGluZSwgcGFnZSkpCiAgICAgICAgICAgICkKICAgICAgICAgIH0pCiAgICAgICAgfSkKICAgICAgfSkKICAgICkKICB9Cn0KLy8jZW5kcmVnaW9uCgovLyNyZWdpb24gVHdlYWsgZnVuY3Rpb25zCmFzeW5jIGZ1bmN0aW9uIGFkZFJldHdlZXRzSGVhZGVyKHBhZ2UpIHsKICBsZXQgJHRpbWVsaW5lVGl0bGUgPSBhd2FpdCBnZXRFbGVtZW50KCdtYWluIGgyJywgewogICAgbmFtZTogJ3RpbWVsaW5lIHRpdGxlJywKICAgIHN0b3BJZjogcGFnZUlzTm90KHBhZ2UpLAogIH0pCiAgaWYgKCR0aW1lbGluZVRpdGxlICE9IG51bGwgJiYKICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3R3dF9yZXR3ZWV0cycpID09IG51bGwpIHsKICAgIGxvZygnaW5zZXJ0aW5nIFJldHdlZXRzIGhlYWRlcicpCiAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykKICAgIGRpdi5pbm5lckhUTUwgPSAkdGltZWxpbmVUaXRsZS5wYXJlbnRFbGVtZW50Lm91dGVySFRNTAogICAgbGV0ICRyZXR3ZWV0cyA9IGRpdi5maXJzdEVsZW1lbnRDaGlsZAogICAgJHJldHdlZXRzLnF1ZXJ5U2VsZWN0b3IoJ2gyJykuaWQgPSAndHd0X3JldHdlZXRzJwogICAgJHJldHdlZXRzLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKS50ZXh0Q29udGVudCA9ICdSZXR3ZWV0cycKICAgIC8vIFRoaXMgc2NyaXB0IGFzc3VtZXMgbmF2aWdhdGlvbiBoYXMgb2NjdXJyZWQgd2hlbiB0aGUgZG9jdW1lbnQgdGl0bGUgY2hhbmdlcywKICAgIC8vIHNvIGJ5IGNoYW5naW5nIHRoZSB0aXRsZSB0byAiUmV0d2VldHMiIHdlIGVmZmVjdGl2ZWx5IGZha2UgbmF2aWdhdGlvbiB0byBhCiAgICAvLyBub24tZXhpc3RlbnQgUmV0d2VldHMgcGFnZS4KICAgICRyZXR3ZWV0cy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgaWYgKCFkb2N1bWVudC50aXRsZS5zdGFydHNXaXRoKFRJTUVMSU5FX1JFVFdFRVRTKSkgewogICAgICAgIHNldFRpdGxlKFRJTUVMSU5FX1JFVFdFRVRTKQogICAgICB9CiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wOiAwfSkKICAgIH0pCiAgICAkdGltZWxpbmVUaXRsZS5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsICRyZXR3ZWV0cykKICAgIC8vIEdvIGJhY2sgdG8gdGhlIG1haW4gdGltZWxpbmUgZnJvbSBSZXR3ZWV0cyB3aGVuIHRoZSBMYXRlc3QgVHdlZXRzIC8gSG9tZSBoZWFkaW5nIGlzIGNsaWNrZWQKICAgICR0aW1lbGluZVRpdGxlLnBhcmVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgIGlmICghZG9jdW1lbnQudGl0bGUuc3RhcnRzV2l0aChwYWdlKSkgewogICAgICAgIGhvbWVMaW5rQ2xpY2tlZCA9IHRydWUKICAgICAgICBzZXRUaXRsZShwYWdlKQogICAgICB9CiAgICB9KQogICAgLy8gR28gYmFjayB0byB0aGUgbWFpbiB0aW1lbGluZSBmcm9tIFJldHdlZXRzIHdoZW4gdGhlIEhvbWUgbmF2IGxpbmsgaXMgY2xpY2tlZAogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvcnMuTkFWX0hPTUVfTElOSykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgIGhvbWVMaW5rQ2xpY2tlZCA9IHRydWUKICAgICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lID09ICcvaG9tZScgJiYgIWRvY3VtZW50LnRpdGxlLnN0YXJ0c1dpdGgocGFnZSkpIHsKICAgICAgICBzZXRUaXRsZShwYWdlKQogICAgICB9CiAgICB9KQogIH0KfQoKZnVuY3Rpb24gYWRkU3RhdGljQ3NzKCkgewogIHZhciBjc3NSdWxlcyA9IFtdCiAgdmFyIGhpZGVDc3NTZWxlY3RvcnMgPSBbXQogIGlmIChjb25maWcuaGlkZVNpZGViYXJDb250ZW50KSB7CiAgICBoaWRlQ3NzU2VsZWN0b3JzLnB1c2goCiAgICAgIFNlbGVjdG9ycy5TSURFQkFSX1RSRU5EUywKICAgICAgU2VsZWN0b3JzLlNJREVCQVJfUEVPUExFLAogICAgICBTZWxlY3RvcnMuU0lERUJBUl9GT09URVIKICAgICkKICB9CiAgaWYgKGNvbmZpZy5oaWRlRXhwbG9yZU5hdikgewogICAgaGlkZUNzc1NlbGVjdG9ycy5wdXNoKGAke1NlbGVjdG9ycy5QUklNQVJZX05BVn0gYVtocmVmPSIvZXhwbG9yZSJdYCkKICB9CiAgaWYgKGNvbmZpZy5oaWRlQm9va21hcmtzTmF2KSB7CiAgICBoaWRlQ3NzU2VsZWN0b3JzLnB1c2goYCR7U2VsZWN0b3JzLlBSSU1BUllfTkFWfSBhW2hyZWY9Ii9pL2Jvb2ttYXJrcyJdYCkKICB9CiAgaWYgKGNvbmZpZy5oaWRlTGlzdHNOYXYpIHsKICAgIGhpZGVDc3NTZWxlY3RvcnMucHVzaChgJHtTZWxlY3RvcnMuUFJJTUFSWV9OQVZ9IGFbaHJlZio9Ii9saXN0cyJdYCkKICB9CiAgaWYgKGNvbmZpZy5oaWRlQWNjb3VudFN3aXRjaGVyKSB7CiAgICBoaWRlQ3NzU2VsZWN0b3JzLnB1c2goU2VsZWN0b3JzLkFDQ09VTlRfU1dJVENIRVIpCiAgfQogIGlmIChjb25maWcuaGlkZU1lc3NhZ2VzRHJhd2VyKSB7CiAgICBoaWRlQ3NzU2VsZWN0b3JzLnB1c2goU2VsZWN0b3JzLk1FU1NBR0VTX0RSQVdFUikKICB9CiAgaWYgKGhpZGVDc3NTZWxlY3RvcnMubGVuZ3RoID4gMCkgewogICAgY3NzUnVsZXMucHVzaChgJHtoaWRlQ3NzU2VsZWN0b3JzLmpvaW4oJywgJyl9IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9YCkKICB9CiAgaWYgKGNzc1J1bGVzLmxlbmd0aCA+IDApIHsKICAgIGFkZFN0eWxlKGNzc1J1bGVzLmpvaW4oJ1xuJykpCiAgfQp9CgpmdW5jdGlvbiBnZXRUd2VldFR5cGUoJHR3ZWV0KSB7CiAgaWYgKCR0d2VldC5jbG9zZXN0KFNlbGVjdG9ycy5QUk9NT1RFRF9UV0VFVCkpIHsKICAgIHJldHVybiAnUFJPTU9URURfVFdFRVQnCiAgfQogIGlmICgkdHdlZXQucHJldmlvdXNFbGVtZW50U2libGluZyAhPSBudWxsICYmCiAgICAgICR0d2VldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLnRleHRDb250ZW50LmluY2x1ZGVzKCdSZXR3ZWV0ZWQnKSkgewogICAgcmV0dXJuICdSRVRXRUVUJwogIH0KICByZXR1cm4gJ1RXRUVUJwp9Cgphc3luYyBmdW5jdGlvbiBoaWRlU2lkZWJhckNvbnRlbnRzKHBhZ2UpIHsKICBsZXQgdHJlbmRzID0gZ2V0RWxlbWVudChTZWxlY3RvcnMuU0lERUJBUl9UUkVORFMsIHsKICAgIG5hbWU6ICdzaWRlYmFyIHRyZW5kcycsCiAgICBzdG9wSWY6IHBhZ2VJc05vdChwYWdlKSwKICAgIHRpbWVvdXQ6IDQwMDAsCiAgfSkudGhlbigoJHRyZW5kcykgPT4gewogICAgaWYgKCR0cmVuZHMgPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2UKICAgIH0KICAgIGxldCAkdHJlbmRzTW9kdWxlID0gJHRyZW5kcy5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudAogICAgJHRyZW5kc01vZHVsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCiAgICAvLyBIaWRlIHN1cnJvdW5kaW5nIGVsZW1lbnRzIHdoaWNoIGRyYXcgc2VwYXJhdG9ycyBiZXR3ZWVuIG1vZHVsZXMKICAgIGlmICgkdHJlbmRzTW9kdWxlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYKICAgICAgICAkdHJlbmRzTW9kdWxlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2hpbGRFbGVtZW50Q291bnQgPT0gMCkgewogICAgICAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLyAoJHRyZW5kc01vZHVsZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCiAgICB9CiAgICBpZiAoJHRyZW5kc01vZHVsZS5uZXh0RWxlbWVudFNpYmxpbmcgJiYKICAgICAgICAkdHJlbmRzTW9kdWxlLm5leHRFbGVtZW50U2libGluZy5jaGlsZEVsZW1lbnRDb3VudCA9PSAwKSB7CiAgICAgIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovICgkdHJlbmRzTW9kdWxlLm5leHRFbGVtZW50U2libGluZykuc3R5bGUuZGlzcGxheSA9ICdub25lJwogICAgfQogICAgcmV0dXJuIHRydWUKICB9KQoKICBsZXQgcGVvcGxlID0gZ2V0RWxlbWVudChTZWxlY3RvcnMuU0lERUJBUl9QRU9QTEUsIHsKICAgIG5hbWU6ICdzaWRlYmFyIHBlb3BsZScsCiAgICBzdG9wSWY6IHBhZ2VJc05vdChwYWdlKSwKICAgIHRpbWVvdXQ6IDQwMDAsCiAgfSkudGhlbigoJHBlb3BsZSkgPT4gewogICAgaWYgKCRwZW9wbGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2UKICAgIH0KICAgIGxldCAkcGVvcGxlTW9kdWxlCiAgICBpZiAoJHBlb3BsZS5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSA9PSAnUmVsZXZhbnQgcGVvcGxlJykgewogICAgICAvLyAiUmVsZXZhbnQgcGVvcGxlIiBzZWN0aW9uIHdoZW4gdmlld2luZyBhIFR3ZWV0L3RocmVhZAogICAgICAkcGVvcGxlTW9kdWxlID0gJHBlb3BsZS5wYXJlbnRFbGVtZW50CiAgICB9CiAgICBlbHNlIHsKICAgICAgLy8gIldobyB0byBmb2xsb3ciIHNlY3Rpb24KICAgICAgJHBlb3BsZU1vZHVsZSA9ICRwZW9wbGUucGFyZW50RWxlbWVudAogICAgfQogICAgJHBlb3BsZU1vZHVsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCiAgICByZXR1cm4gdHJ1ZQogIH0pCgogIGxldCBbaGlkVHJlbmRzLCBoaWRQZW9wbGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RyZW5kcywgcGVvcGxlXSkKICBsb2coaGlkVHJlbmRzID09IHRydWUgJiYgaGlkUGVvcGxlID09IHRydWUKICAgID8gJ2hpZCBhbGwgc2lkZWJhciBjb250ZW50JwogICAgOiAnc3RvcHBlZCB3YWl0aW5nIGZvciBzaWRlYmFyIGNvbnRlbnQnKQp9CgpmdW5jdGlvbiBvblBvcHVwKCR0b3BMZXZlbEVsZW1lbnQpIHsKICAvLyBCbG9jayBidXR0b24KICBsZXQgJGNvbmZpcm1CdXR0b24gPSAkdG9wTGV2ZWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdltkYXRhLXRlc3RpZD0iY29uZmlybWF0aW9uU2hlZXRDb25maXJtIl0nKQogIGlmICgkY29uZmlybUJ1dHRvbiAmJiAkY29uZmlybUJ1dHRvbi5pbm5lclRleHQgPT0gJ0Jsb2NrJykgewogICAgaWYgKGNvbmZpZy5mYXN0QmxvY2spIHsKICAgICAgbG9nKCdGYXN0IGJsb2NraW5nJykKICAgICAgJGNvbmZpcm1CdXR0b24uY2xpY2soKQogICAgfQogICAgcmV0dXJuCiAgfQp9CgovKiogQHR5cGVkZWYgeydUV0VFVCd8J1JFVFdFRVQnfCdQUk9NT1RFRF9UV0VFVCd8J0hFQURJTkcnfSBUaW1lbGluZUl0ZW1UeXBlICovCgpmdW5jdGlvbiBvblRpbWVsaW5lQ2hhbmdlKCR0aW1lbGluZSwgcGFnZSkgewogIGxvZyhgcHJvY2Vzc2luZyAkeyR0aW1lbGluZS5jaGlsZHJlbi5sZW5ndGh9IHRpbWVsaW5lIGl0ZW0ke3MoJHRpbWVsaW5lLmNoaWxkcmVuLmxlbmd0aCl9YCkKICAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLwogIGxldCAkcHJldmlvdXNJdGVtID0gbnVsbAogIC8qKiBAdHlwZSB7P1RpbWVsaW5lSXRlbVR5cGV9ICovCiAgbGV0IHByZXZpb3VzVGltZWxpbmVJdGVtVHlwZSA9IG51bGwKICBmb3IgKGxldCAkaXRlbSBvZiAkdGltZWxpbmUuY2hpbGRyZW4pIHsKICAgIC8qKiBAdHlwZSB7P1RpbWVsaW5lSXRlbVR5cGV9ICovCiAgICBsZXQgdGltZWxpbmVJdGVtVHlwZSA9IG51bGwKICAgIGxldCBoaWRlSXRlbSA9IG51bGwKICAgIGxldCAkdHdlZXQgPSAkaXRlbS5xdWVyeVNlbGVjdG9yKFNlbGVjdG9ycy5UV0VFVCkKCiAgICBpZiAoJHR3ZWV0ICE9IG51bGwpIHsKICAgICAgdGltZWxpbmVJdGVtVHlwZSA9IGdldFR3ZWV0VHlwZSgkdHdlZXQpCiAgICAgIGlmIChwYWdlID09IExBVEVTVF9UV0VFVFMgfHwgcGFnZSA9PSBUSU1FTElORV9SRVRXRUVUUyB8fCBwYWdlID09IEhPTUUpIHsKICAgICAgICBoaWRlSXRlbSA9IHNob3VsZEhpZGVUd2VldCh0aW1lbGluZUl0ZW1UeXBlLCBwYWdlKQogICAgICB9CiAgICB9CgogICAgaWYgKHRpbWVsaW5lSXRlbVR5cGUgPT0gbnVsbCAmJiBjb25maWcuaGlkZVdob1RvRm9sbG93RXRjKSB7CiAgICAgIC8vICJXaG8gdG8gZm9sbG93IiwgIkZvbGxvdyBzb21lIFRvcGljcyIgZXRjLiBoZWFkaW5ncwogICAgICBpZiAoJGl0ZW0ucXVlcnlTZWxlY3RvcihTZWxlY3RvcnMuVElNRUxJTkVfSEVBRElORykpIHsKICAgICAgICB0aW1lbGluZUl0ZW1UeXBlID0gJ0hFQURJTkcnCiAgICAgICAgaGlkZUl0ZW0gPSB0cnVlCiAgICAgICAgLy8gQWxzbyBoaWRlIHRoZSBkaXZpZGVyIGFib3ZlIHRoZSBoZWFkaW5nCiAgICAgICAgaWYgKCRwcmV2aW91c0l0ZW0gJiYgJHByZXZpb3VzSXRlbS5pbm5lclRleHQgPT0gJycpIHsKICAgICAgICAgIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovICgkcHJldmlvdXNJdGVtLmZpcnN0RWxlbWVudENoaWxkKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKHRpbWVsaW5lSXRlbVR5cGUgPT0gbnVsbCkgewogICAgICAvLyBBc3N1bWUgYSBub24taWRlbnRpZmllZCBpdGVtIGZvbGxvd2luZyBhbiBpZGVudGlmaWVkIGl0ZW0gaXMgcmVsYXRlZCB0byBpdAogICAgICAvLyAiV2hvIHRvIGZvbGxvdyIgdXNlcnMgYW5kICJGb2xsb3cgc29tZSBUb3BpY3MiIHRvcGljcyBhcHBlYXIgaW4gc3Vic2VxdWVudCBpdGVtcwogICAgICAvLyAiU2hvdyB0aGlzIHRocmVhZCIgYW5kICJTaG93IG1vcmUiIGxpbmtzIGFwcGVhciBpbiBzdWJzZXF1ZW50IGl0ZW1zCiAgICAgIGlmIChwcmV2aW91c1RpbWVsaW5lSXRlbVR5cGUgIT0gbnVsbCkgewogICAgICAgIGhpZGVJdGVtID0gcHJldmlvdXNUaW1lbGluZUl0ZW1UeXBlID09ICdIRUFESU5HJyB8fCBzaG91bGRIaWRlVHdlZXQocHJldmlvdXNUaW1lbGluZUl0ZW1UeXBlLCBwYWdlKQogICAgICB9CiAgICAgIC8vIFRoZSBmaXJzdCBpdGVtIGluIHRoZSB0aW1lbGluZSBpcyBzb21ldGltZXMgYW4gZW1wdHkgcGxhY2Vob2xkZXIgPGRpdj4KICAgICAgZWxzZSBpZiAoJGl0ZW0gIT09ICR0aW1lbGluZS5maXJzdEVsZW1lbnRDaGlsZCkgewogICAgICAgIC8vIFdlJ3JlIHByb2JhYmx5IGFsc28gbWlzc2luZyBzb21lIHNwYWNlciAvIGRpdmlkZXIgbm9kZXMKICAgICAgICBsb2coJ3VuaGFuZGxlZCB0aW1lbGluZSBpdGVtJywgJGl0ZW0pCiAgICAgIH0KICAgIH0KCiAgICBpZiAoaGlkZUl0ZW0gIT09IHRydWUgJiYKICAgICAgICBjb25maWcudmVyaWZpZWRBY2NvdW50cyA9PT0gJ2hpZGUnICYmCiAgICAgICAgJGl0ZW0ucXVlcnlTZWxlY3RvcihTZWxlY3RvcnMuVkVSSUZJRURfVElDSykpIHsKICAgICAgaGlkZUl0ZW0gPSB0cnVlCiAgICB9CgogICAgaWYgKGhpZGVJdGVtICE9IG51bGwpIHsKICAgICAgLyoqIEB0eXBlIHtIVE1MRWxlbWVudH0gKi8gKCRpdGVtLmZpcnN0RWxlbWVudENoaWxkKS5zdHlsZS5kaXNwbGF5ID0gaGlkZUl0ZW0gPyAnbm9uZScgOiAnJwogICAgICAvLyBMb2cgdGhlc2Ugb3V0IGFzIHRoZXkgY2FuJ3QgYmUgcmVsaWFibHkgdHJpZ2dlcmVkIGZvciB0ZXN0aW5nCiAgICAgIGlmICh0aW1lbGluZUl0ZW1UeXBlID09ICdIRUFESU5HJyB8fCBwcmV2aW91c1RpbWVsaW5lSXRlbVR5cGUgPT0gJ0hFQURJTkcnKSB7CiAgICAgICAgbG9nKGBoaWQgYSAke3ByZXZpb3VzVGltZWxpbmVJdGVtVHlwZSA9PSAnSEVBRElORycgPyAncG9zdC0nIDogJyd9aGVhZGluZyBpdGVtYCwgJGl0ZW0pCiAgICAgIH0KICAgIH0KCiAgICBpZiAoaGlkZUl0ZW0gIT09IHRydWUgJiYKICAgICAgICBjb25maWcudmVyaWZpZWRBY2NvdW50cyA9PT0gJ2hpZ2hsaWdodCcgJiYKICAgICAgICAkaXRlbS5xdWVyeVNlbGVjdG9yKFNlbGVjdG9ycy5WRVJJRklFRF9USUNLKSkgewogICAgICAkaXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyOSwgMTYxLCAyNDIsIDAuMjUpJwogICAgfQoKICAgICRwcmV2aW91c0l0ZW0gPSAkaXRlbQogICAgLy8gSWYgd2UgaGlkIGEgaGVhZGluZywga2VlcCBoaWRpbmcgZXZlcnl0aGluZyBhZnRlciBpdCB1bnRpbCB3ZSBoaXQgYSB0d2VldAogICAgaWYgKCEocHJldmlvdXNUaW1lbGluZUl0ZW1UeXBlID09ICdIRUFESU5HJyAmJiB0aW1lbGluZUl0ZW1UeXBlID09IG51bGwpKSB7CiAgICAgIHByZXZpb3VzVGltZWxpbmVJdGVtVHlwZSA9IHRpbWVsaW5lSXRlbVR5cGUKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIG9uVGl0bGVDaGFuZ2UodGl0bGUpIHsKICAvLyBJZ25vcmUgYW55IGxlYWRpbmcgbm90aWZpY2F0aW9uIGNvdW50cyBpbiB0aXRsZXMsIGUuZy4gJygxKSBMYXRlc3QgVHdlZXRzIC8gVHdpdHRlcicKICBsZXQgbm90aWZpY2F0aW9uQ291bnQgPSAnJwogIGlmIChUSVRMRV9OT1RJRklDQVRJT05fUkUudGVzdCh0aXRsZSkpIHsKICAgIG5vdGlmaWNhdGlvbkNvdW50ID0gVElUTEVfTk9USUZJQ0FUSU9OX1JFLmV4ZWModGl0bGUpWzBdCiAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UoVElUTEVfTk9USUZJQ0FUSU9OX1JFLCAnJykKICB9CgogIGxldCBob21lTGlua1dhc0NsaWNrZWQgPSBob21lTGlua0NsaWNrZWQKICBob21lTGlua0NsaWNrZWQgPSBmYWxzZQoKICAvLyBJZ25vcmUgRmxhc2ggb2YgVW5pbml0aWFsaXNlZCBUaXRsZSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBzY3JlZW4gZm9yIHRoZQogIC8vIGZpcnN0IHRpbWUuCiAgaWYgKHRpdGxlID09ICdUd2l0dGVyJykgewogICAgbG9nKCdpZ25vcmluZyBGbGFzaCBvZiBVbmluaXRpYWxpc2VkIFRpdGxlJykKICAgIHJldHVybgogIH0KCiAgLy8gT25seSBhbGxvdyB0aGUgc2FtZSBwYWdlIHRvIHJlLXByb2Nlc3MgaWYgdGhlICJDdXN0b21pemUgeW91ciB2aWV3IiBkaWFsb2cKICAvLyBpcyBjdXJyZW50bHkgb3Blbi4KICBsZXQgbmV3UGFnZSA9IHRpdGxlLnNwbGl0KCcgLyAnKVswXQogIGlmIChuZXdQYWdlID09IGN1cnJlbnRQYWdlICYmIGxvY2F0aW9uLnBhdGhuYW1lICE9ICcvaS9kaXNwbGF5JykgewogICAgbG9nKCdpZ25vcmluZyBkdXBsaWNhdGUgdGl0bGUgY2hhbmdlJykKICAgIGN1cnJlbnROb3RpZmljYXRpb25Db3VudCA9IG5vdGlmaWNhdGlvbkNvdW50CiAgICByZXR1cm4KICB9CgogIC8vIFN0YXkgb24gdGhlIFJldHdlZXRzIHRpbWVsaW5lIHdoZW7igKYKICBpZiAoY3VycmVudFBhZ2UgPT0gVElNRUxJTkVfUkVUV0VFVFMgJiYKICAgICAgLy8g4oCmdGhlIHRpdGxlIGhhcyBjaGFuZ2VkIGJhY2sgdG8gdGhlIG1haW4gdGltZWxpbmXigKYKICAgICAgKG5ld1BhZ2UgPT0gTEFURVNUX1RXRUVUUyB8fCBuZXdQYWdlID09IEhPTUUpICYmCiAgICAgIC8vIOKApnRoZSBIb21lIG5hdiBvciBMYXRlc3QgVHdlZXRzIC8gSG9tZSBoZWFkZXIgX3dhc24ndF8gY2xpY2tlZCBhbmTigKYKICAgICAgIWhvbWVMaW5rV2FzQ2xpY2tlZCAmJgogICAgICAoCiAgICAgICAgLy8g4oCmdGhlIHVzZXIgdmlld2VkIGEgcGhvdG8uCiAgICAgICAgVVJMX1BIT1RPX1JFLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpIHx8CiAgICAgICAgLy8g4oCmdGhlIHVzZXIgc3RvcHBlZCB2aWV3aW5nIGEgcGhvdG8uCiAgICAgICAgVVJMX1BIT1RPX1JFLnRlc3QoY3VycmVudFBhdGgpIHx8CiAgICAgICAgLy8g4oCmdGhlIHVzZXIgb3BlbmVkIG9yIHVzZWQgdGhlICJDdXN0b21pemUgeW91ciB2aWV3IiBkaWFsb2cuCiAgICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPT0gJy9pL2Rpc3BsYXknIHx8CiAgICAgICAgLy8g4oCmdGhlIHVzZXIgY2xvc2VkIHRoZSAiQ3VzdG9taXplIHlvdXIgdmlldyIgZGlhbG9nLgogICAgICAgIGN1cnJlbnRQYXRoID09ICcvaS9kaXNwbGF5JyB8fAogICAgICAgIC8vIOKApnRoZSB1c2VyIG9wZW5lZCB0aGUgIlNlbmQgdmlhIERpcmVjdCBNZXNzYWdlIiBkaWFsb2cuCiAgICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPT0gJy9tZXNzYWdlcy9jb21wb3NlJyB8fAogICAgICAgIC8vIOKApnRoZSB1c2VyIGNsb3NlZCB0aGUgIlNlbmQgdmlhIERpcmVjdCBNZXNzYWdlIiBkaWFsb2cuCiAgICAgICAgY3VycmVudFBhdGggPT0gJy9tZXNzYWdlcy9jb21wb3NlJyB8fAogICAgICAgIC8vIOKApnRoZSB1c2VyIG9wZW5lZCB0aGUgY29tcG9zZSBUd2VldCBkaWFsb2cuCiAgICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPT0gJy9jb21wb3NlL3R3ZWV0JyB8fAogICAgICAgIC8vIOKApnRoZSB1c2VyIGNsb3NlZCB0aGUgY29tcG9zZSBUd2VldCBkaWFsb2cuCiAgICAgICAgY3VycmVudFBhdGggPT0gJy9jb21wb3NlL3R3ZWV0JyB8fAogICAgICAgIC8vIOKApnRoZSBub3RpZmljYXRpb24gY291bnQgaW4gdGhlIHRpdGxlIGNoYW5nZWQuCiAgICAgICAgbm90aWZpY2F0aW9uQ291bnQgIT0gY3VycmVudE5vdGlmaWNhdGlvbkNvdW50CiAgICAgICkpIHsKICAgIGxvZygnaWdub3JpbmcgdGl0bGUgY2hhbmdlIG9uIFJldHdlZXRzIHRpbWVsaW5lJykKICAgIGN1cnJlbnROb3RpZmljYXRpb25Db3VudCA9IG5vdGlmaWNhdGlvbkNvdW50CiAgICBjdXJyZW50UGF0aCA9IGxvY2F0aW9uLnBhdGhuYW1lCiAgICBzZXRUaXRsZShUSU1FTElORV9SRVRXRUVUUykKICAgIHJldHVybgogIH0KCiAgLy8gQXNzdW1wdGlvbjogYWxsIG5vbi1GT1VULCBub24tZHVwbGljYXRlIHRpdGxlIGNoYW5nZXMgYXJlIG5hdmlnYXRpb24sIHdoaWNoCiAgLy8gbmVlZCB0aGUgc2NyZWVuIHRvIGJlIHJlLXByb2Nlc3NlZC4KCiAgaWYgKHBhZ2VPYnNlcnZlcnMubGVuZ3RoID4gMCkgewogICAgbG9nKGBkaXNjb25uZWN0aW5nICR7cGFnZU9ic2VydmVycy5sZW5ndGh9IHBhZ2Ugb2JzZXJ2ZXIke3MocGFnZU9ic2VydmVycy5sZW5ndGgpfWApCiAgICBwYWdlT2JzZXJ2ZXJzLmZvckVhY2gob2JzZXJ2ZXIgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKQogICAgcGFnZU9ic2VydmVycyA9IFtdCiAgfQoKICBjdXJyZW50UGFnZSA9IG5ld1BhZ2UKICBjdXJyZW50Tm90aWZpY2F0aW9uQ291bnQgPSBub3RpZmljYXRpb25Db3VudAogIGN1cnJlbnRQYXRoID0gbG9jYXRpb24ucGF0aG5hbWUKCiAgbG9nKCdwcm9jZXNzaW5nIG5ldyBwYWdlJykKCiAgaWYgKGNvbmZpZy5hbHdheXNVc2VMYXRlc3RUd2VldHMgJiYgY3VycmVudFBhZ2UgPT0gSE9NRSkgewogICAgcmV0dXJuIHN3aXRjaFRvTGF0ZXN0VHdlZXRzKGN1cnJlbnRQYWdlKQogIH0KCiAgaWYgKGNvbmZpZy5yZXR3ZWV0cyA9PSAnc2VwYXJhdGUnKSB7CiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ0hvbWUnLCBjdXJyZW50UGFnZSA9PSBIT01FKQogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdMYXRlc3RUd2VldHMnLCBjdXJyZW50UGFnZSA9PSBMQVRFU1RfVFdFRVRTKQogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdUaW1lbGluZVJldHdlZXRzJywgY3VycmVudFBhZ2UgPT0gVElNRUxJTkVfUkVUV0VFVFMpCiAgICB1cGRhdGVUaGVtZUNvbG9yKCkKICB9CgogIGlmIChjb25maWcucmV0d2VldHMgPT0gJ3NlcGFyYXRlJyAmJiAoY3VycmVudFBhZ2UgPT0gTEFURVNUX1RXRUVUUyB8fCBjdXJyZW50UGFnZSA9PSBUSU1FTElORV9SRVRXRUVUUyB8fCBjdXJyZW50UGFnZSA9PSBIT01FKSkgewogICAgYWRkUmV0d2VldHNIZWFkZXIoY3VycmVudFBhZ2UpCiAgfQoKICBpZiAoKGNvbmZpZy5yZXR3ZWV0cyAhPSAnaWdub3JlJyB8fCBjb25maWcudmVyaWZpZWRBY2NvdW50cyAhPSAnaWdub3JlJyB8fCBjb25maWcuaGlkZVdob1RvRm9sbG93RXRjKSAmJiAoY3VycmVudFBhZ2UgPT0gTEFURVNUX1RXRUVUUyB8fCBjdXJyZW50UGFnZSA9PSBUSU1FTElORV9SRVRXRUVUUyB8fCBjdXJyZW50UGFnZSA9PSBIT01FKSB8fAogICAgICAoY29uZmlnLnZlcmlmaWVkQWNjb3VudHMgIT0gJ2lnbm9yZScgfHwgY29uZmlnLmhpZGVXaG9Ub0ZvbGxvd0V0YykgJiYgUFJPRklMRV9USVRMRV9SRS50ZXN0KGN1cnJlbnRQYWdlKSkgewogICAgb2JzZXJ2ZVRpbWVsaW5lKGN1cnJlbnRQYWdlKQogIH0KCiAgaWYgKGNvbmZpZy5oaWRlU2lkZWJhckNvbnRlbnQgJiYgY3VycmVudFBhZ2UgIT0gTUVTU0FHRVMpIHsKICAgIGhpZGVTaWRlYmFyQ29udGVudHMoY3VycmVudFBhZ2UpCiAgICBvYnNlcnZlU2lkZWJhckFwcGVhcmFuY2UoY3VycmVudFBhZ2UpCiAgfQoKICBpZiAoY29uZmlnLmhpZGVNb3JlVHdlZXRzICYmIFVSTF9UV0VFVF9JRF9SRS50ZXN0KGN1cnJlbnRQYXRoKSAmJiBsb2NhdGlvbi5zZWFyY2guc3RhcnRzV2l0aCgnP3JlZl9zcmMnKSkgewogICAgaGlkZU1vcmVUd2VldHNTZWN0aW9uKGN1cnJlbnRQYXRoKQogIH0KfQoKLyoqCiAqIEF1dG9tYXRpY2FsbHkgY2xpY2sgdGhlICJTaG93IHRoaXMgdGhyZWFkIiBsaW5rIHRvIGdldCByaWQgb2YgdGhlICJNb3JlIFR3ZWV0cyIgc2VjdGlvbiBpZiB0aGUKICogdXNlciBpcyB2aWV3aW5nIGEgdHdlZXQgZnJvbSBhbiBleHRlcm5hbCBsaW5rIHdpdGggYSA/cmVmX3NyYz0gVVJMLgogKi8KYXN5bmMgZnVuY3Rpb24gaGlkZU1vcmVUd2VldHNTZWN0aW9uKHBhdGgpIHsKICBsZXQgaWQgPSBVUkxfVFdFRVRfSURfUkUuZXhlYyhwYXRoKVsxXQogIGxldCAkbGluayA9IGF3YWl0IGdldEVsZW1lbnQoYGFbaHJlZiQ9Ii9zdGF0dXMvJHtpZH0iXWAsIHsKICAgIG5hbWU6ICciU2hvdyB0aGlzIHRocmVhZCIgbGluaycsCiAgICBzdG9wSWY6IHBhdGhJc05vdChwYXRoKSwKICB9KQogIGlmICgkbGluayAhPSBudWxsKSB7CiAgICBsb2coJ2NsaWNraW5nICJTaG93IHRoaXMgdGhyZWFkIiBsaW5rJykKICAgICRsaW5rLmNsaWNrKCkKICB9Cn0KCi8qKgogKiBTZXRzIHRoZSBwYWdlIG5hbWUgaW4gPHRpdGxlPiwgcmV0YWluaW5nIGFueSBjdXJyZW50IG5vdGlmaWNhdGlvbiBjb3VudC4KICogQHBhcmFtIHtzdHJpbmd9IHBhZ2UKICovCmZ1bmN0aW9uIHNldFRpdGxlKHBhZ2UpIHsKICBkb2N1bWVudC50aXRsZSA9IGAke2N1cnJlbnROb3RpZmljYXRpb25Db3VudH0ke3BhZ2V9IC8gVHdpdHRlcmAKfQoKZnVuY3Rpb24gc2hvdWxkSGlkZVR3ZWV0KHR3ZWV0VHlwZSwgcGFnZSkgewogIGlmICh0d2VldFR5cGUgPT0gJ1JFVFdFRVQnICYmIGNvbmZpZy5yZXR3ZWV0cyA9PSAnaWdub3JlJykgewogICAgcmV0dXJuIGZhbHNlCiAgfQogIHJldHVybiB0d2VldFR5cGUgIT0gKHBhZ2UgPT0gVElNRUxJTkVfUkVUV0VFVFMgPyAnUkVUV0VFVCcgOiAnVFdFRVQnKQp9Cgphc3luYyBmdW5jdGlvbiBzd2l0Y2hUb0xhdGVzdFR3ZWV0cyhwYWdlKSB7CiAgbGV0ICRzd2l0Y2hCdXR0b24gPSBhd2FpdCBnZXRFbGVtZW50KCdkaXZbYXJpYS1sYWJlbD0iVG9wIFR3ZWV0cyBvbiJdJywgewogICAgbmFtZTogJ3RpbWVsaW5lIHN3aXRjaCBidXR0b24nLAogICAgc3RvcElmOiBwYWdlSXNOb3QocGFnZSksCiAgfSkKCiAgaWYgKCRzd2l0Y2hCdXR0b24gPT0gbnVsbCkgewogICAgcmV0dXJuIGZhbHNlCiAgfQoKICAkc3dpdGNoQnV0dG9uLmNsaWNrKCkKCiAgbGV0ICRzZWVMYXRlc3RUd2VldHNJbnN0ZWFkID0gYXdhaXQgZ2V0RWxlbWVudCgnZGl2W3JvbGU9Im1lbnUiXSBkaXZbcm9sZT0ibWVudWl0ZW0iXScsIHsKICAgIG5hbWU6ICciU2VlIGxhdGVzdCBUd2VldHMgaW5zdGVhZCIgbWVudSBpdGVtJywKICAgIHN0b3BJZjogcGFnZUlzTm90KHBhZ2UpLAogIH0pCgogIGlmICgkc2VlTGF0ZXN0VHdlZXRzSW5zdGVhZCA9PSBudWxsKSB7CiAgICByZXR1cm4gZmFsc2UKICB9CgogIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovICgkc2VlTGF0ZXN0VHdlZXRzSW5zdGVhZC5jbG9zZXN0KCdkaXZbdGFiaW5kZXg9IjAiXScpKS5jbGljaygpCiAgcmV0dXJuIHRydWUKfQoKbGV0IHVwZGF0ZVRoZW1lQ29sb3IgPSAoZnVuY3Rpb24oKSB7CiAgbGV0ICRzdHlsZSA9IGFkZFN0eWxlKCcnKQogIGxldCBsYXN0VGhlbWVDb2xvciA9IG51bGwKCiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRoZW1lQ29sb3IoKSB7CiAgICAvLyBPbmx5IHRyeSB0byB1cGRhdGUgaWYgdGhlICJDdXN0b21pemUgeW91ciB2aWV3IiBkaWFsb2cgaXMgb3BlbiBvciB3ZQogICAgLy8gaGF2ZW4ndCBzZXQgYW4gaW5pdGFsIGNvbG9yIHlldC4KICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gJy9pL2Rpc3BsYXknICYmIGxhc3RUaGVtZUNvbG9yICE9IG51bGwpIHsKICAgICAgcmV0dXJuCiAgICB9CgogICAgbGV0ICR0d2VldEJ1dHRvbiA9IGF3YWl0IGdldEVsZW1lbnQoJ2FbZGF0YS10ZXN0aWQ9IlNpZGVOYXZfTmV3VHdlZXRfQnV0dG9uIl0nLCB7CiAgICAgIG5hbWU6ICdUd2VldCBidXR0b24nCiAgICB9KQoKICAgIGxldCB0aGVtZUNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZSgkdHdlZXRCdXR0b24pLmJhY2tncm91bmRDb2xvcgogICAgaWYgKHRoZW1lQ29sb3IgPT09IGxhc3RUaGVtZUNvbG9yKSB7CiAgICAgIHJldHVybgogICAgfQogICAgbG9nKGBzZXR0aW5nIHRoZW1lIGNvbG9yIHRvICR7dGhlbWVDb2xvcn1gKQogICAgbGFzdFRoZW1lQ29sb3IgPSB0aGVtZUNvbG9yCiAgICAkc3R5bGUudGV4dENvbnRlbnQgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdib2R5LkhvbWUgbWFpbiBoMjpub3QoI3R3dF9yZXR3ZWV0cyknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9keS5MYXRlc3RUd2VldHMgbWFpbiBoMjpub3QoI3R3dF9yZXR3ZWV0cyknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9keS5UaW1lbGluZVJldHdlZXRzICN0d3RfcmV0d2VldHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgXS5qb2luKCcsICcpICsgYCB7IGNvbG9yOiAke2xhc3RUaGVtZUNvbG9yfTsgfWAKICB9Cn0pKCkKLy8jZW5kcmVnaW9uCgovLyNyZWdpb24gTWFpbgpmdW5jdGlvbiBtYWluKCkgewogIGxvZygnY29uZmlnJywgY29uZmlnKQoKICBhZGRTdGF0aWNDc3MoKQoKICBpZiAoY29uZmlnLmZhc3RCbG9jaykgewogICAgb2JzZXJ2ZVBvcHVwcygpCiAgfQoKICBpZiAoY29uZmlnLm5hdkJhc2VGb250U2l6ZSkgewogICAgb2JzZXJ2ZUh0bWxGb250U2l6ZSgpCiAgfQoKICBpZiAoY29uZmlnLmhpZGVNb3JlVHdlZXRzIHx8CiAgICAgIGNvbmZpZy5oaWRlU2lkZWJhckNvbnRlbnQgfHwKICAgICAgY29uZmlnLmhpZGVXaG9Ub0ZvbGxvd0V0YyB8fAogICAgICBjb25maWcucmV0d2VldHMgIT0gJ2lnbm9yZScgfHwKICAgICAgY29uZmlnLnZlcmlmaWVkQWNjb3VudHMgIT0gJ2lnbm9yZScpIHsKICAgIG9ic2VydmVUaXRsZSgpCiAgfQp9CgppZiAodHlwZW9mIGNocm9tZSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY2hyb21lLnN0b3JhZ2UgIT0gJ3VuZGVmaW5lZCcpIHsKICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoKHN0b3JlZENvbmZpZykgPT4gewogICAgT2JqZWN0LmFzc2lnbihjb25maWcsIHN0b3JlZENvbmZpZykKICAgIG1haW4oKQogIH0pCn0KZWxzZSB7CiAgbWFpbigpCn0KLy8jZW5kcmVnaW9uCg=="},{"name":"SankakuAddon","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://chan.sankakucomplex.com/*","https://idol.sankakucomplex.com/*"],"orig_noframes":true,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1607794040343,"data":{}},"enabled":true,"position":31,"file_url":"https://sleazyfork.org/scripts/23597-sankakuaddon/code/SankakuAddon.user.js","uuid":"0fa3b467-e989-4145-b0b0-4dded142818f","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFNhbmtha3VBZGRvbgovLyBAbmFtZXNwYWNlICAgU2Fua2FrdUFkZG9uCi8vIEBkZXNjcmlwdGlvbiBBZGRzIGEgZmV3IHF1YWxpdHkgb2YgbGlmZSBpbXByb3ZlbWVudHMgb24gU2Fua2FrdSBDaGFubmVsOiBBdXRvbWF0aWMgaW1hZ2Ugc2NhbGluZywgc2Nyb2xsaW5nIHRvIGltYWdlLCB0aHVtYm5haWwgaWNvbnMgZm9yIGxvdWQvYW5pbWF0ZWQgcG9zdHMsIG11dGluZy9wYXVzaW5nIHZpZGVvcywgKyAtIHRhZyBzZWFyY2ggYnV0dG9ucywgYSB0YWcgbWVudSB3aGljaCBhbGxvd3MgZm9yIHRhZ2dpbmcgYnkgY2xpY2tpbmcsICdDaG9vc2UvU2V0IFBhcmVudCcgbW9kZXMsIGVhc2llciBkdXBsaWNhdGUgdGFnZ2luZy9mbGFnZ2luZy4gRnVsbHkgY29uZmlndXJhYmxlIHRocm91Z2ggdGhlIEFkZG9uIGNvbmZpZy4KLy8gQGF1dGhvciAgICAgIHNhbmNoYW4KLy8gQHZlcnNpb24gICAgIDAuOTkuMzAKLy8gQGljb24gICAgICAgIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUJibWxEUTFCcFkyTUFBQ2lSZFpIUEt3UmhHTWMvZG9sWWJlSWdPZXdCT2V5V0tEbHFGWmZsc0ZaWlhHWm1aM2ZWenBobVpwTmNsWXVEY2hBWHZ3NytBNjdLbFZLS2xPVGdML0RySW8zbjNWVXI4VTd2UEorKzcvdDlldC92QzZGVXliQzgrZ0d3Yk45TlR5UmpzOW01V09NVEVUcG9veDAwdzNNbXA4Y3ovRHZlYjZoVDlUcWhldjIvNzgvUmtqTTlBK3FhaEljTngvV0ZSNFZUeTc2amVFTzR3eWhxT2VGOTRiZ3JCeFMrVUxwZTVVZkZoU3EvS25ZejZURUlxWjZ4d2cvV2Y3QlJkQzNoZnVFZXExUTJ2cytqYmhJeDdabHBxVjB5dS9GSU0wR1NHRHBsRmluaGs1QnFTMlovK3dZcXZpbVd4R1BJMzJFRlZ4d0ZpdUtOaTFxV3JxYlV2T2ltZkNWV1ZPNi84L1R5UTRQVjdwRWtORHdFd1Vzdk5HN0I1MllRZkJ3RXdlY2hoTy9oeks3NWx5U25rVGZSTjJ0YXp4NUUxK0RrdkticDIzQzZEcDEzanVacUZTa3NNNVRQdy9NeHRHYWgvUXFhNTZ0WmZhOXpkQXVaVlhtaVM5alpoVDdaSDEzNEFyaGNaK20vV1N0U0FBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFBZUVsRVFWUTR5Mk5nb0NYNFh5YjdINFR4cVdIQ283a2VHNXRvQTRDZ0FRZWJzQUhZYk1UbENpWWliTWZyQ2laaWJjSWx4MFNFMy9HR0JSTStHeGk3SGplQ01ENDFURVNHUEU1WE1PR3pIUnNibnhjSXhic0REQU10czRjYmptUjdBNGtwdlFIa01pWkNLWTFRU21YQlpUS2VkTkJBMVJ3TEFGQ2VOQ1RWaHoyRkFBQUFBRWxGVGtTdVFtQ0MKLy8gQG1hdGNoICAgICAgIGh0dHBzOi8vY2hhbi5zYW5rYWt1Y29tcGxleC5jb20vKgovLyBAbWF0Y2ggICAgICAgaHR0cHM6Ly9pZG9sLnNhbmtha3Vjb21wbGV4LmNvbS8qCi8vIEBydW4tYXQgICAgICBkb2N1bWVudC1zdGFydAovLyBAbm9mcmFtZXMKLy8gQGdyYW50ICAgICAgIEdNLnJlZ2lzdGVyTWVudUNvbW1hbmQKLy8gQGdyYW50ICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQKLy8gQGdyYW50ICAgICAgIEdNLmFkZFN0eWxlCi8vIEBncmFudCAgICAgICBHTS5vcGVuSW5UYWIKLy8gQGdyYW50ICAgICAgIEdNLnNldFZhbHVlCi8vIEBncmFudCAgICAgICBHTS5nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgR00uZGVsZXRlVmFsdWUKLy8gQGdyYW50ICAgICAgIEdNLmFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIKLy8gQGdyYW50ICAgICAgIEdNX2FkZFZhbHVlQ2hhbmdlTGlzdGVuZXIKLy8gQGdyYW50ICAgICAgIHVuc2FmZVdpbmRvdwovLyA9PS9Vc2VyU2NyaXB0PT0KCihhc3luYyBmdW5jdGlvbih1bnNhZmVXaW5kb3cpIHsKICAndXNlIHN0cmljdCc7CgogIGNvbnN0IFZFUlNJT04gPSAndjAuOTkuMzAnOwoKICAvLyBiYXNlZCBvbiB0aGUgVGFnIENoZWNrbGlzdCBpbiB0aGUgd2lraQogIGNvbnN0IERFRkFVTFRfVEFHTElTVCA9CmBbCiAgewogICAgIm5hbWUiOiAiUGVvcGxlICYgR2VuZGVyIiwKICAgICJ0YWdzIjogWwogICAgICBbCiAgICAgICAgWyJmZW1hbGUgZmVtYWxlX29ubHkgMWdpcmwgMmdpcmxzIDNnaXJscyA0Z2lybHMgNWdpcmxzIDYrZ2lybHMiXSwKICAgICAgICBbIm1hbGUgbWFsZV9vbmx5IDFib3kgMmJveXMgM2JveXMgNGJveXMgNWJveXMgNitib3lzIl0sCiAgICAgICAgWyJmdXRhbmFyaSBmdXRhbmFyaV9vbmx5IDFfZnV0YW5hcmkgMl9mdXRhbmFyaSAzX2Z1dGFuYXJpIDRfZnV0YW5hcmkgNV9mdXRhbmFyaSA2K19mdXRhbmFyaSJdLAogICAgICAgIFsibmV3aGFsZiBuZXdoYWxmX29ubHkgMV9uZXdoYWxmIDJfbmV3aGFsZiAzX25ld2hhbGYgNF9uZXdoYWxmIDVfbmV3aGFsZiA2K19uZXdoYWxmIl0KICAgICAgXSwKICAgICAgIm5vX2h1bWFucyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIllvdW5nIEFnZSIsCiAgICAidGFncyI6IFsKICAgICAgImNoaWxkIGxvbGkgc2hvdGEgdG9kZGxlcmNvbiB5b3VuZyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkFuZHJvZ3lub3VzIiwKICAgICJ0YWdzIjogWwogICAgICAiYW5kcm9neW5vdXMgY3Jvc3NkcmVzc2luZyBnZW5kZXJzd2FwIHRyYXAgcmV2ZXJzZV90cmFwIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiR3JvdXAiLAogICAgInRhZ3MiOiBbCiAgICAgICJzb2xvIGR1byB0cmlvIHF1YXJ0ZXQgcXVpbnRldCBzZXh0ZXQgZ3JvdXAiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJSZWxhdGlvbnNoaXAiLAogICAgInRhZ3MiOiBbCiAgICAgICJjb3VwbGUgc2libGluZ3Mgc2lzdGVycyBicm90aGVycyBicm90aGVyX2FuZF9zaXN0ZXIgdHdpbnMgdHJpcGxldHMiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJXaG8vT3RoZXIiLAogICAgInRhZ3MiOiBbCiAgICAgICJhbnRocm9wb21vcnBoaXphdGlvbiBtdWx0aXBsZV9wZXJzb25hIGVsZiBtZWNoYSBtb25zdGVyIG1vbnN0ZXJfZ2lybCBtYWdpY2FsX2dpcmwgZmFpcnkiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJGYWNlIiwKICAgICJ0YWdzIjogWwogICAgICAiZmFjZSBlYXJzIGV5ZXMgbm9zZSBsaXBzIHRlZXRoIGZhY2lhbF9tYXJrIGZhY2lhbF9oYWlyIGJlYXJkIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiVXBwZXIgQm9keSIsCiAgICAidGFncyI6IFsKICAgICAgImFybXMgYXJtcGl0cyBhcm1waXRfY3JlYXNlIGFybXBpdF9wZWVrIGJhY2sgYmFyZV9zaG91bGRlcnMgYnJlYXN0cyBidXN0IGNsYXZpY2xlIG1pZHJpZmYgbmF2ZWwgc3RvbWFjaCBoYW5kcyBmaW5nZXJzIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiTG93ZXIgQm9keSIsCiAgICAidGFncyI6IFsKICAgICAgImFudXMgYXNzIG1vdW5kX29mX3ZlbnVzIHZhZ2luYSBwZW5pcyB0aGlnaHMga25lZXMgZmVldCBiYXJlZm9vdCBsZWdzIGJhcmVfbGVncyBiYXJlX3RoaWdocyB6ZXR0YWlfcnlvdWlraSB0b2VzIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiQnJlYXN0cyIsCiAgICAidGFncyI6IFsKICAgICAgImNsZWF2YWdlIGJyZWFzdHMgbmlwcGxlcyBhcmVvbGFlIHB1ZmZ5X2FyZW9sYWUgYXJlb2xhX3NsaXAgYnJlYXN0c19vdXRfb2ZfY2xvdGhlcyBicmVhc3RzX2FwYXJ0IHVuZGVyYm9vYiBzaWRlYm9vYiIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkJyZWFzdCBTaXplIiwKICAgICJ0YWdzIjogWwogICAgICAicGV0dGFua28gc21hbGxfYnJlYXN0cyBtZWRpdW1fYnJlYXN0cyBodWdlX2JyZWFzdHMgbGFyZ2VfYnJlYXN0cyBnaWdhbnRpY19icmVhc3RzIGFsdGVybmF0ZV9idXN0X3NpemUiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJTa2luIENvbG9yIiwKICAgICJ0YWdzIjogWwogICAgICAiYWxiaW5vIHBhbGVfc2tpbiBkYXJrX3NraW4gdGFubmVkIHJlZF9za2luIGJsdWVfc2tpbiBzaGlueV9za2luIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiSGFpcnN0eWxlIiwKICAgICJ0YWdzIjogWwogICAgICAiYWhvZ2UgYmFuZ3MgYmx1bnRfYmFuZ3MgYm9iX2N1dCBkb3VibGVfYnVuIGRyaWxsX2hhaXIgaGFpcl9vdmVyX29uZV9leWUgcGVlay1hLWJvb19iYW5nIHBvbnl0YWlsIHNpZGVfcG9ueV90YWlsIHNpbmdsZV9icmFpZCBzcGlreV9oYWlyIHR3aW5icmFpZHMgdHdpbnRhaWxzIGFsdGVybmF0ZV9oYWlyc3R5bGUgdHdvX3NpZGVfdXAiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJIYWlyIExlbmd0aCIsCiAgICAidGFncyI6IFsKICAgICAgInZlcnkgc2hvcnQgaGFpciBzaG9ydF9oYWlyIG1lZGl1bV9oYWlyIGxvbmdfaGFpciB2ZXJ5X2xvbmdfaGFpciBhYnN1cmRseSBsb25nIGhhaXIiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJIYWlyL0V5ZSBDb2xvciIsCiAgICAidGFncyI6IFsKICAgICAgWwogICAgICAgIFsiYmxvbmRlICAgICAgYmxhY2tfaGFpciBibHVlX2hhaXIgYnJvd25faGFpciBncmVlbl9oYWlyIGdyZXlfaGFpciBvcmFuZ2VfaGFpciBwaW5rX2hhaXIgcHVycGxlX2hhaXIgcmVkX2hhaXIgc2lsdmVyX2hhaXIiXSwKICAgICAgICBbImdvbGRlbl9leWVzIGJsYWNrX2V5ZXMgYmx1ZV9leWVzIGJyb3duX2V5ZXMgZ3JlZW5fZXllcyBncmV5X2V5ZXMgb3JhbmdlX2V5ZXMgcGlua19leWVzIHB1cnBsZV9leWVzIHJlZF9leWVzIHNpbHZlcl9leWVzIl0KICAgICAgXSwKICAgICAgIndoaXRlX2hhaXIiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJBbmltYWwgUGFydHMiLAogICAgInRhZ3MiOiBbCiAgICAgICJhbmltYWxfZWFycyBiYXRfd2luZ3MgYnVubnlfZWFycyBjYXRfdGFpbCB3b2xmX2VhcnMgZmFuZyBob3JucyBraXRzdW5lbWltaSBuZWtvbWltaSB0YWlsIGludW1pbWkgd2luZ3MgYW5nZWxfd2luZ3MiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJMb29rL090aGVyIiwKICAgICJ0YWdzIjogWwogICAgICAiY2hpYmkgbW9sZSBtdXNjbGUgcG9pbnRlZF9lYXJzIHByZWduYW50IHNjYXIgY3VydnkgYW5pbWFsX2Vhcl9mbHVmZiBmbHVmZnlfdGFpbCIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIlN3aW13ZWFyIiwKICAgICJ0YWdzIjogWwogICAgICAiYmlraW5pIG9uZS1waWVjZV9zd2ltc3VpdCBzd2ltc3VpdCBjb21wZXRpdGlvbl9zd2ltc3VpdCBzdWt1bWl6dSIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkZhY2V3ZWFyIiwKICAgICJ0YWdzIjogWwogICAgICAibWVnYW5lIHN1bmdsYXNzZXMgZXlld2Vhcl9vbl9oZWFkIHJlZC1mcmFtZWRfZXlld2VhciIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIlVwcGVyIEJvZHkiLAogICAgInRhZ3MiOiBbCiAgICAgICJzYWlsb3JfY29sbGFyIGNob2tlciBzaGlydCBjcm9wX3RvcCBjYW1pc29sZSBkcmVzcyBicmEgYmFieWRvbGwiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJMb3dlciBCb2R5IiwKICAgICJ0YWdzIjogWwogICAgICAic2tpcnQgcGxlYXRlZF9za2lydCBwYW50c3UgdGhpZ2hoaWdocyBzaG9lcyBzYW5kYWxzIHNvY2tzIHBhbnRzIHNob3J0cyBzaG9ydF9zaG9ydHMiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJUcmFkaXRpb25hbFx1MDBBMENsb3RoZXMiLAogICAgInRhZ3MiOiBbCiAgICAgICJzZXJhZnVrdSBraW1vbm8ga2luZGVyZ2FydGVuX3VuaWZvcm0gY2hpbmVzZV9jbG90aGVzIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiV2Vhci9PdGhlciIsCiAgICAidGFncyI6IFsKICAgICAgImFybW9yIHN1aXQgdW5pZm9ybSBzY2hvb2xfdW5pZm9ybSB1bmRlcndlYXJfb25seSBudWRlIGNvbXBsZXRlbHlfbnVkZSIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkFjdGlvbnMiLAogICAgInRhZ3MiOiBbCiAgICAgICJiYXR0bGUgZmlnaHRpbmcganVtcGluZyBydW5uaW5nIHByaW5jZXNzX2NhcnJ5IHN0cmV0Y2ggc2xlZXBpbmcgbHlpbmcgZmx5aW5nIHNxdWF0dGluZyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIlBvc3R1cmUiLAogICAgInRhZ3MiOiBbCiAgICAgICJhbGxfZm91cnMgYXJjaGVkX2JhY2sgYmFjay10by1iYWNrIGJlbnQtb3ZlciBmaWdodGluZ19zdGFuY2UgbGVhbmluZyBsZWFuaW5nX2JhY2sgbGVhbmluZ19mb3J3YXJkIHNxdWF0IHRvcC1kb3duX2JvdHRvbS11cCIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkFybXMiLAogICAgInRhZ3MiOiBbCiAgICAgICJhcm1zX2JlaGluZF9iYWNrIGFybXNfY3Jvc3NlZCBhcm1fc3VwcG9ydCBhcm1fdXAgYXJtc191cCBhcm1zX2JlaGluZF9oZWFkIGNoaW5fcmVzdCBvdXRzdHJldGNoZWRfYXJtIG91dHN0cmV0Y2hlZF9hcm1zIHNwcmVhZF9hcm1zIHZfYXJtcyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkhhbmRzIiwKICAgICJ0YWdzIjogWwogICAgICAiaGFuZHNfY2xhc3BlZCBoYW5kX2luX3BvY2tldCBoYW5kc19pbl9wb2NrZXQgaGFuZF9vbl9jaGVlayBoYW5kX29uX2hhdCBoYW5kX29uX2hlYWQgaGFuZF9vbl9oaXAgaGFuZHNfb25faGlwIGhhbmRfb25fc2hvdWxkZXIgaG9sZGluZ19oYW5kcyBpbnRlcmxvY2tlZF9maW5nZXJzIG91dHN0cmV0Y2hlZF9oYW5kIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiTGVncyIsCiAgICAidGFncyI6IFsKICAgICAgImtuZWVzX29uX2NoZXN0IGxlZ19saWZ0IGxlZ191cCBsZWdzX3VwIG91dHN0cmV0Y2hlZF9sZWcgcGlnZW9uX3RvZWQgc3ByZWFkX2xlZ3MiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJTaXR0aW5nIiwKICAgICJ0YWdzIjogWwogICAgICAic2l0dGluZyBjcm9zc2VkX2xlZ3MgaW5kaWFuX3N0eWxlIGxlZ19odWcgc2VpemEgc2l0dGluZ19vbl9sYXAgc2l0dGluZ19vbl9wZXJzb24gd2FyaXphIHlva296dXdhcmkgc3RyYWRkbGluZyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIlN0YW5kaW5nIiwKICAgICJ0YWdzIjogWwogICAgICAic3RhbmRpbmcgY3Jvc3NlZF9sZWdzXyhzdGFuZGluZykgc3RhbmRpbmdfb25fb25lX2xlZyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkx5aW5nIiwKICAgICJ0YWdzIjogWwogICAgICAibHlpbmcgb25fYmFjayBvbl9zaWRlIG9uX3N0b21hY2giCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJWaWV3aW5nIERpcmVjdGlvbiIsCiAgICAidGFncyI6IFsKICAgICAgImV5ZV9jb250YWN0IGxvb2tpbmdfYXRfdmlld2VyIGxvb2tpbmdfYmFjayBsb29raW5nX2F3YXkiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJHZXN0dXJlIiwKICAgICJ0YWdzIjogWwogICAgICAiY2xlbmNoZWRfaGFuZCBjbGVuY2hlZF9oYW5kcyBkb3VibGVfdiBoZWFydF9oYW5kcyBwaW5reV9vdXQgcG9pbnRpbmcgc2h1c2hpbmcgdGh1bWJzX3VwIFxcXFxuXFwvIFxcXFxtXFwvIHJlYWNoaW5nIHNhbHV0ZSB3YXZpbmcgY2F0X3Bvc2UgcGF3X3Bvc2UgdiBjbGF3X3Bvc2UgZG91YmxlX1xcXFxtXFwvIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiRmFjaWFsIEV4cHJlc3Npb25zIiwKICAgICJ0YWdzIjogWwogICAgICAiZXhwcmVzc2lvbnMgZXhwcmVzc2lvbmxlc3MgYWhlZ2FvIGFuZ2VyX3ZlaW4gYmx1c2ggYmx1c2hfc3RpY2tlcnMgY2xlbmNoZWRfdGVldGggY2xvc2VkX2V5ZXMgZXZpbCBuYXVnaHR5X2ZhY2Ugbm9zZWJsZWVkIG9wZW5fbW91dGggcGFydGVkX2xpcHMgcG91dCByb2xsZXllcyBmcm93biB0ZWFycyBzY3JlYW0iCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJFbW90aW9ucyIsCiAgICAidGFncyI6IFsKICAgICAgImFuZ3J5IGFubm95ZWQgZW1iYXJhc3NlZCBoYXBweSBzYWQgc2NhcmVkIHN1cnByaXNlZCB3b3JyaWVkIGRpc2FwcG9pbnRlZCIsCiAgICAgICJkcnVuaywgdHJlbWJsaW5nIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiU2V4IiwKICAgICJ0YWdzIjogWwogICAgICAic2V4IGFuYWwgY2xvdGhlZF9zZXggaGFwcHlfc2V4IHZhZ2luYWwgeWFvaSB5dXJpIHRyaWJhZGlzbSBvcmFsIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiUG9zaXRpb25zIiwKICAgICJ0YWdzIjogWwogICAgICAiNjkgZG9nZ3lzdHlsZSBnaXJsX29uX3RvcCBjb3dnaXJsX3Bvc2l0aW9uIHJldmVyc2VfY293Z2lybF9wb3NpdGlvbiB1cHJpZ2h0X3N0cmFkZGxlIG1pc3Npb25hcnkiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJTdGltdWxhdGlvbiIsCiAgICAidGFncyI6IFsKICAgICAgImJ1dHRqb2IgZm9vdGpvYiBncmluZGluZyB0aGlnaF9zZXggdGVrb2tpIGNhcmVzc2luZ190ZXN0aWNsZXMgZG91YmxlX2hhbmRqb2IgbWFzdHVyYmF0aW9uIGNyb3RjaF9ydWIgcGFpenVyaSBuYWl6dXJpIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiT3JhbCIsCiAgICAidGFncyI6IFsKICAgICAgIm9yYWwgYnJlYXN0X3N1Y2tpbmcgY3VubmlsaW5ndXMgZmFjZXNpdHRpbmcgZmVsbGF0aW8gZGVlcHRocm9hdCA6Pj0iCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJHcm9waW5nIiwKICAgICJ0YWdzIjogWwogICAgICAiZ3JvcGluZyBhc3NfZ3JhYiBicmVhc3RfZ3JhYiBuaXBwbGVfdHdlYWsgc2VsZl9mb25kbGUgdG9yc29fZ3JhYiIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkdyb3VwIFNleCIsCiAgICAidGFncyI6IFsKICAgICAgImdyb3VwX3NleCBnYW5nYmFuZyBkb3VibGVfcGVuZXRyYXRpb24gb3JneSBzcGl0cm9hc3QgdGVhbXdvcmsgdGhyZWVzb21lIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiSW5zZXJ0aW9uIiwKICAgICJ0YWdzIjogWwogICAgICAiaW5zZXJ0aW9uIGFuYWxfaW5zZXJ0aW9uIGxhcmdlX2luc2VydGlvbiBzdG9tYWNoX2J1bGdlIG11bHRpcGxlX2luc2VydGlvbnMgdXJldGhyYWxfaW5zZXJ0aW9uIHBlbmV0cmF0aW9uIG5pcHBsZV9wZW5ldHJhdGlvbiBmaW5nZXJpbmcgYW5hbF9maW5nZXJpbmciCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJGZXRpc2hlcyIsCiAgICAidGFncyI6IFsKICAgICAgIm1pbGYgZ2lhbnRlc3MgbWluaWdpcmwgcGx1bXAgZmF0IHNraW5ueSBwdWJsaWMgcHVibGljX251ZGl0eSB6ZW5yYSBleGhpYml0aW9uaXNtIHZveWV1cmlzbSBmdXRhX29uX2ZlbWFsZSBmdXRhX29uX21hbGUgaW5jZXN0IHR3aW5jZXN0IHJhcGUgYWJvdXRfdG9fYmVfcmFwZWQgbW9sZXN0YXRpb24gYmVzdGlhbGl0eSBpbXByZWduYXRpb24gdGVudGFjbGVzIHZpcmdpbiB2b3JlIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiQm9uZGFnZSIsCiAgICAidGFncyI6IFsKICAgICAgImJvbmRhZ2UgYmRzbSBhc3BoeXhpYXRpb24gYnJlYXN0X2JvbmRhZ2Ugc2hpYmFyaSBzcHJlYWRlcl9iYXIgc3VzcGVuc2lvbiBmZW1kb20gaHVtaWxpYXRpb24gYm9keV93cml0aW5nIHNsYXZlIHNwYW5rZWQgdG9ydHVyZSBib3VuZF9hcm1zIGJvdW5kX2xlZ3MgYm91bmRfd3Jpc3RzIHN1c3BlbnNpb24iCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJTZW1lbiIsCiAgICAidGFncyI6IFsKICAgICAgInNlbWVuIGJ1a2tha2UgZHJpcHBpbmdfc2VtZW4gc2VtZW5fc3BsYXR0ZXIgc2VtZW5fcG9vbCBuYWthZGFzaGkgc2VtZW5faW5fYW51cyBzZW1lbl9pbl9tb3V0aCBzZW1lbl9vbl90b25ndWUgc2VtZW5fb25fYm9keSBzZW1lbl9vbl9oYWlyIHNlbWVuX29uX2xvd2VyX2JvZHkgc2VtZW5fb25fYXNzIHNlbWVuX29uX3ZhZ2luYSBzZW1lbl9vbl91cHBlcl9ib2R5IHNlbWVuX29uX2JyZWFzdHMgc2VtZW5fb25fY2xvdGhlcyBlamFjdWxhdGlvbiBlamFjdWxhdGluZ193aGlsZV9wZW5ldHJhdGVkIGZhY2lhbCIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIk9iamVjdHMiLAogICAgInRhZ3MiOiBbCiAgICAgICJjb25kb20gdXNlZF9jb25kb20gc2V4X3RveSBkaWxkbyB2aWJyYXRvciIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkJvZGlseSBGbHVpZHMiLAogICAgInRhZ3MiOiBbCiAgICAgICJibG9vZCBsYWN0YXRpb24gdXJpbmF0aW5nIHNhbGl2YSBzd2VhdCBmZW1hbGVfZWphY3VsYXRpb24gdmFnaW5hbF9qdWljZXMiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJWaWV3IiwKICAgICJ0YWdzIjogWwogICAgICAiY3Jvc3Mtc2VjdGlvbiBpbnRlcm5hbF9jdW1zaG90IHgtcmF5IgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiQmFja2dyb3VuZCIsCiAgICAidGFncyI6IFsKICAgICAgIndoaXRlX2JhY2tncm91bmQgcGlua19iYWNrZ3JvdW5kIGJsdWVfYmFja2dyb3VuZCBzaW1wbGVfYmFja2dyb3VuZCBncmFkaWVudF9iYWNrZ3JvdW5kIHR3by10b25lX2JhY2tncm91bmQgYW1iaWd1b3VzX2JhY2tncm91bmQiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJQbGFjZW1lbnQiLAogICAgInRhZ3MiOiBbCiAgICAgICJpbmRvb3JzIG91dGRvb3JzIHJvb2Z0b3AgY2l0eSBwb29sIGJlYWNoIGNhdmUgYmVkcm9vbSBoYWxsd2F5IgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiTmF0dXJlIiwKICAgICJ0YWdzIjogWwogICAgICAib2NlYW4gcml2ZXIgdHJlZSBwYWxtX3RyZWUgd2lzdGVyaWEgbGlsYWMgd2hpdGVfZmxvd2VyIGJsdWVfZmxvd2VyIGdyYXNzIHNhbmQgd2F0ZXIiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJJbmRvb3JzIiwKICAgICJ0YWdzIjogWwogICAgICAicGlsbG93IGJlZCBkb29yIGJlZF9zaGVldCBjb3VudGVyIHdpbmRvdyBjdXJ0YWlucyBiYXRodHViIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiV29yayBUeXBlIiwKICAgICJ0YWdzIjogWwogICAgICAic2NhbiB3YXRlcmNvbG9yXyhtZWRpdW0pIHBhcGVyY3JhZnQgbm9uLXdlYl9zb3VyY2UgcGhvdG9zaG9wXyhtZWRpdW0pIHNrZXRjaCB3b3JrX2luX3Byb2dyZXNzIGxpbmVhcnQiCiAgICBdCiAgfQpdYDsKCiAgLyoqKioqKioqKioqKioqKioqLwogIC8qIGNvbXBhdGliaWxpdHkgKi8KICAvKioqKioqKioqKioqKioqKiovCgogIGxldCBJU19HUkVBU0VNT05LRVk0ID0gZmFsc2U7IC8vIHNjcmlwdCBicmVha2luZyBjaGFuZ2VzIChzZWUgVE9ETykKICBsZXQgSVNfTU9OS0VZID0gZmFsc2U7ICAgICAgICAvLyBUYW1wZXJtb25rZXksIFZpb2xlbnRtb25rZXksIEdyZWFzZW1vbmtleSAoYWxsIGF0IGxlYXN0IHBhcnRpYWxseSBzdXBwb3J0ICdHTS4nIGZ1bmN0aW9ucykKCiAgaWYgKHR5cGVvZiBHTSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEdNLmluZm8gPT09ICdvYmplY3QnKSB7CiAgICBJU19NT05LRVkgPSB0cnVlOwogICAgSVNfR1JFQVNFTU9OS0VZNCA9IChHTS5pbmZvLnNjcmlwdEhhbmRsZXIgPT09ICdHcmVhc2Vtb25rZXknKTsKCiAgICAvLyBwb2x5ZmlsbHMgZm9yIFZpb2xlbnRNb25rZXkKICAgIGlmICh0eXBlb2YgR00uYWRkVmFsdWVDaGFuZ2VMaXN0ZW5lciA9PT0gJ3VuZGVmaW5lZCcpIEdNLmFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIgPSBHTV9hZGRWYWx1ZUNoYW5nZUxpc3RlbmVyOwogICAgaWYgKHR5cGVvZiBHTS5yZWdpc3Rlck1lbnVDb21tYW5kICAgID09PSAndW5kZWZpbmVkJykgR00ucmVnaXN0ZXJNZW51Q29tbWFuZCAgICA9IEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQ7IC8vIGRvZXNuJ3Qgc3VwcG9ydCBhY2Nlc3NLZXkKICB9CgogIGZ1bmN0aW9uIG9wZW5faW5fdGFiKHVybCkgewogICAgaWYgKElTX01PTktFWSkgR00ub3BlbkluVGFiKHVybCwgZmFsc2UpOwogICAgZWxzZSAgICAgICAgICAgd2luZG93Lm9wZW4odXJsKTsgLy8gcmVxdWlyZXMgcG9wdXAgcGVybWlzc2lvbgogIH0KCiAgZnVuY3Rpb24gYWRkX3N0eWxlKGNzcykgewogICAgaWYgKElTX01PTktFWSkgewogICAgICBHTS5hZGRTdHlsZShjc3MpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2hlZXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdTVFlMRScpOwogICAgICBzaGVldC5pbm5lclRleHQgPSBjc3M7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2hlZXQpOwogICAgfQogIH0KCiAgLy8gdGhlIHNpdGUgdXNlcyBhIHRvbiBvZiBhbmNpZW50LCBub24tc3RhbmRhcmQgcG9seWZpbGxzL3Byb3RvdHlwZSBvdmVycmlkZXMsIGUuZy4KICAvLyBBcnJheS5mcm9tKG5ldyBTZXQoWzFdKSkgcmV0dXJucyBbXSBpbnN0ZWFkIG9mIFsxXQogIC8vIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoWzFdKSkgcmV0dXJucyAiWzFdIiBpbnN0ZWFkIG9mIFsxXQogIC8vIEFycmF5LmZyb20ocykgY2FuIGJlIHJlcGxhY2VkIGJ5IFsuLi5zXQogIC8vIHRvIHVzZSBwcm9wZXIgSlNPTiB3ZSBuZWVkIHRvIHRlbXBvcmFyaWx5IHVuYmluZCB0aGUgc2l0ZSdzIHRvSlNPTiBmdW5jdGlvbnMKICBjb25zdCB0b0pTT05fT0JKRUNUUyA9IFtPYmplY3QsIEFycmF5LnByb3RvdHlwZSwgTnVtYmVyLnByb3RvdHlwZSwgU3RyaW5nLnByb3RvdHlwZV07CgogIGZ1bmN0aW9uIGRlbGV0ZV90b0pTT05zKCkgewogICAgY29uc3QgdG9KU09OX29yaWdpbmFscyA9IFtdOwogICAgZm9yIChjb25zdCBvYmogb2YgdG9KU09OX09CSkVDVFMpIHsKICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eSgndG9KU09OJykpIHsKICAgICAgICB0b0pTT05fb3JpZ2luYWxzLnB1c2goeyBvYmosIGZ1bmM6IG9iai50b0pTT04gfSk7CiAgICAgICAgZGVsZXRlIG9iai50b0pTT047CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b0pTT05fb3JpZ2luYWxzOwogIH0KCiAgZnVuY3Rpb24gcmVzdG9yZV90b0pTT05zKHRvSlNPTl9vcmlnaW5hbHMpIHsKICAgIGZvciAoY29uc3QgeyBvYmosIGZ1bmMgfSBvZiB0b0pTT05fb3JpZ2luYWxzKQogICAgICBvYmoudG9KU09OID0gZnVuYzsKICB9CgogIGZ1bmN0aW9uIEpTT05fc3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIsIHNwYWNlKSB7CiAgICBsZXQgdG9KU09OX29yaWdpbmFsczsKICAgIHRyeSB7CiAgICAgIHRvSlNPTl9vcmlnaW5hbHMgPSBkZWxldGVfdG9KU09OcygpOwogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2UpOwogICAgfSBmaW5hbGx5IHsKICAgICAgcmVzdG9yZV90b0pTT05zKHRvSlNPTl9vcmlnaW5hbHMpOwogICAgfQogIH0KCiAgLy8gZW5hYmxlcyBKU09OLnN0cmluZ2lmeSB0byBzdHJpbmdpZnkgU2V0cwogIGZ1bmN0aW9uIHNldF9yZXBsYWNlcihrZXksIHZhbHVlKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSBpbnN0YW5jZW9mIFNldCkKICAgICAgcmV0dXJuIHsgdDogJ1NldCcsIHY6IFsuLi52YWx1ZV0gfTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIC8vIGVuYWJsZXMgSlNPTi5wYXJzZSB0byBwYXJzZSBTZXRzCiAgZnVuY3Rpb24gc2V0X3Jldml2ZXIoa2V5LCB2YWx1ZSkgewogICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUudCA9PT0gJ1NldCcpCiAgICAgIHJldHVybiBuZXcgU2V0KHZhbHVlLnYpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCgogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgLyogY29uZmlndXJhdGlvbiBmdW5jdGlvbnMgKi8KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICBjb25zdCBJU19JRE9MID0gKHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA9PT0gJ2lkb2wuc2Fua2FrdWNvbXBsZXguY29tJyA/IDEgOiAwKTsKICBjb25zdCBISVNUT1JZX0tFWSA9IChJU19JRE9MID8gJ3ZpZXdfaGlzdG9yeV9pZG9sJyA6ICd2aWV3X2hpc3RvcnknKTsKICBjb25zdCBDT01NT05fVEFHU19LRVlTID0gWydjb21tb25fdGFnc19qc29uJywgJ2NvbW1vbl90YWdzX2pzb25faWRvbCddOwogIGNvbnN0IENPTU1PTl9UQUdTX0tFWSA9IENPTU1PTl9UQUdTX0tFWVNbSVNfSURPTF07CiAgY29uc3QgT1RIRVJfQ09NTU9OX1RBR1NfS0VZID0gQ09NTU9OX1RBR1NfS0VZU1sxIC0gSVNfSURPTF07CgogIGNvbnN0IERFRkFVTFRfQ09ORklHID0gewogICAgc2Nyb2xsX3RvX2ltYWdlOiB0cnVlLAogICAgc2NhbGVfaW1hZ2U6IHRydWUsIC8vIGFuZCB2aWRlbwogICAgc2NhbGVfb25seV9kb3duc2NhbGU6IGZhbHNlLAogICAgc2NhbGVfZmxhc2g6IGZhbHNlLAogICAgc2NhbGVfbW9kZTogMCwKICAgIHNjYWxlX29uX3Jlc2l6ZTogZmFsc2UsCiAgICBzY3JvbGxfdG9faW1hZ2VfY2VudGVyOiB0cnVlLAogICAgdmlkZW9fcGF1c2U6IGZhbHNlLAogICAgdmlkZW9fbXV0ZTogdHJ1ZSwKICAgIHNldF92aWRlb192b2x1bWU6IGZhbHNlLAogICAgdmlkZW9fdm9sdW1lOiA1MCwKICAgIHZpZGVvX2NvbnRyb2xzOiB0cnVlLAogICAgc2hvd19zcGVha2VyX2ljb246IHRydWUsCiAgICBzaG93X2FuaW1hdGVkX2ljb246IHRydWUsCiAgICBzZXRwYXJlbnRfZGVsZXRlcG90ZW50aWFsZHVwbGljYXRlOiBmYWxzZSwKICAgIGVkaXRmb3JtX2RlbGV0ZXVzZWxlc3N0YWdzOiBmYWxzZSwKICAgIGhpZGVfaGVhZGVybG9nbzogZmFsc2UsCiAgICB0YWdfc2VhcmNoX2J1dHRvbnM6IHRydWUsCiAgICBvcl90YWdfc2VhcmNoX2J1dHRvbjogZmFsc2UsCiAgICB0YWdfbWVudTogdHJ1ZSwKICAgIHRhZ19tZW51X3NjYWxlOiAnMzAlJywKICAgIHRhZ19tZW51X2xheW91dDogMSwKICAgIGNvbW1vbl90YWdzX2pzb246IERFRkFVTFRfVEFHTElTVCwKICAgIGNvbW1vbl90YWdzX2pzb25faWRvbDogJ1sgeyJuYW1lIjoidGVzdCB0YWdzIiwgInRhZ3MiOlsidGFnMSB0YWcyIiwgWyJncm91cGVkX3RhZzEgZ3JvdXBlZF90YWcyIl0sICJ0YWczIHRhZzQiXSB9LCB7ICJ0YWdzIjpbICJuZXh0X2xpbmUgdGFnNSB0YWc2IiwgWyJncm91cGVkX3RhZzMgZ3JvdXBlZF90YWc0Il0gLCAidGFnNyB0YWc4Il0gfSwgeyJuYW1lIjoiYW5vdGhlclx1MDBBMGNhdGVnb3J5IiwgInRhZ3MiOlsidDEgdDIgdDMiXX0gXScsCiAgICBzYW5rYWt1X2NoYW5uZWxfZGFya19jb21wYXRpYmlsaXR5OiBmYWxzZSwKICAgIHZpZXdfaGlzdG9yeV9lbmFibGVkOiBmYWxzZSwKICAgIHZpZXdfaGlzdG9yeTogbmV3IFNldCgpLAogICAgdmlld19oaXN0b3J5X2lkb2w6IG5ldyBTZXQoKSwKICAgIHdpa2lfdGVtcGxhdGU6ICcnLAogICAgdGFnX2NhdGVnb3J5X2NvbGxhcHNlcjogZmFsc2UsCiAgICBjb2xsYXBzZWRfdGFnX2NhdGVnb3JpZXM6IG5ldyBTZXQoKSwKICAgIGFkZF9maWxldHlwZV9zdGF0OiB0cnVlLAogICAgbW92ZV9zdGF0c190b19lZGl0X2Zvcm06IGZhbHNlLAogIH07CgogIGNvbnN0IFVTRV9NT05LRVlfU1RPUkFHRSA9IElTX01PTktFWTsKICBsZXQgVVNFX0xPQ0FMX1NUT1JBR0U7CiAgdHJ5IHsKICAgIFVTRV9MT0NBTF9TVE9SQUdFID0gISFsb2NhbFN0b3JhZ2UuZ2V0SXRlbTsKICB9IGNhdGNoIChlcnJvcikgeyAvLyBET01FeGNlcHRpb24KICAgIFVTRV9MT0NBTF9TVE9SQUdFID0gZmFsc2U7CiAgfQoKICBjb25zdCBLRVlfUFJFRklYID0gJ2NvbmZpZy4nOyAvLyB1c2VkIHRvIGF2b2lkIGNvbmZsaWN0cyBpbiBsb2NhbFN0b3JhZ2UgYW5kIGNvbmZpZyBlbGVtZW50IGlkcwoKICBjb25zdCBjb25maWcgPSBPYmplY3RfY2xvbmUoREVGQVVMVF9DT05GSUcpOyAvLyBsb2FkIGRlZmF1bHQKCiAgLy8gYXBwbGllZCB0byBsb2FkZWQvc2V0IGNvbmZpZyBlbnRyaWVzIChlLmcuIGNvbmZpZyBlbGVtZW50cyByZXR1cm4gc3RyaW5ncyB3aGVuIHdlIG5lZWQgbnVtYmVycykKICBjb25zdCBDT05GSUdfRklYRVIgPSB7CiAgICBzY2FsZV9tb2RlOiBOdW1iZXIsCiAgICB0YWdfbWVudV9sYXlvdXQ6IE51bWJlciwKICB9OwoKICBmdW5jdGlvbiBmaXhfY29uZmlnX2VudHJ5KGtleSwgdmFsdWUpIHsKICAgIGNvbnN0IGZpeGVyID0gQ09ORklHX0ZJWEVSW2tleV07CiAgICByZXR1cm4gKGZpeGVyICE9PSB1bmRlZmluZWQgPyBmaXhlcih2YWx1ZSkgOiB2YWx1ZSk7CiAgfQoKICAvLyBwZXJtYW5lbnRseSBzYXZlIHNldHRpbmcgdG8gbG9jYWxTdG9yYWdlIChhbmQgYnJvYWRjYXN0IHRvIG90aGVyIHRhYnMpCiAgZnVuY3Rpb24gc2F2ZV9zZXR0aW5nKGtleSwgdmFsdWUpIHsKICAgIHZhbHVlID0gZml4X2NvbmZpZ19lbnRyeShrZXksIHZhbHVlKTsKCiAgICBpZiAoVVNFX01PTktFWV9TVE9SQUdFKSB7CiAgICAgIEdNLnNldFZhbHVlKGtleSwgSlNPTl9zdHJpbmdpZnkodmFsdWUsIHNldF9yZXBsYWNlcikpLmNhdGNoKChyZWFzb24pID0+IHsKICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCBgYWRkb24gZXJyb3I6IGNvdWxkbid0IHNhdmUgc2V0dGluZyAiJHtrZXl9IiwgY2hlY2sgY29uc29sZWAsIHJlYXNvbik7CiAgICAgIH0pOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFVU0VfTE9DQUxfU1RPUkFHRSkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLndhcm4sIGBhZGRvbjogY291bGRuJ3Qgc2F2ZSBzZXR0aW5nICIke0tFWV9QUkVGSVggKyBrZXl9IiB0byBsb2NhbFN0b3JhZ2UuIGNoZWNrIHBlcm1pc3Npb25zYCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cnkgewogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShLRVlfUFJFRklYICsga2V5LCBKU09OX3N0cmluZ2lmeSh2YWx1ZSwgc2V0X3JlcGxhY2VyKSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCBgYWRkb24gZXJyb3I6IGNvdWxkbid0IHNhdmUgc2V0dGluZyAiJHtLRVlfUFJFRklYICsga2V5fSIgdG8gbG9jYWxTdG9yYWdlLCBjaGVjayBjb25zb2xlYCwgZXJyb3IpOwogICAgfQogIH0KCiAgYXN5bmMgZnVuY3Rpb24gbG9hZF9jb25maWcoKSB7CiAgICBjb25zdCBtb25rZXlfdmFsdWVzID0ge307CgogICAgaWYgKFVTRV9NT05LRVlfU1RPUkFHRSkgewogICAgICBjb25zdCBwcm9taXNlcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKSB7CiAgICAgICAgcHJvbWlzZXMucHVzaChHTS5nZXRWYWx1ZShrZXkpLnRoZW4oKHZhbHVlKSA9PiB7CiAgICAgICAgICBtb25rZXlfdmFsdWVzW2tleV0gPSB2YWx1ZTsKICAgICAgICB9KSk7CiAgICAgIH0KCiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTsKICAgIH0KCiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKSB7CiAgICAgIGxldCB2YWx1ZSA9IGNvbmZpZ1trZXldOyAvLyBkZWZhdWx0IGFscmVhZHkgbG9hZGVkCgogICAgICBsZXQgc3RvcmVkX3ZhbHVlID0gbW9ua2V5X3ZhbHVlc1trZXldOwoKICAgICAgaWYgKHN0b3JlZF92YWx1ZSA9PT0gdW5kZWZpbmVkICYmIFVTRV9MT0NBTF9TVE9SQUdFKQogICAgICAgIHN0b3JlZF92YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKEtFWV9QUkVGSVggKyBrZXkpOwoKICAgICAgaWYgKHN0b3JlZF92YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHN0b3JlZF92YWx1ZSAhPT0gbnVsbCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2Uoc3RvcmVkX3ZhbHVlLCBzZXRfcmV2aXZlcik7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsIGBhZGRvbiBlcnJvcjogY291bGRuJ3QgbG9hZCBzZXR0aW5nICIke2tleX0iYCwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdXBkYXRlX3NldHRpbmcoa2V5LCB2YWx1ZSk7IC8vIGZpcmUgcmVnYXJkbGVzcwogICAgfQogIH0KCiAgZnVuY3Rpb24gc3RvcmFnZV9jaGFuZ2VkKGtleSwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUsIHJlbW90ZSkgewogICAgdHJ5IHsKICAgICAgaWYgKCFyZW1vdGUpIHJldHVybjsgLy8gb25seSBsaXN0ZW4gdG8gb3RoZXIgdGFicwoKICAgICAgaWYgKG5ld192YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IG5ld192YWx1ZSA9PT0gbnVsbCkgewogICAgICAgIC8vIGVudHJ5IHdhcyByZW1vdmVkLCByZXNldCBzZXR0aW5nIHRvIGRlZmF1bHQKICAgICAgICB1cGRhdGVfc2V0dGluZyhrZXksIE9iamVjdF9jbG9uZShERUZBVUxUX0NPTkZJR1trZXldKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gZW50cnkgd2FzIGFkZGVkIG9yIGNoYW5nZWQKICAgICAgICBjb25zdCB2YWx1ZSA9IEpTT04ucGFyc2UobmV3X3ZhbHVlLCBzZXRfcmV2aXZlcik7CgogICAgICAgIC8vIHdvcmthcm91bmQgZm9yIHBvc3QgdmlldyBoaXN0b3J5IHJhY2UgY29uZGl0aW9uCiAgICAgICAgaWYgKGtleSA9PT0gSElTVE9SWV9LRVkpIHsKICAgICAgICAgIGNvbnN0IG5ld19pZHMgPSBTZXRfZGlmZmVyZW5jZSh2YWx1ZSwgY29uZmlnW2tleV0pOwogICAgICAgICAgaWYgKG5ld19pZHMuc2l6ZSA9PT0gMCkgcmV0dXJuOwoKICAgICAgICAgIC8vIGludGVncmF0ZSBuZXdseSByZWNlaXZlZCBwb3N0IGlkcyBpbnRvIHZpZXcgaGlzdG9yeQogICAgICAgICAgY29uZmlnW2tleV0gPSBTZXRfdW5pb24odmFsdWUsIGNvbmZpZ1trZXldKTsKCiAgICAgICAgICAvLyBzYXZlIG5ldyB2aWV3IGhpc3RvcnkgYW5kIGJyb2FkY2FzdCBpdCB0byBvdGhlciB0YWJzLAogICAgICAgICAgLy8gd2hpY2ggaW4gdHVybiBtaWdodCBicm9hZGNhc3QgdGhlaXIgaWRzIGJhY2sgdG8gdXMKICAgICAgICAgIHNhdmVfc2V0dGluZyhrZXksIHZhbHVlKTsKCiAgICAgICAgICAvLyBsaXZlIHVwZGF0ZSB0aHVtYm5haWxzCiAgICAgICAgICBpZiAoIWlzX3BlcnNvbmFsX3Bvc3RfcGFnZSgpKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgbmV3X2lkcykgewogICAgICAgICAgICAgIGNvbnN0IHRodW1icyA9IHRodW1ibmFpbF9jYWNoZS5nZXQoaWQpOwogICAgICAgICAgICAgIGlmICh0aHVtYnMgPT09IHVuZGVmaW5lZCkgY29udGludWU7CgogICAgICAgICAgICAgIGZvciAoY29uc3QgdGh1bWIgb2YgdGh1bWJzKQogICAgICAgICAgICAgICAgZmFkZW91dF9wb3N0KHRodW1iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybjsgLy8gZG9uJ3QgY2FsbCB1cGRhdGVfc2V0dGluZygpCiAgICAgICAgfQoKICAgICAgICB1cGRhdGVfc2V0dGluZyhrZXksIHZhbHVlKTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ3N0b3JhZ2VfY2hhbmdlZCgpIGZhaWxlZCwgY2hlY2sgY29uc29sZScsIGVycm9yKTsKICAgIH0KICB9CgogIC8vIGxvY2FsU3RvcmFnZSBmcm9tIG90aGVyIHRhYnMgY2hhbmdlZAogIGZ1bmN0aW9uIGxvY2FsX3N0b3JhZ2VfY2hhbmdlZChlKSB7CiAgICBpZiAoZS5zdG9yYWdlQXJlYSAhPT0gbG9jYWxTdG9yYWdlKSByZXR1cm47CiAgICBpZiAoZS5rZXkgPT09IG51bGwpIHJldHVybjsgLy8gaWdub3JlIGV4dGVybmFsIGxvY2FsU3RvcmFnZS5jbGVhcigpIGZvciBub3cKCiAgICAvLyBvbmx5IGxvb2sgYXQgU2Fua2FrdUFkZG9uIHNwZWNpZmljIGNoYW5nZXMKICAgIGlmICghZS5rZXkuc3RhcnRzV2l0aChLRVlfUFJFRklYKSkgcmV0dXJuOwogICAgY29uc3Qga2V5ID0gZS5rZXkuc3Vic3RyaW5nKEtFWV9QUkVGSVgubGVuZ3RoKTsKCiAgICBzdG9yYWdlX2NoYW5nZWQoa2V5LCBlLm9sZFZhbHVlLCBlLm5ld1ZhbHVlLCB0cnVlKTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZV9zZXR0aW5nKGtleSwgdmFsdWUpIHsKICAgIGNvbmZpZ1trZXldID0gZml4X2NvbmZpZ19lbnRyeShrZXksIHZhbHVlKTsKCiAgICBpZiAoa2V5ID09PSAnc2NhbGVfb25fcmVzaXplJykgewogICAgICBpZiAodmFsdWUpIGFkZF9zY2FsZV9vbl9yZXNpemVfbGlzdGVuZXIoKTsKICAgICAgZWxzZSAgICAgICByZW1vdmVfc2NhbGVfb25fcmVzaXplX2xpc3RlbmVyKCk7CiAgICB9CgogICAgdXBkYXRlX2NvbmZpZ19kaWFsb2dfYnlfa2V5KGtleSk7CgogICAgaWYgKGtleSA9PT0gJ2hpZGVfaGVhZGVybG9nbycpIHsKICAgICAgdXBkYXRlX2hlYWRlcmxvZ28oKTsKICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzJykgewogICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNvbGxhcHNlcl9tYXAua2V5cygpKQogICAgICAgIGNvbGxhcHNlX3RhZ19jYXRlZ29yeShjYXRlZ29yeSwgY29uZmlnLmNvbGxhcHNlZF90YWdfY2F0ZWdvcmllcy5oYXMoY2F0ZWdvcnkpLCBmYWxzZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZXNldF9zZXR0aW5nKGtleSkgewogICAgaWYgKFVTRV9NT05LRVlfU1RPUkFHRSkgR00uZGVsZXRlVmFsdWUoa2V5KTsKICAgIGlmIChVU0VfTE9DQUxfU1RPUkFHRSkgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oS0VZX1BSRUZJWCArIGtleSk7IC8vIGFsc28gZGVsZXRlIGlmIFVTRV9NT05LRVlfU1RPUkFHRQogICAgdXBkYXRlX3NldHRpbmcoa2V5LCBPYmplY3RfY2xvbmUoREVGQVVMVF9DT05GSUdba2V5XSkpOwogIH0KCiAgZnVuY3Rpb24gcmVzZXRfY29uZmlnKCkgewogICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkgewogICAgICAvLyBkb24ndCBjbGVhciB0aGUgaGlzdG9yeSBzbyB0aGUgY2xlYXIgaGlzdG9yeSBidXR0b24gbWFrZXMgbW9yZSBzZW5zZQogICAgICBpZiAoa2V5ID09PSAndmlld19oaXN0b3J5JyB8fCBrZXkgPT09ICd2aWV3X2hpc3RvcnlfaWRvbCcpIGNvbnRpbnVlOwogICAgICAvLyBkb24ndCByZXNldCB0aGUgY29tbW9uIHRhZ3MgbGlzdCBvZiB0aGUgb3RoZXIgc2l0ZQogICAgICBpZiAoa2V5ID09PSBPVEhFUl9DT01NT05fVEFHU19LRVkpIGNvbnRpbnVlOwoKICAgICAgcmVzZXRfc2V0dGluZyhrZXkpOwogICAgfQogIH0KCgogIC8vIHRlbXBsYXRlcyBmb3IgdGhlIGNvbmZpZyBkaWFsb2cKICBjb25zdCBDT05GSUdfVEFCU19URU1QTEFURSA9IHsKICAgIGdlbmVyYWw6IHsKICAgICAgbmFtZTogJ0dlbmVyYWwnLAogICAgICBjYXRlZ29yaWVzOiBbJ3Bvc3QnLCAnZ2VuZXJhbCddLAogICAgfSwKICAgIGVkaXRpbmc6IHsKICAgICAgbmFtZTogJ0VkaXRpbmcnLAogICAgICBjYXRlZ29yaWVzOiBbJ2VkaXRpbmcnXSwKICAgIH0sCiAgfTsKCiAgY29uc3QgQ09ORklHX0NBVEVHT1JZX1RFTVBMQVRFID0gewogICAgcG9zdDogewogICAgICBuYW1lOiAnSW1hZ2UvVmlkZW8nLAogICAgICBlbnRyaWVzOiBbCiAgICAgICAgJ3Njcm9sbF90b19pbWFnZScsCiAgICAgICAgJ3Njcm9sbF90b19pbWFnZV9jZW50ZXInLAogICAgICAgICdzY2FsZV9pbWFnZScsCiAgICAgICAgJ3NjYWxlX29ubHlfZG93bnNjYWxlJywKICAgICAgICAnc2NhbGVfZmxhc2gnLAogICAgICAgICdzY2FsZV9vbl9yZXNpemUnLAogICAgICAgICdzY2FsZV9tb2RlJywKICAgICAgICAndmlkZW9fcGF1c2UnLAogICAgICAgICd2aWRlb19tdXRlJywKICAgICAgICAnc2V0X3ZpZGVvX3ZvbHVtZScsCiAgICAgICAgJ3ZpZGVvX2NvbnRyb2xzJywKICAgICAgXSwKICAgIH0sCiAgICBnZW5lcmFsOiB7CiAgICAgIG5hbWU6ICdHZW5lcmFsJywKICAgICAgZW50cmllczogWwogICAgICAgICd0YWdfc2VhcmNoX2J1dHRvbnMnLAogICAgICAgICdvcl90YWdfc2VhcmNoX2J1dHRvbicsCiAgICAgICAgJ3RhZ19jYXRlZ29yeV9jb2xsYXBzZXInLAogICAgICAgICdzaG93X3NwZWFrZXJfaWNvbicsCiAgICAgICAgJ3Nob3dfYW5pbWF0ZWRfaWNvbicsCiAgICAgICAgJ3ZpZXdfaGlzdG9yeV9lbmFibGVkJywKICAgICAgICAnaGlkZV9oZWFkZXJsb2dvJywKICAgICAgICAnc2Fua2FrdV9jaGFubmVsX2RhcmtfY29tcGF0aWJpbGl0eScsCiAgICAgIF0sCiAgICB9LAogICAgZWRpdGluZzogewogICAgICBuYW1lOiAnRWRpdGluZycsCiAgICAgIGVudHJpZXM6IFsKICAgICAgICAnYWRkX2ZpbGV0eXBlX3N0YXQnLAogICAgICAgICdtb3ZlX3N0YXRzX3RvX2VkaXRfZm9ybScsCiAgICAgICAgJ3NldHBhcmVudF9kZWxldGVwb3RlbnRpYWxkdXBsaWNhdGUnLAogICAgICAgICdlZGl0Zm9ybV9kZWxldGV1c2VsZXNzdGFncycsCiAgICAgICAgJ3RhZ19tZW51JywKICAgICAgICBDT01NT05fVEFHU19LRVksCiAgICAgICAgJ3RhZ19tZW51X2xheW91dCcsCiAgICAgICAgJ3dpa2lfdGVtcGxhdGUnLAogICAgICBdLAogICAgfSwKICB9OwoKICBjb25zdCBTRVRUSU5HU19URU1QTEFURSA9IHsKICAgIHNjcm9sbF90b19pbWFnZTogICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnU2Nyb2xsIHRvIGltYWdlL3ZpZGVvIHdoZW4gb3BlbmluZyBwb3N0J30sCiAgICBzY3JvbGxfdG9faW1hZ2VfY2VudGVyOiAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ1Njcm9sbCB0byBjZW50ZXIgb2YgaW1hZ2UvdmlkZW8sIGVsc2Ugc2Nyb2xsIHRvIHRvcCd9LAogICAgc2NhbGVfaW1hZ2U6ICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdTY2FsZSBpbWFnZS92aWRlbyB3aGVuIG9wZW5pbmcgcG9zdCd9LAogICAgc2NhbGVfb25seV9kb3duc2NhbGU6ICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdPbmx5IGRvd25zY2FsZSd9LAogICAgc2NhbGVfZmxhc2g6ICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdBbHNvIHNjYWxlIGZsYXNoIHZpZGVvcyd9LAogICAgc2NhbGVfb25fcmVzaXplOiAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdTY2FsZSBpbWFnZSBvbiB3aW5kb3cgcmVzaXplJywgdGl0bGU6ICdUaGlzIHVzZXMgdGhlIFwnc2NhbGUgaW1hZ2UgbW9kZVwnIHNldHRpbmcsIHNvIGl0IGRvZXNuXCd0IHdvcmsgd2VsbCB3aGVuIHVzaW5nIHRoZSBtYW51YWwgc2NhbGluZyBhY3Rpb25zLid9LAogICAgc2NhbGVfbW9kZTogICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdzZWxlY3QnLCAgIGRlc2M6ICdTY2FsZSBpbWFnZS92aWRlbyBtb2RlOiAnLCBvcHRpb25zOiB7MDogJ0ZpdCB0byB3aW5kb3cnLCAxOiAnRml0IGhvcml6b250YWxseScsIDI6ICdGaXQgdmVydGljYWxseSd9fSwKICAgIHZpZGVvX3BhdXNlOiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnUGF1c2UgKG5vbi1mbGFzaCkgdmlkZW9zKid9LAogICAgdmlkZW9fbXV0ZTogICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdNdXRlIChub24tZmxhc2gpIHZpZGVvcyonfSwKICAgIHNldF92aWRlb192b2x1bWU6ICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnU2V0IChub24tZmxhc2gpIHZpZGVvIHZvbHVtZSB0bzogJ30sCiAgICB2aWRlb19jb250cm9sczogICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ1Nob3cgdmlkZW8gY29udHJvbHMqJ30sCiAgICB0YWdfc2VhcmNoX2J1dHRvbnM6ICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0VuYWJsZSArIC0gdGFnIHNlYXJjaCBidXR0b25zKid9LAogICAgb3JfdGFnX3NlYXJjaF9idXR0b246ICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdBbHNvIGFkZCB+IHRhZyBzZWFyY2ggYnV0dG9uKid9LAogICAgc2hvd19zcGVha2VyX2ljb246ICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdTaG93IPCflIogaWNvbiBvbiB0aHVtYm5haWwgaWYgaXQgaGFzIGF1ZGlvKid9LAogICAgc2hvd19hbmltYXRlZF9pY29uOiAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdTaG93IOKPqSBpY29uIG9uIHRodW1ibmFpbCBpZiBpdCBpcyBhbmltYXRlZCAo8J+UiiBvdmVycmlkZXMg4o+pKSonfSwKICAgIHZpZXdfaGlzdG9yeV9lbmFibGVkOiAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnRmFkZSBvdXQgdGh1bWJuYWlscyBvZiB2aWV3ZWQgcG9zdHMgKGVuYWJsZXMgcG9zdCB2aWV3IGhpc3RvcnkpKid9LAogICAgc2V0cGFyZW50X2RlbGV0ZXBvdGVudGlhbGR1cGxpY2F0ZToge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdEZWxldGUgcG90ZW50aWFsX2R1cGxpY2F0ZSB0YWcgd2hlbiB1c2luZyAiU2V0IFBhcmVudCInfSwKICAgIGVkaXRmb3JtX2RlbGV0ZXVzZWxlc3N0YWdzOiAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnIlNhdmUgY2hhbmdlcyIgYnV0dG9uIGRlbGV0ZXMgdXNlbGVzc190YWdzIHRhZyAoaWYgdGhlcmUgaGF2ZSBiZWVuIGNoYW5nZXMpJ30sCiAgICB0YWdfY2F0ZWdvcnlfY29sbGFwc2VyOiAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0VuYWJsZSB0YWcgY2F0ZWdvcnkgY29sbGFwc2VycyBvbiBwb3N0IHBhZ2VzKid9LAogICAgaGlkZV9oZWFkZXJsb2dvOiAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdIaWRlIGhlYWRlciBsb2dvJ30sCiAgICBzYW5rYWt1X2NoYW5uZWxfZGFya19jb21wYXRpYmlsaXR5OiB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0dhbGlub2FcJ3MgU2Fua2FrdSBDaGFubmVsIERhcmsgY29tcGF0aWJpbHR5Kid9LAogICAgdGFnX21lbnU6ICAgICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdBY3RpdmF0ZSB0YWcgbWVudSonfSwKICAgIFtDT01NT05fVEFHU19LRVldOiAgICAgICAgICAgICAgICAgIHt0eXBlOiAndGV4dCcsICAgICBkZXNjOiAnQ29tbW9uIHRhZ3MgbGlzdCAoSlNPTiBmb3JtYXQpOid9LAogICAgdGFnX21lbnVfbGF5b3V0OiAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdzZWxlY3QnLCAgIGRlc2M6ICdUYWcgbWVudSBsYXlvdXQ6ICcsIG9wdGlvbnM6IHswOiAnTm9ybWFsJywgMTogJ1ZlcnRpY2FsbHkgY29tcGFjdCd9fSwKICAgIHdpa2lfdGVtcGxhdGU6ICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAndGV4dCcsICAgICBkZXNjOiAnV2lraSB0ZW1wbGF0ZTonLCB0aXRsZTogJ1RleHQgdGhhdCB3aWxsIGJlIGJlIHNob3duIGluIGEgc2VwYXJhdGUgdGV4dGFyZWEgb24gd2lraSBhZGQvZWRpdCBwYWdlcyBzbyBpdCBjYW4gZWFzaWx5IGJlIGNvcGllZCd9LAogICAgYWRkX2ZpbGV0eXBlX3N0YXQ6ICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdBZGQgZmlsZSB0eXBlIHRvIHBvc3QgIkRldGFpbHMiKid9LAogICAgbW92ZV9zdGF0c190b19lZGl0X2Zvcm06ICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdNb3ZlIHBvc3QgIkRldGFpbHMiIHRvIHRoZSByaWdodCBvZiB0aGUgZWRpdCBmb3JtKid9LAogIH07CgogIC8vIHdoZXRoZXIgYSBjb25maWcgZWxlbWVudCdzIHZhbHVlIGFyZSBhY2Nlc3NlZCB2aWEgJy52YWx1ZScgKG9yIG90aGVyd2lzZSAnLmNoZWNrZWQnKQogIGZ1bmN0aW9uIGlzX3ZhbHVlX2VsZW1lbnQoa2V5KSB7CiAgICBpZiAoa2V5ID09PSAndmlkZW9fdm9sdW1lJykgICByZXR1cm4gdHJ1ZTsgLy8gInZpZGVvX3ZvbHVtZSIgaXMgaGFyZGNvZGVkIGluIGFkZF9jb25maWdfZGlhbG9nKCkKICAgIGlmIChrZXkgPT09ICd0YWdfbWVudV9zY2FsZScpIHJldHVybiB0cnVlOyAvLyBkb2Vzbid0IGV4aXN0IGFzIGFuIGVsZW1lbnQsIGJ1dCBpdCB3b3VsZCBiZSAnLnZhbHVlJyB0eXBlCgogICAgY29uc3QgdHlwZSA9IFNFVFRJTkdTX1RFTVBMQVRFW2tleV0udHlwZTsKICAgIHJldHVybiAodHlwZSA9PT0gJ3NlbGVjdCcgfHwgdHlwZSA9PT0gJ3RleHQnKTsKICB9CgogIC8vIGNhbGxzIGYoY2ZnX2VsZW0sIGtleSwgZ2V0X3ZhbHVlKSBmb3IgZWFjaCBleGlzdGluZyBjb25maWcgZWxlbWVudAogIGZ1bmN0aW9uIGZvcmVhY2hfY29uZmlnX2VsZW1lbnQoZikgewogICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkgewogICAgICBjb25zdCBjZmdfZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEtFWV9QUkVGSVggKyBrZXkpOwogICAgICBpZiAoY2ZnX2VsZW0gPT09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgaWYgKGlzX3ZhbHVlX2VsZW1lbnQoa2V5KSkgZihjZmdfZWxlbSwga2V5LCAoKSA9PiBjZmdfZWxlbS52YWx1ZSk7CiAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgIGYoY2ZnX2VsZW0sIGtleSwgKCkgPT4gY2ZnX2VsZW0uY2hlY2tlZCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVfY29uZmlnX2RpYWxvZ19ieV9rZXkoa2V5KSB7CiAgICBjb25zdCBjZmdfZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEtFWV9QUkVGSVggKyBrZXkpOwogICAgaWYgKGNmZ19lbGVtICE9PSBudWxsKSB7CiAgICAgIGlmIChpc192YWx1ZV9lbGVtZW50KGtleSkpIGNmZ19lbGVtLnZhbHVlICAgPSBjb25maWdba2V5XTsKICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2VsZW0uY2hlY2tlZCA9IGNvbmZpZ1trZXldOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdXBkYXRlX2NvbmZpZ19kaWFsb2coKSB7CiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKSB1cGRhdGVfY29uZmlnX2RpYWxvZ19ieV9rZXkoa2V5KTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZV9oZWFkZXJsb2dvKCkgewogICAgaGlkZV9oZWFkZXJsb2dvKGNvbmZpZy5oaWRlX2hlYWRlcmxvZ28pOwogIH0KCiAgZnVuY3Rpb24gc2hvd19jb25maWdfZGlhbG9nKGJvb2wpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZmdfZGlhbG9nJykuc3R5bGUuZGlzcGxheSA9IChib29sID8gJ2Jsb2NrJyA6ICdub25lJyk7CiAgfQoKCiAgLyoqKioqKioqKioqKioqKioqKioqLwogIC8qIGhlbHBlciBmdW5jdGlvbnMgKi8KICAvKioqKioqKioqKioqKioqKioqKiovCgogIGZ1bmN0aW9uIHNldF9jb29raWUobmFtZSwgdmFsdWUsIHZhbGlkX2Zvcl9kYXlzID0gMzY1KSB7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTsKICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArICh2YWxpZF9mb3JfZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKTsKICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX07IGV4cGlyZXM9JHtkYXRlLnRvVVRDU3RyaW5nKCl9OyBwYXRoPS9gOwogIH0KCiAgZnVuY3Rpb24gZ2V0X2Nvb2tpZShuYW1lKSB7CiAgICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7CiAgICBmb3IgKGNvbnN0IGNvb2tpZSBvZiBjb29raWVzKSB7CiAgICAgIGNvbnN0IGt2ID0gY29va2llLnNwbGl0KCc9Jyk7CiAgICAgIGlmIChrdi5sZW5ndGggPT09IDIgJiYga3ZbMF0udHJpbSgpID09PSBuYW1lKSB7CiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChrdlsxXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAnJzsKICB9CgogIGZ1bmN0aW9uIHNsZWVwKG1zKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTsKICB9CgogIC8vIGhlbHBlciBmdW5jdGlvbiB0byBtb2RpZnkgbm9kZXMgb24gY3JlYXRpb24KICBmdW5jdGlvbiByZWdpc3Rlcl9vYnNlcnZlcihub2RlX3ByZWRpY2F0ZSwgbm9kZV9tb2RpZmllcikgewogICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7CiAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7CiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG11dGF0aW9uLmFkZGVkTm9kZXMpIHsKICAgICAgICAgIGlmIChub2RlX3ByZWRpY2F0ZShub2RlKSkgewogICAgICAgICAgICBpZiAobm9kZV9tb2RpZmllcihub2RlLCBvYnNlcnZlcikpIHsgLy8gYXJlIHdlIGRvbmU/CiAgICAgICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CgogICAgcmV0dXJuIG9ic2VydmVyOwogIH0KCiAgZnVuY3Rpb24gZ2V0X3Njcm9sbGJhcl93aWR0aCgpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgZGl2LnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CiAgICBjb25zdCBzY3JvbGxiYXJfd2lkdGggPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7CiAgICBkaXYucmVtb3ZlKCk7CiAgICByZXR1cm4gc2Nyb2xsYmFyX3dpZHRoOwogIH0KCiAgLy8gKGFsbW9zdCkgZGVlcGNsb25lIGFuIG9iamVjdAogIGZ1bmN0aW9uIE9iamVjdF9jbG9uZShvYmopIHsKICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgewogICAgICAvLyBzaGFsbG93IGNsb25lIEFycmF5cyBhbmQgU2V0cwogICAgICBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiBbLi4ub2JqXTsKICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIFNldCkgcmV0dXJuIG5ldyBTZXQob2JqKTsKCiAgICAgIGNvbnN0IG5ld19vYmogPSB7fTsKICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkKICAgICAgICBuZXdfb2JqW2tleV0gPSBPYmplY3RfY2xvbmUodmFsdWUpOwogICAgICByZXR1cm4gbmV3X29iajsKICAgIH0KCiAgICByZXR1cm4gb2JqOwogIH0KCiAgZnVuY3Rpb24gU2V0X2RpZmZlcmVuY2UoYSwgYikgewogICAgcmV0dXJuIG5ldyBTZXQoWy4uLmFdLmZpbHRlcigoeCkgPT4gIWIuaGFzKHgpKSk7CiAgfQoKICBmdW5jdGlvbiBTZXRfdW5pb24oYSwgYikgewogICAgcmV0dXJuIG5ldyBTZXQoWy4uLmEsIC4uLmJdKTsKICB9CgogIGZ1bmN0aW9uIGluc2VydF9ub2RlX2FmdGVyKG5vZGUsIHJlZl9ub2RlKSB7CiAgICByZWZfbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCByZWZfbm9kZS5uZXh0U2libGluZyk7CiAgfQoKICBmdW5jdGlvbiBzaG93X25vdGljZShsb2dGdW5jLCAuLi5tc2cpIHsKICAgIGlmICh1bnNhZmVXaW5kb3cubm90aWNlKSB1bnNhZmVXaW5kb3cubm90aWNlKG1zZ1swXSk7CiAgICBpZiAobG9nRnVuYykgbG9nRnVuYyguLi5tc2cpOwogIH0KCiAgZnVuY3Rpb24gZ2V0X29yaWdpbmFsX2JhY2tncm91bmRfY29sb3IoKSB7CiAgICAvLyB0aGUgYmFja2dyb3VuZC1jb2xvciBzdHlsZSBnZXRzIGNoYW5nZWQgdGhyb3VnaCB0aGUgKHNpdGUpc2NyaXB0LCBidXQgd2UgbmVlZCB0aGUgb3JpZ2luYWwgb25lCiAgICAvLyB0aGVyZSBoYXMgdG8gYmUgYSBiZXR0ZXIgd2F5IHRoYW4gdGhpcywgcmlnaHQ/CiAgICBjb25zdCBjdXJyZW50ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnJzsKICAgIGNvbnN0IG9yaWdpbmFsID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjdXJyZW50OwogICAgcmV0dXJuIG9yaWdpbmFsOwogIH0KCiAgLy8gInJnYihyLGcsYikiIC0+IFtpbnQociksIGludChnKSwgaW50KGIpXQogIGZ1bmN0aW9uIHJnYl90b19hcnJheShyZ2IpIHsKICAgIGNvbnN0IGFyciA9IHJnYi5zdWJzdHJpbmcocmdiLmluZGV4T2YoJygnKSArIDEsIHJnYi5sYXN0SW5kZXhPZignKScpKS5zcGxpdCgvLFxzKi8pOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspCiAgICAgIGFycltpXSA9IHBhcnNlSW50KGFycltpXSwgMTApOwogICAgcmV0dXJuIGFycjsKICB9CgogIGZ1bmN0aW9uIHJnYl9hcnJheV9pc19kYXJrKHJnYl9hcnJheSkgewogICAgbGV0IGF2ZyA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJnYl9hcnJheS5sZW5ndGg7IGkrKykKICAgICAgYXZnICs9IHJnYl9hcnJheVtpXTsKICAgIGF2ZyAvPSByZ2JfYXJyYXkubGVuZ3RoOwoKICAgIHJldHVybiAoYXZnIDw9IDEyOCk7CiAgfQoKICBmdW5jdGlvbiByZ2JfYXJyYXlfc2hpZnQocmdiLCBzaGlmdCkgewogICAgY29uc3Qgc2hpZnRlZCA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspCiAgICAgIHNoaWZ0ZWQucHVzaChNYXRoLm1pbihNYXRoLm1heChyZ2JbaV0gKyBzaGlmdCwgMCksIDI1NSkpOwoKICAgIHJldHVybiBzaGlmdGVkOwogIH0KCiAgLy8gW3IsIGcsIGJdIC0+ICJyZ2IocixnLGIpIgogIGZ1bmN0aW9uIHJnYl9hcnJheV90b19yZ2IocmdiKSB7CiAgICBpZiAocmdiLmxlbmd0aCA9PT0gMykKICAgICAgcmV0dXJuICdyZ2IoJyArIHJnYlswXSArICcsJyArIHJnYlsxXSArICcsJyArIHJnYlsyXSArICcpJzsKICAgIHJldHVybiAncmdiYSgnICsgcmdiWzBdICsgJywnICsgcmdiWzFdICsgJywnICsgcmdiWzJdICsgJywnICsgcmdiWzNdICsgJyknOwogIH0KCiAgZnVuY3Rpb24gaXNfZGFya21vZGUoKSB7CiAgICBjb25zdCB0aGVtZSA9IGdldF9jb29raWUoJ3RoZW1lJyk7CiAgICBpZiAodGhlbWUgIT09ICcnICYmIE51bWJlcih0aGVtZSkgIT09IDApCiAgICAgIHJldHVybiB0cnVlOwoKICAgIC8vIGZhbGxiYWNrCiAgICBjb25zdCByZ2IgPSByZ2JfdG9fYXJyYXkoZ2V0X29yaWdpbmFsX2JhY2tncm91bmRfY29sb3IoKSk7CiAgICByZXR1cm4gcmdiX2FycmF5X2lzX2RhcmsocmdiKTsKICB9CgogIC8vIGhlbHBlciBmdW5jdGlvbiB0byBhZGp1c3QgYmFja2dyb3VuZCBjb2xvcnMgYmFzZWQgb24gbGlnaHQgb3IgZGFyayBtb2RlCiAgZnVuY3Rpb24gc2hpZnRlZF9iYWNrZ3JvdW5kQ29sb3Ioc2hpZnQpIHsKICAgIGNvbnN0IHJnYiA9IHJnYl90b19hcnJheShnZXRfb3JpZ2luYWxfYmFja2dyb3VuZF9jb2xvcigpKTsKICAgIGNvbnN0IHNoaWZ0ZWRfcmdiID0gcmdiX2FycmF5X3NoaWZ0KHJnYiwgKGlzX2Rhcmttb2RlKCkgPyAxIDogLTEpICogc2hpZnQpOwogICAgcmV0dXJuIHJnYl9hcnJheV90b19yZ2Ioc2hpZnRlZF9yZ2IpOwogIH0KCgogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAvKiBnZW5lcmFsIHNpdGUgZnVuY3Rpb25zICovCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICBjb25zdCB0aHVtYm5haWxfY2FjaGUgPSBuZXcgTWFwKCk7IC8vIGlkIC0+IGFycmF5IG9mIHRodW1ibmFpbCBlbGVtZW50cwogIGxldCBjYWNoZWRfc2VhcmNoX3RhZ3MgPSBudWxsOwoKICBmdW5jdGlvbiBnZXRfc2VhcmNoX3RhZ3MoKSB7CiAgICBpZiAoY2FjaGVkX3NlYXJjaF90YWdzICE9PSBudWxsKSByZXR1cm4gY2FjaGVkX3NlYXJjaF90YWdzOwoKICAgIGNvbnN0IHRhZ3MgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXMuZ2V0KCd0YWdzJyk7CiAgICBjYWNoZWRfc2VhcmNoX3RhZ3MgPSAodGFncyA9PT0gbnVsbCA/IFtdIDogdGFncy5zcGxpdCgnICcpKTsKCiAgICByZXR1cm4gY2FjaGVkX3NlYXJjaF90YWdzOwogIH0KCiAgLy8gaXMgb3duIHVwbG9hZHMgb3IgZmF2b3JpdGVzIHBhZ2UKICBmdW5jdGlvbiBpc19wZXJzb25hbF9wb3N0X3BhZ2UoKSB7CiAgICBjb25zdCB1c2VybmFtZSA9IGdldF91c2VybmFtZSgpOwogICAgaWYgKHVzZXJuYW1lID09PSBudWxsKSByZXR1cm4gZmFsc2U7CgogICAgY29uc3QgdGFncyA9IGdldF9zZWFyY2hfdGFncygpOwogICAgcmV0dXJuIHRhZ3MuaW5jbHVkZXMoJ2ZhdjonICsgdXNlcm5hbWUpIHx8IHRhZ3MuaW5jbHVkZXMoJ3VzZXI6JyArIHVzZXJuYW1lKTsKICB9CgogIGZ1bmN0aW9uIGhpZGVfaGVhZGVybG9nbyhoaWRlKSB7CiAgICBjb25zdCBoZWFkZXJsb2dvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlYWRlcmxvZ28nKTsKICAgIGlmIChoZWFkZXJsb2dvICE9PSBudWxsKSBoZWFkZXJsb2dvLnN0eWxlLmRpc3BsYXkgPSAoaGlkZSA/ICdub25lJyA6ICcnKTsKICB9CgogIGZ1bmN0aW9uIGFkZF9jb25maWdfZGlhbG9nKCkgewogICAgY29uc3QgY2ZnX2RpYWxvZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgY2ZnX2RpYWxvZy5pZCA9ICdjZmdfZGlhbG9nJzsKICAgIGNmZ19kaWFsb2cuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIGNmZ19kaWFsb2cuc3R5bGUucGFkZGluZyA9ICc2cHggMTJweCA2cHggMTJweCc7CiAgICBjZmdfZGlhbG9nLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIHNoaWZ0ZWRfYmFja2dyb3VuZENvbG9yKDMyKTsKICAgIGNmZ19kaWFsb2cuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZ2V0X29yaWdpbmFsX2JhY2tncm91bmRfY29sb3IoKTsKICAgIC8vIGZpeGVkLCBjZW50ZXJlZCBkaXYKICAgIGNmZ19kaWFsb2cuc3R5bGUudG9wICA9ICc1MCUnOwogICAgY2ZnX2RpYWxvZy5zdHlsZS5sZWZ0ID0gJzUwJSc7CiAgICBjZmdfZGlhbG9nLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUoLTUwJSwgLTUwJSknOwogICAgY2ZnX2RpYWxvZy5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7CiAgICBjZmdfZGlhbG9nLnN0eWxlLnpJbmRleCA9ICcxMDAwMic7CiAgICAvLyBzY3JvbGwgYmFycyBpZiB0b28gbGFyZ2UgKHJlc2l6aW5nIHRleHRhcmVhcyBiZWhhdmVzIGEgYml0IHdlaXJkbHkgb24gQ2hyb21lIGJlY2F1c2UgaXQgc2V0cyBtYXJnaW5zKQogICAgY2ZnX2RpYWxvZy5zdHlsZS5taW5XaWR0aCAgPSAnMzB2dyc7CiAgICBjZmdfZGlhbG9nLnN0eWxlLm1heFdpZHRoICA9ICc5MHZ3JzsKICAgIGNmZ19kaWFsb2cuc3R5bGUubWF4SGVpZ2h0ID0gJzkwdmgnOwogICAgY2ZnX2RpYWxvZy5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJzsKCiAgICAvLyBnZW5lcmF0ZSB0aGUgY29udGVudCBvZiB0aGUgY29uZmlnIG1lbnUKICAgIGxldCBpbm5lckRpdkhUTUwgPSBgPGRpdiBzdHlsZT0nZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbi1ib3R0b206IDZweDsnPlNhbmtha3VBZGRvbiAke1ZFUlNJT059PC9kaXY+YDsKICAgIC8vICsgYDxociBzdHlsZT0nbWFyZ2luLXRvcDogMDsgbWFyZ2luLWJvdHRvbTogMnB4OyBib3JkZXI6MXB4IHNvbGlkICR7c2hpZnRlZF9iYWNrZ3JvdW5kQ29sb3IoMzIpfTsnPmA7CgogICAgLy8gYWRkIHRhYnMsIFRPRE86IHRoZXkncmUgdWdseSBlc3BlY2lhbGx5IGluIGRhcmsgbW9kZQogICAgaW5uZXJEaXZIVE1MICs9ICc8ZGl2IGlkPSJjZmdfdGFicyIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IHdoaXRlLXNwYWNlOiBub3dyYXA7Ij4nOwogICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoQ09ORklHX1RBQlNfVEVNUExBVEUpKQogICAgICBpbm5lckRpdkhUTUwgKz0gYDxidXR0b24gaWQ9ImNmZ190YWJfJHtrZXl9IiBzdHlsZT0iYm9yZGVyLXN0eWxlOiBzb2xpZDsgcGFkZGluZzogMCAycHggMCAycHg7IG1hcmdpbjogMCAycHggMCAycHg7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyBib3JkZXItYm90dG9tLXdpZHRoOiAwOyBjdXJzb3I6IHBvaW50ZXIiPiR7dmFsdWUubmFtZX08L2J1dHRvbj5gOwogICAgaW5uZXJEaXZIVE1MICs9ICc8L2Rpdj4nOwoKICAgIC8vIGFkZCBib2RpZXMKICAgIGZvciAoY29uc3QgW2JvZHlfa2V5LCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhDT05GSUdfQ0FURUdPUllfVEVNUExBVEUpKSB7CiAgICAgIGlubmVyRGl2SFRNTCArPSBgPGRpdiBpZD0iY2ZnX2JvZHlfJHtib2R5X2tleX0iIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEyOCwgMTI4LCAxMjgsIDAuMSk7IG1hcmdpbi1ib3R0b206IDRweDsgcGFkZGluZzogMCA0cHggMnB4IDRweDsiPmAKICAgICAgICArIGA8aDU+JHtib2R5Lm5hbWV9PC9oNT5gOwoKICAgICAgLy8gYWRkIGNvbmZpZyBlbGVtZW50cyBmb3IgZWFjaCBib2R5CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGJvZHkuZW50cmllcykgewogICAgICAgIGNvbnN0IHZhbHVlID0gU0VUVElOR1NfVEVNUExBVEVba2V5XTsKCiAgICAgICAgY29uc3QgZ2VuZXJhdGVfc3BhbiA9ICgpID0+IGA8c3BhbiBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsgJHt2YWx1ZS50aXRsZSA/ICdjdXJzb3I6aGVscDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgZGFzaGVkOyAnIDogJyd9IiBgCiAgICAgICAgICArIGAke3ZhbHVlLnRpdGxlID8gYHRpdGxlPSIke3ZhbHVlLnRpdGxlfSJgIDogJyd9ID4ke3ZhbHVlLmRlc2N9PC9zcGFuPmA7CgogICAgICAgIGlubmVyRGl2SFRNTCArPSAnPGRpdj4nOwogICAgICAgIHN3aXRjaCAodmFsdWUudHlwZSkgewogICAgICAgICAgY2FzZSAnY2hlY2tib3gnOgogICAgICAgICAgICBpbm5lckRpdkhUTUwgKz0gYDxpbnB1dCBpZD0nJHtLRVlfUFJFRklYfSR7a2V5fScgdHlwZT0nY2hlY2tib3gnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW46IDNweCA0cHggM3B4IDRweDsnPmA7CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSBnZW5lcmF0ZV9zcGFuKCk7CiAgICAgICAgICAgIC8vIGhhcmRjb2RlICd2aWRlb192b2x1bWUnIGVsZW1lbnQ6CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSAoa2V5ID09PSAnc2V0X3ZpZGVvX3ZvbHVtZScgPyBgPGlucHV0IGlkPSIke0tFWV9QUkVGSVh9dmlkZW9fdm9sdW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxMDAiIHNpemU9IjQiPiVgIDogJycpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3NlbGVjdCc6CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSBnZW5lcmF0ZV9zcGFuKCk7CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSBgPHNlbGVjdCBpZD0iJHtLRVlfUFJFRklYfSR7a2V5fSI+YDsKICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUub3B0aW9ucykpCiAgICAgICAgICAgICAgaW5uZXJEaXZIVE1MICs9IGA8b3B0aW9uIHZhbHVlPSIke2t9Ij4ke3Z9PC9vcHRpb24+YDsKICAgICAgICAgICAgaW5uZXJEaXZIVE1MICs9ICc8L3NlbGVjdD4nOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgJ3RleHQnOgogICAgICAgICAgICBpbm5lckRpdkhUTUwgKz0gZ2VuZXJhdGVfc3BhbigpOwogICAgICAgICAgICBpbm5lckRpdkhUTUwgKz0gYDx0ZXh0YXJlYSBpZD0iJHtLRVlfUFJFRklYfSR7a2V5fSIgcm93cz04IHN0eWxlPSd3aWR0aDogMTAwJTsgYm94LXNpemluZzogYm9yZGVyLWJveCc+PC90ZXh0YXJlYT5gOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogQ09ORklHX1RFTVBMQVRFIGlzIGRlZmVjdGl2ZSEnLCB2YWx1ZS50eXBlKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlubmVyRGl2SFRNTCArPSAnPC9kaXY+JzsKICAgICAgfQoKICAgICAgaW5uZXJEaXZIVE1MICs9ICc8L2Rpdj4nOwogICAgfQoKICAgIGlubmVyRGl2SFRNTCArPSAnPGRpdiBzdHlsZT0icGFkZGluZzogMnB4Ij4nOwogICAgaW5uZXJEaXZIVE1MICs9ICAnPGJ1dHRvbiBpZD0iY29uZmlnX2Nsb3NlIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+Q2xvc2U8L2J1dHRvbj4nOwogICAgaW5uZXJEaXZIVE1MICs9ICAnPGJ1dHRvbiBpZD0iY29uZmlnX3Jlc2V0IiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgdGl0bGU9IlJlc2V0cyBhbGwgc2V0dGluZ3MgdG8gZGVmYXVsdCAoYnV0IGRvZXNuXCd0IGNsZWFyIHBvc3QgaGlzdG9yeSkiPlJlc2V0IHNldHRpbmdzPC9idXR0b24+JzsKICAgIGlubmVyRGl2SFRNTCArPSAgJzxidXR0b24gaWQ9Imhpc3RvcnlfY2xlYXIiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiB0aXRsZT0iQ2xlYXJzIHRoZSBwb3N0IHZpZXcgaGlzdG9yeSBmb3IgdGhlIGN1cnJlbnQgc2l0ZSAoY2hhbiBvciBpZG9sKSI+Q2xlYXIgcG9zdCB2aWV3IGhpc3Rvcnk8L2J1dHRvbj4nOwogICAgaW5uZXJEaXZIVE1MICs9ICc8L2Rpdj4nOwogICAgaW5uZXJEaXZIVE1MICs9ICc8ZGl2IHN0eWxlPSJwYWRkaW5nOiAycHgiPiZuYnNwOypyZXF1aXJlcyBhIHBhZ2UgcmVsb2FkLjwvZGl2Pic7CgogICAgY2ZnX2RpYWxvZy5pbm5lckhUTUwgPSBpbm5lckRpdkhUTUw7CgogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjZmdfZGlhbG9nKTsKCiAgICAvLyBhZGQgZXZlbnRzCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlnX2Nsb3NlJykub25jbGljayA9ICgpID0+IHsgc2hvd19jb25maWdfZGlhbG9nKGZhbHNlKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbmZpZ19yZXNldCcpLm9uY2xpY2sgPSAoKSA9PiB7IHJlc2V0X2NvbmZpZygpOyByZXR1cm4gZmFsc2U7IH07CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlzdG9yeV9jbGVhcicpLm9uY2xpY2sgPSAoKSA9PiB7IHJlc2V0X3NldHRpbmcoSElTVE9SWV9LRVkpOyByZXR1cm4gZmFsc2U7IH07CgogICAgLy8gVE9ETzogZ2VuZXJpZnkKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZmdfYm9keV9lZGl0aW5nJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZmdfdGFiX2dlbmVyYWwnKS5vbmNsaWNrID0gKCkgPT4gewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2ZnX2JvZHlfcG9zdCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2ZnX2JvZHlfZ2VuZXJhbCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2ZnX2JvZHlfZWRpdGluZycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2ZnX3RhYl9lZGl0aW5nJykub25jbGljayA9ICgpID0+IHsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NmZ19ib2R5X3Bvc3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2ZnX2JvZHlfZ2VuZXJhbCcpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZmdfYm9keV9lZGl0aW5nJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH07CgogICAgZm9yZWFjaF9jb25maWdfZWxlbWVudCgoY2ZnX2VsZW0sIGtleSwgZ2V0X3ZhbHVlKSA9PiB7CiAgICAgIGNmZ19lbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHsKICAgICAgICB1cGRhdGVfc2V0dGluZyhrZXksIGdldF92YWx1ZSgpKTsKICAgICAgICBzYXZlX3NldHRpbmcoa2V5LCBnZXRfdmFsdWUoKSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBhZGRfY29uZmlnX2J1dHRvbigpIHsKICAgIGNvbnN0IG5hdmJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYXZiYXInKTsKICAgIGlmIChuYXZiYXIgPT09IG51bGwpIHJldHVybjsKCiAgICBuYXZiYXIuc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnOyAvLyBoYWNrIHRvIGZpdCBjb25maWcgYnV0dG9uCgogICAgY29uc3QgbGFuZ19zZWxlY3QgPSBuYXZiYXIucXVlcnlTZWxlY3RvcignLmxhbmctc2VsZWN0Jyk7CiAgICBpZiAobGFuZ19zZWxlY3QgIT09IG51bGwpCiAgICAgIGxhbmdfc2VsZWN0LnN0eWxlLmJvcmRlclJpZ2h0ID0gMDsgLy8gcHJldmVudCBjb25maWcgYnV0dG9uIGZyb20ganVtcGluZyBhIHBpeGVsIG9uIG1vdXNlb3ZlcgoKICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdBJyk7CiAgICBhLmhyZWYgPSAnIyc7CiAgICBhLm9uY2xpY2sgPSAoKSA9PiB7IHNob3dfY29uZmlnX2RpYWxvZyh0cnVlKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgYS5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTEwJTsiPuKamTwvc3Bhbj4gQWRkb24gY29uZmlnJzsKICAgIGEuc3R5bGUuZm9udFNpemUgPSAnMTIwJSc7CgogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdMSScpOwogICAgbGkuY2xhc3NOYW1lID0gJ2xhbmctc2VsZWN0JzsgLy8gbWF0Y2ggc3R5bGUgb2YgdG9wIGJhcgogICAgbGkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJzEwcHgnOwogICAgbGkuYXBwZW5kQ2hpbGQoYSk7CiAgICBuYXZiYXIuYXBwZW5kQ2hpbGQobGkpOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZ19zZWFyY2hfYnV0dG9ucygpIHsKICAgIGNvbnN0IHRhZ3NpZGViYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnLXNpZGViYXInKTsKICAgIGlmICh0YWdzaWRlYmFyID09PSBudWxsKSByZXR1cm47CgogICAgY29uc3QgaXRlbXMgPSB0YWdzaWRlYmFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdMSScpOwogICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7CiAgICAgIGNvbnN0IHRhZ2xpbmsgPSBpdGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdBJylbMF07CiAgICAgIGNvbnN0IHRhZ25hbWUgPSB0YWdsaW5rLmlubmVyVGV4dC5yZXBsYWNlKC8gL2csICdfJyk7IC8vIGhvcGVmdWxseSB0aGlzIGlzIHRoZSBvbmx5IGVkZ2VjYXNlCgogICAgICAvLyBnZW5lcmF0ZXMgY2xpY2sgbGlzdGVuZXJzCiAgICAgIGNvbnN0IHRhZ19zZWFyY2hfYnV0dG9uX2Z1bmMgPSBmdW5jdGlvbih0YWduYW1lKSB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgICAgY29uc3Qgc2VhcmNoX2ZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ3MnKTsKCiAgICAgICAgICBjb25zdCBzZWFyY2hfdGFncyA9IHNlYXJjaF9maWVsZC52YWx1ZS50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgICAgY29uc3QgdGFnX2luZGV4ID0gc2VhcmNoX3RhZ3MuaW5kZXhPZih0YWduYW1lKTsKCiAgICAgICAgICAvLyBhZGQgdGFnIGlmIG1pc3NpbmcsIHJlbW92ZSBpZiBleGlzdGluZwogICAgICAgICAgaWYgKHRhZ19pbmRleCA9PT0gLTEpIHsKICAgICAgICAgICAgc2VhcmNoX2ZpZWxkLnZhbHVlID0gc2VhcmNoX2ZpZWxkLnZhbHVlLnRyaW0oKSArICcgJyArIHRhZ25hbWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZWFyY2hfdGFncy5zcGxpY2UodGFnX2luZGV4LCAxKTsKICAgICAgICAgICAgc2VhcmNoX2ZpZWxkLnZhbHVlID0gc2VhcmNoX3RhZ3Muam9pbignICcpOwogICAgICAgICAgfQoKICAgICAgICAgIHNlYXJjaF9maWVsZC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7CgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH07CiAgICAgIH07CgogICAgICB7CiAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0EnKTsKICAgICAgICBhLmhyZWYgPSAnIyc7CiAgICAgICAgYS5pbm5lclRleHQgPSAnKyc7CiAgICAgICAgYS5vbmNsaWNrID0gdGFnX3NlYXJjaF9idXR0b25fZnVuYyh0YWduYW1lKTsKCiAgICAgICAgaXRlbS5pbnNlcnRCZWZvcmUoYSwgdGFnbGluayk7CiAgICAgICAgaXRlbS5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyAnKSwgdGFnbGluayk7CiAgICAgIH0KCiAgICAgIHsKICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQScpOwogICAgICAgIGEuaHJlZiA9ICcjJzsKICAgICAgICBhLmlubmVyVGV4dCA9ICctJzsKICAgICAgICBhLm9uY2xpY2sgPSB0YWdfc2VhcmNoX2J1dHRvbl9mdW5jKCctJyArIHRhZ25hbWUpOwoKICAgICAgICBpdGVtLmluc2VydEJlZm9yZShhLCB0YWdsaW5rKTsKICAgICAgICBpdGVtLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpLCB0YWdsaW5rKTsKICAgICAgfQoKICAgICAgaWYgKGNvbmZpZy5vcl90YWdfc2VhcmNoX2J1dHRvbikgewogICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdBJyk7CiAgICAgICAgYS5ocmVmID0gJyMnOwogICAgICAgIGEuaW5uZXJUZXh0ID0gJ34nOwogICAgICAgIGEub25jbGljayA9IHRhZ19zZWFyY2hfYnV0dG9uX2Z1bmMoJ34nICsgdGFnbmFtZSk7CgogICAgICAgIGl0ZW0uaW5zZXJ0QmVmb3JlKGEsIHRhZ2xpbmspOwogICAgICAgIGl0ZW0uaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyksIHRhZ2xpbmspOwogICAgICB9CiAgICB9CiAgfQoKICBjb25zdCBjb2xsYXBzZXJfbWFwID0gbmV3IE1hcCgpOyAvLyBjYXRlZ29yeSAtPiBbY29sbGFwc2VyLCB0YWdzXQoKICBmdW5jdGlvbiBjb2xsYXBzZV90YWdfY2F0ZWdvcnkoY2F0ZWdvcnksIGNvbGxhcHNlLCBzYXZlID0gdHJ1ZSkgewogICAgY29uc3QgW2NvbGxhcHNlciwgdGFnc10gPSBjb2xsYXBzZXJfbWFwLmdldChjYXRlZ29yeSk7CgogICAgY29uc3QgYSA9IGNvbGxhcHNlci5jaGlsZHJlblswXTsKICAgIGNvbnN0IG1pZGRsZV9kaXYgPSBhLmNoaWxkcmVuWzFdOwoKICAgIGlmIChjb2xsYXBzZSkgewogICAgICBtaWRkbGVfZGl2LnN0eWxlLmhlaWdodCA9ICcwJzsKICAgICAgbWlkZGxlX2Rpdi5zdHlsZS5ib3JkZXJUb3BXaWR0aCA9ICczcHgnOwogICAgICBtaWRkbGVfZGl2LnN0eWxlLmJvcmRlckJvdHRvbVdpZHRoID0gJzNweCc7CiAgICAgIG1pZGRsZV9kaXYuc3R5bGUubWFyZ2luVG9wID0gJzNweCc7CiAgICAgIG1pZGRsZV9kaXYuc3R5bGUubWFyZ2luQm90dG9tID0gJzNweCc7CgogICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKQogICAgICAgIHRhZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfSBlbHNlIHsKICAgICAgbWlkZGxlX2Rpdi5zdHlsZS5oZWlnaHQgPSAnNHB4JzsKICAgICAgbWlkZGxlX2Rpdi5zdHlsZS5ib3JkZXJUb3BXaWR0aCA9ICcycHgnOwogICAgICBtaWRkbGVfZGl2LnN0eWxlLmJvcmRlckJvdHRvbVdpZHRoID0gJzJweCc7CiAgICAgIG1pZGRsZV9kaXYuc3R5bGUubWFyZ2luVG9wID0gJzJweCc7CiAgICAgIG1pZGRsZV9kaXYuc3R5bGUubWFyZ2luQm90dG9tID0gJzJweCc7CgogICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKQogICAgICAgIHRhZy5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICB9CgogICAgaWYgKGNvbGxhcHNlKSBjb25maWcuY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7CiAgICBlbHNlICAgICAgICAgIGNvbmZpZy5jb2xsYXBzZWRfdGFnX2NhdGVnb3JpZXMuZGVsZXRlKGNhdGVnb3J5KTsKCiAgICBpZiAoc2F2ZSkgc2F2ZV9zZXR0aW5nKCdjb2xsYXBzZWRfdGFnX2NhdGVnb3JpZXMnLCBjb25maWcuY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzKTsKICB9CgogIGxldCBkcmFnX2NvbGxhcHNlID0gZmFsc2U7CiAgbGV0IGRyYWdfY29sbGFwc2VfY2F0ZWdvcmllczsKCiAgZnVuY3Rpb24gZHJhZ19jb2xsYXBzZV9kb3duKGUpIHsKICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIGRyYWdfY29sbGFwc2UgPSB0cnVlOwoKICAgIGNvbnN0IGNhdGVnb3J5ID0gZS5jdXJyZW50VGFyZ2V0LmNsYXNzTmFtZTsKICAgIGRyYWdfY29sbGFwc2VfY2F0ZWdvcmllcyA9ICFjb25maWcuY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzLmhhcyhjYXRlZ29yeSk7CgogICAgY29sbGFwc2VfdGFnX2NhdGVnb3J5KGNhdGVnb3J5LCBkcmFnX2NvbGxhcHNlX2NhdGVnb3JpZXMpOwogIH0KCiAgZnVuY3Rpb24gZHJhZ19jb2xsYXBzZV9tb3ZlKGUpIHsKICAgIGlmICghZHJhZ19jb2xsYXBzZSkgcmV0dXJuOwoKICAgIGNvbnN0IGNhdGVnb3J5ID0gZS5jdXJyZW50VGFyZ2V0LmNsYXNzTmFtZTsKCiAgICBpZiAoZHJhZ19jb2xsYXBzZV9jYXRlZ29yaWVzICE9PSBjb25maWcuY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzLmhhcyhjYXRlZ29yeSkpCiAgICAgIGNvbGxhcHNlX3RhZ19jYXRlZ29yeShjYXRlZ29yeSwgZHJhZ19jb2xsYXBzZV9jYXRlZ29yaWVzKTsKICB9CgogIGZ1bmN0aW9uIGRyYWdfY29sbGFwc2VfdXAoKSB7CiAgICBkcmFnX2NvbGxhcHNlID0gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBhZGRfdGFnX2NhdGVnb3J5X2NvbGxhcHNlcigpIHsKICAgIGNvbnN0IHRhZ3NpZGViYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnLXNpZGViYXInKTsKICAgIGlmICh0YWdzaWRlYmFyID09PSBudWxsKSByZXR1cm47CgogICAgY29uc3QgaXRlbXMgPSB0YWdzaWRlYmFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdMSScpOwoKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZHJhZ19jb2xsYXBzZV91cCk7CgogICAgY29uc3Qgc2V0dXBfY29sbGFwc2VyID0gKGNvbGxhcHNlciwgY2F0ZWdvcnksIHRhZ3MpID0+IHsKICAgICAgY29sbGFwc2VyX21hcC5zZXQoY2F0ZWdvcnksIFtjb2xsYXBzZXIsIHRhZ3NdKTsKCiAgICAgIGNvbGxhcHNlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBkcmFnX2NvbGxhcHNlX2Rvd24pOwogICAgICBjb2xsYXBzZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZHJhZ19jb2xsYXBzZV9tb3ZlKTsKICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykKICAgICAgICB0YWcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZHJhZ19jb2xsYXBzZV9tb3ZlKTsKICAgIH07CgogICAgbGV0IGN1cnJfY2F0ZWdvcnkgPSBudWxsOwogICAgbGV0IGN1cnJfY2F0ZWdvcnlfdGFncyA9IFtdOwogICAgbGV0IHByZXZfY2F0ZWdvcnlfY29sbGFwc2VyID0gbnVsbDsKICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbXTsKCiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHsKICAgICAgaWYgKGl0ZW0uY2xhc3NOYW1lID09PSBjdXJyX2NhdGVnb3J5KSB7CiAgICAgICAgY3Vycl9jYXRlZ29yeV90YWdzLnB1c2goaXRlbSk7CiAgICAgIH0gZWxzZSB7IC8vIHJlYWNoZWQgbmV3IGNhdGVnb3J5CiAgICAgICAgaWYgKHByZXZfY2F0ZWdvcnlfY29sbGFwc2VyICE9PSBudWxsKQogICAgICAgICAgc2V0dXBfY29sbGFwc2VyKHByZXZfY2F0ZWdvcnlfY29sbGFwc2VyLCBjdXJyX2NhdGVnb3J5LCBbLi4uY3Vycl9jYXRlZ29yeV90YWdzXSk7CgogICAgICAgIGN1cnJfY2F0ZWdvcnkgPSBpdGVtLmNsYXNzTmFtZTsKICAgICAgICBjdXJyX2NhdGVnb3J5X3RhZ3MgPSBbXTsgLy8gaXRlbSB3aWxsIGJlIHB1c2hlZCBpbiB0aGUgbmV4dCBpdGVyYXRpb24sIHNlZSB3YXJuaW5nIGJlbG93CiAgICAgICAgY2F0ZWdvcmllcy5wdXNoKGN1cnJfY2F0ZWdvcnkpOwoKICAgICAgICAvLyBjb2xsYXBzZXIgdmlzdWFscwogICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdBJyk7CiAgICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOwogICAgICAgIGEuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJzsKICAgICAgICBhLmhyZWYgPSAnIyc7CiAgICAgICAgYS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiBlLnByZXZlbnREZWZhdWx0KCkpOwogICAgICAgIGEuaW5uZXJIVE1MID0KICAgICAgICAgICc8ZGl2IHN0eWxlPSJ3aWR0aDo0MCU7IGhlaWdodDogMDsgYm9yZGVyLXRvcC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLWJvdHRvbTogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyI+PC9kaXY+JyArCiAgICAgICAgICAnPGRpdiBzdHlsZT0id2lkdGg6NSU7ICBoZWlnaHQ6IDRweDsgYm9yZGVyLXdpZHRoOiAycHg7IG1hcmdpbjogMnB4IDJweCAycHggMnB4OyBib3JkZXItc3R5bGU6IHNvbGlkIj48L2Rpdj4nICsKICAgICAgICAgICc8ZGl2IHN0eWxlPSJ3aWR0aDo0MCU7IGhlaWdodDogMDsgYm9yZGVyLXRvcC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7IG1hcmdpbi10b3A6IDVweDsgbWFyZ2luLWJvdHRvbTogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyI+PC9kaXY+JzsKCiAgICAgICAgY29uc3QgY29sbGFwc2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnTEknKTsKICAgICAgICBjb2xsYXBzZXIuY2xhc3NOYW1lID0gaXRlbS5jbGFzc05hbWU7CiAgICAgICAgY29sbGFwc2VyLmFwcGVuZENoaWxkKGEpOwogICAgICAgIHByZXZfY2F0ZWdvcnlfY29sbGFwc2VyID0gY29sbGFwc2VyOwoKICAgICAgICAvLyB3YXJuaW5nOiBtb2RpZmllcyBpdGVyYXRpbmcgbGlzdCwgY3VycmVudCBpdGVtIHdpbGwgYmUgcHJvY2Vzc2VkIHR3aWNlCiAgICAgICAgaXRlbS5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2JlZm9yZWJlZ2luJywgY29sbGFwc2VyKTsKICAgICAgfQogICAgfQoKICAgIC8vIHNldHVwIGxhc3QgY29sbGFwc2VyCiAgICBpZiAocHJldl9jYXRlZ29yeV9jb2xsYXBzZXIgIT09IG51bGwpCiAgICAgIHNldHVwX2NvbGxhcHNlcihwcmV2X2NhdGVnb3J5X2NvbGxhcHNlciwgY3Vycl9jYXRlZ29yeSwgWy4uLmN1cnJfY2F0ZWdvcnlfdGFnc10pOwoKICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykKICAgICAgaWYgKGNvbmZpZy5jb2xsYXBzZWRfdGFnX2NhdGVnb3JpZXMuaGFzKGNhdGVnb3J5KSkKICAgICAgICBjb2xsYXBzZV90YWdfY2F0ZWdvcnkoY2F0ZWdvcnksIHRydWUsIGZhbHNlKTsKICB9CgogIGZ1bmN0aW9uIG1vZGlmeV90aHVtYm5haWxzKHJvb3QpIHsKICAgIGlmICghKGNvbmZpZy5zaG93X3NwZWFrZXJfaWNvbiB8fCBjb25maWcuc2hvd19hbmltYXRlZF9pY29uIHx8IGNvbmZpZy52aWV3X2hpc3RvcnlfZW5hYmxlZCkpIHJldHVybjsKICAgIGlmIChyb290ID09PSBudWxsKSByZXR1cm47CgogICAgZm9yIChjb25zdCB0aHVtYiBvZiByb290LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RodW1iJykpIHsKICAgICAgLy8gcmVhZCB0aHVtYm5haWwvcG9zdCBpZAogICAgICBjb25zdCBwaWQgPSB0aHVtYi5pZDsKICAgICAgaWYgKHR5cGVvZiBwaWQgIT09ICdzdHJpbmcnIHx8ICFwaWQuc3RhcnRzV2l0aCgncCcpKSB7CiAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ2FkZG9uIGVycm9yOiB0aHVtYm5haWwgZG9lc25cJ3QgaGF2ZSBhbiBpZD8hJywgdGh1bWIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgaWQgPSBOdW1iZXIocGlkLnN1YnN0cmluZygxKSk7CiAgICAgIGlmIChOdW1iZXIuaXNOYU4oaWQpKSB7CiAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ2FkZG9uIGVycm9yOiB0aHVtYm5haWwgaWQgaXNuXCd0IGEgbnVtYmVyPyEnLCBpZCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICAvLyB1c2UgYW5kIHVwZGF0ZSB0aHVtYm5haWxfY2FjaGUKICAgICAgbGV0IHRodW1icyA9IHRodW1ibmFpbF9jYWNoZS5nZXQoaWQpOwogICAgICBpZiAodGh1bWJzID09PSB1bmRlZmluZWQpIHRodW1icyA9IFtdOwoKICAgICAgY29uc3QgaXNfbmV3ID0gIXRodW1icy5pbmNsdWRlcyh0aHVtYik7CgogICAgICBpZiAoaXNfbmV3KSB0aHVtYnMucHVzaCh0aHVtYik7CiAgICAgIHRodW1ibmFpbF9jYWNoZS5zZXQoaWQsIHRodW1icyk7CgogICAgICBpZiAoaXNfbmV3KSB7CiAgICAgICAgYWRkX3NwZWFrZXJfaWNvbih0aHVtYiwgaWQpOwoKICAgICAgICBpZiAoIWlzX3BlcnNvbmFsX3Bvc3RfcGFnZSgpKQogICAgICAgICAgZmFkZW91dF92aWV3ZWRfcG9zdCh0aHVtYiwgaWQpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfc3BlYWtlcl9pY29uKHRodW1iX3NwYW4pIHsKICAgIGNvbnN0IGltZyA9IHRodW1iX3NwYW4ucXVlcnlTZWxlY3RvcignLnByZXZpZXcnKTsKICAgIGlmIChpbWcgPT09IG51bGwpIHJldHVybjsKICAgIGNvbnN0IGEgPSB0aHVtYl9zcGFuLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdBJyk7CiAgICBpZiAoYS5sZW5ndGggPT09IDApIHJldHVybjsKCiAgICBjb25zdCBpY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU1BBTicpOwogICAgY29uc3QgdGFncyA9IGltZy50aXRsZS50cmltKCkuc3BsaXQoL1xzKy8pOwoKICAgIGlmIChjb25maWcuc2hvd19zcGVha2VyX2ljb24gJiYgKHRhZ3MuaW5jbHVkZXMoJ2hhc19hdWRpbycpKSkgewogICAgICBpY29uLmlubmVyVGV4dCA9ICfwn5SKJzsKICAgIH0gZWxzZSBpZiAoY29uZmlnLnNob3dfYW5pbWF0ZWRfaWNvbiAmJiAodGFncy5pbmNsdWRlcygnYW5pbWF0ZWQnKSB8fCB0YWdzLmluY2x1ZGVzKCd2aWRlbycpKSkgewogICAgICBpY29uLmlubmVyVGV4dCA9ICfij6knOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGljb24uY2xhc3NOYW1lID0gJ3NwZWFrZXJfaWNvbic7CiAgICBpY29uLnN0eWxlLmNvbG9yID0gJyM2NjYnOwogICAgaWNvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CiAgICBpY29uLnN0eWxlLnRvcCAgID0gJzJweCc7IC8vIGFjY291bnQgZm9yIGJvcmRlcgogICAgaWNvbi5zdHlsZS5yaWdodCA9ICcycHgnOwogICAgaWNvbi5zdHlsZS5mb250U2l6ZSA9ICcyMDAlJzsKICAgIGljb24uc3R5bGUudGV4dFNoYWRvdyA9ICctMXB4IDAgd2hpdGUsIDAgMXB4IHdoaXRlLCAxcHggMCB3aGl0ZSwgMCAtMXB4IHdoaXRlJzsKICAgIGljb24uc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoNTAlKSB0cmFuc2xhdGVZKC01MCUpJzsKCiAgICBhWzBdLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsgLy8gbWFrZXMgdGhlIGVsZW1lbnQgZml0IGl0cyBjb250ZW50CiAgICBhWzBdLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJzsKICAgIGFbMF0uYXBwZW5kQ2hpbGQoaWNvbik7CiAgfQoKICAvLyBUT0RPIHRoaXMgaXNuJ3Qgb3B0aW1hbCB3aGVuIHRoZSB0aHVtYm5haWwgaGFzIGxvdyBjb250cmFzdCB0byB0aGUgYmFja2dyb3VuZAogIGZ1bmN0aW9uIGZhZGVvdXRfcG9zdCh0aHVtYl9zcGFuKSB7CiAgICBjb25zdCBsaW5rcyA9IHRodW1iX3NwYW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0EnKTsKICAgIGNvbnN0IGltYWdlcyA9IHRodW1iX3NwYW4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0lNRycpOwogICAgaWYgKGxpbmtzLmxlbmd0aCAhPT0gMSB8fCBpbWFnZXMubGVuZ3RoICE9PSAxKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogZm91bmQgYWJub3JtYWwgdGh1bWJuYWlsPyEnLCB0aHVtYl9zcGFuKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIG1vdmUgYm94IHNoYWRvdyBmcm9tIGltYWdlIHRvIGxpbmssIHNvIG9wYWNpdHkgZG9lc24ndCBhZmZlY3QgaXQKICAgIGxpbmtzWzBdLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsKICAgIGxpbmtzWzBdLnN0eWxlLmJveFNoYWRvdyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGltYWdlc1swXSkuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNoYWRvdycpOwogICAgaW1hZ2VzWzBdLnN0eWxlLmJveFNoYWRvdyA9ICcnOwoKICAgIGltYWdlc1swXS5zdHlsZS5vcGFjaXR5ID0gJzIwJSc7CiAgICBmb3IgKGNvbnN0IHNwZWFrZXJfaWNvbiBvZiB0aHVtYl9zcGFuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NwZWFrZXJfaWNvbicpKQogICAgICBzcGVha2VyX2ljb24uc3R5bGUub3BhY2l0eSA9ICcyMCUnOwogIH0KCiAgZnVuY3Rpb24gZmFkZW91dF92aWV3ZWRfcG9zdCh0aHVtYl9zcGFuLCBpZCkgewogICAgaWYgKGNvbmZpZ1tISVNUT1JZX0tFWV0uaGFzKGlkKSkKICAgICAgZmFkZW91dF9wb3N0KHRodW1iX3NwYW4pOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RodW1ibmFpbF9vYnNlcnZlcihwcmVkaWNhdGUpIHsKICAgIC8vIGRvbid0IGhvZyBDUFUgd2hlbiBkaXNhYmxlZCwgYnV0IHJlcXVpcmVzIHBhZ2UgcmVsb2FkIHRvIGFjdGl2YXRlCiAgICBpZiAoIShjb25maWcuc2hvd19zcGVha2VyX2ljb24gfHwgY29uZmlnLnNob3dfYW5pbWF0ZWRfaWNvbiB8fCBjb25maWcudmlld19oaXN0b3J5X2VuYWJsZWQpKSByZXR1cm47CgogICAgLy8gdGhpcyBtaWdodCBvYnNlcnZlIHJlY29tbWVuZGF0aW9ucyB0b28gZWFybHksIHNvIGFkZCBtaXNzaW5nIHRodW1ibmFpbCBpY29ucyBpbiBET01Db250ZW50TG9hZGVkCiAgICByZWdpc3Rlcl9vYnNlcnZlcihwcmVkaWNhdGUsIChub2RlLCBvYnNlcnZlcikgPT4gewogICAgICBtb2RpZnlfdGh1bWJuYWlscyhub2RlKTsKICAgICAgcmV0dXJuIGZhbHNlOyAvLyBsaXN0ZW4gZm9yZXZlcgogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBjb25maWd1cmVfdmlkZW8obm9kZSkgewogICAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUgfHwgbm9kZS50YWdOYW1lICE9PSAnVklERU8nKSByZXR1cm47CgogICAgaWYgKGNvbmZpZy52aWRlb19wYXVzZSkgICAgICBub2RlLnBhdXNlKCk7CiAgICBpZiAoY29uZmlnLnNldF92aWRlb192b2x1bWUpIG5vZGUudm9sdW1lID0gY29uZmlnLnZpZGVvX3ZvbHVtZSAvIDEwMC4wOwogICAgaWYgKGNvbmZpZy52aWRlb19tdXRlKSAgICAgICBub2RlLm11dGVkID0gdHJ1ZTsKICAgIG5vZGUuY29udHJvbHMgPSBjb25maWcudmlkZW9fY29udHJvbHM7CiAgfQoKCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogIC8qIG1haW4gcGFnZSAvIHZpc3VhbGx5IHNpbWlsYXIgcGFnZSBmdW5jdGlvbnMgKi8KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgogIGxldCBjYWxsZWRfYWRkX21vZGVfb3B0aW9ucyA9IGZhbHNlOwogIGxldCBjYWxsX3Bvc3Rtb2RlbWVudV9pbml0X3dvcmthcm91bmQgPSBmYWxzZTsKICBsZXQgY2FjaGVkX3VzZXJuYW1lID0gbnVsbDsKCiAgLy8gd29uJ3Qgd29yayBvbiBhbnkgcGFnZQogIGZ1bmN0aW9uIGdldF91c2VybmFtZSgpIHsKICAgIGlmIChjYWNoZWRfdXNlcm5hbWUgIT09IG51bGwpIHJldHVybiBjYWNoZWRfdXNlcm5hbWU7CgogICAgLy8gcmVhZCBmcm9tIHRoZSAnTXkgRmF2b3JpdGVzJyBidXR0b24gKGluIG9uZSBvZiB0aGUgc3VibmF2cykgaW4gdGhlIG5hdmJhcgogICAgY29uc3QgbmF2YmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ25hdmJhcicpOwogICAgaWYgKG5hdmJhciA9PT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgY29uc3QgZmF2X3ByZWZpeCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyAnLz90YWdzPWZhdiUzQSc7CgogICAgZm9yIChjb25zdCBhIG9mIG5hdmJhci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnQScpKSB7CiAgICAgIGlmICh0eXBlb2YgYS5ocmVmID09PSAnc3RyaW5nJyAmJiBhLmhyZWYuc3RhcnRzV2l0aChmYXZfcHJlZml4KSkgewogICAgICAgIGNhY2hlZF91c2VybmFtZSA9IGEuaHJlZi5zdWJzdHJpbmcoZmF2X3ByZWZpeC5sZW5ndGgpOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGNhY2hlZF91c2VybmFtZTsKICB9CgogIC8vIHRoaXMgd29uJ3QgYmUgY2FsbGVkIHdoZW4gbm90IGxvZ2dlZCBpbiBvciB3aGVuIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgdGFnIHNjcmlwdCBwZXJtaXNzaW9uCiAgZnVuY3Rpb24gYWRkX21vZGVfb3B0aW9ucygpIHsKICAgIGlmIChjYWxsZWRfYWRkX21vZGVfb3B0aW9ucykgcmV0dXJuOwogICAgY2FsbGVkX2FkZF9tb2RlX29wdGlvbnMgPSB0cnVlOwoKICAgIGNvbnN0IG1vZGVfZHJvcGRvd24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZScpOwogICAgaWYgKG1vZGVfZHJvcGRvd24gPT09IG51bGwpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5sb2csICdhZGRvbiBlcnJvcjogYWRkX21vZGVfb3B0aW9ucygpIGNvdWxkblwndCBmaW5kIG1vZGUgZHJvcGRvd24/IScpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gb3ZlcnJpZGUgY2hhbmdlIGV2ZW50CiAgICBtb2RlX2Ryb3Bkb3duLnJlbW92ZUF0dHJpYnV0ZSgnb25jaGFuZ2UnKTsKICAgIG1vZGVfZHJvcGRvd24ub25jaGFuZ2UgPSBQb3N0TW9kZU1lbnVfY2hhbmdlX292ZXJyaWRlOwoKICAgIGlmICghSVNfR1JFQVNFTU9OS0VZNCkgewogICAgICBpZiAobW9kZV9kcm9wZG93bi5vcHRpb25zLm5hbWVkSXRlbSgnY2hvb3NlLXBhcmVudCcpID09PSBudWxsKSB7CiAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgb3B0aW9uLnRleHQgID0gJ0Nob29zZSBQYXJlbnQnOwogICAgICAgIG9wdGlvbi52YWx1ZSA9ICdjaG9vc2UtcGFyZW50JzsKICAgICAgICBtb2RlX2Ryb3Bkb3duLmFkZChvcHRpb24pOwogICAgICB9CgogICAgICBpZiAobW9kZV9kcm9wZG93bi5vcHRpb25zLm5hbWVkSXRlbSgnc2V0LXBhcmVudCcpID09PSBudWxsKSB7CiAgICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CiAgICAgICAgb3B0aW9uLnRleHQgID0gJ1NldCBQYXJlbnQnOwogICAgICAgIG9wdGlvbi52YWx1ZSA9ICdzZXQtcGFyZW50JzsKICAgICAgICBtb2RlX2Ryb3Bkb3duLmFkZChvcHRpb24pOwogICAgICB9CiAgICB9CgogICAgLy8gYWRkX21vZGVfb3B0aW9ucygpIHdhcyBjYWxsZWQgbGF0ZQogICAgaWYgKGNhbGxfcG9zdG1vZGVtZW51X2luaXRfd29ya2Fyb3VuZCkgewogICAgICBQb3N0TW9kZU1lbnVfaW5pdF93b3JrYXJvdW5kKCk7IC8vIGd1YXJhbnRlZSB0aGF0ICdtb2RlJyB2YXJpYWJsZSBjb3JyZWN0bHkgY2hhbmdlcyB0byBuZXcgbW9kZXMgd2hlbiBsb2FkaW5nIHBhZ2UKICAgIH0KICB9CgogIGZ1bmN0aW9uIGFkZF9wb3N0bW9kZV9ob3RrZXlzKCkgewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7CiAgICAgIGNvbnN0IG1vZGVfZHJvcGRvd24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZScpOwogICAgICBpZiAobW9kZV9kcm9wZG93biA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5IHx8IGUuc2hpZnRLZXkpIHJldHVybjsKCiAgICAgIGlmIChlLnRhcmdldCA9PT0gbW9kZV9kcm9wZG93bikgewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgLy8gZS5nLiAndicgd291bGQgb3RoZXJ3aXNlIGNoYW5nZSB0byAnVmlldyBQb3N0cycKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCB0YWcgPSBlLnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgaWYgKHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYScgfHwgdGFnID09PSAnc2VsZWN0JykgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQoKICAgICAgY29uc3Qgb2xkX21vZGUgPSBtb2RlX2Ryb3Bkb3duLnZhbHVlOwoKICAgICAgc3dpdGNoIChlLmtleSkgewogICAgICAgIGNhc2UgJ3YnOgogICAgICAgICAgaWYgKElTX0dSRUFTRU1PTktFWTQpIHsKICAgICAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS53YXJuLCAnYWRkb246IFwnU2V0IFBhcmVudFwnIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdyZWFzZW1vbmtleScpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgbW9kZV9kcm9wZG93bi52YWx1ZSA9ICdzZXQtcGFyZW50JzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2MnOgogICAgICAgICAgaWYgKElTX0dSRUFTRU1PTktFWTQpIHsKICAgICAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS53YXJuLCAnYWRkb246IFwnQ2hvb3NlIFBhcmVudFwnIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdyZWFzZW1vbmtleScpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgbW9kZV9kcm9wZG93bi52YWx1ZSA9ICdjaG9vc2UtcGFyZW50JzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3EnOgogICAgICAgICAgbW9kZV9kcm9wZG93bi52YWx1ZSA9ICdyYXRpbmctcSc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdzJzoKICAgICAgICAgIG1vZGVfZHJvcGRvd24udmFsdWUgPSAncmF0aW5nLXMnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZSc6CiAgICAgICAgICBtb2RlX2Ryb3Bkb3duLnZhbHVlID0gJ3JhdGluZy1lJzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIC8vIGNvdWxkbid0IHNldCBtb2RlIChvcHRpb24gZG9lc24ndCBleGlzdCkKICAgICAgaWYgKCFtb2RlX2Ryb3Bkb3duLnZhbHVlKSBtb2RlX2Ryb3Bkb3duLnZhbHVlID0gb2xkX21vZGU7CgogICAgICBQb3N0TW9kZU1lbnVfY2hhbmdlX292ZXJyaWRlKCk7CiAgICB9LCB0cnVlKTsKICB9CgogIGZ1bmN0aW9uIFBvc3RNb2RlTWVudV9pbml0X3dvcmthcm91bmQoKSB7CiAgICBjb25zdCBtb2RlX2Ryb3Bkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGUnKTsKICAgIGlmIChtb2RlX2Ryb3Bkb3duID09PSBudWxsKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogUG9zdE1vZGVNZW51X2luaXRfd29ya2Fyb3VuZCgpIGNvdWxkblwndCBmaW5kIG1vZGUgZHJvcGRvd24/IScpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gaXNzdWU6IG5ldyBwb3N0IG1vZGVzIGNhbiByZXNldCBvbiBwYWdlIGxvYWQgaWYgdGhleSB3ZXJlIGFkZGVkIHRvbyBsYXRlCiAgICAvLyByZWFzb246IG9uIHBhZ2UgbG9hZCwgUG9zdE1vZGVNZW51LmluaXQgcmVhZHMgdGhlICJtb2RlIiBjb29raWUsIHRyaWVzIHRvIHNldCBtb2RlX2Ryb3Bkb3duLnZhbHVlLCB0aGVuCiAgICAvLyBjYWxscyBQb3N0TW9kZU1lbnUuY2hhbmdlLCB3aGljaCBzZXRzIHRoZSBjb29raWUgdG8gbW9kZV9kcm9wZG93bi52YWx1ZS4KICAgIC8vIHNvIGlmIHRoZSBuZXcgbW9kZXMgYXJlbid0IGFkZGVkIHlldCwgbW9kZV9kcm9wZG93bi52YWx1ZSBhbmQgdGhlICJtb2RlIiBjb29raWUgd2lsbCBib3RoIHJlc2V0CiAgICAvLyBzb2x1dGlvbjogc2FmZSBtb2RlIGluIGEgc2VwYXJhdGUgJ2JhY2t1cCcgY29va2llIGFuZCBzZXQgdGhlICJtb2RlIiBjb29raWUgYW5kIG1vZGVfZHJvcGRvd24gYWZ0ZXIgbmV3IG1vZGVzIHdlcmUgYWRkZWQKICAgIGNvbnN0IG1vZGUgPSBnZXRfY29va2llKCdhZGRvbl9tb2RlJyk7CiAgICBpZiAobW9kZSAhPT0gJycpIHsKICAgICAgc2V0X2Nvb2tpZSgnbW9kZScsIG1vZGUsIDcpOwogICAgICBtb2RlX2Ryb3Bkb3duLnZhbHVlID0gbW9kZTsKCiAgICAgIC8vIHNldHRpbmcgbW9kZSBmYWlsZWQsIHBvc3NpYmxlIHdoZW4gY2hhbmdpbmcgdG8gYWNjb3VudCB3aXRoIGxvd2VyIHBlcm1pc3Npb25zCiAgICAgIGlmICghbW9kZV9kcm9wZG93bi52YWx1ZSkgewogICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsIGBhZGRvbiBlcnJvcjogY291bGRuJ3Qgc2V0IG1vZGUgdG8gJHttb2RlfSwgcmVzZXR0aW5nIHRvICd2aWV3J2ApOwogICAgICAgIG1vZGVfZHJvcGRvd24udmFsdWUgPSAndmlldyc7CiAgICAgICAgc2V0X2Nvb2tpZSgnbW9kZScsICd2aWV3JywgNyk7CiAgICAgIH0KICAgIH0KCiAgICBQb3N0TW9kZU1lbnVfY2hhbmdlX292ZXJyaWRlKCk7CiAgfQoKICBhc3luYyBmdW5jdGlvbiBQb3N0TW9kZU1lbnVfY2hhbmdlX292ZXJyaWRlKCkgewogICAgY29uc3QgbW9kZV9kcm9wZG93biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlJyk7CiAgICBpZiAobW9kZV9kcm9wZG93biA9PT0gbnVsbCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IFBvc3RNb2RlTWVudV9jaGFuZ2Vfb3ZlcnJpZGUoKSBjb3VsZG5cJ3QgZmluZCBtb2RlIGRyb3Bkb3duPyEnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghbW9kZV9kcm9wZG93bi52YWx1ZSkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IGludmFsaWQgbW9kZSwgcmVzZXR0aW5nIHRvIFwndmlld1wnJyk7CiAgICAgIG1vZGVfZHJvcGRvd24udmFsdWUgPSAndmlldyc7CiAgICAgIHNldF9jb29raWUoJ21vZGUnLCAndmlldycsIDcpOwogICAgfQoKICAgIGNvbnN0IHMgPSBtb2RlX2Ryb3Bkb3duLnZhbHVlOwoKICAgIC8vIHRyeSB0byBndWFyYW50ZWUgc2l0ZXNjcmlwdCBoYXMgbG9hZGVkCiAgICB3aGlsZSAodW5zYWZlV2luZG93LlBvc3RNb2RlTWVudSA9PT0gdW5kZWZpbmVkIHx8IHVuc2FmZVdpbmRvdy5Db29raWUgPT09IHVuZGVmaW5lZCB8fCB1bnNhZmVXaW5kb3cuJCA9PT0gdW5kZWZpbmVkKQogICAgICBhd2FpdCBzbGVlcCgxMDApOwoKICAgIHVuc2FmZVdpbmRvdy5Qb3N0TW9kZU1lbnUuY2hhbmdlKCk7CgogICAgc2V0X2Nvb2tpZSgnYWRkb25fbW9kZScsIHMsIDcpOyAvLyBzZXQgJ2JhY2t1cCcgY29va2llCgogICAgY29uc3QgZGFya21vZGUgPSBpc19kYXJrbW9kZSgpOwogICAgaWYgKHMgPT09ICdhZGQtZmF2JykgewogICAgICAvLyBGRkZGQUEsIG9yaWdpbmFsLiBkYXJrbW9kZTogbHVtaW5hbmNlIDQwCiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gKGRhcmttb2RlID8gJyM1MDUwMDAnIDogJyNGRkEnKTsKICAgIH0gZWxzZSBpZiAocyA9PT0gJ3JlbW92ZS1mYXYnKSB7CiAgICAgIC8vIEZGRkZBQSAtPiBGRkVFQUEsIHNsaWdodGx5IG1vcmUgb3JhbmdlLiBkYXJrbW9kZTogbHVtaW5hbmNlIDQwCiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gKGRhcmttb2RlID8gJyM1MDQwMDAnIDogJyNGRUEnKTsKICAgIH0gZWxzZSBpZiAocyA9PT0gJ2FwcGx5LXRhZy1zY3JpcHQnKSB7CiAgICAgIC8vIEFBMzNBQSAtPiBGRkRERkYsIHdlYWtlbiBjb2xvciBpbnRlbnNpdHkuIGRhcmttb2RlOiBsdW1pbmFuY2UgNDAKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAoZGFya21vZGUgPyAnIzUwMDA1MCcgOiAnI0ZERicpOwogICAgfSBlbHNlIGlmIChzID09PSAnYXBwcm92ZScpIHsKICAgICAgLy8gMjI2NkFBIC0+IEZGRERGRiwgaW5jcmVhc2UgY29udHJhc3QgdG8gdW5hcHByb3ZlZCBwb3N0cy4gZGFya21vZGU6IFRPRE8KICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI0ZERic7CiAgICB9IGVsc2UgaWYgKHMgPT09ICdjaG9vc2UtcGFyZW50JykgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IChkYXJrbW9kZSA/ICcjNDY0NjAwJyA6ICcjRkZEJyk7CiAgICB9IGVsc2UgaWYgKHMgPT09ICdzZXQtcGFyZW50JykgewogICAgICBpZiAoZ2V0X2Nvb2tpZSgnY2hvc2VuLXBhcmVudCcpID09PSAnJykgewogICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgJ2FkZG9uOiBDaG9vc2UgcGFyZW50IGZpcnN0IScpOwogICAgICAgIG1vZGVfZHJvcGRvd24udmFsdWUgPSAnY2hvb3NlLXBhcmVudCc7CiAgICAgICAgUG9zdE1vZGVNZW51X2NoYW5nZV9vdmVycmlkZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gKGRhcmttb2RlID8gJyMwMDUwNTAnIDogJyNERkYnKTsKICAgICAgfQogICAgfQogIH0KCiAgbGV0IFBvc3RNb2RlTWVudV9jbGlja19vcmlnaW5hbCA9IG51bGw7CiAgZnVuY3Rpb24gUG9zdE1vZGVNZW51X2NsaWNrX292ZXJyaWRlKHBvc3RfaWQpIHsKICAgIGlmIChQb3N0TW9kZU1lbnVfY2xpY2tfb3JpZ2luYWwocG9zdF9pZCkpCiAgICAgIHJldHVybiB0cnVlOyAvLyB2aWV3IG1vZGUsIGxldCBpdCBjbGljawoKICAgIGNvbnN0IG1vZGVfZHJvcGRvd24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZScpOwogICAgaWYgKCFjYWxsZWRfYWRkX21vZGVfb3B0aW9ucykgcmV0dXJuIGZhbHNlOyAvLyBub3QgbG9nZ2VkIGluIG9yIG5vIHRhZyBzY3JpcHQgcGVybWlzc2lvbgoKICAgIGNvbnN0IHMgPSBtb2RlX2Ryb3Bkb3duLnZhbHVlOwogICAgaWYgKHMgPT09ICdjaG9vc2UtcGFyZW50JykgewogICAgICBzZXRfY29va2llKCdjaG9zZW4tcGFyZW50JywgcG9zdF9pZCk7CiAgICAgIG1vZGVfZHJvcGRvd24udmFsdWUgPSAnc2V0LXBhcmVudCc7CiAgICAgIFBvc3RNb2RlTWVudV9jaGFuZ2Vfb3ZlcnJpZGUoKTsKICAgIH0gZWxzZSBpZiAocyA9PT0gJ3NldC1wYXJlbnQnKSB7CiAgICAgIGNvbnN0IHBhcmVudF9pZCA9IGdldF9jb29raWUoJ2Nob3Nlbi1wYXJlbnQnKTsKICAgICAgdW5zYWZlV2luZG93LlRhZ1NjcmlwdC5ydW4ocG9zdF9pZCwgJ3BhcmVudDonICsgcGFyZW50X2lkICsgKGNvbmZpZy5zZXRwYXJlbnRfZGVsZXRlcG90ZW50aWFsZHVwbGljYXRlID8gJyAtcG90ZW50aWFsX2R1cGxpY2F0ZScgOiAnJykpOwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8qKioqKioqKioqKioqKioqKioqKioqKi8KICAvKiBwb3N0IHBhZ2UgZnVuY3Rpb25zICovCiAgLyoqKioqKioqKioqKioqKioqKioqKioqLwoKICBsZXQgcG9zdF9wYXJlbnRfaWQgPSBudWxsOyAvLyBpbnB1dCBlbGVtCiAgLy8gb3JpZ2luYWwgcG9zdC9wYXJlbnQgaWRzCiAgbGV0IHBvc3RfaWQgPSBudWxsOwogIGxldCBwYXJlbnRfaWQgPSBudWxsOwogIGxldCBpbWFnZV9kYXRhID0gbnVsbDsKICBsZXQgcmVzaXplX3RpbWVyOwogIGxldCB0YWdfdXBkYXRlX3RpbWVyOwogIGxldCB0YWdzX2NoYW5nZWQgPSBmYWxzZTsKICAvLyBzZXQgYnkgZmluZF9hY3Rpb25zX2xpc3QoKToKICBsZXQgYWN0aW9uc191bCA9IG51bGw7CiAgbGV0IGZvdW5kX2RlbGV0ZV9hY3Rpb24gPSBmYWxzZTsKCiAgbGV0IG1vdXNlX21vdmVkID0gZmFsc2U7IC8vIGZvciB0YWdfbWVudV9zY2FsZXIKICBmdW5jdGlvbiB0YWdfbWVudV9zY2FsZXJfbW91c2Vkb3duKGUpIHsKICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIG1vdXNlX21vdmVkID0gZmFsc2U7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGFnX21lbnVfc2NhbGVyX21vdXNlbW92ZSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICAgdGFnX21lbnVfc2NhbGVyX21vdXNldXApOwogIH0KCiAgZnVuY3Rpb24gdGFnX21lbnVfc2NhbGVyX21vdXNlbW92ZShlKSB7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBtb3VzZV9tb3ZlZCA9IHRydWU7CiAgICBzZXRfdGFnX21lbnVfc2NhbGUoZSwgZmFsc2UpOwogIH0KCiAgZnVuY3Rpb24gdGFnX21lbnVfc2NhbGVyX21vdXNldXAoZSkgewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgaWYgKG1vdXNlX21vdmVkKSBzZXRfdGFnX21lbnVfc2NhbGUoZSwgdHJ1ZSk7CgogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRhZ19tZW51X3NjYWxlcl9tb3VzZW1vdmUpOwogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgIHRhZ19tZW51X3NjYWxlcl9tb3VzZXVwKTsKICB9CgogIGZ1bmN0aW9uIHNldF90YWdfbWVudV9zY2FsZShlLCBzYXZlKSB7CiAgICBjb25zdCB0YWdfbWVudSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdfbWVudScpOwogICAgaWYgKHRhZ19tZW51ID09PSBudWxsKSByZXR1cm47CgogICAgY29uc3QgeUZyb21Cb3R0b20gPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBlLmNsaWVudFk7CiAgICBsZXQgeVBlcmNlbnRmcm9tQm90dG9tID0gKDEwMC4wICogKHlGcm9tQm90dG9tIC8gd2luZG93LmlubmVySGVpZ2h0KSk7CiAgICB5UGVyY2VudGZyb21Cb3R0b20gPSBNYXRoLm1pbihNYXRoLm1heCh5UGVyY2VudGZyb21Cb3R0b20sIDUpLCA5NSkgKyAnJSc7CgogICAgdGFnX21lbnUuc3R5bGUuaGVpZ2h0ID0geVBlcmNlbnRmcm9tQm90dG9tOwoKICAgIGlmIChzYXZlKSBzYXZlX3NldHRpbmcoJ3RhZ19tZW51X3NjYWxlJywgeVBlcmNlbnRmcm9tQm90dG9tKTsKICB9CgoKICBmdW5jdGlvbiBhZGRfdGFnX21lbnUoKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc3RfdGFncycpID09PSBudWxsKSByZXR1cm47IC8vIG5vdCBsb2dnZWQgaW4KCiAgICBjb25zdCB0YWdfbWVudSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgdGFnX21lbnUuaWQgPSAndGFnX21lbnUnOwogICAgdGFnX21lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIHRhZ19tZW51LnN0eWxlLndpZHRoID0gJzEwMCUnOwogICAgdGFnX21lbnUuc3R5bGUuaGVpZ2h0ID0gY29uZmlnLnRhZ19tZW51X3NjYWxlOwogICAgdGFnX21lbnUuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOwogICAgdGFnX21lbnUuc3R5bGUuYm90dG9tID0gJzAnOwogICAgdGFnX21lbnUuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7CiAgICB0YWdfbWVudS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBnZXRfb3JpZ2luYWxfYmFja2dyb3VuZF9jb2xvcigpOwogICAgdGFnX21lbnUuc3R5bGUuekluZGV4ID0gJzEwMDAxJzsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGFnX21lbnUpOwoKICAgIC8vIHRoZSBpbm5lciBkaXYgZW5zdXJlcyB0YWdfbWVudV9jbG9zZSBidXR0b24gZG9lc24ndCBzY3JvbGwgd2l0aCB0aGUgY29udGVudAogICAgdGFnX21lbnUuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9IndpZHRoOiBjYWxjKDEwMCUgLSAycHgpOyBoZWlnaHQ6IDEwMCU7IG92ZXJmbG93OiBhdXRvOyI+PHNwYW4gaWQ9ImNvbW1vbl90YWdzIj48L3NwYW4+Y3VycmVudCB0YWdzOjxzcGFuIGlkPSJjdXJyZW50X3RhZ3MiPjwvc3Bhbj48L2Rpdj4nOwoKICAgIGNvbnN0IHRhZ19tZW51X3NjYWxlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgdGFnX21lbnVfc2NhbGVyLmlkID0gJ3RhZ19tZW51X3NjYWxlcic7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUuaGVpZ2h0ID0gJzZweCc7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gc2hpZnRlZF9iYWNrZ3JvdW5kQ29sb3IoMzIpOwogICAgdGFnX21lbnVfc2NhbGVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgIHRhZ19tZW51X3NjYWxlci5zdHlsZS50b3AgPSAnMCc7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUuY3Vyc29yID0gJ25zLXJlc2l6ZSc7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUuekluZGV4ID0gJzEwMDAwJzsKICAgIHRhZ19tZW51X3NjYWxlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0YWdfbWVudV9zY2FsZXJfbW91c2Vkb3duKTsKICAgIHRhZ19tZW51LmFwcGVuZENoaWxkKHRhZ19tZW51X3NjYWxlcik7CiAgICB0YWdfbWVudS5zdHlsZS5wYWRkaW5nVG9wID0gdGFnX21lbnVfc2NhbGVyLnN0eWxlLmhlaWdodDsgLy8gc2luY2UgdGFnX21lbnVfc2NhbGVyIGZsb2F0cyBhYm92ZSB0aGUgdGFncwoKICAgIGNvbnN0IGNyZWF0ZV90YWdfbWVudV9idXR0b24gPSBmdW5jdGlvbihpZCwgdGV4dCkgewogICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKICAgICAgYnV0dG9uLmlkID0gaWQ7CiAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyBzaGlmdGVkX2JhY2tncm91bmRDb2xvcigzMik7CiAgICAgIGJ1dHRvbi5zdHlsZS53aWR0aCAgPSAnMjRweCc7CiAgICAgIGJ1dHRvbi5zdHlsZS5oZWlnaHQgPSAnMjRweCc7CiAgICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CiAgICAgIGJ1dHRvbi5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsKICAgICAgYnV0dG9uLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJzsKICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHNoaWZ0ZWRfYmFja2dyb3VuZENvbG9yKDE2KTsKICAgICAgYnV0dG9uLmlubmVySFRNTCA9IGA8c3BhbiBzdHlsZT0id2lkdGg6IDEwMCU7IGRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNTAlOyBsZWZ0OiA1MCU7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKC01MCUpOyI+JHt0ZXh0fTwvc3Bhbj5gOwogICAgICBidXR0b24uc3R5bGUuekluZGV4ID0gJzEwMDAxJzsKICAgICAgcmV0dXJuIGJ1dHRvbjsKICAgIH07CgogICAgY29uc3QgdGFnX21lbnVfY2xvc2UgPSBjcmVhdGVfdGFnX21lbnVfYnV0dG9uKCd0YWdfbWVudV9jbG9zZScsICdYJyk7CiAgICB0YWdfbWVudV9jbG9zZS5zdHlsZS50b3AgICA9ICcwJzsKICAgIHRhZ19tZW51X2Nsb3NlLnN0eWxlLnJpZ2h0ID0gJzAnOwogICAgdGFnX21lbnVfY2xvc2Uub25jbGljayA9ICgpID0+IHsgc2hvd190YWdfbWVudShmYWxzZSk7IHJldHVybiBmYWxzZTsgfTsKICAgIHRhZ19tZW51LmFwcGVuZENoaWxkKHRhZ19tZW51X2Nsb3NlKTsKCiAgICBjb25zdCB0YWdfbWVudV9vcGVuID0gY3JlYXRlX3RhZ19tZW51X2J1dHRvbigndGFnX21lbnVfb3BlbicsICfCqycpOwogICAgdGFnX21lbnVfb3Blbi5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7CiAgICB0YWdfbWVudV9vcGVuLnN0eWxlLnJpZ2h0ICA9ICcwJzsKICAgIHRhZ19tZW51X29wZW4uc3R5bGUuYm90dG9tID0gJzAnOwogICAgdGFnX21lbnVfb3Blbi5vbmNsaWNrID0gKCkgPT4geyBzaG93X3RhZ19tZW51KHRydWUpOyB1cGRhdGVfdGFnX21lbnUoKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0YWdfbWVudV9vcGVuKTsKCiAgICBjb25zdCB0YWdfbWVudV9zYXZlID0gY3JlYXRlX3RhZ19tZW51X2J1dHRvbigndGFnX21lbnVfc2F2ZScsICdTYXZlIGNoYW5nZXMnKTsKICAgIHRhZ19tZW51X3NhdmUuc3R5bGUudG9wICAgPSAnMCc7CiAgICB0YWdfbWVudV9zYXZlLnN0eWxlLnJpZ2h0ID0gJzM2cHgnOwogICAgdGFnX21lbnVfc2F2ZS5zdHlsZS53aWR0aCA9ICcxNDBweCc7CiAgICB0YWdfbWVudV9zYXZlLnN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7CiAgICB0YWdfbWVudV9zYXZlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGFnc19zdWJtaXRfbGlzdGVuZXIoKSkKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1mb3JtJykuc3VibWl0KCk7CiAgICB9KTsKICAgIHRhZ19tZW51LmFwcGVuZENoaWxkKHRhZ19tZW51X3NhdmUpOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlX3RhZ19tZW51KHNraXBfY29tbW9uX3RhZ3MgPSBmYWxzZSkgewogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3N0X3RhZ3MnKSA9PT0gbnVsbCkgcmV0dXJuOyAvLyBub3QgbG9nZ2VkIGluCgogICAgY29uc3QgY29tbW9uX3RhZ3NfZWxlbSAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29tbW9uX3RhZ3MnKTsKICAgIGNvbnN0IGN1cnJlbnRfdGFnc19lbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1cnJlbnRfdGFncycpOwoKICAgIC8vIHRhZyBtZW51IGRpc2FibGVkCiAgICBpZiAoY29tbW9uX3RhZ3NfZWxlbSA9PT0gbnVsbCB8fCBjdXJyZW50X3RhZ3NfZWxlbSA9PT0gbnVsbCkKICAgICAgcmV0dXJuOwoKICAgIGlmIChjb25maWcudGFnX21lbnVfbGF5b3V0ID09PSAxKSB7CiAgICAgIGNvbW1vbl90YWdzX2VsZW0uc3R5bGUuZGlzcGxheSA9ICdncmlkJzsKICAgICAgY29tbW9uX3RhZ3NfZWxlbS5zdHlsZS5ncmlkVGVtcGxhdGVDb2x1bW5zID0gJ2ZpdC1jb250ZW50KDUlKSBhdXRvJzsKICAgIH0gZWxzZSB7CiAgICAgIGNvbW1vbl90YWdzX2VsZW0uc3R5bGUuZGlzcGxheSA9ICcnOwogICAgfQoKICAgIGNvbnN0IGNyZWF0ZV90YWdfYnV0dG9uID0gZnVuY3Rpb24odGFnLCBza2lwX2NvbW1vbl90YWdzX3VwZGF0ZSA9IGZhbHNlKSB7CiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdBJyk7CiAgICAgIGEuaHJlZiA9ICcjJzsKICAgICAgYS5zdHlsZS5wYWRkaW5nTGVmdCAgPSAnNXB4JzsKICAgICAgYS5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnNXB4JzsKICAgICAgYS5zdHlsZS5ib3JkZXJTdHlsZSA9ICdzb2xpZCc7CiAgICAgIGEuc3R5bGUuYm9yZGVyV2lkdGggPSAnMXB4JzsKICAgICAgYS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAoaXNfZGFya21vZGUoKSA/ICcjMDAwJyA6ICcjRkZGJyk7IC8vIG1vcmUgY29udHJhc3QgZm9yIHRhZyBidXR0b25zCiAgICAgIGEuY2xhc3NOYW1lID0gKHRhZ19pc19wcmVzZW50KHRhZykgPyAnJyA6ICd0YWdfbm9uZXhpc3RlbnQnKTsKCiAgICAgIGEub25jbGljayA9IGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0YWdfaXNfcHJlc2VudCh0YWcpKSB7CiAgICAgICAgICByZW1vdmVfdGFnKHRhZywgc2tpcF9jb21tb25fdGFnc191cGRhdGUpOwogICAgICAgICAgYS5jbGFzc05hbWUgPSAndGFnX25vbmV4aXN0ZW50JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWRkX3RhZyh0YWcsIHNraXBfY29tbW9uX3RhZ3NfdXBkYXRlKTsKICAgICAgICAgIGEuY2xhc3NOYW1lID0gJyc7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfTsKICAgICAgYS5pbm5lclRleHQgPSB0YWc7CiAgICAgIHJldHVybiBhOwogICAgfTsKCiAgICBjb25zdCB3cmFwX2luX2RpdiA9IGZ1bmN0aW9uKGVsLCBtYXJnaW4pIHsKICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7CiAgICAgIGRpdi5zdHlsZS5tYXJnaW4gPSBtYXJnaW47CiAgICAgIGRpdi5zdHlsZS5mbG9hdCA9ICdsZWZ0JzsKICAgICAgZGl2LmFwcGVuZENoaWxkKGVsKTsKICAgICAgcmV0dXJuIGRpdjsKICAgIH07CgogICAgY29uc3QgY3JlYXRlX3RvcF9sZXZlbF9kaXYgPSBmdW5jdGlvbihtYXJnaW4gPSAnM3B4JykgewogICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKICAgICAgZGl2LnN0eWxlLm1hcmdpbiA9IG1hcmdpbjsKICAgICAgcmV0dXJuIGRpdjsKICAgIH07CgogICAgY29uc3QgY3JlYXRlX3RhZ19saXN0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgICBkaXYuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsKICAgICAgZGl2LnN0eWxlLmZsZXhXcmFwID0gJ3dyYXAnOwogICAgICBkaXYuc3R5bGUuYWxpZ25Db250ZW50ID0gJ2ZsZXgtc3RhcnQnOwogICAgICBkaXYuc3R5bGUuYWxpZ25JdGVtcyA9ICdmbGV4LXN0YXJ0JzsKICAgICAgZGl2LnN0eWxlLm1hcmdpbiA9ICcwJzsKICAgICAgZGl2LnN0eWxlLnBhZGRpbmcgPSAnMCc7CiAgICAgIHJldHVybiBkaXY7CiAgICB9OwoKICAgIC8vIGdlbmVyYXRlIHRhZyBidXR0b24gbGlzdCBmb3IgY3VycmVudCB0YWdzCiAgICBjb25zdCBjdXJyZW50X3RhZ3NfZmxleCA9IGNyZWF0ZV90YWdfbGlzdCgpOwogICAgY3VycmVudF90YWdzX2ZsZXguc3R5bGUubWFyZ2luQm90dG9tID0gJzNweCc7CiAgICBjb25zdCBjdXJyZW50X3RhZ3MgPSBnZXRfdGFnc19hcnJheSgpOwogICAgZm9yIChjb25zdCBjdXJyZW50X3RhZyBvZiBjdXJyZW50X3RhZ3MpIHsKICAgICAgY29uc3QgZGl2ID0gY3JlYXRlX3RvcF9sZXZlbF9kaXYoKTsKICAgICAgZGl2LmFwcGVuZENoaWxkKGNyZWF0ZV90YWdfYnV0dG9uKGN1cnJlbnRfdGFnLCBmYWxzZSkpOwogICAgICBjdXJyZW50X3RhZ3NfZmxleC5hcHBlbmRDaGlsZChkaXYpOwogICAgfQoKICAgIC8vIHJlcGxhY2UgY3VycmVudCBsaXN0IHdpdGggbmV3IG9uZQogICAgd2hpbGUgKGN1cnJlbnRfdGFnc19lbGVtLmhhc0NoaWxkTm9kZXMoKSkKICAgICAgY3VycmVudF90YWdzX2VsZW0ucmVtb3ZlQ2hpbGQoY3VycmVudF90YWdzX2VsZW0ubGFzdENoaWxkKTsKICAgIGN1cnJlbnRfdGFnc19lbGVtLmFwcGVuZENoaWxkKGN1cnJlbnRfdGFnc19mbGV4KTsKCiAgICAvLyBkb24ndCByZWJ1aWxkIHRoZSBjb21tb24gdGFncyBsaXN0IHdoZW4gY29tbW9uIHRhZ3MgYnV0dG9ucyBhcmUgcHJlc3NlZAogICAgaWYgKHNraXBfY29tbW9uX3RhZ3MpIHJldHVybjsKCiAgICAvLyBub3cgYWRkIGNvbW1vbiB0YWdzCiAgICAvLyBjb21tb25fdGFnc19qc29uKF9pZG9sKSBzaG91bGQgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGFuIG9wdGlvbmFsIHN0cmluZyAibmFtZSIgZmllbGQgYW5kIGFuIGFycmF5ICJ0YWdzIiBmaWVsZCwKICAgIC8vIHdoZXJlIHRoZSAidGFncyIgYXJyYXkgY2FuIGNvbnRhaW4gc3RyaW5ncyAoc3BhY2Ugc2VwYXJhdGVkIHRhZ3MpLCBhcnJheXMgY29udGFpbmluZyBvbmUgc3RyaW5nIChyZXByZXNlbnRpbmcgYSBncm91cCkKICAgIC8vIG9yIGFycmF5cyBvZiBhcnJheSBjb250YWluaW5nIG9uZSBzdHJpbmcgKHJlcHJlc2VudGluZyBhIHRhYmxlKQogICAgLy8gZXguIFsgeyAibmFtZSI6ImNvbW1vbiB0YWdzIiwgInRhZ3MiOlsgInRhZzEgdGFnMiIsIFsiZ3JvdXBlZF90YWcxIGdyb3VwZWRfdGFnMiJdICwgInRhZzMgdGFnNCJdIH0sIHsgIm5hbWUiOiJ1bmNvbW1vbiB0YWdzIiwgInRhZ3MiOlsgInQxIHQyIHQzIiBdfSBdCiAgICBsZXQgdGFnX2RhdGE7CiAgICB0cnkgewogICAgICB0YWdfZGF0YSA9IEpTT04ucGFyc2UoY29uZmlnW0NPTU1PTl9UQUdTX0tFWV0pOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ2FkZG9uIGVycm9yOiAiY29tbW9uIHRhZ3MiIEpTT04gc3ludGF4IGVycm9yJywgZXJyb3IpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFBcnJheS5pc0FycmF5KHRhZ19kYXRhKSkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6ICJjb21tb24gdGFncyIgbmVlZHMgdG8gYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cycpOwogICAgICByZXR1cm47CiAgICB9CgogICAgd2hpbGUgKGNvbW1vbl90YWdzX2VsZW0uaGFzQ2hpbGROb2RlcygpKQogICAgICBjb21tb25fdGFnc19lbGVtLnJlbW92ZUNoaWxkKGNvbW1vbl90YWdzX2VsZW0ubGFzdENoaWxkKTsKCiAgICBmb3IgKGxldCBrID0gMDsgayA8IHRhZ19kYXRhLmxlbmd0aDsgaysrKSB7CiAgICAgIGNvbnN0IGxpc3RfZmxleCA9IGNyZWF0ZV90YWdfbGlzdCgpOwogICAgICBjb25zdCBsaXN0X25hbWUgPSB0YWdfZGF0YVtrXS5uYW1lOwogICAgICBjb25zdCBsaXN0X3RhZ3MgPSB0YWdfZGF0YVtrXS50YWdzOwoKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3RfdGFncykpIHsKICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IGEgImNvbW1vbiB0YWdzIiBvYmplY3QgbmVlZHMgdG8gaGF2ZSBhICJ0YWdzIiBhcnJheScpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgY29uc3QgVEFHU19UWVBFUyA9IHsKICAgICAgICBMSVNUOiAgJ2xpc3QnLCAgLy8gZS5nLiAidGFnMSB0YWcyIgogICAgICAgIEdST1VQOiAnZ3JvdXAnLCAvLyBlLmcuIFsidGFnMSB0YWcyIl0KICAgICAgICBUQUJMRTogJ3RhYmxlJyAgLy8gZS5nLiBbWyJ0YWcxIHRhZzIiXSwgWyJ0YWczIHRhZzQiXV0KICAgICAgfTsKCiAgICAgIGNvbnN0IGdyb3VwX3N0eWxlID0gZnVuY3Rpb24oZWwpIHsKICAgICAgICAvLyByZWQgaW4gZGFya21vZGUgbmVlZHMgbW9yZSBjb250cmFzdAogICAgICAgIGNvbnN0IHJnYiA9IHJnYl90b19hcnJheShnZXRfb3JpZ2luYWxfYmFja2dyb3VuZF9jb2xvcigpKTsKICAgICAgICBpZiAoaXNfZGFya21vZGUoKSkgewogICAgICAgICAgZWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAnICsgcmdiX2FycmF5X3RvX3JnYihyZ2JfYXJyYXlfc2hpZnQocmdiLCA5NikpOwogICAgICAgICAgZWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcmdiX2FycmF5X3RvX3JnYihyZ2JfYXJyYXlfc2hpZnQocmdiLCA2NCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyByZ2JfYXJyYXlfdG9fcmdiKHJnYl9hcnJheV9zaGlmdChyZ2IsIC02NCkpOwogICAgICAgICAgZWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gcmdiX2FycmF5X3RvX3JnYihyZ2JfYXJyYXlfc2hpZnQocmdiLCAtMzIpKTsKICAgICAgICB9CiAgICAgIH07CgogICAgICBmb3IgKGNvbnN0IGxpc3RfdGFnIG9mIGxpc3RfdGFncykgewogICAgICAgIGNvbnN0IGlzX2FycmF5ID0gQXJyYXkuaXNBcnJheShsaXN0X3RhZyk7CgogICAgICAgIC8vIGZpbmQgdGFnc190eXBlCiAgICAgICAgbGV0IHRhZ3NfdHlwZTsKICAgICAgICBpZiAoaXNfYXJyYXkpIHsKICAgICAgICAgIGlmIChsaXN0X3RhZy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ2FkZG9uIGVycm9yOiAiY29tbW9uIHRhZ3MiICJ0YWdzIiBhcnJheSBjb250YWlucyBhbiBlbXB0eSBhcnJheScpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgLy8gY2hlY2sgd2hhdCB0aGUgYXJyYXkgY29uc2lzdHMgb2YKICAgICAgICAgIGxldCBhbGxfYXJyYXlzID0gdHJ1ZTsKICAgICAgICAgIGxldCBub19hcnJheXMgPSB0cnVlOwogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0X3RhZy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdF90YWdbaV0pKSB7CiAgICAgICAgICAgICAgYWxsX2FycmF5cyA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG5vX2FycmF5cyA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKGFsbF9hcnJheXMpIHsKICAgICAgICAgICAgdGFnc190eXBlID0gVEFHU19UWVBFUy5UQUJMRTsKICAgICAgICAgIH0gZWxzZSBpZiAobm9fYXJyYXlzKSB7CiAgICAgICAgICAgIHRhZ3NfdHlwZSA9IFRBR1NfVFlQRVMuR1JPVVA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6ICJjb21tb24gdGFncyIgInRhZ3MiIGFycmF5IGNvbnRhaW5zIGFuIGFycmF5IHdoaWNoIGlzIG5laXRoZXIgYSBncm91cCBub3IgYSB0YWJsZScpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRhZ3NfdHlwZSA9IFRBR1NfVFlQRVMuTElTVDsKICAgICAgICB9CgogICAgICAgIGlmICh0YWdzX3R5cGUgPT09IFRBR1NfVFlQRVMuVEFCTEUpIHsKICAgICAgICAgIGNvbnN0IHRhZ3NfdGFibGUgPSBbXTsKICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGlzdF90YWcubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgaWYgKGxpc3RfdGFnW2pdLmxlbmd0aCAhPT0gMSkgewogICAgICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogImNvbW1vbiB0YWdzIiAidGFncyIgYXJyYXkgY29udGFpbnMgYSB0YWJsZSBlbnRyeSB3aXRoIG5vdCBleGFjdGx5IDEgdGFncyBzdHJpbmcnKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRhZ3NfdGFibGUucHVzaChsaXN0X3RhZ1tqXVswXS50cmltKCkuc3BsaXQoL1xzKy8pKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCB0YWJsZV9oZWlnaHQgPSB0YWdzX3RhYmxlLmxlbmd0aDsKICAgICAgICAgIGxldCB0YWJsZV93aWR0aCA9IDA7CiAgICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0YWdzX3RhYmxlLmxlbmd0aDsgcm93KyspCiAgICAgICAgICAgIHRhYmxlX3dpZHRoID0gTWF0aC5tYXgodGFibGVfd2lkdGgsIHRhZ3NfdGFibGVbcm93XS5sZW5ndGgpOwoKICAgICAgICAgIC8vIGRpdiAoZmxleGJveCk+PGRpdj48dGFibGU+PHRyPjx0ZD48ZGl2IChidXR0b24pPgogICAgICAgICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdUQUJMRScpOwogICAgICAgICAgdGFibGUuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOwogICAgICAgICAgZ3JvdXBfc3R5bGUodGFibGUpOwogICAgICAgICAgdGFibGUuc3R5bGUubWFyZ2luQm90dG9tID0gJzAnOwogICAgICAgICAgZm9yIChsZXQgcm93ID0gMDsgcm93IDwgdGFibGVfaGVpZ2h0OyByb3crKykgewogICAgICAgICAgICBjb25zdCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1RSJyk7CiAgICAgICAgICAgIGZvciAobGV0IGNvbCA9IDA7IGNvbCA8IHRhYmxlX3dpZHRoOyBjb2wrKykgewogICAgICAgICAgICAgIGNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVEQnKTsKICAgICAgICAgICAgICB0ZC5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7CiAgICAgICAgICAgICAgdGQuc3R5bGUucGFkZGluZyA9ICcwJzsKICAgICAgICAgICAgICBpZiAodGFnc190YWJsZVtyb3ddW2NvbF0pCiAgICAgICAgICAgICAgICB0ZC5hcHBlbmRDaGlsZCh3cmFwX2luX2RpdihjcmVhdGVfdGFnX2J1dHRvbih0YWdzX3RhYmxlW3Jvd11bY29sXSwgdHJ1ZSksICcxcHgnKSk7CiAgICAgICAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRhYmxlLmFwcGVuZENoaWxkKHRyKTsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCBkaXYgPSBjcmVhdGVfdG9wX2xldmVsX2RpdignMCAzcHggMCAzcHgnKTsKICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZCh0YWJsZSk7CiAgICAgICAgICBsaXN0X2ZsZXguYXBwZW5kQ2hpbGQoZGl2KTsKICAgICAgICB9IGVsc2UgaWYgKHRhZ3NfdHlwZSA9PT0gVEFHU19UWVBFUy5HUk9VUCkgewogICAgICAgICAgaWYgKGxpc3RfdGFnLmxlbmd0aCAhPT0gMSkgewogICAgICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6ICJjb21tb24gdGFncyIgInRhZ3MiIGFycmF5IGNvbnRhaW5zIGEgZ3JvdXAgd2l0aCBub3QgZXhhY3RseSAxIHRhZ3Mgc3RyaW5nJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCB0YWdzID0gbGlzdF90YWdbMF0udHJpbSgpLnNwbGl0KC9ccysvKTsKCiAgICAgICAgICAvLyA8ZGl2IChmbGV4Ym94KT48ZGl2PjxkaXYgKGJ1dHRvbik+CiAgICAgICAgICBjb25zdCBncm91cF9kaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKICAgICAgICAgIGdyb3VwX2Rpdi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICAgICAgICBncm91cF9zdHlsZShncm91cF9kaXYpOwoKICAgICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpCiAgICAgICAgICAgIGdyb3VwX2Rpdi5hcHBlbmRDaGlsZCh3cmFwX2luX2RpdihjcmVhdGVfdGFnX2J1dHRvbih0YWcsIHRydWUpLCAnM3B4JykpOwoKICAgICAgICAgIGNvbnN0IGRpdiA9IGNyZWF0ZV90b3BfbGV2ZWxfZGl2KCcwIDNweCAwIDNweCcpOwogICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGdyb3VwX2Rpdik7CiAgICAgICAgICBsaXN0X2ZsZXguYXBwZW5kQ2hpbGQoZGl2KTsKICAgICAgICB9IGVsc2UgLyogaWYgKHRhZ3NfdHlwZSA9PT0gdGFnX3R5cGVzLkxJU1QpICovIHsKICAgICAgICAgIC8vIDxkaXYgKGZsZXhib3gpPjxkaXY+PGRpdiAoYnV0dG9uKT4KICAgICAgICAgIGNvbnN0IHRhZ3MgPSBsaXN0X3RhZy50cmltKCkuc3BsaXQoL1xzKy8pOwogICAgICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykgewogICAgICAgICAgICBjb25zdCBkaXYgPSBjcmVhdGVfdG9wX2xldmVsX2RpdignNHB4IDNweCAycHggM3B4Jyk7CiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZCh3cmFwX2luX2RpdihjcmVhdGVfdGFnX2J1dHRvbih0YWcsIHRydWUpKSk7CiAgICAgICAgICAgIGxpc3RfZmxleC5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTsKICAgICAgc3Bhbi5pbm5lclRleHQgPSAobGlzdF9uYW1lID8gYCR7bGlzdF9uYW1lfTpgIDogJycpOwogICAgICBzcGFuLnN0eWxlLnBhZGRpbmdUb3AgPSAnMnB4JzsKICAgICAgaWYgKGxpc3RfbmFtZSkgc3Bhbi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzJweCc7CgogICAgICBpZiAobGlzdF9uYW1lICYmIGNvbmZpZy50YWdfbWVudV9sYXlvdXQgPT09IDEpIHsKICAgICAgICBjb25zdCBhZGRfdG9wX2JvcmRlciA9IGZ1bmN0aW9uKGVsKSB7CiAgICAgICAgICBlbC5zdHlsZS5ib3JkZXJUb3BXaWR0aCA9ICcxcHgnOwogICAgICAgICAgZWwuc3R5bGUuYm9yZGVyVG9wU3R5bGUgPSAnc29saWQnOwogICAgICAgICAgZWwuc3R5bGUuYm9yZGVyVG9wQ29sb3IgPSBzaGlmdGVkX2JhY2tncm91bmRDb2xvcigzMik7CiAgICAgICAgfTsKICAgICAgICBhZGRfdG9wX2JvcmRlcihzcGFuKTsKICAgICAgICBhZGRfdG9wX2JvcmRlcihsaXN0X2ZsZXgpOwogICAgICB9CgogICAgICBjb21tb25fdGFnc19lbGVtLmFwcGVuZENoaWxkKHNwYW4pOwogICAgICBjb21tb25fdGFnc19lbGVtLmFwcGVuZENoaWxkKGxpc3RfZmxleCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzaG93X3RhZ19tZW51KGJvb2wpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdfbWVudScpLnN0eWxlLmRpc3BsYXkgPSAoYm9vbCA/ICcnIDogJ25vbmUnKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdfbWVudV9vcGVuJykuc3R5bGUuZGlzcGxheSA9ICghYm9vbCA/ICcnIDogJ25vbmUnKTsKICB9CgogIGZ1bmN0aW9uIGFkZF90YWdzX2NoYW5nZV9saXN0ZW5lcigpIHsKICAgIGNvbnN0IHBvc3RfdGFnc19hcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc3RfdGFncycpOwogICAgaWYgKHBvc3RfdGFnc19hcmVhID09PSBudWxsKSByZXR1cm47IC8vIG5vdCBsb2dnZWQgaW4KCiAgICBwb3N0X3RhZ3NfYXJlYS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICgpID0+IHsKICAgICAgdGFnc19jaGFuZ2VkID0gdHJ1ZTsKICAgICAgY2xlYXJUaW1lb3V0KHRhZ191cGRhdGVfdGltZXIpOwogICAgICB0YWdfdXBkYXRlX3RpbWVyID0gc2V0VGltZW91dCh1cGRhdGVfdGFnX2VsZW1lbnRzLCA1MDApOwogICAgfSk7CiAgfQoKICAvLyBhbHNvIHVzZWQgZm9yICd0YWdfbWVudV9zYXZlJyBidXR0b24KICBmdW5jdGlvbiB0YWdzX3N1Ym1pdF9saXN0ZW5lcigpIHsKICAgIGRlbGV0ZV91c2VsZXNzX3RhZ3NfdGFnKCk7CiAgICByZXR1cm4gdHJ1ZTsgLy8gYWN0dWFsbHkgc3VibWl0PwogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZ3Nfc3VibWl0X2xpc3RlbmVyKCkgewogICAgY29uc3QgZWRpdF9mb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtZm9ybScpOwogICAgaWYgKGVkaXRfZm9ybSA9PT0gbnVsbCkgcmV0dXJuOyAvLyBub3QgbG9nZ2VkIGluCgogICAgZWRpdF9mb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIChlKSA9PiB7CiAgICAgIGlmICghdGFnc19zdWJtaXRfbGlzdGVuZXIoKSkKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGZpbmRfYWN0aW9uc19saXN0KCkgewogICAgY29uc3QgbGkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWRkLXRvLXBvb2wnKTsKICAgIGlmIChsaSA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGFjdGlvbnNfdWwgPSBsaS5wYXJlbnRFbGVtZW50OwogICAgaWYgKGFjdGlvbnNfdWwgPT09IG51bGwpIHJldHVybjsKCiAgICBjb25zdCBhY3Rpb25fbGlua3MgPSBhY3Rpb25zX3VsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdBJyk7CiAgICBmb3IgKGNvbnN0IGFjdGlvbl9saW5rIG9mIGFjdGlvbl9saW5rcykgewogICAgICBpZiAoYWN0aW9uX2xpbmsuaW5uZXJUZXh0ID09PSAnRGVsZXRlJykgewogICAgICAgIGZvdW5kX2RlbGV0ZV9hY3Rpb24gPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfYWRkb25fYWN0aW9ucygpIHsKICAgIGlmIChhY3Rpb25zX3VsID09PSBudWxsKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogY291bGRuXCd0IGZpbmQgYWN0aW9ucyBsaXN0ISBEaXNhYmxlZCBhZGRvbiBhY3Rpb25zLicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgY29uc3Qgc2VwYXJhdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnSDUnKTsKICAgIHNlcGFyYXRvci5pbm5lclRleHQgPSAnQWRkb24gYWN0aW9ucyc7CiAgICBjb25zdCBuZXdsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0xJJyk7CiAgICBuZXdsaS5hcHBlbmRDaGlsZChzZXBhcmF0b3IpOwogICAgYWN0aW9uc191bC5hcHBlbmRDaGlsZChuZXdsaSk7CgogICAgY29uc3QgYWRkX2FjdGlvbiA9IGZ1bmN0aW9uKGZ1bmMsIG5hbWUsIGlkKSB7CiAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdBJyk7CiAgICAgIGEuaHJlZiA9ICcjJzsKICAgICAgYS5vbmNsaWNrID0gKCkgPT4geyBmdW5jKCk7IHJldHVybiBmYWxzZTsgfTsKICAgICAgYS5pbm5lclRleHQgPSBuYW1lOwoKICAgICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdMSScpOwogICAgICBsaS5pZCA9IGlkOwogICAgICBsaS5hcHBlbmRDaGlsZChhKTsKICAgICAgYWN0aW9uc191bC5hcHBlbmRDaGlsZChsaSk7CiAgICB9OwoKICAgIGFkZF9hY3Rpb24oKCkgPT4geyBzY2FsZV9pbWFnZShTQ0FMRV9NT0RFUy5GSVQsICAgICAgICB0cnVlKTsgc2Nyb2xsX3RvX2ltYWdlKGNvbmZpZy5zY3JvbGxfdG9faW1hZ2VfY2VudGVyKTsgfSwgJ0ZpdCBpbWFnZScsICAgICAgICAgICAgICAnc2NhbGUtaW1hZ2UtZml0Jyk7CiAgICBhZGRfYWN0aW9uKCgpID0+IHsgc2NhbGVfaW1hZ2UoU0NBTEVfTU9ERVMuSE9SSVpPTlRBTCwgdHJ1ZSk7IHNjcm9sbF90b19pbWFnZShjb25maWcuc2Nyb2xsX3RvX2ltYWdlX2NlbnRlcik7IH0sICdGaXQgaW1hZ2UgKEhvcml6b250YWwpJywgJ3NjYWxlLWltYWdlLWhvcicpOwogICAgYWRkX2FjdGlvbigoKSA9PiB7IHNjYWxlX2ltYWdlKFNDQUxFX01PREVTLlZFUlRJQ0FMLCAgIHRydWUpOyBzY3JvbGxfdG9faW1hZ2UoY29uZmlnLnNjcm9sbF90b19pbWFnZV9jZW50ZXIpOyB9LCAnRml0IGltYWdlIChWZXJ0aWNhbCknLCAgICdzY2FsZS1pbWFnZS12ZXInKTsKICAgIGFkZF9hY3Rpb24oKCkgPT4geyBzY2FsZV9pbWFnZShTQ0FMRV9NT0RFUy5SRVNFVCwgICAgICB0cnVlKTsgc2Nyb2xsX3RvX2ltYWdlKGNvbmZpZy5zY3JvbGxfdG9faW1hZ2VfY2VudGVyKTsgfSwgJ1Jlc2V0IGltYWdlIHNpemUnLCAgICAgICAncmVzZXQtaW1hZ2UnKTsKCiAgICBpZiAocGFyZW50X2lkID09PSBudWxsKSByZXR1cm47IC8vIG5vdCBsb2dnZWQgaW4KCiAgICBpZiAocG9zdF9pZCA9PT0gbnVsbCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IGNvdWxkblwndCBmaW5kIHBvc3QgaWQ/ISBGbGFnIGR1cGxpY2F0ZSBmZWF0dXJlIGRpc2FibGVkLicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgYWRkX2FjdGlvbigoKSA9PiB7IGZsYWdfZHVwbGljYXRlKHBvc3RfaWQsICcnKTsgICAgICAgICAgICAgICAgICAgICAgIH0sICdGbGFnIGR1cGxpY2F0ZScsICAgICAgICAgICAgICAnZmxhZy1kdXBsaWNhdGUnKTsKICAgIGFkZF9hY3Rpb24oKCkgPT4geyBmbGFnX2R1cGxpY2F0ZShwb3N0X2lkLCAnLCB2aXN1YWxseSBpZGVudGljYWwnKTsgICB9LCAnRmxhZyBkdXBsaWNhdGUgKGlkZW50aWNhbCknLCAgJ2ZsYWctZHVwbGljYXRlLWlkZW50aWNhbCcpOwogICAgYWRkX2FjdGlvbigoKSA9PiB7IGZsYWdfZHVwbGljYXRlKHBvc3RfaWQsICcgd2l0aCB3b3JzZSBxdWFsaXR5Jyk7ICAgIH0sICdGbGFnIGR1cGxpY2F0ZSAocXVhbGl0eSknLCAgICAnZmxhZy1kdXBsaWNhdGUtcXVhbGl0eScpOwogICAgYWRkX2FjdGlvbigoKSA9PiB7IGZsYWdfZHVwbGljYXRlKHBvc3RfaWQsICcgd2l0aCB3b3JzZSByZXNvbHV0aW9uJyk7IH0sICdGbGFnIGR1cGxpY2F0ZSAocmVzb2x1dGlvbiknLCAnZmxhZy1kdXBsaWNhdGUtcmVzb2x1dGlvbicpOwogIH0KCiAgZnVuY3Rpb24gYWRkX2ZpbGV0eXBlX3N0YXQoKSB7CiAgICB0cnkgewogICAgICBjb25zdCBpbWdfbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaWdocmVzJyk7CiAgICAgIGlmIChpbWdfbGluayA9PT0gbnVsbCkgcmV0dXJuOyAvLyBmbGFzaD8KCiAgICAgIGNvbnN0IHMgPSBuZXcgVVJMKGltZ19saW5rLmhyZWYpLnBhdGhuYW1lLnNwbGl0KCcuJyk7CiAgICAgIGNvbnN0IGV4dCA9IHNbcy5sZW5ndGggLSAxXTsKCiAgICAgIGNvbnN0IGZpbGV0eXBlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoYEZpbGUgdHlwZTogJHtleHR9YCk7CiAgICAgIGNvbnN0IGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnTEknKTsKICAgICAgbGkuYXBwZW5kQ2hpbGQoZmlsZXR5cGUpOwogICAgICBpbnNlcnRfbm9kZV9hZnRlcihsaSwgaW1nX2xpbmsucGFyZW50Tm9kZSk7CgogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcignYWRkb24gZXJyb3I6IGFkZF9maWxldHlwZV9zdGF0IGZhaWxlZCB3aXRoJywgZXJyb3IpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gbW92ZV9zdGF0c190b19lZGl0X2Zvcm0oKSB7CiAgICB0cnkgewoKICAgICAgLy8gZm9ybSBkaXNwbGF5OiBmbGV4CiAgICAgIC8vIHN0YXRzIGluc2VydGFmdGVyIHRhYmxlCiAgICAgIC8vIHN0YXRzIHdoaXRlLXNwYWNlOiBub3dyYXAKICAgICAgLy8gI2VkaXQtZm9ybSB3aWR0aDogbWF4LWNvbnRlbnQKICAgICAgLy8gbWFyZ2luLWxlZnQ6IDhweDsKCiAgICAgIGNvbnN0IHN0YXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRzJyk7CgogICAgICBjb25zdCBlZGl0X2Zvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdC1mb3JtJyk7CiAgICAgIGlmIChlZGl0X2Zvcm0gPT09IG51bGwpIHJldHVybjsKCiAgICAgIGNvbnN0IHRhYmxlID0gZWRpdF9mb3JtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdUQUJMRScpWzBdOwoKICAgICAgZWRpdF9mb3JtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7IC8vIGFkZCB0byB0aGUgcmlnaHQKCiAgICAgIGluc2VydF9ub2RlX2FmdGVyKHN0YXRzLCB0YWJsZSk7CiAgICAgIHN0YXRzLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJzsKICAgICAgZWRpdF9mb3JtLnN0eWxlLndpZHRoID0gJ21heC1jb250ZW50JzsKICAgICAgc3RhdHMuc3R5bGUubWFyZ2luTGVmdCA9ICc4cHgnOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcignYWRkb24gZXJyb3I6IG1vdmVfc3RhdHNfdG9fZWRpdF9mb3JtIGZhaWxlZCB3aXRoJywgZXJyb3IpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZ19idXR0b25zKCkgewogICAgY29uc3QgZWRpdF9mb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtZm9ybScpOwogICAgaWYgKGVkaXRfZm9ybSA9PT0gbnVsbCkgcmV0dXJuOyAvLyBub3QgbG9nZ2VkIGluCgogICAgY29uc3QgYnV0dG9uX3BsYWNlID0gZWRpdF9mb3JtLmNoaWxkcmVuWzFdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdOwogICAgYnV0dG9uX3BsYWNlLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJzsKICAgIC8vIG1pbi13aWR0aCBpcyAyNSUgYnkgZGVmYXVsdCwgd2hpY2ggbWFrZXMgdGhlIDx0ZD4gbm90IGZpdCBpdHMgY29udGVudAogICAgYnV0dG9uX3BsYWNlLmNoaWxkcmVuWzBdLnN0eWxlLm1pbldpZHRoID0gJzEzLjVlbSc7CgogICAgewogICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0JVVFRPTicpOwogICAgICBlbC5pZCA9ICdjbGVhcl9wYXJlbnRfaWRfYnV0dG9uJzsKICAgICAgZWwuc3R5bGUubWFyZ2luID0gJzAgM3B4IDAgNnB4JzsKICAgICAgZWwuaW5uZXJUZXh0ID0gJ0NsZWFyJzsKICAgICAgZWwub25jbGljayA9ICgpID0+IHsgcG9zdF9wYXJlbnRfaWQuY2xlYXIoKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgICBwb3N0X3BhcmVudF9pZC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGVsKTsKICAgIH0KCiAgICB7CiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICAgIGVsLmlkID0gJ3Jlc2V0X3BhcmVudF9pZF9idXR0b24nOwogICAgICBlbC5zdHlsZS5tYXJnaW4gPSAnMCAzcHgnOwogICAgICBlbC5pbm5lclRleHQgPSAnUmVzZXQnOwogICAgICBlbC5vbmNsaWNrID0gKCkgPT4geyByZXNldF9wYXJlbnRfaWQoKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgICBwb3N0X3BhcmVudF9pZC5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGVsKTsKICAgIH0KCiAgICB7CiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICAgIGVsLmlkID0gJ3RhZ19yZXNldF9idXR0b24nOwogICAgICBlbC5zdHlsZS5tYXJnaW4gPSAnMCAzcHggMCA2cHgnOwogICAgICBlbC5pbm5lclRleHQgPSAnUmVzZXQnOwogICAgICBlbC5vbmNsaWNrID0gKCkgPT4geyByZXNldF90YWdzKCk7IHJldHVybiBmYWxzZTsgfTsKICAgICAgYnV0dG9uX3BsYWNlLmFwcGVuZENoaWxkKGVsKTsKICAgIH0KCiAgICB7CiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICAgIGVsLmlkID0gJ3RhZ19kdXBfYnV0dG9uJzsKICAgICAgZWwuc3R5bGUubWFyZ2luID0gJzAgM3B4JzsKICAgICAgYnV0dG9uX3BsYWNlLmFwcGVuZENoaWxkKGVsKTsKICAgIH0KCiAgICB7CiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICAgIGVsLmlkID0gJ3RhZ192YXJfYnV0dG9uJzsKICAgICAgZWwuc3R5bGUubWFyZ2luID0gJzAgM3B4JzsKICAgICAgYnV0dG9uX3BsYWNlLmFwcGVuZENoaWxkKGVsKTsKICAgIH0KCiAgICB7CiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICAgIGVsLmlkID0gJ3RhZ19wb3RfYnV0dG9uJzsKICAgICAgZWwuc3R5bGUubWFyZ2luID0gJzAgM3B4JzsKICAgICAgYnV0dG9uX3BsYWNlLmFwcGVuZENoaWxkKGVsKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHVwZGF0ZV90YWdfYnV0dG9ucygpIHsKICAgIGNvbnN0IHRhZ2xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zdF90YWdzJyk7CiAgICBjb25zdCBkdXBfYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ19kdXBfYnV0dG9uJyk7CiAgICBjb25zdCB2YXJfYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ192YXJfYnV0dG9uJyk7CiAgICBjb25zdCBwb3RfYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ19wb3RfYnV0dG9uJyk7CgogICAgaWYgKHRhZ2xpc3QgPT09IG51bGwgfHwgZHVwX2J1dHRvbiA9PT0gbnVsbCB8fCB2YXJfYnV0dG9uID09PSBudWxsIHx8IHBvdF9idXR0b24gPT09IG51bGwpCiAgICAgIHJldHVybjsKCiAgICBjb25zdCB0YWdzID0gZ2V0X3RhZ3NfYXJyYXkoKTsKCiAgICBpZiAoIXRhZ3MuaW5jbHVkZXMoJ2R1cGxpY2F0ZScpKSB7CiAgICAgIGR1cF9idXR0b24ub25jbGljayA9IGZ1bmN0aW9uKCkgeyBhZGRfdGFnKCdkdXBsaWNhdGUnKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgICBkdXBfYnV0dG9uLmlubmVyVGV4dCA9ICdUYWcgZHVwbGljYXRlJzsKICAgIH0gZWxzZSB7CiAgICAgIGR1cF9idXR0b24ub25jbGljayA9IGZ1bmN0aW9uKCkgeyByZW1vdmVfdGFnKCdkdXBsaWNhdGUnKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgICBkdXBfYnV0dG9uLmlubmVyVGV4dCA9ICdVbnRhZyBkdXBsaWNhdGUnOwogICAgfQoKICAgIGlmICghdGFncy5pbmNsdWRlcygnbGVnaXRpbWF0ZV92YXJpYXRpb24nKSkgewogICAgICB2YXJfYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgYWRkX3RhZygnbGVnaXRpbWF0ZV92YXJpYXRpb24nKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgICB2YXJfYnV0dG9uLmlubmVyVGV4dCA9ICdUYWcgbGVnaXRpbWF0ZV92YXJpYXRpb24nOwogICAgfSBlbHNlIHsKICAgICAgdmFyX2J1dHRvbi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7IHJlbW92ZV90YWcoJ2xlZ2l0aW1hdGVfdmFyaWF0aW9uJyk7IHJldHVybiBmYWxzZTsgfTsKICAgICAgdmFyX2J1dHRvbi5pbm5lclRleHQgPSAnVW50YWcgbGVnaXRpbWF0ZV92YXJpYXRpb24nOwogICAgfQoKICAgIHBvdF9idXR0b24uaW5uZXJUZXh0ID0gJ1VudGFnIHBvdGVudGlhbF9kdXBsaWNhdGUnOwogICAgaWYgKCF0YWdzLmluY2x1ZGVzKCdwb3RlbnRpYWxfZHVwbGljYXRlJykpIHsKICAgICAgcG90X2J1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICBwb3RfYnV0dG9uLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgcmVtb3ZlX3RhZygncG90ZW50aWFsX2R1cGxpY2F0ZScpOyByZXR1cm4gZmFsc2U7IH07CiAgICAgIHBvdF9idXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHJlc2V0X3BhcmVudF9pZCgpIHsKICAgIHBvc3RfcGFyZW50X2lkLnZhbHVlID0gcGFyZW50X2lkOwogIH0KCiAgZnVuY3Rpb24gZ2V0X29sZF90YWdzX2FycmF5KCkgewogICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3N0X29sZF90YWdzJykudmFsdWUudHJpbSgpLnNwbGl0KC9ccysvKTsKICB9CgogIGZ1bmN0aW9uIGdldF90YWdzX2FycmF5KCkgewogICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3N0X3RhZ3MnKS52YWx1ZS50cmltKCkuc3BsaXQoL1xzKy8pOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZyh0YWcsIHNraXBfY29tbW9uX3RhZ3NfdXBkYXRlID0gZmFsc2UpIHsKICAgIGNvbnN0IHRhZ3MgPSBnZXRfdGFnc19hcnJheSgpOwoKICAgIGlmICgodGFnID09PSAnZHVwbGljYXRlJyAmJiB0YWdzLmluY2x1ZGVzKCdsZWdpdGltYXRlX3ZhcmlhdGlvbicpKSB8fCAodGFnID09PSAnbGVnaXRpbWF0ZV92YXJpYXRpb24nICYmIHRhZ3MuaW5jbHVkZXMoJ2R1cGxpY2F0ZScpKSkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLndhcm4sICdhZGRvbjogY2Fubm90IHRhZyBhcyBkdXBsaWNhdGUgYW5kIGxlZ2l0aW1hdGVfdmFyaWF0aW9uIGF0IHRoZSBzYW1lIHRpbWUuJyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodGFncy5pbmNsdWRlcyh0YWcpKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgJ2FkZG9uOiB0YWcgYWxyZWFkeSBwcmVzZW50Jyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zdF90YWdzJykudmFsdWUgKz0gJyAnICsgdGFnOwoKICAgIHRhZ3NfY2hhbmdlZCA9IHRydWU7CiAgICB1cGRhdGVfdGFnX2VsZW1lbnRzKHNraXBfY29tbW9uX3RhZ3NfdXBkYXRlKTsKICB9CgogIGZ1bmN0aW9uIHJlbW92ZV90YWcodGFnLCBza2lwX2NvbW1vbl90YWdzX3VwZGF0ZSA9IGZhbHNlKSB7CiAgICBjb25zdCB0YWdzID0gZ2V0X3RhZ3NfYXJyYXkoKTsKCiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspCiAgICAgIGlmICh0YWdzW2ldID09PSB0YWcpCiAgICAgICAgdGFnc1tpXSA9ICcnOwoKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3N0X3RhZ3MnKS52YWx1ZSA9IHRhZ3Muam9pbignICcpLnRyaW0oKTsKCiAgICB0YWdzX2NoYW5nZWQgPSB0cnVlOwogICAgdXBkYXRlX3RhZ19lbGVtZW50cyhza2lwX2NvbW1vbl90YWdzX3VwZGF0ZSk7CiAgfQoKICBmdW5jdGlvbiBkZWxldGVfdXNlbGVzc190YWdzX3RhZygpIHsKICAgIGlmICh0YWdzX2NoYW5nZWQgJiYgY29uZmlnLmVkaXRmb3JtX2RlbGV0ZXVzZWxlc3N0YWdzKSByZW1vdmVfdGFnKCd1c2VsZXNzX3RhZ3MnKTsKICB9CgogIGZ1bmN0aW9uIHRhZ19pc19wcmVzZW50KHRhZykgewogICAgcmV0dXJuIGdldF90YWdzX2FycmF5KCkuaW5jbHVkZXModGFnKTsKICB9CgogIGZ1bmN0aW9uIHJlc2V0X3RhZ3MoKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zdF90YWdzJykudmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zdF9vbGRfdGFncycpLnZhbHVlOwogICAgdGFnc19jaGFuZ2VkID0gZmFsc2U7CiAgICB1cGRhdGVfdGFnX2VsZW1lbnRzKCk7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVfdGFnX2VsZW1lbnRzKHNraXBfY29tbW9uX3RhZ3MgPSBmYWxzZSkgewogICAgdXBkYXRlX3RhZ19idXR0b25zKCk7CgogICAgY29uc3QgdGFnX21lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnX21lbnUnKTsKICAgIGlmICh0YWdfbWVudSAhPT0gbnVsbCAmJiB0YWdfbWVudS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScpIHsKICAgICAgdXBkYXRlX3RhZ19tZW51KHNraXBfY29tbW9uX3RhZ3MpOwogICAgfQogIH0KCgoKICAvLyBmbGFnIG9wdGlvbiB3aXRoIGRlZmF1bHQgdGV4dAogIGZ1bmN0aW9uIGZsYWdfZHVwbGljYXRlKGlkLCByZWFzb25fc3VmZml4KSB7CiAgICBpZiAoSVNfR1JFQVNFTU9OS0VZNCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLndhcm4sICdhZGRvbjogXCdGbGFnIGR1cGxpY2F0ZVwnIG5vdCB5ZXQgc3VwcG9ydGVkIGluIEdyZWFzZW1vbmtleScpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKHBhcmVudF9pZCA9PT0gbnVsbCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLndhcm4sICdhZGRvbjogcGFyZW50IGlkIG5vdCBmb3VuZCwgbm90IGxvZ2dlZCBpbj8nKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IGN1cnJlbnRfcGFyZW50X2lkID0gcG9zdF9wYXJlbnRfaWQudmFsdWU7CiAgICBpZiAoY3VycmVudF9wYXJlbnRfaWQgIT09IHBhcmVudF9pZCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLndhcm4sICdhZGRvbjogcGFyZW50IGlkIHdhcyBjaGFuZ2VkIGJ1dCBub3Qgc2F2ZWQhJyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoIWN1cnJlbnRfcGFyZW50X2lkIHx8IGN1cnJlbnRfcGFyZW50X2lkLmxlbmd0aCA9PT0gMCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLndhcm4sICdhZGRvbjogbm8gcGFyZW50IGlkIHNldCEnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IHRhZ3MgPSBnZXRfdGFnc19hcnJheSgpOwogICAgY29uc3Qgb2xkX3RhZ3MgPSBnZXRfb2xkX3RhZ3NfYXJyYXkoKTsKICAgIGlmICh0YWdzLmluY2x1ZGVzKCdkdXBsaWNhdGUnKSAmJiAhb2xkX3RhZ3MuaW5jbHVkZXMoJ2R1cGxpY2F0ZScpKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgJ2FkZG9uOiBkdXBsaWNhdGUgdGFnIHNldCBidXQgbm90IHNhdmVkIScpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIW9sZF90YWdzLmluY2x1ZGVzKCdkdXBsaWNhdGUnKSkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLndhcm4sICdhZGRvbjogbm90IHRhZ2dlZCBhcyBkdXBsaWNhdGUhJyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAob2xkX3RhZ3MuaW5jbHVkZXMoJ2xlZ2l0aW1hdGVfdmFyaWF0aW9uJykgfHwgb2xkX3RhZ3MuaW5jbHVkZXMoJ3JldmlzaW9uJykpCiAgICAgIGlmICghd2luZG93LmNvbmZpcm0oJ1Bvc3QgaXMgdGFnZ2VkIGFzIGEgbGVnaXRpbWF0ZV92YXJpYXRpb24gb3IgcmV2aXNpb24sIGl0IG1heSBub3QgYmUgYSBkdXBsaWNhdGUhXG5cbkZsYWcgaXQgYW55d2F5PycpKQogICAgICAgIHJldHVybjsKCiAgICBjb25zdCByZWFzb24gPSB3aW5kb3cucHJvbXB0KCdXaHkgc2hvdWxkIHRoaXMgcG9zdCBiZSByZWNvbnNpZGVyZWQgZm9yIG1vZGVyYXRpb24/JywgYGR1cGxpY2F0ZSBvZiAke3BhcmVudF9pZH0ke3JlYXNvbl9zdWZmaXh9YCk7CiAgICBpZiAocmVhc29uID09PSBudWxsKQogICAgICByZXR1cm47CgogICAgLy8gVE9ETyB3aWxsIG5vdCB3b3JrIG9uIEdyZWFzZW1vbmtleSBhdCBhbGwKICAgIG5ldyB1bnNhZmVXaW5kb3cuQWpheC5SZXF1ZXN0KCcvcG9zdC9mbGFnLmpzb24nLCB7CiAgICAgIHBhcmFtZXRlcnM6IHsgaWQsIHJlYXNvbiB9LAogICAgICBvbkNvbXBsZXRlKHJlc3BvbnNlKSB7CiAgICAgICAgY29uc3QgcmVzcCA9IHJlc3BvbnNlLnJlc3BvbnNlSlNPTjsKICAgICAgICBpZiAocmVzcC5zdWNjZXNzKSBzaG93X25vdGljZShjb25zb2xlLmxvZywgJ1Bvc3Qgd2FzIHJlc2VudCB0byBtb2RlcmF0aW9uIHF1ZXVlJyk7CiAgICAgICAgZWxzZSAgICAgICAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgYEVycm9yOiAke3Jlc3AucmVhc29ufWApOwogICAgICB9CiAgICB9KTsKICB9CgoKICBmdW5jdGlvbiByZWFkX2ltYWdlX2RhdGEoKSB7CiAgICBjb25zdCBkYXRhID0gewogICAgICBpbWdfZWxlbTogbnVsbCwgLy8gPGltZz4sIDx2aWRlbz4gb3IgPG9iamVjdD4gKGluIGNhc2Ugb2YgZmxhc2gpCiAgICAgIGVtYl9lbGVtOiBudWxsLCBub25faW1nX2RpdjogbnVsbCwgLy8gZmxhc2ggaXMgPG9iamVjdD48ZW1iZWQ+LCB3ZSBuZWVkIHRoZSA8ZGl2PiBpdCdzIGluIGFzIHdlbGwKICAgICAgaXNfZmxhc2g6IGZhbHNlLAogICAgICB3aWR0aDogbnVsbCwKICAgICAgaGVpZ2h0OiBudWxsLAogICAgICBhc3BlY3RfcmF0aW86IG51bGwsCiAgICAgIGN1cnJlbnRfaGVpZ2h0OiBudWxsIC8vIHN0b3JlIGN1cnJlbnQgaGVpZ2h0IHNlcGFyYXRlbHksIGJlY2F1c2UgZmxhc2ggaXMgYSBiaXRjaAogICAgfTsKCiAgICAvLyBpbWFnZSBvciB2aWRlbwogICAgY29uc3QgaW1nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltYWdlJyk7CiAgICBpZiAoaW1nICE9PSBudWxsKSB7CiAgICAgIGRhdGEuaW1nX2VsZW0gPSBpbWc7CgogICAgICAvLyB3b3JrYXJvdW5kIGZvciBHYWxpbm9hJ3MgU2Fua2FrdSBDaGFubmVsIERhcms6IGRvbid0IHJlYWQgLndpZHRoLy5oZWlnaHQgYXR0cmlidXRlcyBidXQgcmVhZCAiRGV0YWlscyIKICAgICAgbGV0IHJlcyA9IG51bGw7CiAgICAgIGNvbnN0IGxvd3JlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb3dyZXMnKTsKICAgICAgaWYgKGxvd3JlcyAhPT0gbnVsbCkgewogICAgICAgIHJlcyA9IGxvd3Jlcy5pbm5lclRleHQuc3BsaXQoJ3gnKTsgLy8gcGFyc2UgIjx3aWR0aD54PGhlaWdodD4iCiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgaGlnaHJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaWdocmVzJyk7CiAgICAgICAgaWYgKGhpZ2hyZXMgIT09IG51bGwpIHsKICAgICAgICAgIHJlcyA9IGhpZ2hyZXMuaW5uZXJUZXh0LnNwbGl0KCcgJylbMF0uc3BsaXQoJ3gnKTsgLy8gcGFyc2UgIjx3aWR0aD54PGhlaWdodD4gKDxmaWxlIHNpemU+KSIKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChyZXMgPT09IG51bGwpIHsKICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IGltYWdlL3ZpZGVvIHJlc29sdXRpb24gbm90IGluICJEZXRhaWxzIj8hIERpc2FibGVkIHNjYWxpbmcuJyk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIGRhdGEud2lkdGggID0gcmVzWzBdOwogICAgICBkYXRhLmhlaWdodCA9IHJlc1sxXTsKICAgICAgZGF0YS5jdXJyZW50X2hlaWdodCA9IGRhdGEuaGVpZ2h0OwogICAgICBkYXRhLmFzcGVjdF9yYXRpbyA9IGRhdGEud2lkdGggLyBkYXRhLmhlaWdodDsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CgogICAgLy8gZmxhc2ggb3IgdW5rbm93bgogICAgY29uc3Qgbm9uX2ltZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub24taW1hZ2UtY29udGVudCcpOwogICAgaWYgKG5vbl9pbWcgIT09IG51bGwpIHsKICAgICAgZGF0YS5ub25faW1nX2RpdiA9IG5vbl9pbWc7CgogICAgICBjb25zdCBvYmpzID0gbm9uX2ltZy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnT0JKRUNUJyk7CiAgICAgIGNvbnN0IGVtYnMgPSBub25faW1nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdFTUJFRCcpOwogICAgICBkYXRhLmlzX2ZsYXNoID0gKG9ianMubGVuZ3RoID09PSAxICYmIGVtYnMubGVuZ3RoID09PSAxKTsgLy8gPG9iamVjdD48ZW1iZWQ+CgogICAgICBpZiAoIWRhdGEuaXNfZmxhc2gpIHsKICAgICAgICBzaG93X25vdGljZSgnYWRkb24gZXJyb3I6IHVua25vd24gcG9zdCBjb250ZW50ISBDYW5cJ3QgcmVhZCB3aWR0aC9oZWlnaHQuJyk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIGRhdGEuaW1nX2VsZW0gPSBvYmpzWzBdOwogICAgICBkYXRhLmVtYl9lbGVtID0gZW1ic1swXTsKICAgICAgLy8gPG9iamVjdD4gY29udGFpbnMgd2lkdGgvaGVpZ2h0IGluIGJvdGggRmlyZWZveCBhbmQgQ2hyb21lCiAgICAgIGRhdGEud2lkdGggID0gZGF0YS5pbWdfZWxlbS53aWR0aDsKICAgICAgZGF0YS5oZWlnaHQgPSBkYXRhLmltZ19lbGVtLmhlaWdodDsKICAgICAgZGF0YS5jdXJyZW50X2hlaWdodCA9IGRhdGEuaGVpZ2h0OwogICAgICBkYXRhLmFzcGVjdF9yYXRpbyA9IGRhdGEud2lkdGggLyBkYXRhLmhlaWdodDsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBjb25zdCBTQ0FMRV9NT0RFUyA9IHsgUkVTRVQ6IC0xLCBGSVQ6IDAsIEhPUklaT05UQUw6IDEsIFZFUlRJQ0FMOiAyIH07CgogIC8vIHN0cmV0Y2ggaW1hZ2UvdmlkZW8vZmxhc2gsIHJlcXVpcmVzIGRhdGEgZnJvbSByZWFkX2ltYWdlX2RhdGEoKQogIGZ1bmN0aW9uIHNjYWxlX2ltYWdlKG1vZGUsIGFsd2F5c19zY2FsZSkgewogICAgaWYgKGltYWdlX2RhdGEgPT09IG51bGwpIHJldHVybjsgLy8gcmVhZF9pbWFnZV9kYXRhKCkgZmFpbGVkCgogICAgaWYgKCFhbHdheXNfc2NhbGUgJiYgKCFjb25maWcuc2NhbGVfZmxhc2ggJiYgaW1hZ2VfZGF0YS5pc19mbGFzaCkpCiAgICAgIHJldHVybjsKCiAgICBjb25zdCBub3RlX2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub3RlLWNvbnRhaW5lcicpOwoKICAgIC8vIHJlc2V0IGltYWdlIHNpemUKICAgIGlmIChtb2RlID09PSBTQ0FMRV9NT0RFUy5SRVNFVCkgewogICAgICBpZiAoIWltYWdlX2RhdGEuaXNfZmxhc2gpIHsKICAgICAgICBpbWFnZV9kYXRhLmltZ19lbGVtLnN0eWxlLndpZHRoID0gbnVsbDsKICAgICAgICBpbWFnZV9kYXRhLmltZ19lbGVtLnN0eWxlLmhlaWdodCA9IG51bGw7CiAgICAgICAgaWYgKG5vdGVfY29udGFpbmVyICE9PSBudWxsKSBub3RlX2NvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAnJzsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbWFnZV9kYXRhLmltZ19lbGVtLndpZHRoICA9IGltYWdlX2RhdGEud2lkdGg7CiAgICAgICAgaW1hZ2VfZGF0YS5pbWdfZWxlbS5oZWlnaHQgPSBpbWFnZV9kYXRhLmhlaWdodDsKICAgICAgICBpbWFnZV9kYXRhLmVtYl9lbGVtLndpZHRoICA9IGltYWdlX2RhdGEud2lkdGg7CiAgICAgICAgaW1hZ2VfZGF0YS5lbWJfZWxlbS5oZWlnaHQgPSBpbWFnZV9kYXRhLmhlaWdodDsKICAgICAgfQogICAgICBpbWFnZV9kYXRhLmN1cnJlbnRfaGVpZ2h0ID0gaW1hZ2VfZGF0YS5oZWlnaHQ7CgogICAgICAvLyB3b3JrYXJvdW5kIGZvciBHYWxpbm9hJ3MgU2Fua2FrdSBDaGFubmVsIERhcmsKICAgICAgaWYgKGNvbmZpZy5zYW5rYWt1X2NoYW5uZWxfZGFya19jb21wYXRpYmlsaXR5KSB7CiAgICAgICAgaW1hZ2VfZGF0YS5pbWdfZWxlbS5zdHlsZS5wYWRkaW5nTGVmdCA9ICcnOwogICAgICAgIG5vdGVfZml4KCk7CiAgICAgIH0KCiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyB3b3JrYXJvdW5kIGZvciBHYWxpbm9hJ3MgU2Fua2FrdSBDaGFubmVsIERhcmsKICAgIC8vIHByb2JsZW06IHNlZW1zIHRvIG9ubHkgd29yayBmb3IgYmlnZ2VyIHdpbmRvd3MKICAgIGxldCBsZWZ0X3NpZGU7CiAgICBpZiAoY29uZmlnLnNhbmtha3VfY2hhbm5lbF9kYXJrX2NvbXBhdGliaWxpdHkpIHsKICAgICAgY29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NpZGViYXInKVswXTsKICAgICAgbGVmdF9zaWRlID0gKHNpZGViYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkucmlnaHQgKyB3aW5kb3cucGFnZVhPZmZzZXQgKyAxMik7CiAgICAgIGltYWdlX2RhdGEuaW1nX2VsZW0uc3R5bGUucGFkZGluZ0xlZnQgPSBsZWZ0X3NpZGUgKyAncHgnOyAvLyBkb24ndCBoaWRlIGJlaGluZCBzaWRlYmFyCiAgICB9IGVsc2UgewogICAgICBsZWZ0X3NpZGUgPSBpbWFnZV9kYXRhLmltZ19lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB3aW5kb3cucGFnZVhPZmZzZXQ7CiAgICB9CgogICAgY29uc3QgdGFyZ2V0X3cgPSBNYXRoLm1heCh3aW5kb3cuaW5uZXJXaWR0aCAtIGxlZnRfc2lkZSAtIGdldF9zY3JvbGxiYXJfd2lkdGgoKSwgMSk7CiAgICBjb25zdCB0YXJnZXRfaCA9IE1hdGgubWF4KHdpbmRvdy5pbm5lckhlaWdodCwgMSk7CiAgICBjb25zdCB0YXJnZXRfYXNwZWN0X3JhdGlvID0gdGFyZ2V0X3cgLyB0YXJnZXRfaDsKCiAgICBpZiAobW9kZSA9PT0gU0NBTEVfTU9ERVMuRklUKQogICAgICBtb2RlID0gKGltYWdlX2RhdGEuYXNwZWN0X3JhdGlvID4gdGFyZ2V0X2FzcGVjdF9yYXRpbyA/IFNDQUxFX01PREVTLkhPUklaT05UQUwgOiBTQ0FMRV9NT0RFUy5WRVJUSUNBTCk7CgogICAgbGV0IG5ld193aWR0aCwgbmV3X2hlaWdodDsKICAgIGlmIChtb2RlID09PSBTQ0FMRV9NT0RFUy5IT1JJWk9OVEFMKSB7CiAgICAgIG5ld193aWR0aCA9IE1hdGguZmxvb3IodGFyZ2V0X3cpOwogICAgICBuZXdfaGVpZ2h0ID0gTWF0aC5mbG9vcih0YXJnZXRfdyAvIGltYWdlX2RhdGEuYXNwZWN0X3JhdGlvKTsKICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gU0NBTEVfTU9ERVMuVkVSVElDQUwpIHsKICAgICAgbmV3X3dpZHRoID0gTWF0aC5mbG9vcih0YXJnZXRfaCAqIGltYWdlX2RhdGEuYXNwZWN0X3JhdGlvKTsKICAgICAgbmV3X2hlaWdodCA9IE1hdGguZmxvb3IodGFyZ2V0X2gpOwogICAgfQoKICAgIGlmICghYWx3YXlzX3NjYWxlICYmIChjb25maWcuc2NhbGVfb25seV9kb3duc2NhbGUgJiYgKG5ld193aWR0aCA+IGltYWdlX2RhdGEud2lkdGggfHwgbmV3X2hlaWdodCA+IGltYWdlX2RhdGEuaGVpZ2h0KSkpCiAgICAgIHJldHVybjsKCgogICAgLy8gV2Ugc2FkbHkgY2FuJ3QgdXNlIHRyYW5zZm9ybSBzY2FsZSBoZXJlIGJlY2F1c2UgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIERPTSBzaXplLAogICAgLy8gc28gdGhlIHBvc3QgY29udGVudCB3b3VsZCBjb3ZlciB1cCAob3IgYmUgY292ZXJlZCB1cCBieSkgdGhlIGVsZW1lbnRzIGJlbG93IGl0CiAgICBjb25zdCBzZXRfZGltZW5zaW9ucyA9IChvYmopID0+IHsKICAgICAgb2JqLndpZHRoICA9IG5ld193aWR0aCAgKyAncHgnOwogICAgICBvYmouaGVpZ2h0ID0gbmV3X2hlaWdodCArICdweCc7CiAgICB9OwoKICAgIGlmIChpbWFnZV9kYXRhLmlzX2ZsYXNoKSB7CiAgICAgIHNldF9kaW1lbnNpb25zKGltYWdlX2RhdGEuaW1nX2VsZW0pOwogICAgICBzZXRfZGltZW5zaW9ucyhpbWFnZV9kYXRhLmVtYl9lbGVtKTsKICAgIH0gZWxzZSB7CiAgICAgIHNldF9kaW1lbnNpb25zKGltYWdlX2RhdGEuaW1nX2VsZW0uc3R5bGUpOwoKICAgICAgLy8gRm9yIG5vdGVzIHdlIG5lZWQgdG8gdXNlIHRyYW5zZm9ybSBzY2FsZSBiZWNhdXNlIHN0eWxlLndpZHRoL2hlaWdodC90b3AvbGVmdAogICAgICAvLyBpcyBleGFjdGx5IHdoYXQgZ2V0cyBzdG9yZWQgb24gdGhlIHNlcnZlcgogICAgICBpZiAobm90ZV9jb250YWluZXIgIT09IG51bGwpIHsKICAgICAgICBub3RlX2NvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAnMCAwJzsKICAgICAgICBub3RlX2NvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSBgc2NhbGUoJHtuZXdfd2lkdGggLyBpbWFnZV9kYXRhLndpZHRofSlgOwogICAgICB9CiAgICB9CgogICAgaW1hZ2VfZGF0YS5jdXJyZW50X2hlaWdodCA9IG5ld19oZWlnaHQ7CiAgfQoKICBmdW5jdGlvbiBzY2FsZV9vbl9yZXNpemVfaGVscGVyKCkgewogICAgY2xlYXJUaW1lb3V0KHJlc2l6ZV90aW1lcik7CiAgICByZXNpemVfdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgaWYgKGNvbmZpZy5zY2FsZV9vbl9yZXNpemUpIHNjYWxlX2ltYWdlKGNvbmZpZy5zY2FsZV9tb2RlLCBmYWxzZSk7CiAgICB9LCAxMDApOwogIH0KCiAgZnVuY3Rpb24gYWRkX3NjYWxlX29uX3Jlc2l6ZV9saXN0ZW5lcigpIHsKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzY2FsZV9vbl9yZXNpemVfaGVscGVyKTsKICB9CgogIGZ1bmN0aW9uIHJlbW92ZV9zY2FsZV9vbl9yZXNpemVfbGlzdGVuZXIoKSB7CiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc2NhbGVfb25fcmVzaXplX2hlbHBlcik7CiAgfQoKICBmdW5jdGlvbiBzY3JvbGxfdG9faW1hZ2UodG9fY2VudGVyKSB7CiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgaWYgKGltYWdlX2RhdGEgPT09IG51bGwpIHJldHVybjsKICAgICAgY29uc3QgYWJzb2x1dGVfaW1nX3RvcCA9IChpbWFnZV9kYXRhLmlzX2ZsYXNoID8gaW1hZ2VfZGF0YS5ub25faW1nX2RpdiA6IGltYWdlX2RhdGEuaW1nX2VsZW0pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldDsKICAgICAgaWYgKHRvX2NlbnRlcikgewogICAgICAgIGNvbnN0IHRvcF9vZl9jZW50ZXJlZF9yZWN0ID0gYWJzb2x1dGVfaW1nX3RvcCAtICh3aW5kb3cuaW5uZXJIZWlnaHQgLSBpbWFnZV9kYXRhLmN1cnJlbnRfaGVpZ2h0KSAvIDI7CiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHRvcF9vZl9jZW50ZXJlZF9yZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgYWJzb2x1dGVfaW1nX3RvcCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8gd2hlbiByZXNpemUgbm90aWNlIGlzIGhpZGRlbiAoZS5nLiBvcmlnaW5hbCBpbWFnZSBpcyBsb2FkZWQpLCBzY3JvbGwgdG8gbWFrZSB1cCB0aGUgZGlmZmVyZW5jZQogIGZ1bmN0aW9uIGFkZF9yZXNpemVfbm90aWNlX2xpc3RlbmVyKCkgewogICAgY29uc3QgcmVzaXplZF9ub3RpY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzaXplZF9ub3RpY2UnKTsKICAgIGlmIChpbWFnZV9kYXRhID09PSBudWxsIHx8IHJlc2l6ZWRfbm90aWNlID09PSBudWxsKSByZXR1cm47CgogICAgY29uc3Qgbm90aWNlX3lfZGlmZiA9IGltYWdlX2RhdGEuaW1nX2VsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gcmVzaXplZF9ub3RpY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOwoKICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtbm90aWNlX3lfZGlmZik7CiAgICB9KTsKICAgIG9ic2VydmVyLm9ic2VydmUocmVzaXplZF9ub3RpY2UsIHsKICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ3N0eWxlJ10sCiAgICB9KTsKICB9CgogIC8vIHNpbXBsZSBub3RlIGZpeCBmb3IgR2FsaW5vYSdzIFNhbmtha3UgQ2hhbm5lbCBEYXJrIChvbmx5IGZvciBkZWZhdWx0IGltYWdlIHNpemUpCiAgZnVuY3Rpb24gbm90ZV9maXgoKSB7CiAgICBjb25zdCBub3RlX2NvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdub3RlLWNvbnRhaW5lcicpOwogICAgaWYgKG5vdGVfY29udGFpbmVyICE9PSBudWxsICYmIGltYWdlX2RhdGEgIT09IG51bGwpIHsKICAgICAgbm90ZV9jb250YWluZXIuc3R5bGUubWFyZ2luTGVmdCA9ICgod2luZG93LmlubmVyV2lkdGggLSBpbWFnZV9kYXRhLmltZ19lbGVtLmNsaWVudFdpZHRoKSAvIDIgLSA4KSArICdweCc7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfcG9zdHBhZ2VfaG90a2V5cygpIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4gewogICAgICBjb25zdCB0YWcgPSBlLnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmICh0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAndGV4dGFyZWEnIHx8IHRhZyA9PT0gJ3NlbGVjdCcpIHJldHVybjsKCiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgZS5zaGlmdEtleSkgcmV0dXJuOwoKICAgICAgc3dpdGNoIChlLmtleSkgewogICAgICAgIGNhc2UgJ3InOiAvLyByKGVzZXQpCiAgICAgICAgICBzY2FsZV9pbWFnZShTQ0FMRV9NT0RFUy5SRVNFVCwgdHJ1ZSk7CiAgICAgICAgICBzY3JvbGxfdG9faW1hZ2UoY29uZmlnLnNjcm9sbF90b19pbWFnZV9jZW50ZXIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZic6IC8vIGYoaXQpCiAgICAgICAgICBzY2FsZV9pbWFnZShTQ0FMRV9NT0RFUy5GSVQsIHRydWUpOwogICAgICAgICAgc2Nyb2xsX3RvX2ltYWdlKGNvbmZpZy5zY3JvbGxfdG9faW1hZ2VfY2VudGVyKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2cnOiAvLyBnCiAgICAgICAgICBzY2FsZV9pbWFnZShTQ0FMRV9NT0RFUy5IT1JJWk9OVEFMLCB0cnVlKTsKICAgICAgICAgIHNjcm9sbF90b19pbWFnZShjb25maWcuc2Nyb2xsX3RvX2ltYWdlX2NlbnRlcik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdoJzogLy8gaAogICAgICAgICAgc2NhbGVfaW1hZ2UoU0NBTEVfTU9ERVMuVkVSVElDQUwsIHRydWUpOwogICAgICAgICAgc2Nyb2xsX3RvX2ltYWdlKGNvbmZpZy5zY3JvbGxfdG9faW1hZ2VfY2VudGVyKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3MnOiAvLyBzKGltaWxhcikKICAgICAgICAgIGlmIChwb3N0X2lkID09PSBudWxsKSB7CiAgICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogY291bGRuXCd0IGZpbmQgcG9zdCBpZD8hJyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvcGVuX2luX3RhYih3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgJy9wb3N0L3NpbWlsYXI/aWQ9JyArIHBvc3RfaWQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnZCc6IC8vIGQoZWxldGUpCiAgICAgICAgICBpZiAocG9zdF9pZCA9PT0gbnVsbCkgewogICAgICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IGNvdWxkblwndCBmaW5kIHBvc3QgaWQ/IScpOwogICAgICAgICAgfSBlbHNlIGlmICghZm91bmRfZGVsZXRlX2FjdGlvbikgewogICAgICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IERlbGV0ZSBhY3Rpb24gbm90IGZvdW5kLCBubyBwZXJtaXNzaW9uPycpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3Blbl9pbl90YWIod2luZG93LmxvY2F0aW9uLm9yaWdpbiArICcvcG9zdC9kZWxldGUvJyArIHBvc3RfaWQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0sIHRydWUpOwogIH0KCiAgLy8gc2l0ZWZpeDogZml4IHBpeGl2IHNvdXJjZSBsaW5rcyB1bmRlciAnRGV0YWlscycKICAvLyBpc3N1ZTogc291cmNlIGxpbmtzIG9mIHRoZSBmb3JtIGh0dHBzOi8vd3d3LnBpeGl2Lm5ldC9hcnR3b3Jrcy88aWQ+IHR1cm4gaW50bwogIC8vIGh0dHBzOi8vd3d3LnBpeGl2Lm5ldC9hcnR3b3Jrcy9odHRwczovL3d3dy5waXhpdi5uZXQvYXJ0d29ya3MvPGlkPgogIC8vIGRvZXNuJ3QgaGFwcGVuIGZvciBodHRwczovL3d3dy5waXhpdi5uZXQvZW4vYXJ0d29ya3MvPGlkPgogIC8vIG9yIHRoZSBvbGQgZm9ybWF0IGh0dHBzOi8vd3d3LnBpeGl2Lm5ldC9tZW1iZXJfaWxsdXN0LnBocD9tb2RlPW1lZGl1bSZpbGx1c3RfaWQ9PGlkPgogIGZ1bmN0aW9uIGZpeF9waXhpdl9zb3VyY2VfbGluaygpIHsKICAgIGNvbnN0IHN0YXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0YXRzJyk7CiAgICBpZiAoc3RhdHMgPT09IG51bGwpIHJldHVybjsKICAgIGZvciAoY29uc3QgbGluayBvZiBzdGF0cy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnQScpKSB7CiAgICAgIGlmIChsaW5rLmhyZWYgJiYgbGluay5ocmVmLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vd3d3LnBpeGl2Lm5ldC9hcnR3b3Jrcy8nKSkgewogICAgICAgIGNvbnN0IGlkID0gbGluay5ocmVmLnN1YnN0cmluZygnaHR0cHM6Ly93d3cucGl4aXYubmV0L2FydHdvcmtzLycubGVuZ3RoKTsKICAgICAgICB0cnkgewogICAgICAgICAgbmV3IFVSTChpZCk7IC8vIHRocm93cyBpZiBub3QgYSB2YWxpZCBVUkwKICAgICAgICAgIGxpbmsuaHJlZiA9IGlkOwogICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkgeyB9CiAgICAgIH0KICAgIH0KICB9CgogIC8qKioqKioqKioqKioqKioqKioqKioqKi8KICAvKiB3aWtpIHBhZ2UgZnVuY3Rpb25zICovCiAgLyoqKioqKioqKioqKioqKioqKioqKioqLwoKICBmdW5jdGlvbiBhZGRfZHRleHRfc3R5bGVfYnV0dG9ucygpIHsKICAgIGNvbnN0IHdpa2lfZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aWtpLWZvcm0nKTsKICAgIGNvbnN0IHdpa2lfYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aWtpX3BhZ2VfYm9keScpOwoKICAgIGlmICh3aWtpX2Zvcm0gPT09IG51bGwgfHwgd2lraV9ib2R5ID09PSBudWxsKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogY291bGRuXCd0IGZpbmQgIndpa2ktZm9ybSIgb3IgIndpa2lfcGFnZV9ib2R5IiwgRFRleHQgc3R5bGUgYnV0dG9ucyBkaXNhYmxlZCcpOwogICAgICByZXR1cm47CiAgICB9CgogICAgd2lraV9mb3JtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7IC8vIGFkZCBidXR0b25zIHRvIHRoZSByaWdodAoKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgZGl2LnN0eWxlLm1hcmdpbkxlZnQgPSAnMWVtJzsKICAgIGRpdi5zdHlsZS5tYXJnaW5Ub3AgPSAod2lraV9ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHdpa2lfZm9ybS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApICsgJ3B4JzsKICAgIGRpdi5zdHlsZS5iYWNrZ3JvdW5kID0gZ2V0X29yaWdpbmFsX2JhY2tncm91bmRfY29sb3IoKTsKCiAgICBkaXYuaW5uZXJIVE1MID0gJzxsYWJlbCB0aXRsZT0iQnV0dG9ucyBhZGQgKG9yIHJlbW92ZSBvdXRlcm1vc3QpIERUZXh0IHN0eWxpbmcgb24gc2VsZWN0ZWQgdGV4dC5cbicKICAgICAgKyAnQnV0dG9ucyBoYXZlIGFjY2Vzc2tleXMva2V5Ym9hcmQgc2hvcnRjdXRzLCB0eXBpY2FsbHkgYWN0aXZhdGVkIGJ5IEFsdCArIFNoaWZ0ICsga2V5IG9yIEFsdCArIGtleSBkZXBlbmRpbmcgb24gdGhlIGJyb3dzZXIuIicKICAgICAgKyAnIHN0eWxlPSJjdXJzb3I6aGVscDsiPkRUZXh0IHN0eWxlIGJ1dHRvbnM8L2xhYmVsPjxicj4nOwoKICAgIGNvbnN0IERURVhUX0NPREVTID0gWwogICAgICAnYicsICdpJywgJ3MnLCAndScsICc8YnI+JywKICAgICAgJ2NvZGUnLCAncXVvdGUnLCAnc3BvaWxlcicsICc8YnI+JywKICAgICAgJ1tbLi4uXV0nLCAne3suLi59fScsICdVUkwnLAogICAgXTsKCiAgICBmb3IgKGNvbnN0IGNvZGUgb2YgRFRFWFRfQ09ERVMpIHsKICAgICAgaWYgKGNvZGUgPT09ICc8YnI+JykgewogICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdCUicpKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQoKICAgICAgY29uc3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICAgIGJ0bi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7CiAgICAgIGJ0bi5vbmNsaWNrID0gKCkgPT4gewogICAgICAgIGNvbnN0IHRleHQgPSB3aWtpX2JvZHkudmFsdWU7CiAgICAgICAgY29uc3QgYSA9IHdpa2lfYm9keS5zZWxlY3Rpb25TdGFydDsKICAgICAgICBjb25zdCBiID0gd2lraV9ib2R5LnNlbGVjdGlvbkVuZDsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0ZXh0LnN1YnN0cmluZyhhLCBiKTsKCiAgICAgICAgbGV0IGN1dF9hID0gYSwgY3V0X2IgPSBiOyAgICAgICAgIC8vIHJhbmdlIHRvIGN1dAogICAgICAgIGxldCBpbnNlcnQ7ICAgICAgICAgICAgICAgICAgICAgICAvLyB0ZXh0IHRvIGluc2VydCBpbmJldHdlZW4KICAgICAgICBsZXQgc2VsX29mZl9hID0gMCwgc2VsX29mZl9iID0gMDsgLy8gYnkgZGVmYXVsdCB0aGUgaW5zZXJ0ZWQgdGV4dCBpcyBzZWxlY3RlZCwgdGhlc2UgYXJlIG9mZnNldHMKCiAgICAgICAgaWYgKGNvZGUgPT09ICdVUkwnKSB7CiAgICAgICAgICBjb25zdCBsaW5rID0gd2luZG93LnByb21wdCgnRW50ZXIgVVJMJyk7CiAgICAgICAgICBpZiAobGluayA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgaW5zZXJ0ID0gYCIke3NlbGVjdGlvbn0iOiR7bGlua31gOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgb3BlbiAgPSAnJzsKICAgICAgICAgIGxldCBjbG9zZSA9ICcnOwogICAgICAgICAgaWYgKGNvZGUgPT09ICd7ey4uLn19JykgewogICAgICAgICAgICBvcGVuICA9ICd7eyc7CiAgICAgICAgICAgIGNsb3NlID0gJ319JzsKICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gJ1tbLi4uXV0nKSB7CiAgICAgICAgICAgIG9wZW4gID0gJ1tbJzsKICAgICAgICAgICAgY2xvc2UgPSAnXV0nOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3BlbiAgPSBgWyR7Y29kZX1dYDsKICAgICAgICAgICAgY2xvc2UgPSBgWy8ke2NvZGV9XWA7CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgZXh0X2EgPSBNYXRoLm1heCgwLCBhIC0gb3Blbi5sZW5ndGgpOwogICAgICAgICAgY29uc3QgZXh0X2IgPSBiICsgY2xvc2UubGVuZ3RoOwogICAgICAgICAgY29uc3QgZXh0X3NlbGVjdGlvbiA9IHRleHQuc3Vic3RyaW5nKGV4dF9hLCBleHRfYik7CgogICAgICAgICAgaWYgKGV4dF9zZWxlY3Rpb24uc3RhcnRzV2l0aChvcGVuKSAmJiBleHRfc2VsZWN0aW9uLmVuZHNXaXRoKGNsb3NlKSkgewogICAgICAgICAgICAvLyByZW1vdmUgRFRleHQgZGlyZWN0bHkgb3V0c2lkZSBzZWxlY3Rpb24KICAgICAgICAgICAgaW5zZXJ0ID0gc2VsZWN0aW9uOwogICAgICAgICAgICBjdXRfYSA9IGV4dF9hOwogICAgICAgICAgICBjdXRfYiA9IGV4dF9iOwogICAgICAgICAgICBzZWxfb2ZmX2EgPSAtb3Blbi5sZW5ndGg7CiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5zdGFydHNXaXRoKG9wZW4pICYmIHNlbGVjdGlvbi5lbmRzV2l0aChjbG9zZSkpIHsKICAgICAgICAgICAgLy8gcmVtb3ZlIERUZXh0IGRpcmVjdGx5IGluc2lkZSBzZWxlY3Rpb24KICAgICAgICAgICAgaW5zZXJ0ID0gc2VsZWN0aW9uLnNsaWNlKG9wZW4ubGVuZ3RoLCAtY2xvc2UubGVuZ3RoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxldCBjbGVhbmVkOwoKICAgICAgICAgICAgY29uc3Qgb3Blbl9pICA9IHNlbGVjdGlvbi5pbmRleE9mKG9wZW4pOwogICAgICAgICAgICBjb25zdCBjbG9zZV9pID0gc2VsZWN0aW9uLmxhc3RJbmRleE9mKGNsb3NlKTsKCiAgICAgICAgICAgIC8vIHJlbW92ZSBleGlzdGluZyAoaW5uZXIpIERUZXh0IGJlZm9yZSBhZGRpbmcgbmV3IG9uZQogICAgICAgICAgICBpZiAob3Blbl9pICE9PSAtMSAmJiBjbG9zZV9pID4gb3Blbl9pKSB7CiAgICAgICAgICAgICAgY2xlYW5lZCA9IHNlbGVjdGlvbi5zdWJzdHJpbmcoMCwgb3Blbl9pKQogICAgICAgICAgICAgICAgKyBzZWxlY3Rpb24uc3Vic3RyaW5nKG9wZW5faSAgKyBvcGVuLmxlbmd0aCwgY2xvc2VfaSkKICAgICAgICAgICAgICAgICsgc2VsZWN0aW9uLnN1YnN0cmluZyhjbG9zZV9pICsgY2xvc2UubGVuZ3RoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjbGVhbmVkID0gc2VsZWN0aW9uOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnNlcnQgPSBvcGVuICsgY2xlYW5lZCArIGNsb3NlOwogICAgICAgICAgICAvLyBzZWxlY3QgJ2NsZWFuZWQnCiAgICAgICAgICAgIHNlbF9vZmZfYSA9IG9wZW4ubGVuZ3RoOwogICAgICAgICAgICBzZWxfb2ZmX2IgPSAtKG9wZW4ubGVuZ3RoICsgY2xvc2UubGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGNvbnN0IHNlbF9hID0gYSArIHNlbF9vZmZfYTsKICAgICAgICBjb25zdCBzZWxfYiA9IHNlbF9hICsgaW5zZXJ0Lmxlbmd0aCArIHNlbF9vZmZfYjsKCiAgICAgICAgd2lraV9ib2R5LnZhbHVlID0gdGV4dC5zdWJzdHJpbmcoMCwgY3V0X2EpICsgaW5zZXJ0ICsgdGV4dC5zdWJzdHJpbmcoY3V0X2IpOwogICAgICAgIHdpa2lfYm9keS5zZXRTZWxlY3Rpb25SYW5nZShNYXRoLm1heCgwLCBzZWxfYSksIHNlbF9iKTsKICAgICAgICB3aWtpX2JvZHkuZm9jdXMoKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH07CgogICAgICAvLyBhZGQgYWNjZXNza2V5cyBhbmQgdGl0bGVzCiAgICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMSkgewogICAgICAgIGJ0bi5hY2Nlc3NLZXkgPSBjb2RlOwogICAgICAgIGJ0bi50aXRsZSA9CiAgICAgICAgICBjb2RlID09PSAnYicgPyAnYm9sZCcgOgogICAgICAgICAgY29kZSA9PT0gJ2knID8gJ2l0YWxpYycgOgogICAgICAgICAgY29kZSA9PT0gJ3MnID8gJ3N0cmlrZXRocm91Z2gnIDoKICAgICAgICAgIGNvZGUgPT09ICd1JyA/ICd1bmRlcmxpbmUnIDogJyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnRuLmFjY2Vzc0tleSA9CiAgICAgICAgICBjb2RlID09PSAnY29kZScgICAgPyAnYycgOgogICAgICAgICAgY29kZSA9PT0gJ3F1b3RlJyAgID8gJ3EnIDoKICAgICAgICAgIGNvZGUgPT09ICdzcG9pbGVyJyA/ICdvJyA6CiAgICAgICAgICBjb2RlID09PSAnW1suLi5dXScgPyAndycgOgogICAgICAgICAgY29kZSA9PT0gJ3t7Li4ufX0nID8gJ3AnIDoKICAgICAgICAgIGNvZGUgPT09ICdVUkwnICAgICA/ICdsJyA6ICcnOwoKICAgICAgICBpZiAoY29kZSA9PT0gJ1tbLi4uXV0nKSBidG4udGl0bGUgPSAnYWNjZXNza2V5OiB3JzsKICAgICAgICBpZiAoY29kZSA9PT0gJ3t7Li4ufX0nKSBidG4udGl0bGUgPSAnYWNjZXNza2V5OiBwJzsKICAgICAgfQoKICAgICAgY29uc3QgdSA9IC8vIGNoYXJhY3RlciB0byB1bmRlcmxpbmUKICAgICAgICBjb2RlID09PSAnY29kZScgICAgPyAwIDoKICAgICAgICBjb2RlID09PSAncXVvdGUnICAgPyAwIDoKICAgICAgICBjb2RlID09PSAnc3BvaWxlcicgPyAyIDoKICAgICAgICBjb2RlID09PSAnVVJMJyAgICAgPyAyIDoKICAgICAgICBjb2RlLmxlbmd0aCA9PT0gMSAgPyAwIDogLTE7CgogICAgICBpZiAodSAhPT0gLTEpIHsKICAgICAgICBidG4uaW5uZXJIVE1MID0gYCR7Y29kZS5zdWJzdHJpbmcoMCwgdSl9PHNwYW4gc3R5bGU9InRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyI+JHtjb2RlW3VdfTwvc3Bhbj4ke2NvZGUuc3Vic3RyaW5nKHUgKyAxKX1gOwogICAgICB9IGVsc2UgewogICAgICAgIGJ0bi5pbm5lclRleHQgPSBjb2RlOwogICAgICB9CgogICAgICBkaXYuYXBwZW5kQ2hpbGQoYnRuKTsKICAgIH0KCiAgICB3aWtpX2Zvcm0uYXBwZW5kQ2hpbGQoZGl2KTsKICB9CgogIGZ1bmN0aW9uIGFkZF93aWtpX3RlbXBsYXRlKCkgewogICAgaWYgKGNvbmZpZy53aWtpX3RlbXBsYXRlLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKICAgIGNvbnN0IHdpa2lfZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aWtpLWZvcm0nKTsKICAgIGNvbnN0IHdpa2lfYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aWtpX3BhZ2VfYm9keScpOwoKICAgIGlmICh3aWtpX2Zvcm0gPT09IG51bGwgfHwgd2lraV9ib2R5ID09PSBudWxsKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogY291bGRuXCd0IGZpbmQgIndpa2ktZm9ybSIgb3IgIndpa2lfcGFnZV9ib2R5Iiwgd2lraSB0ZW1wbGF0ZSBkaXNhYmxlZCcpOwogICAgICByZXR1cm47CiAgICB9CgogICAgd2lraV9mb3JtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7IC8vIGFkZCB0ZW1wbGF0ZSB0byB0aGUgcmlnaHQKCiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKICAgIGRpdi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzFlbSc7CgogICAgY29uc3QgdGVtcGxhdGVfbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdMQUJFTCcpOwogICAgdGVtcGxhdGVfbGFiZWwuaW5uZXJUZXh0ID0gJ1dpa2kgVGVtcGxhdGUnOwogICAgdGVtcGxhdGVfbGFiZWwuc3R5bGUuY3Vyc29yID0gJ2hlbHAnOwogICAgdGVtcGxhdGVfbGFiZWwuc3R5bGUudGV4dERlY29yYXRpb24gPSAndW5kZXJsaW5lIGRhc2hlZCc7CiAgICB0ZW1wbGF0ZV9sYWJlbC50aXRsZSA9ICdTZWxlY3RlZCB0ZXh0IGNhbiBiZSBhcHBlbmRlZCB0byB0aGUgcGFnZSBib2R5LiBDbGlja2luZyBvciB1c2luZyBhcnJvdyBrZXlzIHNlbGVjdHMgYSB3aG9sZSBsaW5lLCBwcmVzc2luZyBcJ2NcJyBvciB0aGUgYnV0dG9uIGJlbG93IGNvcGllcyB0aGUgc2VsZWN0aW9uIG92ZXInOwoKICAgIGNvbnN0IHRlbXBsYXRlX3RleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURVhUQVJFQScpOwogICAgdGVtcGxhdGVfdGV4dC5pZCA9ICd3aWtpX3RlbXBsYXRlX3RleHQnOwogICAgdGVtcGxhdGVfdGV4dC5jb2xzID0gd2lraV9ib2R5LmNvbHM7CiAgICB0ZW1wbGF0ZV90ZXh0LnJvd3MgPSB3aWtpX2JvZHkucm93czsKICAgIHRlbXBsYXRlX3RleHQuc3R5bGUud2lkdGggPSAnMzNlbSc7CiAgICB0ZW1wbGF0ZV90ZXh0LnZhbHVlID0gY29uZmlnLndpa2lfdGVtcGxhdGU7CgogICAgY29uc3QgaW5zZXJ0X3RlbXBsYXRlX3NlbGVjdGlvbiA9ICgpID0+IHsKICAgICAgY29uc3QgdGV4dCA9IHRlbXBsYXRlX3RleHQudmFsdWU7CiAgICAgIGNvbnN0IGEgPSB0ZW1wbGF0ZV90ZXh0LnNlbGVjdGlvblN0YXJ0OwogICAgICBjb25zdCBiID0gdGVtcGxhdGVfdGV4dC5zZWxlY3Rpb25FbmQ7CgogICAgICBjb25zdCBzZWxlY3Rpb24gPSB0ZXh0LnN1YnN0cmluZyhhLCBiKTsKICAgICAgY29uc3QgYWRkX25ld2xpbmUgPSB3aWtpX2JvZHkudmFsdWUgJiYgIXdpa2lfYm9keS52YWx1ZS5lbmRzV2l0aCgnXG4nKTsKICAgICAgd2lraV9ib2R5LnZhbHVlICs9IChhZGRfbmV3bGluZSA/ICdcbicgOiAnJykgKyBzZWxlY3Rpb247CiAgICB9OwoKICAgIGNvbnN0IGV4dGVuZF9zZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgIC8vIGV4dGVuZCBlbXB0eSBzZWxlY3Rpb24gdG8gbmV3bGluZXMgKG9yIHRleHQgc3RhcnQvZW5kKQogICAgICBjb25zdCB0ZXh0ID0gdGVtcGxhdGVfdGV4dC52YWx1ZTsKICAgICAgbGV0IGEgPSB0ZW1wbGF0ZV90ZXh0LnNlbGVjdGlvblN0YXJ0OwogICAgICBsZXQgYiA9IHRlbXBsYXRlX3RleHQuc2VsZWN0aW9uRW5kOwoKICAgICAgaWYgKGEgPT09IGIpIHsKICAgICAgICBjb25zdCBleHRfYSA9IHRleHQubGFzdEluZGV4T2YoJ1xuJywgYSAtIDEpOwogICAgICAgIGEgPSAoZXh0X2EgIT09IC0xID8gZXh0X2EgKyAxIDogMCk7CgogICAgICAgIGlmICh0ZXh0LmNoYXJBdChiKSAhPT0gJ1xuJykgewogICAgICAgICAgY29uc3QgZXh0X2IgPSB0ZXh0LmluZGV4T2YoJ1xuJywgYiArIDEpOwogICAgICAgICAgYiA9IChleHRfYiAhPT0gLTEgPyBleHRfYiAtIDEgOiB0ZXh0Lmxlbmd0aCAtIDEpICsgMTsKICAgICAgICB9CgogICAgICAgIHRlbXBsYXRlX3RleHQuc2V0U2VsZWN0aW9uUmFuZ2UoYSwgYik7CiAgICAgIH0KICAgIH07CgogICAgdGVtcGxhdGVfdGV4dC5yZWFkT25seSA9IHRydWU7IC8vIGhpZGVzIHRoZSBjYXJldCBhbmQgdGhlcmUncyBubyBlYXN5IHdvcmthcm91bmQKICAgIHRlbXBsYXRlX3RleHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBleHRlbmRfc2VsZWN0aW9uKTsKICAgIHRlbXBsYXRlX3RleHQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBleHRlbmRfc2VsZWN0aW9uKTsKICAgIHRlbXBsYXRlX3RleHQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7CiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgZS5zaGlmdEtleSkgcmV0dXJuOwogICAgICBpZiAoZS5rZXkgPT09ICdjJykgaW5zZXJ0X3RlbXBsYXRlX3NlbGVjdGlvbigpOwogICAgfSk7CgogICAgY29uc3QgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICBidG4uaW5uZXJUZXh0ID0gJ0NvcHkgc2VsZWN0aW9uIG92ZXInOwogICAgYnRuLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJzsKICAgIGJ0bi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOwogICAgYnRuLnN0eWxlLnBhZGRpbmcgPSAnMC4yZW0gMmVtJzsKICAgIGJ0bi5zdHlsZS5tYXJnaW4gPSAnMC4xZW0nOwogICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7IGluc2VydF90ZW1wbGF0ZV9zZWxlY3Rpb24oKTsgdGVtcGxhdGVfdGV4dC5mb2N1cygpOyByZXR1cm4gZmFsc2U7IH07CgogICAgZGl2LmFwcGVuZENoaWxkKHRlbXBsYXRlX2xhYmVsKTsKICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdCUicpKTsKICAgIGRpdi5hcHBlbmRDaGlsZCh0ZW1wbGF0ZV90ZXh0KTsKICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdCUicpKTsKICAgIGRpdi5hcHBlbmRDaGlsZChidG4pOwogICAgd2lraV9mb3JtLmFwcGVuZENoaWxkKGRpdik7CgogICAgZGl2LnN0eWxlLm1hcmdpblRvcCA9ICh3aWtpX2JvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gd2lraV9mb3JtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRlbXBsYXRlX2xhYmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgKyAncHgnOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZ19lZGl0X2dlYXIoKSB7CiAgICB0cnkgewogICAgICAvLyBhZGQgYSAi4pqZIiBsaW5rIHRvIHRoZSBlZGl0IHRhZyBwYWdlCiAgICAgIGNvbnN0IGgyID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGl0bGUnKVswXTsKICAgICAgY29uc3QgdGFnID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikuc2VhcmNoUGFyYW1zLmdldCgndGl0bGUnKTsKICAgICAgY29uc3Qgd2lraV9lZGl0X2xpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdBJyk7CiAgICAgIHdpa2lfZWRpdF9saW5rLmhyZWYgPSAnL3RhZy9lZGl0P25hbWU9JyArIHRhZzsKICAgICAgd2lraV9lZGl0X2xpbmsuaW5uZXJUZXh0ID0gJ+KamSc7CiAgICAgIHdpa2lfZWRpdF9saW5rLnRpdGxlID0gJ0VkaXQgVGFnJzsKICAgICAgaDIuYXBwZW5kQ2hpbGQod2lraV9lZGl0X2xpbmspOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ2FkZG9uIGVycm9yOiBjb3VsZG5cJ3QgYWRkICLimpkiIHRhZyBwYWdlIGxpbmssIGNoZWNrIGNvbnNvbGUnLCBlcnJvcik7CiAgICB9CiAgfQoKCiAgLyoqKioqKioqKioqKioqKioqKi8KICAvKiBkb2N1bWVudC1zdGFydCAqLwogIC8qKioqKioqKioqKioqKioqKiovCgogIGF3YWl0IGxvYWRfY29uZmlnKCk7CgogIC8vIGxpc3RlbiBmb3IgY29uZmlnIGNoYW5nZXMgaW4gb3RoZXIgd2luZG93cwogIGlmIChVU0VfTU9OS0VZX1NUT1JBR0UpIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIEdNLmFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIoa2V5LCBzdG9yYWdlX2NoYW5nZWQpOwogIGVsc2UgaWYgKFVTRV9MT0NBTF9TVE9SQUdFKSB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIGxvY2FsX3N0b3JhZ2VfY2hhbmdlZCk7CiAgZWxzZSBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IGNvdWxkblwndCBhZGQgc3RvcmFnZSBjaGFuZ2UgbGlzdGVuZXIhIE5vIGNyb3NzLXRhYiBjb21tdW5pY2F0aW9uIHBvc3NpYmxlLicpOwoKICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAvKiBtYWluIHBhZ2UgLyB2aXN1YWxseSBzaW1pbGFyIHBhZ2UgKi8KICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgLy8gc2tpcCBsYW5ndWFnZSBjb2RlcyBpbiBwYXRobmFtZXMgbGlrZSAiL2pwL3Bvc3Qvc2hvdyIKICBsZXQgcGF0aG5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgaWYgKHBhdGhuYW1lLmluZGV4T2YoJy8nLCAxKSA9PT0gMykKICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyaW5nKDMpOwoKICBpZiAocGF0aG5hbWUgPT09ICcvJyB8fCBwYXRobmFtZSA9PT0gJy9wb3N0L2luZGV4JyB8fCBwYXRobmFtZS5zdGFydHNXaXRoKCcvcG9zdC9zaW1pbGFyJykpIHsKCiAgICAvLyB0cnkgdG8gYWRkIG5ldyBtb2RlcyByaWdodCBhZnRlciB0aGUgIkFwcGx5IHRhZyBzY3JpcHQiIG1vZGUgaXMgYWRkZWQgdG8gcHJldmVudCBpdCBiZWluZyByZXNldCB0byAiVmlldyBwb3N0cyIgb24gcGFnZSByZWxvYWRzCiAgICAvLyBpdCdzIHBvc3NpYmxlIHdlIGFyZSB0b28gbGF0ZSB0byBvYnNlcnZlIGl0cyBjb25zdHJ1Y3Rpb24sIHNvIGxvb2sgZm9yIGl0IGFmdGVyd2FyZHMgaW1tZWRpYXRlbHkKICAgIGNvbnN0IG9ic2VydmVyID0gcmVnaXN0ZXJfb2JzZXJ2ZXIoKG5vZGUpID0+IHsKICAgICAgcmV0dXJuIChub2RlLnZhbHVlID09PSAnYXBwbHktdGFnLXNjcmlwdCcpOwogICAgfSwgKG5vZGUsIG9ic2VydmVyKSA9PiB7CiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKCiAgICAgIC8vIGRvbid0IHBhc3Mgbm9kZS5wYXJlbnROb2RlLCBiZWNhdXNlIGl0IGNhbiBiZSB1bmRlZmluZWQgb3IgdGhlIDxkaXY+IGFib3ZlIGZvciByZWFzb25zIEkgY2Fubm90IHVuZGVyc3RhbmQKICAgICAgYWRkX21vZGVfb3B0aW9ucygpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwoKICAgIGNvbnN0IGRyb3Bkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGUnKTsKICAgIGlmIChkcm9wZG93biAhPT0gbnVsbCkgewogICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGRyb3Bkb3duLmNoaWxkcmVuKSB7CiAgICAgICAgaWYgKGNoaWxkLnZhbHVlID09PSAnYXBwbHktdGFnLXNjcmlwdCcpIHsgLy8gaXQncyBhbHJlYWR5IHRoZXJlCiAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7IC8vIHN0b3AgbG9va2luZyBmb3IgaXQKICAgICAgICAgIGFkZF9tb2RlX29wdGlvbnMoZHJvcGRvd24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gYWRkIHRodW1ibmFpbCBpY29ucyBhbmQgZmFkZSBvdXQgdGh1bWJuYWlscyBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIHBvc3RzIChmcm9tIGF1dG8gcGFnaW5nKQogICAgYWRkX3RodW1ibmFpbF9vYnNlcnZlcigobm9kZSkgPT4gKG5vZGUuY2xhc3NMaXN0ICE9IG51bGwgJiYgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2NvbnRlbnQtcGFnZScpKSk7CgoKICAvKioqKioqKioqKioqKi8KICAvKiBwb3N0IHBhZ2UgKi8KICAvKioqKioqKioqKioqKi8KCiAgfSBlbHNlIGlmIChwYXRobmFtZS5zdGFydHNXaXRoKCcvcG9zdC9zaG93LycpKSB7CgogICAgLy8gbXV0ZS9wYXVzZSB2aWRlb3MKICAgIGNvbnN0IG9ic2VydmVyID0gcmVnaXN0ZXJfb2JzZXJ2ZXIoKG5vZGUpID0+IHsKICAgICAgcmV0dXJuIChub2RlLmlkID09PSAnaW1hZ2UnKTsKICAgIH0sIChub2RlLCBvYnNlcnZlcikgPT4gewogICAgICBjb25maWd1cmVfdmlkZW8obm9kZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSk7CgogICAgY29uc3QgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UnKTsKICAgIGlmICh2aWRlbyAhPT0gbnVsbCkgewogICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgIGNvbmZpZ3VyZV92aWRlbyh2aWRlbyk7CiAgICB9CgogICAgYWRkX3RodW1ibmFpbF9vYnNlcnZlcigobm9kZSkgPT4gKG5vZGUuaWQgPT09ICdyZWNvbW1lbmRhdGlvbnMnKSk7CgogIC8qKioqKioqKioqKioqLwogIC8qIHVzZXIgcGFnZSAqLwogIC8qKioqKioqKioqKioqLwoKICB9IGVsc2UgaWYgKHBhdGhuYW1lLnN0YXJ0c1dpdGgoJy91c2VyL3Nob3cvJykpIHsKCiAgICBhZGRfdGh1bWJuYWlsX29ic2VydmVyKChub2RlKSA9PiAobm9kZS5pZCA9PT0gJ3JlY29tbWVuZGF0aW9ucycpKTsKCiAgfQoKCgoKICAvKioqKioqKioqKioqKioqKioqLwogIC8qIGNvbnRlbnQtbG9hZGVkICovCiAgLyoqKioqKioqKioqKioqKioqKi8KCiAgYXN5bmMgZnVuY3Rpb24gaW5pdCgpIHsKICAgIC8vIHNpdGVmaXggZm9yIGZsYWdnZWQgcG9zdHMgbm90IGFsd2F5cyBzaG93aW5nIHJlZCBib3JkZXIKICAgIC8vIGlzc3VlOiAiZmxhZ2dlZCIgc3R5bGUgaXMgZGVmaW5lZCBiZWZvcmUgImhhcy1wYXJlbnQiIGFuZCAiaGFzLWNoaWxkcmVuIiBDU1Mgc3R5bGVzLCBzbyB0aGVzZSB0d28gdGFrZSBwcmlvcml0eQogICAgLy8gZml4OiBqdXN0IGFkZCBhbm90aGVyIGNvcHkgb2YgdGhlICJmbGFnZ2VkIiBzdHlsZSBhdCB0aGUgZW5kCiAgICBjb25zdCBjc3MgPSAnaW1nLmhhcy1jaGlsZHJlbiB7cGFkZGluZzowcHg7Ym9yZGVyOjJweCBzb2xpZCAjQTdERjM4O30gaW1nLmhhcy1wYXJlbnQge3BhZGRpbmc6MHB4O2JvcmRlcjoycHggc29saWQgI0NDQ0MwMDt9IGltZy5mbGFnZ2VkIHtwYWRkaW5nOiAwcHg7IGJvcmRlcjogMnB4IHNvbGlkICNGMDA7fScKICAgICAgKyAnIGEudGFnX25vbmV4aXN0ZW50IHsgY29sb3I6ICNFMDA7IH0nOyAvLyBjdXN0b20gc3R5bGUgZm9yIHRhZyBtZW51CiAgICBhZGRfc3R5bGUoY3NzKTsKCiAgICBhZGRfY29uZmlnX2RpYWxvZygpOwogICAgaWYgKElTX01PTktFWSkgR00ucmVnaXN0ZXJNZW51Q29tbWFuZCgnT3BlbiBBZGRvbiBDb25maWcnLCAoKSA9PiBzaG93X2NvbmZpZ19kaWFsb2codHJ1ZSksICdDJyk7CiAgICBhZGRfY29uZmlnX2J1dHRvbigpOwogICAgdXBkYXRlX2NvbmZpZ19kaWFsb2coKTsKCiAgICB1cGRhdGVfaGVhZGVybG9nbygpOwoKICAgIC8vIHByb2Nlc3Mgd2hhdCB0aGUgdGh1bWJuYWlsIG9ic2VydmVyIG1heSBoYXZlIG1pc3NlZAogICAgbW9kaWZ5X3RodW1ibmFpbHMoZG9jdW1lbnQpOwoKICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgLyogbWFpbiBwYWdlIC8gdmlzdWFsbHkgc2ltaWxhciBwYWdlICovCiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgICBpZiAocGF0aG5hbWUgPT09ICcvJyB8fCBwYXRobmFtZSA9PT0gJy9wb3N0L2luZGV4JyB8fCBwYXRobmFtZS5zdGFydHNXaXRoKCcvcG9zdC9zaW1pbGFyJykpIHsKCiAgICAgIGlmIChjb25maWcudGFnX3NlYXJjaF9idXR0b25zKSBhZGRfdGFnX3NlYXJjaF9idXR0b25zKCk7CgogICAgICBhZGRfcG9zdG1vZGVfaG90a2V5cygpOwoKICAgICAgaWYgKGNhbGxlZF9hZGRfbW9kZV9vcHRpb25zKSB7CiAgICAgICAgLy8gYWRkX21vZGVfb3B0aW9ucygpIHdhcyBjYWxsZWQgZWFybHksIGFzIGl0IHNob3VsZAogICAgICAgIFBvc3RNb2RlTWVudV9pbml0X3dvcmthcm91bmQoKTsgLy8gZ3VhcmFudGVlIHRoYXQgJ21vZGUnIHZhcmlhYmxlIGNvcnJlY3RseSBjaGFuZ2VzIHRvIG5ldyBtb2RlcyB3aGVuIGxvYWRpbmcgcGFnZQogICAgICB9IGVsc2UgewogICAgICAgIC8vIGlmIG5vdCwgY2F0Y2ggdXAgb24gaXQgbGF0ZXIKICAgICAgICBjYWxsX3Bvc3Rtb2RlbWVudV9pbml0X3dvcmthcm91bmQgPSB0cnVlOwogICAgICB9CgogICAgICBpZiAoIUlTX0dSRUFTRU1PTktFWTQpIHsKICAgICAgICAvLyB0cnkgdG8gZ3VhcmFudGVlIHNpdGVzY3JpcHQgaGFzIGxvYWRlZAogICAgICAgIHdoaWxlICh1bnNhZmVXaW5kb3cuUG9zdE1vZGVNZW51ID09PSB1bmRlZmluZWQpCiAgICAgICAgICBhd2FpdCBzbGVlcCgxMDApOwoKICAgICAgICBQb3N0TW9kZU1lbnVfY2xpY2tfb3JpZ2luYWwgPSB1bnNhZmVXaW5kb3cuUG9zdE1vZGVNZW51LmNsaWNrOwogICAgICAgIC8vIFRPRE8gd2lsbCBub3Qgd29yayBvbiBHcmVhc2Vtb25rZXkgKG5lZWQgdG8gcmVwbGFjZSBjbGljayBldmVudHMganVzdCBsaWtlIHdpdGggdGhlIG1vZGUgY2hhbmdlIGV2ZW50KQogICAgICAgIHVuc2FmZVdpbmRvdy5Qb3N0TW9kZU1lbnUuY2xpY2sgPSBQb3N0TW9kZU1lbnVfY2xpY2tfb3ZlcnJpZGU7CiAgICAgIH0KCgogICAgLyoqKioqKioqKioqKiovCiAgICAvKiBwb3N0IHBhZ2UgKi8KICAgIC8qKioqKioqKioqKioqLwoKICAgIH0gZWxzZSBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3Bvc3Qvc2hvdy8nKSkgewoKICAgICAgY29uc3QgaGlkZGVuX3Bvc3RfaWRfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlkZGVuX3Bvc3RfaWQnKTsKICAgICAgaWYgKGhpZGRlbl9wb3N0X2lkX2VsICE9PSBudWxsKSB7CiAgICAgICAgcG9zdF9pZCA9IGhpZGRlbl9wb3N0X2lkX2VsLmlubmVyVGV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCB0ZW1wID0gKHBhdGhuYW1lLmVuZHNXaXRoKCcvJykgPyBwYXRobmFtZS5zbGljZSgwLCAtMSkgOiBwYXRobmFtZSk7CiAgICAgICAgcG9zdF9pZCA9IHRlbXAuc3Vic3RyaW5nKHRlbXAubGFzdEluZGV4T2YoJy8nKSArIDEpOwogICAgICB9CgogICAgICBwb3N0X3BhcmVudF9pZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3N0X3BhcmVudF9pZCcpOwogICAgICBpZiAocG9zdF9wYXJlbnRfaWQgIT09IG51bGwpCiAgICAgICAgcGFyZW50X2lkID0gcG9zdF9wYXJlbnRfaWQudmFsdWU7CgogICAgICBpZiAoY29uZmlnLnZpZXdfaGlzdG9yeV9lbmFibGVkKSB7CiAgICAgICAgY29uZmlnW0hJU1RPUllfS0VZXS5hZGQoTnVtYmVyKHBvc3RfaWQpKTsKICAgICAgICBzYXZlX3NldHRpbmcoSElTVE9SWV9LRVksIGNvbmZpZ1tISVNUT1JZX0tFWV0pOyAvLyBzYXZlIGFuZCBicm9hZGNhc3QgdmlldyBoaXN0b3J5CiAgICAgIH0KCiAgICAgIGlmIChjb25maWcudGFnX3NlYXJjaF9idXR0b25zKSBhZGRfdGFnX3NlYXJjaF9idXR0b25zKCk7CiAgICAgIGlmIChjb25maWcudGFnX2NhdGVnb3J5X2NvbGxhcHNlcikgYWRkX3RhZ19jYXRlZ29yeV9jb2xsYXBzZXIoKTsKCiAgICAgIGlmIChjb25maWcuYWRkX2ZpbGV0eXBlX3N0YXQpIGFkZF9maWxldHlwZV9zdGF0KCk7CiAgICAgIGZpeF9waXhpdl9zb3VyY2VfbGluaygpOwoKICAgICAgZmluZF9hY3Rpb25zX2xpc3QoKTsKICAgICAgYWRkX2FkZG9uX2FjdGlvbnMoKTsKCiAgICAgIGlmIChjb25maWcubW92ZV9zdGF0c190b19lZGl0X2Zvcm0pIG1vdmVfc3RhdHNfdG9fZWRpdF9mb3JtKCk7CiAgICAgIGFkZF90YWdfYnV0dG9ucygpOwogICAgICBpZiAoY29uZmlnLnRhZ19tZW51KSBhZGRfdGFnX21lbnUoKTsKICAgICAgdXBkYXRlX3RhZ19lbGVtZW50cygpOyAvLyBpbml0aWFsaXplIHRhZyBtZW51L2J1dHRvbnMKICAgICAgYWRkX3RhZ3NfY2hhbmdlX2xpc3RlbmVyKCk7CiAgICAgIGFkZF90YWdzX3N1Ym1pdF9saXN0ZW5lcigpOwoKICAgICAgaW1hZ2VfZGF0YSA9IHJlYWRfaW1hZ2VfZGF0YSgpOwogICAgICBpZiAoY29uZmlnLnNjYWxlX2ltYWdlKSBzY2FsZV9pbWFnZShjb25maWcuc2NhbGVfbW9kZSwgZmFsc2UpOwogICAgICBpZiAoY29uZmlnLnNjcm9sbF90b19pbWFnZSkgc2Nyb2xsX3RvX2ltYWdlKGNvbmZpZy5zY3JvbGxfdG9faW1hZ2VfY2VudGVyKTsKICAgICAgYWRkX3Jlc2l6ZV9ub3RpY2VfbGlzdGVuZXIoKTsKICAgICAgaWYgKGNvbmZpZy5zYW5rYWt1X2NoYW5uZWxfZGFya19jb21wYXRpYmlsaXR5KSBub3RlX2ZpeCgpOwogICAgICBhZGRfcG9zdHBhZ2VfaG90a2V5cygpOwogICAgICBpZiAoY29uZmlnLnNjYWxlX29uX3Jlc2l6ZSkgYWRkX3NjYWxlX29uX3Jlc2l6ZV9saXN0ZW5lcigpOwoKCgogICAgLyoqKioqKioqKioqKiovCiAgICAvKiB3aWtpIHBhZ2UgKi8KICAgIC8qKioqKioqKioqKioqLwoKICAgIH0gZWxzZSBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3dpa2kvYWRkJykgfHwgcGF0aG5hbWUuc3RhcnRzV2l0aCgnL3dpa2kvZWRpdCcpKSB7CgogICAgICBhZGRfZHRleHRfc3R5bGVfYnV0dG9ucygpOwogICAgICBhZGRfd2lraV90ZW1wbGF0ZSgpOwoKICAgIH0gZWxzZSBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3dpa2kvc2hvdycpKSB7CgogICAgICBhZGRfdGFnX2VkaXRfZ2VhcigpOwoKICAgIH0KCiAgfQoKICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGVkJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnKSB7CiAgICBpbml0KCkuY2F0Y2goKHJlYXNvbikgPT4gewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnYWRkb24gZXJyb3I6IGluaXQoKSBmYWlsZWQsIGNoZWNrIGNvbnNvbGUnLCByZWFzb24pOwogICAgfSk7CiAgfSBlbHNlIHsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0LCBmYWxzZSk7CiAgfQp9KSh0eXBlb2YgdW5zYWZlV2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHVuc2FmZVdpbmRvdyA6IHdpbmRvdyk7Cg=="},{"name":"Instagram - Allow right click on images","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http://instagram.com/*","https://instagram.com/*","http://*.instagram.com/*","https://*.instagram.com/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null},"storage":{"ts":1616865637883,"data":{}},"enabled":true,"position":32,"file_url":"https://greasyfork.org/scripts/424063-instagram-allow-right-click-on-images/code/Instagram%20-%20Allow%20right%20click%20on%20images.user.js","uuid":"d5b50f42-2f3d-43d4-8f05-a8fb1dfceb48","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgSW5zdGFncmFtIC0gQWxsb3cgcmlnaHQgY2xpY2sgb24gaW1hZ2VzCi8vIEBuYW1lc3BhY2UgZ2l0aHViLmNvbS9CcmF3bDM0NQovLyBAdmVyc2lvbiAxLjAuMAovLyBAZGVzY3JpcHRpb24gQWxsb3cgcmlnaHQtY2xpY2tpbmcgb24gaW1hZ2VzIG9uIEluc3RhZ3JhbQovLyBAYXV0aG9yIEJyYXdsIChodHRwczovL2dpdGh1Yi5jb20vQnJhd2wzNDUpCi8vIEBsaWNlbnNlIFVubGljZW5zZQovLyBAZ3JhbnQgR01fYWRkU3R5bGUKLy8gQHJ1bi1hdCBkb2N1bWVudC1zdGFydAovLyBAaW5jbHVkZSBodHRwOi8vaW5zdGFncmFtLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHBzOi8vaW5zdGFncmFtLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHA6Ly8qLmluc3RhZ3JhbS5jb20vKgovLyBAaW5jbHVkZSBodHRwczovLyouaW5zdGFncmFtLmNvbS8qCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewpsZXQgY3NzID0gYAouX292ZzNnLCAuX3NpN2R5LCAuXzlBaEgwIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQpgOwppZiAodHlwZW9mIEdNX2FkZFN0eWxlICE9PSAidW5kZWZpbmVkIikgewogIEdNX2FkZFN0eWxlKGNzcyk7Cn0gZWxzZSB7CiAgbGV0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpOwogIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIikgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdHlsZU5vZGUpOwp9Cn0pKCk7Cg=="}]} \ No newline at end of file diff --git a/Tampermonkey/tampermonkey-backup-chrome-2021-03-28T20-08-34-623Z.zip b/Tampermonkey/tampermonkey-backup-chrome-2021-03-28T20-08-34-623Z.zip new file mode 100644 index 0000000..16b9ff0 Binary files /dev/null and b/Tampermonkey/tampermonkey-backup-chrome-2021-03-28T20-08-34-623Z.zip differ diff --git a/Tampermonkey/tampermonkey-backup-chrome-2022-04-15T20-19-02-284Z.zip b/Tampermonkey/tampermonkey-backup-chrome-2022-04-15T20-19-02-284Z.zip new file mode 100644 index 0000000..9699ea8 Binary files /dev/null and b/Tampermonkey/tampermonkey-backup-chrome-2022-04-15T20-19-02-284Z.zip differ diff --git a/Tampermonkey/tampermonkey-backup-chrome-2022-04-15T20-19-14-243Z.txt b/Tampermonkey/tampermonkey-backup-chrome-2022-04-15T20-19-14-243Z.txt new file mode 100644 index 0000000..725c457 --- /dev/null +++ b/Tampermonkey/tampermonkey-backup-chrome-2022-04-15T20-19-14-243Z.txt @@ -0,0 +1 @@ +{"created_by":"Tampermonkey","version":"1","scripts":[{"name":"Direct Google","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https?\\:\\/\\/(www|news|maps|docs|cse|encrypted|mail)\\.google\\./"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1479475891050,"data":{}},"enabled":true,"position":1,"file_url":"https://rawgit.com/zanetu/direct_google/beta/direct_google.user.js","uuid":"80f863ba-ec02-4309-8fb5-f33390a9763c","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBEaXJlY3QgR29vZ2xlCi8vIEBuYW1lc3BhY2UgICAgaHR0cDovL3VzZXJzY3JpcHRzLm9yZy91c2Vycy85MjE0MwovLyBAdmVyc2lvbiAgICAgIDMuNwovLyBAZGVzY3JpcHRpb24gIFJlbW92ZXMgR29vZ2xlIHJlZGlyZWN0cyBhbmQgZXhwb3NlcyAiQ2FjaGVkIiBsaW5rcy4gCi8vIEBpbmNsdWRlICAgICAgL15odHRwcz9cOlwvXC8od3d3fG5ld3N8bWFwc3xkb2NzfGNzZXxlbmNyeXB0ZWR8bWFpbClcLmdvb2dsZVwuLwovLyBAYXV0aG9yICAgICAgIHphbmV0dQovLyBAbGljZW5zZSAgICAgIEdQTCB2ZXJzaW9uIDIgb3IgYW55IGxhdGVyIHZlcnNpb247IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dAovLyBAcmVxdWlyZSAgICAgIGh0dHA6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuOC4zL2pxdWVyeS5taW4uanMKLy8gQGdyYW50ICAgICAgICBHTV9hZGRTdHlsZQovLyBAcnVuLWF0ICAgICAgIGRvY3VtZW50LWVuZAovLyA9PS9Vc2VyU2NyaXB0PT0KCnZhciBob3N0bmFtZSA9IGxvY2F0aW9uLmhvc3RuYW1lCnZhciBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lCnZhciBocmVmID0gbG9jYXRpb24uaHJlZgoKU3RyaW5nLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHMpIHsKCXJldHVybiAtMSAhPT0gdGhpcy5pbmRleE9mKHMpCn0KClN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCA9IGZ1bmN0aW9uKHMpIHsKCXJldHVybiB0aGlzLnNsaWNlKDAsIHMubGVuZ3RoKSA9PSBzCn0KCmZ1bmN0aW9uIHN0b3BCdWJibGluZyhldmVudCkgewoJZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkKfQoKZnVuY3Rpb24gYmxvY2tMaXN0ZW5lcnMoZWxlbWVudCwgZXZlbnRzKSB7CglpZighKGVsZW1lbnQgaW5zdGFuY2VvZiBFdmVudFRhcmdldCAmJiB0eXBlb2YgZXZlbnRzID09PSAnc3RyaW5nJykpIHsKCQlyZXR1cm4KCX0KCXZhciBldmVudExpc3QgPSBldmVudHMuc3BsaXQoL1xXKy8pIHx8IFtdCglmb3IodmFyIGkgPSAwLCBldmVudDsgZXZlbnQgPSBldmVudExpc3RbaV07IGkrKykgewoJCS8vcmVtb3ZlRXZlbnRMaXN0ZW5lciBpcyBub3QgbmVlZGVkIGFzIGR1cGxpY2F0ZSBsaXN0ZW5lcnMgd291bGQgYmUgZGlzY2FyZGVkCgkJZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBzdG9wQnViYmxpbmcsIHRydWUpCgl9Cn0KCmZ1bmN0aW9uIGhhbmRsZUNoYW5nZSgpIHsKCS8vcmVtb3ZlIHdlYi92aWRlbyBzZWFyY2ggcmVkaXJlY3RzOyBkb2VzIG5vdCByZW1vdmUgcmVkaXJlY3RzIG9mIGFkdmVydGlzZW1lbnQKCSQoJ2Fbb25tb3VzZWRvd25ePSJyZXR1cm4gcnd0KCJdJykucmVtb3ZlQXR0cignb25tb3VzZWRvd24nKQoJLy9yZW1vdmUgd2ViL3ZpZGVvIHNhZmUtYnJvd3NpbmcgcmVkaXJlY3RzCgkkKCdhW2hyZWZePSIvaW50ZXJzdGl0aWFsPyJdJykuZWFjaChmdW5jdGlvbigpIHsKCQl2YXIgbSA9ICQodGhpcykuYXR0cignaHJlZicpLm1hdGNoKC8oPzpcP3xcJil1cmxcPShbXlwmXSspL2kpCgkJaWYobSAmJiBtWzFdKSB7CgkJCXRoaXMuaHJlZiA9IGRlY29kZVVSSUNvbXBvbmVudChtWzFdKQoJCQkvL3dhcm5pbmcgcHJlZml4CgkJCWlmKCEkKHRoaXMpLmluZGV4KCkpIHsKCQkJCSQoJzxzcGFuIHRpdGxlPSJVbnNhZmUiPiYjOTg4ODwvc3Bhbj4nKQoJCQkJLy9uZXdzIHdpdGggcGljdHVyZXMKCQkJCS5jc3MoJ2Zsb2F0JywgJ2xlZnQnKQoJCQkJLmluc2VydEJlZm9yZSh0aGlzKQoJCQl9CgkJfQoJfSkKCS8vcmVtb3ZlIGN1c3RvbSBzZWFyY2ggcmVkaXJlY3RzCgkkKCcuZ3NjLXJlc3VsdHMgYVtocmVmXVtkYXRhLWN0dXJsXScpLmVhY2goZnVuY3Rpb24oKSB7CgkJYmxvY2tMaXN0ZW5lcnModGhpcywgJ21vdXNlZG93bicpCgl9KQoJLy9yZW1vdmUgaW1hZ2Ugc2VhcmNoIHJlZGlyZWN0cwoJJCgnYScpLmZpbHRlcignW2NsYXNzXj0iaXJjXyJdLCBbY2xhc3MqPSIgaXJjXyJdLCBbaWRePSJpcmNfIl0nKS5lYWNoKGZ1bmN0aW9uKCkgewoJCWJsb2NrTGlzdGVuZXJzKHRoaXMsICdtb3VzZWRvd24nKQoJfSkKCS8vcmVtb3ZlIHNvbWUgbmV3cyBzZWFyY2ggcmVkaXJlY3RzOyBkb2VzIG5vdCByZW1vdmUgcmVkaXJlY3RzIG9mIG5vbi1uZXdzCglpZihocmVmLmNvbnRhaW5zKCd0Ym09bndzJykgfHwgaG9zdG5hbWUuc3RhcnRzV2l0aCgnbmV3cy5nb29nbGUuJykpIHsKCQkkKCdhW2hyZWZePSIuL2FydGljbGVzLyJdJykuYXR0cignaHJlZicsIGZ1bmN0aW9uKGksIHYpIHsKCQkJdHJ5IHsKCQkJCXZhciBtID0gYXRvYih2LnNwbGl0KC9bXC9cP1xfXC1dLylbMl0pLm1hdGNoKC9odHRwW1x4MDAtXHg3Rl0rLykKCQkJfQoJCQljYXRjaChlKSB7CgkJCQkvL2F0b2IgZmFpbHVyZTogIlRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuIgoJCQkJcmV0dXJuIHYKCQkJfQoJCQlyZXR1cm4gbSAmJiBtWzBdIHx8IHYKCQl9KQoJfQoJLy9yZW1vdmUgbWFwIHNlYXJjaCByZWRpcmVjdHM7IGRvZXMgbm90IHJlbW92ZSByZWRpcmVjdHMgb2YgYWR2ZXJ0aXNlbWVudAoJZWxzZSBpZihwYXRobmFtZS5zdGFydHNXaXRoKCcvbWFwcy8nKSB8fCAnL21hcHMnID09IHBhdGhuYW1lKSB7CgkJJCgnYVtocmVmXj0iaHR0cCJdJykuZWFjaChmdW5jdGlvbigpIHsKCQkJYmxvY2tMaXN0ZW5lcnModGhpcywgJ2NsaWNrIGNvbnRleHRtZW51JykKCQkJLy9sZWdhY3kKCQkJaWYodGhpcy5ocmVmLmNvbnRhaW5zKCd1cmw/JykpIHsKCQkJCXZhciBtID0gdGhpcy5ocmVmLm1hdGNoKC8oPzpcJnxcPylxXD0oaHR0cC4qPykoXCZ8JCkvaSkKCQkJCWlmKG0gJiYgbVsxXSkgewoJCQkJCXRoaXMuaHJlZiA9IGRlY29kZVVSSUNvbXBvbmVudChtWzFdKQoJCQkJfQoJCQl9CgkJfSkKCX0KCS8vcmVtb3ZlIG1haWwvZ21haWwgcmVkaXJlY3RzCgllbHNlIGlmKGhvc3RuYW1lLnN0YXJ0c1dpdGgoJ21haWwuJykpIHsKCQkkKCdhW2RhdGEtc2FmZXJlZGlyZWN0dXJsXScpLnJlbW92ZUF0dHIoJ2RhdGEtc2FmZXJlZGlyZWN0dXJsJykKCX0KCS8vcmVtb3ZlIGxlZ2FjeSBzZWFyY2ggcmVkaXJlY3RzIGFuZCBkb2NzIHJlZGlyZWN0cwoJJCgnYVtocmVmKj0iL3VybD8iXScpLmVhY2goZnVuY3Rpb24oKSB7CgkJdmFyIG0gPSB0aGlzLmhyZWYubWF0Y2goL1wvdXJsXD8oPzp1cmx8cSlcPShodHRwLio/KShcJnwkKS9pKQoJCWlmKG0gJiYgbVsxXSkgewoJCQl0aGlzLmhyZWYgPSBkZWNvZGVVUklDb21wb25lbnQobVsxXSkKCQl9Cgl9KQoJLy9leHBvc2UgY2FjaGVkIGxpbmtzCgkkKCdkaXZbcm9sZT0ibWVudSJdIG9sIGxpJykuZmluZCgnYVtocmVmXj0iaHR0cDovL3dlYmNhY2hlLmdvb2dsZXVzZXJjb250ZW50LiJdJyArIAoJCScsIGFbaHJlZl49Imh0dHBzOi8vd2ViY2FjaGUuZ29vZ2xldXNlcmNvbnRlbnQuIl0nKS5lYWNoKAoJCWZ1bmN0aW9uKCkgewoJCQl0aGlzLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJwoJCQl0aGlzLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzAuNWVtJwoJCQkkKHRoaXMpLmNsb3Nlc3QoJ2Rpdi5hY3Rpb24tbWVudS5hYl9jdGwsIGRpdi5fbkJiJykKCQkJLmFmdGVyKCQodGhpcykpCgkJCS8vbWF0ZXJpYWwgZGVzaWduCgkJCS5wYXJlbnQoKS5jc3MoJ3doaXRlLXNwYWNlJywgJ25vd3JhcCcpCgkJfQoJKQp9Cgp2YXIgbW8gPSB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciB8fCB3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcgppZihtbykgewoJdmFyIG9ic2VydmVyID0gbmV3IG1vKGhhbmRsZUNoYW5nZSkKCW9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7Y2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSkKfQovL2ZvciBjaHJvbWUgdjE4LSwgZmlyZWZveCB2MTQtLCBpbnRlcm5ldCBleHBsb3JlciB2MTEtLCBvcGVyYSB2MTUtIGFuZCBzYWZhcmkgdjYtCmVsc2UgewoJc2V0SW50ZXJ2YWwoaGFuZGxlQ2hhbmdlLCA1MDApCn0KaGFuZGxlQ2hhbmdlKCk=","requires":[{"meta":{"name":"jquery.min.js","url":"http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js","ts":1649334315592,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2MS44LjMganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwooZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBfKGUpe3ZhciB0PU1bZV09e307cmV0dXJuIHYuZWFjaChlLnNwbGl0KHkpLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9ZnVuY3Rpb24gSChlLG4scil7aWYocj09PXQmJmUubm9kZVR5cGU9PT0xKXt2YXIgaT0iZGF0YS0iK24ucmVwbGFjZShQLCItJDEiKS50b0xvd2VyQ2FzZSgpO3I9ZS5nZXRBdHRyaWJ1dGUoaSk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt0cnl7cj1yPT09InRydWUiPyEwOnI9PT0iZmFsc2UiPyExOnI9PT0ibnVsbCI/bnVsbDorcisiIj09PXI/K3I6RC50ZXN0KHIpP3YucGFyc2VKU09OKHIpOnJ9Y2F0Y2gocyl7fXYuZGF0YShlLG4scil9ZWxzZSByPXR9cmV0dXJuIHJ9ZnVuY3Rpb24gQihlKXt2YXIgdDtmb3IodCBpbiBlKXtpZih0PT09ImRhdGEiJiZ2LmlzRW1wdHlPYmplY3QoZVt0XSkpY29udGludWU7aWYodCE9PSJ0b0pTT04iKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9ZnVuY3Rpb24gdHQoKXtyZXR1cm4hMH1mdW5jdGlvbiB1dChlKXtyZXR1cm4hZXx8IWUucGFyZW50Tm9kZXx8ZS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gYXQoZSx0KXtkbyBlPWVbdF07d2hpbGUoZSYmZS5ub2RlVHlwZSE9PTEpO3JldHVybiBlfWZ1bmN0aW9uIGZ0KGUsdCxuKXt0PXR8fDA7aWYodi5pc0Z1bmN0aW9uKHQpKXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3ZhciBpPSEhdC5jYWxsKGUscixlKTtyZXR1cm4gaT09PW59KTtpZih0Lm5vZGVUeXBlKXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiBlPT09dD09PW59KTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPXYuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVUeXBlPT09MX0pO2lmKGl0LnRlc3QodCkpcmV0dXJuIHYuZmlsdGVyKHQsciwhbik7dD12LmZpbHRlcih0LHIpfXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiB2LmluQXJyYXkoZSx0KT49MD09PW59KX1mdW5jdGlvbiBsdChlKXt2YXIgdD1jdC5zcGxpdCgifCIpLG49ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYobi5jcmVhdGVFbGVtZW50KXdoaWxlKHQubGVuZ3RoKW4uY3JlYXRlRWxlbWVudCh0LnBvcCgpKTtyZXR1cm4gbn1mdW5jdGlvbiBMdChlLHQpe3JldHVybiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpKX1mdW5jdGlvbiBBdChlLHQpe2lmKHQubm9kZVR5cGUhPT0xfHwhdi5oYXNEYXRhKGUpKXJldHVybjt2YXIgbixyLGkscz12Ll9kYXRhKGUpLG89di5fZGF0YSh0LHMpLHU9cy5ldmVudHM7aWYodSl7ZGVsZXRlIG8uaGFuZGxlLG8uZXZlbnRzPXt9O2ZvcihuIGluIHUpZm9yKHI9MCxpPXVbbl0ubGVuZ3RoO3I8aTtyKyspdi5ldmVudC5hZGQodCxuLHVbbl1bcl0pfW8uZGF0YSYmKG8uZGF0YT12LmV4dGVuZCh7fSxvLmRhdGEpKX1mdW5jdGlvbiBPdChlLHQpe3ZhciBuO2lmKHQubm9kZVR5cGUhPT0xKXJldHVybjt0LmNsZWFyQXR0cmlidXRlcyYmdC5jbGVhckF0dHJpYnV0ZXMoKSx0Lm1lcmdlQXR0cmlidXRlcyYmdC5tZXJnZUF0dHJpYnV0ZXMoZSksbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj09PSJvYmplY3QiPyh0LnBhcmVudE5vZGUmJih0Lm91dGVySFRNTD1lLm91dGVySFRNTCksdi5zdXBwb3J0Lmh0bWw1Q2xvbmUmJmUuaW5uZXJIVE1MJiYhdi50cmltKHQuaW5uZXJIVE1MKSYmKHQuaW5uZXJIVE1MPWUuaW5uZXJIVE1MKSk6bj09PSJpbnB1dCImJkV0LnRlc3QoZS50eXBlKT8odC5kZWZhdWx0Q2hlY2tlZD10LmNoZWNrZWQ9ZS5jaGVja2VkLHQudmFsdWUhPT1lLnZhbHVlJiYodC52YWx1ZT1lLnZhbHVlKSk6bj09PSJvcHRpb24iP3Quc2VsZWN0ZWQ9ZS5kZWZhdWx0U2VsZWN0ZWQ6bj09PSJpbnB1dCJ8fG49PT0idGV4dGFyZWEiP3QuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlOm49PT0ic2NyaXB0IiYmdC50ZXh0IT09ZS50ZXh0JiYodC50ZXh0PWUudGV4dCksdC5yZW1vdmVBdHRyaWJ1dGUodi5leHBhbmRvKX1mdW5jdGlvbiBNdChlKXtyZXR1cm4gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTp0eXBlb2YgZS5xdWVyeVNlbGVjdG9yQWxsIT0idW5kZWZpbmVkIj9lLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTpbXX1mdW5jdGlvbiBfdChlKXtFdC50ZXN0KGUudHlwZSkmJihlLmRlZmF1bHRDaGVja2VkPWUuY2hlY2tlZCl9ZnVuY3Rpb24gUXQoZSx0KXtpZih0IGluIGUpcmV0dXJuIHQ7dmFyIG49dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpLHI9dCxpPUp0Lmxlbmd0aDt3aGlsZShpLS0pe3Q9SnRbaV0rbjtpZih0IGluIGUpcmV0dXJuIHR9cmV0dXJuIHJ9ZnVuY3Rpb24gR3QoZSx0KXtyZXR1cm4gZT10fHxlLHYuY3NzKGUsImRpc3BsYXkiKT09PSJub25lInx8IXYuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIFl0KGUsdCl7dmFyIG4scixpPVtdLHM9MCxvPWUubGVuZ3RoO2Zvcig7czxvO3MrKyl7bj1lW3NdO2lmKCFuLnN0eWxlKWNvbnRpbnVlO2lbc109di5fZGF0YShuLCJvbGRkaXNwbGF5IiksdD8oIWlbc10mJm4uc3R5bGUuZGlzcGxheT09PSJub25lIiYmKG4uc3R5bGUuZGlzcGxheT0iIiksbi5zdHlsZS5kaXNwbGF5PT09IiImJkd0KG4pJiYoaVtzXT12Ll9kYXRhKG4sIm9sZGRpc3BsYXkiLG5uKG4ubm9kZU5hbWUpKSkpOihyPUR0KG4sImRpc3BsYXkiKSwhaVtzXSYmciE9PSJub25lIiYmdi5fZGF0YShuLCJvbGRkaXNwbGF5IixyKSl9Zm9yKHM9MDtzPG87cysrKXtuPWVbc107aWYoIW4uc3R5bGUpY29udGludWU7aWYoIXR8fG4uc3R5bGUuZGlzcGxheT09PSJub25lInx8bi5zdHlsZS5kaXNwbGF5PT09IiIpbi5zdHlsZS5kaXNwbGF5PXQ/aVtzXXx8IiI6Im5vbmUifXJldHVybiBlfWZ1bmN0aW9uIFp0KGUsdCxuKXt2YXIgcj1SdC5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsxXS0obnx8MCkpKyhyWzJdfHwicHgiKTp0fWZ1bmN0aW9uIGVuKGUsdCxuLHIpe3ZhciBpPW49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpPzQ6dD09PSJ3aWR0aCI/MTowLHM9MDtmb3IoO2k8NDtpKz0yKW49PT0ibWFyZ2luIiYmKHMrPXYuY3NzKGUsbiskdFtpXSwhMCkpLHI/KG49PT0iY29udGVudCImJihzLT1wYXJzZUZsb2F0KER0KGUsInBhZGRpbmciKyR0W2ldKSl8fDApLG4hPT0ibWFyZ2luIiYmKHMtPXBhcnNlRmxvYXQoRHQoZSwiYm9yZGVyIiskdFtpXSsiV2lkdGgiKSl8fDApKToocys9cGFyc2VGbG9hdChEdChlLCJwYWRkaW5nIiskdFtpXSkpfHwwLG4hPT0icGFkZGluZyImJihzKz1wYXJzZUZsb2F0KER0KGUsImJvcmRlciIrJHRbaV0rIldpZHRoIikpfHwwKSk7cmV0dXJuIHN9ZnVuY3Rpb24gdG4oZSx0LG4pe3ZhciByPXQ9PT0id2lkdGgiP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsaT0hMCxzPXYuc3VwcG9ydC5ib3hTaXppbmcmJnYuY3NzKGUsImJveFNpemluZyIpPT09ImJvcmRlci1ib3giO2lmKHI8PTB8fHI9PW51bGwpe3I9RHQoZSx0KTtpZihyPDB8fHI9PW51bGwpcj1lLnN0eWxlW3RdO2lmKFV0LnRlc3QocikpcmV0dXJuIHI7aT1zJiYodi5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlfHxyPT09ZS5zdHlsZVt0XSkscj1wYXJzZUZsb2F0KHIpfHwwfXJldHVybiByK2VuKGUsdCxufHwocz8iYm9yZGVyIjoiY29udGVudCIpLGkpKyJweCJ9ZnVuY3Rpb24gbm4oZSl7aWYoV3RbZV0pcmV0dXJuIFd0W2VdO3ZhciB0PXYoIjwiK2UrIj4iKS5hcHBlbmRUbyhpLmJvZHkpLG49dC5jc3MoImRpc3BsYXkiKTt0LnJlbW92ZSgpO2lmKG49PT0ibm9uZSJ8fG49PT0iIil7UHQ9aS5ib2R5LmFwcGVuZENoaWxkKFB0fHx2LmV4dGVuZChpLmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLHtmcmFtZUJvcmRlcjowLHdpZHRoOjAsaGVpZ2h0OjB9KSk7aWYoIUh0fHwhUHQuY3JlYXRlRWxlbWVudClIdD0oUHQuY29udGVudFdpbmRvd3x8UHQuY29udGVudERvY3VtZW50KS5kb2N1bWVudCxIdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksSHQuY2xvc2UoKTt0PUh0LmJvZHkuYXBwZW5kQ2hpbGQoSHQuY3JlYXRlRWxlbWVudChlKSksbj1EdCh0LCJkaXNwbGF5IiksaS5ib2R5LnJlbW92ZUNoaWxkKFB0KX1yZXR1cm4gV3RbZV09bixufWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3ZhciBpO2lmKHYuaXNBcnJheSh0KSl2LmVhY2godCxmdW5jdGlvbih0LGkpe258fHNuLnRlc3QoZSk/cihlLGkpOmZuKGUrIlsiKyh0eXBlb2YgaT09Im9iamVjdCI/dDoiIikrIl0iLGksbixyKX0pO2Vsc2UgaWYoIW4mJnYudHlwZSh0KT09PSJvYmplY3QiKWZvcihpIGluIHQpZm4oZSsiWyIraSsiXSIsdFtpXSxuLHIpO2Vsc2UgcihlLHQpfWZ1bmN0aW9uIENuKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3R5cGVvZiB0IT0ic3RyaW5nIiYmKG49dCx0PSIqIik7dmFyIHIsaSxzLG89dC50b0xvd2VyQ2FzZSgpLnNwbGl0KHkpLHU9MCxhPW8ubGVuZ3RoO2lmKHYuaXNGdW5jdGlvbihuKSlmb3IoO3U8YTt1Kyspcj1vW3VdLHM9L15cKy8udGVzdChyKSxzJiYocj1yLnN1YnN0cigxKXx8IioiKSxpPWVbcl09ZVtyXXx8W10saVtzPyJ1bnNoaWZ0IjoicHVzaCJdKG4pfX1mdW5jdGlvbiBrbihlLG4scixpLHMsbyl7cz1zfHxuLmRhdGFUeXBlc1swXSxvPW98fHt9LG9bc109ITA7dmFyIHUsYT1lW3NdLGY9MCxsPWE/YS5sZW5ndGg6MCxjPWU9PT1Tbjtmb3IoO2Y8bCYmKGN8fCF1KTtmKyspdT1hW2ZdKG4scixpKSx0eXBlb2YgdT09InN0cmluZyImJighY3x8b1t1XT91PXQ6KG4uZGF0YVR5cGVzLnVuc2hpZnQodSksdT1rbihlLG4scixpLHUsbykpKTtyZXR1cm4oY3x8IXUpJiYhb1siKiJdJiYodT1rbihlLG4scixpLCIqIixvKSksdX1mdW5jdGlvbiBMbihlLG4pe3ZhciByLGkscz12LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKHIgaW4gbiluW3JdIT09dCYmKChzW3JdP2U6aXx8KGk9e30pKVtyXT1uW3JdKTtpJiZ2LmV4dGVuZCghMCxlLGkpfWZ1bmN0aW9uIEFuKGUsbixyKXt2YXIgaSxzLG8sdSxhPWUuY29udGVudHMsZj1lLmRhdGFUeXBlcyxsPWUucmVzcG9uc2VGaWVsZHM7Zm9yKHMgaW4gbClzIGluIHImJihuW2xbc11dPXJbc10pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGk9PT10JiYoaT1lLm1pbWVUeXBlfHxuLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaSlmb3IocyBpbiBhKWlmKGFbc10mJmFbc10udGVzdChpKSl7Zi51bnNoaWZ0KHMpO2JyZWFrfWlmKGZbMF1pbiByKW89ZlswXTtlbHNle2ZvcihzIGluIHIpe2lmKCFmWzBdfHxlLmNvbnZlcnRlcnNbcysiICIrZlswXV0pe289czticmVha311fHwodT1zKX1vPW98fHV9aWYobylyZXR1cm4gbyE9PWZbMF0mJmYudW5zaGlmdChvKSxyW29dfWZ1bmN0aW9uIE9uKGUsdCl7dmFyIG4scixpLHMsbz1lLmRhdGFUeXBlcy5zbGljZSgpLHU9b1swXSxhPXt9LGY9MDtlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKTtpZihvWzFdKWZvcihuIGluIGUuY29udmVydGVycylhW24udG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW25dO2Zvcig7aT1vWysrZl07KWlmKGkhPT0iKiIpe2lmKHUhPT0iKiImJnUhPT1pKXtuPWFbdSsiICIraV18fGFbIiogIitpXTtpZighbilmb3IociBpbiBhKXtzPXIuc3BsaXQoIiAiKTtpZihzWzFdPT09aSl7bj1hW3UrIiAiK3NbMF1dfHxhWyIqICIrc1swXV07aWYobil7bj09PSEwP249YVtyXTphW3JdIT09ITAmJihpPXNbMF0sby5zcGxpY2UoZi0tLDAsaSkpO2JyZWFrfX19aWYobiE9PSEwKWlmKG4mJmVbInRocm93cyJdKXQ9bih0KTtlbHNlIHRyeXt0PW4odCl9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6bj9sOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitpfX19dT1pfXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX1mdW5jdGlvbiBGbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3R9Y2F0Y2godCl7fX1mdW5jdGlvbiBJbigpe3RyeXtyZXR1cm4gbmV3IGUuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaCh0KXt9fWZ1bmN0aW9uICRuKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtxbj10fSwwKSxxbj12Lm5vdygpfWZ1bmN0aW9uIEpuKGUsdCl7di5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj0oVm5bdF18fFtdKS5jb25jYXQoVm5bIioiXSksaT0wLHM9ci5sZW5ndGg7Zm9yKDtpPHM7aSsrKWlmKHJbaV0uY2FsbChlLHQsbikpcmV0dXJufSl9ZnVuY3Rpb24gS24oZSx0LG4pe3ZhciByLGk9MCxzPTAsbz1Ybi5sZW5ndGgsdT12LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGEuZWxlbX0pLGE9ZnVuY3Rpb24oKXt2YXIgdD1xbnx8JG4oKSxuPU1hdGgubWF4KDAsZi5zdGFydFRpbWUrZi5kdXJhdGlvbi10KSxyPW4vZi5kdXJhdGlvbnx8MCxpPTEtcixzPTAsbz1mLnR3ZWVucy5sZW5ndGg7Zm9yKDtzPG87cysrKWYudHdlZW5zW3NdLnJ1bihpKTtyZXR1cm4gdS5ub3RpZnlXaXRoKGUsW2YsaSxuXSksaTwxJiZvP246KHUucmVzb2x2ZVdpdGgoZSxbZl0pLCExKX0sZj11LnByb21pc2Uoe2VsZW06ZSxwcm9wczp2LmV4dGVuZCh7fSx0KSxvcHRzOnYuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6cW58fCRuKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXYuVHdlZW4oZSxmLm9wdHMsdCxuLGYub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxmLm9wdHMuZWFzaW5nKTtyZXR1cm4gZi50d2VlbnMucHVzaChpKSxpfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2YudHdlZW5zLmxlbmd0aDowO2Zvcig7bjxyO24rKylmLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/dS5yZXNvbHZlV2l0aChlLFtmLHRdKTp1LnJlamVjdFdpdGgoZSxbZix0XSksdGhpc319KSxsPWYucHJvcHM7UW4obCxmLm9wdHMuc3BlY2lhbEVhc2luZyk7Zm9yKDtpPG87aSsrKXtyPVhuW2ldLmNhbGwoZixlLGwsZi5vcHRzKTtpZihyKXJldHVybiByfXJldHVybiBKbihmLGwpLHYuaXNGdW5jdGlvbihmLm9wdHMuc3RhcnQpJiZmLm9wdHMuc3RhcnQuY2FsbChlLGYpLHYuZngudGltZXIodi5leHRlbmQoYSx7YW5pbTpmLHF1ZXVlOmYub3B0cy5xdWV1ZSxlbGVtOmV9KSksZi5wcm9ncmVzcyhmLm9wdHMucHJvZ3Jlc3MpLmRvbmUoZi5vcHRzLmRvbmUsZi5vcHRzLmNvbXBsZXRlKS5mYWlsKGYub3B0cy5mYWlsKS5hbHdheXMoZi5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gUW4oZSx0KXt2YXIgbixyLGkscyxvO2ZvcihuIGluIGUpe3I9di5jYW1lbENhc2UobiksaT10W3JdLHM9ZVtuXSx2LmlzQXJyYXkocykmJihpPXNbMV0scz1lW25dPXNbMF0pLG4hPT1yJiYoZVtyXT1zLGRlbGV0ZSBlW25dKSxvPXYuY3NzSG9va3Nbcl07aWYobyYmImV4cGFuZCJpbiBvKXtzPW8uZXhwYW5kKHMpLGRlbGV0ZSBlW3JdO2ZvcihuIGluIHMpbiBpbiBlfHwoZVtuXT1zW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9fWZ1bmN0aW9uIEduKGUsdCxuKXt2YXIgcixpLHMsbyx1LGEsZixsLGMsaD10aGlzLHA9ZS5zdHlsZSxkPXt9LG09W10sZz1lLm5vZGVUeXBlJiZHdChlKTtuLnF1ZXVlfHwobD12Ll9xdWV1ZUhvb2tzKGUsImZ4IiksbC51bnF1ZXVlZD09bnVsbCYmKGwudW5xdWV1ZWQ9MCxjPWwuZW1wdHkuZmlyZSxsLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtsLnVucXVldWVkfHxjKCl9KSxsLnVucXVldWVkKyssaC5hbHdheXMoZnVuY3Rpb24oKXtoLmFsd2F5cyhmdW5jdGlvbigpe2wudW5xdWV1ZWQtLSx2LnF1ZXVlKGUsImZ4IikubGVuZ3RofHxsLmVtcHR5LmZpcmUoKX0pfSkpLGUubm9kZVR5cGU9PT0xJiYoImhlaWdodCJpbiB0fHwid2lkdGgiaW4gdCkmJihuLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dYLHAub3ZlcmZsb3dZXSx2LmNzcyhlLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmdi5jc3MoZSwiZmxvYXQiKT09PSJub25lIiYmKCF2LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8bm4oZS5ub2RlTmFtZSk9PT0iaW5saW5lIj9wLmRpc3BsYXk9ImlubGluZS1ibG9jayI6cC56b29tPTEpKSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIix2LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8aC5kb25lKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKTtmb3IociBpbiB0KXtzPXRbcl07aWYoVW4uZXhlYyhzKSl7ZGVsZXRlIHRbcl0sYT1hfHxzPT09InRvZ2dsZSI7aWYocz09PShnPyJoaWRlIjoic2hvdyIpKWNvbnRpbnVlO20ucHVzaChyKX19bz1tLmxlbmd0aDtpZihvKXt1PXYuX2RhdGEoZSwiZnhzaG93Iil8fHYuX2RhdGEoZSwiZnhzaG93Iix7fSksImhpZGRlbiJpbiB1JiYoZz11LmhpZGRlbiksYSYmKHUuaGlkZGVuPSFnKSxnP3YoZSkuc2hvdygpOmguZG9uZShmdW5jdGlvbigpe3YoZSkuaGlkZSgpfSksaC5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7di5yZW1vdmVEYXRhKGUsImZ4c2hvdyIsITApO2Zvcih0IGluIGQpdi5zdHlsZShlLHQsZFt0XSl9KTtmb3Iocj0wO3I8bztyKyspaT1tW3JdLGY9aC5jcmVhdGVUd2VlbihpLGc/dVtpXTowKSxkW2ldPXVbaV18fHYuc3R5bGUoZSxpKSxpIGluIHV8fCh1W2ldPWYuc3RhcnQsZyYmKGYuZW5kPWYuc3RhcnQsZi5zdGFydD1pPT09IndpZHRoInx8aT09PSJoZWlnaHQiPzE6MCkpfX1mdW5jdGlvbiBZbihlLHQsbixyLGkpe3JldHVybiBuZXcgWW4ucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1mdW5jdGlvbiBabihlLHQpe3ZhciBuLHI9e2hlaWdodDplfSxpPTA7dD10PzE6MDtmb3IoO2k8NDtpKz0yLXQpbj0kdFtpXSxyWyJtYXJnaW4iK25dPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfWZ1bmN0aW9uIHRyKGUpe3JldHVybiB2LmlzV2luZG93KGUpP2U6ZS5ub2RlVHlwZT09PTk/ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3c6ITF9dmFyIG4scixpPWUuZG9jdW1lbnQscz1lLmxvY2F0aW9uLG89ZS5uYXZpZ2F0b3IsdT1lLmpRdWVyeSxhPWUuJCxmPUFycmF5LnByb3RvdHlwZS5wdXNoLGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLGM9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsaD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxkPVN0cmluZy5wcm90b3R5cGUudHJpbSx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB2LmZuLmluaXQoZSx0LG4pfSxtPS9bXC0rXT8oPzpcZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wpLy5zb3VyY2UsZz0vXFMvLHk9L1xzKy8sYj0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csdz0vXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMoW1x3XC1dKikkKS8sRT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLFM9L15bXF0sOnt9XHNdKiQvLHg9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxUPS9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkvZyxOPS8iW14iXFxcclxuXSoifHRydWV8ZmFsc2V8bnVsbHwtPyg/OlxkXGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS9nLEM9L14tbXMtLyxrPS8tKFtcZGEtel0pL2dpLEw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4odCsiIikudG9VcHBlckNhc2UoKX0sQT1mdW5jdGlvbigpe2kuYWRkRXZlbnRMaXN0ZW5lcj8oaS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixBLCExKSx2LnJlYWR5KCkpOmkucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJihpLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEEpLHYucmVhZHkoKSl9LE89e307di5mbj12LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dixpbml0OmZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLHUsYTtpZighZSlyZXR1cm4gdGhpcztpZihlLm5vZGVUeXBlKXJldHVybiB0aGlzLmNvbnRleHQ9dGhpc1swXT1lLHRoaXMubGVuZ3RoPTEsdGhpcztpZih0eXBlb2YgZT09InN0cmluZyIpe2UuY2hhckF0KDApPT09IjwiJiZlLmNoYXJBdChlLmxlbmd0aC0xKT09PSI+IiYmZS5sZW5ndGg+PTM/cz1bbnVsbCxlLG51bGxdOnM9dy5leGVjKGUpO2lmKHMmJihzWzFdfHwhbikpe2lmKHNbMV0pcmV0dXJuIG49biBpbnN0YW5jZW9mIHY/blswXTpuLGE9biYmbi5ub2RlVHlwZT9uLm93bmVyRG9jdW1lbnR8fG46aSxlPXYucGFyc2VIVE1MKHNbMV0sYSwhMCksRS50ZXN0KHNbMV0pJiZ2LmlzUGxhaW5PYmplY3QobikmJnRoaXMuYXR0ci5jYWxsKGUsbiwhMCksdi5tZXJnZSh0aGlzLGUpO289aS5nZXRFbGVtZW50QnlJZChzWzJdKTtpZihvJiZvLnBhcmVudE5vZGUpe2lmKG8uaWQhPT1zWzJdKXJldHVybiByLmZpbmQoZSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPW99cmV0dXJuIHRoaXMuY29udGV4dD1pLHRoaXMuc2VsZWN0b3I9ZSx0aGlzfXJldHVybiFufHxuLmpxdWVyeT8obnx8cikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKG4pLmZpbmQoZSl9cmV0dXJuIHYuaXNGdW5jdGlvbihlKT9yLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx2Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjguMyIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBsLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD90aGlzLnRvQXJyYXkoKTplPDA/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXYubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGUpO3JldHVybiByLnByZXZPYmplY3Q9dGhpcyxyLmNvbnRleHQ9dGhpcy5jb250ZXh0LHQ9PT0iZmluZCI/ci5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrbjp0JiYoci5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIit0KyIoIituKyIpIikscn0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB2LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gdi5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxlcTpmdW5jdGlvbihlKXtyZXR1cm4gZT0rZSxlPT09LTE/dGhpcy5zbGljZShlKTp0aGlzLnNsaWNlKGUsZSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobC5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixsLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSx2LmZuLmluaXQucHJvdG90eXBlPXYuZm4sdi5leHRlbmQ9di5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSxuLHIsaSxzLG8sdT1hcmd1bWVudHNbMF18fHt9LGE9MSxmPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgdT09ImJvb2xlYW4iJiYobD11LHU9YXJndW1lbnRzWzFdfHx7fSxhPTIpLHR5cGVvZiB1IT0ib2JqZWN0IiYmIXYuaXNGdW5jdGlvbih1KSYmKHU9e30pLGY9PT1hJiYodT10aGlzLC0tYSk7Zm9yKDthPGY7YSsrKWlmKChlPWFyZ3VtZW50c1thXSkhPW51bGwpZm9yKG4gaW4gZSl7cj11W25dLGk9ZVtuXTtpZih1PT09aSljb250aW51ZTtsJiZpJiYodi5pc1BsYWluT2JqZWN0KGkpfHwocz12LmlzQXJyYXkoaSkpKT8ocz8ocz0hMSxvPXImJnYuaXNBcnJheShyKT9yOltdKTpvPXImJnYuaXNQbGFpbk9iamVjdChyKT9yOnt9LHVbbl09di5leHRlbmQobCxvLGkpKTppIT09dCYmKHVbbl09aSl9cmV0dXJuIHV9LHYuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT12JiYoZS4kPWEpLHQmJmUualF1ZXJ5PT09diYmKGUualF1ZXJ5PXUpLHZ9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGUpe2U/di5yZWFkeVdhaXQrKzp2LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oZSl7aWYoZT09PSEwPy0tdi5yZWFkeVdhaXQ6di5pc1JlYWR5KXJldHVybjtpZighaS5ib2R5KXJldHVybiBzZXRUaW1lb3V0KHYucmVhZHksMSk7di5pc1JlYWR5PSEwO2lmKGUhPT0hMCYmLS12LnJlYWR5V2FpdD4wKXJldHVybjtyLnJlc29sdmVXaXRoKGksW3ZdKSx2LmZuLnRyaWdnZXImJnYoaSkudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHYudHlwZShlKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHYudHlwZShlKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZlPT1lLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/U3RyaW5nKGUpOk9baC5jYWxsKGUpXXx8Im9iamVjdCJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7aWYoIWV8fHYudHlwZShlKSE9PSJvYmplY3QifHxlLm5vZGVUeXBlfHx2LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYhcC5jYWxsKGUsImNvbnN0cnVjdG9yIikmJiFwLmNhbGwoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaChuKXtyZXR1cm4hMX12YXIgcjtmb3IociBpbiBlKTtyZXR1cm4gcj09PXR8fHAuY2FsbChlLHIpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0scGFyc2VIVE1MOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4hZXx8dHlwZW9mIGUhPSJzdHJpbmciP251bGw6KHR5cGVvZiB0PT0iYm9vbGVhbiImJihuPXQsdD0wKSx0PXR8fGksKHI9RS5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KHJbMV0pXToocj12LmJ1aWxkRnJhZ21lbnQoW2VdLHQsbj9udWxsOltdKSx2Lm1lcmdlKFtdLChyLmNhY2hlYWJsZT92LmNsb25lKHIuZnJhZ21lbnQpOnIuZnJhZ21lbnQpLmNoaWxkTm9kZXMpKSl9LHBhcnNlSlNPTjpmdW5jdGlvbih0KXtpZighdHx8dHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiBudWxsO3Q9di50cmltKHQpO2lmKGUuSlNPTiYmZS5KU09OLnBhcnNlKXJldHVybiBlLkpTT04ucGFyc2UodCk7aWYoUy50ZXN0KHQucmVwbGFjZShULCJAIikucmVwbGFjZShOLCJdIikucmVwbGFjZSh4LCIiKSkpcmV0dXJuKG5ldyBGdW5jdGlvbigicmV0dXJuICIrdCkpKCk7di5lcnJvcigiSW52YWxpZCBKU09OOiAiK3QpfSxwYXJzZVhNTDpmdW5jdGlvbihuKXt2YXIgcixpO2lmKCFufHx0eXBlb2YgbiE9InN0cmluZyIpcmV0dXJuIG51bGw7dHJ5e2UuRE9NUGFyc2VyPyhpPW5ldyBET01QYXJzZXIscj1pLnBhcnNlRnJvbVN0cmluZyhuLCJ0ZXh0L3htbCIpKToocj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLHIuYXN5bmM9ImZhbHNlIixyLmxvYWRYTUwobikpfWNhdGNoKHMpe3I9dH1yZXR1cm4oIXJ8fCFyLmRvY3VtZW50RWxlbWVudHx8ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZ2LmVycm9yKCJJbnZhbGlkIFhNTDogIituKSxyfSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKHQpe3QmJmcudGVzdCh0KSYmKGUuZXhlY1NjcmlwdHx8ZnVuY3Rpb24odCl7ZS5ldmFsLmNhbGwoZSx0KX0pKHQpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShDLCJtcy0iKS5yZXBsYWNlKGssTCl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihlLG4scil7dmFyIGkscz0wLG89ZS5sZW5ndGgsdT1vPT09dHx8di5pc0Z1bmN0aW9uKGUpO2lmKHIpe2lmKHUpe2ZvcihpIGluIGUpaWYobi5hcHBseShlW2ldLHIpPT09ITEpYnJlYWt9ZWxzZSBmb3IoO3M8bzspaWYobi5hcHBseShlW3MrK10scik9PT0hMSlicmVha31lbHNlIGlmKHUpe2ZvcihpIGluIGUpaWYobi5jYWxsKGVbaV0saSxlW2ldKT09PSExKWJyZWFrfWVsc2UgZm9yKDtzPG87KWlmKG4uY2FsbChlW3NdLHMsZVtzKytdKT09PSExKWJyZWFrO3JldHVybiBlfSx0cmltOmQmJiFkLmNhbGwoIlx1ZmVmZlx1MDBhMCIpP2Z1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyIiOmQuY2FsbChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/IiI6KGUrIiIpLnJlcGxhY2UoYiwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dHx8W107cmV0dXJuIGUhPW51bGwmJihuPXYudHlwZShlKSxlLmxlbmd0aD09bnVsbHx8bj09PSJzdHJpbmcifHxuPT09ImZ1bmN0aW9uInx8bj09PSJyZWdleHAifHx2LmlzV2luZG93KGUpP2YuY2FsbChyLGUpOnYubWVyZ2UocixlKSkscn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYodCl7aWYoYylyZXR1cm4gYy5jYWxsKHQsZSxuKTtyPXQubGVuZ3RoLG49bj9uPDA/TWF0aC5tYXgoMCxyK24pOm46MDtmb3IoO248cjtuKyspaWYobiBpbiB0JiZ0W25dPT09ZSlyZXR1cm4gbn1yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oZSxuKXt2YXIgcj1uLmxlbmd0aCxpPWUubGVuZ3RoLHM9MDtpZih0eXBlb2Ygcj09Im51bWJlciIpZm9yKDtzPHI7cysrKWVbaSsrXT1uW3NdO2Vsc2Ugd2hpbGUobltzXSE9PXQpZVtpKytdPW5bcysrXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLHM9MCxvPWUubGVuZ3RoO249ISFuO2Zvcig7czxvO3MrKylyPSEhdChlW3NdLHMpLG4hPT1yJiZpLnB1c2goZVtzXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLG4scil7dmFyIGkscyxvPVtdLHU9MCxhPWUubGVuZ3RoLGY9ZSBpbnN0YW5jZW9mIHZ8fGEhPT10JiZ0eXBlb2YgYT09Im51bWJlciImJihhPjAmJmVbMF0mJmVbYS0xXXx8YT09PTB8fHYuaXNBcnJheShlKSk7aWYoZilmb3IoO3U8YTt1KyspaT1uKGVbdV0sdSxyKSxpIT1udWxsJiYob1tvLmxlbmd0aF09aSk7ZWxzZSBmb3IocyBpbiBlKWk9bihlW3NdLHMsciksaSE9bnVsbCYmKG9bby5sZW5ndGhdPWkpO3JldHVybiBvLmNvbmNhdC5hcHBseShbXSxvKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxzO3JldHVybiB0eXBlb2Ygbj09InN0cmluZyImJihyPWVbbl0sbj1lLGU9ciksdi5pc0Z1bmN0aW9uKGUpPyhpPWwuY2FsbChhcmd1bWVudHMsMikscz1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG4saS5jb25jYXQobC5jYWxsKGFyZ3VtZW50cykpKX0scy5ndWlkPWUuZ3VpZD1lLmd1aWR8fHYuZ3VpZCsrLHMpOnR9LGFjY2VzczpmdW5jdGlvbihlLG4scixpLHMsbyx1KXt2YXIgYSxmPXI9PW51bGwsbD0wLGM9ZS5sZW5ndGg7aWYociYmdHlwZW9mIHI9PSJvYmplY3QiKXtmb3IobCBpbiByKXYuYWNjZXNzKGUsbixsLHJbbF0sMSxvLGkpO3M9MX1lbHNlIGlmKGkhPT10KXthPXU9PT10JiZ2LmlzRnVuY3Rpb24oaSksZiYmKGE/KGE9bixuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYS5jYWxsKHYoZSksbil9KToobi5jYWxsKGUsaSksbj1udWxsKSk7aWYobilmb3IoO2w8YztsKyspbihlW2xdLHIsYT9pLmNhbGwoZVtsXSxsLG4oZVtsXSxyKSk6aSx1KTtzPTF9cmV0dXJuIHM/ZTpmP24uY2FsbChlKTpjP24oZVswXSxyKTpvfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KSx2LnJlYWR5LnByb21pc2U9ZnVuY3Rpb24odCl7aWYoIXIpe3I9di5EZWZlcnJlZCgpO2lmKGkucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpc2V0VGltZW91dCh2LnJlYWR5LDEpO2Vsc2UgaWYoaS5hZGRFdmVudExpc3RlbmVyKWkuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix2LnJlYWR5LCExKTtlbHNle2kuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQSksZS5hdHRhY2hFdmVudCgib25sb2FkIix2LnJlYWR5KTt2YXIgbj0hMTt0cnl7bj1lLmZyYW1lRWxlbWVudD09bnVsbCYmaS5kb2N1bWVudEVsZW1lbnR9Y2F0Y2gocyl7fW4mJm4uZG9TY3JvbGwmJmZ1bmN0aW9uIG8oKXtpZighdi5pc1JlYWR5KXt0cnl7bi5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGUpe3JldHVybiBzZXRUaW1lb3V0KG8sNTApfXYucmVhZHkoKX19KCl9fXJldHVybiByLnByb21pc2UodCl9LHYuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe09bIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSksbj12KGkpO3ZhciBNPXt9O3YuQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9dHlwZW9mIGU9PSJzdHJpbmciP01bZV18fF8oZSk6di5leHRlbmQoe30sZSk7dmFyIG4scixpLHMsbyx1LGE9W10sZj0hZS5vbmNlJiZbXSxsPWZ1bmN0aW9uKHQpe249ZS5tZW1vcnkmJnQscj0hMCx1PXN8fDAscz0wLG89YS5sZW5ndGgsaT0hMDtmb3IoO2EmJnU8bzt1KyspaWYoYVt1XS5hcHBseSh0WzBdLHRbMV0pPT09ITEmJmUuc3RvcE9uRmFsc2Upe249ITE7YnJlYWt9aT0hMSxhJiYoZj9mLmxlbmd0aCYmbChmLnNoaWZ0KCkpOm4/YT1bXTpjLmRpc2FibGUoKSl9LGM9e2FkZDpmdW5jdGlvbigpe2lmKGEpe3ZhciB0PWEubGVuZ3RoOyhmdW5jdGlvbiByKHQpe3YuZWFjaCh0LGZ1bmN0aW9uKHQsbil7dmFyIGk9di50eXBlKG4pO2k9PT0iZnVuY3Rpb24iPyghZS51bmlxdWV8fCFjLmhhcyhuKSkmJmEucHVzaChuKTpuJiZuLmxlbmd0aCYmaSE9PSJzdHJpbmciJiZyKG4pfSl9KShhcmd1bWVudHMpLGk/bz1hLmxlbmd0aDpuJiYocz10LGwobikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmdi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXYuaW5BcnJheSh0LGEsbikpPi0xKWEuc3BsaWNlKG4sMSksaSYmKG48PW8mJm8tLSxuPD11JiZ1LS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB2LmluQXJyYXkoZSxhKT4tMX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gYT1bXSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9Zj1uPXQsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hYX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBmPXQsbnx8Yy5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWZ9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxhJiYoIXJ8fGYpJiYoaT9mLnB1c2godCk6bCh0KSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBjLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhcn19O3JldHVybiBjfSx2LmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9W1sicmVzb2x2ZSIsImRvbmUiLHYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsdi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsdi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sbj0icGVuZGluZyIscj17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGkuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB2LkRlZmVycmVkKGZ1bmN0aW9uKG4pe3YuZWFjaCh0LGZ1bmN0aW9uKHQscil7dmFyIHM9clswXSxvPWVbdF07aVtyWzFdXSh2LmlzRnVuY3Rpb24obyk/ZnVuY3Rpb24oKXt2YXIgZT1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ2LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bcysiV2l0aCJdKHRoaXM9PT1pP246dGhpcyxbZV0pfTpuW3NdKX0pLGU9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbD92LmV4dGVuZChlLHIpOnJ9fSxpPXt9O3JldHVybiByLnBpcGU9ci50aGVuLHYuZWFjaCh0LGZ1bmN0aW9uKGUscyl7dmFyIG89c1syXSx1PXNbM107cltzWzFdXT1vLmFkZCx1JiZvLmFkZChmdW5jdGlvbigpe249dX0sdFtlXjFdWzJdLmRpc2FibGUsdFsyXVsyXS5sb2NrKSxpW3NbMF1dPW8uZmlyZSxpW3NbMF0rIldpdGgiXT1vLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWwuY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT1yIT09MXx8ZSYmdi5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLHM9aT09PTE/ZTp2LkRlZmVycmVkKCksbz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9sLmNhbGwoYXJndW1lbnRzKTpyLG49PT11P3Mubm90aWZ5V2l0aCh0LG4pOi0taXx8cy5yZXNvbHZlV2l0aCh0LG4pfX0sdSxhLGY7aWYocj4xKXt1PW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxmPW5ldyBBcnJheShyKTtmb3IoO3Q8cjt0Kyspblt0XSYmdi5pc0Z1bmN0aW9uKG5bdF0ucHJvbWlzZSk/blt0XS5wcm9taXNlKCkuZG9uZShvKHQsZixuKSkuZmFpbChzLnJlamVjdCkucHJvZ3Jlc3Mobyh0LGEsdSkpOi0taX1yZXR1cm4gaXx8cy5yZXNvbHZlV2l0aChmLG4pLHMucHJvbWlzZSgpfX0pLHYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciB0LG4scixzLG8sdSxhLGYsbCxjLGgscD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Auc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IikscC5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsbj1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikscj1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIW58fCFyfHwhbi5sZW5ndGgpcmV0dXJue307cz1pLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLG89cy5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSx1PXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sci5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSIsdD17bGVhZGluZ1doaXRlc3BhY2U6cC5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChyLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ci5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNS8udGVzdChyLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhci5zdHlsZS5jc3NGbG9hdCxjaGVja09uOnUudmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOm8uc2VsZWN0ZWQsZ2V0U2V0QXR0cmlidXRlOnAuY2xhc3NOYW1lIT09InQiLGVuY3R5cGU6ISFpLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGh0bWw1Q2xvbmU6aS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCE9PSI8Om5hdj48LzpuYXY+Iixib3hNb2RlbDppLmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCIsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwLGJveFNpemluZ1JlbGlhYmxlOiEwLHBpeGVsUG9zaXRpb246ITF9LHUuY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPXUuY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hby5kaXNhYmxlZDt0cnl7ZGVsZXRlIHAudGVzdH1jYXRjaChkKXt0LmRlbGV0ZUV4cGFuZG89ITF9IXAuYWRkRXZlbnRMaXN0ZW5lciYmcC5hdHRhY2hFdmVudCYmcC5maXJlRXZlbnQmJihwLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixoPWZ1bmN0aW9uKCl7dC5ub0Nsb25lRXZlbnQ9ITF9KSxwLmNsb25lTm9kZSghMCkuZmlyZUV2ZW50KCJvbmNsaWNrIikscC5kZXRhY2hFdmVudCgib25jbGljayIsaCkpLHU9aS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHUudmFsdWU9InQiLHUuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx0LnJhZGlvVmFsdWU9dS52YWx1ZT09PSJ0Iix1LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSx1LnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxwLmFwcGVuZENoaWxkKHUpLGE9aS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYS5hcHBlbmRDaGlsZChwLmxhc3RDaGlsZCksdC5jaGVja0Nsb25lPWEuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLHQuYXBwZW5kQ2hlY2tlZD11LmNoZWNrZWQsYS5yZW1vdmVDaGlsZCh1KSxhLmFwcGVuZENoaWxkKHApO2lmKHAuYXR0YWNoRXZlbnQpZm9yKGwgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSlmPSJvbiIrbCxjPWYgaW4gcCxjfHwocC5zZXRBdHRyaWJ1dGUoZiwicmV0dXJuOyIpLGM9dHlwZW9mIHBbZl09PSJmdW5jdGlvbiIpLHRbbCsiQnViYmxlcyJdPWM7cmV0dXJuIHYoZnVuY3Rpb24oKXt2YXIgbixyLHMsbyx1PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47IixhPWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtpZighYSlyZXR1cm47bj1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG4uc3R5bGUuY3NzVGV4dD0idmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoxcHgiLGEuaW5zZXJ0QmVmb3JlKG4sYS5maXJzdENoaWxkKSxyPWkuY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5hcHBlbmRDaGlsZChyKSxyLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscz1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHNbMF0uc3R5bGUuY3NzVGV4dD0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSIsYz1zWzBdLm9mZnNldEhlaWdodD09PTAsc1swXS5zdHlsZS5kaXNwbGF5PSIiLHNbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsdC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9YyYmc1swXS5vZmZzZXRIZWlnaHQ9PT0wLHIuaW5uZXJIVE1MPSIiLHIuc3R5bGUuY3NzVGV4dD0iYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSU7Iix0LmJveFNpemluZz1yLm9mZnNldFdpZHRoPT09NCx0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PWEub2Zmc2V0VG9wIT09MSxlLmdldENvbXB1dGVkU3R5bGUmJih0LnBpeGVsUG9zaXRpb249KGUuZ2V0Q29tcHV0ZWRTdHlsZShyLG51bGwpfHx7fSkudG9wIT09IjElIix0LmJveFNpemluZ1JlbGlhYmxlPShlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGg9PT0iNHB4IixvPWkuY3JlYXRlRWxlbWVudCgiZGl2Iiksby5zdHlsZS5jc3NUZXh0PXIuc3R5bGUuY3NzVGV4dD11LG8uc3R5bGUubWFyZ2luUmlnaHQ9by5zdHlsZS53aWR0aD0iMCIsci5zdHlsZS53aWR0aD0iMXB4IixyLmFwcGVuZENoaWxkKG8pLHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0eWxlKG8sbnVsbCl8fHt9KS5tYXJnaW5SaWdodCkpLHR5cGVvZiByLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYoci5pbm5lckhUTUw9IiIsci5zdHlsZS5jc3NUZXh0PXUrIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiLHQuaW5saW5lQmxvY2tOZWVkc0xheW91dD1yLm9mZnNldFdpZHRoPT09MyxyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIixyLmlubmVySFRNTD0iPGRpdj48L2Rpdj4iLHIuZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iNXB4Iix0LnNocmlua1dyYXBCbG9ja3M9ci5vZmZzZXRXaWR0aCE9PTMsbi5zdHlsZS56b29tPTEpLGEucmVtb3ZlQ2hpbGQobiksbj1yPXM9bz1udWxsfSksYS5yZW1vdmVDaGlsZChwKSxuPXI9cz1vPXU9YT1wPW51bGwsdH0oKTt2YXIgRD0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sUD0vKFtBLVpdKS9nO3YuZXh0ZW5kKHtjYWNoZTp7fSxkZWxldGVkSWRzOltdLHV1aWQ6MCxleHBhbmRvOiJqUXVlcnkiKyh2LmZuLmpxdWVyeStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOiEwLG9iamVjdDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixhcHBsZXQ6ITB9LGhhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5ub2RlVHlwZT92LmNhY2hlW2Vbdi5leHBhbmRvXV06ZVt2LmV4cGFuZG9dLCEhZSYmIUIoZSl9LGRhdGE6ZnVuY3Rpb24oZSxuLHIsaSl7aWYoIXYuYWNjZXB0RGF0YShlKSlyZXR1cm47dmFyIHMsbyx1PXYuZXhwYW5kbyxhPXR5cGVvZiBuPT0ic3RyaW5nIixmPWUubm9kZVR5cGUsbD1mP3YuY2FjaGU6ZSxjPWY/ZVt1XTplW3VdJiZ1O2lmKCghY3x8IWxbY118fCFpJiYhbFtjXS5kYXRhKSYmYSYmcj09PXQpcmV0dXJuO2N8fChmP2VbdV09Yz12LmRlbGV0ZWRJZHMucG9wKCl8fHYuZ3VpZCsrOmM9dSksbFtjXXx8KGxbY109e30sZnx8KGxbY10udG9KU09OPXYubm9vcCkpO2lmKHR5cGVvZiBuPT0ib2JqZWN0Inx8dHlwZW9mIG49PSJmdW5jdGlvbiIpaT9sW2NdPXYuZXh0ZW5kKGxbY10sbik6bFtjXS5kYXRhPXYuZXh0ZW5kKGxbY10uZGF0YSxuKTtyZXR1cm4gcz1sW2NdLGl8fChzLmRhdGF8fChzLmRhdGE9e30pLHM9cy5kYXRhKSxyIT09dCYmKHNbdi5jYW1lbENhc2UobildPXIpLGE/KG89c1tuXSxvPT1udWxsJiYobz1zW3YuY2FtZWxDYXNlKG4pXSkpOm89cyxvfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCxuKXtpZighdi5hY2NlcHREYXRhKGUpKXJldHVybjt2YXIgcixpLHMsbz1lLm5vZGVUeXBlLHU9bz92LmNhY2hlOmUsYT1vP2Vbdi5leHBhbmRvXTp2LmV4cGFuZG87aWYoIXVbYV0pcmV0dXJuO2lmKHQpe3I9bj91W2FdOnVbYV0uZGF0YTtpZihyKXt2LmlzQXJyYXkodCl8fCh0IGluIHI/dD1bdF06KHQ9di5jYW1lbENhc2UodCksdCBpbiByP3Q9W3RdOnQ9dC5zcGxpdCgiICIpKSk7Zm9yKGk9MCxzPXQubGVuZ3RoO2k8cztpKyspZGVsZXRlIHJbdFtpXV07aWYoIShuP0I6di5pc0VtcHR5T2JqZWN0KShyKSlyZXR1cm59fWlmKCFuKXtkZWxldGUgdVthXS5kYXRhO2lmKCFCKHVbYV0pKXJldHVybn1vP3YuY2xlYW5EYXRhKFtlXSwhMCk6di5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fHUhPXUud2luZG93P2RlbGV0ZSB1W2FdOnVbYV09bnVsbH0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRhdGEoZSx0LG4sITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUmJnYubm9EYXRhW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIXR8fHQhPT0hMCYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PXR9fSksdi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLHMsbyx1LGE9dGhpc1swXSxmPTAsbD1udWxsO2lmKGU9PT10KXtpZih0aGlzLmxlbmd0aCl7bD12LmRhdGEoYSk7aWYoYS5ub2RlVHlwZT09PTEmJiF2Ll9kYXRhKGEsInBhcnNlZEF0dHJzIikpe3M9YS5hdHRyaWJ1dGVzO2Zvcih1PXMubGVuZ3RoO2Y8dTtmKyspbz1zW2ZdLm5hbWUsby5pbmRleE9mKCJkYXRhLSIpfHwobz12LmNhbWVsQ2FzZShvLnN1YnN0cmluZyg1KSksSChhLG8sbFtvXSkpO3YuX2RhdGEoYSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGx9cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0Ij90aGlzLmVhY2goZnVuY3Rpb24oKXt2LmRhdGEodGhpcyxlKX0pOihyPWUuc3BsaXQoIi4iLDIpLHJbMV09clsxXT8iLiIrclsxXToiIixpPXJbMV0rIiEiLHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24obil7aWYobj09PXQpcmV0dXJuIGw9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIraSxbclswXV0pLGw9PT10JiZhJiYobD12LmRhdGEoYSxlKSxsPUgoYSxlLGwpKSxsPT09dCYmclsxXT90aGlzLmRhdGEoclswXSk6bDtyWzFdPW4sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKTt0LnRyaWdnZXJIYW5kbGVyKCJzZXREYXRhIitpLHIpLHYuZGF0YSh0aGlzLGUsbiksdC50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIraSxyKX0pfSxudWxsLG4sYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITEpKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5yZW1vdmVEYXRhKHRoaXMsZSl9KX19KSx2LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj12Ll9kYXRhKGUsdCksbiYmKCFyfHx2LmlzQXJyYXkobik/cj12Ll9kYXRhKGUsdCx2Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj12LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxzPXYuX3F1ZXVlSG9va3MoZSx0KSxvPWZ1bmN0aW9uKCl7di5kZXF1ZXVlKGUsdCl9O2k9PT0iaW5wcm9ncmVzcyImJihpPW4uc2hpZnQoKSxyLS0pLGkmJih0PT09ImZ4IiYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIHMuc3RvcCxpLmNhbGwoZSxvLHMpKSwhciYmcyYmcy5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIHYuX2RhdGEoZSxuKXx8di5fZGF0YShlLG4se2VtcHR5OnYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe3YucmVtb3ZlRGF0YShlLHQrInF1ZXVlIiwhMCksdi5yZW1vdmVEYXRhKGUsbiwhMCl9KX0pfX0pLHYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLG4pe3ZhciByPTI7cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKG49ZSxlPSJmeCIsci0tKSxhcmd1bWVudHMubGVuZ3RoPHI/di5xdWV1ZSh0aGlzWzBdLGUpOm49PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9di5xdWV1ZSh0aGlzLGUsbik7di5fcXVldWVIb29rcyh0aGlzLGUpLGU9PT0iZngiJiZ0WzBdIT09ImlucHJvZ3Jlc3MiJiZ2LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2LmRlcXVldWUodGhpcyxlKX0pfSxkZWxheTpmdW5jdGlvbihlLHQpe3JldHVybiBlPXYuZng/di5meC5zcGVlZHNbZV18fGU6ZSx0PXR8fCJmeCIsdGhpcy5xdWV1ZSh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9c2V0VGltZW91dCh0LGUpO24uc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChyKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihlLG4pe3ZhciByLGk9MSxzPXYuRGVmZXJyZWQoKSxvPXRoaXMsdT10aGlzLmxlbmd0aCxhPWZ1bmN0aW9uKCl7LS1pfHxzLnJlc29sdmVXaXRoKG8sW29dKX07dHlwZW9mIGUhPSJzdHJpbmciJiYobj1lLGU9dCksZT1lfHwiZngiO3doaWxlKHUtLSlyPXYuX2RhdGEob1t1XSxlKyJxdWV1ZUhvb2tzIiksciYmci5lbXB0eSYmKGkrKyxyLmVtcHR5LmFkZChhKSk7cmV0dXJuIGEoKSxzLnByb21pc2Uobil9fSk7dmFyIGosRixJLHE9L1tcdFxyXG5dL2csUj0vXHIvZyxVPS9eKD86YnV0dG9ufGlucHV0KSQvaSx6PS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLFc9L15hKD86cmVhfCkkL2ksWD0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSxWPXYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7di5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdi5hY2Nlc3ModGhpcyx2LmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3YucmVtb3ZlQXR0cih0aGlzLGUpfSl9LHByb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdi5hY2Nlc3ModGhpcyx2LnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9di5wcm9wRml4W2VdfHxlLHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2VdPXQsZGVsZXRlIHRoaXNbZV19Y2F0Y2gobil7fX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzLG8sdTtpZih2LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt2KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGUmJnR5cGVvZiBlPT0ic3RyaW5nIil7dD1lLnNwbGl0KHkpO2ZvcihuPTAscj10aGlzLmxlbmd0aDtuPHI7bisrKXtpPXRoaXNbbl07aWYoaS5ub2RlVHlwZT09PTEpaWYoIWkuY2xhc3NOYW1lJiZ0Lmxlbmd0aD09PTEpaS5jbGFzc05hbWU9ZTtlbHNle3M9IiAiK2kuY2xhc3NOYW1lKyIgIjtmb3Iobz0wLHU9dC5sZW5ndGg7bzx1O28rKylzLmluZGV4T2YoIiAiK3Rbb10rIiAiKTwwJiYocys9dFtvXSsiICIpO2kuY2xhc3NOYW1lPXYudHJpbShzKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgbixyLGkscyxvLHUsYTtpZih2LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt2KHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGUmJnR5cGVvZiBlPT0ic3RyaW5nInx8ZT09PXQpe249KGV8fCIiKS5zcGxpdCh5KTtmb3IodT0wLGE9dGhpcy5sZW5ndGg7dTxhO3UrKyl7aT10aGlzW3VdO2lmKGkubm9kZVR5cGU9PT0xJiZpLmNsYXNzTmFtZSl7cj0oIiAiK2kuY2xhc3NOYW1lKyIgIikucmVwbGFjZShxLCIgIik7Zm9yKHM9MCxvPW4ubGVuZ3RoO3M8bztzKyspd2hpbGUoci5pbmRleE9mKCIgIituW3NdKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK25bc10rIiAiLCIgIik7aS5jbGFzc05hbWU9ZT92LnRyaW0ocik6IiJ9fX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZSxyPXR5cGVvZiB0PT0iYm9vbGVhbiI7cmV0dXJuIHYuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7dih0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYobj09PSJzdHJpbmciKXt2YXIgaSxzPTAsbz12KHRoaXMpLHU9dCxhPWUuc3BsaXQoeSk7d2hpbGUoaT1hW3MrK10pdT1yP3U6IW8uaGFzQ2xhc3MoaSksb1t1PyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oaSl9ZWxzZSBpZihuPT09InVuZGVmaW5lZCJ8fG49PT0iYm9vbGVhbiIpdGhpcy5jbGFzc05hbWUmJnYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6di5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIifSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PSIgIitlKyIgIixuPTAscj10aGlzLmxlbmd0aDtmb3IoO248cjtuKyspaWYodGhpc1tuXS5ub2RlVHlwZT09PTEmJigiICIrdGhpc1tuXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHEsIiAiKS5pbmRleE9mKHQpPj0wKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oZSl7dmFyIG4scixpLHM9dGhpc1swXTtpZighYXJndW1lbnRzLmxlbmd0aCl7aWYocylyZXR1cm4gbj12LnZhbEhvb2tzW3MudHlwZV18fHYudmFsSG9va3Nbcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxuJiYiZ2V0ImluIG4mJihyPW4uZ2V0KHMsInZhbHVlIikpIT09dD9yOihyPXMudmFsdWUsdHlwZW9mIHI9PSJzdHJpbmciP3IucmVwbGFjZShSLCIiKTpyPT1udWxsPyIiOnIpO3JldHVybn1yZXR1cm4gaT12LmlzRnVuY3Rpb24oZSksdGhpcy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBzLG89dih0aGlzKTtpZih0aGlzLm5vZGVUeXBlIT09MSlyZXR1cm47aT9zPWUuY2FsbCh0aGlzLHIsby52YWwoKSk6cz1lLHM9PW51bGw/cz0iIjp0eXBlb2Ygcz09Im51bWJlciI/cys9IiI6di5pc0FycmF5KHMpJiYocz12Lm1hcChzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyIiOmUrIiJ9KSksbj12LnZhbEhvb2tzW3RoaXMudHlwZV18fHYudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZighbnx8ISgic2V0ImluIG4pfHxuLnNldCh0aGlzLHMsInZhbHVlIik9PT10KXRoaXMudmFsdWU9c30pfX0pLHYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgscz1lLnR5cGU9PT0ic2VsZWN0LW9uZSJ8fGk8MCxvPXM/bnVsbDpbXSx1PXM/aSsxOnIubGVuZ3RoLGE9aTwwP3U6cz9pOjA7Zm9yKDthPHU7YSsrKXtuPXJbYV07aWYoKG4uc2VsZWN0ZWR8fGE9PT1pKSYmKHYuc3VwcG9ydC5vcHREaXNhYmxlZD8hbi5kaXNhYmxlZDpuLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IXYubm9kZU5hbWUobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7dD12KG4pLnZhbCgpO2lmKHMpcmV0dXJuIHQ7by5wdXNoKHQpfX1yZXR1cm4gb30sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49di5tYWtlQXJyYXkodCk7cmV0dXJuIHYoZSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9di5pbkFycmF5KHYodGhpcykudmFsKCksbik+PTB9KSxuLmxlbmd0aHx8KGUuc2VsZWN0ZWRJbmRleD0tMSksbn19fSxhdHRyRm46e30sYXR0cjpmdW5jdGlvbihlLG4scixpKXt2YXIgcyxvLHUsYT1lLm5vZGVUeXBlO2lmKCFlfHxhPT09M3x8YT09PTh8fGE9PT0yKXJldHVybjtpZihpJiZ2LmlzRnVuY3Rpb24odi5mbltuXSkpcmV0dXJuIHYoZSlbbl0ocik7aWYodHlwZW9mIGUuZ2V0QXR0cmlidXRlPT0idW5kZWZpbmVkIilyZXR1cm4gdi5wcm9wKGUsbixyKTt1PWEhPT0xfHwhdi5pc1hNTERvYyhlKSx1JiYobj1uLnRvTG93ZXJDYXNlKCksbz12LmF0dHJIb29rc1tuXXx8KFgudGVzdChuKT9GOmopKTtpZihyIT09dCl7aWYocj09PW51bGwpe3YucmVtb3ZlQXR0cihlLG4pO3JldHVybn1yZXR1cm4gbyYmInNldCJpbiBvJiZ1JiYocz1vLnNldChlLHIsbikpIT09dD9zOihlLnNldEF0dHJpYnV0ZShuLHIrIiIpLHIpfXJldHVybiBvJiYiZ2V0ImluIG8mJnUmJihzPW8uZ2V0KGUsbikpIT09bnVsbD9zOihzPWUuZ2V0QXR0cmlidXRlKG4pLHM9PT1udWxsP3Q6cyl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkscyxvPTA7aWYodCYmZS5ub2RlVHlwZT09PTEpe3I9dC5zcGxpdCh5KTtmb3IoO288ci5sZW5ndGg7bysrKWk9cltvXSxpJiYobj12LnByb3BGaXhbaV18fGkscz1YLnRlc3QoaSksc3x8di5hdHRyKGUsaSwiIiksZS5yZW1vdmVBdHRyaWJ1dGUoVj9pOm4pLHMmJm4gaW4gZSYmKGVbbl09ITEpKX19LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoVS50ZXN0KGUubm9kZU5hbWUpJiZlLnBhcmVudE5vZGUpdi5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7ZWxzZSBpZighdi5zdXBwb3J0LnJhZGlvVmFsdWUmJnQ9PT0icmFkaW8iJiZ2Lm5vZGVOYW1lKGUsImlucHV0Iikpe3ZhciBuPWUudmFsdWU7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuJiYoZS52YWx1ZT1uKSx0fX19LHZhbHVlOntnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaiYmdi5ub2RlTmFtZShlLCJidXR0b24iKT9qLmdldChlLHQpOnQgaW4gZT9lLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihlLHQsbil7aWYoaiYmdi5ub2RlTmFtZShlLCJidXR0b24iKSlyZXR1cm4gai5zZXQoZSx0LG4pO2UudmFsdWU9dH19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLHMsbyx1PWUubm9kZVR5cGU7aWYoIWV8fHU9PT0zfHx1PT09OHx8dT09PTIpcmV0dXJuO3JldHVybiBvPXUhPT0xfHwhdi5pc1hNTERvYyhlKSxvJiYobj12LnByb3BGaXhbbl18fG4scz12LnByb3BIb29rc1tuXSksciE9PXQ/cyYmInNldCJpbiBzJiYoaT1zLnNldChlLHIsbikpIT09dD9pOmVbbl09cjpzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsbikpIT09bnVsbD9pOmVbbl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgbj1lLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7cmV0dXJuIG4mJm4uc3BlY2lmaWVkP3BhcnNlSW50KG4udmFsdWUsMTApOnoudGVzdChlLm5vZGVOYW1lKXx8Vy50ZXN0KGUubm9kZU5hbWUpJiZlLmhyZWY/MDp0fX19fSksRj17Z2V0OmZ1bmN0aW9uKGUsbil7dmFyIHIsaT12LnByb3AoZSxuKTtyZXR1cm4gaT09PSEwfHx0eXBlb2YgaSE9ImJvb2xlYW4iJiYocj1lLmdldEF0dHJpYnV0ZU5vZGUobikpJiZyLm5vZGVWYWx1ZSE9PSExP24udG9Mb3dlckNhc2UoKTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB0PT09ITE/di5yZW1vdmVBdHRyKGUsbik6KHI9di5wcm9wRml4W25dfHxuLHIgaW4gZSYmKGVbcl09ITApLGUuc2V0QXR0cmlidXRlKG4sbi50b0xvd2VyQ2FzZSgpKSksbn19LFZ8fChJPXtuYW1lOiEwLGlkOiEwLGNvb3JkczohMH0saj12LnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pLHImJihJW25dP3IudmFsdWUhPT0iIjpyLnNwZWNpZmllZCk/ci52YWx1ZTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2V0QXR0cmlidXRlTm9kZShuKTtyZXR1cm4gcnx8KHI9aS5jcmVhdGVBdHRyaWJ1dGUobiksZS5zZXRBdHRyaWJ1dGVOb2RlKHIpKSxyLnZhbHVlPXQrIiJ9fSx2LmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGUsdCl7di5hdHRySG9va3NbdF09di5leHRlbmQodi5hdHRySG9va3NbdF0se3NldDpmdW5jdGlvbihlLG4pe2lmKG49PT0iIilyZXR1cm4gZS5zZXRBdHRyaWJ1dGUodCwiYXV0byIpLG59fSl9KSx2LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e2dldDpqLmdldCxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3Q9PT0iIiYmKHQ9ImZhbHNlIiksai5zZXQoZSx0LG4pfX0pLHYuc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8di5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oZSxuKXt2LmF0dHJIb29rc1tuXT12LmV4dGVuZCh2LmF0dHJIb29rc1tuXSx7Z2V0OmZ1bmN0aW9uKGUpe3ZhciByPWUuZ2V0QXR0cmlidXRlKG4sMik7cmV0dXJuIHI9PT1udWxsP3Q6cn19KX0pLHYuc3VwcG9ydC5zdHlsZXx8KHYuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpfHx0fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0PXQrIiJ9fSksdi5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwodi5wcm9wSG9va3Muc2VsZWN0ZWQ9di5leHRlbmQodi5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSksdi5zdXBwb3J0LmVuY3R5cGV8fCh2LnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKSx2LnN1cHBvcnQuY2hlY2tPbnx8di5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7di52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjplLnZhbHVlfX19KSx2LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt2LnZhbEhvb2tzW3RoaXNdPXYuZXh0ZW5kKHYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihlLHQpe2lmKHYuaXNBcnJheSh0KSlyZXR1cm4gZS5jaGVja2VkPXYuaW5BcnJheSh2KGUpLnZhbCgpLHQpPj0wfX0pfSk7dmFyICQ9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLEo9L14oW15cLl0qfCkoPzpcLiguKyl8KSQvLEs9Lyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxiLyxRPS9ea2V5LyxHPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxZPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxaPWZ1bmN0aW9uKGUpe3JldHVybiB2LmV2ZW50LnNwZWNpYWwuaG92ZXI/ZTplLnJlcGxhY2UoSywibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMSIpfTt2LmV2ZW50PXthZGQ6ZnVuY3Rpb24oZSxuLHIsaSxzKXt2YXIgbyx1LGEsZixsLGMsaCxwLGQsbSxnO2lmKGUubm9kZVR5cGU9PT0zfHxlLm5vZGVUeXBlPT09OHx8IW58fCFyfHwhKG89di5fZGF0YShlKSkpcmV0dXJuO3IuaGFuZGxlciYmKGQ9cixyPWQuaGFuZGxlcixzPWQuc2VsZWN0b3IpLHIuZ3VpZHx8KHIuZ3VpZD12Lmd1aWQrKyksYT1vLmV2ZW50cyxhfHwoby5ldmVudHM9YT17fSksdT1vLmhhbmRsZSx1fHwoby5oYW5kbGU9dT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIHY9PSJ1bmRlZmluZWQifHwhIWUmJnYuZXZlbnQudHJpZ2dlcmVkPT09ZS50eXBlP3Q6di5ldmVudC5kaXNwYXRjaC5hcHBseSh1LmVsZW0sYXJndW1lbnRzKX0sdS5lbGVtPWUpLG49di50cmltKFoobikpLnNwbGl0KCIgIik7Zm9yKGY9MDtmPG4ubGVuZ3RoO2YrKyl7bD1KLmV4ZWMobltmXSl8fFtdLGM9bFsxXSxoPShsWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZz12LmV2ZW50LnNwZWNpYWxbY118fHt9LGM9KHM/Zy5kZWxlZ2F0ZVR5cGU6Zy5iaW5kVHlwZSl8fGMsZz12LmV2ZW50LnNwZWNpYWxbY118fHt9LHA9di5leHRlbmQoe3R5cGU6YyxvcmlnVHlwZTpsWzFdLGRhdGE6aSxoYW5kbGVyOnIsZ3VpZDpyLmd1aWQsc2VsZWN0b3I6cyxuZWVkc0NvbnRleHQ6cyYmdi5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KHMpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sZCksbT1hW2NdO2lmKCFtKXttPWFbY109W10sbS5kZWxlZ2F0ZUNvdW50PTA7aWYoIWcuc2V0dXB8fGcuc2V0dXAuY2FsbChlLGksaCx1KT09PSExKWUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoYyx1LCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrYyx1KX1nLmFkZCYmKGcuYWRkLmNhbGwoZSxwKSxwLmhhbmRsZXIuZ3VpZHx8KHAuaGFuZGxlci5ndWlkPXIuZ3VpZCkpLHM/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxwKTptLnB1c2gocCksdi5ldmVudC5nbG9iYWxbY109ITB9ZT1udWxsfSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHMsbyx1LGEsZixsLGMsaCxwLGQsbSxnPXYuaGFzRGF0YShlKSYmdi5fZGF0YShlKTtpZighZ3x8IShoPWcuZXZlbnRzKSlyZXR1cm47dD12LnRyaW0oWih0fHwiIikpLnNwbGl0KCIgIik7Zm9yKHM9MDtzPHQubGVuZ3RoO3MrKyl7bz1KLmV4ZWModFtzXSl8fFtdLHU9YT1vWzFdLGY9b1syXTtpZighdSl7Zm9yKHUgaW4gaCl2LmV2ZW50LnJlbW92ZShlLHUrdFtzXSxuLHIsITApO2NvbnRpbnVlfXA9di5ldmVudC5zcGVjaWFsW3VdfHx7fSx1PShyP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHx1LGQ9aFt1XXx8W10sbD1kLmxlbmd0aCxmPWY/bmV3IFJlZ0V4cCgiKF58XFwuKSIrZi5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspbT1kW2NdLChpfHxhPT09bS5vcmlnVHlwZSkmJighbnx8bi5ndWlkPT09bS5ndWlkKSYmKCFmfHxmLnRlc3QobS5uYW1lc3BhY2UpKSYmKCFyfHxyPT09bS5zZWxlY3Rvcnx8cj09PSIqKiImJm0uc2VsZWN0b3IpJiYoZC5zcGxpY2UoYy0tLDEpLG0uc2VsZWN0b3ImJmQuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGUsbSkpO2QubGVuZ3RoPT09MCYmbCE9PWQubGVuZ3RoJiYoKCFwLnRlYXJkb3dufHxwLnRlYXJkb3duLmNhbGwoZSxmLGcuaGFuZGxlKT09PSExKSYmdi5yZW1vdmVFdmVudChlLHUsZy5oYW5kbGUpLGRlbGV0ZSBoW3VdKX12LmlzRW1wdHlPYmplY3QoaCkmJihkZWxldGUgZy5oYW5kbGUsdi5yZW1vdmVEYXRhKGUsImV2ZW50cyIsITApKX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKG4scixzLG8pe2lmKCFzfHxzLm5vZGVUeXBlIT09MyYmcy5ub2RlVHlwZSE9PTgpe3ZhciB1LGEsZixsLGMsaCxwLGQsbSxnLHk9bi50eXBlfHxuLGI9W107aWYoWS50ZXN0KHkrdi5ldmVudC50cmlnZ2VyZWQpKXJldHVybjt5LmluZGV4T2YoIiEiKT49MCYmKHk9eS5zbGljZSgwLC0xKSxhPSEwKSx5LmluZGV4T2YoIi4iKT49MCYmKGI9eS5zcGxpdCgiLiIpLHk9Yi5zaGlmdCgpLGIuc29ydCgpKTtpZigoIXN8fHYuZXZlbnQuY3VzdG9tRXZlbnRbeV0pJiYhdi5ldmVudC5nbG9iYWxbeV0pcmV0dXJuO249dHlwZW9mIG49PSJvYmplY3QiP25bdi5leHBhbmRvXT9uOm5ldyB2LkV2ZW50KHksbik6bmV3IHYuRXZlbnQoeSksbi50eXBlPXksbi5pc1RyaWdnZXI9ITAsbi5leGNsdXNpdmU9YSxuLm5hbWVzcGFjZT1iLmpvaW4oIi4iKSxuLm5hbWVzcGFjZV9yZT1uLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitiLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsaD15LmluZGV4T2YoIjoiKTwwPyJvbiIreToiIjtpZighcyl7dT12LmNhY2hlO2ZvcihmIGluIHUpdVtmXS5ldmVudHMmJnVbZl0uZXZlbnRzW3ldJiZ2LmV2ZW50LnRyaWdnZXIobixyLHVbZl0uaGFuZGxlLmVsZW0sITApO3JldHVybn1uLnJlc3VsdD10LG4udGFyZ2V0fHwobi50YXJnZXQ9cykscj1yIT1udWxsP3YubWFrZUFycmF5KHIpOltdLHIudW5zaGlmdChuKSxwPXYuZXZlbnQuc3BlY2lhbFt5XXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkocyxyKT09PSExKXJldHVybjttPVtbcyxwLmJpbmRUeXBlfHx5XV07aWYoIW8mJiFwLm5vQnViYmxlJiYhdi5pc1dpbmRvdyhzKSl7Zz1wLmRlbGVnYXRlVHlwZXx8eSxsPVkudGVzdChnK3kpP3M6cy5wYXJlbnROb2RlO2ZvcihjPXM7bDtsPWwucGFyZW50Tm9kZSltLnB1c2goW2wsZ10pLGM9bDtjPT09KHMub3duZXJEb2N1bWVudHx8aSkmJm0ucHVzaChbYy5kZWZhdWx0Vmlld3x8Yy5wYXJlbnRXaW5kb3d8fGUsZ10pfWZvcihmPTA7ZjxtLmxlbmd0aCYmIW4uaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtmKyspbD1tW2ZdWzBdLG4udHlwZT1tW2ZdWzFdLGQ9KHYuX2RhdGEobCwiZXZlbnRzIil8fHt9KVtuLnR5cGVdJiZ2Ll9kYXRhKGwsImhhbmRsZSIpLGQmJmQuYXBwbHkobCxyKSxkPWgmJmxbaF0sZCYmdi5hY2NlcHREYXRhKGwpJiZkLmFwcGx5JiZkLmFwcGx5KGwscik9PT0hMSYmbi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBuLnR5cGU9eSwhbyYmIW4uaXNEZWZhdWx0UHJldmVudGVkKCkmJighcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShzLm93bmVyRG9jdW1lbnQscik9PT0hMSkmJih5IT09ImNsaWNrInx8IXYubm9kZU5hbWUocywiYSIpKSYmdi5hY2NlcHREYXRhKHMpJiZoJiZzW3ldJiYoeSE9PSJmb2N1cyImJnkhPT0iYmx1ciJ8fG4udGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiF2LmlzV2luZG93KHMpJiYoYz1zW2hdLGMmJihzW2hdPW51bGwpLHYuZXZlbnQudHJpZ2dlcmVkPXksc1t5XSgpLHYuZXZlbnQudHJpZ2dlcmVkPXQsYyYmKHNbaF09YykpLG4ucmVzdWx0fXJldHVybn0sZGlzcGF0Y2g6ZnVuY3Rpb24obil7bj12LmV2ZW50LmZpeChufHxlLmV2ZW50KTt2YXIgcixpLHMsbyx1LGEsZixjLGgscCxkPSh2Ll9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbbi50eXBlXXx8W10sbT1kLmRlbGVnYXRlQ291bnQsZz1sLmNhbGwoYXJndW1lbnRzKSx5PSFuLmV4Y2x1c2l2ZSYmIW4ubmFtZXNwYWNlLGI9di5ldmVudC5zcGVjaWFsW24udHlwZV18fHt9LHc9W107Z1swXT1uLG4uZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihiLnByZURpc3BhdGNoJiZiLnByZURpc3BhdGNoLmNhbGwodGhpcyxuKT09PSExKXJldHVybjtpZihtJiYoIW4uYnV0dG9ufHxuLnR5cGUhPT0iY2xpY2siKSlmb3Iocz1uLnRhcmdldDtzIT10aGlzO3M9cy5wYXJlbnROb2RlfHx0aGlzKWlmKHMuZGlzYWJsZWQhPT0hMHx8bi50eXBlIT09ImNsaWNrIil7dT17fSxmPVtdO2ZvcihyPTA7cjxtO3IrKyljPWRbcl0saD1jLnNlbGVjdG9yLHVbaF09PT10JiYodVtoXT1jLm5lZWRzQ29udGV4dD92KGgsdGhpcykuaW5kZXgocyk+PTA6di5maW5kKGgsdGhpcyxudWxsLFtzXSkubGVuZ3RoKSx1W2hdJiZmLnB1c2goYyk7Zi5sZW5ndGgmJncucHVzaCh7ZWxlbTpzLG1hdGNoZXM6Zn0pfWQubGVuZ3RoPm0mJncucHVzaCh7ZWxlbTp0aGlzLG1hdGNoZXM6ZC5zbGljZShtKX0pO2ZvcihyPTA7cjx3Lmxlbmd0aCYmIW4uaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtyKyspe2E9d1tyXSxuLmN1cnJlbnRUYXJnZXQ9YS5lbGVtO2ZvcihpPTA7aTxhLm1hdGNoZXMubGVuZ3RoJiYhbi5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO2krKyl7Yz1hLm1hdGNoZXNbaV07aWYoeXx8IW4ubmFtZXNwYWNlJiYhYy5uYW1lc3BhY2V8fG4ubmFtZXNwYWNlX3JlJiZuLm5hbWVzcGFjZV9yZS50ZXN0KGMubmFtZXNwYWNlKSluLmRhdGE9Yy5kYXRhLG4uaGFuZGxlT2JqPWMsbz0oKHYuZXZlbnQuc3BlY2lhbFtjLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8Yy5oYW5kbGVyKS5hcHBseShhLmVsZW0sZyksbyE9PXQmJihuLnJlc3VsdD1vLG89PT0hMSYmKG4ucHJldmVudERlZmF1bHQoKSxuLnN0b3BQcm9wYWdhdGlvbigpKSl9fXJldHVybiBiLnBvc3REaXNwYXRjaCYmYi5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLG4pLG4ucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUud2hpY2g9PW51bGwmJihlLndoaWNoPXQuY2hhckNvZGUhPW51bGw/dC5jaGFyQ29kZTp0LmtleUNvZGUpLGV9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLG4pe3ZhciByLHMsbyx1PW4uYnV0dG9uLGE9bi5mcm9tRWxlbWVudDtyZXR1cm4gZS5wYWdlWD09bnVsbCYmbi5jbGllbnRYIT1udWxsJiYocj1lLnRhcmdldC5vd25lckRvY3VtZW50fHxpLHM9ci5kb2N1bWVudEVsZW1lbnQsbz1yLmJvZHksZS5wYWdlWD1uLmNsaWVudFgrKHMmJnMuc2Nyb2xsTGVmdHx8byYmby5zY3JvbGxMZWZ0fHwwKS0ocyYmcy5jbGllbnRMZWZ0fHxvJiZvLmNsaWVudExlZnR8fDApLGUucGFnZVk9bi5jbGllbnRZKyhzJiZzLnNjcm9sbFRvcHx8byYmby5zY3JvbGxUb3B8fDApLShzJiZzLmNsaWVudFRvcHx8byYmby5jbGllbnRUb3B8fDApKSwhZS5yZWxhdGVkVGFyZ2V0JiZhJiYoZS5yZWxhdGVkVGFyZ2V0PWE9PT1lLnRhcmdldD9uLnRvRWxlbWVudDphKSwhZS53aGljaCYmdSE9PXQmJihlLndoaWNoPXUmMT8xOnUmMj8zOnUmND8yOjApLGV9fSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt2LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scj1lLHM9di5ldmVudC5maXhIb29rc1tlLnR5cGVdfHx7fSxvPXMucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQocy5wcm9wcyk6dGhpcy5wcm9wcztlPXYuRXZlbnQocik7Zm9yKHQ9by5sZW5ndGg7dDspbj1vWy0tdF0sZVtuXT1yW25dO3JldHVybiBlLnRhcmdldHx8KGUudGFyZ2V0PXIuc3JjRWxlbWVudHx8aSksZS50YXJnZXQubm9kZVR5cGU9PT0zJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksZS5tZXRhS2V5PSEhZS5tZXRhS2V5LHMuZmlsdGVyP3MuZmlsdGVyKGUscik6ZX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihlLHQsbil7di5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bil9LHRlYXJkb3duOmZ1bmN0aW9uKGUsdCl7dGhpcy5vbmJlZm9yZXVubG9hZD09PXQmJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXYuZXh0ZW5kKG5ldyB2LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj92LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnYuZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHYuZXZlbnQuaGFuZGxlPXYuZXZlbnQuZGlzcGF0Y2gsdi5yZW1vdmVFdmVudD1pLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ib24iK3Q7ZS5kZXRhY2hFdmVudCYmKHR5cGVvZiBlW3JdPT0idW5kZWZpbmVkIiYmKGVbcl09bnVsbCksZS5kZXRhY2hFdmVudChyLG4pKX0sdi5FdmVudD1mdW5jdGlvbihlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYuRXZlbnQpKXJldHVybiBuZXcgdi5FdmVudChlLHQpO2UmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUucmV0dXJuVmFsdWU9PT0hMXx8ZS5nZXRQcmV2ZW50RGVmYXVsdCYmZS5nZXRQcmV2ZW50RGVmYXVsdCgpP3R0OmV0KTp0aGlzLnR5cGU9ZSx0JiZ2LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHx2Lm5vdygpLHRoaXNbdi5leHBhbmRvXT0hMH0sdi5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9dHQ7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFlKXJldHVybjtlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXR0O3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtpZighZSlyZXR1cm47ZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCksZS5jYW5jZWxCdWJibGU9ITB9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dHQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOmV0LGlzUHJvcGFnYXRpb25TdG9wcGVkOmV0LGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmV0fSx2LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3YuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LHM9ZS5oYW5kbGVPYmosbz1zLnNlbGVjdG9yO2lmKCFpfHxpIT09ciYmIXYuY29udGFpbnMocixpKSllLnR5cGU9cy5vcmlnVHlwZSxuPXMuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQ7cmV0dXJuIG59fX0pLHYuc3VwcG9ydC5zdWJtaXRCdWJibGVzfHwodi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtpZih2Lm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTt2LmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0LHI9di5ub2RlTmFtZShuLCJpbnB1dCIpfHx2Lm5vZGVOYW1lKG4sImJ1dHRvbiIpP24uZm9ybTp0O3ImJiF2Ll9kYXRhKHIsIl9zdWJtaXRfYXR0YWNoZWQiKSYmKHYuZXZlbnQuYWRkKHIsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlPSEwfSksdi5fZGF0YShyLCJfc3VibWl0X2F0dGFjaGVkIiwhMCkpfSl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlJiYoZGVsZXRlIGUuX3N1Ym1pdF9idWJibGUsdGhpcy5wYXJlbnROb2RlJiYhZS5pc1RyaWdnZXImJnYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGUsITApKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZih2Lm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTt2LmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLHYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwodi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZigkLnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpdi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZSl7ZS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIiYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSx2LmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihlKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFlLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSksdi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLGUsITApfSk7cmV0dXJuITF9di5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7JC50ZXN0KHQubm9kZU5hbWUpJiYhdi5fZGF0YSh0LCJfY2hhbmdlX2F0dGFjaGVkIikmJih2LmV2ZW50LmFkZCh0LCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiYhZS5pc1NpbXVsYXRlZCYmIWUuaXNUcmlnZ2VyJiZ2LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxlLCEwKX0pLHYuX2RhdGEodCwiX2NoYW5nZV9hdHRhY2hlZCIsITApKX0pfSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYodGhpcyE9PXR8fGUuaXNTaW11bGF0ZWR8fGUuaXNUcmlnZ2VyfHx0LnR5cGUhPT0icmFkaW8iJiZ0LnR5cGUhPT0iY2hlY2tib3giKXJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gdi5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwhJC50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLHYuc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8di5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt2LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQsdi5ldmVudC5maXgoZSksITApfTt2LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7bisrPT09MCYmaS5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7LS1uPT09MCYmaS5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHYuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLG4scixpLHMpe3ZhciBvLHU7aWYodHlwZW9mIGU9PSJvYmplY3QiKXt0eXBlb2YgbiE9InN0cmluZyImJihyPXJ8fG4sbj10KTtmb3IodSBpbiBlKXRoaXMub24odSxuLHIsZVt1XSxzKTtyZXR1cm4gdGhpc31yPT1udWxsJiZpPT1udWxsPyhpPW4scj1uPXQpOmk9PW51bGwmJih0eXBlb2Ygbj09InN0cmluZyI/KGk9cixyPXQpOihpPXIscj1uLG49dCkpO2lmKGk9PT0hMSlpPWV0O2Vsc2UgaWYoIWkpcmV0dXJuIHRoaXM7cmV0dXJuIHM9PT0xJiYobz1pLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHYoKS5vZmYoZSksby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkuZ3VpZD1vLmd1aWR8fChvLmd1aWQ9di5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2LmV2ZW50LmFkZCh0aGlzLGUsaSxyLG4pfSl9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbihlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLHM7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIGk9ZS5oYW5kbGVPYmosdihlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoaS5uYW1lc3BhY2U/aS5vcmlnVHlwZSsiLiIraS5uYW1lc3BhY2U6aS5vcmlnVHlwZSxpLnNlbGVjdG9yLGkuaGFuZGxlciksdGhpcztpZih0eXBlb2YgZT09Im9iamVjdCIpe2ZvcihzIGluIGUpdGhpcy5vZmYocyxuLGVbc10pO3JldHVybiB0aGlzfWlmKG49PT0hMXx8dHlwZW9mIG49PSJmdW5jdGlvbiIpcj1uLG49dDtyZXR1cm4gcj09PSExJiYocj1ldCksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5ldmVudC5yZW1vdmUodGhpcyxlLHIsbil9KX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGxpdmU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2KHRoaXMuY29udGV4dCkub24oZSx0aGlzLnNlbGVjdG9yLHQsbiksdGhpc30sZGllOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYodGhpcy5jb250ZXh0KS5vZmYoZSx0aGlzLnNlbGVjdG9yfHwiKioiLHQpLHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe2lmKHRoaXNbMF0pcmV0dXJuIHYuZXZlbnQudHJpZ2dlcihlLHQsdGhpc1swXSwhMCl9LHRvZ2dsZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbj1lLmd1aWR8fHYuZ3VpZCsrLHI9MCxpPWZ1bmN0aW9uKG4pe3ZhciBpPSh2Ll9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2UuZ3VpZCl8fDApJXI7cmV0dXJuIHYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrZS5ndWlkLGkrMSksbi5wcmV2ZW50RGVmYXVsdCgpLHRbaV0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwhMX07aS5ndWlkPW47d2hpbGUocjx0Lmxlbmd0aCl0W3IrK10uZ3VpZD1uO3JldHVybiB0aGlzLmNsaWNrKGkpfSxob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX19KSx2LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt2LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG49PW51bGwmJihuPWUsZT1udWxsKSxhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9LFEudGVzdCh0KSYmKHYuZXZlbnQuZml4SG9va3NbdF09di5ldmVudC5rZXlIb29rcyksRy50ZXN0KHQpJiYodi5ldmVudC5maXhIb29rc1t0XT12LmV2ZW50Lm1vdXNlSG9va3MpfSksZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBudChlLHQsbixyKXtuPW58fFtdLHQ9dHx8Zzt2YXIgaSxzLGEsZixsPXQubm9kZVR5cGU7aWYoIWV8fHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gbjtpZihsIT09MSYmbCE9PTkpcmV0dXJuW107YT1vKHQpO2lmKCFhJiYhcilpZihpPVIuZXhlYyhlKSlpZihmPWlbMV0pe2lmKGw9PT05KXtzPXQuZ2V0RWxlbWVudEJ5SWQoZik7aWYoIXN8fCFzLnBhcmVudE5vZGUpcmV0dXJuIG47aWYocy5pZD09PWYpcmV0dXJuIG4ucHVzaChzKSxufWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYocz10Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZikpJiZ1KHQscykmJnMuaWQ9PT1mKXJldHVybiBuLnB1c2gocyksbn1lbHNle2lmKGlbMl0pcmV0dXJuIFMuYXBwbHkobix4LmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSwwKSksbjtpZigoZj1pWzNdKSYmWiYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBTLmFwcGx5KG4seC5jYWxsKHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmKSwwKSksbn1yZXR1cm4gdnQoZS5yZXBsYWNlKGosIiQxIiksdCxuLHIsYSl9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbj09PSJpbnB1dCImJnQudHlwZT09PWV9fWZ1bmN0aW9uIGl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKG49PT0iaW5wdXQifHxuPT09ImJ1dHRvbiIpJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBzdChlKXtyZXR1cm4gTihmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxOKGZ1bmN0aW9uKG4scil7dmFyIGkscz1lKFtdLG4ubGVuZ3RoLHQpLG89cy5sZW5ndGg7d2hpbGUoby0tKW5baT1zW29dXSYmKG5baV09IShyW2ldPW5baV0pKX0pfSl9ZnVuY3Rpb24gb3QoZSx0LG4pe2lmKGU9PT10KXJldHVybiBuO3ZhciByPWUubmV4dFNpYmxpbmc7d2hpbGUocil7aWYocj09PXQpcmV0dXJuLTE7cj1yLm5leHRTaWJsaW5nfXJldHVybiAxfWZ1bmN0aW9uIHV0KGUsdCl7dmFyIG4scixzLG8sdSxhLGYsbD1MW2RdW2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTt1PWUsYT1bXSxmPWkucHJlRmlsdGVyO3doaWxlKHUpe2lmKCFufHwocj1GLmV4ZWModSkpKXImJih1PXUuc2xpY2UoclswXS5sZW5ndGgpfHx1KSxhLnB1c2gocz1bXSk7bj0hMTtpZihyPUkuZXhlYyh1KSlzLnB1c2gobj1uZXcgbShyLnNoaWZ0KCkpKSx1PXUuc2xpY2Uobi5sZW5ndGgpLG4udHlwZT1yWzBdLnJlcGxhY2UoaiwiICIpO2ZvcihvIGluIGkuZmlsdGVyKShyPUpbb10uZXhlYyh1KSkmJighZltvXXx8KHI9ZltvXShyKSkpJiYocy5wdXNoKG49bmV3IG0oci5zaGlmdCgpKSksdT11LnNsaWNlKG4ubGVuZ3RoKSxuLnR5cGU9byxuLm1hdGNoZXM9cik7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/dS5sZW5ndGg6dT9udC5lcnJvcihlKTpMKGUsYSkuc2xpY2UoMCl9ZnVuY3Rpb24gYXQoZSx0LHIpe3ZhciBpPXQuZGlyLHM9ciYmdC5kaXI9PT0icGFyZW50Tm9kZSIsbz13Kys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLHIpe3doaWxlKHQ9dFtpXSlpZihzfHx0Lm5vZGVUeXBlPT09MSlyZXR1cm4gZSh0LG4scil9OmZ1bmN0aW9uKHQscix1KXtpZighdSl7dmFyIGEsZj1iKyIgIitvKyIgIixsPWYrbjt3aGlsZSh0PXRbaV0paWYoc3x8dC5ub2RlVHlwZT09PTEpe2lmKChhPXRbZF0pPT09bClyZXR1cm4gdC5zaXpzZXQ7aWYodHlwZW9mIGE9PSJzdHJpbmciJiZhLmluZGV4T2YoZik9PT0wKXtpZih0LnNpenNldClyZXR1cm4gdH1lbHNle3RbZF09bDtpZihlKHQscix1KSlyZXR1cm4gdC5zaXpzZXQ9ITAsdDt0LnNpenNldD0hMX19fWVsc2Ugd2hpbGUodD10W2ldKWlmKHN8fHQubm9kZVR5cGU9PT0xKWlmKGUodCxyLHUpKXJldHVybiB0fX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiBsdChlLHQsbixyLGkpe3ZhciBzLG89W10sdT0wLGE9ZS5sZW5ndGgsZj10IT1udWxsO2Zvcig7dTxhO3UrKylpZihzPWVbdV0paWYoIW58fG4ocyxyLGkpKW8ucHVzaChzKSxmJiZ0LnB1c2godSk7cmV0dXJuIG99ZnVuY3Rpb24gY3QoZSx0LG4scixpLHMpe3JldHVybiByJiYhcltkXSYmKHI9Y3QocikpLGkmJiFpW2RdJiYoaT1jdChpLHMpKSxOKGZ1bmN0aW9uKHMsbyx1LGEpe3ZhciBmLGwsYyxoPVtdLHA9W10sZD1vLmxlbmd0aCx2PXN8fGR0KHR8fCIqIix1Lm5vZGVUeXBlP1t1XTp1LFtdKSxtPWUmJihzfHwhdCk/bHQodixoLGUsdSxhKTp2LGc9bj9pfHwocz9lOmR8fHIpP1tdOm86bTtuJiZuKG0sZyx1LGEpO2lmKHIpe2Y9bHQoZyxwKSxyKGYsW10sdSxhKSxsPWYubGVuZ3RoO3doaWxlKGwtLSlpZihjPWZbbF0pZ1twW2xdXT0hKG1bcFtsXV09Yyl9aWYocyl7aWYoaXx8ZSl7aWYoaSl7Zj1bXSxsPWcubGVuZ3RoO3doaWxlKGwtLSkoYz1nW2xdKSYmZi5wdXNoKG1bbF09Yyk7aShudWxsLGc9W10sZixhKX1sPWcubGVuZ3RoO3doaWxlKGwtLSkoYz1nW2xdKSYmKGY9aT9ULmNhbGwocyxjKTpoW2xdKT4tMSYmKHNbZl09IShvW2ZdPWMpKX19ZWxzZSBnPWx0KGc9PT1vP2cuc3BsaWNlKGQsZy5sZW5ndGgpOmcpLGk/aShudWxsLG8sZyxhKTpTLmFwcGx5KG8sZyl9KX1mdW5jdGlvbiBodChlKXt2YXIgdCxuLHIscz1lLmxlbmd0aCxvPWkucmVsYXRpdmVbZVswXS50eXBlXSx1PW98fGkucmVsYXRpdmVbIiAiXSxhPW8/MTowLGY9YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSx1LCEwKSxsPWF0KGZ1bmN0aW9uKGUpe3JldHVybiBULmNhbGwodCxlKT4tMX0sdSwhMCksaD1bZnVuY3Rpb24oZSxuLHIpe3JldHVybiFvJiYocnx8biE9PWMpfHwoKHQ9bikubm9kZVR5cGU/ZihlLG4scik6bChlLG4scikpfV07Zm9yKDthPHM7YSsrKWlmKG49aS5yZWxhdGl2ZVtlW2FdLnR5cGVdKWg9W2F0KGZ0KGgpLG4pXTtlbHNle249aS5maWx0ZXJbZVthXS50eXBlXS5hcHBseShudWxsLGVbYV0ubWF0Y2hlcyk7aWYobltkXSl7cj0rK2E7Zm9yKDtyPHM7cisrKWlmKGkucmVsYXRpdmVbZVtyXS50eXBlXSlicmVhaztyZXR1cm4gY3QoYT4xJiZmdChoKSxhPjEmJmUuc2xpY2UoMCxhLTEpLmpvaW4oIiIpLnJlcGxhY2UoaiwiJDEiKSxuLGE8ciYmaHQoZS5zbGljZShhLHIpKSxyPHMmJmh0KGU9ZS5zbGljZShyKSkscjxzJiZlLmpvaW4oIiIpKX1oLnB1c2gobil9cmV0dXJuIGZ0KGgpfWZ1bmN0aW9uIHB0KGUsdCl7dmFyIHI9dC5sZW5ndGg+MCxzPWUubGVuZ3RoPjAsbz1mdW5jdGlvbih1LGEsZixsLGgpe3ZhciBwLGQsdixtPVtdLHk9MCx3PSIwIix4PXUmJltdLFQ9aCE9bnVsbCxOPWMsQz11fHxzJiZpLmZpbmQuVEFHKCIqIixoJiZhLnBhcmVudE5vZGV8fGEpLGs9Yis9Tj09bnVsbD8xOk1hdGguRTtUJiYoYz1hIT09ZyYmYSxuPW8uZWwpO2Zvcig7KHA9Q1t3XSkhPW51bGw7dysrKXtpZihzJiZwKXtmb3IoZD0wO3Y9ZVtkXTtkKyspaWYodihwLGEsZikpe2wucHVzaChwKTticmVha31UJiYoYj1rLG49KytvLmVsKX1yJiYoKHA9IXYmJnApJiZ5LS0sdSYmeC5wdXNoKHApKX15Kz13O2lmKHImJnchPT15KXtmb3IoZD0wO3Y9dFtkXTtkKyspdih4LG0sYSxmKTtpZih1KXtpZih5PjApd2hpbGUody0tKSF4W3ddJiYhbVt3XSYmKG1bd109RS5jYWxsKGwpKTttPWx0KG0pfVMuYXBwbHkobCxtKSxUJiYhdSYmbS5sZW5ndGg+MCYmeSt0Lmxlbmd0aD4xJiZudC51bmlxdWVTb3J0KGwpfXJldHVybiBUJiYoYj1rLGM9TikseH07cmV0dXJuIG8uZWw9MCxyP04obyk6b31mdW5jdGlvbiBkdChlLHQsbil7dmFyIHI9MCxpPXQubGVuZ3RoO2Zvcig7cjxpO3IrKyludChlLHRbcl0sbik7cmV0dXJuIG59ZnVuY3Rpb24gdnQoZSx0LG4scixzKXt2YXIgbyx1LGYsbCxjLGg9dXQoZSkscD1oLmxlbmd0aDtpZighciYmaC5sZW5ndGg9PT0xKXt1PWhbMF09aFswXS5zbGljZSgwKTtpZih1Lmxlbmd0aD4yJiYoZj11WzBdKS50eXBlPT09IklEIiYmdC5ub2RlVHlwZT09PTkmJiFzJiZpLnJlbGF0aXZlW3VbMV0udHlwZV0pe3Q9aS5maW5kLklEKGYubWF0Y2hlc1swXS5yZXBsYWNlKCQsIiIpLHQscylbMF07aWYoIXQpcmV0dXJuIG47ZT1lLnNsaWNlKHUuc2hpZnQoKS5sZW5ndGgpfWZvcihvPUouUE9TLnRlc3QoZSk/LTE6dS5sZW5ndGgtMTtvPj0wO28tLSl7Zj11W29dO2lmKGkucmVsYXRpdmVbbD1mLnR5cGVdKWJyZWFrO2lmKGM9aS5maW5kW2xdKWlmKHI9YyhmLm1hdGNoZXNbMF0ucmVwbGFjZSgkLCIiKSx6LnRlc3QodVswXS50eXBlKSYmdC5wYXJlbnROb2RlfHx0LHMpKXt1LnNwbGljZShvLDEpLGU9ci5sZW5ndGgmJnUuam9pbigiIik7aWYoIWUpcmV0dXJuIFMuYXBwbHkobix4LmNhbGwociwwKSksbjticmVha319fXJldHVybiBhKGUsaCkocix0LHMsbix6LnRlc3QoZSkpLG59ZnVuY3Rpb24gbXQoKXt9dmFyIG4scixpLHMsbyx1LGEsZixsLGMsaD0hMCxwPSJ1bmRlZmluZWQiLGQ9KCJzaXpjYWNoZSIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgiLiIsIiIpLG09U3RyaW5nLGc9ZS5kb2N1bWVudCx5PWcuZG9jdW1lbnRFbGVtZW50LGI9MCx3PTAsRT1bXS5wb3AsUz1bXS5wdXNoLHg9W10uc2xpY2UsVD1bXS5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDt0PG47dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxOPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbZF09dD09bnVsbHx8dCxlfSxDPWZ1bmN0aW9uKCl7dmFyIGU9e30sdD1bXTtyZXR1cm4gTihmdW5jdGlvbihuLHIpe3JldHVybiB0LnB1c2gobik+aS5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbdC5zaGlmdCgpXSxlW24rIiAiXT1yfSxlKX0saz1DKCksTD1DKCksQT1DKCksTz0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLF89TS5yZXBsYWNlKCJ3IiwidyMiKSxEPSIoWypeJHwhfl0/PSkiLFA9IlxcWyIrTysiKigiK00rIikiK08rIiooPzoiK0QrTysiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrXysiKXwpfCkiK08rIipcXF0iLEg9IjooIitNKyIpKD86XFwoKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzooPzoiK1ArIil8W146XXxcXFxcLikqfC4qKSlcXCl8KSIsQj0iOihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK08rIiooKD86LVxcZCk/XFxkKikiK08rIipcXCl8KSg/PVteLV18JCkiLGo9bmV3IFJlZ0V4cCgiXiIrTysiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitPKyIrJCIsImciKSxGPW5ldyBSZWdFeHAoIl4iK08rIiosIitPKyIqIiksST1uZXcgUmVnRXhwKCJeIitPKyIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIitPKyIqIikscT1uZXcgUmVnRXhwKEgpLFI9L14oPzojKFtcd1wtXSspfChcdyspfFwuKFtcd1wtXSspKSQvLFU9L146bm90Lyx6PS9bXHgyMFx0XHJcblxmXSpbK35dLyxXPS86bm90XCgkLyxYPS9oXGQvaSxWPS9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksJD0vXFwoPyFcXCkvZyxKPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLE5BTUU6bmV3IFJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIrTSsiKVsnXCJdP1xcXSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTS5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0gpLFBPUzpuZXcgUmVnRXhwKEIsImkiKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIrTysiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTysiKig/OihbKy1dfCkiK08rIiooXFxkKyl8KSkiK08rIipcXCl8KSIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTysiKls+K35dfCIrQiwiaSIpfSxLPWZ1bmN0aW9uKGUpe3ZhciB0PWcuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiBlKHQpfWNhdGNoKG4pe3JldHVybiExfWZpbmFsbHl7dD1udWxsfX0sUT1LKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKGcuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksRz1LKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsZS5maXJzdENoaWxkJiZ0eXBlb2YgZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PXAmJmUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIjIn0pLFk9SyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHNlbGVjdD48L3NlbGVjdD4iO3ZhciB0PXR5cGVvZiBlLmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7cmV0dXJuIHQhPT0iYm9vbGVhbiImJnQhPT0ic3RyaW5nIn0pLFo9SyhmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiIsIWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8IWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD8hMTooZS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0yKX0pLGV0PUsoZnVuY3Rpb24oZSl7ZS5pZD1kKzAsZS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrZCsiJz48L2E+PGRpdiBuYW1lPSciK2QrIic+PC9kaXY+Iix5Lmluc2VydEJlZm9yZShlLHkuZmlyc3RDaGlsZCk7dmFyIHQ9Zy5nZXRFbGVtZW50c0J5TmFtZSYmZy5nZXRFbGVtZW50c0J5TmFtZShkKS5sZW5ndGg9PT0yK2cuZ2V0RWxlbWVudHNCeU5hbWUoZCswKS5sZW5ndGg7cmV0dXJuIHI9IWcuZ2V0RWxlbWVudEJ5SWQoZCkseS5yZW1vdmVDaGlsZChlKSx0fSk7dHJ5e3guY2FsbCh5LmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2godHQpe3g9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IoO3Q9dGhpc1tlXTtlKyspbi5wdXNoKHQpO3JldHVybiBufX1udC5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG50KGUsbnVsbCxudWxsLHQpfSxudC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnQodCxudWxsLG51bGwsW2VdKS5sZW5ndGg+MH0scz1udC5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZihpPT09MXx8aT09PTl8fGk9PT0xMSl7aWYodHlwZW9mIGUudGV4dENvbnRlbnQ9PSJzdHJpbmciKXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1zKGUpfWVsc2UgaWYoaT09PTN8fGk9PT00KXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIGZvcig7dD1lW3JdO3IrKyluKz1zKHQpO3JldHVybiBufSxvPW50LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdD90Lm5vZGVOYW1lIT09IkhUTUwiOiExfSx1PW50LmNvbnRhaW5zPXkuY29udGFpbnM/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm5vZGVUeXBlPT09OT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISEociYmci5ub2RlVHlwZT09PTEmJm4uY29udGFpbnMmJm4uY29udGFpbnMocikpfTp5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJiEhKGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmMTYpfTpmdW5jdGlvbihlLHQpe3doaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxudC5hdHRyPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1vKGUpO3JldHVybiByfHwodD10LnRvTG93ZXJDYXNlKCkpLChuPWkuYXR0ckhhbmRsZVt0XSk/bihlKTpyfHxZP2UuZ2V0QXR0cmlidXRlKHQpOihuPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSxuP3R5cGVvZiBlW3RdPT0iYm9vbGVhbiI/ZVt0XT90Om51bGw6bi5zcGVjaWZpZWQ/bi52YWx1ZTpudWxsOm51bGwpfSxpPW50LnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOk4sbWF0Y2g6SixhdHRySGFuZGxlOkc/e306e2hyZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LGZpbmQ6e0lEOnI/ZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRCeUlkIT09cCYmIW4pe3ZhciByPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIHImJnIucGFyZW50Tm9kZT9bcl06W119fTpmdW5jdGlvbihlLG4scil7aWYodHlwZW9mIG4uZ2V0RWxlbWVudEJ5SWQhPT1wJiYhcil7dmFyIGk9bi5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gaT9pLmlkPT09ZXx8dHlwZW9mIGkuZ2V0QXR0cmlidXRlTm9kZSE9PXAmJmkuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZT09PWU/W2ldOnQ6W119fSxUQUc6UT9mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lIT09cClyZXR1cm4gdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKGU9PT0iKiIpe3ZhciByLGk9W10scz0wO2Zvcig7cj1uW3NdO3MrKylyLm5vZGVUeXBlPT09MSYmaS5wdXNoKHIpO3JldHVybiBpfXJldHVybiBufSxOQU1FOmV0JiZmdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlOYW1lIT09cClyZXR1cm4gdC5nZXRFbGVtZW50c0J5TmFtZShuYW1lKX0sQ0xBU1M6WiYmZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1wJiYhbilyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfX0scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKCQsIiIpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKCQsIiIpLGVbMl09PT0ifj0iJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLGVbMV09PT0ibnRoIj8oZVsyXXx8bnQuZXJyb3IoZVswXSksZVszXT0rKGVbM10/ZVs0XSsoZVs1XXx8MSk6MiooZVsyXT09PSJldmVuInx8ZVsyXT09PSJvZGQiKSksZVs0XT0rKGVbNl0rZVs3XXx8ZVsyXT09PSJvZGQiKSk6ZVsyXSYmbnQuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG47aWYoSi5DSElMRC50ZXN0KGVbMF0pKXJldHVybiBudWxsO2lmKGVbM10pZVsyXT1lWzNdO2Vsc2UgaWYodD1lWzRdKXEudGVzdCh0KSYmKG49dXQodCwhMCkpJiYobj10LmluZGV4T2YoIikiLHQubGVuZ3RoLW4pLXQubGVuZ3RoKSYmKHQ9dC5zbGljZSgwLG4pLGVbMF09ZVswXS5zbGljZSgwLG4pKSxlWzJdPXQ7cmV0dXJuIGUuc2xpY2UoMCwzKX19LGZpbHRlcjp7SUQ6cj9mdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoJCwiIiksZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKCJpZCIpPT09ZX19OmZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgkLCIiKSxmdW5jdGlvbih0KXt2YXIgbj10eXBlb2YgdC5nZXRBdHRyaWJ1dGVOb2RlIT09cCYmdC5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVlPT09ZX19LFRBRzpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSIqIj9mdW5jdGlvbigpe3JldHVybiEwfTooZT1lLnJlcGxhY2UoJCwiIikudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZX0pfSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1rW2RdW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitPKyIpIitlKyIoIitPKyJ8JCkiKSkmJmsoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KGUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1wJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLGkpe3ZhciBzPW50LmF0dHIocixlKTtyZXR1cm4gcz09bnVsbD90PT09IiE9Ijp0PyhzKz0iIix0PT09Ij0iP3M9PT1uOnQ9PT0iIT0iP3MhPT1uOnQ9PT0iXj0iP24mJnMuaW5kZXhPZihuKT09PTA6dD09PSIqPSI/biYmcy5pbmRleE9mKG4pPi0xOnQ9PT0iJD0iP24mJnMuc3Vic3RyKHMubGVuZ3RoLW4ubGVuZ3RoKT09PW46dD09PSJ+PSI/KCIgIitzKyIgIikuaW5kZXhPZihuKT4tMTp0PT09Inw9Ij9zPT09bnx8cy5zdWJzdHIoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlPT09Im50aCI/ZnVuY3Rpb24oZSl7dmFyIHQsaSxzPWUucGFyZW50Tm9kZTtpZihuPT09MSYmcj09PTApcmV0dXJuITA7aWYocyl7aT0wO2Zvcih0PXMuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZylpZih0Lm5vZGVUeXBlPT09MSl7aSsrO2lmKGU9PT10KWJyZWFrfX1yZXR1cm4gaS09cixpPT09bnx8aSVuPT09MCYmaS9uPj0wfTpmdW5jdGlvbih0KXt2YXIgbj10O3N3aXRjaChlKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKG49bi5wcmV2aW91c1NpYmxpbmcpaWYobi5ub2RlVHlwZT09PTEpcmV0dXJuITE7aWYoZT09PSJmaXJzdCIpcmV0dXJuITA7bj10O2Nhc2UibGFzdCI6d2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG4ubm9kZVR5cGU9PT0xKXJldHVybiExO3JldHVybiEwfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9aS5wc2V1ZG9zW2VdfHxpLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8bnQuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gcltkXT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxpLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9OKGZ1bmN0aW9uKGUsbil7dmFyIGkscz1yKGUsdCksbz1zLmxlbmd0aDt3aGlsZShvLS0paT1ULmNhbGwoZSxzW29dKSxlW2ldPSEobltpXT1zW29dKX0pOmZ1bmN0aW9uKGUpe3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6TihmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9YShlLnJlcGxhY2UoaiwiJDEiKSk7cmV0dXJuIHJbZF0/TihmdW5jdGlvbihlLHQsbixpKXt2YXIgcyxvPXIoZSxudWxsLGksW10pLHU9ZS5sZW5ndGg7d2hpbGUodS0tKWlmKHM9b1t1XSllW3VdPSEodFt1XT1zKX0pOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdFswXT1lLHIodCxudWxsLHMsbiksIW4ucG9wKCl9fSksaGFzOk4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOk4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8cyh0KSkuaW5kZXhPZihlKT4tMX19KSxlbmFibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09ImlucHV0IiYmISFlLmNoZWNrZWR8fHQ9PT0ib3B0aW9uIiYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4haS5wc2V1ZG9zLmVtcHR5KGUpfSxlbXB0eTpmdW5jdGlvbihlKXt2YXIgdDtlPWUuZmlyc3RDaGlsZDt3aGlsZShlKXtpZihlLm5vZGVOYW1lPiJAInx8KHQ9ZS5ub2RlVHlwZSk9PT0zfHx0PT09NClyZXR1cm4hMTtlPWUubmV4dFNpYmxpbmd9cmV0dXJuITB9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gWC50ZXN0KGUubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PWUudHlwZSk9PT0idGV4dCImJigobj1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKT09bnVsbHx8bi50b0xvd2VyQ2FzZSgpPT09dCl9LHJhZGlvOnJ0KCJyYWRpbyIpLGNoZWNrYm94OnJ0KCJjaGVja2JveCIpLGZpbGU6cnQoImZpbGUiKSxwYXNzd29yZDpydCgicGFzc3dvcmQiKSxpbWFnZTpydCgiaW1hZ2UiKSxzdWJtaXQ6aXQoInN1Ym1pdCIpLHJlc2V0Oml0KCJyZXNldCIpLGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiJiZlLnR5cGU9PT0iYnV0dG9uInx8dD09PSJidXR0b24ifSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gVi50ZXN0KGUubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQ7cmV0dXJuIGU9PT10LmFjdGl2ZUVsZW1lbnQmJighdC5oYXNGb2N1c3x8dC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sYWN0aXZlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9LGZpcnN0OnN0KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpzdChmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6c3QoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjpzdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpzdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnN0KGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOy0tcj49MDspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6c3QoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0sZj15LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PyhsPSEwLDApOighZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjQpPy0xOjF9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDtpZihlLnNvdXJjZUluZGV4JiZ0LnNvdXJjZUluZGV4KXJldHVybiBlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7dmFyIG4scixpPVtdLHM9W10sbz1lLnBhcmVudE5vZGUsdT10LnBhcmVudE5vZGUsYT1vO2lmKG89PT11KXJldHVybiBvdChlLHQpO2lmKCFvKXJldHVybi0xO2lmKCF1KXJldHVybiAxO3doaWxlKGEpaS51bnNoaWZ0KGEpLGE9YS5wYXJlbnROb2RlO2E9dTt3aGlsZShhKXMudW5zaGlmdChhKSxhPWEucGFyZW50Tm9kZTtuPWkubGVuZ3RoLHI9cy5sZW5ndGg7Zm9yKHZhciBmPTA7ZjxuJiZmPHI7ZisrKWlmKGlbZl0hPT1zW2ZdKXJldHVybiBvdChpW2ZdLHNbZl0pO3JldHVybiBmPT09bj9vdChlLHNbZl0sLTEpOm90KGlbZl0sdCwxKX0sWzAsMF0uc29ydChmKSxoPSFsLG50LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTEsaT0wO2w9aCxlLnNvcnQoZik7aWYobCl7Zm9yKDt0PWVbcl07cisrKXQ9PT1lW3ItMV0mJihpPW4ucHVzaChyKSk7d2hpbGUoaS0tKWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIGV9LG50LmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sYT1udC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLHM9QVtkXVtlKyIgIl07aWYoIXMpe3R8fCh0PXV0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlzPWh0KHRbbl0pLHNbZF0/ci5wdXNoKHMpOmkucHVzaChzKTtzPUEoZSxwdChpLHIpKX1yZXR1cm4gc30sZy5xdWVyeVNlbGVjdG9yQWxsJiZmdW5jdGlvbigpe3ZhciBlLHQ9dnQsbj0vJ3xcXC9nLHI9L1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxdL2csaT1bIjpmb2N1cyJdLHM9WyI6YWN0aXZlIl0sdT15Lm1hdGNoZXNTZWxlY3Rvcnx8eS5tb3pNYXRjaGVzU2VsZWN0b3J8fHkud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHx5Lm9NYXRjaGVzU2VsZWN0b3J8fHkubXNNYXRjaGVzU2VsZWN0b3I7SyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxpLnB1c2goIlxcWyIrTysiKig/OmNoZWNrZWR8ZGlzYWJsZWR8aXNtYXB8bXVsdGlwbGV8cmVhZG9ubHl8c2VsZWN0ZWR8dmFsdWUpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8aS5wdXNoKCI6Y2hlY2tlZCIpfSksSyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHAgdGVzdD0nJz48L3A+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0ZXN0Xj0nJ10iKS5sZW5ndGgmJmkucHVzaCgiWypeJF09IitPKyIqKD86XCJcInwnJykiKSxlLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J2hpZGRlbicvPiIsZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8aS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpfSksaT1uZXcgUmVnRXhwKGkuam9pbigifCIpKSx2dD1mdW5jdGlvbihlLHIscyxvLHUpe2lmKCFvJiYhdSYmIWkudGVzdChlKSl7dmFyIGEsZixsPSEwLGM9ZCxoPXIscD1yLm5vZGVUeXBlPT09OSYmZTtpZihyLm5vZGVUeXBlPT09MSYmci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe2E9dXQoZSksKGw9ci5nZXRBdHRyaWJ1dGUoImlkIikpP2M9bC5yZXBsYWNlKG4sIlxcJCYiKTpyLnNldEF0dHJpYnV0ZSgiaWQiLGMpLGM9IltpZD0nIitjKyInXSAiLGY9YS5sZW5ndGg7d2hpbGUoZi0tKWFbZl09YythW2ZdLmpvaW4oIiIpO2g9ei50ZXN0KGUpJiZyLnBhcmVudE5vZGV8fHIscD1hLmpvaW4oIiwiKX1pZihwKXRyeXtyZXR1cm4gUy5hcHBseShzLHguY2FsbChoLnF1ZXJ5U2VsZWN0b3JBbGwocCksMCkpLHN9Y2F0Y2godil7fWZpbmFsbHl7bHx8ci5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fXJldHVybiB0KGUscixzLG8sdSl9LHUmJihLKGZ1bmN0aW9uKHQpe2U9dS5jYWxsKHQsImRpdiIpO3RyeXt1LmNhbGwodCwiW3Rlc3QhPScnXTpzaXp6bGUiKSxzLnB1c2goIiE9IixIKX1jYXRjaChuKXt9fSkscz1uZXcgUmVnRXhwKHMuam9pbigifCIpKSxudC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24odCxuKXtuPW4ucmVwbGFjZShyLCI9JyQxJ10iKTtpZighbyh0KSYmIXMudGVzdChuKSYmIWkudGVzdChuKSl0cnl7dmFyIGE9dS5jYWxsKHQsbik7aWYoYXx8ZXx8dC5kb2N1bWVudCYmdC5kb2N1bWVudC5ub2RlVHlwZSE9PTExKXJldHVybiBhfWNhdGNoKGYpe31yZXR1cm4gbnQobixudWxsLG51bGwsW3RdKS5sZW5ndGg+MH0pfSgpLGkucHNldWRvcy5udGg9aS5wc2V1ZG9zLmVxLGkuZmlsdGVycz1tdC5wcm90b3R5cGU9aS5wc2V1ZG9zLGkuc2V0RmlsdGVycz1uZXcgbXQsbnQuYXR0cj12LmF0dHIsdi5maW5kPW50LHYuZXhwcj1udC5zZWxlY3RvcnMsdi5leHByWyI6Il09di5leHByLnBzZXVkb3Msdi51bmlxdWU9bnQudW5pcXVlU29ydCx2LnRleHQ9bnQuZ2V0VGV4dCx2LmlzWE1MRG9jPW50LmlzWE1MLHYuY29udGFpbnM9bnQuY29udGFpbnN9KGUpO3ZhciBudD0vVW50aWwkLyxydD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxpdD0vXi5bXjojXFtcLixdKiQvLHN0PXYuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsb3Q9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07di5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGkscyxvLHU9dGhpcztpZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIHYoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MCxuPXUubGVuZ3RoO3Q8bjt0KyspaWYodi5jb250YWlucyh1W3RdLHRoaXMpKXJldHVybiEwfSk7bz10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsZSk7Zm9yKHQ9MCxuPXRoaXMubGVuZ3RoO3Q8bjt0Kyspe3I9by5sZW5ndGgsdi5maW5kKGUsdGhpc1t0XSxvKTtpZih0PjApZm9yKGk9cjtpPG8ubGVuZ3RoO2krKylmb3Iocz0wO3M8cjtzKyspaWYob1tzXT09PW9baV0pe28uc3BsaWNlKGktLSwxKTticmVha319cmV0dXJuIG99LGhhczpmdW5jdGlvbihlKXt2YXIgdCxuPXYoZSx0aGlzKSxyPW4ubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZih2LmNvbnRhaW5zKHRoaXMsblt0XSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLGUsITEpLCJub3QiLGUpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsZSwhMCksImZpbHRlciIsZSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhZSYmKHR5cGVvZiBlPT0ic3RyaW5nIj9zdC50ZXN0KGUpP3YoZSx0aGlzLmNvbnRleHQpLmluZGV4KHRoaXNbMF0pPj0wOnYuZmlsdGVyKGUsdGhpcykubGVuZ3RoPjA6dGhpcy5maWx0ZXIoZSkubGVuZ3RoPjApfSxjbG9zZXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wLGk9dGhpcy5sZW5ndGgscz1bXSxvPXN0LnRlc3QoZSl8fHR5cGVvZiBlIT0ic3RyaW5nIj92KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7cjxpO3IrKyl7bj10aGlzW3JdO3doaWxlKG4mJm4ub3duZXJEb2N1bWVudCYmbiE9PXQmJm4ubm9kZVR5cGUhPT0xMSl7aWYobz9vLmluZGV4KG4pPi0xOnYuZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSl7cy5wdXNoKG4pO2JyZWFrfW49bi5wYXJlbnROb2RlfX1yZXR1cm4gcz1zLmxlbmd0aD4xP3YudW5pcXVlKHMpOnMsdGhpcy5wdXNoU3RhY2socywiY2xvc2VzdCIsZSl9LGluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlP3R5cGVvZiBlPT0ic3RyaW5nIj92LmluQXJyYXkodGhpc1swXSx2KGUpKTp2LmluQXJyYXkoZS5qcXVlcnk/ZVswXTplLHRoaXMpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlPT0ic3RyaW5nIj92KGUsdCk6di5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj12Lm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHV0KG5bMF0pfHx1dChyWzBdKT9yOnYudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQoZT09bnVsbD90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksdi5mbi5hbmRTZWxmPXYuZm4uYWRkQmFjayx2LmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQubm9kZVR5cGUhPT0xMT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZGlyKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5kaXIoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGF0KGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIGF0KGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB2LmRpcihlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB2LmRpcihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5kaXIoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRpcihlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gdi5zaWJsaW5nKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gdi5zaWJsaW5nKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB2Lm5vZGVOYW1lKGUsImlmcmFtZSIpP2UuY29udGVudERvY3VtZW50fHxlLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6di5tZXJnZShbXSxlLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oZSx0KXt2LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9di5tYXAodGhpcyx0LG4pO3JldHVybiBudC50ZXN0KGUpfHwocj1uKSxyJiZ0eXBlb2Ygcj09InN0cmluZyImJihpPXYuZmlsdGVyKHIsaSkpLGk9dGhpcy5sZW5ndGg+MSYmIW90W2VdP3YudW5pcXVlKGkpOmksdGhpcy5sZW5ndGg+MSYmcnQudGVzdChlKSYmKGk9aS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGksZSxsLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfX0pLHYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSx0Lmxlbmd0aD09PTE/di5maW5kLm1hdGNoZXNTZWxlY3Rvcih0WzBdLGUpP1t0WzBdXTpbXTp2LmZpbmQubWF0Y2hlcyhlLHQpfSxkaXI6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPVtdLHM9ZVtuXTt3aGlsZShzJiZzLm5vZGVUeXBlIT09OSYmKHI9PT10fHxzLm5vZGVUeXBlIT09MXx8IXYocykuaXMocikpKXMubm9kZVR5cGU9PT0xJiZpLnB1c2gocykscz1zW25dO3JldHVybiBpfSxzaWJsaW5nOmZ1bmN0aW9uKGUsdCl7dmFyIG49W107Zm9yKDtlO2U9ZS5uZXh0U2libGluZyllLm5vZGVUeXBlPT09MSYmZSE9PXQmJm4ucHVzaChlKTtyZXR1cm4gbn19KTt2YXIgY3Q9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGh0PS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2cscHQ9L15ccysvLGR0PS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksdnQ9LzwoW1x3Ol0rKS8sbXQ9Lzx0Ym9keS9pLGd0PS88fCYjP1x3KzsvLHl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksYnQ9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSx3dD1uZXcgUmVnRXhwKCI8KD86IitjdCsiKVtcXHMvPl0iLCJpIiksRXQ9L14oPzpjaGVja2JveHxyYWRpbykkLyxTdD0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSx4dD0vXC8oamF2YXxlY21hKXNjcmlwdC9pLFR0PS9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9PlxzKiQvZyxOdD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfSxDdD1sdChpKSxrdD1DdC5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtOdC5vcHRncm91cD1OdC5vcHRpb24sTnQudGJvZHk9TnQudGZvb3Q9TnQuY29sZ3JvdXA9TnQuY2FwdGlvbj1OdC50aGVhZCxOdC50aD1OdC50ZCx2LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KE50Ll9kZWZhdWx0PVsxLCJYPGRpdj4iLCI8L2Rpdj4iXSksdi5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P3YudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGkpLmNyZWF0ZVRleHROb2RlKGUpKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSx3cmFwQWxsOmZ1bmN0aW9uKGUpe2lmKHYuaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3YodGhpcykud3JhcEFsbChlLmNhbGwodGhpcyx0KSl9KTtpZih0aGlzWzBdKXt2YXIgdD12KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdENoaWxkJiZlLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWU9ZS5maXJzdENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dih0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD12LmlzRnVuY3Rpb24oZSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt2KHRoaXMpLndyYXBBbGwodD9lLmNhbGwodGhpcyxuKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7di5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fHYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oZSl7KHRoaXMubm9kZVR5cGU9PT0xfHx0aGlzLm5vZGVUeXBlPT09MTEpJiZ0aGlzLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oZSl7KHRoaXMubm9kZVR5cGU9PT0xfHx0aGlzLm5vZGVUeXBlPT09MTEpJiZ0aGlzLmluc2VydEJlZm9yZShlLHRoaXMuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9uKCl7aWYoIXV0KHRoaXNbMF0pKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgZT12LmNsZWFuKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWVyZ2UoZSx0aGlzKSwiYmVmb3JlIix0aGlzLnNlbGVjdG9yKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYoIXV0KHRoaXNbMF0pKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgZT12LmNsZWFuKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWVyZ2UodGhpcyxlKSwiYWZ0ZXIiLHRoaXMuc2VsZWN0b3IpfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2Zvcig7KG49dGhpc1tyXSkhPW51bGw7cisrKWlmKCFlfHx2LmZpbHRlcihlLFtuXSkubGVuZ3RoKSF0JiZuLm5vZGVUeXBlPT09MSYmKHYuY2xlYW5EYXRhKG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksdi5jbGVhbkRhdGEoW25dKSksbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobik7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Zvcig7KGU9dGhpc1t0XSkhPW51bGw7dCsrKXtlLm5vZGVUeXBlPT09MSYmdi5jbGVhbkRhdGEoZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTt3aGlsZShlLmZpcnN0Q2hpbGQpZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPWU9PW51bGw/ITE6ZSx0PXQ9PW51bGw/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHYuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7dmFyIG49dGhpc1swXXx8e30scj0wLGk9dGhpcy5sZW5ndGg7aWYoZT09PXQpcmV0dXJuIG4ubm9kZVR5cGU9PT0xP24uaW5uZXJIVE1MLnJlcGxhY2UoaHQsIiIpOnQ7aWYodHlwZW9mIGU9PSJzdHJpbmciJiYheXQudGVzdChlKSYmKHYuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwhd3QudGVzdChlKSkmJih2LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFwdC50ZXN0KGUpKSYmIU50Wyh2dC5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1lLnJlcGxhY2UoZHQsIjwkMT48LyQyPiIpO3RyeXtmb3IoO3I8aTtyKyspbj10aGlzW3JdfHx7fSxuLm5vZGVUeXBlPT09MSYmKHYuY2xlYW5EYXRhKG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksbi5pbm5lckhUTUw9ZSk7bj0wfWNhdGNoKHMpe319biYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihlKXtyZXR1cm4gdXQodGhpc1swXSk/dGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2sodih2LmlzRnVuY3Rpb24oZSk/ZSgpOmUpLCJyZXBsYWNlV2l0aCIsZSk6dGhpczp2LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXYodGhpcykscj1uLmh0bWwoKTtuLnJlcGxhY2VXaXRoKGUuY2FsbCh0aGlzLHQscikpfSk6KHR5cGVvZiBlIT0ic3RyaW5nIiYmKGU9dihlKS5kZXRhY2goKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0U2libGluZyxuPXRoaXMucGFyZW50Tm9kZTt2KHRoaXMpLnJlbW92ZSgpLHQ/dih0KS5iZWZvcmUoZSk6dihuKS5hcHBlbmQoZSl9KSl9LGRldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZW1vdmUoZSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGUsbixyKXtlPVtdLmNvbmNhdC5hcHBseShbXSxlKTt2YXIgaSxzLG8sdSxhPTAsZj1lWzBdLGw9W10sYz10aGlzLmxlbmd0aDtpZighdi5zdXBwb3J0LmNoZWNrQ2xvbmUmJmM+MSYmdHlwZW9mIGY9PSJzdHJpbmciJiZTdC50ZXN0KGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2KHRoaXMpLmRvbU1hbmlwKGUsbixyKX0pO2lmKHYuaXNGdW5jdGlvbihmKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPXYodGhpcyk7ZVswXT1mLmNhbGwodGhpcyxpLG4/cy5odG1sKCk6dCkscy5kb21NYW5pcChlLG4scil9KTtpZih0aGlzWzBdKXtpPXYuYnVpbGRGcmFnbWVudChlLHRoaXMsbCksbz1pLmZyYWdtZW50LHM9by5maXJzdENoaWxkLG8uY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiYobz1zKTtpZihzKXtuPW4mJnYubm9kZU5hbWUocywidHIiKTtmb3IodT1pLmNhY2hlYWJsZXx8Yy0xO2E8YzthKyspci5jYWxsKG4mJnYubm9kZU5hbWUodGhpc1thXSwidGFibGUiKT9MdCh0aGlzW2FdLCJ0Ym9keSIpOnRoaXNbYV0sYT09PXU/bzp2LmNsb25lKG8sITAsITApKX1vPXM9bnVsbCxsLmxlbmd0aCYmdi5lYWNoKGwsZnVuY3Rpb24oZSx0KXt0LnNyYz92LmFqYXg/di5hamF4KHt1cmw6dC5zcmMsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KTp2LmVycm9yKCJubyBhamF4Iik6di5nbG9iYWxFdmFsKCh0LnRleHR8fHQudGV4dENvbnRlbnR8fHQuaW5uZXJIVE1MfHwiIikucmVwbGFjZShUdCwiIikpLHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSl9cmV0dXJuIHRoaXN9fSksdi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLHUsYT1lWzBdO3JldHVybiBuPW58fGksbj0hbi5ub2RlVHlwZSYmblswXXx8bixuPW4ub3duZXJEb2N1bWVudHx8bixlLmxlbmd0aD09PTEmJnR5cGVvZiBhPT0ic3RyaW5nIiYmYS5sZW5ndGg8NTEyJiZuPT09aSYmYS5jaGFyQXQoMCk9PT0iPCImJiFidC50ZXN0KGEpJiYodi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFTdC50ZXN0KGEpKSYmKHYuc3VwcG9ydC5odG1sNUNsb25lfHwhd3QudGVzdChhKSkmJihvPSEwLHM9di5mcmFnbWVudHNbYV0sdT1zIT09dCksc3x8KHM9bi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksdi5jbGVhbihlLG4scyxyKSxvJiYodi5mcmFnbWVudHNbYV09dSYmcykpLHtmcmFnbWVudDpzLGNhY2hlYWJsZTpvfX0sdi5mcmFnbWVudHM9e30sdi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt2LmZuW2VdPWZ1bmN0aW9uKG4pe3ZhciByLGk9MCxzPVtdLG89dihuKSx1PW8ubGVuZ3RoLGE9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoKGE9PW51bGx8fGEmJmEubm9kZVR5cGU9PT0xMSYmYS5jaGlsZE5vZGVzLmxlbmd0aD09PTEpJiZ1PT09MSlyZXR1cm4gb1t0XSh0aGlzWzBdKSx0aGlzO2Zvcig7aTx1O2krKylyPShpPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCksdihvW2ldKVt0XShyKSxzPXMuY29uY2F0KHIpO3JldHVybiB0aGlzLnB1c2hTdGFjayhzLGUsby5zZWxlY3Rvcil9fSksdi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHMsbzt2LnN1cHBvcnQuaHRtbDVDbG9uZXx8di5pc1hNTERvYyhlKXx8IXd0LnRlc3QoIjwiK2Uubm9kZU5hbWUrIj4iKT9vPWUuY2xvbmVOb2RlKCEwKTooa3QuaW5uZXJIVE1MPWUub3V0ZXJIVE1MLGt0LnJlbW92ZUNoaWxkKG89a3QuZmlyc3RDaGlsZCkpO2lmKCghdi5zdXBwb3J0Lm5vQ2xvbmVFdmVudHx8IXYuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTExKSYmIXYuaXNYTUxEb2MoZSkpe090KGUsbykscj1NdChlKSxpPU10KG8pO2ZvcihzPTA7cltzXTsrK3MpaVtzXSYmT3QocltzXSxpW3NdKX1pZih0KXtBdChlLG8pO2lmKG4pe3I9TXQoZSksaT1NdChvKTtmb3Iocz0wO3Jbc107KytzKUF0KHJbc10saVtzXSl9fXJldHVybiByPWk9bnVsbCxvfSxjbGVhbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgcyxvLHUsYSxmLGwsYyxoLHAsZCxtLGcseT10PT09aSYmQ3QsYj1bXTtpZighdHx8dHlwZW9mIHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD09InVuZGVmaW5lZCIpdD1pO2ZvcihzPTA7KHU9ZVtzXSkhPW51bGw7cysrKXt0eXBlb2YgdT09Im51bWJlciImJih1Kz0iIik7aWYoIXUpY29udGludWU7aWYodHlwZW9mIHU9PSJzdHJpbmciKWlmKCFndC50ZXN0KHUpKXU9dC5jcmVhdGVUZXh0Tm9kZSh1KTtlbHNle3k9eXx8bHQodCksYz10LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHkuYXBwZW5kQ2hpbGQoYyksdT11LnJlcGxhY2UoZHQsIjwkMT48LyQyPiIpLGE9KHZ0LmV4ZWModSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksZj1OdFthXXx8TnQuX2RlZmF1bHQsbD1mWzBdLGMuaW5uZXJIVE1MPWZbMV0rdStmWzJdO3doaWxlKGwtLSljPWMubGFzdENoaWxkO2lmKCF2LnN1cHBvcnQudGJvZHkpe2g9bXQudGVzdCh1KSxwPWE9PT0idGFibGUiJiYhaD9jLmZpcnN0Q2hpbGQmJmMuZmlyc3RDaGlsZC5jaGlsZE5vZGVzOmZbMV09PT0iPHRhYmxlPiImJiFoP2MuY2hpbGROb2RlczpbXTtmb3Iobz1wLmxlbmd0aC0xO28+PTA7LS1vKXYubm9kZU5hbWUocFtvXSwidGJvZHkiKSYmIXBbb10uY2hpbGROb2Rlcy5sZW5ndGgmJnBbb10ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwW29dKX0hdi5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZwdC50ZXN0KHUpJiZjLmluc2VydEJlZm9yZSh0LmNyZWF0ZVRleHROb2RlKHB0LmV4ZWModSlbMF0pLGMuZmlyc3RDaGlsZCksdT1jLmNoaWxkTm9kZXMsYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpfXUubm9kZVR5cGU/Yi5wdXNoKHUpOnYubWVyZ2UoYix1KX1jJiYodT1jPXk9bnVsbCk7aWYoIXYuc3VwcG9ydC5hcHBlbmRDaGVja2VkKWZvcihzPTA7KHU9YltzXSkhPW51bGw7cysrKXYubm9kZU5hbWUodSwiaW5wdXQiKT9fdCh1KTp0eXBlb2YgdS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJnYuZ3JlcCh1LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLF90KTtpZihuKXttPWZ1bmN0aW9uKGUpe2lmKCFlLnR5cGV8fHh0LnRlc3QoZS50eXBlKSlyZXR1cm4gcj9yLnB1c2goZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTplKTpuLmFwcGVuZENoaWxkKGUpfTtmb3Iocz0wOyh1PWJbc10pIT1udWxsO3MrKylpZighdi5ub2RlTmFtZSh1LCJzY3JpcHQiKXx8IW0odSkpbi5hcHBlbmRDaGlsZCh1KSx0eXBlb2YgdS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJihnPXYuZ3JlcCh2Lm1lcmdlKFtdLHUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSxtKSxiLnNwbGljZS5hcHBseShiLFtzKzEsMF0uY29uY2F0KGcpKSxzKz1nLmxlbmd0aCl9cmV0dXJuIGJ9LGNsZWFuRGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89MCx1PXYuZXhwYW5kbyxhPXYuY2FjaGUsZj12LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyxsPXYuZXZlbnQuc3BlY2lhbDtmb3IoOyhpPWVbb10pIT1udWxsO28rKylpZih0fHx2LmFjY2VwdERhdGEoaSkpe3I9aVt1XSxuPXImJmFbcl07aWYobil7aWYobi5ldmVudHMpZm9yKHMgaW4gbi5ldmVudHMpbFtzXT92LmV2ZW50LnJlbW92ZShpLHMpOnYucmVtb3ZlRXZlbnQoaSxzLG4uaGFuZGxlKTthW3JdJiYoZGVsZXRlIGFbcl0sZj9kZWxldGUgaVt1XTppLnJlbW92ZUF0dHJpYnV0ZT9pLnJlbW92ZUF0dHJpYnV0ZSh1KTppW3VdPW51bGwsdi5kZWxldGVkSWRzLnB1c2gocikpfX19fSksZnVuY3Rpb24oKXt2YXIgZSx0O3YudWFNYXRjaD1mdW5jdGlvbihlKXtlPWUudG9Mb3dlckNhc2UoKTt2YXIgdD0vKGNocm9tZSlbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpWyBcL10oW1x3Ll0rKS8uZXhlYyhlKXx8Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyhlKXx8ZS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmLyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKGUpfHxbXTtyZXR1cm57YnJvd3Nlcjp0WzFdfHwiIix2ZXJzaW9uOnRbMl18fCIwIn19LGU9di51YU1hdGNoKG8udXNlckFnZW50KSx0PXt9LGUuYnJvd3NlciYmKHRbZS5icm93c2VyXT0hMCx0LnZlcnNpb249ZS52ZXJzaW9uKSx0LmNocm9tZT90LndlYmtpdD0hMDp0LndlYmtpdCYmKHQuc2FmYXJpPSEwKSx2LmJyb3dzZXI9dCx2LnN1Yj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXtyZXR1cm4gbmV3IGUuZm4uaW5pdCh0LG4pfXYuZXh0ZW5kKCEwLGUsdGhpcyksZS5zdXBlcmNsYXNzPXRoaXMsZS5mbj1lLnByb3RvdHlwZT10aGlzKCksZS5mbi5jb25zdHJ1Y3Rvcj1lLGUuc3ViPXRoaXMuc3ViLGUuZm4uaW5pdD1mdW5jdGlvbihyLGkpe3JldHVybiBpJiZpIGluc3RhbmNlb2YgdiYmIShpIGluc3RhbmNlb2YgZSkmJihpPWUoaSkpLHYuZm4uaW5pdC5jYWxsKHRoaXMscixpLHQpfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm47dmFyIHQ9ZShpKTtyZXR1cm4gZX19KCk7dmFyIER0LFB0LEh0LEJ0PS9hbHBoYVwoW14pXSpcKS9pLGp0PS9vcGFjaXR5PShbXildKikvLEZ0PS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLyxJdD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8scXQ9L15tYXJnaW4vLFJ0PW5ldyBSZWdFeHAoIl4oIittKyIpKC4qKSQiLCJpIiksVXQ9bmV3IFJlZ0V4cCgiXigiK20rIikoPyFweClbYS16JV0rJCIsImkiKSx6dD1uZXcgUmVnRXhwKCJeKFstK10pPSgiK20rIikiLCJpIiksV3Q9e0JPRFk6ImJsb2NrIn0sWHQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFZ0PXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LCR0PVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sSnQ9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXSxLdD12LmZuLnRvZ2dsZTt2LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxuLHIpe3JldHVybiByIT09dD92LnN0eWxlKGUsbixyKTp2LmNzcyhlLG4pfSxlLG4sYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBZdCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBZdCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU9PSJib29sZWFuIjtyZXR1cm4gdi5pc0Z1bmN0aW9uKGUpJiZ2LmlzRnVuY3Rpb24odCk/S3QuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuZWFjaChmdW5jdGlvbigpeyhuP2U6R3QodGhpcykpP3YodGhpcykuc2hvdygpOnYodGhpcykuaGlkZSgpfSl9fSksdi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1EdChlLCJvcGFjaXR5Iik7cmV0dXJuIG49PT0iIj8iMSI6bn19fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6di5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlLG4scixpKXtpZighZXx8ZS5ub2RlVHlwZT09PTN8fGUubm9kZVR5cGU9PT04fHwhZS5zdHlsZSlyZXR1cm47dmFyIHMsbyx1LGE9di5jYW1lbENhc2UobiksZj1lLnN0eWxlO249di5jc3NQcm9wc1thXXx8KHYuY3NzUHJvcHNbYV09UXQoZixhKSksdT12LmNzc0hvb2tzW25dfHx2LmNzc0hvb2tzW2FdO2lmKHI9PT10KXJldHVybiB1JiYiZ2V0ImluIHUmJihzPXUuZ2V0KGUsITEsaSkpIT09dD9zOmZbbl07bz10eXBlb2YgcixvPT09InN0cmluZyImJihzPXp0LmV4ZWMocikpJiYocj0oc1sxXSsxKSpzWzJdK3BhcnNlRmxvYXQodi5jc3MoZSxuKSksbz0ibnVtYmVyIik7aWYocj09bnVsbHx8bz09PSJudW1iZXIiJiZpc05hTihyKSlyZXR1cm47bz09PSJudW1iZXIiJiYhdi5jc3NOdW1iZXJbYV0mJihyKz0icHgiKTtpZighdXx8ISgic2V0ImluIHUpfHwocj11LnNldChlLHIsaSkpIT09dCl0cnl7ZltuXT1yfWNhdGNoKGwpe319LGNzczpmdW5jdGlvbihlLG4scixpKXt2YXIgcyxvLHUsYT12LmNhbWVsQ2FzZShuKTtyZXR1cm4gbj12LmNzc1Byb3BzW2FdfHwodi5jc3NQcm9wc1thXT1RdChlLnN0eWxlLGEpKSx1PXYuY3NzSG9va3Nbbl18fHYuY3NzSG9va3NbYV0sdSYmImdldCJpbiB1JiYocz11LmdldChlLCEwLGkpKSxzPT09dCYmKHM9RHQoZSxuKSkscz09PSJub3JtYWwiJiZuIGluIFZ0JiYocz1WdFtuXSkscnx8aSE9PXQ/KG89cGFyc2VGbG9hdChzKSxyfHx2LmlzTnVtZXJpYyhvKT9vfHwwOnMpOnN9LHN3YXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscz17fTtmb3IoaSBpbiB0KXNbaV09ZS5zdHlsZVtpXSxlLnN0eWxlW2ldPXRbaV07cj1uLmNhbGwoZSk7Zm9yKGkgaW4gdCllLnN0eWxlW2ldPXNbaV07cmV0dXJuIHJ9fSksZS5nZXRDb21wdXRlZFN0eWxlP0R0PWZ1bmN0aW9uKHQsbil7dmFyIHIsaSxzLG8sdT1lLmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxhPXQuc3R5bGU7cmV0dXJuIHUmJihyPXUuZ2V0UHJvcGVydHlWYWx1ZShuKXx8dVtuXSxyPT09IiImJiF2LmNvbnRhaW5zKHQub3duZXJEb2N1bWVudCx0KSYmKHI9di5zdHlsZSh0LG4pKSxVdC50ZXN0KHIpJiZxdC50ZXN0KG4pJiYoaT1hLndpZHRoLHM9YS5taW5XaWR0aCxvPWEubWF4V2lkdGgsYS5taW5XaWR0aD1hLm1heFdpZHRoPWEud2lkdGg9cixyPXUud2lkdGgsYS53aWR0aD1pLGEubWluV2lkdGg9cyxhLm1heFdpZHRoPW8pKSxyfTppLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihEdD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLmN1cnJlbnRTdHlsZSYmZS5jdXJyZW50U3R5bGVbdF0scz1lLnN0eWxlO3JldHVybiBpPT1udWxsJiZzJiZzW3RdJiYoaT1zW3RdKSxVdC50ZXN0KGkpJiYhRnQudGVzdCh0KSYmKG49cy5sZWZ0LHI9ZS5ydW50aW1lU3R5bGUmJmUucnVudGltZVN0eWxlLmxlZnQsciYmKGUucnVudGltZVN0eWxlLmxlZnQ9ZS5jdXJyZW50U3R5bGUubGVmdCkscy5sZWZ0PXQ9PT0iZm9udFNpemUiPyIxZW0iOmksaT1zLnBpeGVsTGVmdCsicHgiLHMubGVmdD1uLHImJihlLnJ1bnRpbWVTdHlsZS5sZWZ0PXIpKSxpPT09IiI/ImF1dG8iOml9KSx2LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsdCl7di5jc3NIb29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUsbixyKXtpZihuKXJldHVybiBlLm9mZnNldFdpZHRoPT09MCYmSXQudGVzdChEdChlLCJkaXNwbGF5IikpP3Yuc3dhcChlLFh0LGZ1bmN0aW9uKCl7cmV0dXJuIHRuKGUsdCxyKX0pOnRuKGUsdCxyKX0sc2V0OmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gWnQoZSxuLHI/ZW4oZSx0LHIsdi5zdXBwb3J0LmJveFNpemluZyYmdi5jc3MoZSwiYm94U2l6aW5nIik9PT0iYm9yZGVyLWJveCIpOjApfX19KSx2LnN1cHBvcnQub3BhY2l0eXx8KHYuY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGp0LnRlc3QoKHQmJmUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlLmZpbHRlcjplLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOnQ/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0eWxlLHI9ZS5jdXJyZW50U3R5bGUsaT12LmlzTnVtZXJpYyh0KT8iYWxwaGEob3BhY2l0eT0iK3QqMTAwKyIpIjoiIixzPXImJnIuZmlsdGVyfHxuLmZpbHRlcnx8IiI7bi56b29tPTE7aWYodD49MSYmdi50cmltKHMucmVwbGFjZShCdCwiIikpPT09IiImJm4ucmVtb3ZlQXR0cmlidXRlKXtuLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYociYmIXIuZmlsdGVyKXJldHVybn1uLmZpbHRlcj1CdC50ZXN0KHMpP3MucmVwbGFjZShCdCxpKTpzKyIgIitpfX0pLHYoZnVuY3Rpb24oKXt2LnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KHYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihlLHQpe3JldHVybiB2LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sZnVuY3Rpb24oKXtpZih0KXJldHVybiBEdChlLCJtYXJnaW5SaWdodCIpfSl9fSksIXYuc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ2LmZuLnBvc2l0aW9uJiZ2LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXt2LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuKXtpZihuKXt2YXIgcj1EdChlLHQpO3JldHVybiBVdC50ZXN0KHIpP3YoZSkucG9zaXRpb24oKVt0XSsicHgiOnJ9fX19KX0pLHYuZXhwciYmdi5leHByLmZpbHRlcnMmJih2LmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUub2Zmc2V0V2lkdGg9PT0wJiZlLm9mZnNldEhlaWdodD09PTB8fCF2LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoZS5zdHlsZSYmZS5zdHlsZS5kaXNwbGF5fHxEdChlLCJkaXNwbGF5IikpPT09Im5vbmUifSx2LmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiF2LmV4cHIuZmlsdGVycy5oaWRkZW4oZSl9KSx2LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe3YuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe3ZhciByLGk9dHlwZW9mIG49PSJzdHJpbmciP24uc3BsaXQoIiAiKTpbbl0scz17fTtmb3Iocj0wO3I8NDtyKyspc1tlKyR0W3JdK3RdPWlbcl18fGlbci0yXXx8aVswXTtyZXR1cm4gc319LHF0LnRlc3QoZSl8fCh2LmNzc0hvb2tzW2UrdF0uc2V0PVp0KX0pO3ZhciBybj0vJTIwL2csc249L1xbXF0kLyxvbj0vXHI/XG4vZyx1bj0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYW49L14oPzpzZWxlY3R8dGV4dGFyZWEpL2k7di5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB2LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudHM/di5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5jaGVja2VkfHxhbi50ZXN0KHRoaXMubm9kZU5hbWUpfHx1bi50ZXN0KHRoaXMudHlwZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49dih0aGlzKS52YWwoKTtyZXR1cm4gbj09bnVsbD9udWxsOnYuaXNBcnJheShuKT92Lm1hcChuLGZ1bmN0aW9uKGUsbil7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShvbiwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2Uob24sIlxyXG4iKX19KS5nZXQoKX19KSx2LnBhcmFtPWZ1bmN0aW9uKGUsbil7dmFyIHIsaT1bXSxzPWZ1bmN0aW9uKGUsdCl7dD12LmlzRnVuY3Rpb24odCk/dCgpOnQ9PW51bGw/IiI6dCxpW2kubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KX07bj09PXQmJihuPXYuYWpheFNldHRpbmdzJiZ2LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7aWYodi5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIXYuaXNQbGFpbk9iamVjdChlKSl2LmVhY2goZSxmdW5jdGlvbigpe3ModGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IociBpbiBlKWZuKHIsZVtyXSxuLHMpO3JldHVybiBpLmpvaW4oIiYiKS5yZXBsYWNlKHJuLCIrIil9O3ZhciBsbixjbixobj0vIy4qJC8scG49L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxkbj0vXig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLHZuPS9eKD86R0VUfEhFQUQpJC8sbW49L15cL1wvLyxnbj0vXD8vLHluPS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLGJuPS8oWz8mXSlfPVteJl0qLyx3bj0vXihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sRW49di5mbi5sb2FkLFNuPXt9LHhuPXt9LFRuPVsiKi8iXStbIioiXTt0cnl7Y249cy5ocmVmfWNhdGNoKE5uKXtjbj1pLmNyZWF0ZUVsZW1lbnQoImEiKSxjbi5ocmVmPSIiLGNuPWNuLmhyZWZ9bG49d24uZXhlYyhjbi50b0xvd2VyQ2FzZSgpKXx8W10sdi5mbi5sb2FkPWZ1bmN0aW9uKGUsbixyKXtpZih0eXBlb2YgZSE9InN0cmluZyImJkVuKXJldHVybiBFbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBpLHMsbyx1PXRoaXMsYT1lLmluZGV4T2YoIiAiKTtyZXR1cm4gYT49MCYmKGk9ZS5zbGljZShhLGUubGVuZ3RoKSxlPWUuc2xpY2UoMCxhKSksdi5pc0Z1bmN0aW9uKG4pPyhyPW4sbj10KTpuJiZ0eXBlb2Ygbj09Im9iamVjdCImJihzPSJQT1NUIiksdi5hamF4KHt1cmw6ZSx0eXBlOnMsZGF0YVR5cGU6Imh0bWwiLGRhdGE6bixjb21wbGV0ZTpmdW5jdGlvbihlLHQpe3ImJnUuZWFjaChyLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX19KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLHUuaHRtbChpP3YoIjxkaXY+IikuYXBwZW5kKGUucmVwbGFjZSh5biwiIikpLmZpbmQoaSk6ZSl9KSx0aGlzfSx2LmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7di5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHYuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLG4pe3Zbbl09ZnVuY3Rpb24oZSxyLGkscyl7cmV0dXJuIHYuaXNGdW5jdGlvbihyKSYmKHM9c3x8aSxpPXIscj10KSx2LmFqYXgoe3R5cGU6bix1cmw6ZSxkYXRhOnIsc3VjY2VzczppLGRhdGFUeXBlOnN9KX19KSx2LmV4dGVuZCh7Z2V0U2NyaXB0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHYuZ2V0KGUsdCxuLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuZ2V0KGUsdCxuLCJqc29uIil9LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P0xuKGUsdi5hamF4U2V0dGluZ3MpOih0PWUsZT12LmFqYXhTZXR0aW5ncyksTG4oZSx0KSxlfSxhamF4U2V0dGluZ3M6e3VybDpjbixpc0xvY2FsOmRuLnRlc3QobG5bMV0pLGdsb2JhbDohMCx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIix0ZXh0OiJ0ZXh0L3BsYWluIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLCIqIjpUbn0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOmUuU3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOnYucGFyc2VKU09OLCJ0ZXh0IHhtbCI6di5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e2NvbnRleHQ6ITAsdXJsOiEwfX0sYWpheFByZWZpbHRlcjpDbihTbiksYWpheFRyYW5zcG9ydDpDbih4biksYWpheDpmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIFQoZSxuLHMsYSl7dmFyIGwseSxiLHcsUyxUPW47aWYoRT09PTIpcmV0dXJuO0U9Mix1JiZjbGVhclRpbWVvdXQodSksbz10LGk9YXx8IiIseC5yZWFkeVN0YXRlPWU+MD80OjAscyYmKHc9QW4oYyx4LHMpKTtpZihlPj0yMDAmJmU8MzAwfHxlPT09MzA0KWMuaWZNb2RpZmllZCYmKFM9eC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLFMmJih2Lmxhc3RNb2RpZmllZFtyXT1TKSxTPXguZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKSxTJiYodi5ldGFnW3JdPVMpKSxlPT09MzA0PyhUPSJub3Rtb2RpZmllZCIsbD0hMCk6KGw9T24oYyx3KSxUPWwuc3RhdGUseT1sLmRhdGEsYj1sLmVycm9yLGw9IWIpO2Vsc2V7Yj1UO2lmKCFUfHxlKVQ9ImVycm9yIixlPDAmJihlPTApfXguc3RhdHVzPWUseC5zdGF0dXNUZXh0PShufHxUKSsiIixsP2QucmVzb2x2ZVdpdGgoaCxbeSxULHhdKTpkLnJlamVjdFdpdGgoaCxbeCxULGJdKSx4LnN0YXR1c0NvZGUoZyksZz10LGYmJnAudHJpZ2dlcigiYWpheCIrKGw/IlN1Y2Nlc3MiOiJFcnJvciIpLFt4LGMsbD95OmJdKSxtLmZpcmVXaXRoKGgsW3gsVF0pLGYmJihwLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3gsY10pLC0tdi5hY3RpdmV8fHYuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSl9dHlwZW9mIGU9PSJvYmplY3QiJiYobj1lLGU9dCksbj1ufHx7fTt2YXIgcixpLHMsbyx1LGEsZixsLGM9di5hamF4U2V0dXAoe30sbiksaD1jLmNvbnRleHR8fGMscD1oIT09YyYmKGgubm9kZVR5cGV8fGggaW5zdGFuY2VvZiB2KT92KGgpOnYuZXZlbnQsZD12LkRlZmVycmVkKCksbT12LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxnPWMuc3RhdHVzQ29kZXx8e30sYj17fSx3PXt9LEU9MCxTPSJjYW5jZWxlZCIseD17cmVhZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtpZighRSl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO2U9d1tuXT13W25dfHxlLGJbZV09dH1yZXR1cm4gdGhpc30sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIEU9PT0yP2k6bnVsbH0sZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIG47aWYoRT09PTIpe2lmKCFzKXtzPXt9O3doaWxlKG49cG4uZXhlYyhpKSlzW25bMV0udG9Mb3dlckNhc2UoKV09blsyXX1uPXNbZS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbj09PXQ/bnVsbDpufSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBFfHwoYy5taW1lVHlwZT1lKSx0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXtyZXR1cm4gZT1lfHxTLG8mJm8uYWJvcnQoZSksVCgwLGUpLHRoaXN9fTtkLnByb21pc2UoeCkseC5zdWNjZXNzPXguZG9uZSx4LmVycm9yPXguZmFpbCx4LmNvbXBsZXRlPW0uYWRkLHguc3RhdHVzQ29kZT1mdW5jdGlvbihlKXtpZihlKXt2YXIgdDtpZihFPDIpZm9yKHQgaW4gZSlnW3RdPVtnW3RdLGVbdF1dO2Vsc2UgdD1lW3guc3RhdHVzXSx4LmFsd2F5cyh0KX1yZXR1cm4gdGhpc30sYy51cmw9KChlfHxjLnVybCkrIiIpLnJlcGxhY2UoaG4sIiIpLnJlcGxhY2UobW4sbG5bMV0rIi8vIiksYy5kYXRhVHlwZXM9di50cmltKGMuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5zcGxpdCh5KSxjLmNyb3NzRG9tYWluPT1udWxsJiYoYT13bi5leGVjKGMudXJsLnRvTG93ZXJDYXNlKCkpLGMuY3Jvc3NEb21haW49ISghYXx8YVsxXT09PWxuWzFdJiZhWzJdPT09bG5bMl0mJihhWzNdfHwoYVsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShsblszXXx8KGxuWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGMuZGF0YSYmYy5wcm9jZXNzRGF0YSYmdHlwZW9mIGMuZGF0YSE9InN0cmluZyImJihjLmRhdGE9di5wYXJhbShjLmRhdGEsYy50cmFkaXRpb25hbCkpLGtuKFNuLGMsbix4KTtpZihFPT09MilyZXR1cm4geDtmPWMuZ2xvYmFsLGMudHlwZT1jLnR5cGUudG9VcHBlckNhc2UoKSxjLmhhc0NvbnRlbnQ9IXZuLnRlc3QoYy50eXBlKSxmJiZ2LmFjdGl2ZSsrPT09MCYmdi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighYy5oYXNDb250ZW50KXtjLmRhdGEmJihjLnVybCs9KGduLnRlc3QoYy51cmwpPyImIjoiPyIpK2MuZGF0YSxkZWxldGUgYy5kYXRhKSxyPWMudXJsO2lmKGMuY2FjaGU9PT0hMSl7dmFyIE49di5ub3coKSxDPWMudXJsLnJlcGxhY2UoYm4sIiQxXz0iK04pO2MudXJsPUMrKEM9PT1jLnVybD8oZ24udGVzdChjLnVybCk/IiYiOiI/IikrIl89IitOOiIiKX19KGMuZGF0YSYmYy5oYXNDb250ZW50JiZjLmNvbnRlbnRUeXBlIT09ITF8fG4uY29udGVudFR5cGUpJiZ4LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsYy5jb250ZW50VHlwZSksYy5pZk1vZGlmaWVkJiYocj1yfHxjLnVybCx2Lmxhc3RNb2RpZmllZFtyXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsdi5sYXN0TW9kaWZpZWRbcl0pLHYuZXRhZ1tyXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIix2LmV0YWdbcl0pKSx4LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsYy5kYXRhVHlwZXNbMF0mJmMuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0/Yy5hY2NlcHRzW2MuZGF0YVR5cGVzWzBdXSsoYy5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitUbisiOyBxPTAuMDEiOiIiKTpjLmFjY2VwdHNbIioiXSk7Zm9yKGwgaW4gYy5oZWFkZXJzKXguc2V0UmVxdWVzdEhlYWRlcihsLGMuaGVhZGVyc1tsXSk7aWYoIWMuYmVmb3JlU2VuZHx8Yy5iZWZvcmVTZW5kLmNhbGwoaCx4LGMpIT09ITEmJkUhPT0yKXtTPSJhYm9ydCI7Zm9yKGwgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0peFtsXShjW2xdKTtvPWtuKHhuLGMsbix4KTtpZighbylUKC0xLCJObyBUcmFuc3BvcnQiKTtlbHNle3gucmVhZHlTdGF0ZT0xLGYmJnAudHJpZ2dlcigiYWpheFNlbmQiLFt4LGNdKSxjLmFzeW5jJiZjLnRpbWVvdXQ+MCYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3guYWJvcnQoInRpbWVvdXQiKX0sYy50aW1lb3V0KSk7dHJ5e0U9MSxvLnNlbmQoYixUKX1jYXRjaChrKXtpZighKEU8MikpdGhyb3cgaztUKC0xLGspfX1yZXR1cm4geH1yZXR1cm4geC5hYm9ydCgpfSxhY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fX0pO3ZhciBNbj1bXSxfbj0vXD8vLERuPS8oPSlcPyg/PSZ8JCl8XD9cPy8sUG49di5ub3coKTt2LmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9TW4ucG9wKCl8fHYuZXhwYW5kbysiXyIrUG4rKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24obixyLGkpe3ZhciBzLG8sdSxhPW4uZGF0YSxmPW4udXJsLGw9bi5qc29ucCE9PSExLGM9bCYmRG4udGVzdChmKSxoPWwmJiFjJiZ0eXBlb2YgYT09InN0cmluZyImJiEobi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZEbi50ZXN0KGEpO2lmKG4uZGF0YVR5cGVzWzBdPT09Impzb25wInx8Y3x8aClyZXR1cm4gcz1uLmpzb25wQ2FsbGJhY2s9di5pc0Z1bmN0aW9uKG4uanNvbnBDYWxsYmFjayk/bi5qc29ucENhbGxiYWNrKCk6bi5qc29ucENhbGxiYWNrLG89ZVtzXSxjP24udXJsPWYucmVwbGFjZShEbiwiJDEiK3MpOmg/bi5kYXRhPWEucmVwbGFjZShEbiwiJDEiK3MpOmwmJihuLnVybCs9KF9uLnRlc3QoZik/IiYiOiI/Iikrbi5qc29ucCsiPSIrcyksbi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHV8fHYuZXJyb3IocysiIHdhcyBub3QgY2FsbGVkIiksdVswXX0sbi5kYXRhVHlwZXNbMF09Impzb24iLGVbc109ZnVuY3Rpb24oKXt1PWFyZ3VtZW50c30saS5hbHdheXMoZnVuY3Rpb24oKXtlW3NdPW8sbltzXSYmKG4uanNvbnBDYWxsYmFjaz1yLmpzb25wQ2FsbGJhY2ssTW4ucHVzaChzKSksdSYmdi5pc0Z1bmN0aW9uKG8pJiZvKHVbMF0pLHU9bz10fSksInNjcmlwdCJ9KSx2LmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L2phdmFzY3JpcHR8ZWNtYXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZ2xvYmFsRXZhbChlKSxlfX19KSx2LmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7ZS5jYWNoZT09PXQmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiLGUuZ2xvYmFsPSExKX0pLHYuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgbixyPWkuaGVhZHx8aS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHxpLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihzLG8pe249aS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxuLmFzeW5jPSJhc3luYyIsZS5zY3JpcHRDaGFyc2V0JiYobi5jaGFyc2V0PWUuc2NyaXB0Q2hhcnNldCksbi5zcmM9ZS51cmwsbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oZSxpKXtpZihpfHwhbi5yZWFkeVN0YXRlfHwvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KG4ucmVhZHlTdGF0ZSkpbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxyJiZuLnBhcmVudE5vZGUmJnIucmVtb3ZlQ2hpbGQobiksbj10LGl8fG8oMjAwLCJzdWNjZXNzIil9LHIuaW5zZXJ0QmVmb3JlKG4sci5maXJzdENoaWxkKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuLm9ubG9hZCgwLDEpfX19fSk7dmFyIEhuLEJuPWUuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiBIbilIbltlXSgwLDEpfTohMSxqbj0wO3YuYWpheFNldHRpbmdzLnhocj1lLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0xvY2FsJiZGbigpfHxJbigpfTpGbixmdW5jdGlvbihlKXt2LmV4dGVuZCh2LnN1cHBvcnQse2FqYXg6ISFlLGNvcnM6ISFlJiYid2l0aENyZWRlbnRpYWxzImluIGV9KX0odi5hamF4U2V0dGluZ3MueGhyKCkpLHYuc3VwcG9ydC5hamF4JiZ2LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24obil7aWYoIW4uY3Jvc3NEb21haW58fHYuc3VwcG9ydC5jb3JzKXt2YXIgcjtyZXR1cm57c2VuZDpmdW5jdGlvbihpLHMpe3ZhciBvLHUsYT1uLnhocigpO24udXNlcm5hbWU/YS5vcGVuKG4udHlwZSxuLnVybCxuLmFzeW5jLG4udXNlcm5hbWUsbi5wYXNzd29yZCk6YS5vcGVuKG4udHlwZSxuLnVybCxuLmFzeW5jKTtpZihuLnhockZpZWxkcylmb3IodSBpbiBuLnhockZpZWxkcylhW3VdPW4ueGhyRmllbGRzW3VdO24ubWltZVR5cGUmJmEub3ZlcnJpZGVNaW1lVHlwZSYmYS5vdmVycmlkZU1pbWVUeXBlKG4ubWltZVR5cGUpLCFuLmNyb3NzRG9tYWluJiYhaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdJiYoaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO3RyeXtmb3IodSBpbiBpKWEuc2V0UmVxdWVzdEhlYWRlcih1LGlbdV0pfWNhdGNoKGYpe31hLnNlbmQobi5oYXNDb250ZW50JiZuLmRhdGF8fG51bGwpLHI9ZnVuY3Rpb24oZSxpKXt2YXIgdSxmLGwsYyxoO3RyeXtpZihyJiYoaXx8YS5yZWFkeVN0YXRlPT09NCkpe3I9dCxvJiYoYS5vbnJlYWR5c3RhdGVjaGFuZ2U9di5ub29wLEJuJiZkZWxldGUgSG5bb10pO2lmKGkpYS5yZWFkeVN0YXRlIT09NCYmYS5hYm9ydCgpO2Vsc2V7dT1hLnN0YXR1cyxsPWEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCksYz17fSxoPWEucmVzcG9uc2VYTUwsaCYmaC5kb2N1bWVudEVsZW1lbnQmJihjLnhtbD1oKTt0cnl7Yy50ZXh0PWEucmVzcG9uc2VUZXh0fWNhdGNoKHApe310cnl7Zj1hLnN0YXR1c1RleHR9Y2F0Y2gocCl7Zj0iIn0hdSYmbi5pc0xvY2FsJiYhbi5jcm9zc0RvbWFpbj91PWMudGV4dD8yMDA6NDA0OnU9PT0xMjIzJiYodT0yMDQpfX19Y2F0Y2goZCl7aXx8cygtMSxkKX1jJiZzKHUsZixjLGwpfSxuLmFzeW5jP2EucmVhZHlTdGF0ZT09PTQ/c2V0VGltZW91dChyLDApOihvPSsram4sQm4mJihIbnx8KEhuPXt9LHYoZSkudW5sb2FkKEJuKSksSG5bb109ciksYS5vbnJlYWR5c3RhdGVjaGFuZ2U9cik6cigpfSxhYm9ydDpmdW5jdGlvbigpe3ImJnIoMCwxKX19fX0pO3ZhciBxbixSbixVbj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sem49bmV3IFJlZ0V4cCgiXig/OihbLStdKT18KSgiK20rIikoW2EteiVdKikkIiwiaSIpLFduPS9xdWV1ZUhvb2tzJC8sWG49W0duXSxWbj17IioiOltmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscz16bi5leGVjKHQpLG89aS5jdXIoKSx1PStvfHwwLGE9MSxmPTIwO2lmKHMpe249K3NbMl0scj1zWzNdfHwodi5jc3NOdW1iZXJbZV0/IiI6InB4Iik7aWYociE9PSJweCImJnUpe3U9di5jc3MoaS5lbGVtLGUsITApfHxufHwxO2RvIGE9YXx8Ii41Iix1Lz1hLHYuc3R5bGUoaS5lbGVtLGUsdStyKTt3aGlsZShhIT09KGE9aS5jdXIoKS9vKSYmYSE9PTEmJi0tZil9aS51bml0PXIsaS5zdGFydD11LGkuZW5kPXNbMV0/dSsoc1sxXSsxKSpuOm59cmV0dXJuIGl9XX07di5BbmltYXRpb249di5leHRlbmQoS24se3R3ZWVuZXI6ZnVuY3Rpb24oZSx0KXt2LmlzRnVuY3Rpb24oZSk/KHQ9ZSxlPVsiKiJdKTplPWUuc3BsaXQoIiAiKTt2YXIgbixyPTAsaT1lLmxlbmd0aDtmb3IoO3I8aTtyKyspbj1lW3JdLFZuW25dPVZuW25dfHxbXSxWbltuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P1huLnVuc2hpZnQoZSk6WG4ucHVzaChlKX19KSx2LlR3ZWVuPVluLFluLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WW4saW5pdDpmdW5jdGlvbihlLHQsbixyLGkscyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9c3x8KHYuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1Zbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6WW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49WW4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PXYuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpZbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxZbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9WW4ucHJvdG90eXBlLFluLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZS5lbGVtW2UucHJvcF09PW51bGx8fCEhZS5lbGVtLnN0eWxlJiZlLmVsZW0uc3R5bGVbZS5wcm9wXSE9bnVsbD8odD12LmNzcyhlLmVsZW0sZS5wcm9wLCExLCIiKSwhdHx8dD09PSJhdXRvIj8wOnQpOmUuZWxlbVtlLnByb3BdfSxzZXQ6ZnVuY3Rpb24oZSl7di5meC5zdGVwW2UucHJvcF0/di5meC5zdGVwW2UucHJvcF0oZSk6ZS5lbGVtLnN0eWxlJiYoZS5lbGVtLnN0eWxlW3YuY3NzUHJvcHNbZS5wcm9wXV0hPW51bGx8fHYuY3NzSG9va3NbZS5wcm9wXSk/di5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCk6ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX0sWW4ucHJvcEhvb2tzLnNjcm9sbFRvcD1Zbi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx2LmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49di5mblt0XTt2LmZuW3RdPWZ1bmN0aW9uKHIsaSxzKXtyZXR1cm4gcj09bnVsbHx8dHlwZW9mIHI9PSJib29sZWFuInx8IWUmJnYuaXNGdW5jdGlvbihyKSYmdi5pc0Z1bmN0aW9uKGkpP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShabih0LCEwKSxyLGkscyl9fSksdi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoR3QpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXYuaXNFbXB0eU9iamVjdChlKSxzPXYuc3BlZWQodCxuLHIpLG89ZnVuY3Rpb24oKXt2YXIgdD1Lbih0aGlzLHYuZXh0ZW5kKHt9LGUpLHMpO2kmJnQuc3RvcCghMCl9O3JldHVybiBpfHxzLnF1ZXVlPT09ITE/dGhpcy5lYWNoKG8pOnRoaXMucXVldWUocy5xdWV1ZSxvKX0sc3RvcDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChyKX07cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKHI9bixuPWUsZT10KSxuJiZlIT09ITEmJnRoaXMucXVldWUoZXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsbj1lIT1udWxsJiZlKyJxdWV1ZUhvb2tzIixzPXYudGltZXJzLG89di5fZGF0YSh0aGlzKTtpZihuKW9bbl0mJm9bbl0uc3RvcCYmaShvW25dKTtlbHNlIGZvcihuIGluIG8pb1tuXSYmb1tuXS5zdG9wJiZXbi50ZXN0KG4pJiZpKG9bbl0pO2ZvcihuPXMubGVuZ3RoO24tLTspc1tuXS5lbGVtPT09dGhpcyYmKGU9PW51bGx8fHNbbl0ucXVldWU9PT1lKSYmKHNbbl0uYW5pbS5zdG9wKHIpLHQ9ITEscy5zcGxpY2UobiwxKSk7KHR8fCFyKSYmdi5kZXF1ZXVlKHRoaXMsZSl9KX19KSx2LmVhY2goe3NsaWRlRG93bjpabigic2hvdyIpLHNsaWRlVXA6Wm4oImhpZGUiKSxzbGlkZVRvZ2dsZTpabigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe3YuZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSksdi5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmdHlwZW9mIGU9PSJvYmplY3QiP3YuZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8di5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiF2LmlzRnVuY3Rpb24odCkmJnR9O3IuZHVyYXRpb249di5meC5vZmY/MDp0eXBlb2Ygci5kdXJhdGlvbj09Im51bWJlciI/ci5kdXJhdGlvbjpyLmR1cmF0aW9uIGluIHYuZnguc3BlZWRzP3YuZnguc3BlZWRzW3IuZHVyYXRpb25dOnYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKHIucXVldWU9PW51bGx8fHIucXVldWU9PT0hMClyLnF1ZXVlPSJmeCI7cmV0dXJuIHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe3YuaXNGdW5jdGlvbihyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmdi5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHYuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn19LHYudGltZXJzPVtdLHYuZng9WW4ucHJvdG90eXBlLmluaXQsdi5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsbj12LnRpbWVycyxyPTA7cW49di5ub3coKTtmb3IoO3I8bi5sZW5ndGg7cisrKWU9bltyXSwhZSgpJiZuW3JdPT09ZSYmbi5zcGxpY2Uoci0tLDEpO24ubGVuZ3RofHx2LmZ4LnN0b3AoKSxxbj10fSx2LmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2UoKSYmdi50aW1lcnMucHVzaChlKSYmIVJuJiYoUm49c2V0SW50ZXJ2YWwodi5meC50aWNrLHYuZnguaW50ZXJ2YWwpKX0sdi5meC5pbnRlcnZhbD0xMyx2LmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKFJuKSxSbj1udWxsfSx2LmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSx2LmZ4LnN0ZXA9e30sdi5leHByJiZ2LmV4cHIuZmlsdGVycyYmKHYuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGUpe3JldHVybiB2LmdyZXAodi50aW1lcnMsZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10LmVsZW19KS5sZW5ndGh9KTt2YXIgZXI9L14oPzpib2R5fGh0bWwpJC9pO3YuZm4ub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgbixyLGkscyxvLHUsYSxmPXt0b3A6MCxsZWZ0OjB9LGw9dGhpc1swXSxjPWwmJmwub3duZXJEb2N1bWVudDtpZighYylyZXR1cm47cmV0dXJuKHI9Yy5ib2R5KT09PWw/di5vZmZzZXQuYm9keU9mZnNldChsKToobj1jLmRvY3VtZW50RWxlbWVudCx2LmNvbnRhaW5zKG4sbCk/KHR5cGVvZiBsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9InVuZGVmaW5lZCImJihmPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGk9dHIoYykscz1uLmNsaWVudFRvcHx8ci5jbGllbnRUb3B8fDAsbz1uLmNsaWVudExlZnR8fHIuY2xpZW50TGVmdHx8MCx1PWkucGFnZVlPZmZzZXR8fG4uc2Nyb2xsVG9wLGE9aS5wYWdlWE9mZnNldHx8bi5zY3JvbGxMZWZ0LHt0b3A6Zi50b3ArdS1zLGxlZnQ6Zi5sZWZ0K2Etb30pOmYpfSx2Lm9mZnNldD17Ym9keU9mZnNldDpmdW5jdGlvbihlKXt2YXIgdD1lLm9mZnNldFRvcCxuPWUub2Zmc2V0TGVmdDtyZXR1cm4gdi5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0JiYodCs9cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5Ub3AiKSl8fDAsbis9cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5MZWZ0IikpfHwwKSx7dG9wOnQsbGVmdDpufX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12LmNzcyhlLCJwb3NpdGlvbiIpO3I9PT0ic3RhdGljIiYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGk9dihlKSxzPWkub2Zmc2V0KCksbz12LmNzcyhlLCJ0b3AiKSx1PXYuY3NzKGUsImxlZnQiKSxhPShyPT09ImFic29sdXRlInx8cj09PSJmaXhlZCIpJiZ2LmluQXJyYXkoImF1dG8iLFtvLHVdKT4tMSxmPXt9LGw9e30sYyxoO2E/KGw9aS5wb3NpdGlvbigpLGM9bC50b3AsaD1sLmxlZnQpOihjPXBhcnNlRmxvYXQobyl8fDAsaD1wYXJzZUZsb2F0KHUpfHwwKSx2LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4scykpLHQudG9wIT1udWxsJiYoZi50b3A9dC50b3Atcy50b3ArYyksdC5sZWZ0IT1udWxsJiYoZi5sZWZ0PXQubGVmdC1zLmxlZnQraCksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6aS5jc3MoZil9fSx2LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpc1swXSlyZXR1cm47dmFyIGU9dGhpc1swXSx0PXRoaXMub2Zmc2V0UGFyZW50KCksbj10aGlzLm9mZnNldCgpLHI9ZXIudGVzdCh0WzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTp0Lm9mZnNldCgpO3JldHVybiBuLnRvcC09cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5Ub3AiKSl8fDAsbi5sZWZ0LT1wYXJzZUZsb2F0KHYuY3NzKGUsIm1hcmdpbkxlZnQiKSl8fDAsci50b3ArPXBhcnNlRmxvYXQodi5jc3ModFswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAsci5sZWZ0Kz1wYXJzZUZsb2F0KHYuY3NzKHRbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MCx7dG9wOm4udG9wLXIudG9wLGxlZnQ6bi5sZWZ0LXIubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxpLmJvZHk7d2hpbGUoZSYmIWVyLnRlc3QoZS5ub2RlTmFtZSkmJnYuY3NzKGUsInBvc2l0aW9uIik9PT0ic3RhdGljIillPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxpLmJvZHl9KX19KSx2LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSxuKXt2YXIgcj0vWS8udGVzdChuKTt2LmZuW2VdPWZ1bmN0aW9uKGkpe3JldHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsaSxzKXt2YXIgbz10cihlKTtpZihzPT09dClyZXR1cm4gbz9uIGluIG8/b1tuXTpvLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXTplW2ldO28/by5zY3JvbGxUbyhyP3Yobykuc2Nyb2xsTGVmdCgpOnMscj9zOnYobykuc2Nyb2xsVG9wKCkpOmVbaV09c30sZSxpLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksdi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSxuKXt2LmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6biwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKHIsaSl7di5mbltpXT1mdW5jdGlvbihpLHMpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGgmJihyfHx0eXBlb2YgaSE9ImJvb2xlYW4iKSx1PXJ8fChpPT09ITB8fHM9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24obixyLGkpe3ZhciBzO3JldHVybiB2LmlzV2luZG93KG4pP24uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOm4ubm9kZVR5cGU9PT05PyhzPW4uZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KG4uYm9keVsic2Nyb2xsIitlXSxzWyJzY3JvbGwiK2VdLG4uYm9keVsib2Zmc2V0IitlXSxzWyJvZmZzZXQiK2VdLHNbImNsaWVudCIrZV0pKTppPT09dD92LmNzcyhuLHIsaSx1KTp2LnN0eWxlKG4scixpLHUpfSxuLG8/aTp0LG8sbnVsbCl9fSl9KSxlLmpRdWVyeT1lLiQ9dix0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kJiZkZWZpbmUuYW1kLmpRdWVyeSYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KX0pKHdpbmRvdyk7"}]},{"name":"Wii-homebrew.com better header","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["http://forum.wii-homebrew.com*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1479475938124,"data":{}},"enabled":false,"position":2,"uuid":"dee7f03b-b8a7-49ad-a4a2-424456050e8f","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBXaWktaG9tZWJyZXcuY29tIGJldHRlciBoZWFkZXIKLy8gQG5hbWVzcGFjZSAgICBodHRwOi8vdGFtcGVybW9ua2V5Lm5ldC8KLy8gQHZlcnNpb24gICAgICAwLjEKLy8gQGRlc2NyaXB0aW9uICB0cnkgdG8gdGFrZSBvdmVyIHRoZSB3b3JsZCEKLy8gQGF1dGhvciAgICAgICBBbm8KLy8gQG1hdGNoICAgICAgICBodHRwOi8vZm9ydW0ud2lpLWhvbWVicmV3LmNvbSoKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQovKiBqc2hpbnQgLVcwOTcgKi8KJ3VzZSBzdHJpY3QnOwoKLy8gVGhpcyBmZXRjaGVzIGFsbCBvZiB0aGUgPGltZz4gdGFncyBhbmQgc3RvcmVzIHRoZW0gaW4gInRhZ3MiLgp2YXIgdGFncyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTsKCi8vIFRoaXMgbG9vcHMgb3ZlciBhbGwgb2YgdGhlIDxpbWc+IHRhZ3MuCmZvciAodmFyIGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgewoKICAvLyBUaGlzIHJlcGxhY2VzIHRoZSBzcmMgYXR0cmlidXRlIG9mIHRoZSB0YWcgd2l0aCB0aGUgbW9kaWZpZWQgb25lCiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwOi8vZm9ydW0ud2lpLWhvbWVicmV3LmNvbS93Y2YvaW1hZ2VzL29sZExvZ29FZGl0ZWQucG5nJywgJ2h0dHA6Ly9pbWcucG9ueXdhdmUuZGUvZGkvSUdQQS9XaWlIb21lYnJld0xvZ28ucG5nJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwOi8vZm9ydW0ud2lpLWhvbWVicmV3LmNvbS93Y2YvaW1hZ2VzL0Rlc2lnbnMvQ2hhbmdpbmdfR2FtZXMvbmlnaHQvb2xkTG9nb0VkaXRlZC5wbmcnLCAnaHR0cDovL2ltZy5wb255d2F2ZS5kZS9kaS9JR1BBL1dpaUhvbWVicmV3TG9nby5wbmcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9mb3J1bS53aWktaG9tZWJyZXcuY29tL2ltYWdlcy93YmJMb2dvLnBuZycsICdodHRwOi8vaW1nLnBvbnl3YXZlLmRlL2RpL0lHUEEvV2lpSG9tZWJyZXdMb2dvLnBuZycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZvcnVtLndpaS1ob21lYnJldy5jb20vd2NmL2ltYWdlcy9EZXNpZ25zL0NoYW5naW5nX0dhbWVzL25pZ2h0L2xvZ29OZXcucG5nJywgJ2h0dHA6Ly9pbWcucG9ueXdhdmUuZGUvZGkvSUdQQS9XaWlIb21lYnJld0xvZ28ucG5nJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwOi8vZm9ydW0ud2lpLWhvbWVicmV3LmNvbS93Y2YvaW1hZ2VzL3N0eWxlTG9nby0yZjUzMzY3YmE4YTU2NzEzYTk3YTI4ZWRiM2M0MWFmODNjMmFhNzMyLnBuZycsICdodHRwOi8vaW1nLnBvbnl3YXZlLmRlL2RpL0lHUEEvV2lpSG9tZWJyZXdMb2dvLnBuZycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZvcnVtLndpaS1ob21lYnJldy5jb20vd2NmL2ltYWdlcy9EZXNpZ25zL01hcmlvL3dpbnRlci9vbGRMb2dvRWRpdGVkLnBuZycsICdodHRwOi8vaW1nLnBvbnl3YXZlLmRlL2RpL0lHUEEvV2lpSG9tZWJyZXdMb2dvLnBuZycpOwp9"},{"name":"Removes the autoplay up next feature","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["*://www.youtube.com/*"],"orig_noframes":true,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1479475994064,"data":{}},"enabled":true,"position":3,"file_url":"https://gist.github.com/Yonezpt/51adf278a24488f75ff0/raw/f6faf0c2c6e7f2523cc88711405b2d9895700921/YT%2520RMV-AP-UN.user.js","uuid":"6a0b83b8-68d9-47ef-873f-038e77944d0c","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQHZlcnNpb24gIDEuMC4yCi8vIEBuYW1lICAgICBSZW1vdmVzIHRoZSBhdXRvcGxheSB1cCBuZXh0IGZlYXR1cmUKLy8gQG1hdGNoICAgICo6Ly93d3cueW91dHViZS5jb20vKgovLyBAcnVuLWF0ICAgZG9jdW1lbnQtc3RhcnQKLy8gQGdyYW50ICAgIG5vbmUKLy8gQG5vZnJhbWVzCi8vID09L1VzZXJTY3JpcHQ9PQooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwogICAgZnVuY3Rpb24gcmVtb3ZlQVBVTigpIHsKICAgICAgICB2YXIgYXV0b3BsYXliYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdhdXRvcGxheS1iYXInKVswXTsKICAgICAgICBpZiAoYXV0b3BsYXliYXIpIHsKICAgICAgICAgICAgYXV0b3BsYXliYXIucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjaGVja2JveC1vbi1vZmYnKVswXS5yZW1vdmUoKTsKICAgICAgICB9CiAgICB9CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIHJlbW92ZUFQVU4sIHRydWUpOwogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3NwZmRvbmUnLCByZW1vdmVBUFVOKTsKfSgpKTs="},{"name":"MyDealz Enhancer","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http://www.mydealz.de/*","https://www.mydealz.de/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1479476020177,"data":{}},"enabled":false,"position":4,"file_url":"https://greasyfork.org/scripts/10885-mydealz-enhancer/code/MyDealz%20Enhancer.user.js","uuid":"d341b7fc-e2cb-48b8-a685-e33f7f30cf50","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIE15RGVhbHogRW5oYW5jZXIKLy8gQG5hbWVzcGFjZSAgIG15ZGVhbHpfZW5oYW5jZXIKLy8gQGRlc2NyaXB0aW9uIFZlcmJlc3NlcnQgRnVua3Rpb25lbiB2b24gTXlEZWFseiwgb2RlciBzdGVsbHQgc2llIHdpZWRlciBoZXIKLy8gQGF1dGhvcglCQUVSbmFkbwovLyBAY29udHJpYnV0b3IJbG9sbmlja25hbWUgKHJlbW9kZWxOYXZCYXIsIGdyYWJRdW90ZSwgbWF4UXVvdGVzLCBlcnJvci1kaXNwbGF5IFthdmF0YXIgYm9yZGVyXSkKLy8gQGNvbnRyaWJ1dG9yCXJpY2hpMmsgKG1vZGlmeVNlYXJjaC1UZWlsZSwgc2hvd1VzZXJJbmZvLCBlbWJlZFlvdXR1YmUsIG1pbmltaXplUXVvdGVzLCBkZWFsVGV4dFByZXZpZXcpCi8vIEBjb250cmlidXRvcgl2aWVsbGVpY2h0bWFubjEgKEltYWdlIFByZXZpZXcpCi8vIEBjb250cmlidXRvcglOaWNvIChpbnNlcnREaXJlY3RMaW5rLUlkZWUpCi8vIEBpbmNsdWRlICAgICBodHRwOi8vd3d3Lm15ZGVhbHouZGUvKgovLyBAaW5jbHVkZSAgICAgaHR0cHM6Ly93d3cubXlkZWFsei5kZS8qCi8vIEB2ZXJzaW9uICAgICAxLjUuMDE3Ci8vIEByZXF1aXJlCWh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTIuMS40Lm1pbi5qcwovLyBAZ3JhbnQgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICBHTV9sb2cKLy8gQGdyYW50ICAgICAgIEdNX2luZm8KLy8gPT0vVXNlclNjcmlwdD09CgpmdW5jdGlvbiBNb2RpZnlQYWdlKCkgewoKCXZhciBkZWZhdWx0U2V0dGluZ3MgPSB7YmVoYXZpb3I6IHtzaG93R3JlZW5Eb3RzOiB0cnVlfSwgY29tbWVudHM6IHttYXhRdW90ZUxldmVsOiAxLCBlZGl0UmVhc29uOiAnJywgc2lnbmF0dXJlOiAnJywgdXNlU2lnbmF0dXJlOiBmYWxzZX0sIGRlYWxzOiB7aGlkZTogJyd9LCB1c2VyTWVudURpcmVjdCA6IHtwbjogZmFsc2UsIGFjY291bnQ6IGZhbHNlfSwgaGlkZUFkczoge3RvcEJhcjogdHJ1ZSwgZ3NXaWRnZXQ6IHRydWUsIGluc2lkZTogdHJ1ZSxubFNlY3Rpb246IHRydWUsIGFwcDogdHJ1ZX0sIG1vdmVCdXR0b25zOiB7XzogdHJ1ZSwgZGVhbHM6IHRydWUsIGd1dHNjaGVpbmU6IHRydWUsIGZyZWViaWVzOiB0cnVlLCBjdXN0b206IHRydWUsIGdlc3VjaGU6IGZhbHNlLCBkaXZlcnNlczogZmFsc2V9LCBmcm9tVG86IHtkZWFsczogJ2RlYWxzLW5ldycsIGd1dHNjaGVpbmU6ICdndXRzY2hlaW5lLW5ldycsIGZyZWViaWVzOiAnZnJlZWJpZXMtbmV3JywgZ2VzdWNoZTogJ2dlc3VjaGUnLCBkaXZlcnNlczogJ2RpdmVyc2VzJywgYnVncmVwb3J0czogJ2J1Z3JlcG9ydHMnfSwgc21pbGV5czoge30sIG9sZFNtaWxleXM6IHt1c2U6IGZhbHNlLCBzaG93OiBmYWxzZX0sIGRpc3BsYXk6IHtlbWJlZFlvdXR1YmU6IHRydWUsIG1pbmltaXplUXVvdGVzOiB0cnVlLCB1c2VySW5mbzogdHJ1ZSwgZGVhbFByZXZpZXc6IDB9LCBzZWFyY2g6IHtwcmVzZXRDYXRlZ29yeTogMX19OwoJdmFyIHNldHRpbmdzID0ge307Cgl2YXIgb2xkU21pbGV5cyA9IHtvTzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTE5bGMucG5nJywgJzooJzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTIwd2sucG5nJywgJzopJzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTIxdnQucG5nJywgJzpwJzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTIyc3AucG5nJywgJzspJzogJ2h0dHA6Ly91cC5waWNyLmRlLzI0NjgxOTIzYm4ucG5nJywgJyhfOyknOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODE5MjR6Yi5wbmcnLCAnOnwnOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODE5MjV2ai5wbmcnLCAnOnsnOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODIxNDRzbS5wbmcnLCAnOCknOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODIxNjFpei5wbmcnLCAnWCknOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODIxNzB3Zi5wbmcnLCAnJmx0OzMnOiAnaHR0cDovL3VwLnBpY3IuZGUvMjQ2ODI1MTRmbC5wbmcnfTsKCXZhciBzZWFyY2hDYXRlZ29yaWVzID0ge2FsbDoge2lkOiAwLCBjYXRlZ29yeTogJ0FsbGUnfSwgZGVhbHM6IHtpZDogMSwgY2F0ZWdvcnk6ICdEZWFscyd9LCBndXRzY2hlaW5lOiB7aWQ6IDIsIGNhdGVnb3J5OiAnR3V0c2NoZWluZSd9LCBmcmVlYmllczoge2lkOiAzLCBjYXRlZ29yeTogJ0ZyZWViaWVzJ30sIGdlc3VjaGU6IHtpZDogNCwgY2F0ZWdvcnk6ICdHZXN1Y2hlJ30sIGRpdmVyc2VzOiB7aWQ6IDUsIGNhdGVnb3J5OiAnRGl2ZXJzZXMnfSwgYnVncmVwb3J0czoge2lkOiA3LCBjYXRlZ29yeTogJ0J1ZyBSZXBvcnRzJ319OwoJdmFyIHRpbWVyID0ge307Cgl2YXIgbGFzdEZvY3VzID0gbnVsbDsKCXZhciBzYXZlID0ge3BuOiB7fX07Cgl2YXIgdXNlck5hbWU7CgoJJC5mbi5oYXNBdHRyID0gZnVuY3Rpb24obmFtZSkgeyAgCgkJcmV0dXJuIHRoaXMuYXR0cihuYW1lKSAhPT0gdW5kZWZpbmVkOwoJfTsKCgkkLmZuLmV4dGVuZCh7CgkJaW5zZXJ0QXRDYXJldDogZnVuY3Rpb24obXlWYWx1ZSkgewoJCQl2YXIgZWxlbSA9IHRoaXNbMF07CgkJCWlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHsKCQkJCWVsZW0uZm9jdXMoKTsKCQkJCXNlbCA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpOwoJCQkJc2VsLnRleHQgPSBteVZhbHVlOwoJCQkJZWxlbS5mb2N1cygpOwoJCQl9IGVsc2UgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQgfHwgZWxlbS5zZWxlY3Rpb25TdGFydCA9PSAnMCcpIHsKCQkJCXZhciBzdGFydFBvcyA9IGVsZW0uc2VsZWN0aW9uU3RhcnQ7CgkJCQl2YXIgZW5kUG9zID0gZWxlbS5zZWxlY3Rpb25FbmQ7CgkJCQl2YXIgc2Nyb2xsVG9wID0gZWxlbS5zY3JvbGxUb3A7CgkJCQl2YXIgb2xkTGVuZ3RoID0gZWxlbS52YWx1ZS5sZW5ndGg7CgkJCQllbGVtLnZhbHVlID0gZWxlbS52YWx1ZS5zdWJzdHJpbmcoMCwgc3RhcnRQb3MpK215VmFsdWUrZWxlbS52YWx1ZS5zdWJzdHJpbmcoZW5kUG9zLGVsZW0udmFsdWUubGVuZ3RoKTsKCQkJCWVsZW0uZm9jdXMoKTsKCQkJCWVsZW0uc2VsZWN0aW9uU3RhcnQgPSBzdGFydFBvcyArIGVsZW0udmFsdWUubGVuZ3RoIC0gb2xkTGVuZ3RoOwoJCQkJZWxlbS5zZWxlY3Rpb25FbmQgPSBzdGFydFBvcyArIGVsZW0udmFsdWUubGVuZ3RoIC0gb2xkTGVuZ3RoOwoJCQkJZWxlbS5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7CgkJCX0gZWxzZSB7CgkJCQllbGVtLnZhbHVlICs9IG15VmFsdWU7CgkJCQllbGVtLmZvY3VzKCk7CgkJCX0KCQl9Cgl9KTsKCgkkLmZuLnNldEN1cnNvclBvc2l0aW9uID0gZnVuY3Rpb24ocG9zKSB7CgkJdmFyIF9lbGVtID0gdGhpc1swXTsKICAgIGlmIChfZWxlbS5zZXRTZWxlY3Rpb25SYW5nZSkgewogICAgICBfZWxlbS5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7CiAgICB9IGVsc2UgaWYgKF9lbGVtLmNyZWF0ZVRleHRSYW5nZSkgewogICAgICB2YXIgcmFuZ2UgPSBfZWxlbS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7CiAgICAgIGlmKHBvcyA8IDApIHsKICAgICAgICBwb3MgPSAkKF9lbGVtKS52YWwoKS5sZW5ndGggKyBwb3M7CiAgICAgIH0KICAgICAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgcG9zKTsKICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBwb3MpOwogICAgICByYW5nZS5zZWxlY3QoKTsKICAgIH0KICB9CgoJaWYoIVJlZ0V4cC5lc2NhcGUpewoJCVJlZ0V4cC5lc2NhcGUgPSBmdW5jdGlvbihzKXsKCQkJcmV0dXJuIFN0cmluZyhzKS5yZXBsYWNlKC9bXFxeJCorPy4oKXxbXF17fV0vZywgJ1xcJCYnKTsKCQl9OwoJfQoKCWZ1bmN0aW9uIHByaW50VVRDRGF0ZShfZGF0ZSkgewoJCXJldHVybiAoJzAnK19kYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKSkucmVwbGFjZSgvXjAqKFswLTldezJ9KSQvLCAnJDEnKSArICc6JyArICgnMCcrX2RhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkpLnJlcGxhY2UoL14wKihbMC05XXsyfSkkLywgJyQxJykgKyAnOicgKyAoJzAnK19kYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpKS5yZXBsYWNlKC9eMCooWzAtOV17Mn0pJC8sICckMScpOwoJfQoKCWZ1bmN0aW9uIHByaW50RGF0ZShfZGF0ZSkgewoJCXJldHVybiAoJzAnK19kYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSkucmVwbGFjZSgvXjAqKFswLTldezJ9KSQvLCAnJDEnKSArICc6JyArICgnMCcrX2RhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpLnJlcGxhY2UoL14wKihbMC05XXsyfSkkLywgJyQxJykgKyAnOicgKyAoJzAnK19kYXRlLmdldFNlY29uZHMoKS50b1N0cmluZygpKS5yZXBsYWNlKC9eMCooWzAtOV17Mn0pJC8sICckMScpOwoJfQoKCWZ1bmN0aW9uIHRpbWVUaWNrKCkgewoJCXZhciBfYWxsVGltZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZi1jYXJvdXNlbC1kYXRlJyk7CgkJdmFyIF9yZW1haW47CgkJdmFyIF91bnRpbDsKCQl2YXIgX2RpZmZEYXRlOwoJCXZhciBfdG9EYXRlOwoJCXZhciBfZGlmZlRpbWU7CgkJdmFyIF9ub3cgPSBuZXcgRGF0ZSgpOwoJCWZvcih2YXIgX2kgPSAwOyBfaSA8IF9hbGxUaW1lcy5sZW5ndGg7IF9pKyspIHsKCQkJX3VudGlsID0gX2FsbFRpbWVzW19pXTsKCQkJX3JlbWFpbiA9IF9hbGxUaW1lc1tfaV0ucGFyZW50Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZi1jYXJvdXNlbC1kYXRlLXJlbWFpbicpWzBdOwoJCQlfdG9EYXRlID0gbmV3IERhdGUoKTsKCQkJX3RvRGF0ZS5zZXRUaW1lKHBhcnNlSW50KF91bnRpbC5pbm5lckhUTUwsIDEwKSoxMDAwKTsKCQkJX2RpZmZEYXRlID0gbmV3IERhdGUoKTsKCQkJX2RpZmZUaW1lID0gX3RvRGF0ZS5nZXRUaW1lKCkgLSBfbm93LmdldFRpbWUoKTsKCQkJaWYoX2RpZmZUaW1lIDw9IDApIHsKCQkJCSQoX2FsbFRpbWVzW19pXSkucGFyZW50KCkuZmluZCgnLnNwYWNlLS1sZWZ0LTInKS50ZXh0KC9CZWdpbm50IGluLy50ZXN0KCQoX2FsbFRpbWVzW19pXSkucGFyZW50KCkuZmluZCgnLnNwYWNlLS1sZWZ0LTInKS50ZXh0KCcnKSkgPyAnQmVnb25uZW4nIDogJ0FiZ2VsYXVmZW4nKTsKCQkJCSQoX3JlbWFpbikucmVtb3ZlKCk7CgkJCX0gZWxzZSB7CgkJCQlfZGlmZkRhdGUuc2V0VGltZShfZGlmZlRpbWUpOwoJCQkJX3JlbWFpbi5pbm5lckhUTUwgPSBwcmludFVUQ0RhdGUoX2RpZmZEYXRlKTsgLy8gKyAnICgnICsgcHJpbnREYXRlKF90b0RhdGUpICsgJyknOwoJCQl9CgkJfQoJfQoKCWZ1bmN0aW9uIGFkZFRpbWVzKCkgewoJCXZhciBfYWxsVGltZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiZi1jYXJvdXNlbC1kYXRlJyk7CgkJdmFyIF9uZXdTcGFuOwoJCWZvcih2YXIgX2kgPSAwOyBfaSA8IF9hbGxUaW1lcy5sZW5ndGg7IF9pKyspIHsKCQkJX2FsbFRpbWVzW19pXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQlfbmV3U3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTsKCQkJX25ld1NwYW4uc2V0QXR0cmlidXRlKCdjbGFzcycsICdiZi1jYXJvdXNlbC1kYXRlLXJlbWFpbicpOwoJCQlfYWxsVGltZXNbX2ldLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF9uZXdTcGFuLCBudWxsKTsKCQl9CgkJdGltZVRpY2soKTsKCQl3aW5kb3cuc2V0SW50ZXJ2YWwodGltZVRpY2ssIDEwMDApOwoJfQoKCWZ1bmN0aW9uIGZpeFBvc2l0aW9ucygpIHsKCQl2YXIgX2FsbEVsZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2FydGljbGUnKTsKCQlmb3IodmFyIF9pID0gMDtfaSA8IF9hbGxFbGVtcy5sZW5ndGg7IF9pKyspIHsKCQkJX2FsbEVsZW1zW19pXS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgd2lkdGg6IDEyMDBweDsgbGVmdDogMHB4OyB0b3A6ICcgKyBfaSo0MDQgKyAncHgnKTsKCQl9CgkJd2luZG93LnNldFRpbWVvdXQoImRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhcnRpY2xlJylbMF0ucGFyZW50Tm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2hlaWdodDogIiArIF9hbGxFbGVtcy5sZW5ndGggKiA0MDQgKyAicHg7Jyk7IiwgMjApOwoJfQoKCWZ1bmN0aW9uIGNoYW5nZUxpbmtzKCkgewoJCXZhciBfYWxsTGlua3MgPSAkKCdhLm5hdlRyaWdnZXIxLCAubmF2VHJpZ2dlcjEtcm93LWl0ZW1zIC5tZW51Omxhc3QgLm1lbnUtbGlzdCAubmF2TWVudTEtaXRlbScpOwoJCXZhciBfZnJvbVRvID0gc2V0dGluZ3MuZnJvbVRvOwoKCQl2YXIgX2xvYzsKCQkkKF9hbGxMaW5rcykuZWFjaChmdW5jdGlvbiAoX2xJbmQsIF9sVmFsKSB7CgkJCXZhciBfbGluayA9ICQoX2xWYWwpOwoJCQlpZihfbGluay5oYXNBdHRyKCdocmVmJykpIHsKCQkJCV9sb2MgPSBfbGluay5hdHRyKCdocmVmJykucmVwbGFjZSgvXmh0dHBzPzpcL1wvd3d3XC5teWRlYWx6XC5kZShcLyhob3R8ZGlzY3Vzc2VkfG5ldyk/KT8kLywgJy8nKS5yZXBsYWNlKC9eaHR0cHM/OlwvXC93d3dcLm15ZGVhbHpcLmRlXC8oW2EtekEtWi1dKyk/JC8sICckMScpLnJlcGxhY2UoLy0/KG5ld3xkaXNjdXNzZWQpPyQvLCcnKTsKCQkJCWlmKF9sb2MgaW4gX2Zyb21UbykgewoJCQkJCV9saW5rLmF0dHIoJ2hyZWYnLCBfbGluay5hdHRyKCdocmVmJykucmVwbGFjZSgvXihodHRwcz86XC9cL3d3d1wubXlkZWFselwuZGUpLiokLywgJyQxJyArICcvJyArIF9mcm9tVG9bX2xvY10pKTsKCQkJCX0KCQkJfQoJCX0pOwoJfQoKCWZ1bmN0aW9uIHJlbW9kZWxOYXZCYXIoKSB7CgkJdmFyIF9zdWJNZW51ID0gJCgnaGVhZGVyIHN0cm9uZ1tkYXRhLWhhbmRsZXI9Im1lbnUiXScpOwoJCV9zdWJNZW51LmZpbmQoJ3NwYW5bY2xhc3MhPSJuYXZUcmlnZ2VyLWFycm93Il0nKS5yZW1vdmUoKTsKCQlfc3ViTWVudSA9IF9zdWJNZW51LnBhcmVudCgpLnBhcmVudCgpOwoJCXZhciBfYnV0dG9uSW5kZXggPSAxOwoJCXZhciBfYnV0dG9uQmVmb3JlU3ViSW5kZXggPSAwOwoJCXZhciBfYnV0dG9uOwoJCXZhciBfc3ViSGlkZGVuQnV0dG9uOwoJCXZhciBfc2VsZWN0ZWQ7CgkJdmFyIF9tb3JlSGlnaGxpZ2h0ID0gdHJ1ZTsKCQlmb3IoX2JJbmQgaW4gc2V0dGluZ3MubW92ZUJ1dHRvbnMpIHsKCQkJaWYoX2JJbmQgPT0gJ18nKSB7CgkJCQlfYnV0dG9uID0gJCgnLm5hdlRyaWdnZXIxLXJvdy1pdGVtcyA+IGxpID4gYS5uYXZUcmlnZ2VyMVtocmVmPSJodHRwOi8vd3d3Lm15ZGVhbHouZGUvIl0sIC5uYXZUcmlnZ2VyMS1yb3ctaXRlbXMgbGkubWVudSB1bC5tZW51LWxpc3QgbGkuaGlkZS0tZG93blRocm91Z2gtIGFbaHJlZj0iaHR0cDovL3d3dy5teWRlYWx6LmRlLyJdJyk7CgkJCX0gZWxzZSB7CgkJCQlfYnV0dG9uID0gJCgnLm5hdlRyaWdnZXIxLXJvdy1pdGVtcyA+IGxpID4gYS5uYXZUcmlnZ2VyMVtocmVmKj0iJyArIF9iSW5kICsgJyJdLCAubmF2VHJpZ2dlcjEtcm93LWl0ZW1zIGxpLm1lbnUgdWwubWVudS1saXN0IGxpLmhpZGUtLWRvd25UaHJvdWdoLSBhW2hyZWYqPSInICsgX2JJbmQgKyAnIl0nKTsKCQkJfQoKCQkJX3NlbGVjdGVkID0gX2J1dHRvbi5oYXNDbGFzcygnbmF2VHJpZ2dlcjEtLXNlbGVjdGVkJykgfHwgX2J1dHRvbi5oYXNDbGFzcygnbmF2TWVudTEtaXRlbS0tc2VsZWN0ZWQnKTsKCgkJCWlmKF9idXR0b24uaGFzQ2xhc3MoJ25hdlRyaWdnZXIxJykgJiYgc2V0dGluZ3MubW92ZUJ1dHRvbnNbX2JJbmRdKSB7CgkJCQlfYnV0dG9uLmF0dHIoJ2NsYXNzJywgJ25hdlRyaWdnZXIxIG5hdlRyaWdnZXIxaGlkZS0tdXBUby1tZW51JyArIF9idXR0b25JbmRleCsrKTsKCQkJfSBlbHNlIGlmIChfYnV0dG9uLmhhc0NsYXNzKCduYXZUcmlnZ2VyMScpICYmICFzZXR0aW5ncy5tb3ZlQnV0dG9uc1tfYkluZF0pIHsKCQkJCS8vIFZlcnNjaGllYmUgaW4gVW50ZXJtZW51CgkJCQlfc3ViTWVudS5maW5kKCdsaS5oaWRlLS1kb3duVGhyb3VnaC0gYS5uYXZNZW51MS1pdGVtJykuZXEoX2J1dHRvbkJlZm9yZVN1YkluZGV4KyspLnBhcmVudCgpLmJlZm9yZShfYnV0dG9uLmF0dHIoJ2NsYXNzJywgJ25hdk1lbnUxLWl0ZW0nKS5wYXJlbnQoKS5hdHRyKCdjbGFzcycsICdoaWRlLS1kb3duVGhyb3VnaC0nKSk7CgkJCX0gZWxzZSBpZihfYnV0dG9uLmhhc0NsYXNzKCduYXZNZW51MS1pdGVtJykgJiYgc2V0dGluZ3MubW92ZUJ1dHRvbnNbX2JJbmRdKSB7CgkJCQkvLyBWZXJzY2hpZWJlIGlucyBIYXVwdG1lbnUKCQkJCV9zdWJNZW51LmJlZm9yZShfYnV0dG9uLnJlbW92ZUNsYXNzKCduYXZNZW51MS1pdGVtIG5hdk1lbnUxLWl0ZW0tLXNlbGVjdGVkJykuYWRkQ2xhc3MoJ25hdlRyaWdnZXIxJykucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ25hdk1lbnUxLWl0ZW0gaGlkZS0tZG93blRocm91Z2gtJykuYWRkQ2xhc3MoJ3RHcmlkLWNlbGwgaGlkZS0tdXBUby1tZW51JyArIF9idXR0b25JbmRleCkpOwoJCQl9CgoJCQlpZihfc2VsZWN0ZWQpIHsKCQkJCWlmKF9idXR0b24uaGFzQ2xhc3MoJ25hdlRyaWdnZXIxJykpIHsKCQkJCQlfYnV0dG9uLmFkZENsYXNzKCduYXZUcmlnZ2VyMS0tc2VsZWN0ZWQnKTsKCQkJCQlfbW9yZUhpZ2hsaWdodCA9IGZhbHNlOwoJCQkJfSBlbHNlIHsKCQkJCQlfYnV0dG9uLmFkZENsYXNzKCduYXZNZW51MS1pdGVtLS1zZWxlY3RlZCcpOwoJCQkJCWlmKCQoJ2hlYWRlci5oZWFkZXIgLm5hdlRyaWdnZXIxLXJvdyAubmF2VHJpZ2dlcjEtcm93LWl0ZW1zIGEubmF2VHJpZ2dlcjFbaHJlZj0iJyArIF9idXR0b24uYXR0cignaHJlZicpICsgJyJdJykubGVuZ3RoID09IDApIHsKCQkJCQkJX21vcmVIaWdobGlnaHQgPSB0cnVlOwoJCQkJCX0gZWxzZSB7CgkJCQkJCV9tb3JlSGlnaGxpZ2h0ID0gZmFsc2U7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlmb3IoX2J1dHRvbkluZGV4ID0gMTsgX2J1dHRvbkluZGV4IDw9IDQ7IF9idXR0b25JbmRleCsrKSB7CgkJCV9idXR0b24gPSAkKCcubmF2VHJpZ2dlcjEtcm93LWl0ZW1zID4gbGkuaGlkZS0tdXBUby1tZW51JyArIF9idXR0b25JbmRleCArICcgPiBhLm5hdlRyaWdnZXIxJyk7CgkJCWlmKF9idXR0b24ubGVuZ3RoKSB7CgkJCQlfc3ViSGlkZGVuQnV0dG9uID0gJCgnLm5hdlRyaWdnZXIxLXJvdy1pdGVtcyBsaS5tZW51IHVsLm1lbnUtbGlzdCBsaS5oaWRlLS1kb3duVGhyb3VnaC1tZW51JyArIF9idXR0b25JbmRleCArICcgYScpOwoJCQkJX3N1YkhpZGRlbkJ1dHRvbi5hdHRyKCdocmVmJywgX2J1dHRvbi5hdHRyKCdocmVmJykpLmh0bWwoX2J1dHRvbi5odG1sKCkpOwoJCQl9IGVsc2UgewoJCQkJJCgnLm5hdlRyaWdnZXIxLXJvdy1pdGVtcyBsaS5tZW51IHVsLm1lbnUtbGlzdCBsaS5oaWRlLS1kb3duVGhyb3VnaC1tZW51JyArIF9idXR0b25JbmRleCkucmVtb3ZlKCk7CgkJCX0KCQl9CgoJCSQoJ2hlYWRlciBzdHJvbmdbZGF0YS1oYW5kbGVyPSJtZW51Il0nKS5yZW1vdmVDbGFzcygnbmF2VHJpZ2dlcjEtLXNlbGVjdGVkJyk7CgkJaWYoX21vcmVIaWdobGlnaHQpIHsKCQkJJCgnaGVhZGVyIHN0cm9uZ1tkYXRhLWhhbmRsZXI9Im1lbnUiXScpLmFkZENsYXNzKCduYXZUcmlnZ2VyMS0tc2VsZWN0ZWQnKTsKCQl9CgkJaWYoc2V0dGluZ3MudXNlck1lbnVEaXJlY3QucG4pIHsKCQkJdmFyIF9tZW51RWxlbSA9ICQoJ3VsLnVzZXJCYXIgbGFiZWwudXNlckJhci1idXR0b24tLXBtJykucmVtb3ZlQXR0cignZGF0YS1tZW51JykucmVtb3ZlQXR0cignZGF0YS1oYW5kbGVyJyk7CgkJCV9tZW51RWxlbS5maW5kKCdpbnB1dCcpLnJlbW92ZUF0dHIoJ2RhdGEtaGFuZGxlcicpLmNsaWNrKGZ1bmN0aW9uKCkgeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lICsgJy9wcm9maWxlLycgKyB1c2VyTmFtZSArICcvbWVzc2FnZXMnOyB9KTsKCQl9CgkJaWYoc2V0dGluZ3MudXNlck1lbnVEaXJlY3QuYWNjb3VudCkgewoJCQl2YXIgX21lbnVFbGVtID0gJCgndWwudXNlckJhciBsYWJlbC51c2VyQmFyLWJ1dHRvbi0tdXNlcicpLnJlbW92ZUF0dHIoJ2RhdGEtbWVudScpLnJlbW92ZUF0dHIoJ2RhdGEtaGFuZGxlcicpOwoJCQlfbWVudUVsZW0uZmluZCgnaW5wdXQnKS5yZW1vdmVBdHRyKCdkYXRhLWhhbmRsZXInKS5jbGljayhmdW5jdGlvbigpIHsgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyBkb2N1bWVudC5sb2NhdGlvbi5ob3N0bmFtZSArICcvcHJvZmlsZS8nICsgdXNlck5hbWU7IH0pOwoJCX0KCgkJdmFyIF9hZGREZWFsID0gJCgnLm5hdlRyaWdnZXIxLXJvdyB1bC5oZWFkZXItdXNlcj5saS51c2VyYmFyLXBhZGRpbmctcmlnaHQgc3Bhbi5pbmxpbmUnKTsKCQlfYWRkRGVhbC50ZXh0KF9hZGREZWFsLnRleHQoKS5yZXBsYWNlKC8gZWludHJhZ2VuLywnJykpOwoJfQoKCWZ1bmN0aW9uIGFkZEN5YmVyRGVhbHooKSB7CgkJdmFyIF9uZXdNZW51ID0gJCgnPGxpPicpLmFkZENsYXNzKCdoaWRlLS1kb3duVGhyb3VnaC0nKS5hcHBlbmQoJCgnPGE+JykuYWRkQ2xhc3MoJ25hdk1lbnUxLWl0ZW0nKS5hdHRyKCdocmVmJywnaHR0cDovL3d3dy5teWRlYWx6LmRlL2N5YmVyLW1vbmRheS9jeWJlcmRlYWxzJykuaHRtbCgnQ3liZXItRGVhbHMnKSkuYXBwZW5kVG8oJCgnLm5hdk1lbnUtLXdpZHRoLWwnKS5lcSgwKSk7Cgl9CgoJZnVuY3Rpb24gcmVtb3ZlQWRzKCkgewoJCXZhciBfYWRzID0ge3RvcEJhcjogJy50b3BCYXInLCBnc1dpZGdldDogJyNncy13aWRnZXQnLCBpbnNpZGU6ICIjc2lkZSBzZWN0aW9uW2RhdGEtdHJhY2s9XCJ7XFxcImNhdGVnb3J5XFxcIjpcXFwiQmFubmVyIFNpZGViYXJcXFwifVwiXSIsIG5sU2VjdGlvbjogJy5pbmxpbmUtbmV3c2xldHRlciwgLm5ld3NsZXR0ZXInLCBhcHA6ICdbYWx0PSJhcHAgYmFubmVyIGZvciBpb3MgYW5kcm9pZCBhbmQgd2luZG93IHBob25lIl0nfTsKCQlmb3IoX2FJbmQgaW4gX2FkcykgewoJCQlpZihfYUluZCBpbiBzZXR0aW5ncy5oaWRlQWRzICYmIHNldHRpbmdzLmhpZGVBZHNbX2FJbmRdKSB7CgkJCQlpZigkKF9hZHNbX2FJbmRdKSAhPSBudWxsKSB7CgkJCQkJJChfYWRzW19hSW5kXSkucmVtb3ZlKCk7CgkJCQl9CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gYWRkRnVuY0xpbmtzKCkgewoJCXZhciBfdGhyZWFkcyA9ICQoJ2Rpdi50aHJlYWQsIGxpLnRocmVhZCcpOwoJCWlmKF90aHJlYWRzLmxlbmd0aCkgewoJCQkkKF90aHJlYWRzKS5lYWNoKGZ1bmN0aW9uIChfdEluZCwgX3RWYWwpIHsKCQkJCV90aHJlYWQgPSAkKF90VmFsKTsKCQkJCXZhciBfbGlzdCA9IF90aHJlYWQuZmluZCgnZm9vdGVyIHVsJyk7CgkJCQl2YXIgX2F1dGhvciA9ICQudHJpbShfdGhyZWFkLmZpbmQoIi50aHJlYWQtYXV0aG9yIikuZXEoMCkudGV4dCgpKTsKCQkJCXZhciBfdG9waWMgID0gJC50cmltKF90aHJlYWQuZmluZCgiLnRocmVhZC10aXRsZSBoMSIpLmVxKDApLnRleHQoKSk7CgkJCQl2YXIgX3BuTGluayA9ICQoJzxsaT4nKS5hZGRDbGFzcygnaExpc3QtaXRlbScpLmFwcGVuZCgkKCc8YT4nKS5jbGljayhzdGFydFdhaXRGb3JQTikuYWRkQ2xhc3MoJ2xpbmsnKS5hZGRDbGFzcygnaWNvJykuYWRkQ2xhc3MoJ2ljby0tdHlwZS1wbi1ibHVlJykuaHRtbCgnUE4nKS5hdHRyKCdkYXRhLW1vZGFsJywgJ3siZW5kcG9pbnQiOiJodHRwOlxcL1xcL3d3dy5teWRlYWx6LmRlXFwvcHJvZmlsZVxcLycgKyB1c2VyTmFtZSArICdcXC9tZXNzYWdlc1xcL21vZGFsLXdpbmRvdz90bz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KF9hdXRob3IpICsgJyJ9JykuYXR0cignZGF0YS1oYW5kbGVyJywgJ21vZGFsJykuYXR0cignaHJlZicsICdodHRwOi8vaHVrZC5teWRlYWx6LmRlL3Byb2ZpbGUvJyArIHVzZXJOYW1lICsgJy9tZXNzYWdlcy9jb21wb3NlLW1haWw/dG89JyArIGVuY29kZVVSSUNvbXBvbmVudChfYXV0aG9yKSkpOwoJCQkJYWRkR2xvYmFsU3R5bGUoJy5pY28tLXR5cGUtcG4tYmx1ZTo6YmVmb3JlIHsgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQW9BQUFBS0NBSUFBQUFDVUZqcUFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFKY0VoWmN3QUFEc01BQUE3REFjZHZxR1FBQUFCL1NVUkJWQ2hUWS9nUEJtOCsvVmg5NU42a1RWZUFDTWdBY2lIaUlPa2JqejlvWjYxRlEwQkJrUFRuYjcrQW5QMlhuaUhMUWJoQUtZWVROMTRpQ3lFemdGSU1RSnNnSElnRXNqRkFLUlJwTkxUdDlDTUdaT1ZvQ09nNmh2c3ZQcUdKd2hIVVkwQy9va2tBRVZBUUtnMEJ6OTUrdlhEdkxkQzFRQVpVNlA5L0FLUHB2amRKWmUzNEFBQUFBRWxGVGtTdVFtQ0MpOyBiYWNrZ3JvdW5kLXNpemU6IDEwcHggMTBweDsgYmFja2dyb3VuZC1wb3NpdGlvbjogM3B4IDNweDt9Jyk7CgkJCQlfbGlzdC5hcHBlbmQoX3BuTGluayk7CgoJCQkJdmFyIF9yZXBvcnRMaW5rID0gX3RocmVhZC5maW5kKCcuaWNvLS10eXBlLW1lZ2FwaG9uZS1ibHVlJykucGFyZW50KCk7CgkJCQlfbmV3TGluayA9ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ2hMaXN0LWl0ZW0nKS5odG1sKCc8YnV0dG9uIGNsYXNzPSJsaW5rIGljbyBpY28tLXR5cGUtc3BhbS1ibHVlIGljby0tcG9zLWwiIGRhdGEtaGFuZGxlcj0icmVwbGFjZSIgdHlwZT0iYnV0dG9uIj5TcGFtPC9idXR0b24+JykuZmluZCgnYnV0dG9uJykuYXR0cignZGF0YS1yZXBsYWNlJywgJ1siL3ZvdGU/dj1zcGFtJnQ9JyArIF90aHJlYWQuYXR0cignaWQnKSArICciLCAiZGl2Il0nKS5wYXJlbnQoKTsKCQkJCV9yZXBvcnRMaW5rLmJlZm9yZShfbmV3TGluayk7CgkJCQlfbmV3TGluayA9ICQoJzxkaXY+JykuYWRkQ2xhc3MoJ2hMaXN0LWl0ZW0nKS5odG1sKCc8YnV0dG9uIGNsYXNzPSJsaW5rIGljbyBpY28tLXR5cGUtdGltZS1ibHVlIGljby0tcG9zLWwiIGRhdGEtaGFuZGxlcj0icmVwbGFjZSIgdHlwZT0iYnV0dG9uIj5BYmdlbGF1ZmVuPC9idXR0b24+JykuZmluZCgnYnV0dG9uJykuYXR0cignZGF0YS1yZXBsYWNlJywgJ1siL3ZvdGU/dj1leHBpcmVkJnQ9JyArIF90aHJlYWQuYXR0cignaWQnKSArICciLCAiZGl2Il0nKS5wYXJlbnQoKTsKCQkJCV9yZXBvcnRMaW5rLmJlZm9yZShfbmV3TGluayk7CgkJCQlfcmVwb3J0TGluay5yZW1vdmUoKTsKCQkJfSk7CgkJfQoJfQoKCWZ1bmN0aW9uIHN0YXJ0V2FpdEZvclBOICgpIHsKCQl2YXIgX3RocmVhZF9pZCA9ICQoJ2Rpdi50aHJlYWQsIGxpLnRocmVhZCcpLmhhcygkKHRoaXMpKS5hdHRyKCdpZCcpOwoJCXRpbWVyLnBuID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uICgpIHsgd2FpdEZvclBOKF90aHJlYWRfaWQpIH0sIDUwKTsKCX0KCglmdW5jdGlvbiB3YWl0Rm9yUE4oX3RocmVhZF9pZCkgewoJCWlmKCEkKCcjJyArIF90aHJlYWRfaWQpLmZpbmQoJy5pY28tLXR5cGUtcG4tYmx1ZScpLmhhc0NsYXNzKCdzZWFsLS1zcGluJykpIHsKCQkJaWYoJ3BuJyBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIucG4pOwoJCQkJZGVsZXRlIHRpbWVyLnBuOwoJCQl9CgkJCSQoJyNwbS1zdWJqZWN0JykudmFsKCQudHJpbSgkKCcjJyArIF90aHJlYWRfaWQgKyAnIGhlYWRlci50aHJlYWQtaGVhZCBkaXYudGhyZWFkLXRpdGxlIC5pbmxpbmVUZXh0JykudGV4dCgpKSk7CgkJCXNhdmVSZXN0b3JlUE4oJC50cmltKCQoJyMnICsgX3RocmVhZF9pZCArICcgaGVhZGVyLnRocmVhZC1oZWFkIC50aHJlYWQtbWV0YSBhLnRocmVhZC1hdXRob3InKS50ZXh0KCkpLCBfdGhyZWFkX2lkKTsKCQl9Cgl9CgoJZnVuY3Rpb24gaW5zZXJ0RGlyZWN0TGluaygpIHsKCQkvLyBvbkNsaWNrIGVudGZlcm50CgkJJCgiLmNvbW1lbnRzLWxpc3QgPiBsaSIpLmVhY2goZnVuY3Rpb24oX2luZGV4KSB7CgkJCXZhciBfZGlyZWN0TGluayA9IGRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lICsgZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUgKyAnP3BhZ2U9JyArICQoIi5mb3JtLS1uYXJyb3cgaW5wdXRbbmFtZT1jdXJfcGFnZV0iKS52YWwoKSArJyMnICsgJCh0aGlzKS5wcm9wKCdpZCcpOwoJCQkkKHRoaXMpLmZpbmQoIi5oTGlzdDpmaXJzdCIpLmFwcGVuZCgiPGxpIGNsYXNzPVwiY29tbWVudC1vcHRpb24gaExpc3QtaXRlbVwiPiA8YSBocmVmPSIgKyBfZGlyZWN0TGluayArIj48YnV0dG9uIGNsYXNzPVwibGluayBpY28gaWNvLS10eXBlLWFycm93LWJsdWUgaWNvLS1wb3MtbFwiPkRpcmVrdGxpbms8L2J1dHRvbj48YS8+PC9saT4iKTsKCQl9KTsKCX0KCglmdW5jdGlvbiBhZGRGZWVkYmFja0J1dHRvbnMoKSB7CgkJdmFyIF90aHJlYWQgPSAkKCdkaXYudGhyZWFkJyk7CgkJaWYoX3RocmVhZC5sZW5ndGgpIHsKCQkJdmFyIF9saXN0ID0gX3RocmVhZC5maW5kKCdmb290ZXIgdWwnKTsKCQkJdmFyIF9hdXRob3IgPSAkLnRyaW0oX3RocmVhZC5maW5kKCIudGhyZWFkLWF1dGhvciIpLmVxKDApLnRleHQoKSk7CgkJfQoJfQoKCWZ1bmN0aW9uIG1hcmtQblJlYWQoKSB7CgkJaWYoc2V0dGluZ3MudXNlck1lbnVEaXJlY3QucG4pIHsKCQkJJC5hamF4KHsKCQkJCW1ldGhvZDogJ1BPU1QnLAoJCQkJdXJsOiAnaHR0cDovL3d3dy5teWRlYWx6LmRlL2FjdGl2aXR5P3R5cGU9cG0nLAoJCQkJY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLAoJCQkJYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyonLAoJCQkJZGF0YVR5cGU6ICdqc29uJwoJCQl9KS5kb25lKGZ1bmN0aW9uICgpIHsKCQkJCSQoJyNhY3Rpdml0aWVzLWNvdW50LXBtJykucmVtb3ZlKCk7CgkJCX0pOwoJCX0KCX0KCglmdW5jdGlvbiBmaWx0ZXJQYXRoKCkgewoJCV9wYXRoID0gZG9jdW1lbnQubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgvXlwvKG5ld3xob3R8ZGlzY3Vzc2VkKSQvLCAnLycpLnJlcGxhY2UoL15cLyhbXlwvXSspLiokLywgJyQxJykucmVwbGFjZSgvKC0/KG5ld3xkaXNjdXNzZWQpKT8kLywgJycpOwoJCWlmKF9wYXRoICE9ICcvJyAmJiAhKF9wYXRoIGluIHNldHRpbmdzLmZyb21UbykpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlyZXR1cm4gX3BhdGg7Cgl9CgoJZnVuY3Rpb24gc3RhcnRXYWl0Rm9yU3VibWl0KCkgewoJCXRpbWVyLnN1Ym1pdCA9IHdpbmRvdy5zZXRJbnRlcnZhbCh3YWl0Rm9yU3VibWl0LCA1MCk7Cgl9CgoJZnVuY3Rpb24gd2FpdEZvclN1Ym1pdCgpIHsKCQlpZighJCgnI2NvbW1lbnRGb3JtJykuZXEoMCkuaGFzQ2xhc3MoJ3NlYWwtLXNwaW4nKSkgewoJCQlpZignc3VibWl0JyBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXIuc3VibWl0KTsKCQkJCWRlbGV0ZSB0aW1lci5zdWJtaXQ7CgkJCX0KCQkJbW9kaWZ5Q29tbWVudHMoKTsKCQkJYWRkRmVlZGJhY2tCdXR0b25zKCk7CgkJfQoJfQoKCWZ1bmN0aW9uIHN0YXJ0V2FpdEZvckNoYW5nZSgpIHsKCQl2YXIgX2xpbmsgPSAkKHRoaXMpOwoJCXZhciBfcGFyYW1zID0gSlNPTi5wYXJzZShfbGluay5hdHRyKCdkYXRhLXJlcGxhY2UnKSlbMl07CgkJdGltZXJbJ2NoYW5nZV8nK19wYXJhbXMuY29tbWVudF9pZF0gPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7IHdhaXRGb3JDaGFuZ2UoX3BhcmFtcy5jb21tZW50X2lkKX0sIDUwKTsKCX0KCglmdW5jdGlvbiB3YWl0Rm9yQ2hhbmdlKF9jb21tZW50X2lkKSB7CgkJaWYoISQoJ3VsLmNvbW1lbnRzLWxpc3QgI3Bvc3QnICsgX2NvbW1lbnRfaWQgKyAnIGRpdi5jb21tZW50cy1ib2R5JykuZXEoMCkuaGFzQ2xhc3MoJ3NlYWwtLXNwaW4nKSkgewoJCQlpZigoJ2NoYW5nZV8nK19jb21tZW50X2lkKSBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJbJ2NoYW5nZV8nK19jb21tZW50X2lkXSk7CgkJCQlkZWxldGUgdGltZXJbJ2NoYW5nZV8nK19jb21tZW50X2lkXTsKCQkJfQoJCQkkKCd1bC5jb21tZW50cy1saXN0ICNwb3N0JyArIF9jb21tZW50X2lkICsgJyAjY29tbWVudEVkaXRGb3JtLXJlYXNvbicpLmF0dHIoJ3ZhbHVlJywgc2V0dGluZ3MuY29tbWVudHMuZWRpdFJlYXNvbikudmFsKHNldHRpbmdzLmNvbW1lbnRzLmVkaXRSZWFzb24pOwoJCQl2YXIgX2NvbW1lbnRGaWVsZCA9ICQoJyNjb21tZW50RWRpdEZvcm0tY29udGVudC0nICsgX2NvbW1lbnRfaWQpOwoJCQlfY29tbWVudEZpZWxkLnZhbChfY29tbWVudEZpZWxkLnZhbCgpLnJlcGxhY2UoL1w8YnJccypcL1w+JC9tLCAnJykpOwoJCQlfY29tbWVudEZpZWxkLmNoYW5nZShjdXN0b21TbWlsZXlzKTsKCQkJX2NvbW1lbnRGaWVsZC5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5wYXJlbnQoKS5maW5kKCcjY29tbWVudEVkaXRGb3JtLXJlYXNvbicpLmNoYW5nZShjdXN0b21TbWlsZXlzKTsKCQkJX2NvbW1lbnRGaWVsZC5wYXJlbnQoKS5maW5kKCdkaXYubWFya0l0VXBIZWFkZXIgbGkuZWRpdG9yLW9wdGlvbi0tdHlwZS1lbW90aWNvbnM+YnV0dG9uJykuY2xpY2soc3RhcnRXYWl0Rm9yU21pbGV5cyk7CgkJfQoJfQoJCglmdW5jdGlvbiBzdGFydFdhaXRGb3JTbWlsZXlzKCkgewoJCWxhc3RGb2N1cyA9ICQoJzpmb2N1cycpOwoJCXZhciBfbGkgPSAkKHRoaXMpOwoJCXRyeSB7CgkJCXZhciBfZm9ybSA9ICQoX2xpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLnBhcmVudCgpLmZpbmQoJ3RleHRhcmVhLmlucHV0JylbMF0uZm9ybSk7CgkJCXZhciBfY29tbWVudF9pZCA9ICduZXcnOwoJCQlpZihfZm9ybS5hdHRyKCdpZCcpID09ICdjb21tZW50RWRpdEZvcm0nKSB7CgkJCQlfY29tbWVudF9pZCA9IF9mb3JtLmZpbmQoJ2lucHV0W25hbWU9ImNvbW1lbnRfaWQiXScpLnZhbCgpOwoJCQl9CgkJCXRpbWVyWydzbWlsZXlzXycrX2NvbW1lbnRfaWRdID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgeyB3YWl0Rm9yU21pbGV5cyhfY29tbWVudF9pZCl9LCA1KTsKCQl9IGNhdGNoIChlKSB7IH0KCX0KCglmdW5jdGlvbiB3YWl0Rm9yU21pbGV5cyhfY29tbWVudF9pZCkgewoJCWlmKCQoJyNwb3dlclRpcDp2aXNpYmxlPnVsPmxpPmEnKS5sZW5ndGgpIHsKCQkJaWYoKCdzbWlsZXlzXycrX2NvbW1lbnRfaWQpIGluIHRpbWVyKSB7CgkJCQl3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aW1lclsnc21pbGV5c18nK19jb21tZW50X2lkXSk7CgkJCQlkZWxldGUgdGltZXJbJ3NtaWxleXNfJytfY29tbWVudF9pZF07CgkJCX0KCQkJJCgnI3Bvd2VyVGlwPnVsPmxpPmEnKS5lYWNoKGZ1bmN0aW9uKF9zSW5kLCBfc1ZhbCkgewoJCQkJaWYoJChfc1ZhbCkuYXR0cigndGl0bGUnKSBpbiBvbGRTbWlsZXlzKSB7CgkJCQkJdmFyIF9saSA9ICQoX3NWYWwpLnBhcmVudCgpOwoJCQkJCXZhciBfY2xhc3NlcyA9IF9saS5hdHRyKCdjbGFzcycpLnNwbGl0KC8gLyk7CgkJCQkJJChfY2xhc3NlcykuZWFjaChmdW5jdGlvbiAoX2NJbmQsIF9jVmFsKSB7CgkJCQkJCWlmKF9jVmFsLm1hdGNoKC9eZWRpdG9yLW1lbnUtaXRlbS0tdHlwZS0vKSkgewoJCQkJCQkJX2xpLnJlbW92ZUNsYXNzKF9jVmFsKTsKCQkJCQkJfQoJCQkJCX0pOwoJCQkJCV9saS5maW5kKCc+YScpLmF0dHIoJ3N0eWxlJywgImJhY2tncm91bmQtaW1hZ2U6IHVybCgnIiArIG9sZFNtaWxleXNbJChfc1ZhbCkuYXR0cigndGl0bGUnKV0gKyAiJyk7Iik7CgkJCQl9CgkJCX0pOwoJCQkvLyBlaWdlbmUgU21pbGV5cwoJCQl2YXIgX3NJRCA9IHBhcnNlSW50KCgkKCcjcG93ZXJUaXA+dWw+bGk6bGFzdCcpLmF0dHIoJ2NsYXNzJykgKyAnICcpLnJlcGxhY2UoL14uKm1hcmtJdFVwQnV0dG9uNS0oWzAtOV0rKSAuKiQvLCAnJDEnKSwgMTApOwoJCQlmb3IoX3NJbmQgaW4gc2V0dGluZ3Muc21pbGV5cykgewoJCQkJdmFyIF9uZXdFbGVtID0gJCgnPGxpPicpLmFkZENsYXNzKCdtYXJrSXRVcEJ1dHRvbiBtYXJrSXRVcEJ1dHRvbjUtJyArICgrK19zSUQpICsgJyBpR3JpZC1pdGVtIHRleHQtLWFsaWduLWNlbnRlciBlZGl0b3ItbWVudS1pdGVtJykuYXBwZW5kKCc8YSB0aXRsZT0iJyArIF9zSW5kICsgJyIgaHJlZj0iIiBkYXRhLWhhbmRsZXI9InBvcG92ZXItY2xvc2UiIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCcnICsgc2V0dGluZ3Muc21pbGV5c1tfc0luZF0gKyAnXCcpOyI+PC9hPicpOwoJCQkJJCgnI3Bvd2VyVGlwPnVsJykuYXBwZW5kKF9uZXdFbGVtKTsKCQkJCV9uZXdFbGVtLmZpbmQoJz5hJykuY2xpY2soYWRkU21pbGV5VG9Db21tZW50KTsKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBhZGRTbWlsZXlUb0NvbW1lbnQoKSB7CgkJdmFyIF9zbWlsZXkgPSAnW2ltZ10nICsgc2V0dGluZ3Muc21pbGV5c1skKHRoaXMpLmF0dHIoJ3RpdGxlJyldICsgJ1svaW1nXSc7CgkJaWYobGFzdEZvY3VzLnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpID09ICd0ZXh0YXJlYScpIHsKCQkJdmFyIF9zZWxTdGFydCA9IGxhc3RGb2N1c1swXS5zZWxlY3Rpb25TdGFydDsKCQkJdmFyIF9uZXdUZXh0ID0gbGFzdEZvY3VzLnZhbCgpLnN1YnN0cigwLF9zZWxTdGFydCkgKyBfc21pbGV5ICsgbGFzdEZvY3VzLnZhbCgpLnN1YnN0cihsYXN0Rm9jdXNbMF0uc2VsZWN0aW9uRW5kKTsKCQkJbGFzdEZvY3VzLnZhbChfbmV3VGV4dCk7CgkJCWxhc3RGb2N1c1swXS5zZWxlY3Rpb25FbmQgPSBsYXN0Rm9jdXNbMF0uc2VsZWN0aW9uU3RhcnQgPSBfc2VsU3RhcnQgKyBfc21pbGV5Lmxlbmd0aDsKCQl9Cgl9CgoJZnVuY3Rpb24gc3RhcnRXYWl0Rm9yQ29tbWVudE1lbnUoX2NvbW1lbnRGaWVsZCkgewoJCXRpbWVyWydjb21tZW50bWVudSddID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgeyB3YWl0Rm9yQ29tbWVudE1lbnUoX2NvbW1lbnRGaWVsZCl9LCA1MCk7Cgl9CgkKCWZ1bmN0aW9uIHdhaXRGb3JDb21tZW50TWVudShfY29tbWVudEZpZWxkKSB7CgkJdmFyIF9saSA9IF9jb21tZW50RmllbGQucGFyZW50KCkuZmluZCgnZGl2Lm1hcmtJdFVwSGVhZGVyIGxpLmVkaXRvci1vcHRpb24tLXR5cGUtZW1vdGljb25zJyk7CgkJaWYoX2xpLmxlbmd0aCkgewoJCQl3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aW1lclsnY29tbWVudG1lbnUnXSk7CgkJCWRlbGV0ZSh0aW1lclsnY29tbWVudG1lbnUnXSk7CgkJCV9saS5maW5kKCc+YnV0dG9uJykuY2xpY2soc3RhcnRXYWl0Rm9yU21pbGV5cyk7CgkJfQoJfQoJCglmdW5jdGlvbiBjdXN0b21TbWlsZXlzKCkgewoJCXZhciBfY29tbWVudEZpZWxkID0gJCh0aGlzKTsKCQlpZihzZXR0aW5ncy5vbGRTbWlsZXlzLnVzZSkgewoJCQlmb3IoX3NJbmQgaW4gb2xkU21pbGV5cykgewoJCQkJX2NvbW1lbnRGaWVsZC52YWwoX2NvbW1lbnRGaWVsZC52YWwoKS5yZXBsYWNlKG5ldyBSZWdFeHAoUmVnRXhwLmVzY2FwZShfc0luZCksICdnJyksICdbaW1nXScrb2xkU21pbGV5c1tfc0luZF0rJ1svaW1nXScpKTsKCQkJfQoJCX0KCQlmb3IoX3NJbmQgaW4gc2V0dGluZ3Muc21pbGV5cykgewoJCQlfY29tbWVudEZpZWxkLnZhbChfY29tbWVudEZpZWxkLnZhbCgpLnJlcGxhY2UobmV3IFJlZ0V4cChSZWdFeHAuZXNjYXBlKF9zSW5kKSwgJ2cnKSwgJ1tpbWddJytzZXR0aW5ncy5zbWlsZXlzW19zSW5kXSsnWy9pbWddJykpOwoJCX0KCX0KCglmdW5jdGlvbiBtb2RpZnlDb21tZW50cygpIHsKCQl2YXIgX2NoYW5nZUxpbmtzID0gJCgndWwuY29tbWVudHMtbGlzdCAuaWNvLS10eXBlLWVkaXQtYmx1ZScpLm9mZignY2xpY2snLCBzdGFydFdhaXRGb3JDaGFuZ2UpLm9uKCdjbGljaycsIHN0YXJ0V2FpdEZvckNoYW5nZSk7CgkJJCgnI2NvbW1lbnRGb3JtJykuc3VibWl0KHN0YXJ0V2FpdEZvclN1Ym1pdCk7CgoJCV9jb21tZW50RmllbGQgPSAkKCcjY29tbWVudEZvcm0tY29udGVudCcpOwoJCWlmKHNldHRpbmdzLmNvbW1lbnRzLnVzZVNpZ25hdHVyZSkgewoJCQlpZihfY29tbWVudEZpZWxkLmxlbmd0aCAmJiBzZXR0aW5ncy5jb21tZW50cy5zaWduYXR1cmUubGVuZ3RoICYmIF9jb21tZW50RmllbGQudmFsKCkuaW5kZXhPZihzZXR0aW5ncy5jb21tZW50cy5zaWduYXR1cmUpID09IC0xKSB7CgkJCQlfY29tbWVudEZpZWxkLnZhbChfY29tbWVudEZpZWxkLnZhbCgpICsgIlxuIiArIHNldHRpbmdzLmNvbW1lbnRzLnNpZ25hdHVyZSk7CgkJCQlfY29tbWVudEZpZWxkLnNldEN1cnNvclBvc2l0aW9uKDApOwoJCQl9CgkJfQoJCV9jb21tZW50RmllbGQuY2hhbmdlKGN1c3RvbVNtaWxleXMpOwoJCV9jb21tZW50RmllbGQuYmx1cihjdXN0b21TbWlsZXlzKTsKCQlzdGFydFdhaXRGb3JDb21tZW50TWVudShfY29tbWVudEZpZWxkKTsKCgkJdmFyIF9xdW90ZUxpbmtzID0gJCgnLmljby0tdHlwZS1xdW90ZS1ibHVlJyk7CgkJaWYoX3F1b3RlTGlua3MubGVuZ3RoKSB7CgkJCV9xdW90ZUxpbmtzLmVhY2goZnVuY3Rpb24gKF9xbEluZCwgX3FsVmFsKSB7CgkJCQl2YXIgX3F1b3RlTGluayA9ICQoX3FsVmFsKTsKCQkJCV9xdW90ZUxpbmsucmVtb3ZlQXR0cignZGF0YS10cmFjaycpLnJlbW92ZUF0dHIoJ2RhdGEtaGFuZGxlcicpOwoJCQkJX3F1b3RlTGluay5jbGljayhncmFiUXVvdGUpOwoJCQl9KTsKCQl9CgoJCXZhciBfdXNlckF2YXRhcnMgPSAkKCdpbWcuYXZhdGFyLWltYWdlLS1jb21tZW50Om5vdChbZGF0YS1wb3BvdmVyKj0iLycgKyB1c2VyTmFtZSArICc/Il0pJyk7CgkJaWYoX3VzZXJBdmF0YXJzLmxlbmd0aCkgewoJCQlfdXNlckF2YXRhcnMub2ZmKCdjbGljaycsIHN0YXJ0V2FpdEZvclVzZXJDb21tZW50TWVudSkub24oJ2NsaWNrJywgc3RhcnRXYWl0Rm9yVXNlckNvbW1lbnRNZW51KTsKCQl9Cgl9CgoJZnVuY3Rpb24gc3RhcnRXYWl0Rm9yVXNlckNvbW1lbnRNZW51KCkgewoJCXZhciBfbGluayA9ICQodGhpcyk7CgkJdmFyIF9jb21tZW50VXNlciA9IF9saW5rLmF0dHIoJ2RhdGEtcG9wb3ZlcicpLnJlcGxhY2UoL14uKnByb2ZpbGVcXFwvKFteXD9dKylcPy4qJC8sICckMScpOwoJCXRpbWVyWyd1c2VyQ29tbWVudE1lbnVfJytfY29tbWVudFVzZXJdID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgeyB3YWl0Rm9yVXNlckNvbW1lbnRNZW51KF9jb21tZW50VXNlcil9LCA1MCk7Cgl9CgoJZnVuY3Rpb24gd2FpdEZvclVzZXJDb21tZW50TWVudShfY29tbWVudFVzZXIpIHsKCQlpZigkKCcjcG93ZXJUaXAgPiBkaXYnKS5oYXNDbGFzcygncHJvZmlsZScpKSB7CgkJCWlmKCd1c2VyQ29tbWVudE1lbnVfJyArIF9jb21tZW50VXNlciBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJbJ3VzZXJDb21tZW50TWVudV8nICsgX2NvbW1lbnRVc2VyXSk7CgkJCQlkZWxldGUgdGltZXJbJ3VzZXJDb21tZW50TWVudV8nICsgX2NvbW1lbnRVc2VyXTsKCQkJfQoJCQkvLyBhdHRhY2ggRXZlbnRzIG9uIFBOLUJ1dHRvbgoJCQkkKCcjcG93ZXJUaXAgPiBkaXYucHJvZmlsZSB1bC5wcm9maWxlLWNvbHVtbiBhLmJ1dHRvbicpLmhhcygnc3Bhbi5pY28tLXR5cGUtbWFpbC13aGl0ZScpLm9uKCdjbGljaycsIHN0YXJ0V2FpdEZvckNvbW1lbnRQTik7CgkJfQoJfQoKCWZ1bmN0aW9uIHN0YXJ0V2FpdEZvckNvbW1lbnRQTigpIHsKCQl2YXIgX2xpbmsgPSAkKHRoaXMpOwoJCXZhciBfcG5Vc2VyID0gX2xpbmsuYXR0cignaHJlZicpLnJlcGxhY2UoL14uKlw/dG89KC4qKSQvLCAnJDEnKTsKCQl0aW1lclsncG5XaW5kb3dfJytfcG5Vc2VyXSA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHsgd2FpdEZvckNvbW1lbnRQTihfcG5Vc2VyKX0sIDUwKTsKCX0KCglmdW5jdGlvbiB3YWl0Rm9yQ29tbWVudFBOKF9wblVzZXIpIHsKCQlpZighJCgnI3Bvd2VyVGlwID4gZGl2LnByb2ZpbGUgdWwucHJvZmlsZS1jb2x1bW4gYS5idXR0b24nKS5oYXMoJ3NwYW4uaWNvLS10eXBlLW1haWwtd2hpdGUnKS5oYXNDbGFzcygnc2VhbC0tc3BpbicpKSB7CgkJCWlmKCdwbldpbmRvd18nICsgX3BuVXNlciBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJbJ3BuV2luZG93XycgKyBfcG5Vc2VyXSk7CgkJCQlkZWxldGUgdGltZXJbJ3BuV2luZG93XycgKyBfcG5Vc2VyXTsKCQkJfQoJCQlzYXZlUmVzdG9yZVBOKF9wblVzZXIpOwoJCX0KCX0KCglmdW5jdGlvbiBzYXZlUE4oX3VzZXJQYXRoKSB7CgkJc2F2ZS5wbltfdXNlclBhdGhdID0ge21lc3NhZ2U6ICQoJyNwbS1tZXNzYWdlJykudmFsKCksIHN1YmplY3Q6ICQoJyNwbS1zdWJqZWN0JykudmFsKCl9OwoJfQoKCWZ1bmN0aW9uIHNhdmVSZXN0b3JlUE4oX3BuVXNlciwgX3RocmVhZF9pZCwgX2luaXRTYXZlKSB7CgkJLy8gYXR0YWNoIEV2ZW50cyBvbiBQTi1CdXR0b24KCQl2YXIgX3VzZXJQYXRoID0gX3BuVXNlciArIChfdGhyZWFkX2lkICE9IG51bGwgPyAnXycgKyBfdGhyZWFkX2lkIDogJycpOwoJCWlmKF91c2VyUGF0aCBpbiBzYXZlLnBuKSB7CgkJCSQoJyNwbS1zdWJqZWN0JykudmFsKHNhdmUucG5bX3VzZXJQYXRoXS5zdWJqZWN0KTsKCQkJJCgnI3BtLW1lc3NhZ2UnKS52YWwoc2F2ZS5wbltfdXNlclBhdGhdLm1lc3NhZ2UpOwoJCX0KCQlpZihfaW5pdFNhdmUgIT0gbnVsbCAmJiBfaW5pdFNhdmUpIHsKCQkJc2F2ZVBOKF91c2VyUGF0aCk7CgkJfQoJCSQoJyNwbS1zdWJqZWN0LCAjcG0tbWVzc2FnZScpLmNoYW5nZShmdW5jdGlvbigpIHsgc2F2ZVBOKF91c2VyUGF0aCk7IH0pOwoJCSQoJ2Rpdi5tb2RhbFdpbi1ib2R5JykuaGFzKCcjcG0tbWVzc2FnZScpLmZpbmQoJ2Zvcm0uZm9ybScpLnN1Ym1pdChmdW5jdGlvbiAoKSB7CgkJCWlmKF91c2VyUGF0aCBpbiBzYXZlLnBuKSB7CgkJCQlkZWxldGUgc2F2ZS5wbltfdXNlclBhdGhdOwoJCQl9CgkJCXRpbWVyWydwblNlbnRfJyArIF91c2VyUGF0aF0gPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyB3YWl0Rm9yUE5TZW50KF9wblVzZXIsIF90aHJlYWRfaWQpIH0sIDUwKTsKCQl9KTsKCX0KCglmdW5jdGlvbiB3YWl0Rm9yUE5TZW50KF9wblVzZXIsIF90aHJlYWRfaWQpIHsKCQlHTV9sb2coJ1dhaXRpbmcgZm9yIFBOIHNlbnQnKTsKCQl2YXIgX2Zvcm0gPSAkKCcjdGVtcGxhdGUtbW9kYWwgLm1vZGFsV2luJykuaGFzKCcjcG0tc3ViamVjdCcpLmZpbmQoJ2Zvcm0uZm9ybScpOwoJCWlmKCFfZm9ybS5oYXNDbGFzcygnc2VhbC0tc3BpbicpKSB7CgkJCXZhciBfdXNlclBhdGggPSBfcG5Vc2VyICsgKF90aHJlYWRfaWQgIT0gbnVsbCA/ICdfJyArIF90aHJlYWRfaWQgOiAnJyk7CgkJCWlmKCdwblNlbnRfJyArIF91c2VyUGF0aCBpbiB0aW1lcikgewoJCQkJd2luZG93LmNsZWFySW50ZXJ2YWwodGltZXJbJ3BuU2VudF8nICsgX3VzZXJQYXRoXSk7CgkJCQlkZWxldGUgdGltZXJbJ3BuU2VudF8nICsgX3VzZXJQYXRoXTsKCQkJfQoJCQl2YXIgX3N1Y2Nlc3MgPSBfZm9ybS5maW5kKCcubWVzc2FnZScpLmVxKDApLmhhc0NsYXNzKCdtZXNzYWdlLS10eXBlLXN1Y2Nlc3MnKTsKCQkJR01fbG9nKCdHZXNlbmRldDogJyArIF9zdWNjZXNzKTsKCQkJaWYoX3N1Y2Nlc3MpIHsKCQkJCSQoJyN0ZW1wbGF0ZS1tb2RhbCAubW9kYWxXaW4nKS5odG1sKCcnKS5yZW1vdmVDbGFzcygnbW9kYWxXaW4nKTsKCQkJCSQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoJ21vZGFsLS1hY3RpdmUnKTsKCQkJCWNyZWF0ZU1lc3NhZ2VXaW5kb3coJ05hY2hyaWNodCB2ZXJzY2hpY2t0IScsICdzdWNjZXNzJyk7CgkJCX0gZWxzZSB7CgkJCQlzYXZlUmVzdG9yZVBOKF9wblVzZXIsIF90aHJlYWRfaWQsIHRydWUpOwoJCQl9CgkJfQoJfQoKCWZ1bmN0aW9uIGdyYWJRdW90ZSgpIHsKCQl2YXIgX3F1b3RlTGluayA9ICQodGhpcyk7CgkJdmFyIF9wYXJhbXMgPSBKU09OLnBhcnNlKF9xdW90ZUxpbmsuYXR0cignZGF0YS1jb21tZW50LXF1b3RlJykpOwoJCSQuYWpheCh7CgkJCW1ldGhvZDogJ1BPU1QnLAoJCQl1cmw6ICdodHRwOi8vd3d3Lm15ZGVhbHouZGUvY29tbWVudD9yYXc9MScsCgkJCWNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywKCQkJYWNjZXB0OiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0LCAqLyonLAoJCQlkYXRhOiAnY29tbWVudF9pZD0nICsgX3BhcmFtcy5jb21tZW50SWQgKyAnJnRocmVhZF9pZD0nICsgX3BhcmFtcy50aHJlYWRJZCwKCQkJZGF0YVR5cGU6ICdqc29uJwoJCX0pLmRvbmUoZnVuY3Rpb24gKF9yZGF0YSkgewoJCQlpZih0eXBlb2YgX3JkYXRhID09ICdvYmplY3QnICYmICdkYXRhJyBpbiBfcmRhdGEgJiYgdHlwZW9mIF9yZGF0YS5kYXRhID09ICdvYmplY3QnICYmICdjb21tZW50X2lkJyBpbiBfcmRhdGEuZGF0YSkgewoJCQkJdmFyIF9jb21tZW50ID0gJ1txdW90ZT0nICsgX3BhcmFtcy51c2VybmFtZSArICddJyArIF9yZGF0YS5kYXRhLmNvbnRlbnQucmVwbGFjZSgvXDxiciBcL1w+XFtlZGl0X3JlYXNvbnNcXVteXStcW1wvZWRpdF9yZWFzb25zXF0vbSwgJycpICsgJ1svcXVvdGVdJzsKCQkJCS8qIFplaWxlbndlY2hzZWwgZW50ZmVybmVuICovCgkJCQlfY29tbWVudCA9IF9jb21tZW50LnJlcGxhY2UoL15ccyskL2csICcnKTsKCQkJCXdoaWxlKC9cblxyP1xuL20udGVzdChfY29tbWVudCkpIHsKCQkJCQlfY29tbWVudCA9IF9jb21tZW50LnJlcGxhY2UoL1xuXHI/XG4vbSwiXG4iKTsKCQkJCX0KCQkJCS8qIG1laHJmYWNoZSBMZWVyemVpY2hlbiAqLwoJCQkJd2hpbGUoLyhcUylbXlxTXHJcbl17Mix9KFxTKS8udGVzdChfY29tbWVudCkpIHsKCQkJCQlfY29tbWVudCA9IF9jb21tZW50LnJlcGxhY2UoLyhcUylbXlxTXHJcbl17Mix9KFxTKS9nLCIkMSAkMiIpOwoJCQkJfQoJCQkJLyogZWluemVsbmUgTGVlcnplaWNoZW4gbmFjaCBCQkNvZGUgKi8KCQkJCV9jb21tZW50ID0gX2NvbW1lbnQucmVwbGFjZSgvcXVvdGUoPShbYS16QS1aMC05XSspPyk/XF1ccy9nLCJxdW90ZSQxXSIpOyAgICAgICAgICAgCgkJCQkvKiBlaW56ZWxuZSBMZWVyemVpY2hlbiB2b3IgQkJDb2RlICovCgkJCQlfY29tbWVudCA9IF9jb21tZW50LnJlcGxhY2UoL1xzXFsoXC8pP3F1b3RlL2csIlskMXF1b3RlIik7CgkJCQkvKiBMZWVyemVpY2hlbiBhbiBBbmZhbmcgdW5kIEVuZGUgZGVzIFN0cmluZ3MgKi8KCQkJCV9jb21tZW50ID0gJC50cmltKF9jb21tZW50KTsKCQkJCV9jb21tZW50ID0gbWF4UXVvdGVzKF9jb21tZW50KTsKCQkJCSQoJyNjb21tZW50Rm9ybS1jb250ZW50JykuaW5zZXJ0QXRDYXJldChfY29tbWVudCk7CgkJCX0KCQl9KTsKCX0KCglmdW5jdGlvbiBtYXhRdW90ZXMoX3F1b3RlQ29udGVudCkgewoJCXZhciBfcXVvdGVTdGFydFBhdHRlcm4gPSAvXFtxdW90ZSg9WzAtOWEtekEtWl9dKyk/XF0vZzsKCQl2YXIgX3F1b3RlRW5kUGF0dGVybiA9IC9cW1wvcXVvdGVcXS9nOwoJCXZhciBfcXVvdGVTdGFydHMgPSBfcXVvdGVDb250ZW50Lm1hdGNoKF9xdW90ZVN0YXJ0UGF0dGVybik7CgkJdmFyIF9xdW90ZUVuZHMgPSBfcXVvdGVDb250ZW50Lm1hdGNoKF9xdW90ZUVuZFBhdHRlcm4pOwoJCXZhciBfcXVvdGVTdGFydENvdW50ID0gMDsKCQl2YXIgX3F1b3RlRW5kQ291bnQgPSAwOwoKCQlpZiAoX3F1b3RlU3RhcnRzICYmIF9xdW90ZUVuZHMpCXsKCQkJX3F1b3RlU3RhcnRDb3VudCA9IF9xdW90ZVN0YXJ0cy5sZW5ndGg7CgkJCV9xdW90ZUVuZENvdW50ID0gX3F1b3RlRW5kcy5sZW5ndGg7CgkJfQoKCQlpZiAoX3F1b3RlU3RhcnRDb3VudCAhPSBfcXVvdGVFbmRDb3VudCkgewoJCQlhbGVydCgiQkJDb2RlcyBmdWVyIFppdGF0ZSBuaWNodCBlaW5kZXV0aWcuIik7CgkJCXJldHVybiBfcXVvdGVDb250ZW50OwoJCX0KCgkJLyogbWF4aW1hbGUgRWJlbmVuICAqLwoJCS8qIG1pdCAwIGJlZ2lubmVuZCAqLwoJCXZhciBfbWF4UXVvdGVMZXZlbCA9IHNldHRpbmdzLmNvbW1lbnRzLm1heFF1b3RlTGV2ZWw7CgkJaWYgKF9xdW90ZVN0YXJ0Q291bnQgPD0gX21heFF1b3RlTGV2ZWwpIHsKCQkJcmV0dXJuIF9xdW90ZUNvbnRlbnQ7CgkJfQoKCQl2YXIgX3N0YXJ0UG9zID0gbmV3IEFycmF5KCk7CgkJdmFyIF9lbmRQb3MgPSBuZXcgQXJyYXkoKTsgIAkKCQl2YXIgX3Bvc2l0aW9ucyA9IEFycmF5KCk7CgkJZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9xdW90ZVN0YXJ0Q291bnQ7IF9pKyspIHsKCQkJX3Bvc2l0aW9ucy5wdXNoKHtwb3M6IF9xdW90ZUNvbnRlbnQuaW5kZXhPZihfcXVvdGVTdGFydHNbX2ldLCBfc3RhcnRQb3NbX2ktMV0gKyAxKSwgdHlwZTogJ3N0YXJ0JywgbWF0Y2g6IF9xdW90ZVN0YXJ0c1tfaV19KTsKCQkJX3N0YXJ0UG9zW19pXSA9IF9xdW90ZUNvbnRlbnQuaW5kZXhPZihfcXVvdGVTdGFydHNbX2ldLCBfc3RhcnRQb3NbX2ktMV0gKyAxKTsKCQkJX3Bvc2l0aW9ucy5wdXNoKHtwb3M6IF9xdW90ZUNvbnRlbnQuaW5kZXhPZihfcXVvdGVFbmRzW19pXSwgX2VuZFBvc1tfaS0xXSArIDEpLCB0eXBlOiAnZW5kJywgbWF0Y2g6IF9xdW90ZUVuZHNbX2ldfSk7CgkJCV9lbmRQb3NbX2ldID0gX3F1b3RlQ29udGVudC5pbmRleE9mKF9xdW90ZUVuZHNbX2ldLCBfZW5kUG9zW19pLTFdICsgMSk7CgkJfQoJCWRlbGV0ZSBfc3RhcnRQb3M7CgkJZGVsZXRlIF9lbmRQb3M7CgoJCXZhciBfY3VyUXVvdGVMZXZlbCA9IDA7CgkJdmFyIF9yZWR1Y2VkUXVvdGUgPSAnJzsKCQl2YXIgX3N0YXJ0U25pcHBldCA9IDA7CgkJX3Bvc2l0aW9ucy5zb3J0KGZ1bmN0aW9uIChfYSwgX2IpIHsgcmV0dXJuIF9hLnBvcyAtIF9iLnBvczsgfSk7CgoJCWZvcihfaSA9IDA7IF9pIDwgX3Bvc2l0aW9ucy5sZW5ndGg7IF9pKyspIHsKCQkJaWYoX3Bvc2l0aW9uc1tfaV0udHlwZSA9PSAnc3RhcnQnKSB7CgkJCQlpZihfY3VyUXVvdGVMZXZlbCA9PSBfbWF4UXVvdGVMZXZlbCkgewoJCQkJCV9yZWR1Y2VkUXVvdGUgKz0gX3F1b3RlQ29udGVudC5zdWJzdHJpbmcoX3N0YXJ0U25pcHBldCwgX3Bvc2l0aW9uc1tfaV0ucG9zKTsKCQkJCX0KCQkJCV9jdXJRdW90ZUxldmVsKys7CgkJCX0gZWxzZSB7CgkJCQlfY3VyUXVvdGVMZXZlbC0tOwoJCQkJaWYoX2N1clF1b3RlTGV2ZWwgPT0gX21heFF1b3RlTGV2ZWwpIHsKCQkJCQlfc3RhcnRTbmlwcGV0ID0gX3Bvc2l0aW9uc1tfaV0ucG9zICsgX3Bvc2l0aW9uc1tfaV0ubWF0Y2gubGVuZ3RoOwoJCQkJfQoJCQl9CgkJfQoJCV9yZWR1Y2VkUXVvdGUgKz0gX3F1b3RlQ29udGVudC5zdWJzdHIoX3N0YXJ0U25pcHBldCk7CgoJCXJldHVybiBfcmVkdWNlZFF1b3RlOwoJfQoKCWZ1bmN0aW9uIGFkZE1lbnVTd2l0Y2hlcihfcGF0aCkgewoJCWFkZEdsb2JhbFN0eWxlKCcuZW5oYW5jZXItbGluay1tZW51c3dpdGNoIHsgY29sb3I6ICNmZjAwMDAgIWltcG9ydGFudDsgfScpOwoJCV9wYXRoID0gZmlsdGVyUGF0aChfcGF0aCk7CgkJaWYoIV9wYXRoKSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciBfbWVudSA9ICQoJy5uYXZUcmlnZ2VyMi1yb3cgLmZHcmlkLWxhc3QgLm1lbnU6Zmlyc3QnKTsKCQlpZihfbWVudS5sZW5ndGgpIHsKCQkJX21lbnUub24oJ21vdXNlZW50ZXInLCBpbml0TWVudVN3aXRjaCk7CgkJCV9tZW51Lm9uKCdtb3VzZWxlYXZlJywgc3RvcE1lbnVTd2l0Y2gpOwoJCX0KCX0KCglmdW5jdGlvbiBpbml0TWVudVN3aXRjaCgpIHsKCQl0aW1lci5tZW51U3dpdGNoID0gd2luZG93LnNldFRpbWVvdXQobWVudVN3aXRjaCwgMzAwMCk7Cgl9CgoJZnVuY3Rpb24gbWVudVN3aXRjaCgpIHsKCQl2YXIgX21lbnUgPSAkKCcubmF2VHJpZ2dlcjItcm93IC5mR3JpZC1sYXN0IC5tZW51OmZpcnN0Jyk7CgkJX21lbnUuZmluZCgnbGkgYS5uYXYyTW9ycGgtbGluaycpLmFkZENsYXNzKCdlbmhhbmNlci1saW5rLW1lbnVzd2l0Y2gnKS5vbignY2xpY2snLCBzYXZlUGFnZUNob2ljZSk7CgkJX21lbnUuZmluZCgnbGkgYS5uYXYyTW9ycGgtbGluay0tc2VsZWN0ZWQnKS5hZGRDbGFzcygnZW5oYW5jZXItbGluay1tZW51c3dpdGNoLS1zZWxlY3RlZCcpOwoJfQoKCWZ1bmN0aW9uIHNhdmVQYWdlQ2hvaWNlKCkgewoJCXZhciBfZWxlbSA9ICQodGhpcyk7CgkJX3BhdGggPSBmaWx0ZXJQYXRoKF9wYXRoKTsKCQlpZighX3BhdGgpIHsKCQkJcmV0dXJuOwoJCX0KCgkJc2V0dGluZ3MuZnJvbVRvW19wYXRoXSA9IF9lbGVtLmF0dHIoJ2hyZWYnKS5yZXBsYWNlKGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbiArICcvJywgJycpOwoJCXNhdmVTZXR0aW5ncygpOwoJfQoKCWZ1bmN0aW9uIHN0b3BNZW51U3dpdGNoKCkgewoJCWlmKCdtZW51U3dpdGNoJyBpbiB0aW1lcikgewoJCQl0cnkgewoJCQkJd2luZG93LmNsZWFyVGltZW91dCh0aW1lci5tZW51U3dpdGNoKTsKCQkJfSBmaW5hbGx5IHsKCQkJCWRlbGV0ZSB0aW1lci5tZW51U3dpdGNoOwoJCQl9CgkJfQoJCXZhciBfbWVudSA9ICQoJy5uYXZUcmlnZ2VyMi1yb3cgLmZHcmlkLWxhc3QgLm1lbnU6Zmlyc3QnKTsKCQlfbWVudS5maW5kKCcuZW5oYW5jZXItbGluay1tZW51c3dpdGNoJykucmVtb3ZlQ2xhc3MoJ2VuaGFuY2VyLWxpbmstbWVudXN3aXRjaCcpLnJlbW92ZUNsYXNzKCdlbmhhbmNlci1saW5rLW1lbnVzd2l0Y2gtLXNlbGVjdGVkJykub2ZmKCdjbGljaycsIHNhdmVQYWdlQ2hvaWNlKTsKCX0KCglmdW5jdGlvbiBtb2RpZnlMaXN0aW5ncygpIHsKCQl2YXIgX2VsZW1zID0gJCgnbGkudGhyZWFkJyk7CgkJaWYoX2VsZW1zLmxlbmd0aCAmJiBzZXR0aW5ncy5kZWFscy5oaWRlLmxlbmd0aCkgewoJCQlfZWxlbXMuZWFjaChmdW5jdGlvbiAoX2VJbmQsIF9lVmFsKSB7CgkJCQlpZigobmV3IFJlZ0V4cChzZXR0aW5ncy5kZWFscy5oaWRlLCAnaScpKS50ZXN0KCQoX2VWYWwpLmZpbmQoJy50aHJlYWQtaGVhZCAuc2VjdGlvbi10aXRsZS1saW5rJykudGV4dCgpKSkgewoJCQkJCSQoX2VWYWwpLnJlbW92ZSgpOwoJCQkJfQoJCQl9KTsKCQl9Cgl9CgoJZnVuY3Rpb24gYWRkU2Nyb2xsVXBCdXR0b24oKSB7CgkJdmFyIF9uZXdFbGVtID0gJCgnPHNwYW4+JykuYXR0cignaWQnLCAnc2Nyb2xsVXBCdXR0b24nKS5hcHBlbmQoJCgnPGZvcm0+JykuYWRkQ2xhc3MoJ3RHcmlkIHRHcmlkIHRHcmlkLS1hdXRvJykuYXBwZW5kKCQoJzxsYWJlbD4nKS5hZGRDbGFzcygndEdyaWQtY2VsbCBidXR0b24nKS5odG1sKCcmdWFycjsnKS5jbGljayhmdW5jdGlvbiAoKSB7d2luZG93LnNjcm9sbFRvKDAsMCk7IH0pKSk7CgkJJChkb2N1bWVudC5ib2R5KS5hcHBlbmQoX25ld0VsZW0pOwoJCWFkZEdsb2JhbFN0eWxlKCcjc2Nyb2xsVXBCdXR0b24geyBkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGZpeGVkOyBsZWZ0OiAxcHg7IGJvdHRvbTogMzBweDt9ICNzY3JvbGxVcEJ1dHRvbiA+IGZvcm0gPiBsYWJlbCB7IGZvbnQtc2l6ZTogMjBwdDsgIG1pbi13aWR0aDogMjBweDsgbWF4LXdpZHRoOiA0MHB4OyB3aWR0aDogJyArICgkKCcucGFnZS1jYW52YXMnKS5sZW5ndGggJiYgJCgnLnBhZ2UtY29udGVudCcpLmxlbmd0aCA/IE1hdGguZmxvb3IoKCQoJy5wYWdlLWNhbnZhcycpLndpZHRoKCkgLSAkKCcucGFnZS1jb250ZW50Jykud2lkdGgoKSkvMikgKyAncHgnIDogJzIwcHgnKSArICc7IHBhZGRpbmc6IDBweCAwcHggNXB4IDBweDt9Jyk7Cgl9CgoJZnVuY3Rpb24gYWRkSW1hZ2Vab29tKCkgewoJCS8vIEJlc3RlbiBEYW5rIGFuIHZpZWxsZWljaHRtYW5uMSBmw7xyIGRpZSBJZGVlCgkJLy8gQmlsZGVyLVZlcmdyb2Vzc2VydW5ncy1CdXR0b24gZWluZnVlZ2VuCgkJdmFyIF9pbWdzID0gJCgnc3Bhbi5pbWFnZUZyYW1lIC5pbWFnZUZyYW1lLWltYWdlJyk7CgkJaWYoX2ltZ3MubGVuZ3RoKSB7CgkJCV9pbWdzLmVhY2goZnVuY3Rpb24gKF9pSW5kLCBfaVZhbCkgewoJCQkJdmFyIF9pbWcgPSAkKF9pVmFsKTsKCQkJCXZhciBfbGluayA9ICQoJzxhPicpLmF0dHIoJ2hyZWYnLCBfaW1nLmF0dHIoJ3NyYycpLnJlcGxhY2UoInRocmVhZHMvIiwgInRocmVhZHMvaGlnaC1yZXMvIikpLmF0dHIoJ3RhcmdldCcsICdfYmxhbmsnKTsKCQkJCV9saW5rLmFwcGVuZFRvKF9pbWcucGFyZW50KCkpLmFwcGVuZChfaW1nKTsKCQkJCV9saW5rLmNsaWNrKHpvb21JbWFnZSk7CgkJCX0pOwoJCX0KCQl2YXIgX2ltZ0xpbmtzID0gJCgnYS5pbWFnZUZyYW1lJyk7CgkJX2ltZ0xpbmtzLmNsaWNrKHpvb21JbWFnZSk7Cgl9CgoJZnVuY3Rpb24gem9vbUltYWdlKF9ldnQpIHsKCQlfZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJX2V2dC5zdG9wUHJvcGFnYXRpb24oKTsKCQl2YXIgX2xpbmsgPSAkKHRoaXMpOwoJCXZhciBfY29udGFpbmVyID0gJCgnPGRpdj4nKS5hdHRyKCdzdHlsZScsICdwb3NpdGlvbjogZml4ZWQ7IGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsgei1pbmRleDogOTk7IGJhY2tncm91bmQtY29sb3I6IHJnYmEoNjgsNjgsNjgsMC41KTsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgdGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW46IDA7JykuYXBwZW5kVG8oJChkb2N1bWVudC5ib2R5KSkuYXBwZW5kKCQoJzxzcGFuPicpLmF0dHIoJ3N0eWxlJywgJ2Rpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAxMDAlOyB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOycpKS5hcHBlbmQoJCgnPGltZz4nKS5hdHRyKCdzcmMnLCBfbGluay5hdHRyKCdocmVmJykpLmF0dHIoJ3N0eWxlJywgJ3ZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1heC1oZWlnaHQ6ICcgKyAoJCh3aW5kb3cpLmhlaWdodCgpIC0gMikgKyAncHg7IG1heC13aWR0aDogJyArICgkKHdpbmRvdykud2lkdGgoKSAtIDIpICsgJ3B4OyBib3JkZXItcmFkaXVzOiA1cHg7IGJvcmRlcjogMXB4IHNvbGlkICNmZmZmZmY7JykpOwoJCV9jb250YWluZXIuY2xpY2soZnVuY3Rpb24gKCkgeyAkKHRoaXMpLnJlbW92ZSgpO30pOwoJfQoKCWZ1bmN0aW9uIHJldHJpZXZlVXNlck5hbWUoKSB7CgkJdHJ5IHsKCQkJdXNlck5hbWUgPSAkKCcudXNlckJhci11c2VyQ2VudGVyLW1lbnUgLmF2YXRhci1mcmFtZScpLnBhcmVudCgpLmh0bWwoKS5yZXBsYWNlKC8oXHJ8XG4pL2csICcnKS5yZXBsYWNlKC9eLipcXFwvcHJvZmlsZVxcXC8oW15cXFw8XD5dKylcXFwvYWpheC4qJC8sICckMScpOwoJCX0gY2F0Y2ggKGUpIHsKCQkJaWYod2luZG93LmxvY2F0aW9uLmhyZWYgIT0gJ2h0dHBzOi8vd3d3Lm15ZGVhbHouZGUvbG9naW4nKSB7CgkJCQl3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdodHRwczovL3d3dy5teWRlYWx6LmRlL2xvZ2luJzsKCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBhZGRHbG9iYWxTdHlsZShfY3NzKSB7CgkJdmFyIF9oZWFkLCBfc3R5bGU7CgkJX2hlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdOwoJCWlmICghX2hlYWQpIHsgcmV0dXJuOyB9CgkJX3N0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKCQlfc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7CgkJX3N0eWxlLmlubmVySFRNTCA9IF9jc3M7CgkJX2hlYWQuYXBwZW5kQ2hpbGQoX3N0eWxlKTsKCX0KCglmdW5jdGlvbiBsb2FkU2V0dGluZ3MoKSB7CgkJdmFyIF92ZXJib3NlID0gZmFsc2U7CgoJCXZhciBfbFNldHRpbmdzID0gSlNPTi5wYXJzZShHTV9nZXRWYWx1ZSgnc2V0dGluZ3MnLCAne30nKSk7CgkJdmFyIF9zcHJvcDsKCgkJLy8gc2lubnZvbGxlcmVuLCByZWt1cnNpdmVuIFBhcnNlciBzY2hyZWliZW4KCQlmb3IgKHZhciBfcHJvcCBpbiBkZWZhdWx0U2V0dGluZ3MpIHsKCQkJaWYoX3Byb3AgaW4gX2xTZXR0aW5ncykgewoJCQkJc2V0dGluZ3NbX3Byb3BdID0gX2xTZXR0aW5nc1tfcHJvcF07CgkJCX0gZWxzZSB7CgkJCQlzZXR0aW5nc1tfcHJvcF0gPSBkZWZhdWx0U2V0dGluZ3NbX3Byb3BdOwoJCQl9CgoJCQlpZihfdmVyYm9zZSkgewoJCQkJR01fbG9nKF9wcm9wICsgJzogJyArIHNldHRpbmdzW19wcm9wXSk7CgkJCX0KCQkJZm9yKF9zcHJvcCBpbiBkZWZhdWx0U2V0dGluZ3NbX3Byb3BdKSB7CgkJCQlpZih0eXBlb2YgX2xTZXR0aW5nc1tfcHJvcF0gPT0gJ29iamVjdCcgJiYgX3Nwcm9wIGluIF9sU2V0dGluZ3NbX3Byb3BdKSB7CgkJCQkJc2V0dGluZ3NbX3Byb3BdW19zcHJvcF0gPSBfbFNldHRpbmdzW19wcm9wXVtfc3Byb3BdOwoJCQkJfSBlbHNlIHsKCQkJCQlzZXR0aW5nc1tfcHJvcF1bX3Nwcm9wXSA9IGRlZmF1bHRTZXR0aW5nc1tfcHJvcF1bX3Nwcm9wXTsKCQkJCX0KCQkJCWlmKF92ZXJib3NlKSB7CgkJCQkJR01fbG9nKF9wcm9wICsgJy4nICsgX3Nwcm9wICsgJzogJyArIHNldHRpbmdzW19wcm9wXVtfc3Byb3BdKTsKCQkJCX0KCQkJfQoJCX0KCX0KCglmdW5jdGlvbiBhZGRTbWlsZXkoKSB7CgkJdmFyIF9hZGRCdXR0b24gPSAkKHRoaXMpOwoJCXZhciBfZnJvbSA9IF9hZGRCdXR0b24ucGFyZW50KCkuZmluZCgnaW5wdXRbdHlwZT0idGV4dCJdW25hbWU9ImZyb20iXScpOwoJCXZhciBfdG8gICA9IF9hZGRCdXR0b24ucGFyZW50KCkuZmluZCgnaW5wdXRbdHlwZT0idGV4dCJdW25hbWU9InRvIl0nKTsKCgkJaWYoISQudHJpbSgkKF9mcm9tKS52YWwoKSkubGVuZ3RoKSB7CgkJCWNyZWF0ZU1lc3NhZ2VXaW5kb3coJ1NtaWxleWF1c2wmb3VtbDtzZXIgZGFyZiBuaWNodCBsZWVyIHNlaW4uJywgJ2Vycm9yJyk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgoJCWlmKCEkLnRyaW0oJChfdG8pLnZhbCgpKS5sZW5ndGgpIHsKCQkJY3JlYXRlTWVzc2FnZVdpbmRvdygnRXMgbXVzcyBlaW4gQmlsZC1VUkkgYW5nZWdlYmVuIHdlcmRlbi4nLCAnZXJyb3InKTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJdHJ5IHsKCQkJdmFyIF90bXBGcm9tID0gbmV3IFJlZ0V4cChSZWdFeHAuZXNjYXBlKF9mcm9tLnZhbCgpKSwgJ2cnKTsKCQkJdmFyIF9leGlzdHMgPSBmYWxzZTsKCQkJJCgnI3NtaWxleXNUYWJsZSB0cicpLmVhY2goZnVuY3Rpb24gKF9zSW5kLCBfc1ZhbCkgewoJCQkJaWYoJChfc1ZhbCkuZmluZCgndGQ6Zmlyc3QnKS50ZXh0KCkgPT0gX2Zyb20udmFsKCkpIHsKCQkJCQlfZXhpc3RzID0gdHJ1ZTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCX0pOwoJCQlpZihfZXhpc3RzKSB7CgkJCQljcmVhdGVNZXNzYWdlV2luZG93KCdTbWlsZXkgZXhpc3RpZXJ0IGJlcmVpdHMnLCAnZXJyb3InKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSBlbHNlIHsKCQkJCSQoJyNzbWlsZXlzVGFibGUnKS5hcHBlbmQoJCgnPHRyPicpLmFwcGVuZCgkKCc8dGQ+JykudGV4dChfZnJvbS52YWwoKSkpLmFwcGVuZCgkKCc8dGQ+JykuaHRtbCgnJnJhcnI7JykpLmFwcGVuZCgkKCc8dGQ+JykuYWRkQ2xhc3MoJ3NtaWxleUV4YW1wbGUnKS5hcHBlbmQoJCgnPGltZz4nKS5hdHRyKCdzcmMnLCBfdG8udmFsKCkpKSkuYXBwZW5kKCQoJzx0ZD4nKS5hZGRDbGFzcygnc21pbGV5c19yZW1vdmUnKS5hdHRyKCdhbHQnLCAnRW50ZmVybmVuJykudGV4dCgnWCcpLmNsaWNrKHJlbW92ZVNtaWxleSkpKTsKCQkJCV9mcm9tLnZhbCgnJyk7CgkJCQlfdG8udmFsKCcnKTsKCQkJfQoJCX0gY2F0Y2ggKGUpIHsKCQkJCWNyZWF0ZU1lc3NhZ2VXaW5kb3coJ1VuZ8O8bHRpZ2VyIFN1Y2hhdXNkcnVjay4nICsgZSwgJ2Vycm9yJyk7CgkJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJCglmdW5jdGlvbiByZW1vdmVTbWlsZXkoKSB7CgkJdmFyIF9yZW1vdmVDZWxsID0gJCh0aGlzKTsKCQlfcmVtb3ZlQ2VsbC5wYXJlbnQoKS5yZW1vdmUoKTsKCX0KCglmdW5jdGlvbiBjcmVhdGVNZXNzYWdlV2luZG93KF90ZXh0LCBfdHlwZSwgX2NhbGxiYWNrKSB7CgkJdmFyIF9tZXNzYWdlTGlzdCA9ICQoJyNnbG9iYWxNc2cgLmdsb2JhbE1zZy1saXN0Jyk7CgkJJCgnPGxpPicpLmFkZENsYXNzKCdnbG9iYWxNc2ctaXRlbSBnbG9iYWxNc2ctaXRlbS0tdHlwZS1zdWNjZXNzIG1lc3NhZ2UgIG1lc3NhZ2UtLXR5cGUtc3VjY2VzcycpLmh0bWwoJzxsaSBjbGFzcz0iZ2xvYmFsTXNnLWl0ZW0gZ2xvYmFsTXNnLWl0ZW0tLXR5cGUtJyArIF90eXBlICsgJyBtZXNzYWdlICBtZXNzYWdlLS10eXBlLScgKyBfdHlwZSArICciPjxkaXYgY2xhc3M9Im1lc3NhZ2UtaW5uZXIgbUdyaWQiPjxzcGFuIGNsYXNzPSJnbG9iYWxNc2ctaWNvbiAgZ2xvYmFsTXNnLWljb24tLXR5cGUtJyArIF90eXBlICsgJyBtR3JpZC1tZWRpYSBjZW50ZXJDaGlsZDIgaWNvIGljby0tbWlkZGxlIHNpemUtLWFsbC1sYXJnZSI+PC9zcGFuPjxidXR0b24gZGF0YS1oYW5kbGVyPSJnbG9iYWxNc2ctY2xvc2UiIGNsYXNzPSJnbG9iYWxNc2ctY2xvc2UgZkdyaWQtcmlnaHQgc3BhY2UtLWxlZnQtNCBpY28gaWNvLS10eXBlLWNsb3NlLScgKyAoX3R5cGUgPT0gJ2Vycm9yJyA/ICdyZWQnIDogJ2dyZWVuJyApKyAnIj48L2J1dHRvbj48ZGl2IGNsYXNzPSJtR3JpZC1jb250ZW50Ij48ZGl2IGNsYXNzPSJnbG9iYWxNc2ctdGl0bGUiPicgKyBfdGV4dCArICc8L2Rpdj48L2Rpdj48L2Rpdj48L2xpPicpLmFwcGVuZFRvKF9tZXNzYWdlTGlzdCk7CgkJd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewoJCQl0cnkgewoJCQkJaWYoX2NhbGxiYWNrICE9IG51bGwpIHsKCQkJCQlfY2FsbGJhY2soKTsKCQkJCX0KCQkJCV9tZXNzYWdlTGlzdC5maW5kKCdsaScpLnJlbW92ZSgpOwoJCQl9IGNhdGNoKGUpIHsKCQkJfQoJCX0sIDQwMDApOwoJfQoKCWZ1bmN0aW9uIHNob3dPbGRTbWlsZXlzKCkgewoJCWlmKHNldHRpbmdzLm9sZFNtaWxleXMuc2hvdykgewoJCQkkKCcuYmJjb2RlX3NtaWxleScpLmVhY2goZnVuY3Rpb24gKF9iYkluZCwgX2JiVmFsKSB7CgkJCQlpZigkKF9iYlZhbCkuYXR0cigndGl0bGUnKSBpbiBvbGRTbWlsZXlzKSB7CgkJCQkJJChfYmJWYWwpLmFkZENsYXNzKCdiYmNvZGVfc21pbGV5X29sZCcpLmF0dHIoJ3NyYycsIG9sZFNtaWxleXNbJChfYmJWYWwpLmF0dHIoJ3RpdGxlJyldKTsKCQkJCX0KCQkJfSk7CgkJfQoJCWFkZEdsb2JhbFN0eWxlKCcuY29tbWVudHMtYm9keSAuYmJjb2RlX3NtaWxleV9vbGR7aGVpZ2h0OiAxOHB4OyB2ZXJ0aWNhbC1hbGlnbjogdG9wO30nKTsKCX0KCglmdW5jdGlvbiBlbWJlZFlvdXR1YmUoKSB7CgkJaWYoIXNldHRpbmdzLmRpc3BsYXkuZW1iZWRZb3V0dWJlKSB7CgkJCXJldHVybjsKCQl9CgoJCWZ1bmN0aW9uIF9pc1lvdXR1YmVVcmwoX3VybCkgewoJCQl2YXIgX3AgPSAvXig/Omh0dHBzPzpcL1wvKT8oPzptXC58d3d3XC4pPyg/OnlvdXR1XC5iZVwvfHlvdXR1YmVcLmNvbVwvKD86ZW1iZWRcL3x2XC98d2F0Y2hcP3Y9fHdhdGNoXD8uKyZ2PSkpKChcd3wtKXsxMX0pKD86XFMrKT8kLzsKCQkJaWYoX3VybC5tYXRjaChfcCkpIHsKCQkJCXJldHVybiBfdXJsLm1hdGNoKF9wKVsxXTsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoKCQlmdW5jdGlvbiBfZ2V0WW91dHViZUlkKF91cmwpIHsKCQkJdmFyIF9yZWdFeHAgPSAvXi4qKHlvdXR1LmJlXC98dlwvfHVcL1x3XC98ZW1iZWRcL3x3YXRjaFw/dj18XCZ2PSkoW14jXCZcP10qKS4qLzsKCQkJdmFyIF9tYXRjaCA9IF91cmwubWF0Y2goX3JlZ0V4cCk7CgoJCQlpZiAoX21hdGNoICYmIF9tYXRjaFsyXSkgewoJCQkJcmV0dXJuIF9tYXRjaFsyXTsKCQkJfSBlbHNlIHsKCQkJCXJldHVybiAnZXJyb3InOwoJCQl9CgkJfQoKCQkkKCIuYmJjb2RlX3VybCIpLmVhY2goZnVuY3Rpb24oKXsKCQkJaWYoX2lzWW91dHViZVVybCgkKHRoaXMpLmF0dHIoImhyZWYiKSkpIHsKCQkJCSQodGhpcykucmVwbGFjZVdpdGgoZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuICc8ZGl2PjxpZnJhbWUgd2lkdGg9IjQwMCIgaGVpZ2h0PSIyMDAiIHNyYz0iaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvJyArIF9nZXRZb3V0dWJlSWQoICQodGhpcykuYXR0cigiaHJlZiIpICkgKyAnIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPjwvZGl2Pic7IAoJCQkJfSk7CgkJCX0KCQl9KTsKCX0KCQoJZnVuY3Rpb24gbWluaW1pemVRdW90ZXMoKSB7CgkJaWYoIXNldHRpbmdzLmRpc3BsYXkubWluaW1pemVRdW90ZXMpIHsKCQkJcmV0dXJuOwoJCX0KCgkJZnVuY3Rpb24gX3ByZXBRdW90ZUhlYWRlcihfcm9vdCkgewoJCQkvLyBCRUdJTiBSRVFVSVJFRCBPTkUgVElNRSBJTklUIAoJCQkvLyBoaWRlcyBhbGwgcXVvdGVkIGNvbnRlbnQgZXhjZXB0IHRob3NlIHdpdGhvdXQgYSBoZWFkZXIKCQkJJChfcm9vdCkuZmluZCgiLmJiY29kZV9xdW90ZV9oZWFkOm5vdCg6ZW1wdHkpICB+IC5iYmNvZGVfcXVvdGVfYm9keSIpLmhpZGUoKTsKCgkJCS8vIHNldHMgJ3BvaW50ZXInIGFzIGN1cnNvciB0byBpbmRpY2F0ZSwgdGhhdCB0aGUgZWxlbWVudCBpcyBjbGlja2FibGUKCQkJJChfcm9vdCkuZmluZCgiLmJiY29kZV9xdW90ZV9oZWFkOm5vdCg6ZW1wdHkpIikuY3NzKCJjdXJzb3IiLCAicG9pbnRlciIpLmVhY2goZnVuY3Rpb24gKCkgewoJCQkJLy8gRU5EIFJFUVVJUkVEIE9ORSBUSU1FIElOSVQKCgkJCQl2YXIgX29ubHlUZXh0ID0gJCh0aGlzKS5zaWJsaW5ncygiLmJiY29kZV9xdW90ZV9ib2R5IikuY2xvbmUoKQkvL2Nsb25lIHRoZSBlbGVtZW50CgkJCQkJLmZpbmQoJy5iYmNvZGVfcXVvdGUnKQkvL3NlbGVjdCBhbGwgc3VicXVvdGVzCgkJCQkJLnJlbW92ZSgpCS8vcmVtb3ZlIGFsbCB0aGUgY2hpbGRyZW4KCQkJCQkuZW5kKCkJLy9hZ2FpbiBnbyBiYWNrIHRvIHNlbGVjdGVkIGVsZW1lbnQKCQkJCQkudGV4dCgpOwkvL2dldCB0aGUgdGV4dCBvZiBlbGVtZW50CgkJCQkkKHRoaXMpLmFwcGVuZCggJCggJzxzcGFuIGNsYXNzPSJjb21tZW50LXF1b3RlLXByZXZpZXciPiAtICcgKyAkLnRyaW0oX29ubHlUZXh0LnN1YnN0cmluZygwLDgwKS5yZXBsYWNlKC9bXHJcbl0vZywnJykucmVwbGFjZSgvXHMrL2csICcgJykpICsgJyBbLi4uXSA8L3NwYW4+JyApICk7CgkJCX0pOwoJCX0KCgkJX3ByZXBRdW90ZUhlYWRlcihkb2N1bWVudCk7CgogICAgJChkb2N1bWVudCkub24oICJjbGljayIsIi5iYmNvZGVfcXVvdGVfaGVhZCIsIGZ1bmN0aW9uKCl7CiAgICAgICAgLy8gdG9nZ2xlcyB0aGUgcmVsYXRlZCBjb250ZW50IGFyZWEKICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCIuYmJjb2RlX3F1b3RlX2JvZHkiKS5zbGlkZVRvZ2dsZSgpOyAKICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCIuY29tbWVudC1xdW90ZS1wcmV2aWV3IikudG9nZ2xlKCk7CiAgICB9KTsKICAgIC8vIAogICAgJChkb2N1bWVudCkub24oJ0RPTU5vZGVJbnNlcnRlZCBET01Ob2RlUmVtb3ZlZCcsIi5jb21tZW50cy1pdGVtIiwgZnVuY3Rpb24oX2V2ZW50KSB7CiAgICAgICAgaWYgKF9ldmVudC50eXBlID09ICdET01Ob2RlSW5zZXJ0ZWQnKSB7CiAgICAgICAgICAgIC8vIEhlcmUgd2UgbmVlZCB0byBzZXQgdGhlIHNhbWUgdGhpbmdzIHVwLCB0aGF0IHdlIHNldHVwIGluIHRoZSBvbmUgdGltZSBpbml0IHNlY3Rpb24sIAogICAgICAgICAgICAvLyBiZWNhdXNlIHdlIGdldCBhIG5ldyBzZXQgb2YgZG9tIGVsZW1lbnRzIAogICAgICAgICAgICBpZigkKHRoaXMpLmhhc0NsYXNzKCJjb21tZW50cy1pdGVtIikgJiYgISQodGhpcykuZmluZCgnLmNvbW1lbnQtcXVvdGUtcHJldmlldycpLmxlbmd0aCl7CgkJCQkJCQlfcHJlcFF1b3RlSGVhZGVyKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgIH0KICAgIH0pOwoJfQoKCWZ1bmN0aW9uIHNob3dVc2VySW5mbygpIHsKCQlpZighc2V0dGluZ3MuZGlzcGxheS51c2VySW5mbykgewoJCQlyZXR1cm47CgkJfQoJCXZhciBfdXNlclByb2ZpbGVBcnJheSA9IFtdOwoKCQkkKCIuYXZhdGFyLWxpbmsiKS5lYWNoKGZ1bmN0aW9uKCl7IAoJCQl2YXIgX3VzZXJuYW1lID0gJCh0aGlzKS50ZXh0KCkudHJpbSgpOwoJCQl2YXIgX2VuZHBvaW50ID0gJCh0aGlzKS5hdHRyKCJocmVmIikgKyAiP3VzZXJfZGV0YWlscz0xIjsKCgkJCXZhciBfcG9zc2libGVVc2VySW5mb0VsSWQgPSAiIyIgKyBfdXNlcm5hbWUgKyAiLW1kLXVzZXJpbmZvIjsgLy8gbWF5IGJlIHJlbGV2YW50IGluIG5leHQgcmVsZWFzZXMKCQkJLy8gdmFyIF9wb3NzaWJsZVVzZXJJbmZvRWwgPSAkKF9wb3NzaWJsZVVzZXJJbmZvRWxJZCk7CgoJCQlpZihqUXVlcnkuaW5BcnJheSggX3VzZXJuYW1lLCBfdXNlclByb2ZpbGVBcnJheSApID09PSAtMSkgewoJCQkJX3VzZXJQcm9maWxlQXJyYXkucHVzaChfdXNlcm5hbWUpOwoJCQkJJC5hamF4KHsKCQkJCQl1cmw6IF9lbmRwb2ludCwKCQkJCQl0eXBlOiAiR0VUIiwKCQkJCQlkYXRhVHlwZTogImpzb24iLAoJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uIChfZGF0YSkgewoKCQkJCQkJdmFyIF90bXBFbCA9ICQoJzxkaXYgLz4nLCB7aWQ6X3Bvc3NpYmxlVXNlckluZm9FbElkfSkuYXBwZW5kKCBfZGF0YS5kYXRhLmNvbnRlbnQgKTsvLzsKCgkJCQkJCS8qCgkJCQkJCXZhciBfaW1nQXZhdGFyRWxlbWVudCA9IF90bXBFbC5maW5kKCJpbWcuYXZhdGFyLWltYWdlIik7CgkJCQkJCXZhciBfaW1nQXZhdGFyU3JjID0gX2ltZ0F2YXRhckVsZW1lbnQuYXR0cigic3JjIik7CgkJCQkJCSovCgoJCQkJCQkkKCcuYXZhdGFyLWltYWdlLS1jb21tZW50W2RhdGEtcG9wb3Zlcio9IicrX3VzZXJuYW1lKyciXScpLmVhY2goZnVuY3Rpb24oKXsKCQkJCQkJCXZhciBfb25saW5lU3RhdHVzID0gX3RtcEVsLmZpbmQoIi5wcm9maWxlLW5hbWUiKS5zaWJsaW5ncygic3BhbiIpLmNsb25lKCkuY3NzKHsiZGlzcGxheSIgOiAiaW5saW5lIiwgInRleHQtYWxpZ24iIDogImNlbnRlciIsICJtYXJnaW4iOiAiMnB4In0pOwoJCQkJCQkJdmFyIF9wcm9maWxlRGF0ZSA9IF90bXBFbC5maW5kKCIucHJvZmlsZS1kYXRlIikuY2xvbmUoKS5jc3MoeyJkaXNwbGF5IiA6ICJpbmxpbmUiLCAidGV4dC1hbGlnbiIgOiAicmlnaHQiLCAibWFyZ2luIjogIjJweCJ9KTsKCgkJCQkJCQl2YXIgX3Byb2ZpbGVTdGF0ZVVsID0gJCgiPHVsIC8+IikuY3NzKHsiYmFja2dyb3VuZCI6IiNmNWY2ZmYiLCJkaXNwbGF5IjoiYmxvY2siLCJtYXJnaW4iOiAiMC4yZW0gMmVtIDEuNDI4NTdlbSAxMGVtIiwicGFkZGluZyIgOiAiMnB4In0pOwoKCQkJCQkJCXZhciBfbGlDc3MgPSB7Im1hcmdpbiI6IjNweCA1cHgiLCJkaXNwbGF5IjoiaW5saW5lLWJsb2NrIn07CgoJCQkJCQkJdmFyIF9uck9mQ29tbWVudHMgPSBfdG1wRWwuZmluZCgiLnByb2ZpbGUtc3RhdC1pdGVtOmNvbnRhaW5zKCdLb21tZW50YXJlJykiKS5jbG9uZSgpLmNzcyhfbGlDc3MpOwoJCQkJCQkJdmFyIF9uck9mQWN0aXZlRGVhbHMgPSBfdG1wRWwuZmluZCgiLnByb2ZpbGUtc3RhdC1pdGVtOmNvbnRhaW5zKCdBa3RpdmUgRGVhbHMnKSIpLmNsb25lKCkuY3NzKF9saUNzcyk7CgkJCQkJCQl2YXIgX25yT2ZTdWJzY3JpcHRpb25zID0gX3RtcEVsLmZpbmQoIi5wcm9maWxlLXN0YXQtaXRlbTpjb250YWlucygnQWJvbm5lbWVudHMnKSIpLmNsb25lKCkuY3NzKF9saUNzcyk7CgkJCQkJCQl2YXIgX25yT2ZQb3N0ZWREZWFscyA9IF90bXBFbC5maW5kKCIucHJvZmlsZS1zdGF0LWl0ZW06Y29udGFpbnMoJ0dlbWVsZGV0ZSBEZWFscycpIikuY2xvbmUoKS5jc3MoX2xpQ3NzKTsKCgkJCQkJCQl2YXIgX2xpVXNlcm5hbWUgPSAkKCI8bGkgLz4iKS50ZXh0KF91c2VybmFtZSArICIgaXN0ICIpLmNzcyhfbGlDc3MpOwoJCQkJCQkJdmFyIF9saU9ubGluZVN0YXR1cyA9ICQoIjxsaSAvPiIpLmFwcGVuZChfb25saW5lU3RhdHVzKS5jc3MoX2xpQ3NzKTsKCQkJCQkJCXZhciBfbGlQcm9maWxlRGF0ZSA9ICQoIjxsaSAvPiIpLmFwcGVuZChfcHJvZmlsZURhdGUpLmNzcyhfbGlDc3MpOwoKCQkJCQkJCV9wcm9maWxlU3RhdGVVbC5hcHBlbmQoX2xpVXNlcm5hbWUpLmFwcGVuZChfbGlPbmxpbmVTdGF0dXMpLmFwcGVuZChfbGlQcm9maWxlRGF0ZSkuYXBwZW5kKF9uck9mQ29tbWVudHMpLmFwcGVuZChfbnJPZkFjdGl2ZURlYWxzKS5hcHBlbmQoX25yT2ZTdWJzY3JpcHRpb25zKS5hcHBlbmQoX25yT2ZQb3N0ZWREZWFscyk7CgoJCQkJCQkJdmFyIF9wcm9maWxlU3RhdGVMaSA9ICQoIjxsaSAvPiIpLmFwcGVuZChfcHJvZmlsZVN0YXRlVWwpLmFkZENsYXNzKCJjb21tZW50cy1pdGVtIGNvbW1lbnRzLWl0ZW0tLWFjdGl2ZSBzZWN0aW9uLS1wYWRkZWQtLW5hcnJvdyIpLmNzcyh7Im1hcmdpbiI6IjAiLCJwYWRkaW5nIjoiMCJ9KTsKCgkJCQkJCQkkKCJsaS5zZWN0aW9uLS1kaXZpZGVkIikuY3NzKCAiYm9yZGVyLWJvdHRvbSIsIm5vbmUiICk7CgkJCQkJCQkkKHRoaXMpLmNsb3Nlc3QoIi5jb21tZW50cy1pdGVtIikuYWZ0ZXIoX3Byb2ZpbGVTdGF0ZUxpKTsKCgkJCQkJCX0pOwoKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCX0pOwoJfQoKCWZ1bmN0aW9uIGRlYWxUZXh0UHJldmlldygpIHsKCQlpZihzZXR0aW5ncy5kaXNwbGF5LmRlYWxQcmV2aWV3IDw9IDApIHsKCQkJcmV0dXJuOwoJCX0KCQkkKCIudGhyZWFkLWJvZHkgZGl2LnNlY3Rpb24tc3ViOm5vdCg6Y29udGFpbnMoJ1dlaXRlcmxlc2VuJykpIikuZWFjaChmdW5jdGlvbigpewoJCQlpZigkKHRoaXMpLmhlaWdodCgpIDwgc2V0dGluZ3MuZGlzcGxheS5kZWFsUHJldmlldykgewoJCQkJcmV0dXJuOwoJCQl9CgkJCXZhciBfZGVhbERlc2NUb2dnbGVyRWxlbWVudCA9ICQoJzxkaXYgY2xhc3M9ImRlYWwtZGVzYy10b2dnbGVyIj5NZWhyPC9kaXY+Jyk7CgkJCV9kZWFsRGVzY1RvZ2dsZXJFbGVtZW50LmFkZENsYXNzKCJsaW5rIik7CgoJCQkkKHRoaXMpLmNzcyh7CgkJCQkibWF4LWhlaWdodCI6ICQodGhpcykuaGVpZ2h0KCkgKyAicHgiLAoJCQkJImhlaWdodCI6IHNldHRpbmdzLmRpc3BsYXkuZGVhbFByZXZpZXcgKyAicHgiLAoJCQkJIm92ZXJmbG93IiA6ICJoaWRkZW4iCgkJCX0pLmFkZENsYXNzKCJ0b2dnbGVkIikuYWZ0ZXIoX2RlYWxEZXNjVG9nZ2xlckVsZW1lbnQpOwoJCX0pOwogICAgJChkb2N1bWVudCkub24oImNsaWNrIiwgIi5kZWFsLWRlc2MtdG9nZ2xlciIsIGZ1bmN0aW9uKCkgewoJCQl2YXIgX2RlYWxEZXNjcmlwdGlvbiA9ICQodGhpcykuc2libGluZ3MoIi50aHJlYWQtYm9keSAuc2VjdGlvbi1zdWIiKTsKCgkJCWlmKF9kZWFsRGVzY3JpcHRpb24uaGFzQ2xhc3MoInRvZ2dsZWQiKSkgewoJCQkJX2RlYWxEZXNjcmlwdGlvbi5yZW1vdmVDbGFzcygidG9nZ2xlZCIpLmFuaW1hdGUoeyJoZWlnaHQiOiBfZGVhbERlc2NyaXB0aW9uLmNzcygibWF4LWhlaWdodCIpfSk7CgkJCQkkKHRoaXMpLnRleHQoIldlbmlnZXIiKTsKCQkJfSBlbHNlIHsKCQkJCV9kZWFsRGVzY3JpcHRpb24uYWRkQ2xhc3MoInRvZ2dsZWQiKS5hbmltYXRlKHsiaGVpZ2h0Ijogc2V0dGluZ3MuZGlzcGxheS5kZWFsUHJldmlldyArICJweCJ9KTsKCQkJCSQodGhpcykudGV4dCgiTWVociIpOwoJCQl9CgkJfSk7Cgl9CgoJZnVuY3Rpb24gbW9kaWZ5U2VhcmNoKCkgewoKCQlmdW5jdGlvbiBvcGVuR29vZ2xlKF9zb3VyY2UpIHsKCQkJd2luZG93Lm9wZW4oJ2h0dHBzOi8vd3d3Lmdvb2dsZS5kZS8jcT1zaXRlOm15ZGVhbHouZGUrJyArIGVuY29kZVVSSUNvbXBvbmVudChfc291cmNlLnNpYmxpbmdzKCJpbnB1dC5zZWFyY2gtaW5wdXQiKS52YWwoKSkgLCAnX2JsYW5rJyk7CgkJfQoKCQl2YXIgZ1NlYXJjaEVsZW1lbnQgPSAkKCc8YSBjbGFzcz0ic2VhcmNoLWJ1dHRvbiBzZWFyY2gtbG9nby1nb29nbGUiIHN0eWxlPSJyaWdodDogMS43ZW07Y3Vyc29yOiBwb2ludGVyOyI+JysKCQkJJzxpbWcgc3JjPSJodHRwczovL3d3dy5nb29nbGUuZGUvaW1hZ2VzL2JyYW5kaW5nL3Byb2R1Y3QvaWNvL2dvb2dsZWdfbG9kcC5pY28iIHN0eWxlPSJoZWlnaHQ6IDIwcHg7Ij4nKwoJCQknPC9hPicpOwoKCQlnU2VhcmNoRWxlbWVudC5jbGljayhmdW5jdGlvbiAoKSB7IG9wZW5Hb29nbGUoJCh0aGlzKSk7IH0pOwoJCXZhciBfcHJlc2V0Q2F0ID0gc2VhcmNoQ2F0ZWdvcmllcy5hbGw7CgkJZm9yKHZhciBfY0luZCBpbiBzZWFyY2hDYXRlZ29yaWVzKSB7CgkJCWlmKHNlYXJjaENhdGVnb3JpZXNbX2NJbmRdLmlkID09IHNldHRpbmdzLnNlYXJjaC5wcmVzZXRDYXRlZ29yeSkgewoJCQkJX3ByZXNldENhdCA9IHNlYXJjaENhdGVnb3JpZXNbX2NJbmRdOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJdmFyIF9jdXJDYXQgPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9eXC8oW2Etel0rKS4qJC8sICckMScpOwoJCV9jdXJDYXQgPSAoX2N1ckNhdCBpbiBzZWFyY2hDYXRlZ29yaWVzKSA/IHNlYXJjaENhdGVnb3JpZXNbX2N1ckNhdF0gOiBzZWFyY2hDYXRlZ29yaWVzLmFsbDsKCgkJJCgiaW5wdXQuc2VhcmNoLWlucHV0IikuYXR0cigndGl0bGUnLCAiU2hpZnQrRW50ZXIgPT4gIiArIF9wcmVzZXRDYXQuY2F0ZWdvcnkgKyAiLVN1Y2hlXG5TdHJnK0VudGVyID0+ICIgKyBfY3VyQ2F0LmNhdGVnb3J5ICsgIi1TdWNoZSAoYWt0dWVsbGUgS2F0ZWdvcmllKVxuQWx0K0VudGVyID0+IEdvb2dsZS1TdWNoZSIpLmFmdGVyKGdTZWFyY2hFbGVtZW50KTsKCgkJJChkb2N1bWVudCkub24oJ2tleWRvd24nLCAnZm9ybS5zZWFyY2gnLCBmdW5jdGlvbiAoX2V2ZW50KSB7CgkJCWlmKF9ldmVudC5rZXlDb2RlID09IDEzKSB7CgkJCQlpZihfZXZlbnQuc2hpZnRLZXkgJiYgIV9ldmVudC5jdHJsS2V5ICYmICFfZXZlbnQuYWx0S2V5KSB7CgkJCQkJJCh0aGlzKS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIHZhbHVlPSInICsgX3ByZXNldENhdC5pZCArICciPicpOwoJCQkJfSBlbHNlIGlmKCFfZXZlbnQuc2hpZnRLZXkgJiYgX2V2ZW50LmN0cmxLZXkgJiYgIV9ldmVudC5hbHRLZXkpIHsKCQkJCQkkKHRoaXMpLmFwcGVuZCgnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0idHlwZSIgdmFsdWU9IicgKyBfY3VyQ2F0LmlkICsgJyI+Jyk7CgkJCQl9IGVsc2UgaWYoIV9ldmVudC5zaGlmdEtleSAmJiAhX2V2ZW50LmN0cmxLZXkgJiYgX2V2ZW50LmFsdEtleSkgewoJCQkJCW9wZW5Hb29nbGUoJCh0aGlzKS5maW5kKCdhLnNlYXJjaC1sb2dvLWdvb2dsZScpKTsKCQkJCQlfZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJCX0KCQkJfQoJCX0pOwoJfQoKCWZ1bmN0aW9uIGJhY2tUb0FuY2hvcigpIHsKCQkkKGRvY3VtZW50KS5hamF4U3RvcChmdW5jdGlvbigpewoJCQlpZih3aW5kb3cubG9jYXRpb24uaGFzaC5sZW5ndGggJiYgd2luZG93LmxvY2F0aW9uLmhhc2ggIT0gJyNteWRlYWx6LWVuaGFuY2VyJykgewoJCQkJLy8gU2VpdGUgd3VyZGUgbW9kaWZpemllcnQsIEFua2VycHVua3QgdmVyc2Nob2JlbiwgZXJuZXV0IHp1bSBBbmtlciBzcHJpbmdlbgoJCQkJd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cubG9jYXRpb247CgkJCQkkKHRoaXMpLnVuYmluZCgiYWpheFN0b3AiKTsKCQkJfQoJCX0pOwoJfQoKCWZ1bmN0aW9uIGFkZFNldHVwTGluaygpIHsKCQl2YXIgX25ld01lbnUgPSAkKCc8bGk+JykuYWRkQ2xhc3MoJ2hpZGUtLWRvd25UaHJvdWdoLScpLmF0dHIoJ2lkJywgJ215ZGVhbHotZW5oYW5jZXItc2V0dXAtLWxpbmsnKS5hcHBlbmQoJCgnPGE+JykuYWRkQ2xhc3MoJ25hdk1lbnUxLWl0ZW0nKS5hdHRyKCdocmVmJywnI215ZGVhbHotZW5oYW5jZXInKS5odG1sKCdNeURlYWx6LUVuaGFuY2VyJykpLmFwcGVuZFRvKCQoJy5uYXZNZW51LS13aWR0aC1sJykuZXEoMCkpOwoJCV9uZXdNZW51LmZpbmQoJ2EnKS5jbGljayhzaG93U2V0dXApOwoJfQoKCWZ1bmN0aW9uIHNhdmVTZXR0aW5ncygpIHsKCQlHTV9zZXRWYWx1ZSgnc2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncykpOwoJfQoKCWZ1bmN0aW9uIHNob3dTZXR1cCgpIHsKCQlkb2N1bWVudC50aXRsZSA9ICdNeURlYWx6LUVuaGFuY2VyIEVpbnN0ZWxsdW5nZW4nOwoJCSQoJ3N0cm9uZ1tkYXRhLWhhbmRsZXI9Im1lbnUiXScpLnBhcmVudCgpLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdtZW51LS1hY3RpdmUnKTsKCQkkKCcubmF2VHJpZ2dlcjEtLXNlbGVjdGVkLCAubmF2TWVudTEtaXRlbS0tc2VsZWN0ZWQnKS5yZW1vdmVDbGFzcygnbmF2VHJpZ2dlcjEtLXNlbGVjdGVkIG5hdk1lbnUxLWl0ZW0tLXNlbGVjdGVkJyk7CgkJJCgnI215ZGVhbHotZW5oYW5jZXItc2V0dXAtLWxpbmsnKS5hZGRDbGFzcygnbmF2TWVudTEtaXRlbS0tc2VsZWN0ZWQnKTsKCQkkKCcubmF2VHJpZ2dlcjItcm93JykucmVtb3ZlKCk7CgkJJCgnLnBhZ2UtY2FudmFzID4gc2VjdGlvbicpLmVxKDApLnJlbW92ZSgpOwoJCSQoJ2Rpdi5wYWdlLWNhbnZhczpmaXJzdCA+IGRpdi5wYWdlLWNvbnRlbnQnKS5odG1sKCc8ZGl2IGlkPSJtYWluIj48L2Rpdj4nKTsKCQkkKCcjbWFpbicpLmh0bWwoJycpLmF0dHIoJ2NsYXNzJywgJ2NvbnRlbnQtbWFpbiBjb250ZW50LWJhY2tncm91bmQnKS5odG1sKCc8dWwgY2xhc3M9ImJyZWFkY3J1bWIgc2VjdGlvbi0tcGFkZGVkLS10aWdodCI+PGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gc2l6ZS0tYWxsLXhTbWFsbCBzaXplLS14eFNtYWxsLXNtYWxsIiBpdGVtdHlwZT0iaHR0cDovL2RhdGEtdm9jYWJ1bGFyeS5vcmcvQnJlYWRjcnVtYiIgaXRlbXNjb3BlPSJpdGVtc2NvcGUiIGl0ZW1wcm9wPSJjaGlsZCI+PGEgY2xhc3M9ImJyZWFkY3J1bWItbGluayBsaW5rIiBocmVmPSIvIiBpdGVtcHJvcD0idXJsIj5Ib21lPC9hPjx1bCBjbGFzcz0iYnJlYWRjcnVtYi1saXN0ICI+PGxpIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0gc2l6ZS0tYWxsLXhTbWFsbCBzaXplLS14eFNtYWxsLXNtYWxsIiBpdGVtdHlwZT0iaHR0cDovL2RhdGEtdm9jYWJ1bGFyeS5vcmcvQnJlYWRjcnVtYiIgaXRlbXNjb3BlPSJpdGVtc2NvcGUiIGl0ZW1wcm9wPSJjaGlsZCI+PHNwYW4gY2xhc3M9ImJyZWFkY3J1bWItY3VycmVudCI+QmVhcmJlaXRlIERlaW5lIE15RGVhbHotRW5oYW5jZXIgRWluc3RlbGx1bmdlbjwvc3Bhbj48L2xpPjwvdWw+PC9saT48L3VsPjxmb3JtIGNsYXNzPSJmb3JtIj48ZGl2IGNsYXNzPSJzZWN0aW9uIHNlY3Rpb24tLXBhZGRlZCI+PGgxIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5CZWFyYmVpdGUgRGVpbmUgTXlEZWFsei1FbmhhbmNlciBFaW5zdGVsbHVuZ2VuPC9oMT48L2Rpdj48L2Zvcm0+Jyk7CgkJdmFyIF9zZWN0aW9ucyA9ICQoJyNtYWluIC5zZWN0aW9uLS1wYWRkZWQnKTsKCQl2YXIgX2Zvcm0gPSAkKCcjbWFpbiBmb3JtLmZvcm0nKTsKCQlfZm9ybS5zdWJtaXQoc3VibWl0U2V0dGluZ3MpOwoJCWFkZEdsb2JhbFN0eWxlKCcjc21pbGV5c1RhYmxlIHsgYm9yZGVyOiBub25lO30gI3NtaWxleXNUYWJsZSB0cj50ZDpmaXJzdCB7IHRleHQtYWxpZ246IHJpZ2h0IH0gI3NtaWxleXNUYWJsZSB0ciB0ZCB7IHBhZGRpbmc6IDNweDsgcGFkZGluZy1sZWZ0OiA1cHg7IHBhZGRpbmctcmlnaHQ6IDVweDsgfSAuc21pbGV5c19yZW1vdmUgeyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDEwcHQ7IGN1cnNvcjogcG9pbnRlcjsgY3Vyc29yOiBoYW5kOyB9Jyk7CgoJCXZhciBfc2VjdGlvbjsKCQkvLyBfc2VjdGlvbiA9ICQoJzxzZWN0aW9uPicpLmFkZENsYXNzKCdzZWN0aW9uLXN1YicpLmh0bWwoJzxoMiBjbGFzcz0ic2VjdGlvbi1zdWJUaXRsZSI+SW5mbyB1bmQgRGlza3Vzc2lvbnN0aHJlYWQ8L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxsYWJlbCBjbGFzcz0iZm9ybS1saXN0LWxhYmVsIiBmb3I9ImRlYWxzRm9ybS1kZWFsc19oaWRlIj4gQXVzYmxlbmRlbiA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48aW5wdXQgaWQ9ImRlYWxzRm9ybS1kZWFsc19oaWRlIiBjbGFzcz0iaW5wdXQiIHR5cGU9InRleHQiCW5hbWU9ImhpZGUiIHRpdGxlPSJBbmdhYmUgYWxzIHJlZy4gQXVzZHJ1Y2suIj48L2Rpdj48L2xpPjwvdWw+Jyk7CgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPkluZm8gdW5kIERpc2t1c3Npb25zdGhyZWFkPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9sYWJlbD48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+SW5mb3JtYXRpb25lbiB1bmQgVmVyYmVzc2VydW5nc3ZvcnNjaGwmYXVtbDtnZSBpbSA8YSBocmVmPSJodHRwOi8vd3d3Lm15ZGVhbHouZGUvZGl2ZXJzZXMvbXlkZWFsei1lbmhhbmNlci11c2Vyc2NyaXB0LTU3MzAxMiIgY2xhc3M9ImxpbmsiPk15RGVhbHotRW5oYW5jZXItVGhyZWFkPC9hPi48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PGxhYmVsIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiIHN0eWxlPSJwYWRkaW5nLXRvcDogMDsiPiBBdXRvciA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48YSBocmVmPSInICsgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vd3d3Lm15ZGVhbHouZGUvcHJvZmlsZS9CQUVSbmFkbyIgY2xhc3M9ImxpbmsiPkJBRVJuYWRvPC9hPjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgc3R5bGU9InBhZGRpbmctdG9wOiAwOyI+IENvbnRyaWJ1dG9ycyA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48YSBocmVmPSInICsgd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vd3d3Lm15ZGVhbHouZGUvcHJvZmlsZS9sb2xuaWNrbmFtZSIgY2xhc3M9ImxpbmsiPmxvbG5pY2tuYW1lPC9hPjxiciAvPjxhIGhyZWY9IicgKyB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy93d3cubXlkZWFsei5kZS9wcm9maWxlL05pY28iIGNsYXNzPSJsaW5rIj5OaWNvPC9hPjxiciAvPjxhIGhyZWY9IicgKyB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAnLy93d3cubXlkZWFsei5kZS9wcm9maWxlL3JpY2hpMmsiIGNsYXNzPSJsaW5rIj5yaWNoaTJrPC9hPjxiciAvPjwvZGl2PjwvbGk+PC91bD4nKTsKCQlfc2VjdGlvbi5hcHBlbmRUbyhfc2VjdGlvbnMpOwoKCQlpZih0eXBlb2YgR01faW5mbyA9PT0gJ29iamVjdCcpIHsKCQkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPkVuaGFuY2VyIFZlcnNpb248L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+ICcgKyBHTV9pbmZvLnNjcmlwdC52ZXJzaW9uICsgJzwvZGl2PjwvbGk+PC91bD4nKTsKCQkJX3NlY3Rpb24uYXBwZW5kVG8oX3NlY3Rpb25zKTsKCQl9CgoJCV9zZWN0aW9uID0gJCgnPHNlY3Rpb24+JykuYWRkQ2xhc3MoJ3NlY3Rpb24tc3ViJykuaHRtbCgnPGgyIGNsYXNzPSJzZWN0aW9uLXN1YlRpdGxlIj5FbmhhbmNlciBWZXJoYWx0ZW48L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiIHRpdGxlPSJFaW4gcm90ZXIgUmFobWVuIHdpcmQgaW0gRmVobGVyZmFsbCBpbW1lciBhbmdlemVpZ3QuIj48aW5wdXQgaWQ9ImJlaGF2aW9yRm9ybS1iZWhhdmlvcl9zaG93R3JlZW5Eb3RzIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iYmVoYXZpb3Jfc2hvd0dyZWVuRG90cyI+IFplaWdlIGdyJnV1bWw7bmVuIFJhaG1lbiB1bSBBdmF0YXI8L2xhYmVsPjwvZGl2PjwvbGk+PC91bD4nKTsKCQlfc2VjdGlvbi5hcHBlbmRUbyhfc2VjdGlvbnMpOwoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MuYmVoYXZpb3IpIHsKCQkJaWYoc2V0dGluZ3MuYmVoYXZpb3JbX3NJbmRdKSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjYmVoYXZpb3JGb3JtLWJlaGF2aW9yXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcsICdjaGVja2VkJykuYXR0cignY2hlY2tlZCcsICdjaGVja2VkJyk7CgkJCX0gZWxzZSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjYmVoYXZpb3JGb3JtLWJlaGF2aW9yXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcsIGZhbHNlKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7CgkJCX0KCQl9CgoJCV9zZWN0aW9uID0gJCgnPHNlY3Rpb24+JykuYWRkQ2xhc3MoJ3NlY3Rpb24tc3ViJykuaHRtbCgnPGgyIGNsYXNzPSJzZWN0aW9uLXN1YlRpdGxlIj5XZXJidW5nIGF1c2JsZW5kZW48L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYWRGb3JtLWhpZGVBZHNfdG9wQmFyIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iaGlkZUFkc190b3BCYXIiPiBUb3AtQmFyIChHdXRzY2hlaW5zYW1tbGVyLCBVcmxhdWJzcGlyYXRlbiwg4oCmKTwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYWRGb3JtLWhpZGVBZHNfbmxTZWN0aW9uIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iaGlkZUFkc19ubFNlY3Rpb24iPiBOZXdzbGV0dGVyPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJhZEZvcm0taGlkZUFkc19pbnNpZGUiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJoaWRlQWRzX2luc2lkZSI+IE15RGVhbHogSW5zaWRlIEJhbm5lcjwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYWRGb3JtLWhpZGVBZHNfZ3NXaWRnZXQiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJoaWRlQWRzX2dzV2lkZ2V0Ij4gR3V0c2NoZWluLVdpZGdldDwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYWRGb3JtLWhpZGVBZHNfYXBwIiB0eXBlPSJjaGVja2JveCIgbmFtZT0iaGlkZUFkc19hcHAiPiBNeURlYWx6LUFwcDwvbGFiZWw+PC9kaXY+PC9saT48L3VsPicpOwoJCV9zZWN0aW9uLmFwcGVuZFRvKF9zZWN0aW9ucyk7CgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5oaWRlQWRzKSB7CgkJCWlmKHNldHRpbmdzLmhpZGVBZHNbX3NJbmRdKSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjYWRGb3JtLWhpZGVBZHNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgJ2NoZWNrZWQnKS5hdHRyKCdjaGVja2VkJywgJ2NoZWNrZWQnKTsKCQkJfSBlbHNlIHsKCQkJCV9zZWN0aW9uLmZpbmQoJyNhZEZvcm0taGlkZUFkc18nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkucmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQl9CgkJfQoKCQlfc2VjdGlvbiA9ICQoJzxzZWN0aW9uPicpLmFkZENsYXNzKCdzZWN0aW9uLXN1YicpLmh0bWwoJzxoMiBjbGFzcz0ic2VjdGlvbi1zdWJUaXRsZSI+QnV0dG9ucyBpbSBIYXVwdG1lbnU8L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYnV0dG9uRm9ybS1tb3ZlQnV0dG9uc19fIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ibW92ZUJ1dHRvbnNfXyI+IEFsbGVzPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJidXR0b25Gb3JtLW1vdmVCdXR0b25zX2RlYWxzIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ibW92ZUJ1dHRvbnNfZGVhbHMiPiBEZWFsczwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYnV0dG9uRm9ybS1tb3ZlQnV0dG9uc19ndXRzY2hlaW5lIiB0eXBlPSJjaGVja2JveCIgbmFtZT0ibW92ZUJ1dHRvbnNfZ3V0c2NoZWluZSI+IEd1dHNjaGVpbmU8L2xhYmVsPjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48c3BhbiBjbGFzcz0iZm9ybS1saXN0LWxhYmVsIj48L3NwYW4+PGRpdiBjbGFzcz0iZm9ybS1saXN0LWNvbnRlbnQiPjxsYWJlbCBjbGFzcz0iZm9ybS10ZXh0Ij48aW5wdXQgaWQ9ImJ1dHRvbkZvcm0tbW92ZUJ1dHRvbnNfZnJlZWJpZXMiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJtb3ZlQnV0dG9uc19mcmVlYmllcyI+IEZyZWViaWVzPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJidXR0b25Gb3JtLW1vdmVCdXR0b25zX2N1c3RvbSIgdHlwZT0iY2hlY2tib3giIG5hbWU9Im1vdmVCdXR0b25zX2N1c3RvbSI+IE15VGFiPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJidXR0b25Gb3JtLW1vdmVCdXR0b25zX2dlc3VjaGUiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJtb3ZlQnV0dG9uc19nZXN1Y2hlIj4gR2VzdWNoZTwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iYnV0dG9uRm9ybS1tb3ZlQnV0dG9uc19kaXZlcnNlcyIgdHlwZT0iY2hlY2tib3giIG5hbWU9Im1vdmVCdXR0b25zX2RpdmVyc2VzIj4gRGl2ZXJzZXM8L2xhYmVsPjwvZGl2PjwvbGk+PC91bD4nKTsKCQlfc2VjdGlvbi5hcHBlbmRUbyhfc2VjdGlvbnMpOwoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MubW92ZUJ1dHRvbnMpIHsKCQkJaWYoc2V0dGluZ3MubW92ZUJ1dHRvbnNbX3NJbmRdKSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjYnV0dG9uRm9ybS1tb3ZlQnV0dG9uc18nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwoJCQl9IGVsc2UgewoJCQkJX3NlY3Rpb24uZmluZCgnI2J1dHRvbkZvcm0tbW92ZUJ1dHRvbnNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKCQkJfQoJCX0KCgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPlVzZXJNZW51IERpcmVrdGxpbmtzPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48c3BhbiBjbGFzcz0iZm9ybS1saXN0LWxhYmVsIj48L3NwYW4+PGRpdiBjbGFzcz0iZm9ybS1saXN0LWNvbnRlbnQiPjxsYWJlbCBjbGFzcz0iZm9ybS10ZXh0Ij48aW5wdXQgaWQ9InVzZXJNZW51Rm9ybS1kaXJlY3RfcG4iIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXJlY3RfcG4iPiBQcml2YXRlIE5hY2hyaWNodGVuPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PHNwYW4gY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCI+PC9zcGFuPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48bGFiZWwgY2xhc3M9ImZvcm0tdGV4dCI+PGlucHV0IGlkPSJ1c2VyTWVudUZvcm0tZGlyZWN0X2FjY291bnQiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXJlY3RfYWNjb3VudCI+IEFjY291bnQ8L2xhYmVsPjwvZGl2PjwvbGk+PC91bD4nKTsKCQlfc2VjdGlvbi5hcHBlbmRUbyhfc2VjdGlvbnMpOwoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MudXNlck1lbnVEaXJlY3QpIHsKCQkJaWYoc2V0dGluZ3MudXNlck1lbnVEaXJlY3RbX3NJbmRdKSB7CgkJCQlfc2VjdGlvbi5maW5kKCcjdXNlck1lbnVGb3JtLWRpcmVjdF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwoJCQl9IGVsc2UgewoJCQkJX3NlY3Rpb24uZmluZCgnI3VzZXJNZW51Rm9ybS1kaXJlY3RfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpLnJlbW92ZUF0dHIoJ2NoZWNrZWQnKTsKCQkJfQoJCX0KCgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPkRlYWxzL0d1dHNjaGVpbmUv4oCmPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJkZWFsc0Zvcm0tZGVhbHNfaGlkZSI+IEF1c2JsZW5kZW4gPC9sYWJlbD48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGlucHV0IGlkPSJkZWFsc0Zvcm0tZGVhbHNfaGlkZSIgY2xhc3M9ImlucHV0IiB0eXBlPSJ0ZXh0IgluYW1lPSJoaWRlIiB0aXRsZT0iQW5nYWJlIGFscyByZWcuIEF1c2RydWNrLiI+PC9kaXY+PC9saT48L3VsPicpOwoJCV9zZWN0aW9uLmFwcGVuZFRvKF9zZWN0aW9ucyk7CgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5kZWFscykgewoJCQlfc2VjdGlvbi5maW5kKCcjZGVhbHNGb3JtLWRlYWxzXycgKyBfc0luZCkudmFsKHNldHRpbmdzLmRlYWxzW19zSW5kXSkuYXR0cigndmFsdWUnLCBzZXR0aW5ncy5kZWFsc1tfc0luZF0pOwoJCX0KCgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPkluaGFsdGUgYW56ZWlnZW48L2gyPjx1bCBjbGFzcz0iZm9ybS1saXN0Ij48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iZGlzcGxheUZvcm0tZGlzcGxheV9lbWJlZFlvdXR1YmUiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNwbGF5X2VtYmVkWW91dHViZSI+IFlvdVR1YmUtVmlkZW9zIGRpcmVrdCBlaW5iaW5kZW48L2xhYmVsPjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48c3BhbiBjbGFzcz0iZm9ybS1saXN0LWxhYmVsIj48L3NwYW4+PGRpdiBjbGFzcz0iZm9ybS1saXN0LWNvbnRlbnQiPjxsYWJlbCBjbGFzcz0iZm9ybS10ZXh0Ij48aW5wdXQgaWQ9ImRpc3BsYXlGb3JtLWRpc3BsYXlfbWluaW1pemVRdW90ZXMiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJkaXNwbGF5X21pbmltaXplUXVvdGVzIj4gUXVvdGVzIGVpbmtsYXBwZW4gKGF1c2tsYXBwZW4gbWl0IEtsaWNrKTwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iZGlzcGxheUZvcm0tZGlzcGxheV91c2VySW5mbyIgdHlwZT0iY2hlY2tib3giIG5hbWU9ImRpc3BsYXlfdXNlckluZm8iPiBVc2VyIEluZm9zPC9sYWJlbD48L2Rpdj48L2xpPjxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PGxhYmVsIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiIGZvcj0iZGlzcGxheUZvcm0tZGlzcGxheV9kZWFsUHJldmlldyI+IERlYWx0ZXh0LVByZXZpZXdow7ZoZSBpbiBQaXhlbCA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48aW5wdXQgaWQ9ImRpc3BsYXlGb3JtLWRpc3BsYXlfZGVhbFByZXZpZXciIGNsYXNzPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiCXJlcXVpcmVkPSIiIHRpdGxlPSIwIGRlYWt0aXZpZXJ0IFByZXZpZXdzIiBuYW1lPSJkaXNwbGF5X2RlYWxQcmV2aWV3Ij48L2Rpdj48L2xpPjwvdWw+Jyk7CgkJX3NlY3Rpb24uYXBwZW5kVG8oX3NlY3Rpb25zKTsKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLmRpc3BsYXkpIHsKCQkJc3dpdGNoKHR5cGVvZiBzZXR0aW5ncy5kaXNwbGF5W19zSW5kXSkgewoJCQkJY2FzZSAnYm9vbGVhbic6CgkJCQkJaWYoc2V0dGluZ3MuZGlzcGxheVtfc0luZF0pIHsKCQkJCQkJX3NlY3Rpb24uZmluZCgnI2Rpc3BsYXlGb3JtLWRpc3BsYXlfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgJ2NoZWNrZWQnKS5hdHRyKCdjaGVja2VkJywgJ2NoZWNrZWQnKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlfc2VjdGlvbi5maW5kKCcjZGlzcGxheUZvcm0tZGlzcGxheV8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkucmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgJ251bWJlcic6CgkJCQljYXNlICdzdHJpbmcnOgoJCQkJCV9zZWN0aW9uLmZpbmQoJyNkaXNwbGF5Rm9ybS1kaXNwbGF5XycgKyBfc0luZCkudmFsKHNldHRpbmdzLmRpc3BsYXlbX3NJbmRdKS5hdHRyKCd2YWx1ZScsIHNldHRpbmdzLmRpc3BsYXlbX3NJbmRdKTsKCQkJfQoJCX0KCgkJX3NlY3Rpb24gPSAkKCc8c2VjdGlvbj4nKS5hZGRDbGFzcygnc2VjdGlvbi1zdWInKS5odG1sKCc8aDIgY2xhc3M9InNlY3Rpb24tc3ViVGl0bGUiPlN1Y2hlPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJzZWFyY2hGb3JtLXNlYXJjaF9wcmVzZXRDYXRlZ29yeSI+IHZvcmVpbmdlc3RlbGx0ZSBLYXRlZ29yaWUgPC9sYWJlbD48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PHNlbGVjdCBpZD0ic2VhcmNoRm9ybS1zZWFyY2hfcHJlc2V0Q2F0ZWdvcnkiIGNsYXNzPSJpbnB1dCIgbmFtZT0ic2VhcmNoX3ByZXNldENhdGVnb3J5Ij48L3NlbGVjdD48L2Rpdj48L2xpPjwvdWw+Jyk7CgkJX3NlY3Rpb24uYXBwZW5kVG8oX3NlY3Rpb25zKTsKCQlfc2VjdGlvbi5maW5kKCdzZWxlY3QnKS5lYWNoKGZ1bmN0aW9uICgpIHsKCQkJdmFyIF9zSW5kID0gJCh0aGlzKS5hdHRyKCduYW1lJykucmVwbGFjZSgvXnNlYXJjaF8vLCAnJyk7CgkJCWlmKF9zSW5kID09ICdwcmVzZXRDYXRlZ29yeScpIHsKCQkJCWZvcih2YXIgX2NJbmQgaW4gc2VhcmNoQ2F0ZWdvcmllcykgewoJCQkJCSQodGhpcykuYXBwZW5kKCQoJzxvcHRpb24vPicpLnRleHQoc2VhcmNoQ2F0ZWdvcmllc1tfY0luZF0uY2F0ZWdvcnkpLnZhbChzZWFyY2hDYXRlZ29yaWVzW19jSW5kXS5pZCkpOwoJCQkJfQoJCQl9CgkJfSk7CgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5zZWFyY2gpIHsKCQkJc3dpdGNoKHR5cGVvZiBzZXR0aW5ncy5zZWFyY2hbX3NJbmRdKSB7CgkJCQljYXNlICdib29sZWFuJzoKCQkJCQlpZihzZXR0aW5ncy5zZWFyY2hbX3NJbmRdKSB7CgkJCQkJCV9zZWN0aW9uLmZpbmQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpLmF0dHIoJ2NoZWNrZWQnLCAnY2hlY2tlZCcpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCV9zZWN0aW9uLmZpbmQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkucmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCWNhc2UgJ251bWJlcic6CgkJCQljYXNlICdzdHJpbmcnOgoJCQkJCV9zZWN0aW9uLmZpbmQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnZhbChzZXR0aW5ncy5zZWFyY2hbX3NJbmRdKS5hdHRyKCd2YWx1ZScsIHNldHRpbmdzLnNlYXJjaFtfc0luZF0pOwoJCQl9CgkJfQoKCQlfc2VjdGlvbiA9ICQoJzxzZWN0aW9uPicpLmFkZENsYXNzKCdzZWN0aW9uLXN1YicpLmh0bWwoJzxoMiBjbGFzcz0ic2VjdGlvbi1zdWJUaXRsZSI+S29tbWVudGllcmVuPC9oMj48dWwgY2xhc3M9ImZvcm0tbGlzdCI+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJjb21tZW50Rm9ybS1jb21tZW50c19tYXhRdW90ZUxldmVsIj4gWml0YXR0aWVmZSA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48aW5wdXQgaWQ9ImNvbW1lbnRGb3JtLWNvbW1lbnRzX21heFF1b3RlTGV2ZWwiIGNsYXNzPSJpbnB1dCIgdHlwZT0ibnVtYmVyIiBtaW49IjEiCXJlcXVpcmVkPSIiIG5hbWU9Im1heFF1b3RlTGV2ZWwiPjwvZGl2PjwvbGk+PGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJjb21tZW50Rm9ybS1jb21tZW50c19lZGl0UmVhc29uIj4gR3J1bmQgZGVyICZBdW1sO25kZXJ1bmcgPC9sYWJlbD48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGlucHV0IGlkPSJjb21tZW50Rm9ybS1jb21tZW50c19lZGl0UmVhc29uIiBjbGFzcz0iaW5wdXQiIHR5cGU9InRleHQiIG5hbWU9ImVkaXRSZWFzb24iPjwvZGl2PjwvbGk+JyArIChzZXR0aW5ncy5jb21tZW50cy51c2VTaWduYXR1cmUgPyAnPGxpIGNsYXNzPSJmb3JtLWxpc3Qtcm93Ij48bGFiZWwgY2xhc3M9ImZvcm0tbGlzdC1sYWJlbCIgZm9yPSJjb21tZW50Rm9ybS1jb21tZW50c19zaWduYXR1cmUiPiBTaWduYXR1ciA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48dGV4dGFyZWEgaWQ9ImNvbW1lbnRGb3JtLWNvbW1lbnRzX3NpZ25hdHVyZSIgY2xhc3M9ImlucHV0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJzaWduYXR1cmUiIHN0eWxlPSJyZXNpemU6IG5vbmUiPjwvdGV4dGFyZWE+PC9kaXY+PC9saT4nIDogJycpICsgJzxsaSBjbGFzcz0iZm9ybS1saXN0LXJvdyI+PGxhYmVsIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiIGZvcj0iY29tbWVudEZvcm0tc21pbGV5c19mcm9tIj4gU21pbGV5cyA8L2xhYmVsPjxkaXYgY2xhc3M9ImZvcm0tbGlzdC1jb250ZW50Ij48aW5wdXQgaWQ9ImNvbW1lbnRGb3JtLXNtaWxleXNfZnJvbSIgY2xhc3M9ImlucHV0IiB0eXBlPSJ0ZXh0IiBuYW1lPSJmcm9tIiAvPiAmcmFycjsgPGlucHV0IGlkPSJjb21tZW50Rm9ybS1zbWlsZXlzX3RvIiBjbGFzcz0iaW5wdXQiIHR5cGU9InRleHQiIG5hbWU9InRvIiAvPiA8aW5wdXQgaWQ9ImNvbW1lbnRGb3JtLXNtaWxleXNfYWRkIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidXR0b24iIHZhbHVlPSJIaW56dWYmdXVtbDtnZW4iIC8+PGJyIC8+PHRhYmxlIGlkPSJzbWlsZXlzVGFibGUiPjwvdGFibGU+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iY29tbWVudEZvcm0tb2xkU21pbGV5c191c2UiIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJvbGRTbWlsZXlzX3VzZSI+IFZlcndlbmRlIGFsdGUgU21pbGV5cyBiZWltIFNjaHJlaWJlbjwvbGFiZWw+PC9kaXY+PC9saT48bGkgY2xhc3M9ImZvcm0tbGlzdC1yb3ciPjxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGxhYmVsIGNsYXNzPSJmb3JtLXRleHQiPjxpbnB1dCBpZD0iY29tbWVudEZvcm0tb2xkU21pbGV5c19zaG93IiB0eXBlPSJjaGVja2JveCIgbmFtZT0ib2xkU21pbGV5c19zaG93Ij4gWmVpZ2UgYWx0ZSBTbWlsZXlzIDwvbGFiZWw+PC9kaXY+PC9saT48L3VsPicpOwoJCV9zZWN0aW9uLmFwcGVuZFRvKF9zZWN0aW9ucyk7CgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5jb21tZW50cykgewoJCQlpZihfc2VjdGlvbi5maW5kKCcjY29tbWVudEZvcm0tY29tbWVudHNfJyArIF9zSW5kKS5sZW5ndGgpIHsKCQkJCXN3aXRjaCh0eXBlb2Ygc2V0dGluZ3MuY29tbWVudHNbX3NJbmRdKSB7CgkJCQkJY2FzZSAnYm9vbGVhbic6CgkJCQkJCWlmKHNldHRpbmdzLmNvbW1lbnRzW19zSW5kXSkgewoJCQkJCQkJX3NlY3Rpb24uZmluZCgnI2NvbW1lbnRGb3JtLWNvbW1lbnRzXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcsICdjaGVja2VkJykuYXR0cignY2hlY2tlZCcpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJX3NlY3Rpb24uZmluZCgnI2NvbW1lbnRGb3JtLWNvbW1lbnRzXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcsIGZhbHNlKS5yZW1vdmVBdHRyKCdjaGVja2VkJyk7CgkJCQkJCX0KCQkJCQlkZWZhdWx0OgoJCQkJCQlfc2VjdGlvbi5maW5kKCcjY29tbWVudEZvcm0tY29tbWVudHNfJyArIF9zSW5kKS52YWwoc2V0dGluZ3MuY29tbWVudHNbX3NJbmRdKS5hdHRyKCd2YWx1ZScsIHNldHRpbmdzLmNvbW1lbnRzW19zSW5kXSk7CgkJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3Mub2xkU21pbGV5cykgewoJCQlpZihfc2VjdGlvbi5maW5kKCcjY29tbWVudEZvcm0tb2xkU21pbGV5c18nICsgX3NJbmQpLmxlbmd0aCkgewoJCQkJc3dpdGNoKHR5cGVvZiBzZXR0aW5ncy5vbGRTbWlsZXlzW19zSW5kXSkgewoJCQkJCWNhc2UgJ2Jvb2xlYW4nOgoJCQkJCQlpZihzZXR0aW5ncy5vbGRTbWlsZXlzW19zSW5kXSkgewoJCQkJCQkJX3NlY3Rpb24uZmluZCgnI2NvbW1lbnRGb3JtLW9sZFNtaWxleXNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJywgJ2NoZWNrZWQnKS5hdHRyKCdjaGVja2VkJyk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlfc2VjdGlvbi5maW5kKCcjY29tbWVudEZvcm0tb2xkU21pbGV5c18nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSkucmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQkJCQl9CgkJCQkJZGVmYXVsdDoKCQkJCQkJX3NlY3Rpb24uZmluZCgnI2NvbW1lbnRGb3JtLW9sZFNtaWxleXNfJyArIF9zSW5kKS52YWwoc2V0dGluZ3Mub2xkU21pbGV5c1tfc0luZF0pLmF0dHIoJ3ZhbHVlJywgc2V0dGluZ3Mub2xkU21pbGV5c1tfc0luZF0pOwoJCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQkKCQlmb3IoX3NJbmQgaW4gc2V0dGluZ3Muc21pbGV5cykgewoJCQkkKCcjc21pbGV5c1RhYmxlJykuYXBwZW5kKCQoJzx0cj4nKS5hcHBlbmQoJCgnPHRkPicpLnRleHQoX3NJbmQpKS5hcHBlbmQoJCgnPHRkPicpLmh0bWwoJyZyYXJyOycpKS5hcHBlbmQoJCgnPHRkPicpLmFkZENsYXNzKCdzbWlsZXlFeGFtcGxlJykuYXBwZW5kKCQoJzxpbWc+JykuYXR0cignc3JjJyxzZXR0aW5ncy5zbWlsZXlzW19zSW5kXSkpKS5hcHBlbmQoJCgnPHRkPicpLmFkZENsYXNzKCdzbWlsZXlzX3JlbW92ZScpLnRleHQoJ1gnKS5jbGljayhyZW1vdmVTbWlsZXkpKSk7CgkJfQoJCQoJCSQoJyNjb21tZW50Rm9ybS1zbWlsZXlzX2FkZCcpLmNsaWNrKGFkZFNtaWxleSk7CgoJCV9zZWN0aW9uLmZpbmQoJ3VsJykuYXBwZW5kKCQoJzxsaT4nKS5hZGRDbGFzcygnZm9ybS1saXN0LXJvdycpLmh0bWwoJzxzcGFuIGNsYXNzPSJmb3JtLWxpc3QtbGFiZWwiPjwvc3Bhbj48ZGl2IGNsYXNzPSJmb3JtLWxpc3QtY29udGVudCI+PGlucHV0IGNsYXNzPSJidXR0b24gYnV0dG9uLS10eXBlLXByaW1hcnkiIHR5cGU9InN1Ym1pdCIgbmFtZT0ic2F2ZV9wcml2YWN5X29wdGlvbnMiIHZhbHVlPSJTcGVpY2hlcm4iPjxpbnB1dCBjbGFzcz0ibGluayBmb3JtLWNhbmNlbCIgdHlwZT0icmVzZXQiIHZhbHVlPSJadXLDvGNrc2V0emVuIj48L2Rpdj4nKSk7Cgl9CgkKCWZ1bmN0aW9uIHN1Ym1pdFNldHRpbmdzKF9ldnQpIHsKCQlfZXZ0LnByZXZlbnREZWZhdWx0KCk7CgkJX2V2dC5zdG9wUHJvcGFnYXRpb24oKTsKCgkJdmFyIF9lcnJNZXNzYWdlID0gJyc7CgoJCXZhciBfYWxsT0sgPSB0cnVlOwoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MuYmVoYXZpb3IpIHsKCQkJdHJ5IHsKCQkJCXNldHRpbmdzLmJlaGF2aW9yW19zSW5kXSA9ICQoJyNiZWhhdmlvckZvcm0tYmVoYXZpb3JfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJyk7CgkJCX0gY2F0Y2goZSkgewoJCQkJX2FsbE9LID0gZmFsc2U7CgkJCX0KCQl9CgoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MuaGlkZUFkcykgewoJCQl0cnkgewoJCQkJc2V0dGluZ3MuaGlkZUFkc1tfc0luZF0gPSAkKCcjYWRGb3JtLWhpZGVBZHNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJyk7CgkJCX0gY2F0Y2goZSkgewoJCQkJX2FsbE9LID0gZmFsc2U7CgkJCX0KCQl9CgoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MubW92ZUJ1dHRvbnMpIHsKCQkJdHJ5IHsKCQkJCXNldHRpbmdzLm1vdmVCdXR0b25zW19zSW5kXSA9ICQoJyNidXR0b25Gb3JtLW1vdmVCdXR0b25zXycgKyBfc0luZCkucHJvcCgnY2hlY2tlZCcpOwoJCQl9IGNhdGNoKGUpIHsKCQkJCV9hbGxPSyA9IGZhbHNlOwoJCQl9CgkJfQoKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLnVzZXJNZW51RGlyZWN0KSB7CgkJCXRyeSB7CgkJCQlzZXR0aW5ncy51c2VyTWVudURpcmVjdFtfc0luZF0gPSAkKCcjdXNlck1lbnVGb3JtLWRpcmVjdF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnKTsKCQkJfSBjYXRjaChlKSB7CgkJCQlfYWxsT0sgPSBmYWxzZTsKCQkJfQoJCX0KCgkJZm9yKHZhciBfc0luZCBpbiBzZXR0aW5ncy5kZWFscykgewoJCQlpZihfc0luZCA9PSAnaGlkZScpIHsKCQkJCXRyeSB7CgkJCQkJbmV3IFJlZ0V4cCgkKCcjZGVhbHNGb3JtLWRlYWxzXycgKyBfc0luZCkudmFsKCkpOwoJCQkJfSBjYXRjaCAoZSkgewoJCQkJCV9lcnJNZXNzYWdlICs9IGUgKyAnPGJyIC8+JzsKCQkJCQlfYWxsT0sgPSBmYWxzZTsKCQkJCX0KCQkJfQoJCQl0cnkgewoJCQkJc2V0dGluZ3MuZGVhbHNbX3NJbmRdID0gKCQoJyNkZWFsc0Zvcm0tZGVhbHNfJyArIF9zSW5kKS5hdHRyKCd0eXBlJykgPT0gJ251bWJlcicgPyBwYXJzZUludCgkKCcjZGVhbHNGb3JtLWRlYWxzXycgKyBfc0luZCkudmFsKCksIDEwKSA6ICQoJyNkZWFsc0Zvcm0tZGVhbHNfJyArIF9zSW5kKS52YWwoKSk7CgkJCX0gY2F0Y2goZSkgewoJCQkJX2FsbE9LID0gZmFsc2U7CgkJCX0KCQl9CgoJCWZvcih2YXIgX3NJbmQgaW4gc2V0dGluZ3MuZGlzcGxheSkgewoJCQlpZigkKCcjZGlzcGxheUZvcm0tZGlzcGxheV8nICsgX3NJbmQpLmxlbmd0aCkgewoJCQkJdHJ5IHsKCQkJCQlzd2l0Y2godHlwZW9mIHNldHRpbmdzLmRpc3BsYXlbX3NJbmRdKSB7CgkJCQkJCWNhc2UgJ2Jvb2xlYW4nOgoJCQkJCQkJc2V0dGluZ3MuZGlzcGxheVtfc0luZF0gPSAkKCcjZGlzcGxheUZvcm0tZGlzcGxheV8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICdudW1iZXInOgoJCQkJCQkJc2V0dGluZ3MuZGlzcGxheVtfc0luZF0gPSBwYXJzZUludCgkKCcjZGlzcGxheUZvcm0tZGlzcGxheV8nICsgX3NJbmQpLnZhbCgpLCAxMCk7CgkJCQkJCQlicmVhazsKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCXNldHRpbmdzLmRpc3BsYXlbX3NJbmRdID0gJCgnI2Rpc3BsYXlGb3JtLWRpc3BsYXlfJyArIF9zSW5kKS52YWwoKTsKCQkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0gY2F0Y2goZSkgewoJCQkJCV9hbGxPSyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJfQoKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLnNlYXJjaCkgewoJCQlpZigkKCcjc2VhcmNoRm9ybS1zZWFyY2hfJyArIF9zSW5kKS5sZW5ndGgpIHsKCQkJCXRyeSB7CgkJCQkJc3dpdGNoKHR5cGVvZiBzZXR0aW5ncy5zZWFyY2hbX3NJbmRdKSB7CgkJCQkJCWNhc2UgJ2Jvb2xlYW4nOgoJCQkJCQkJc2V0dGluZ3Muc2VhcmNoW19zSW5kXSA9ICQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnByb3AoJ2NoZWNrZWQnKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQljYXNlICdudW1iZXInOgoJCQkJCQkJc2V0dGluZ3Muc2VhcmNoW19zSW5kXSA9IHBhcnNlSW50KCQoJyNzZWFyY2hGb3JtLXNlYXJjaF8nICsgX3NJbmQpLnZhbCgpLCAxMCk7CgkJCQkJCQlicmVhazsKCQkJCQkJZGVmYXVsdDoKCQkJCQkJCXNldHRpbmdzLnNlYXJjaFtfc0luZF0gPSAkKCcjc2VhcmNoRm9ybS1zZWFyY2hfJyArIF9zSW5kKS52YWwoKTsKCQkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0gY2F0Y2goZSkgewoJCQkJCV9hbGxPSyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJfQoKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLmNvbW1lbnRzKSB7CgkJCWlmKCQoJyNjb21tZW50Rm9ybS1jb21tZW50c18nICsgX3NJbmQpLmxlbmd0aCkgewoJCQkJdHJ5IHsKCQkJCQlzZXR0aW5ncy5jb21tZW50c1tfc0luZF0gPSAoJCgnI2NvbW1lbnRGb3JtLWNvbW1lbnRzXycgKyBfc0luZCkuYXR0cigndHlwZScpID09ICdudW1iZXInID8gcGFyc2VJbnQoJCgnI2NvbW1lbnRGb3JtLWNvbW1lbnRzXycgKyBfc0luZCkudmFsKCksIDEwKSA6ICQoJyNjb21tZW50Rm9ybS1jb21tZW50c18nICsgX3NJbmQpLnZhbCgpKTsKCQkJCX0gY2F0Y2goZSkgewoJCQkJCV9hbGxPSyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJfQoJCQoJCXNldHRpbmdzLnNtaWxleXMgPSB7fTsKCQkkKCcjc21pbGV5c1RhYmxlIHRyJykuZWFjaChmdW5jdGlvbiAoX3NJbmQsIF9zVmFsKSB7CgkJCXNldHRpbmdzLnNtaWxleXNbJChfc1ZhbCkuZmluZCgndGQnKS5lcSgwKS50ZXh0KCldID0gJChfc1ZhbCkuZmluZCgndGQnKS5lcSgyKS5maW5kKCdpbWcnKS5hdHRyKCdzcmMnKTsKCQl9KTsKCQlmb3IodmFyIF9zSW5kIGluIHNldHRpbmdzLm9sZFNtaWxleXMpIHsKCQkJdHJ5IHsKCQkJCXNldHRpbmdzLm9sZFNtaWxleXNbX3NJbmRdID0gJCgnI2NvbW1lbnRGb3JtLW9sZFNtaWxleXNfJyArIF9zSW5kKS5wcm9wKCdjaGVja2VkJyk7CgkJCX0gY2F0Y2goZSkgewoJCQkJX2FsbE9LID0gZmFsc2U7CgkJCX0KCQl9CgoJCWlmKF9hbGxPSykgewoJCQlzYXZlU2V0dGluZ3MoKTsKCQkJY3JlYXRlTWVzc2FnZVdpbmRvdygnRGVpbmUgRWluc3RlbGx1bmdlbiB3dXJkZW4gZ2VzcGVpY2hlcnQuPGJyIC8+V2VpdGVybGVpdHVuZyB6dXIgdXJzcHImdXVtbDtuZ2xpY2hlbiBTZWl0ZS4uLicsICdzdWNjZXNzJywgZnVuY3Rpb24gKCkgeyB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyNteWRlYWx6LWVuaGFuY2VyLywnJyk7IH0pOwoJCX0gZWxzZSB7CgkJCWNyZWF0ZU1lc3NhZ2VXaW5kb3coJ0VpbiBGZWhsZXIgdHJhdCBiZWltIFNwZWljaGVybiBhdWYuJyArIChfZXJyTWVzc2FnZS5sZW5ndGggPyAnPGJyIC8+JyArIF9lcnJNZXNzYWdlIDogJycpLCAnZXJyb3InKTsKCQl9Cgl9CgoJZnVuY3Rpb24gaW5pdCgpIHsKCQl2YXIgX25vRXJyb3IgPSB0cnVlOwoJCWlmKHdpbmRvdyAhPSB3aW5kb3cudG9wKSB7CgkJCS8vIE1vbWVudGFuZXIgV29ya2Fyb3VuZAoJCQkvLyBBbnNvbnN0ZW4gd2VyZGVuIGFsbGUgbmFjaGdlbGFkZW5lbiBFbGVtZW50ZSBhdWNoIGJlYXJiZWl0ZXQKCQkJcmV0dXJuOwoJCX0KCQl0cnkgewoJCQl2YXIgX3BhdGggPSBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9eXC8oW15cP10rKS4qJC8sICckMScpOwoJCQlpZigvXih2aXNpdHxpbWFnZSkvLnRlc3QoX3BhdGgpIHx8IC9eSmF2YVNjcmlwdCBTaGVsbC8udGVzdChkb2N1bWVudC50aXRsZSkpIHsKCQkJCXJldHVybjsKCQkJfQoJCQlyZXRyaWV2ZVVzZXJOYW1lKCk7CgkJCWxvYWRTZXR0aW5ncygpOwoJCQlhZGRNZW51U3dpdGNoZXIoZmlsdGVyUGF0aCgpKTsKCQkJcmVtb2RlbE5hdkJhcigpOwoJCQlyZW1vdmVBZHMoKTsKCQkJLy8gYWRkQ3liZXJEZWFseigpOwoJCQltb2RpZnlTZWFyY2goKTsKCQkJYWRkU2V0dXBMaW5rKCk7CgkJCWNoYW5nZUxpbmtzKCk7CgoJCQlpZihkb2N1bWVudC5sb2NhdGlvbi5oYXNoID09ICcjbXlkZWFsei1lbmhhbmNlcicpIHsKCQkJCXNob3dTZXR1cCgpOwoJCQl9CgkJCXN3aXRjaChfcGF0aCkgewoJCQkJY2FzZSAnY3liZXItbW9uZGF5L2N5YmVyZGVhbHMnOgoJCQkJCWFkZFRpbWVzKCk7CgkJCQljYXNlICdwcm9maWxlLycgKyB1c2VyTmFtZSArICcvbWVzc2FnZXMnOgoJCQkJCW1hcmtQblJlYWQoKTsKCQkJfQoKCQkJbW9kaWZ5TGlzdGluZ3MoKTsKCQkJYWRkU2Nyb2xsVXBCdXR0b24oKTsKCQkJYWRkSW1hZ2Vab29tKCk7CgkJCWluc2VydERpcmVjdExpbmsoKTsKCQkJYWRkRmVlZGJhY2tCdXR0b25zKCk7CgkJCWFkZEZ1bmNMaW5rcygpOwoJCQltb2RpZnlDb21tZW50cygpOwoJCQlzaG93T2xkU21pbGV5cygpOwoJCQlkZWFsVGV4dFByZXZpZXcoKTsKCQkJc2hvd1VzZXJJbmZvKCk7CgkJCWVtYmVkWW91dHViZSgpOwoJCQltaW5pbWl6ZVF1b3RlcygpOwoJCQliYWNrVG9BbmNob3IoKTsKCQl9IGNhdGNoIChlKSB7CgkJCWFsZXJ0KGUpOwoJCQlfbm9FcnJvciA9IGZhbHNlOwoJCX0KCgkJaWYoX25vRXJyb3IpIHsKCQkJaWYoc2V0dGluZ3MuYmVoYXZpb3Iuc2hvd0dyZWVuRG90cykgewoJCQkJJCgnLnVzZXJCYXItbGluayAuYXZhdGFyLWltYWdlJykuY3NzKCdib3JkZXInLCAnMXB4IGRvdHRlZCAjMDBmZjAwJyk7CgkJCX0KCQl9IGVsc2UgewoJCQkkKCcudXNlckJhci1saW5rIC5hdmF0YXItaW1hZ2UnKS5jc3MoJ2JvcmRlcicsICcxcHggZG90dGVkICNhYTAwMDAnKTsKCQl9Cgl9CgoJaW5pdCgpOwp9CgovLyBFcnN0IGxhZGVuLCB3ZW5uIERPTSBmZXJ0aWcgaXN0CmlmKGRvY3VtZW50LnJlYWR5U3RhdGUgPT0gJ2ludGVyYWN0aXZlJykgewoJTW9kaWZ5UGFnZSgpOwp9IGVsc2UgewoJJChkb2N1bWVudCkucmVhZHkoTW9kaWZ5UGFnZSk7Cn0=","requires":[{"meta":{"name":"jquery-2.1.4.min.js","url":"http://code.jquery.com/jquery-2.1.4.min.js","ts":1479476020290,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2Mi4xLjQgfCAoYykgMjAwNSwgMjAxNSBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwohZnVuY3Rpb24oYSxiKXsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1hLmRvY3VtZW50P2IoYSwhMCk6ZnVuY3Rpb24oYSl7aWYoIWEuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIGIoYSl9OmIoYSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZD1jLnNsaWNlLGU9Yy5jb25jYXQsZj1jLnB1c2gsZz1jLmluZGV4T2YsaD17fSxpPWgudG9TdHJpbmcsaj1oLmhhc093blByb3BlcnR5LGs9e30sbD1hLmRvY3VtZW50LG09IjIuMS40IixuPWZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBuLmZuLmluaXQoYSxiKX0sbz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2cscD0vXi1tcy0vLHE9Ly0oW1xkYS16XSkvZ2kscj1mdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNlKCl9O24uZm49bi5wcm90b3R5cGU9e2pxdWVyeTptLGNvbnN0cnVjdG9yOm4sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBkLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT8wPmE/dGhpc1thK3RoaXMubGVuZ3RoXTp0aGlzW2FdOmQuY2FsbCh0aGlzKX0scHVzaFN0YWNrOmZ1bmN0aW9uKGEpe3ZhciBiPW4ubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGEpO3JldHVybiBiLnByZXZPYmplY3Q9dGhpcyxiLmNvbnRleHQ9dGhpcy5jb250ZXh0LGJ9LGVhY2g6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbi5lYWNoKHRoaXMsYSxiKX0sbWFwOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhuLm1hcCh0aGlzLGZ1bmN0aW9uKGIsYyl7cmV0dXJuIGEuY2FsbChiLGMsYil9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5sZW5ndGgsYz0rYSsoMD5hP2I6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGM+PTAmJmI+Yz9bdGhpc1tjXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKG51bGwpfSxwdXNoOmYsc29ydDpjLnNvcnQsc3BsaWNlOmMuc3BsaWNlfSxuLmV4dGVuZD1uLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGUsZixnPWFyZ3VtZW50c1swXXx8e30saD0xLGk9YXJndW1lbnRzLmxlbmd0aCxqPSExO2ZvcigiYm9vbGVhbiI9PXR5cGVvZiBnJiYoaj1nLGc9YXJndW1lbnRzW2hdfHx7fSxoKyspLCJvYmplY3QiPT10eXBlb2YgZ3x8bi5pc0Z1bmN0aW9uKGcpfHwoZz17fSksaD09PWkmJihnPXRoaXMsaC0tKTtpPmg7aCsrKWlmKG51bGwhPShhPWFyZ3VtZW50c1toXSkpZm9yKGIgaW4gYSljPWdbYl0sZD1hW2JdLGchPT1kJiYoaiYmZCYmKG4uaXNQbGFpbk9iamVjdChkKXx8KGU9bi5pc0FycmF5KGQpKSk/KGU/KGU9ITEsZj1jJiZuLmlzQXJyYXkoYyk/YzpbXSk6Zj1jJiZuLmlzUGxhaW5PYmplY3QoYyk/Yzp7fSxnW2JdPW4uZXh0ZW5kKGosZixkKSk6dm9pZCAwIT09ZCYmKGdbYl09ZCkpO3JldHVybiBnfSxuLmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisobStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGEpe3Rocm93IG5ldyBFcnJvcihhKX0sbm9vcDpmdW5jdGlvbigpe30saXNGdW5jdGlvbjpmdW5jdGlvbihhKXtyZXR1cm4iZnVuY3Rpb24iPT09bi50eXBlKGEpfSxpc0FycmF5OkFycmF5LmlzQXJyYXksaXNXaW5kb3c6ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWEmJmE9PT1hLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGEpe3JldHVybiFuLmlzQXJyYXkoYSkmJmEtcGFyc2VGbG9hdChhKSsxPj0wfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe3JldHVybiJvYmplY3QiIT09bi50eXBlKGEpfHxhLm5vZGVUeXBlfHxuLmlzV2luZG93KGEpPyExOmEuY29uc3RydWN0b3ImJiFqLmNhbGwoYS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKT8hMTohMH0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXt2YXIgYjtmb3IoYiBpbiBhKXJldHVybiExO3JldHVybiEwfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP2ErIiI6Im9iamVjdCI9PXR5cGVvZiBhfHwiZnVuY3Rpb24iPT10eXBlb2YgYT9oW2kuY2FsbChhKV18fCJvYmplY3QiOnR5cGVvZiBhfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGM9ZXZhbDthPW4udHJpbShhKSxhJiYoMT09PWEuaW5kZXhPZigidXNlIHN0cmljdCIpPyhiPWwuY3JlYXRlRWxlbWVudCgic2NyaXB0IiksYi50ZXh0PWEsbC5oZWFkLmFwcGVuZENoaWxkKGIpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYikpOmMoYSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShwLCJtcy0iKS5yZXBsYWNlKHEscil9LG5vZGVOYW1lOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZT0wLGY9YS5sZW5ndGgsZz1zKGEpO2lmKGMpe2lmKGcpe2Zvcig7Zj5lO2UrKylpZihkPWIuYXBwbHkoYVtlXSxjKSxkPT09ITEpYnJlYWt9ZWxzZSBmb3IoZSBpbiBhKWlmKGQ9Yi5hcHBseShhW2VdLGMpLGQ9PT0hMSlicmVha31lbHNlIGlmKGcpe2Zvcig7Zj5lO2UrKylpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFrfWVsc2UgZm9yKGUgaW4gYSlpZihkPWIuY2FsbChhW2VdLGUsYVtlXSksZD09PSExKWJyZWFrO3JldHVybiBhfSx0cmltOmZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hPyIiOihhKyIiKS5yZXBsYWNlKG8sIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oYSxiKXt2YXIgYz1ifHxbXTtyZXR1cm4gbnVsbCE9YSYmKHMoT2JqZWN0KGEpKT9uLm1lcmdlKGMsInN0cmluZyI9PXR5cGVvZiBhP1thXTphKTpmLmNhbGwoYyxhKSksY30saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG51bGw9PWI/LTE6Zy5jYWxsKGIsYSxjKX0sbWVyZ2U6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9K2IubGVuZ3RoLGQ9MCxlPWEubGVuZ3RoO2M+ZDtkKyspYVtlKytdPWJbZF07cmV0dXJuIGEubGVuZ3RoPWUsYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkLGU9W10sZj0wLGc9YS5sZW5ndGgsaD0hYztnPmY7ZisrKWQ9IWIoYVtmXSxmKSxkIT09aCYmZS5wdXNoKGFbZl0pO3JldHVybiBlfSxtYXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9MCxnPWEubGVuZ3RoLGg9cyhhKSxpPVtdO2lmKGgpZm9yKDtnPmY7ZisrKWQ9YihhW2ZdLGYsYyksbnVsbCE9ZCYmaS5wdXNoKGQpO2Vsc2UgZm9yKGYgaW4gYSlkPWIoYVtmXSxmLGMpLG51bGwhPWQmJmkucHVzaChkKTtyZXR1cm4gZS5hcHBseShbXSxpKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmO3JldHVybiJzdHJpbmciPT10eXBlb2YgYiYmKGM9YVtiXSxiPWEsYT1jKSxuLmlzRnVuY3Rpb24oYSk/KGU9ZC5jYWxsKGFyZ3VtZW50cywyKSxmPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYnx8dGhpcyxlLmNvbmNhdChkLmNhbGwoYXJndW1lbnRzKSkpfSxmLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8bi5ndWlkKyssZik6dm9pZCAwfSxub3c6RGF0ZS5ub3csc3VwcG9ydDprfSksbi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGEsYil7aFsiW29iamVjdCAiK2IrIl0iXT1iLnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBzKGEpe3ZhciBiPSJsZW5ndGgiaW4gYSYmYS5sZW5ndGgsYz1uLnR5cGUoYSk7cmV0dXJuImZ1bmN0aW9uIj09PWN8fG4uaXNXaW5kb3coYSk/ITE6MT09PWEubm9kZVR5cGUmJmI/ITA6ImFycmF5Ij09PWN8fDA9PT1ifHwibnVtYmVyIj09dHlwZW9mIGImJmI+MCYmYi0xIGluIGF9dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdT0ic2l6emxlIisxKm5ldyBEYXRlLHY9YS5kb2N1bWVudCx3PTAseD0wLHk9aGEoKSx6PWhhKCksQT1oYSgpLEI9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT09PWImJihsPSEwKSwwfSxDPTE8PDMxLEQ9e30uaGFzT3duUHJvcGVydHksRT1bXSxGPUUucG9wLEc9RS5wdXNoLEg9RS5wdXNoLEk9RS5zbGljZSxKPWZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKWlmKGFbY109PT1iKXJldHVybiBjO3JldHVybi0xfSxLPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTD0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLE49TS5yZXBsYWNlKCJ3IiwidyMiKSxPPSJcXFsiK0wrIiooIitNKyIpKD86IitMKyIqKFsqXiR8IX5dPz0pIitMKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrTisiKSl8KSIrTCsiKlxcXSIsUD0iOigiK00rIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK08rIikqKXwuKilcXCl8KSIsUT1uZXcgUmVnRXhwKEwrIisiLCJnIiksUj1uZXcgUmVnRXhwKCJeIitMKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK0wrIiskIiwiZyIpLFM9bmV3IFJlZ0V4cCgiXiIrTCsiKiwiK0wrIioiKSxUPW5ldyBSZWdFeHAoIl4iK0wrIiooWz4rfl18IitMKyIpIitMKyIqIiksVT1uZXcgUmVnRXhwKCI9IitMKyIqKFteXFxdJ1wiXSo/KSIrTCsiKlxcXSIsImciKSxWPW5ldyBSZWdFeHAoUCksVz1uZXcgUmVnRXhwKCJeIitOKyIkIiksWD17SUQ6bmV3IFJlZ0V4cCgiXiMoIitNKyIpIiksQ0xBU1M6bmV3IFJlZ0V4cCgiXlxcLigiK00rIikiKSxUQUc6bmV3IFJlZ0V4cCgiXigiK00ucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK08pLFBTRVVETzpuZXcgUmVnRXhwKCJeIitQKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK0wrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0wrIiooPzooWystXXwpIitMKyIqKFxcZCspfCkpIitMKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitLKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTCsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitMKyIqKCg/Oi1cXGQpP1xcZCopIitMKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxZPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksWj0vXmhcZCQvaSwkPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxfPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sYWE9L1srfl0vLGJhPS8nfFxcL2csY2E9bmV3IFJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitMKyI/fCgiK0wrIil8LikiLCJpZyIpLGRhPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD0iMHgiK2ItNjU1MzY7cmV0dXJuIGQhPT1kfHxjP2I6MD5kP1N0cmluZy5mcm9tQ2hhckNvZGUoZCs2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZShkPj4xMHw1NTI5NiwxMDIzJmR8NTYzMjApfSxlYT1mdW5jdGlvbigpe20oKX07dHJ5e0guYXBwbHkoRT1JLmNhbGwodi5jaGlsZE5vZGVzKSx2LmNoaWxkTm9kZXMpLEVbdi5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZmEpe0g9e2FwcGx5OkUubGVuZ3RoP2Z1bmN0aW9uKGEsYil7Ry5hcHBseShhLEkuY2FsbChiKSl9OmZ1bmN0aW9uKGEsYil7dmFyIGM9YS5sZW5ndGgsZD0wO3doaWxlKGFbYysrXT1iW2QrK10pO2EubGVuZ3RoPWMtMX19fWZ1bmN0aW9uIGdhKGEsYixkLGUpe3ZhciBmLGgsaixrLGwsbyxyLHMsdyx4O2lmKChiP2Iub3duZXJEb2N1bWVudHx8Yjp2KSE9PW4mJm0oYiksYj1ifHxuLGQ9ZHx8W10saz1iLm5vZGVUeXBlLCJzdHJpbmciIT10eXBlb2YgYXx8IWF8fDEhPT1rJiY5IT09ayYmMTEhPT1rKXJldHVybiBkO2lmKCFlJiZwKXtpZigxMSE9PWsmJihmPV8uZXhlYyhhKSkpaWYoaj1mWzFdKXtpZig5PT09ayl7aWYoaD1iLmdldEVsZW1lbnRCeUlkKGopLCFofHwhaC5wYXJlbnROb2RlKXJldHVybiBkO2lmKGguaWQ9PT1qKXJldHVybiBkLnB1c2goaCksZH1lbHNlIGlmKGIub3duZXJEb2N1bWVudCYmKGg9Yi5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGopKSYmdChiLGgpJiZoLmlkPT09ailyZXR1cm4gZC5wdXNoKGgpLGR9ZWxzZXtpZihmWzJdKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKSksZDtpZigoaj1mWzNdKSYmYy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KGQsYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGopKSxkfWlmKGMucXNhJiYoIXF8fCFxLnRlc3QoYSkpKXtpZihzPXI9dSx3PWIseD0xIT09ayYmYSwxPT09ayYmIm9iamVjdCIhPT1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe289ZyhhKSwocj1iLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1yLnJlcGxhY2UoYmEsIlxcJCYiKTpiLnNldEF0dHJpYnV0ZSgiaWQiLHMpLHM9IltpZD0nIitzKyInXSAiLGw9by5sZW5ndGg7d2hpbGUobC0tKW9bbF09cytyYShvW2xdKTt3PWFhLnRlc3QoYSkmJnBhKGIucGFyZW50Tm9kZSl8fGIseD1vLmpvaW4oIiwiKX1pZih4KXRyeXtyZXR1cm4gSC5hcHBseShkLHcucXVlcnlTZWxlY3RvckFsbCh4KSksZH1jYXRjaCh5KXt9ZmluYWxseXtyfHxiLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBpKGEucmVwbGFjZShSLCIkMSIpLGIsZCxlKX1mdW5jdGlvbiBoYSgpe3ZhciBhPVtdO2Z1bmN0aW9uIGIoYyxlKXtyZXR1cm4gYS5wdXNoKGMrIiAiKT5kLmNhY2hlTGVuZ3RoJiZkZWxldGUgYlthLnNoaWZ0KCldLGJbYysiICJdPWV9cmV0dXJuIGJ9ZnVuY3Rpb24gaWEoYSl7cmV0dXJuIGFbdV09ITAsYX1mdW5jdGlvbiBqYShhKXt2YXIgYj1uLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4hIWEoYil9Y2F0Y2goYyl7cmV0dXJuITF9ZmluYWxseXtiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChiKSxiPW51bGx9fWZ1bmN0aW9uIGthKGEsYil7dmFyIGM9YS5zcGxpdCgifCIpLGU9YS5sZW5ndGg7d2hpbGUoZS0tKWQuYXR0ckhhbmRsZVtjW2VdXT1ifWZ1bmN0aW9uIGxhKGEsYil7dmFyIGM9YiYmYSxkPWMmJjE9PT1hLm5vZGVUeXBlJiYxPT09Yi5ub2RlVHlwZSYmKH5iLnNvdXJjZUluZGV4fHxDKS0ofmEuc291cmNlSW5kZXh8fEMpO2lmKGQpcmV0dXJuIGQ7aWYoYyl3aGlsZShjPWMubmV4dFNpYmxpbmcpaWYoYz09PWIpcmV0dXJuLTE7cmV0dXJuIGE/MTotMX1mdW5jdGlvbiBtYShhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1jJiZiLnR5cGU9PT1hfX1mdW5jdGlvbiBuYShhKXtyZXR1cm4gZnVuY3Rpb24oYil7dmFyIGM9Yi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09Y3x8ImJ1dHRvbiI9PT1jKSYmYi50eXBlPT09YX19ZnVuY3Rpb24gb2EoYSl7cmV0dXJuIGlhKGZ1bmN0aW9uKGIpe3JldHVybiBiPStiLGlhKGZ1bmN0aW9uKGMsZCl7dmFyIGUsZj1hKFtdLGMubGVuZ3RoLGIpLGc9Zi5sZW5ndGg7d2hpbGUoZy0tKWNbZT1mW2ddXSYmKGNbZV09IShkW2VdPWNbZV0pKX0pfSl9ZnVuY3Rpb24gcGEoYSl7cmV0dXJuIGEmJiJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmYX1jPWdhLnN1cHBvcnQ9e30sZj1nYS5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj1hJiYoYS5vd25lckRvY3VtZW50fHxhKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGI/IkhUTUwiIT09Yi5ub2RlTmFtZTohMX0sbT1nYS5zZXREb2N1bWVudD1mdW5jdGlvbihhKXt2YXIgYixlLGc9YT9hLm93bmVyRG9jdW1lbnR8fGE6djtyZXR1cm4gZyE9PW4mJjk9PT1nLm5vZGVUeXBlJiZnLmRvY3VtZW50RWxlbWVudD8obj1nLG89Zy5kb2N1bWVudEVsZW1lbnQsZT1nLmRlZmF1bHRWaWV3LGUmJmUhPT1lLnRvcCYmKGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsZWEsITEpOmUuYXR0YWNoRXZlbnQmJmUuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixlYSkpLHA9IWYoZyksYy5hdHRyaWJ1dGVzPWphKGZ1bmN0aW9uKGEpe3JldHVybiBhLmNsYXNzTmFtZT0iaSIsIWEuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLGMuZ2V0RWxlbWVudHNCeVRhZ05hbWU9amEoZnVuY3Rpb24oYSl7cmV0dXJuIGEuYXBwZW5kQ2hpbGQoZy5jcmVhdGVDb21tZW50KCIiKSksIWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxjLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9JC50ZXN0KGcuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSksYy5nZXRCeUlkPWphKGZ1bmN0aW9uKGEpe3JldHVybiBvLmFwcGVuZENoaWxkKGEpLmlkPXUsIWcuZ2V0RWxlbWVudHNCeU5hbWV8fCFnLmdldEVsZW1lbnRzQnlOYW1lKHUpLmxlbmd0aH0pLGMuZ2V0QnlJZD8oZC5maW5kLklEPWZ1bmN0aW9uKGEsYil7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBiLmdldEVsZW1lbnRCeUlkJiZwKXt2YXIgYz1iLmdldEVsZW1lbnRCeUlkKGEpO3JldHVybiBjJiZjLnBhcmVudE5vZGU/W2NdOltdfX0sZC5maWx0ZXIuSUQ9ZnVuY3Rpb24oYSl7dmFyIGI9YS5yZXBsYWNlKGNhLGRhKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn19KTooZGVsZXRlIGQuZmluZC5JRCxkLmZpbHRlci5JRD1mdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpO3JldHVybiBmdW5jdGlvbihhKXt2YXIgYz0idW5kZWZpbmVkIiE9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSYmYS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBjJiZjLnZhbHVlPT09Yn19KSxkLmZpbmQuVEFHPWMuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oYSxiKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGIuZ2V0RWxlbWVudHNCeVRhZ05hbWU/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTpjLnFzYT9iLnF1ZXJ5U2VsZWN0b3JBbGwoYSk6dm9pZCAwfTpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT0wLGY9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZShhKTtpZigiKiI9PT1hKXt3aGlsZShjPWZbZSsrXSkxPT09Yy5ub2RlVHlwZSYmZC5wdXNoKGMpO3JldHVybiBkfXJldHVybiBmfSxkLmZpbmQuQ0xBU1M9Yy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihhLGIpe3JldHVybiBwP2IuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShhKTp2b2lkIDB9LHI9W10scT1bXSwoYy5xc2E9JC50ZXN0KGcucXVlcnlTZWxlY3RvckFsbCkpJiYoamEoZnVuY3Rpb24oYSl7by5hcHBlbmRDaGlsZChhKS5pbm5lckhUTUw9IjxhIGlkPSciK3UrIic+PC9hPjxzZWxlY3QgaWQ9JyIrdSsiLVxmXScgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGEucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnEucHVzaCgiWypeJF09IitMKyIqKD86Jyd8XCJcIikiKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHEucHVzaCgiXFxbIitMKyIqKD86dmFsdWV8IitLKyIpIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrdSsiLV0iKS5sZW5ndGh8fHEucHVzaCgifj0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxxLnB1c2goIjpjaGVja2VkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrdSsiKyoiKS5sZW5ndGh8fHEucHVzaCgiLiMuK1srfl0iKX0pLGphKGZ1bmN0aW9uKGEpe3ZhciBiPWcuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtiLnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGEuYXBwZW5kQ2hpbGQoYikuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGEucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnEucHVzaCgibmFtZSIrTCsiKlsqXiR8IX5dPz0iKSxhLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxxLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikscS5wdXNoKCIsLio6Iil9KSksKGMubWF0Y2hlc1NlbGVjdG9yPSQudGVzdChzPW8ubWF0Y2hlc3x8by53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fG8ubW96TWF0Y2hlc1NlbGVjdG9yfHxvLm9NYXRjaGVzU2VsZWN0b3J8fG8ubXNNYXRjaGVzU2VsZWN0b3IpKSYmamEoZnVuY3Rpb24oYSl7Yy5kaXNjb25uZWN0ZWRNYXRjaD1zLmNhbGwoYSwiZGl2Iikscy5jYWxsKGEsIltzIT0nJ106eCIpLHIucHVzaCgiIT0iLFApfSkscT1xLmxlbmd0aCYmbmV3IFJlZ0V4cChxLmpvaW4oInwiKSkscj1yLmxlbmd0aCYmbmV3IFJlZ0V4cChyLmpvaW4oInwiKSksYj0kLnRlc3Qoby5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksdD1ifHwkLnRlc3Qoby5jb250YWlucyk/ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYmYi5wYXJlbnROb2RlO3JldHVybiBhPT09ZHx8ISghZHx8MSE9PWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKXdoaWxlKGI9Yi5wYXJlbnROb2RlKWlmKGI9PT1hKXJldHVybiEwO3JldHVybiExfSxCPWI/ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBkPSFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBkP2Q6KGQ9KGEub3duZXJEb2N1bWVudHx8YSk9PT0oYi5vd25lckRvY3VtZW50fHxiKT9hLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIpOjEsMSZkfHwhYy5zb3J0RGV0YWNoZWQmJmIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSk9PT1kP2E9PT1nfHxhLm93bmVyRG9jdW1lbnQ9PT12JiZ0KHYsYSk/LTE6Yj09PWd8fGIub3duZXJEb2N1bWVudD09PXYmJnQodixiKT8xOms/SihrLGEpLUooayxiKTowOjQmZD8tMToxKX06ZnVuY3Rpb24oYSxiKXtpZihhPT09YilyZXR1cm4gbD0hMCwwO3ZhciBjLGQ9MCxlPWEucGFyZW50Tm9kZSxmPWIucGFyZW50Tm9kZSxoPVthXSxpPVtiXTtpZighZXx8IWYpcmV0dXJuIGE9PT1nPy0xOmI9PT1nPzE6ZT8tMTpmPzE6az9KKGssYSktSihrLGIpOjA7aWYoZT09PWYpcmV0dXJuIGxhKGEsYik7Yz1hO3doaWxlKGM9Yy5wYXJlbnROb2RlKWgudW5zaGlmdChjKTtjPWI7d2hpbGUoYz1jLnBhcmVudE5vZGUpaS51bnNoaWZ0KGMpO3doaWxlKGhbZF09PT1pW2RdKWQrKztyZXR1cm4gZD9sYShoW2RdLGlbZF0pOmhbZF09PT12Py0xOmlbZF09PT12PzE6MH0sZyk6bn0sZ2EubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBnYShhLG51bGwsbnVsbCxiKX0sZ2EubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGEsYil7aWYoKGEub3duZXJEb2N1bWVudHx8YSkhPT1uJiZtKGEpLGI9Yi5yZXBsYWNlKFUsIj0nJDEnXSIpLCEoIWMubWF0Y2hlc1NlbGVjdG9yfHwhcHx8ciYmci50ZXN0KGIpfHxxJiZxLnRlc3QoYikpKXRyeXt2YXIgZD1zLmNhbGwoYSxiKTtpZihkfHxjLmRpc2Nvbm5lY3RlZE1hdGNofHxhLmRvY3VtZW50JiYxMSE9PWEuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIGR9Y2F0Y2goZSl7fXJldHVybiBnYShiLG4sbnVsbCxbYV0pLmxlbmd0aD4wfSxnYS5jb250YWlucz1mdW5jdGlvbihhLGIpe3JldHVybihhLm93bmVyRG9jdW1lbnR8fGEpIT09biYmbShhKSx0KGEsYil9LGdhLmF0dHI9ZnVuY3Rpb24oYSxiKXsoYS5vd25lckRvY3VtZW50fHxhKSE9PW4mJm0oYSk7dmFyIGU9ZC5hdHRySGFuZGxlW2IudG9Mb3dlckNhc2UoKV0sZj1lJiZELmNhbGwoZC5hdHRySGFuZGxlLGIudG9Mb3dlckNhc2UoKSk/ZShhLGIsIXApOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09Zj9mOmMuYXR0cmlidXRlc3x8IXA/YS5nZXRBdHRyaWJ1dGUoYik6KGY9YS5nZXRBdHRyaWJ1dGVOb2RlKGIpKSYmZi5zcGVjaWZpZWQ/Zi52YWx1ZTpudWxsfSxnYS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9LGdhLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oYSl7dmFyIGIsZD1bXSxlPTAsZj0wO2lmKGw9IWMuZGV0ZWN0RHVwbGljYXRlcyxrPSFjLnNvcnRTdGFibGUmJmEuc2xpY2UoMCksYS5zb3J0KEIpLGwpe3doaWxlKGI9YVtmKytdKWI9PT1hW2ZdJiYoZT1kLnB1c2goZikpO3doaWxlKGUtLSlhLnNwbGljZShkW2VdLDEpfXJldHVybiBrPW51bGwsYX0sZT1nYS5nZXRUZXh0PWZ1bmN0aW9uKGEpe3ZhciBiLGM9IiIsZD0wLGY9YS5ub2RlVHlwZTtpZihmKXtpZigxPT09Znx8OT09PWZ8fDExPT09Zil7aWYoInN0cmluZyI9PXR5cGVvZiBhLnRleHRDb250ZW50KXJldHVybiBhLnRleHRDb250ZW50O2ZvcihhPWEuZmlyc3RDaGlsZDthO2E9YS5uZXh0U2libGluZyljKz1lKGEpfWVsc2UgaWYoMz09PWZ8fDQ9PT1mKXJldHVybiBhLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKGI9YVtkKytdKWMrPWUoYik7cmV0dXJuIGN9LGQ9Z2Euc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86aWEsbWF0Y2g6WCxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oYSl7cmV0dXJuIGFbMV09YVsxXS5yZXBsYWNlKGNhLGRhKSxhWzNdPShhWzNdfHxhWzRdfHxhWzVdfHwiIikucmVwbGFjZShjYSxkYSksIn49Ij09PWFbMl0mJihhWzNdPSIgIithWzNdKyIgIiksYS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihhKXtyZXR1cm4gYVsxXT1hWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1hWzFdLnNsaWNlKDAsMyk/KGFbM118fGdhLmVycm9yKGFbMF0pLGFbNF09KyhhWzRdP2FbNV0rKGFbNl18fDEpOjIqKCJldmVuIj09PWFbM118fCJvZGQiPT09YVszXSkpLGFbNV09KyhhWzddK2FbOF18fCJvZGQiPT09YVszXSkpOmFbM10mJmdhLmVycm9yKGFbMF0pLGF9LFBTRVVETzpmdW5jdGlvbihhKXt2YXIgYixjPSFhWzZdJiZhWzJdO3JldHVybiBYLkNISUxELnRlc3QoYVswXSk/bnVsbDooYVszXT9hWzJdPWFbNF18fGFbNV18fCIiOmMmJlYudGVzdChjKSYmKGI9ZyhjLCEwKSkmJihiPWMuaW5kZXhPZigiKSIsYy5sZW5ndGgtYiktYy5sZW5ndGgpJiYoYVswXT1hWzBdLnNsaWNlKDAsYiksYVsyXT1jLnNsaWNlKDAsYikpLGEuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihhKXt2YXIgYj1hLnJlcGxhY2UoY2EsZGEpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09YT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09Yn19LENMQVNTOmZ1bmN0aW9uKGEpe3ZhciBiPXlbYSsiICJdO3JldHVybiBifHwoYj1uZXcgUmVnRXhwKCIoXnwiK0wrIikiK2ErIigiK0wrInwkKSIpKSYmeShhLGZ1bmN0aW9uKGEpe3JldHVybiBiLnRlc3QoInN0cmluZyI9PXR5cGVvZiBhLmNsYXNzTmFtZSYmYS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgYS5nZXRBdHRyaWJ1dGUmJmEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGZ1bmN0aW9uKGQpe3ZhciBlPWdhLmF0dHIoZCxhKTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09YjpiPyhlKz0iIiwiPSI9PT1iP2U9PT1jOiIhPSI9PT1iP2UhPT1jOiJePSI9PT1iP2MmJjA9PT1lLmluZGV4T2YoYyk6Iio9Ij09PWI/YyYmZS5pbmRleE9mKGMpPi0xOiIkPSI9PT1iP2MmJmUuc2xpY2UoLWMubGVuZ3RoKT09PWM6In49Ij09PWI/KCIgIitlLnJlcGxhY2UoUSwiICIpKyIgIikuaW5kZXhPZihjKT4tMToifD0iPT09Yj9lPT09Y3x8ZS5zbGljZSgwLGMubGVuZ3RoKzEpPT09YysiLSI6ITEpOiEwfX0sQ0hJTEQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZj0ibnRoIiE9PWEuc2xpY2UoMCwzKSxnPSJsYXN0IiE9PWEuc2xpY2UoLTQpLGg9Im9mLXR5cGUiPT09YjtyZXR1cm4gMT09PWQmJjA9PT1lP2Z1bmN0aW9uKGEpe3JldHVybiEhYS5wYXJlbnROb2RlfTpmdW5jdGlvbihiLGMsaSl7dmFyIGosayxsLG0sbixvLHA9ZiE9PWc/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixxPWIucGFyZW50Tm9kZSxyPWgmJmIubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPSFpJiYhaDtpZihxKXtpZihmKXt3aGlsZShwKXtsPWI7d2hpbGUobD1sW3BdKWlmKGg/bC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09cjoxPT09bC5ub2RlVHlwZSlyZXR1cm4hMTtvPXA9Im9ubHkiPT09YSYmIW8mJiJuZXh0U2libGluZyJ9cmV0dXJuITB9aWYobz1bZz9xLmZpcnN0Q2hpbGQ6cS5sYXN0Q2hpbGRdLGcmJnMpe2s9cVt1XXx8KHFbdV09e30pLGo9a1thXXx8W10sbj1qWzBdPT09dyYmalsxXSxtPWpbMF09PT13JiZqWzJdLGw9biYmcS5jaGlsZE5vZGVzW25dO3doaWxlKGw9KytuJiZsJiZsW3BdfHwobT1uPTApfHxvLnBvcCgpKWlmKDE9PT1sLm5vZGVUeXBlJiYrK20mJmw9PT1iKXtrW2FdPVt3LG4sbV07YnJlYWt9fWVsc2UgaWYocyYmKGo9KGJbdV18fChiW3VdPXt9KSlbYV0pJiZqWzBdPT09dyltPWpbMV07ZWxzZSB3aGlsZShsPSsrbiYmbCYmbFtwXXx8KG09bj0wKXx8by5wb3AoKSlpZigoaD9sLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1yOjE9PT1sLm5vZGVUeXBlKSYmKyttJiYocyYmKChsW3VdfHwobFt1XT17fSkpW2FdPVt3LG1dKSxsPT09YikpYnJlYWs7cmV0dXJuIG0tPWUsbT09PWR8fG0lZD09PTAmJm0vZD49MH19fSxQU0VVRE86ZnVuY3Rpb24oYSxiKXt2YXIgYyxlPWQucHNldWRvc1thXXx8ZC5zZXRGaWx0ZXJzW2EudG9Mb3dlckNhc2UoKV18fGdhLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrYSk7cmV0dXJuIGVbdV0/ZShiKTplLmxlbmd0aD4xPyhjPVthLGEsIiIsYl0sZC5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGEudG9Mb3dlckNhc2UoKSk/aWEoZnVuY3Rpb24oYSxjKXt2YXIgZCxmPWUoYSxiKSxnPWYubGVuZ3RoO3doaWxlKGctLSlkPUooYSxmW2ddKSxhW2RdPSEoY1tkXT1mW2ddKX0pOmZ1bmN0aW9uKGEpe3JldHVybiBlKGEsMCxjKX0pOmV9fSxwc2V1ZG9zOntub3Q6aWEoZnVuY3Rpb24oYSl7dmFyIGI9W10sYz1bXSxkPWgoYS5yZXBsYWNlKFIsIiQxIikpO3JldHVybiBkW3VdP2lhKGZ1bmN0aW9uKGEsYixjLGUpe3ZhciBmLGc9ZChhLG51bGwsZSxbXSksaD1hLmxlbmd0aDt3aGlsZShoLS0pKGY9Z1toXSkmJihhW2hdPSEoYltoXT1mKSl9KTpmdW5jdGlvbihhLGUsZil7cmV0dXJuIGJbMF09YSxkKGIsbnVsbCxmLGMpLGJbMF09bnVsbCwhYy5wb3AoKX19KSxoYXM6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBnYShhLGIpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmlhKGZ1bmN0aW9uKGEpe3JldHVybiBhPWEucmVwbGFjZShjYSxkYSksZnVuY3Rpb24oYil7cmV0dXJuKGIudGV4dENvbnRlbnR8fGIuaW5uZXJUZXh0fHxlKGIpKS5pbmRleE9mKGEpPi0xfX0pLGxhbmc6aWEoZnVuY3Rpb24oYSl7cmV0dXJuIFcudGVzdChhfHwiIil8fGdhLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2EpLGE9YS5yZXBsYWNlKGNhLGRhKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGIpe3ZhciBjO2RvIGlmKGM9cD9iLmxhbmc6Yi5nZXRBdHRyaWJ1dGUoInhtbDpsYW5nIil8fGIuZ2V0QXR0cmlidXRlKCJsYW5nIikpcmV0dXJuIGM9Yy50b0xvd2VyQ2FzZSgpLGM9PT1hfHwwPT09Yy5pbmRleE9mKGErIi0iKTt3aGlsZSgoYj1iLnBhcmVudE5vZGUpJiYxPT09Yi5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGIpe3ZhciBjPWEubG9jYXRpb24mJmEubG9jYXRpb24uaGFzaDtyZXR1cm4gYyYmYy5zbGljZSgxKT09PWIuaWR9LHJvb3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1vfSxmb2N1czpmdW5jdGlvbihhKXtyZXR1cm4gYT09PW4uYWN0aXZlRWxlbWVudCYmKCFuLmhhc0ZvY3VzfHxuLmhhc0ZvY3VzKCkpJiYhIShhLnR5cGV8fGEuaHJlZnx8fmEudGFiSW5kZXgpfSxlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYhIWEuY2hlY2tlZHx8Im9wdGlvbiI9PT1iJiYhIWEuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLnBhcmVudE5vZGUmJmEucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LGEuc2VsZWN0ZWQ9PT0hMH0sZW1wdHk6ZnVuY3Rpb24oYSl7Zm9yKGE9YS5maXJzdENoaWxkO2E7YT1hLm5leHRTaWJsaW5nKWlmKGEubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGEpe3JldHVybiFkLnBzZXVkb3MuZW1wdHkoYSl9LGhlYWRlcjpmdW5jdGlvbihhKXtyZXR1cm4gWi50ZXN0KGEubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihhKXtyZXR1cm4gWS50ZXN0KGEubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1iJiYiYnV0dG9uIj09PWEudHlwZXx8ImJ1dHRvbiI9PT1ifSx0ZXh0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiJpbnB1dCI9PT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWEudHlwZSYmKG51bGw9PShiPWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHwidGV4dCI9PT1iLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpvYShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6b2EoZnVuY3Rpb24oYSxiKXtyZXR1cm5bYi0xXX0pLGVxOm9hKGZ1bmN0aW9uKGEsYixjKXtyZXR1cm5bMD5jP2MrYjpjXX0pLGV2ZW46b2EoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MDtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxvZGQ6b2EoZnVuY3Rpb24oYSxiKXtmb3IodmFyIGM9MTtiPmM7Yys9MilhLnB1c2goYyk7cmV0dXJuIGF9KSxsdDpvYShmdW5jdGlvbihhLGIsYyl7Zm9yKHZhciBkPTA+Yz9jK2I6YzstLWQ+PTA7KWEucHVzaChkKTtyZXR1cm4gYX0pLGd0Om9hKGZ1bmN0aW9uKGEsYixjKXtmb3IodmFyIGQ9MD5jP2MrYjpjOysrZDxiOylhLnB1c2goZCk7cmV0dXJuIGF9KX19LGQucHNldWRvcy5udGg9ZC5wc2V1ZG9zLmVxO2ZvcihiIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KWQucHNldWRvc1tiXT1tYShiKTtmb3IoYiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KWQucHNldWRvc1tiXT1uYShiKTtmdW5jdGlvbiBxYSgpe31xYS5wcm90b3R5cGU9ZC5maWx0ZXJzPWQucHNldWRvcyxkLnNldEZpbHRlcnM9bmV3IHFhLGc9Z2EudG9rZW5pemU9ZnVuY3Rpb24oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixrPXpbYSsiICJdO2lmKGspcmV0dXJuIGI/MDprLnNsaWNlKDApO2g9YSxpPVtdLGo9ZC5wcmVGaWx0ZXI7d2hpbGUoaCl7KCFjfHwoZT1TLmV4ZWMoaCkpKSYmKGUmJihoPWguc2xpY2UoZVswXS5sZW5ndGgpfHxoKSxpLnB1c2goZj1bXSkpLGM9ITEsKGU9VC5leGVjKGgpKSYmKGM9ZS5zaGlmdCgpLGYucHVzaCh7dmFsdWU6Yyx0eXBlOmVbMF0ucmVwbGFjZShSLCIgIil9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtmb3IoZyBpbiBkLmZpbHRlcikhKGU9WFtnXS5leGVjKGgpKXx8altnXSYmIShlPWpbZ10oZSkpfHwoYz1lLnNoaWZ0KCksZi5wdXNoKHt2YWx1ZTpjLHR5cGU6ZyxtYXRjaGVzOmV9KSxoPWguc2xpY2UoYy5sZW5ndGgpKTtpZighYylicmVha31yZXR1cm4gYj9oLmxlbmd0aDpoP2dhLmVycm9yKGEpOnooYSxpKS5zbGljZSgwKX07ZnVuY3Rpb24gcmEoYSl7Zm9yKHZhciBiPTAsYz1hLmxlbmd0aCxkPSIiO2M+YjtiKyspZCs9YVtiXS52YWx1ZTtyZXR1cm4gZH1mdW5jdGlvbiBzYShhLGIsYyl7dmFyIGQ9Yi5kaXIsZT1jJiYicGFyZW50Tm9kZSI9PT1kLGY9eCsrO3JldHVybiBiLmZpcnN0P2Z1bmN0aW9uKGIsYyxmKXt3aGlsZShiPWJbZF0paWYoMT09PWIubm9kZVR5cGV8fGUpcmV0dXJuIGEoYixjLGYpfTpmdW5jdGlvbihiLGMsZyl7dmFyIGgsaSxqPVt3LGZdO2lmKGcpe3doaWxlKGI9YltkXSlpZigoMT09PWIubm9kZVR5cGV8fGUpJiZhKGIsYyxnKSlyZXR1cm4hMH1lbHNlIHdoaWxlKGI9YltkXSlpZigxPT09Yi5ub2RlVHlwZXx8ZSl7aWYoaT1iW3VdfHwoYlt1XT17fSksKGg9aVtkXSkmJmhbMF09PT13JiZoWzFdPT09ZilyZXR1cm4galsyXT1oWzJdO2lmKGlbZF09aixqWzJdPWEoYixjLGcpKXJldHVybiEwfX19ZnVuY3Rpb24gdGEoYSl7cmV0dXJuIGEubGVuZ3RoPjE/ZnVuY3Rpb24oYixjLGQpe3ZhciBlPWEubGVuZ3RoO3doaWxlKGUtLSlpZighYVtlXShiLGMsZCkpcmV0dXJuITE7cmV0dXJuITB9OmFbMF19ZnVuY3Rpb24gdWEoYSxiLGMpe2Zvcih2YXIgZD0wLGU9Yi5sZW5ndGg7ZT5kO2QrKylnYShhLGJbZF0sYyk7cmV0dXJuIGN9ZnVuY3Rpb24gdmEoYSxiLGMsZCxlKXtmb3IodmFyIGYsZz1bXSxoPTAsaT1hLmxlbmd0aCxqPW51bGwhPWI7aT5oO2grKykoZj1hW2hdKSYmKCFjfHxjKGYsZCxlKSkmJihnLnB1c2goZiksaiYmYi5wdXNoKGgpKTtyZXR1cm4gZ31mdW5jdGlvbiB3YShhLGIsYyxkLGUsZil7cmV0dXJuIGQmJiFkW3VdJiYoZD13YShkKSksZSYmIWVbdV0mJihlPXdhKGUsZikpLGlhKGZ1bmN0aW9uKGYsZyxoLGkpe3ZhciBqLGssbCxtPVtdLG49W10sbz1nLmxlbmd0aCxwPWZ8fHVhKGJ8fCIqIixoLm5vZGVUeXBlP1toXTpoLFtdKSxxPSFhfHwhZiYmYj9wOnZhKHAsbSxhLGgsaSkscj1jP2V8fChmP2E6b3x8ZCk/W106ZzpxO2lmKGMmJmMocSxyLGgsaSksZCl7aj12YShyLG4pLGQoaixbXSxoLGkpLGs9ai5sZW5ndGg7d2hpbGUoay0tKShsPWpba10pJiYocltuW2tdXT0hKHFbbltrXV09bCkpfWlmKGYpe2lmKGV8fGEpe2lmKGUpe2o9W10saz1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJmoucHVzaChxW2tdPWwpO2UobnVsbCxyPVtdLGosaSl9az1yLmxlbmd0aDt3aGlsZShrLS0pKGw9cltrXSkmJihqPWU/SihmLGwpOm1ba10pPi0xJiYoZltqXT0hKGdbal09bCkpfX1lbHNlIHI9dmEocj09PWc/ci5zcGxpY2UobyxyLmxlbmd0aCk6ciksZT9lKG51bGwsZyxyLGkpOkguYXBwbHkoZyxyKX0pfWZ1bmN0aW9uIHhhKGEpe2Zvcih2YXIgYixjLGUsZj1hLmxlbmd0aCxnPWQucmVsYXRpdmVbYVswXS50eXBlXSxoPWd8fGQucmVsYXRpdmVbIiAiXSxpPWc/MTowLGs9c2EoZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1ifSxoLCEwKSxsPXNhKGZ1bmN0aW9uKGEpe3JldHVybiBKKGIsYSk+LTF9LGgsITApLG09W2Z1bmN0aW9uKGEsYyxkKXt2YXIgZT0hZyYmKGR8fGMhPT1qKXx8KChiPWMpLm5vZGVUeXBlP2soYSxjLGQpOmwoYSxjLGQpKTtyZXR1cm4gYj1udWxsLGV9XTtmPmk7aSsrKWlmKGM9ZC5yZWxhdGl2ZVthW2ldLnR5cGVdKW09W3NhKHRhKG0pLGMpXTtlbHNle2lmKGM9ZC5maWx0ZXJbYVtpXS50eXBlXS5hcHBseShudWxsLGFbaV0ubWF0Y2hlcyksY1t1XSl7Zm9yKGU9KytpO2Y+ZTtlKyspaWYoZC5yZWxhdGl2ZVthW2VdLnR5cGVdKWJyZWFrO3JldHVybiB3YShpPjEmJnRhKG0pLGk+MSYmcmEoYS5zbGljZSgwLGktMSkuY29uY2F0KHt2YWx1ZToiICI9PT1hW2ktMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShSLCIkMSIpLGMsZT5pJiZ4YShhLnNsaWNlKGksZSkpLGY+ZSYmeGEoYT1hLnNsaWNlKGUpKSxmPmUmJnJhKGEpKX1tLnB1c2goYyl9cmV0dXJuIHRhKG0pfWZ1bmN0aW9uIHlhKGEsYil7dmFyIGM9Yi5sZW5ndGg+MCxlPWEubGVuZ3RoPjAsZj1mdW5jdGlvbihmLGcsaCxpLGspe3ZhciBsLG0sbyxwPTAscT0iMCIscj1mJiZbXSxzPVtdLHQ9aix1PWZ8fGUmJmQuZmluZC5UQUcoIioiLGspLHY9dys9bnVsbD09dD8xOk1hdGgucmFuZG9tKCl8fC4xLHg9dS5sZW5ndGg7Zm9yKGsmJihqPWchPT1uJiZnKTtxIT09eCYmbnVsbCE9KGw9dVtxXSk7cSsrKXtpZihlJiZsKXttPTA7d2hpbGUobz1hW20rK10paWYobyhsLGcsaCkpe2kucHVzaChsKTticmVha31rJiYodz12KX1jJiYoKGw9IW8mJmwpJiZwLS0sZiYmci5wdXNoKGwpKX1pZihwKz1xLGMmJnEhPT1wKXttPTA7d2hpbGUobz1iW20rK10pbyhyLHMsZyxoKTtpZihmKXtpZihwPjApd2hpbGUocS0tKXJbcV18fHNbcV18fChzW3FdPUYuY2FsbChpKSk7cz12YShzKX1ILmFwcGx5KGkscyksayYmIWYmJnMubGVuZ3RoPjAmJnArYi5sZW5ndGg+MSYmZ2EudW5pcXVlU29ydChpKX1yZXR1cm4gayYmKHc9dixqPXQpLHJ9O3JldHVybiBjP2lhKGYpOmZ9cmV0dXJuIGg9Z2EuY29tcGlsZT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1bXSxmPUFbYSsiICJdO2lmKCFmKXtifHwoYj1nKGEpKSxjPWIubGVuZ3RoO3doaWxlKGMtLSlmPXhhKGJbY10pLGZbdV0/ZC5wdXNoKGYpOmUucHVzaChmKTtmPUEoYSx5YShlLGQpKSxmLnNlbGVjdG9yPWF9cmV0dXJuIGZ9LGk9Z2Euc2VsZWN0PWZ1bmN0aW9uKGEsYixlLGYpe3ZhciBpLGosayxsLG0sbj0iZnVuY3Rpb24iPT10eXBlb2YgYSYmYSxvPSFmJiZnKGE9bi5zZWxlY3Rvcnx8YSk7aWYoZT1lfHxbXSwxPT09by5sZW5ndGgpe2lmKGo9b1swXT1vWzBdLnNsaWNlKDApLGoubGVuZ3RoPjImJiJJRCI9PT0oaz1qWzBdKS50eXBlJiZjLmdldEJ5SWQmJjk9PT1iLm5vZGVUeXBlJiZwJiZkLnJlbGF0aXZlW2pbMV0udHlwZV0pe2lmKGI9KGQuZmluZC5JRChrLm1hdGNoZXNbMF0ucmVwbGFjZShjYSxkYSksYil8fFtdKVswXSwhYilyZXR1cm4gZTtuJiYoYj1iLnBhcmVudE5vZGUpLGE9YS5zbGljZShqLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPVgubmVlZHNDb250ZXh0LnRlc3QoYSk/MDpqLmxlbmd0aDt3aGlsZShpLS0pe2lmKGs9altpXSxkLnJlbGF0aXZlW2w9ay50eXBlXSlicmVhaztpZigobT1kLmZpbmRbbF0pJiYoZj1tKGsubWF0Y2hlc1swXS5yZXBsYWNlKGNhLGRhKSxhYS50ZXN0KGpbMF0udHlwZSkmJnBhKGIucGFyZW50Tm9kZSl8fGIpKSl7aWYoai5zcGxpY2UoaSwxKSxhPWYubGVuZ3RoJiZyYShqKSwhYSlyZXR1cm4gSC5hcHBseShlLGYpLGU7YnJlYWt9fX1yZXR1cm4obnx8aChhLG8pKShmLGIsIXAsZSxhYS50ZXN0KGEpJiZwYShiLnBhcmVudE5vZGUpfHxiKSxlfSxjLnNvcnRTdGFibGU9dS5zcGxpdCgiIikuc29ydChCKS5qb2luKCIiKT09PXUsYy5kZXRlY3REdXBsaWNhdGVzPSEhbCxtKCksYy5zb3J0RGV0YWNoZWQ9amEoZnVuY3Rpb24oYSl7cmV0dXJuIDEmYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLGphKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09YS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGthKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGM/dm9pZCAwOmEuZ2V0QXR0cmlidXRlKGIsInR5cGUiPT09Yi50b0xvd2VyQ2FzZSgpPzE6Mil9KSxjLmF0dHJpYnV0ZXMmJmphKGZ1bmN0aW9uKGEpe3JldHVybiBhLmlubmVySFRNTD0iPGlucHV0Lz4iLGEuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1hLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGthKCJ2YWx1ZSIsZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjfHwiaW5wdXQiIT09YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpP3ZvaWQgMDphLmRlZmF1bHRWYWx1ZX0pLGphKGZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxrYShLLGZ1bmN0aW9uKGEsYixjKXt2YXIgZDtyZXR1cm4gYz92b2lkIDA6YVtiXT09PSEwP2IudG9Mb3dlckNhc2UoKTooZD1hLmdldEF0dHJpYnV0ZU5vZGUoYikpJiZkLnNwZWNpZmllZD9kLnZhbHVlOm51bGx9KSxnYX0oYSk7bi5maW5kPXQsbi5leHByPXQuc2VsZWN0b3JzLG4uZXhwclsiOiJdPW4uZXhwci5wc2V1ZG9zLG4udW5pcXVlPXQudW5pcXVlU29ydCxuLnRleHQ9dC5nZXRUZXh0LG4uaXNYTUxEb2M9dC5pc1hNTCxuLmNvbnRhaW5zPXQuY29udGFpbnM7dmFyIHU9bi5leHByLm1hdGNoLm5lZWRzQ29udGV4dCx2PS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8sdz0vXi5bXjojXFtcLixdKiQvO2Z1bmN0aW9uIHgoYSxiLGMpe2lmKG4uaXNGdW5jdGlvbihiKSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4hIWIuY2FsbChhLGQsYSkhPT1jfSk7aWYoYi5ub2RlVHlwZSlyZXR1cm4gbi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1iIT09Y30pO2lmKCJzdHJpbmciPT10eXBlb2YgYil7aWYody50ZXN0KGIpKXJldHVybiBuLmZpbHRlcihiLGEsYyk7Yj1uLmZpbHRlcihiLGEpfXJldHVybiBuLmdyZXAoYSxmdW5jdGlvbihhKXtyZXR1cm4gZy5jYWxsKGIsYSk+PTAhPT1jfSl9bi5maWx0ZXI9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWJbMF07cmV0dXJuIGMmJihhPSI6bm90KCIrYSsiKSIpLDE9PT1iLmxlbmd0aCYmMT09PWQubm9kZVR5cGU/bi5maW5kLm1hdGNoZXNTZWxlY3RvcihkLGEpP1tkXTpbXTpuLmZpbmQubWF0Y2hlcyhhLG4uZ3JlcChiLGZ1bmN0aW9uKGEpe3JldHVybiAxPT09YS5ub2RlVHlwZX0pKX0sbi5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz10aGlzLmxlbmd0aCxkPVtdLGU9dGhpcztpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuIHRoaXMucHVzaFN0YWNrKG4oYSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGI9MDtjPmI7YisrKWlmKG4uY29udGFpbnMoZVtiXSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IoYj0wO2M+YjtiKyspbi5maW5kKGEsZVtiXSxkKTtyZXR1cm4gZD10aGlzLnB1c2hTdGFjayhjPjE/bi51bmlxdWUoZCk6ZCksZC5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2E6YSxkfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgodGhpcyxhfHxbXSwhMCkpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIXgodGhpcywic3RyaW5nIj09dHlwZW9mIGEmJnUudGVzdChhKT9uKGEpOmF8fFtdLCExKS5sZW5ndGh9fSk7dmFyIHksej0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEE9bi5mbi5pbml0PWZ1bmN0aW9uKGEsYil7dmFyIGMsZDtpZighYSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGEpe2lmKGM9IjwiPT09YVswXSYmIj4iPT09YVthLmxlbmd0aC0xXSYmYS5sZW5ndGg+PTM/W251bGwsYSxudWxsXTp6LmV4ZWMoYSksIWN8fCFjWzFdJiZiKXJldHVybiFifHxiLmpxdWVyeT8oYnx8eSkuZmluZChhKTp0aGlzLmNvbnN0cnVjdG9yKGIpLmZpbmQoYSk7aWYoY1sxXSl7aWYoYj1iIGluc3RhbmNlb2Ygbj9iWzBdOmIsbi5tZXJnZSh0aGlzLG4ucGFyc2VIVE1MKGNbMV0sYiYmYi5ub2RlVHlwZT9iLm93bmVyRG9jdW1lbnR8fGI6bCwhMCkpLHYudGVzdChjWzFdKSYmbi5pc1BsYWluT2JqZWN0KGIpKWZvcihjIGluIGIpbi5pc0Z1bmN0aW9uKHRoaXNbY10pP3RoaXNbY10oYltjXSk6dGhpcy5hdHRyKGMsYltjXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGQ9bC5nZXRFbGVtZW50QnlJZChjWzJdKSxkJiZkLnBhcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09ZCksdGhpcy5jb250ZXh0PWwsdGhpcy5zZWxlY3Rvcj1hLHRoaXN9cmV0dXJuIGEubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MSx0aGlzKTpuLmlzRnVuY3Rpb24oYSk/InVuZGVmaW5lZCIhPXR5cGVvZiB5LnJlYWR5P3kucmVhZHkoYSk6YShuKToodm9pZCAwIT09YS5zZWxlY3RvciYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KSxuLm1ha2VBcnJheShhLHRoaXMpKX07QS5wcm90b3R5cGU9bi5mbix5PW4obCk7dmFyIEI9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sQz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtuLmV4dGVuZCh7ZGlyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPXZvaWQgMCE9PWM7d2hpbGUoKGE9YVtiXSkmJjkhPT1hLm5vZGVUeXBlKWlmKDE9PT1hLm5vZGVUeXBlKXtpZihlJiZuKGEpLmlzKGMpKWJyZWFrO2QucHVzaChhKX1yZXR1cm4gZH0sc2libGluZzpmdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXTthO2E9YS5uZXh0U2libGluZykxPT09YS5ub2RlVHlwZSYmYSE9PWImJmMucHVzaChhKTtyZXR1cm4gY319KSxuLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGEpe3ZhciBiPW4oYSx0aGlzKSxjPWIubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgYT0wO2M+YTthKyspaWYobi5jb250YWlucyh0aGlzLGJbYV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD0wLGU9dGhpcy5sZW5ndGgsZj1bXSxnPXUudGVzdChhKXx8InN0cmluZyIhPXR5cGVvZiBhP24oYSxifHx0aGlzLmNvbnRleHQpOjA7ZT5kO2QrKylmb3IoYz10aGlzW2RdO2MmJmMhPT1iO2M9Yy5wYXJlbnROb2RlKWlmKGMubm9kZVR5cGU8MTEmJihnP2cuaW5kZXgoYyk+LTE6MT09PWMubm9kZVR5cGUmJm4uZmluZC5tYXRjaGVzU2VsZWN0b3IoYyxhKSkpe2YucHVzaChjKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soZi5sZW5ndGg+MT9uLnVuaXF1ZShmKTpmKX0saW5kZXg6ZnVuY3Rpb24oYSl7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP2cuY2FsbChuKGEpLHRoaXNbMF0pOmcuY2FsbCh0aGlzLGEuanF1ZXJ5P2FbMF06YSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobi51bmlxdWUobi5tZXJnZSh0aGlzLmdldCgpLG4oYSxiKSkpKX0sYWRkQmFjazpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09YT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihhKSl9fSk7ZnVuY3Rpb24gRChhLGIpe3doaWxlKChhPWFbYl0pJiYxIT09YS5ub2RlVHlwZSk7cmV0dXJuIGF9bi5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiYxMSE9PWIubm9kZVR5cGU/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBuLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBEKGEsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIEQoYSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIG4uZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmcoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBuLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuY29udGVudERvY3VtZW50fHxuLm1lcmdlKFtdLGEuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihhLGIpe24uZm5bYV09ZnVuY3Rpb24oYyxkKXt2YXIgZT1uLm1hcCh0aGlzLGIsYyk7cmV0dXJuIlVudGlsIiE9PWEuc2xpY2UoLTUpJiYoZD1jKSxkJiYic3RyaW5nIj09dHlwZW9mIGQmJihlPW4uZmlsdGVyKGQsZSkpLHRoaXMubGVuZ3RoPjEmJihDW2FdfHxuLnVuaXF1ZShlKSxCLnRlc3QoYSkmJmUucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhlKX19KTt2YXIgRT0vXFMrL2csRj17fTtmdW5jdGlvbiBHKGEpe3ZhciBiPUZbYV09e307cmV0dXJuIG4uZWFjaChhLm1hdGNoKEUpfHxbXSxmdW5jdGlvbihhLGMpe2JbY109ITB9KSxifW4uQ2FsbGJhY2tzPWZ1bmN0aW9uKGEpe2E9InN0cmluZyI9PXR5cGVvZiBhP0ZbYV18fEcoYSk6bi5leHRlbmQoe30sYSk7dmFyIGIsYyxkLGUsZixnLGg9W10saT0hYS5vbmNlJiZbXSxqPWZ1bmN0aW9uKGwpe2ZvcihiPWEubWVtb3J5JiZsLGM9ITAsZz1lfHwwLGU9MCxmPWgubGVuZ3RoLGQ9ITA7aCYmZj5nO2crKylpZihoW2ddLmFwcGx5KGxbMF0sbFsxXSk9PT0hMSYmYS5zdG9wT25GYWxzZSl7Yj0hMTticmVha31kPSExLGgmJihpP2kubGVuZ3RoJiZqKGkuc2hpZnQoKSk6Yj9oPVtdOmsuZGlzYWJsZSgpKX0saz17YWRkOmZ1bmN0aW9uKCl7aWYoaCl7dmFyIGM9aC5sZW5ndGg7IWZ1bmN0aW9uIGcoYil7bi5lYWNoKGIsZnVuY3Rpb24oYixjKXt2YXIgZD1uLnR5cGUoYyk7ImZ1bmN0aW9uIj09PWQ/YS51bmlxdWUmJmsuaGFzKGMpfHxoLnB1c2goYyk6YyYmYy5sZW5ndGgmJiJzdHJpbmciIT09ZCYmZyhjKX0pfShhcmd1bWVudHMpLGQ/Zj1oLmxlbmd0aDpiJiYoZT1jLGooYikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gaCYmbi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihhLGIpe3ZhciBjO3doaWxlKChjPW4uaW5BcnJheShiLGgsYykpPi0xKWguc3BsaWNlKGMsMSksZCYmKGY+PWMmJmYtLSxnPj1jJiZnLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGEpe3JldHVybiBhP24uaW5BcnJheShhLGgpPi0xOiEoIWh8fCFoLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGg9W10sZj0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gaD1pPWI9dm9pZCAwLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWh9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gaT12b2lkIDAsYnx8ay5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWl9LGZpcmVXaXRoOmZ1bmN0aW9uKGEsYil7cmV0dXJuIWh8fGMmJiFpfHwoYj1ifHxbXSxiPVthLGIuc2xpY2U/Yi5zbGljZSgpOmJdLGQ/aS5wdXNoKGIpOmooYikpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWN9fTtyZXR1cm4ga30sbi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPVtbInJlc29sdmUiLCJkb25lIixuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLG4uQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLG4uQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLGM9InBlbmRpbmciLGQ9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGN9LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBlLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBhPWFyZ3VtZW50cztyZXR1cm4gbi5EZWZlcnJlZChmdW5jdGlvbihjKXtuLmVhY2goYixmdW5jdGlvbihiLGYpe3ZhciBnPW4uaXNGdW5jdGlvbihhW2JdKSYmYVtiXTtlW2ZbMV1dKGZ1bmN0aW9uKCl7dmFyIGE9ZyYmZy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YSYmbi5pc0Z1bmN0aW9uKGEucHJvbWlzZSk/YS5wcm9taXNlKCkuZG9uZShjLnJlc29sdmUpLmZhaWwoYy5yZWplY3QpLnByb2dyZXNzKGMubm90aWZ5KTpjW2ZbMF0rIldpdGgiXSh0aGlzPT09ZD9jLnByb21pc2UoKTp0aGlzLGc/W2FdOmFyZ3VtZW50cyl9KX0pLGE9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9YT9uLmV4dGVuZChhLGQpOmR9fSxlPXt9O3JldHVybiBkLnBpcGU9ZC50aGVuLG4uZWFjaChiLGZ1bmN0aW9uKGEsZil7dmFyIGc9ZlsyXSxoPWZbM107ZFtmWzFdXT1nLmFkZCxoJiZnLmFkZChmdW5jdGlvbigpe2M9aH0sYlsxXmFdWzJdLmRpc2FibGUsYlsyXVsyXS5sb2NrKSxlW2ZbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIGVbZlswXSsiV2l0aCJdKHRoaXM9PT1lP2Q6dGhpcyxhcmd1bWVudHMpLHRoaXN9LGVbZlswXSsiV2l0aCJdPWcuZmlyZVdpdGh9KSxkLnByb21pc2UoZSksYSYmYS5jYWxsKGUsZSksZX0sd2hlbjpmdW5jdGlvbihhKXt2YXIgYj0wLGM9ZC5jYWxsKGFyZ3VtZW50cyksZT1jLmxlbmd0aCxmPTEhPT1lfHxhJiZuLmlzRnVuY3Rpb24oYS5wcm9taXNlKT9lOjAsZz0xPT09Zj9hOm4uRGVmZXJyZWQoKSxoPWZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZnVuY3Rpb24oZSl7YlthXT10aGlzLGNbYV09YXJndW1lbnRzLmxlbmd0aD4xP2QuY2FsbChhcmd1bWVudHMpOmUsYz09PWk/Zy5ub3RpZnlXaXRoKGIsYyk6LS1mfHxnLnJlc29sdmVXaXRoKGIsYyl9fSxpLGosaztpZihlPjEpZm9yKGk9bmV3IEFycmF5KGUpLGo9bmV3IEFycmF5KGUpLGs9bmV3IEFycmF5KGUpO2U+YjtiKyspY1tiXSYmbi5pc0Z1bmN0aW9uKGNbYl0ucHJvbWlzZSk/Y1tiXS5wcm9taXNlKCkuZG9uZShoKGIsayxjKSkuZmFpbChnLnJlamVjdCkucHJvZ3Jlc3MoaChiLGosaSkpOi0tZjtyZXR1cm4gZnx8Zy5yZXNvbHZlV2l0aChrLGMpLGcucHJvbWlzZSgpfX0pO3ZhciBIO24uZm4ucmVhZHk9ZnVuY3Rpb24oYSl7cmV0dXJuIG4ucmVhZHkucHJvbWlzZSgpLmRvbmUoYSksdGhpc30sbi5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/bi5yZWFkeVdhaXQrKzpuLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7KGE9PT0hMD8tLW4ucmVhZHlXYWl0Om4uaXNSZWFkeSl8fChuLmlzUmVhZHk9ITAsYSE9PSEwJiYtLW4ucmVhZHlXYWl0PjB8fChILnJlc29sdmVXaXRoKGwsW25dKSxuLmZuLnRyaWdnZXJIYW5kbGVyJiYobihsKS50cmlnZ2VySGFuZGxlcigicmVhZHkiKSxuKGwpLm9mZigicmVhZHkiKSkpKX19KTtmdW5jdGlvbiBJKCl7bC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixJLCExKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEksITEpLG4ucmVhZHkoKX1uLnJlYWR5LnByb21pc2U9ZnVuY3Rpb24oYil7cmV0dXJuIEh8fChIPW4uRGVmZXJyZWQoKSwiY29tcGxldGUiPT09bC5yZWFkeVN0YXRlP3NldFRpbWVvdXQobi5yZWFkeSk6KGwuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsSSwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixJLCExKSkpLEgucHJvbWlzZShiKX0sbi5yZWFkeS5wcm9taXNlKCk7dmFyIEo9bi5hY2Nlc3M9ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIGg9MCxpPWEubGVuZ3RoLGo9bnVsbD09YztpZigib2JqZWN0Ij09PW4udHlwZShjKSl7ZT0hMDtmb3IoaCBpbiBjKW4uYWNjZXNzKGEsYixoLGNbaF0sITAsZixnKX1lbHNlIGlmKHZvaWQgMCE9PWQmJihlPSEwLG4uaXNGdW5jdGlvbihkKXx8KGc9ITApLGomJihnPyhiLmNhbGwoYSxkKSxiPW51bGwpOihqPWIsYj1mdW5jdGlvbihhLGIsYyl7cmV0dXJuIGouY2FsbChuKGEpLGMpfSkpLGIpKWZvcig7aT5oO2grKyliKGFbaF0sYyxnP2Q6ZC5jYWxsKGFbaF0saCxiKGFbaF0sYykpKTtyZXR1cm4gZT9hOmo/Yi5jYWxsKGEpOmk/YihhWzBdLGMpOmZ9O24uYWNjZXB0RGF0YT1mdW5jdGlvbihhKXtyZXR1cm4gMT09PWEubm9kZVR5cGV8fDk9PT1hLm5vZGVUeXBlfHwhK2Eubm9kZVR5cGV9O2Z1bmN0aW9uIEsoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89bi5leHBhbmRvK0sudWlkKyt9Sy51aWQ9MSxLLmFjY2VwdHM9bi5hY2NlcHREYXRhLEsucHJvdG90eXBlPXtrZXk6ZnVuY3Rpb24oYSl7aWYoIUsuYWNjZXB0cyhhKSlyZXR1cm4gMDt2YXIgYj17fSxjPWFbdGhpcy5leHBhbmRvXTtpZighYyl7Yz1LLnVpZCsrO3RyeXtiW3RoaXMuZXhwYW5kb109e3ZhbHVlOmN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGEsYil9Y2F0Y2goZCl7Ylt0aGlzLmV4cGFuZG9dPWMsbi5leHRlbmQoYSxiKX19cmV0dXJuIHRoaXMuY2FjaGVbY118fCh0aGlzLmNhY2hlW2NdPXt9KSxjfSxzZXQ6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGU9dGhpcy5rZXkoYSksZj10aGlzLmNhY2hlW2VdO2lmKCJzdHJpbmciPT10eXBlb2YgYilmW2JdPWM7ZWxzZSBpZihuLmlzRW1wdHlPYmplY3QoZikpbi5leHRlbmQodGhpcy5jYWNoZVtlXSxiKTtlbHNlIGZvcihkIGluIGIpZltkXT1iW2RdO3JldHVybiBmfSxnZXQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmNhY2hlW3RoaXMua2V5KGEpXTtyZXR1cm4gdm9pZCAwPT09Yj9jOmNbYl19LGFjY2VzczpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIHZvaWQgMD09PWJ8fGImJiJzdHJpbmciPT10eXBlb2YgYiYmdm9pZCAwPT09Yz8oZD10aGlzLmdldChhLGIpLHZvaWQgMCE9PWQ/ZDp0aGlzLmdldChhLG4uY2FtZWxDYXNlKGIpKSk6KHRoaXMuc2V0KGEsYixjKSx2b2lkIDAhPT1jP2M6Yil9LHJlbW92ZTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXMua2V5KGEpLGc9dGhpcy5jYWNoZVtmXTtpZih2b2lkIDA9PT1iKXRoaXMuY2FjaGVbZl09e307ZWxzZXtuLmlzQXJyYXkoYik/ZD1iLmNvbmNhdChiLm1hcChuLmNhbWVsQ2FzZSkpOihlPW4uY2FtZWxDYXNlKGIpLGIgaW4gZz9kPVtiLGVdOihkPWUsZD1kIGluIGc/W2RdOmQubWF0Y2goRSl8fFtdKSksYz1kLmxlbmd0aDt3aGlsZShjLS0pZGVsZXRlIGdbZFtjXV19fSxoYXNEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiFuLmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oYSl7YVt0aGlzLmV4cGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVthW3RoaXMuZXhwYW5kb11dfX07dmFyIEw9bmV3IEssTT1uZXcgSyxOPS9eKD86XHtbXHdcV10qXH18XFtbXHdcV10qXF0pJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIFAoYSxiLGMpe3ZhciBkO2lmKHZvaWQgMD09PWMmJjE9PT1hLm5vZGVUeXBlKWlmKGQ9ImRhdGEtIitiLnJlcGxhY2UoTywiLSQxIikudG9Mb3dlckNhc2UoKSxjPWEuZ2V0QXR0cmlidXRlKGQpLCJzdHJpbmciPT10eXBlb2YgYyl7dHJ5e2M9InRydWUiPT09Yz8hMDoiZmFsc2UiPT09Yz8hMToibnVsbCI9PT1jP251bGw6K2MrIiI9PT1jPytjOk4udGVzdChjKT9uLnBhcnNlSlNPTihjKTpjfWNhdGNoKGUpe31NLnNldChhLGIsYyl9ZWxzZSBjPXZvaWQgMDtyZXR1cm4gY31uLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihhKXtyZXR1cm4gTS5oYXNEYXRhKGEpfHxMLmhhc0RhdGEoYSl9LGRhdGE6ZnVuY3Rpb24oYSxiLGMpewpyZXR1cm4gTS5hY2Nlc3MoYSxiLGMpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7TS5yZW1vdmUoYSxiKX0sX2RhdGE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBMLmFjY2VzcyhhLGIsYyl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGEsYil7TC5yZW1vdmUoYSxiKX19KSxuLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPXRoaXNbMF0sZz1mJiZmLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09YSl7aWYodGhpcy5sZW5ndGgmJihlPU0uZ2V0KGYpLDE9PT1mLm5vZGVUeXBlJiYhTC5nZXQoZiwiaGFzRGF0YUF0dHJzIikpKXtjPWcubGVuZ3RoO3doaWxlKGMtLSlnW2NdJiYoZD1nW2NdLm5hbWUsMD09PWQuaW5kZXhPZigiZGF0YS0iKSYmKGQ9bi5jYW1lbENhc2UoZC5zbGljZSg1KSksUChmLGQsZVtkXSkpKTtMLnNldChmLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gZX1yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7TS5zZXQodGhpcyxhKX0pOkoodGhpcyxmdW5jdGlvbihiKXt2YXIgYyxkPW4uY2FtZWxDYXNlKGEpO2lmKGYmJnZvaWQgMD09PWIpe2lmKGM9TS5nZXQoZixhKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9TS5nZXQoZixkKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKGM9UChmLGQsdm9pZCAwKSx2b2lkIDAhPT1jKXJldHVybiBjfWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGM9TS5nZXQodGhpcyxkKTtNLnNldCh0aGlzLGQsYiksLTEhPT1hLmluZGV4T2YoIi0iKSYmdm9pZCAwIT09YyYmTS5zZXQodGhpcyxhLGIpfSl9LG51bGwsYixhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe00ucmVtb3ZlKHRoaXMsYSl9KX19KSxuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO3JldHVybiBhPyhiPShifHwiZngiKSsicXVldWUiLGQ9TC5nZXQoYSxiKSxjJiYoIWR8fG4uaXNBcnJheShjKT9kPUwuYWNjZXNzKGEsYixuLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKSxkfHxbXSk6dm9pZCAwfSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPW4ucXVldWUoYSxiKSxkPWMubGVuZ3RoLGU9Yy5zaGlmdCgpLGY9bi5fcXVldWVIb29rcyhhLGIpLGc9ZnVuY3Rpb24oKXtuLmRlcXVldWUoYSxiKX07ImlucHJvZ3Jlc3MiPT09ZSYmKGU9Yy5zaGlmdCgpLGQtLSksZSYmKCJmeCI9PT1iJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgZi5zdG9wLGUuY2FsbChhLGcsZikpLCFkJiZmJiZmLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iKyJxdWV1ZUhvb2tzIjtyZXR1cm4gTC5nZXQoYSxjKXx8TC5hY2Nlc3MoYSxjLHtlbXB0eTpuLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtMLnJlbW92ZShhLFtiKyJxdWV1ZSIsY10pfSl9KX19KSxuLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oYSxiKXt2YXIgYz0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPSJmeCIsYy0tKSxhcmd1bWVudHMubGVuZ3RoPGM/bi5xdWV1ZSh0aGlzWzBdLGEpOnZvaWQgMD09PWI/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYz1uLnF1ZXVlKHRoaXMsYSxiKTtuLl9xdWV1ZUhvb2tzKHRoaXMsYSksImZ4Ij09PWEmJiJpbnByb2dyZXNzIiE9PWNbMF0mJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGRlcXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe24uZGVxdWV1ZSh0aGlzLGEpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucXVldWUoYXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkPTEsZT1uLkRlZmVycmVkKCksZj10aGlzLGc9dGhpcy5sZW5ndGgsaD1mdW5jdGlvbigpey0tZHx8ZS5yZXNvbHZlV2l0aChmLFtmXSl9OyJzdHJpbmciIT10eXBlb2YgYSYmKGI9YSxhPXZvaWQgMCksYT1hfHwiZngiO3doaWxlKGctLSljPUwuZ2V0KGZbZ10sYSsicXVldWVIb29rcyIpLGMmJmMuZW1wdHkmJihkKyssYy5lbXB0eS5hZGQoaCkpO3JldHVybiBoKCksZS5wcm9taXNlKGIpfX0pO3ZhciBRPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLFI9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxTPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9Ynx8YSwibm9uZSI9PT1uLmNzcyhhLCJkaXNwbGF5Iil8fCFuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKX0sVD0vXig/OmNoZWNrYm94fHJhZGlvKSQvaTshZnVuY3Rpb24oKXt2YXIgYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxiPWEuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJkaXYiKSksYz1sLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7Yy5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLGMuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLGMuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGIuYXBwZW5kQ2hpbGQoYyksay5jaGVja0Nsb25lPWIuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGIuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixrLm5vQ2xvbmVDaGVja2VkPSEhYi5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIFU9InVuZGVmaW5lZCI7ay5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImluIGE7dmFyIFY9L15rZXkvLFc9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51KXxjbGljay8sWD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWT0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFooKXtyZXR1cm4hMH1mdW5jdGlvbiAkKCl7cmV0dXJuITF9ZnVuY3Rpb24gXygpe3RyeXtyZXR1cm4gbC5hY3RpdmVFbGVtZW50fWNhdGNoKGEpe319bi5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciBmLGcsaCxpLGosayxsLG0sbyxwLHEscj1MLmdldChhKTtpZihyKXtjLmhhbmRsZXImJihmPWMsYz1mLmhhbmRsZXIsZT1mLnNlbGVjdG9yKSxjLmd1aWR8fChjLmd1aWQ9bi5ndWlkKyspLChpPXIuZXZlbnRzKXx8KGk9ci5ldmVudHM9e30pLChnPXIuaGFuZGxlKXx8KGc9ci5oYW5kbGU9ZnVuY3Rpb24oYil7cmV0dXJuIHR5cGVvZiBuIT09VSYmbi5ldmVudC50cmlnZ2VyZWQhPT1iLnR5cGU/bi5ldmVudC5kaXNwYXRjaC5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSksYj0oYnx8IiIpLm1hdGNoKEUpfHxbIiJdLGo9Yi5sZW5ndGg7d2hpbGUoai0tKWg9WS5leGVjKGJbal0pfHxbXSxvPXE9aFsxXSxwPShoWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksbyYmKGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxvPShlP2wuZGVsZWdhdGVUeXBlOmwuYmluZFR5cGUpfHxvLGw9bi5ldmVudC5zcGVjaWFsW29dfHx7fSxrPW4uZXh0ZW5kKHt0eXBlOm8sb3JpZ1R5cGU6cSxkYXRhOmQsaGFuZGxlcjpjLGd1aWQ6Yy5ndWlkLHNlbGVjdG9yOmUsbmVlZHNDb250ZXh0OmUmJm4uZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChlKSxuYW1lc3BhY2U6cC5qb2luKCIuIil9LGYpLChtPWlbb10pfHwobT1pW29dPVtdLG0uZGVsZWdhdGVDb3VudD0wLGwuc2V0dXAmJmwuc2V0dXAuY2FsbChhLGQscCxnKSE9PSExfHxhLmFkZEV2ZW50TGlzdGVuZXImJmEuYWRkRXZlbnRMaXN0ZW5lcihvLGcsITEpKSxsLmFkZCYmKGwuYWRkLmNhbGwoYSxrKSxrLmhhbmRsZXIuZ3VpZHx8KGsuaGFuZGxlci5ndWlkPWMuZ3VpZCkpLGU/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxrKTptLnB1c2goayksbi5ldmVudC5nbG9iYWxbb109ITApfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbSxvLHAscSxyPUwuaGFzRGF0YShhKSYmTC5nZXQoYSk7aWYociYmKGk9ci5ldmVudHMpKXtiPShifHwiIikubWF0Y2goRSl8fFsiIl0saj1iLmxlbmd0aDt3aGlsZShqLS0paWYoaD1ZLmV4ZWMoYltqXSl8fFtdLG89cT1oWzFdLHA9KGhbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxvKXtsPW4uZXZlbnQuc3BlY2lhbFtvXXx8e30sbz0oZD9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8byxtPWlbb118fFtdLGg9aFsyXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIrcC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxnPWY9bS5sZW5ndGg7d2hpbGUoZi0tKWs9bVtmXSwhZSYmcSE9PWsub3JpZ1R5cGV8fGMmJmMuZ3VpZCE9PWsuZ3VpZHx8aCYmIWgudGVzdChrLm5hbWVzcGFjZSl8fGQmJmQhPT1rLnNlbGVjdG9yJiYoIioqIiE9PWR8fCFrLnNlbGVjdG9yKXx8KG0uc3BsaWNlKGYsMSksay5zZWxlY3RvciYmbS5kZWxlZ2F0ZUNvdW50LS0sbC5yZW1vdmUmJmwucmVtb3ZlLmNhbGwoYSxrKSk7ZyYmIW0ubGVuZ3RoJiYobC50ZWFyZG93biYmbC50ZWFyZG93bi5jYWxsKGEscCxyLmhhbmRsZSkhPT0hMXx8bi5yZW1vdmVFdmVudChhLG8sci5oYW5kbGUpLGRlbGV0ZSBpW29dKX1lbHNlIGZvcihvIGluIGkpbi5ldmVudC5yZW1vdmUoYSxvK2Jbal0sYyxkLCEwKTtuLmlzRW1wdHlPYmplY3QoaSkmJihkZWxldGUgci5oYW5kbGUsTC5yZW1vdmUoYSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbihiLGMsZCxlKXt2YXIgZixnLGgsaSxrLG0sbyxwPVtkfHxsXSxxPWouY2FsbChiLCJ0eXBlIik/Yi50eXBlOmIscj1qLmNhbGwoYiwibmFtZXNwYWNlIik/Yi5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihnPWg9ZD1kfHxsLDMhPT1kLm5vZGVUeXBlJiY4IT09ZC5ub2RlVHlwZSYmIVgudGVzdChxK24uZXZlbnQudHJpZ2dlcmVkKSYmKHEuaW5kZXhPZigiLiIpPj0wJiYocj1xLnNwbGl0KCIuIikscT1yLnNoaWZ0KCksci5zb3J0KCkpLGs9cS5pbmRleE9mKCI6Iik8MCYmIm9uIitxLGI9YltuLmV4cGFuZG9dP2I6bmV3IG4uRXZlbnQocSwib2JqZWN0Ij09dHlwZW9mIGImJmIpLGIuaXNUcmlnZ2VyPWU/MjozLGIubmFtZXNwYWNlPXIuam9pbigiLiIpLGIubmFtZXNwYWNlX3JlPWIubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK3Iuam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxiLnJlc3VsdD12b2lkIDAsYi50YXJnZXR8fChiLnRhcmdldD1kKSxjPW51bGw9PWM/W2JdOm4ubWFrZUFycmF5KGMsW2JdKSxvPW4uZXZlbnQuc3BlY2lhbFtxXXx8e30sZXx8IW8udHJpZ2dlcnx8by50cmlnZ2VyLmFwcGx5KGQsYykhPT0hMSkpe2lmKCFlJiYhby5ub0J1YmJsZSYmIW4uaXNXaW5kb3coZCkpe2ZvcihpPW8uZGVsZWdhdGVUeXBlfHxxLFgudGVzdChpK3EpfHwoZz1nLnBhcmVudE5vZGUpO2c7Zz1nLnBhcmVudE5vZGUpcC5wdXNoKGcpLGg9ZztoPT09KGQub3duZXJEb2N1bWVudHx8bCkmJnAucHVzaChoLmRlZmF1bHRWaWV3fHxoLnBhcmVudFdpbmRvd3x8YSl9Zj0wO3doaWxlKChnPXBbZisrXSkmJiFiLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpYi50eXBlPWY+MT9pOm8uYmluZFR5cGV8fHEsbT0oTC5nZXQoZywiZXZlbnRzIil8fHt9KVtiLnR5cGVdJiZMLmdldChnLCJoYW5kbGUiKSxtJiZtLmFwcGx5KGcsYyksbT1rJiZnW2tdLG0mJm0uYXBwbHkmJm4uYWNjZXB0RGF0YShnKSYmKGIucmVzdWx0PW0uYXBwbHkoZyxjKSxiLnJlc3VsdD09PSExJiZiLnByZXZlbnREZWZhdWx0KCkpO3JldHVybiBiLnR5cGU9cSxlfHxiLmlzRGVmYXVsdFByZXZlbnRlZCgpfHxvLl9kZWZhdWx0JiZvLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksYykhPT0hMXx8IW4uYWNjZXB0RGF0YShkKXx8ayYmbi5pc0Z1bmN0aW9uKGRbcV0pJiYhbi5pc1dpbmRvdyhkKSYmKGg9ZFtrXSxoJiYoZFtrXT1udWxsKSxuLmV2ZW50LnRyaWdnZXJlZD1xLGRbcV0oKSxuLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsaCYmKGRba109aCkpLGIucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oYSl7YT1uLmV2ZW50LmZpeChhKTt2YXIgYixjLGUsZixnLGg9W10saT1kLmNhbGwoYXJndW1lbnRzKSxqPShMLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2EudHlwZV18fFtdLGs9bi5ldmVudC5zcGVjaWFsW2EudHlwZV18fHt9O2lmKGlbMF09YSxhLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWsucHJlRGlzcGF0Y2h8fGsucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGEpIT09ITEpe2g9bi5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsYSxqKSxiPTA7d2hpbGUoKGY9aFtiKytdKSYmIWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7YS5jdXJyZW50VGFyZ2V0PWYuZWxlbSxjPTA7d2hpbGUoKGc9Zi5oYW5kbGVyc1tjKytdKSYmIWEuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWEubmFtZXNwYWNlX3JlfHxhLm5hbWVzcGFjZV9yZS50ZXN0KGcubmFtZXNwYWNlKSkmJihhLmhhbmRsZU9iaj1nLGEuZGF0YT1nLmRhdGEsZT0oKG4uZXZlbnQuc3BlY2lhbFtnLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8Zy5oYW5kbGVyKS5hcHBseShmLmVsZW0saSksdm9pZCAwIT09ZSYmKGEucmVzdWx0PWUpPT09ITEmJihhLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBrLnBvc3REaXNwYXRjaCYmay5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGEpLGEucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZixnPVtdLGg9Yi5kZWxlZ2F0ZUNvdW50LGk9YS50YXJnZXQ7aWYoaCYmaS5ub2RlVHlwZSYmKCFhLmJ1dHRvbnx8ImNsaWNrIiE9PWEudHlwZSkpZm9yKDtpIT09dGhpcztpPWkucGFyZW50Tm9kZXx8dGhpcylpZihpLmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1hLnR5cGUpe2ZvcihkPVtdLGM9MDtoPmM7YysrKWY9YltjXSxlPWYuc2VsZWN0b3IrIiAiLHZvaWQgMD09PWRbZV0mJihkW2VdPWYubmVlZHNDb250ZXh0P24oZSx0aGlzKS5pbmRleChpKT49MDpuLmZpbmQoZSx0aGlzLG51bGwsW2ldKS5sZW5ndGgpLGRbZV0mJmQucHVzaChmKTtkLmxlbmd0aCYmZy5wdXNoKHtlbGVtOmksaGFuZGxlcnM6ZH0pfXJldHVybiBoPGIubGVuZ3RoJiZnLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczpiLnNsaWNlKGgpfSksZ30scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG51bGw9PWEud2hpY2gmJihhLndoaWNoPW51bGwhPWIuY2hhckNvZGU/Yi5jaGFyQ29kZTpiLmtleUNvZGUpLGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxmPWIuYnV0dG9uO3JldHVybiBudWxsPT1hLnBhZ2VYJiZudWxsIT1iLmNsaWVudFgmJihjPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGwsZD1jLmRvY3VtZW50RWxlbWVudCxlPWMuYm9keSxhLnBhZ2VYPWIuY2xpZW50WCsoZCYmZC5zY3JvbGxMZWZ0fHxlJiZlLnNjcm9sbExlZnR8fDApLShkJiZkLmNsaWVudExlZnR8fGUmJmUuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1iLmNsaWVudFkrKGQmJmQuc2Nyb2xsVG9wfHxlJiZlLnNjcm9sbFRvcHx8MCktKGQmJmQuY2xpZW50VG9wfHxlJiZlLmNsaWVudFRvcHx8MCkpLGEud2hpY2h8fHZvaWQgMD09PWZ8fChhLndoaWNoPTEmZj8xOjImZj8zOjQmZj8yOjApLGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtuLmV4cGFuZG9dKXJldHVybiBhO3ZhciBiLGMsZCxlPWEudHlwZSxmPWEsZz10aGlzLmZpeEhvb2tzW2VdO2d8fCh0aGlzLmZpeEhvb2tzW2VdPWc9Vy50ZXN0KGUpP3RoaXMubW91c2VIb29rczpWLnRlc3QoZSk/dGhpcy5rZXlIb29rczp7fSksZD1nLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGcucHJvcHMpOnRoaXMucHJvcHMsYT1uZXcgbi5FdmVudChmKSxiPWQubGVuZ3RoO3doaWxlKGItLSljPWRbYl0sYVtjXT1mW2NdO3JldHVybiBhLnRhcmdldHx8KGEudGFyZ2V0PWwpLDM9PT1hLnRhcmdldC5ub2RlVHlwZSYmKGEudGFyZ2V0PWEudGFyZ2V0LnBhcmVudE5vZGUpLGcuZmlsdGVyP2cuZmlsdGVyKGEsZik6YX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1fKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dm9pZCAwfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1fKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnZvaWQgMH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmbi5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnZvaWQgMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG4ubm9kZU5hbWUoYS50YXJnZXQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGEpe3ZvaWQgMCE9PWEucmVzdWx0JiZhLm9yaWdpbmFsRXZlbnQmJihhLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9YS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlPW4uZXh0ZW5kKG5ldyBuLkV2ZW50LGMse3R5cGU6YSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7ZD9uLmV2ZW50LnRyaWdnZXIoZSxudWxsLGIpOm4uZXZlbnQuZGlzcGF0Y2guY2FsbChiLGUpLGUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmMucHJldmVudERlZmF1bHQoKX19LG4ucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oYSxiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lciYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGIsYywhMSl9LG4uRXZlbnQ9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4uRXZlbnQ/KGEmJmEudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWEsdGhpcy50eXBlPWEudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1hLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWEuZGVmYXVsdFByZXZlbnRlZCYmYS5yZXR1cm5WYWx1ZT09PSExP1o6JCk6dGhpcy50eXBlPWEsYiYmbi5leHRlbmQodGhpcyxiKSx0aGlzLnRpbWVTdGFtcD1hJiZhLnRpbWVTdGFtcHx8bi5ub3coKSx2b2lkKHRoaXNbbi5leHBhbmRvXT0hMCkpOm5ldyBuLkV2ZW50KGEsYil9LG4uRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6JCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDokLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiQscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9WixhJiZhLnByZXZlbnREZWZhdWx0JiZhLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9wUHJvcGFnYXRpb24mJmEuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPVosYSYmYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24mJmEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LG4uZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oYSxiKXtuLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjLGQ9dGhpcyxlPWEucmVsYXRlZFRhcmdldCxmPWEuaGFuZGxlT2JqO3JldHVybighZXx8ZSE9PWQmJiFuLmNvbnRhaW5zKGQsZSkpJiYoYS50eXBlPWYub3JpZ1R5cGUsYz1mLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iKSxjfX19KSxrLmZvY3VzaW5CdWJibGVzfHxuLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rpb24oYSl7bi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LG4uZXZlbnQuZml4KGEpLCEwKX07bi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBkPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxlPUwuYWNjZXNzKGQsYik7ZXx8ZC5hZGRFdmVudExpc3RlbmVyKGEsYywhMCksTC5hY2Nlc3MoZCxiLChlfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgZD10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsZT1MLmFjY2VzcyhkLGIpLTE7ZT9MLmFjY2VzcyhkLGIsZSk6KGQucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGMsITApLEwucmVtb3ZlKGQsYikpfX19KSxuLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZixnO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7InN0cmluZyIhPXR5cGVvZiBiJiYoYz1jfHxiLGI9dm9pZCAwKTtmb3IoZyBpbiBhKXRoaXMub24oZyxiLGMsYVtnXSxlKTtyZXR1cm4gdGhpc31pZihudWxsPT1jJiZudWxsPT1kPyhkPWIsYz1iPXZvaWQgMCk6bnVsbD09ZCYmKCJzdHJpbmciPT10eXBlb2YgYj8oZD1jLGM9dm9pZCAwKTooZD1jLGM9YixiPXZvaWQgMCkpLGQ9PT0hMSlkPSQ7ZWxzZSBpZighZClyZXR1cm4gdGhpcztyZXR1cm4gMT09PWUmJihmPWQsZD1mdW5jdGlvbihhKXtyZXR1cm4gbigpLm9mZihhKSxmLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZC5ndWlkPWYuZ3VpZHx8KGYuZ3VpZD1uLmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQuYWRkKHRoaXMsYSxkLGMsYil9KX0sb25lOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGEsYixjLGQsMSl9LG9mZjpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhJiZhLnByZXZlbnREZWZhdWx0JiZhLmhhbmRsZU9iailyZXR1cm4gZD1hLmhhbmRsZU9iaixuKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihkLm5hbWVzcGFjZT9kLm9yaWdUeXBlKyIuIitkLm5hbWVzcGFjZTpkLm9yaWdUeXBlLGQuc2VsZWN0b3IsZC5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgYSl7Zm9yKGUgaW4gYSl0aGlzLm9mZihlLGIsYVtlXSk7cmV0dXJuIHRoaXN9cmV0dXJuKGI9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIGIpJiYoYz1iLGI9dm9pZCAwKSxjPT09ITEmJihjPSQpLHRoaXMuZWFjaChmdW5jdGlvbigpe24uZXZlbnQucmVtb3ZlKHRoaXMsYSxjLGIpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7bi5ldmVudC50cmlnZ2VyKGEsYix0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXNbMF07cmV0dXJuIGM/bi5ldmVudC50cmlnZ2VyKGEsYixjLCEwKTp2b2lkIDB9fSk7dmFyIGFhPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksYmE9LzwoW1x3Ol0rKS8sY2E9Lzx8JiM/XHcrOy8sZGE9LzwoPzpzY3JpcHR8c3R5bGV8bGluaykvaSxlYT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxmYT0vXiR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksZ2E9L150cnVlXC8oLiopLyxoYT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2csaWE9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtpYS5vcHRncm91cD1pYS5vcHRpb24saWEudGJvZHk9aWEudGZvb3Q9aWEuY29sZ3JvdXA9aWEuY2FwdGlvbj1pYS50aGVhZCxpYS50aD1pYS50ZDtmdW5jdGlvbiBqYShhLGIpe3JldHVybiBuLm5vZGVOYW1lKGEsInRhYmxlIikmJm4ubm9kZU5hbWUoMTEhPT1iLm5vZGVUeXBlP2I6Yi5maXJzdENoaWxkLCJ0ciIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24ga2EoYSl7cmV0dXJuIGEudHlwZT0obnVsbCE9PWEuZ2V0QXR0cmlidXRlKCJ0eXBlIikpKyIvIithLnR5cGUsYX1mdW5jdGlvbiBsYShhKXt2YXIgYj1nYS5leGVjKGEudHlwZSk7cmV0dXJuIGI/YS50eXBlPWJbMV06YS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxhfWZ1bmN0aW9uIG1hKGEsYil7Zm9yKHZhciBjPTAsZD1hLmxlbmd0aDtkPmM7YysrKUwuc2V0KGFbY10sImdsb2JhbEV2YWwiLCFifHxMLmdldChiW2NdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIG5hKGEsYil7dmFyIGMsZCxlLGYsZyxoLGksajtpZigxPT09Yi5ub2RlVHlwZSl7aWYoTC5oYXNEYXRhKGEpJiYoZj1MLmFjY2VzcyhhKSxnPUwuc2V0KGIsZiksaj1mLmV2ZW50cykpe2RlbGV0ZSBnLmhhbmRsZSxnLmV2ZW50cz17fTtmb3IoZSBpbiBqKWZvcihjPTAsZD1qW2VdLmxlbmd0aDtkPmM7YysrKW4uZXZlbnQuYWRkKGIsZSxqW2VdW2NdKX1NLmhhc0RhdGEoYSkmJihoPU0uYWNjZXNzKGEpLGk9bi5leHRlbmQoe30saCksTS5zZXQoYixpKSl9fWZ1bmN0aW9uIG9hKGEsYil7dmFyIGM9YS5nZXRFbGVtZW50c0J5VGFnTmFtZT9hLmdldEVsZW1lbnRzQnlUYWdOYW1lKGJ8fCIqIik6YS5xdWVyeVNlbGVjdG9yQWxsP2EucXVlcnlTZWxlY3RvckFsbChifHwiKiIpOltdO3JldHVybiB2b2lkIDA9PT1ifHxiJiZuLm5vZGVOYW1lKGEsYik/bi5tZXJnZShbYV0sYyk6Y31mdW5jdGlvbiBwYShhLGIpe3ZhciBjPWIubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09YyYmVC50ZXN0KGEudHlwZSk/Yi5jaGVja2VkPWEuY2hlY2tlZDooImlucHV0Ij09PWN8fCJ0ZXh0YXJlYSI9PT1jKSYmKGIuZGVmYXVsdFZhbHVlPWEuZGVmYXVsdFZhbHVlKX1uLmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jbG9uZU5vZGUoITApLGk9bi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQsYSk7aWYoIShrLm5vQ2xvbmVDaGVja2VkfHwxIT09YS5ub2RlVHlwZSYmMTEhPT1hLm5vZGVUeXBlfHxuLmlzWE1MRG9jKGEpKSlmb3IoZz1vYShoKSxmPW9hKGEpLGQ9MCxlPWYubGVuZ3RoO2U+ZDtkKyspcGEoZltkXSxnW2RdKTtpZihiKWlmKGMpZm9yKGY9Znx8b2EoYSksZz1nfHxvYShoKSxkPTAsZT1mLmxlbmd0aDtlPmQ7ZCsrKW5hKGZbZF0sZ1tkXSk7ZWxzZSBuYShhLGgpO3JldHVybiBnPW9hKGgsInNjcmlwdCIpLGcubGVuZ3RoPjAmJm1hKGcsIWkmJm9hKGEsInNjcmlwdCIpKSxofSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGEsYixjLGQpe2Zvcih2YXIgZSxmLGcsaCxpLGosaz1iLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxsPVtdLG09MCxvPWEubGVuZ3RoO28+bTttKyspaWYoZT1hW21dLGV8fDA9PT1lKWlmKCJvYmplY3QiPT09bi50eXBlKGUpKW4ubWVyZ2UobCxlLm5vZGVUeXBlP1tlXTplKTtlbHNlIGlmKGNhLnRlc3QoZSkpe2Y9Znx8ay5hcHBlbmRDaGlsZChiLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxnPShiYS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGg9aWFbZ118fGlhLl9kZWZhdWx0LGYuaW5uZXJIVE1MPWhbMV0rZS5yZXBsYWNlKGFhLCI8JDE+PC8kMj4iKStoWzJdLGo9aFswXTt3aGlsZShqLS0pZj1mLmxhc3RDaGlsZDtuLm1lcmdlKGwsZi5jaGlsZE5vZGVzKSxmPWsuZmlyc3RDaGlsZCxmLnRleHRDb250ZW50PSIifWVsc2UgbC5wdXNoKGIuY3JlYXRlVGV4dE5vZGUoZSkpO2sudGV4dENvbnRlbnQ9IiIsbT0wO3doaWxlKGU9bFttKytdKWlmKCghZHx8LTE9PT1uLmluQXJyYXkoZSxkKSkmJihpPW4uY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpLGY9b2Eoay5hcHBlbmRDaGlsZChlKSwic2NyaXB0IiksaSYmbWEoZiksYykpe2o9MDt3aGlsZShlPWZbaisrXSlmYS50ZXN0KGUudHlwZXx8IiIpJiZjLnB1c2goZSl9cmV0dXJuIGt9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXtmb3IodmFyIGIsYyxkLGUsZj1uLmV2ZW50LnNwZWNpYWwsZz0wO3ZvaWQgMCE9PShjPWFbZ10pO2crKyl7aWYobi5hY2NlcHREYXRhKGMpJiYoZT1jW0wuZXhwYW5kb10sZSYmKGI9TC5jYWNoZVtlXSkpKXtpZihiLmV2ZW50cylmb3IoZCBpbiBiLmV2ZW50cylmW2RdP24uZXZlbnQucmVtb3ZlKGMsZCk6bi5yZW1vdmVFdmVudChjLGQsYi5oYW5kbGUpO0wuY2FjaGVbZV0mJmRlbGV0ZSBMLmNhY2hlW2VdfWRlbGV0ZSBNLmNhY2hlW2NbTS5leHBhbmRvXV19fX0pLG4uZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMD09PWE/bi50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7KDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKSYmKHRoaXMudGV4dENvbnRlbnQ9YSl9KX0sbnVsbCxhLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oYSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciBiPWphKHRoaXMsYSk7Yi5hcHBlbmRDaGlsZChhKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIGI9amEodGhpcyxhKTtiLmluc2VydEJlZm9yZShhLGIuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSx0aGlzLm5leHRTaWJsaW5nKX0pfSxyZW1vdmU6ZnVuY3Rpb24oYSxiKXtmb3IodmFyIGMsZD1hP24uZmlsdGVyKGEsdGhpcyk6dGhpcyxlPTA7bnVsbCE9KGM9ZFtlXSk7ZSsrKWJ8fDEhPT1jLm5vZGVUeXBlfHxuLmNsZWFuRGF0YShvYShjKSksYy5wYXJlbnROb2RlJiYoYiYmbi5jb250YWlucyhjLm93bmVyRG9jdW1lbnQsYykmJm1hKG9hKGMsInNjcmlwdCIpKSxjLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYykpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe2Zvcih2YXIgYSxiPTA7bnVsbCE9KGE9dGhpc1tiXSk7YisrKTE9PT1hLm5vZGVUeXBlJiYobi5jbGVhbkRhdGEob2EoYSwhMSkpLGEudGV4dENvbnRlbnQ9IiIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihhLGIpe3JldHVybiBhPW51bGw9PWE/ITE6YSxiPW51bGw9PWI/YTpiLHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIG4uY2xvbmUodGhpcyxhLGIpfSl9LGh0bWw6ZnVuY3Rpb24oYSl7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihhKXt2YXIgYj10aGlzWzBdfHx7fSxjPTAsZD10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1hJiYxPT09Yi5ub2RlVHlwZSlyZXR1cm4gYi5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYhZGEudGVzdChhKSYmIWlhWyhiYS5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoYWEsIjwkMT48LyQyPiIpO3RyeXtmb3IoO2Q+YztjKyspYj10aGlzW2NdfHx7fSwxPT09Yi5ub2RlVHlwZSYmKG4uY2xlYW5EYXRhKG9hKGIsITEpKSxiLmlubmVySFRNTD1hKTtiPTB9Y2F0Y2goZSl7fX1iJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGE9YXJndW1lbnRzWzBdO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihiKXthPXRoaXMucGFyZW50Tm9kZSxuLmNsZWFuRGF0YShvYSh0aGlzKSksYSYmYS5yZXBsYWNlQ2hpbGQoYix0aGlzKX0pLGEmJihhLmxlbmd0aHx8YS5ub2RlVHlwZSk/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGIpe2E9ZS5hcHBseShbXSxhKTt2YXIgYyxkLGYsZyxoLGksaj0wLGw9dGhpcy5sZW5ndGgsbT10aGlzLG89bC0xLHA9YVswXSxxPW4uaXNGdW5jdGlvbihwKTtpZihxfHxsPjEmJiJzdHJpbmciPT10eXBlb2YgcCYmIWsuY2hlY2tDbG9uZSYmZWEudGVzdChwKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe3ZhciBkPW0uZXEoYyk7cSYmKGFbMF09cC5jYWxsKHRoaXMsYyxkLmh0bWwoKSkpLGQuZG9tTWFuaXAoYSxiKX0pO2lmKGwmJihjPW4uYnVpbGRGcmFnbWVudChhLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSx0aGlzKSxkPWMuZmlyc3RDaGlsZCwxPT09Yy5jaGlsZE5vZGVzLmxlbmd0aCYmKGM9ZCksZCkpe2ZvcihmPW4ubWFwKG9hKGMsInNjcmlwdCIpLGthKSxnPWYubGVuZ3RoO2w+ajtqKyspaD1jLGohPT1vJiYoaD1uLmNsb25lKGgsITAsITApLGcmJm4ubWVyZ2UoZixvYShoLCJzY3JpcHQiKSkpLGIuY2FsbCh0aGlzW2pdLGgsaik7aWYoZylmb3IoaT1mW2YubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsbi5tYXAoZixsYSksaj0wO2c+ajtqKyspaD1mW2pdLGZhLnRlc3QoaC50eXBlfHwiIikmJiFMLmFjY2VzcyhoLCJnbG9iYWxFdmFsIikmJm4uY29udGFpbnMoaSxoKSYmKGguc3JjP24uX2V2YWxVcmwmJm4uX2V2YWxVcmwoaC5zcmMpOm4uZ2xvYmFsRXZhbChoLnRleHRDb250ZW50LnJlcGxhY2UoaGEsIiIpKSl9cmV0dXJuIHRoaXN9fSksbi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oYSxiKXtuLmZuW2FdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYyxkPVtdLGU9bihhKSxnPWUubGVuZ3RoLTEsaD0wO2c+PWg7aCsrKWM9aD09PWc/dGhpczp0aGlzLmNsb25lKCEwKSxuKGVbaF0pW2JdKGMpLGYuYXBwbHkoZCxjLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZCl9fSk7dmFyIHFhLHJhPXt9O2Z1bmN0aW9uIHNhKGIsYyl7dmFyIGQsZT1uKGMuY3JlYXRlRWxlbWVudChiKSkuYXBwZW5kVG8oYy5ib2R5KSxmPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUmJihkPWEuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGUoZVswXSkpP2QuZGlzcGxheTpuLmNzcyhlWzBdLCJkaXNwbGF5Iik7cmV0dXJuIGUuZGV0YWNoKCksZn1mdW5jdGlvbiB0YShhKXt2YXIgYj1sLGM9cmFbYV07cmV0dXJuIGN8fChjPXNhKGEsYiksIm5vbmUiIT09YyYmY3x8KHFhPShxYXx8bigiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpKS5hcHBlbmRUbyhiLmRvY3VtZW50RWxlbWVudCksYj1xYVswXS5jb250ZW50RG9jdW1lbnQsYi53cml0ZSgpLGIuY2xvc2UoKSxjPXNhKGEsYikscWEuZGV0YWNoKCkpLHJhW2FdPWMpLGN9dmFyIHVhPS9ebWFyZ2luLyx2YT1uZXcgUmVnRXhwKCJeKCIrUSsiKSg/IXB4KVthLXolXSskIiwiaSIpLHdhPWZ1bmN0aW9uKGIpe3JldHVybiBiLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcub3BlbmVyP2Iub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCk6YS5nZXRDb21wdXRlZFN0eWxlKGIsbnVsbCl9O2Z1bmN0aW9uIHhhKGEsYixjKXt2YXIgZCxlLGYsZyxoPWEuc3R5bGU7cmV0dXJuIGM9Y3x8d2EoYSksYyYmKGc9Yy5nZXRQcm9wZXJ0eVZhbHVlKGIpfHxjW2JdKSxjJiYoIiIhPT1nfHxuLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKXx8KGc9bi5zdHlsZShhLGIpKSx2YS50ZXN0KGcpJiZ1YS50ZXN0KGIpJiYoZD1oLndpZHRoLGU9aC5taW5XaWR0aCxmPWgubWF4V2lkdGgsaC5taW5XaWR0aD1oLm1heFdpZHRoPWgud2lkdGg9ZyxnPWMud2lkdGgsaC53aWR0aD1kLGgubWluV2lkdGg9ZSxoLm1heFdpZHRoPWYpKSx2b2lkIDAhPT1nP2crIiI6Z31mdW5jdGlvbiB5YShhLGIpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1iKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0hZnVuY3Rpb24oKXt2YXIgYixjLGQ9bC5kb2N1bWVudEVsZW1lbnQsZT1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGY9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtpZihmLnN0eWxlKXtmLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsZi5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLGsuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1mLnN0eWxlLmJhY2tncm91bmRDbGlwLGUuc3R5bGUuY3NzVGV4dD0iYm9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDt0b3A6MDtsZWZ0Oi05OTk5cHg7bWFyZ2luLXRvcDoxcHg7cG9zaXRpb246YWJzb2x1dGUiLGUuYXBwZW5kQ2hpbGQoZik7ZnVuY3Rpb24gZygpe2Yuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoxJTt0b3A6MSU7Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo0cHg7cG9zaXRpb246YWJzb2x1dGUiLGYuaW5uZXJIVE1MPSIiLGQuYXBwZW5kQ2hpbGQoZSk7dmFyIGc9YS5nZXRDb21wdXRlZFN0eWxlKGYsbnVsbCk7Yj0iMSUiIT09Zy50b3AsYz0iNHB4Ij09PWcud2lkdGgsZC5yZW1vdmVDaGlsZChlKX1hLmdldENvbXB1dGVkU3R5bGUmJm4uZXh0ZW5kKGsse3BpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZygpLGJ9LGJveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PWMmJmcoKSxjfSxyZWxpYWJsZU1hcmdpblJpZ2h0OmZ1bmN0aW9uKCl7dmFyIGIsYz1mLmFwcGVuZENoaWxkKGwuY3JlYXRlRWxlbWVudCgiZGl2IikpO3JldHVybiBjLnN0eWxlLmNzc1RleHQ9Zi5zdHlsZS5jc3NUZXh0PSItd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7ZGlzcGxheTpibG9jazttYXJnaW46MDtib3JkZXI6MDtwYWRkaW5nOjAiLGMuc3R5bGUubWFyZ2luUmlnaHQ9Yy5zdHlsZS53aWR0aD0iMCIsZi5zdHlsZS53aWR0aD0iMXB4IixkLmFwcGVuZENoaWxkKGUpLGI9IXBhcnNlRmxvYXQoYS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkubWFyZ2luUmlnaHQpLGQucmVtb3ZlQ2hpbGQoZSksZi5yZW1vdmVDaGlsZChjKSxifX0pfX0oKSxuLnN3YXA9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGUsZixnPXt9O2ZvcihmIGluIGIpZ1tmXT1hLnN0eWxlW2ZdLGEuc3R5bGVbZl09YltmXTtlPWMuYXBwbHkoYSxkfHxbXSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWdbZl07cmV0dXJuIGV9O3ZhciB6YT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sQWE9bmV3IFJlZ0V4cCgiXigiK1ErIikoLiopJCIsImkiKSxCYT1uZXcgUmVnRXhwKCJeKFsrLV0pPSgiK1ErIikiLCJpIiksQ2E9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LERhPXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifSxFYT1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIEZhKGEsYil7aWYoYiBpbiBhKXJldHVybiBiO3ZhciBjPWJbMF0udG9VcHBlckNhc2UoKStiLnNsaWNlKDEpLGQ9YixlPUVhLmxlbmd0aDt3aGlsZShlLS0paWYoYj1FYVtlXStjLGIgaW4gYSlyZXR1cm4gYjtyZXR1cm4gZH1mdW5jdGlvbiBHYShhLGIsYyl7dmFyIGQ9QWEuZXhlYyhiKTtyZXR1cm4gZD9NYXRoLm1heCgwLGRbMV0tKGN8fDApKSsoZFsyXXx8InB4Iik6Yn1mdW5jdGlvbiBIYShhLGIsYyxkLGUpe2Zvcih2YXIgZj1jPT09KGQ/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT1iPzE6MCxnPTA7ND5mO2YrPTIpIm1hcmdpbiI9PT1jJiYoZys9bi5jc3MoYSxjK1JbZl0sITAsZSkpLGQ/KCJjb250ZW50Ij09PWMmJihnLT1uLmNzcyhhLCJwYWRkaW5nIitSW2ZdLCEwLGUpKSwibWFyZ2luIiE9PWMmJihnLT1uLmNzcyhhLCJib3JkZXIiK1JbZl0rIldpZHRoIiwhMCxlKSkpOihnKz1uLmNzcyhhLCJwYWRkaW5nIitSW2ZdLCEwLGUpLCJwYWRkaW5nIiE9PWMmJihnKz1uLmNzcyhhLCJib3JkZXIiK1JbZl0rIldpZHRoIiwhMCxlKSkpO3JldHVybiBnfWZ1bmN0aW9uIElhKGEsYixjKXt2YXIgZD0hMCxlPSJ3aWR0aCI9PT1iP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHQsZj13YShhKSxnPSJib3JkZXItYm94Ij09PW4uY3NzKGEsImJveFNpemluZyIsITEsZik7aWYoMD49ZXx8bnVsbD09ZSl7aWYoZT14YShhLGIsZiksKDA+ZXx8bnVsbD09ZSkmJihlPWEuc3R5bGVbYl0pLHZhLnRlc3QoZSkpcmV0dXJuIGU7ZD1nJiYoay5ib3hTaXppbmdSZWxpYWJsZSgpfHxlPT09YS5zdHlsZVtiXSksZT1wYXJzZUZsb2F0KGUpfHwwfXJldHVybiBlK0hhKGEsYixjfHwoZz8iYm9yZGVyIjoiY29udGVudCIpLGQsZikrInB4In1mdW5jdGlvbiBKYShhLGIpe2Zvcih2YXIgYyxkLGUsZj1bXSxnPTAsaD1hLmxlbmd0aDtoPmc7ZysrKWQ9YVtnXSxkLnN0eWxlJiYoZltnXT1MLmdldChkLCJvbGRkaXNwbGF5IiksYz1kLnN0eWxlLmRpc3BsYXksYj8oZltnXXx8Im5vbmUiIT09Y3x8KGQuc3R5bGUuZGlzcGxheT0iIiksIiI9PT1kLnN0eWxlLmRpc3BsYXkmJlMoZCkmJihmW2ddPUwuYWNjZXNzKGQsIm9sZGRpc3BsYXkiLHRhKGQubm9kZU5hbWUpKSkpOihlPVMoZCksIm5vbmUiPT09YyYmZXx8TC5zZXQoZCwib2xkZGlzcGxheSIsZT9jOm4uY3NzKGQsImRpc3BsYXkiKSkpKTtmb3IoZz0wO2g+ZztnKyspZD1hW2ddLGQuc3R5bGUmJihiJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXkmJiIiIT09ZC5zdHlsZS5kaXNwbGF5fHwoZC5zdHlsZS5kaXNwbGF5PWI/ZltnXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGF9bi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oYSxiKXtpZihiKXt2YXIgYz14YShhLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1jPyIxIjpjfX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnsiZmxvYXQiOiJjc3NGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGEmJjMhPT1hLm5vZGVUeXBlJiY4IT09YS5ub2RlVHlwZSYmYS5zdHlsZSl7dmFyIGUsZixnLGg9bi5jYW1lbENhc2UoYiksaT1hLnN0eWxlO3JldHVybiBiPW4uY3NzUHJvcHNbaF18fChuLmNzc1Byb3BzW2hdPUZhKGksaCkpLGc9bi5jc3NIb29rc1tiXXx8bi5jc3NIb29rc1toXSx2b2lkIDA9PT1jP2cmJiJnZXQiaW4gZyYmdm9pZCAwIT09KGU9Zy5nZXQoYSwhMSxkKSk/ZTppW2JdOihmPXR5cGVvZiBjLCJzdHJpbmciPT09ZiYmKGU9QmEuZXhlYyhjKSkmJihjPShlWzFdKzEpKmVbMl0rcGFyc2VGbG9hdChuLmNzcyhhLGIpKSxmPSJudW1iZXIiKSxudWxsIT1jJiZjPT09YyYmKCJudW1iZXIiIT09Znx8bi5jc3NOdW1iZXJbaF18fChjKz0icHgiKSxrLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1jfHwwIT09Yi5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChpW2JdPSJpbmhlcml0IiksZyYmInNldCJpbiBnJiZ2b2lkIDA9PT0oYz1nLnNldChhLGMsZCkpfHwoaVtiXT1jKSksdm9pZCAwKX19LGNzczpmdW5jdGlvbihhLGIsYyxkKXt2YXIgZSxmLGcsaD1uLmNhbWVsQ2FzZShiKTtyZXR1cm4gYj1uLmNzc1Byb3BzW2hdfHwobi5jc3NQcm9wc1toXT1GYShhLnN0eWxlLGgpKSxnPW4uY3NzSG9va3NbYl18fG4uY3NzSG9va3NbaF0sZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGMpKSx2b2lkIDA9PT1lJiYoZT14YShhLGIsZCkpLCJub3JtYWwiPT09ZSYmYiBpbiBEYSYmKGU9RGFbYl0pLCIiPT09Y3x8Yz8oZj1wYXJzZUZsb2F0KGUpLGM9PT0hMHx8bi5pc051bWVyaWMoZik/Znx8MDplKTplfX0pLG4uZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtuLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe3JldHVybiBjP3phLnRlc3Qobi5jc3MoYSwiZGlzcGxheSIpKSYmMD09PWEub2Zmc2V0V2lkdGg/bi5zd2FwKGEsQ2EsZnVuY3Rpb24oKXtyZXR1cm4gSWEoYSxiLGQpfSk6SWEoYSxiLGQpOnZvaWQgMH0sc2V0OmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1kJiZ3YShhKTtyZXR1cm4gR2EoYSxjLGQ/SGEoYSxiLGQsImJvcmRlci1ib3giPT09bi5jc3MoYSwiYm94U2l6aW5nIiwhMSxlKSxlKTowKX19fSksbi5jc3NIb29rcy5tYXJnaW5SaWdodD15YShrLnJlbGlhYmxlTWFyZ2luUmlnaHQsZnVuY3Rpb24oYSxiKXtyZXR1cm4gYj9uLnN3YXAoYSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0seGEsW2EsIm1hcmdpblJpZ2h0Il0pOnZvaWQgMH0pLG4uZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGEsYil7bi5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7Zm9yKHZhciBkPTAsZT17fSxmPSJzdHJpbmciPT10eXBlb2YgYz9jLnNwbGl0KCIgIik6W2NdOzQ+ZDtkKyspZVthK1JbZF0rYl09ZltkXXx8ZltkLTJdfHxmWzBdO3JldHVybiBlfX0sdWEudGVzdChhKXx8KG4uY3NzSG9va3NbYStiXS5zZXQ9R2EpfSksbi5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGUsZj17fSxnPTA7aWYobi5pc0FycmF5KGIpKXtmb3IoZD13YShhKSxlPWIubGVuZ3RoO2U+ZztnKyspZltiW2ddXT1uLmNzcyhhLGJbZ10sITEsZCk7cmV0dXJuIGZ9cmV0dXJuIHZvaWQgMCE9PWM/bi5zdHlsZShhLGIsYyk6bi5jc3MoYSxiKX0sYSxiLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gSmEodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gSmEodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihhKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBhP2E/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Uyh0aGlzKT9uKHRoaXMpLnNob3coKTpuKHRoaXMpLmhpZGUoKX0pfX0pO2Z1bmN0aW9uIEthKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBLYS5wcm90b3R5cGUuaW5pdChhLGIsYyxkLGUpfW4uVHdlZW49S2EsS2EucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpLYSxpbml0OmZ1bmN0aW9uKGEsYixjLGQsZSxmKXt0aGlzLmVsZW09YSx0aGlzLnByb3A9Yyx0aGlzLmVhc2luZz1lfHwic3dpbmciLHRoaXMub3B0aW9ucz1iLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1kLHRoaXMudW5pdD1mfHwobi5jc3NOdW1iZXJbY10/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBhPUthLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBhJiZhLmdldD9hLmdldCh0aGlzKTpLYS5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oYSl7dmFyIGIsYz1LYS5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPWI9bi5lYXNpbmdbdGhpcy5lYXNpbmddKGEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmEsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9Yj1hLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSpiK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGMmJmMuc2V0P2Muc2V0KHRoaXMpOkthLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LEthLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1LYS5wcm90b3R5cGUsS2EucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBudWxsPT1hLmVsZW1bYS5wcm9wXXx8YS5lbGVtLnN0eWxlJiZudWxsIT1hLmVsZW0uc3R5bGVbYS5wcm9wXT8oYj1uLmNzcyhhLmVsZW0sYS5wcm9wLCIiKSxiJiYiYXV0byIhPT1iP2I6MCk6YS5lbGVtW2EucHJvcF19LHNldDpmdW5jdGlvbihhKXtuLmZ4LnN0ZXBbYS5wcm9wXT9uLmZ4LnN0ZXBbYS5wcm9wXShhKTphLmVsZW0uc3R5bGUmJihudWxsIT1hLmVsZW0uc3R5bGVbbi5jc3NQcm9wc1thLnByb3BdXXx8bi5jc3NIb29rc1thLnByb3BdKT9uLnN0eWxlKGEuZWxlbSxhLnByb3AsYS5ub3crYS51bml0KTphLmVsZW1bYS5wcm9wXT1hLm5vd319fSxLYS5wcm9wSG9va3Muc2Nyb2xsVG9wPUthLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oYSl7YS5lbGVtLm5vZGVUeXBlJiZhLmVsZW0ucGFyZW50Tm9kZSYmKGEuZWxlbVthLnByb3BdPWEubm93KX19LG4uZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHN3aW5nOmZ1bmN0aW9uKGEpe3JldHVybi41LU1hdGguY29zKGEqTWF0aC5QSSkvMn19LG4uZng9S2EucHJvdG90eXBlLmluaXQsbi5meC5zdGVwPXt9O3ZhciBMYSxNYSxOYT0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sT2E9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK1ErIikoW2EteiVdKikkIiwiaSIpLFBhPS9xdWV1ZUhvb2tzJC8sUWE9W1ZhXSxSYT17IioiOltmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuY3JlYXRlVHdlZW4oYSxiKSxkPWMuY3VyKCksZT1PYS5leGVjKGIpLGY9ZSYmZVszXXx8KG4uY3NzTnVtYmVyW2FdPyIiOiJweCIpLGc9KG4uY3NzTnVtYmVyW2FdfHwicHgiIT09ZiYmK2QpJiZPYS5leGVjKG4uY3NzKGMuZWxlbSxhKSksaD0xLGk9MjA7aWYoZyYmZ1szXSE9PWYpe2Y9Znx8Z1szXSxlPWV8fFtdLGc9K2R8fDE7ZG8gaD1ofHwiLjUiLGcvPWgsbi5zdHlsZShjLmVsZW0sYSxnK2YpO3doaWxlKGghPT0oaD1jLmN1cigpL2QpJiYxIT09aCYmLS1pKX1yZXR1cm4gZSYmKGc9Yy5zdGFydD0rZ3x8K2R8fDAsYy51bml0PWYsYy5lbmQ9ZVsxXT9nKyhlWzFdKzEpKmVbMl06K2VbMl0pLGN9XX07ZnVuY3Rpb24gU2EoKXtyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe0xhPXZvaWQgMH0pLExhPW4ubm93KCl9ZnVuY3Rpb24gVGEoYSxiKXt2YXIgYyxkPTAsZT17aGVpZ2h0OmF9O2ZvcihiPWI/MTowOzQ+ZDtkKz0yLWIpYz1SW2RdLGVbIm1hcmdpbiIrY109ZVsicGFkZGluZyIrY109YTtyZXR1cm4gYiYmKGUub3BhY2l0eT1lLndpZHRoPWEpLGV9ZnVuY3Rpb24gVWEoYSxiLGMpe2Zvcih2YXIgZCxlPShSYVtiXXx8W10pLmNvbmNhdChSYVsiKiJdKSxmPTAsZz1lLmxlbmd0aDtnPmY7ZisrKWlmKGQ9ZVtmXS5jYWxsKGMsYixhKSlyZXR1cm4gZH1mdW5jdGlvbiBWYShhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosayxsPXRoaXMsbT17fSxvPWEuc3R5bGUscD1hLm5vZGVUeXBlJiZTKGEpLHE9TC5nZXQoYSwiZnhzaG93Iik7Yy5xdWV1ZXx8KGg9bi5fcXVldWVIb29rcyhhLCJmeCIpLG51bGw9PWgudW5xdWV1ZWQmJihoLnVucXVldWVkPTAsaT1oLmVtcHR5LmZpcmUsaC5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7aC51bnF1ZXVlZHx8aSgpfSksaC51bnF1ZXVlZCsrLGwuYWx3YXlzKGZ1bmN0aW9uKCl7bC5hbHdheXMoZnVuY3Rpb24oKXtoLnVucXVldWVkLS0sbi5xdWV1ZShhLCJmeCIpLmxlbmd0aHx8aC5lbXB0eS5maXJlKCl9KX0pKSwxPT09YS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gYnx8IndpZHRoImluIGIpJiYoYy5vdmVyZmxvdz1bby5vdmVyZmxvdyxvLm92ZXJmbG93WCxvLm92ZXJmbG93WV0saj1uLmNzcyhhLCJkaXNwbGF5Iiksaz0ibm9uZSI9PT1qP0wuZ2V0KGEsIm9sZGRpc3BsYXkiKXx8dGEoYS5ub2RlTmFtZSk6aiwiaW5saW5lIj09PWsmJiJub25lIj09PW4uY3NzKGEsImZsb2F0IikmJihvLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxjLm92ZXJmbG93JiYoby5vdmVyZmxvdz0iaGlkZGVuIixsLmFsd2F5cyhmdW5jdGlvbigpe28ub3ZlcmZsb3c9Yy5vdmVyZmxvd1swXSxvLm92ZXJmbG93WD1jLm92ZXJmbG93WzFdLG8ub3ZlcmZsb3dZPWMub3ZlcmZsb3dbMl19KSk7Zm9yKGQgaW4gYilpZihlPWJbZF0sTmEuZXhlYyhlKSl7aWYoZGVsZXRlIGJbZF0sZj1mfHwidG9nZ2xlIj09PWUsZT09PShwPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1lfHwhcXx8dm9pZCAwPT09cVtkXSljb250aW51ZTtwPSEwfW1bZF09cSYmcVtkXXx8bi5zdHlsZShhLGQpfWVsc2Ugaj12b2lkIDA7aWYobi5pc0VtcHR5T2JqZWN0KG0pKSJpbmxpbmUiPT09KCJub25lIj09PWo/dGEoYS5ub2RlTmFtZSk6aikmJihvLmRpc3BsYXk9aik7ZWxzZXtxPyJoaWRkZW4iaW4gcSYmKHA9cS5oaWRkZW4pOnE9TC5hY2Nlc3MoYSwiZnhzaG93Iix7fSksZiYmKHEuaGlkZGVuPSFwKSxwP24oYSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe24oYSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIGI7TC5yZW1vdmUoYSwiZnhzaG93Iik7Zm9yKGIgaW4gbSluLnN0eWxlKGEsYixtW2JdKX0pO2ZvcihkIGluIG0pZz1VYShwP3FbZF06MCxkLGwpLGQgaW4gcXx8KHFbZF09Zy5zdGFydCxwJiYoZy5lbmQ9Zy5zdGFydCxnLnN0YXJ0PSJ3aWR0aCI9PT1kfHwiaGVpZ2h0Ij09PWQ/MTowKSl9fWZ1bmN0aW9uIFdhKGEsYil7dmFyIGMsZCxlLGYsZztmb3IoYyBpbiBhKWlmKGQ9bi5jYW1lbENhc2UoYyksZT1iW2RdLGY9YVtjXSxuLmlzQXJyYXkoZikmJihlPWZbMV0sZj1hW2NdPWZbMF0pLGMhPT1kJiYoYVtkXT1mLGRlbGV0ZSBhW2NdKSxnPW4uY3NzSG9va3NbZF0sZyYmImV4cGFuZCJpbiBnKXtmPWcuZXhwYW5kKGYpLGRlbGV0ZSBhW2RdO2ZvcihjIGluIGYpYyBpbiBhfHwoYVtjXT1mW2NdLGJbY109ZSl9ZWxzZSBiW2RdPWV9ZnVuY3Rpb24gWGEoYSxiLGMpe3ZhciBkLGUsZj0wLGc9UWEubGVuZ3RoLGg9bi5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSBpLmVsZW19KSxpPWZ1bmN0aW9uKCl7aWYoZSlyZXR1cm4hMTtmb3IodmFyIGI9TGF8fFNhKCksYz1NYXRoLm1heCgwLGouc3RhcnRUaW1lK2ouZHVyYXRpb24tYiksZD1jL2ouZHVyYXRpb258fDAsZj0xLWQsZz0wLGk9ai50d2VlbnMubGVuZ3RoO2k+ZztnKyspai50d2VlbnNbZ10ucnVuKGYpO3JldHVybiBoLm5vdGlmeVdpdGgoYSxbaixmLGNdKSwxPmYmJmk/YzooaC5yZXNvbHZlV2l0aChhLFtqXSksITEpfSxqPWgucHJvbWlzZSh7ZWxlbTphLHByb3BzOm4uZXh0ZW5kKHt9LGIpLG9wdHM6bi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LGMpLG9yaWdpbmFsUHJvcGVydGllczpiLG9yaWdpbmFsT3B0aW9uczpjLHN0YXJ0VGltZTpMYXx8U2EoKSxkdXJhdGlvbjpjLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbihiLGMpe3ZhciBkPW4uVHdlZW4oYSxqLm9wdHMsYixjLGoub3B0cy5zcGVjaWFsRWFzaW5nW2JdfHxqLm9wdHMuZWFzaW5nKTtyZXR1cm4gai50d2VlbnMucHVzaChkKSxkfSxzdG9wOmZ1bmN0aW9uKGIpe3ZhciBjPTAsZD1iP2oudHdlZW5zLmxlbmd0aDowO2lmKGUpcmV0dXJuIHRoaXM7Zm9yKGU9ITA7ZD5jO2MrKylqLnR3ZWVuc1tjXS5ydW4oMSk7cmV0dXJuIGI/aC5yZXNvbHZlV2l0aChhLFtqLGJdKTpoLnJlamVjdFdpdGgoYSxbaixiXSksdGhpc319KSxrPWoucHJvcHM7Zm9yKFdhKGssai5vcHRzLnNwZWNpYWxFYXNpbmcpO2c+ZjtmKyspaWYoZD1RYVtmXS5jYWxsKGosYSxrLGoub3B0cykpcmV0dXJuIGQ7cmV0dXJuIG4ubWFwKGssVWEsaiksbi5pc0Z1bmN0aW9uKGoub3B0cy5zdGFydCkmJmoub3B0cy5zdGFydC5jYWxsKGEsaiksbi5meC50aW1lcihuLmV4dGVuZChpLHtlbGVtOmEsYW5pbTpqLHF1ZXVlOmoub3B0cy5xdWV1ZX0pKSxqLnByb2dyZXNzKGoub3B0cy5wcm9ncmVzcykuZG9uZShqLm9wdHMuZG9uZSxqLm9wdHMuY29tcGxldGUpLmZhaWwoai5vcHRzLmZhaWwpLmFsd2F5cyhqLm9wdHMuYWx3YXlzKX1uLkFuaW1hdGlvbj1uLmV4dGVuZChYYSx7dHdlZW5lcjpmdW5jdGlvbihhLGIpe24uaXNGdW5jdGlvbihhKT8oYj1hLGE9WyIqIl0pOmE9YS5zcGxpdCgiICIpO2Zvcih2YXIgYyxkPTAsZT1hLmxlbmd0aDtlPmQ7ZCsrKWM9YVtkXSxSYVtjXT1SYVtjXXx8W10sUmFbY10udW5zaGlmdChiKX0scHJlZmlsdGVyOmZ1bmN0aW9uKGEsYil7Yj9RYS51bnNoaWZ0KGEpOlFhLnB1c2goYSl9fSksbi5zcGVlZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmIm9iamVjdCI9PXR5cGVvZiBhP24uZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8bi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFuLmlzRnVuY3Rpb24oYikmJmJ9O3JldHVybiBkLmR1cmF0aW9uPW4uZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBkLmR1cmF0aW9uP2QuZHVyYXRpb246ZC5kdXJhdGlvbiBpbiBuLmZ4LnNwZWVkcz9uLmZ4LnNwZWVkc1tkLmR1cmF0aW9uXTpuLmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ZC5xdWV1ZXx8ZC5xdWV1ZT09PSEwKSYmKGQucXVldWU9ImZ4IiksZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bi5pc0Z1bmN0aW9uKGQub2xkKSYmZC5vbGQuY2FsbCh0aGlzKSxkLnF1ZXVlJiZuLmRlcXVldWUodGhpcyxkLnF1ZXVlKX0sZH0sbi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5maWx0ZXIoUykuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9bi5pc0VtcHR5T2JqZWN0KGEpLGY9bi5zcGVlZChiLGMsZCksZz1mdW5jdGlvbigpe3ZhciBiPVhhKHRoaXMsbi5leHRlbmQoe30sYSksZik7KGV8fEwuZ2V0KHRoaXMsImZpbmlzaCIpKSYmYi5zdG9wKCEwKX07cmV0dXJuIGcuZmluaXNoPWcsZXx8Zi5xdWV1ZT09PSExP3RoaXMuZWFjaChnKTp0aGlzLnF1ZXVlKGYucXVldWUsZyl9LHN0b3A6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWZ1bmN0aW9uKGEpe3ZhciBiPWEuc3RvcDtkZWxldGUgYS5zdG9wLGIoYyl9O3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGM9YixiPWEsYT12b2lkIDApLGImJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj0hMCxlPW51bGwhPWEmJmErInF1ZXVlSG9va3MiLGY9bi50aW1lcnMsZz1MLmdldCh0aGlzKTtpZihlKWdbZV0mJmdbZV0uc3RvcCYmZChnW2VdKTtlbHNlIGZvcihlIGluIGcpZ1tlXSYmZ1tlXS5zdG9wJiZQYS50ZXN0KGUpJiZkKGdbZV0pO2ZvcihlPWYubGVuZ3RoO2UtLTspZltlXS5lbGVtIT09dGhpc3x8bnVsbCE9YSYmZltlXS5xdWV1ZSE9PWF8fChmW2VdLmFuaW0uc3RvcChjKSxiPSExLGYuc3BsaWNlKGUsMSkpOyhifHwhYykmJm4uZGVxdWV1ZSh0aGlzLGEpfSl9LGZpbmlzaDpmdW5jdGlvbihhKXtyZXR1cm4gYSE9PSExJiYoYT1hfHwiZngiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYixjPUwuZ2V0KHRoaXMpLGQ9Y1thKyJxdWV1ZSJdLGU9Y1thKyJxdWV1ZUhvb2tzIl0sZj1uLnRpbWVycyxnPWQ/ZC5sZW5ndGg6MDtmb3IoYy5maW5pc2g9ITAsbi5xdWV1ZSh0aGlzLGEsW10pLGUmJmUuc3RvcCYmZS5zdG9wLmNhbGwodGhpcywhMCksYj1mLmxlbmd0aDtiLS07KWZbYl0uZWxlbT09PXRoaXMmJmZbYl0ucXVldWU9PT1hJiYoZltiXS5hbmltLnN0b3AoITApLGYuc3BsaWNlKGIsMSkpO2ZvcihiPTA7Zz5iO2IrKylkW2JdJiZkW2JdLmZpbmlzaCYmZFtiXS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgYy5maW5pc2h9KX19KSxuLmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGEsYil7dmFyIGM9bi5mbltiXTtuLmZuW2JdPWZ1bmN0aW9uKGEsZCxlKXtyZXR1cm4gbnVsbD09YXx8ImJvb2xlYW4iPT10eXBlb2YgYT9jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoVGEoYiwhMCksYSxkLGUpfX0pLG4uZWFjaCh7c2xpZGVEb3duOlRhKCJzaG93Iiksc2xpZGVVcDpUYSgiaGlkZSIpLHNsaWRlVG9nZ2xlOlRhKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGEsYil7bi5mblthXT1mdW5jdGlvbihhLGMsZCl7cmV0dXJuIHRoaXMuYW5pbWF0ZShiLGEsYyxkKX19KSxuLnRpbWVycz1bXSxuLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgYSxiPTAsYz1uLnRpbWVycztmb3IoTGE9bi5ub3coKTtiPGMubGVuZ3RoO2IrKylhPWNbYl0sYSgpfHxjW2JdIT09YXx8Yy5zcGxpY2UoYi0tLDEpO2MubGVuZ3RofHxuLmZ4LnN0b3AoKSxMYT12b2lkIDB9LG4uZngudGltZXI9ZnVuY3Rpb24oYSl7bi50aW1lcnMucHVzaChhKSxhKCk/bi5meC5zdGFydCgpOm4udGltZXJzLnBvcCgpfSxuLmZ4LmludGVydmFsPTEzLG4uZnguc3RhcnQ9ZnVuY3Rpb24oKXtNYXx8KE1hPXNldEludGVydmFsKG4uZngudGljayxuLmZ4LmludGVydmFsKSl9LG4uZnguc3RvcD1mdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoTWEpLE1hPW51bGx9LG4uZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LG4uZm4uZGVsYXk9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYT1uLmZ4P24uZnguc3BlZWRzW2FdfHxhOmEsYj1ifHwiZngiLHRoaXMucXVldWUoYixmdW5jdGlvbihiLGMpe3ZhciBkPXNldFRpbWVvdXQoYixhKTtjLnN0b3A9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoZCl9fSl9LGZ1bmN0aW9uKCl7dmFyIGE9bC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGI9bC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxjPWIuYXBwZW5kQ2hpbGQobC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7YS50eXBlPSJjaGVja2JveCIsay5jaGVja09uPSIiIT09YS52YWx1ZSxrLm9wdFNlbGVjdGVkPWMuc2VsZWN0ZWQsYi5kaXNhYmxlZD0hMCxrLm9wdERpc2FibGVkPSFjLmRpc2FibGVkLGE9bC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLGEudmFsdWU9InQiLGEudHlwZT0icmFkaW8iLGsucmFkaW9WYWx1ZT0idCI9PT1hLnZhbHVlfSgpO3ZhciBZYSxaYSwkYT1uLmV4cHIuYXR0ckhhbmRsZTtuLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsbi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtuLnJlbW92ZUF0dHIodGhpcyxhKX0pfX0pLG4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGY9YS5ub2RlVHlwZTtpZihhJiYzIT09ZiYmOCE9PWYmJjIhPT1mKXJldHVybiB0eXBlb2YgYS5nZXRBdHRyaWJ1dGU9PT1VP24ucHJvcChhLGIsYyk6KDE9PT1mJiZuLmlzWE1MRG9jKGEpfHwoYj1iLnRvTG93ZXJDYXNlKCksZD1uLmF0dHJIb29rc1tiXXx8KG4uZXhwci5tYXRjaC5ib29sLnRlc3QoYik/WmE6WWEpKSwKdm9pZCAwPT09Yz9kJiYiZ2V0ImluIGQmJm51bGwhPT0oZT1kLmdldChhLGIpKT9lOihlPW4uZmluZC5hdHRyKGEsYiksbnVsbD09ZT92b2lkIDA6ZSk6bnVsbCE9PWM/ZCYmInNldCJpbiBkJiZ2b2lkIDAhPT0oZT1kLnNldChhLGMsYikpP2U6KGEuc2V0QXR0cmlidXRlKGIsYysiIiksYyk6dm9pZCBuLnJlbW92ZUF0dHIoYSxiKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGU9MCxmPWImJmIubWF0Y2goRSk7aWYoZiYmMT09PWEubm9kZVR5cGUpd2hpbGUoYz1mW2UrK10pZD1uLnByb3BGaXhbY118fGMsbi5leHByLm1hdGNoLmJvb2wudGVzdChjKSYmKGFbZF09ITEpLGEucmVtb3ZlQXR0cmlidXRlKGMpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKCFrLnJhZGlvVmFsdWUmJiJyYWRpbyI9PT1iJiZuLm5vZGVOYW1lKGEsImlucHV0Iikpe3ZhciBjPWEudmFsdWU7cmV0dXJuIGEuc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKSxifX19fX0pLFphPXtzZXQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPT09ITE/bi5yZW1vdmVBdHRyKGEsYyk6YS5zZXRBdHRyaWJ1dGUoYyxjKSxjfX0sbi5lYWNoKG4uZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGEsYil7dmFyIGM9JGFbYl18fG4uZmluZC5hdHRyOyRhW2JdPWZ1bmN0aW9uKGEsYixkKXt2YXIgZSxmO3JldHVybiBkfHwoZj0kYVtiXSwkYVtiXT1lLGU9bnVsbCE9YyhhLGIsZCk/Yi50b0xvd2VyQ2FzZSgpOm51bGwsJGFbYl09ZiksZX19KTt2YXIgX2E9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTtuLmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihhLGIpe3JldHVybiBKKHRoaXMsbi5wcm9wLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tuLnByb3BGaXhbYV18fGFdfSl9fSksbi5leHRlbmQoe3Byb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlLGYsZz1hLm5vZGVUeXBlO2lmKGEmJjMhPT1nJiY4IT09ZyYmMiE9PWcpcmV0dXJuIGY9MSE9PWd8fCFuLmlzWE1MRG9jKGEpLGYmJihiPW4ucHJvcEZpeFtiXXx8YixlPW4ucHJvcEhvb2tzW2JdKSx2b2lkIDAhPT1jP2UmJiJzZXQiaW4gZSYmdm9pZCAwIT09KGQ9ZS5zZXQoYSxjLGIpKT9kOmFbYl09YzplJiYiZ2V0ImluIGUmJm51bGwhPT0oZD1lLmdldChhLGIpKT9kOmFbYl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fF9hLnRlc3QoYS5ub2RlTmFtZSl8fGEuaHJlZj9hLnRhYkluZGV4Oi0xfX19fSksay5vcHRTZWxlY3RlZHx8KG4ucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLnBhcmVudE5vZGUmJmIucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9fSksbi5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtuLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSk7dmFyIGFiPS9bXHRcclxuXGZdL2c7bi5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPSJzdHJpbmciPT10eXBlb2YgYSYmYSxpPTAsaj10aGlzLmxlbmd0aDtpZihuLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtuKHRoaXMpLmFkZENsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGgpZm9yKGI9KGF8fCIiKS5tYXRjaChFKXx8W107aj5pO2krKylpZihjPXRoaXNbaV0sZD0xPT09Yy5ub2RlVHlwZSYmKGMuY2xhc3NOYW1lPygiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKGFiLCIgIik6IiAiKSl7Zj0wO3doaWxlKGU9YltmKytdKWQuaW5kZXhPZigiICIrZSsiICIpPDAmJihkKz1lKyIgIik7Zz1uLnRyaW0oZCksYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGEmJmEsaT0wLGo9dGhpcy5sZW5ndGg7aWYobi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS5yZW1vdmVDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihoKWZvcihiPShhfHwiIikubWF0Y2goRSl8fFtdO2o+aTtpKyspaWYoYz10aGlzW2ldLGQ9MT09PWMubm9kZVR5cGUmJihjLmNsYXNzTmFtZT8oIiAiK2MuY2xhc3NOYW1lKyIgIikucmVwbGFjZShhYiwiICIpOiIiKSl7Zj0wO3doaWxlKGU9YltmKytdKXdoaWxlKGQuaW5kZXhPZigiICIrZSsiICIpPj0wKWQ9ZC5yZXBsYWNlKCIgIitlKyIgIiwiICIpO2c9YT9uLnRyaW0oZCk6IiIsYy5jbGFzc05hbWUhPT1nJiYoYy5jbGFzc05hbWU9Zyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGE7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgYiYmInN0cmluZyI9PT1jP2I/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpOnRoaXMuZWFjaChuLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYyl7bih0aGlzKS50b2dnbGVDbGFzcyhhLmNhbGwodGhpcyxjLHRoaXMuY2xhc3NOYW1lLGIpLGIpfTpmdW5jdGlvbigpe2lmKCJzdHJpbmciPT09Yyl7dmFyIGIsZD0wLGU9bih0aGlzKSxmPWEubWF0Y2goRSl8fFtdO3doaWxlKGI9ZltkKytdKWUuaGFzQ2xhc3MoYik/ZS5yZW1vdmVDbGFzcyhiKTplLmFkZENsYXNzKGIpfWVsc2UoYz09PVV8fCJib29sZWFuIj09PWMpJiYodGhpcy5jbGFzc05hbWUmJkwuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8YT09PSExPyIiOkwuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iICIrYSsiICIsYz0wLGQ9dGhpcy5sZW5ndGg7ZD5jO2MrKylpZigxPT09dGhpc1tjXS5ub2RlVHlwZSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoYWIsIiAiKS5pbmRleE9mKGIpPj0wKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBiYj0vXHIvZztuLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPXRoaXNbMF07e2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGQ9bi5pc0Z1bmN0aW9uKGEpLHRoaXMuZWFjaChmdW5jdGlvbihjKXt2YXIgZTsxPT09dGhpcy5ub2RlVHlwZSYmKGU9ZD9hLmNhbGwodGhpcyxjLG4odGhpcykudmFsKCkpOmEsbnVsbD09ZT9lPSIiOiJudW1iZXIiPT10eXBlb2YgZT9lKz0iIjpuLmlzQXJyYXkoZSkmJihlPW4ubWFwKGUsZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/IiI6YSsiIn0pKSxiPW4udmFsSG9va3NbdGhpcy50eXBlXXx8bi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJzZXQiaW4gYiYmdm9pZCAwIT09Yi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KTtpZihlKXJldHVybiBiPW4udmFsSG9va3NbZS50eXBlXXx8bi52YWxIb29rc1tlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldLGImJiJnZXQiaW4gYiYmdm9pZCAwIT09KGM9Yi5nZXQoZSwidmFsdWUiKSk/YzooYz1lLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgYz9jLnJlcGxhY2UoYmIsIiIpOm51bGw9PWM/IiI6Yyl9fX0pLG4uZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9bi5maW5kLmF0dHIoYSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9Yj9iOm4udHJpbShuLnRleHQoYSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oYSl7Zm9yKHZhciBiLGMsZD1hLm9wdGlvbnMsZT1hLnNlbGVjdGVkSW5kZXgsZj0ic2VsZWN0LW9uZSI9PT1hLnR5cGV8fDA+ZSxnPWY/bnVsbDpbXSxoPWY/ZSsxOmQubGVuZ3RoLGk9MD5lP2g6Zj9lOjA7aD5pO2krKylpZihjPWRbaV0sISghYy5zZWxlY3RlZCYmaSE9PWV8fChrLm9wdERpc2FibGVkP2MuZGlzYWJsZWQ6bnVsbCE9PWMuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8Yy5wYXJlbnROb2RlLmRpc2FibGVkJiZuLm5vZGVOYW1lKGMucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKGI9bihjKS52YWwoKSxmKXJldHVybiBiO2cucHVzaChiKX1yZXR1cm4gZ30sc2V0OmZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPWEub3B0aW9ucyxmPW4ubWFrZUFycmF5KGIpLGc9ZS5sZW5ndGg7d2hpbGUoZy0tKWQ9ZVtnXSwoZC5zZWxlY3RlZD1uLmluQXJyYXkoZC52YWx1ZSxmKT49MCkmJihjPSEwKTtyZXR1cm4gY3x8KGEuc2VsZWN0ZWRJbmRleD0tMSksZn19fX0pLG4uZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe24udmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihhLGIpe3JldHVybiBuLmlzQXJyYXkoYik/YS5jaGVja2VkPW4uaW5BcnJheShuKGEpLnZhbCgpLGIpPj0wOnZvaWQgMH19LGsuY2hlY2tPbnx8KG4udmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT09YS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjphLnZhbHVlfSl9KSxuLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX19KSxuLmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGEpLm1vdXNlbGVhdmUoYnx8YSl9LGJpbmQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiB0aGlzLm9uKGEsbnVsbCxiLGMpfSx1bmJpbmQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5vZmYoYSxudWxsLGIpfSxkZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihiLGEsYyxkKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGEsIioqIik6dGhpcy5vZmYoYixhfHwiKioiLGMpfX0pO3ZhciBjYj1uLm5vdygpLGRiPS9cPy87bi5wYXJzZUpTT049ZnVuY3Rpb24oYSl7cmV0dXJuIEpTT04ucGFyc2UoYSsiIil9LG4ucGFyc2VYTUw9ZnVuY3Rpb24oYSl7dmFyIGIsYztpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsO3RyeXtjPW5ldyBET01QYXJzZXIsYj1jLnBhcnNlRnJvbVN0cmluZyhhLCJ0ZXh0L3htbCIpfWNhdGNoKGQpe2I9dm9pZCAwfXJldHVybighYnx8Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZuLmVycm9yKCJJbnZhbGlkIFhNTDogIithKSxifTt2YXIgZWI9LyMuKiQvLGZiPS8oWz8mXSlfPVteJl0qLyxnYj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLGhiPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLGliPS9eKD86R0VUfEhFQUQpJC8samI9L15cL1wvLyxrYj0vXihbXHcuKy1dKzopKD86XC9cLyg/OlteXC8/I10qQHwpKFteXC8/IzpdKikoPzo6KFxkKyl8KXwpLyxsYj17fSxtYj17fSxuYj0iKi8iLmNvbmNhdCgiKiIpLG9iPWEubG9jYXRpb24uaHJlZixwYj1rYi5leGVjKG9iLnRvTG93ZXJDYXNlKCkpfHxbXTtmdW5jdGlvbiBxYihhKXtyZXR1cm4gZnVuY3Rpb24oYixjKXsic3RyaW5nIiE9dHlwZW9mIGImJihjPWIsYj0iKiIpO3ZhciBkLGU9MCxmPWIudG9Mb3dlckNhc2UoKS5tYXRjaChFKXx8W107aWYobi5pc0Z1bmN0aW9uKGMpKXdoaWxlKGQ9ZltlKytdKSIrIj09PWRbMF0/KGQ9ZC5zbGljZSgxKXx8IioiLChhW2RdPWFbZF18fFtdKS51bnNoaWZ0KGMpKTooYVtkXT1hW2RdfHxbXSkucHVzaChjKX19ZnVuY3Rpb24gcmIoYSxiLGMsZCl7dmFyIGU9e30sZj1hPT09bWI7ZnVuY3Rpb24gZyhoKXt2YXIgaTtyZXR1cm4gZVtoXT0hMCxuLmVhY2goYVtoXXx8W10sZnVuY3Rpb24oYSxoKXt2YXIgaj1oKGIsYyxkKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGp8fGZ8fGVbal0/Zj8hKGk9aik6dm9pZCAwOihiLmRhdGFUeXBlcy51bnNoaWZ0KGopLGcoaiksITEpfSksaX1yZXR1cm4gZyhiLmRhdGFUeXBlc1swXSl8fCFlWyIqIl0mJmcoIioiKX1mdW5jdGlvbiBzYihhLGIpe3ZhciBjLGQsZT1uLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGMgaW4gYil2b2lkIDAhPT1iW2NdJiYoKGVbY10/YTpkfHwoZD17fSkpW2NdPWJbY10pO3JldHVybiBkJiZuLmV4dGVuZCghMCxhLGQpLGF9ZnVuY3Rpb24gdGIoYSxiLGMpe3ZhciBkLGUsZixnLGg9YS5jb250ZW50cyxpPWEuZGF0YVR5cGVzO3doaWxlKCIqIj09PWlbMF0paS5zaGlmdCgpLHZvaWQgMD09PWQmJihkPWEubWltZVR5cGV8fGIuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihkKWZvcihlIGluIGgpaWYoaFtlXSYmaFtlXS50ZXN0KGQpKXtpLnVuc2hpZnQoZSk7YnJlYWt9aWYoaVswXWluIGMpZj1pWzBdO2Vsc2V7Zm9yKGUgaW4gYyl7aWYoIWlbMF18fGEuY29udmVydGVyc1tlKyIgIitpWzBdXSl7Zj1lO2JyZWFrfWd8fChnPWUpfWY9Znx8Z31yZXR1cm4gZj8oZiE9PWlbMF0mJmkudW5zaGlmdChmKSxjW2ZdKTp2b2lkIDB9ZnVuY3Rpb24gdWIoYSxiLGMsZCl7dmFyIGUsZixnLGgsaSxqPXt9LGs9YS5kYXRhVHlwZXMuc2xpY2UoKTtpZihrWzFdKWZvcihnIGluIGEuY29udmVydGVycylqW2cudG9Mb3dlckNhc2UoKV09YS5jb252ZXJ0ZXJzW2ddO2Y9ay5zaGlmdCgpO3doaWxlKGYpaWYoYS5yZXNwb25zZUZpZWxkc1tmXSYmKGNbYS5yZXNwb25zZUZpZWxkc1tmXV09YiksIWkmJmQmJmEuZGF0YUZpbHRlciYmKGI9YS5kYXRhRmlsdGVyKGIsYS5kYXRhVHlwZSkpLGk9ZixmPWsuc2hpZnQoKSlpZigiKiI9PT1mKWY9aTtlbHNlIGlmKCIqIiE9PWkmJmkhPT1mKXtpZihnPWpbaSsiICIrZl18fGpbIiogIitmXSwhZylmb3IoZSBpbiBqKWlmKGg9ZS5zcGxpdCgiICIpLGhbMV09PT1mJiYoZz1qW2krIiAiK2hbMF1dfHxqWyIqICIraFswXV0pKXtnPT09ITA/Zz1qW2VdOmpbZV0hPT0hMCYmKGY9aFswXSxrLnVuc2hpZnQoaFsxXSkpO2JyZWFrfWlmKGchPT0hMClpZihnJiZhWyJ0aHJvd3MiXSliPWcoYik7ZWxzZSB0cnl7Yj1nKGIpfWNhdGNoKGwpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOmc/bDoiTm8gY29udmVyc2lvbiBmcm9tICIraSsiIHRvICIrZn19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTpifX1uLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6b2IsdHlwZToiR0VUIixpc0xvY2FsOmhiLnRlc3QocGJbMV0pLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6bmIsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L3htbC8saHRtbDovaHRtbC8sanNvbjovanNvbi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpuLnBhcnNlSlNPTiwidGV4dCB4bWwiOm4ucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihhLGIpe3JldHVybiBiP3NiKHNiKGEsbi5hamF4U2V0dGluZ3MpLGIpOnNiKG4uYWpheFNldHRpbmdzLGEpfSxhamF4UHJlZmlsdGVyOnFiKGxiKSxhamF4VHJhbnNwb3J0OnFiKG1iKSxhamF4OmZ1bmN0aW9uKGEsYil7Im9iamVjdCI9PXR5cGVvZiBhJiYoYj1hLGE9dm9pZCAwKSxiPWJ8fHt9O3ZhciBjLGQsZSxmLGcsaCxpLGosaz1uLmFqYXhTZXR1cCh7fSxiKSxsPWsuY29udGV4dHx8ayxtPWsuY29udGV4dCYmKGwubm9kZVR5cGV8fGwuanF1ZXJ5KT9uKGwpOm4uZXZlbnQsbz1uLkRlZmVycmVkKCkscD1uLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxxPWsuc3RhdHVzQ29kZXx8e30scj17fSxzPXt9LHQ9MCx1PSJjYW5jZWxlZCIsdj17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKDI9PT10KXtpZighZil7Zj17fTt3aGlsZShiPWdiLmV4ZWMoZSkpZltiWzFdLnRvTG93ZXJDYXNlKCldPWJbMl19Yj1mW2EudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWI/bnVsbDpifSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PXQ/ZTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGEsYil7dmFyIGM9YS50b0xvd2VyQ2FzZSgpO3JldHVybiB0fHwoYT1zW2NdPXNbY118fGEsclthXT1iKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGEpe3JldHVybiB0fHwoay5taW1lVHlwZT1hKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGEpe3ZhciBiO2lmKGEpaWYoMj50KWZvcihiIGluIGEpcVtiXT1bcVtiXSxhW2JdXTtlbHNlIHYuYWx3YXlzKGFbdi5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YXx8dTtyZXR1cm4gYyYmYy5hYm9ydChiKSx4KDAsYiksdGhpc319O2lmKG8ucHJvbWlzZSh2KS5jb21wbGV0ZT1wLmFkZCx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLGsudXJsPSgoYXx8ay51cmx8fG9iKSsiIikucmVwbGFjZShlYiwiIikucmVwbGFjZShqYixwYlsxXSsiLy8iKSxrLnR5cGU9Yi5tZXRob2R8fGIudHlwZXx8ay5tZXRob2R8fGsudHlwZSxrLmRhdGFUeXBlcz1uLnRyaW0oay5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKEUpfHxbIiJdLG51bGw9PWsuY3Jvc3NEb21haW4mJihoPWtiLmV4ZWMoay51cmwudG9Mb3dlckNhc2UoKSksay5jcm9zc0RvbWFpbj0hKCFofHxoWzFdPT09cGJbMV0mJmhbMl09PT1wYlsyXSYmKGhbM118fCgiaHR0cDoiPT09aFsxXT8iODAiOiI0NDMiKSk9PT0ocGJbM118fCgiaHR0cDoiPT09cGJbMV0/IjgwIjoiNDQzIikpKSksay5kYXRhJiZrLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIGsuZGF0YSYmKGsuZGF0YT1uLnBhcmFtKGsuZGF0YSxrLnRyYWRpdGlvbmFsKSkscmIobGIsayxiLHYpLDI9PT10KXJldHVybiB2O2k9bi5ldmVudCYmay5nbG9iYWwsaSYmMD09PW4uYWN0aXZlKysmJm4uZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iiksay50eXBlPWsudHlwZS50b1VwcGVyQ2FzZSgpLGsuaGFzQ29udGVudD0haWIudGVzdChrLnR5cGUpLGQ9ay51cmwsay5oYXNDb250ZW50fHwoay5kYXRhJiYoZD1rLnVybCs9KGRiLnRlc3QoZCk/IiYiOiI/Iikray5kYXRhLGRlbGV0ZSBrLmRhdGEpLGsuY2FjaGU9PT0hMSYmKGsudXJsPWZiLnRlc3QoZCk/ZC5yZXBsYWNlKGZiLCIkMV89IitjYisrKTpkKyhkYi50ZXN0KGQpPyImIjoiPyIpKyJfPSIrY2IrKykpLGsuaWZNb2RpZmllZCYmKG4ubGFzdE1vZGlmaWVkW2RdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixuLmxhc3RNb2RpZmllZFtkXSksbi5ldGFnW2RdJiZ2LnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLG4uZXRhZ1tkXSkpLChrLmRhdGEmJmsuaGFzQ29udGVudCYmay5jb250ZW50VHlwZSE9PSExfHxiLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGsuY29udGVudFR5cGUpLHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixrLmRhdGFUeXBlc1swXSYmay5hY2NlcHRzW2suZGF0YVR5cGVzWzBdXT9rLmFjY2VwdHNbay5kYXRhVHlwZXNbMF1dKygiKiIhPT1rLmRhdGFUeXBlc1swXT8iLCAiK25iKyI7IHE9MC4wMSI6IiIpOmsuYWNjZXB0c1siKiJdKTtmb3IoaiBpbiBrLmhlYWRlcnMpdi5zZXRSZXF1ZXN0SGVhZGVyKGosay5oZWFkZXJzW2pdKTtpZihrLmJlZm9yZVNlbmQmJihrLmJlZm9yZVNlbmQuY2FsbChsLHYsayk9PT0hMXx8Mj09PXQpKXJldHVybiB2LmFib3J0KCk7dT0iYWJvcnQiO2ZvcihqIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KXZbal0oa1tqXSk7aWYoYz1yYihtYixrLGIsdikpe3YucmVhZHlTdGF0ZT0xLGkmJm0udHJpZ2dlcigiYWpheFNlbmQiLFt2LGtdKSxrLmFzeW5jJiZrLnRpbWVvdXQ+MCYmKGc9c2V0VGltZW91dChmdW5jdGlvbigpe3YuYWJvcnQoInRpbWVvdXQiKX0say50aW1lb3V0KSk7dHJ5e3Q9MSxjLnNlbmQocix4KX1jYXRjaCh3KXtpZighKDI+dCkpdGhyb3cgdzt4KC0xLHcpfX1lbHNlIHgoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIHgoYSxiLGYsaCl7dmFyIGoscixzLHUsdyx4PWI7MiE9PXQmJih0PTIsZyYmY2xlYXJUaW1lb3V0KGcpLGM9dm9pZCAwLGU9aHx8IiIsdi5yZWFkeVN0YXRlPWE+MD80OjAsaj1hPj0yMDAmJjMwMD5hfHwzMDQ9PT1hLGYmJih1PXRiKGssdixmKSksdT11YihrLHUsdixqKSxqPyhrLmlmTW9kaWZpZWQmJih3PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSx3JiYobi5sYXN0TW9kaWZpZWRbZF09dyksdz12LmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIiksdyYmKG4uZXRhZ1tkXT13KSksMjA0PT09YXx8IkhFQUQiPT09ay50eXBlP3g9Im5vY29udGVudCI6MzA0PT09YT94PSJub3Rtb2RpZmllZCI6KHg9dS5zdGF0ZSxyPXUuZGF0YSxzPXUuZXJyb3Isaj0hcykpOihzPXgsKGF8fCF4KSYmKHg9ImVycm9yIiwwPmEmJihhPTApKSksdi5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9KGJ8fHgpKyIiLGo/by5yZXNvbHZlV2l0aChsLFtyLHgsdl0pOm8ucmVqZWN0V2l0aChsLFt2LHgsc10pLHYuc3RhdHVzQ29kZShxKSxxPXZvaWQgMCxpJiZtLnRyaWdnZXIoaj8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFt2LGssaj9yOnNdKSxwLmZpcmVXaXRoKGwsW3YseF0pLGkmJihtLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3Ysa10pLC0tbi5hY3RpdmV8fG4uZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiB2fSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gbi5nZXQoYSxiLGMsImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIG4uZ2V0KGEsdm9pZCAwLGIsInNjcmlwdCIpfX0pLG4uZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihhLGIpe25bYl09ZnVuY3Rpb24oYSxjLGQsZSl7cmV0dXJuIG4uaXNGdW5jdGlvbihjKSYmKGU9ZXx8ZCxkPWMsYz12b2lkIDApLG4uYWpheCh7dXJsOmEsdHlwZTpiLGRhdGFUeXBlOmUsZGF0YTpjLHN1Y2Nlc3M6ZH0pfX0pLG4uX2V2YWxVcmw9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uYWpheCh7dXJsOmEsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sbi5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIG4uaXNGdW5jdGlvbihhKT90aGlzLmVhY2goZnVuY3Rpb24oYil7bih0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pOih0aGlzWzBdJiYoYj1uKGEsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZiLmluc2VydEJlZm9yZSh0aGlzWzBdKSxiLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXM7d2hpbGUoYS5maXJzdEVsZW1lbnRDaGlsZClhPWEuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcykpLHRoaXMpfSx3cmFwSW5uZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZWFjaChuLmlzRnVuY3Rpb24oYSk/ZnVuY3Rpb24oYil7bih0aGlzKS53cmFwSW5uZXIoYS5jYWxsKHRoaXMsYikpfTpmdW5jdGlvbigpe3ZhciBiPW4odGhpcyksYz1iLmNvbnRlbnRzKCk7Yy5sZW5ndGg/Yy53cmFwQWxsKGEpOmIuYXBwZW5kKGEpfSl9LHdyYXA6ZnVuY3Rpb24oYSl7dmFyIGI9bi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYyl7bih0aGlzKS53cmFwQWxsKGI/YS5jYWxsKHRoaXMsYyk6YSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe24ubm9kZU5hbWUodGhpcywiYm9keSIpfHxuKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KSxuLmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGg8PTAmJmEub2Zmc2V0SGVpZ2h0PD0wfSxuLmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGEpe3JldHVybiFuLmV4cHIuZmlsdGVycy5oaWRkZW4oYSl9O3ZhciB2Yj0vJTIwL2csd2I9L1xbXF0kLyx4Yj0vXHI/XG4vZyx5Yj0vXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksemI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO2Z1bmN0aW9uIEFiKGEsYixjLGQpe3ZhciBlO2lmKG4uaXNBcnJheShiKSluLmVhY2goYixmdW5jdGlvbihiLGUpe2N8fHdiLnRlc3QoYSk/ZChhLGUpOkFiKGErIlsiKygib2JqZWN0Ij09dHlwZW9mIGU/YjoiIikrIl0iLGUsYyxkKX0pO2Vsc2UgaWYoY3x8Im9iamVjdCIhPT1uLnR5cGUoYikpZChhLGIpO2Vsc2UgZm9yKGUgaW4gYilBYihhKyJbIitlKyJdIixiW2VdLGMsZCl9bi5wYXJhbT1mdW5jdGlvbihhLGIpe3ZhciBjLGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9bi5pc0Z1bmN0aW9uKGIpP2IoKTpudWxsPT1iPyIiOmIsZFtkLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGEpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYil9O2lmKHZvaWQgMD09PWImJihiPW4uYWpheFNldHRpbmdzJiZuLmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCksbi5pc0FycmF5KGEpfHxhLmpxdWVyeSYmIW4uaXNQbGFpbk9iamVjdChhKSluLmVhY2goYSxmdW5jdGlvbigpe2UodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoYyBpbiBhKUFiKGMsYVtjXSxiLGUpO3JldHVybiBkLmpvaW4oIiYiKS5yZXBsYWNlKHZiLCIrIil9LG4uZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gbi5wYXJhbSh0aGlzLnNlcmlhbGl6ZUFycmF5KCkpfSxzZXJpYWxpemVBcnJheTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPW4ucHJvcCh0aGlzLCJlbGVtZW50cyIpO3JldHVybiBhP24ubWFrZUFycmF5KGEpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgYT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIW4odGhpcykuaXMoIjpkaXNhYmxlZCIpJiZ6Yi50ZXN0KHRoaXMubm9kZU5hbWUpJiYheWIudGVzdChhKSYmKHRoaXMuY2hlY2tlZHx8IVQudGVzdChhKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1uKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1jP251bGw6bi5pc0FycmF5KGMpP24ubWFwKGMsZnVuY3Rpb24oYSl7cmV0dXJue25hbWU6Yi5uYW1lLHZhbHVlOmEucmVwbGFjZSh4YiwiXHJcbiIpfX0pOntuYW1lOmIubmFtZSx2YWx1ZTpjLnJlcGxhY2UoeGIsIlxyXG4iKX19KS5nZXQoKX19KSxuLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1jYXRjaChhKXt9fTt2YXIgQmI9MCxDYj17fSxEYj17MDoyMDAsMTIyMzoyMDR9LEViPW4uYWpheFNldHRpbmdzLnhocigpO2EuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixmdW5jdGlvbigpe2Zvcih2YXIgYSBpbiBDYilDYlthXSgpfSksay5jb3JzPSEhRWImJiJ3aXRoQ3JlZGVudGlhbHMiaW4gRWIsay5hamF4PUViPSEhRWIsbi5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGEpe3ZhciBiO3JldHVybiBrLmNvcnN8fEViJiYhYS5jcm9zc0RvbWFpbj97c2VuZDpmdW5jdGlvbihjLGQpe3ZhciBlLGY9YS54aHIoKSxnPSsrQmI7aWYoZi5vcGVuKGEudHlwZSxhLnVybCxhLmFzeW5jLGEudXNlcm5hbWUsYS5wYXNzd29yZCksYS54aHJGaWVsZHMpZm9yKGUgaW4gYS54aHJGaWVsZHMpZltlXT1hLnhockZpZWxkc1tlXTthLm1pbWVUeXBlJiZmLm92ZXJyaWRlTWltZVR5cGUmJmYub3ZlcnJpZGVNaW1lVHlwZShhLm1pbWVUeXBlKSxhLmNyb3NzRG9tYWlufHxjWyJYLVJlcXVlc3RlZC1XaXRoIl18fChjWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7Zm9yKGUgaW4gYylmLnNldFJlcXVlc3RIZWFkZXIoZSxjW2VdKTtiPWZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigpe2ImJihkZWxldGUgQ2JbZ10sYj1mLm9ubG9hZD1mLm9uZXJyb3I9bnVsbCwiYWJvcnQiPT09YT9mLmFib3J0KCk6ImVycm9yIj09PWE/ZChmLnN0YXR1cyxmLnN0YXR1c1RleHQpOmQoRGJbZi5zdGF0dXNdfHxmLnN0YXR1cyxmLnN0YXR1c1RleHQsInN0cmluZyI9PXR5cGVvZiBmLnJlc3BvbnNlVGV4dD97dGV4dDpmLnJlc3BvbnNlVGV4dH06dm9pZCAwLGYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LGYub25sb2FkPWIoKSxmLm9uZXJyb3I9YigiZXJyb3IiKSxiPUNiW2ddPWIoImFib3J0Iik7dHJ5e2Yuc2VuZChhLmhhc0NvbnRlbnQmJmEuZGF0YXx8bnVsbCl9Y2F0Y2goaCl7aWYoYil0aHJvdyBofX0sYWJvcnQ6ZnVuY3Rpb24oKXtiJiZiKCl9fTp2b2lkIDB9KSxuLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGEpe3JldHVybiBuLmdsb2JhbEV2YWwoYSksYX19fSksbi5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGEpe3ZvaWQgMD09PWEuY2FjaGUmJihhLmNhY2hlPSExKSxhLmNyb3NzRG9tYWluJiYoYS50eXBlPSJHRVQiKX0pLG4uYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihhKXtpZihhLmNyb3NzRG9tYWluKXt2YXIgYixjO3JldHVybntzZW5kOmZ1bmN0aW9uKGQsZSl7Yj1uKCI8c2NyaXB0PiIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6YS5zY3JpcHRDaGFyc2V0LHNyYzphLnVybH0pLm9uKCJsb2FkIGVycm9yIixjPWZ1bmN0aW9uKGEpe2IucmVtb3ZlKCksYz1udWxsLGEmJmUoImVycm9yIj09PWEudHlwZT80MDQ6MjAwLGEudHlwZSl9KSxsLmhlYWQuYXBwZW5kQ2hpbGQoYlswXSl9LGFib3J0OmZ1bmN0aW9uKCl7YyYmYygpfX19fSk7dmFyIEZiPVtdLEdiPS8oPSlcPyg/PSZ8JCl8XD9cPy87bi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBhPUZiLnBvcCgpfHxuLmV4cGFuZG8rIl8iK2NiKys7cmV0dXJuIHRoaXNbYV09ITAsYX19KSxuLmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKGIsYyxkKXt2YXIgZSxmLGcsaD1iLmpzb25wIT09ITEmJihHYi50ZXN0KGIudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIGIuZGF0YSYmIShiLmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJkdiLnRlc3QoYi5kYXRhKSYmImRhdGEiKTtyZXR1cm4gaHx8Impzb25wIj09PWIuZGF0YVR5cGVzWzBdPyhlPWIuanNvbnBDYWxsYmFjaz1uLmlzRnVuY3Rpb24oYi5qc29ucENhbGxiYWNrKT9iLmpzb25wQ2FsbGJhY2soKTpiLmpzb25wQ2FsbGJhY2ssaD9iW2hdPWJbaF0ucmVwbGFjZShHYiwiJDEiK2UpOmIuanNvbnAhPT0hMSYmKGIudXJsKz0oZGIudGVzdChiLnVybCk/IiYiOiI/IikrYi5qc29ucCsiPSIrZSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIGd8fG4uZXJyb3IoZSsiIHdhcyBub3QgY2FsbGVkIiksZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iLGY9YVtlXSxhW2VdPWZ1bmN0aW9uKCl7Zz1hcmd1bWVudHN9LGQuYWx3YXlzKGZ1bmN0aW9uKCl7YVtlXT1mLGJbZV0mJihiLmpzb25wQ2FsbGJhY2s9Yy5qc29ucENhbGxiYWNrLEZiLnB1c2goZSkpLGcmJm4uaXNGdW5jdGlvbihmKSYmZihnWzBdKSxnPWY9dm9pZCAwfSksInNjcmlwdCIpOnZvaWQgMH0pLG4ucGFyc2VIVE1MPWZ1bmN0aW9uKGEsYixjKXtpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIGImJihjPWIsYj0hMSksYj1ifHxsO3ZhciBkPXYuZXhlYyhhKSxlPSFjJiZbXTtyZXR1cm4gZD9bYi5jcmVhdGVFbGVtZW50KGRbMV0pXTooZD1uLmJ1aWxkRnJhZ21lbnQoW2FdLGIsZSksZSYmZS5sZW5ndGgmJm4oZSkucmVtb3ZlKCksbi5tZXJnZShbXSxkLmNoaWxkTm9kZXMpKX07dmFyIEhiPW4uZm4ubG9hZDtuLmZuLmxvYWQ9ZnVuY3Rpb24oYSxiLGMpe2lmKCJzdHJpbmciIT10eXBlb2YgYSYmSGIpcmV0dXJuIEhiLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZCxlLGYsZz10aGlzLGg9YS5pbmRleE9mKCIgIik7cmV0dXJuIGg+PTAmJihkPW4udHJpbShhLnNsaWNlKGgpKSxhPWEuc2xpY2UoMCxoKSksbi5pc0Z1bmN0aW9uKGIpPyhjPWIsYj12b2lkIDApOmImJiJvYmplY3QiPT10eXBlb2YgYiYmKGU9IlBPU1QiKSxnLmxlbmd0aD4wJiZuLmFqYXgoe3VybDphLHR5cGU6ZSxkYXRhVHlwZToiaHRtbCIsZGF0YTpifSkuZG9uZShmdW5jdGlvbihhKXtmPWFyZ3VtZW50cyxnLmh0bWwoZD9uKCI8ZGl2PiIpLmFwcGVuZChuLnBhcnNlSFRNTChhKSkuZmluZChkKTphKX0pLmNvbXBsZXRlKGMmJmZ1bmN0aW9uKGEsYil7Zy5lYWNoKGMsZnx8W2EucmVzcG9uc2VUZXh0LGIsYV0pfSksdGhpc30sbi5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oYSxiKXtuLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksbi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIG4uZ3JlcChuLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH07dmFyIEliPWEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2Z1bmN0aW9uIEpiKGEpe3JldHVybiBuLmlzV2luZG93KGEpP2E6OT09PWEubm9kZVR5cGUmJmEuZGVmYXVsdFZpZXd9bi5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpLGosaz1uLmNzcyhhLCJwb3NpdGlvbiIpLGw9bihhKSxtPXt9OyJzdGF0aWMiPT09ayYmKGEuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksaD1sLm9mZnNldCgpLGY9bi5jc3MoYSwidG9wIiksaT1uLmNzcyhhLCJsZWZ0Iiksaj0oImFic29sdXRlIj09PWt8fCJmaXhlZCI9PT1rKSYmKGYraSkuaW5kZXhPZigiYXV0byIpPi0xLGo/KGQ9bC5wb3NpdGlvbigpLGc9ZC50b3AsZT1kLmxlZnQpOihnPXBhcnNlRmxvYXQoZil8fDAsZT1wYXJzZUZsb2F0KGkpfHwwKSxuLmlzRnVuY3Rpb24oYikmJihiPWIuY2FsbChhLGMsaCkpLG51bGwhPWIudG9wJiYobS50b3A9Yi50b3AtaC50b3ArZyksbnVsbCE9Yi5sZWZ0JiYobS5sZWZ0PWIubGVmdC1oLmxlZnQrZSksInVzaW5nImluIGI/Yi51c2luZy5jYWxsKGEsbSk6bC5jc3MobSl9fSxuLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWE/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oYil7bi5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsYSxiKX0pO3ZhciBiLGMsZD10aGlzWzBdLGU9e3RvcDowLGxlZnQ6MH0sZj1kJiZkLm93bmVyRG9jdW1lbnQ7aWYoZilyZXR1cm4gYj1mLmRvY3VtZW50RWxlbWVudCxuLmNvbnRhaW5zKGIsZCk/KHR5cGVvZiBkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PVUmJihlPWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGM9SmIoZikse3RvcDplLnRvcCtjLnBhZ2VZT2Zmc2V0LWIuY2xpZW50VG9wLGxlZnQ6ZS5sZWZ0K2MucGFnZVhPZmZzZXQtYi5jbGllbnRMZWZ0fSk6ZX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgYSxiLGM9dGhpc1swXSxkPXt0b3A6MCxsZWZ0OjB9O3JldHVybiJmaXhlZCI9PT1uLmNzcyhjLCJwb3NpdGlvbiIpP2I9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooYT10aGlzLm9mZnNldFBhcmVudCgpLGI9dGhpcy5vZmZzZXQoKSxuLm5vZGVOYW1lKGFbMF0sImh0bWwiKXx8KGQ9YS5vZmZzZXQoKSksZC50b3ArPW4uY3NzKGFbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksZC5sZWZ0Kz1uLmNzcyhhWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDpiLnRvcC1kLnRvcC1uLmNzcyhjLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OmIubGVmdC1kLmxlZnQtbi5jc3MoYywibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBhPXRoaXMub2Zmc2V0UGFyZW50fHxJYjt3aGlsZShhJiYhbi5ub2RlTmFtZShhLCJodG1sIikmJiJzdGF0aWMiPT09bi5jc3MoYSwicG9zaXRpb24iKSlhPWEub2Zmc2V0UGFyZW50O3JldHVybiBhfHxJYn0pfX0pLG4uZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihiLGMpe3ZhciBkPSJwYWdlWU9mZnNldCI9PT1jO24uZm5bYl09ZnVuY3Rpb24oZSl7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihiLGUsZil7dmFyIGc9SmIoYik7cmV0dXJuIHZvaWQgMD09PWY/Zz9nW2NdOmJbZV06dm9pZChnP2cuc2Nyb2xsVG8oZD9hLnBhZ2VYT2Zmc2V0OmYsZD9mOmEucGFnZVlPZmZzZXQpOmJbZV09Zil9LGIsZSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLG4uZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihhLGIpe24uY3NzSG9va3NbYl09eWEoay5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGEsYyl7cmV0dXJuIGM/KGM9eGEoYSxiKSx2YS50ZXN0KGMpP24oYSkucG9zaXRpb24oKVtiXSsicHgiOmMpOnZvaWQgMH0pfSksbi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oYSxiKXtuLmVhY2goe3BhZGRpbmc6ImlubmVyIithLGNvbnRlbnQ6YiwiIjoib3V0ZXIiK2F9LGZ1bmN0aW9uKGMsZCl7bi5mbltkXT1mdW5jdGlvbihkLGUpe3ZhciBmPWFyZ3VtZW50cy5sZW5ndGgmJihjfHwiYm9vbGVhbiIhPXR5cGVvZiBkKSxnPWN8fChkPT09ITB8fGU9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIEoodGhpcyxmdW5jdGlvbihiLGMsZCl7dmFyIGU7cmV0dXJuIG4uaXNXaW5kb3coYik/Yi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbImNsaWVudCIrYV06OT09PWIubm9kZVR5cGU/KGU9Yi5kb2N1bWVudEVsZW1lbnQsTWF0aC5tYXgoYi5ib2R5WyJzY3JvbGwiK2FdLGVbInNjcm9sbCIrYV0sYi5ib2R5WyJvZmZzZXQiK2FdLGVbIm9mZnNldCIrYV0sZVsiY2xpZW50IithXSkpOnZvaWQgMD09PWQ/bi5jc3MoYixjLGcpOm4uc3R5bGUoYixjLGQsZyl9LGIsZj9kOnZvaWQgMCxmLG51bGwpfX0pfSksbi5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSxuLmZuLmFuZFNlbGY9bi5mbi5hZGRCYWNrLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiBufSk7dmFyIEtiPWEualF1ZXJ5LExiPWEuJDtyZXR1cm4gbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKGIpe3JldHVybiBhLiQ9PT1uJiYoYS4kPUxiKSxiJiZhLmpRdWVyeT09PW4mJihhLmpRdWVyeT1LYiksbn0sdHlwZW9mIGI9PT1VJiYoYS5qUXVlcnk9YS4kPW4pLG59KTsK"}]},{"name":"Direct Google Images","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https?\\:\\/\\/(www|encrypted)\\.google\\./"],"orig_matches":[],"orig_noframes":true,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1479476075894,"data":{}},"enabled":true,"position":5,"file_url":"https://rawgit.com/zanetu/direct_google_images/beta/direct_google_images.user.js","uuid":"e740f07b-df0c-4a85-ab0c-05d7d8572962","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBEaXJlY3QgR29vZ2xlIEltYWdlcwovLyBAbmFtZXNwYWNlICAgIGh0dHA6Ly9ncmVhc3lmb3JrLm9yZy9lbi91c2Vycy80NjEKLy8gQHZlcnNpb24gICAgICAwLjk5Ci8vIEBkZXNjcmlwdGlvbiAgUHJvdmlkZXMgZGlyZWN0IGxpbmtzIGluIEdvb2dsZSBJbWFnZXMuCi8vIEBpbmNsdWRlICAgICAgL15odHRwcz9cOlwvXC8od3d3fGVuY3J5cHRlZClcLmdvb2dsZVwuLwovLyBAYXV0aG9yICAgICAgIHphbmV0dQovLyBAbGljZW5zZSAgICAgIEdQTCB2ZXJzaW9uIDIgb3IgYW55IGxhdGVyIHZlcnNpb247IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dAovLyBAZ3JhbnQgICAgICAgIEdNX2FkZFN0eWxlCi8vIEBydW4tYXQgICAgICAgZG9jdW1lbnQtc3RhcnQKLy8gQG5vZnJhbWVzCi8vID09L1VzZXJTY3JpcHQ9PQoKLy9kbyBub3QgcnVuIGluIGZyYW1lcyBvciBpZnJhbWVzCmlmKHdpbmRvdy50b3AgPT0gd2luZG93LnNlbGYpIHsKCXZhciBSRSA9IC9pbWdyZXNcP2ltZ3VybFw9KGh0dHAuKz8pXCZpbWdyZWZ1cmxcPShodHRwLis/KShcJnwkKS9pCgl2YXIgUkVfU09VUkNFID0gL3VybFw/KD86Lio/XCYpKj91cmxcPShodHRwLis/KShcJnwkKS9pCgl2YXIgV0FUQ0hfRVZFTlRTID0gWydtb3VzZWVudGVyJywgJ21vdXNlZG93bicsICdjbGljaycsICdmb2N1cycsICd0b3VjaHN0YXJ0J10KCXZhciBjbGlja0NvdW50ID0gMAoKCWZ1bmN0aW9uIGRkKHVybCkgewoJCXZhciBkMSA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwpLCBkMgoJCXRyeSB7CgkJCWQyID0gZGVjb2RlVVJJQ29tcG9uZW50KGQxKQoJCX0KCQljYXRjaChtYWxmb3JtZWQpIHsKCQkJcmV0dXJuIGQxCgkJfQoJCXJldHVybiBkMgoJfQoKCWZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudCwgbWF0Y2hGdW5jdGlvbiwgbWF4TGV2ZWwpIHsKCQl2YXIgbWF4ID0gdW5kZWZpbmVkID09PSBtYXhMZXZlbCA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IHBhcnNlSW50KG1heExldmVsKSArIDEKCQlpZihtYXggPiAwICYmICdmdW5jdGlvbicgPT09IHR5cGVvZiBtYXRjaEZ1bmN0aW9uKSB7CgkJCWZvcig7IGVsZW1lbnQgJiYgbWF4LS07IGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGUpIHsKCQkJCWlmKG1hdGNoRnVuY3Rpb24oZWxlbWVudCkpIHsKCQkJCQlyZXR1cm4gZWxlbWVudAoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBudWxsCgl9CgoJZnVuY3Rpb24gbW9kaWZ5R29vZ2xlSW1hZ2UoZWxlbWVudCkgewoJCWlmKGVsZW1lbnQgJiYgZWxlbWVudC5ocmVmKSB7CgkJCXZhciBtID0gZWxlbWVudC5ocmVmLm1hdGNoKFJFKQoJCQlpZihtICYmIG1bMV0gJiYgbVsyXSkgewoJCQkJZWxlbWVudC5ocmVmID0gZGQobVsxXSkKCQkJCXNldERpcmVjdChlbGVtZW50KQoJCQkJaWYoaXNDbGlja2VkTGFzdChlbGVtZW50KSkgZWxlbWVudC5jbGljaygpCgkJCQlyZXR1cm4gdHJ1ZQoJCQl9CgkJCW0gPSBlbGVtZW50LmhyZWYubWF0Y2goUkVfU09VUkNFKQoJCQlpZihtICYmIG1bMV0pIHsKCQkJCWVsZW1lbnQuaHJlZiA9IGRkKG1bMV0pCgkJCQlzZXREaXJlY3QoZWxlbWVudCkKCQkJCXJldHVybiB0cnVlCgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlCgl9CgoJZnVuY3Rpb24gaXNEaXJlY3QoZSkgewoJCXJldHVybiAneWVzJyA9PT0gKGUgJiYgZS5nZXRBdHRyaWJ1dGUgJiYgZS5nZXRBdHRyaWJ1dGUoJ2RpcmVjdCcpKQoJfQoKCWZ1bmN0aW9uIHNldERpcmVjdChlKSB7CgkJZSAmJiBlLnNldEF0dHJpYnV0ZSAmJiBlLnNldEF0dHJpYnV0ZSgnZGlyZWN0JywgJ3llcycpCgl9CgoJZnVuY3Rpb24gdHJpZ2dlck1vdXNlRXZlbnQoZWxlbWVudCwgZXZlbnRUeXBlKSB7CgkJdmFyIGV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoJ21vdXNlZG93bicsIHsKCQkJYnViYmxlczogdHJ1ZSwKCQkJY2FuY2VsYWJsZTogdHJ1ZQoJCX0pCgkJZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KQoJfQoJCglmdW5jdGlvbiBpc0NsaWNrZWRMYXN0KGUpIHsKCQlyZXR1cm4gY2xpY2tDb3VudCA9PSAoZSAmJiBlLmdldEF0dHJpYnV0ZSAmJiBlLmdldEF0dHJpYnV0ZSgnY2xpY2stbnVtYmVyJykpCgl9CgkKCWZ1bmN0aW9uIGNhY2hlQ2xpY2soZSkgewoJCWUgJiYgZS5zZXRBdHRyaWJ1dGUgJiYgZS5zZXRBdHRyaWJ1dGUoJ2NsaWNrLW51bWJlcicsICsrY2xpY2tDb3VudCkKCX0KCgkvL292ZXJyaWRlIGV2ZW50IGhhbmRsZXJzCglmb3IodmFyIGkgaW4gV0FUQ0hfRVZFTlRTKSB7CgkJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihXQVRDSF9FVkVOVFNbaV0sIGZ1bmN0aW9uKGV2ZW50KSB7CgkJCXZhciB0ID0gZXZlbnQudGFyZ2V0CgkJCXZhciBhQ29udGFpbmVyID0gY2xvc2VzdCh0LCBmdW5jdGlvbihlKSB7CgkJCQlyZXR1cm4gJ0EnID09PSBlLm5vZGVOYW1lCgkJCQkmJiAoCgkJCQkJCS8vaW1hZ2U7IHJlZ2V4IGNhbiBiZSByZXBsYWNlZCBieSBtb3JlIHJlY2VudCBjbGFzc0xpc3QuY29udGFpbnMoKQoJCQkJCQkvKF58XHMpaXNsaWIoXHN8JCkvLnRlc3QoZS5jbGFzc05hbWUpCgkJCQkJCS8vaW1hZ2Ugc291cmNlCgkJCQkJCXx8ICdub29wZW5lcicgPT09IGUuZ2V0QXR0cmlidXRlKCdyZWwnKQoJCQkJCSkKCQkJfSwgMikKCQkJaWYoIWFDb250YWluZXIpIHJldHVybgoJCQlpZignY2xpY2snID09PSBldmVudC50eXBlKSB7CgkJCQkvL3N1cHByZXNzIHVud2FudGVkIHNpZGUgYmFyCgkJCQlldmVudC5zdG9wUHJvcGFnYXRpb24oKQoJCQkJLy9jYWNoZSBsZWZ0IGNsaWNrcywgaWdub3Jpbmcga2V5cyBsaWtlIGN0cmwKCQkJCWlmKDAgPT09IGV2ZW50LmJ1dHRvbikgY2FjaGVDbGljayhhQ29udGFpbmVyKQoJCQl9CgkJCWlmKGlzRGlyZWN0KGFDb250YWluZXIpKSB7CgkJCQlpZignbW91c2VlbnRlcicgIT09IGV2ZW50LnR5cGUpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpCgkJCQlyZXR1cm4KCQkJfQoJCQlpZignbW91c2VlbnRlcicgPT09IGV2ZW50LnR5cGUpIHsKCQkJCWlmKCFtb2RpZnlHb29nbGVJbWFnZShhQ29udGFpbmVyKSkgewoJCQkJCXZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uKG11dGF0aW9uUmVjb3JkcykgewoJCQkJCQlmb3IodmFyIGogaW4gbXV0YXRpb25SZWNvcmRzKSB7CgkJCQkJCQltb2RpZnlHb29nbGVJbWFnZShtdXRhdGlvblJlY29yZHNbal0udGFyZ2V0KQoJCQkJCQl9CgkJCQkJfSkKCQkJCQlvYnNlcnZlci5vYnNlcnZlKGFDb250YWluZXIsIHthdHRyaWJ1dGVzOiB0cnVlfSkKCQkJCQl0cmlnZ2VyTW91c2VFdmVudCh0LCAnbW91c2Vkb3duJykKCQkJCX0KCQkJfQoJCX0sIHRydWUpCgl9Cn0K"},{"name":"Anti-Adblock Killer | Reek","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":true,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":["*"],"orig_excludes":[],"orig_includes":["http://*/*","https://*/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1569177800622,"data":{"autoPlay":"bfalse","checkList":"bfalse","checkUpdate":"btrue","debug":"bfalse","forceVLC":"bfalse","logDetected":"bfalse","logExcluded":"bfalse","logInsertedNodes":"bfalse","logInterceptedScripts":"bfalse","logPlayer":"bfalse","logRemovedNodes":"bfalse","logXhr":"bfalse","nextchecklist":"s1488491840311","nextcheckupdate":"s1569782600622","videoHD":"bfalse"}},"enabled":false,"position":6,"file_url":"https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer.user.js","uuid":"7bd1dfa1-b3cd-47d6-ad60-b5a8ebbebf6b","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgQW50aS1BZGJsb2NrIEtpbGxlciB8IFJlZWsKLy8gQG5hbWVzcGFjZSBodHRwczovL3VzZXJzY3JpcHRzLm9yZy9zY3JpcHRzL3Nob3cvMTU1ODQwCi8vIEBkZXNjcmlwdGlvbiBIZWxwcyB5b3Uga2VlcCB5b3VyIEFkLUJsb2NrZXIgYWN0aXZlLCB3aGVuIHlvdSB2aXNpdCBhIHdlYnNpdGUgYW5kIGl0IGFza3MgeW91IHRvIGRpc2FibGUuCi8vIEBhdXRob3IgUmVlayB8IHJlZWtzaXRlLmNvbQovLyBAdmVyc2lvbiAxMC4wCi8vIEBlbmNvZGluZyB1dGYtOAovLyBAbGljZW5zZSBodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLwovLyBAaWNvbiBodHRwczovL3Jhdy5naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9tYXN0ZXIvYW50aS1hZGJsb2NrLWtpbGxlci1pY29uLnBuZwovLyBAaG9tZXBhZ2UgaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci8KLy8gQHR3aXR0ZXJVUkwgaHR0cHM6Ly90d2l0dGVyLmNvbS9hbnRpYWRia2lsbGVyCi8vIEBjb250YWN0VVJMIGh0dHBzOi8vcmVlay5naXRodWIuaW8vYW50aS1hZGJsb2NrLWtpbGxlci8jY29udGFjdAovLyBAc3VwcG9ydFVSTCBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3VlcwovLyBAY29udHJpYnV0aW9uVVJMIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIjZG9uYXRlCi8vIEB1cGRhdGVVUkwgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9tYXN0ZXIvYW50aS1hZGJsb2NrLWtpbGxlci51c2VyLmpzCi8vIEBkb3dubG9hZFVSTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL21hc3Rlci9hbnRpLWFkYmxvY2sta2lsbGVyLnVzZXIuanMKLy8gQGluY2x1ZGUgaHR0cDovLyovKgovLyBAaW5jbHVkZSBodHRwczovLyovKgovLyBAZ3JhbnQgdW5zYWZlV2luZG93Ci8vIEBncmFudCBHTV9hZGRTdHlsZQovLyBAZ3JhbnQgR01fZ2V0VmFsdWUKLy8gQGdyYW50IEdNX3NldFZhbHVlCi8vIEBncmFudCBHTV94bWxodHRwUmVxdWVzdAovLyBAZ3JhbnQgR01fcmVnaXN0ZXJNZW51Q29tbWFuZAovLyBAZ3JhbnQgR01fZGVsZXRlVmFsdWUKLy8gQGdyYW50IEdNX2xpc3RWYWx1ZXMKLy8gQGdyYW50IEdNX2dldFJlc291cmNlVGV4dAovLyBAZ3JhbnQgR01fZ2V0UmVzb3VyY2VVUkwKLy8gQGdyYW50IEdNX2xvZwovLyBAZ3JhbnQgR01fb3BlbkluVGFiCi8vIEBncmFudCBHTV9zZXRDbGlwYm9hcmQKLy8gQGdyYW50IEdNX2luZm8KLy8gQGdyYW50IEdNX2dldE1ldGFkYXRhCi8vIEBydW4tYXQgZG9jdW1lbnQtc3RhcnQKLy8gQGNvbm5lY3QgKgovLyA9PS9Vc2VyU2NyaXB0PT0KLypqc2hpbnQgZXZpbDp0cnVlIG5ld2NhcDpmYWxzZSovCi8qZ2xvYmFsIHVuc2FmZVdpbmRvdywgR01fYWRkU3R5bGUsIEdNX2dldFZhbHVlLCBHTV9zZXRWYWx1ZSwgR01feG1saHR0cFJlcXVlc3QsIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQsIEdNX2RlbGV0ZVZhbHVlLCBHTV9saXN0VmFsdWVzLCBHTV9nZXRSZXNvdXJjZVRleHQsIEdNX2dldFJlc291cmNlVVJMLCBHTV9sb2csIEdNX29wZW5JblRhYiwgR01fc2V0Q2xpcGJvYXJkLCBHTV9pbmZvLCBHTV9nZXRNZXRhZGF0YSwgJCwgZG9jdW1lbnQsIGNvbnNvbGUsIGxvY2F0aW9uLCBzZXRJbnRlcnZhbCwgc2V0VGltZW91dCwgY2xlYXJJbnRlcnZhbCovCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBUaGFua3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIERvbm9yczogTS4gSG93YXJkLCBTaHVuam91LCBDaGFybWluZSwgS2llcmVrOTMsIEcuIEJhcm5hcmQsIEguIFlvdW5nLCBTZWluaG9yOSwgSW1HbG9kYXIsIEl2YW5vc2V2aXRjaCwgSG9tZURpcG8sIFIuIE1hcnRpbiwgRHJGaVosIFRpcHB5LCBCLiBSb2huZXIsIFAuIEtvemljYSwgTS4gUGF0ZWwsIFc0cmVsbCwgVHNjaGVja29mZiwgQWRCbG9jayBQb2xza2EsIEFWRU5JUiBJTlRFUk5FVCwgY29vbE5BTywgQmVuLCBKLiBQYXJrLCBDLiBZb3VuZywgSi4gQm91LCBNLiBDYW5vLCBKLiBKdW5nLCBBLiBTb25pbm8sIEouIExpdHRlbiwgTS4gU2NocnVtcGYsIEcuIFBlcGUsIEEuIFRydWZhbm92LCBSLiBQYWxtZXIsIEouIFJhdXRpYWluZW4sIFMuIEJseXN0b25lLCBNLiBTaWx2ZWlyYSwgSy4gTWFjQXJ0aHVyLCBNLiBJdmFub3YsIEEuIFNjaG1pZHQsIEEuIFdhYWdlLCBGLiBUaXNtZXIsIFMuIEVobmVydCwgSi4gQ29ycHVzLCBKLiBEbHVob3MsIE1ha2xlbWVueiwgU3Ryb2JlbGl4LCBNb2RlbGxwaWxvdC5FVSwgRS4gQmVuZWRldHRpLCBWLiBWZW5kaXR0aSwgU2hha29zLCBBLiBFbGlhc29uLCBBLiBTYWxvcmFudGEsIFMuIEdlaWdlciwgQS4gT3R0ZXJsb28sIE0uIENvcHBlbiwgUy4gRmlzY2hlciwgSC4gQmVja2VyLCBELiBBY2tlcm1hbiwgUy4gUGl0c2NoLCBLLiBQZXJ0Y2hlY2ssIFMuIEFiZWwsIEsuIE8nQ29ubm9yLCBCLiBPYnJpZW4sIFMuIFZvZ2xlciwgUy4gR29lYmwsIEEuIEJpYXIsIFMuIFNjb3R0LCBCYXNzbW9iaWxlLm9yZywgUy4gR3Jvw59lLCBNLiBQZW90LCBSLiBDaGFuIEJhbGFtLCBMLiBCb25kLUtlbm5lZHksIFIuIEVtb25kLCBBLiBQYXZsb3YsIFcuIFRyYWNleSwgQS4gU2VyZ2V5LCBSLiBMw7NwZXogTMOzcGV6LCBSLiBSZWRkeSBLYXNpcmVkZHksIEEuIE1vdWplZXIsIE0uIEJldHosIE0uIExlZsOodnJlLCBSLiBNY0N1cmR5LCBMUiBHZWVrcywgTS4gQmVhdXJlZ2FyZCwgQ2FzcGVyVGVjaCBMdGQsIE0uIER1ZGFzLCBTLiBTY2hhcmYsIFMuIFByb2tob3JvdiwgSy4gUGFwYWxpYXMsIEouIFdvam5vd3NraSwgQi4gQ3VydGlzLCBELiBMYXdyZW5jZSwgRC4gSGUsIE4uIEtlbHNhbGwsIElkb2dld2FsbGV0LCBKLiBTcGF1bGRpbmcsIFMuIExhZm9uLCBNYXQsIEguIFJvYmVydHMsIEMuIEhlZGx1bmQsIEouIEhhd2tpbnMsIEouIEFuZGVyc2VuLCBNLiBCam9ya3N0ZW4sIEIuIFdvbGZlIElJSSwgVC4gWW9jb20sIMWgLiBJbnRhcywgUy4gTW9lbmljaCwgSi4gQ2hhbmcsIEMuIE11bmssIEEuIE5hcnV0YSwg0JEuINCc0LjRhdCw0LjQuywgSi4gQmVueiwgRi4gU2xvb3QsIEouIENyZWVkLCBNLiBHaWxsYW0sIEMuIExlaWNodCwgQS4gR25hbmEsIFMuIFN1bmRhcmFtLCBBLiBLb2xsZXIsIE0uIEtvdGxhciwgUy4gQWJlbCwgVC4gRmxhbmFnYW4sIE0uIEFyZHVpbmksIFAuIFN0YWNraG91c2UsIEIuIE9saXZlciwgTS4gSm9obnNvbiwgUi4gTWFubmVydCwgRS4gU2lvcmRpYQoKICBDb2xsYWJvcmF0b3JzOiBJbmZpbml0eUNvZGluZywgQ291Y2h5LCBEaW5kb2csIEZsb3hmbG9iLCBVIEJsZXNzLCBXYXRpbGluLCBAcHJkb25haHVlLCBIb3NoaWUsIDNsZjNuTGkzZCwgQWxleG8sIENyaXRzLCBOb25hbWUxMjAsIENydDMyLCBKaXh1bk1vZSwgQXRob3JjaXMsIEtpbGxlcmJhZGdlciwgU01lZDc5LCBBbGV4YW5kZXIyNTUsIEFub25zdWJtaXR0ZXIsIFJhcG9yTG9McHJvLCBNYXluYWswMCwgUm9ib3RleCwgVmluY3R1eCwgQmxhaHgsIE1hamtpSVQsIEY0eiwgQW5nZWxzbCwgTWlraGFlbGssIE1hcmVrLCBIYW1zdGVyYmFja2UsIEdvcmhpbGwsIEhhY2tlcjk5OSwgeHhjcml0aWN4eCwgU2tyNHRjaEdyM2F6eU1vbmtpQmFsbGxsbGxaenp6LCBHaXdheXVtZSwgTXJTaGVybG9ja0hvbG1lcywgeERhcmtBUkcsIE5vYWhwNzgsIE1hcHgtCgogIFVzZXJzOiBUaGFuayB5b3UgdG8gYWxsIHRob3NlIHdobyB1c2UgQW50aSBBZGJsb2NrIEtpbGxlciwgd2hvIHJlcG9ydCBwcm9ibGVtcywgd2hvIHdyaXRlIHRoZSByZXZpZXcsIHdoaWNoIGFkZCB0byB0aGVpciBmYXZvcml0ZXMsIG1ha2luZyBkb25hdGlvbnMsIHdoaWNoIHN1cHBvcnQgdGhlIHByb2plY3QgYW5kIGhlbHAgaW4gaXRzIGRldmVsb3BtZW50IG9yIHByb21vdGUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgTWlycm9ycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogIEdpdGh1YjogaHR0cDovL3Rpbnl1cmwuY29tL21jcmEzZG4KICBHcmVhc3lmb3JrOiBodHRwOi8vdGlueXVybC5jb20vcGJiZG5oNgogIE9wZW51c2VyanM6IGh0dHA6Ly90aW55dXJsLmNvbS9ubnFqZTMyCiAgTW9ua2V5R3V0czogaHR0cDovL3Rpbnl1cmwuY29tL2thNWZjcW0KICBVc2Vyc2NyaXB0czogaHR0cDovL3Rpbnl1cmwuY29tL3E4eGNlamwKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBEb2N1bWVudGF0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgR3JlYXNlbW9ua2V5OiBodHRwOi8vdGlueXVybC5jb20veWVlZm5qNQogIFNjcmlwdGlzaDogaHR0cDovL3Rpbnl1cmwuY29tL2NuZDlua2QKICBUYW1wZXJtb25rZXk6IGh0dHA6Ly90aW55dXJsLmNvbS9wZHl0ZmRlCiAgVmlvbGVudG1vbmtleTogaHR0cDovL3Rpbnl1cmwuY29tL24zNHduNmoKICBOaW5qYUtpdDogaHR0cDovL3Rpbnl1cmwuY29tL3Bra205dWcKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBTY3JpcHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCihmdW5jdGlvbiAod2luZG93KSB7CiAgInVzZSBzdHJpY3QiOwogIAogIHZhciBBYWsgPSB7CiAgICBuYW1lIDogJ0FudGktQWRibG9jayBLaWxsZXInLAogICAgdmVyc2lvbiA6ICcxMC4wJywKICAgIHNjcmlwdGlkIDogJ2dKV0VwMHZCJywKICAgIGhvbWVVUkwgOiAnaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci8nLAogICAgY2hhbmdlbG9nVVJMIDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIjY2hhbmdlbG9nJywKICAgIGRvbmF0ZVVSTCA6ICdodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyI2RvbmF0ZScsCiAgICBmZWF0dXJlc1VSTCA6ICdodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyI2ZlYXR1cmVzJywKICAgIHJlcG9ydFVSTCA6ICdodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL3dpa2kvUmVwb3J0LUd1aWRlJywKICAgIGNvbnRhY3RVUkwgOiAnaHR0cHM6Ly9yZWVrLmdpdGh1Yi5pby9hbnRpLWFkYmxvY2sta2lsbGVyLyNjb250YWN0JywKICAgIHNldHRpbmdzVVJMIDogJ2h0dHBzOi8vcmVlay5naXRodWIuaW8vYW50aS1hZGJsb2NrLWtpbGxlci8jc2V0dGluZ3MnLAogICAgdHdpdHRlclVSTCA6ICdodHRwczovL3R3aXR0ZXIuY29tL2FudGlhZGJraWxsZXInLAogICAgZG93bmxvYWRVUkwgOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9tYXN0ZXIvYW50aS1hZGJsb2NrLWtpbGxlci51c2VyLmpzJywKICAgIHN1YnNjcmliZVVSTCA6ICdodHRwczovL3JlZWsuZ2l0aHViLmlvL2FudGktYWRibG9jay1raWxsZXIvI2ZpbHRlcmxpc3QnLAogICAgbGlzdFVSTCA6ICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL21hc3Rlci9hbnRpLWFkYmxvY2sta2lsbGVyLWZpbHRlcnMudHh0IiwKICAgIG5hdGl2ZVVSTCA6ICdodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL3dpa2kvTmF0aXZlLU1vZGUnLAogICAgaWNvblVSTCA6ICdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL21hc3Rlci9hbnRpLWFkYmxvY2sta2lsbGVyLWljb24ucG5nJywKICAgIGltZ0JhaXQgOiAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDQUFBQUFnQ0FRQUFBRFpjN0ovQUFBQUdrbEVRVlI0Mm1OZzBHQVlCYU5nRkl5Q1VUQUtSc0VvUUFZQVROOEFLWU5aL3g0QUFBQUFTVVZPUks1Q1lJST0nLAogICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgQWFrLnJlZ2lzdGVyU2V0dGluZ3MoKTsgLy8gcmVnaXN0ZXJpbmcgeW91ciBzZXR0aW5ncy4KICAgICAgQWFrLnJlZ2lzdGVyQ29uc29sZSgpOyAvLyByZWdpc3RlcmluZyBjdXN0b216ZWQgY29uc29sZS4KICAgICAgQWFrLnJlZ2lzdGVyQ29tbWFuZHMoKTsgLy8gYWRkIGNvbW1hbmRzIHRvIG1lbnUKICAgICAgQWFrLmNoZWNrVXBkYXRlKHRydWUpOyAvLyBjaGVjayBpZiBBYWtTY3JpcHQgaXMgdXAgdG8gZGF0ZS4KICAgICAgQWFrLmNoZWNrTGlzdCgpOyAvLyBjaGVjayBpZiBBYWtMaXN0IGlzIGVuYWJsZWQuCiAgICAgIEFhay5ibG9ja0RldGVjdCgpOyAvLyBkZXRlY3QgYW5kIGtpbGwgYW50aS1hZGJsb2Nrcy4KICAgIH0sCiAgICBhYWJzIDoge30sCiAgICBvcHRzIDoge30sCiAgICBvcHRpb25zIDogewogICAgICBhdXRvUGxheSA6IHsKICAgICAgICBncm91cCA6ICdnZW5lcmFsJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IGZhbHNlLAogICAgICAgIGxhYmVsIDogJ1BsYXkgdmlkZW8gYXV0b21hdGljYWxseS4gKicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIHZpZGVvSEQgOiB7CiAgICAgICAgZ3JvdXAgOiAnZ2VuZXJhbCcsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiBmYWxzZSwKICAgICAgICBsYWJlbCA6ICdQbGF5IHZpZGVvIGluIEhEIHF1YWxpdHkuICoqJywKICAgICAgICBpbmZvIDogJycKICAgICAgfSwKICAgICAgZm9yY2VWTEMgOiB7CiAgICAgICAgZ3JvdXAgOiAnZ2VuZXJhbCcsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiBmYWxzZSwKICAgICAgICBsYWJlbCA6ICdQbGF5IHZpZGVvIHdpdGggVkxDIHBsdWdpbi4gKicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGNoZWNrTGlzdCA6IHsKICAgICAgICBncm91cCA6ICdnZW5lcmFsJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IHRydWUsCiAgICAgICAgbGFiZWwgOiAnQ2hlY2sgQWFrTGlzdCBzdWJzY3JpcHRpb24uJywKICAgICAgICBpbmZvIDogJycKICAgICAgfSwKICAgICAgY2hlY2tVcGRhdGUgOiB7CiAgICAgICAgZ3JvdXAgOiAnZ2VuZXJhbCcsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiB0cnVlLAogICAgICAgIGxhYmVsIDogJ0NoZWNrIG5ld2VyIEFha1NjcmlwdCB2ZXJzaW9uLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGRlYnVnIDogewogICAgICAgIGdyb3VwIDogJ2RlYnVnJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IGZhbHNlLAogICAgICAgIGxhYmVsIDogJ0VuYWJsZSBMb2dzLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGxvZ0luc2VydGVkTm9kZXMgOiB7CiAgICAgICAgZ3JvdXAgOiAnZGVidWcnLAogICAgICAgIHR5cGUgOiAnY2hlY2tib3gnLAogICAgICAgIHZhbHVlIDogZmFsc2UsCiAgICAgICAgbGFiZWwgOiAnTG9nIGluc2VydGVkIG5vZGVzLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGxvZ1JlbW92ZWROb2RlcyA6IHsKICAgICAgICBncm91cCA6ICdkZWJ1ZycsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiBmYWxzZSwKICAgICAgICBsYWJlbCA6ICdMb2cgcmVtb3ZlZCBub2Rlcy4nLAogICAgICAgIGluZm8gOiAnJwogICAgICB9LAogICAgICBsb2dFeGNsdWRlZCA6IHsKICAgICAgICBncm91cCA6ICdkZWJ1ZycsCiAgICAgICAgdHlwZSA6ICdjaGVja2JveCcsCiAgICAgICAgdmFsdWUgOiBmYWxzZSwKICAgICAgICBsYWJlbCA6ICdMb2cgZXhjbHVkZXMgZG9tYWlucy4nLAogICAgICAgIGluZm8gOiAnJwogICAgICB9LAogICAgICBsb2dYaHIgOiB7CiAgICAgICAgZ3JvdXAgOiAnZGVidWcnLAogICAgICAgIHR5cGUgOiAnY2hlY2tib3gnLAogICAgICAgIHZhbHVlIDogZmFsc2UsCiAgICAgICAgbGFiZWwgOiAnTG9nIEhUVFAgcmVxdWVzdHMnLAogICAgICAgIGluZm8gOiAnJwogICAgICB9LAogICAgICBsb2dQbGF5ZXIgOiB7CiAgICAgICAgZ3JvdXAgOiAnZGVidWcnLAogICAgICAgIHR5cGUgOiAnY2hlY2tib3gnLAogICAgICAgIHZhbHVlIDogZmFsc2UsCiAgICAgICAgbGFiZWwgOiAnTG9nIHBsYXllciBpbnN0YW5jZXMuJywKICAgICAgICBpbmZvIDogJycKICAgICAgfSwKICAgICAgbG9nSW50ZXJjZXB0ZWRTY3JpcHRzIDogewogICAgICAgIGdyb3VwIDogJ2RlYnVnJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IGZhbHNlLAogICAgICAgIGxhYmVsIDogJ0xvZyBpbnRlcmNlcHRlZCBzY3JpcHRzLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0sCiAgICAgIGxvZ0RldGVjdGVkIDogewogICAgICAgIGdyb3VwIDogJ2RlYnVnJywKICAgICAgICB0eXBlIDogJ2NoZWNrYm94JywKICAgICAgICB2YWx1ZSA6IGZhbHNlLAogICAgICAgIGxhYmVsIDogJ0xvZyBkZXRlY3RlZCBhbnRpLWFkYmxvY2tzLicsCiAgICAgICAgaW5mbyA6ICcnCiAgICAgIH0KICAgIH0sCiAgICByZWdpc3RlclNldHRpbmdzIDogZnVuY3Rpb24gKCkgewogICAgICBmb3IgKHZhciBvcHROYW1lIGluIEFhay5vcHRpb25zKSB7CiAgICAgICAgaWYgKEFhay5vcHRpb25zLmhhc093blByb3BlcnR5KG9wdE5hbWUpKQogICAgICAgICAgQWFrLm9wdHNbb3B0TmFtZV0gPSBBYWsuZ2V0VmFsdWUob3B0TmFtZSkgIT09IG51bGwgPyBBYWsuZ2V0VmFsdWUob3B0TmFtZSkgOiBBYWsub3B0aW9uc1tvcHROYW1lXS52YWx1ZTsKICAgICAgfQogICAgfSwKICAgIGNvbW1hbmRzIDogW3sKICAgICAgICBjYXB0aW9uIDogJ0hvbWVwYWdlJywKICAgICAgICBleGVjdXRlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmdvKEFhay5ob21lVVJMKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBjYXB0aW9uIDogJ1NldHRpbmdzJywKICAgICAgICBleGVjdXRlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmdvKEFhay5zZXR0aW5nc1VSTCk7CiAgICAgICAgfQogICAgICB9LCB7CiAgICAgICAgY2FwdGlvbiA6ICdVcGRhdGUnLAogICAgICAgIGV4ZWN1dGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuY2hlY2tVcGRhdGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIF0sCiAgICBhZGRDb21tYW5kcyA6IGZ1bmN0aW9uIChjbWQpIHsKICAgICAgaWYgKEFhay51c2VHTSAmJiBBYWsuaXNUb3BmcmFtZSAmJiB0eXBlb2YgR01fcmVnaXN0ZXJNZW51Q29tbWFuZCAhPSAndW5kZWZpbmVkJykgewogICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoW0Fhay5uYW1lLCBBYWsuZ2V0VmVyc2lvbigpLCBjbWQuY2FwdGlvbl0uam9pbignICcpLCBjbWQuZXhlY3V0ZSk7CiAgICAgIH0KICAgIH0sCiAgICByZWdpc3RlckNvbW1hbmRzIDogZnVuY3Rpb24gKCkgewogICAgICBBYWsucmVhZHkoZnVuY3Rpb24gKCkgewogICAgICAgIC8vIFNjcmlwdGlzaAogICAgICAgIC8vIG5vdGU6IE5vIG1lbnUgY29tbWFuZCBpcyBjcmVhdGVkIHdoZW4gdGhlIHVzZXIgc2NyaXB0IGlzIHJ1biBpbiBhIGlmcmFtZSB3aW5kb3cuCiAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20va3Z2djd5dAogICAgICAgIEFhay5jb21tYW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChjbWQpIHsKICAgICAgICAgIEFhay5hZGRDb21tYW5kcyhjbWQpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICByZWdpc3RlckNvbnNvbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgIHRoaXMubG9nID0gQWFrLm9wdHMuZGVidWcgPyBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpIDogZnVuY3Rpb24gKCkge307CiAgICAgIHRoaXMuaW5mbyA9IEFhay5vcHRzLmRlYnVnID8gY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSkgOiBmdW5jdGlvbiAoKSB7fTsKICAgICAgdGhpcy5lcnJvciA9IEFhay5vcHRzLmRlYnVnID8gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpIDogZnVuY3Rpb24gKCkge307CiAgICAgIHRoaXMud2FybiA9IEFhay5vcHRzLmRlYnVnID8gY29uc29sZS53YXJuLmJpbmQoY29uc29sZSkgOiBmdW5jdGlvbiAoKSB7fTsKICAgIH0sCiAgICBpc1RvcGZyYW1lIDogKHdpbmRvdy5wYXJlbnQgPT0gd2luZG93LnNlbGYpLAogICAgdXcgOiB0eXBlb2YgdW5zYWZlV2luZG93ICE9ICd1bmRlZmluZWQnID8gdW5zYWZlV2luZG93IDogd2luZG93LAogICAgdXNlR00gOiB0eXBlb2YgR01fZ2V0VmFsdWUgIT0gJ3VuZGVmaW5lZCcsCiAgICBhcGlHTSA6IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKEFhay5pc1RvcGZyYW1lKSB7CiAgICAgICAgLy8gR00gQVBJIC0gaHR0cDovL3Rpbnl1cmwuY29tL3llZWZuajUKICAgICAgICByZXR1cm4gewogICAgICAgICAgR01feG1saHR0cFJlcXVlc3QgOiB0eXBlb2YgR01feG1saHR0cFJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9zZXRWYWx1ZSA6IHR5cGVvZiBHTV9zZXRWYWx1ZSAhPSAndW5kZWZpbmVkJywKICAgICAgICAgIEdNX2dldFZhbHVlIDogdHlwZW9mIEdNX2dldFZhbHVlICE9ICd1bmRlZmluZWQnLAogICAgICAgICAgR01fYWRkU3R5bGUgOiB0eXBlb2YgR01fYWRkU3R5bGUgIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9yZWdpc3Rlck1lbnVDb21tYW5kIDogdHlwZW9mIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQgIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9pbmZvIDogdHlwZW9mIEdNX2luZm8gIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9nZXRNZXRhZGF0YSA6IHR5cGVvZiBHTV9nZXRNZXRhZGF0YSAhPSAndW5kZWZpbmVkJywKICAgICAgICAgIEdNX2RlbGV0ZVZhbHVlIDogdHlwZW9mIEdNX2RlbGV0ZVZhbHVlICE9ICd1bmRlZmluZWQnLAogICAgICAgICAgR01fbGlzdFZhbHVlcyA6IHR5cGVvZiBHTV9saXN0VmFsdWVzICE9ICd1bmRlZmluZWQnLAogICAgICAgICAgR01fZ2V0UmVzb3VyY2VUZXh0IDogdHlwZW9mIEdNX2dldFJlc291cmNlVGV4dCAhPSAndW5kZWZpbmVkJywKICAgICAgICAgIEdNX2dldFJlc291cmNlVVJMIDogdHlwZW9mIEdNX2dldFJlc291cmNlVVJMICE9ICd1bmRlZmluZWQnLAogICAgICAgICAgR01fbG9nIDogdHlwZW9mIEdNX2xvZyAhPSAndW5kZWZpbmVkJywKICAgICAgICAgIEdNX29wZW5JblRhYiA6IHR5cGVvZiBHTV9vcGVuSW5UYWIgIT0gJ3VuZGVmaW5lZCcsCiAgICAgICAgICBHTV9zZXRDbGlwYm9hcmQgOiB0eXBlb2YgR01fc2V0Q2xpcGJvYXJkICE9ICd1bmRlZmluZWQnCiAgICAgICAgfTsKICAgICAgfQogICAgfSwKICAgIGdvIDogZnVuY3Rpb24gKHVybCkgewogICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDsKICAgIH0sCiAgICByZWZyZXNoIDogZnVuY3Rpb24gKCkgewogICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgfSwKICAgIHJlbG9hZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCh0cnVlKTsKICAgIH0sCiAgICBjb250YWlucyA6IGZ1bmN0aW9uIChzdHJpbmcsIHNlYXJjaCkgewogICAgICByZXR1cm4gc3RyaW5nLmluZGV4T2Yoc2VhcmNoKSAhPSAtMTsKICAgIH0sCiAgICBnZXRCcm93c2VyIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsKICAgICAgaWYgKEFhay5jb250YWlucyh1YSwgJ0ZpcmVmb3gnKSkgewogICAgICAgIHJldHVybiAiRmlyZWZveCI7CiAgICAgIH0gZWxzZSBpZiAoQWFrLmNvbnRhaW5zKHVhLCAnU2xlaXBuaXInKSkgewogICAgICAgIHJldHVybiAiU2xlaXBuaXIiOyAvLyBNb2JpbGUKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdVQ0Jyb3dzZXInKSkgewogICAgICAgIHJldHVybiAiVUNCcm93c2VyIjsgLy8gTW9iaWxlCiAgICAgIH0gZWxzZSBpZiAoQWFrLmNvbnRhaW5zKHVhLCAnRG9sZmluJykpIHsKICAgICAgICByZXR1cm4gIkRvbHBoaW4iOyAvLyBNb2JpbGUKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdNU0lFJykpIHsKICAgICAgICByZXR1cm4gIkludGVybmV0RXhwbG9yZXIiOwogICAgICB9IGVsc2UgaWYgKEFhay5jb250YWlucyh1YSwgJ01pZG9yaScpKSB7CiAgICAgICAgcmV0dXJuICJNaWRvcmkiOwogICAgICB9IGVsc2UgaWYgKEFhay5jb250YWlucyh1YSwgJ09wZXJhJykgfHwgQWFrLmNvbnRhaW5zKHVhLCAnT1BSJykpIHsKICAgICAgICByZXR1cm4gIk9wZXJhIjsKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdDaHJvbWUnKSkgewogICAgICAgIHJldHVybiAiQ2hyb21lIjsKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdTYWZhcmknKSkgewogICAgICAgIHJldHVybiAiU2FmYXJpIjsKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdLb25xdWVyb3InKSkgewogICAgICAgIHJldHVybiAiS29ucXVlcm9yIjsKICAgICAgfSBlbHNlIGlmIChBYWsuY29udGFpbnModWEsICdQYWxlTW9vbicpKSB7CiAgICAgICAgcmV0dXJuICJQYWxlTW9vbiI7IC8vIGZvcmsgZmlyZWZveAogICAgICB9IGVsc2UgaWYgKEFhay5jb250YWlucyh1YSwgJ0N5YmVyZm94JykpIHsKICAgICAgICByZXR1cm4gIkN5YmVyZm94IjsgLy8gZm9yayBmaXJlZm94CiAgICAgIH0gZWxzZSBpZiAoQWFrLmNvbnRhaW5zKHVhLCAnU2VhTW9ua2V5JykpIHsKICAgICAgICByZXR1cm4gIlNlYU1vbmtleSI7IC8vIGZvcmsgZmlyZWZveAogICAgICB9IGVsc2UgaWYgKEFhay5jb250YWlucyh1YSwgJ0ljZXdlYXNlbCcpKSB7CiAgICAgICAgcmV0dXJuICJJY2V3ZWFzZWwiOyAvLyBmb3JrIGZpcmVmb3gKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdWE7CiAgICAgIH0KICAgIH0sCiAgICBnZXRWZXJzaW9uIDogZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gTnVtYmVyKEFhay52ZXJzaW9uKTsKICAgIH0sCiAgICBnZXRTY3JpcHRNYW5hZ2VyIDogZnVuY3Rpb24gKCkgewogICAgICBpZiAodHlwZW9mIEdNX2luZm8gPT0gJ29iamVjdCcpIHsKICAgICAgICAvLyBHcmVhc2Vtb25rZXkgKEZpcmVmb3gpCiAgICAgICAgaWYgKHR5cGVvZiBHTV9pbmZvLnV1aWQgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIHJldHVybiAnR3JlYXNlbW9ua2V5JzsKICAgICAgICB9IC8vIFRhbXBlcm1vbmtleSAoQ2hyb21lL09wZXJhKQogICAgICAgIGVsc2UgaWYgKHR5cGVvZiBHTV9pbmZvLnNjcmlwdEhhbmRsZXIgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIHJldHVybiAnVGFtcGVybW9ua2V5JzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU2NyaXB0aXNoIChGaXJlZm94KQogICAgICAgIGlmICh0eXBlb2YgR01fZ2V0TWV0YWRhdGEgPT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgcmV0dXJuICdTY3JpcHRpc2gnOwogICAgICAgIH0gLy8gTmluamFLaXQgKFNhZmFyaS9DaHJvbWUpCiAgICAgICAgZWxzZSBpZiAodHlwZW9mIEdNX3NldFZhbHVlICE9ICd1bmRlZmluZWQnICYmCiAgICAgICAgICB0eXBlb2YgR01fZ2V0UmVzb3VyY2VUZXh0ID09ICd1bmRlZmluZWQnICYmCiAgICAgICAgICB0eXBlb2YgR01fZ2V0UmVzb3VyY2VVUkwgPT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgIHR5cGVvZiBHTV9vcGVuSW5UYWIgPT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgIHR5cGVvZiBHTV9zZXRDbGlwYm9hcmQgPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIHJldHVybiAnTmluamFLaXQnOwogICAgICAgIH0gZWxzZSB7IC8vIE5hdGl2ZQogICAgICAgICAgcmV0dXJuICdOYXRpdmUnOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGdlbmVyYXRlSUQgOiBmdW5jdGlvbiAobGVuKSB7CiAgICAgIHZhciBzdHIgPSAnJzsKICAgICAgdmFyIGNoYXJzZXQgPSAiYWJjZGVmZ2hpamtsbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAobGVuID8gbGVuIDogMTApOyArK2kpIHsKICAgICAgICBzdHIgKz0gY2hhcnNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnNldC5sZW5ndGgpKTsKICAgICAgfQogICAgICByZXR1cm4gc3RyOwogICAgfSwKICAgIGdlbmVyYXRlVVVJRCA6IGZ1bmN0aW9uICgpIHsKICAgICAgLy8gVW5pdmVyc2FsbHkgVW5pcXVlIElEZW50aWZpZXIKICAgICAgdmFyIGQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTsKICAgICAgdmFyIHV1aWQgPSAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7CiAgICAgICAgICB2YXIgciA9IChkICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2IHwgMDsKICAgICAgICAgIGQgPSBNYXRoLmZsb29yKGQgLyAxNik7CiAgICAgICAgICByZXR1cm4gKGMgPT0gJ3gnID8gciA6IChyICYgMHg3IHwgMHg4KSkudG9TdHJpbmcoMTYpOwogICAgICAgIH0pOwogICAgICByZXR1cm4gdXVpZDsKICAgIH0sCiAgICBnZXRVVUlEIDogZnVuY3Rpb24gKCkgewogICAgICB2YXIgbmFtZSA9ICd1dWlkJzsKICAgICAgaWYgKEFhay5nZXRWYWx1ZShuYW1lKSA9PT0gbnVsbCkgewogICAgICAgIEFhay5zZXRWYWx1ZShuYW1lLCBBYWsuZ2VuZXJhdGVVVUlEKCkpOwogICAgICB9CiAgICAgIHJldHVybiBBYWsuZ2V0VmFsdWUobmFtZSk7CiAgICB9LAogICAgc2NoZWR1bGUgOiBmdW5jdGlvbiAoZGF5cywgbmFtZSwgY2FsbGJhY2spIHsKICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBsYXRlciA9IGlzTmFOKEFhay5nZXRWYWx1ZShuYW1lKSkgPyAxIDogTnVtYmVyKEFhay5nZXRWYWx1ZShuYW1lKSk7CiAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwogICAgICAgIGlmIChsYXRlciA8IG5vdykgewogICAgICAgICAgQWFrLnNldFZhbHVlKG5hbWUsIChub3cgKyAoZGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApKS50b1N0cmluZygpKTsKICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgfQogICAgICB9LCAxZTMpOwogICAgfSwKICAgIG5vdGlmaWNhdGlvbiA6IGZ1bmN0aW9uIChtZXNzYWdlLCBkZWxheSkgewogICAgICBpZiAoQWFrLmlzVG9wZnJhbWUpIHsKCiAgICAgICAgLy8gcmVtb3ZlIG9sZCBub3RpZmljYXRpb24KICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI2Fhay1ub3RpY2UtZnJhbWUnKTsKCiAgICAgICAgLy8gYWRkIG5ldyBub3RpZmljYXRpb24KICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICB0YWcgOiAnaWZyYW1lJywKICAgICAgICAgIGlkIDogJ2Fhay1ub3RpY2UtZnJhbWUnLAogICAgICAgICAgc3R5bGUgOiAncG9zaXRpb246Zml4ZWQ7IHotaW5kZXg6OTk5OTk5OyB0b3A6MTBweDsgbGVmdDoxMHB4OycsCiAgICAgICAgICB3aWR0aCA6ICczNjBweCcsCiAgICAgICAgICBoZWlnaHQgOiAnMTIwcHgnLAogICAgICAgICAgZnJhbWVib3JkZXIgOiAwLAogICAgICAgICAgc2Nyb2xsaW5nIDogJ25vJywKICAgICAgICAgIC8vc3JjIDogJy8vbG9jYWxob3N0L2dpdC9hbnRpLWFkYmxvY2sta2lsbGVyLXBhZ2VzL25vdGlmaWNhdGlvbi5odG1sIycgKyBidG9hKG1lc3NhZ2UpLAogICAgICAgICAgc3JjIDogJy8vcmVlay5naXRodWIuaW8vYW50aS1hZGJsb2NrLWtpbGxlci9ub3RpZmljYXRpb24uaHRtbCMnICsgd2luZG93LmJ0b2EobWVzc2FnZSksCiAgICAgICAgICBhcHBlbmQgOiAnYm9keScsCiAgICAgICAgICBjYWxsYmFjayA6IGZ1bmN0aW9uIChzZWxmKSB7CgogICAgICAgICAgICAvLyBtYW51YWxseSByZW1vdmUKICAgICAgICAgICAgQWFrLm9uRXZlbnQod2luZG93LCAibWVzc2FnZSIsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgICAgIGlmIChldmVudC5kYXRhID09ICJyZW1vdmVOb3RpZmljYXRpb24iKSB7CiAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgZmFsc2UpOwoKICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSByZW1vdmUKICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHNlbGYucmVtb3ZlKCk7CiAgICAgICAgICAgIH0sIGRlbGF5IHx8IDNlNCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICB9CiAgICB9LAogICAgY2hlY2tMaXN0IDogZnVuY3Rpb24gKCkgewogICAgICBpZiAoQWFrLnVzZUdNICYmIEFhay5vcHRzLmNoZWNrTGlzdCAmJiBBYWsuaXNUb3BmcmFtZSkgewogICAgICAgIEFhay5zY2hlZHVsZSgxLCAnbmV4dGNoZWNrbGlzdCcsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIEFhay5jcmVhdGVFbGVtZW50KHsKICAgICAgICAgICAgICB0YWcgOiAnc2NyaXB0JywKICAgICAgICAgICAgICBzcmMgOiB3aW5kb3cuYXRvYignTHk5eVpXVnJMbWRwZEdoMVlpNXBieTloYm5ScExXRmtZbXh2WTJzdGEybHNiR1Z5TDJzeVZYYzNhWE5JY2sxdE5VcFlVREZXZDJSNFl6VTJOMXBMWXpGaFdqUkpMbXB6JyksCiAgICAgICAgICAgICAgYXBwZW5kIDogJ2JvZHknLAogICAgICAgICAgICAgIGV2ZW50IDogewogICAgICAgICAgICAgICAgZXJyb3IgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgIEFhay5pbmZvKCdBYWtMaXN0IGRldGVjdGVkICEnKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBsb2FkIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICBBYWsud2FybignQWFrTGlzdCBub3QgZGV0ZWN0ZWQgIScpOwogICAgICAgICAgICAgICAgICBBYWsubm90aWZpY2F0aW9uKCdJdCBzZWVtcyB0aGF0IHlvdSBoYXZlIG5vdCBzdWJzY3JpYmVkIG9yIGRpc2FibGVkIDxiPkFha0xpc3Q8L2I+LiA8YSBocmVmPSInICsgQWFrLnN1YnNjcmliZVVSTCArICciIHRhcmdldD0iX2JsYW5rIj5TdWJzY3JpYmU8L2E+IG9yIDxhIGhyZWY9IicgKyBBYWsuc2V0dGluZ3NVUkwgKyAnIiB0YXJnZXQ9Il9ibGFuayI+RGlzYWJsZSB0aGlzIGFsZXJ0PC9hPicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIGNoZWNrVXBkYXRlIDogZnVuY3Rpb24gKGF1dG8pIHsKCiAgICAgIHZhciBjaGVjayA9IGZ1bmN0aW9uIChub3RpZnlGYWxzZSkgewogICAgICAgIEFhay5yZXF1ZXN0KHsKICAgICAgICAgIHVybCA6IEFhay5kb3dubG9hZFVSTCwKICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICB2YXIgcmVzID0gcmVzcG9uc2UucmVzcG9uc2VUZXh0OwogICAgICAgICAgICB2YXIgc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzOwogICAgICAgICAgICBpZiAoc3RhdHVzID09IDIwMCkgewogICAgICAgICAgICAgIHZhciBsb2NhbCA9IEFhay5nZXRWZXJzaW9uKCk7CiAgICAgICAgICAgICAgdmFyIHJlbW90ZSA9IE51bWJlcihyZXMubWF0Y2goL0B2ZXJzaW9uXHMrKFxkK1wuXGQrKS8pWzFdKTsKICAgICAgICAgICAgICBpZiAobG9jYWwgPCByZW1vdGUpIHsKICAgICAgICAgICAgICAgIEFhay5ub3RpZmljYXRpb24oJ0FudGktQWRibG9jayBLaWxsZXIgdicgKyByZW1vdGUgKyAnIGlzIGF2YWlsYWJsZSA8YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyArIEFhay5kb3dubG9hZFVSTCArICciPkluc3RhbGw8L2E+LicpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAobm90aWZ5RmFsc2UpIHsKICAgICAgICAgICAgICAgIEFhay5ub3RpZmljYXRpb24oJ05vIHVwZGF0ZSBmb3VuZC4nKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKCiAgICAgIGlmIChhdXRvKSB7IC8vIGF1dG8gbW9kZQogICAgICAgIGlmIChBYWsudXNlR00gJiYgQWFrLm9wdHMuY2hlY2tVcGRhdGUgJiYgQWFrLmlzVG9wZnJhbWUpIHsKICAgICAgICAgIEFhay5yZWFkeShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIEFhay5zY2hlZHVsZSg3LCAnbmV4dGNoZWNrdXBkYXRlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGNoZWNrKGZhbHNlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7IC8vIG1hbnVhbCBtb2RlCiAgICAgICAgaWYgKEFhay5pc1RvcGZyYW1lKSB7CiAgICAgICAgICBjaGVjayh0cnVlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICB9LAogICAgb3BlbkluVGFiIDogZnVuY3Rpb24gKHVybCkgewogICAgICBpZiAodHlwZW9mIEdNX29wZW5JblRhYiAhPSAndW5kZWZpbmVkJykgewogICAgICAgIEdNX29wZW5JblRhYih1cmwpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuZXdXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsICJfYmxhbmsiKTsKICAgICAgICBuZXdXaW5kb3cuZm9jdXMoKTsKICAgICAgfQogICAgfSwKICAgIHJlcXVlc3QgOiBmdW5jdGlvbiAoc2V0dGluZ3MpIHsKICAgICAgc2V0dGluZ3MudXJsID0gc2V0dGluZ3MudXJsIHx8ICcnOwogICAgICBzZXR0aW5ncy5tZXRob2QgPSBzZXR0aW5ncy5tZXRob2QgfHwgJ0dFVCc7CiAgICAgIHNldHRpbmdzLmhlYWRlcnMgPSBzZXR0aW5ncy5oZWFkZXJzIHx8IHt9OwogICAgICBzZXR0aW5ncy50aW1lb3V0ID0gc2V0dGluZ3MudGltZW91dCB8fCAyZTQ7IC8vIDIwcwogICAgICBpZiAoc2V0dGluZ3MuZGF0YSB8fCBzZXR0aW5ncy5tZXRob2QgPT0gJ1BPU1QnKSB7CiAgICAgICAgc2V0dGluZ3MubWV0aG9kID0gJ1BPU1QnOwogICAgICAgIHNldHRpbmdzLmRhdGEgPSBBYWsuc2VyaWFsaXplKHNldHRpbmdzLmRhdGEgfHwge30pOwogICAgICAgIHNldHRpbmdzLmhlYWRlcnMgPSBBYWsuc2V0UHJvcGVydGllcyhzZXR0aW5ncy5oZWFkZXJzLCB7CiAgICAgICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJyA6ICdYTUxIdHRwUmVxdWVzdCcsCiAgICAgICAgICAgICdDb250ZW50LVR5cGUnIDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcKICAgICAgICAgIH0pOwogICAgICB9CgogICAgICAvLyBvdmVycmlkZSB0byBpbnRlZ3JhdGUgbG9nCiAgICAgIHNldHRpbmdzLl9vbmxvYWQgPSBzZXR0aW5ncy5vbmxvYWQ7CiAgICAgIHNldHRpbmdzLm9ubG9hZCA9IGZ1bmN0aW9uICh4aHIpIHsKICAgICAgICBpZiAoQWFrLm9wdHMubG9nWGhyKSB7CiAgICAgICAgICBBYWsubG9nKEFhay5nZXRTY3JpcHRNYW5hZ2VyKCkgKyAnIHhocicsIHhocik7CiAgICAgICAgfQogICAgICAgIHNldHRpbmdzLl9vbmxvYWQoeGhyKTsKICAgICAgfTsKCiAgICAgIGlmICh0eXBlb2YgR01feG1saHR0cFJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAvLyBSZXF1ZXN0IHdpdGggR00gQVBJCiAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20vMnQ3d2JyCiAgICAgICAgR01feG1saHR0cFJlcXVlc3Qoc2V0dGluZ3MpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFJlcXVlc3Qgd2l0aCBXZWIgQVBJCiAgICAgICAgLy8gVXNpbmcgcmVtb3RlIHNlcnZlciB0byBhbGxvdyBjcm9zcy1vcmlnaW4gcmVxdWVzdHMuCiAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20vb2R6NjY0YQogICAgICAgIC8vIGRvYzogaHR0cDovL3Rpbnl1cmwuY29tL3A5enJ1em4KICAgICAgICB2YXIgeGhyID0gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpOwogICAgICAgIHhoci5vcGVuKCdQT1NUJywgJ2h0dHA6Ly9yZWVrc2l0ZS5jb20vcHVibGljL3hoci5waHAnLCB0cnVlKTsKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpOwogICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgcmVzID0geGhyLnJlc3BvbnNlVGV4dDsKICAgICAgICAgIHZhciBqc29uID0gSlNPTiAmJiBKU09OLnBhcnNlKHJlcyk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoeGhyLCAicmVzcG9uc2VUZXh0IiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgY29uZmlndXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiB0cnVlLAogICAgICAgICAgICB2YWx1ZSA6IGpzb24ucmVzcG9uc2UKICAgICAgICAgIH0pOwogICAgICAgICAgc2V0dGluZ3Mub25sb2FkKHhocik7CiAgICAgICAgfTsKICAgICAgICB4aHIuc2VuZChBYWsuc2VyaWFsaXplKHNldHRpbmdzKSk7CiAgICAgIH0KICAgIH0sCiAgICBkZWxldGVWYWx1ZSA6IGZ1bmN0aW9uIChuYW1lKSB7CiAgICAgIGlmICh0eXBlb2YgR01fZGVsZXRlVmFsdWUgIT09ICJ1bmRlZmluZWQiICYmICFuYW1lKSB7CiAgICAgICAgdmFyIHZhbHMgPSBHTV9saXN0VmFsdWVzKCk7CiAgICAgICAgZm9yICh2YXIgaSBpbiB2YWxzKSB7CiAgICAgICAgICBpZiAodmFscy5oYXNPd25Qcm9wZXJ0eShpKSkKICAgICAgICAgICAgR01fZGVsZXRlVmFsdWUodmFsc1tpXSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBHTV9kZWxldGVWYWx1ZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBHTV9kZWxldGVWYWx1ZShuYW1lKTsKICAgICAgfQogICAgfSwKICAgIHNldFZhbHVlIDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CiAgICAgIGlmICh0eXBlb2YgR01fc2V0VmFsdWUgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgR01fc2V0VmFsdWUobmFtZSwgdmFsdWUpOwogICAgICB9CiAgICB9LAogICAgZ2V0VmFsdWUgOiBmdW5jdGlvbiAobmFtZSkgewogICAgICBpZiAodHlwZW9mIEdNX2xpc3RWYWx1ZXMgIT09ICJ1bmRlZmluZWQiICYmICFuYW1lKSB7CiAgICAgICAgdmFyIGxpc3QgPSB7fTsKICAgICAgICB2YXIgdmFscyA9IEdNX2xpc3RWYWx1ZXMoKTsKICAgICAgICBmb3IgKHZhciBpIGluIHZhbHMpIHsKICAgICAgICAgIGlmICh2YWxzLmhhc093blByb3BlcnR5KGkpKQogICAgICAgICAgICBsaXN0W3ZhbHNbaV1dID0gR01fZ2V0VmFsdWUodmFsc1tpXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaXN0OwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBHTV9nZXRWYWx1ZSAhPT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIEdNX2dldFZhbHVlKG5hbWUpICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIHJldHVybiBHTV9nZXRWYWx1ZShuYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSwKICAgIHNldExvY2FsIDogZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CiAgICAgIHRyeSB7CiAgICAgICAgLy8gU2VjdXJpdHlFcnJvcjogVGhlIG9wZXJhdGlvbiBpcyBpbnNlY3VyZS4KICAgICAgICAvLyBkb2M6IGh0dHA6Ly90aW55dXJsLmNvbS84cGVxd3ZkCiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIHZhbHVlLnRvU3RyaW5nKCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBBYWsud2FybigiU29ycnkhIE5vIFdlYiBTdG9yYWdlIHN1cHBvcnQuIik7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7fQogICAgfSwKICAgIGdldExvY2FsIDogZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBBYWsud2FybigiU29ycnkhIE5vIFdlYiBTdG9yYWdlIHN1cHBvcnQuIik7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSwKICAgIHNldFNlc3Npb24gOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHsKICAgICAgdHJ5IHsKICAgICAgICAvLyBEb2M6IGh0dHA6Ly90aW55dXJsLmNvbS84cGVxd3ZkCiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShuYW1lLCB2YWx1ZS50b1N0cmluZygpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgQWFrLndhcm4oIlNvcnJ5ISBObyBXZWIgU3RvcmFnZSBzdXBwb3J0LiIpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkge30KICAgIH0sCiAgICBnZXRTZXNzaW9uIDogZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShuYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgQWFrLndhcm4oIlNvcnJ5ISBObyBXZWIgU3RvcmFnZSBzdXBwb3J0LiIpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0sCiAgICBzZXRDb29raWUgOiBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIHRpbWUsIHBhdGgpIHsKICAgICAgdmFyIGV4cGlyZXMgPSBuZXcgRGF0ZSgpOwogICAgICBleHBpcmVzLnNldFRpbWUobmV3IERhdGUoKS5nZXRUaW1lKCkgKyAodGltZSB8fCAzNjUgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7CiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IG5hbWUgKyAiPSIgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpICsgIjtleHBpcmVzPSIgKyBleHBpcmVzLnRvR01UU3RyaW5nKCkgKyAiO3BhdGg9IiArIChwYXRoIHx8ICcvJyk7CiAgICB9LAogICAgZ2V0Q29va2llIDogZnVuY3Rpb24gKG5hbWUpIHsKICAgICAgdmFyIHZhbHVlID0gIjsgIiArIGRvY3VtZW50LmNvb2tpZTsKICAgICAgdmFyIHBhcnRzID0gdmFsdWUuc3BsaXQoIjsgIiArIG5hbWUgKyAiPSIpOwogICAgICBpZiAocGFydHMubGVuZ3RoID09IDIpCiAgICAgICAgcmV0dXJuIHBhcnRzLnBvcCgpLnNwbGl0KCI7Iikuc2hpZnQoKTsKICAgIH0sCiAgICBzZXRSZWFkT25seSA6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCBuYW1lLCB7CiAgICAgICAgdmFsdWUgOiB2YWx1ZSwKICAgICAgICBjb25maWd1cmFibGUgOiBmYWxzZSwKICAgICAgICB3cml0YWJsZSA6IGZhbHNlCiAgICAgIH0pOwogICAgfSwKICAgIHN0b3BSZWRpcmVjdCA6IGZ1bmN0aW9uICgpIHsKICAgICAgaWYgKCd3YXRjaCcgaW4gd2luZG93KSB7CiAgICAgICAgQWFrLnV3LndhdGNoKCJsb2NhdGlvbiIsIGZ1bmN0aW9uICgpIHt9KTsKICAgICAgICBBYWsudXcubG9jYXRpb24ud2F0Y2goImhyZWYiLCBmdW5jdGlvbiAoKSB7fSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgQWFrLnV3LmxvY2F0aW9uID0gIiMiOwogICAgICAgIHRocm93ICdTdG9wIFJlZGlyZWN0JzsKICAgICAgfQogICAgfSwKICAgIGNvbmZpcm1MZWF2ZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiAnJzsKICAgICAgfTsKICAgIH0sCiAgICBjb25maXJtUmVwb3J0IDogZnVuY3Rpb24gKGVsZW0pIHsKICAgICAgZWxlbS5pbm5lckhUTUwgPSAnUmVwb3J0JzsKICAgICAgZWxlbS50aXRsZSA9ICdSZXBvcnQgaXNzdWUgb3IgYW50aS1hZGJsb2NrJzsKICAgICAgZWxlbS5vbmNsaWNrID0gZnVuY3Rpb24gKGUpIHsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCJEbyB5b3Ugd2FudCB0byByZXBvcnQgaXNzdWUgb3IgYW50aS1hZGJsb2NrID8iKSkgeyAvLyBDbGljIG9uIE9LCiAgICAgICAgICBBYWsuZ28oQWFrLnJlcG9ydFVSTCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIEFhay5nbyhlbGVtLmhyZWYpOwogICAgICAgIH0KICAgICAgfTsKICAgIH0sCiAgICB1bnBhY2tTY3JpcHQgOiBmdW5jdGlvbiAoc291cmNlKSB7CiAgICAgIC8vIGRlb2JmdXNjYXRlOiBwYWMra2VkLCBwYWMra2VyLCBtdW4rZ2VkLCB3aStzZQogICAgICAvLyBub3RlOiAiRXhjZXB0aW9uIDQwMzAwOCIgc2VlIGdyZWFzZWZvcmsgUE0KICAgICAgdmFyIHN1YnN0cmluZyA9IHNvdXJjZS5zdWJzdHJpbmcoc291cmNlLmluZGV4T2YoJ2V2YWwoJykrNCwgc291cmNlLmxhc3RJbmRleE9mKCcpJykrMSk7CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24oJ3JldHVybiAnK3N1YnN0cmluZykoKTsKICAgIH0sCiAgICBoYXNTY3JpcHQgOiBmdW5jdGlvbiAoY29udGFpbnMsIGRvYykgewogICAgICAvLyBieTogV2F0aWxpbgogICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKAogICAgICAgIGRvYyAmJiBkb2Muc2NyaXB0cyB8fCBkb2N1bWVudC5zY3JpcHRzLAogICAgICAgIGZ1bmN0aW9uICgkc2NyaXB0KSB7CiAgICAgICAgdmFyIHNvdXJjZSA9ICRzY3JpcHQuaW5uZXJIVE1MOwogICAgICAgIHJldHVybiBzb3VyY2UgJiYgc291cmNlLmluZGV4T2YoY29udGFpbnMpICE9IC0xOwogICAgICB9KVswXTsKICAgIH0sCiAgICBhZGRTY3JpcHQgOiBmdW5jdGlvbiAoc291cmNlLCBib2R5KSB7CiAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgc2NyaXB0LnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKICAgICAgc2NyaXB0LmlubmVySFRNTCA9ICh0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nKSA/IEFhay5pbnRvU3RyaW5nKHNvdXJjZSkgOiBzb3VyY2UudG9TdHJpbmcoKTsKICAgICAgaWYgKGJvZHkpIHsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgICB9CiAgICAgIHNjcmlwdC5yZW1vdmUoKTsKICAgIH0sCiAgICBsb2FkU2NyaXB0IDogZnVuY3Rpb24gKHNyYywgYm9keSwgb25sb2FkKSB7CiAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgc2NyaXB0LnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKICAgICAgc2NyaXB0LnNyYyA9IHNyYzsKICAgICAgaWYgKG9ubG9hZCkgewogICAgICAgIHNjcmlwdC5vbmxvYWQgPSBvbmxvYWQ7CiAgICAgIH0KICAgICAgaWYgKGJvZHkpIHsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwogICAgICB9CiAgICB9LAogICAgaW1wb3J0U2NyaXB0IDogZnVuY3Rpb24gKHVybCwgY2FsbGJhY2spIHsKICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgIHVybCA6IHVybCwKICAgICAgICBvbmxvYWQgOiBmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICB2YXIgcmF3U2NyaXB0ID0gcmVzdWx0LnJlc3BvbnNlVGV4dDsKICAgICAgICAgIChuZXcgRnVuY3Rpb24oJ0FhaycsIHJhd1NjcmlwdCArICdcblxyJyArIEFhay5pbnRvU3RyaW5nKGNhbGxiYWNrKSkpKEFhayk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBpbnRvU3RyaW5nIDogZnVuY3Rpb24gKGEpIHsKICAgICAgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7CiAgICAgICAgdmFyIHN0ciA9IGEudG9TdHJpbmcoKTsKICAgICAgICB2YXIgZmlyc3QgPSBzdHIuaW5kZXhPZigieyIpICsgMTsKICAgICAgICB2YXIgbGFzdCA9IHN0ci5sYXN0SW5kZXhPZigifSIpOwogICAgICAgIHJldHVybiBzdHIuc3Vic3RyKGZpcnN0LCBsYXN0IC0gZmlyc3QpLnRyaW0oKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnKSB7CiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpOwogICAgICB9IGVsc2UgeyAvLyBhcnJheSBvciBzdHJpbmcKICAgICAgICByZXR1cm4gYS50b1N0cmluZygpOwogICAgICB9CiAgICB9LAogICAgaW50b0FycmF5IDogZnVuY3Rpb24gKGEpIHsKICAgICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JykgewogICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhKS5tYXAoZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgcmV0dXJuIGFba2V5XTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycpIHsKICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShhKTsKICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGEpKSB7CiAgICAgICAgcmV0dXJuIGE7CiAgICAgIH0KICAgIH0sCiAgICBpbnRvT2JqZWN0IDogZnVuY3Rpb24gKGEpIHsKICAgICAgaWYgKHR5cGVvZiBhID09PSAnc3RyaW5nJykgewogICAgICAgIHJldHVybiBKU09OLnBhcnNlKGEpOwogICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHsKICAgICAgICBmb3IgKHZhciBpID0gMCwgbyA9IHt9OyBpIDwgYS5sZW5ndGg7ICsraSkgewogICAgICAgICAgb1tpXSA9IGFbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybiBvOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0JykgewogICAgICAgIHJldHVybiBhOwogICAgICB9CiAgICB9LAogICAgaGFzRWxlbWVudCA6IGZ1bmN0aW9uIChzZWxlY3RvciwgY2FsbGJhY2ssIHRpbWVvdXQpIHsKICAgICAgdmFyIHJlcGVhdCA9IHRpbWVvdXQgfHwgMTA7CiAgICAgIHZhciBsb29wID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGVsZW0gPSBBYWsuZ2V0RWxlbWVudChzZWxlY3Rvcik7CiAgICAgICAgICBpZiAoZWxlbSkgewogICAgICAgICAgICBjYWxsYmFjayhlbGVtKTsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChsb29wKTsKICAgICAgICAgIH0KICAgICAgICAgIHJlcGVhdCA9IChyZXBlYXQpID8gcmVwZWF0IC0gMSA6IGNsZWFySW50ZXJ2YWwobG9vcCk7CiAgICAgICAgfSwgMWUzKTsKICAgIH0sCiAgICByZW1vdmVFbGVtZW50IDogZnVuY3Rpb24gKGVsZW0pIHsKICAgICAgaWYgKGVsZW0gaW5zdGFuY2VvZiB3aW5kb3cuSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtLnJlbW92ZSgpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtID09PSAic3RyaW5nIikgewogICAgICAgIGVsZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsZW0pOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbS5sZW5ndGg7IGkrKykgewogICAgICAgICAgZWxlbVtpXS5yZW1vdmUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBnZXRFbGVtZW50IDogZnVuY3Rpb24gKHNlbGVjdG9yLCBjb250ZXh0Tm9kZSkgewogICAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykgewogICAgICAgIGlmIChzZWxlY3Rvci5pbmRleE9mKCcvJykgPT09IDApIHsgLy8gZXg6IC8vaW1nW0BjbGFzcz0icGhvdG8iXQogICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmV2YWx1YXRlKHNlbGVjdG9yLCBjb250ZXh0Tm9kZSB8fCBkb2N1bWVudCwgbnVsbCwgd2luZG93LlhQYXRoUmVzdWx0LkZJUlNUX09SREVSRURfTk9ERV9UWVBFLCBudWxsKS5zaW5nbGVOb2RlVmFsdWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAoY29udGV4dE5vZGUgfHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yIGluc3RhbmNlb2Ygd2luZG93LkhUTUxFbGVtZW50KSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yOwogICAgICB9CiAgICB9LAogICAgY3JlYXRlRWxlbWVudCA6IGZ1bmN0aW9uIChwcm9wcykgewogICAgICB2YXIgZWxlbSwKICAgICAgbm9kZSA9IHt9OwogICAgICBmb3IgKHZhciBuYW1lIGluIHByb3BzKSB7CiAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KG5hbWUpKSB7CiAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgIGNhc2UgInRhZyI6CiAgICAgICAgICAgIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgdmFyIHRleHQgPSAoJ2lubmVyVGV4dCcgaW4gZG9jdW1lbnQpID8gJ2lubmVyVGV4dCcgOiAndGV4dENvbnRlbnQnOwogICAgICAgICAgICBub2RlW3RleHRdID0gcHJvcHNbbmFtZV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICAgIG5vZGUuaW5uZXJIVE1MID0gcHJvcHNbbmFtZV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiY2xhc3NpZCI6CiAgICAgICAgICAgIG5vZGUuY2xhc3NOYW1lID0gcHJvcHNbbmFtZV07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYXBwZW5kIjoKICAgICAgICAgICAgZWxlbSA9IEFhay5nZXRFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgZWxlbS5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJwcmVwZW5kIjoKICAgICAgICAgICAgZWxlbSA9IEFhay5nZXRFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgaWYgKGVsZW0uY2hpbGROb2Rlcy5sZW5ndGgpIHsKICAgICAgICAgICAgICBlbGVtLmluc2VydEJlZm9yZShub2RlLCBlbGVtLmNoaWxkTm9kZXNbMF0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVsZW0uYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJiZWZvcmUiOgogICAgICAgICAgICBlbGVtID0gQWFrLmdldEVsZW1lbnQocHJvcHNbbmFtZV0pOwogICAgICAgICAgICBlbGVtLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIGVsZW0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImFmdGVyIjoKICAgICAgICAgICAgZWxlbSA9IEFhay5nZXRFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShub2RlLCBlbGVtLm5leHRTaWJsaW5nKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJyZXBsYWNlIjoKICAgICAgICAgICAgZWxlbSA9IEFhay5nZXRFbGVtZW50KHByb3BzW25hbWVdKTsKICAgICAgICAgICAgZWxlbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChub2RlLCBlbGVtKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJldmVudCI6CiAgICAgICAgICAgIGZvciAodmFyIGV2TmFtZSBpbiBwcm9wcy5ldmVudCkgewogICAgICAgICAgICAgIGlmIChwcm9wcy5ldmVudC5oYXNPd25Qcm9wZXJ0eShldk5hbWUpKQogICAgICAgICAgICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKGV2TmFtZSwgcHJvcHMuZXZlbnRbZXZOYW1lXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJjYWxsYmFjayI6CiAgICAgICAgICAgIHByb3BzW25hbWVdKG5vZGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG5hbWUsIHByb3BzW25hbWVdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9LAogICAgYWRkQmFpdEVsZW1lbnQgOiBmdW5jdGlvbiAoc3RyT3B0cykgeyAvLyBleDogZGl2LmFkcyBvciBzcGFuI2Fkc0AKICAgICAgdmFyIG9wdHMgPSBzdHJPcHRzLnJlcGxhY2UoJy4nLCAnOmNsYXNzTmFtZTonKS5yZXBsYWNlKCcjJywgJzppZDonKS5zcGxpdCgnOicpOwogICAgICB2YXIgYmFpdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQob3B0c1swXSk7CiAgICAgIGJhaXQuc2V0QXR0cmlidXRlKG9wdHNbMV0sIG9wdHNbMl0pOwogICAgICBiYWl0LmlubmVySFRNTCA9ICI8YnI+IjsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGJhaXQpOwogICAgICByZXR1cm4gYmFpdDsKICAgIH0sCiAgICByZXBsYWNlRWxlbWVudCA6IGZ1bmN0aW9uIChvbGROb2RlLCBuZXdOb2RlKSB7CiAgICAgIG9sZE5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3Tm9kZSwgb2xkTm9kZSk7CiAgICB9LAogICAgc2V0RWxlbWVudCA6IGZ1bmN0aW9uIChzZWxlY3RvciwgcHJvcHMpIHsKICAgICAgdmFyIG5vZGUgPSBBYWsuZ2V0RWxlbWVudChzZWxlY3Rvcik7CiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBwcm9wcykgewogICAgICAgICAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KG5hbWUpKSB7CiAgICAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICAgICBjYXNlICJ0ZXh0IjoKICAgICAgICAgICAgICB2YXIgdGV4dCA9ICgnaW5uZXJUZXh0JyBpbiBkb2N1bWVudCkgPyAnaW5uZXJUZXh0JyA6ICd0ZXh0Q29udGVudCc7CiAgICAgICAgICAgICAgbm9kZVt0ZXh0XSA9IHByb3BzW25hbWVdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJodG1sIjoKICAgICAgICAgICAgICBub2RlLmlubmVySFRNTCA9IHByb3BzW25hbWVdOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJjbGFzcyI6CiAgICAgICAgICAgICAgbm9kZS5jbGFzc05hbWUgPSBwcm9wc1tuYW1lXTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCBwcm9wc1tuYW1lXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBhZGRTdHlsZSA6IGZ1bmN0aW9uIChjc3MpIHsKICAgICAgY3NzID0gY3NzLnJlcGxhY2UoLzsvZywgJyAhaW1wb3J0YW50OycpOwogICAgICBpZiAodHlwZW9mIEdNX2FkZFN0eWxlICE9ICd1bmRlZmluZWQnKSB7CiAgICAgICAgR01fYWRkU3R5bGUoY3NzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJykpLmlubmVySFRNTCA9IGNzczsKICAgICAgfQogICAgfSwKICAgIGxvYWRTdHlsZSA6IGZ1bmN0aW9uIChzcmMpIHsKICAgICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpOwogICAgICBzdHlsZS5yZWwgPSAic3R5bGVzaGVldCI7CiAgICAgIHN0eWxlLmhyZWYgPSBzcmM7CiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgfSwKICAgIGdldFN0eWxlIDogZnVuY3Rpb24gKHNlbGVjdG9yLCBwcm9wKSB7CiAgICAgIHZhciBlbGVtID0gQWFrLmdldEVsZW1lbnQoc2VsZWN0b3IpOwogICAgICBpZiAoZWxlbS5jdXJyZW50U3R5bGUpIHsKICAgICAgICByZXR1cm4gZWxlbS5jdXJyZW50U3R5bGVbcHJvcF07CiAgICAgIH0gZWxzZSBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApOwogICAgICB9CiAgICB9LAogICAgZGVjb2RlVVJJIDogZnVuY3Rpb24gKHN0cikgewogICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cik7CiAgICB9LAogICAgZW5jb2RlVVJJIDogZnVuY3Rpb24gKHN0cikgewogICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cik7CiAgICB9LAogICAgZW5jb2RlSFRNTCA6IGZ1bmN0aW9uIChzdHIpIHsKICAgICAgcmV0dXJuIFN0cmluZyhzdHIpLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoLz4vZywgJyZndDsnKS5yZXBsYWNlKC8iL2csICcmcXVvdDsnKTsKICAgIH0sCiAgICBkZWNvZGVIVE1MIDogZnVuY3Rpb24gKHN0cikgewogICAgICByZXR1cm4gU3RyaW5nKHN0cikucmVwbGFjZSgvJmFtcDsvZywgJyYnKS5yZXBsYWNlKC8mbHQ7L2csICc8JykucmVwbGFjZSgvJmd0Oy9nLCAnPicpLnJlcGxhY2UoLyZxdW90Oy9nLCAnIicpOwogICAgfSwKICAgIHNlcmlhbGl6ZSA6IGZ1bmN0aW9uIChvYmopIHsKICAgICAgaWYgKHR5cGVvZiBvYmogPT0gJ29iamVjdCcpIHsKICAgICAgICB2YXIgYXJyID0gW107CiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmopIHsKICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkocHJvcCkpCiAgICAgICAgICAgIGFyci5wdXNoKHByb3AgKyAnPScgKyBBYWsuZW5jb2RlVVJJKG9ialtwcm9wXSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyLmpvaW4oJyYnKTsKICAgICAgfQogICAgICByZXR1cm4gb2JqOwogICAgfSwKICAgIHVuc2VyaWFsaXplIDogZnVuY3Rpb24gKHN0cikgewogICAgICBzdHIgPSBBYWsuZGVjb2RlSFRNTChzdHIpOwogICAgICB2YXIgYXJyID0gc3RyLnNwbGl0KCcmJyk7CiAgICAgIHZhciBvYmogPSB7fTsKICAgICAgYXJyLmZvckVhY2goZnVuY3Rpb24gKGVudHJ5KSB7CiAgICAgICAgaWYgKGVudHJ5ICE9PSAnJyAmJiBlbnRyeS5zcGxpdCgnPScpKSB7CiAgICAgICAgICB2YXIgc3BsaXRzID0gZW50cnkuc3BsaXQoJz0nKTsKICAgICAgICAgIG9ialtzcGxpdHNbMF1dID0gQWFrLmRlY29kZVVSSShzcGxpdHNbMV0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiBvYmo7CiAgICB9LAogICAgdW5zZXRQcm9wZXJ0aWVzIDogZnVuY3Rpb24gKG9iaiwgcHJvcHMpIHsKICAgICAgcHJvcHMgPSAodHlwZW9mIHByb3BzID09ICdzdHJpbmcnKSA/IHByb3BzLnNwbGl0KCcsJykgOiBwcm9wczsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBwcm9wID0gcHJvcHNbaV07CiAgICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgZGVsZXRlIG9ialtwcm9wXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9iajsKICAgIH0sCiAgICBzZXRQcm9wZXJ0aWVzIDogZnVuY3Rpb24gKG9iajEsIG9iajIpIHsKICAgICAgZm9yICh2YXIgcHJvcCBpbiBvYmoyKSB7CiAgICAgICAgaWYgKG9iajIuaGFzT3duUHJvcGVydHkocHJvcCkpCiAgICAgICAgICBvYmoxW3Byb3BdID0gb2JqMltwcm9wXTsKICAgICAgfQogICAgICByZXR1cm4gb2JqMTsKICAgIH0sCiAgICBmaXhQcm90b2NvbFVSTCA6IGZ1bmN0aW9uICh1cmwpIHsKICAgICAgaWYgKC9eaHR0cC8udGVzdCh1cmwpKSB7IC8vIGFic29sdXRlCiAgICAgICAgcmV0dXJuIHVybDsKICAgICAgfSBlbHNlIGlmICgvXlwvXC8vLnRlc3QodXJsKSkgeyAvLyByZWxhdGl2ZQogICAgICAgIHJldHVybiAnaHR0cDonICsgdXJsOwogICAgICB9IGVsc2UgeyAvLyBub25lCiAgICAgICAgcmV0dXJuICdodHRwOi8vJyArIHVybDsKICAgICAgfQogICAgfSwKICAgIGZha2VGdWNrQWRCbG9jayA6IGZ1bmN0aW9uIChpbnN0YW5jZU5hbWUsIGNsYXNzTmFtZSkgewoKICAgICAgLy8gaW5qZWN0IGZha2UgZnVja2FkYmx1Y2sKICAgICAgQWFrLmFkZFNjcmlwdChBYWsuaW50b1N0cmluZyhmdW5jdGlvbiAoKSB7CgogICAgICAgICAgdmFyIENMQVNTTkFNRSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgICB2YXIgY2FsbE5vdERldGVjdGVkID0gZmFsc2U7CiAgICAgICAgICAgIHRoaXMuZGVidWcgPSB7CiAgICAgICAgICAgICAgc2V0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBnZXQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLm9uRGV0ZWN0ZWQgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHsKICAgICAgICAgICAgICB0aGlzLm9uKHRydWUsIGNhbGxiYWNrKTsKICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5vbk5vdERldGVjdGVkID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgdGhpcy5vbihmYWxzZSwgY2FsbGJhY2spOwogICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLm9uID0gZnVuY3Rpb24gKGRldGVjdGVkLCBjYWxsYmFjaykgewogICAgICAgICAgICAgIGlmICghZGV0ZWN0ZWQpIHsKICAgICAgICAgICAgICAgIGNhbGxOb3REZXRlY3RlZCA9IGNhbGxiYWNrOwogICAgICAgICAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgMSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhbJ0FudGlBZGJLaWxsZXInLCBsb2NhdGlvbi5ob3N0LCAnRnVja0FkQmxvY2snXSk7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgc2V0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICBnZXQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMuY2hlY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgaWYgKGNhbGxOb3REZXRlY3RlZCkKICAgICAgICAgICAgICAgIGNhbGxOb3REZXRlY3RlZCgpOwogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLmVtaXRFdmVudCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5jbGVhckV2ZW50ID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICB9OwoKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdpbmRvdywgewogICAgICAgICAgICBDTEFTU05BTUUgOiB7CiAgICAgICAgICAgICAgdmFsdWUgOiBDTEFTU05BTUUsCiAgICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3csIHsKICAgICAgICAgICAgSU5TVEFOQ0VOQU1FIDogewogICAgICAgICAgICAgIHZhbHVlIDogbmV3IENMQVNTTkFNRSgpLAogICAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgIH0pLnJlcGxhY2UoL0lOU1RBTkNFTkFNRS9nLCBpbnN0YW5jZU5hbWUgfHwgJ2Z1Y2tBZEJsb2NrJykKICAgICAgICAucmVwbGFjZSgvQ0xBU1NOQU1FL2csIGNsYXNzTmFtZSB8fCAnRnVja0FkQmxvY2snKSk7CgogICAgfSwgLy8gRXZlbnRzCiAgICBvbkV2ZW50IDogZnVuY3Rpb24gKGVsZW1lbnQsIHR5cGUsIGxpc3RlbmVyLCBidWJibGVzKSB7CiAgICAgIGlmICh3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgeyAvLyBGb3IgYWxsIG1ham9yIGJyb3dzZXJzLCBleGNlcHQgSUUgOCBhbmQgZWFybGllcgogICAgICAgIChlbGVtZW50IHx8IHdpbmRvdykuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgYnViYmxlcyB8fCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7IC8vIEZvciBJRSA4IGFuZCBlYXJsaWVyIHZlcnNpb25zCiAgICAgICAgKGVsZW1lbnQgfHwgd2luZG93KS5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgbGlzdGVuZXIpOwogICAgICB9CiAgICAgIHJldHVybiBhcmd1bWVudHM7CiAgICB9LAogICAgb2ZmRXZlbnQgOiBmdW5jdGlvbiAoZWxlbWVudCwgdHlwZSwgbGlzdGVuZXIsIGJ1YmJsZXMpIHsKICAgICAgaWYgKHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKSB7IC8vIEZvciBhbGwgbWFqb3IgYnJvd3NlcnMsIGV4Y2VwdCBJRSA4IGFuZCBlYXJsaWVyCiAgICAgICAgKGVsZW1lbnQgfHwgd2luZG93KS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBidWJibGVzIHx8IGZhbHNlKTsKICAgICAgfSBlbHNlIHsgLy8gRm9yIElFIDggYW5kIGVhcmxpZXIgdmVyc2lvbnMKICAgICAgICAoZWxlbWVudCB8fCB3aW5kb3cpLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBsaXN0ZW5lcik7CiAgICAgIH0KICAgIH0sCiAgICBlbWl0RXZlbnQgOiBmdW5jdGlvbiAoZWxlbWVudCwgdHlwZSwgZGV0YWlsLCBidWJibGVzLCBjYW5jZWxhYmxlKSB7CiAgICAgIHZhciBldmVudDsKICAgICAgaWYgKHdpbmRvdy5DdXN0b21FdmVudCkgewogICAgICAgIGV2ZW50ID0gbmV3IHdpbmRvdy5DdXN0b21FdmVudCh0eXBlLCB7CiAgICAgICAgICAgICJkZXRhaWwiIDogZGV0YWlsIHx8IHVuZGVmaW5lZAogICAgICAgICAgfSwgYnViYmxlcyB8fCBmYWxzZSwgY2FuY2VsYWJsZSB8fCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKTsKICAgICAgICBldmVudC5pbml0Q3VzdG9tRXZlbnQoJ29uJyArIHR5cGUsIGJ1YmJsZXMgfHwgZmFsc2UsIGNhbmNlbGFibGUgfHwgZmFsc2UsIHsKICAgICAgICAgICJkZXRhaWwiIDogZGV0YWlsIHx8IHVuZGVmaW5lZAogICAgICAgIH0pOwogICAgICB9CiAgICAgIChlbGVtZW50IHx8IHdpbmRvdykuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgICB9LAogICAgZGV0ZWN0ZWQgOiBmdW5jdGlvbiAobmFtZSkgewogICAgICBpZiAoQWFrLm9wdHMuZGVidWcgJiYgQWFrLm9wdHMubG9nRGV0ZWN0ZWQpIHsKICAgICAgICBBYWsuZW1pdEV2ZW50KHdpbmRvdywgJ2RldGVjdGVkJywgbmFtZSk7CiAgICAgIH0KICAgIH0sCiAgICByZWFkeSA6IGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgICBBYWsub25FdmVudCh3aW5kb3csICdsb2FkJywgY2FsbGJhY2spOwogICAgfSwKICAgIHBsYXllciA6IGZ1bmN0aW9uICgpIHsKCiAgICAgIHZhciBQbGF5ZXIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy50YXJnZXQgPSB7fTsKICAgICAgICB0aGlzLnBsYXllciA9IHt9OwogICAgICAgIHRoaXMubmFtZSA9IG51bGw7CiAgICAgICAgdGhpcy52ZXJzaW9uID0gbnVsbDsKICAgICAgICB0aGlzLmxpYnJhcnkgPSBudWxsOwogICAgICAgIHRoaXMuZmFsbGJhY2sgPSAndmxjJzsKICAgICAgICB0aGlzLmF1dG9wbGF5ID0gQWFrLm9wdHMuYXV0b1BsYXk7CiAgICAgICAgdGhpcy5hcmdzID0gbnVsbDsKICAgICAgICB0aGlzLnNldHVwID0ge307CiAgICAgICAgdGhpcy5vcHRpb25zID0gewogICAgICAgICAgYnVpbGQgOiAnZW1iZWQnLAogICAgICAgICAgaW5zZXJ0IDogJ3JlcGxhY2UnLAogICAgICAgICAgY3Jvc3NTZXR1cCA6IHRydWUKICAgICAgICB9OwogICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IHsgLy8gZmxhc2gKICAgICAgICAgIHdtb2RlIDogJ29wYXF1ZScsCiAgICAgICAgICBxdWFsaXR5IDogJ2hpZ2gnLAogICAgICAgICAgYmdjb2xvciA6ICcjMDAwMDAwJywKICAgICAgICAgIHR5cGUgOiAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnLAogICAgICAgICAgcGx1Z2luc3BhZ2UgOiAnaHR0cDovL3d3dy5hZG9iZS5jb20vZ28vZ2V0Zmxhc2gnLAogICAgICAgICAgYWxsb3dzY3JpcHRhY2Nlc3MgOiAnYWx3YXlzJywgLy8gbmV2ZXIgLyBhbHdheXMKICAgICAgICAgIGFsbG93ZnVsbHNjcmVlbiA6IHRydWUKICAgICAgICB9OwogICAgICB9OwoKICAgICAgUGxheWVyLnByb3RvdHlwZSA9IHsgLy8gaHR0cDovL3Rpbnl1cmwuY29tL3BiNmZ0aGoKICAgICAgICBnZXRUYXJnZXROb2RlIDogZnVuY3Rpb24gKGVsZW1lbnQpIHsKCiAgICAgICAgICB0aGlzLnRhcmdldC5ub2RlID0gQWFrLmdldEVsZW1lbnQoZWxlbWVudCk7CiAgICAgICAgICB0aGlzLnRhcmdldC5odG1sID0gdGhpcy50YXJnZXQubm9kZS5vdXRlckhUTUw7CiAgICAgICAgICB0aGlzLnRhcmdldC5wYXJlbnQgPSB0aGlzLnRhcmdldC5ub2RlLnBhcmVudE5vZGU7CiAgICAgICAgICB0aGlzLnRhcmdldC50YWcgPSB0aGlzLnRhcmdldC5ub2RlLnRhZ05hbWU7CgogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmlkID0gdGhpcy5hdHRyaWJ1dGVzLm5hbWUgPSBBYWsuZ2VuZXJhdGVJRCgpOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCA9IHRoaXMudGFyZ2V0Lm5vZGUuaGVpZ2h0IHx8IHRoaXMudGFyZ2V0Lm5vZGUuY2xpZW50SGVpZ2h0IHx8ICc0ODBweCc7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMud2lkdGggPSB0aGlzLnRhcmdldC5ub2RlLndpZHRoIHx8IHRoaXMudGFyZ2V0Lm5vZGUuY2xpZW50V2lkdGggfHwgJzY0MHB4JzsKICAgICAgICB9LAogICAgICAgIGdldE1pbWVUeXBlIDogZnVuY3Rpb24gKHR5cGUpIHsKICAgICAgICAgIC8vIGRvYzogaHR0cDovL3Rpbnl1cmwuY29tL2pyczhmZ3oKICAgICAgICAgIHN3aXRjaCAodHlwZS50b0xvd2VyQ2FzZSgpKSB7CiAgICAgICAgICBjYXNlICdtcDQnOgogICAgICAgICAgICByZXR1cm4gJ3ZpZGVvL21wNCc7CiAgICAgICAgICBjYXNlICd3ZWJtJzoKICAgICAgICAgICAgcmV0dXJuICd2aWRlby93ZWJtJzsKICAgICAgICAgIGNhc2UgJ29nZyc6CiAgICAgICAgICBjYXNlICdvZ3YnOgogICAgICAgICAgICByZXR1cm4gJ3ZpZGVvL29nZyc7CiAgICAgICAgICBjYXNlICdmbHYnOgogICAgICAgICAgICByZXR1cm4gJ3ZpZGVvL3gtZmx2JzsKICAgICAgICAgIGNhc2UgJ2hscyc6CiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24veC1tcGVnVVJMJzsKICAgICAgICAgIGNhc2UgJ2hkcyc6CiAgICAgICAgICAgIHJldHVybiAnYXBwbGljYXRpb24vZjRtK3htbCc7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGJ1aWxkaW5nIDogZnVuY3Rpb24gKHRhZ05hbWUpIHsKICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgICBpZiAoQWFrLm9wdHMuZm9yY2VWTEMgJiYgdGhpcy5uYW1lICE9PSAndmxjJykgewogICAgICAgICAgICBBYWsuaW5mbygnZm9yY2UgcGxheWluZyB3aXRoIFZMQycpOwogICAgICAgICAgICByZXR1cm4gdGhpcy52bGMuYXBwbHkodGhpcywgdGhpcy5hcmdzKTsKICAgICAgICAgIH0KCiAgICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHsKICAgICAgICAgIGNhc2UgJ2lmcmFtZSc6CiAgICAgICAgICAgIHRoaXMucGxheWVyLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ3NyYycsIHRoaXMuYXR0cmlidXRlcy5zcmMgfHwgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCArICcvJyk7CiAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuc3JjZG9jKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMucGxheWVyLm5vZGUuaGFzQXR0cmlidXRlKCJzcmNkb2MiKSB8fCAnc3JjZG9jJyBpbiB0aGlzLnBsYXllci5ub2RlKSB7CiAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZSgnc3JjZG9jJywgdGhpcy5hdHRyaWJ1dGVzLnNyY2RvYyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGRvZXMgbm90IHdvcmsgY29ycmVjdGx5IHdpdGggZmxvd3BsYXllcgogICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ3NyYycsICJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PXV0Zi04LCIgKyBlbmNvZGVVUklDb21wb25lbnQodGhpcy5hdHRyaWJ1dGVzLnNyY2RvYykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB0aGlzLnNldHVwLndpZHRoKTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHRoaXMuc2V0dXAuaGVpZ2h0KTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2hlaWdodDonICsgdGhpcy5zZXR1cC5oZWlnaHQgKyAncHg7IHdpZHRoOicgKyB0aGlzLnNldHVwLndpZHRoICsgJ3B4OycpOwogICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZSgnZnJhbWVib3JkZXInLCAwKTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoJ3Njcm9sbGluZycsICdubycpOwogICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZSgnYWxsb3dmdWxsc2NyZWVuJywgdHJ1ZSk7IC8vIGh0dHA6Ly90aW55dXJsLmNvbS9veXllaGFiCiAgICAgICAgICAgIC8vIGFsbG93ZnVsbHNjcmVlbiB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIG9hbGxvd2Z1bGxzY3JlZW4gbXNhbGxvd2Z1bGxzY3JlZW4KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICd2aWRlbyc6CiAgICAgICAgICAgIHZhciBhdHRyTmFtZTsKICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7CiAgICAgICAgICAgIGZvciAoYXR0ck5hbWUgaW4gdGhpcy5hdHRyaWJ1dGVzKSB7CiAgICAgICAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpCiAgICAgICAgICAgICAgICB0aGlzLnBsYXllci5ub2RlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgdGhpcy5hdHRyaWJ1dGVzW2F0dHJOYW1lXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuYXV0b3BsYXkpIHsgLy8gZml4IGJ1ZyBkdXBsaWNhdGUgcGxheWluZyBvbiBmaXJlZm94L2Nocm9tZQogICAgICAgICAgICAgIHRoaXMucGxheWVyLm5vZGUub25sb2Fkc3RhcnQgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAvL3RoaXMucGxheSgpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMucGxheWVyLm5vZGUub25lcnJvciA9IGZ1bmN0aW9uICgpIHsgLy8gc3dpdGNoIHRvIHBsdWdpbiBwbGF5ZXIKICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHNlbGYuYXJnc1swXSA9IHNlbGYucGxheWVyLm5vZGU7CiAgICAgICAgICAgICAgICBzZWxmLnZsY3BsYXllci5hcHBseShzZWxmLCBzZWxmLmFyZ3MpOwogICAgICAgICAgICAgIH0sIDUwMDApOwogICAgICAgICAgICB9OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6IC8vIGVtYmVkCiAgICAgICAgICAgIHRoaXMucGxheWVyLm5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdlbWJlZCcpOwogICAgICAgICAgICBmb3IgKGF0dHJOYW1lIGluIHRoaXMuYXR0cmlidXRlcykgewogICAgICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoYXR0ck5hbWUpKQogICAgICAgICAgICAgICAgdGhpcy5wbGF5ZXIubm9kZS5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIHRoaXMuYXR0cmlidXRlc1thdHRyTmFtZV0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnBsYXllci5odG1sID0gdGhpcy5wbGF5ZXIubm9kZS5vdXRlckhUTUw7CiAgICAgICAgICB0aGlzLnBsYXllci50YWcgPSB0aGlzLnBsYXllci5ub2RlLnRhZ05hbWU7CiAgICAgICAgICB0aGlzLmluc2VydGluZygpOwogICAgICAgIH0sCiAgICAgICAgaW5zZXJ0aW5nIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuaW5zZXJ0KSB7CiAgICAgICAgICBjYXNlICdpbm5lcic6CiAgICAgICAgICAgIHRoaXMudGFyZ2V0Lm5vZGUuaW5uZXJIVE1MID0gdGhpcy5wbGF5ZXIuaHRtbDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICdhcHBlbmQnOgogICAgICAgICAgICB0aGlzLnRhcmdldC5wYXJlbnQucmVwbGFjZUNoaWxkKHRoaXMucGxheWVyLm5vZGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6IC8vIHJlcGxhY2UKICAgICAgICAgICAgdGhpcy50YXJnZXQucGFyZW50LnJlcGxhY2VDaGlsZCh0aGlzLnBsYXllci5ub2RlLCB0aGlzLnRhcmdldC5ub2RlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChBYWsub3B0cy5sb2dQbGF5ZXIpIHsKICAgICAgICAgICAgQWFrLmxvZygncGxheWVyJywgdGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAogICAgICAgIGVkaXRpbmcgOiBmdW5jdGlvbiAoZWxlbSwgb3B0cykgeyAvLyByZXZpZXcKICAgICAgICAgIEFhay5oYXNFbGVtZW50KGVsZW0sIGZ1bmN0aW9uICh0aGlzRWxlbWVudCkgewogICAgICAgICAgICB2YXIgb2JqLAogICAgICAgICAgICBzd2YsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBwYXJ0cywKICAgICAgICAgICAgcGFyYW0sCiAgICAgICAgICAgIGF0dHJpYnV0ZXMsCiAgICAgICAgICAgIGF0dHJOYW1lOwogICAgICAgICAgICB2YXIgc28gPSB0aGlzRWxlbWVudDsKICAgICAgICAgICAgdmFyIGNsb25lID0gc28uY2xvbmVOb2RlKHRydWUpOwoKICAgICAgICAgICAgLy8gc2V0IGF0dHJpaWJ1dGVzCiAgICAgICAgICAgIGlmIChvcHRzLnNldEF0dHJpYnV0ZSkgewogICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBvcHRzLnNldEF0dHJpYnV0ZTsKICAgICAgICAgICAgICBmb3IgKGF0dHJOYW1lIGluIGF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgICAgIGlmIChjbG9uZS5xdWVyeVNlbGVjdG9yKCdwYXJhbVtuYW1lPSInICsgYXR0ck5hbWUgKyAnIl0nKSkgewogICAgICAgICAgICAgICAgICBjbG9uZS5xdWVyeVNlbGVjdG9yKCdwYXJhbVtuYW1lPSInICsgYXR0ck5hbWUgKyAnIl0nKS52YWx1ZSA9IGF0dHJpYnV0ZXNbYXR0ck5hbWVdOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbG9uZS5nZXRBdHRyaWJ1dGUoYXR0ck5hbWUpKSB7CiAgICAgICAgICAgICAgICAgIGNsb25lLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0cmlidXRlc1thdHRyTmFtZV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gdW5zZXQgYXR0cmlidXRlcwogICAgICAgICAgICBpZiAob3B0cy51bnNldEF0dHJpYnV0ZXMpIHsKICAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gb3B0cy5kZWxBdHRyaWJ1dGVzOwogICAgICAgICAgICAgIGZvciAoYXR0ck5hbWUgaW4gYXR0cmlidXRlcykgewogICAgICAgICAgICAgICAgaWYgKGNsb25lLnF1ZXJ5U2VsZWN0b3IoJ3BhcmFtW25hbWU9IicgKyBhdHRyTmFtZSArICciXScpKSB7CiAgICAgICAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGNsb25lLnF1ZXJ5U2VsZWN0b3IoJ3BhcmFtW25hbWU9IicgKyBhdHRyTmFtZSArICciXScpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xvbmUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKSkgewogICAgICAgICAgICAgICAgICBkZWxldGUgYXR0cmlidXRlc1thdHRyTmFtZV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAob3B0cy5zZXRGbGFzaHZhcnMgfHwgb3B0cy51bnNldEZsYXNodmFycykgewogICAgICAgICAgICAgIGlmIChjbG9uZS5xdWVyeVNlbGVjdG9yKCdwYXJhbVtuYW1lPSJmbGFzaHZhcnMiXScpKSB7CiAgICAgICAgICAgICAgICBwYXJhbSA9IGNsb25lLnF1ZXJ5U2VsZWN0b3IoJ3BhcmFtW25hbWU9ImZsYXNodmFycyJdJyk7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcmFtLnZhbHVlOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xvbmUuZ2V0QXR0cmlidXRlKCdmbGFzaHZhcnMnKSkgewogICAgICAgICAgICAgICAgdmFsdWUgPSBjbG9uZS5nZXRBdHRyaWJ1dGUoJ2ZsYXNodmFycycpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xvbmUuZ2V0QXR0cmlidXRlKCdkYXRhJykgJiYgY2xvbmUuZ2V0QXR0cmlidXRlKCdkYXRhJykuaW5kZXhPZignPycpID49IDApIHsKICAgICAgICAgICAgICAgIHBhcnRzID0gY2xvbmUuZ2V0QXR0cmlidXRlKCdkYXRhJykuc3BsaXQoJz8nLCAyKTsKICAgICAgICAgICAgICAgIHN3ZiA9IHBhcnRzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnRzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBvYmogPSBBYWsudW5zZXJpYWxpemUodmFsdWUpOwogICAgICAgICAgICAgIGlmIChvcHRzLnNldEZsYXNodmFycykgewogICAgICAgICAgICAgICAgb2JqID0gQWFrLnNldFByb3BlcnRpZXMob2JqLCBvcHRzLnNldEZsYXNodmFycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChvcHRzLnVuc2V0Rmxhc2h2YXJzKSB7CiAgICAgICAgICAgICAgICBvYmogPSBBYWsudW5zZXRQcm9wZXJ0aWVzKG9iaiwgb3B0cy51bnNldEZsYXNodmFycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhbHVlID0gQWFrLnNlcmlhbGl6ZShvYmopOwoKICAgICAgICAgICAgICBpZiAocGFyYW0pIHsKICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gdmFsdWU7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzd2YpIHsKICAgICAgICAgICAgICAgIGNsb25lLnNldEF0dHJpYnV0ZSgnZGF0YScsIHN3ZiArICc/JyArIHZhbHVlKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY2xvbmUuc2V0QXR0cmlidXRlKCdmbGFzaHZhcnMnLCB2YWx1ZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIHJlcGxhY2UKICAgICAgICAgICAgQWFrLmxvZyhzbywgY2xvbmUsIG9iaik7CiAgICAgICAgICAgIEFhay5yZXBsYWNlRWxlbWVudChzbywgY2xvbmUpOwogICAgICAgICAgfSk7CiAgICAgICAgfSwKICAgICAgICBlbWJlZGRpbmcgOiBmdW5jdGlvbiAoaWQsIHNldHVwLCBhdHRyaWJ1dGVzLCBvcHRpb25zKSB7IAogICAgICAgIAogICAgICAgICAgdGhpcy5nZXRUYXJnZXROb2RlKGlkKTsKICAgICAgICAgIHRoaXMuYXJncyA9IGFyZ3VtZW50czsKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IEFhay5zZXRQcm9wZXJ0aWVzKHRoaXMuYXR0cmlidXRlcywgYXR0cmlidXRlcyB8fCB7fSk7CiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwoKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5zcmMgPSBzZXR1cC5zd2Y7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuaWQgPSB0aGlzLmF0dHJpYnV0ZXMubmFtZSA9IEFhay5nZW5lcmF0ZUlEKCk7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuaGVpZ2h0ID0gc2V0dXAuaGVpZ2h0IHx8IHRoaXMuYXR0cmlidXRlcy5oZWlnaHQ7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMud2lkdGggPSBzZXR1cC53aWR0aCB8fCB0aGlzLmF0dHJpYnV0ZXMud2lkdGg7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuZmxhc2h2YXJzID0gQWFrLnNlcmlhbGl6ZShzZXR1cCk7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsudW5zZXRQcm9wZXJ0aWVzKHRoaXMuYXR0cmlidXRlcywgJ3N3ZicpOwoKICAgICAgICAgIHRoaXMuYnVpbGRpbmcoJ2VtYmVkJyk7CiAgICAgICAgfSwKICAgICAgICBqd3BsYXllciA6IGZ1bmN0aW9uIChpZCwgc2V0dXAsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHsKICAgICAgICAgIC8vIEp3UGxheWVyIDcgKGZsYXNoL2h0bWw1KQogICAgICAgICAgLy8gbm90ZTogcHJvYmxlbSB3aXRoIHNzbAogICAgICAgICAgLy8gc2V0dXA6IGh0dHA6Ly90aW55dXJsLmNvbS9oaHJnamFwLCBodHRwOi8vdGlueXVybC5jb20vZ3FzNDZ0bQogICAgICAgICAgLy8gYXBpOiBodHRwczovL2RldmVsb3Blci5qd3BsYXllci5jb20vanctcGxheWVyL2RvY3MvZGV2ZWxvcGVyLWd1aWRlL2FwaS9qYXZhc2NyaXB0X2FwaV9yZWZlcmVuY2UvCiAgICAgICAgICAvLyBobHM6IGh0dHA6Ly90aW55dXJsLmNvbS9weGw5c2NxCiAgICAgICAgICAvLyBobHMtdGVzdGVyOiBodHRwOi8vZGVtby5qd3BsYXllci5jb20vc3RyZWFtLXRlc3Rlci8KICAgICAgICAgIC8vIHJ0bXAtZGVtbzogaHR0cHM6Ly93d3cuc2NhbGVlbmdpbmUuY29tL2p3NgogICAgICAgICAgLy8gaWZyYW1lOiBodHRwOi8vdGlueXVybC5jb20vODZhZ2c2OAoKICAgICAgICAgIHRoaXMuZ2V0VGFyZ2V0Tm9kZShpZCk7CiAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgfHwge30pOwogICAgICAgICAgdGhpcy5vcHRpb25zID0gQWFrLnNldFByb3BlcnRpZXModGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKCiAgICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNyb3NzU2V0dXAgPT09IHRydWUpIHsKICAgICAgICAgICAgdGhpcy5zZXR1cCA9IHsKICAgICAgICAgICAgICBjb250cm9scyA6IHRydWUsCiAgICAgICAgICAgICAgZmlsZSA6IHNldHVwLnNvdXJjZSwKICAgICAgICAgICAgICBhYm91dHRleHQgOiBBYWsubmFtZSwKICAgICAgICAgICAgICBhYm91dGxpbmsgOiBBYWsuaG9tZVVSTCwKICAgICAgICAgICAgICB3aWR0aCA6IHNldHVwLndpZHRoIHx8IHRoaXMuYXR0cmlidXRlcy53aWR0aCwKICAgICAgICAgICAgICBoZWlnaHQgOiBzZXR1cC5oZWlnaHQgfHwgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCwKICAgICAgICAgICAgICBhdXRvc3RhcnQgOiBzZXR1cC5hdXRvcGxheSB8fCB0aGlzLmF1dG9wbGF5LAogICAgICAgICAgICAgIHByaW1hcnkgOiAnaHRtbDUnLAogICAgICAgICAgICAgIHByZWxvYWQgOiAnYXV0bycsCiAgICAgICAgICAgICAgc2tpbiA6IHsgLy8gU2V2ZW4gfCBTaXggfCBGaXZlIHwgR2xvdyB8IEJlZWxkZW4gfCBWYXBvciB8IEJla2xlIHwgUm91bmRzdGVyIHwgU3Rvcm10cm9vcGVyCiAgICAgICAgICAgICAgICBuYW1lIDogc2V0dXAuc2tpbiB8fCAic2l4IiAvLyBkZWZhdWx0IHNraW4gSldQNgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKFsnbXA0JywgJ3dlYm0nLCAnb2dnJywgJ29ndiddLmluZGV4T2Yoc2V0dXAudHlwZSkgPT09IC0xKSB7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5wcmltYXJ5ID0gJ2ZsYXNoJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2V0dXAudHlwZSA9PT0gJ2hscycpIHsKICAgICAgICAgICAgICB0aGlzLnNldHVwLmhsc2h0bWwgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnNyY2RvYyA9ICc8aHRtbD48aGVhZD48c3R5bGUgdHlwZT0idGV4dC9jc3MiPkBmb250LWZhY2V7Zm9udC1mYW1pbHk6anctaWNvbnM7c3JjOnVybCgnICsgbG9jYXRpb24ucHJvdG9jb2wgKyAnc3NsLnAuandwY2RuLmNvbS9wbGF5ZXIvdi83LjQuMy9qdy1pY29ucy53b2ZmKSBmb3JtYXQoIndvZmYiKSx1cmwoJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vc3NsLnAuandwY2RuLmNvbS9wbGF5ZXIvdi83LjQuMy9qdy1pY29ucy50dGYpIGZvcm1hdCgidHJ1ZXR5cGUiKTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9PC9zdHlsZT48c2NyaXB0IHNyYz0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vY29udGVudC5qd3BsYXRmb3JtLmNvbS9saWJyYXJpZXMvVjZOZkV6VDcuanMiPjwvc2NyaXB0PjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+aHRtbCwgYm9keXtwYWRkaW5nOjA7IG1hcmdpbjowO308L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGlkPSJqdy1tb3ZpZSI+PC9kaXY+PHNjcmlwdD5qd3BsYXllcigianctbW92aWUiKS5zZXR1cCgnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXR1cCkgKyAnKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPic7CgogICAgICAgICAgdGhpcy5idWlsZGluZygnaWZyYW1lJyk7CiAgICAgICAgfSwKICAgICAgICB2aWRlb2pzIDogZnVuY3Rpb24gKGlkLCBzZXR1cCwgYXR0cmlidXRlcywgb3B0aW9ucykgeyAKICAgICAgICAgIC8vIFZpZGVvSnMgNSAoZmxhc2gvaHRtbDUpCiAgICAgICAgICAvLyBzZXR1cDogaHR0cDovL3Rpbnl1cmwuY29tL3BjZ3gyb2IKICAgICAgICAgIC8vIHBsYXliYWNrOiBodHRwOi8vdGlueXVybC5jb20vbnNjenRtbQogICAgICAgICAgLy8gZGVtbzogaHR0cDovL2pzZmlkZGxlLm5ldC9OOFpzNS8xOC8KICAgICAgICAgIC8vIHBsdWdpbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS92aWRlb2pzL3ZpZGVvLmpzL3dpa2kvUGx1Z2lucwoKICAgICAgICAgIHRoaXMuZ2V0VGFyZ2V0Tm9kZShpZCk7CiAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgfHwge30pOwogICAgICAgICAgdGhpcy5vcHRpb25zID0gQWFrLnNldFByb3BlcnRpZXModGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKCiAgICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNyb3NzU2V0dXAgPT09IHRydWUpIHsKICAgICAgICAgICAgdGhpcy5zZXR1cCA9IHsKICAgICAgICAgICAgICBjb250cm9scyA6IHRydWUsCiAgICAgICAgICAgICAgcHJlbG9hZCA6ICdhdXRvJywKICAgICAgICAgICAgICB3aWR0aCA6IHNldHVwLndpZHRoIHx8IHRoaXMuYXR0cmlidXRlcy53aWR0aCwKICAgICAgICAgICAgICBoZWlnaHQgOiBzZXR1cC5oZWlnaHQgfHwgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCwKICAgICAgICAgICAgICB0ZWNoT3JkZXIgOiBbImh0bWw1IiwgImZsYXNoIl0sCiAgICAgICAgICAgICAgYXV0b3BsYXkgOiBzZXR1cC5hdXRvcGxheSB8fCB0aGlzLmF1dG9wbGF5LAogICAgICAgICAgICAgIHNvdXJjZXMgOiBbewogICAgICAgICAgICAgICAgICB0eXBlIDogdGhpcy5nZXRNaW1lVHlwZShzZXR1cC50eXBlKSwKICAgICAgICAgICAgICAgICAgc3JjIDogc2V0dXAuc291cmNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9OwogICAgICAgICAgICAvKiBkb24ndCB3b3JrIAogICAgICAgICAgICBpZiAoc2V0dXAudHlwZSA9PT0gJ2hscycpIHsKICAgICAgICAgICAgICB0ZWNoT3JkZXIgOiBbImZsYXNoIiwgImh0bWw1Il0sCiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5mbGFzaCA9IHsKICAgICAgICAgICAgICAgIC8vc3dmIDogIi8vcmVla3NpdGUuY29tL3B1YmxpYy9zd2YvdmlkZW9qcy1mbGFzaGxzLnN3ZiIKICAgICAgICAgICAgICAgIHN3ZiA6ICdodHRwOi8vd3d3LmZsYXNobHMub3JnL3ZpZGVvanMvdmlkZW8tanMuc3dmJwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKi8KICAgICAgICAgIH0KCiAgICAgICAgICAvLyAKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5zcmNkb2MgPSAnPGh0bWw+PGhlYWQ+PGxpbmsgaHJlZj0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3ZpZGVvLmpzLzUuMTAuNS9hbHQvdmlkZW8tanMtY2RuLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI+PHNjcmlwdCBzcmM9IicgKyBsb2NhdGlvbi5wcm90b2NvbCArICcvL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy92aWRlby5qcy81LjEwLjUvdmlkZW8ubWluLmpzIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL3ZpZGVvanMtY29udHJpYi1obHMvMy4xLjAvdmlkZW9qcy1jb250cmliLWhscy5taW4uanMiPjwvc2NyaXB0PjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+aHRtbCwgYm9keXtwYWRkaW5nOjA7IG1hcmdpbjowO30udmpzLWRlZmF1bHQtc2tpbntjb2xvcjojZWVlfS52anMtZGVmYXVsdC1za2luIC52anMtcGxheS1wcm9ncmVzcywudmpzLWRlZmF1bHQtc2tpbiAudmpzLXZvbHVtZS1sZXZlbHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9LnZqcy1kZWZhdWx0LXNraW4gLnZqcy1iaWctcGxheS1idXR0b24sLnZqcy1kZWZhdWx0LXNraW4gLnZqcy1jb250cm9sLWJhcntiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjIpfS52anMtZGVmYXVsdC1za2luIC52anMtc2xpZGVye2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMyl9PC9zdHlsZT48L2hlYWQ+PGJvZHk+PHZpZGVvIGlkPSJ2anMtbW92aWUiIGNsYXNzPSJ2aWRlby1qcyB2anMtZGVmYXVsdC1za2luIHZqcy1iaWctcGxheS1jZW50ZXJlZCI+PC92aWRlbz48c2NyaXB0PnZpZGVvanMoInZqcy1tb3ZpZSIsICcgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnNldHVwKSArICcpPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4nOwoKICAgICAgICAgIHRoaXMuYnVpbGRpbmcoJ2lmcmFtZScpOwogICAgICAgIH0sCiAgICAgICAgZmxvd3BsYXllciA6IGZ1bmN0aW9uIChpZCwgc2V0dXAsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHsKICAgICAgICAgIC8vIEZsb3dQbGF5ZXIgNiAoZmxhc2gpCiAgICAgICAgICAvLyBub3RlOiBwcm9ibGVtIHdpdGggZmxhc2hwbGF5ZXIKICAgICAgICAgIC8vIHN1cHBvcnQ6IG1wNCwgZmx2LCBmNHYsIG00diwgbW92CiAgICAgICAgICAvLyBzZXR1cDogaHR0cHM6Ly9mbG93cGxheWVyLm9yZy9kb2NzL3NldHVwLmh0bWwKICAgICAgICAgIC8vIGFwaTogaHR0cHM6Ly9mbG93cGxheWVyLm9yZy9kb2NzL2FwaS5odG1sCiAgICAgICAgICAvLyBkZW1vOiBodHRwOi8vZGVtb3MuZmxvd3BsYXllci5vcmcvYmFzaWNzL2pzLXNldHVwLWF1dG9wbGF5Lmh0bWwKICAgICAgICAgIC8vIGhkczogaHR0cHM6Ly9mbG93cGxheWVyLmVsZWN0cm90ZXF1ZS5vcmcvaHR0cHN0cmVhbWluZy1oZHMvZnA2CiAgICAgICAgICAvLyBobHM6IGh0dHA6Ly9kZW1vcy5mbG93cGxheWVyLm9yZy9hcGkvaGxzanMuaHRtbAogICAgICAgICAgLy8gZmx2OiBodHRwOi8vZGVtb3MuZmxvd3BsYXllci5vcmcvYmFzaWNzL2Zsdi5odG1sCgogICAgICAgICAgdGhpcy5nZXRUYXJnZXROb2RlKGlkKTsKICAgICAgICAgIHRoaXMuYXJncyA9IGFyZ3VtZW50czsKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IEFhay5zZXRQcm9wZXJ0aWVzKHRoaXMuYXR0cmlidXRlcywgYXR0cmlidXRlcyB8fCB7fSk7CiAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLm9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwoKICAgICAgICAgIHRoaXMuc2V0dXAgPSBzZXR1cDsKICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3Jvc3NTZXR1cCA9PT0gdHJ1ZSkgewogICAgICAgICAgICB0aGlzLnNldHVwID0gewogICAgICAgICAgICAgIHdpZHRoIDogc2V0dXAud2lkdGggfHwgdGhpcy5hdHRyaWJ1dGVzLndpZHRoLAogICAgICAgICAgICAgIGhlaWdodCA6IHNldHVwLmhlaWdodCB8fCB0aGlzLmF0dHJpYnV0ZXMuaGVpZ2h0LAogICAgICAgICAgICAgIGF1dG9wbGF5IDogc2V0dXAuYXV0b3BsYXkgfHwgdGhpcy5hdXRvcGxheSwKICAgICAgICAgICAgICBwcmVsb2FkIDogJ2F1dG8nCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGlmIChzZXR1cC50eXBlID09PSAnaGxzJykgewogICAgICAgICAgICAgIHRoaXMuc2V0dXAuc3dmID0gbG9jYXRpb24ucHJvdG9jb2wgKyAnLy9yZWxlYXNlcy5mbG93cGxheWVyLm9yZy82LjAuNS9mbG93cGxheWVyaGxzLnN3Zic7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5lbmdpbmUgPSAnaGxzanMnOwogICAgICAgICAgICB9IGVsc2UgaWYgKFsnbXA0JywgJ3dlYm0nLCAnb2dnJywgJ29ndiddLmluZGV4T2Yoc2V0dXAudHlwZSkgPT09IC0xKSB7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5zd2YgPSBsb2NhdGlvbi5wcm90b2NvbCArICcvL3JlbGVhc2VzLmZsb3dwbGF5ZXIub3JnLzYuMC41L2Zsb3dwbGF5ZXIuc3dmJzsKICAgICAgICAgICAgICB0aGlzLnNldHVwLmVuZ2luZSA9ICdmbGFzaCc7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC50eXBlID0gJ3ZpZGVvL2ZsYXNoJzsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnNldHVwLmNsaXAgPSB7CiAgICAgICAgICAgICAgc291cmNlcyA6IFt7CiAgICAgICAgICAgICAgICAgIHR5cGUgOiB0aGlzLmdldE1pbWVUeXBlKHRoaXMuc2V0dXAudHlwZSB8fCBzZXR1cC50eXBlKSwKICAgICAgICAgICAgICAgICAgc3JjIDogc2V0dXAuc291cmNlCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgXQogICAgICAgICAgICB9OwogICAgICAgICAgfQoKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5zcmNkb2MgPSAnPGh0bWw+PGhlYWQ+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSInICsgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy9yZWxlYXNlcy5mbG93cGxheWVyLm9yZy82LjAuNS9za2luL2Z1bmN0aW9uYWwuY3NzIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjExLjIubWluLmpzIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iJyArIGxvY2F0aW9uLnByb3RvY29sICsgJy8vcmVsZWFzZXMuZmxvd3BsYXllci5vcmcvNi4wLjUvZmxvd3BsYXllci5taW4uanMiPjwvc2NyaXB0PjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+aHRtbCwgYm9keXtwYWRkaW5nOjA7IG1hcmdpbjowO308L3N0eWxlPjwvaGVhZD48Ym9keT48ZGl2IGlkPSJmcC1tb3ZpZSI+PC9kaXY+PHNjcmlwdD5mbG93cGxheWVyKCIjZnAtbW92aWUiLCAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5zZXR1cCkgKyAnKTs8L3NjcmlwdD48L2JvZHk+PC9odG1sPic7CgogICAgICAgICAgdGhpcy5idWlsZGluZygnaWZyYW1lJyk7CiAgICAgICAgfSwKICAgICAgICBncmluZHBsYXllciA6IGZ1bmN0aW9uIChpZCwgc2V0dXAsIGF0dHJpYnV0ZXMsIG9wdGlvbnMpIHsKICAgICAgICAgIC8vIEdyaW5kUGxheWVyIDEgKGZsYXNoKQogICAgICAgICAgLy8gc2V0dXA6IGh0dHA6Ly9vc21maGxzLmt1dHUucnUvZG9jcy9ncmluZC8KICAgICAgICAgIC8vIHN1cHBvcnQ6IGhscywgcnRtcAoKICAgICAgICAgIHRoaXMuZ2V0VGFyZ2V0Tm9kZShpZCk7CiAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgfHwge30pOwogICAgICAgICAgdGhpcy5vcHRpb25zID0gQWFrLnNldFByb3BlcnRpZXModGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKCiAgICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNyb3NzU2V0dXAgPT09IHRydWUpIHsKICAgICAgICAgICAgdGhpcy5zZXR1cCA9IHsKICAgICAgICAgICAgICBzcmMgOiBzZXR1cC5zb3VyY2UsCiAgICAgICAgICAgICAgc3RyZWFtVHlwZSA6ICJsaXZlIiwKICAgICAgICAgICAgICBzY2FsZU1vZGUgOiAibGV0dGVyYm94IiwKICAgICAgICAgICAgICBhdXRvUGxheSA6IHNldHVwLmF1dG9wbGF5IHx8IHRoaXMuYXV0b3BsYXkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgaWYgKHNldHVwLnR5cGUgPT09ICdobHMnKSB7CiAgICAgICAgICAgICAgdGhpcy5zZXR1cC5wbHVnaW5faGxzID0gIi8vcmVla3NpdGUuY29tL3B1YmxpYy9zd2YvZmxhc2hsc09TTUYuc3dmIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2V0dXAucHJveHkgPT09IHRydWUpIHsKICAgICAgICAgICAgICB0aGlzLnNldHVwLnNyYyA9ICcvL3d3dy5kaWFuc2hpYm8uY29tL2ZldGNoLnBocC8nICsgc2V0dXAuc291cmNlLnN1YnN0cmluZyhzZXR1cC5zb3VyY2UuaW5kZXhPZignLy8nKSArIDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnNyYyA9IHNldHVwLnN3ZiB8fCB0aGlzLmF0dHJpYnV0ZXMuc3JjIHx8ICIvL3JlZWtzaXRlLmNvbS9wdWJsaWMvc3dmL0dyaW5kUGxheWVyLnN3ZiI7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuaGVpZ2h0ID0gc2V0dXAuaGVpZ2h0IHx8IHRoaXMuYXR0cmlidXRlcy5oZWlnaHQ7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMud2lkdGggPSBzZXR1cC53aWR0aCB8fCB0aGlzLmF0dHJpYnV0ZXMud2lkdGg7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuZmxhc2h2YXJzID0gQWFrLnNlcmlhbGl6ZSh0aGlzLnNldHVwKTsKCiAgICAgICAgICB0aGlzLmJ1aWxkaW5nKCdlbWJlZCcpOwogICAgICAgIH0sCiAgICAgICAgdmxjIDogZnVuY3Rpb24gKGlkLCBzZXR1cCwgYXR0cmlidXRlcywgb3B0aW9ucykgewogICAgICAgICAgLy8gVkxDIFdlYiBQbHVnaW4gKHBsdWdpbikKICAgICAgICAgIC8vIGRvYzogaHR0cDovL3Rpbnl1cmwuY29tL29tbHpwMzkKICAgICAgICAgIC8vIHBsdWdpbnM6IGFib3V0OnBsdWdpbnMKICAgICAgICAgIC8vIGNocm9tZTovL2ZsYWdzLyNlbmFibGUtbnBhcGkKICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL25wYXBpLWRlcHJlY2F0aW9uCiAgICAgICAgICAvLyBJbiBTZXB0ZW1iZXIgMjAxNSAoQ2hyb21lIDQ1KSB3ZSB3aWxsIHJlbW92ZSB0aGUgb3ZlcnJpZGUgYW5kIE5QQVBJIHN1cHBvcnQgd2lsbCBiZSBwZXJtYW5lbnRseSByZW1vdmVkIGZyb20gQ2hyb21lLiBJbnN0YWxsZWQgZXh0ZW5zaW9ucyB0aGF0IHJlcXVpcmUgTlBBUEkgcGx1Z2lucyB3aWxsIG5vIGxvbmdlciBiZSBhYmxlIHRvIGxvYWQgdGhvc2UgcGx1Z2lucy4KCiAgICAgICAgICB0aGlzLm5hbWUgPSAndmxjJzsKICAgICAgICAgIHRoaXMuZ2V0VGFyZ2V0Tm9kZShpZCk7CiAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsuc2V0UHJvcGVydGllcyh0aGlzLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgfHwge30pOwogICAgICAgICAgdGhpcy5vcHRpb25zID0gQWFrLnNldFByb3BlcnRpZXModGhpcy5vcHRpb25zLCBvcHRpb25zIHx8IHt9KTsKCiAgICAgICAgICB0aGlzLnNldHVwID0gc2V0dXA7CiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNyb3NzU2V0dXAgPT09IHRydWUpIHsKICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnNyYyA9IHNldHVwLnNvdXJjZTsKICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCA9IHNldHVwLmhlaWdodCB8fCB0aGlzLmF0dHJpYnV0ZXMuaGVpZ2h0OwogICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMud2lkdGggPSBzZXR1cC53aWR0aCB8fCB0aGlzLmF0dHJpYnV0ZXMud2lkdGg7CiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5jb250cm9scyA9IHRydWU7CiAgICAgICAgICAgIGlmIChzZXR1cC5hdXRvcGxheSB8fCB0aGlzLmF1dG9wbGF5KSB7CiAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmF1dG9wbGF5ID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy50eXBlID0gImFwcGxpY2F0aW9uL3gtdmxjLXBsdWdpbiI7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucGx1Z2luc3BhZ2UgPSAiaHR0cDovL3d3dy52aWRlb2xhbi5vcmciOwogICAgICAgICAgdGhpcy5idWlsZGluZygnZW1iZWQnKTsKICAgICAgICB9LAogICAgICAgIGh0bWw1IDogZnVuY3Rpb24gKGlkLCBzZXR1cCwgYXR0cmlidXRlcywgb3B0aW9ucykgeyAKICAgICAgICAgIC8vIFZpZGVvIFRhZyAoaHRtbDUpCiAgICAgICAgICAvLyBiYXNpY3M6IGh0dHBzOi8vaHRtbDVyb2Nrcy5jb20vZW4vdHV0b3JpYWxzL3ZpZGVvL2Jhc2ljcy8KICAgICAgICAgIC8vIHRhZzogaHR0cDovL3d3dy53M3NjaG9vbHMuY29tL3RhZ3MvdGFnX3ZpZGVvLmFzcAogICAgICAgICAgLy8gc3VwcG9ydDogbXA0LCB3ZWJtLCBvZ2cKICAgICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvaHRtbDUvdGVzdHMvdmlkZW8uaHRtbAoKICAgICAgICAgIHRoaXMub3B0aW9ucyA9IEFhay5zZXRQcm9wZXJ0aWVzKHRoaXMub3B0aW9ucywgb3B0aW9ucyB8fCB7fSk7CgogICAgICAgICAgdGhpcy5nZXRUYXJnZXROb2RlKGlkKTsKICAgICAgICAgIHRoaXMuYXJncyA9IGFyZ3VtZW50czsKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcyA9IEFhay5zZXRQcm9wZXJ0aWVzKHt9LCBzZXR1cCB8fCB7fSk7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuc3JjID0gc2V0dXAuc291cmNlOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmlkID0gdGhpcy5hdHRyaWJ1dGVzLm5hbWUgPSBBYWsuZ2VuZXJhdGVJRCgpOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLmhlaWdodCA9IHRoaXMuYXR0cmlidXRlcy5oZWlnaHQgfHwgdGhpcy50YXJnZXQubm9kZS5jbGllbnRIZWlnaHQgfHwgIjEwMCUiOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLndpZHRoID0gdGhpcy5hdHRyaWJ1dGVzLndpZHRoIHx8IHRoaXMudGFyZ2V0Lm5vZGUuY2xpZW50V2lkdGggfHwgIjEwMCUiOwogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnR5cGUgPSB0aGlzLmdldE1pbWVUeXBlKHRoaXMuYXR0cmlidXRlcy50eXBlKTsKICAgICAgICAgIHRoaXMuYXR0cmlidXRlcy5jb250cm9scyA9ICdjb250cm9scyc7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMucHJlbG9hZCA9ICdub25lJzsKICAgICAgICAgIGlmICh0aGlzLmF0dHJpYnV0ZXMuYXV0b3BsYXkgfHwgdGhpcy5hdXRvcGxheSkgewogICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMuYXV0b3BsYXkgPSAnYXV0b3BsYXknOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzLnN0eWxlID0gJ2Rpc3BsYXk6IGJsb2NrOyBtYXJnaW46MCBhdXRvOyc7CiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXMgPSBBYWsudW5zZXRQcm9wZXJ0aWVzKHRoaXMuYXR0cmlidXRlcywgJ3NvdXJjZScpOwoKICAgICAgICAgIHRoaXMuYnVpbGRpbmcoJ3ZpZGVvJyk7CiAgICAgICAgfQogICAgICB9OwogICAgICAKICAgICAgcmV0dXJuIG5ldyBQbGF5ZXIoKTsKICAgIH0sCiAgICBydWxlcyA6IHsKICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgLy8gQW50aS1BZGJsb2NrIEtpbGxlcgogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBzZXR0aW5ncyA6IHsKICAgICAgICBob3N0IDogWydsb2NhbGhvc3QnLCAncmVlay5naXRodWIuaW8nLCAncmVla3NpdGUuY29tJ10sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgaWYgKC9cL2FudGktYWRibG9jay1raWxsZXIoLXBhZ2VzKT9cLyQvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpKSB7CiAgICAgICAgICAgIHZhciBzZXR0aW5nc0JveCA9IEFhay5nZXRFbGVtZW50KCcjYWFrLXNldHRpbmdzLWJveCcpOwogICAgICAgICAgICB2YXIgc2V0dGluZ3NOb3RpY2UgPSBBYWsuZ2V0RWxlbWVudCgnI2Fhay1zZXR0aW5ncy1ub3RpY2UnKTsKCiAgICAgICAgICAgIGlmICghQWFrLnVzZUdNKSB7CiAgICAgICAgICAgICAgc2V0dGluZ3NOb3RpY2UucXVlcnlTZWxlY3RvcignZGl2JykuaW5uZXJIVE1MID0gJ0luIG5hdGl2ZSBtb2RlLCB5b3UgbXVzdCBlZGl0IHRoZSBvcHRpb25zIG1hbnVhbGx5OiA8YSBocmVmPSInICsgQWFrLm5hdGl2ZVVSTCArICciPlNlZTwvYT4nOwogICAgICAgICAgICB9IGVsc2UgaWYgKHNldHRpbmdzQm94ICYmIHNldHRpbmdzTm90aWNlKSB7CiAgICAgICAgICAgICAgc2V0dGluZ3NOb3RpY2Uuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgICBzZXR0aW5nc0JveC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgICBBYWsuaW5mbygnR00gc3RvcmFnZTonLCBBYWsuZ2V0VmFsdWUoKSk7CiAgICAgICAgICAgICAgQWFrLmluZm8oJ0dNIG9wdGlvbnM6JywgQWFrLm9wdHMpOwogICAgICAgICAgICAgIEFhay5pbmZvKCdHTSBhcGk6JywgQWFrLnVzZUdNICYmIEFhay5hcGlHTSgpKTsKCiAgICAgICAgICAgICAgLy8gdXNlciBjb25maWcKICAgICAgICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICAgICAgICB0YWcgOiAnZGl2JywKICAgICAgICAgICAgICAgIGh0bWwgOiAnVmVyc2lvbjogJyArIEFhay5nZXRWZXJzaW9uKCkgKyAnIDxicj5BYWtTY3JpcHQ6IHRydWUgPGJyPkFha0xpc3Q6ICcgKyAoIUFhay5nZXRFbGVtZW50KCcjazJVdzdpc0hyTW01SlhQMVZ3ZHhjNTY3WktjMWFaNEknKSkgKyAnIDxicj5Ccm93c2VyOiAnICsgQWFrLmdldEJyb3dzZXIoKSArICcgPGJyPlNjcmlwdE1hbmFnZXI6ICcgKyBBYWsuZ2V0U2NyaXB0TWFuYWdlcigpLAogICAgICAgICAgICAgICAgYXBwZW5kIDogJyNhYWstc2V0dGluZ3MtY29uZmlnJwogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAvLyBjcmVhdGUgb3B0aW9ucyAKICAgICAgICAgICAgICBmb3IgKHZhciBvcHROYW1lIGluIEFhay5vcHRpb25zKSB7CiAgICAgICAgICAgICAgICBpZiAoQWFrLm9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0TmFtZSkpIHsKICAgICAgICAgICAgICAgICAgdmFyIG9wdCA9IEFhay5vcHRpb25zW29wdE5hbWVdOwogICAgICAgICAgICAgICAgICB2YXIgY2hlY2tlZCA9IEFhay5vcHRzW29wdE5hbWVdID09PSB0cnVlID8gImNoZWNrZWQiIDogJyc7CiAgICAgICAgICAgICAgICAgIEFhay5jcmVhdGVFbGVtZW50KHsKICAgICAgICAgICAgICAgICAgICB0YWcgOiAnZGl2JywKICAgICAgICAgICAgICAgICAgICBodG1sIDogJzxpbnB1dCBpZD0iJyArIG9wdE5hbWUgKyAnIiBjbGFzcz0iY3NzLWNoZWNrYm94IiAnICsgY2hlY2tlZCArICcgdHlwZT0iJyArIG9wdC50eXBlICsgJyIvPjxsYWJlbCBmb3I9IicgKyBvcHROYW1lICsgJyIgdGl0bGU9IicgKyBvcHQuaW5mbyArICciIGNsYXNzPSJjc3MtbGFiZWwiPicgKyBvcHQubGFiZWwgKyAnPC9sYWJlbD4nLAogICAgICAgICAgICAgICAgICAgIGFwcGVuZCA6ICcjYWFrLXNldHRpbmdzLScgKyBvcHQuZ3JvdXAKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAvLyBzYXZlIG9wdGlvbnMgCiAgICAgICAgICAgICAgQWFrLm9uRXZlbnQoQWFrLmdldEVsZW1lbnQoIiNhYWstc2V0dGluZ3Mtc2F2ZSIpLCAiY2xpY2siLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3NzLWNoZWNrYm94Jyk7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZWxlbXNbaV07CiAgICAgICAgICAgICAgICAgIGlmIChlbGVtLmNoZWNrZWQpIHsKICAgICAgICAgICAgICAgICAgICBBYWsuc2V0VmFsdWUoZWxlbS5pZCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgQWFrLnNldFZhbHVlKGVsZW0uaWQsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KCdTYXZlZCAhJyk7CiAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgIC8vIENsZWFyIEdNIHN0b3JhZ2UKICAgICAgICAgICAgICBBYWsuYWRkQ29tbWFuZHMoewogICAgICAgICAgICAgICAgY2FwdGlvbiA6ICdDbGVhciBHTSBzdG9yYWdlJywKICAgICAgICAgICAgICAgIGV4ZWN1dGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIEFhay5kZWxldGVWYWx1ZSgpOwogICAgICAgICAgICAgICAgICB3aW5kb3cuYWxlcnQoJ0NsZWFyZWQgIScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB1c2Vyc2NyaXB0c19kb21haW5zIDogeyAvLyBSZWRpcmVjdCB0byBHaXRodWIKICAgICAgICBob3N0IDogWyd1c2Vyc2NyaXB0cy5vcmcnLCAndXNlcnNjcmlwdHMub3JnOjgwODAnLCAndXNlcnNjcmlwdHMtbWlycm9yLm9yZyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoLzE1NTg0MCQvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpKSB7CiAgICAgICAgICAgIEFhay5nbyhBYWsuaG9tZVVSTCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBvcGVudXNlcmpzX29yZyA6IHsKICAgICAgICBob3N0IDogWydvcGVudXNlcmpzLm9yZyddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlbGVtZW50ID0gQWFrLmdldEVsZW1lbnQoJ2FbaHJlZiQ9Ii9pc3N1ZXMiXScpOwogICAgICAgICAgaWYgKC9BbnRpLUFkYmxvY2tfS2lsbGVyX1JlZWsvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpICYmIGVsZW1lbnQpIHsKICAgICAgICAgICAgQWFrLmNvbmZpcm1SZXBvcnQoZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBncmVhc3lmb3JrX29yZyA6IHsKICAgICAgICBob3N0IDogWydncmVhc3lmb3JrLm9yZyddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlbGVtZW50ID0gQWFrLmdldEVsZW1lbnQoJ2FbaHJlZiQ9Ii9mZWVkYmFjayJdJyk7CiAgICAgICAgICBpZiAoLy1hbnRpLWFkYmxvY2sta2lsbGVyLXJlZWsvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpICYmIGVsZW1lbnQpIHsKICAgICAgICAgICAgQWFrLmNvbmZpcm1SZXBvcnQoZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBtb25rZXlndXRzX2NvbSA6IHsKICAgICAgICBob3N0IDogWydtb25rZXlndXRzLmNvbSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlbGVtZW50ID0gQWFrLmdldEVsZW1lbnQoJ2FbaHJlZio9ImNvZGUucGhwP25hdj1mb3J1bSJdJyk7CiAgICAgICAgICBpZiAoL21vbmtleWd1dHMuY29tXC9jb2RlLnBocFw/aWQ9MzUxLy50ZXN0KGxvY2F0aW9uLmhyZWYpICYmIGVsZW1lbnQpIHsKICAgICAgICAgICAgQWFrLmNvbmZpcm1SZXBvcnQoZWxlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAvLyBTcGVjaWZpYwogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBibG9nc3BvdCA6IHsKICAgICAgICAvLyBObyBDb3VudHJ5IFJlZGlyZWN0IChOQ1IpCiAgICAgICAgLy8gUHJldmVudCBCbG9nZ2VyIGZyb20gUmVkaXJlY3RpbmcgdG8gQ291bnRyeS1TcGVjaWZpYyBEb21haW5zCiAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20vN3JtMzRqbwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2ZyL2ZvcnVtL2Rpc2N1c3Npb24vNTk1MwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy80OTAKICAgICAgICAvLyB0ZXN0OiBodHRwOi8vdGlueXVybC5jb20vbm9tY3hrYwogICAgICAgIGhvc3QgOiBbJy5ibG9nc3BvdC4nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKEFhay5pc1RvcGZyYW1lKSB7IC8vIGZpeCByZWRpcmV0aW9uIGxvb3AKICAgICAgICAgICAgdmFyIGJsb2cgPSBsb2NhdGlvbi5ob3N0LnJlcGxhY2UoJ3d3dy4nLCAnJykuc3BsaXQoIi4iKTsKICAgICAgICAgICAgaWYgKGJsb2dbYmxvZy5sZW5ndGggLSAxXSAhPSAiY29tIikgewogICAgICAgICAgICAgIHZhciBwYXRoID0gbG9jYXRpb24uaHJlZi5zcGxpdCgiLyIpLnNsaWNlKDMpLmpvaW4oJy8nKTsKICAgICAgICAgICAgICBBYWsuZ28oImh0dHA6Ly8iICsgYmxvZ1swXSArICIuYmxvZ3Nwb3QuY29tL25jci8iICsgcGF0aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJsb2dzcG90X2tub3dsZXQzMzg5IDogewogICAgICAgIC8vIG5vdGU6IGFsc28gYWRkZWQgYWJwIHJ1bGUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODMKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vQTNtQ1hRNWkKICAgICAgICBob3N0IDogWydrbm93bGV0MzM4OS5ibG9nc3BvdC4nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldExvY2FsKCdub2FkJywgZmFsc2UpOwogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjZ0FkcyB7IGhlaWdodDogMTdweDsgfSAjZ0FkMiB7IGhlaWdodDogMTdweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdXB0b2JveF91cHRvc3RyZWFtIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zNTEKICAgICAgICBob3N0IDogWyd1cHRvYm94LmNvbScsICd1cHRvc3RyZWFtLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBPbGQgc29sdXRpb24gW2RlcHJlY2F0ZWRdCiAgICAgICAgICB2YXIgaWQgPSBsb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvWzAtOWEtel17MTJ9Lyk7CiAgICAgICAgICBpZiAoaWQgIT09IG51bGwpIHsKICAgICAgICAgICAgQWFrLmFkZFN0eWxlKCIjIiArIGlkWzBdICsgIiB7IGhlaWdodDogMTJweDsgfSIpOwogICAgICAgICAgfQogICAgICAgICAgLy8gTmV3IDEyLjA1LjIwMTQKICAgICAgICAgIC8vICsgYWJwIHJ1bGUgKGFsdGVybmF0aXZlIHNvbHV0aW9uKQogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWRibG9ja3RyYXAgeyBoZWlnaHQ6IDEycHg7IH0iKTsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHJlbW92ZSBhZHMKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcqW3NyY149Imh0dHA6Ly9hZHMudXB0b2JveC5jb20vIl0sKltocmVmXj0iaHR0cDovL2Fkcy51cHRvYm94LmNvbS8iXScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYW5pc3Vic2lhX2NvbSA6IHsKICAgICAgICBob3N0IDogWydhbmlzdWJzaWEuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vICsgYWJwIHJ1bGUgI0AjLmFkc2FudGlsb2sKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFkc2FudGlsb2sgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmpBbnRpQmxvY2sgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5DZWtCbG9rID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBmcmVlZ2FtZXNlcnZlcmhvc3RfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTEyCiAgICAgICAgaG9zdCA6IFsnZnJlZWdhbWVzZXJ2ZXJob3N0LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNmYWIxMyB7IGhlaWdodDogMTFweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZWxhaG1hZF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsnZWxhaG1hZC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWRibG9jayB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBtcnR6Y21wM19uZXQgOiB7CiAgICAgICAgaG9zdCA6IFsnbXJ0emNtcDMubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLnJ0bV9hZCB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBoZWlnaHRfbXlUZXN0QWQgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyNDEKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTgzCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI5MQogICAgICAgIGhvc3QgOiBbJ2JrbmltZS5jb20nLCAnZ280dXAuY29tJywgJ2RlYnJpZG8uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLm15VGVzdEFkIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlYnJpZGZhc3RfbmV0d29yayA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9lbi9mb3J1bS9kaXNjdXNzaW9uLzk0MDYKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9lbi9mb3J1bS9kaXNjdXNzaW9uLzcwMTMKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTI3MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy83NjkKICAgICAgICBob3N0IDogWydkZWJyaWRmYXN0LmNvbScsICdnZXRkZWJyaWQuY29tJywgJ2RlYnJpZC51cycsICdsZWVjaGVyLnVzJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLm15VGVzdEFkLCAubXkyNEFkLCAubmFiaWwgeyBoZWlnaHQ6IDFweDsgfSIpOwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3NpbXBsZUFkJykuaW5uZXJIVE1MID0gJzxwIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij5kZWJyaWRmYXN0LmNvbTwvcD4nOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmdfZ2xlZGFpX3R2IDogewogICAgICAgIGhvc3QgOiBbJ2JnLWdsZWRhaS50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5teUFkIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRoZXBjc3B5X2NvbSA6IHsgLy8gaHR0cDovL3RoZXBjc3B5LmNvbS9yZWFkL2hvd190b19ibG9ja19hZGJsb2NrLwogICAgICAgIGhvc3QgOiBbJ3RoZXBjc3B5LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5teVRlc3RBZCB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5ibG9ja2VkIHsgZGlzcGxheTogbm9uZTsgfSIpOwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJy5ibG9ja2VkJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICB2Z19lMjRfbm8gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI5MgogICAgICAgIGhvc3QgOiBbJ3ZnLm5vJywgJ2UyNC5ubyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBBZGQgdGhpcyBydWxlLCBiZWNhdXNlIEVhc3lMaXN0IGFsbG93IGFsbCBoaWRkZW4gZWxlbWVudHMuCiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5hZCB7IGRpc3BsYXk6IG5vbmU7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGF1dG9tb2JpbGVfc3BvcnRpdmVfY29tIDogewogICAgICAgIGhvc3QgOiBbJ2F1dG9tb2JpbGUtc3BvcnRpdmUuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLm15VGVzdEFkIHsgaGVpZ2h0OiA1MXB4OyBkaXNwbGF5OiBub25lOyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBzbnN3X3VzIDogewogICAgICAgIGhvc3QgOiBbJ3Nuc3cudXMnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWRfMSB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB1cmxjaGVja2VyX25ldCA6IHsKICAgICAgICBob3N0IDogWyd1cmxjaGVja2VyLm5ldCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNhZGNoZWNrZXIgeyBoZWlnaHQ6IDIwcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNraXBsaW1pdGVfdHYgOiB7CiAgICAgICAgaG9zdCA6IFsnc2tpcGxpbWl0ZS50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoImRpdi5hZGR0aGlzX25hdGl2ZV90b29sYm94ICsgZGl2W2lkXSB7IGhlaWdodDogMTJweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmlsZWNvcmVfY29fbnogOiB7CiAgICAgICAgaG9zdCA6IFsnZmlsZWNvcmUuY28ubnonXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIuYWRzZW5zZSB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB0aG9tYXNfbl9ydXRoX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTExMQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9mdTd2a1VBMQogICAgICAgIGhvc3QgOiBbJ3Rob21hcy1uLXJ1dGguY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLkdvb2dsZSB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBpbnRlcmZhbnNfb3JnIDogewogICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly93d3cuaW50ZXJmYW5zLm9yZy9mb3J1bS8KICAgICAgICBob3N0IDogWydpbnRlcmZhbnMub3JnJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFkX2dsb2JhbF9oZWFkZXIgeyBoZWlnaHQ6IDFweDsgZGlzcGxheTogbm9uZTsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbWF4ZGVicmlkZXVyX2NvbSA6IHsKICAgICAgICBob3N0IDogWydtYXhkZWJyaWRldXIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmNsZWFyICsgZGl2W2lkXSB7IGhlaWdodDogMTJweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdG9wem9uZV9pdCA6IHsKICAgICAgICBob3N0IDogWyd0b3B6b25lLmx0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmZvcnVtQWQgeyBoZWlnaHQ6IDFweDsgZGlzcGxheTogbm9uZTsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbmFuYTEwX2NvX2lsIDogewogICAgICAgIGhvc3QgOiBbJy5uYW5hMTAuJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2FkdmVydC10cmFja2VyIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBsZWpfdHYgOiB7CiAgICAgICAgaG9zdCA6IFsncGxlai50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5hZHZlcnRfYm94IHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1hbmdhbWludF9jb20gOiB7CiAgICAgICAgLy8gbm90ZTogYWRkZWQgcnVsZSB0byBhbGxvdyAiLmFkNzI4IgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2lkL2ZvcnVtL2Rpc2N1c3Npb24vODUyNAogICAgICAgIGhvc3QgOiBbJ21hbmdhbWludC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIuYWQ3MjggeyBoZWlnaHQ6IDMxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlYnJpZGV1cnN0cmVhbV9mciA6IHsKICAgICAgICBob3N0IDogWydkZWJyaWRldXJzdHJlYW0uZnInXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjY29udGVudCBkaXZbaWRdW2FsaWduPWNlbnRlcl0geyBoZWlnaHQ6IDEycHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHByZWVtbGlua3NfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3ByZWVtbGlua3MuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2RpdmFkcyB7IGhlaWdodDogMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBoZW50YWlfdG8gOiB7CiAgICAgICAgaG9zdCA6IFsnaGVudGFpLnRvJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2hlbnRhaXRvMTIzIHsgaGVpZ2h0OiAxMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBwcm90b3R1cmtfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3Byb3RvdHVyay5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjcmVrbGFtIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG11ZmFfZGUgOiB7CiAgICAgICAgaG9zdCA6IFsnbXVmYS5kZSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNsZWFkZXJib2FyZCB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNsYXJnZS1yZWN0YW5nbGUgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWQtaGVhZGVyLTQ2OHg2MCB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB3YXRjaGFyYWJfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3dhdGNoYXJhYi5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gKyBhZHAgcnVsZSB3YXRjaGFyYWIuY29tI0AjI2FkYmxvY2sKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2FkYmxvY2sgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZnJlZWRvbWlwX2NvbSA6IHsKICAgICAgICBob3N0IDogWydmcmVlZG9tLWlwLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5wdWJfdmVydGljYWwgaW5zLCAucHViX3ZlcnRpY2FsIGRpdiB7IGhlaWdodDogMTFweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgd2FrYW5pbV90diA6IHsKICAgICAgICBob3N0IDogWyd3YWthbmltLnR2J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2RldGVjdG9yIHsgZGlzcGxheTogbm9uZTsgfSIpOwogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjbm9wdWIgeyBkaXNwbGF5OiBibG9jazsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgc2ltcGx5X2RlYnJpZF9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzMzMgogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9iN01BWVhzNAogICAgICAgIGhvc3QgOiBbJ3NpbXBseS1kZWJyaWQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZHNieWdvb2dsZSA9IHt9OwogICAgICAgICAgQWFrLnV3LmFkc2J5Z29vZ2xlLmxvYWRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBtYW5nYTlfY29tIDogewogICAgICAgIGhvc3QgOiBbJ21hbmdhOS5jb20nLCAnbWFuZ2FiZWUuY28nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIuYWRibG9jayB7IGhlaWdodDogMzFweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgb25lbWFuZ2EyX2NvbSA6IHsKICAgICAgICBob3N0IDogWydvbmVtYW5nYTIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFmc19hZHMgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbWFuZ2FiaXJkX2NvbSA6IHsKICAgICAgICBob3N0IDogWydtYW5nYWJpcmQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFmc19hZHMgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAga29kaWxpdmVfZXUgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE1MjgKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vWnh2WEtxdGMKICAgICAgICBob3N0IDogWydrb2RpbGl2ZS5ldSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5BZCB7IGhlaWdodDogNXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBiYWNraW5fbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWJhY2tpbi5uZXQKICAgICAgICBob3N0IDogWydiYWNraW4ubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2RpdmFkIHsgaGVpZ2h0OiAzMXB4OyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBtb2JpbGVfdHJhY2tlcl9mcmVlX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTA4MgogICAgICAgIGhvc3QgOiBbJ21vYmlsZS10cmFja2VyLWZyZWUuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI215QWRzIHsgaGVpZ2h0OiAxcHg7IH0iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdvcmt1cGxvYWRfY29tIDogewogICAgICAgIC8vIG5vdGU6IG9iZnVzY2F0ZWQKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTMzNAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjkwCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL0NQemQyU3d4CiAgICAgICAgaG9zdCA6IFsnd29ya3VwbG9hZC5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLmFkQmxvY2ssIC5hZHNieWdvb2dsZSwgI3NhZCB7IGhlaWdodDogMTFweDsgfSIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdG9kYXlfaW4gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9aW50b2RheS5pbgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWJ1c2luZXNzdG9kYXkuaW4KICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vZ3o1MzlHN20KICAgICAgICBob3N0IDogWyJpbnRvZGF5LmluIiwgImJ1c2luZXNzdG9kYXkuaW4iXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoJyNhZGJvY2tlcl9hbHQgeyBkaXNwbGF5OiBub25lOyB9Jyk7CiAgICAgICAgICBBYWsudXcub3BlblBvcHVwID0gZnVuY3Rpb24oKXt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgamNfbXBfY29tIDogewogICAgICAgIC8vIGJ5OiBHaXdheXVtZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTk3CiAgICAgICAgaG9zdCA6IFsiamMtbXAuY29tIl0sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCcuYWRzZW5zZSB7d2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHZpc2liaWxpdHk6IGhpZGRlbjsgZGlzcGxheTogYmxvY2s7IHBvc2l0aW9uOiBhYnNvbHV0ZTt9Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtYXJpYWdlX2ZyYW5jb19tYXJvY2Fpbl9uZXQgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bWFyaWFnZS1mcmFuY28tbWFyb2NhaW4ubmV0CiAgICAgICAgaG9zdCA6IFsibWFyaWFnZS1mcmFuY28tbWFyb2NhaW4ubmV0Il0sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCcjbXlfYWRfZGl2IHtoZWlnaHQ6IDFweDt9Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBoYXBweV9oYWNrX3J1IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWhhcHB5LWhhY2sucnUKICAgICAgICBob3N0IDogWydoYXBweS1oYWNrLnJ1J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2Jsb2NrYmxvY2tGNCB7dmlzaWJpbGl0eTppbnZpc2libGU7ZGlzcGxheTpub25lO30gI2Jsb2NrYmxvY2tGNCB0ZCB7dmlzaWJpbGl0eTppbnZpc2libGU7ZGlzcGxheTpub25lO30gI2Jsb2NrYmxvY2tGNCB0ZCBwIHt2aXNpYmlsaXR5OmludmlzaWJsZTtkaXNwbGF5Om5vbmU7fSAjYmxvY2tibG9ja0QzIHt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTpibG9jazt9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBmb3JiZXNfY29tIDogewogICAgICAgIC8vIGJ5OiBHaXdheXVtZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84NjUKICAgICAgICBob3N0IDogWydmb3JiZXMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZignL3dlbGNvbWUnKSA+IC0xKSB7CiAgICAgICAgICAgIEFhay5zZXRDb29raWUoJ3dlbGNvbWVBZCcsICd0cnVlJywgODY0MDAwMDAsICcvJyk7CiAgICAgICAgICAgIEFhay5zZXRDb29raWUoJ2RhaWx5V2VsY29tZUNvb2tpZScsICd0cnVlJywgODY0MDAwMDAsICcvJyk7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IEFhay5nZXRDb29raWUoJ3RvVXJsJykgfHwgJ2h0dHA6Ly93d3cuZm9yYmVzLmNvbS8nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgYmFpdF9hZHNieWdvb2dsZSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTQ3CiAgICAgICAgaG9zdCA6IFsnYml0Y29pbmFsaWVucy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdpbnMuYWRzYnlnb29nbGUnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJhaXRfdGVzdGVyIDogewogICAgICAgIGhvc3QgOiBbJ29zb2FyY2FkZS5jb20nLCAnZDNicmlkNHkwdS5pbmZvJywgJ2ZpbGVpY2UubmV0JywgJ25vc3RlYW0ucm8nLCAnb3BlbnJ1bm5lci5jb20nLCAnZWFzeWJpbGxldHMuY29tJywgJ3Nwb3guZnInLCAneW92b3lhZ2VzLmNvbScsICd0djMuY28ubnonLCAnZnJlZWFsbG11c2ljLmluZm8nLCAncHV0bG9ja2VyLmNvbScsICdzb2Nrc2hhcmUuY29tJywgJ2RyYW1hcGFzc2lvbi5jb20nLCAneW9vY2xpY2suY29tJywgJ29ubGluZS51YSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiN0ZXN0ZXInKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJhaXRfYWRkIDogewogICAgICAgIGhvc3QgOiBbJ2ZpbGVjb20ubmV0JywgJ3Vwc2hhcmUub3JnJywgJ3NraXBweWZpbGUuY29tJywgJ213ZmlsZXMubmV0JywgJ3VwLWZsb3cub3JnJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkZCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmFpdF9hZHBidGVzdCA6IHsKICAgICAgICBob3N0IDogWydsZWFndWVzZWNyZXRhcnkuY29tJywgJ3Rla25vZ29kcy5jb20nLCAnaGVsbHNtZWRpYS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjYWRwYnRlc3QnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJhaXRfYWR0ZXN0ZXIgOiB7CiAgICAgICAgaG9zdCA6IFsnZnJlZXNwb3J0c2JldC5jb20nLCAnc3BvcnRzcGxheXMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkLXRlc3RlcicpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdGdvX3R2X2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMzAzCiAgICAgICAgaG9zdCA6IFsndGdvLXR2LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNhZGIsICNiYW5uZXJhZDEsIC5sb2FkX3N0cmVhbSB7IGRpc3BsYXk6IG5vbmU7IH0iKTsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I3Rlc3RlcicpOwogICAgICAgIH0sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcudGhyZXNob2xkID0gMTAwMDsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcuY2hhdF9mcmFtZScpOyAvLyBidWcgcmVsb2FkIGlmcmFtZQogICAgICAgIH0KICAgICAgfSwKICAgICAgZnJlZWdhbWVob3N0aW5nX25sIDogewogICAgICAgIGhvc3QgOiBbJ2ZyZWVnYW1laG9zdGluZy5ubCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZHRlc3QnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRoZXdlYXRoZXJzcGFjZV9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsndGhld2VhdGhlcnNwYWNlLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhYi1ibC1hZHZlcnRpc2VtZW50Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBjbGVvZGVza3RvcF9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzcxMQogICAgICAgIGhvc3QgOiBbJ2NsZW9kZXNrdG9wLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNteVRlc3RBZCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgaW1hZ2VyYWlkZXJfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84MjYKICAgICAgICBob3N0IDogWydpbWFnZXJhaWRlci5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjbXlHQ29udGFpbmVyJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICB2b2ljaV9mciA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9mci9mb3J1bS9kaXNjdXNzaW9uLzEwMDkzCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzgyNgogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS96RVZRSFRpRAogICAgICAgIGhvc3QgOiBbJ3ZvaWNpLmZyJywgJ3Byb2dyYW1tZS10di5uZXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjc2FzX3NjcmlwdDInKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1pbF9pbmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE2NTIKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vNDc0Tlp6UEoKICAgICAgICBob3N0IDogWydtaWwuaW5rJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2Fkc19kaXYnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGN1YmV1cGxvYWRfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2VuL2ZvcnVtL2Rpc2N1c3Npb24vNTkxOQogICAgICAgIGhvc3QgOiBbJ2N1YmV1cGxvYWQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5jcmVhdGVFbGVtZW50KHsKICAgICAgICAgICAgdGFnIDogJ2lmcmFtZScsCiAgICAgICAgICAgIG5hbWUgOiAnaWZyYW1lJywKICAgICAgICAgICAgc3JjIDogJ2Fib3V0OmJsYW5rJywKICAgICAgICAgICAgc3R5bGUgOiAnZGlzcGxheTpub25lOycsCiAgICAgICAgICAgIGFwcGVuZCA6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzdHJlYW00ZnJlZV9ldSA6IHsKICAgICAgICBob3N0IDogWydzdHJlYW00ZnJlZS5ldSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyArYWJwIGFsdCBzb2x1dGlvbgogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjanBheWRheScpOwogICAgICAgICAgQWFrLnV3LmpwYXlkYXlfYWxlcnQgPSAxOwogICAgICAgIH0KICAgICAgfSwKICAgICAgXzNkbmV3c19ydSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9ydS9mb3J1bS9kaXNjdXNzaW9uLzU3NTAKICAgICAgICBob3N0IDogWyczZG5ld3MucnUnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnYWRibG9ja3dhcm4nLCAxKTsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI2VhckFkcyB7IHdpZHRoOiA0MDFweDsgfSIpOwogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjZWFyQWRzJyk7CiAgICAgICAgICBBYWsudXcuX19BVF9kZXRlY3RlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBfM2RzdGhlbV9lcyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT0zZHN0aGVtCiAgICAgICAgaG9zdCA6IFsnM2RzdGhlbS5lcyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvL0Fhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkge30pOwogICAgICAgIH0sCiAgICAgICAgb25CZWZvcmVTY3JpcHQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgLyoKICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgIGNvbnRhaW5zIDogJ21haW4uanMnLAogICAgICAgICAgICAgIGV4dGVybmFsIDogdHJ1ZSwKICAgICAgICAgICAgICBvdmVycmlkZSA6ICcvL3Bhc3RlYmluLmNvbS9yYXcvMnlHUlBoUlonCiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgKi8KICAgICAgICB9CiAgICAgIH0sCiAgICAgIF84bXVzZXNfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPThtdXNlcwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2ZvcnVtL2Rpc2N1c3Npb24vODUxNQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2VuL2ZvcnVtL2Rpc2N1c3Npb24vNjQwNwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9iTU5EeGVjcwogICAgICAgIGhvc3QgOiBbJzhtdXNlcy5jb20nXSwKICAgICAgICBvbkJlZm9yZVNjcmlwdCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgIGNvbnRhaW5zIDogInR5cGVvZiBleG8iLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgaGFwcHl0cmlwc19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9aGFwcHl0cmlwcwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9FV1NFYm52dgogICAgICAgIGhvc3QgOiBbJ2hhcHB5dHJpcHMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnY2FuUnVuJywgdHJ1ZSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBsZ19maXJtd2FyZV9yb21fY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWxnLWZpcm13YXJlLXJvbS5jb20KICAgICAgICBob3N0IDogWydsZy1maXJtd2FyZS1yb20uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgna2lsbGFkcycsIHRydWUpOwogICAgICAgIH0KICAgICAgfSwgICAgICAKICAgICAgbWlkX2RheV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bWlkLWRheS5jb20KICAgICAgICBob3N0IDogWydtaWQtZGF5LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ2NhblJ1bicsIHRydWUpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmFkdHZfbmV0d29yayA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1iYWR0di5pdAogICAgICAgIGhvc3QgOiBbJ2JhZHR2Lml0JywgJ2JhZHRhc3RlLml0JywgJ2JhZGdhbWVzLml0JywgJ2JhZGNvbWljcy5pdCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdhZEJsb2NrQ2hlY2tlZCcsICdkaXNhdHRpdm8nKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGluZGVwZW5kZW50X2NvX3VrIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWluZGVwZW5kZW50LmNvLnVrCiAgICAgICAgaG9zdCA6IFsnaW5kZXBlbmRlbnQuY28udWsnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnYWRibG9ja19kZXRlY3RlZCcsICdpZ25vcmVkJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBlc21hc19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZXNtYXMuY29tCiAgICAgICAgaG9zdCA6IFsnZXNtYXMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnb3BlbmVkX2FkYmJsb2NrJywgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGlub3kxdHZfbmV0d29yayA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1waW5veTF0dgogICAgICAgIGhvc3QgOiBbJ3Bpbm95MXR2LiddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ2FsbG93YWRzJywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBld2FsbHN0cmVldGVyX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1ld2FsbHN0cmVldGVyLmNvbQogICAgICAgIGhvc3QgOiBbJ2V3YWxsc3RyZWV0ZXIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnT0FTX3JkbCcsIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYnVzaW5lc3Nfc3RhbmRhcmRfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWJ1c2luZXNzLXN0YW5kYXJkLmNvbQogICAgICAgIGhvc3QgOiBbJ2J1c2luZXNzLXN0YW5kYXJkLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ2Fkc0xvYWRlZCcsIDEpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgnX3B3JywgJ3QnKTsgICAgICAgICAgCiAgICAgICAgfQogICAgICB9LAogICAgICBleHByZXNzX25ldHdvcmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZmluYW5jaWFsZXhwcmVzcy5jb20KICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1pbmRpYW5leHByZXNzLmNvbQogICAgICAgIGhvc3QgOiBbJ2ZpbmFuY2lhbGV4cHJlc3MuY29tJywgJ2luZGlhbmV4cHJlc3MuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnUnVuQWRzJywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBpbmRpYXRpbWVzX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1pbmRpYXRpbWVzCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bWFsYXlhbGFtLnNhbWF5YW0uY29tCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL3p4dXN2eWYsIAogICAgICAgIGhvc3QgOiBbJ2luZGlhdGltZXMuY29tJywgJ3NhbWF5YW0uY29tJywgJ2JhbmdhbG9yZW1pcnJvci5jb20nXSwKICAgICAgICBvbkJlZm9yZVNjcmlwdCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgIGNvbnRhaW5zIDogJ1xcXFx4NjFcXFxceDY0XFxcXHg2MicsCiAgICAgICAgICAgICAgZXh0ZXJuYWwgOiBmYWxzZSwKICAgICAgICAgICAgICByZW1vdmUgOiB0cnVlCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBjb250YWlucyA6ICdmdW5jdGlvbiBpbml0QmxvY2snLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdGhlY2hpdmVfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNDUzCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1RkcFB5cmJiCiAgICAgICAgaG9zdCA6IFsndGhlY2hpdmUuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3csIHsKICAgICAgICAgICAgICBzdGVwaGFuZURldGVjdG9yIDogewogICAgICAgICAgICAgICAgdmFsdWUgOiB7CiAgICAgICAgICAgICAgICAgIGhvb2sgOiBmdW5jdGlvbiAoY2IpIHsKICAgICAgICAgICAgICAgICAgICBjYihmYWxzZSk7CiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGluaXQgOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAgICAgICAgICAgYnJvYWRjYXN0UmVzdWx0IDogZnVuY3Rpb24gKCkge30KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB3cml0YWJsZSA6IGZhbHNlCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcmljaG9ucmFpbHNfY29tIDogewogICAgICAgIC8vIGJ5OiBHaXdheXVtZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNDQ3CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL0V3ZndnOEJHCiAgICAgICAgaG9zdCA6IFsncmljaG9ucmFpbHMuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBhZHNCeUdvb2dsZUh0bWwgPSAnIjxpbnMraWQ9ImFzd2lmdF8wX2V4cGFuZCIrc3R5bGU9ImRpc3BsYXk6aW5saW5lLXRhYmxlO2JvcmRlcjpub25lO2hlaWdodDo5MHB4O21hcmdpbjowO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OnZpc2libGU7d2lkdGg6NzUwcHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCI+PGlucytpZD0iYXN3aWZ0XzBfYW5jaG9yIitzdHlsZT0iZGlzcGxheTpibG9jaztib3JkZXI6bm9uZTtoZWlnaHQ6OTBweDttYXJnaW46MDtwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7dmlzaWJpbGl0eTp2aXNpYmxlO3dpZHRoOjc1MHB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQiPjxpZnJhbWUrbWFyZ2lud2lkdGg9IjAiK21hcmdpbmhlaWdodD0iMCIrdnNwYWNlPSIwIitoc3BhY2U9IjAiK2FsbG93dHJhbnNwYXJlbmN5PSJ0cnVlIitzY3JvbGxpbmc9Im5vIithbGxvd2Z1bGxzY3JlZW49InRydWUiK29ubG9hZD0idmFyK2k9dGhpcy5pZCxzPXdpbmRvdy5nb29nbGVfaWZyYW1lX29uY29weSxIPXMmYW1wOyZhbXA7cy5oYW5kbGVycyxoPUgmYW1wOyZhbXA7SFtpXSx3PXRoaXMuY29udGVudFdpbmRvdyxkO3RyeXtkPXcuZG9jdW1lbnR9Y2F0Y2goZSl7fWlmKGgmYW1wOyZhbXA7ZCZhbXA7JmFtcDsoIWQuYm9keXx8IWQuYm9keS5maXJzdENoaWxkKSl7aWYoaC5jYWxsKXtzZXRUaW1lb3V0KGgsMCl9ZWxzZStpZihoLm1hdGNoKXt0cnl7aD1zLnVwZChoLGkpfWNhdGNoKGUpe313LmxvY2F0aW9uLnJlcGxhY2UoaCl9fSIraWQ9ImFzd2lmdF8wIituYW1lPSJhc3dpZnRfMCIrc3R5bGU9ImxlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDsiK3dpZHRoPSI3NTAiK2ZyYW1lYm9yZGVyPSIwIitoZWlnaHQ9IjkwIj48L2lmcmFtZT48L2lucz48L2lucz4iJzsKICAgICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgICB1cmwgOiAkKCIuYXJ0aWNsZS1jb250ZW50IikuZGF0YSgidXJsIiksCiAgICAgICAgICAgICAgZGF0YVR5cGUgOiAic2NyaXB0IiwKICAgICAgICAgICAgICBtZXRob2QgOiAicG9zdCIsCiAgICAgICAgICAgICAgZGF0YSA6IHsKICAgICAgICAgICAgICAgIGh0bWwgOiBhZHNCeUdvb2dsZUh0bWwKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHN1Y2Nlc3MgOiBmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICB2YXIgZXhlYyA9IHJlc3VsdC5yZXBsYWNlKCIkKCcuYXJ0aWNsZS1jb250ZW50JykiLCAiJCgnLmFydGljbGUtY29udGVudC0yJykiKTsKICAgICAgICAgICAgICAgIG5ldyBGdW5jdGlvbihleGVjKSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICQoIi5hcnRpY2xlLWNvbnRlbnQiKS5hZnRlcignPGRpdiBjbGFzcz0iYXJ0aWNsZS1jb250ZW50LTIiPjwvZGl2PicpLnJlbW92ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBybXByZXB1c2JfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3JtcHJlcHVzYi5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnam90X3ZpZXdlcicsIDMpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbmVvZHJpdmVfY28gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwMDEKICAgICAgICBob3N0IDogWyduZW9kcml2ZS5jbyddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gUHJldmVudCBwb3B1bmRlcgogICAgICAgICAgQWFrLnNldENvb2tpZSgnS2lmUG9wQ250JywgMSwgbnVsbCwgJy9lbWJlZC8nKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGhlbnRhaWhhdmVuX29yZyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL2dvcmhpbGwvdUJsb2NrL2lzc3Vlcy8xMzQwCiAgICAgICAgaG9zdCA6IFsnaGVudGFpaGF2ZW4ub3JnJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBQcmV2ZW50IHBvcHVuZGVyCiAgICAgICAgICBBYWsuc2V0Q29va2llKCdoaF9wcG5kcjEnLCAxKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2hoX3BwbmRyMicsIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJpbWVzaGFyZV90diA6IHsKICAgICAgICBob3N0IDogWydwcmltZXNoYXJlLnR2J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkYmxvY2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlYnJpZG5ldF9hbmRfbGl2ZWRlYnJpZCA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1kZWJyaWRuZXQKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1saXZlZGVicmlkCiAgICAgICAgaG9zdCA6IFsnZGVicmlkbmV0LmNvbScsICdsaXZlZGVicmlkLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi5teVRlc3RBZDIgeyBoZWlnaHQ6IDVweDsgfSIpOwogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYubXlUZXN0QWQyJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBibHVlc2F0b3NoaV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzg3MwogICAgICAgIGhvc3QgOiBbJ2JsdWVzYXRvc2hpLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiN0ZXN0IHsgaGVpZ2h0OiAyODBweDsgfSIpOwogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjdGVzdCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcmF6ZXJjcnlwdF9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzg3MAogICAgICAgIGhvc3QgOiBbJ3JhemVyY3J5cHQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI3Rlc3QgeyBoZWlnaHQ6IDI1MHB4OyB9Iik7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiN0ZXN0Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzYXRvc2hpZW1waXJlX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODcyCiAgICAgICAgaG9zdCA6IFsnc2F0b3NoaWVtcGlyZS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjdGVzdCB7IGhlaWdodDogMjUwcHg7IH0iKTsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I3Rlc3QnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG9uZWFkZmF1Y2V0X2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODcxCiAgICAgICAgaG9zdCA6IFsnb25lYWRmYXVjZXQuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI3Rlc3QgeyBoZWlnaHQ6IDI1MHB4OyB9Iik7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiN0ZXN0Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBqa2FuaW1lX25ldCA6IHsKICAgICAgICBob3N0IDogWydqa2FuaW1lLm5ldCddLAogICAgICAgIC8vIEBAfHxqa2FuaW1lLm5ldC9hc3NldHMvanMvYWR2ZXJ0aXNlbWVudDIuanMKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjcmVjbycpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgXzcyMHBta3ZfY29tIDogewogICAgICAgIGhvc3QgOiBbJzcyMHBta3YuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkdmVydCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGFpZHZlcnRzX2NvbSA6IHsKICAgICAgICBob3N0IDogWydwYWlkdmVydHMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2LmFmc19hZHMnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGl0YWxpYXR2X29yZyA6IHsKICAgICAgICBob3N0IDogWydpdGFsaWF0di5vcmcnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjZmFiMTMnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNocmlzc21vb3ZlX2NvbSA6IHsKICAgICAgICBob3N0IDogWydjaHJpc3Ntb292ZS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy9BYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZHNlcnZlcicpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXZlbnRodWJzX2NvbSA6IHsKICAgICAgICBob3N0IDogWydldmVudGh1YnMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2JsYWh5YmxhY2kxJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzdXBlcmFuaW1lc19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyOTUKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vRkRQQUtqVFEKICAgICAgICBob3N0IDogWydzdXBlcmFuaW1lcy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjYmFubmVyTG9qYScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZm9ydW1fcGFjX3JvbV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI0MwogICAgICAgIGhvc3QgOiBbJ2ZvcnVtLnBhYy1yb20uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2LmJhbm5lcl9hZHMnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpdHZfdHYgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyOTkKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vemNkZHZUdUMKICAgICAgICBob3N0IDogWydsaXR2LnR2J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2LnBsYXllcl9tYXNrJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBsZXZlbGRvd25fZnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU5NQogICAgICAgIGhvc3QgOiBbJ2xldmVsZG93bi5mciddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZGJsb2NrJyk7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZGJsb2NrdGVzdCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2xvYmVzbG90X2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTI0CiAgICAgICAgaG9zdCA6IFsnZ2xvYmVzbG90LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNhZGQnKTsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkZDEnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFudGVubmVzcG9ydF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsnYW50ZW5uZXNwb3J0LmNvbScsICdzZXJ2ZXJoZC5ldSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsgLy8gZm9yIGFudGVubmVzcG9ydAogICAgICAgICAgLy8gUmVtb3ZlIFB1YgogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoIiNwdWIgLnB1YmNsb3NlIik7CiAgICAgICAgICAvLyBSZWRpcmVjdCB0byBQbGF5ZXIKICAgICAgICAgIEFhay5zZXRFbGVtZW50KCcjcHViIC5lbWJlZCBpZnJhbWUnLCB7CiAgICAgICAgICAgIHNyYyA6ICcvZW1iZWQvZW1iZWQucGhwJwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBkaXNhYmxlQWxlcnRib3ggOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZW4vZm9ydW0vZGlzY3Vzc2lvbi84NjExCiAgICAgICAgaG9zdCA6IFsnZHJpdmVhcmFiaWEuY29tJywgJ3B1dGxvY2tlci5jb20nLCAnZG9hdG9vbHNpdGEuYWx0ZXJ2aXN0YS5vcmcnLCAnc29ja3NoYXJlLmNvbScsICdmcmVlLW1vdmllLWhvbWUuY29tJywgJ3BjLm9ubGluZTE0My5jb20nLCAna29vb3JhLmNvbScsICdzdHIzYW10di5jby5ucicsICdzdHIzYW10di5hbHRlcnZpc3RhLm9yZycsICdzdHIzYW0uYWx0ZXJ2aXN0YS5vcmcnLCAnZmlsZWNvbS5uZXQnLCAncGlwb2Nhcy50dicsICdnZW5lcmF0dXByZW1pdW0uYml6JywgJ21lZ2EtZGVicmlkLmV1JywgJ3ByZW1pdW1zdDByZS5ibG9nc3BvdC5jb20nLCAnZGwtcHJvdGVjdC5jb20nLCAnbmV3c2lubGV2ZWxzLmNvbScsICd2aXByYWNpbmcuYml6JywgJ2J1c2luZXNzdG9kYXkuaW4nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hbGVydCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2VuZXJhdHVwcmVtaXVtX2JpeiA6IHsKICAgICAgICBob3N0IDogWydnZW5lcmF0dXByZW1pdW0uYml6J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIERpc2FibGUgQ29uZmlybSBCb3gKICAgICAgICAgIC8vQWFrLnV3LmNvbmZpcm0gPSBmdW5jdGlvbiAoKXt9OwogICAgICAgICAgQWFrLnNldENvb2tpZSgnZ2VuZXJhJywgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbmV3c3RhdGVzbWFuX2NvbSA6IHsKICAgICAgICBob3N0IDogWyduZXdzdGF0ZXNtYW4uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2RvbmF0aW9uUG9wdXAnLCAnaGlkZScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRzd2l6el9jb20gOiB7CiAgICAgICAgLy8gYnk6IFNrcjR0Y2hHcjNhenlNb25raUJhbGxsbGxsWnp6egogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84MDkKICAgICAgICBob3N0IDogWyd5ZXMuZm0nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHdpbmRvdy5jb21fYWRzd2l6el9zeW5jaHJvX2luaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGVyc3RhbmRhcmRfYXQgOiB7CiAgICAgICAgLy8gYnk6IEFsZXhhbmRlcjI1NQogICAgICAgIC8vIHBhdGNoOiBodHRwOi8vcGFzdGViaW4uY29tL3Jhdy5waHA/aT1yN1E0RHJmQgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWRlcnN0YW5kYXJkCiAgICAgICAgaG9zdCA6IFsnZGVyc3RhbmRhcmQuYXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewoKICAgICAgICAgIHZhciBtYWtlSVNPVGltZXN0YW1wVVRDID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgcGFkID0gZnVuY3Rpb24gKGFtb3VudCwgd2lkdGgpIHsKICAgICAgICAgICAgICB2YXIgcGFkZGluZyA9ICIiOwogICAgICAgICAgICAgIHdoaWxlIChwYWRkaW5nLmxlbmd0aCA8IHdpZHRoIC0gMSAmJiBhbW91bnQgPCBNYXRoLnBvdygxMCwgd2lkdGggLSBwYWRkaW5nLmxlbmd0aCAtIDEpKSB7CiAgICAgICAgICAgICAgICBwYWRkaW5nICs9ICIwIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIHBhZGRpbmcgKyBhbW91bnQudG9TdHJpbmcoKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgcmV0dXJuIFtwYWQoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCA0KSwgIi0iLAogICAgICAgICAgICAgIHBhZChkYXRlLmdldFVUQ01vbnRoKCkgKyAxLCAyKSwgIi0iLAogICAgICAgICAgICAgIHBhZChkYXRlLmdldFVUQ0RhdGUoKSwgMiksICJUIiwKICAgICAgICAgICAgICBwYWQoZGF0ZS5nZXRVVENIb3VycygpLCAyKSwgIjoiLAogICAgICAgICAgICAgIHBhZChkYXRlLmdldFVUQ01pbnV0ZXMoKSwgMiksICI6IiwKICAgICAgICAgICAgICBwYWQoZGF0ZS5nZXRVVENTZWNvbmRzKCksIDIpXS5qb2luKCk7CiAgICAgICAgICB9OwoKICAgICAgICAgIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjb29raWUpIHsKICAgICAgICAgICAgLy8gRmluZCBtYWluIHN0b3JhZ2UgY29va2llCiAgICAgICAgICAgIGlmIChjb29raWUuc3Vic3RyKDAsIDYpID09ICJNR1VJRD0iKSB7CiAgICAgICAgICAgICAgLy8gRGVjb21wb3NlIGluZm9ybWF0aW9uIGZyb20gbWFpbiBzdG9yYWdlIGNvb2tpZQogICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSB7fTsKICAgICAgICAgICAgICBjb29raWUuc3Vic3RyKDYpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbiAoYXNzaWdubWVudCkgewogICAgICAgICAgICAgICAgdmFyIHBvcyA9IGFzc2lnbm1lbnQuaW5kZXhPZignPScpOwogICAgICAgICAgICAgICAgaWYgKHBvcyA+IC0xKSB7CiAgICAgICAgICAgICAgICAgIHZhbHVlc1thc3NpZ25tZW50LnN1YnN0cigwLCBwb3MpXSA9IGFzc2lnbm1lbnQuc3Vic3RyKHBvcyArIDEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAvLyBVcGRhdGUgImZpcnN0IHZpZXdlZCIgdGltZXN0YW1wCiAgICAgICAgICAgICAgdmFsdWVzLlRpbWVzdGFtcCA9IG1ha2VJU09UaW1lc3RhbXBVVEMoKTsKCiAgICAgICAgICAgICAgLy8gUmVjb21wb3NlIGluZm9ybWF0aW9uIGluIG1haW4gc3RvcmFnZSBjb29raWUKICAgICAgICAgICAgICBjb29raWUgPSAiTUdVSUQ9IjsKICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWVzKSB7CiAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmhhc093blByb3BlcnR5KGtleSkpIHsKICAgICAgICAgICAgICAgICAgY29va2llICs9IGtleSArICI9IiArIHZhbHVlc1trZXldICsgIiYiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjb29raWUgPSBjb29raWUuc3Vic3RyKDAsIChjb29raWUubGVuZ3RoIC0gMSkpOwoKICAgICAgICAgICAgICAvLyBVcGRhdGUgY29va2llCiAgICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRla19kb21haW5zIDogewogICAgICAgIC8vIGJ5OiBSZWVrLCBBbGV4YW5kZXIyNTUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNzg4CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzUxMgogICAgICAgIGhvc3QgOiBbJ3Rlay5ubycsICdnYW1lci5ubycsICd0ZWtub2ZpbC5ubycsICdpbnNpZGV0ZWxlY29tLm5vJywgJ3ByaXNndWlkZS5ubycsICdkaXNrdXNqb24ubm8nLCAndGVrbm9qb2JiLm5vJywgJ2FrYW0ubm8nLCAnaGFyZHdhcmUubm8nLCAnYW1vYmlsLm5vJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewoKICAgICAgICAgIC8qCiAgICAgICAgICB2YXIgYWRfZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKICAgICAgICAgIGFkX2ZyYW1lLm5hbWUgPSAiX2ZyYW1lIjsKICAgICAgICAgIGFkX2ZyYW1lLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFkX2ZyYW1lKTsKICAgICAgICAgIGFkX2ZyYW1lLmNvbnRlbnRXaW5kb3cud3JhcHBlZEpTT2JqZWN0LmluRklGID0gdHJ1ZTsKICAgICAgICAgICAqLwoKICAgICAgICAgIC8vIGZpeCAyNy4xMS4yMDE1CiAgICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICAgIHRhZyA6ICdkaXYnLAogICAgICAgICAgICBpZCA6ICdnb29nbGVfYWRzX2lmcmFtZV8nLAogICAgICAgICAgICBodG1sIDogJzxwPjwvcD4nLAogICAgICAgICAgICBhcHBlbmQgOiAnYm9keScKICAgICAgICAgIH0pOwoKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHBsYW5ldGF0dm9ubGluZWhkX25ldHdvcmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE0NjcKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTU5CiAgICAgICAgaG9zdCA6IFsncGxhbmV0YXR2b25saW5laGQuYmxvZ3Nwb3QuJywgJ3BsYW5ldGF0dm9ubGluZWhkLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoJy5hZHNhbnRpbG9rIHsgaGVpZ2h0OiAxcHg7IH0nKTsKICAgICAgICAgIC8vQWFrLnV3LmpRQW50aUFkc0Jsb2NrID0gZnVuY3Rpb24gKCl7fTsgLy8gZG9uJ3Qgd29yawogICAgICAgIH0KICAgICAgfSwKICAgICAgYmV0YV9zcGVlZHRlc3RfbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy82MjgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTYyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ4NAogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlMi5vcmcvNTN5bWdoWDEKICAgICAgICBob3N0IDogWydiZXRhLnNwZWVkdGVzdC5uZXQnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZHNPb2tsYUNvbVJlYWNoYWJsZSA9IHRydWU7CiAgICAgICAgICBBYWsudXcuc2NyaXB0c0xvYWRlZCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmluYnVja3NfY29tIDogewogICAgICAgIC8vIGJ5OiBBbGV4YW5kZXIyNTUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTQ1CiAgICAgICAgaG9zdCA6IFsnYmluYnVja3MuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LnRlc3RKdWljeVBheSA9IHRydWU7CiAgICAgICAgICBBYWsudXcudGVzdFNlbnNlUGF5ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdoaXNreXByaWNlc19kb21haW5zIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjg0CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL0VwcjV0UkVMCiAgICAgICAgaG9zdCA6IFsnd2hpc2t5cHJpanplbi5jb20nLCAnd2hpc2t5cHJpY2VzLmNvLnVrJywgJ3doaXNreXByZWlzZS5jb20nLCAnd2hpc2t5cHJpeC5mciddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Lk9BX3Nob3cgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbmljb2Jsb2dfb3JnIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTg0CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL01OSHBMczJWCiAgICAgICAgaG9zdCA6IFsnbmljb2Jsb2cub3JnJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNyYycpOwogICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGlfc2UgOiB7CiAgICAgICAgLy8gbm90ZTogYWRkIHRoaXMgcnVsZSBmb3IgY2hyb21lIHVzZXIKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTMxOQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS85YkRQUXpNWAogICAgICAgIGhvc3QgOiBbJ2RpLnNlJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNoZWFkZXJfb3ZlcmxheScpOwogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNtZXNzYWdlX21vZGFsJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtZWdvZ29fbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBQTQogICAgICAgIC8vIHNvdXJjZTE6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vY2NIUWczaG4KICAgICAgICAvLyBzb3VyY2UyOiBodHRwOi8vcGFzdGViaW4uY29tL2drMHZFUUhOCiAgICAgICAgLy8gbm90ZTogdHdvIGFkYmxvY2sgY2hlY2sKICAgICAgICBob3N0IDogWydtZWdvZ28ubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICJhZEJsb2NrIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiBmYWxzZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAic2hvd0FkQmxvY2tNZXNzYWdlIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiBmdW5jdGlvbiAoKSB7fQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBsaWJlcnRhZGRpZ2l0YWxfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNjQyCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tLzZGenAwdnJFCiAgICAgICAgaG9zdCA6IFsnbGliZXJ0YWRkaWdpdGFsLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAiYWRfYWxyZWFkeV9wbGF5ZWQiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZSA6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSA6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFhay51dywgInB1ZWRlTW9zdHJhckFkcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LCAgICAgCiAgICAgIGZvbGhhX3VvbF9jb21fYnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzOTYKICAgICAgICAvLyBzb3VyY2U6IGYoICggdHlwZW9mIHBheXdhbGxfYWNjZXNzID09ICJ1bmRlZmluZWQiIHx8IHBheXdhbGxfYWNjZXNzICE9IHRydWUgKSAmJiAoIHR5cGVvZiBmb2xoYV9hZHMgPT0gInVuZGVmaW5lZCIgfHwgZm9saGFfYWRzICE9IHRydWUgKSApIHsKICAgICAgICBob3N0IDogWydmb2xoYS51b2wuY29tLmJyJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICJwYXl3YWxsX2FjY2VzcyIsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAiZm9saGFfYWRzIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGdhbWVyX2NvbV90dyA6IHsKICAgICAgICAvLyBieTogbW1pczEwMDAKICAgICAgICAvLyB1c2Vyc2NyaXB0OiBodHRwczovL2dyZWFzeWZvcmsub3JnL2VuL3NjcmlwdHMvMTY1MjUKICAgICAgICAvLyBpc3N1ZTogOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy85NzUKICAgICAgICBob3N0IDogWydnYW1lci5jb20udHcnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFhay51dywgJ0FudGlBZCcsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBhcm1vcmdhbWVzX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODQ1CiAgICAgICAgaG9zdCA6IFsnYXJtb3JnYW1lcy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFhay51dywgJ2dhX2RldGVjdCcsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogbnVsbAogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtYW5nYWhvc3RfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy85NTcKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTU4CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL0dycGJKRU5BCiAgICAgICAgaG9zdCA6IFsnbWFuZ2Fob3N0LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAidGVzdERpc3BsYXkiLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZSA6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSA6IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpZGVvd29vZF90diA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTMzOQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3ZpZGVvd29vZC50di9idWlsZC9hc3NldHMvanMvcGVtYmVkLTk3YTY0MGY2MjUuanMKICAgICAgICBob3N0IDogWyd2aWRlb3dvb2QudHYnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Lm9wZW4gPSBmdW5jdGlvbiAoKSB7fTsgLy8gcHJldmVudCBwb3B1cAogICAgICAgICAgQWFrLnV3LmNvbmZpZyA9IHt9OwogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFhay51dy5jb25maWcsICJhZGJfcmVtaW5kIiwgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiBmYWxzZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBpbmZvam9ic19jb21fYnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzMzkKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vTFBnNjA5M1UKICAgICAgICAvLyByZWRpcmVjdDogaHR0cDovL3d3dy5pbmZvam9icy5jb20uYnIvbm9wdWJsaWNpdHkuYXNweAogICAgICAgIGhvc3QgOiBbJ2luZm9qb2JzLmNvbS5iciddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU2NyaXB0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHdlYlVJID0gd2ViVUkgfHwge307CiAgICAgICAgICAgIHdlYlVJLlV0aWxzID0gd2ViVUkuVXRpbHMgfHwge307CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3ZWJVSS5VdGlscywgIlN0b3BBZEJsb2NrIiwgewogICAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgICAgdmFsdWUgOiBmdW5jdGlvbiAoKSB7fQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNsb3Vkd2ViY29weV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzcxNAogICAgICAgIGhvc3QgOiBbJ2Nsb3Vkd2ViY29weS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIHNldFRpbWVvdXRDbG9uZSA9IEFhay51dy5zZXRUaW1lb3V0OwogICAgICAgICAgQWFrLnV3LnNldFRpbWVvdXQgPSBudWxsOwogICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIEFhay51dy5zZXRUaW1lb3V0ID0gc2V0VGltZW91dENsb25lOwogICAgICAgICAgfSwgNTAwMCk7CiAgICAgICAgfQogICAgICB9LAogICAgICBuYXJraXZlX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTY5CiAgICAgICAgaG9zdCA6IFsnbmFya2l2ZS5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZGJsb2NrX3N0YXR1cyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHByZWdlbl9uZXQgOiB7CiAgICAgICAgaG9zdCA6IFsncHJlZ2VuLm5ldCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBza2lwIHBhZ2UgaW5mbwogICAgICAgICAgQWFrLnNldENvb2tpZSgncGduJywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBwaHlzX29yZyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNzY4CiAgICAgICAgaG9zdCA6IFsncGh5cy5vcmcnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5jaGtBQiA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgb252YXNvcnRpcl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9b252YXNvcnRpci5jb20KICAgICAgICBob3N0IDogWydvbnZhc29ydGlyLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gK2FicCBydWxlIGFsdCBzb2x1dGlvbgogICAgICAgICAgQWFrLnV3LkplQmxvcXVlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBmdWxsaGR6ZXZraV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZnVsbGhkemV2a2kuY29tCiAgICAgICAgaG9zdCA6IFsnZnVsbGhkemV2a2kuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyArYWJwIHJ1bGUgYWx0IHNvbHV0aW9uCiAgICAgICAgICBBYWsudXcuY2hlY2sgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpbGxlX2lkZWFsZV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI1OAogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS8xNm1ubWVNYwogICAgICAgIGhvc3QgOiBbJ3ZpbGxlLWlkZWFsZS5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vICthYnAgcnVsZSBhbHQgc29sdXRpb24KICAgICAgICAgIEFhay51dy5leGVjc3AgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5vdHJlX3BsYW5ldGVfaW5mbyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjU4CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL3FyUzZRR0dFCiAgICAgICAgaG9zdCA6IFsnbm90cmUtcGxhbmV0ZS5pbmZvJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyArYWJwIHJ1bGUgYWx0IHNvbHV0aW9uCiAgICAgICAgICBBYWsudXcucHVicG9wID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBhcGttaXJyb3JfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zNzgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjI0CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzc4CiAgICAgICAgaG9zdCA6IFsnYXBrbWlycm9yLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmRvQ2hlY2sgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG10bGJsb2dfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy85NDgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9mb3J1bS9kaXNjdXNzaW9uLzc3NTMKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vQkZyRFBNNmIKICAgICAgICBob3N0IDogWydtdGxibG9nLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAncHVhYnMnLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB2YWx1ZSA6IGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFuaXptX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydhbml6bS5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5zdG9wQWRCbG9jayA9IHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGlhcmlvaW5mb3JtYWNpb25fY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTUwCiAgICAgICAgaG9zdCA6IFsnZGlhcmlvaW5mb3JtYWNpb24uY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICdwcl9va3ZhbGlkYScsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHZhbHVlIDogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBjbmJldGFfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMzAxCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL3ZYTkN6dHd4CiAgICAgICAgaG9zdCA6IFsnY25iZXRhLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAnSkInLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB2YWx1ZSA6IGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRoZW1hcmtlcl9oYWFyZXR6IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjkyCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL20wOGRrRFQ0CiAgICAgICAgaG9zdCA6IFsndGhlbWFya2VyLmNvbScsICdoYWFyZXR6LmNvLmlsJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICdBZEJsb2NrVXRpbCcsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHZhbHVlIDoge30KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGlwb2Nhc190diA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydwaXBvY2FzLnR2J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIEFsc28gYWRkZWQgaW4gZGlzYWJsZUFsZXJ0Ym94CiAgICAgICAgICAvLyBObyBwb3B1cAogICAgICAgICAgQWFrLnNldENvb2tpZSgncG9wdXBfdXNlcl9sb2dpbicsICd5ZXMnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIF8xNW1pbl9sdCA6IHsKICAgICAgICAvLyBub3RlOiByZWd1bGFyeSB1cGRhdGUgc2NyaXB0CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9MTVtaW4uaXQKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vWVdmM0hUcXIKICAgICAgICAvLyB0ZXN0OiBodHRwOi8vdGlueXVybC5jb20vaDZjNDMzNgogICAgICAgIGhvc3QgOiBbJzE1bWluLmx0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICdST1VURScsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogJ19iZV9yZWtsYW1vcycKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgc2MyY2FzdHNfY29tIDogewogICAgICAgIC8vIGJ5OiBHaXdheXVtZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTk5CiAgICAgICAgaG9zdCA6IFsnc2MyY2FzdHMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbigpIHsKICAgICAgICAgICAgd2luZG93Ll9nYXEgPSB7IHB1c2g6ZnVuY3Rpb24oKSB7fSB9OwogICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAic2hvd2RpYWxvZyIsIHsKICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24oKSB7fSwKICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLAogICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgInNob3dQb3B1cDIiLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge30sCiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZndW5ldHdvcmtfY29tIDogewogICAgICAgIC8vIGlzc3VlOgogICAgICAgIGhvc3QgOiBbJ3ZndW5ldHdvcmsuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnc3RvcEl0JywgMSk7CiAgICAgICAgICB2YXIgY2xvc2UgPSBBYWsuZ2V0RWxlbWVudCgnI3NvbWVfYWRfYmxvY2tfa2V5X2Nsb3NlJyk7CiAgICAgICAgICBpZiAoY2xvc2UpIHsKICAgICAgICAgICAgY2xvc2UuY2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpbmtjcnlwdF93cyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjg2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvcHVsbC82NwogICAgICAgIGhvc3QgOiBbJ2xpbmtjcnlwdC53cyddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRFbGVtZW50KCcjYWRfY29udCcsIHsKICAgICAgICAgICAgaWQgOiAnJywKICAgICAgICAgICAgc3R5bGUgOiAnZGlzcGxheTpibG9jazsnCiAgICAgICAgICB9KTsKICAgICAgICAgIEFhay5zZXRFbGVtZW50KCcjY29udGFpbmVyX2NoZWNrJywgewogICAgICAgICAgICBzdHlsZSA6ICdkaXNwbGF5Om5vbmU7JwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBldmVudG9zcHB2X21lIDogewogICAgICAgIC8vIGlzc3VlOiAKICAgICAgICBob3N0IDogWydldmVudG9zcHB2Lm1lJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNuZjM3Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBib2xvcl90b2xpX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTUyCiAgICAgICAgaG9zdCA6IFsnYm9sb3ItdG9saS5jb20nXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBhZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdiYW5uZXInKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBhZCA9IGFkc1tpXTsKICAgICAgICAgICAgYWQuaW5uZXJIVE1MID0gJzxicj4nOwogICAgICAgICAgICBhZC5zdHlsZS5oZWlnaHQgPSAnMXB4JzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpdm9fc3ggOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI4MAogICAgICAgIGhvc3QgOiBbJ3Zpdm8uc3gnXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBhbGVydCA9IEFhay5nZXRFbGVtZW50KCcjYWxlcnQtdGhyb3R0bGUnKTsKICAgICAgICAgIGlmIChhbGVydCkgewogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudChhbGVydCk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgYnV0dG9uID0gQWFrLmdldEVsZW1lbnQoJ2J1dHRvbiNhY2Nlc3MnKTsKICAgICAgICAgIGlmIChidXR0b24pIHsKICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnaWQnKTsKICAgICAgICAgICAgYnV0dG9uLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTsKICAgICAgICAgICAgYnV0dG9uLmlubmVySFRNTCA9ICdDb250aW51ZSB0byB2aWRlbyc7CiAgICAgICAgICB9CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGlucHV0ID0gQWFrLmdldEVsZW1lbnQoJ2lucHV0W25hbWU9InRocm90dGxlIl0nKTsKICAgICAgICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoaW5wdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGx1eHlhZF9jb20gOiB7IC8vIHNraXAgcmVkaXJlY3QgbXlhbmltZXMubGkKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydsdXh5YWQuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKCcvSW5mb3JtYXRpb24ucGhwJyA9PSBsb2NhdGlvbi5wYXRobmFtZSkgewogICAgICAgICAgICB2YXIgaHJlZiA9IGxvY2F0aW9uLmhyZWY7CiAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSBocmVmLnN1YnN0cihocmVmLmluZGV4T2YoJ3VybD0nKSArIDQsIGhyZWYubGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIG1ycGlyYWN5X2RvbWFpbnMgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE0MDUKICAgICAgICBob3N0IDogWydtcnBpcmFjeS54eXonLCAnbXJwaXJhY3kuY2x1YiddLAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgY29udGFpbnMgOiAnRGVzYXRpdmEgbyBBZEJsb2NrIHBhcmEgY29udGludWFyJywKICAgICAgICAgICAgICBleHRlcm5hbCA6IGZhbHNlLAogICAgICAgICAgICAgIHJlbW92ZSA6IHRydWUKICAgICAgICAgICAgfQogICAgICAgICAgXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRicGxhbmV0X25ldCA6IHsKICAgICAgICAvLyBpc3N1ZTogUE0KICAgICAgICBob3N0IDogWydkYnBsYW5ldC5uZXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnbmV3bm9Nb3JlQWRzTm93JywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBhaWRlbXVfZnIgOiB7CiAgICAgICAgLy8gaXNzdWU6CiAgICAgICAgaG9zdCA6IFsnYWlkZW11LmZyJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2FkYmxvY2tQb3B1cCcsIHRydWUpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZWFtaV9pbiA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydlYW1pLmluJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdhZF9sb2NrZWQnLCAxKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJpZ2Rvd25sb2FkZXJfY29tIDogewogICAgICAgIC8vIGlzc3VlOgogICAgICAgIGhvc3QgOiBbJ2JpZ2Rvd25sb2FkZXIuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNhbnRpX2FkYmxvY2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZyZWVza2llcl9jb20gOiB7CiAgICAgICAgLy8gYnk6IEdvcmhpbGwKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNjM5CiAgICAgICAgLy8gbm90ZTogYWxzbyBhZGRlZCBsaXN0IHJ1bGUKICAgICAgICBob3N0IDogWydmcmVlc2tpZXIuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkYi1ub3QtZW5hYmxlZCIpOwogICAgICAgICAgaWYgKGVsICE9PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJkaXNwbGF5Iik7CiAgICAgICAgICB9CiAgICAgICAgICBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWRlb0NvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGVsICE9PSBudWxsKSB7CiAgICAgICAgICAgIGVsLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJkaXNwbGF5Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBnYW1ldHJhaWxlcnNfY29tIDogewogICAgICAgIC8vIGlzc3VlOgogICAgICAgIGhvc3QgOiBbJ2dhbWV0cmFpbGVycy5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI2FkX2Jsb2NraW5nJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzY2FuX29uZXBpZWNlX25hcnV0b19teCA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTgyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI3OQogICAgICAgIGhvc3QgOiBbJ3NjYW4tbXguY29tJywgJ29uZXBpZWNlLW14Lm5ldCcsICduYXJ1dG8tbXgubmV0J10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRfYmxvY2tfdGVzdCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldEVsZW1lbnQoJyN5b3AnLCB7CiAgICAgICAgICAgIGlkIDogJycKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gQml0Y29pbnMKICAgICAgYml0Y29pbmtlcl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzIzMAogICAgICAgIGhvc3QgOiBbJ2JpdGNvaW5rZXIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5jbGFpbSA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9OwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNFMzNGQ0NjWDJmVycpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbW9vbmRvZ2VfY29faW4gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzM4NAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yMzIKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjMzCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzIzNgogICAgICAgIGhvc3QgOiBbJ21vb25kb2dlLmNvLmluJywgJ21vb25saXRlY28uaW4nLCAnbW9vbmJpdC5jby5pbicsICdiaXRjb2luemVicmEuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNBQiwgI0U0NDJEdiwgI2VDQzVoJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBiaXRjb2luZXJfbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zNDkKICAgICAgICBob3N0IDogWydiaXRjb2luZXIubmV0JywgJ2xpdGVjb2luZXIubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I3Rlc3RlcicpOwogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjYWQtdG9wJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBiaXRjb2luc19ueF90YyA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydmcmVlYml0Y29pbnMubngudGMnLCAnZ2V0Yml0Y29pbnMubngudGMnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZF9ibG9ja190ZXN0ID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZnJlZWNvaW5zNF9tZSA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydmcmVlY29pbnM0Lm1lJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuY2hlY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9LAogICAgICB0b3JyZW50X3R2X3J1IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy81MzcKICAgICAgICBob3N0IDogWyd0b3JyZW50LXR2LnJ1J10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuY19Pb19BZHZlcnRfU2hvd24gPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgY3d0dl9jb20gOiB7CiAgICAgICAgLy8gYnk6IEthbGJhc2l0CiAgICAgICAgLy8gcHVsbDogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9wdWxsLzc2MwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zNDAKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNzYyCiAgICAgICAgaG9zdCA6IFsnY3d0di5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5DV1RWSXNBZEJsb2NraW5nID0gdW5kZWZpbmVkOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYmlsZF9kZSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1iaWxkCiAgICAgICAgaG9zdCA6IFsnYmlsZC5kZSddLAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgY29udGFpbnMgOiAnaHR0cDovL3d3dy5iaWxkLmRlL3dhL2xsL2JpbGQtZGUvdW5hbmdlbWVsZGV0LTQyOTI1NTE2LmJpbGQuaHRtbCcsCiAgICAgICAgICAgICAgZXh0ZXJuYWwgOiBmYWxzZSwKICAgICAgICAgICAgICByZXBsYWNlIDogWydqYXZhc2NyaXB0JywgJ3ZvaWQoMCk7J10uam9pbignOicpCiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgfQogICAgICB9LAogICAgICBpbm5fY29faWwgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzUzMgogICAgICAgIGhvc3QgOiBbJ2lubi5jby5pbCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU2NyaXB0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIFRSQyA9IHt9OwogICAgICAgICAgICBUUkMuYmxvY2tlciA9IHsKICAgICAgICAgICAgICBzdGF0ZXMgOiB7CiAgICAgICAgICAgICAgICBBQlBfREVURUNUSU9OX0RJU0FCTEVEIDogLTIsCiAgICAgICAgICAgICAgICBBQlBfTk9UX0RFVEVDVEVEIDogMCwKICAgICAgICAgICAgICAgIEFCUF9ERVRFQ1RFRCA6IDEKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGNyZWF0ZUJsb2NrRGV0ZWN0aW9uRGl2IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgaXNCbG9ja0RldGVjdGVkT25EaXYgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGlzQmxvY2tEZXRlY3RlZE9uQ2xhc3NOYW1lcyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgZ2V0QmxvY2tlZFN0YXRlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBiaGFza2FyX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1iaGFza2FyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZGl2eWFiaGFza2FyLmNvLmluCiAgICAgICAgaG9zdCA6IFsnYmhhc2thci5jb20nLCAnZGl2eWFiaGFza2FyLmNvLmluJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcub3BlblBvcFVwRm9yQnJlYWtQYWdlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICBBYWsudXcuY2FuQUJQID0gdHJ1ZTsKICAgICAgICAgIEFhay51dy5jYW5SdW5BZHMgPSB0cnVlOwogICAgICAgICAgQWFrLnV3LmNhbkNoZWNrQWRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHR1cmthbmltZV90diA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNDQ2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzOQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL3RyL2ZvcnVtL2Rpc2N1c3Npb24vNDI4Mi8KICAgICAgICBob3N0IDogWyd0dXJrYW5pbWUudHYnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy5hZGJsb2NrYmxvY2sgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5CbG9rS29udHJvbCA9IHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgd3RmYml0X2NoIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy80MDcKICAgICAgICBob3N0IDogWyd3dGZiaXQuY2gnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy53cml0ZUhUTUxhc0pTID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBhcmFuenVsbGFfaXQgOiB7CiAgICAgICAgLy8gYnk6IFJvYm90ZXgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1hcmFuenVsbGEuaXQKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20veU1NNllneFcKICAgICAgICBob3N0IDogWydhcmFuenVsbGEuaXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoJyNhYnQxICsgU1RZTEUgKyBkaXZbaWRdW2NsYXNzXSB7ZGlzcGxheTpub25lO30nKTsKICAgICAgICB9LAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgY29udGFpbnMgOiAnbmF2aWdhdG9yLnVzZXJBZ2VudHx8bmF2aWdhdG9yLnZlbmRvcnx8d2luZG93Lm9wZXJhJywKICAgICAgICAgICAgICBleHRlcm5hbCA6IGZhbHNlLAogICAgICAgICAgICAgIHJlbW92ZSA6IHRydWUKICAgICAgICAgICAgfQogICAgICAgICAgXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG5kdHZfY29tIDogewogICAgICAgIC8vIG5vdGU6IGNhblJ1bkFkcyBpbnZlcnRlZCB2YWx1ZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPW5kdHYuY29tCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL2hjZm5jZHYKICAgICAgICBob3N0IDogWyduZHR2LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ19fX3BfX3AnLCAxKTsKICAgICAgICAgIEFhay5zZXRSZWFkT25seSgnZ2V0Tm9Ub3BMYXRlc3ROZXdzJywgZnVuY3Rpb24gKCkge30pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbGVzZWNob3NfZnIgOiB7CiAgICAgICAgLy8gUmVlaywgR2l3YXl1bWUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1sZXNlY2hvcy5mcgogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9DTU04V0dMagogICAgICAgIGhvc3QgOiBbJ2xlc2VjaG9zLmZyJywgJ2xlc2VjaG9zLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbigpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICJjaGVja0FkQmxvY2siLCB7CiAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uKCkge30sCiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSwKICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmNhbGxfQWQgPSAxOwogICAgICAgICAgQWFrLnV3LnBheXdhbGxfYWRibG9ja19hcnRpY2xlID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBiaXR2aXNpdHNfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yNjYKICAgICAgICBob3N0IDogWydiaXR2aXNpdHMuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYmxvY2tBZGJsb2NrVXNlciA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXhyYXBpZGxlZWNoX2luZm8gOiB7CiAgICAgICAgLy8gYnk6IEFsZXhhbmRlcjI1NSwgUmVlaywgR2l3YXl1bWUKICAgICAgICAvLyBwYXRjaDogaHR0cDovL3Bhc3RlYmluLmNvbS9RNjY0ZGlRMgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWV4cmFwaWRsZWVjaAogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS81ZTI3c3lqQQogICAgICAgIGhvc3QgOiBbJ2V4cmFwaWRsZWVjaC5pbmZvJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICB2YXIgdG9tb3Jyb3cgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgdG9tb3Jyb3cuc2V0RGF0ZSh0b21vcnJvdy5nZXREYXRlKCkgKyAxKTsKCiAgICAgICAgICAvLyBwcmV2ZW50IHBvcHVwCiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwb3BjYXNocHVDYXAnLCAxKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ3BvcGNhc2hwdScsIDEpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgnbm9wb3BhdGFsbCcsIHRvbW9ycm93LmdldFRpbWUoKS50b1N0cmluZygpKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ25vYWR2dGRheScsIDApOwogICAgICAgICAgLy9BYWsuc2V0Q29va2llKCdidl9EU0tza2Rja19zMWQnLCAnYnZEU0tza2Rja3MxZCcpOwoKICAgICAgICAgIC8vIGhpZGUgbm90aWNlCiAgICAgICAgICBBYWsuYWRkU3R5bGUoJ2Rpdi5hbGVydC5hbGVydC1kYW5nZXIubGVhZCB7b3BhY2l0eTowO30nKTsKICAgICAgICAgIAogICAgICAgICAgLy8gcHJldmVudCByZWRpcmVjdCB0byB2ZXJpZnkgcGFnZQogICAgICAgICAgQWFrLnNldFJlYWRPbmx5KCdiZHZibnJfcGlkJywgW10pOwogICAgICAgICAgQWFrLnNldFJlYWRPbmx5KCdQb3BBZHMnLCAxKTsKCiAgICAgICAgICBBYWsuYWRkU2NyaXB0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAvLyBwcmV2ZW50IHBvcHVwCiAgICAgICAgICAgICAgd2luZG93Lm9wZW4gPSBmdW5jdGlvbiAoKSB7fTsKCiAgICAgICAgICAgICAgLy8gcHJldmVudCByZWRpcmVjdCB0byB2ZXJpZnkgcGFnZQogICAgICAgICAgICAgIHZhciBmcmFtZTEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKICAgICAgICAgICAgICBmcmFtZTEuc3JjID0gJ2h0dHA6Ly9iZGZybS5iaWR2ZXJ0aXNlci5jb20vQmlkVmVydGlzZXIuZGJtP3BpZD0zODM4NjUmYmlkPTE3Mzc0MTgmUkQ9JzsKICAgICAgICAgICAgICBmcmFtZTEuaWQgPSAnYmR2aSc7CiAgICAgICAgICAgICAgZnJhbWUxLnN0eWxlID0gJ2Rpc3BsYXk6bm9uZSc7CiAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKGZyYW1lMSk7CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpcGxlYWd1ZV9kb21haW5zIDogewogICAgICAgIC8vIG5vdGU6IGFsc28ga2lsbGVkIGJ5IEFha0xpc3QKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT12aXBib3gKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT12aXBsZWFndWUKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vTkVSVnpIelMKICAgICAgICBob3N0IDogWyJ2aXBsZWFndWUuaXMiLCAidmlwbGVhZ3VlLndzIiwgInZpcGxlYWd1ZS50diIsICJ2aXBsZWFndWUuc2UiLCAidmlwbGVhZ3VlLnR2IiwgInZpcGxlYWd1ZS5tZSIsICJ2aXBsZWFndWUubW9iaSIsICJ2aXBsZWFndWUuY28iLCAidmlwbGVhZ3VlLnN4IiwgInZpcGxlYWd1ZS5jaCIsICJ2aXBib3gudHYiLCAidmlwYm94LmNvIiwgInZpcGJveC5iaXoiLCAidmlwYm94LnN4IiwgInZpcGJveC5ldSIsICJ2aXBib3guc28iLCAidmlwYm94Lm51IiwgInZpcGJveHNhLmNvIiwgInN0cmlrZW91dC5jbyIsICJzdHJpa2VvdXQubWUiLCAiaG9tZXJ1bi5yZSIsICJ2aXBib3h0di5jbyIsICJ2aXBhcHAubWUiXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmlFeGlzdCA9IHRydWU7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCd4Y2xzdmlwJywgMSk7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIi52aXBfMDUyeDAwMyB7IGhlaWdodDogMjUwcHg7IH0iKTsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiLnZpcF8wOXg4MjcgeyBoZWlnaHQ6IDI2cHg7IH0iKTsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI292ZXJsYXkgeyBkaXNwbGF5OiBub25lOyB9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICB6b29tdHZfbWUgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9em9vbXR2Lm1lCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL200ekFYR2N3CiAgICAgICAgaG9zdCA6IFsnem9vbXR2Lm1lJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuaWF4cEVuYWJsZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdmdfbm8gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI5MgogICAgICAgIC8vICthYnAgcnVsZQogICAgICAgIGhvc3QgOiBbJ3ZnLm5vJywgJ2UyNC5ubyddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Ll9fQUJfXyA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgcG9ybnZlX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTQ3CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tLzdUUFBrcTEyCiAgICAgICAgaG9zdCA6IFsncG9ybnZlLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmFkeGp3dXBkYXRlID0gMTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxvbF9tb2FfdHcgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzExMTQKICAgICAgICBob3N0IDogWydsb2wubW9hLnR3J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBNb2FPYmogPSBNb2FPYmogfHwge307CiAgICAgICAgICAgIE1vYU9iai5hZCA9IE1vYU9iai5hZCB8fCB7fTsJCQkKICAgICAgICAgICAgTW9hT2JqLmFkLmhhc0FkYmxvY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9OwogICAgICAgICAgICBNb2FPYmouYWQuY2hlY2tBQlAgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtdWx0aXVwX29yZyA6IHsKICAgICAgICAvLyBieTogV2F0aWxpbgogICAgICAgIC8vIG5vdGU6IGFsdGVybmF0aXZlIHNvbHV0aW9uCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bXVsdGl1cC5vcmcKICAgICAgICBob3N0IDogWydtdWx0aXVwLm9yZyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aXNpdCcsIDEpOyAvLyBwcmV2ZW50IHBvcHVwCiAgICAgICAgICBBYWsuc2V0UmVhZE9ubHkoJ2hpJywgZnVuY3Rpb24gKCkge30pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGFpbHliaXRjb2luc19vcmcgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwNwogICAgICAgIGhvc3QgOiBbJ2RhaWx5Yml0Y29pbnMub3JnJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJy5hZC1pbWcnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGtvemFjemVrX3plYmVya2EgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQxNAogICAgICAgIGhvc3QgOiBbJ2tvemFjemVrLnBsJywgJ3plYmVya2EucGwnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgnYWJsYycsIDEpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgnY29va2llX3BvbGljeScsIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgc3Bhbmt3aXJlX3NpdGVzIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84ODcKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vVEZCMWR0Z2IKICAgICAgICBob3N0IDogWydzcGFua3dpcmUuY29tJywgJ2tlZXptb3ZpZXMuY29tJywgJ2V4dHJlbWV0dWJlLmNvbScsICdtb2Zvc2V4LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCJhYkNsb3NlZCIsICJ0cnVlIik7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCJoaWRlX2FkX21zZyIsICIxIik7CiAgICAgICAgfQogICAgICB9LAogICAgICB5b3Vwb3JuX25ldHdvcmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzg4NwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9URkIxZHRnYgogICAgICAgIGhvc3QgOiBbJ3lvdXBvcm4uY29tJywgJ3lvdXBvcm5nYXkuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoImFkYmxvY2tfbWVzc2FnZSIsICJjbG9zZWQiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNpdGF0aW9ubWFjaGluZV9uZXQgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9Y2l0YXRpb25tYWNoaW5lLm5ldAogICAgICAgIGhvc3QgOiBbJ2NpdGF0aW9ubWFjaGluZS5uZXQnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnNldENvb2tpZSgic2JtX2NtX2NpdGF0aW9ucyIsIDApOwogICAgICAgIH0KICAgICAgfSwgICAgICAKICAgICAgcHNhcmlwc19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE1MwogICAgICAgIGhvc3QgOiBbJ3BzYXJpcHMuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRCYWl0RWxlbWVudCgnZGl2I2FkdmVydCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXh0cmF0b3JyZW50X2RvbWFpbnMgOiB7CiAgICAgICAgaG9zdCA6IFsnZXh0cmF0b3JyZW50LmNjJywgJ2V4dHJhdG9ycmVudC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gcHJldmVudCBwb3B1cAogICAgICAgICAgLy8gc291cmNlIGFyZSBvYmZ1c2NhdGVkIGluIGV4dGVybmFsIGpzCiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwcHVfZGVsYXknLCAxKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ3BwdV9tYWluJywgMSk7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwcHVfc3ViJywgMSk7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwcHVfc2hvd19vbicsIDEpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgdG55X2N6IDogewogICAgICAgIGhvc3QgOiBbJ3RueS5jeicsICdwYXN0ZWQuY28nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gcHJldmVudCBwb3B1cAogICAgICAgICAgQWFrLnNldENvb2tpZSgnX18ucG9wdW5kZXJDYXAnLCAxKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ19fLnBvcHVuZGVyJywgMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBjbHViZWRvaGFyZHdhcmVfY29tX2JyIDogeyAvLyB0d28gYW50aWFkYmxvY2sKICAgICAgICBob3N0IDogWydjbHViZWRvaGFyZHdhcmUuY29tLmJyJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmIChBYWsuY29udGFpbnMobG9jYXRpb24uaG9zdCwgJ2ZvcnVtJykpIHsKICAgICAgICAgICAgLy8gU29sdXRpb24gMQogICAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNiYW5uZXIsIHNjcmlwdCB7IGhlaWdodDogNTFweDsgfSIpOwogICAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2RpdiNiYW5uZXInKTsKICAgICAgICAgIH0gZWxzZSB7IC8vIFdlYnNpdGUKICAgICAgICAgICAgLy8gU29sdXRpb24gMQogICAgICAgICAgICBBYWsuYWRkQmFpdEVsZW1lbnQoJ2Rpdi5iYW5uZXJfdG9wbycpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKEFhay5jb250YWlucyhsb2NhdGlvbi5ob3N0LCAnZm9ydW0nKSkgewogICAgICAgICAgICAvLyBTb2x1dGlvbiAyCiAgICAgICAgICAgIEFhay51dy5hZGRCbG9ja2luZy5oaWRlKCk7CiAgICAgICAgICAgIEFhay51dy5hZGRCbG9ja2luZy5raWxsKCk7CiAgICAgICAgICB9IGVsc2UgeyAvLyBXZWJzaXRlCiAgICAgICAgICAgIC8vIFNvbHV0aW9uIDIKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5pZCA9ICcnOwogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnLmFkYmxvY2snKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlYnJhc3RhZ2lfY29tIDogewogICAgICAgIGhvc3QgOiBbJ2RlYnJhc3RhZ2kuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNzdHAtbWFpbicpOwogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNzdHAtYmcnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRkbGZyZW5jaF9vcmcgOiB7CiAgICAgICAgaG9zdCA6IFsnZGRsZnJlbmNoLm9yZyddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIEZpeCBidWcgZGlzcGxheSBjb250ZW50CiAgICAgICAgICBBYWsuc2V0RWxlbWVudCgnI2RsZS1jb250ZW50IC5kLWNvbnRlbnQnLCB7CiAgICAgICAgICAgICdjbGFzcycgOiAnJwogICAgICAgICAgfSk7CiAgICAgICAgICBBYWsuc2V0RWxlbWVudCgnI2NvbnRlbnQnLCB7CiAgICAgICAgICAgICdpZCcgOiAnJwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBtZWdhZGVicmlkX2V1IDogewogICAgICAgIGhvc3QgOiBbJ21lZ2EtZGVicmlkLmV1J10sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBBY3RpdmF0ZSBidXR0b24gZGVicmlkCiAgICAgICAgICBBYWsuc2V0RWxlbWVudCgnLnJlYWxidXR0b24nLCB7CiAgICAgICAgICAgICdvbmNsaWNrJyA6ICcnLAogICAgICAgICAgICAndHlwZScgOiAnc3VibWl0JwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzbGlkZXBsYXllcl9kb21haW5zIDogewogICAgICAgIC8vIGJ5OiBBbGV4YW5kZXIyNTUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTMzMwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy81MTUKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMjk2CiAgICAgICAgLy8gZGVtbzogaHR0cDovL3NsaWRlcGxheWVyLmZyL3NsaWRlLzEzMDQwMjYvIwogICAgICAgIGhvc3QgOiBbJ3NsaWRlcGxheWVyLionXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAvLyBEaXNhYmxlIGFudGktYWRibG9ja2VyCiAgICAgICAgICBBYWsudXcuZm9yY2VfcmVtb3ZlX2FkcyA9IHRydWU7CgogICAgICAgICAgLy8gQ2lyY3VtdmVudCAic2hhcmUgdG8gZG93bmxvYWQiIHJ1bGUKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgc2xpZGVfaWQgPSB3aW5kb3cuZ2V0X2N1cnJlbnRfc2xpZGVfaWQoKTsKICAgICAgICAgICAgdmFyIHNsaWRlX3NydiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwbGF5ZXJfZnJhbWUiKS5zcmMuc3BsaXQoIi8iKVszXTsKICAgICAgICAgICAgdmFyIHRpbWUgPSA4NjQwMCArIE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApOwogICAgICAgICAgICB2YXIgc2VjcmV0ID0gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5zdHJ0cih3aW5kb3cuTUQ1LmJhc2U2NCgic2VjcmV0X3ByZXZlZCBzbGlkZXBsYXllciBuZXZlciBzb2x2ZWQgIiArIHRpbWUgKyBzbGlkZV9pZCArICIucHB0IiksICIrLyIsICItICIpKTsKCiAgICAgICAgICAgIHZhciB1cmwgPSAiaHR0cDovL3BsYXllci5zbGlkZXBsYXllci5vcmcvZG93bmxvYWQvIiArIHNsaWRlX3NydiArICIvIiArIHNsaWRlX2lkICsgIi8iICsgc2VjcmV0ICsgIi8iICsgdGltZSArICIvIiArIHNsaWRlX2lkICsgIi5wcHQiOwogICAgICAgICAgICB2YXIgbGlua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJhLmRvd25sb2FkX2xpbmsiKTsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5rcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIC8qIFJlbW92ZSBvcmlnaW5hbCAic2hhcmUgdG8gZG93bmxvYWQiIHBvcHVwIGV2ZW50IGxpc3RlbmVyICovCiAgICAgICAgICAgICAgdmFyIGV2ZW50cyA9ICQuX2RhdGEobGlua3NbaV0pLmV2ZW50cy5jbGljazsKICAgICAgICAgICAgICBldmVudHMuc3BsaWNlKDAsIGV2ZW50cy5sZW5ndGgpOwoKICAgICAgICAgICAgICAvKiBTZXQgbm9ybWFsIGxpbmsgaHJlZiBpbnN0ZWFkICovCiAgICAgICAgICAgICAgbGlua3NbaV0uaHJlZiA9IHVybDsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CgogICAgICAgIH0KICAgICAgfSwKICAgICAgYm9rZXBzcG90X2NvbSA6IHsKICAgICAgICBob3N0IDogWydib2tlcHNwb3QuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIEhpZGUgRGlzY2xhaW1lcgogICAgICAgICAgQWFrLnNldENvb2tpZSgnaGlkZURpYWxvZycsICdoaWRlJyk7CiAgICAgICAgfSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBSZW1vdmUgRGlzYWJsZSBBZEJsb2NrCiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI3R1cGlrbGFuJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBwaWNsb2FkX2NvbSA6IHsKICAgICAgICBob3N0IDogWydwaWNsb2FkLm9yZyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdwbF9hZGJsb2NrZXInLCBmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRzX2xvYWRlZCA9IHRydWU7CiAgICAgICAgICBBYWsudXcuaW1hZ2VBZHMgPSBmYWxzZTsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCdkaXZbb25jb250ZXh0bWVudT0icmV0dXJuIGZhbHNlOyJdJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBmcmVlemVkb3dubG9hZF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsnZnJlZXplZG93bmxvYWQuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKC9mcmVlemVkb3dubG9hZC5jb21cL2Rvd25sb2FkXC8vLnRlc3QobG9jYXRpb24uaHJlZikpIHsKICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJ2JvZHkgPiBkaXZbaWRdJyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBtb25uc3V0b2dhdHlhX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogUE0KICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vMUx3NjBoNmsKICAgICAgICBob3N0IDogWydtb25uc3V0b2dhdHlhLmNvbSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgiI3NpdGUtYm94IHtkaXNwbGF5OmJsb2NrO30iKTsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcjZm9yLWFkLWJsb2NrZXInKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHJhcGlkOF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsncmFwaWQ4LmNvbSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCdkaXYuYmFja2sgKyAjYmxjb2tNemcnKTsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCdkaXYuYmFja2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHR1cmtkb3duX2NvbSA6IHsKICAgICAgICBob3N0IDogWyd0dXJrZG93bi5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyByZW1vdmUgZmFjZWJvb2sgYm94CiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI2R1eXVydScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmlsbW92aXppamFfZG9tYWlucyA6IHsKICAgICAgICBob3N0IDogWydmaWxtb3ZpemlqYS5tZScsICdmaWxtb3ZpemlqYS5jb20nLCAnZmlsbW92aXppamEuaW4nLCAnZmlsbW92aXppamEubmV0J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLyoKICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoKTsKICAgICAgICAgIHZhciB3ZWVrZGF5ID0gWyJTdW5kYXkiLCAiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwgIlRodXJzZGF5IiwgIkZyaWRheSIsICJTYXR1cmRheSJdOwogICAgICAgICAgdmFyIG4gPSB3ZWVrZGF5W2QuZ2V0RGF5KCldOwogICAgICAgICAgQWFrLnNldEVsZW1lbnQoJyMnICsgbiwgewogICAgICAgICAgaHRtbCA6ICcnCiAgICAgICAgICB9KTsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcjJyArIG4pOwogICAgICAgICAgICovCiAgICAgICAgfQogICAgICB9LAogICAgICBoYWNraW50b3NoX3pvbmUgOiB7CiAgICAgICAgLy8gYnk6IEFsZXhhbmRlcjI1NQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWhhY2tpbnRvc2guem9uZQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlMi5vcmcvRG5COU9qNGYKICAgICAgICBob3N0IDogWydoYWNraW50b3NoLnpvbmUnXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgdmFyIGhlYWQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwogICAgICAgICAgLy8gRmFrZSBHb29nbGUgYWQgZnJhbWUgY29udGVudAogICAgICAgICAgdmFyIGFkMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucyIpOwogICAgICAgICAgYWQxLmNsYXNzTmFtZSA9ICJhZHNieWdvb2dsZSI7CiAgICAgICAgICBhZDEuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkFBSyIpKTsKICAgICAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKGFkMSwgaGVhZC5jaGlsZE5vZGVzWzBdKTsKCiAgICAgICAgICAvKgogICAgICAgICAgLy8gRmFrZSBDbGVhbk15TWFjIGFkIGZyYW1lIHNpemUKICAgICAgICAgIHZhciBhZDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGFkMi5pZCAgPSAibnljdWhldmdxaSI7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYWQyLndyYXBwZWRKU09iamVjdCwgJ2NsaWVudEhlaWdodCcsIHt2YWx1ZTogMX0pOwogICAgICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoYWQyLCBoZWFkLmNoaWxkTm9kZXNbMF0pOwogICAgICAgICAgICovCgogICAgICAgICAgdmFyIGVsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFkc2Vuc2VncmV5Jyk7CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7CiAgICAgICAgICAgIG5vZGUuc3JjID0gQWFrLmltZ0JhaXQ7CiAgICAgICAgICAgIGVsZW1zW2ldLmFwcGVuZENoaWxkKG5vZGUpOwogICAgICAgICAgfQoKICAgICAgICB9LAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgY29udGFpbnMgOiAnZGlzYWJsZSBBREJsb2NrIGNvbXBsZXRlbHknLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJpdmF0ZWluc3RhX2NvbSA6IHsKICAgICAgICBob3N0IDogWydwcml2YXRlaW5zdGEuY29tJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gKyBhYnAgcnVsZQogICAgICAgICAgQWFrLnV3LmRvbnRfc2Nyb2xsID0gZmFsc2U7CiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgiI292ZXJsYXlfZGl2Iik7CiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgiI292ZXJsYXlfbWFpbl9kaXYiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHJpc2lrb2dlc3VuZGhlaXRfZGUgOiB7CiAgICAgICAgaG9zdCA6IFsncmlzaWtvLWdlc3VuZGhlaXQuZGUnXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgd2luZG93LnN0b3AoKTsKICAgICAgICAgIH0sIDUwMDApOwogICAgICAgIH0KICAgICAgfSwKICAgICAgb25lcGxheWxpc3RfZXVfcG4gOiB7CiAgICAgICAgaG9zdCA6IFsnb25lcGxheWxpc3QuZXUucG4nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBraWxsIHBvcHVuZGVyCiAgICAgICAgICBBYWsudXcubWFrZVBvcHVuZGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9LAogICAgICBvbm1lZGFfZGUgOiB7CiAgICAgICAgLy8gbm90ZTogc2NyaXB0IG9iZnVzY2F0ZWQgbGluZSAxMTEwCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZm9ydW0vZGlzY3Vzc2lvbi84NTc2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwNjcKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vcWY0NmJOM3oKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vUndIeUYwTkwKICAgICAgICBob3N0IDogWydvbm1lZGEuZGUnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy4kQURQID0gdHJ1ZTsKICAgICAgICAgIEFhay51dy5zYXNfY2FsbEFkID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICBBYWsudXcuc2FzX2NhbGxBZHMgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHR1cmJvZGVicmlkZXVyX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTk5CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU2MwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy81MjYKICAgICAgICBob3N0IDogWyd0dXJib2RlYnJpZGV1ci5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICAgIHRhZyA6ICdkaXYnLAogICAgICAgICAgICBpZCA6ICdwdWJkaXJlY3RlJywKICAgICAgICAgICAgaHRtbCA6ICc8aW1nICBzcmM9IicgKyBBYWsuaW1nQmFpdCArICciLz48YSAgaHJlZj0iIyI+Jm5ic3A7PC9hPicsCiAgICAgICAgICAgIGFwcGVuZCA6ICdib2R5JwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICByb2NrZmlsZV9ldSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTI1NgogICAgICAgIGhvc3QgOiBbJ3JvY2tmaWxlLmV1J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmNyZWF0ZUVsZW1lbnQoewogICAgICAgICAgICB0YWcgOiAnaWZyYW1lJywKICAgICAgICAgICAgc3JjIDogJ2Fib3V0OmJsYW5rJywKICAgICAgICAgICAgc3R5bGUgOiAndmlzaWJpbGl0eTpoaWRkZW47JywKICAgICAgICAgICAgYXBwZW5kIDogJ2JvZHknCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpbmtidWNrc19hbnRpYWRibG9jayA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTMyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ2OQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yNzcKICAgICAgICAvLyB2MzogaHR0cDovL3Bhc3RlYmluLmNvbS8wZ2g4TE1HSAogICAgICAgIC8vIG5vdGU6IG5vIHNvbHV0aW9uLCBhbnRpLWFkYmxvY2sgZGlmZmljdWx0IHRvIGJ5cGFzcyAtLT4gaHR0cDovL3Bhc3RlYmluLmNvbS8xTlJxN1d2WgogICAgICAgIGhvc3QgOiBbJ2xpbmtidWNrcy5jb20nLCAnbWluaXVybHMuY28nLCAncGljYnVja3MuY29tJywgJ3BpY3R1cmVzZXRjLm5ldCcsICdwbGFjZXBpY3R1cmVzLmNvbScsICdwb29udG93bi5uZXQnLCAncXFjLmNvJywgJ3F2dm8uY29tJywgJ3JlYWxmaWxlcy5uZXQnLCAncnFxLmNvJywgJ3NlcmlvdXNkZWFscy5uZXQnLCAnc2VyaW91c2ZpbGVzLmNvbScsICdzZXJpb3VzdXJscy5jb20nLCAnc2V4cGFsYWNlLmdzJywgJ3RoZXNlYmxvZ3MuY29tJywgJ3RoZXNlZmlsZXMuY29tJywgJ3RoZXNlZm9ydW1zLmNvbScsICd0aG9zZWdhbGxlcmllcy5jb20nLCAndGlueWJ1Y2tzLm5ldCcsICd0aW55bGlua3MuY28nLCAndG5hYnVja3MuY29tJywgJ3R1YmV2aXJhbC5jb20nLCAndWJlcnBpY3ouY29tJywgJ3ViZXJ2aWR6LmNvbScsICd1YnVja3MubmV0JywgJ3VnYWxsZXJpZXMubmV0JywgJ3VsdHJhZmlsZXMubmV0JywgJ3VybGJlYXQubmV0JywgJ3VybHB1bHNlLm5ldCcsICd3aGFja3l2aWR6LmNvbScsICd5b3VmYXAubWUnLCAneXl2LmNvJywgJ3p4eG8ubmV0JywgJ3pmZi5jbycsICdsaW5rYnVja3NkbnMuY28nLCAnbWluaXVybHMuY29tJywgJ2R5by5ncycsICdnb25ldmlyYWwuY29tJywgJ2VhZnlmc3VoLm5ldCcsICdzYXNvbnRud2MubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIGRvIG5vdGhpbmcuLi4KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpbmtidWNrc192aXNpdHNjcmlwdCA6IHsKICAgICAgICAvLyBpc3N1ZToKICAgICAgICBob3N0IDogWydyZWZlcmVuY2VtZWdhLmNvbScsICdmcGFiZC5jb20nLCAnY3JhY2thY2MuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIFNraXAgdmlzaXRTY3JpcHQgd2hlbiBzaXRlIHVzZSBDbG91ZEZsYXJlIFJvY2tldCBTY3JpcHQKICAgICAgICAgIEFhay5zZXRDb29raWUoJ19sYkdhdGVQYXNzZWQnLCB0cnVlKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxpbmtfdGwgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bGluay50bAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2ZyL2ZvcnVtL2Rpc2N1c3Npb24vODQzNwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS8xTWtDbm1MNwogICAgICAgIGhvc3QgOiBbJ2xpbmsudGwnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCcuYWRibG9jayB7IGhlaWdodDoxcHg7IH0nKTsKICAgICAgICAgIEFhay51dy5hZGJsb2NrZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHdzdHJlYW1fdmlkZW8gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzODIKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vRWlBUlZRWHQKICAgICAgICBob3N0IDogWyd3c3RyZWFtLnZpZGVvJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTdHlsZSgnI2FkaXYgeyBoZWlnaHQ6NHB4OyB9Jyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBfNHNoYXJlZF9jb20gOiB7CiAgICAgICAgaG9zdCA6IFsnNHNoYXJlZC5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBIaWRlICJEaXNhYmxlIEFkQmxvZGsiIG1lc3NhZ2VzCiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdib2R5JykuY2xhc3NMaXN0LnJlbW92ZSgianNCbG9ja0RldGVjdCIpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHJvX2RvbWFpbnMgOiB7CiAgICAgICAgaG9zdCA6IFsncHJvLXppay53cycsICdwcm8tdGVjdC53cycsICdwcm8tZGRsLndzJywgJ3Byby1zcG9ydC53cyddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aXNpdGVkZicsIHRydWUpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgndmlzaXRlZGgnLCB0cnVlKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGNvbXB0b2lyaGFyZHdhcmVfY29tIDogewogICAgICAgIGhvc3QgOiBbJ2NvbXB0b2lyLWhhcmR3YXJlLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmFkYmxvY2sgPSAnbm9uJzsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJha2Vyc2ZpZWxkX2NvbSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNjU3CiAgICAgICAgLy8gbm90ZTogYWxzbyBzb2x1dGlvbiB0byBBYWtMaXN0CiAgICAgICAgaG9zdCA6IFsnYmFrZXJzZmllbGQuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuQURfU0xPVF9SRU5ERVJFRCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBla3N0cmFibGFkZXRfZGsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9ZWtzdHJhYmxhZGV0CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1IwMjlYcENyCiAgICAgICAgaG9zdCA6IFsnZWtzdHJhYmxhZGV0LmRrJywgJ2ViLmRrJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuQURURUNIID0ge307CiAgICAgICAgfQogICAgICB9LAogICAgICBwY2dhbWVzX2Rvd25sb2FkX25ldCA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTQ1MQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2ZvcnVtL2Rpc2N1c3Npb24vOTMyOAogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9FQlZaZzNWQgogICAgICAgIGhvc3QgOiBbJ3BjZ2FtZXMtZG93bmxvYWQubmV0J10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuc2V0Q29va2llKCdub0FkYmxvY2tOaWNlTWVzc2FnZScsIDEpOwogICAgICAgICAgQWFrLnV3Lm1nQ2FuTG9hZDMwNTQ3ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGxhY2hhaW5lbWV0ZW9fY29tIDogewogICAgICAgIC8vIG5vdGU6IGFsc28ga2lsbGVkIGJ5IEFha0xpc3QKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTkwCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI0NQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yMTUKICAgICAgICBob3N0IDogWydsYWNoYWluZW1ldGVvLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmpzX2xvYWRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICBtYWM0ZXZlcl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzk5NwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS9SUW5DRVlLNgogICAgICAgIGhvc3QgOiBbJ21hYzRldmVyLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmNvcXVpbm91ID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBfNTI3OGJic19jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9NTI3OGJicy5jb20KICAgICAgICBob3N0IDogWyc1Mjc4YmJzLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Lm15YWFicGZ1bjEyID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICB0aGVzaW1zcmVzb3VyY2VfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPXRoZXNpbXNyZXNvdXJjZS5jb20KICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vREU5cmJqeFkKICAgICAgICBob3N0IDogWyd0aGVzaW1zcmVzb3VyY2UuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuZ2Fkc2l6ZSA9IHRydWU7CiAgICAgICAgICBBYWsudXcuaUhhdmVMb2FkZWRBZHMgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeWVsbG93YnJpZGdlX2NvbSA6IHsKICAgICAgICBob3N0IDogWyd5ZWxsb3dicmlkZ2UuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuZmluYWxpemVQYWdlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2FtZV9kZWJhdGVfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMzY2CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1V6c2lYMEZLCiAgICAgICAgaG9zdCA6IFsnZ2FtZS1kZWJhdGUuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRfYmxvY2tfdGVzdCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRzY2VuZG1lZGlhIDogewogICAgICAgIGhvc3QgOiBbJ2Fkc2NlbmRtZWRpYS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gYWRzY2VuZG1lZGlhIC0gaHR0cHM6Ly93d3cuYWRzY2VuZG1lZGlhLmNvbS8KICAgICAgICAgIHZhciByZWYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykuaHJlZiA9IGRvY3VtZW50LnJlZmVycmVyOwogICAgICAgICAgdmFyIGhvc3QgPSBsb2NhdGlvbi5ob3N0OwogICAgICAgICAgdmFyIHBhdGggPSBsb2NhdGlvbi5wYXRobmFtZTsKICAgICAgICAgIGlmIChBYWsuY29udGFpbnMocGF0aCwgJy93aWRnZXRfYWRibG9jay5waHAnKSAmJiAhQWFrLmNvbnRhaW5zKHJlZi5ob3N0LCBob3N0KSkgewogICAgICAgICAgICAvLyBBdXRvIHJlcG9ydAogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0Fkc2NlbmRtZWRpYScsIHJlZi5ob3N0LCBob3N0KTsKICAgICAgICAgICAgLy8gTm90aWZpY2F0aW9uCiAgICAgICAgICAgIEFhay5ub3RpZmljYXRpb24oJ1lvdSBtdXN0IHN1YnNjcmliZSB0byA8Yj5BYWtMaXN0IChBbnRpLUFkYmxvY2sgS2lsbGVyICk8L2I+IDxhIGhyZWY9IicgKyBBYWsuc3Vic2NyaWJlVVJMICsgJyIgdGFyZ2V0PSJfYmxhbmsiPlN1YnNjcmliZTwvYT4nKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFkd29ya21lZGlhIDogewogICAgICAgIGhvc3QgOiBbJ2Fkd29ya21lZGlhLmNvbScsICdsb3h0ay5jb20nLCAnY29udGVudGxvY2tpbmduZXR3b3Jrcy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gQWRXb3JrTWVkaWEgLSBodHRwczovL3d3dy5hZHdvcmttZWRpYS5jb20vCiAgICAgICAgICB2YXIgcmVmID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpLmhyZWYgPSBkb2N1bWVudC5yZWZlcnJlcjsKICAgICAgICAgIHZhciBob3N0ID0gbG9jYXRpb24uaG9zdDsKICAgICAgICAgIHZhciBwYXRoID0gbG9jYXRpb24ucGF0aG5hbWU7CiAgICAgICAgICBpZiAoQWFrLmNvbnRhaW5zKHBhdGgsICcvaGVscC9yZW1vdmVBQi5waHAnKSAmJiAhQWFrLmNvbnRhaW5zKHJlZi5ob3N0LCBob3N0KSkgewogICAgICAgICAgICAvLyBBdXRvIHJlcG9ydAogICAgICAgICAgICBBYWsuaW5mbygnQWR3b3JrbWVkaWEnLCByZWYuaG9zdCwgaG9zdCk7CiAgICAgICAgICAgIC8vIE5vdGlmaWNhdGlvbgogICAgICAgICAgICBBYWsubm90aWZpY2F0aW9uKCdZb3UgbXVzdCBzdWJzY3JpYmUgdG8gPGI+QWFrTGlzdCAoQW50aS1BZGJsb2NrIEtpbGxlciApPC9iPiA8YSBocmVmPSInICsgQWFrLnN1YnNjcmliZVVSTCArICciIHRhcmdldD0iX2JsYW5rIj5TdWJzY3JpYmU8L2E+Jyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAvLyBQbGF5ZXJzCiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIGtpc3NhbmltZV9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ1MQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zODEKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMzAyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzI1NwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNzgKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTk2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU2CiAgICAgICAgaG9zdCA6IFsna2lzc2FuaW1lLmNvbScsICdraXNzYW5pbWUudG8nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gTWFza2luZyBhZHMKICAgICAgICAgIEFhay5hZGRTdHlsZSgnaWZyYW1lW2lkXj0iYWRzSWZybWUiXSwgLmRpdkNsb3NlQnV0IHsgZGlzcGxheTpub25lOyB9Jyk7CiAgICAgICAgICAvLyBTb2x1dGlvbiAxCiAgICAgICAgICBBYWsudXcuRG9EZXRlY3QyID0gbnVsbDsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAvLyBTb2x1dGlvbiAxIGFicCBydWxlCiAgICAgICAgICAvLyBAQHx8a2lzc2FuaW1lLmNvbV4kZWxlbWhpZGUKCiAgICAgICAgICB2YXIgZGl2Q29udGVudFZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2RpdkNvbnRlbnRWaWRlbycpOwoKICAgICAgICAgIC8vIFNvbHV0aW9uIDIKICAgICAgICAgIGlmIChBYWsudXcuRG9EZXRlY3QyKSB7CiAgICAgICAgICAgIEFhay51dy5Eb0RldGVjdDIgPSBudWxsOwogICAgICAgICAgICBBYWsudXcuQ2hlY2tBZEltYWdlID0gbnVsbDsKICAgICAgICAgICAgQWFrLmluZm8oJ1NvbHV0aW9uIDInKTsKICAgICAgICAgIH0gLy9Tb2x1dGlvbiAzCiAgICAgICAgICBlbHNlIGlmIChkaXZDb250ZW50VmlkZW8pIHsKCiAgICAgICAgICAgIHZhciBkaXZEb3dubG9hZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkaXZEb3dubG9hZCcpLmNsb25lTm9kZSh0cnVlKTsKCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGRpdkNvbnRlbnRWaWRlby5pbm5lckhUTUwgPSAnJzsKICAgICAgICAgICAgICBBYWsudXcuRG9IaWRlRmFrZSgpOwogICAgICAgICAgICAgIGRpdkNvbnRlbnRWaWRlby5hcHBlbmRDaGlsZChkaXZEb3dubG9hZCk7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJ2lmcmFtZVtpZF49ImFkc0lmcm1lIl0sIC5kaXZDbG9zZUJ1dCcpOwogICAgICAgICAgICAgIEFhay5pbmZvKCdTb2x1dGlvbiAzJyk7CiAgICAgICAgICAgIH0sIDU1MDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgS2lzc2NhcnRvb25fbWUgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ4OAogICAgICAgIGhvc3QgOiBbJ2tpc3NjYXJ0b29uLm1lJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcueGFabEUgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCdpZnJhbWVbaWRePSJhZHNJZnJtZSJdJyk7CiAgICAgICAgfQogICAgICB9LAogICAgICBvcGVubG9hZF9kb21haW5zIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPW9wZW5sb2FkCiAgICAgICAgaG9zdCA6IFsnb3BlbmxvYWQuY28nLCAnb3BlbmxvYWQuaW8nLCAnb3BlbmxvYWQudHYnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3LmFkYmxvY2sgPSBmYWxzZTsKICAgICAgICAgIEFhay51dy5hZGJsb2NrMiA9IGZhbHNlOwogICAgICAgICAgQWFrLnV3LnBvcEFkc0xvYWRlZCA9IHRydWU7CiAgICAgICAgICAvLyBoaWRlIGZha2UgcGxheSBidXR0b24gdXNlZCB0byBvcGVuIHBvcHVuZGVyCiAgICAgICAgICAvL0Fhay5hZGRTdHlsZSgnI3ZpZGVvb3ZlcmxheSB7IGRpc3BsYXk6bm9uZTsgfScpCiAgICAgICAgfQogICAgICB9LAogICAgICB5b3V3YXRjaF9vcmcgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9eW91d2F0Y2gKICAgICAgICAvLyB0ZXN0OiBodHRwOi8veW91d2F0Y2gub3JnL2VtYmVkLTU5cDdpM2Nka3NlMC00NTN4MzIwLmh0bWwKICAgICAgICAvLyB0ZXN0OiBodHRwOi8veW91d2F0Y2gub3JnLzU5cDdpM2Nka3NlMAogICAgICAgIGhvc3QgOiBbJ3lvdXdhdGNoLm9yZycsICdjaG91aGFhLmluZm8nLCAnYWh6YWhnNm9oYi5jb20nLCAnYWh6YWhnNm9oYi5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gc2tpcCBhbnRpLWFkYmxvY2sKICAgICAgICAgIEFhay51dy5hZHNTaG93UG9wdXAxID0gMTsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHJlbm92ZSBhZHMgKyBmYWtlIHBsYXkgYnV0dG9uCiAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnI3BsYXllcl9pbWosICNwbGF5ZXJfaW1qICsgZGl2W2lkXScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZXhhc2hhcmVfY29tIDogewogICAgICAgIC8vIGJ5OiBXYXRpbGluCiAgICAgICAgLy8gcHVsbDogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9wdWxsLzUxOQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWV4YXNoYXJlLmNvbQogICAgICAgIC8vIHRlc3Q6ICBodHRwOi8vZXhhc2hhcmUuY29tL2dhbHcyZ2Uya3pzdgogICAgICAgIGhvc3QgOiBbJ2V4YXNoYXJlLmNvbScsICdjaGVmdGkuaW5mbycsICdib2plbTNhLmluZm8nLCAnYWppaGV6by5pbmZvJywgJ3lhaG1haWIzYWkuY29tJywgJ3lhaG1haWIzYWkuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHNraXAgYW50aS1hZGJsb2NrCiAgICAgICAgICBBYWsudXcuYWRzU2hvd1BvcHVwMSA9IDE7CiAgICAgICAgfSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyByZW5vdmUgYWRzICsgZmFrZSBwbGF5IGJ1dHRvbgogICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNwbGF5ZXJfZ2F6LCAjcGxheWVyX2dheiArIGRpdltpZF0nKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFuMW1lX3NlIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xOTAKICAgICAgICBob3N0IDogWydhbjFtZS5zZSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBBYWsudXcuaXNCbG9ja0FkczIgPSBmYWxzZTsKICAgICAgICAgIH0sIDEwMDAwKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGhxcV90diA6IHsgLy8gcHV0bG9ja2VyLmlzCiAgICAgICAgaG9zdCA6IFsnaHFxLnR2J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gKyBhYnAgcnVsZQogICAgICAgICAgLy8gaHR0cDovL2hxcS50di9wbGF5ZXIvZW1iZWRfcGxheWVyLnBocD92aWQ9UjNER0hHM0dLWFg3JmF1dG9wbGF5PW5vCiAgICAgICAgICBpZiAoJy9wbGF5ZXIvZW1iZWRfcGxheWVyLnBocCcgPT0gbG9jYXRpb24ucGF0aG5hbWUpIHsKICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZm9ybVtpZF49ImZvcm0tIl0nKS5zdWJtaXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFBvbGFuZAogICAgICB3cF9kb21haW5zIDogewogICAgICAgIC8vIE5vdGU6IGRpc2FibGUgRWFzeVByaXZhY3kKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTU2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzkwNQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8zMDAKICAgICAgICBob3N0IDogWydiaXp0b2sucGwnLCAnd3AudHYnLCAnd3AucGwnLCAnc3BvcnRvd2VmYWt0eS5wbCcsICdrYWZldGVyaWEudHYnLCAna2FmZXRlcmlhLnBsJywgJy53cnp1dGEucGwnLCAncHVkZWxlay50dicsICdrb21lZGlvd28ucGwnLCAnc2ZvcmEucGwnLCAnYXV0b2tyYXRhLnBsJywgJ3Nwb3J0ZmFuLnBsJywgJ3dhd2Fsb3ZlLnBsJywgJ2hvdG1vbmV5LnBsJywgJ2FsZXNlcmlhbGUucGwnLCAnYmFib2wucGwnLCAnc25vYmthLnBsJywgJ25vY290eS5wbCcsICdtb25leS5wbCcsICdhYmN6ZHJvd2llLnBsJywgJ2dhZHpldG9tYW5pYS5wbCcsICdhdXRva3VsdC5wbCcsICdrb21vcmtvbWFuaWEucGwnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8gcHJldmVudCBwb3B1cCBhbnRpLWFkYmxvY2sgZnJvbSBhYmN6ZHJvd2llLnBsCiAgICAgICAgICBBYWsuc2V0Q29va2llKCdBQkNBQkMnLCB0cnVlKTsKICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIAogICAgICAgICAgQWFrLmhhc0VsZW1lbnQoJy53cC1wbGF5ZXInLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAKICAgICAgICAgICAgdmFyIHJlcGxhY2VQbGF5ZXJXUCA9IGZ1bmN0aW9uIChtaWQsIHBsYXllcikgewogICAgICAgICAgICAgIC8qIFJlcXVlc3QKICAgICAgICAgICAgICBodHRwOi8vZ2V0LndwLnR2Lz9taWQ9MTY2MTA1NgogICAgICAgICAgICAgIGh0dHA6Ly93cC50di9wbGF5ZXIvbWlkLDE2NjEwNTYsZW1iZWQuanNvbgogICAgICAgICAgICAgIGh0dHA6Ly9nZXQud3AudHYvP2Y9Mjg5NjQ2Mi4xNDI2MzI5MDU2OTA0Lmwud2VibSZybmQ9MQogICAgICAgICAgICAgIGh0dHBzOi8vd3AudHYvcGxheWVyL21pZCwxNzQ3MTE3LGVtYmVkLmpzb24KICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICBBYWsucmVxdWVzdCh7CiAgICAgICAgICAgICAgICB1cmwgOiAnaHR0cDovL3dwLnR2L3BsYXllci9taWQsJyArIG1pZCArICcsZW1iZWQuanNvbicsCiAgICAgICAgICAgICAgICBvbmxvYWQgOiBmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgIHZhciByZXMgPSByZXN1bHQucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgICB2YXIgb2JqID0gSlNPTi5wYXJzZShyZXMpOwogICAgICAgICAgICAgICAgICBBYWsubG9nKG9iaik7CgogICAgICAgICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgICAgICAgUGxheWVyLnZpZGVvanMocGxheWVyLCB7CiAgICAgICAgICAgICAgICAgICAgc291cmNlIDogQWFrLmZpeFByb3RvY29sVVJMKG9iai5jbGlwLnVybFsxXS51cmwpLCAvLyBIRAogICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICAgICAgICBhdXRvcGxheSA6IGZhbHNlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgdmFyIHJlcGxhY2VQbGF5ZXJXcnp1dGEgPSBmdW5jdGlvbiAoa2V5LCBjaGFubmVsLCBlbGVtKSB7CiAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICAgICAgLy8gaHR0cDovL3d3dy53cnp1dGEucGwvbnBwL2VtYmVkL3dvbG5hcG9sc2thMi8wSTBIUTJtdXRKYwogICAgICAgICAgICAgICAgdXJsIDogJ2h0dHA6Ly93d3cud3J6dXRhLnBsL25wcC9lbWJlZC8nICsgY2hhbm5lbCArICcvJyArIGtleSwKICAgICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3VsdC5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBKU09OLnBhcnNlKHJlcyk7CiAgICAgICAgICAgICAgICAgIEFhay5sb2cob2JqKTsKCiAgICAgICAgICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgICAgICAgICBQbGF5ZXIudmlkZW9qcyhlbGVtLCB7CiAgICAgICAgICAgICAgICAgICAgc291cmNlIDogQWFrLmZpeFByb3RvY29sVVJMKG9iai51cmxbMF0udXJsKSwgLy9IRAogICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICAgICAgICBhdXRvcGxheSA6IGZhbHNlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLy8gVXNpbmcgYW4gZXh0ZXJuYWwgZmxhc2ggcGxheWVyIGlzIGltcG9zc2libGUgYmVjYXVzZSBwcm90ZWN0ZWQgYnkgY3Jvc3Nkb21haW4ueG1sCiAgICAgICAgICAgIHZhciBwbGF5ZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLndwLXBsYXllcicpOyAvLyAgI1BsYXllcjAsICNQbGF5ZXIxLCAjbWFpblBsYXllcgogICAgICAgICAgICBpZiAocGxheWVycy5sZW5ndGgpIHsKICAgICAgICAgICAgICAvLyBmaXhidWcgZ21feGhyIGxvb3AgcmVxdWVzdCAtIGh0dHA6Ly90aW55dXJsLmNvbS9wcWE5aHRxCiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGF5ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICB2YXIgbWlkID0gbnVsbDsKICAgICAgICAgICAgICAgIHZhciBwbGF5ZXIgPSBwbGF5ZXJzW2ldOwogICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHBsYXllci5wYXJlbnROb2RlOwogICAgICAgICAgICAgICAgdmFyIHNjcmlwdCA9IHBsYXllci5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBwbGF5ZXIucXVlcnlTZWxlY3RvcignLnRpdGxlQ29udCBhLnRpdGxlJyk7CiAgICAgICAgICAgICAgICB2YXIgZW1iZWR2aWRlb3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbc3JjKj0iL2VtYmVkX3ZpZGVvLmpzIl0nKTsKICAgICAgICAgICAgICAgIEFhay5sb2cocGxheWVyLCBwYXJlbnQsIHNjcmlwdCwgdGl0bGUpOwoKICAgICAgICAgICAgICAgIGlmIChlbWJlZHZpZGVvcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgLy8gcHVkZWxlay53cnp1dGEucGw6IGh0dHA6Ly90aW55dXJsLmNvbS9sOGpvNXYyCiAgICAgICAgICAgICAgICAgIC8vIHB1ZGVsZWsudHY6IGh0dHA6Ly90aW55dXJsLmNvbS9rbHl6aDZyLCBodHRwOi8vdGlueXVybC5jb20vejdmcjg5dgogICAgICAgICAgICAgICAgICAvLyBwdWRlbGVrLnR2ICh0cmlwbGUpOiBodHRwOi8vdGlueXVybC5jb20vbjliMjdvMgogICAgICAgICAgICAgICAgICAvLyBmaWxtLndwLnBsOiBodHRwOi8vdGlueXVybC5jb20vcTdrNWJ4cAogICAgICAgICAgICAgICAgICB2YXIgZW1iZWR2aWRlbyA9IGVtYmVkdmlkZW9zW2ldOwogICAgICAgICAgICAgICAgICB2YXIga2V5ID0gL2tleT0oXHcrKS8uZXhlYyhlbWJlZHZpZGVvLnNyYylbMV07CiAgICAgICAgICAgICAgICAgIHZhciBjaGFubmVsID0gL2xvZ2luPShcdyspLy5leGVjKGVtYmVkdmlkZW8uc3JjKVsxXTsKICAgICAgICAgICAgICAgICAgdmFyIGF1dG9zdGFydCA9IC9hdXRvcGxheS8udGVzdChlbWJlZHZpZGVvLnNyYyk7CiAgICAgICAgICAgICAgICAgIHJlcGxhY2VQbGF5ZXJXcnp1dGEoa2V5LCBjaGFubmVsLCBwbGF5ZXIsIGF1dG9zdGFydCk7CiAgICAgICAgICAgICAgICAgIEFhay5sb2coJ2VtYmVkX3ZpZGVvLmpzJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRpdGxlICYmIC9taWQvLnRlc3QodGl0bGUuaHJlZikpIHsKICAgICAgICAgICAgICAgICAgLy8gc3BvcnRvd2VmYWt0eS5wbDogaHR0cDovL3Rpbnl1cmwuY29tL2w2emFiY3gKICAgICAgICAgICAgICAgICAgbWlkID0gdGl0bGUuaHJlZi5tYXRjaCgvbWlkWz0sXShbMC05XSspLyk7CiAgICAgICAgICAgICAgICAgIEFhay5sb2coJ3RpdGxlLmhyZWYnKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50LmlkKSB7CiAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQuZGF0YXNldC51cmwpIHsKICAgICAgICAgICAgICAgICAgICAvLyB3cC50djogaHR0cDovL3Rpbnl1cmwuY29tL3B6ZGUyOXQKICAgICAgICAgICAgICAgICAgICBtaWQgPSBwYXJlbnQuZGF0YXNldC51cmwubWF0Y2goL21pZFs9LF0oWzAtOV0rKS8pOwogICAgICAgICAgICAgICAgICAgIEFhay5sb2coJ3BhcmVudC5kYXRhc2V0LnVybCcpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQucHJldmlvdXNTaWJsaW5nLmlubmVySFRNTCkgewogICAgICAgICAgICAgICAgICAgICAgLy8gd2lhZG9tb3NjaS53cC5wbDogaHR0cDovL3Rpbnl1cmwuY29tL2dxdHQ5Y2EKICAgICAgICAgICAgICAgICAgICAgIG1pZCA9IHBhcmVudC5wcmV2aW91c1NpYmxpbmcuaW5uZXJIVE1MLm1hdGNoKC9taWRbPSxdKFswLTldKykvKTsKICAgICAgICAgICAgICAgICAgICAgIEFhay5sb2coJ3NjcmlwdC5pbmxpbmUuaW5uZXJIVE1MJyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIGthZmV0ZXJpYS50djogaHR0cDovL3Rpbnl1cmwuY29tL25vZnA1OGEKICAgICAgICAgICAgICAgICAgICAgIC8vIGFiY3pkcm93aWUucGw6IGh0dHA6Ly90aW55dXJsLmNvbS9oeDZzNWV0CiAgICAgICAgICAgICAgICAgICAgICBtaWQgPSBwYXJlbnQuaW5uZXJIVE1MLm1hdGNoKC9taWRbPSxdKFswLTldKykvKTsKICAgICAgICAgICAgICAgICAgICAgIEFhay5sb2coJ3BhcmVudC5pbm5lckhUTUwnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0ICYmIHNjcmlwdC50YWdOYW1lID09ICdTQ1JJUFQnKSB7CiAgICAgICAgICAgICAgICAgIC8vIGZpbG0ud3AucGw6IGh0dHA6Ly90aW55dXJsLmNvbS9taDlvbmZ3CiAgICAgICAgICAgICAgICAgIC8vIHB1ZGVsZWsudHYgKGRvdWJsZSk6IGh0dHA6Ly90aW55dXJsLmNvbS9sZWZ2d3R4CiAgICAgICAgICAgICAgICAgIG1pZCA9IHNjcmlwdC5pbm5lckhUTUwubWF0Y2goL21pZFs9LF0oWzAtOV0rKS8pOwogICAgICAgICAgICAgICAgICBBYWsubG9nKCdzY3JpcHQuc3JjLmlubmVySFRNTCcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKG1pZCAhPT0gbnVsbCAmJiBtaWQubGVuZ3RoID09IDIpIHsKICAgICAgICAgICAgICAgICAgcmVwbGFjZVBsYXllcldQKG1pZFsxXSwgcGxheWVyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgbW9qZV9maWxteV9uZXR3b3JrOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwMTAKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vN0cyUkJucXEKICAgICAgICBob3N0IDogWydtb2plLWZpbG15LnRrJywgJ21vamUtZmlsbXkubGl2ZSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBzZWFyY2h2YWx1ZSA9IFsndmFyIHBsYXllckluc3RhbmNlJywgJ30pOyddOwogICAgICAgICAgdmFyIHNjcmlwdCA9IEFhay5oYXNTY3JpcHQoc2VhcmNodmFsdWVbMF0pOwoKICAgICAgICAgIGlmIChzY3JpcHQpIHsKICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHNjcmlwdC5pbm5lckhUTUw7CiAgICAgICAgICAgIHZhciBzdHIgPSBzb3VyY2Uuc3Vic3RyaW5nKHNvdXJjZS5sYXN0SW5kZXhPZihzZWFyY2h2YWx1ZVswXSksIHNvdXJjZS5sYXN0SW5kZXhPZihzZWFyY2h2YWx1ZVsxXSkgKyBzZWFyY2h2YWx1ZVsxXS5sZW5ndGgpOwogICAgICAgICAgICBBYWsuYWRkU2NyaXB0KHN0cik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB0dm5fcGwgOiB7CiAgICAgICAgLy8gYnk6IFJlZWssIE1hcmVrCiAgICAgICAgLy8gc29sdXRpb246IGh0dHA6Ly90aW55dXJsLmNvbS9vaGJ2ejRyLCBodHRwOi8vdGlueXVybC5jb20vanE4czQ2MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPXR2bi5wbAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPXR2bjI0LnBsCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9cGxheWVyLnBsCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL282ZDloNjYsIGh0dHA6Ly90aW55dXJsLmNvbS96NzdtNHpoCiAgICAgICAgaG9zdCA6IFsndHZuLnBsJywgJ3R2bjI0LnBsJywgJ3BsYXllci5wbCddLAogICAgICAgIG9uRW5kIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmhhc0VsZW1lbnQoJ2hlYWRlci5kZXRhaWxJbWFnZScsIGZ1bmN0aW9uICh0aGlzRWxlbWVudCkgewogICAgICAgICAgICBpZiAoQWFrLmdldENvb2tpZSgnY291bnRyeV9jb2RlJykgJiYgQWFrLmdldFNlc3Npb24oJ2dlbmVyYXRlVG9rZW4nKSkgewogICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZi5zcGxpdCgvWy4sXS8pOwogICAgICAgICAgICAgICAgdmFyIGlkID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl07CiAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gewogICAgICAgICAgICAgICAgICBwbGF0Zm9ybSA6ICJNb2JpbGUiLAogICAgICAgICAgICAgICAgICB0ZXJtaW5hbCA6ICJBbmRyb2lkIiwKICAgICAgICAgICAgICAgICAgZm9ybWF0IDogImpzb24iLAogICAgICAgICAgICAgICAgICB2IDogIjIuMCIsCiAgICAgICAgICAgICAgICAgIGF1dGhLZXkgOiAiYjRiYzk3MTg0MGRlNjNkMTA1YjMxNjY0MDNhYTFiZWEiLAogICAgICAgICAgICAgICAgICB0eXBlIDogImVwaXNvZGUiLAogICAgICAgICAgICAgICAgICBpZCA6IGlkLAogICAgICAgICAgICAgICAgICBzb3J0IDogIm5ld2VzdCIsCiAgICAgICAgICAgICAgICAgIG0gOiAiZ2V0SXRlbSIsCiAgICAgICAgICAgICAgICAgIGRldmljZVNjcmVlbkhlaWdodCA6IDE2MDAsCiAgICAgICAgICAgICAgICAgIGRldmljZVNjcmVlbldpZHRoIDogMjU2MAogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9hcGkudHZucGxheWVyLnBsL2FwaS8/JyArIEFhay5zZXJpYWxpemUocGFyYW1zKTsKICAgICAgICAgICAgICAgIHZhciBwcm94eSA9ICdodHRwOi8vd3d3LnByb3h5LnhtYy5wbC9pbmRleC5waHA/aGw9M2U1JnE9JzsJCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIEdldCB2aWRlb1VybAogICAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICAgICAgICB1cmwgOiBBYWsuZ2V0Q29va2llKCdjb3VudHJ5X2NvZGUnKSAhPSAnUEwnID8gcHJveHkgKyBBYWsuZW5jb2RlVVJJKGFwaSkgOiBhcGksCiAgICAgICAgICAgICAgICAgIGhlYWRlcnMgOiB7CiAgICAgICAgICAgICAgICAgICAgIlVzZXItQWdlbnQiIDogIk1vemlsbGEvNS4wIChMaW51eDsgVTsgQW5kcm9pZCA0LjI7IGVuLXVzOyBOZXh1cyAxMCBCdWlsZC9KVlAxNUkpIEFwcGxlV2ViS2l0LzUzNC4zMCAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNC4wIFNhZmFyaS81MzQuMzAiCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcmVzdWx0LnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgICBBYWsubG9nKHJlcyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSBKU09OLnBhcnNlKHJlcyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvVXJsID0gby5pdGVtLnZpZGVvcy5tYWluLnZpZGVvX2NvbnRlbnRbTnVtYmVyKEFhay5vcHRzLnZpZGVvSEQpXS51cmw7CiAgICAgICAgICAgICAgICAgICAgdmFyIGdlbmVyYXRlVG9rZW4gPSBuZXcgRnVuY3Rpb24oJ3ZpZGVvVXJsJywgQWFrLmdldFNlc3Npb24oJ2dlbmVyYXRlVG9rZW4nKSk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvVXJsV2l0aFNlZWQgPSBnZW5lcmF0ZVRva2VuKHZpZGVvVXJsKTsKICAgICAgICAgICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgICAgICAgICBQbGF5ZXIudmlkZW9qcyh0aGlzRWxlbWVudCwgewogICAgICAgICAgICAgICAgICAgICAgc291cmNlIDogdmlkZW9VcmxXaXRoU2VlZCwKICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5OiBmYWxzZQogICAgICAgICAgICAgICAgICAgIH0sIHt9LCB7aW5zZXJ0Oidpbm5lcid9KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoeyAvLyBnZXQgYW5kIHN0b3JlIGdlbmVyYXRlVG9rZW4gZnVuY3Rpb24KICAgICAgICAgICAgICAgIHVybCA6ICdodHRwOi8vcGFzdGViaW4uY29tL3Jhdy9EOXFNNERSMycsCiAgICAgICAgICAgICAgICBvbmxvYWQgOiBmdW5jdGlvbiAocmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgQWFrLnNldFNlc3Npb24oJ2dlbmVyYXRlVG9rZW4nLCByZXMpOwogICAgICAgICAgICAgICAgICBBYWsucmVxdWVzdCh7IC8vIGdldCB1c2VyIGlwCiAgICAgICAgICAgICAgICAgICAgdXJsIDogJ2h0dHA6Ly9pcC1hcGkuY29tL2pzb24nLAogICAgICAgICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3BvbnNlLnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXMpOwogICAgICAgICAgICAgICAgICAgICAgQWFrLnNldENvb2tpZSgnY291bnRyeV9jb2RlJywganNvbi5jb3VudHJ5Q29kZSk7CiAgICAgICAgICAgICAgICAgICAgICBBYWsucmVmcmVzaCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgaXBsYV90diA6IHsKICAgICAgICAvLyBieTogTWFyZWsKICAgICAgICAvLyBzb2x1dGlvbjogaHR0cDovL3Rpbnl1cmwuY29tL3B0YjR5YmcKICAgICAgICAvLyBpc3N1ZS4gaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTIyCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL2h6N2dweHgKICAgICAgICBob3N0IDogWydpcGxhLnR2J10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCcuaHRtbDUtcGxheWVyLXdyYXBwZXIgeyBkaXNwbGF5Om5vbmU7IH0nKTsgLy8gY2hyb21lL29wZXJhCiAgICAgICAgICB2YXIgb2xkUGxheWVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmh0bWw1LXBsYXllci13cmFwcGVyLCAjdm9kLXBsYXllcicpOwogICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICB1cmwgOiAnL1ZPRC9wbGF5LWluLWlwbGEvJyArIGxvY2F0aW9uLmhyZWYubWF0Y2goL1wvdm9kLShcZCspLylbMV0sCiAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICB2YXIgdmlkZW9VUkw7CiAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3VsdC5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgdmFyIGlkbiA9IHJlcy5tYXRjaCgvaXBsYTpcL1wvcGxheXZvZC0xXHwoW2EtejAtOV0rKS8pWzFdOwogICAgICAgICAgICAgIEFhay5sb2coaWRuKTsKICAgICAgICAgICAgICBBYWsucmVxdWVzdCh7CiAgICAgICAgICAgICAgICB1cmwgOiAnaHR0cDovL2dldG1lZGlhLnJlZGVmaW5lLnBsL3ZvZHMvZ2V0X3ZvZC8/Y3BpZD0xJnVhPW1pcGxhLzIzJm1lZGlhX2lkPScgKyBpZG4sCiAgICAgICAgICAgICAgICBvbmxvYWQgOiBmdW5jdGlvbiAocmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgIHZhciByZXMgPSByZXN1bHQucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgICB2YXIgbyA9IEpTT04ucGFyc2UocmVzKTsKICAgICAgICAgICAgICAgICAgQWFrLmxvZyhvKTsKICAgICAgICAgICAgICAgICAgaWYgKG8udm9kLnZpZGVvX2hkKSB7CiAgICAgICAgICAgICAgICAgICAgdmlkZW9VUkwgPSBvLnZvZC52aWRlb19oZDsKICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvLnZvZC52aWRlbykgewogICAgICAgICAgICAgICAgICAgIHZpZGVvVVJMID0gby52b2QudmlkZW87CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdmlkZW9VUkwgPSBvLnZvZC5jb3BpZXNbMF0udXJsOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgICAgICAgUGxheWVyLnZpZGVvanMob2xkUGxheWVyLCB7CiAgICAgICAgICAgICAgICAgICAgc291cmNlIDogdmlkZW9VUkwsCiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICdtcDQnLAogICAgICAgICAgICAgICAgICAgIHdpZHRoIDogODIwLAogICAgICAgICAgICAgICAgICAgIGhlaWdodCA6IDQ1MCwKICAgICAgICAgICAgICAgICAgICBhdXRvcGxheSA6IGZhbHNlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGtvc2NpYW5fbmV0IDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy85MTQKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20veUdTUEJScWUKICAgICAgICBob3N0IDogWydrb3NjaWFuLm5ldCddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBlbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYW4nKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgZWxlbXNbaV0ucmVtb3ZlKCk7CiAgICAgICAgICAgIC8vZWxlbXNbaV0uaW5uZXJIVE1MID0gJzxicj4nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gRnJhbmNlCiAgICAgIHBsYXl0dl9mciA6IHsgLy8gcmVzZWFyY2ggc29sdXRpb24KICAgICAgICBob3N0IDogWydwbGF5LnR2JywgJ3BsYXl0di5mciddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkge30sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7fQogICAgICB9LAogICAgICBybWNzcG9ydGJmbXR2X2NvbSA6IHsgLy8gd2VicmFkaW8KICAgICAgICBob3N0IDogWydybWNzcG9ydC5iZm10di5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CgogICAgICAgICAgdmFyIGZsYXNodmFycyA9IHsKICAgICAgICAgICAgdXJsUmFkaW8gOiAiaHR0cDovL21wM2xnNC50ZGYtY2RuLmNvbS8xMDE2MC9ybWMubXAzIiwKICAgICAgICAgICAgbm9tIDogImxpdmUiLAogICAgICAgICAgICBjYXRlZ29yaWUgOiAibGl2ZSIsCiAgICAgICAgICAgIHVybFNtYXJ0IDogIiIgLy8gc2V0IGVtcHR5IHRvIHJlbW92ZSBhdWRpbyBhZAogICAgICAgICAgfTsKICAgICAgICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgICAgIHdtb2RlIDogInRyYW5zcGFyZW50IgogICAgICAgICAgfTsKCiAgICAgICAgICBBYWsudXcuc3dmb2JqZWN0LmVtYmVkU1dGKCIvc3dmL1JNQ0xJVkUuc3dmIiwgImxpdmVwbGF5ZXIiLCAiNzAiLCAiOTAiLCAiMTAuMC4wIiwgIiIsIGZsYXNodmFycywgcGFyYW1zKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGVjbHlwc2lhX2NvbSA6IHsKICAgICAgICBob3N0IDogWydlY2x5cHNpYS5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIFNvbHV0aW9uIDEKICAgICAgICAgIC8vIGFicCBydWxlcwoKICAgICAgICAgIC8vIFNvbHV0aW9uIDIKICAgICAgICAgIEFhay51dy5pc0FCQWN0aXZhdGVkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9OyAvLyBLaWxsIGFudGlhZGJsb2NrCiAgICAgICAgICBBYWsudXcucmVmcmVzaF9pZnJhbWUgPSBmdW5jdGlvbiAoKSB7fTsgLy8gU3RvcCBhZHMgdG8gYmUgbG9hZGVkCiAgICAgICAgfSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIFNvbHV0aW9uIDMKICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignZGl2W2lkXj0id2VidHZfaWZyYW1lXyJdJyk7CiAgICAgICAgICBpZiAoZWxlbWVudCAhPT0gbnVsbCkgewogICAgICAgICAgICB2YXIgdmlkZW9JZCA9IGVsZW1lbnQuaWQuc3BsaXQoJ18nKVsyXTsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPGlmcmFtZSBmcmFtZWJvcmRlcj0iMCIgd2lkdGg9IjgxMiIgaGVpZ2h0PSI1MDAiIHNyYz0iaHR0cDovL3d3dy5kYWlseW1vdGlvbi5jb20vZW1iZWQvdmlkZW8vJyArIHZpZGVvSWQgKyAnP2xvZ289MCZhdXRvUGxheT0xJmF1dG9NdXRlPTAiPjwvaWZyYW1lPic7CiAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgbTZ3ZWJfZnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzQ2MQogICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly90aW55dXJsLmNvbS9wdG4ydnJsCiAgICAgICAgaG9zdCA6IFsnbTZ3ZWIuZnInXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBwbGF5ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdvYmplY3RbaWQkPSJfZmxhc2hfYXBpIl0nKTsKICAgICAgICAgIHZhciBzY3JpcHQgPSBBYWsuaGFzU2NyaXB0KCdNNi5QbGF5ZXIuY29uZmlnJyk7CgogICAgICAgICAgaWYgKHBsYXllciAhPT0gbnVsbCAmJiBzY3JpcHQgIT09IG51bGwpIHsKICAgICAgICAgICAgdmFyIGZvdW5kID0gc2NyaXB0LmlubmVySFRNTC5tYXRjaCgvTTYuUGxheWVyLmNvbmZpZyA9IChcey4rXH0pOy8pOwogICAgICAgICAgICB2YXIgY29uZmlnID0gSlNPTi5wYXJzZShmb3VuZC5wb3AoKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBSZXBsYWNlIHBsYXllcgogICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgUGxheWVyLnZpZGVvanMocGxheWVyLnBhcmVudE5vZGUsIHsKICAgICAgICAgICAgICBzb3VyY2UgOiBjb25maWcuc291cmNlc1sxXS5zcmMsCiAgICAgICAgICAgICAgdHlwZSA6ICdtcDQnLAogICAgICAgICAgICAgIGF1dG9wbGF5IDogZmFsc2UKICAgICAgICAgICAgfSk7CgogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgZ2FtaW5ncm9vbV90diA6IHsKICAgICAgICBob3N0IDogWydnYW1pbmdyb29tLnR2J10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRibG9ja19kZXRlY3QgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5HUl9hZGJsb2NrX2hpZGVfdmlkZW8gPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5hZGJsb2NrX3ZpZGVvX21zZ19zdGFydCA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgICAgQWFrLnV3LmFkYmxvY2tfdmlkZW9fbXNnX3N0b3AgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICAgIEFhay51dy5kaXNhYmxlX2NoYXQgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEdlcm1hbnkKICAgICAgbm93X2RvbWFpbnMgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzMzNgogICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly90aW55dXJsLmNvbS9wZWVvYm91CiAgICAgICAgLy8gdGVzdDogaHR0cDovL2pzYmluLmNvbS92dWNvYmVqb2ZvCiAgICAgICAgaG9zdCA6IFsndm94bm93LmRlJywgJ3J0bC1ub3cucnRsLmRlJywgJ3J0bDJub3cucnRsMi5kZScsICduLXR2bm93LmRlJywgJ3N1cGVycnRsbm93LmRlJywgJ3J0bG5pdHJvbm93LmRlJywgJ25vd3R2LmRlJ10sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLyoKICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgUGxheWVyLmVkaXRpbmcoJyN2aWRlb3BsYXllcicsIHsKICAgICAgICAgIHVuc2V0Rmxhc2h2YXJzIDogJ2FiY2hlY2tfZW5hYmxlZCxhZGNhbGwsYWRjbGFzc2VzLGFkY29uZmlnLGFkbWV0YSxhZHNsb2csYWdvZixhbWEsYW5nZWJvdCxhcyxhc3BhcnRzLGJyZWFrYWQsY29ubmVjdGlvbmNoZWNrLGNzbG9nLGRldixkaW1tZXIsZXJyb3Jsb2csZmVlZGJhY2ssZm1zaWRlbnQsZ3R2LGhpZ2hsaWdodHMsaXZ3LGl2d19wbGF5LGpzLGpzX2V2ZW50X2Z1bmN0aW9uLGxvZ28sbG9nb19iYXNld2lkdGgsbG9nb3BvcyxuaWVsc2VuLG9yZCxvc21mLHN2bSx0aWxlLHZpZGVvcGxhemEsdmlkZW9wbGF6YV9iYXNlX3VybCx2aWRlb3BsYXphX3NoYXJlLHZpZGVvcGxhemFfdGFnLHZwRW52aXJvbm1lbnRVUkwseGwnCiAgICAgICAgICB9KTsKICAgICAgICAgICAqLwogICAgICAgIH0KICAgICAgfSwKICAgICAgcnRsX2RlIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNTQxCiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL2g3Y2N2cXEKICAgICAgICBob3N0IDogWydydGwuZGUnXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkaXZbZGF0YS13aWRnZXQ9InZpZGVvIl0nKSkubWFwKGZ1bmN0aW9uICh2aWRlbykgewogICAgICAgICAgICB2YXIgY2ZnID0gQWFrLmludG9PYmplY3QodmlkZW8uZGF0YXNldC5wbGF5ZXJMYXllckNmZyk7CiAgICAgICAgICAgIHZhciBmaWxlID0gY2ZnLnZpZGVvaW5mby5tcDR1cmw7CiAgICAgICAgICAgIEFhay5sb2codmlkZW8sIGNmZywgZmlsZSk7CgogICAgICAgICAgICAvLyBSZXBsYWNlIHBsYXllcgogICAgICAgICAgICB2YXIgUGxheWVyID0gbmV3IEFhay5wbGF5ZXIoKTsKICAgICAgICAgICAgUGxheWVyLnZpZGVvanModmlkZW8sIHsKICAgICAgICAgICAgICBzb3VyY2UgOiBmaWxlLAogICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICBhdXRvcGxheSA6IGZhbHNlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBteXNwYXNzX2RlIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy83NgogICAgICAgIC8vIHRlc3Q6IGh0dHA6Ly90aW55dXJsLmNvbS9sdG85cHlkCiAgICAgICAgaG9zdCA6IFsnbXlzcGFzcy5kZSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciB2aWRlb2lkID0gbG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL1wvKFxkKylcLyQvKTsKCiAgICAgICAgICBpZiAodmlkZW9pZCAhPT0gbnVsbCkgewogICAgICAgICAgICBBYWsucmVxdWVzdCh7CiAgICAgICAgICAgICAgdXJsIDogJ2h0dHA6Ly93d3cubXlzcGFzcy5kZS9teXNwYXNzL2luY2x1ZGVzL2FwcHMvdmlkZW8vZ2V0dmlkZW9tZXRhZGF0YXhtbC5waHA/aWQ9JyArIHZpZGVvaWRbMV0sCiAgICAgICAgICAgICAgb25sb2FkIDogZnVuY3Rpb24gKHJlc3VsdCkgewogICAgICAgICAgICAgICAgdmFyIHJlcyA9IHJlc3VsdC5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgICBBYWsubG9nKHJlcyk7CgogICAgICAgICAgICAgICAgLy8gR2V0IHZpZGVvCiAgICAgICAgICAgICAgICB2YXIgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTsKICAgICAgICAgICAgICAgIHZhciBkb20gPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHJlcywgImFwcGxpY2F0aW9uL3htbCIpOwogICAgICAgICAgICAgICAgdmFyIGZpbGUgPSBkb20uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInVybF9mbHYiKS5pdGVtKDApLnRleHRDb250ZW50OwoKICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBlbGVtZW50cwogICAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJ2Rpdi5sb2FkaW5nR2lmJyk7CgogICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBwbGF5ZXIKICAgICAgICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgICAgICAgUGxheWVyLnZpZGVvanMoJyNwbGF5ZXInLCB7CiAgICAgICAgICAgICAgICAgIHNvdXJjZSA6IGZpbGUsCiAgICAgICAgICAgICAgICAgIHR5cGUgOiAnbXA0JywKICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgOiBmYWxzZQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBOZWRlcmxhbmQKICAgICAgcnRseGxfbmwgOiB7CiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL2wyemt2M2QKICAgICAgICBob3N0IDogWydydGx4bC5ubCcsICdydGxuaWV1d3MubmwnXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgUGxheWVyLmVkaXRpbmcoJyNfcnRsb3NtZjAnLCB7CiAgICAgICAgICAgIHNldEZsYXNodmFycyA6IHsKICAgICAgICAgICAgICBhZGJsb2NrIDogZmFsc2UKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBOb3J3YXkKICAgICAgdmd0dl9uZXR3b3JrIDogewogICAgICAgIC8vIG5vdGU6IHNraXAgdmlkZW8gYWRzICsgYW50aS1hZGJsb2NrCiAgICAgICAgLy8gandwbGF5ZXI6IGh0dHA6Ly90aW55dXJsLmNvbS96eXY3OWhnCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE0MDIKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMzY3CiAgICAgICAgLy8gdGVzdDogaHR0cDovL3Rpbnl1cmwuY29tL253cDg1dCwgaHR0cDovL3Rpbnl1cmwuY29tL253cDg1dAogICAgICAgIGhvc3QgOiBbJ3ZndHYubm8nLCAndmcubm8nXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBvbGRIYXNoID0gbnVsbDsKICAgICAgICAgIHZhciB2aWRlb0lkID0gbnVsbDsKICAgICAgICAgIHZhciB2aWRlb0lkUmVnZXggPSAvI1whXC92aWRlb1wvKFxkKylcLy87CgogICAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGxvY2F0aW9uIGhhc2ggY2hhbmdlcwogICAgICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgcGxheWVyID0gQWFrLmdldEVsZW1lbnQoJy52aWRlby1wbGF5ZXInKTsKCiAgICAgICAgICAgIGlmIChwbGF5ZXIgJiYgbG9jYXRpb24uaGFzaCAhPSBvbGRIYXNoICYmIHZpZGVvSWRSZWdleC50ZXN0KGxvY2F0aW9uLmhhc2gpKSB7CiAgICAgICAgICAgICAgb2xkSGFzaCA9IGxvY2F0aW9uLmhhc2g7CiAgICAgICAgICAgICAgdmlkZW9JZCA9IG9sZEhhc2gubWF0Y2godmlkZW9JZFJlZ2V4KVsxXTsKLyoKICAgICAgICAgICAgICB2YXIgaGxzdXJsID0gJ2h0dHBzOi8vc3Zwc2VjdXJlaGR2b2QtdmguYWthbWFpaGQubmV0L2kvMjAxNi8wMy8yMDE2MDMxMl81NmU0MjFmODZhZjQ1X3ZnMDEvLDEyODBfNzIwXzM1MDAsOTYwXzU0MF8xNTAwLDY0MF8zNjBfODAwLDQ4MF8yNzBfNTAwLC5tcDQuY3NtaWwvbWFzdGVyLm0zdTgnOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBsYXllcikKCiAgICAgICAgICAgICAgLy8gZG9uJ3Qgd29yayB3aXRoIGNocm9tZQogICAgICAgICAgICAgIC8vIHBsYXllci5pbm5lckhUTUwgPSAnPGRpdiBpZD0ibm9BZFBsYXllciI+VGhpcyB0ZXh0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHBsYXllci48L2Rpdj4nOwoKCiAgICAgICAgICAgICAgLy8gY2FuJ3QgbG9hZCBtM3U4IDQwMzIgc3RhdHVzIGNvZGUKICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHVuc2FmZVdpbmRvdy5qd3BsYXllcikKCiAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICAgICAgdXJsIDogJ2h0dHA6Ly9zdnAudmcubm8vc3ZwL2FwaS92MS92Z3R2L2Fzc2V0cy8nICsgdmlkZW9JZCArICc/YWRkaXRpb25hbD1zZXR0aW5nc3xjaGFwdGVyc3xjdWVQb2ludHN8ZXh0ZXJuYWxJZHxiYXJyZWxzfGV4dGVybmFsQ2F0ZWdvcnlJZHxuZXh0QXNzZXQmYXBwTmFtZT12Z3R2LXdlYnNpdGUnLAogICAgICAgICAgICAgICAgb25sb2FkIDogZnVuY3Rpb24gKHJlc3VsdCkgewogICAgICAgICAgICAgICAgICB2YXIgcmVzID0gcmVzdWx0LnJlc3BvbnNlVGV4dDsKICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IEpTT04ucGFyc2UocmVzKTsKICAgICAgICAgICAgICAgICAgQWFrLmxvZyhvYmopOwoKICAgICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBwbGF5ZXIKICAgICAgICAgICAgICAgICAgdmFyIFBsYXllciA9IG5ldyBBYWsucGxheWVyKCk7CiAgICAgICAgICAgICAgICAgIFBsYXllci52bGMocGxheWVyLCB7CiAgICAgICAgICAgICAgICAgICAgc291cmNlIDogb2JqLnN0cmVhbVVybHMuaGxzLCAvLyBtM3U4CiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICdobHMnLAogICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5IDogZmFsc2UKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwge30sIHsKICAgICAgICAgICAgICAgIGluc2VydCA6ICdpbm5lcicKICAgICAgICAgICAgICB9KTsKKi8KICAgICAgICAgICAgfQogICAgICAgICAgfSwgMWUzKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIG10Z19yYWRpbyA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTQ5NQogICAgICAgIGhvc3QgOiBbJ3BsYXkucmFkaW8xLnNlJywgJ3BsYXkuYmFuZGl0LnNlJywgJ3BsYXkubHVnbmFmYXZvcml0ZXIuY29tJywgJ3BsYXkucml4Zm0uc2UnXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB3aW5kb3cucGxheWVyX2xvYWRfbGl2ZSh3aW5kb3cuc3RyZWFtX2lkKTsKICAgICAgICAgICAgfSwgMTAwMCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRwbGF5X25ldHdvcmsgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE0NjMKICAgICAgICBob3N0IDogWydkcGxheS5jb20nLCAnZHBsYXkuZGsnLCAnZHBsYXkuc2UnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwogICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMzY1KTsKICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKS50b1N0cmluZygpOwogICAgICAgICAgdmFyIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICJub3RpZmljYXRpb25TdWJtaXNzaW9uIiA6ICJzdWJtaXR0ZWQiLAogICAgICAgICAgICAgICJyZXBvcnRpbmdFeHBpcnkiIDogdGltZXN0YW1wLAogICAgICAgICAgICAgICJub3RpZmljYXRpb25FeHBpcnkiIDogdGltZXN0YW1wCiAgICAgICAgICAgIH0pOwogICAgICAgICAgQWFrLnNldENvb2tpZSgnZHNjLWFkYmxvY2snLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICB9LAogICAgICB2aWFzYXRfdHYgOiB7CiAgICAgICAgLy8gbm90ZTogc2tpcCB2aWRlbyBhZHMgKyBhbnRpLWFkYmxvY2sKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT10djNwbGF5CiAgICAgICAgLyogdGVzdDogaHR0cDovL3d3dy50djNwbGF5Lm5vL3Byb2dyYW1tZXIvcmVkbmluZ3Nza295dGEgaGRzL2hscwogICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy50djNwbGF5LmRrL3Byb2dyYW1tZXIvbGluc2Utb2ctZGlkZGUtZWtzdHJhIGhkcy9obHMKICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudHYzcGxheS5zZS9wcm9ncmFtL2dsYW1vdXJhbWEgaGRzL2hscwogICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy50djZwbGF5LnNlL3Byb2dyYW0vOTktc2FrZXItbWFuLW1hc3RlLWdvcmEtaW5uYW4tbWFuLWRvciBoZHMvaGxzCiAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LnR2OHBsYXkuc2UvcHJvZ3JhbS9lZnRlcmx5c3QtLTEgaGRzL2hscwogICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy50djEwcGxheS5zZS9wcm9ncmFtL2dhcnBlbnMtZXVyb3BhIGhkcy9obHMKICAgICAgICAgICAgICAgICAgIGh0dHA6Ly90dnBsYXkuc2thdGllcy5sdi9wYXJyYWlkZXMvdHYzLXppbmFzIGhkcy9obHMKICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9wbGF5LnR2My5sdC9wcm9ncmFtb3MvYmVhdG9zLXZpcnR1dmUgcnRtcC9obHMKICAgICAgICAgICAgICAgICAgIGh0dHA6Ly90djNwbGF5LnR2My5lZS9zaXN1L3B1aGFwYWV2LXNlcG9nYSBydG1wL2hscyAqLwogICAgICAgIGhvc3QgOiBbJ3R2M3BsYXkubm8nLCAndHYzcGxheS5kaycsICd0djNwbGF5LnNlJywgJ3R2NnBsYXkuc2UnLCAndHY4cGxheS5zZScsICd0djEwcGxheS5zZScsICd0dnBsYXkuc2thdGllcy5sdicsICdwbGF5LnR2My5sdCcsICd0djNwbGF5LnR2My5lZSddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5oYXNFbGVtZW50KCcjdmlkZW8tcGxheWVyJywgZnVuY3Rpb24gKHRoaXNFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXNFbGVtZW50LmlkID0gJyc7CiAgICAgICAgICAgIC8vdmFyIHZpZGVvSWQgPSBsb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpOwogICAgICAgICAgICB2YXIgdmlkZW9JZCA9IHRoaXNFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS12aWRlby1pZCcpOwogICAgICAgICAgICBBYWsubG9nKHRoaXNFbGVtZW50LCB2aWRlb0lkKTsKCiAgICAgICAgICAgIC8vIGdldCB2aWRlbyBzb3VyY2VzCiAgICAgICAgICAgIEFhay5yZXF1ZXN0KHsKICAgICAgICAgICAgICB1cmwgOiAnaHR0cDovL3BsYXlhcGkubXRneC50di92My92aWRlb3Mvc3RyZWFtLycgKyB2aWRlb0lkLAogICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgIHZhciByZXMgPSByZXN1bHQucmVzcG9uc2VUZXh0OwogICAgICAgICAgICAgICAgdmFyIG9iaiA9IEpTT04ucGFyc2UocmVzKTsKICAgICAgICAgICAgICAgIEFhay5sb2cob2JqKTsKCiAgICAgICAgICAgICAgICAvKiBJbm5ob2xkZXQgZHUgcHLDuHZlciDDpSBzZSBlciBrdW4gdGlsZ2plbmdlbGlnIGZvciBicnVrZXJlIGkgTm9yZ2UKICAgICAgICAgICAgICAgIFByb2dyYW1tZXQgZXIgYmxva2VyZXQgZm9yIHZpc25pbmcgZnJhIGRlbm5lIGdlb2dyYWZpc2tlIHBvc2l0aW9uLgogICAgICAgICAgICAgICAgUHJvZ3JhbcSFIGdhbGl0ZSBtYXR5dGkgdGlrIGp1bmdkYW1pZXNpIGnFoSBMaWV0dXZvcyBpbnRlcm5ldG8gdGlla8SXasWzIHRpbmtsxbMgKi8KICAgICAgICAgICAgICAgIGlmIChvYmoubXNnKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzRWxlbWVudC5pbm5lckhUTUwgPSBvYmoubXNnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5ob3N0ID09PSAndHYzcGxheS50djMuZWUnKSB7CiAgICAgICAgICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgICAgICAgICBQbGF5ZXIuZ3JpbmRwbGF5ZXIodGhpc0VsZW1lbnQsIHsKICAgICAgICAgICAgICAgICAgICBzb3VyY2UgOiBvYmouc3RyZWFtcy5tZWRpdW0sCiAgICAgICAgICAgICAgICAgICAgdHlwZSA6ICdydG1wL21wNCcsCiAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIHZpZGVvIHRhZyBmb3IgbmV3IHBsYXllcgogICAgICAgICAgICAgICAgICBBYWsuY3JlYXRlRWxlbWVudCh7CiAgICAgICAgICAgICAgICAgICAgdGFnIDogJ3ZpZGVvJywKICAgICAgICAgICAgICAgICAgICBpZCA6ICdub0FkUGxheWVyJywKICAgICAgICAgICAgICAgICAgICBjbGFzc2lkIDogJ3ZpZGVvLWpzIHZqcy1kZWZhdWx0LXNraW4nLAogICAgICAgICAgICAgICAgICAgIHdpZHRoIDogdGhpc0VsZW1lbnQuY2xpZW50V2lkdGggfHwgNzMwLAogICAgICAgICAgICAgICAgICAgIGhlaWdodCA6IHRoaXNFbGVtZW50LmNsaWVudEhlaWdodCB8fCA0MTAsCiAgICAgICAgICAgICAgICAgICAgcHJlbG9hZCA6ICdhdXRvJywKICAgICAgICAgICAgICAgICAgICBjb250cm9scyA6IHRydWUsCiAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXkgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHJlcGxhY2UgOiB0aGlzRWxlbWVudAogICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNvdXJjZXMKICAgICAgICAgICAgICAgICAgdmFyIHNyY0FycmF5ID0gW107CiAgICAgICAgICAgICAgICAgIGlmIChvYmouc3RyZWFtcy5oaWdoICYmIG9iai5zdHJlYW1zLmhpZ2ggIT09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgc3JjQXJyYXkucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICB0eXBlIDogInZpZGVvL21wNCIsIC8vIG1wNAogICAgICAgICAgICAgICAgICAgICAgc3JjIDogb2JqLnN0cmVhbXMuaGlnaAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9ICBpZiAob2JqLnN0cmVhbXMuaGxzICYmIG9iai5zdHJlYW1zLmhscyAhPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICBzcmNBcnJheS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgIHR5cGUgOiAiYXBwbGljYXRpb24veC1tcGVnVVJMIiwgLy8gbTN1OAogICAgICAgICAgICAgICAgICAgICAgc3JjIDogb2JqLnN0cmVhbXMuaGxzCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0gIGlmIChvYmouc3RyZWFtcy5tZWRpdW0gJiYgb2JqLnN0cmVhbXMubWVkaXVtICE9PSAnJykgewogICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gb2JqLnN0cmVhbXMubWVkaXVtLmluZGV4T2YoJ3J0bXAnKSA9PT0gMCA/ICdydG1wL21wNCcgOiAnYXBwbGljYXRpb24vZjRtK3htbCc7CiAgICAgICAgICAgICAgICAgICAgc3JjQXJyYXkucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICB0eXBlIDogdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHNyYyA6IG9iai5zdHJlYW1zLm1lZGl1bQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIEFhay5sb2coc3JjQXJyYXksIEpTT04uc3RyaW5naWZ5KHNyY0FycmF5KSk7CiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAvLyBpbml0aWFsaXplIG5ldyBwbGF5ZXIKICAgICAgICAgICAgICAgICAgQWFrLmFkZFNjcmlwdChBYWsuaW50b1N0cmluZyhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblZqc1JlYWR5KCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnZpZGVvanMgIT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmpzUmVhZHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnZpZGVvanMoIm5vQWRQbGF5ZXIiKS5zcmMoL19TT1VSQ0VTXy8pOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBvblZqc1JlYWR5KCk7CiAgICAgICAgICAgICAgICAgICAgICB9KSgpOwogICAgICAgICAgICAgICAgICAgIH0pLnJlcGxhY2UoIi9fU09VUkNFU18vIiwgSlNPTi5zdHJpbmdpZnkoc3JjQXJyYXkpKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gUnVzc2lhCiAgICAgIHJ1dHViZV9ydSA6IHsgLy8gcmVzZWFyY2ggc29sdXRpb24KICAgICAgICAvKiB0ZXN0OiBodHRwOi8vcnV0dWJlLnJ1L3ZpZGVvL2JkNWY2MDQ3NjU3ZjBiZGNiZmJiMGVkYWQyYmI3YzYxLyAqLwogICAgICAgIGhvc3QgOiBbJ3J1dHViZS5ydSddLAogICAgICAgIG9uRW5kIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmhhc0VsZW1lbnQoJyNydXR1YmVQbGF5ZXJIb2xkZXInLCBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgLy9kbUZ5SUc5d2RITWdQU0JCWVdzdVoyVjBSV3hsYldWdWRDZ2lJMjl3ZEdsdmJuTWlLVHNOQ2lBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJ2SUQwZ1FXRnJMbWx1ZEc5UFltcGxZM1FvYjNCMGN5NWtZWFJoYzJWMExuWmhiSFZsS1RzTkNpQWdJQ0FnSUNBZ0lDQWdJSFpoY2lCdE0zVTRWWEpzSUQwZ2J5NTJhV1JsYjE5aVlXeGhibU5sY2k1dE0zVTRPdzBLSUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1c2IyY29iVE4xT0ZWeWJDazdEUW9OQ2lBZ0lDQWdJQ0FnSUNBZ0lIWmhjaUJRYkdGNVpYSWdQU0J1WlhjZ1FXRnJMbkJzWVhsbGNpZ3BPdzBLSUNBZ0lDQWdJQ0FnSUNBZ1VHeGhlV1Z5TG5acFpHVnZhbk1vSnlOeWRYUjFZbVZRYkdGNVpYSkliMnhrWlhJbkxDQjdEUW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjMjkxY21ObElEb2diVE4xT0ZWeWJDd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQjBlWEJsSURvZ0oyaHNjeWNzRFFvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnTHk5d2NtOTRlVG9nZEhKMVpTd05DaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhkWFJ2Y0d4aGVTQTZJSFJ5ZFdVTkNpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlRzZ0tUcz0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gSXRhbHkKICAgICAgcmFpX3R2IDogeyAvLyByZXNlYXJjaCBzb2x1dGlvbgogICAgICAgIGhvc3QgOiBbJ3JhaS50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7fQogICAgICB9LAogICAgICAvLyBUViBTdHJlYW0KICAgICAgYmxvY2tfc3RyZWFtc190diA6IHsKICAgICAgICAvLyBub3RlOiByZWRpcmVjdCB0byBodHRwOi8vYmxvY2suc3RyZWFtcy50di8KICAgICAgICBob3N0IDogWydmaXJzdHJvdy5jbycsICdmaXJzdHJvd3MucnUnLCAnZmlyc3Ryb3dzLnR2JywgJ2ZpcnN0cm93cy5vcmcnLCAnZmlyc3Ryb3dzLmNvJywgJ2ZpcnN0cm93cy5iaXonLCAnZmlyc3Ryb3d1cy5ldScsICdmaXJzdHJvdzF1cy5ldScsICdmaXJzdHNyb3dzcG9ydHMuZXUnLCAnZmlyc3Ryb3dzcG9ydGVzLnR2JywgJ2ZpcnN0cm93c3BvcnRlcy5jb20nLCAnanVzdGZpcnN0cm93c3BvcnRzLmNvbScsICdoYWhhc3BvcnQubWUnLCAnd2l6aXdpZy5ydScsICd3aXppd2lnLnN4JywgJ3dpeml3aWcudG8nLCAnd2l6aXdpZy50dicsICdteXAycC5iaXonLCAnbXlwMnAudHYnLCAnbXlwMnAubGEnLCAnbXlwMnAuZWMnLCAnbXlwMnAuZXUnLCAnbXlwMnAuc3gnLCAnbXlwMnAud3MnLCAnbXlwMnAuY29tJywgJ2F0ZGhlLnJ1JywgJ2F0ZGhlLnNlJywgJ2F0ZGhlLmJ6JywgJ2F0ZGhlLnRvcCcsICdhdGRoZS50bycsICdhdGRoZS5tZScsICdhdGRoZS5teCcsICcgYXRkaGUubGknLCAnYXRkaGUuYWwnXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoImFkYiIsIDEpOyAvLyBwcmV2ZW50IGFudGktYWRibG9jawogICAgICAgICAgQWFrLnV3Lm9wZW4gPSBmdW5jdGlvbiAoKSB7fTsgLy8gcHJldmVudCBwb3B1cAogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYmFubmVySW5DZW50ZXIsICNoaWRkZW5CYW5uZXJDYW52YXMgeyBkaXNwbGF5OiBub25lOyB9Iik7IC8vIGhpZGUgYWRzCiAgICAgICAgfQogICAgICB9LAogICAgICBidXppbmFfeHl6IDogewogICAgICAgIC8vIG5vdGU6IGRpc2FibGUgcmVmY29udHJvbCwgdXNlZCBieSBmaXJzdHJvd3Nwb3J0cwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjY4CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyNDMKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODg5CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZm9ydW0vZGlzY3Vzc2lvbi84OTc1CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tLzhWVHJrdlM5CiAgICAgICAgaG9zdCA6IFsnYnV6aW5hLnh5eicsICdmYXJtZXQuaW5mbycsICdyaW1sYWRpLmNvbScsICdraXRvcmVsby5jb20nLCAnb21uaXBvbGEuY29tJywgJ3Bvcm9zaW4uY28udWsnLCAncmltbGVuby5jb20nLCAnc2ltcGxlNGFsbHMuY29tJywgJ2Fyc29wby5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIjYWRzZnJhbWUgeyBoZWlnaHQ6IDE1MXB4OyB9Iik7CiAgICAgICAgfSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoL2J1emluYS54eXovLnRlc3QobG9jYXRpb24uaG9zdCkpIHsgLy8ga2VlcHMgc2FtZSBob3N0IHN0cmVhbQogICAgICAgICAgICBBYWsuaGFzRWxlbWVudCgnaWZyYW1lW3NyYyo9Ii5waHA/aGFzaD0iXScsIGZ1bmN0aW9uICh0aGlzRWxlbWVudCkgewogICAgICAgICAgICAgIC8vIGh0dHA6Ly9hcnNvcG8uY29tL3cyLnBocD9oYXNoPXBhbmRhNTgKICAgICAgICAgICAgICAvLyBodHRwOi8vd3d3LmJ1emluYS54eXovbmFuYTF2MS5waHA/b250aGV0b3AKICAgICAgICAgICAgICB2YXIgcGFydHMgPSB0aGlzRWxlbWVudC5zcmMuc3BsaXQoJy8nKTsKICAgICAgICAgICAgICBwYXJ0c1syXSA9IEFhay5ydWxlcy5idXppbmFfeHl6Lmhvc3QucG9wKCk7CiAgICAgICAgICAgICAgQWFrLmxvZyh0aGlzRWxlbWVudCwgcGFydHMpOwogICAgICAgICAgICAgIHRoaXNFbGVtZW50LnNyYyA9IHBhcnRzLmpvaW4oJy8nKTsKCiAgICAgICAgICAgICAgICAvKglkbUZ5SUc4Z1BTQjdDZ2tKQ1NBZ0lDQWljR3hoZVd4cGMzUWlJRG9nVzNzS0NRa0pJQ0FnSUNBZ0lDQWljSEp2ZG1sa1pYSWlJRG9nSW5KMGJYQWlMQW9KQ1FrZ0lDQWdJQ0FnSUNKMWNtd2lJRG9nSW5CaGJtUmhNVDlsSlRORU1UUTJOVEEzTURNeU5pVXlObk4wSlRORVVISjBTRmw1ZGtKNlpEbGFaRGRvUkY5bVVraFVaekV4TVRFek1DSUtDUWtKSUNBZ0lDQWdmUW9KQ1FrZ0lDQWdYU3dLQ1FrSklDQWdJQ0p3YkhWbmFXNXpJaUE2SUhzS0NRa0pJQ0FnSUNBZ0luSjBiWEFpSURvZ2V3b0pDUWtnSUNBZ0lDQWdJQ0oxY213aUlEb2dJbVpzYjNkd2JHRjVaWEl1Y25SdGNDMHpMakl1TVRFdWMzZG1JaXdnQ2drSkNRa0pMeThpZFhKc0lqb2dJbWgwZEhBNkx5OXlaV3hsWVhObGN5NW1iRzkzY0d4aGVXVnlMbTl5Wnk5emQyWXZabXh2ZDNCc1lYbGxjaTV5ZEcxd0xUTXVNaTR4TVM1emQyWWlMQW9KQ1FrZ0lDQWdJQ0FnSUNKdVpYUkRiMjV1WldOMGFXOXVWWEpzSWlBNklDSnlkRzF3T2k4dk1UZzFMamd5TGpJeE5TNDBOVG96TlRjNUwzWnZaQzhpQ2drSkNTQWdJQ0FnSUgwc0Nna0pDU0FnSUNBZ0lDSmpiMjUwY205c2N5SWdPaUI3Q2drSkNRa2dJQ0FnSW5WeWJDSTZJQ0pvZEhSd09pOHZjbVZzWldGelpYTXVabXh2ZDNCc1lYbGxjaTV2Y21jdmMzZG1MMlpzYjNkd2JHRjVaWEl1WTI5dWRISnZiSE10TXk0eUxqRTJMbk4zWmlJc0lDOHZJR0ZrWkdWa0lHSmxZMkYxYzJVZ2JXbHpjMmx1WndvSkNRa2dJQ0FnSUNBZ0lDSndiR0Y1SWlBNklHWmhiSE5sTEFvSkNRa2dJQ0FnSUNBZ0lDSnpZM0oxWW1KbGNpSWdPaUJtWVd4elpRb0pDUWtnSUNBZ0lDQjlDZ2tKQ1NBZ0lDQjlMQW9KQ1FrZ0lDQWdJbkJzWVhsbGNrbGtJaUE2SUNKd2JHRjVaWElpTEFvSkNRa2dJQ0FnSW1Oc2FYQWlJRG9nZXdvSkNRa2dJQ0FnSUNBaWRYSnNJaUE2SUNKd1lXNWtZVEUvWlNVelJERTBOalV3TnpBek1qWWxNalp6ZENVelJGQnlkRWhaZVhaQ2VtUTVXbVEzYUVSZlpsSklWR2N4TVRFeE16QWlDZ2tKQ1NBZ0lDQjlDZ2tKQ1NBZ2ZRb0tDUWtKSUNCMllYSWdibVYzVlhKc0lEMGdjR0Z5ZEhNdWMyeHBZMlVvTUN3Z015a3VhbTlwYmlnbkx5Y3BJQ3NnSnk5bWJHOTNjR3hoZVdWeUxUTXVNaTR4Tmk1emQyWS9ZMjl1Wm1sblBTY2dLeUJsYzJOaGNHVW9TbE5QVGk1emRISnBibWRwWm5rb2J5a3BPd29KQ1FrZ0lDOHZkbUZ5SUc1bGQxVnliQ0E5SUNkb2RIUndPaTh2Y21Wc1pXRnpaWE11Wm14dmQzQnNZWGxsY2k1dmNtY3ZjM2RtTDJac2IzZHdiR0Y1WlhJdE15NHlMakUyTG5OM1pqOWpiMjVtYVdjOUp5QXJJR1Z6WTJGd1pTaEtVMDlPTG5OMGNtbHVaMmxtZVNodktTazdDZ2tKQ1NBZ1kyOXVjMjlzWlM1c2IyY29ibVYzVlhKc0tUc0tDUWtKSUNCMGFHbHpSV3hsYldWdWRDNXpjbU1nUFNCdVpYZFZjbXc3CiAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7IC8vIHNraXAgYW50aS1hZGJsb2NrCiAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcjYWRzZnJhbWUnKTsKICAgICAgICAgICAgQWFrLmdldEVsZW1lbnQoJyNyZW1vdmUtb3ZlcicpLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBhbGxteXZpZGVvc19uZXQgOiB7CiAgICAgICAgLy8gbm90ZTogb2JmdXNjYXRlZAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8yNzQKICAgICAgICBob3N0IDogWydhbGxteXZpZGVvcy5uZXQnLCAnYW12dHYubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vIHNraXAgZmFrZSBwbGF5IGJ1dHRvbgogICAgICAgICAgQWFrLnNldENvb2tpZSgnX2ZhdmJ0MzMnLCAxKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGlsaXZlX2RvbWFpbnMgOiB7CiAgICAgICAgaG9zdCA6IFsnaWxpdmUudG8nLCAnc3RyZWFtbGl2ZS50byddLAogICAgICAgIG9uRW5kIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKC9eXC9lbWJlZHBsYXllci5waHAvaS50ZXN0KGxvY2F0aW9uLnBhdGhuYW1lKSkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAvLyBTa2lwIHRpbWVyCiAgICAgICAgICAgICAgQWFrLnV3LnJlbW92ZU92ZXJsYXlIVE1MKCk7CiAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgbWljYXN0X3R2IDogewogICAgICAgIGhvc3QgOiBbJ21pY2FzdC50diddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyBwcmV2ZW50IHBvcHVuZGVyCiAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfbWFpbicsIHRydWUpOwogICAgICAgICAgQWFrLnNldENvb2tpZSgndmlkX3N1YicsIHRydWUpOwogICAgICAgICAgLy8gcmVtb3ZlIG92ZXJsYXkKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIGlmICh3aW5kb3cucmVtb3ZlT3ZlcmxheUhUTUwpCiAgICAgICAgICAgICAgICB3aW5kb3cucmVtb3ZlT3ZlcmxheUhUTUwoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgcHhzdHJlYW1fdHYgOiB7CiAgICAgICAgaG9zdCA6IFsncHhzdHJlYW0udHYnXSwKICAgICAgICBvbkVuZCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICgvXlwvZW1iZWRyb3V0ZXIucGhwLy50ZXN0KGxvY2F0aW9uLnBhdGhuYW1lKSkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAvLyBTa2lwIHRpbWVyIGFuZCBjbG9zZSBhZHMKICAgICAgICAgICAgICBBYWsudXcuY2xvc2VBZCgpOwogICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNhd2xpdmVfdHYgOiB7CiAgICAgICAgaG9zdCA6IFsnc2F3bGl2ZS50diddLAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICgvXlwvZW1iZWRcL3dhdGNoXC8vaS50ZXN0KGxvY2F0aW9uLnBhdGhuYW1lKSkgewogICAgICAgICAgICAvLyBTa2lwIHRpbWVyIGFuZCBjbG9zZSBhZHMKICAgICAgICAgICAgQWFrLnV3LmRpc3BsYXkgPSBmYWxzZTsKICAgICAgICAgICAgQWFrLnV3LmNsb3NlTXlBZCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgZ29vZGNhc3RfY28gOiB7CiAgICAgICAgaG9zdCA6IFsnZ29vZGNhc3QuY28nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoL15cL3N0cmVhbS5waHAvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpKSB7CiAgICAgICAgICAgIC8vIHJlbW92ZSBhZHMgYWxsb3dlZCBieSBlYXN5bGlzdAogICAgICAgICAgICBBYWsudXcuJCgiLmFkdmVydGlzZW1lbnQiKS5oaWRlKCk7CiAgICAgICAgICAgIEFhay51dy4kKCcuYWRza3kgaWZyYW1lJykuYXR0cigic3JjIiwgImFib3V0OmJsYW5rIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBzaG93c3BvcnRfdHZfY29tIDogewogICAgICAgIGhvc3QgOiBbJ3Nob3dzcG9ydC10di5jb20nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoL15cL2NoLnBocC8udGVzdChsb2NhdGlvbi5wYXRobmFtZSkpIHsKICAgICAgICAgICAgLy8gcmVtb3ZlIGFkcyBhbGxvd2VkIGJ5IGVhc3lsaXN0CiAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KCcjYWR2ZXJ0aXNlbWVudCwgLmFkdmVydGlzZW1lbnQnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHNoYXJlY2FzdF90byA6IHsKICAgICAgICBob3N0IDogWydzaGFyZWNhc3QudG8nXSwKICAgICAgICBvbklkbGUgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoL15cL2VtYmVkLnBocC8udGVzdChsb2NhdGlvbi5wYXRobmFtZSkpIHsKCiAgICAgICAgICAgIC8vIERpc2FibGUgcG9wdW5kZXJzCiAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIEFhay5zZXRDb29raWUoJ3ZpZF9tYWluJywgdHJ1ZSk7CiAgICAgICAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfc3ViJywgMik7CiAgICAgICAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfZGVsYXknLCB0cnVlKTsKICAgICAgICAgICAgICB9LCAxMDApOwoKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbCk7CiAgICAgICAgICAgIH0sIDUwMDApOwoKICAgICAgICAgICAgLy8gUmVtb3ZlIHRyYW5zcGFyZW50IG92ZXJsYXkKICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyN0YWJsZTEnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHZpZGVvbWVnYV90diA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT12aWRlb21lZ2EKICAgICAgICBob3N0IDogWyd2aWRlb21lZ2EudHYnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgaWYgKC9eXC92aWV3LnBocC8udGVzdChsb2NhdGlvbi5wYXRobmFtZSkpIHsKICAgICAgICAgICAgLy8gcHJldmVudCBwb3B1bmRlcgogICAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfbWFpbnB1JywgdHJ1ZSk7CiAgICAgICAgICAgIEFhay5zZXRDb29raWUoJ3ZpZF9zdWJwdScsIHRydWUpOwogICAgICAgICAgICBBYWsuc2V0Q29va2llKCd2aWRfZGVsYXknLCB0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9uRW5kIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgLy8ga2lsbCBhYmMKICAgICAgICAgIC8vIGZpeCBidWcgb24gZmlyZWZveDogVGhlIHZpZGVvIGNvdWxkIG5vdCBiZSBsb2FkZWQsIGVpdGhlciBiZWNhdXNlIHRoZSBzZXJ2ZXIgb3IgbmV0d29yayBmYWlsZWQgb3IgYmVjYXVzZSB0aGUgZm9ybWF0IGlzIG5vdCBzdXBwb3J0ZWQuCiAgICAgICAgICB2YXIgc2NyaXB0ID0gQWFrLmhhc1NjcmlwdCgnUGxlYXNlIGRpc2FibGUgQWRCbG9jayBQbHVnaW4gdG8gd2F0Y2ggdGhlIHZpZGVvJyk7CiAgICAgICAgICBpZiAoc2NyaXB0KSB7CiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzY3JpcHQuaW5uZXJIVE1MOwogICAgICAgICAgICB2YXIgc3Vic3RyaW5nID0gc291cmNlLnN1YnN0cmluZyhzb3VyY2UubGFzdEluZGV4T2YoJ2V2YWwoJyksIHNvdXJjZS5sYXN0SW5kZXhPZignKScpICsgMSk7CiAgICAgICAgICAgIHZhciBkZW9iZnVzY2F0ZWQgPSBBYWsudW5wYWNrU2NyaXB0KHN1YnN0cmluZyk7CiAgICAgICAgICAgIHZhciBuZXdTY3JpcHQgPSAnaWYoJytkZW9iZnVzY2F0ZWQuc3Vic3RyaW5nKGRlb2JmdXNjYXRlZC5pbmRleE9mKCd0cnVlJykpOwogICAgICAgICAgICBBYWsuYWRkU2NyaXB0KG5ld1NjcmlwdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBmbG93cGxheWVyX2FudGlhZGJsb2NrIDogewogICAgICAgIGhvc3QgOiBbJ3ZpZGVvZnVuLm1lJywgJ3ZpZGVvYnVnLm5ldCcsICd2aWRlbzQ0Lm5ldCcsICdwbGF5NDQubmV0JywgJ2J5em9vLm9yZycsICdwbGF5YmIubWUnLCAndmlkZW93aW5nLm1lJywgJ3ZpZGVvem9vLm1lJywgJ2Vhc3l2aWRlby5tZScsICdwbGF5cGFuZGEubmV0J10sCiAgICAgICAgb25FbmQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgCiAgICAgICAgICAvKgogICAgICAgICAgaHR0cDovL3d3dy5hbmltZXRvb24udHYvYmxhY2stbGFnb29uLWVwaXNvZGUtMQogICAgICAgICAgaHR0cDovL3ZpZGVvd2luZy5tZS9lbWJlZD93PTcxOCZoPTQzOCZ2aWRlbz1vbmdvaW5nL3l1LWdpLW9oX2FyYy12Xy1fNTMubXA0CiAgICAgICAgICBodHRwOi8vcGxheWJiLm1lL2VtYmVkLnBocD93PTcxOCZoPTQzOCZ2aWQ9YXQvbncveXUtZ2ktb2hfYXJjLXZfLV81My5tcDQKICAgICAgICAgIGh0dHA6Ly92aWRlb3pvby5tZS9lbWJlZC5waHA/dz03MTgmaD00MzgmdmlkPWF0L253L3l1LWdpLW9oX2FyYy12Xy1fNTMubXA0CiAgICAgICAgICBodHRwOi8vd3d3LmVhc3l2aWRlby5tZS9nb2dvLz93PTcxOCZoPTQzOCZmaWxlPXl1LWdpLW9oX2FyYy12Xy1fNTMubXA0JnN2PTEKICAgICAgICAgIGh0dHA6Ly9wbGF5cGFuZGEubmV0L2VtYmVkLnBocD93PTcxOCZoPTQzOCZ2aWQ9YXQvbncveXUtZ2ktb2hfYXJjLXZfLV81My5tcDQKICAgICAgICAgICAqLwoKICAgICAgICAgIC8vIGFsbG93IGZ1bGxzY3JlZW4gd2hlbiBhYnAgaXMgZW5hYmxlZCBhbmQgcmVtb3ZlIGFkIGxheWVyCiAgICAgICAgICAvLyBhZHMgYmxvY2tlZCBieSBhYnAgcnVsZQogICAgICAgICAgaWYgKC9eXC8oZW1iZWR8Z29nb3xncGx1cykvLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpKSB7CiAgICAgICAgICAgIHZhciBQbGF5ZXIgPSBuZXcgQWFrLnBsYXllcigpOwogICAgICAgICAgICBQbGF5ZXIuZWRpdGluZygnI2Zsb3dwbGF5ZXJfYXBpJywgewogICAgICAgICAgICAgIHNldEF0dHJpYnV0ZXMgOiB7CiAgICAgICAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW4gOiB0cnVlCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHIzeiA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXM/cT1sYWJlbDpSM1oKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vQzE1OWtldm4KICAgICAgICBob3N0IDogWydjaXR5YW0uY29tJywgJ2NvbXB1dGVyd29ybGR1ay5jb20nLCAndGVjaHdvcmxkLmNvbScsICd2My5jby51ayddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvKiBkb24ndCB3b3JrIHdpdGggY2hyb21lCiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAnX3IzeicsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDoge30KICAgICAgICAgIH0pOwogICAgICAgICAgKi8KICAgICAgICB9LAogICAgICAgIG9uSWRsZSA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay51dy4kKCIjcjN6LXdhaXQiKS5yZW1vdmUoKTsKICAgICAgICAgIEFhay51dy4kKCIucjN6LWhpZGUiKS5yZW1vdmVDbGFzcygicjN6LWhpZGUiKTsKICAgICAgICAgIEFhay51dy5fcjN6ID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGdvb2dsZV9qb2JydW5uZXIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZW4vZm9ydW0vbWVzc2FnZXMvNDA1CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEzNDMKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTM0MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84MzEKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTI3NAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjYyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU2MQogICAgICAgIGhvc3QgOiBbJ25leHQtZXBpc29kZS5uZXQnLCAna2luZ21ha2VyLm5ld3MnLCAnZ2FtZXNwb3dlcml0YS5jb20nLCAndG9kYXlpZG9sLmNvbScsICdyZWNlaXZlLWEtc21zLmNvbScsICd3YWtldXBjYWxsbWUuY29tJywgJ3JpbmdteWNlbGxwaG9uZS5jb20nLCAnZmFxbW96aWxsYS5vcmcnLCAndGhlbWVteXBjLmNvbSddLAogICAgICAgIG9uQWx3YXlzIDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLnV3Lmdvb2dsZV9qb2JydW5uZXIgPSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGZ1Y2thZGJvY2sgY3VzdG9taXplZAogICAgICBmYWJfZGF3bl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE3NDcKICAgICAgICBob3N0IDogWydkYXduLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdkZXRlY3RBZEJsb2NrJywgJ0RldGVjdEFkQmxvY2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZhYl9zcG9ydHNfZnIgOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyMTcKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vU3BFTjVkdVMKICAgICAgICBob3N0IDogWydzcG9ydHMuZnInXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnZmFiSW5zdGFuY2UnLCAnRmFiSW5zdGFuY2UnKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZhYl9ldXJvcGUxX2ZyIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTg4CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1VMZTF2elFSCiAgICAgICAgaG9zdCA6IFsnZXVyb3BlMS5mciddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdmYWJJbnN0YW5jZScsICdGYWJJbnN0YW5jZScpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX25ld3lvcmtlcl9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzExNzcKICAgICAgICBob3N0IDogWyduZXd5b3JrZXIuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5mYWtlRnVja0FkQmxvY2soJ3NuaWZmQWRCbG9jaycsICdTbmlmZkFkQmxvY2snKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZhYl93aXJlZF9jb20gOiB7CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwNjEKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9mci9mb3J1bS9kaXNjdXNzaW9uLzgyMzUKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vUHExNHY0RkMKICAgICAgICBob3N0IDogWyd3aXJlZC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnc25pZmZBZEJsb2NrJywgJ1NuaWZmQWRCbG9jaycpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX21hbmdhc3Byb2plY3RfZG9tYWlucyA6IHsKICAgICAgICAvLyBub3RlOiBmdWNrYWRibG9jayB3aXRoIGN1c3RvbSBpbnN0YW5jZSBuYW1lCiAgICAgICAgLy8gbm90ZTogYWxzbyBhZGRlZCBhYnAgcnVsZQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTI3CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZnIvZm9ydW0vZGlzY3Vzc2lvbi80MTMyCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzg1OAogICAgICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9tYW5nYXMuemx4LmNvbS5ici9tYW5nYXpvcmRfbGliL2pzL2xpYi9jb250cm9sbGVycy9MZWl0b3IvTGVpdG9yLm1pbi5qcwogICAgICAgIGhvc3QgOiBbJ21hbmdhc3Byb2plY3QuY29tLmJyJywgJ21hbmdhc3Byb2plY3QubmV0LmJyJywgJ21hbmdhcy56bHguY29tLmJyJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5mYWtlRnVja0FkQmxvY2soJ21hbmdhc0xlaXRvclNsaWRlcicsIEFhay5nZW5lcmF0ZUlEKCkpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX3FuaW1hdGVfY29tIDogewogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy83MzkKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNzA1CiAgICAgICAgLy8gbm90ZTogZnVja2FkYmxvY2sgY3VzdG9taXplZAogICAgICAgIGhvc3QgOiBbJ3FuaW1hdGUuY29tJ10sCiAgICAgICAgb25BbHdheXMgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRCbG9ja0RldGVjdGVkID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgfQogICAgICB9LAogICAgICBmYWJfZXVyb3RyYW5zcG9ydF9kZSA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODU4CiAgICAgICAgLy8gbm90ZTogZnVja2FkYmxvY2sgd2l0aCBjdXN0b20gaW5zdGFuY2UgbmFtZQogICAgICAgIGhvc3QgOiBbJ2V1cm90cmFuc3BvcnQuZGUnXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnYW50aUFkQmxvY2snLCBBYWsuZ2VuZXJhdGVJRCgpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGZhYl9jYWRldGVjdCA6IHsKICAgICAgICAvLyBieTogU2tyNHRjaEdyM2F6eU1vbmtpQmFsbGxsbGxaenp6CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzc4NAogICAgICAgIC8vIG5vdGU6IGZ1Y2thZGJsb2NrIHdpdGggY3VzdG9tIGluc3RhbmNlIG5hbWUKICAgICAgICBob3N0IDogWyd0emV0emUuaXQnLCAnYmVwcGVncmlsbG8uaXQnLCAnbGEtY29zYS5pdCddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdjYWRldGVjdCcsICdDQURldGVjdCcpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX2FnYXJfZ2FtZSA6IHsKICAgICAgICAvLyBub3RlOiBmdWNrYWRibG9jayB3aXRoIGN1c3RvbSBpbnN0YW5jZSBuYW1lCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEyNTcKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTEzNQogICAgICAgIGhvc3QgOiBbJ2FnYXJpby5zeCcsICdhZ2FyYWJpLmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdhZ2FyaW9fU1hfYWRzJywgQWFrLmdlbmVyYXRlSUQoKSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBmYWJfZmlsZXNwYWNlX2NvbSA6IHsKICAgICAgICAvLyBub3RlOiBmdWNrYWRibG9jayB3aXRoIGN1c3RvbSBpbnN0YW5jZSBuYW1lCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1lBUzBBczg3CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzEwMzcKICAgICAgICBob3N0IDogWydmaWxlc3BhY2UuY29tJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5mYWtlRnVja0FkQmxvY2soJ2ZBQicsIEFhay5nZW5lcmF0ZUlEKCkpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZmFiX3RvcHNlcmlhbHlfc2sgOiB7CiAgICAgICAgLy8gbm90ZTogZnVja2FkYmxvY2sgd2l0aCBjdXN0b20gaW5zdGFuY2UgbmFtZQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS80MnRVUTlhVgogICAgICAgIGhvc3QgOiBbJ3RvcHNlcmlhbHkuc2snXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnc3JhdE5hVmFzJywgQWFrLmdlbmVyYXRlSUQoKSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBmYWJfY3VzdG9taXplZCA6IHsKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTQ1NQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNjU3CiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL040MmE1QmpFCiAgICAgICAgaG9zdCA6IFsnZXBpY3VyaW91cy5jb20nLCAnZGVza3RvcHNvbHV0aW9uLm9yZycsICdpbmRpYXRpbWVzLmNvbScsICdoaW5kdXN0YW50aW1lcy5jb20nLCAnaGFwcHl0cmlwcy5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBfc2V0QXR0cmlidXRlID0gd2luZG93LkVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZTsKICAgICAgICAgICAgICB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnY2xhc3MnICYmIHZhbHVlLmluZGV4T2YoJ3RleHRfYWRzJykgIT0gLTEpIHsKICAgICAgICAgICAgICAgICAgdmFsdWUgPSAnJzsKICAgICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKHRoaXMsICdmYWIgaW50ZXJjZXB0ZWQgOi0pJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfc2V0QXR0cmlidXRlLmNhbGwodGhpcywgbmFtZSwgdmFsdWUpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGQzeHQzZXJfYW50aWFkYmxvY2sgOiB7CiAgICAgICAgLy8gc2l0ZTogaHR0cDovL2QzeHQzci5jb20vYW50aS1hZGJsb2NrCiAgICAgICAgLy8gY2FzZTogaHR0cDovL3Nwb3J0LXNob3cuZnIvanMvYWR2ZXJ0aXNlbWVudC1BZEJsb2NrLmpzCiAgICAgICAgLy8gY2FzZTogaHR0cDovL3d3dy4yc2l0ZS5tZS9hZHZlcnRpc2VtZW50LUFkQmxvY2suanMKICAgICAgICBob3N0IDogWydzcG9ydC1zaG93LmZyJywgJ3ZpcGZsYXNoLm5ldCcsICcyc2l0ZS5tZSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsuYWRkU3R5bGUoIiNibG9ja2Jsb2NrQSB7dmlzaWJpbGl0eTppbnZpc2libGU7ZGlzcGxheTpub25lO30gI2Jsb2NrYmxvY2tBIHRkIHt2aXNpYmlsaXR5OmludmlzaWJsZTtkaXNwbGF5Om5vbmU7fSAjYmxvY2tibG9ja0EgdGQgcCB7dmlzaWJpbGl0eTppbnZpc2libGU7ZGlzcGxheTpub25lO30gI2Jsb2NrYmxvY2tCIHt2aXNpYmlsaXR5OnZpc2libGU7ZGlzcGxheTpibG9jazt9Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBhZGJsb2NrX25vdGlmeSA6IHsKICAgICAgICAvLyBieTogU2tyNHRjaEdyM2F6eU1vbmtpQmFsbGxsbGxaenp6CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE3NjYKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTM5MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMDM5CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU5MgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy84MTMKICAgICAgICBob3N0IDogWydnYW1ldHJhbnNmZXJzLmNvbScsICd3aW5hbmRtYWMuY29tJywgJ2ZyZWUtc3RlYW0tZ2l2ZWF3YXlzLmNvbScsICdjYW5hbHdwLmNvbScsICdhbHBoYWhpc3RvcnkuY29tJywgJ25vcmRwcmVzc2UuYmUnLCAnc29zcGMubmFtZScsICdiYWJvby5jb20uYnInXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2FuQ29va2llJywgdHJ1ZSk7CiAgICAgICAgICBBYWsudXcuYW5PcHRpb25zID0ge307CiAgICAgICAgfQogICAgICB9LAogICAgICBsdXR0ZV9hZGJsb2NrIDogewogICAgICAgIC8vIHNpdGU6IGh0dHA6Ly9sdXR0ZWFkYmxvY2suYmxvZ3Nwb3QuY29tLzIwMTQvMTEvbGUtc2NyaXB0Lmh0bWwKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvOTM4CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzU4MAogICAgICAgIGhvc3QgOiBbJ2xld2VidHZib3VxdWV0ZnJhbmNvcGhvbmUub3ZlcmJsb2cuY29tJywgJ3dlYnR2LmJsb2d1ZXouY29tJywgJ2xhdGVsZWdyYXR1aXRlLmJsb2dzcG90LmNvbScsICd0b3RhbGRlYnJpZC5vcmcnLCAnMzcuMTg3LjE3My4yMDUnLCAndHZncmF0dWl0ZS5ibG9nc3BvdC5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZEJhaXRFbGVtZW50KCdkaXYjbXlfYWRfZGl2Jyk7CiAgICAgICAgICBBYWsudXcuamFiYmFodWQgPSBmdW5jdGlvbiAoKSB7fTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFudGlibG9jayA6IHsKICAgICAgICAvLyBzaXRlOiBhbnRpYmxvY2sub3JnCiAgICAgICAgLy8gbm90ZTogY3VzdG9taXplZAogICAgICAgIC8vIGlzc3VlOiAKICAgICAgICBob3N0IDogWydteWJhbmsucGwnLCAncmFwaWRncmFiLnBsJ10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgIHZhciBfYWRkRXZlbnRMaXN0ZW5lciA9IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyOwogICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXIudG9TdHJpbmcoKS5pbmRleE9mKCcubmV4dEZ1bmN0aW9uKCl9JykgPiAtMSkgewogICAgICAgICAgICAgICAgICBsaXN0ZW5lciA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oWydBbnRpQWRiS2lsbGVyJywgbG9jYXRpb24uaG9zdCwgJ0FudGlCbG9ja3tjdXN0b21pemVkfSddKTsKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9hZGRFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGJsb2NrYWRibG9jayA6IHsKICAgICAgICAvLyBzaXRlOiBibG9ja2FkYmxvY2suY29tCiAgICAgICAgLy8gbm90ZTogcmFuZG9tIGluc3RhbmNlIG5hbWUKICAgICAgICAvLyBzb3VyY2U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL1dhdGlsaW4vYWY3NWUwYTJlODJhMmVmYjM4NGJkZTljN2I0MWRlYzgKICAgICAgICAvLyBpc3N1ZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzP3E9bGFiZWw6QmxvY2tBZEJsb2NrCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZm9ydW0vZGlzY3Vzc2lvbi84MjczCiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZm9ydW0vZGlzY3Vzc2lvbi83NjI1CiAgICAgICAgaG9zdCA6IFsnYmxvY2thZGJsb2NrLmNvbScsICdsaW5rZHJvcC5uZXQnLCAncmV2Y2xvdWRzLmNvbScsICdsZXBvcm5vLm9yZycsICd1cGxvYWRzaHViLmNvbScsICdkYXNvbG8ub3JnJywgJ2Z1bGxzdHVmZi5uZXQnLCAnemV1c25ld3MuaXQnLCAnY2hlbWlub3RzLm5ldCcsICdsb2xzeS50dicsICdhbmltZXMtbWFuZ2FzLWRkbC5jb20nLCAnbm90aWNpYXNhdXRvbW90aXZhcy5jb20uYnInLCAnZGFya3N0YXJzLm9yZycsICdjb3JlcGFja3MuY29tJywgJ25hdHVyYWxiZC5jb20nLCAnY29vbHNvZnQuYWx0ZXJ2aXN0YS5vcmcnLCAnb3BlbmxvYWQudXMnLCAnY2RhLW9ubGluZS5wbCcsICd1cmJhbnBsYW5ldC5vcmcnLCAnbWFtYWhkLmNvbScsICdzYWRlZW1wYy5jb20nLCAnYXZtb28uY29tJywgJ3RoYWlsYW5kZS1mci5jb20nLCAnYnRhaWEuY29tJywgJ3R1c29mdC5vcmcnLCAnaGlzc2UubmV0JywgJ2V1cm9wZXVwLmNvbScsICducmouZnInLCAnc3Juay5jbycsICdhbmltbWV4LmNvJywgJ3NvY2tldGxvb3AuY29tJywgJ2NyYWNraGV4LmNvbScsICdyZXZlYWxlZHRyaWNrczR1LmNvbScsICdwaXp6YW1ha2luZy5jb20nLCAnY29tcHV0ZXJ3b3JtLm5ldCcsICd5b3VybGlmZXVwZGF0ZWQubmV0J10sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIEFhay5hZGRTY3JpcHQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAvLyB2YXJpYW50IDEKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB2YXIgX3NldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dDsKICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChmbiwgZGVsYXkpIHsKICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGZuLnRvU3RyaW5nKCkpCiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnc3RyaW5nJyAmJiBmbi5pbmRleE9mKCdiYWJfZWxlbWVudGlkJykgPiAtMSkgewogICAgICAgICAgICAgICAgICBmbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oWydBbnRpQWRiS2lsbGVyJywgbG9jYXRpb24uaG9zdCwgJ0Jsb2NrQWRCbG9jayddKTsKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9zZXRUaW1lb3V0LmNhbGwodGhpcywgZm4sIGRlbGF5KTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBncHRfc3AgOiB7CiAgICAgICAgLy8gYnk6IFJlZWssIEdpd2F5dW1lCiAgICAgICAgLy8gbm90ZTogd2hlbiBhZGJsb2NrIGRldGVjdGVkIGluamVjdCBuZXcgYWRzLCByZWRpcmVjdCB0byBodHRwOi8vdGlueXVybC5jb20venEyejVvNgogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNjM2CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE1OTYKICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvMTI5NwogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTQ0CiAgICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzE1NDIKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vOEFqaXRmYjIKICAgICAgICBob3N0IDogWydtYXJrZXR3YXRjaC5jb20nLCAnZGVhZGxpbmUuY29tJywgJ3R3ZWFrdG93bi5jb20nLCAnbnlwb3N0LmNvbScsICdyZWFsZ20uY29tJywgJ25hc2RhcS5jb20nXSwKICAgICAgICBvblN0YXJ0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgQWFrLmFkZFN0eWxlKCIuY29udGFpbmVyLS1iYW5uZXJBZCwgLmNvbC0tYWQgeyBkaXNwbGF5OiBub25lOyB9Iik7CiAgICAgICAgICBBYWsuYWRkU2NyaXB0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAvLyBHaXdheXVtZSAKICAgICAgICAgICAgICB3aW5kb3cuX3NwXyA9IHdpbmRvdy5fc3BfIHx8IHt9OwogICAgICAgICAgICAgIHdpbmRvdy5fc3BfLmNvbmZpZyA9IHdpbmRvdy5fc3BfLmNvbmZpZyB8fCB7fTsKICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93Ll9zcF8uY29uZmlnLCAiY29udGVudF9jb250cm9sX2NhbGxiYWNrIiwgewogICAgICAgICAgICAgICAgdmFsdWUgOiBmdW5jdGlvbiAoKSB7fSwKICAgICAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgICAgICBjb25maWd1cmFibGUgOiBmYWxzZQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIC8vIFJlZWsKICAgICAgICAgICAgICB2YXIgX2FkZEV2ZW50TGlzdGVuZXIgPSB3aW5kb3cuRXZlbnRUYXJnZXQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI7CiAgICAgICAgICAgICAgd2luZG93LkV2ZW50VGFyZ2V0LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAnc3AuYmxvY2tpbmcnKSB7CiAgICAgICAgICAgICAgICAgIGxpc3RlbmVyID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhbJ0FudGlBZGJLaWxsZXInLCBsb2NhdGlvbi5ob3N0LCAnR1BUe3NwLWJsb2NraW5nfSddKTsKICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9hZGRFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpOwogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0pKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGtydXhfYXNsIDogewogICAgICAgIC8vIG5vdGU6IHdoZW4gYWRibG9jayBkZXRlY3RlZCBpbmplY3QgbmV3IGFkcwogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS8wSEQ3Tjg0aQogICAgICAgIGhvc3QgOiBbJ2NvbW1lbnRjYW1hcmNoZS5uZXQnLCAnam91cm5hbGRlc2ZlbW1lcy5jb20nLCAnbGludGVybmF1dGUuY29tJ10sCiAgICAgICAgb25CZWZvcmVTY3JpcHQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICBkZXRlY3RlZCA6ICdLcnV4e2FzbH0nLAogICAgICAgICAgICAgIGNvbnRhaW5zIDogJ0FzbC5wcm90b3R5cGUuaW5qZWN0JywKICAgICAgICAgICAgICBleHRlcm5hbCA6IGZhbHNlLAogICAgICAgICAgICAgIHJlbW92ZSA6IHRydWUKICAgICAgICAgICAgfQogICAgICAgICAgXTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGtydXhfYWRwIDogewogICAgICAgIC8vIG5vdGU6IHdoZW4gYWRibG9jayBkZXRlY3RlZCBpbmplY3QgbmV3IGFkcwogICAgICAgIC8vIHNvdXJjZTogCiAgICAgICAgaG9zdCA6IFsnZm91cmNoZXR0ZS1ldC1iaWtpbmkuZnInLCAnbWV0ZW9jaXR5LmNvbSddLAogICAgICAgIG9uU3RhcnQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBYWsudXcuYWRQcm90ZWN0ID0gMTsKICAgICAgICB9CiAgICAgIH0sCSAKICAgICAgcGhvZW5peF9nb3lhdmVsYWIgOiB7CiAgICAgICAgLy8gbm90ZTogd2hlbiBhZGJsb2NrIGRldGVjdGVkIGluamVjdCBuZXcgYWRzCiAgICAgICAgLy8gbm90ZTogc2NyaXB0IGFudGktYWRibG9jayBvYmZ1c2NhdGVkLAogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8KICAgICAgICAvLyBkb2M6IGh0dHA6Ly90aW55dXJsLmNvbS9nbDNnaHEyCiAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL2hzQW1kU3VmCiAgICAgICAgaG9zdCA6IFsnZGVtby1waG9lbml4LmNvbScsICdkcHN0cmVhbS5uZXQnLCAnZ3VtLWd1bS1zdHJlYW1pbmcuY29tJywgJ2pldS5pbmZvJywgJ3NvZm9vdC5jb20nLCAnZ2FhcmEtZnIuY29tJywgJ2dheXR1YmUuY29tJywgJ3R1eGJvYXJkLmNvbScsICd4c3RvcnktZnIuY29tJywgJ2hlbnRhaWZyLm5ldCcsICdmaWxtc3RyZWFtaW5nLWhkLmNvbScsICdmaWxtdmYubmV0JywgJ2hlbnRhaWhhdmVuLm9yZycsICduYXJ1dG9zaGlwcHVkZW52Zi5jb20nLCAndGhlYmFkYnV6ei5jb20nLCAnbWFuZ2EtbmV3cy5jb20nLCAnamV1LnZpZGVvJywgJ21hbmdhcy1mci5jb20nXSwKICAgICAgICBvbkFsd2F5cyA6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIC8vQWFrLnV3Ll9fJGRjID0gZnVuY3Rpb24gKCkge307CiAgICAgICAgICBBYWsuYWRkU3R5bGUoJ2JvZHkge3Zpc2liaWxpdHk6IHZpc2libGU7fScpOwogICAgICAgIH0sCiAgICAgICAgb25CZWZvcmVTY3JpcHQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gW3sgCiAgICAgICAgICAgICAgZGV0ZWN0ZWQgOiAnUGhvZW5peEdveWF2ZWxhYicsCiAgICAgICAgICAgICAgY29udGFpbnMgOiAnUEhFTlYnLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIF07CiAgICAgICAgfQogICAgICB9LAogICAgICBhZF9kZWZlbmRfdWFicCA6IHsKICAgICAgICAvLyBub3RlOiB3aGVuIGFkYmxvY2sgZGV0ZWN0ZWQgaW5qZWN0IG5ldyBhZHMKICAgICAgICAvLyBzb3VyY2U6IGh0dHA6Ly9wYXN0ZWJpbi5jb20vY0ZRQ3A4MFcKICAgICAgICBob3N0IDogWyd0dnNwaWVsZmlsbS5kZScsICdmaW5hbnplbi5jaCddLAogICAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIFt7CiAgICAgICAgICAgICAgZGV0ZWN0ZWQgOiAnQWREZWZlbmR7VUFCUEluamVjdH0nLAogICAgICAgICAgICAgIGNvbnRhaW5zIDogJ1VBQlBJbmplY3QnLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYWRfZGVmZW5kX3VhYiA6IHsKICAgICAgICAvLyBub3RlOiB3aGVuIGFkYmxvY2sgZGV0ZWN0ZWQgaW5qZWN0IG5ldyBhZHMKICAgICAgICAvLyB1c2Vyc2NyaXB0OiBodHRwczovL29wZW51c2VyanMub3JnL3NjcmlwdHMvc2Nod2FyenRlZS9BZERlZmVuZF9LbGF0c2NoZQogICAgICAgIC8vIHVzZXJzY3JpcHQ6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2Fub255bW91cy9hOWI5OTU2YmFmMWQ1OWExMDdjNQogICAgICAgIC8vIHNvdXJjZTogaHR0cDovL3Bhc3RlYmluLmNvbS8xVnlXMHU5bSwgaHR0cDovL3Bhc3RlYmluLmNvbS9BWnFoUnhXVQogICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWxhYmVsOkFkRGVmZW5kCiAgICAgICAgLy8gcHVsbDogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9wdWxsLzQ2NwogICAgICAgIGhvc3QgOiBbJ3dhdGNoZ2VuZXJhdGlvbi5mcicsICd0dXJiby5mcicsICcyNG1hdGlucy5mcicsICdmb290MDEuY29tJywgJ2NsdWJpYy5jb20nLCAnbWFjZy5jbycsICdiZWdlZWsuZnInLCAnaWdlbi5mcicsICdnYW1lc3Rhci5kZScsICdmb2N1cy5kZScsICdzdGVybi5kZScsICdzYXQxLicsICdwcm9zaWViZW4uJywgJ2thYmVsZWlucy4nLCAnc2F0MWdvbGQuJywgJ3NpeHguJywgJ3Byb3NpZWJlbm1heHguJywgJ2ZlbS5jb20nLCAndGhlLXZvaWNlLW9mLWdlcm1hbnkuJywgJ3dldHRlci5jb20nLCAnd2V0dGVyb25saW5lLmRlJywgJ3Bjd2VsdC5kZScsICdib2Vyc2Utb25saW5lLmRlJywgJ3Nwb3J0YXV0by5kZScsICdhdXRvLW1vdG9yLXVuZC1zcG9ydC5kZScsICdtb3Rvci1rbGFzc2lrLmRlJywgJzR3aGVlbGZ1bi5kZScsICdhdXRvc3RyYXNzZW52ZXJrZWhyLmRlJywgJ2x1c3RpY2guZGUnLCAnc3BveC5jb20nLCAnc2h6LmRlJywgJ3RyYW5zZmVybWFya3QuZGUnLCAncnAtb25saW5lLmRlJywgJ21vdG9ycmFkb25saW5lLmRlJywgJzIwbWluLmNoJywgJ21haW4tc3BpdHplLmRlJywgJ3dvcm1zZXItemVpdHVuZy5kZScsICdsYW1wZXJ0aGVpbWVyLXplaXR1bmcuZGUnLCAnd2llc2JkZW5lci10YWdibGF0dC5kZScsICdidWVyc3RhZWR0ZXItemVpdHVuZy5kZScsICd3aWVzYmRlbmVyLWt1cmllci5kZScsICdyaGVpbi1tYWluLXByZXNzZS5kZScsICdhbGxnZW1laW5lLXplaXR1bmcuZGUnLCAnYXJpdmEuZGUnLCAnc3BpZWdlbC5kZScsICdicmlnaXR0ZS5kZScsICdkc2hpbmkubmV0JywgJ2dhbGEuZGUnLCAnZ2FtZXByby5kZScsICdnYW1vbmEuZGUnLCAncG5uLmRlJywgJ3Byb21vYmlsLmRlJywgJ3Nwb3J0YWwuZGUnLCAnd2ViZmFpbC5jb20nLCAnY29tcHV0ZXJiaWxkLmRlJywgJ2ZpbmFuemVuLm5ldCcsICdjb211bmlvLmRlJywgJ21lZGlzaXRlLmZyJ10sCiAgICAgICAgb25CZWZvcmVTY3JpcHQgOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gW3sKICAgICAgICAgICAgICBkZXRlY3RlZCA6ICdBZERlZmVuZHt1YWJJbmplY3R9JywKICAgICAgICAgICAgICBjb250YWlucyA6ICd1YWJJbmplY3QnLAogICAgICAgICAgICAgIGV4dGVybmFsIDogZmFsc2UsCiAgICAgICAgICAgICAgcmVtb3ZlIDogdHJ1ZQogICAgICAgICAgICB9CiAgICAgICAgICBdOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLyogc29sdmVkIGJ5IEFha0xJc3QKICAgICAgdGlzb29taV9pbmRpcmVrdCA6IHsKICAgICAgLy8gaW5saW5lOiBodHRwOi8vcGFzdGViaW4uY29tL25wbVhUVUh3CiAgICAgIC8vIGV4dGVybmFsOiBodHRwOi8vcGFzdGViaW4uY29tL2h2V25DdUR3CiAgICAgIGhvc3QgOiBbJ2VuZXJneS5kZScsICdnZXR2aWRzLmRlJywgJ2dld2luZGUtbm9ybWVuLmRlJywgJ3BvZGNhc3QuZGUnLCAnc3BpZWxlc3BpZWxlbjI0LmRlJywgJ2RpYWxvLmRlJ10sCiAgICAgIG9uQmVmb3JlU2NyaXB0IDogZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDsKICAgICAgdmFyIHRleHQgPSB0YXJnZXQudGV4dDsKICAgICAgaWYgKEFhay5jb250YWlucyh0ZXh0LCAnbj0iYWJjZGVmZ2hpamtsbSIscj0ibm9wcXJzdHV2d3h5eiIsaT0iMDEyMzQ1Njc4OSI7dmFyIHM9dD09MD9pOnQ9PTE/bicpKSB7CiAgICAgIEFhay5zdG9wU2NyaXB0KGUpOwogICAgICBBYWsubG9nKCdUaXNvb21pIEluZGlyZWt0Jyk7CiAgICAgIH0KICAgICAgfQogICAgICB9LAogICAgICAgKi8KICAgICAgLyogc29sdmVkIGJ5IEFha0xJc3QKICAgICAgdGlzb29taV9kaXJla3QgOiB7CiAgICAgIC8vIGlubGluZTogaHR0cDovL3Bhc3RlYmluLmNvbS8ydnEzOEpYWQogICAgICBob3N0IDogWydhdXRvemVpdHVuZy5kZScsICdmb3JtZWwxLmRlJywgJ2ZyZW1kd29ydC5kZScsICdpbnNpZGUtaGFuZHkuZGUnLCAnbW90b3JzcG9ydC10b3RhbC5jb20nLCAnYXVzc2Vud2lydHNjaGFmdHNsdXBlLmRlJywgJ2Rvbm5lcndldHRlci5kZScsICd3aW50b3RhbC5kZSddLAogICAgICBvbkJlZm9yZVNjcmlwdCA6IGZ1bmN0aW9uIChlKSB7CiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7CiAgICAgIHZhciB0ZXh0ID0gdGFyZ2V0LnRleHQ7CiAgICAgIGlmIChBYWsuY29udGFpbnModGV4dCwgJ2Z1bmN0aW9uIGRldGVjdCgpJykpIHsKICAgICAgQWFrLnN0b3BTY3JpcHQoZSk7CiAgICAgIEFhay5sb2coJ1Rpc29vbWkgRGlyZWt0Jyk7CiAgICAgIH0KICAgICAgfQogICAgICB9LAogICAgICAgKi8KICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgLy8gR2VuZXJpYwogICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICBnZW5lcmljIDogewogICAgICAgIGhvc3QgOiBbJy4qPyddLAogICAgICAgIG9uUmVtb3ZlIDogZnVuY3Rpb24gKHJlbW92ZWROb2RlKSB7CiAgICAgICAgICBpZiAoQWFrLm9wdHMucmVtb3ZlZCkgewogICAgICAgICAgICBpZiAocmVtb3ZlZE5vZGUuc3JjIHx8CiAgICAgICAgICAgICAgcmVtb3ZlZE5vZGUuaWQgfHwKICAgICAgICAgICAgICByZW1vdmVkTm9kZS5jbGFzc05hbWUgJiYKICAgICAgICAgICAgICAhL15maXJlYnVnLy50ZXN0KHJlbW92ZWROb2RlLmNsYXNzTmFtZSkpIHsKICAgICAgICAgICAgICAvLyBOb2RlIHJlbW92ZWQKICAgICAgICAgICAgICBBYWsubG9nKHJlbW92ZWROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25TdGFydCA6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAvLyBGdWNrQWRCbG9jayAmIEJsb2NrQWRCbG9jayB2MyBhbmQgdjQKICAgICAgICAgIC8vIHNpdGU6IGh0dHA6Ly93d3cuc2l0ZXh3LmZyL2Z1Y2thZGJsb2NrLwogICAgICAgICAgLy8gcmVwbzogaHR0cHM6Ly9naXRodWIuY29tL3NpdGV4dy9GdWNrQWRCbG9jawogICAgICAgICAgLy8gcmVwbzogaHR0cHM6Ly9naXRodWIuY29tL3NpdGV4dy9CbG9ja0FkQmxvY2sKICAgICAgICAgIC8vIG5vdGU6IHdoZW4gZnVja2FkYmxvY2suanMgb3IgYmxvY2thZGJsb2NrLmpzIGlzIGJsb2NrZWQKICAgICAgICAgIC8vIGRlbW8gdjM6IGh0dHA6Ly9zaC5zdC92b3ZIRQogICAgICAgICAgLy8gZGVtbyB2NDogaHR0cDovL2FsLmx5L3FCYlhICiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODg4CiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODI0CiAgICAgICAgICBBYWsuZmFrZUZ1Y2tBZEJsb2NrKCdmdWNrQWRCbG9jaycsICdGdWNrQWRCbG9jaycpOwogICAgICAgICAgQWFrLmZha2VGdWNrQWRCbG9jaygnYmxvY2tBZEJsb2NrJywgJ0Jsb2NrQWRCbG9jaycpOwoKICAgICAgICAgIC8vIGNhblJ1bkFkcwogICAgICAgICAgLy8gcmVwbzogaHR0cHM6Ly9naXRodWIuY29tL01hdHRoZXdHcm9zcy9DYW5SdW5BZHMKICAgICAgICAgIC8vIG5vdGU6IHVzZSBleHRlcm5hbGwgc2NyaXB0ICIvanMvYWRzLmpzIiAtPiB2YXIgY2FuUnVuQWRzID0gdHJ1ZTsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBYWsudXcsICdjYW5SdW5BZHMnLCB7CiAgICAgICAgICAgIGVudW1lcmFibGUgOiB0cnVlLAogICAgICAgICAgICB3cml0YWJsZSA6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZSA6IHRydWUKICAgICAgICAgIH0pOwoKICAgICAgICAgIC8vIGNhblNob3dBZHMKICAgICAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMTk3CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAnY2FuU2hvd0FkcycsIHsKICAgICAgICAgICAgZW51bWVyYWJsZSA6IHRydWUsCiAgICAgICAgICAgIHdyaXRhYmxlIDogZmFsc2UsCiAgICAgICAgICAgIHZhbHVlIDogdHJ1ZQogICAgICAgICAgfSk7CgogICAgICAgICAgLy8gQWRibG9ja2VyIERldGVjdGluZyBTY3JpcHRzOiBNZXRob2QgMgogICAgICAgICAgLy8gZ2lzdDogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vaXJhemFzeWVkLzNkMjQ3ZDNkMTIxZTc4MWEzODcyCiAgICAgICAgICAvLyBub3RlOiB1c2UgZXh0ZXJuYWxsIHNjcmlwdCAiL2pzL2Fkcy5qcyIgLT4gaXNBZEJsb2NrQWN0aXZlID0gZmFsc2U7CiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQWFrLnV3LCAnaXNBZEJsb2NrQWN0aXZlJywgewogICAgICAgICAgICBlbnVtZXJhYmxlIDogdHJ1ZSwKICAgICAgICAgICAgd3JpdGFibGUgOiBmYWxzZSwKICAgICAgICAgICAgdmFsdWUgOiBmYWxzZQogICAgICAgICAgfSk7CgogICAgICAgICAgLyoKICAgICAgICAgIHdpbmRvdy5pSGF2ZUxvYWRlZEFkcyA9IHRydWU7CiAgICAgICAgICB2YXIgbmljZUFkc0NoZWNrPXRydWU7CiAgICAgICAgICBhZGJsb2NrID0gZmFsc2UKICAgICAgICAgIGlzX2Jsb2NrZXIgPSBmYWxzZTsKICAgICAgICAgICAqLwogICAgICAgIH0sCiAgICAgICAgb25JZGxlIDogZnVuY3Rpb24gKCkgewoKICAgICAgICAgIC8vIEFkQmxvY2sgRGV0ZWN0b3IgKFhlbkZvcm8gUmVsbGVjdCkKICAgICAgICAgIC8vIHNpdGU6IGh0dHA6Ly90aW55dXJsLmNvbS9wYTI4eGRuCiAgICAgICAgICAvLyBjbG9uZUludG86IGh0dHA6Ly90aW55dXJsLmNvbS9rNnFwaG1lCiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODA1CiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODA0CiAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvNTkxCiAgICAgICAgICBpZiAoQWFrLnV3LlhlbkZvcm8gJiYgdHlwZW9mIEFhay51dy5YZW5Gb3JvLnJlbGxlY3QgPT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgQWFrLnV3LlhlbkZvcm8ucmVsbGVjdCA9IHsKICAgICAgICAgICAgICBBZEJsb2NrRGV0ZWN0b3IgOiB7CiAgICAgICAgICAgICAgICBzdGFydCA6IGZ1bmN0aW9uICgpIHt9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FkQmxvY2sgRGV0ZWN0b3IgKFhlbkZvcm8gUmVsbGVjdCknKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvKgogICAgICAgICAgLy8gQWR1bmJsb2NrIC0gaHR0cDovL2FkdW5ibG9jay5jb20vCiAgICAgICAgICBpZiAoQWFrLmdldENvb2tpZSgnYWRibG9jaycpID09IDEpIHsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2FkYmxvY2snLCAwKTsKICAgICAgICAgIEFhay5zZXRDb29raWUoJ2Jhcl9jbG9zZWQnLCAxKTsKICAgICAgICAgIH0KICAgICAgICAgICAqLwoKICAgICAgICAgIC8vIEFkYmxvY2sgQmxvY2tlcgogICAgICAgICAgLy8gaHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvYWRkYmxvY2tibG9ja2VyLwogICAgICAgICAgLy8gaHR0cDovL3Rpbnl1cmwuY29tL25zd242ZnoKICAgICAgICAgIC8vIGh0dHA6Ly9wYXN0ZWJpbi5jb20vZDY1enIzN20KICAgICAgICAgIC8qIGNhbiBjYXVzZSBhIGJ1ZwogICAgICAgICAgdmFyIGFkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Fmc19hZHMnKTsKICAgICAgICAgIHZhciBhZCA9IGFkcy5sZW5ndGggJiYgYWRzW2Fkcy5sZW5ndGggLSAxXTsKICAgICAgICAgIGlmIChhZCAmJiBhZC5pbm5lckhUTUwubGVuZ3RoID09PSAwIHx8IGFkLmNsaWVudEhlaWdodCA9PT0gMCkgewogICAgICAgICAgQWFrLmFkZFNjcmlwdChmdW5jdGlvbiAoKSB7CiAgICAgICAgICBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lTmF0aXZlID0gSFRNTERvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lOwogICAgICAgICAgSFRNTERvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24gKGNsYXNzTmFtZSkgewogICAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnYWZzX2FkcycpIHsKICAgICAgICAgIGNvbnNvbGUuaW5mbyhbJ0FudGlBZGJLaWxsZXInLCBsb2NhdGlvbi5ob3N0LCAnQWRibG9ja0Jsb2NrZXInLCBjbGFzc05hbWVdKTsKICAgICAgICAgIHZhciB1bmlxaWQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdmFyIGJhaXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgIGJhaXQuaW5uZXJIVE1MID0gJzxicj4nOwogICAgICAgICAgYmFpdC5jbGFzc05hbWUgPSB1bmlxaWQ7CiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGJhaXQpOwogICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUodW5pcWlkKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lTmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICAgKi8KCiAgICAgICAgICAvLyBBZGJ1ZGR5CiAgICAgICAgICBpZiAodHlwZW9mIEFhay51dy5jbG9zZUFkYnVkZHkgPT09ICdmdW5jdGlvbicpIHsKICAgICAgICAgICAgQWFrLnV3LmNsb3NlQWRidWRkeSgpOwogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FkYnVkZHknKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBBZEJsb2NrIEFsZXJ0ZXIgKFdQKQogICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dwLXBsdWdpbnMvYWRibG9jay1hbGVydGVyCiAgICAgICAgICAvLwogICAgICAgICAgaWYgKEFhay5nZXRFbGVtZW50KCdkaXYuYWRiX292ZXJsYXkgPiBkaXYuYWRiX21vZGFsX2ltZycpKSB7CiAgICAgICAgICAgIC8vIFJlbW92ZSBBbGVydCArIEFsbG93IFNjcm9sbAogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudCgnZGl2LmFkYl9vdmVybGF5Jyk7CiAgICAgICAgICAgIEFhay5hZGRTdHlsZSgnaHRtbCxib2R5IHtoZWlnaHQ6YXV0bzsgb3ZlcmZsb3c6IGF1dG87fScpOwogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FkQmxvY2tBbGVydGVyJyk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gVW5rbm93IEFudGkgQWRCbG9jayBzeXN0ZW0KICAgICAgICAgIGlmIChBYWsuZ2V0RWxlbWVudCgnI2Jsb2NrZGl2JykgJiYgQWFrLmNvbnRhaW5zKEFhay5nZXRFbGVtZW50KCcjYmxvY2tkaXYnKS5pbm5lckhUTUwsICdkaXNhYmxlIGFkIGJsb2NraW5nIG9yIHVzZSBhbm90aGVyIGJyb3dzZXIgd2l0aG91dCBhbnkgYWRibG9ja2VyIHdoZW4geW91IHZpc2l0JykpIHsKICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoJyNibG9ja2RpdicpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIEFudGlibG9jay5vcmcgdjIKICAgICAgICAgIC8vIG5vdGU6IGRldGVjdCBhbmQgc3RvcmUgYmxvY2sgaWQKICAgICAgICAgIC8vIGRlbW86IGh0dHA6Ly90aW55dXJsLmNvbS9uaHlocHprCiAgICAgICAgICB2YXIgc3R5bGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0eWxlc1tpXTsKICAgICAgICAgICAgdmFyIGNzc1J1bGVzID0gc3R5bGUuc2hlZXQuY3NzUnVsZXM7CiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY3NzUnVsZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICB2YXIgY3NzUnVsZSA9IGNzc1J1bGVzW2pdOwogICAgICAgICAgICAgIHZhciBjc3NUZXh0ID0gY3NzUnVsZS5jc3NUZXh0OwogICAgICAgICAgICAgIHZhciBwYXR0ZXJuID0gL14jKFthLXowLTldezQsMTB9KSB+IFwqIFx7IGRpc3BsYXk6IG5vbmU7IFx9LzsKICAgICAgICAgICAgICBpZiAocGF0dGVybi50ZXN0KGNzc1RleHQpKSB7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBwYXR0ZXJuLmV4ZWMoY3NzVGV4dClbMV07CiAgICAgICAgICAgICAgICBpZiAoQWFrLmhhc1NjcmlwdCgidy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywiICsgaWQgKyAiLGZhbHNlKSIpKSB7CiAgICAgICAgICAgICAgICAgIEFhay5hYWJzLmFibzIgPSBpZDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIHdpbiA9IEFhay51dzsKICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gd2luKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgaWYgKCEvXndlYmtpdC8udGVzdChwcm9wKSAmJiAvXlthLXowLTldezQsMTJ9JC9pLnRlc3QocHJvcCkgJiYgcHJvcCAhPT0gJ2RvY3VtZW50JyAmJiAod2luW3Byb3BdaW5zdGFuY2VvZiBIVE1MRG9jdW1lbnQpID09PSBmYWxzZSAmJiB3aW4uaGFzT3duUHJvcGVydHkocHJvcCkgJiYgdHlwZW9mIHdpbltwcm9wXSA9PT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSB3aW5bcHJvcF07CgogICAgICAgICAgICAgICAgLy8gQW50aWJsb2NrLm9yZyB2MyAmIEJldHRlclN0b3BBZGJsb2NrCiAgICAgICAgICAgICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODMzCiAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmRlZmVyRXhlY3V0aW9uICYmCiAgICAgICAgICAgICAgICAgIG1ldGhvZC5kaXNwbGF5TWVzc2FnZSAmJgogICAgICAgICAgICAgICAgICBtZXRob2QuZ2V0RWxlbWVudEJ5ICYmCiAgICAgICAgICAgICAgICAgIG1ldGhvZC5nZXRTdHlsZSAmJgogICAgICAgICAgICAgICAgICBtZXRob2QuaW5zZXJ0ICYmCiAgICAgICAgICAgICAgICAgIG1ldGhvZC5uZXh0RnVuY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC50b2dnbGUpIHsKICAgICAgICAgICAgICAgICAgICBBYWsuYWFicy5ic2EgPSBwcm9wOwogICAgICAgICAgICAgICAgICAgIEFhay5kZXRlY3RlZCgnQmV0dGVyU3RvcEFkYmxvY2t7ZG9tfScpOwogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIEFhay5hYWJzLmFibzMgPSBwcm9wOwogICAgICAgICAgICAgICAgICAgIEFhay5kZXRlY3RlZCgnQW50aWJsb2NrM3tkb219Jyk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgd2luW3Byb3BdID0gbnVsbDsgLy8ga2lsbCBpbnN0YW5jZQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEJsb2NrQWRCbG9jawogICAgICAgICAgICAgICAgLy8gc2l0ZTogYmxvY2thZGJsb2NrLmNvbQogICAgICAgICAgICAgICAgLy8gbm90ZTogcmFuZG9tIGluc3RhbmNlIG5hbWUKICAgICAgICAgICAgICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vV2F0aWxpbi9hZjc1ZTBhMmU4MmEyZWZiMzg0YmRlOWM3YjQxZGVjOAogICAgICAgICAgICAgICAgLy8gaXNzdWVzOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcz9xPWxhYmVsJTNBQmxvY2tBZEJsb2NrCiAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmJhYikgeyAvLyB2YXJpYW50IDEKICAgICAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdCbG9ja0FkQmxvY2t7ZG9tOnZhcmlhbnQxfScpOwogICAgICAgICAgICAgICAgICB3aW5bcHJvcF0gPSBudWxsOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyhtZXRob2QpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyhtZXRob2QpLm1hcChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgICB9KS5qb2luKCkubGVuZ3RoID09PSAzMikgeyAvLyB2YXJpYW50IDIKICAgICAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdCbG9ja0FkQmxvY2t7ZG9tOnZhcmlhbnQyfScpOwogICAgICAgICAgICAgICAgICB3aW5bcHJvcF0gPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2Vycm9yJywgcHJvcCkKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIEFudGktQWRibG9ja2VycwogICAgICAgICAgdmFyIGFhYnMgPSB7CiAgICAgICAgICAgIC8vIFBsdWdpbnMgV29yZFByZXNzCiAgICAgICAgICAgIE5vQWRCbG9jayA6ICcoL3BsdWdpbnMvbm8tYWRibG9jay98L2Jsb2NrQmxvY2svYmxvY2tCbG9jay5qcXVlcnkuanMpJywKICAgICAgICAgICAgQmV0dGVyU3RvcEFkYmxvY2sgOiAnKC9wbHVnaW5zL2JldHRlci1zdG9wLWFkYmxvY2svfGJzYS1zY3JpcHQtZG9jdHlwZS5qc3xic2Etc2NyaXB0LW5vLWRvY3R5cGUuanMpJywKICAgICAgICAgICAgQWRCbG9ja0Jsb2NrZXIgOiAnL3BsdWdpbnMvd29yZHByZXNzLWFkYmxvY2stYmxvY2tlci8nLAogICAgICAgICAgICBBbnRpQmxvY2tCdWtzc2FBeW1hbiA6ICcvcGx1Z2lucy9hbnRpLWJsb2NrLycsCiAgICAgICAgICAgIEJsb2NrQWx5emVyIDogJy9wbHVnaW5zL2Jsb2NrYWx5emVyLWFkYmxvY2stY291bnRlci8nLAogICAgICAgICAgICBBZEJsb2NraW5nRGV0ZWN0b3IgOiAnL3BsdWdpbnMvYWQtYmxvY2tpbmctZGV0ZWN0b3IvJywKICAgICAgICAgICAgLy8gUGx1Z2lucyBXZWJzaXRlCiAgICAgICAgICAgIEFkd29ya21lZGlhIDogJyhhZHdvcmttZWRpYXxsb3h0a3xjb250ZW50bG9ja2luZ25ldHdvcmtzKS5jb20vZ0xvYWRlci5waHAnLAogICAgICAgICAgICBBZHNjZW5kbWVkaWEgOiAnYWRzY2VuZG1lZGlhLmNvbS9nd2pzLnBocCcsCiAgICAgICAgICAgIEZ1Y2tBZEJsb2NrIDogJygvZnVja2FkYmxvY2suanN8L2Jsb2NrYWRibG9jay5qcyknLAogICAgICAgICAgICBqUXVlcnlBZEJsb2NrIDogJy9qcXVlcnkuYWRibG9jay5qcycsCiAgICAgICAgICAgIGpRdWVyeUFkYmxvY2tEZXRlY3RvciA6ICcvanF1ZXJ5LmFkYmxvY2stZGV0ZWN0b3IuanMnLAogICAgICAgICAgICBBZEJsb2NrQWR2ZXJ0aXNlbWVudCA6ICcvYWR2ZXJ0aXNlbWVudC5qcycsCiAgICAgICAgICAgIEFkQmxvY2tBZHZlcnQgOiAnL2FkdmVydC5qcycsCiAgICAgICAgICAgIEFkQmxvY2tBZHZDdXN0b20gOiAnL2FkdmVydGlzZW1lbnQoLispLmpzJywKICAgICAgICAgICAgQWRCbG9ja0FkZnJhbWUgOiAnL2FkZnJhbWUuanMnLAogICAgICAgICAgICBBbnRpQWRCdXN0ZXIgOiAnL2FudGktYWQtYnVzdGVyLmpzJywKICAgICAgICAgICAgUlRLQW50aUFkYmxvY2sgOiAnL2Jsb2NrY2FrZS5qcycsCiAgICAgICAgICAgIEFkYmxvY2tEZXRlY3RvciA6ICcvQWRibG9ja0RldGVjdG9yL2hhbmRsZXIubWluLmpzJywKICAgICAgICAgICAgalF1ZXJ5QW50aUFkc0Jsb2NrIDogJy9qcXVlcnkuYW50aWFkc2Jsb2NrLmpzJywKICAgICAgICAgICAgQWRidWRkeSA6ICcvanMvYWRidWRkeS5taW4uanMnLAogICAgICAgICAgICBBbnRpQURzQmxvY2tlciA6ICcvYWFkYi9zY3JpcHQuanMnCiAgICAgICAgICB9OwoKICAgICAgICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuc2NyaXB0czsKICAgICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgc2NyaXB0cy5sZW5ndGg7IHkrKykgewogICAgICAgICAgICB2YXIgc2NyaXB0ID0gc2NyaXB0c1t5XTsKICAgICAgICAgICAgaWYgKHNjcmlwdC5zcmMpIHsKICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gYWFicykgewogICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoYWFic1trZXldLCAnaScpLnRlc3Qoc2NyaXB0LnNyYykpIHsKICAgICAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKFtrZXksIHNjcmlwdC5zcmNdKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgIH0sCiAgICAgICAgb25JbnNlcnQgOiBmdW5jdGlvbiAoaW5zZXJ0ZWROb2RlKSB7CgogICAgICAgICAgLy8gQWxsIE5vZGVzCiAgICAgICAgICBpZiAoQWFrLm9wdHMuaW5zZXJ0ZWQpIHsKICAgICAgICAgICAgaWYgKGluc2VydGVkTm9kZS5zcmMgfHwKICAgICAgICAgICAgICBpbnNlcnRlZE5vZGUuaWQgfHwKICAgICAgICAgICAgICBpbnNlcnRlZE5vZGUuY2xhc3NOYW1lICYmCiAgICAgICAgICAgICAgIS9maXJlYnVnLy50ZXN0KGluc2VydGVkTm9kZS5pbm5lckhUTUwpKSB7CiAgICAgICAgICAgICAgLy8gTm9kZSBpbnNlcnRlZAogICAgICAgICAgICAgIEFhay5sb2coaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIC8vIE5vLUFkYmxvY2sgLSBodHRwOi8vd3d3Lm5vLWFkYmxvY2suY29tLwogICAgICAgICAgaWYgKGluc2VydGVkTm9kZS5pZCAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUuaWQubGVuZ3RoID09IDQgJiYKICAgICAgICAgICAgL15bYS16MC05XXs0fSQvLnRlc3QoaW5zZXJ0ZWROb2RlLmlkKSAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUubm9kZU5hbWUgPT0gJ0RJVicgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmZpcnN0Q2hpbGQgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmZpcnN0Q2hpbGQuaWQgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmZpcnN0Q2hpbGQuaWQgPT0gaW5zZXJ0ZWROb2RlLmlkICYmCiAgICAgICAgICAgIEFhay5jb250YWlucyhpbnNlcnRlZE5vZGUuaW5uZXJIVE1MLCAnbm8tYWRibG9jay5jb20nKSkgewogICAgICAgICAgICAvLyBSZW1vdmUKICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdOby1BZGJsb2NrJywgZmFsc2UsIGxvY2F0aW9uLmhyZWYpOwogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudChpbnNlcnRlZE5vZGUpOwogICAgICAgICAgICAvL0Fhay5sb2coaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBTdG9wQWRibG9jayAtIGh0dHA6Ly9zdG9wYWRibG9jay5vcmcvZG93bmxvYWRzLwogICAgICAgICAgaWYgKGluc2VydGVkTm9kZS5pZCAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUuaWQubGVuZ3RoID09IDcgJiYKICAgICAgICAgICAgL15hW2EtejAtOV17Nn0kLy50ZXN0KGluc2VydGVkTm9kZS5pZCkgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5vZGVOYW1lID09ICdESVYnICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5wYXJlbnROb2RlICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5wYXJlbnROb2RlLmlkICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5wYXJlbnROb2RlLmlkID09IGluc2VydGVkTm9kZS5pZCArICcyJyAmJgogICAgICAgICAgICBBYWsuY29udGFpbnMoaW5zZXJ0ZWROb2RlLmlubmVySFRNTCwgJ3N0b3BhZGJsb2NrLm9yZycpKSB7CiAgICAgICAgICAgIC8vIFJlbW92ZQogICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ1N0b3BBZEJsb2NrJywgZmFsc2UsIGxvY2F0aW9uLmhyZWYpOwogICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudChpbnNlcnRlZE5vZGUpOwogICAgICAgICAgICAvL0Fhay5sb2coaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBBbnRpQWRibG9jayAoUGFja2VyKQogICAgICAgICAgdmFyIHJlSWZyYW1lSWQgPSAvXih6ZHx3ZCkkLzsKICAgICAgICAgIHZhciByZUltZ0lkID0gL14oeGR8Z2QpJC87CiAgICAgICAgICB2YXIgcmVJbWdTcmMgPSAvXC9hZHNcL2Jhbm5lci5qcGcvOwogICAgICAgICAgdmFyIHJlSWZyYW1lU3JjID0gLyhcL2FkaGFuZGxlclwvfFwvYWRpbWFnZXNcL3xhZC5odG1sKS87CgogICAgICAgICAgLy8gQ29tbXVucwogICAgICAgICAgaWYgKGluc2VydGVkTm9kZS5pZCAmJgogICAgICAgICAgICByZUltZ0lkLnRlc3QoaW5zZXJ0ZWROb2RlLmlkKSAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUubm9kZU5hbWUgPT0gJ0lNRycgJiYKICAgICAgICAgICAgcmVJbWdTcmMudGVzdChpbnNlcnRlZE5vZGUuc3JjKSB8fAogICAgICAgICAgICBpbnNlcnRlZE5vZGUuaWQgJiYKICAgICAgICAgICAgcmVJZnJhbWVJZC50ZXN0KGluc2VydGVkTm9kZS5pZCkgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5vZGVOYW1lID09ICdJRlJBTUUnICYmCiAgICAgICAgICAgIHJlSWZyYW1lU3JjLnRlc3QoaW5zZXJ0ZWROb2RlLnNyYykpIHsKCiAgICAgICAgICAgIC8vIFZhcmlhbnQgMQogICAgICAgICAgICBpZiAoaW5zZXJ0ZWROb2RlLmlkID09ICd4ZCcpIHsKICAgICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FudGlBZGJsb2NrUGFja2VyWmR4ZCcsIGZhbHNlLCBsb2NhdGlvbi5ocmVmKTsKICAgICAgICAgICAgfSAvLyBWYXJpYW50IDIKICAgICAgICAgICAgZWxzZSBpZiAoaW5zZXJ0ZWROb2RlLmlkID09ICdnZCcpIHsKICAgICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FudGlBZGJsb2NrUGFja2VyV2RnZCcsIGZhbHNlLCBsb2NhdGlvbi5ocmVmKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBSZW1vdmUKICAgICAgICAgICAgLy9BYWsubG9nKGluc2VydGVkTm9kZSk7CiAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGluc2VydGVkTm9kZSk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gQWR1bmJsb2NrIC0gaHR0cDovL2FkdW5ibG9jay5jb20vCiAgICAgICAgICB2YXIgcmVJZCA9IC9eW2Etel17OH0kLzsKICAgICAgICAgIHZhciByZUNsYXNzID0gL15bYS16XXs4fSBbYS16XXs4fS87CiAgICAgICAgICB2YXIgcmVCZyA9IC9eW2Etel17OH0tYmckLzsKICAgICAgICAgIHZhciByZU1lc3NhZ2UgPSAvSWwgc2VtYmxlcmFpdCBxdWUgdm91cyB1dGlsaXNpZXogdW4gYmxvcXVldXIgZGUgcHVibGljaXTDqSAhLzsKCiAgICAgICAgICAvLyBDb21tdW5zCiAgICAgICAgICBpZiAodHlwZW9mIEFhay51dy52dGZhYiAhPSAndW5kZWZpbmVkJyAmJgogICAgICAgICAgICB0eXBlb2YgQWFrLnV3LmFkYmxvY2tfYW50aWIgIT0gJ3VuZGVmaW5lZCcgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLnBhcmVudE5vZGUgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gJ0JPRFknICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5pZCAmJgogICAgICAgICAgICByZUlkLnRlc3QoaW5zZXJ0ZWROb2RlLmlkKSAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUubm9kZU5hbWUgPT0gJ0RJVicgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5uZXh0U2libGluZy5jbGFzc05hbWUgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nLm5vZGVOYW1lID09ICdESVYnKSB7CgogICAgICAgICAgICAvLyBGdWxsIFNjcmVlbiBNZXNzYWdlIChQcmVtaXVtKQogICAgICAgICAgICAvLyA8ZGl2IGlkPSJsZnloc3ZkcSIgY2xhc3M9InR2d25vcWRmIHN2b25leHJrIiBzdHlsZT0idG9wOiAxMDBweDsgb3BhY2l0eTogMTsgdmlzaWJpbGl0eTogdmlzaWJsZTsiPgogICAgICAgICAgICAvLyA8ZGl2IGNsYXNzPSJ0dndub3FkZi1iZyIgc3R5bGU9ImRpc3BsYXk6IGJsb2NrOyI+PC9kaXY+CiAgICAgICAgICAgIGlmIChpbnNlcnRlZE5vZGUuY2xhc3NOYW1lICYmCiAgICAgICAgICAgICAgcmVDbGFzcy50ZXN0KGluc2VydGVkTm9kZS5jbGFzc05hbWUpICYmCiAgICAgICAgICAgICAgcmVCZy50ZXN0KGluc2VydGVkTm9kZS5uZXh0U2libGluZy5jbGFzc05hbWUpICYmCiAgICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nLnN0eWxlICYmCiAgICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKSB7CgogICAgICAgICAgICAgIC8vIFJlbW92ZSBNZXNzYWdlCiAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCJBZFVuQmxvY2tQcmVtaXVtIik7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nKTsgLy8gb3ZlcmxheQogICAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGluc2VydGVkTm9kZSk7IC8vIGJveAogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFRvcCBiYXIgTWVzc2FnZSAoRnJlZSkKICAgICAgICAgICAgLy8gPGRpdiBpZD0idml4bWdybHkiPgogICAgICAgICAgICAvLyA8ZGl2IGlkPSJtZm5oYWl5eCIgY2xhc3M9Imxrcm52Ynl0Ij4KICAgICAgICAgICAgZWxzZSBpZiAoaW5zZXJ0ZWROb2RlLm5leHRTaWJsaW5nLmlkICYmCiAgICAgICAgICAgICAgcmVJZC50ZXN0KGluc2VydGVkTm9kZS5uZXh0U2libGluZy5pZCkgJiYKICAgICAgICAgICAgICByZU1lc3NhZ2UudGVzdChpbnNlcnRlZE5vZGUuaW5uZXJIVE1MKSkgewoKICAgICAgICAgICAgICAvLyBSZW1vdmUgTWVzc2FnZQogICAgICAgICAgICAgIEFhay5kZXRlY3RlZCgiQWRVbkJsb2NrRnJlZSIpOwogICAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGluc2VydGVkTm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICAvLyBBbnRpYmxvY2sgLSBodHRwOi8vYW50aWJsb2NrLm9yZy8KICAgICAgICAgIHZhciByZU1zZ0lkID0gL15bYS16MC05XXs0LDEwfSQvaTsKICAgICAgICAgIHZhciByZVRhZzEgPSAvXihkaXZ8c3BhbnxifGl8Zm9udHxzdHJvbmd8Y2VudGVyKSQvaTsKICAgICAgICAgIHZhciByZVRhZzIgPSAvXihhfGJ8aXxzfHV8cXxwfHN0cm9uZ3xjZW50ZXIpJC9pOwogICAgICAgICAgdmFyIHJlV29yZHMxID0gL2FkIGJsb2NrZXJ8YWQgYmxvY2t8YWQtYmxvY2t8YWRibG9ja2VyfGFkLWJsb2NrZXJ8YWRibG9ja3xibG9xdWV1cnxibG9xdWVhZG9yfFdlcmJlYmxvY2tlcnxhZGJsb2NrZXJ0fCYjMTU3MDsmIzE1ODM7JiMxNTc2OyYjMTYwNDsmIzE2MDg7JiMxNjAzOyAmIzE1NzY7JiMxNjA0OyYjMTU4Nzt80LHQu9C+0LrQuNGA0L7QstGJ0LjQutC+0LwvaTsKICAgICAgICAgIHZhciByZVdvcmRzMiA9IC9rYXBhdHxkaXNhYmxlfGTDqXNhY3RpdmV6fGTDqXNhY3RpdmVyfGRlc2FjdGl2ZXp8ZGVzYWN0aXZlcnxkZXNhdGl2ZXxkZXNhY3RpdmFyfGRlc2FjdGl2ZXxkZXNhY3RpdmF8ZGVha3RpdmllcmV8ZGlzYWJpbGl0YXJlfCYjOTQ1OyYjOTYwOyYjOTQ5OyYjOTU3OyYjOTQ5OyYjOTYxOyYjOTQ3OyYjOTU5OyYjOTYwOyYjOTU5OyYjOTQzOyYjOTUxOyYjOTYzOyYjOTUxO3wmIzEwNzk7JiMxMDcyOyYjMTA4NzsmIzEwODg7JiMxMDc3OyYjMTA5NzsmIzEwNzI7JiMxMDkwOyYjMTEwMDt8w6FsbMOtdHNkIGxlfHB1YmxpY2l0w6lzfNGA0LXQutC70LDQvNC1fHZlcmhpbmRlcnR8YWR2ZXJ0fGthcGF0xLFuxLF6L2k7CgogICAgICAgICAgLy8gQW50aWJsb2NrLm9yZyAoYWxsIHZlcnNpb24pCiAgICAgICAgICBpZiAoaW5zZXJ0ZWROb2RlLnBhcmVudE5vZGUgJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmlkICYmCiAgICAgICAgICAgIGluc2VydGVkTm9kZS5zdHlsZSAmJgogICAgICAgICAgICBpbnNlcnRlZE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggJiYKICAgICAgICAgICAgaW5zZXJ0ZWROb2RlLmZpcnN0Q2hpbGQgJiYKICAgICAgICAgICAgIWluc2VydGVkTm9kZS5maXJzdENoaWxkLmlkICYmCiAgICAgICAgICAgICFpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5jbGFzc05hbWUgJiYKICAgICAgICAgICAgcmVNc2dJZC50ZXN0KGluc2VydGVkTm9kZS5pZCkgJiYKICAgICAgICAgICAgcmVUYWcxLnRlc3QoaW5zZXJ0ZWROb2RlLm5vZGVOYW1lKSAmJgogICAgICAgICAgICByZVRhZzIudGVzdChpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5ub2RlTmFtZSkpIHsKICAgICAgICAgICAgLy9BYWsubG9nKGluc2VydGVkTm9kZSk7CgogICAgICAgICAgICAvLyBLaWxsIGF1ZGlvIG1lc3NhZ2UKICAgICAgICAgICAgdmFyIGF1ZGlvID0gaW5zZXJ0ZWROb2RlLnF1ZXJ5U2VsZWN0b3IoImF1ZGlvW2xvb3BdIik7CiAgICAgICAgICAgIGlmIChhdWRpbykgewogICAgICAgICAgICAgIGF1ZGlvLnBhdXNlKCk7CiAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdBbnRpYmxvY2t7YXVkaW99Jyk7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoYXVkaW8pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEFudGlibG9jay5vcmcgdjIKICAgICAgICAgICAgLy8gZGVtbzogaHR0cDovL3Rpbnl1cmwuY29tL2gzbXd0YTQKICAgICAgICAgICAgZWxzZSBpZiAoKEFhay5hYWJzLmFibzIgJiYgaW5zZXJ0ZWROb2RlLmlkID09IEFhay5hYWJzLmFibzIpIHx8CiAgICAgICAgICAgICAgKGluc2VydGVkTm9kZS5maXJzdENoaWxkLmhhc0NoaWxkTm9kZXMoKSAmJiByZVdvcmRzMS50ZXN0KGluc2VydGVkTm9kZS5maXJzdENoaWxkLmlubmVySFRNTCkgJiYgcmVXb3JkczIudGVzdChpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5pbm5lckhUTUwpKSkgewogICAgICAgICAgICAgIEFhay5kZXRlY3RlZCgnQW50aWJsb2NrMntpbnNlcnR9Jyk7CiAgICAgICAgICAgICAgQWFrLnJlbW92ZUVsZW1lbnQoaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBBbnRpYmxvY2sub3JnIHYzCiAgICAgICAgICAgIC8vIGRlbW86IGh0dHA6Ly90aW55dXJsLmNvbS9xZWNmYTd3CiAgICAgICAgICAgIC8vIGNhc2U6IGh0dHA6Ly90aW55dXJsLmNvbS96YnJscjNhIC8qIGZvcmsgKi8KICAgICAgICAgICAgZWxzZSBpZiAoKEFhay5hYWJzLmFibzMgJiYgaW5zZXJ0ZWROb2RlLmlkID09IEFhay5hYWJzLmFibzMpIHx8CiAgICAgICAgICAgICAgKGluc2VydGVkTm9kZS5maXJzdENoaWxkLmhhc0NoaWxkTm9kZXMoKSAmJiBpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5maXJzdENoaWxkLm5vZGVOYW1lID09ICdJTUcnICYmIC9eZGF0YTppbWFnZVwvcG5nO2Jhc2U2NC8udGVzdChpbnNlcnRlZE5vZGUuZmlyc3RDaGlsZC5maXJzdENoaWxkLnNyYykpKSB7CiAgICAgICAgICAgICAgQWFrLnV3W0Fhay5hYWJzLmFibzNdID0gbnVsbDsKICAgICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0FudGlibG9jazN7aW5zZXJ0fScpOwogICAgICAgICAgICAgIEFhay5yZW1vdmVFbGVtZW50KGluc2VydGVkTm9kZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gQmV0dGVyU3RvcEFkYmxvY2sKICAgICAgICAgICAgLy8gZGVtbzogaHR0cDovL3Rpbnl1cmwuY29tL2pzOXphdDQKICAgICAgICAgICAgLy8gc291cmNlOiBodHRwOi8vcGFzdGViaW4uY29tL1lpbWtydEtCCiAgICAgICAgICAgIC8vIGlzc3VlOiBodHRwOi8vdGlueXVybC5jb20vemV0Z2J0eAogICAgICAgICAgICBlbHNlIGlmIChBYWsuYWFicy5ic2EgJiYgaW5zZXJ0ZWROb2RlLmlkID09IEFhay5hYWJzLmJzYSkgewogICAgICAgICAgICAgIEFhay51d1tBYWsuYWFicy5ic2FdID0gbnVsbDsKICAgICAgICAgICAgICBBYWsuZGV0ZWN0ZWQoJ0JldHRlclN0b3BBZGJsb2Nre2luc2VydH0nKTsKICAgICAgICAgICAgICBBYWsucmVtb3ZlRWxlbWVudChpbnNlcnRlZE5vZGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vICBNYW55IGZhbHNlIHBvc2l0aXZlCiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIC8vQWFrLnJlbW92ZUVsZW1lbnQoaW5zZXJ0ZWROb2RlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGJsb2NrRGV0ZWN0IDogZnVuY3Rpb24gKCkgewoKICAgICAgLy8gRXhjbHVkZSBkb21haW5zCiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xNDY2CiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy8xMjYzCiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dyZWFzeWZvcmsub3JnL2VuL2ZvcnVtL2Rpc2N1c3Npb24vODQyMi8KICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzk4NgogICAgICAvLyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL3JlZWsvYW50aS1hZGJsb2NrLWtpbGxlci9pc3N1ZXMvODU3CiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy82MTcKICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvZnIvZm9ydW0vZGlzY3Vzc2lvbi81NDI2CiAgICAgIC8vIGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vcmVlay9hbnRpLWFkYmxvY2sta2lsbGVyL2lzc3Vlcy80MTkKICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWVrL2FudGktYWRibG9jay1raWxsZXIvaXNzdWVzLzM3NwogICAgICB2YXIgZXhjbHVkZXMgPSBbIjM2MC5jbiIsICJhbWF6b24uIiwgImFwcGxlLmNvbSIsICJhc2suY29tIiwgImJhaWR1LmNvbSIsICJiaW5nLmNvbSIsICJidWZmZXJhcHAuY29tIiwgImNoYXRhbmdvLmNvbSIsICJjaHJvbWVhY3Rpb25zLmNvbSIsICJlYXN5aW5wbGF5Lm5ldCIsICJlYmF5LmNvbSIsICJmYWNlYm9vay5jb20iLCAiZmxhdHRyLmNvbSIsICJmbGlja3IuY29tIiwgImdoYWNrcy5uZXQiLCAiZ29vZ2xlLiIsICJpbWRiLmNvbSIsICJpbWdib3guY29tIiwgImltZ3VyLmNvbSIsICJpbnN0YWdyYW0uY29tIiwgImpzYmluLmNvbSIsICJqc2ZpZGRsZS5uZXQiLCAibGlua2VkaW4uY29tIiwgImxpdmUuY29tIiwgIm1haWwucnUiLCAibWljcm9zb2Z0LmNvbSIsICJtc24uY29tIiwgInBheXBhbC5jb20iLCAicGludGVyZXN0LmNvbSIsICJwcmVsb2FkZXJzLm5ldCIsICJxcS5jb20iLCAicmVkZGl0LmNvbSIsICJzdGFja292ZXJmbG93LmNvbSIsICJ0YW1wZXJtb25rZXkubmV0IiwgInR3aXR0ZXIuY29tIiwgInZpbWVvLmNvbSIsICJ3aWtpcGVkaWEub3JnIiwgInczc2Nob29scy5jb20iLCAieWFob28uIiwgInlhbmRleC5ydSIsICJ5b3V0dS5iZSIsICJ5b3V0dWJlLmNvbSIsICJ4ZW12dHYubmV0IiwgInZvZC5wbCIsICJhZ2FyLmlvIiwgInBhbmRvb24uaW5mbyIsICJmc2Yub3JnIiwgImFkYmxvY2twbHVzLm9yZyIsICJwbG5rci5jbyIsICJleGFjdHRhcmdldC5jb20iLCAiZG9sbGRpdmluZS5jb20iLCAicG9wbWVjaC5ydSIsICJjYWxtLmNvbSJdOwogICAgICB2YXIgaG9zdCA9IGxvY2F0aW9uLmhvc3Q7CiAgICAgIHZhciBleGNsdWRlZCA9IGZhbHNlOwogICAgICBleGNsdWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChleGNsdWRlKSB7CiAgICAgICAgaWYgKG5ldyBSZWdFeHAoZXhjbHVkZSkudGVzdChob3N0KSkgewogICAgICAgICAgZXhjbHVkZWQgPSB0cnVlOwogICAgICAgICAgaWYgKEFhay5vcHRzLmxvZ0V4Y2x1ZGVkKSB7CiAgICAgICAgICAgIEFhay53YXJuKCdFeGNsdWRlZCcpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CgogICAgICAvLyBJbmNsdWRlIGRvbWFpbnMKICAgICAgLy8gSXNFdmVudHVwcG9ydGVkOiBodHRwOi8vdGlueXVybC5jb20vb2VlejhjNwogICAgICBpZiAoIWV4Y2x1ZGVkKSB7CgogICAgICAgIHZhciBoYW5kbGVyRXZlbnRzID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIHJ1bGUgPSBBYWsucnVsZXNbbmFtZV07CgogICAgICAgICAgcnVsZS5ob3N0LmZvckVhY2goZnVuY3Rpb24gKGhvc3QpIHsKICAgICAgICAgICAgLy8gQ2hlY2sgaG9zdAogICAgICAgICAgICBpZiAobmV3IFJlZ0V4cChob3N0KS50ZXN0KGxvY2F0aW9uLmhvc3QpKSB7CgogICAgICAgICAgICAgIC8vIE5hdGl2ZSBtb2RlCiAgICAgICAgICAgICAgaWYgKCFBYWsudXNlR00gJiYgQWFrLmlzVG9wZnJhbWUpIHsKICAgICAgICAgICAgICAgIEFhay53YXJuKCdSdW4gbmF0aXZlbHkuJyk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAvLyBMb2cgcnVsZSB1c2VkCiAgICAgICAgICAgICAgaWYgKHJ1bGUuaG9zdFswXSAhPSAnLio/JykgewogICAgICAgICAgICAgICAgQWFrLmRldGVjdGVkKCdydWxlJywgcnVsZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIAogICAgICAgICAgICAgIC8vIEJlZm9yZSBET00gbG9hZAogICAgICAgICAgICAgIGlmIChydWxlLm9uU3RhcnQpIHsKICAgICAgICAgICAgICAgIHJ1bGUub25TdGFydCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBPbiBhbGwgc3RhdGVtZW50cwogICAgICAgICAgICAgIGlmIChydWxlLm9uQWx3YXlzKSB7CiAgICAgICAgICAgICAgICBydWxlLm9uQWx3YXlzKCk7IC8vIHN0YXJ0CiAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICdET01Db250ZW50TG9hZGVkJywgcnVsZS5vbkFsd2F5cyk7IC8vIGlkbGUKICAgICAgICAgICAgICAgIEFhay5vbkV2ZW50KHdpbmRvdywgJ2xvYWQnLCBydWxlLm9uQWx3YXlzKTsgLy8gZW5kCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIC8vIEJlZm9yZSBTY3JpcHQgRXhlY3V0ZWQKICAgICAgICAgICAgICBpZiAocnVsZS5vbkJlZm9yZVNjcmlwdCkgewoKICAgICAgICAgICAgICAgIC8vIG9wdGlvbnM6IGNvbnRhaW5zLCBzZWFyY2gsIHJlcGxhY2UsIG92ZXJyaWRlLCByZW1vdmUsIGV4dGVybmFsCiAgICAgICAgICAgICAgICB2YXIgb3B0aW9uc0JlZm9yZVNjcmlwdCA9IHJ1bGUub25CZWZvcmVTY3JpcHQoKTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc0JlZm9yZVNjcmlwdCA9PSAib2JqZWN0IikgewoKICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXJCZWZvcmVTY3JpcHQgPSBmdW5jdGlvbiAoZSwgb3B0aW9ucykgewogICAgICAgICAgICAgICAgICAgIHZhciBpc0V2ZW50ID0gZSBpbnN0YW5jZW9mIHdpbmRvdy5FdmVudDsKICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc1NjcmlwdCA9IChlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpIHx8IGU7CgogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobykgeyAvLyBoYXNBdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBvLmV4dGVybmFsID8gJ3NyYycgOiAnaW5uZXJIVE1MJzsKICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBuZXcgUmVnRXhwKG8uY29udGFpbnMsIG8uZmxhZ3MgfHwgJycpOwoKICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzU2NyaXB0W3NyY10gJiYgdGhpc1NjcmlwdFtzcmNdLmxlbmd0aCAmJiBzZWFyY2gudGVzdCh0aGlzU2NyaXB0W3NyY10pKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIHNjcmlwdCBleGVjdXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXZlbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBzY3JpcHQKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXNTY3JpcHQucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1NjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBhIHBhcnQgb2YgdGhlIHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoby5yZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2NyaXB0W3NyY10gPSB0aGlzU2NyaXB0W3NyY10ucmVwbGFjZShzZWFyY2gsIG8ucmVwbGFjZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChuZXdTY3JpcHQsIHRoaXNTY3JpcHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9IC8vIE92ZXJyaWRlIHNjcmlwdAogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChvLm92ZXJyaWRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U2NyaXB0W3NyY10gPSBvLm92ZXJyaWRlOwogICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQobmV3U2NyaXB0LCB0aGlzU2NyaXB0KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBSZW1vdmUgc2NyaXB0CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG8ucmVtb3ZlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXNTY3JpcHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoby5kZXRlY3RlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIEFhay5kZXRlY3RlZChvLmRldGVjdGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQkJCQkJCQoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFhay5vcHRzLmxvZ0ludGVyY2VwdGVkU2NyaXB0cykgewogICAgICAgICAgICAgICAgICAgICAgICAgIEFhay5sb2coc3JjLCBvLCB0aGlzU2NyaXB0LCBuZXdTY3JpcHQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgICAvLyBCcm93c2VyIHN1cHBvcnRpbmcgZXZlbnQgYmVmb3Jlc2NyaXB0ZXhlY3V0ZQogICAgICAgICAgICAgICAgICBpZiAoJ29uYmVmb3Jlc2NyaXB0ZXhlY3V0ZScgaW4gZG9jdW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICdiZWZvcmVzY3JpcHRleGVjdXRlJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJCZWZvcmVTY3JpcHQoZSwgb3B0aW9uc0JlZm9yZVNjcmlwdCk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIEJyb3dzZXIgbm90IHN1cHBvdGluZyBiZWZvcmVzY3JpcHRleGVjdXRlCgogICAgICAgICAgICAgICAgICAgIHZhciBsb2FkRG9jdW1lbnQgPSBmdW5jdGlvbiAob3B0aW9uc0JlZm9yZVNjcmlwdCkgewogICAgICAgICAgICAgICAgICAgICAgLy9pZiAoZG9jdW1lbnQucmVmZXJyZXIgPT09ICcnKQogICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm47CgogICAgICAgICAgICAgICAgICAgICAgQWFrLndhcm4oJ29uYmVmb3Jlc2NyaXB0LWNvbXBhdGlibGUnKTsKCiAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGxvYWRpbmcKICAgICAgICAgICAgICAgICAgICAgIEFhay5hZGRTY3JpcHQoJ3dpbmRvdy5zdG9wKCk7Jyk7IC8vIGNocm9tZS9vcGVyYQogICAgICAgICAgICAgICAgICAgICAgLy9BYWsuYWRkU2NyaXB0KCdkb2N1bWVudC5vcGVuKCk7Jyk7IC8vIGZpcmVmb3gKCiAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgY29udGVudAogICAgICAgICAgICAgICAgICAgICAgQWFrLnJlcXVlc3QoewogICAgICAgICAgICAgICAgICAgICAgICB1cmwgOiBsb2NhdGlvbi5ocmVmLAogICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzIDogewogICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVyIiA6IGRvY3VtZW50LnJlZmVycmVyCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIG9ubG9hZCA6IGZ1bmN0aW9uIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IHJlc3VsdC5yZXNwb25zZVRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaHRtbCwgInRleHQvaHRtbCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHRzID0gZG9jLnNjcmlwdHM7CgogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoaXNTY3JpcHQgPSBzY3JpcHRzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlckJlZm9yZVNjcmlwdCh0aGlzU2NyaXB0LCBvcHRpb25zQmVmb3JlU2NyaXB0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0ZSBuZXcgY29udGVudCB0byBIVE1MIGRvY3VtZW50OgogICAgICAgICAgICAgICAgICAgICAgICAgIEFhay5hZGRTY3JpcHQoJ2RvY3VtZW50Lm9wZW4oKTsgZG9jdW1lbnQud3JpdGUodW5lc2NhcGUoIicgKyB3aW5kb3cuZXNjYXBlKGh0bWwpICsgJyIpKTsgZG9jdW1lbnQuY2xvc2UoKTsnKTsgLy8gY2hyb21lL29wZXJhCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BYWsuYWRkU2NyaXB0KCdkb2N1bWVudC53cml0ZSh1bmVzY2FwZSgiJyArIGVzY2FwZShodG1sKSArICciKSk7IGRvY3VtZW50LmNsb3NlKCk7Jyk7IC8vIGZpcmVmb3gKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICBsb2FkRG9jdW1lbnQob3B0aW9uc0JlZm9yZVNjcmlwdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IC8vIEFmdGVyIFNjcmlwdCBFeGVjdXRlZAogICAgICAgICAgICAgIGlmIChydWxlLm9uQWZ0ZXJTY3JpcHQpIHsKICAgICAgICAgICAgICAgIGlmICgnb25hZnRlcnNjcmlwdGV4ZWN1dGUnIGluIGRvY3VtZW50KSB7IC8vIE1vemlsbGEgRmlyZWZveAogICAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICdhZnRlcnNjcmlwdGV4ZWN1dGUnLCBydWxlLm9uQWZ0ZXJTY3JpcHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBXaGVuIERPTSBMb2FkCiAgICAgICAgICAgICAgaWYgKHJ1bGUub25JZGxlKSB7CiAgICAgICAgICAgICAgICBpZiAoIUFhay51c2VHTSkgeyAvLyBOYXRpdmUgbW9kZQogICAgICAgICAgICAgICAgICBydWxlLm9uSWRsZSgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgLy9BYWsub25FdmVudCh3aW5kb3csICdET01Db250ZW50TG9hZGVkJywgcnVsZS5vbklkbGUpOwogICAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICdET01Db250ZW50TG9hZGVkJywgcnVsZS5vbklkbGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBXaGVuIFdpbmRvdyBMb2FkCiAgICAgICAgICAgICAgaWYgKHJ1bGUub25FbmQpIHsKICAgICAgICAgICAgICAgIGlmICghQWFrLnVzZUdNKSB7IC8vIE5hdGl2ZSBtb2RlCiAgICAgICAgICAgICAgICAgIHJ1bGUub25FbmQoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIEFhay5vbkV2ZW50KHdpbmRvdywgJ2xvYWQnLCBydWxlLm9uRW5kKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gV2hlbiBET00gQXR0ck1vZGlmaWVkCiAgICAgICAgICAgICAgaWYgKHJ1bGUub25BdHRyTW9kaWZpZWQpIHsKICAgICAgICAgICAgICAgIEFhay5vbkV2ZW50KHdpbmRvdywgJ0RPTUF0dHJNb2RpZmllZCcsIHJ1bGUub25BdHRyTW9kaWZpZWQsIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gV2hlbiBET00gU3VidHJlZU1vZGlmaWVkCiAgICAgICAgICAgICAgaWYgKHJ1bGUub25TdWJ0cmVlTW9kaWZpZWQpIHsKICAgICAgICAgICAgICAgIEFhay5vbkV2ZW50KHdpbmRvdywgJ0RPTVN1YnRyZWVNb2RpZmllZCcsIHJ1bGUub25TdWJ0cmVlTW9kaWZpZWQsIGZhbHNlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gV2hlbiBET00gRWxlbWVudHMgYXJlIEluc2VydGVkIGluIERvY3VtZW50CiAgICAgICAgICAgICAgaWYgKHJ1bGUub25JbnNlcnQpIHsKCiAgICAgICAgICAgICAgICAvLyBNdXRhdGlvbiBPYnNlcnZlcgogICAgICAgICAgICAgICAgLy8gZG9jOiBodHRwOi8vdGlueXVybC5jb20vbXh4emVlNAogICAgICAgICAgICAgICAgLy8gc3VwcG9ydDogaHR0cDovL3Rpbnl1cmwuY29tL25lcG43dnkKICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgIT0gJ3VuZGVmaW5lZCcgfHwKICAgICAgICAgICAgICAgICAgdHlwZW9mIFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIgIT0gJ3VuZGVmaW5lZCcpIHsKCiAgICAgICAgICAgICAgICAgIC8vIE11dGF0aW9uIE9ic2VydmVyCiAgICAgICAgICAgICAgICAgIHZhciBNdXRhdGlvbk9ic2VydmVyMSA9IHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyIHx8IHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyOwoKICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIG9ic2VydmVyIGluc3RhbmNlCiAgICAgICAgICAgICAgICAgIHZhciBvYnMxID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIxKGZ1bmN0aW9uIChtdXRhdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBzYWZlbHkgdXNlIGBmb3JFYWNoYCBiZWNhdXNlIHdlIGFscmVhZHkgdXNlIG11dGF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAvLyBvYnNlcnZlcnMgdGhhdCBhcmUgbW9yZSByZWNlbnQgdGhhbiBgZm9yRWFjaGAuIChzb3VyY2U6IE1ETikKICAgICAgICAgICAgICAgICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSB3YW50IG9ubHkgYWRkZWQgbm9kZXMKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChtdXRhdGlvbi5hZGRlZE5vZGVzLCBmdW5jdGlvbiAoYWRkZWROb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQWFrLm9wdHMubG9nSW5zZXJ0ZWROb2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYWsubG9nKGFkZGVkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlLm9uSW5zZXJ0KGFkZGVkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAvLyBPYnNlcnZlcgogICAgICAgICAgICAgICAgICBvYnMxLm9ic2VydmUoZG9jdW1lbnQsIHsKICAgICAgICAgICAgICAgICAgICBjaGlsZExpc3QgOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHN1YnRyZWUgOiB0cnVlCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8gTXV0YXRpb24gRXZlbnRzIChBbHRlcm5hdGl2ZSBTb2x1dGlvbikKICAgICAgICAgICAgICAgIC8vIGRvYzogaHR0cDovL3Rpbnl1cmwuY29tL29wOTVyZnkKICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICBBYWsub25FdmVudCh3aW5kb3csICJET01Ob2RlSW5zZXJ0ZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChBYWsub3B0cy5sb2dJbnNlcnRlZE5vZGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICBBYWsubG9nKGUudGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcnVsZS5vbkluc2VydChlLnRhcmdldCk7CiAgICAgICAgICAgICAgICAgIH0sIGZhbHNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gV2hlbiBET00gRWxlbWVudHMgYXJlIFJlbW92ZWQgaW4gRG9jdW1lbnQKICAgICAgICAgICAgICBpZiAocnVsZS5vblJlbW92ZSkgewoKICAgICAgICAgICAgICAgIC8vIE11dGF0aW9uIE9ic2VydmVyCiAgICAgICAgICAgICAgICAvLyBkb2M6IGh0dHA6Ly90aW55dXJsLmNvbS9teHh6ZWU0CiAgICAgICAgICAgICAgICAvLyBzdXBwb3J0OiBodHRwOi8vdGlueXVybC5jb20vbmVwbjd2eQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciAhPSAndW5kZWZpbmVkJyB8fAogICAgICAgICAgICAgICAgICB0eXBlb2YgV2ViS2l0TXV0YXRpb25PYnNlcnZlciAhPSAndW5kZWZpbmVkJykgewoKICAgICAgICAgICAgICAgICAgLy8gTXV0YXRpb24gT2JzZXJ2ZXIKICAgICAgICAgICAgICAgICAgdmFyIE11dGF0aW9uT2JzZXJ2ZXIyID0gd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIgfHwgd2luZG93LldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7CgogICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UKICAgICAgICAgICAgICAgICAgdmFyIG9iczIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcjIoZnVuY3Rpb24gKG11dGF0aW9ucykgewogICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHNhZmVseSB1c2UgYGZvckVhY2hgIGJlY2F1c2Ugd2UgYWxyZWFkeSB1c2UgbXV0YXRpb24KICAgICAgICAgICAgICAgICAgICAgIC8vIG9ic2VydmVycyB0aGF0IGFyZSBtb3JlIHJlY2VudCB0aGFuIGBmb3JFYWNoYC4gKHNvdXJjZTogTUROKQogICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goZnVuY3Rpb24gKG11dGF0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgb25seSByZW1vdmVkIG5vZGVzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChtdXRhdGlvbi5yZW1vdmVkTm9kZXMsIGZ1bmN0aW9uIChyZW1vdmVkTm9kZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFhay5vcHRzLmxvZ1JlbW92ZWROb2RlcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBYWsubG9nKHJlbW92ZWROb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUub25SZW1vdmUocmVtb3ZlZE5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgLy8gT2JzZXJ2ZXIKICAgICAgICAgICAgICAgICAgb2JzMi5vYnNlcnZlKGRvY3VtZW50LCB7CiAgICAgICAgICAgICAgICAgICAgY2hpbGRMaXN0IDogdHJ1ZSwKICAgICAgICAgICAgICAgICAgICBzdWJ0cmVlIDogdHJ1ZQogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIE11dGF0aW9uIEV2ZW50cyAoQWx0ZXJuYXRpdmUgU29sdXRpb24pCiAgICAgICAgICAgICAgICAvLyBkb2M6IGh0dHA6Ly90aW55dXJsLmNvbS9vcDk1cmZ5CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgQWFrLm9uRXZlbnQod2luZG93LCAiRE9NTm9kZVJlbW92ZWQiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIGlmIChBYWsub3B0cy5sb2dSZW1vdmVkTm9kZXMpIHsKICAgICAgICAgICAgICAgICAgICAgIEFhay5sb2coZS50YXJnZXQpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBydWxlLm9uUmVtb3ZlKGUudGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgfSwgZmFsc2UpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAKICAgICAgICAgICAgICAvLyBBYWsgRXZlbnRzCiAgICAgICAgICAgICAgQWFrLm9uRXZlbnQod2luZG93LCAnZGV0ZWN0ZWQnLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgQWFrLmluZm8oWydBbnRpQWRiS2lsbGVyJywgQWFrLmlzVG9wZnJhbWUgPyAndG9wZnJhbWUnIDogJ3N1YmZyYW1lJywgbG9jYXRpb24uaG9zdCwgZS5kZXRhaWxdKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgLy8gQXBwbHkgcnVsZXMKICAgICAgICBmb3IgKHZhciBuYW1lIGluIEFhay5ydWxlcykgewogICAgICAgICAgaWYgKEFhay5ydWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewogICAgICAgICAgICBoYW5kbGVyRXZlbnRzKEFhaywgbmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKCiAgQWFrLmluaXRpYWxpemUoKTsKCn0pKHdpbmRvdyk7"},{"name":"Fuck FuckAdBlock","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1506941148438,"data":{}},"enabled":true,"position":7,"file_url":"https://github.com/Mechazawa/FuckFuckAdblock/raw/master/FuckFuckAdBlock.user.js","uuid":"e268a8f8-788f-4fcd-9546-dd76fc2df327","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgICBGdWNrIEZ1Y2tBZEJsb2NrCi8vIEBhdXRob3IgICAgICAgICAgTWVjaGF6YXdhCi8vIEBuYW1lc3BhY2UgICAgICAgTWVjaGF6YXdhCi8vIEBkZXNjcmlwdGlvbiAgICAgQWN0cyBsaWtlIEZ1Y2tBZEJsb2NrLmpzIGJ1dCBhbHdheXMgc2F5cyB0aGF0IG5vIGFkYmxvY2sgd2FzIGRldGVjdGVkLgovLyBAbGljZW5zZSAgICAgICAgIFdURlBsCi8vIEB2ZXJzaW9uICAgICAgICAgNwovLyBAaW5jbHVkZSAgICAgICAgICoKLy8gQHJ1bi1hdCAgICAgICAgICBkb2N1bWVudC1zdGFydAovLyBAdXBkYXRlVVJMICAgICAgIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9NZWNoYXphd2EvRnVja0Z1Y2tBZGJsb2NrL21hc3Rlci9GdWNrRnVja0FkQmxvY2sudXNlci5qcwovLyBAZ3JhbnQgICAgICAgICAgIG5vbmUKLy8gPT0vVXNlclNjcmlwdD09CgoKKGZ1bmN0aW9uKHdpbmRvdykgewogICAgdmFyIGRlYnVnID0gZmFsc2U7CgogICAgdmFyIEZ1Y2tBZEJsb2NrID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgIGlmKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkKICAgICAgICAgICAgdGhpcy5zZXRPcHRpb24ob3B0aW9ucyk7CgogICAgICAgIHZhciBzZWxmID0gdGhpczsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYoc2VsZi5fb3B0aW9ucy5jaGVja09uTG9hZCA9PT0gdHJ1ZSkKICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKGZhbHNlKTsKICAgICAgICAgICAgfSwgMSk7CiAgICAgICAgfSwgZmFsc2UpOwoKICAgICAgICAvLyBob3RmaXgKICAgICAgICB0aGlzLmRlYnVnID0gewogICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKHgpeyBkZWJ1ZyA9ICEheDsgcmV0dXJuIHNlbGY7fSwKICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbigpeyByZXR1cm4gZGVidWc7IH0KICAgICAgICB9OwogICAgfTsKCiAgICBGdWNrQWRCbG9jay5wcm90b3R5cGUgPSB7CiAgICAgICAgc2V0T3B0aW9uIDogZnVuY3Rpb24ob3B0aW9ucywgdmFsdWUpIHsKICAgICAgICAgICAgaWYodmFsdWUgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdmFyIGtleSA9IG9wdGlvbnM7CiAgICAgICAgICAgICAgICBvcHRpb25zID0ge307CiAgICAgICAgICAgICAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yKHZhciBvcHRpb24gaW4gb3B0aW9ucykKICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIF9vcHRpb25zIDogewogICAgICAgICAgICBjaGVja09uTG9hZDogICAgdHJ1ZSwKICAgICAgICAgICAgcmVzZXRPbkVuZDogICAgIHRydWUsCiAgICAgICAgfSwKCiAgICAgICAgX3ZhciA6IHsKICAgICAgICAgICAgdHJpZ2dlcnM6IFtdCiAgICAgICAgfSwKCiAgICAgICAgY2hlY2sgOiBmdW5jdGlvbihpZ25vcmUpIHsKICAgICAgICAgICAgdGhpcy5lbWl0RXZlbnQoZmFsc2UpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9LAoKICAgICAgICBjbGVhckV2ZW50IDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMuX3Zhci50cmlnZ2VycyA9IFtdOwogICAgICAgIH0sCgogICAgICAgIGVtaXRFdmVudCA6IGZ1bmN0aW9uKGRldGVjdGVkKSB7CiAgICAgICAgICAgIGlmKGRldGVjdGVkID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdmFyIGZucyA9IHRoaXMuX3Zhci50cmlnZ2VyczsKICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSArPSAxKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZuc1tpXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7IGZuc1tpXSgpOyB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZih0aGlzLl9vcHRpb25zLnJlc2V0T25FbmQgPT09IHRydWUpCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGVhckV2ZW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgb24gOiBmdW5jdGlvbihkZXRlY3RlZCwgZm4pIHsKICAgICAgICAgICAgaWYoZGV0ZWN0ZWQgPT09IGZhbHNlKQogICAgICAgICAgICAgICAgdGhpcy5fdmFyLnRyaWdnZXJzLnB1c2goZm4pOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBvbkRldGVjdGVkIDogZnVuY3Rpb24oZm4pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgb25Ob3REZXRlY3RlZCA6IGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uKGZhbHNlLCBmbik7CiAgICAgICAgfQogICAgfTsKCiAgICB2YXIgZnVjayA9IG5ldyBGdWNrQWRCbG9jaygpOwogICAgZm9yICh2YXIgZmllbGQgaW4gZnVjaykgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdWNrLCBmaWVsZCwge3ZhbHVlOiBmdWNrW2ZpZWxkXSwgY29uZmlndXJhYmxlOiBmYWxzZX0pOwogICAgfQogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2luZG93LCB7ZnVja0FkQmxvY2sgOiB7IHZhbHVlOiBmdWNrLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogZmFsc2UgfX0pOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2luZG93LCB7YmxvY2tBZEJsb2NrIDogeyB2YWx1ZTogZnVjaywgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IGZhbHNlIH19KTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdpbmRvdywge3NuaWZmQWRCbG9jayA6IHsgdmFsdWU6IGZ1Y2ssIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiBmYWxzZSB9fSk7CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3aW5kb3csIHtkdWNrQWRCbG9jayA6IHsgdmFsdWU6IGZ1Y2ssIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiBmYWxzZSB9fSk7IAogICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2luZG93LCB7RnVja0Z1Y2tGdWNrQWRCbG9jayA6IHsgdmFsdWU6IGZ1Y2ssIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiBmYWxzZSB9fSk7Cn0pKHdpbmRvdyk7Cg=="},{"name":"Google Hit Hider by Domain (Search Filter / Block Sites)","options":{"check_for_updates":true,"compat_foreach":false,"compat_metadata":false,"compat_prototypes":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":["http*://www.google.com/recaptcha/*","https://www.startpage.com/*/ads?*"],"orig_includes":["http*://www.google.*/*","http*://www.google.co*.*/*","http*://news.google.*/*","http*://encrypted.google.*/*","http*://startpage.com/*","http*://*.startpage.com/*","http*://duckduckgo.com/*","http*://start.duckduckgo.com/*","http*://safe.duckduckgo.com/*","http*://3g2upl4pq6kufc4m.onion/*","http*://www.bing.com/*","http*://*search.yahoo.com/*","http*://search.yahoo.co.jp/*","http*://www.yandex.com/*","http*://yandex.com/*","http*://searx.*/*","http*://www.qwant.com/*","http*://www.qwantjunior.com/*","http*://www.baidu.com/*","https://www.ecosia.org/search*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1638798126723,"data":{"ghhprefs":"s{\"shownotc\":[\"N\",\"Show hit notices(Y|N)\"],\"mngpaneopen\":[\"Y-N\",\"Persistence enabled(Y|N),Pane was open(Y|N),Last tab number(1-4)\"],\"mngbtnstyle\":[\"both-ifrN-R-P-Y-H\",\"Display Manage Hiding button and Block buttons(mng|blk|both),In iframes(ifrN|ifrY),Position(R,T,B),Block button display(P,M),Block button tooltips(Y|N), Block button position(H|C)\"],\"addtolistpos\":[\"sort\",\"Where to add new hits to block lists(end|top|sort)\"],\"aggressiveblock\":[\"none\",\"Which domains to default to shorter form(none|all|www)\"],\"usemutation\":[\"on-Y\",\"Listen for mutation events(on|off),Use DOM4 Mutation Observer(Y|N)\"],\"oneclick\":[\"Y-N\",\"One-click blocking(Y|N),Goes to Perma-ban(Y|N)\"],\"runbeta\":[\"N\",\"Enable incompletely tested features (Y|N)\"],\"reserved2\":[\"X\",\"Y\"]}","hideyhosts":"s|0daymusic.org:t|aminoapps.com:t|animeron.org:t|bqhv.peres-testeurs.fr:t|codepen.io:t|curved.de:t|de-film.com:t|de.toluna.com:t|de.vapormo.com:t|dersnotherinab.ml:t|digit-markt.com:t|dinoflix.de:t|dpqf.francedesign-international.fr:t|enginehour.com:t|example.com:t|formayorchavo.com:t|forum.frag-mutti.de:t|heimporno.com:t|hiphopforum.sk:t|howtodeletemy.com:t|icudelirium.nl:t|iguk.jeremw.fr:t|ilikevideo24.com:t|kaminarisubs.net:t|keekoom.com:t|keepvid.com:t|lensthefipho.ml:t|lifehacker.com:t|me.me:t|movie-blog.mrunlock.space:t|movie-blog.unblockproject.icu:t|movieworld.unblocksite.in:t|oltj.francasaisne.fr:t|one-hit01.wixsite.com:t|paradacreativa.es:t|patisserie-conte31.fr:t|payment-mts.site:t|popart-designs.fr:t|share-online-premium.biz:t|site1go.com:t|smallbusiness.chron.com:t|suesswaren.com:t|tipps.computerbild.de:t|trackallstatus.com:t|wp-kurs.com:t|ww5.soul-anime.us:t|www.0dayvinyls.org:t|www.anime2you.de:t|www.autobild.de:t|www.bierbasis.de:t|www.clip.fail:t|www.down.io:t|www.fansub-info.de:t|www.filediva.com:t|www.ftphd.net:t|www.qobuz.com:t|www.staidws.ga:t|www.startfenster.de:t|www.stlfinder.com:t|www.torrentkitty.tv:t|www.vlc.de:t|xbmp.sp-ressources.fr:t|younglady.live:t|yus4m7q2.dns04.com:t|zeag.locationpralognan.fr:t|zippydownload.co.pl:t|"}},"enabled":true,"position":8,"file_url":"https://greasyfork.org/scripts/1682-google-hit-hider-by-domain-search-filter-block-sites/code/Google%20Hit%20Hider%20by%20Domain%20(Search%20Filter%20%20Block%20Sites).user.js","uuid":"54959cac-d512-4d4f-894c-775dd87fffb7","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIEdvb2dsZSBIaXQgSGlkZXIgYnkgRG9tYWluIChTZWFyY2ggRmlsdGVyIC8gQmxvY2sgU2l0ZXMpCi8vIEBhdXRob3IgICAgICBKZWZmZXJzb24gImpzY2hlcjIwMDAiIFNjaGVyCi8vIEBuYW1lc3BhY2UgICBKZWZmZXJzb25TY2hlcgovLyBAdmVyc2lvbiAgICAgMi4yLjIKLy8gQGNvcHlyaWdodCAgIENvcHlyaWdodCAyMDIyIEplZmZlcnNvbiBTY2hlcgovLyBAbGljZW5zZSAgICAgQlNELTMtQ2xhdXNlCi8vIEBkZXNjcmlwdGlvbiBCbG9jayB1bndhbnRlZCBzaXRlcyBmcm9tIHlvdXIgR29vZ2xlLCBEdWNrRHVja0dvLCBTdGFydHBhZ2UuY29tLCBCaW5nIGFuZCBZYWhvbyBzZWFyY2ggcmVzdWx0cy4gdjIuMi4yIDIwMjItMDEtMjIKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vd3d3Lmdvb2dsZS4qLyoKLy8gQGV4Y2x1ZGUgaHR0cCo6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly93d3cuZ29vZ2xlLmNvKi4qLyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vbmV3cy5nb29nbGUuKi8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL2VuY3J5cHRlZC5nb29nbGUuKi8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL3N0YXJ0cGFnZS5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly8qLnN0YXJ0cGFnZS5jb20vKgovLyBAZXhjbHVkZSBodHRwczovL3d3dy5zdGFydHBhZ2UuY29tLyovYWRzPyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vZHVja2R1Y2tnby5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly9zdGFydC5kdWNrZHVja2dvLmNvbS8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL3NhZmUuZHVja2R1Y2tnby5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly8zZzJ1cGw0cHE2a3VmYzRtLm9uaW9uLyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vd3d3LmJpbmcuY29tLyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vKnNlYXJjaC55YWhvby5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly9zZWFyY2gueWFob28uY28uanAvKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly93d3cueWFuZGV4LmNvbS8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL3lhbmRleC5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly9zZWFyeC4qLyoKLy8gQGluY2x1ZGUgICAgIGh0dHAqOi8vd3d3LnF3YW50LmNvbS8qCi8vIEBpbmNsdWRlICAgICBodHRwKjovL3d3dy5xd2FudGp1bmlvci5jb20vKgovLyBAaW5jbHVkZSAgICAgaHR0cCo6Ly93d3cuYmFpZHUuY29tLyoKLy8gQGluY2x1ZGUgICAgIGh0dHBzOi8vd3d3LmVjb3NpYS5vcmcvc2VhcmNoKgovLyBAZ3JhbnQgICAgICAgR01fZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgIEdNLmdldFZhbHVlCi8vIEBncmFudCAgICAgICBHTV9zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgR00uc2V0VmFsdWUKLy8gQGdyYW50ICAgICAgIEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQKLy8gQGdyYW50ICAgICAgIEdNX2RlbGV0ZVZhbHVlCi8vIEBncmFudCAgICAgICBHTS5kZWxldGVWYWx1ZQovLyBAZ3JhbnQgICAgICAgR01fZ2V0UmVzb3VyY2VVUkwKLy8gQGdyYW50ICAgICAgIEdNLmdldFJlc291cmNlVXJsCi8vIEByZXNvdXJjZSAgICBteWNvbiBodHRwczovL3d3dy5qZWZmZXJzb25zY2hlci5jb20vZ20vc3JjL2dmcmstR0hIYkQtdmVyMjIyLnBuZwovLyA9PS9Vc2VyU2NyaXB0PT0KdmFyIHNjcmlwdF9hYm91dCA9ICJodHRwczovL2dyZWFzeWZvcmsub3JnL3NjcmlwdHMvMTY4Mi1nb29nbGUtaGl0LWhpZGVyLWJ5LWRvbWFpbi1zZWFyY2gtZmlsdGVyLWJsb2NrLXNpdGVzIjsKLyoKQ29weXJpZ2h0IChjKSAyMDIyIEplZmZlcnNvbiBTY2hlci4KClJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldCBhbmQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uOgoKMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgoKMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgoKMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKi8KCnZhciBHTTQgPSAodHlwZW9mIEdNLmdldFZhbHVlID09PSAidW5kZWZpbmVkIikgPyBmYWxzZSA6IHRydWU7CmZ1bmN0aW9uIEdISGJEX2FkZFN0eWxlKHR4dCl7CiAgICB2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpOwogICAgcy5jbGFzc05hbWUgPSAnR0hIYkRjc3MnOwogICAgcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHQpKTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocyk7Cn0KdmFyIGlzY2ggPSBmYWxzZTsKZnVuY3Rpb24gaW5qZWN0QmFzZUNTUygpewogICAgLy8gPT0gPT0gPT0gVG8gb3ZlcnJpZGUgdGhlIHN0eWxlIG9mIHRoZSBzY3JpcHQncyBidXR0b25zIGFuZCBwYW5lcywgdXNlIHRoZSBjdXN0b20gc3R5bGUgZmVhdHVyZSA9PSA9PSA9PQogICAgR0hIYkRfYWRkU3R5bGUoImRpdi5naGhpZGVye2NvbG9yOiM4ODg7fSBkaXYuZ2hoaWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7fSAiICsKICAgICAgICAgICAgICAgICAgICJidXR0b24uZ2hoaWRlcntjb2xvcjojNTU1O2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYztmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc2l6ZTowLjg1ZW07bGluZS1oZWlnaHQ6MS4yZW07bWFyZ2luOmF1dG8gMnB4O2JvcmRlcjoxcHggc29saWQgI2NjYztib3JkZXItcmFkaXVzOjRweDtwYWRkaW5nOjJweCAzcHg7fSBoMz5idXR0b24uZ2hoaWRlcntmb250LXNpemU6MC43NWVtO30gIiArCiAgICAgICAgICAgICAgICAgICAiYnV0dG9uLmdoaGlkZXI6aG92ZXJ7Y29sb3I6IzAwMDtiYWNrZ3JvdW5kOiNmZjg7fSAuZ2hoMXRpbWV7YmFja2dyb3VuZDojZWVlICFpbXBvcnRhbnQ7fSAuZ2hoZG5vbmV7ZGlzcGxheTpub25lICFpbXBvcnRhbnQ7fSAiICsKICAgICAgICAgICAgICAgICAgICIuZ2hocGFuZXtwb3NpdGlvbjphYnNvbHV0ZTtjb2xvcjojMzMzO2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYztib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzowLjI1ZW0gMS41ZW07Zm9udC1zaXplOjEzcHg7ZGlzcGxheTpub25lfSAiICsKICAgICAgICAgICAgICAgICAgICIjZ2hoc2l0ZWxpc3QsICNnaGhwYmFubGlzdHtiYWNrZ3JvdW5kOiNmZmY7bGlzdC1zdHlsZS10eXBlOm5vbmU7cGFkZGluZzowO21hcmdpbjowO30gIiArCiAgICAgICAgICAgICAgICAgICAiI2doaHNpdGVsaXN0IGxpLCNnaGhwYmFubGlzdCBsaXt3aWR0aDoxMDAlO2xpbmUtaGVpZ2h0OjEuNWVtO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZX0gIiArCiAgICAgICAgICAgICAgICAgICAiI2doaHNpdGVsaXN0IGxpOm50aC1vZi10eXBlKG9kZCksI2doaHBiYW5saXN0IGxpOm50aC1vZi10eXBlKG9kZCl7YmFja2dyb3VuZC1jb2xvcjojZmNmY2FhfSAiICsKICAgICAgICAgICAgICAgICAgICIuZ2hoaG9zdHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6MCAwLjI1ZW07Y3Vyc29yOnBvaW50ZXI7fSAjZ2hodXRpbHt0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW46MC41ZW0gMCAxZW0gMDtib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czo0cHg7cGFkZGluZzozcHggMDt9ICIgKwogICAgICAgICAgICAgICAgICAgIi5naGhpbmZve2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjlweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO3otaW5kZXg6MTAwMTtib3JkZXI6NHB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6OHB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6OHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmctbGVmdDoxcHh9ICIgKwogICAgICAgICAgICAgICAgICAgIi5naGhkZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtjb2xvcjojMzMzO30gLmdoaHBie3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiNmMDA7fSAiICsKICAgICAgICAgICAgICAgICAgICIuZ2hoYmxre3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOiMzMzM7fSAuZ2hoZHtwb3NpdGlvbjpyZWxhdGl2ZTtsaW5lLWhlaWdodDoxLjJlbTtjdXJzb3I6cG9pbnRlcjt9ICIgKwogICAgICAgICAgICAgICAgICAgIi5naGhpbmRlbnR7cG9zaXRpb246YWJzb2x1dGU7bGVmdDozNTBweDt0b3A6LTNweDt9ICNidG5lZGl0IHB7bWFyZ2luOjJweCA0cHggNHB4IDRweDt9ICNnaGhibG9ja2Zvcm0gaW5wdXRbdHlwZT0ncmFkaW8nXSwgI2doaG1uZ2Zvcm0gaW5wdXRbdHlwZT0ncmFkaW8nXXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZSAhaW1wb3J0YW50O21hcmdpbi10b3A6NXB4O21hcmdpbi1ib3R0b206MXB4fSAiICsKICAgICAgICAgICAgICAgICAgICIjZ2hoYmxvY2tmb3JtIGxhYmVsLCAjZ2hobW5nZm9ybSBsYWJlbHtkaXNwbGF5OmlubGluZTtmb250LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOnVuc2V0O30gLmdoaHRibHtib3JkZXI6MXB4IHNvbGlkIGJsYWNrO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0gLmdoaHRibCB0ZCwgLmdoaHRibCB0aHtib3JkZXI6MXB4IHNvbGlkIGJsYWNrO3BhZGRpbmc6MnB4IDRweDt9ICIgKwogICAgICAgICAgICAgICAgICAgIiNnaGh0c2RpdnttYXJnaW46MCAtMS41ZW07cGFkZGluZzowIDNweCAwIDhweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjO30gI2doaHRzdHJpcHtwYWRkaW5nLWJvdHRvbTowO30gIiArCiAgICAgICAgICAgICAgICAgICAiI2doaHRzdHJpcCBidXR0b257Y29sb3I6IzU1NTtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7bWFyZ2luOjAgMnB4IDAgMDtib3JkZXI6MXB4IHNvbGlkICNjY2M7cGFkZGluZzoxcHggMnB4O2hlaWdodDoyMnB4O2JvcmRlci1yYWRpdXM6MnB4O30gIiArCiAgICAgICAgICAgICAgICAgICAiI2doaHRzdHJpcCAuZ2hoQ3VyVGFie2JhY2tncm91bmQtY29sb3I6I2ZjZmNmYztib3JkZXItYm90dG9tLWNvbG9yOiNmY2ZjZmM7fSAuZ2hodGFiIHttYXJnaW4tdG9wOjFlbTtoZWlnaHQ6MTdlbTtvdmVyZmxvdy15OnNjcm9sbDtib3JkZXI6MXB4IHNvbGlkICMzMzM7fSAiICsKICAgICAgICAgICAgICAgICAgICIjbWZsaXN0cz5kaXY+cHttYXJnaW46MWVtIDA7fSAjZ2hobW5nZm9ybXtwb3NpdGlvbjpmaXhlZDt0b3A6NjVweDtyaWdodDowO3otaW5kZXg6OTAwMTt0ZXh0LWFsaWduOmxlZnQ7bGluZS1oZWlnaHQ6MS4yZW19ICNnaGhibG9ja2Zvcm17dGV4dC1hbGlnbjpsZWZ0O3otaW5kZXg6MzAwNX0gIiArCiAgICAgICAgICAgICAgICAgICAnaDNbd290ZG9udXQ9InRydWUiXXtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH0nKTsKICAgIEdISGJEX2FkZFN0eWxlKCJAbWVkaWEgcHJpbnQge2J1dHRvbi5naGhpZGVye2Rpc3BsYXk6bm9uZTt9fSIpOwogICAgLy8gU3RhbmRhcmQgaW1hZ2UgcmVzdWx0cyBzdHlsZSBibG9jawogICAgaWYgKGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJ0Ym09aXNjaCIpID4gLTEpewogICAgICAgIHZhciBnaGhiZF9pbWdzdHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIGdoaGJkX2ltZ3N0eS5pZCA9ICJnaGhTdHlsZUltZ1Jlc3VsdHMiOwogICAgICAgIGdoaGJkX2ltZ3N0eS5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dC9jc3MiKTsKICAgICAgICBnaGhiZF9pbWdzdHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ2RpdltpbWdibG9jaz0icmVndWxhciJdIGltZ3tvcGFjaXR5OjAuMSAhaW1wb3J0YW50fSBkaXYuaXN2LXJbaW1nYmxvY2s9InJlZ3VsYXIiXSBhIGRpdjpmaXJzdC1vZi10eXBle29wYWNpdHk6MC42ICFpbXBvcnRhbnR9IGRpdltpbWdibG9jaz0icmVndWxhciJdOm5vdCguaXN2LXIpIGEgZGl2e2Rpc3BsYXk6YmxvY2sgIWltcG9ydGFudDtvcGFjaXR5OjAuNiAhaW1wb3J0YW50fWRpdltpbWdibG9jaz0icmVndWxhciJdIGltZzpob3ZlcntvcGFjaXR5OjAuNSAhaW1wb3J0YW50fSBkaXZbaW1nYmxvY2s9InBiYW4iXXtiYWNrZ3JvdW5kLWNvbG9yOiNhYWEgIWltcG9ydGFudDtib3JkZXItcmFkaXVzOjZweCAhaW1wb3J0YW50fSBkaXZbaW1nYmxvY2s9InBiYW4iXSBhe2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fScpKTsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGdoaGJkX2ltZ3N0eSk7CiAgICAgICAgaXNjaD10cnVlOwogICAgfQp9CmluamVjdEJhc2VDU1MoKTsKCnZhciBjdXJyZW50RyA9IGxvY2F0aW9uLmhvc3RuYW1lOyB2YXIgZW5naW5lID0gJ21pc2MnOwpmdW5jdGlvbiBkb1NpdGVTcGVjaWZpYygpewogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoImdvb2dsZSIpID4gLTEpewogICAgICAgIGVuZ2luZSA9ICdHb29nbGUnOwogICAgICAgIC8vIEdvb2dsZTogZGl2I3JlcyA+IGRpdiNzZWFyY2ggPiBkaXYgPiBkaXYjaXJlcyA+IGRpdi5zcmcgfCBvbCNyc28gfCBkaXYuX05JZCB8IGRpdi5ia1dNZ2QgPiBkaXYuZyA+IGRpdi5yYyA+IGgzLnIgPiBhCiAgICAgICAgLy8gR29vZ2xlIGluLWRlcHRoIGFydGljbGVzOiBkaXYjcmVzID4gZGl2I3NlYXJjaCA+IGRpdiNpcmVzID4gb2wjcnNvID4gZGl2ID4gbGkuZy5jYXJkLXNlY3Rpb24gb3IgbGkuZy5jdC1jcyA+IGRpdi5yYyA+IGRpdiA+IGgzLnIgPiBhCiAgICAgICAgLy8gR29vZ2xlIEltYWdlcyAoZGVmYXVsdCk6IGRpdiNyZXMgPiBkaXYjc2VhcmNoID4gZGl2ID4gZGl2I2lyZXMgPiBkaXYjcnNvID4gZGl2I2lzcl9tYyA+IGRpdiA+IGRpdiNyZyA+IGRpdiNyZ19zID4gZGl2LnJnX2RpLnJnX2VsLml2Zy1pZyA+IGEgPiBpbWcKICAgIH0KICAgIGlmIChjdXJyZW50Ry5pbmRleE9mKCJiaW5nLmNvbSIpID4gLTEpewogICAgICAgIGVuZ2luZSA9ICdCaW5nJzsKICAgICAgICAvLyBCaW5nOiBkaXYjYl9jb250ZW50ID4gbWFpbiA+IG9sI2ItcmVzdWx0cyA+IGxpLmJfYWxnbyA+IGgyID4gYQogICAgICAgIEdISGJEX2FkZFN0eWxlKCJsaVtnaGhyZXN1bHRdIGgyIGJ1dHRvbi5naGhpZGVye2ZvbnQtc2l6ZTowLjdlbSAhaW1wb3J0YW50O30gbGkgPiBoMiB7d2hpdGUtc3BhY2U6bm93cmFwICFpbXBvcnRhbnQ7fSIpOwogICAgfQogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoImR1Y2tkdWNrZ28iKSA+IC0xIHx8IGN1cnJlbnRHLmluZGV4T2YoIjNnMnVwbDRwcTZrdWZjNG0iKSA+IC0xKXsKICAgICAgICBlbmdpbmUgPSAnRERHJzsKICAgICAgICAvLyBEdWNrRHVja0dvOiBkaXYjbGlua3MgPiBkaXYucmVzdWx0c19saW5rc19kZWVwID4gZGl2LmxpbmtzX21haW4gPiBoMiA+IGEKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiLmxpbmtzX21haW4sLnJlc3VsdF9fdGl0bGV7b3ZlcmZsb3c6dmlzaWJsZSAhaW1wb3J0YW50O30gLnJlc3VsdF9fdGl0bGV7d2hpdGUtc3BhY2U6bm93cmFwICFpbXBvcnRhbnQ7fSAuZ2hoYntmb250LXNpemU6MTJweCFpbXBvcnRhbnQ7bWFyZ2luLWxlZnQ6NHB4IWltcG9ydGFudDt9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICIucmVzdWx0c19saW5rc19kZWVwW2Jsb2Nrbm90aWNlXSArIC5yZXN1bHRzX19zaXRlbGluay0tb3JnYW5pY3MsIC5naGhkbm9uZSArIC5yZXN1bHRzX19zaXRlbGluay0tb3JnYW5pY3MsIC5yZXN1bHRzX2xpbmtzX2RlZXBbYmxvY2tub3RpY2VdICsgLnJlc3VsdF9fc2l0ZWxpbmtzLS1vcmdhbmljcywgLmdoaGRub25lICsgLnJlc3VsdF9fc2l0ZWxpbmtzLS1vcmdhbmljcyB7ZGlzcGxheTpub25lO30iKTsKICAgIH0KICAgIGlmIChjdXJyZW50Ry5pbmRleE9mKCJzdGFydHBhZ2UiKSA+IC0xKXsKICAgICAgICBlbmdpbmUgPSAnU3RhcnRwYWdlJzsKICAgICAgICAvLyBTdGFydHBhZ2U6IGRpdiNyZXN1bHRzID4gb2wgPiBsaSA+IGRpdi5yZXN1bHQgPiBoMyA+IGEKICAgICAgICAvLyAxMS8yMS8yMDE4OiBbZGF0YS12aWV3PSJyZXN1bHRzIl0gZGl2LmNvbHVtbnMgYXJ0aWNsZS5jb2x1bW4uY29sdW1uLS1tYWluID4gZGl2LmNvbHVtbi5jb2x1bW4tLW1haW5fX2NvbnRlbnQgPiBvbC5saXN0LWZsYXQgPiBsaS5zZWFyY2gtcmVzdWx0LnNlYXJjaC1pdGVtID4gaDMuc2VhcmNoLWl0ZW1fX3RpdGxlID4gYQogICAgICAgIC8vICA3LzAzLzIwMTk6IGRpdi5tYWlubGluZS1yZXN1bHRzX193ZWIgc2VjdGlvbi53LWdsID4gZGl2LnctZ2xfX3Jlc3VsdCA+IGEudy1nbF9fcmVzdWx0LXRpdGxlCiAgICAgICAgR0hIYkRfYWRkU3R5bGUoJy53LWdsX19yZXN1bHR7b3ZlcmZsb3c6dmlzaWJsZSAhaW1wb3J0YW50O30gLmdoaGR7cGFkZGluZzowIDEwcHggOHB4IDEycHh9YnV0dG9uLmdoaGlkZXJ7Zm9udC13ZWlnaHQ6bm9ybWFsfSNnaGhibG9ja2Zvcm0gaW5wdXRbdHlwZT0iY2hlY2tib3giXSwgI2doaG1uZ2Zvcm0gaW5wdXRbdHlwZT0iY2hlY2tib3giXXt3aWR0aDp1bnNldDtoZWlnaHQ6dW5zZXQ7cG9zaXRpb246c3RhdGljO21hcmdpbjp1bnNldDtib3JkZXI6dW5zZXQ7cGFkZGluZzp1bnNldDtjbGlwOnVuc2V0O30nICsKICAgICAgICAgICAgICAgICAgICAgICAnI2doaGJsb2NrZm9ybSBidXR0b24sICNnaGhtbmdmb3JtIGJ1dHRvbntmb250LXNpemU6MWVtO2ZvbnQtd2VpZ2h0Om5vcm1hbDtib3JkZXI6MXB4IHNvbGlkICNlM2UzZTM7Ym9yZGVyLXJhZGl1czozcHg7cGFkZGluZzoycHggOHB4O2JveC1zaGFkb3c6bm9uZX0gI2doaG1uZ2Zvcm17dG9wOjEwNXB4ICFpbXBvcnRhbnQ7fScpOwogICAgfQogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoInlhaG9vLmNvbSIpID4gLTEpewogICAgICAgIGVuZ2luZSA9ICdZYWhvbyc7CiAgICAgICAgLy8gWWFob28gKEZpcmVmb3gpOiBkaXYjcmVzdWx0cyA+IGRpdiNjb2xzID4gZGl2I2xlZnQgPiBkaXYgPiBkaXYjbWFpbiA+IGRpdiA+IGRpdiN3ZWIgPiBvbCA+IGxpID4gZGl2ID4gZGl2ID4gaDMgPiBhCiAgICAgICAgLy8gR0hIYkRfYWRkU3R5bGUoImRpdiN3ZWIgPiBvbC5yZWcsIGxpIGRpdi5jb21wVGl0bGUge292ZXJmbG93OnZpc2libGUgIWltcG9ydGFudDt9IC5naGhke21hcmdpbjogMWVtIDBweCAtMWVtIDEwcHh9ICNnaGhtbmdmb3Jte3RvcDo4MHB4fSBsaSBkaXYgZGl2IGgze3doaXRlLXNwYWNlOm5vd3JhcCAhaW1wb3J0YW50O30iKTsKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiZGl2I3dlYiA+IG9sLnJlZywgbGkgZGl2LmNvbXBUaXRsZSB7b3ZlcmZsb3c6dmlzaWJsZSAhaW1wb3J0YW50OyBib3JkZXItdG9wOjAuMXB4IHNvbGlkIHRyYW5zcGFyZW50O30gLmdoaGR7bWFyZ2luOiAxZW0gMHB4IDBweCAwcHh9ICNnaGhtbmdmb3Jte3RvcDo4MHB4fSBsaSBkaXYgZGl2IGgze3doaXRlLXNwYWNlOm5vcm1hbCAhaW1wb3J0YW50O30iKTsgLy8gdjIuMi4xCiAgICB9CiAgICBpZiAoY3VycmVudEcuaW5kZXhPZigieWFob28uY28uanAiKSA+IC0xKXsKICAgICAgICAvLyBZYWhvbyBKYXBhbiAoT0xEKTogZGl2I2NvbnRlbnRzID4gZGl2ID4gZGl2ID4gZGl2ID4gZGl2I1dTMm0gPiBkaXYudyA+IGRpdi5oZCA+IGgzID4gYQogICAgICAgIC8vIFlhaG9vIEphcGFuOiBkaXYjY29udGVudHMgPiBkaXYjY29udGVudHNfX3dyYXAgPiBkaXYuQ29udGVudHNfX2lubmVyIENvbnRlbnRzX19pbm5lci0tbWFpbiA+IGRpdi5Db250ZW50c19faW5uZXJHcm91cEJvZHkgPiBkaXYuc3ctQ2FyZEJhc2UgZGl2LnN3LUNhcmRfX3RpdGxlID4gYSA+IGgzIC8vdjIuMi4xCiAgICAgICAgR0hIYkRfYWRkU3R5bGUoIiNXUzJtIC53e292ZXJmbG93OnZpc2libGUgIWltcG9ydGFudDt9ICNnaGhtbmdmb3Jte3otaW5kZXg6MzAwMX0iKTsKICAgIH0KICAgIGlmIChjdXJyZW50Ry5pbmRleE9mKCJiYWlkdSIpID4gLTEpewogICAgICAgIGVuZ2luZSA9ICdCYWlkdSc7CiAgICAgICAgLy8gQmFpZHU6ICh0aXRsZSkgI2NvbnRlbnRfbGVmdCA+IGRpdi5yZXN1bHQuYy1jb250YWluZXIgPiBoMyA+IGE7IChkb21haW4pICNjb250ZW50X2xlZnQgPiBkaXYucmVzdWx0LmMtY29udGFpbmVyID4gZGl2ID4gYS5jLXNob3d1cmwKICAgICAgICAvLyBCYWlkdSByaWNoIHJlc3VsdDogKHRpdGxlKSAjY29udGVudF9sZWZ0ID4gZGl2LnJlc3VsdC1vcC5jLWNvbnRhaW5lciA+IGgzID4gYSAob3IgcC5vcF9zaXRlX2RvbWFpbl90aXRsZSwgZGl2Lm9wX2dlbmVyYWxxYV9tYWluLmMtcm93KTsgKGRvbWFpbikgI2NvbnRlbnRfbGVmdCA+IGRpdi5yZXN1bHQtb3AuYy1jb250YWluZXJbbXVdCiAgICB9CiAgICBpZiAoY3VycmVudEcuaW5kZXhPZigieWFuZGV4LmNvbSIpID4gLTEpewogICAgICAgIC8vIFlhbmRleDogZGl2LnNlcnAtbGlzdCB8IHVsLnNlcnAtbGlzdCA+IGRpdi5zZXJwLWl0ZW0gfCBsaS5zZXJwLWl0ZW0gPiBoMiA+IGEKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiaDIuc2VycC1pdGVtX190aXRsZXt3aGl0ZS1zcGFjZTpub3dyYXA7fS5naGhie2ZvbnQtc2l6ZTowLjc1ZW0haW1wb3J0YW50O21hcmdpbi1sZWZ0OjRweCFpbXBvcnRhbnQ7fSIpOwogICAgfQogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoInF3YW50IikgPiAtMSl7CiAgICAgICAgLy8gUXdhbnQ6IGRpdi5yZXN1bHRzLWNvbHVtbiA+IGRpdi5yZXN1bHRfZnJhZ21lbnQgPiBkaXYucmVzdWx0LS13ZWIgfCBkaXYucmVzdWx0LS1uZXdzID4gaDMgPiBhCiAgICAgICAgR0hIYkRfYWRkU3R5bGUoImRpdltibG9ja25vdGljZV06bm90KC5naGgxdGltZSl7bWluLWhlaWdodDoxZW07cGFkZGluZy1sZWZ0OjA7fSIpOwogICAgfQogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoInNlYXJ4IikgPiAtMSl7CiAgICAgICAgLy8gU2VhcngubWU6IGRpdiNtYWluX3Jlc3VsdHMgPiBkaXYucmVzdWx0ID4gaDQucmVzdWx0X2hlYWRlciA+IGEKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiaDIuc2VycC1pdGVtX190aXRsZXt3aGl0ZS1zcGFjZTpub3dyYXA7fS5naGhie2ZvbnQtc2l6ZTowLjc1ZW0haW1wb3J0YW50O21hcmdpbi1sZWZ0OjRweCFpbXBvcnRhbnQ7fSIpOwogICAgfQogICAgaWYgKGN1cnJlbnRHLmluZGV4T2YoImVjb3NpYSIpID4gLTEpewogICAgICAgIGVuZ2luZSA9ICdFY29zaWEnOwogICAgICAgIC8vIEVjb3NpYTogZGl2LnJlc3VsdHMtd3JhcHBlciA+IGRpdi5jb250YWluZXIucmVzdWx0cyAuLi4gZGl2LmNhcmQtd2ViIC4uLiBkaXYucmVzdWx0LWZpcnN0bGluZS10aXRsZSA+IGEucmVzdWx0LXRpdGxlCiAgICAgICAgR0hIYkRfYWRkU3R5bGUoIltnaGhyZXN1bHRdIGgyLnJlc3VsdC1maXJzdGxpbmUtdGl0bGU+YS5yZXN1bHQtdGl0bGV7ZGlzcGxheTppbmxpbmU7fS5naGhpZGVye2ZvbnQtc2l6ZTowLjZlbSFpbXBvcnRhbnQ7fSIpOwogICAgfQp9CmRvU2l0ZVNwZWNpZmljKCk7CgpmdW5jdGlvbiBpbmplY3RDdXN0b20oKXsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmRjdXN0c3R5IikpIHJldHVybjsKICAgIHZhciBnaGhiZF9jdXN0c3R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgIGdoaGJkX2N1c3RzdHkuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiAgICBnaGhiZF9jdXN0c3R5LmlkID0gImdoaGJkY3VzdHN0eSI7CiAgICBnaGhiZF9jdXN0c3R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGN1c3RTdHkpKTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZ2hoYmRfY3VzdHN0eSk7Cn0KCnZhciBjdXN0U3R5OwppZiAoIUdNNCl7CiAgICBjdXN0U3R5ID0gR01fZ2V0VmFsdWUoImhpZGVyU3R5bGVzIiwgIiIpOwogICAgaWYgKGN1c3RTdHkubGVuZ3RoID4gMCkgaW5qZWN0Q3VzdG9tKCk7Cn0gZWxzZSB7CiAgICBHTS5nZXRWYWx1ZSgiaGlkZXJTdHlsZXMiLCAiIikudGhlbihmdW5jdGlvbih2YWx1ZSl7Y3VzdFN0eSA9IHZhbHVlOyBpZiAoY3VzdFN0eS5sZW5ndGggPiAwKSBpbmplY3RDdXN0b20oKTt9KTsKfQoKLy8gPT0gPT0gPT0gR2xvYmFscyBmb3IgcHJlZmVyZW5jZXMgPT0gPT0gPT0KdmFyIGJsaXN0LCBkZWZhdWx0VHh0cywgdHh0c1ByZWYsIHR4dHMsIGRlZmF1bHRQcmVmcywgZ2hoUHJlZnMsIGdoaFByZWZPLCBzaG93WU4sIG1wb3BlbiwgbWJzdHlsZSwgYmJzdHlsZSwgYmJwb3MsIGFkZEF0LCBsaXN0Y2hncywgYkxVb3BlbiwgYkFnZ3Jlc3MsIGJBSkFYLCBiTXV0T2IsIHByZWYxY2xpY2ssIGJldGF0ZXN0LCBNdXRPYiwgY2hnTW9uLCBvcHRzLCBraWRzLCBuZWVkdXBkYXRlID0gdHJ1ZSwgZG9tcyA9IFtdLCB0X3BiOwp2YXIgcGF0SVB2NCA9IC9cYig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXGIvOwoKZnVuY3Rpb24gY2hlY2tibGlzdCgpewogICAgaWYgKGJsaXN0Lmxlbmd0aCA9PT0gMCkgYmxpc3QgPSAifGV4YW1wbGUuY29tOnR8IjsKICAgIGlmIChibGlzdC5zdWJzdHIoMCwxKSAhPSAifCIpIGJsaXN0ID0gInwiICsgYmxpc3Q7CiAgICBpZiAoYmxpc3QuaW5kZXhPZigiOiIpIDwgMCkgY29udmVydEZvcm1hdCgpOwp9CgppZiAoIUdNNCl7CiAgICBibGlzdCA9IEdNX2dldFZhbHVlKCJoaWRleWhvc3RzIiwgIiIpOwogICAgY2hlY2tibGlzdCgpOwp9IGVsc2UgewogICAgR00uZ2V0VmFsdWUoImhpZGV5aG9zdHMiLCAiIikudGhlbihmdW5jdGlvbih2YWx1ZSl7Ymxpc3QgPSB2YWx1ZTsgY2hlY2tibGlzdCgpO30pOwp9CgpkZWZhdWx0VHh0cyA9IHsKICAgICJibG9jayI6WyJibG9jayIsIkJ1dHRvbiBuZXh0IHRvIHRoZSByZXN1bHQgdGl0bGUgdG8gY2FsbCB1cCB0aGUgYmxvY2sgZGlhbG9nIl0sCiAgICAidW5ibG9jayI6WyJVbmJsb2NrIiwiR3JlZW4gYnV0dG9uIGluIHJlc3VsdHMgdG8gcmVtb3ZlIGEgc2l0ZSBmcm9tIHRoZSBibG9jayBsaXN0Il0sCiAgICAib25ldGltZSI6WyJTaG93IEhpdCIsIlllbGxvdyBidXR0b24gaW4gcmVzdWx0cyB0byBzaG93IGEgcmVzdWx0IHRlbXBvcmFyaWx5Il0sCiAgICAicGJhbiI6WyJQZXJtYS1iYW4iLCJSZWQgYnV0dG9uIHRvIG1vdmUgYSBzaXRlIHRvIHRoZSBwZXJtYS1iYW4gbGlzdCJdLAogICAgInNob3dub3RjIjpbIlNob3cgTm90aWNlcyIsIkJ1dHRvbiB0byBzZXQgdGhlIHByZWZlcmVuY2UgZm9yIG5vdGljZXMgdG8gc2hvdyB0aGVtIl0sCiAgICAiaGlkZW5vdGMiOlsiSGlkZSBOb3RpY2VzIiwiQnV0dG9uIHRvIHNldCB0aGUgcHJlZmVyZW5jZSBmb3Igbm90aWNlcyB0byBoaWRlIHRoZW0iXSwKICAgICJva2J0biI6WyJCbG9jayBTaXRlIiwiQnV0dG9uIGluIHRoZSBibG9jayBkaWFsb2cgdG8gYmxvY2sgdGhlIHNlbGVjdGVkIGRvbWFpbiJdLAogICAgImNhbmNlbGJ0biI6WyJDYW5jZWwiLCJCdXR0b24gaW4gdGhlIGJsb2NrIGRpYWxvZyB0byBjYW5jZWwgb3V0IHdpdGggbWFraW5nIGNoYW5nZXMiXSwKICAgICJzYXZlYnRuIjpbIlNhdmUgTGlzdHMiLCJCdXR0b24gaW4gdGhlIG1hbmFnZW1lbnQgcGFuZSB0byB1cGRhdGUgdGhlIGJsb2NrIGFuZCBwZXJtYS1iYW4gbGlzdHMiXSwKICAgICJjbG9zZWJ0biI6WyJDbG9zZSIsIkJ1dHRvbiBpbiB0aGUgbWFuYWdlbWVudCBwYW5lIHRvIGNsb3NlIHRoZSBwYW5lIl0sCiAgICAib2tQYnRuIjpbIlBlcm1hLWJhbiIsIkJ1dHRvbiBpbiB0aGUgYmxvY2sgZGlhbG9nIHRvIHBlcm1hLWJhbiB0aGUgc2VsZWN0ZWQgZG9tYWluIl0sCiAgICAiY2FuY2VsTWJ0biI6WyJNYW5hZ2UgSGlkaW5nIiwiQnV0dG9uIGluIHRoZSBibG9jayBkaWFsb2cgdG8gb3BlbiB0aGUgbWFuYWdlbWVudCBwYW5lIl0sCiAgICAibW5nYnRuIjpbIk1hbmFnZSBIaWRpbmciLCJCdXR0b24gb24gdGhlIHJpZ2h0IHNpZGUgdG8gb3BlbiB0aGUgbWFuYWdlbWVudCBwYW5lIl0sCiAgICAiZXhpbWJ0biI6WyJFeHBvcnQiLCJCdXR0b24gaW4gdGhlIG1hbmFnZW1lbnQgcGFuZSB0byBleHBvcnQgdGhlIGJsb2NrIGxpc3QiXSwKICAgICJ1dGlsYnRuIjpbIkxpc3QgVXRpbCIsIkJ1dHRvbiBpbiB0aGUgbWFuYWdlbWVudCBwYW5lIHRvIG9wZW4gdGhlIHV0aWxpdHkgcGFuZWwiXSwKICAgICJzb3J0YnRuIjpbIlNvcnQiLCJCdXR0b24gaW4gdGhlIG1hbmFnZW1lbnQgcGFuZSB0byBzb3J0IHRoZSBibG9jayBsaXN0Il0sCiAgICAidW53d3didG4iOlsiVW4td3d3IiwiQnV0dG9uIGluIHRoZSBtYW5hZ2VtZW50IHBhbmUgdG8gc3RyaXAgd3d3IGZyb20gYmxvY2tlZCBkb21haW5zIl0sCiAgICAiZGVkdXBidG4iOlsiRGUtRHVwIiwiQnV0dG9uIGluIHRoZSBtYW5hZ2VtZW50IHBhbmUgdG8gZGUtZHVwbGljYXRlIHRoZSBibG9jayBsaXN0Il0sCiAgICAiaW1wb2J0biI6WyJJbXBvcnQiLCJCdXR0b24gaW4gdGhlIG1hbmFnZW1lbnQgcGFuZSB0byBpbXBvcnQgZG9tYWlucyBpbnRvIHRoZSBibG9jayBsaXN0Il0sCiAgICAic2hhcmVidG4iOlsiU2hhcmUiLCJCdXR0b24gaW4gdGhlIG1hbmFnZW1lbnQgcGFuZSB0byBwb3N0IGJsb2NrIGxpc3QgdG8gdGhlIHdlYiJdLAogICAgImFkZGFsbGJ0biI6WyJBZGQgQWxsIiwiQnV0dG9uIGluIHRoZSBtYW5hZ2VtZW50IHBhbmUgdG8gYnVsayBhZGQgYWxsIHVuYmxvY2tlZCBkb21haW5zIHRvIGN1cnJlbnQgbGlzdCJdCn07CgpmdW5jdGlvbiBjaGVja3R4dHMoKXsKICAgIGlmICh0eHRzUHJlZi5pbmRleE9mKCI6WyIpID09IC0xIHx8IHR4dHNQcmVmLmluZGV4T2YoIm1uZ2J0biIpID09IC0xIHx8CiAgICAgICAgdHh0c1ByZWYuaW5kZXhPZigiZXhpbWJ0biIpID09IC0xIHx8IHR4dHNQcmVmLmluZGV4T2YoInV0aWxidG4iKSA9PSAtMSB8fAogICAgICAgIHR4dHNQcmVmLmluZGV4T2YoImltcG9idG4iKSA9PSAtMSB8fCB0eHRzUHJlZi5pbmRleE9mKCJhZGRhbGxidG4iKSA9PSAtMSkgewogICAgICAgIGNvbnZlcnRUeHRzKHR4dHNQcmVmKTsKICAgIH0gZWxzZSB7CiAgICAgICAgdHh0cyA9IEpTT04ucGFyc2UodHh0c1ByZWYpOwogICAgfQp9CgppZiAoIUdNNCl7CiAgICB0eHRzUHJlZiA9IEdNX2dldFZhbHVlKCJ0ZXh0c3RyaW5ncyIsIEpTT04uc3RyaW5naWZ5KGRlZmF1bHRUeHRzKSk7CiAgICBjaGVja3R4dHMoKTsKfSBlbHNlIHsKICAgIEdNLmdldFZhbHVlKCJ0ZXh0c3RyaW5ncyIsIEpTT04uc3RyaW5naWZ5KGRlZmF1bHRUeHRzKSkudGhlbihmdW5jdGlvbih2YWx1ZSl7dHh0c1ByZWYgPSB2YWx1ZTsgY2hlY2t0eHRzKCk7fSk7Cn0KCmRlZmF1bHRQcmVmcyA9IHsKICAgICJzaG93bm90YyI6WyJZIiwiU2hvdyBoaXQgbm90aWNlcyhZfE4pIl0sCiAgICAibW5ncGFuZW9wZW4iOlsiWS1OIiwiUGVyc2lzdGVuY2UgZW5hYmxlZChZfE4pLFBhbmUgd2FzIG9wZW4oWXxOKSxMYXN0IHRhYiBudW1iZXIoMS00KSJdLAogICAgIm1uZ2J0bnN0eWxlIjpbImJvdGgtaWZyTi1SLVAtWS1IIiwiRGlzcGxheSBNYW5hZ2UgSGlkaW5nIGJ1dHRvbiBhbmQgQmxvY2sgYnV0dG9ucyhtbmd8YmxrfGJvdGgpLEluIGlmcmFtZXMoaWZyTnxpZnJZKSxQb3NpdGlvbihSLFQsQiksQmxvY2sgYnV0dG9uIGRpc3BsYXkoUCxNKSxCbG9jayBidXR0b24gdG9vbHRpcHMoWXxOKSwgQmxvY2sgYnV0dG9uIHBvc2l0aW9uKEh8QykiXSwKICAgICJhZGR0b2xpc3Rwb3MiOlsiZW5kIiwiV2hlcmUgdG8gYWRkIG5ldyBoaXRzIHRvIGJsb2NrIGxpc3RzKGVuZHx0b3B8c29ydCkiXSwKICAgICJhZ2dyZXNzaXZlYmxvY2siOlsibm9uZSIsIldoaWNoIGRvbWFpbnMgdG8gZGVmYXVsdCB0byBzaG9ydGVyIGZvcm0obm9uZXxhbGx8d3d3KSJdLAogICAgInVzZW11dGF0aW9uIjpbIm9uLVkiLCJMaXN0ZW4gZm9yIG11dGF0aW9uIGV2ZW50cyhvbnxvZmYpLFVzZSBET000IE11dGF0aW9uIE9ic2VydmVyKFl8TikiXSwKICAgICJvbmVjbGljayI6WyJOLU4iLCJPbmUtY2xpY2sgYmxvY2tpbmcoWXxOKSxHb2VzIHRvIFBlcm1hLWJhbihZfE4pIl0sCiAgICAicnVuYmV0YSI6WyJOIiwiRW5hYmxlIGluY29tcGxldGVseSB0ZXN0ZWQgZmVhdHVyZXMgKFl8TikiXSwKICAgICJyZXNlcnZlZDIiOlsiWCIsIlkiXQp9OwoKZnVuY3Rpb24gY2hlY2twcmVmcygpewogICAgaWYgKGdoaFByZWZzLmxlbmd0aCA9PSAwKXsKICAgICAgICBjb252ZXJ0UHJlZnMoZGVmYXVsdFByZWZzLCAidHJ1ZSIpOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAoZ2hoUHJlZnMuaW5kZXhPZigicmVzZXJ2ZWQxIik+LTEpewogICAgICAgICAgICBjb252ZXJ0UHJlZnMoZGVmYXVsdFByZWZzLCAiZmFsc2UiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBnaGhQcmVmTyA9IEpTT04ucGFyc2UoZ2hoUHJlZnMpOwogICAgICAgIH0KICAgIH0KfQoKaWYgKCFHTTQpewogICAgZ2hoUHJlZnMgPSBHTV9nZXRWYWx1ZSgiZ2hocHJlZnMiLCAiIik7CiAgICBjaGVja3ByZWZzKCk7CiAgICBHSEhiRGluaXQoKTsKfSBlbHNlIHsKICAgIEdNLmdldFZhbHVlKCJnaGhwcmVmcyIsICIiKS50aGVuKGZ1bmN0aW9uKHZhbHVlKXtnaGhQcmVmcyA9IHZhbHVlOyBjaGVja3ByZWZzKCk7IEdISGJEaW5pdCgpO30pOwp9CgpmdW5jdGlvbiBHSEhiRGluaXQoKXsKICAgIHNob3dZTiA9IGdoaFByZWZPLnNob3dub3RjWzBdOwogICAgbXBvcGVuID0gZ2hoUHJlZk8ubW5ncGFuZW9wZW5bMF07CiAgICBtYnN0eWxlID0gZ2hoUHJlZk8ubW5nYnRuc3R5bGVbMF07CiAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpWzBdID09ICJtbmciKSB0b2dnbGVCbG9ja0hpZGVycygiSCIpOwogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKS5sZW5ndGggPCAzKXsKICAgICAgICBHSEhiRF9hZGRTdHlsZSgiI2doaE1uZ0J0biB7cG9zaXRpb246Zml4ZWQ7dG9wOjE1MHB4O3JpZ2h0Oi0yLjhlbTstbW96LXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTsiKwogICAgICAgICAgICAgICAgICAgICAgICJib3JkZXItYm90dG9tOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7cGFkZGluZzo2cHggMXB4O3otaW5kZXg6MTAwMDt9Iik7CiAgICB9IGVsc2UgewogICAgICAgIHN3aXRjaCAobWJzdHlsZS5zcGxpdCgiLSIpWzJdKXsKICAgICAgICAgICAgY2FzZSAiQiI6CiAgICAgICAgICAgICAgICBHSEhiRF9hZGRTdHlsZSgiI2doaE1uZ0J0biB7cG9zaXRpb246Zml4ZWQ7Ym90dG9tOjA7cmlnaHQ6MnB4OyIrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYm9yZGVyLWJvdHRvbTowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO3BhZGRpbmc6NnB4IDFweDt6LWluZGV4OjEwMDA7fSIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIlQiOgogICAgICAgICAgICAgICAgR0hIYkRfYWRkU3R5bGUoIiNnaGhNbmdCdG4ge21hcmdpbjowO3BhZGRpbmc6NHB4IDZweDt6LWluZGV4OjMwMDA7fSIpOwogICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhcHBiYXIgb2wiKSl7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYXBwYmFyIG9sI2FiX2N0bHMiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoTW5nQnRuIikpfSwgMTAwMCk7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgbGlOZXcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpO2xpTmV3LmNsYXNzTmFtZT0iYWJfY3RsIjtsaU5ldy5hcHBlbmRDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoTW5nQnRuIikpO2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm9sI2FiX2N0bHMiKS5hcHBlbmRDaGlsZChsaU5ldyk7fSwgMTUwMCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhcHBiYXIgb2wiKSl7dmFyIGxpTmV3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTtsaU5ldy5jbGFzc05hbWU9ImFiX2N0bCI7bGlOZXcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaE1uZ0J0biIpKTtkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJvbCNhYl9jdGxzIikuYXBwZW5kQ2hpbGQobGlOZXcpO31lbHNle2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhNbmdCdG4iKS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwicG9zaXRpb246YWJzb2x1dGU7dG9wOjhlbTtyaWdodDowIil9fSwgMTUwMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIEdISGJEX2FkZFN0eWxlKCIjZ2hoTW5nQnRuIHtwb3NpdGlvbjpmaXhlZDt0b3A6MTUwcHg7cmlnaHQ6LTIuOGVtOy1tb3otdHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpOyIrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYm9yZGVyLWJvdHRvbTowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO3BhZGRpbmc6NnB4IDFweDt6LWluZGV4OjEwMDA7fSIpOwogICAgICAgIH0KICAgIH0KICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIikubGVuZ3RoID4gMykgYmJzdHlsZSA9IG1ic3R5bGUuc3BsaXQoIi0iKVszXTsKICAgIGVsc2UgYmJzdHlsZSA9ICJQIjsKICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIikubGVuZ3RoID4gNSkgYmJwb3MgPSBtYnN0eWxlLnNwbGl0KCItIilbNV07CiAgICBlbHNlIGJicG9zID0gIkgiOwogICAgLy8gdG9nZ2xlY2l0ZWxpbmUoYmJwb3MpOyBjYWxsZWQgYnkgZml4dWlzdHlsZSgpCiAgICBhZGRBdCA9IGdoaFByZWZPLmFkZHRvbGlzdHBvc1swXTsKICAgIGxpc3RjaGdzID0gMDsKICAgIGJMVW9wZW4gPSAiTiI7CiAgICBiQWdncmVzcyA9IGdoaFByZWZPLmFnZ3Jlc3NpdmVibG9ja1swXTsKICAgIGJBSkFYID0gZ2hoUHJlZk8udXNlbXV0YXRpb25bMF0uc3BsaXQoIi0iKVswXTsKICAgIGlmIChnaGhQcmVmTy51c2VtdXRhdGlvblswXS5zcGxpdCgiLSIpLmxlbmd0aCA+IDEpIGJNdXRPYiA9IGdoaFByZWZPLnVzZW11dGF0aW9uWzBdLnNwbGl0KCItIilbMV07CiAgICBlbHNlIGJNdXRPYiA9ICJZIjsKICAgIHByZWYxY2xpY2sgPSBnaGhQcmVmTy5vbmVjbGlja1swXTsKICAgIGJldGF0ZXN0ID0gZ2hoUHJlZk8ucnVuYmV0YVswXTsKICAgIGlmIChkb2N1bWVudC5ib2R5KXsKICAgICAgICAvLyBBZGQgYnV0dG9ucywgaGlkZSB1bndhbnRlZCBkb21haW5zCiAgICAgICAgaGlkZWhpdHMobnVsbCxmYWxzZSk7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJHVFIiKSkgcmVtb3ZlUEJzKCk7CiAgICAgICAgLy8gU3BlY2lhbCByZXN1bHRzIGxheW91dAogICAgICAgIGlmIChiZXRhdGVzdCA9PSAiWSIpewogICAgICAgICAgICB2YXIgaXRibCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNyZXMgLmltYWdlc190YWJsZSIpOwogICAgICAgICAgICBpZiAoaXRibCkgaGlkZWJhc2ljKGl0YmwpOwogICAgICAgIH0KICAgICAgICAvLyBDcmVhdGUgc2tlbGV0b24gb2YgbWFuYWdlIGZvcm0KICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtbmdmb3JtIikpIGFkZE1hbmFnZUZvcm0oKTsKICAgICAgICAvLyBBZGQgbWFuYWdlIGJ1dHRvbgogICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaE1uZ0J0biIpICYmIG1ic3R5bGUuc3BsaXQoIi0iKVswXSAhPSAiYmxrIil7CiAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0dvb2dsZScpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXMiKSB8fCBpc2NoKSBhZGRNbmdCdG4oKTt9CiAgICAgICAgICAgIGVsc2UgYWRkTW5nQnRuKCk7CiAgICAgICAgfQogICAgICAgIC8vIFNob3cgcGFuZSBpZiBsYXN0IG9wZW4KICAgICAgICBpZiAobXBvcGVuLnN1YnN0cigwLDMpID09ICJZLVkiKSBzaG93TWFuYWdlRm9ybSgibW5nZm9ybSIpOwogICAgICAgIC8vIEFkZCBtZW51IGl0ZW0gLSBMZWdhY3kgT25seQogICAgICAgIGlmICh0eXBlb2YgR01fcmVnaXN0ZXJNZW51Q29tbWFuZCAhPSAidW5kZWZpbmVkIikgR01fcmVnaXN0ZXJNZW51Q29tbWFuZCgiTWFuYWdlIEhpZGluZyIsIHNob3dNYW5hZ2VGb3JtKTsKICAgICAgICAvLyBDcmVhdGUgYmxvY2sgZm9ybQogICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJsb2NrZm9ybSIpKSBhZGRCbG9ja0Zvcm0oKTsKICAgICAgICAvLyBXYXRjaCBmb3IgY2hhbmdlcyB0aGF0IGNvdWxkIGJlIG5ldyBpbnN0YW50IG9yIEFKQVggc2VhcmNoIHJlc3VsdHMKICAgICAgICBpZiAoYkFKQVggPT0gIm9uIikgc2V0TXV0YXRpb25XYXRjaCgpOwogICAgfQp9CgpmdW5jdGlvbiBzZXRNdXRhdGlvbldhdGNoKCl7CiAgICAvLyBQcmVmZXIgTXV0YXRpb25PYnNlcnZlciAoRmlyZWZveCAxNCspIG92ZXIgTXV0YXRpb24gRXZlbnRzCiAgICBNdXRPYiA9ICh3aW5kb3cuTXV0YXRpb25PYnNlcnZlcikgPyB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciA6IHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyOwogICAgaWYgKE11dE9iICYmIGJNdXRPYiA9PSAiWSIpewogICAgICAgIGNoZ01vbiA9IG5ldyBNdXRPYihmdW5jdGlvbihtdXRhdGlvblNldCl7CiAgICAgICAgICAgIG11dGF0aW9uU2V0LmZvckVhY2goZnVuY3Rpb24obXV0YXRpb24pewogICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT0gImNoaWxkTGlzdCIpewogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG11dGF0aW9uLmFkZGVkTm9kZXNbaV0ubm9kZVR5cGUgPT0gMSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja05vZGUobXV0YXRpb24uYWRkZWROb2Rlc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBhdHRyaWJ1dGUgbXV0YXRpb24gb24gR29vZ2xlIEltYWdlcwogICAgICAgICAgICAgICAgICAgIGlmKG11dGF0aW9uLnRhcmdldC5jbGFzc05hbWUgPT0gInJnX2wiKSBjaGVja05vZGUobXV0YXRpb24udGFyZ2V0LnBhcmVudE5vZGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICAvLyBhdHRhY2ggY2hnTW9uIHRvIGRvY3VtZW50LmJvZHkKICAgICAgICBpZiAoaXNjaCA9PSB0cnVlKSBvcHRzID0ge2NoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSwgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbImhyZWYiXSwgY2hhcmFjdGVyRGF0YTogZmFsc2V9OwogICAgICAgIGVsc2Ugb3B0cyA9IHtjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUsIGF0dHJpYnV0ZXM6IGZhbHNlLCBjaGFyYWN0ZXJEYXRhOiBmYWxzZX07CiAgICAgICAgY2hnTW9uLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgb3B0cyk7CiAgICB9IGVsc2UgaWYgKGJNdXRPYiA9PSAiWSIpIHsgLy8gTGVnYWN5IGJyb3dzZXIgc3VwcG9ydCBhbmQgQmFpZHUKICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoIkRPTVN1YnRyZWVNb2RpZmllZCIsIGNoZWNrT2xpc3QsIGZhbHNlKTsKICAgIH0KfQovLyA9PSA9PSA9PSBNYWluIEV2ZW50IExvb3BzID09ID09ID09CnZhciBpZ25vcmVOb2RlTmFtZXMgPSAifEJPRFl8I3RleHR8I2NvbW1lbnR8SU5QVVR8QlVUVE9OfFNDUklQVHxMSXxBfEZPUk18IjsKdmFyIGlnbm9yZUlkcyA9ICJ8bGVmdG5hdnxsZWZ0bmF2Y3xmb290fGdoaHRlbXB8Z2hoYmxvY2tmb3JtfGdoaG1hbmFnZWZvcm18Z2hoc2l0ZWxpc3R8Z2hocGJhbmxpc3R8cmhzfHJoc2NvbHwiOwp2YXIgaWdub3JlQ2xhc3MgPSAifGdoaGlkZXJ8Z2hoZGJ1dHRvbnN8Z2hoMXRpbWV8IjsKdmFyIHRfYXAsIHRfZ2ltZzsKCmZ1bmN0aW9uIGNoZWNrT2xpc3QoZSl7IC8vIENoZWNrIGZvciBuZXcgcmVzdWx0cyAvLyBOZWVkZWQgZm9yIEJhaWR1CiAgICB2YXIgZWwgPSBlLnRhcmdldDsKICAgIC8vIElnbm9yZSBldmVudHMgb24gc29tZSBlbGVtZW50cwogICAgaWYgKGlnbm9yZU5vZGVOYW1lcy5pbmRleE9mKCJ8IitlbC5ub2RlTmFtZSsifCIpID4gLTEpIHJldHVybjsKICAgIGlmIChlbC5oYXNBdHRyaWJ1dGUoImlkIikpe2lmIChpZ25vcmVJZHMuaW5kZXhPZigifCIrZWwuaWQrInwiKSA+IC0xKSByZXR1cm47fQogICAgaWYgKGVsLmhhc0F0dHJpYnV0ZSgiY2xhc3MiKSl7CiAgICAgICAgaWYgKGlnbm9yZUNsYXNzLmluZGV4T2YoInwiK2VsLmNsYXNzTmFtZSsifCIpID4gLTEpIHJldHVybjsKICAgICAgICBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCJnb29nLWRhdGUiKSkgcmV0dXJuOwogICAgfQogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpKXsKICAgICAgICBhZGRNYW5hZ2VGb3JtKCk7CiAgICAgICAgaW5qZWN0QmFzZUNTUygpOwogICAgICAgIGluamVjdEN1c3RvbSgpOwogICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaE1uZ0J0biIpICYmIG1ic3R5bGUuc3BsaXQoIi0iKVswXSAhPSAiYmxrIil7CiAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0dvb2dsZScpe2lmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXMiKSkgYWRkTW5nQnRuKCk7fQogICAgICAgICAgICBlbHNlIGFkZE1uZ0J0bigpOwogICAgICAgIH0KICAgICAgICAvLyBVc2UgZGVmYXVsdCBidXR0b24gc3R5bGUgZm9yIG5vdyAoMS45LjMpCiAgICAgICAgR0hIYkRfYWRkU3R5bGUoIiNnaGhNbmdCdG4ge3Bvc2l0aW9uOmZpeGVkO3RvcDoxNTBweDtyaWdodDotMi44ZW07LW1vei10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7IisKICAgICAgICAgICAgICAgICAgICAgICAiYm9yZGVyLWJvdHRvbTowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO3BhZGRpbmc6NnB4IDFweDt6LWluZGV4OjEwMDA7fSIpOwogICAgfQogICAgY2hlY2tOb2RlKGVsKTsKfQpmdW5jdGlvbiBjaGVja05vZGUoZWwpewogICAgaWYgKGVsLnBhcmVudE5vZGUgJiYgKGVsLnBhcmVudE5vZGUuaWQgPT0gJ2doaHNpdGVsaXN0JyB8fCBlbC5wYXJlbnROb2RlLmlkID09ICdnaGhwYmFubGlzdCcpKSByZXR1cm47IC8vIDIuMC42IGR1aCEKICAgIC8vIEF1dG9QYWdlciBleHRlbnNpb24KICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjbmF2Y250IikpewogICAgICAgIGlmICh0X2FwKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRfYXApOwogICAgICAgIHRfYXAgPSB3aW5kb3cuc2V0VGltZW91dChyZWZyZXNoTGlzdGVuZXJzLCA1MDApOwogICAgfQogICAgaWYgKGVsLm5vZGVOYW1lID09ICJMSSIgfHwgKGVsLm5vZGVOYW1lID09ICJESVYiICYmIChlbC5jbGFzc05hbWUgPT0gImciIHx8IGVsLmNsYXNzTGlzdC5jb250YWlucygicmdfZGkiKSB8fCBlbC5jbGFzc05hbWUgPT0gInJnc2giKSkgfHwKICAgICAgICBlbC5ub2RlTmFtZSA9PSAnRy1JTk5FUi1DQVJEJyB8fCBlbC5ub2RlTmFtZSA9PSAnRy1DQVJEJyB8fCBlbC5jbGFzc0xpc3QuY29udGFpbnMoImlzdi1yIikpIHZhciBubGlzdCA9IFtlbF07CiAgICBlbHNlIG5saXN0ID0gZWwucXVlcnlTZWxlY3RvckFsbCgnbGkuZywgZGl2LmcsIGRpdi5yZ19kaSwgZGl2Lmlzdi1yJyk7CiAgICBpZiAoZW5naW5lICE9ICdHb29nbGUnICYmIGVsLm5vZGVOYW1lICE9ICJMSSIpewogICAgICAgIGlmIChlbC5ub2RlTmFtZSA9PSAiRElWIiAmJiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCJyZXN1bHQtLXdlYiIpIHx8IGVsLmNsYXNzTGlzdC5jb250YWlucygicmVzdWx0LS1uZXdzIikgfHwgZWwuY2xhc3NOYW1lID09ICJjYXJkLW1vYmlsZSIpKSBubGlzdCA9IFtlbF07IC8vIFF3YW50LCBFY29zaWEKICAgICAgICBlbHNlIG5saXN0ID0gZWwucXVlcnlTZWxlY3RvckFsbCgnZGl2LnJlc3VsdCwgZGl2LnJlc3VsdC1vcCwgZGl2LmxpbmtzX21haW4sIGRpdi5zZXJwLWl0ZW0sIGRpdi5oZCwgbGkuYl9hbGdvLCBvbC5saXN0LWZsYXQgPiBsaSwgZGl2LmNhcmQtd2ViIGRpdi5jYXJkLW1vYmlsZScpOwogICAgfQogICAgaWYgKG5saXN0Lmxlbmd0aCA+IDApewogICAgICAgIGlmIChpc2NoKSBoaWRlaGl0cyhubGlzdCx0cnVlKTsKICAgICAgICBlbHNlIGhpZGVoaXRzKG5saXN0LGZhbHNlKTsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkdUUiIpKSByZW1vdmVQQnMoKTsKICAgIH0gZWxzZSBpZiAoZWwubm9kZU5hbWUgPT0gIkRJViIgJiYgKCAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCJpcmNfYyIpIHx8IGVsLmNsYXNzTGlzdC5jb250YWlucygiaXJjX2JnIikpIHx8IGVsLmlkID09ICdpcmNfYmcnKSApIHsKICAgICAgICB2YXIgYnV0dG9uZGl2cyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pcmNfYnV0Yzpub3QoW2doaHJlc3VsdF0pLCAuaXJjX2J1dF9yOm5vdChbZ2hocmVzdWx0XSksIC5pcmNfYWI6bm90KFtnaGhyZXN1bHRdKSwgLmlyY19idXRfcGRmcjpub3QoW2doaHJlc3VsdF0pJyk7CiAgICAgICAgZm9yICh2YXIgaz0wOyBrPGJ1dHRvbmRpdnMubGVuZ3RoOyBrKyspewogICAgICAgICAgICBidXR0b25kaXZzW2tdLnNldEF0dHJpYnV0ZSgiZ2hocmVzdWx0IiwgImltYWdlLXVuc2V0Iik7CiAgICAgICAgICAgIGJ1dHRvbmRpdnNba10uc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwogICAgICAgICAgICBpZiAoYnV0dG9uZGl2c1trXS5ub2RlTmFtZSA9PSAnVEFCTEUnKXsKICAgICAgICAgICAgICAgIHZhciB0ZG5ldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CiAgICAgICAgICAgICAgICB0ZG5ldy5pbm5lckhUTUwgPSAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIHRpdGxlPSJCbG9jay9VbmJsb2NrIiBjbGFzcz0iaXJjX2J1dCI+PHNwYW4gY2xhc3M9ImlyY19idXRfdCI+R0hIYkQ8L3NwYW4+PC9idXR0b24+JzsKICAgICAgICAgICAgICAgIGJ1dHRvbmRpdnNba10ucXVlcnlTZWxlY3RvcigndHInKS5hcHBlbmRDaGlsZCh0ZG5ldyk7CiAgICAgICAgICAgICAgICB0ZG5ldy5maXJzdENoaWxkLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaW1nYmxvY2tkaWFsb2csIGZhbHNlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBzcGFubmV3ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgICAgICAgc3Bhbm5ldy5zdHlsZS5tYXJnaW5MZWZ0ID0gJzEwcHgnOwogICAgICAgICAgICAgICAgc3Bhbm5ldy5pbm5lckhUTUwgPSAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIHRpdGxlPSJCbG9jay9VbmJsb2NrIiBjbGFzcz0iaXJjX2J1dCI+PHNwYW4gY2xhc3M9ImlyY19idXRfdCI+R0hIYkQ8L3NwYW4+PC9idXR0b24+JzsKICAgICAgICAgICAgICAgIGJ1dHRvbmRpdnNba10uYXBwZW5kQ2hpbGQoc3Bhbm5ldyk7CiAgICAgICAgICAgICAgICBzcGFubmV3LmZpcnN0Q2hpbGQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBpbWdibG9ja2RpYWxvZywgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICB2YXIgYWJ0biA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2Fbcm9sZT0iYnV0dG9uIl1baHJlZl0nKTsgLy8gR29vZ2xlIGltYWdlcyBzaWRlYmFyIDIwMjAtMDYtMjAKICAgICAgICBpZiAoYWJ0bi5sZW5ndGggPiAwICYmIGFidG5bMF0uY2xvc2VzdCgnYy13aXonKSAhPSBudWxsKSB2YXIgYWxuayA9IGFidG5bMF0uY2xvc2VzdCgnYy13aXonKS5xdWVyeVNlbGVjdG9yKCdhW3JvbGU9ImxpbmsiXVtocmVmXScpOwogICAgICAgIGlmIChhbG5rICYmICFhbG5rLnBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCdnaGhyZXN1bHQnKSkgewogICAgICAgICAgICBhbG5rLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCdnaGhyZXN1bHQnLCAnaW1hZ2UtdW5zZXQnKTsKICAgICAgICAgICAgdmFyIGRuZXcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgICAgZG5ldy5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3RleHQtYWxpZ246IHJpZ2h0Jyk7CiAgICAgICAgICAgIGRuZXcuaW5uZXJIVE1MID0gJzxidXR0b24gdHlwZT0iYnV0dG9uIiB0aXRsZT0iQmxvY2svVW5ibG9jayIgdXJsPSInICsgYWxuay5ocmVmICsgJyIgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlOyB0b3A6IDVlbTsgcmlnaHQ6IDZweDsgei1pbmRleDogMTAwMDsgY29sb3I6ICM2MDliZWI7IGJhY2tncm91bmQtY29sb3I6ICMzMzM7IGJvcmRlcjogMXB4IHNvbGlkICAjNjA5YmViOyI+R0hIYkQ8L2J1dHRvbj4nOwogICAgICAgICAgICBhbG5rLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGRuZXcsIGFsbmspOwogICAgICAgICAgICBkbmV3LmZpcnN0Q2hpbGQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBpbWdibG9ja2RpYWxvZywgZmFsc2UpOwogICAgICAgIH0KICAgIH0KICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZS5HSEhiRGNzcycpLmxlbmd0aCA9PT0gMCl7IC8vIEJpbmcgbG9zaW5nIHN0eWxlcy4uLiAyMDE4LTEwLTAxCiAgICAgICAgaW5qZWN0QmFzZUNTUygpOwogICAgICAgIGRvU2l0ZVNwZWNpZmljKCk7CiAgICAgICAgR0hIYkRfYWRkU3R5bGUoIiNnaGhNbmdCdG4ge3Bvc2l0aW9uOmZpeGVkO3RvcDoxNTBweDtyaWdodDotMi44ZW07LW1vei10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7IisKICAgICAgICAgICAgICAgICAgICAgICAiYm9yZGVyLWJvdHRvbTowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO3BhZGRpbmc6NnB4IDFweDt6LWluZGV4OjEwMDA7fSIpOwogICAgfQp9CnZhciBwYXJlbnRjYXJkOwpmdW5jdGlvbiBoaWRlaGl0cyhsaWVscyxvdnJkKXsKICAgIGlmICghbGllbHMpewogICAgICAgIGlmIChlbmdpbmUgPT0gJ0dvb2dsZScpewogICAgICAgICAgICBsaWVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNyZXMgbGkuZywgI3JlcyBkaXYuc3JnIGRpdi5nLCAjcmVzIGRpdi5fTklkIGRpdi5nLCAjcmVzIGRpdi5fYmtXTWdkIGRpdi5nLCAjcmVzICNyc28gZGl2LmcsICNyZXMgI0dUUiBkaXYuZywgI3JlcyAjaXNyX21jLCBnLXNlY3Rpb24td2l0aC1oZWFkZXIgZy1zY3JvbGxpbmctY2Fyb3VzZWwgZy1pbm5lci1jYXJkLCBnLWNhcmQgZGl2LmRic3IsIGctY2FyZCIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxpZWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGl2I3Jlc3VsdHMgbGksIGRpdiNyZXN1bHRzID4gZGl2LnJlc3VsdCwgZGl2I2xpbmtzID4gZGl2LnJlc3VsdHNfbGlua3NfZGVlcCA+IGRpdi5saW5rc19tYWluLCBkaXYjYl9jb250ZW50IG9sID4gbGkuYl9hbGdvLCBkaXYjcmVzdWx0cyBkaXYjd2ViID4gb2wgPiBsaSwgZGl2I1dTMm0gPiBkaXYudywgZGl2LnN3LUNhcmRCYXNlLCBkaXYuc2VycC1saXN0ID4gZGl2LnNlcnAtaXRlbSwgdWwuc2VycC1saXN0ID4gbGkuc2VycC1pdGVtLCBkaXYjbWFpbl9yZXN1bHRzID4gZGl2LnJlc3VsdCwgZGl2LnJlc3VsdHMtY29sdW1uIGRpdi5yZXN1bHQtLXdlYiwgZGl2LnJlc3VsdHMtY29sdW1uIGRpdi5yZXN1bHQtLW5ld3MsICNjb250ZW50X2xlZnQgPiBkaXYucmVzdWx0LmMtY29udGFpbmVyLCAjY29udGVudF9sZWZ0ID4gZGl2LnJlc3VsdC1vcC5jLWNvbnRhaW5lciwgb2wubGlzdC1mbGF0ID4gbGksIGRpdi53LWdsX19yZXN1bHQsIGRpdi5jYXJkLXdlYiBkaXYuY2FyZC1tb2JpbGUnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFsaWVscykgcmV0dXJuOwogICAgfQogICAgaWYgKGlzY2ggJiYgbGllbHMubGVuZ3RoPT0wKXsKICAgICAgICBsaWVscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2Rpdi5yZ19kaSwgZGl2Lmlzdi1yJyk7CiAgICB9IGVsc2UgaWYgKGxpZWxzLmxlbmd0aD09MCl7CiAgICAgICAgaWYgKGVuZ2luZSA9PSAnR29vZ2xlJyl7CiAgICAgICAgICAgIGxpZWxzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI3JlcyBsaS5nLCAjcmVzIGRpdi5zcmcgZGl2LmcsICNyZXMgZGl2Ll9OSWQgZGl2LmcsICNyZXMgZGl2Ll9ia1dNZ2QgZGl2LmcsICNyZXMgI3JzbyBkaXYuZywgI3JlcyAjR1RSIGRpdi5nLCAjcmVzICNpc3JfbWMsIGctc2VjdGlvbi13aXRoLWhlYWRlciBnLXNjcm9sbGluZy1jYXJvdXNlbCBnLWlubmVyLWNhcmQsIGctY2FyZCBkaXYuZGJzciwgZy1jYXJkIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGllbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkaXYjcmVzdWx0cyBsaSwgZGl2I3Jlc3VsdHMgPiBkaXYucmVzdWx0LCBkaXYjbGlua3MgPiBkaXYucmVzdWx0c19saW5rc19kZWVwID4gZGl2LmxpbmtzX21haW4sIGRpdiNiX2NvbnRlbnQgb2wgPiBsaS5iX2FsZ28sIGRpdiNyZXN1bHRzIGRpdiN3ZWIgPiBvbCA+IGxpLCBkaXYjV1MybSA+IGRpdi53LCBkaXYuc3ctQ2FyZEJhc2UsIGRpdi5zZXJwLWxpc3QgPiBkaXYuc2VycC1pdGVtLCB1bC5zZXJwLWxpc3QgPiBsaS5zZXJwLWl0ZW0sIGRpdiNtYWluX3Jlc3VsdHMgPiBkaXYucmVzdWx0LCBkaXYucmVzdWx0cy1jb2x1bW4gZGl2LnJlc3VsdC0td2ViLCBkaXYucmVzdWx0cy1jb2x1bW4gZGl2LnJlc3VsdC0tbmV3cywgI2NvbnRlbnRfbGVmdCA+IGRpdi5yZXN1bHQuYy1jb250YWluZXIsICNjb250ZW50X2xlZnQgPiBkaXYucmVzdWx0LW9wLmMtY29udGFpbmVyLCBvbC5saXN0LWZsYXQgPiBsaSwgZGl2LnctZ2xfX3Jlc3VsdCwgZGl2LmNhcmQtd2ViIGRpdi5jYXJkLW1vYmlsZScpOwogICAgICAgIH0KICAgIH0KICAgIGlmIChsaWVscy5sZW5ndGggPT0gMCkgcmV0dXJuOwogICAgaWYgKGxpZWxzLmxlbmd0aCA9PSAxKXsgLy8gR29vZ2xlIFN0YW5kYXJkIEltYWdlIFJlc3VsdHMKICAgICAgICBpZihsaWVsc1swXS5pZCA9PSAiaXNyX21jIikgbGllbHMgPSBsaWVsc1swXS5xdWVyeVNlbGVjdG9yQWxsKCIucmdfZGkiKTsKICAgIH0KICAgIHZhciBob3N0cywgaGlkZXJzLCBuaGlkZXIsIGksIGosIGssIGhpZCwgYWVsLCBhaHJlZiwgZG9tLCBkb21wYXJ0LCBidG4sIGFwYXIsIGRnb25lLCBwYmFuLCBsaW5rd2lkdGg7CiAgICBob3N0cyA9IGJsaXN0OwogICAgZm9yIChpPTA7IGk8bGllbHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmICgobGllbHNbaV0ucGFyZW50Tm9kZS5ub2RlTmFtZSA9PSAiT0wiIHx8IGxpZWxzW2ldLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gIlREIiB8fAogICAgICAgICAgICAgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJjYXJkLXNlY3Rpb24iKSB8fCBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoImN0LWNzIikgfHwgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJ3LWdsX19yZXN1bHQiKSB8fAogICAgICAgICAgICAgKGxpZWxzW2ldLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gIkRJViIgJiYgKGxpZWxzW2ldLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCJzcmciKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLnBhcmVudE5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCJfTklkIikgfHwgbGllbHNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNsYXNzTGlzdC5jb250YWlucygiX05JZCIpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0ucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoImJrV01nZCIpIHx8IGxpZWxzW2ldLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoImJrV01nZCIpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0ubm9kZU5hbWUgPT09ICdHLUlOTkVSLUNBUkQnIHx8IGxpZWxzW2ldLm5vZGVOYW1lID09PSAnRy1DQVJEJykpIHx8CiAgICAgICAgICAgICAobGllbHNbaV0ucGFyZW50Tm9kZS5ub2RlTmFtZSA9PSAiRElWIiAmJiBsaWVsc1tpXS5jbG9zZXN0KCcjcnNvJykgIT09IG51bGwpIHx8CiAgICAgICAgICAgICAoZW5naW5lICE9ICdHb29nbGUnICYmIGxpZWxzW2ldLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gIkRJViIpIHx8CiAgICAgICAgICAgICBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoJ3NlcnAtaXRlbScpKSAmJgogICAgICAgICAgICBsaWVsc1tpXS5jbGFzc05hbWUuaW5kZXhPZigiZ2J0IikhPTAgJiYKICAgICAgICAgICAgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJncGx1c2dyaWQiKSA9PT0gZmFsc2UgJiYKICAgICAgICAgICAgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtaXRlbSIpID09PSBmYWxzZSAmJgogICAgICAgICAgICBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoImtuby1rcCIpID09PSBmYWxzZSkgewogICAgICAgICAgICBsaWVsc1tpXS5zZXRBdHRyaWJ1dGUoImdoaHJlc3VsdCIsInVuc2V0Iik7CiAgICAgICAgICAgIGhpZGVycyA9IGxpZWxzW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImdoaGlkZXIiKTsKICAgICAgICAgICAgbmhpZGVyID0gaGlkZXJzLmxlbmd0aDsKICAgICAgICAgICAgaWYgKG5oaWRlciA9PSAwIHx8IG92cmQgPT0gdHJ1ZSl7IC8vIHNraXAgaWYgYSBidXR0b24gaXMgdGhlcmUKICAgICAgICAgICAgICAgIGhpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgYWVsID0gbGllbHNbaV0ucXVlcnlTZWxlY3RvcigiZGl2LnIgPiBhLCBoMyBhLCBkaXYucmMgYSIpOyAvLyBmaXJzdCBsaW5rIChub3QgdXNlZnVsIGZvciB2aWRlbyBvciBib29rIGJsb2NrcyksIDxoMz4gcHJlZmVycmVkCiAgICAgICAgICAgICAgICBpZiAoIWFlbCB8fCBhZWwucGFyZW50Tm9kZS5jbGFzc05hbWU9PSdkZWVwbGlua190aXRsZScpIGFlbCA9IGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3IoImgyIGEsIGg0IGEiKTsKICAgICAgICAgICAgICAgIGlmICghYWVsKSBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCJhIik7CiAgICAgICAgICAgICAgICBpZiAobGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJ2aWRlb2JveCIpKSBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yQWxsKCJ0ZCIpWzFdLnF1ZXJ5U2VsZWN0b3IoImEiKTsgLy92aWRlbyBwYWdlCiAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnICYmIGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCdhZHRlc3Q9b24nKSA+IC0xKXsKICAgICAgICAgICAgICAgICAgICBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCdjaXRlJyk7CiAgICAgICAgICAgICAgICAgICAgaWYoYWVsKXtpZighYWVsLmhhc0F0dHJpYnV0ZSgnaHJlZicpKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFlbC50ZXh0Q29udGVudC5pbmRleE9mKCdodHRwOi8vJyk9PT0tMSAmJiBhZWwudGV4dENvbnRlbnQuaW5kZXhPZignaHR0cHM6Ly8nKT09PS0xKSBhZWwuc2V0QXR0cmlidXRlKCdocmVmJywgJ2h0dHA6Ly8nK2FlbC50ZXh0Q29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgYWVsLnNldEF0dHJpYnV0ZSgnaHJlZicsIGFlbC50ZXh0Q29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgfX0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0JhaWR1Jyl7CiAgICAgICAgICAgICAgICAgICAgaWYobGllbHNbaV0uaGFzQXR0cmlidXRlKCdtdScpKXsKICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0uaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCAnPHNwYW4gc3R5bGU9ImRpc3BsYXk6bm9uZSI+PGEgY2xhc3M9ImMtc2hvd3VybCIgaHJlZj0iJyArIGxpZWxzW2ldLmdldEF0dHJpYnV0ZSgnbXUnKSArJyI+JyArIGxpZWxzW2ldLmdldEF0dHJpYnV0ZSgnbXUnKSArICc8L2E+PC9zcGFuPicpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCJhLmMtc2hvd3VybCIpOwogICAgICAgICAgICAgICAgICAgIGlmKGFlbCl7aWYoIWFlbC5oYXNBdHRyaWJ1dGUoJ2hyZWYnKSl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZWwudGV4dENvbnRlbnQuaW5kZXhPZignaHR0cDovLycpPT09LTEgJiYgYWVsLnRleHRDb250ZW50LmluZGV4T2YoJ2h0dHBzOi8vJyk9PT0tMSkgYWVsLnNldEF0dHJpYnV0ZSgnaHJlZicsICdodHRwOi8vJythZWwudGV4dENvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFlbC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBhZWwudGV4dENvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgIH19CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdTdGFydHBhZ2UnKXsKICAgICAgICAgICAgICAgICAgICBhZWwgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCdhLnJlc3VsdC1saW5rJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoYWVsKXthaHJlZj1hZWwuZ2V0QXR0cmlidXRlKCJocmVmIik7IGlmKGFocmVmKXtpZiAoYWhyZWYuc2VhcmNoKC9odHRwfGZ0cC9pKT09MCB8fCBhaHJlZi5pbmRleE9mKCIvaW50ZXJzdGl0aWFsIik9PTAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaHJlZi5pbmRleE9mKCIvdXJsP3E9Iik9PTAgfHwgYWhyZWYuaW5kZXhPZihjdXJyZW50RysiL3VybD9xPSIpPi0xIHx8IGFocmVmLmluZGV4T2YoIi91cmw/c2E9Iik9PTAgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWhyZWYuaW5kZXhPZigiL2FjbGs/Iik9PTAgJiYgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJwc2xpIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYWhyZWYuaW5kZXhPZigiLy9yLnNlYXJjaC55YWhvbyIpPT0wIHx8IGFocmVmLmluZGV4T2YoY3VycmVudEcrIi9saW5rP3VybD0iKT4tMSl7CiAgICAgICAgICAgICAgICAgICAgZG9tID0gYWhyZWYuc3Vic3RyKGFocmVmLnNlYXJjaCgvaHR0cHxmdHAvaSkpOwogICAgICAgICAgICAgICAgICAgIGlmIChhZWwuaGFzQXR0cmlidXRlKCJkYXRhLWhyZWYiKSkgZG9tID0gYWVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ocmVmIikuc3Vic3RyKGFlbC5nZXRBdHRyaWJ1dGUoImRhdGEtaHJlZiIpLmluZGV4T2YoImh0dHAiKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbS5pbmRleE9mKGN1cnJlbnRHKyIvYWNsaz8iKT4tMSkgZG9tID0gYWhyZWYuc3Vic3RyKGFocmVmLmluZGV4T2YoImh0dHAiLCAxMCkpOwogICAgICAgICAgICAgICAgICAgIGlmIChhaHJlZi5pbmRleE9mKCIvdXJsP3NhPSIpPi0xKSBkb20gPSBkZWNvZGVVUklDb21wb25lbnQoYWhyZWYuc3Vic3RyKGFocmVmLmluZGV4T2YoIiZ1cmw9IikrNSkpOwogICAgICAgICAgICAgICAgICAgIGlmIChhaHJlZi5pbmRleE9mKCJyLnNlYXJjaC55YWhvby5jb20vX3lsdD0iKT4tMSkgZG9tID0gZGVjb2RlVVJJQ29tcG9uZW50KGFocmVmLnN1YnN0cihhaHJlZi5pbmRleE9mKCJSVT1odHRwIikrMykpOwogICAgICAgICAgICAgICAgICAgIGlmIChkb20uaW5kZXhPZigic2VhcmNoLnlhaG9vLmNvLmpwL3IvRk9SPSIpPi0xKSBkb20gPSBkZWNvZGVVUklDb21wb25lbnQoYWhyZWYuc3Vic3RyKGFocmVmLmluZGV4T2YoIi8qKmh0dHAiKSszKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbS5pbmRleE9mKCJodHRwczovL2l4cXVpY2stcHJveHkuY29tL2RvL3NwZy9oaWdobGlnaHQucGwiKT4tMSkgZG9tID0gZGVjb2RlVVJJQ29tcG9uZW50KGFocmVmLnN1YnN0cihhaHJlZi5pbmRleE9mKCImdT1odHRwIikrMykpOwogICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Ry5pbmRleE9mKCJiYWlkdSIpID4gLTEpIGRvbSA9ICcvLycgKyBhZWwudGV4dENvbnRlbnQucmVwbGFjZSgnaHR0cHM6Ly8nLCAnJykucmVwbGFjZSgnaHR0cDovLycsICcnKS5yZXBsYWNlKCcuLi4uJywgJycpOwogICAgICAgICAgICAgICAgICAgIC8vIGlmIChkb20uaW5kZXhPZigiaW1ncmVmdXJsIik+LTEpIGRvbSA9IGRvbS5tYXRjaCgvaW1ncmVmdXJsPShbXiZdKykvKVsxXTsKICAgICAgICAgICAgICAgICAgICBkb20gPSBkb20uc3BsaXQoIi8iKVsyXTsKICAgICAgICAgICAgICAgICAgICBpZiAoZG9tLmluZGV4T2YoIjoiKT4gLTEpIGRvbSA9IGRvbS5zdWJzdHIoMCxkb20uaW5kZXhPZigiOiIpKTsgLy8gU3RyaXAgcG9ydCBudW1iZXIKICAgICAgICAgICAgICAgICAgICBkb21wYXJ0ID0gZG9tOwogICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLnNldEF0dHJpYnV0ZSgiZ2hoaG9zdCIsZG9tcGFydCk7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRvbXBhcnQuaW5kZXhPZigiLiIpPiAtMSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdHMuaW5kZXhPZigifCIrZG9tcGFydCsiOiIpPi0xKSB7IC8vIFRoZXNlIGRvbWFpbnMgc3VjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5oaWRlciA+IDApeyAvLyBSZW1vdmUgb2xkIGJ1dHRvbnMsIG5vdGljZXMsIGV0Yy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGs9aGlkZXJzLmxlbmd0aC0xOyBrPj0wOyBrLS0pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlcnNba10ucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5oaWRlciA9IGxpZWxzW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImdoaGlkZXIiKS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygiZ2hoMXRpbWUiKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3N0cy5pbmRleE9mKCJ8Iitkb21wYXJ0KyI6cCIpPDApIHsgLy8gUmVndWxhciBibG9jawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvd1lOPT0iWSIpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygicmVzdWx0c19saW5rc19kZWVwIikpeyAvLyBEREcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBsYWNlSGl0KGRvbXBhcnQsYWVsLGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3IoIi5saW5rc19tYWluIiksIiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSByZXBsYWNlSGl0KGRvbXBhcnQsYWVsLGxpZWxzW2ldLCIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJlcGxhY2VIaXQoZG9tcGFydCxhZWwsbGllbHNbaV0sIm5vbmUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBQZXJtYS1iYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0uc2V0QXR0cmlidXRlKCJibG9ja2hpZGRlbiIsZG9tcGFydCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgIT0gJ0dvb2dsZScgJiYgbGllbHNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhkbm9uZSIpID09PSBmYWxzZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5jbGFzc0xpc3QuYWRkKCdnaGhkbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygibGlua3NfbWFpbiIpKSBsaWVsc1tpXS5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQoJ2doaGRub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZ2luZSA9PSAnRERHJyAmJiBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoInJlc3VsdHNfbGlua3NfZGVlcCIpKSBraWRzID0gbGllbHNbaV0ubGFzdEVsZW1lbnRDaGlsZC5jaGlsZHJlbjsgLy9EREcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGtpZHMgPSBsaWVsc1tpXS5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGo9MDsgajxraWRzLmxlbmd0aDsgaisrKXsgLy8gSGlkZSBHb29nbGUgcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChraWRzW2pdLmNsYXNzTGlzdC5jb250YWlucygiZ2hoaWRlciIpID09PSBmYWxzZSAmJiBraWRzW2pdLmNsYXNzTGlzdC5jb250YWlucygiZ2hoZG5vbmUiKSA9PT0gZmFsc2UpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lkc1tqXS5jbGFzc0xpc3QuYWRkKCdnaGhkbm9uZScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygicHNsaSIpKSBsaWVsc1tpXS5zdHlsZS5wYWRkaW5nID0gIjAiOyAvLyBTaG9wcGluZyByZXN1bHRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21wYXJ0ID0gZG9tcGFydC5zbGljZShkb21wYXJ0LmluZGV4T2YoIi4iKSsxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21wYXJ0LmluZGV4T2YoIi4iKSA9PT0gLTEgJiYgZG9tcGFydCAhPSAidGxkIikgZG9tcGFydCArPSAnLnRsZCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKGhpZCA9PSBmYWxzZSAmJiBuaGlkZXIgPiAxKSB7IC8vIFJlbW92ZSBwcmV2aW91cyBibG9jayAmIHJlc2V0IG5oaWRlcgogICAgICAgICAgICAgICAgICAgICAgICBpZiAobGllbHNbaV0uY2hpbGRyZW5bMF0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhkIikpIGxpZWxzW2ldLmNoaWxkcmVuWzBdLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhbiB1cCB1bmJsb2NrZWQgb25lLXRpbWVzCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoImdoaDF0aW1lIikpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGllbHNbaV0uY2xhc3NMaXN0LnJlbW92ZSgnZ2hoMXRpbWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRnb25lID0gbGllbHNbaV0uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZ2hoZCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRnb25lLmxlbmd0aCA+IDApIGRnb25lWzBdLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGdvbmUgPSBsaWVsc1tpXS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJnaGhkYnV0dG9ucyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRnb25lLmxlbmd0aCA+IDApIGRnb25lWzBdLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG5oaWRlciA9IGxpZWxzW2ldLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImdoaGlkZXIiKS5sZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChoaWQgPT0gZmFsc2UgJiYgKG5oaWRlciA9PSAwIHx8IGxpZWxzW2ldLmNoaWxkcmVuWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ2ctc2VjdGlvbi13aXRoLWhlYWRlcicpKSB7IC8vIE5vdCBibG9ja2VkLCBpbnNlcnQgYmxvY2sgYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpcnN0LCByZW1vdmUgaGlkaW5nIGZvciB1bmJsb2NrZWQgZG9tYWlucwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdEREcnICYmIGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygicmVzdWx0c19saW5rc19kZWVwIikpIGtpZHMgPSBsaWVsc1tpXS5sYXN0RWxlbWVudENoaWxkLmNoaWxkcmVuOyAvL0RERwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGtpZHMgPSBsaWVsc1tpXS5jaGlsZHJlbjsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqPTA7IGo8a2lkcy5sZW5ndGg7IGorKyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2lkc1tqXS5jbGFzc0xpc3QuY29udGFpbnMoImdoaGRub25lIikpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpZHNbal0uY2xhc3NMaXN0LnJlbW92ZSgnZ2hoZG5vbmUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAobGllbHNbaV0uaGFzQXR0cmlidXRlKCJibG9ja2hpZGRlbiIpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiYmxvY2toaWRkZW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLmNsYXNzTGlzdC5yZW1vdmUoJ2doaGRub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdEREcnICYmIGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygibGlua3NfbWFpbiIpKSBsaWVsc1tpXS5wYXJlbnROb2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2doaGRub25lJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmhhc0F0dHJpYnV0ZSgiYmxvY2tub3RpY2UiKSkgbGllbHNbaV0ucmVtb3ZlQXR0cmlidXRlKCJibG9ja25vdGljZSIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAobGllbHNbaV0ucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImJsb2Nrbm90aWNlIikpIGxpZWxzW2ldLnBhcmVudE5vZGUucmVtb3ZlQXR0cmlidXRlKCJibG9ja25vdGljZSIpOyAvL0RERwogICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgYmxvY2sgYnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgIGFwYXIgPSBhZWw7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0dvb2dsZScpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCdhZHRlc3Q9b24nKSA+IC0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyID0gbGllbHNbaV0ucXVlcnlTZWxlY3RvcigiaDMgYSwgYSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXBhci5oYXNBdHRyaWJ1dGUoJ2hyZWZvcmlnaW5hbCcpKSBhcGFyLnNldEF0dHJpYnV0ZSgnaHJlZm9yaWdpbmFsJywgYWVsLmdldEF0dHJpYnV0ZSgnaHJlZicpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcGFyLmhhc0F0dHJpYnV0ZSgnaHJlZm9yaWdpbmFsJykpIGFwYXIuc2V0QXR0cmlidXRlKCdocmVmb3JpZ2luYWwnLCBhcGFyLmhyZWYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0JhaWR1Jyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyID0gbGllbHNbaV0ucXVlcnlTZWxlY3RvcigiaDMgYSwgLmMtcmVzdWx0LWNvbnRlbnQgYSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcGFyICYmIGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3IoInAub3Bfc2l0ZV9kb21haW5fdGl0bGUsIGRpdi5vcF9nZW5lcmFscWFfbWFpbi5jLXJvdyIpICE9IG51bGwpIGFwYXIgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yKCJwLm9wX3NpdGVfZG9tYWluX3RpdGxlLCBkaXYub3BfZ2VuZXJhbHFhX21haW4uYy1yb3ciKS5maXJzdENoaWxkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcGFyICE9IG51bGwgJiYgIWFwYXIubmV4dEVsZW1lbnRTaWJsaW5nKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcGFyLnBhcmVudE5vZGUubm9kZU5hbWUgIT0gIkxJIiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYXIucGFyZW50Tm9kZS5ub2RlTmFtZSAhPSAiVEQiICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhci5wYXJlbnROb2RlLm5vZGVOYW1lICE9ICJIMiIpIGFwYXIgPSBhcGFyLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwYXIgIT0gbnVsbCAmJiBhcGFyICE9IHVuZGVmaW5lZCkgeyBpZiAoZG9tLmluZGV4T2YoY3VycmVudEcpPDAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGllbHNbaV0ucGFyZW50Tm9kZSAhPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjdGFkcyBvbCIpKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaWVsc1tpXS5wYXJlbnROb2RlICE9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNib3R0b21hZHMgb2wiKSkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGllbHNbaV0ucGFyZW50Tm9kZSAhPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWRzIGRpdiIpKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaWVsc1tpXS5wYXJlbnROb2RlICE9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNyaHMgb2wiKSkpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0cy5ibG9ja1swXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuLmNsYXNzTmFtZT0iZ2hoaWRlciBnaGhiIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bi5zZXRBdHRyaWJ1dGUoIm1ldGEiLGRvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZjFjbGljay5zdWJzdHIoMCwxKSA9PSAiWSIgJiYgbWJzdHlsZS5zcGxpdCgiLSIpWzRdID09ICJZIil7IC8vQlVHOiBmb3IgMS1jbGljayB3aXRoIGFnZ3Jlc3NpdmUgKHN1YmRvbWFpbikgc2V0dGluZ3MsIGRvbSB3aWxsIGJlIGluY29ycmVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0dvb2dsZScpIGJ0bi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQmxvY2sgIitkb20rIiAvIFNISUZUK2NsaWNrIHRvIGRpc3BsYXkgYmxvY2sgZm9ybSAvIEFMVCtjbGljayB0byBvbWl0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBidG4uc2V0QXR0cmlidXRlKCJ0aXRsZSIsIkJsb2NrICIrZG9tKyIgLyBTSElGVCtjbGljayB0byBkaXNwbGF5IGJsb2NrIGZvcm0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWJzdHlsZS5zcGxpdCgiLSIpWzRdID09ICJZIil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZ2luZSA9PSAnR29vZ2xlJykgYnRuLnNldEF0dHJpYnV0ZSgidGl0bGUiLCJCbG9jayAiK2RvbSsiIC8gU2hvdyBibG9jayBmb3JtIC8gQUxUK2NsaWNrIHRvIG9taXQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGJ0bi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQmxvY2sgIitkb20rIiAvIFNob3cgYmxvY2sgZm9ybSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixzaG93YmZkLHRydWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUG9zaXRpb24gYnV0dG9uIGluc2lkZSB0aGUgSDIgb3IgSDMgb3IgSDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcGFyLm5vZGVOYW1lID09ICJIMyIgfHwgYXBhci5ub2RlTmFtZSA9PSAiSDIiIHx8IGFwYXIubm9kZU5hbWUgPT0gIkg0IiB8fCBlbmdpbmUgPT0gJ1N0YXJ0cGFnZScpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwYXIuc3R5bGUub3ZlcmZsb3cgPSAidmlzaWJsZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhci5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZ1bGwgbGluayB0ZXh0IHRvb2x0aXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5naW5lID09ICdZYWhvbycgJiYgYXBhci5xdWVyeVNlbGVjdG9yKCdhJykuY2hpbGROb2Rlc1swXS5ub2RlTmFtZSA9PSAnU1BBTicpIGFwYXIucXVlcnlTZWxlY3RvcignYScpLnNldEF0dHJpYnV0ZSgidGl0bGUiLGFwYXIucXVlcnlTZWxlY3RvcignYScpLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQpOyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGFwYXIucXVlcnlTZWxlY3RvcignYScpLnNldEF0dHJpYnV0ZSgidGl0bGUiLGFwYXIucXVlcnlTZWxlY3RvcignYScpLnRleHRDb250ZW50KTsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwYXIucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lID09ICdHLUNBUkQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYnRuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyLnBhcmVudE5vZGUucGFyZW50Tm9kZS5zdHlsZS5vdmVyZmxvd1kgPSAndmlzaWJsZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhci5wYXJlbnROb2RlLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0ID0gJ3Vuc2V0JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcGFyLnBhcmVudE5vZGUucGFyZW50Tm9kZS5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwYXIucGFyZW50Tm9kZS5jbGFzc05hbWUgPT0gJ2Ric3InKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBhci5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGJ0bik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Y2FyZCA9IGFwYXIuY2xvc2VzdCgnZy1jYXJkJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudGNhcmQpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRjYXJkLnN0eWxlLm92ZXJmbG93WSA9ICd2aXNpYmxlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Y2FyZC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBhci5uZXh0U2libGluZykgYXBhci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShidG4sYXBhci5uZXh0U2libGluZyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBhcGFyLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYnRuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgYnV0dG9uIHRvIGNpdGVsaW5lIDYvMTAvMjAxMzsgdXBkYXRlZCA4LzE2LzIwMjAgdG8gbG9vayBmb3IgYWN0aW9uLW1lbnUgZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYnBvcyA9PSAiQyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXhubWVudSA9IGxpZWxzW2ldLnF1ZXJ5U2VsZWN0b3IoIi5hY3Rpb24tbWVudSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXRlbGluZXMgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yQWxsKCJjaXRlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF4bm1lbnUpeyAvLyBwYXJlbnROb2RlIGlzIGEgc3BhbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheG5tZW51LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGJ0biwgYXhubWVudSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaXRlbGluZXMubGVuZ3RoID4gMCkgYXhubWVudS5wYXJlbnROb2RlLmNsYXNzTmFtZSA9IGNpdGVsaW5lc1swXS5jbGFzc05hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2l0ZW51bT0wOyBjaXRlbnVtPGNpdGVsaW5lcy5sZW5ndGg7IGNpdGVudW0rKyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoY2l0ZWxpbmVzW2NpdGVudW1dKS52aXNpYmlsaXR5ICE9ICJoaWRkZW4iKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXRlbGluZXNbY2l0ZW51bV0ucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bi5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZ2luZSA9PSAnR29vZ2xlJykgYnRuLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBhZGQgdG8gdmlzaWJpbGl0eTpoaWRkZW4gZWxlbWVudCBmb3Igc3BhY2luZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdGVsaW5lc1tjaXRlbnVtXS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGJ0bi5jbG9uZU5vZGUodHJ1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmdpbmUgPT0gJ0dvb2dsZScpIGJ0bi5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnRwYWdlLmNvbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXRlbGluZXMgPSBsaWVsc1tpXS5xdWVyeVNlbGVjdG9yQWxsKCcudy1nbF9fcmVzdWx0LXVybC1jb250YWluZXInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNpdGVsaW5lcy5sZW5ndGggPiAwKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpdGVsaW5lc1swXS5hcHBlbmRDaGlsZChidG4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEltcGxlbWVudCBNb3VzZW92ZXIgT3B0aW9uIDYvMjIvMjAxMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJic3R5bGUgPT0gIk0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW92ZXIiLHRvZ2dsZWJidG4sZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3V0Iix0b2dnbGViYnRuLGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF2b2lkIHVuaGlkaW5nIGdhcmJhZ2Ugc3BhbiA1LzI1LzIwMTIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaj0wOyBqPGxpZWxzW2ldLmNoaWxkcmVuLmxlbmd0aDsgaisrKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGllbHNbaV0uY2hpbGRyZW5bal0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhpZGVyIikgPT09IGZhbHNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNoaWxkcmVuW2pdLnN0eWxlLmRpc3BsYXk9PSJub25lIikgbGllbHNbaV0uY2hpbGRyZW5bal0uc2V0QXR0cmlidXRlKCJ3YXNkaXNwbGF5bm9uZSIsIndhc2Rpc3BsYXlub25lIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH19fQogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsgLy8gQ2hlY2sgZm9yIGFuZCBoYW5kbGUgR29vZ2xlIHN0YW5kYXJkIGltYWdlIHJlc3VsdHMgLSBkb2Vzbid0IHlldCBzdXBwb3J0IEJBU0lDIGltYWdlIHJlc3VsdHMKICAgICAgICAgICAgaWYgKGxpZWxzW2ldLmNsYXNzTGlzdC5jb250YWlucygicmdfZGkiKSB8fCBsaWVsc1tpXS5jbGFzc0xpc3QuY29udGFpbnMoImlzdi1yIikpewogICAgICAgICAgICAgICAgaWYgKCFsaWVsc1tpXS5oYXNBdHRyaWJ1dGUoImltZ2Jsb2NrIikgfHwgb3ZyZCA9PSB0cnVlKXsgLy8gc2tpcCBpZiBwcmV2aW91c2x5IHByb2Nlc3NlZAogICAgICAgICAgICAgICAgICAgIGxpZWxzW2ldLnNldEF0dHJpYnV0ZSgiaW1nYmxvY2siLCAibm9ybWFsIik7CiAgICAgICAgICAgICAgICAgICAgYWVsID0gbGllbHNbaV0ucXVlcnlTZWxlY3RvcignYVtocmVmKj0iLiJdJyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFlbCAmJiBhZWwuaHJlZi5pbmRleE9mKCcvc2VhcmNoPycpID09IC0xKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFlbC5nZXRBdHRyaWJ1dGUoImhyZWYiKS5pbmRleE9mKCJpbWdyZWZ1cmwiKT4tMSl7IC8vIFNpdGUgc2hvd2luZyB0aGUgaW1hZ2UgKCJ2aXNpdCBwYWdlIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSA9IGRlY29kZVVSSUNvbXBvbmVudChhZWwuaHJlZikubWF0Y2goL2ltZ3JlZnVybD0oW14mXSspLylbMV0uc3BsaXQoIi8iKVsyXTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhZWwuZ2V0QXR0cmlidXRlKCJocmVmIikuaW5kZXhPZigiaW1ndXJsIik+LTEpeyAvLyBTaXRlIGhvc3RpbmcgdGhlIGltYWdlICgidmlldyBpbWFnZSIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20gPSBkZWNvZGVVUklDb21wb25lbnQoYWVsLmhyZWYpLm1hdGNoKC9pbWd1cmw9KFteJl0rKS8pWzFdLnNwbGl0KCIvIilbMl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vc29tZXRpbWVzIHlvdSBnZXQgYSBjbGVhbiBVUkwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbSA9IGFlbC5nZXRBdHRyaWJ1dGUoImhyZWYiKS5zcGxpdCgiLyIpWzJdOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb20ubGVuZ3RoID4gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9tLmluZGV4T2YoIjoiKT4gLTEpIGRvbSA9IGRvbS5zdWJzdHIoMCxkb20uaW5kZXhPZigiOiIpKTsgLy8gU3RyaXAgcG9ydCBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbXBhcnQgPSBkb207CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZG9tcGFydC5pbmRleE9mKCIuIik+IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RzLmluZGV4T2YoInwiK2RvbXBhcnQrIjoiKT4tMSkgeyAvLyBUaGVzZSBkb21haW5zIHN1Y2sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvc3RzLmluZGV4T2YoInwiK2RvbXBhcnQrIjpwIik8MCkgeyAvLyBSZWd1bGFyIGJsb2NrCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5zZXRBdHRyaWJ1dGUoImltZ2Jsb2NrIiwgInJlZ3VsYXIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gUGVybWEtYmFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWVsc1tpXS5zZXRBdHRyaWJ1dGUoImltZ2Jsb2NrIiwgInBiYW4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21wYXJ0ID0gZG9tcGFydC5zbGljZShkb21wYXJ0LmluZGV4T2YoIi4iKSsxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbXBhcnQuaW5kZXhPZigiLiIpID09PSAtMSAmJiBkb21wYXJ0ICE9ICJ0bGQiKSBkb21wYXJ0ICs9ICcudGxkJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgaW1nc2h1ZmZsZSA9IGZhbHNlOyAvLyBDSEFOR0UgVE8gVFJVRSBUTyBUVVJOIE9OIFNIVUZGTElORyAoQ1VSUkVOVExZIEJST0tFTikKICAgICAgICAgICAgICAgIGlmIChpbWdzaHVmZmxlKXsKICAgICAgICAgICAgICAgICAgICAvLyBTdGFuZGFyZCBpbWFnZSByZXN1bHRzOiBtb3ZlIHAtYmFubmVkIG5vZGVzIHRvIHRoZSBlbmQgdG8gbWFpbnRhaW4gb3ZlcmFsbCBwYWdlIGxlbmd0aCAob3RoZXJ3aXNlLCBhdXRvbG9hZGluZyBzdG9wcykKICAgICAgICAgICAgICAgICAgICBpZiAodF9naW1nKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRfZ2ltZyk7CiAgICAgICAgICAgICAgICAgICAgdF9naW1nID0gd2luZG93LnNldFRpbWVvdXQoZml4SW1hZ2VzTGF5b3V0LCA1MDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoTW5nQnRuIikgJiYgbWJzdHlsZS5zcGxpdCgiLSIpWzBdICE9ICJibGsiICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXMiKSkgYWRkTW5nQnRuKCk7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgidW5idG4iKS5sZW5ndGggPiAxKSB1bmR1cE1uZ0J0bigpOwogICAgaWYgKGJldGF0ZXN0ID09ICJZIiAmJiBlbmdpbmUgPT0gJ0dvb2dsZScpeyAvLyBCRVRBIC0gTkVXIC0gdjEuNS4yCiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gY29tcGxldGVseSBpbnZpc2libGUgcmVzdWx0cywgbW9kaWZ5IHRoZSBxdWVyeSB0byBleGNsdWRlIHRoZSBmaXJzdCBoaWRkZW4gc2l0ZQogICAgICAgIHZhciBpbnZpcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImxpW2Jsb2NraGlkZGVuXSIpOwogICAgICAgIGlmIChpbnZpcy5sZW5ndGggPj0gMykgcmVRcnkoIistc2l0ZToiK2ludmlzWzBdLmdldEF0dHJpYnV0ZSgiYmxvY2toaWRkZW4iKSk7CiAgICB9Cn0KZnVuY3Rpb24gZml4SW1hZ2VzTGF5b3V0KCl7CiAgICAvLyBCVUdHWTogUkVQTEFDRU1FTlQgSU1BR0VTIERPIE5PVCBMT0FEIFVOVElMIFlPVSBUUklHR0VSIEEgUkVQQUlOVCAoZS5nLiwgb3Blbi9jbG9zZSBGaW5kIGJhciwgcmVzaXplIHdpbmRvdywgem9vbSBpbiB0aGVuIHpvb20gb3V0KQogICAgdmFyIG1hZGVhbW92ZSA9IGZhbHNlOwogICAgdmFyIHJnc2hlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZ3NoIik7CiAgICB2YXIgbGFzdGRhdGFwZyA9IHJnc2hlc1tyZ3NoZXMubGVuZ3RoLTFdLmdldEF0dHJpYnV0ZSgiZGF0YS1wZyIpOwogICAgdmFyIGJhZGltZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdltpbWdibG9jaz0icGJhbiJdJyk7CiAgICAvLyBUT0RPOiBDcmVhdGUgc2V0dGluZyB0byBsZXQgdXNlciBjaG9vc2UgdG8gcmVtb3ZlIHJlZ3VsYXIgYmxvY2tzLCB0b287IHRlbXBvcmFyeSB3b3JrYXJvdW5kOiB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lOgogICAgLy8gdmFyIGJhZGltZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdltpbWdibG9jaz0icGJhbiJdLGRpdltpbWdibG9jaz0icmVndWxhciJdJyk7CiAgICBpZiAoYmFkaW1nLmxlbmd0aCA+IDApewogICAgICAgIGZvciAodmFyIGJpPTA7IGJpPGJhZGltZy5sZW5ndGg7IGJpKyspewogICAgICAgICAgICBpZiAoYmFkaW1nW2JpXS5oYXNBdHRyaWJ1dGUoIm5ld2RhdGFwZyIpKXsgLy8gYWxyZWFkeSBtb3ZlZAogICAgICAgICAgICAgICAgaWYgKGJhZGltZ1tiaV0uZ2V0QXR0cmlidXRlKCJuZXdkYXRhcGciKSAhPSBsYXN0ZGF0YXBnKXsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmdfcyIpLmFwcGVuZENoaWxkKGJhZGltZ1tiaV0pOwogICAgICAgICAgICAgICAgICAgIGJhZGltZ1tiaV0uc2V0QXR0cmlidXRlKCJuZXdkYXRhcGciLCBsYXN0ZGF0YXBnKTsKICAgICAgICAgICAgICAgICAgICBtYWRlYW1vdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgeyAvLyBmaXJzdCBtb3ZlCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmdfcyIpLmFwcGVuZENoaWxkKGJhZGltZ1tiaV0pOwogICAgICAgICAgICAgICAgYmFkaW1nW2JpXS5zZXRBdHRyaWJ1dGUoIm5ld2RhdGFwZyIsIGxhc3RkYXRhcGcpOwogICAgICAgICAgICAgICAgbWFkZWFtb3ZlID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBUcmlnZ2VyIEdvb2dsZSdzIGZ1bmN0aW9uIHRvIHJlLWxheW91dCB0aGUgcmVzdWx0cyBuZWF0bHkKICAgICAgICBpZiAobWFkZWFtb3ZlKXsKICAgICAgICAgICAgdmFyIHNjdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CiAgICAgICAgICAgIHNjdGFnLnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2phdmFzY3JpcHQiKTsKICAgICAgICAgICAgc2N0YWcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImdvb2dsZS5pc3IubGF5b3V0SW5pdCgpOyIpKTsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3RhZyk7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIHJlcGxhY2VIaXQoc2RvbWFpbixvYSxvbGksZGRpcyl7CiAgICB2YXIgZmMsIGRuZXcsIGRzZXQsIGJ0bjsKICAgIGZjID0gb2xpLnF1ZXJ5U2VsZWN0b3IoJ2gzLCBoMicpOwogICAgaWYgKCFmYykgZmMgPSBvbGkuZmlyc3RDaGlsZDsKICAgIGlmIChmYy5ub2RlTmFtZT09IkRJViIgJiYgZmMuY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhpZGVyIikpIHJldHVybjsKICAgIGRuZXcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGlmIChvYS5xdWVyeVNlbGVjdG9yKCdoMycpKXsKICAgICAgICBkbmV3LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9hLnF1ZXJ5U2VsZWN0b3IoJ2gzJykudGV4dENvbnRlbnQrIiBvbiAiK3Nkb21haW4pKTsKICAgIH0gZWxzZSBpZiAob2xpLm5vZGVOYW1lID09PSAnRy1JTk5FUi1DQVJEJyB8fCBvbGkubm9kZU5hbWUgPT09ICdHLUNBUkQnIHx8IG9saS5jbGFzc05hbWUgPT09ICdkYnNyJyl7CiAgICAgICAgaWYgKG9hLmNoaWxkcmVuWzFdKSBkbmV3LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9hLmNoaWxkcmVuWzFdLnRleHRDb250ZW50KyIgb24gIitzZG9tYWluKSk7CiAgICAgICAgZWxzZSBpZiAob2EuY2hpbGRyZW5bMF0gJiYgb2EuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0gJiYgb2EuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0uY2hpbGRyZW5bMV0pIGRuZXcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUob2EuY2hpbGRyZW5bMF0uY2hpbGRyZW5bMV0uY2hpbGRyZW5bMV0udGV4dENvbnRlbnQrIiBvbiAiK3Nkb21haW4pKTsKICAgICAgICBkbmV3LnN0eWxlLndoaXRlU3BhY2UgPSAnbm9ybWFsJzsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGVuZ2luZSA9PSAnWWFob28nICYmIG9hLmNoaWxkTm9kZXNbMF0ubm9kZU5hbWUgPT0gJ1NQQU4nKSBkbmV3LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9hLmNoaWxkTm9kZXNbMV0udGV4dENvbnRlbnQrIiBvbiAiK3Nkb21haW4pKTsgLy92Mi4yLjEKICAgICAgICBlbHNlIGRuZXcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUob2EudGV4dENvbnRlbnQrIiBvbiAiK3Nkb21haW4pKTsKICAgIH0KICAgIGRuZXcuY2xhc3NOYW1lPSJnaGhpZGVyIGdoaGQiOwogICAgZG5ldy5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiQ2xpY2sgdG8gdmlldywgdW5ibG9jayBvciBQZXJtYS1iYW4iKTsKICAgIGRuZXcuc3R5bGUuZGlzcGxheSA9IGRkaXM7CiAgICBpZiAoZGRpcyA9PSAibm9uZSIpewogICAgICAgIG9saS5zZXRBdHRyaWJ1dGUoImJsb2NraGlkZGVuIixzZG9tYWluKTsKICAgICAgICBpZiAob2xpLmhhc0F0dHJpYnV0ZSgiYmxvY2tub3RpY2UiKSkgb2xpLnJlbW92ZUF0dHJpYnV0ZSgiYmxvY2tub3RpY2UiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgb2xpLnNldEF0dHJpYnV0ZSgiYmxvY2tub3RpY2UiLHNkb21haW4pOwogICAgICAgIGlmIChvbGkuaGFzQXR0cmlidXRlKCJibG9ja2hpZGRlbiIpKSBvbGkucmVtb3ZlQXR0cmlidXRlKCJibG9ja2hpZGRlbiIpOwogICAgICAgIG9saS5jbGFzc0xpc3QucmVtb3ZlKCdnaGhkbm9uZScpOwogICAgICAgIGlmIChvbGkucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoInJlc3VsdHNfbGlua3NfZGVlcCIpKXsKICAgICAgICAgICAgb2xpLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJibG9ja25vdGljZSIsc2RvbWFpbik7CiAgICAgICAgICAgIGlmIChvbGkucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImJsb2NraGlkZGVuIikpIG9saS5wYXJlbnROb2RlLnJlbW92ZUF0dHJpYnV0ZSgiYmxvY2toaWRkZW4iKTsKICAgICAgICAgICAgb2xpLnBhcmVudE5vZGUuY2xhc3NMaXN0LnJlbW92ZSgnZ2hoZG5vbmUnKTsKICAgICAgICB9CiAgICB9CiAgICBkbmV3LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixyZXNob3csZmFsc2UpOwogICAgLy8gZG5ldyBpcyBkaXNhcHBlYXJpbmcgb24gQmluZyBpbiBDaHJvbWUgVE9ETzogRklYSVQKICAgIGlmIChvbGkuY2xhc3NOYW1lID09PSAnZGJzcicpewogICAgICAgIHBhcmVudGNhcmQgPSBvYS5jbG9zZXN0KCdnLWNhcmQnKTsKICAgICAgICBpZiAocGFyZW50Y2FyZCl7CiAgICAgICAgICAgIHBhcmVudGNhcmQuaW5zZXJ0QmVmb3JlKGRuZXcsIHBhcmVudGNhcmQuZmlyc3RDaGlsZCk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBvbGkuaW5zZXJ0QmVmb3JlKGRuZXcsb2xpLmZpcnN0Q2hpbGQpOwogICAgfQogICAgZHNldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZHNldC5jbGFzc05hbWUgPSAiZ2hoaWRlciBnaGhpbmRlbnQiOwogICAgZHNldC5zZXRBdHRyaWJ1dGUoImRvbSIsc2RvbWFpbik7CiAgICBkc2V0LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBidG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKICAgIGJ0bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHRzLnVuYmxvY2tbMF0pKTsKICAgIGJ0bi5jbGFzc05hbWU9ImdoaGlkZXIiOwogICAgYnRuLnNldEF0dHJpYnV0ZSgidGl0bGUiLCJVbmJsb2NrIHRoaXMgc2l0ZSIpOwogICAgYnRuLnN0eWxlLmJhY2tncm91bmRDb2xvcj0iIzlmNiI7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHVuYmxvY2ssZmFsc2UpOwogICAgZHNldC5hcHBlbmRDaGlsZChidG4pOwogICAgYnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7CiAgICBidG4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHh0cy5wYmFuWzBdKSk7CiAgICBidG4uY2xhc3NOYW1lPSJnaGhpZGVyIjsKICAgIGJ0bi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiUGVybWFuZW50bHkgaGlkZSB0aGlzIHNpdGUiKTsKICAgIGJ0bi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiNmNjYiOwogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixwZXJtYmFuLGZhbHNlKTsKICAgIGRzZXQuYXBwZW5kQ2hpbGQoYnRuKTsKICAgIGJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgYnRuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJjbG9zZSIpKTsKICAgIGJ0bi5jbGFzc05hbWU9ImdoaGlkZXIiOwogICAgYnRuLnNldEF0dHJpYnV0ZSgidGl0bGUiLCJSZS1oaWRlIHRoaXMgaGl0Iik7CiAgICBidG4uc3R5bGUuYmFja2dyb3VuZENvbG9yPSIjZWVlIjsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscmVoaWRlLGZhbHNlKTsKICAgIGRzZXQuYXBwZW5kQ2hpbGQoYnRuKTsKICAgIGRuZXcuYXBwZW5kQ2hpbGQoZHNldCk7CiAgICBpZiAoZG5ldy5wYXJlbnROb2RlLnN0eWxlLm92ZXJmbG93ID09ICJoaWRkZW4iIHx8IGRuZXcucGFyZW50Tm9kZS5zdHlsZS5vdmVyZmxvd1ggPT0gImhpZGRlbiIpewogICAgICAgIGRuZXcuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIiksIGRuZXcuZmlyc3RDaGlsZCk7CiAgICB9CiAgICBkc2V0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixnaGhraWxsZXZlbnQsZmFsc2UpOwogICAgaWYgKG9saS5jbGFzc0xpc3QuY29udGFpbnMoInBzbGkiKSkgZG5ldy5zdHlsZS5tYXJnaW4gPSAiMWVtIDAiOyAvLyBTaG9wcGluZyByZXN1bHRzCn0KZnVuY3Rpb24gaGlkZWJhc2ljKHRibCl7IC8vIEJBU0lDIElNQUdFIFJFU1VMVFMsIEJFVEEgT05MWSwgTk9OLUFKQVgKICAgIHZhciBob3N0cywgdGRzLCBpLCBqLCBrLCBoaWQsIGFlbCwgZG9tLCBkb21wYXJ0LCBidG4sIGFwYXIsIGRnb25lOwogICAgaG9zdHMgPSBibGlzdDsKICAgIHRkcyA9IHRibC5xdWVyeVNlbGVjdG9yQWxsKCJ0ZCIpOwogICAgZm9yIChpPTA7IGk8dGRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBhZWwgPSB0ZHNbaV0ucXVlcnlTZWxlY3RvcigiYSIpOwogICAgICAgIGlmIChhZWwpe2lmKGFlbC5oYXNBdHRyaWJ1dGUoImhyZWYiKSl7aWYgKGFlbC5nZXRBdHRyaWJ1dGUoImhyZWYiKS5pbmRleE9mKCJpbWdyZWZ1cmw9Iik+LTEpewogICAgICAgICAgICBkb20gPSBhZWwuZ2V0QXR0cmlidXRlKCJocmVmIikuc3Vic3RyKGFlbC5nZXRBdHRyaWJ1dGUoImhyZWYiKS5pbmRleE9mKCJpbWdyZWZ1cmw9IikrNykuc3BsaXQoIi8iKVsyXTsKICAgICAgICAgICAgaWYgKGRvbS5pbmRleE9mKCI6Iik+IC0xKSBkb20gPSBkb20uc3Vic3RyKDAsZG9tLmluZGV4T2YoIjoiKSk7IC8vIFN0cmlwIHBvcnQgbnVtYmVyCiAgICAgICAgICAgIGRvbXBhcnQgPSBkb207CiAgICAgICAgICAgIHdoaWxlIChkb21wYXJ0LmluZGV4T2YoIi4iKT4gLTEpIHsKICAgICAgICAgICAgICAgIGlmIChob3N0cy5pbmRleE9mKCJ8Iitkb21wYXJ0KyI6Iik+LTEpIHsgLy8gVGhlc2UgZG9tYWlucyBzdWNrOyBtYXJrIHRoZSBjZWxsIGZvciBub3cKICAgICAgICAgICAgICAgICAgICBpZiAoaG9zdHMuaW5kZXhPZigifCIrZG9tcGFydCsiOnAiKT4tMSB8fCBzaG93WU49PSJOIikgdGRzW2ldLnNldEF0dHJpYnV0ZSgiZ2hoYWN0aW9uIiwiZGVsZXRlIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZSB0ZHNbaV0uc2V0QXR0cmlidXRlKCJnaGhhY3Rpb24iLCJub3RpY2UiKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZG9tcGFydCA9IGRvbXBhcnQuc2xpY2UoZG9tcGFydC5pbmRleE9mKCIuIikrMSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRvbXBhcnQuaW5kZXhPZigiLiIpID09PSAtMSAmJiBkb21wYXJ0ICE9ICJ0bGQiKSBkb21wYXJ0ICs9ICcudGxkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH19fQogICAgfQogICAgZm9yIChpPTA7IGk8dGRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBzd2l0Y2ggKHRkc1tpXS5nZXRBdHRyaWJ1dGUoImdoaGFjdGlvbiIpKXsKICAgICAgICAgICAgY2FzZSAiZGVsZXRlIjoKICAgICAgICAgICAgICAgIC8vIFRPRE8gaW1wbGVtZW50IGRlbGV0aW9uCiAgICAgICAgICAgICAgICB0ZHNbaV0uaW5uZXJIVE1MID0gImRlbGV0ZSBjZWxsIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJub3RpY2UiOgogICAgICAgICAgICAgICAgLy8gVE9ETyBpbXBsZW1lbnQgY2xpY2thYmxlIG5vdGljZXMKICAgICAgICAgICAgICAgIHRkc1tpXS5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICJsaW5lLXRocm91Z2giOwogICAgICAgICAgICAgICAgdGRzW2ldLnN0eWxlLm9wYWNpdHkgPSAiMC4zIjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gVE9ETyBhZGQgYmxvY2sgYnV0dG9uCiAgICAgICAgfQogICAgfQp9Ci8vID09ID09ID09IE90aGVyIEZ1bmN0aW9ucyA9PSA9PSA9PQpmdW5jdGlvbiByZXNob3coZSl7IC8vIFNob3cgaGl0IHdpdGhvdXQgdW5ibG9ja2luZwogICAgdmFyIGxpZWwsIGFlbCwgZGFicywgazsKICAgIGxpZWwgPSBlLnRhcmdldC5jbG9zZXN0KCdbZ2hocmVzdWx0XScpOwogICAgaWYgKCFsaWVsKSByZXR1cm47CiAgICBsaWVsLmNsYXNzTGlzdC5hZGQoJ2doaDF0aW1lJyk7CiAgICAvLyBIaWRlIG5vdGljZSwgbW92ZSBhY3Rpb24gYnV0dG9ucywgdGhlbiBzaG93IGhpdAogICAgZS50YXJnZXQuc3R5bGUuZGlzcGxheT0ibm9uZSI7CiAgICBhZWwgPSBsaWVsLnF1ZXJ5U2VsZWN0b3IoImRpdi5yID4gYSwgaDMgYSwgLmMtcmVzdWx0LWNvbnRlbnQgYSIpOwogICAgaWYgKCFhZWwgJiYgZW5naW5lID09ICdCYWlkdScgJiYgbGllbC5oYXNBdHRyaWJ1dGUoJ211JykpIGFlbCA9IGxpZWwucXVlcnlTZWxlY3RvcigicC5vcF9zaXRlX2RvbWFpbl90aXRsZSwgZGl2Lm9wX2dlbmVyYWxxYV9tYWluLmMtcm93IikuZmlyc3RDaGlsZDsKICAgIGlmICghYWVsKSBhZWwgPSBsaWVsLnF1ZXJ5U2VsZWN0b3IoInNwYW4udGwgYSIpOyAvLyBzdW1tYXJpemVkIG5ld3MgcmVzdWx0CiAgICBpZiAoIWFlbCkgYWVsID0gbGllbC5xdWVyeVNlbGVjdG9yKCJhIik7IC8vIG90aGVyCiAgICBpZiAobGllbC5jbGFzc0xpc3QuY29udGFpbnMoInZpZGVvYm94IikpIGFlbCA9IGxpZWwucXVlcnlTZWxlY3RvckFsbCgidGQiKVsxXS5xdWVyeVNlbGVjdG9yKCJhIik7IC8vdmlkZW8gcGFnZQogICAgZGFicyA9IGUudGFyZ2V0LmZpcnN0RWxlbWVudENoaWxkOwogICAgaWYgKGVuZ2luZSAhPSAnQmluZycpewogICAgICAgIGlmIChhZWwucGFyZW50Tm9kZS5jbGFzc0xpc3QuY29udGFpbnMoJ2doaDF0aW1lJykpewogICAgICAgICAgICBhZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZGFicyxhZWwubmV4dFNpYmxpbmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChhZWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lID09PSAnRy1JTk5FUi1DQVJEJyB8fCBhZWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLm5vZGVOYW1lID09PSAnRy1DQVJEJykgYWVsLnBhcmVudE5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZGFicyxhZWwucGFyZW50Tm9kZSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGFlbC5wYXJlbnROb2RlLm5leHRTaWJsaW5nKSBhZWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkYWJzLGFlbC5wYXJlbnROb2RlLm5leHRTaWJsaW5nKTsKICAgICAgICAgICAgICAgIGVsc2UgYWVsLnBhcmVudE5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChkYWJzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkYWJzLmNsYXNzTmFtZSA9ICJnaGhkYnV0dG9ucyI7CiAgICAgICAgZGFicy5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7CiAgICAgICAgaWYgKGRhYnMubmV4dEVsZW1lbnRTaWJsaW5nKSBpZiAoZGFicy5uZXh0RWxlbWVudFNpYmxpbmcuY2xhc3NOYW1lLmluZGV4T2YoImdoaGlkZXIiKSA9PSAwIHx8IGRhYnMubmV4dEVsZW1lbnRTaWJsaW5nLmlubmVySFRNTCA9PSAiYmxvY2siKSBkYWJzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZGFicy5uZXh0RWxlbWVudFNpYmxpbmcpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPIGRhYnMgaXMgZGlzYXBwZWFyaW5nIG9uIEJpbmcgd2hlbiBtb3ZlZCAtLSB0ZW1wb3JhcmlseSwgZG9uJ3QgbW92ZSBpdAogICAgICAgIGUudGFyZ2V0LnN0eWxlLmRpc3BsYXk9Jyc7CiAgICAgICAgZGFicy5jbGFzc05hbWUgPSAiZ2hoZGJ1dHRvbnMiOwogICAgICAgIGRhYnMucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpOwogICAgfQogICAgZm9yIChrPTE7IGs8bGllbC5jaGlsZHJlbi5sZW5ndGg7IGsrKyl7CiAgICAgICAgbGllbC5jaGlsZHJlbltrXS5jbGFzc0xpc3QucmVtb3ZlKCdnaGhkbm9uZScpOwogICAgfQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKfQovLyBIaWRlIG9yIFNob3cgaGl0IG5vdGljZXMKYXN5bmMgZnVuY3Rpb24gdXBkdHByZWYoZSl7CiAgICB2YXIgYnRucywgaiwgaGRzLCBzOwogICAgaWYgKHNob3dZTiA9PSAiWSIpewogICAgICAgIGlmIChjb25maXJtKCJObyBsb25nZXIgc2hvdyB0aXRsZXMgb3IgYnV0dG9ucyBmb3Igc3VwcHJlc3NlZCByZXN1bHRzPyIpKXsKICAgICAgICAgICAgZ2hoUHJlZk8uc2hvd25vdGNbMF0gPSAiTiI7CiAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHNob3dZTiA9IGdoaFByZWZPLnNob3dub3RjWzBdOwogICAgICAgICAgICB0b2dIaWRlckRpdnMoIm5vIik7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBoZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJnaGhkIik7CiAgICAgICAgaWYgKGhkcy5sZW5ndGggPiAwKSBzID0gKGhkcy5sZW5ndGggPT0gMSkgPyAiaXMgMSBibG9ja2VkIGhpdCIgOiAiYXJlICIraGRzLmxlbmd0aCsiIGJsb2NrZWQgaGl0cyI7CiAgICAgICAgZWxzZSBzID0gImFyZSBubyBibG9ja2VkIGhpdHMiOwogICAgICAgIGlmIChjb25maXJtKCJTaG93IHRpdGxlcyBhbmQgYnV0dG9ucyBmb3Igc3VwcHJlc3NlZCByZXN1bHRzPyAoVGhlcmUgIitzKyIgb24gdGhpcyBwYWdlLikiKSl7CiAgICAgICAgICAgIGdoaFByZWZPLnNob3dub3RjWzBdID0gIlkiOwogICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzaG93WU4gPSBnaGhQcmVmTy5zaG93bm90Y1swXTsKICAgICAgICAgICAgdG9nSGlkZXJEaXZzKCJ5ZXMiKTsKICAgICAgICB9CiAgICB9CiAgICBmaXhTaG93SGlkZUJ0bigpOwogICAgZS50YXJnZXQuYmx1cigpOwp9CmZ1bmN0aW9uIGZpeFNob3dIaWRlQnRuKCl7CiAgICB2YXIgY2hrTVAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrc2hvd25vdGMiKTsKICAgIHZhciBjaGtCRiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGtzaG93bm90Y2JmIik7CiAgICBpZiAoc2hvd1lOID09ICJZIil7CiAgICAgICAgY2hrTVAuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgIGNoa01QLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIGlmIChjaGtCRil7CiAgICAgICAgICAgIGNoa0JGLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICAgICAgY2hrQkYuY2hlY2tlZCA9IHRydWU7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBjaGtNUC5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICBjaGtNUC5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgaWYgKGNoa0JGKXsKICAgICAgICAgICAgY2hrQkYucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgICAgIGNoa0JGLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICB9Cn0KZnVuY3Rpb24gdG9nSGlkZXJEaXZzKHNTaG93KXsKICAgIHZhciBkaCwgaTsKICAgIGRoID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZ2hoaWRlciIpOwogICAgZm9yKGk9MDtpPGRoLmxlbmd0aDtpKyspIHsKICAgICAgICBpZiAoZGhbaV0ubm9kZU5hbWUgPT0gIkRJViIgJiYgZGhbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhpbmRlbnQiKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgaWYgKHNTaG93ID09ICJ5ZXMiKSBkaFtpXS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgICAgICAgIGVsc2UgZGhbaV0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICB9CiAgICB9Cn0KLy8gUmVtb3ZlIGRvbWFpbiBmcm9tIHRoZSBibG9jayBsaXN0CmFzeW5jIGZ1bmN0aW9uIHVuYmxvY2soZSl7CiAgICB2YXIgZWxQYXIsIHNkb20sIHNsaXN0LCBsaWVsLCB0Z3Q7CiAgICBlbFBhciA9IGUudGFyZ2V0LnBhcmVudE5vZGU7CiAgICBzZG9tID0gZWxQYXIuZ2V0QXR0cmlidXRlKCJkb20iKTsKICAgIGlmICghc2RvbSB8fCBzZG9tLmxlbmd0aDw0KXsKICAgICAgICBhbGVydCgiUHJvYmxlbSB3aXRoIGRvbWFpbiB0byB1bmJsb2NrIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFHTTQpewogICAgICAgIHNsaXN0ID0gR01fZ2V0VmFsdWUoImhpZGV5aG9zdHMiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2xpc3QgPSBhd2FpdCBHTS5nZXRWYWx1ZSgiaGlkZXlob3N0cyIpOwogICAgfQogICAgaWYgKHNsaXN0LnN1YnN0cigwLDEpICE9ICJ8Iikgc2xpc3QgPSAifCIgKyBzbGlzdDsKICAgIHNsaXN0ID0gc2xpc3QucmVwbGFjZSgifCIrc2RvbSsiOnQiLCIiKTsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIHNsaXN0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBzbGlzdCk7CiAgICB9CiAgICBibGlzdCA9IHNsaXN0OwogICAgbmVlZHVwZGF0ZSA9IHRydWU7CiAgICBsaWVsID0gZWxQYXIuY2xvc2VzdCgnW2doaHJlc3VsdF0nKTsKICAgIGlmICgobGllbC5ub2RlTmFtZSA9PSJMSSIgfHwgbGllbC5ub2RlTmFtZSA9PSAiRElWIikgJiYgbGllbC5jbGFzc0xpc3QuY29udGFpbnMoImdoaDF0aW1lIikpewogICAgICAgIGxpZWwuY2xhc3NMaXN0LnJlbW92ZSgnZ2hoMXRpbWUnKTsKICAgICAgICB2YXIgZ2hoZHMgPSBsaWVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImdoaGQiKTsKICAgICAgICBpZiAoZ2hoZHMubGVuZ3RoID4gMCkgZ2hoZHNbMF0ucmVtb3ZlKCk7CiAgICAgICAgZWxQYXIucmVtb3ZlKCk7CiAgICB9CiAgICBoaWRlaGl0cyhudWxsLHRydWUpOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtbmdmb3JtIikpewogICAgICAgIGlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtbmdmb3JtIikuc3R5bGUuZGlzcGxheT09ImJsb2NrIikgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICB9Cn0KLy8gQWRkIGRvbWFpbiB0byB0aGUgUGVybWEtYmFuIGxpc3QKYXN5bmMgZnVuY3Rpb24gcGVybWJhbihlKXsKICAgIGlmICghY29uZmlybSgiTmV2ZXIgc2VlIGhpdHMgZm9yIHRoaXMgZG9tYWluIGFnYWluPyIpKSByZXR1cm47CiAgICB2YXIgZHBhciwgc2RvbSwgc2xpc3QsIGxpZWw7CiAgICBkcGFyID0gZS50YXJnZXQucGFyZW50Tm9kZTsKICAgIHNkb20gPSBkcGFyLmdldEF0dHJpYnV0ZSgiZG9tIik7CiAgICBpZiAoIUdNNCl7CiAgICAgICAgc2xpc3QgPSBHTV9nZXRWYWx1ZSgiaGlkZXlob3N0cyIpOwogICAgfSBlbHNlIHsKICAgICAgICBzbGlzdCA9IGF3YWl0IEdNLmdldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICB9CiAgICBpZiAoc2xpc3Quc3Vic3RyKDAsMSkgIT0gInwiKSBzbGlzdCA9ICJ8IiArIHNsaXN0OwogICAgc2xpc3QgPSBzbGlzdC5yZXBsYWNlKCJ8IitzZG9tKyI6dCIsInwiK3Nkb20rIjpwIik7CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBzbGlzdCk7CiAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJoaWRleWhvc3RzIiwgc2xpc3QpOwogICAgfQogICAgYmxpc3QgPSBzbGlzdDsKICAgIG5lZWR1cGRhdGUgPSB0cnVlOwogICAgbGllbCA9IGRwYXIuY2xvc2VzdCgnW2doaHJlc3VsdF0nKTsKICAgIGlmICghbGllbCkgYWxlcnQoJ0RldmVsb3BlciBlcnJvciBpbiBwZXJtYmFuIChubyBsaWVsKScpOwogICAgaWYgKChsaWVsLm5vZGVOYW1lID09IkxJIiB8fCBsaWVsLm5vZGVOYW1lID09ICJESVYiIHx8IGxpZWwubm9kZU5hbWUgPT0gJ0ctSU5ORVItQ0FSRCcgfHwgbGllbC5ub2RlTmFtZSA9PSAnRy1DQVJEJykgJiYgbGllbC5jbGFzc0xpc3QuY29udGFpbnMoImdoaDF0aW1lIikpewogICAgICAgIGxpZWwuY2xhc3NMaXN0LnJlbW92ZSgnZ2hoMXRpbWUnKTsKICAgIH0KICAgIGlmKGRwYXIuY2xhc3NMaXN0LmNvbnRhaW5zKCJnaGhpbmRlbnQiKSkgZHBhciA9IGRwYXIucGFyZW50Tm9kZTsKICAgIGRwYXIucmVtb3ZlKCk7CiAgICBoaWRlaGl0cyhudWxsLHRydWUpOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJHVFIiKSkgcmVtb3ZlUEJzKCk7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKSl7CiAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKS5zdHlsZS5kaXNwbGF5PT0iYmxvY2siKSByZWZyZXNoU2l0ZUxpc3QoKTsKICAgIH0KfQovLyBDbG9zZSB0aGlzIGJhZCByZXN1bHQgYW5kIHJlaGlkZSAodG8gYWxsb3cgaW5kZW5kZW50IG9wZW4vY2xvc2UsIGRvIG5vdCBydW4gdGhyb3VnaCBoaWRlaGl0cykKZnVuY3Rpb24gcmVoaWRlKGUpewogICAgdmFyIGRwYXIsIGxpZWwsIGRvbXBhcnQsIGFlbCwgajsKICAgIGRwYXIgPSBlLnRhcmdldC5wYXJlbnROb2RlOwogICAgbGllbCA9IGRwYXIuY2xvc2VzdCgnW2doaHJlc3VsdF0nKTsKICAgIGlmICghbGllbCkgYWxlcnQoJ0RldmVsb3BlciBlcnJvciBpbiByZWhpZGUgKG5vIGxpZWwpJyk7CiAgICBkb21wYXJ0ID0gZHBhci5nZXRBdHRyaWJ1dGUoImRvbSIpOwogICAgaWYgKGVuZ2luZSAhPSAnQmluZycpewogICAgICAgIGRwYXIucmVtb3ZlKCk7CiAgICAgICAgbGllbC5yZW1vdmVDaGlsZChsaWVsLnF1ZXJ5U2VsZWN0b3IoImRpdi5naGhkIikpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPIG5vdGljZSBpcyBkaXNhcHBlYXJpbmcgb24gQmluZyAtLSB0ZW1wb3JhcmlseSwgZG8gbm90IG1vdmUvcmVtb3ZlIHRoZSBidXR0b25zIGRpdgogICAgICAgIGxpZWwucXVlcnlTZWxlY3RvcignZGl2LmdoaGQgPiBkaXYuZ2hoZGJ1dHRvbnMnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgfQogICAgYWVsID0gbGllbC5xdWVyeVNlbGVjdG9yKCJoMyBhLCBoMiBhIik7CiAgICBpZiAoIWFlbCkgYWVsID0gbGllbC5xdWVyeVNlbGVjdG9yKCJhIik7CiAgICBsaWVsLmNsYXNzTGlzdC5yZW1vdmUoJ2doaDF0aW1lJyk7CiAgICByZXBsYWNlSGl0KGRvbXBhcnQsYWVsLGxpZWwsIiIpOwogICAgZm9yIChqPTA7IGo8bGllbC5jaGlsZHJlbi5sZW5ndGg7IGorKyl7IC8vIEhpZGUgR29vZ2xlIHJlc3VsdAogICAgICAgIGlmIChsaWVsLmNoaWxkcmVuW2pdLmNsYXNzTGlzdC5jb250YWlucygiZ2hoaWRlciIpID09PSBmYWxzZSAmJiBsaWVsLmNoaWxkcmVuW2pdLmNsYXNzTGlzdC5jb250YWlucygiZ2hoZG5vbmUiKSA9PT0gZmFsc2UpewogICAgICAgICAgICBsaWVsLmNoaWxkcmVuW2pdLmNsYXNzTGlzdC5hZGQoJ2doaGRub25lJyk7CiAgICAgICAgfQogICAgfQp9Ci8vIEZ1bmN0aW9ucyByZWxhdGluZyB0byB0aGUgQmxvY2sgZm9ybQpmdW5jdGlvbiBhZGRCbG9ja0Zvcm0oKXsKICAgIHZhciBiZmQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGJmZC5pZCA9ICJnaGhibG9ja2Zvcm0iOwogICAgYmZkLmNsYXNzTmFtZSA9ICJnaGhwYW5lIjsKICAgIHZhciBiZmRjb2RlID0gJzxmb3JtIG9uc3VibWl0PSJyZXR1cm4gZmFsc2U7Ij48cCBzdHlsZT0ibWFyZ2luOjAuNzVlbSAwOyI+PHN0cm9uZz5BZGQgdG8gYmxvY2tsaXN0Ojwvc3Ryb25nPjwvcD48cD48bGFiZWwgJyArCiAgICAgICAgJ3N0eWxlPSJ3aGl0ZS1zcGFjZTpwcmUiPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZ2hoZG9tIiB2YWx1ZT0iZiI+IDxzcGFuIGlkPSJnaGhmdWxsZG9tIj48L3NwYW4+PC9sYWJlbD48YnI+JyArCiAgICAgICAgJzxsYWJlbD48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImdoaGRvbSIgdmFsdWU9InAiPiA8c3BhbiBpZD0iZ2hocGFydGRvbSI+PC9zcGFuPiAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJnaGhkb21hZGoiICcgKwogICAgICAgICd0aXRsZT0iQWRqdXN0IHBhcnRpYWwgZG9tYWluIiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyByaWdodDogMWVtOyBwYWRkaW5nOiAwIDFweDsiPn48L2J1dHRvbj48L2xhYmVsPjwvcD4nICsKICAgICAgICAnPHAgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3doaXRlLXNwYWNlOnByZTtsaW5lLWhlaWdodDoyZW07bWFyZ2luOjAuNzVlbSAwIj48YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImdoaGJmMSIgYnQ9InQiPiAnICsKICAgICAgICB0eHRzLm9rYnRuWzBdICsgJyA8L2J1dHRvbj4gPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJnaGhiZjMiIGJ0PSJwIj4gJyArIHR4dHMub2tQYnRuWzBdICsgJyA8L2J1dHRvbj48YnI+JyArCiAgICAgICAgJzxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iZ2hoYmYyIiBtbmc9Ik4iPiAnICsgdHh0cy5jYW5jZWxidG5bMF0gKyAnIDwvYnV0dG9uPiAnICsKICAgICAgICAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJnaGhiZjQiIG1uZz0iWSI+JyArIHR4dHMuY2FuY2VsTWJ0blswXSArICc8L2J1dHRvbj48L3A+JzsKICAgIGlmIChlbmdpbmUgPT0gJ0dvb2dsZScpewogICAgICAgIGJmZGNvZGUgKz0gIjxwIHN0eWxlPVwiYm9yZGVyLXRvcDoxcHggc29saWQgI2FhYTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpwcmU7bGluZS1oZWlnaHQ6MmVtO21hcmdpbjowLjc1ZW0gMDtwYWRkaW5nLXRvcDowLjVlbTtcIj5FZGl0IHF1ZXJ5OiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaGJmNVwiIHRpdGxlPVwiVGhpcyBzaXRlIG9ubHlcIj4gK3NpdGU6IDwvYnV0dG9uPiAiICsKICAgICAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hoYmY2XCIgdGl0bGU9XCJFeGNsdWRlIHRoaXMgc2l0ZVwiPiAtc2l0ZTogPC9idXR0b24+PC9wPiI7CiAgICB9CiAgICBiZmRjb2RlICs9ICI8cCBzdHlsZT1cIm1hcmdpbjowLjc1ZW0gMDtcIj48bGFiZWwgdGl0bGU9XCJTd2l0Y2ggYmV0d2VlbiBzaG93aW5nIGFuZCBoaWRpbmcgcmVzdWx0IHRpdGxlcyBmb3IgcmVndWxhciBibG9ja2VkIGhpdHNcIj48aW5wdXQgIiArCiAgICAgICAgInR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjaGtzaG93bm90Y2JmXCIgaWQ9XCJjaGtzaG93bm90Y2JmXCI+IFNob3cgaGlkZGVuIGhpdCBub3RpY2VzPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbCB0aXRsZT1cIlN3aXRjaCBiZXR3ZWVuIGJsb2NrIGRpYWxvZyBhbmQgb25lLWNsaWNrIGJsb2NraW5nXCI+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjaGsxY2xpY2tiZlwiICIgKwogICAgICAgICJpZD1cImNoazFjbGlja2JmXCI+IEVuYWJsZSAxLWNsaWNrIGJsb2NraW5nPC9sYWJlbD48L3A+PC9mb3JtPiI7CiAgICBiZmQuaW5uZXJIVE1MID0gYmZkY29kZTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYmZkKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZjEiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYWRkYmxvY2ssZmFsc2UpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJmMiIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixnaGhjbG9zZWZvcm0sZmFsc2UpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJmMyIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixhZGRibG9jayxmYWxzZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmY0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGdoaGNsb3NlZm9ybSxmYWxzZSk7CiAgICBpZiAoZW5naW5lID09ICdHb29nbGUnKXsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmY1IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHJlUXVlcnksZmFsc2UpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZjYiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscmVRdWVyeSxmYWxzZSk7CiAgICB9CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmxvY2tmb3JtIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGdoaGtpbGxldmVudCxmYWxzZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrc2hvd25vdGNiZiIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdXBkdHByZWYsZmFsc2UpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoazFjbGlja2JmIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix1cGR0MWNsaWNrLGZhbHNlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhkb21hZGoiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYWRqcGFydGRvbSxmYWxzZSk7Cn0KZnVuY3Rpb24gc2hvd2JmZChlKSB7CiAgICB2YXIgYmJ0biwgYmZkaXYsIGZkb20sIHBkb20sIGZzcGFuLCBwc3BhbiwgdGRpdiwgbHQ7CiAgICBiYnRuID0gZS50YXJnZXQ7CiAgICBmZG9tID0gYmJ0bi5nZXRBdHRyaWJ1dGUoIm1ldGEiKTsKICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJsb2NrZm9ybSIpKSBhZGRCbG9ja0Zvcm0oKTsKICAgIGZzcGFuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGZ1bGxkb20iKTsKICAgIGZzcGFuLnRleHRDb250ZW50ID0gZmRvbTsKICAgIGZzcGFuLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2hlY2tlZCA9IHRydWU7CiAgICBwZG9tID0gZmRvbS5zdWJzdHIoZmRvbS5pbmRleE9mKCIuIikrMSk7CiAgICBwc3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhwYXJ0ZG9tIik7CiAgICBpZiAocGRvbS5pbmRleE9mKCIuIikgPiAtMSAmJiBwYXRJUHY0LnRlc3QoZmRvbSkgIT0gdHJ1ZSkgewogICAgICAgIHBzcGFuLnRleHRDb250ZW50ID0gcGRvbTsKICAgICAgICBwc3Bhbi5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICBzd2l0Y2ggKGJBZ2dyZXNzKXsKICAgICAgICAgICAgY2FzZSAnYWxsJzoKICAgICAgICAgICAgICAgIHBzcGFuLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2hlY2tlZCA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICBjYXNlICd3d3cnOgogICAgICAgICAgICAgICAgaWYgKGZkb20uc3Vic3RyKDAsMykgPT0gJ3d3dycpIHBzcGFuLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2hlY2tlZCA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBmdWxsIGRvbWFpbgogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZG9tYWRqIikuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgfSBlbHNlIHsKICAgICAgICBwc3Bhbi5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGRvbWFkaiIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9CiAgICBpZiAoZS5hbHRLZXkgPT0gdHJ1ZSAmJiBlbmdpbmUgPT0gJ0dvb2dsZScpewogICAgICAgIHJlUXVlcnkoKTsgcmV0dXJuOwogICAgfQogICAgYmZkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmxvY2tmb3JtIik7CiAgICB0ZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRlbXAiKTsKICAgIGlmICghdGRpdil7CiAgICAgICAgdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIHRkaXYuaWQgPSAiZ2hodGVtcCI7CiAgICB9CiAgICBpZiAoaXNjaCA9PSB0cnVlKXsKICAgICAgICB0ZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCAicG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6NGVtO3otaW5kZXg6MzAwMDt3aWR0aDoyNTBweDsiKTsKICAgICAgICBiYnRuLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGRpdik7CiAgICB9IGVsc2UgaWYgKGUudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlTmFtZSA9PSAnRy1JTk5FUi1DQVJEJyB8fCBlLnRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGUubm9kZU5hbWUgPT0gJ0ctQ0FSRCcpIHsKICAgICAgICB0ZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCAicG9zaXRpb246YWJzb2x1dGU7bGVmdDo4cHg7dG9wOjhweDt6LWluZGV4Ojk5OTk7d2lkdGg6MTAwJTsiKTsKICAgICAgICBlLnRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRkaXYsIGUudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZHJlblswXSk7CiAgICB9IGVsc2UgaWYgKGUudGFyZ2V0LnBhcmVudE5vZGUubm9kZU5hbWUgPT0gJ0ctSU5ORVItQ0FSRCcgfHwgZS50YXJnZXQucGFyZW50Tm9kZS5ub2RlTmFtZSA9PSAnRy1DQVJEJykgewogICAgICAgIHRkaXYuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjhweDt0b3A6OHB4O3otaW5kZXg6OTk5OTt3aWR0aDoxMDAlOyIpOwogICAgICAgIGUudGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRkaXYsIGUudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRyZW5bMF0pOwogICAgfSBlbHNlIGlmIChlLnRhcmdldC5wYXJlbnROb2RlLmNsYXNzTmFtZSA9PSAnZGJzcicpIHsKICAgICAgICB0ZGl2LnNldEF0dHJpYnV0ZSgic3R5bGUiLCAicG9zaXRpb246YWJzb2x1dGU7bGVmdDo4cHg7dG9wOjhweDt6LWluZGV4Ojk5OTk7d2lkdGg6MTAwJTsiKTsKICAgICAgICBlLnRhcmdldC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZGl2LCBlLnRhcmdldC5wYXJlbnROb2RlLmNoaWxkcmVuWzBdKTsKICAgIH0gZWxzZSBpZihlbmdpbmUgPT0gJ0dvb2dsZScgJiYgYmJwb3MgPT0gJ0MnKSB7CiAgICAgICAgdGRpdi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6OHB4O3RvcDoxNnB4O3otaW5kZXg6OTk5OTt3aWR0aDoxMDAlOyIpOwogICAgICAgIGUudGFyZ2V0LnBhcmVudE5vZGUuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnOwogICAgICAgIGUudGFyZ2V0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRkaXYsIGUudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRyZW5bMF0pOwogICAgfSBlbHNlIHsKICAgICAgICBsdCA9IGJidG4ub2Zmc2V0TGVmdCArIGJidG4ub2Zmc2V0V2lkdGggKyAxMjsKICAgICAgICBpZiAoYmJ0bi5wYXJlbnROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpewogICAgICAgICAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUoYmJ0bi5wYXJlbnROb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgiZmxvYXQiKSAhPSAibm9uZSIgfHwKICAgICAgICAgICAgICAgIChiYnRuLnN0eWxlLnBvc2l0aW9uID09ICJhYnNvbHV0ZSIgJiYgYmJ0bi5wYXJlbnROb2RlLm5vZGVOYW1lID09ICJURCIpKSBsdD1sdC1iYnRuLnBhcmVudE5vZGUub2Zmc2V0TGVmdDsKICAgICAgICB9CiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlI0dUUicpKXsKICAgICAgICAgICAgbHQtPTIzMDsKICAgICAgICB9CiAgICAgICAgaWYgKGVuZ2luZSAhPSAnR29vZ2xlJykgbHQ9bHQtYmJ0bi5wYXJlbnROb2RlLm9mZnNldExlZnQ7CiAgICAgICAgaWYgKGVuZ2luZSA9PSAnU3RhcnRwYWdlJykgbHQgPSAxNjsKICAgICAgICBpZiAoZW5naW5lID09ICdHb29nbGUnICYmIGJidG4uY2xvc2VzdCgnZGl2LmcnKSAhPSBudWxsKXsKICAgICAgICAgICAgdGRpdi5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgInBvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6IiArIGx0ICsgInB4O3RvcDotMThweDt6LWluZGV4OjUwMDt3aWR0aDoyNTBweDsiKTsKICAgICAgICAgICAgYmJ0bi5jbG9zZXN0KCdkaXYuZycpLmluc2VydEJlZm9yZSh0ZGl2LCBiYnRuLmNsb3Nlc3QoJ2Rpdi5nJykuY2hpbGRyZW5bMF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRkaXYuc2V0QXR0cmlidXRlKCJzdHlsZSIsICJwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OiIgKyBsdCArICJweDt0b3A6LTY1cHg7ei1pbmRleDo1MDA7d2lkdGg6MjUwcHg7Iik7CiAgICAgICAgICAgIGlmIChiYnRuLm5leHRFbGVtZW50U2libGluZyl7CiAgICAgICAgICAgICAgICBpZiAoYmJ0bi5uZXh0RWxlbWVudFNpYmxpbmcubm9kZU5hbWUgPT0gIkRJViIgfHwgYmJ0bi5uZXh0RWxlbWVudFNpYmxpbmcubm9kZU5hbWUgPT0gIkJSIikgYmJ0bi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZGl2LGJidG4ubmV4dEVsZW1lbnRTaWJsaW5nKTsKICAgICAgICAgICAgICAgIGVsc2UgYmJ0bi5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRkaXYpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgYmJ0bi5wYXJlbnROb2RlLmFwcGVuZENoaWxkKHRkaXYpOwogICAgICAgIH0KICAgIH0KICAgIHRkaXYuYXBwZW5kQ2hpbGQoYmZkaXYpOwogICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRkaXYucGFyZW50Tm9kZSkub3ZlcmZsb3dYID09ICJoaWRkZW4iIHx8IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRkaXYucGFyZW50Tm9kZSkub3ZlcmZsb3dZID09ICJoaWRkZW4iKXsKICAgICAgICB0ZGl2LnBhcmVudE5vZGUuc3R5bGUub3ZlcmZsb3dYID0gInZpc2libGUiOwogICAgICAgIHRkaXYucGFyZW50Tm9kZS5zdHlsZS5vdmVyZmxvd1kgPSAidmlzaWJsZSI7CiAgICB9CiAgICBpZiAocHJlZjFjbGljay5zdWJzdHIoMCwxKSA9PSAiWSIgJiYgZS5zaGlmdEtleSAhPSB0cnVlICYmIGlzY2ggIT0gdHJ1ZSl7IC8vIDEtY2xpY2s7IGhvbGQgU2hpZnQgdG8gb3ZlcnJpZGUKICAgICAgICBpZiAocHJlZjFjbGljay5zdWJzdHIoMiwxKSA9PSAiTiIpewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmYxIikuY2xpY2soKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmYzIikuY2xpY2soKTsKICAgICAgICB9CiAgICB9IGVsc2UgeyAvLyByZWd1bGFyICsgcG9wdWxhdGluZyAxLWNsaWNrIGNoZWNrYm94CiAgICAgICAgdmFyIGNoa0JGID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoazFjbGlja2JmIik7CiAgICAgICAgaWYgKHByZWYxY2xpY2suc3Vic3RyKDAsMSkgPT0gIlkiKXsKICAgICAgICAgICAgY2hrQkYuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICBjaGtCRi5jaGVja2VkID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaGtCRi5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICAgICAgY2hrQkYuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBjaGtCRiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGtzaG93bm90Y2JmIik7CiAgICAgICAgaWYgKHNob3dZTiA9PSAiWSIpewogICAgICAgICAgICBjaGtCRi5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgICAgIGNoa0JGLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNoa0JGLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICBjaGtCRi5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJmZGl2LnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZjEiKS5mb2N1cygpOwogICAgfQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKfQpmdW5jdGlvbiBhZGpwYXJ0ZG9tKGUpeyAvLyB2MS44LjEKICAgIHZhciBwc3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhwYXJ0ZG9tIik7CiAgICB2YXIgcGFydHMgPSBwc3Bhbi50ZXh0Q29udGVudC5yZXBsYWNlKCcuLi4nLCAnJykuc3BsaXQoIi4iKTsKICAgIGlmIChwYXJ0cy5sZW5ndGggPD0gMil7CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAyICYmIHBhcnRzWzFdLmluZGV4T2YoJ3RsZCBbYWxsJykgIT09IDApewogICAgICAgICAgICAvLyBvZmZlciB0aGUgZW50aXJlIFRMRCBvcHRpb24gdjEuOS45CiAgICAgICAgICAgIHBhcnRzLnB1c2goJ3RsZCBbYWxsIGRvdC0nICsgcGFydHNbMV0gKyAnXCdzXScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIGN5Y2xlIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHBhcnRpYWwgZG9tYWluCiAgICAgICAgICAgIHBhcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGZ1bGxkb20iKS50ZXh0Q29udGVudC5zcGxpdCgiLiIpOwogICAgICAgIH0KICAgIH0KICAgIHBhcnRzLnNoaWZ0KCk7IC8vIGRpc2NhcmQgbGVmdG1vc3Qgc3ViZG9tYWluCiAgICBwc3Bhbi50ZXh0Q29udGVudCA9IHBhcnRzLmpvaW4oIi4iKTsKfQphc3luYyBmdW5jdGlvbiBhZGRibG9jayhlKXsKICAgIHZhciBidHlwZSwgZWxzLCBpLCBzZG9tLCB0Z3Q7CiAgICB0Z3QgPSBlLnRhcmdldDsKICAgIGJ0eXBlID0gdGd0LmdldEF0dHJpYnV0ZSgiYnQiKTsKICAgIGVscyA9IHRndC5mb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9InJhZGlvIl0nKTsKICAgIGZvciAoaT0wOyBpPGVscy5sZW5ndGg7IGkrKyl7CiAgICAgICAgaWYoZWxzW2ldLmNoZWNrZWQgPT0gdHJ1ZSl7CiAgICAgICAgICAgIHNkb20gPSBlbHNbaV0ubmV4dEVsZW1lbnRTaWJsaW5nLnRleHRDb250ZW50LnNwbGl0KCIgIilbMF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGdoaGNsb3NlZm9ybShlKTsKICAgIGlmIChibGlzdC5zdWJzdHIoMCwxKSAhPSAifCIpIGJsaXN0ID0gInwiICsgYmxpc3Q7CiAgICBpZiAoIWJ0eXBlKSBidHlwZSA9ICJ0IjsKICAgIGlmIChhZGRBdCA9PSAiZW5kIikgYmxpc3QgKz0gc2RvbSArICI6IiArIGJ0eXBlICsgInwiOwogICAgZWxzZSBibGlzdCA9ICJ8IiArIHNkb20gKyAiOiIgKyBidHlwZSArIGJsaXN0OwogICAgbmVlZHVwZGF0ZSA9IHRydWU7CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBibGlzdCk7CiAgICB9IGVsc2UgewogICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJoaWRleWhvc3RzIiwgYmxpc3QpOwogICAgfQogICAgaGlkZWhpdHMobnVsbCx0cnVlKTsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiR1RSIikpIHJlbW92ZVBCcygpOwogICAgaWYgKGFkZEF0ID09ICJzb3J0Iikgc29ydGxpc3QobnVsbCk7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKSl7CiAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKS5zdHlsZS5kaXNwbGF5PT0iYmxvY2siKSByZWZyZXNoU2l0ZUxpc3QoKTsKICAgIH0KfQphc3luYyBmdW5jdGlvbiBnaGhjbG9zZWZvcm0oZSl7CiAgICBpZiAoIWUpIHJldHVybjsKICAgIGlmICh0eXBlb2YoZSkgPT0gIm9iamVjdCIgJiYgZS50YXJnZXQpewogICAgICAgIGlmKGUudGFyZ2V0LmlkLmluZGV4T2YoImdoaGJmIikgPT0gMCl7CiAgICAgICAgICAgIHZhciBtbmcgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoIm1uZyIpOwogICAgICAgICAgICB2YXIgYmZkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoYmxvY2tmb3JtIik7CiAgICAgICAgICAgIHZhciB0ZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRlbXAiKTsKICAgICAgICAgICAgYmZkaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiZmRpdik7CiAgICAgICAgICAgIHRkaXYucmVtb3ZlKCk7CiAgICAgICAgICAgIGlmIChtbmcgPT0gIlkiKSBzaG93TWFuYWdlRm9ybSgibW5nZm9ybSIpOwogICAgICAgIH0KICAgICAgICBpZihlLnRhcmdldC5pZC5pbmRleE9mKCJnaGhtZiIpID09IDApewogICAgICAgICAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpWzBdID09ICJtbmciKSB0b2dnbGVCbG9ja0hpZGVycygiSCIpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgICAgIGlmIChtcG9wZW4uc3Vic3RyKDAsMykgPT0gIlktWSIpewogICAgICAgICAgICAgICAgbXBvcGVuID0gIlktTiI7CiAgICAgICAgICAgICAgICBnaGhQcmVmTy5tbmdwYW5lb3BlblswXSA9IG1wb3BlbjsKICAgICAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBpZihlID09ICJtbmdmb3JtIil7CiAgICAgICAgICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIilbMF0gPT0gIm1uZyIpIHRvZ2dsZUJsb2NrSGlkZXJzKCJIIik7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtbmdmb3JtIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgaWYgKG1wb3Blbi5zdWJzdHIoMCwzKSA9PSAiWS1ZIil7CiAgICAgICAgICAgICAgICBtcG9wZW4gPSAiWS1OIjsKICAgICAgICAgICAgICAgIGdoaFByZWZPLm1uZ3BhbmVvcGVuWzBdID0gbXBvcGVuOwogICAgICAgICAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwp9CmFzeW5jIGZ1bmN0aW9uIGltZ2Jsb2NrZGlhbG9nKGUpewogICAgdmFyIHZpZXdlciA9IGUudGFyZ2V0LmNsb3Nlc3QoJ1tnaGhyZXN1bHRdJyk7CiAgICBpZiAoIXZpZXdlcikgcmV0dXJuOwogICAgdmFyIGFlbCA9IHZpZXdlci5wYXJlbnROb2RlLmNoaWxkcmVuWzBdLnF1ZXJ5U2VsZWN0b3IoJy5fcjMgYVtocmVmXSwgc3BhbiA+IGFbaHJlZl0nKTsKICAgIGlmICghYWVsKSBhZWwgPSB2aWV3ZXIucXVlcnlTZWxlY3RvcignYVtocmVmXScpOyAvLyBBdWcuIDIwMTkgZGVzaWduCiAgICBpZiAoIWFlbCl7IGFsZXJ0KCdDYW5ub3QgZmluZCB0aGUgVVJMIGluIHRoaXMgZGVzaWduLicpOyByZXR1cm47IH0KICAgIHZhciBhbWV0YSA9IGFlbC5ocmVmLnNwbGl0KCIvIilbMl07CiAgICBpZiAoYWVsLmhyZWYuaW5kZXhPZigiJnVybD0iKT4tMSkgYW1ldGEgPSBkZWNvZGVVUklDb21wb25lbnQoYWVsLmhyZWYpLm1hdGNoKC8mdXJsPShbXiZdKykvKVsxXS5zcGxpdCgiLyIpWzJdOwogICAgaWYgKGFtZXRhLmluZGV4T2YoIjoiKT4gLTEpIGFtZXRhID0gYW1ldGEuc3Vic3RyKDAsYW1ldGEuaW5kZXhPZigiOiIpKTsgLy8gU3RyaXAgcG9ydCBudW1iZXIKICAgIGUudGFyZ2V0LnNldEF0dHJpYnV0ZSgibWV0YSIsIGFtZXRhKTsKICAgIHZhciBkb21wYXJ0ID0gYW1ldGE7CiAgICB3aGlsZSAoZG9tcGFydC5pbmRleE9mKCIuIik+IC0xKSB7CiAgICAgICAgaWYgKGJsaXN0LmluZGV4T2YoInwiK2RvbXBhcnQrIjoiKSA+IC0xKXsKICAgICAgICAgICAgaWYgKGNvbmZpcm0oIlVuYmxvY2sgIiArIGRvbXBhcnQgKyAiPyIpKXsKICAgICAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgICAgICB2YXIgc2xpc3QgPSBHTV9nZXRWYWx1ZSgiaGlkZXlob3N0cyIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzbGlzdCA9IGF3YWl0IEdNLmdldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoc2xpc3Quc3Vic3RyKDAsMSkgIT0gInwiKSBzbGlzdCA9ICJ8IiArIHNsaXN0OwogICAgICAgICAgICAgICAgc2xpc3QgPSBzbGlzdC5yZXBsYWNlKCJ8Iitkb21wYXJ0KyI6dCIsIiIpLnJlcGxhY2UoInwiK2RvbXBhcnQrIjpwIiwiIik7CiAgICAgICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBzbGlzdCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJoaWRleWhvc3RzIiwgc2xpc3QpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYmxpc3QgPSBzbGlzdDsKICAgICAgICAgICAgICAgIG5lZWR1cGRhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgaGlkZWhpdHMobnVsbCx0cnVlKTsKICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpKXsKICAgICAgICAgICAgICAgICAgICBpZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpLnN0eWxlLmRpc3BsYXk9PSJibG9jayIpIHJlZnJlc2hTaXRlTGlzdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb21wYXJ0ID0gZG9tcGFydC5zbGljZShkb21wYXJ0LmluZGV4T2YoIi4iKSsxKTsKICAgICAgICB9CiAgICB9CiAgICBzaG93YmZkKGUpOwp9Ci8vIEZ1bmN0aW9ucyByZWxhdGluZyB0byB0aGUgTWFuYWdlIEhpZGluZyBidXR0b24KZnVuY3Rpb24gYWRkTW5nQnRuKCl7CiAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpWzBdID09ICJibGsiKSByZXR1cm47CiAgICBpZiAod2luZG93LnNlbGYgIT0gd2luZG93LnRvcCkgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKVsxXSA9PSAiaWZyTiIpIHJldHVybjsKICAgIHZhciBtYnRuOwogICAgbWJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpOwogICAgbWJ0bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHRzLm1uZ2J0blswXSkpOwogICAgbWJ0bi5jbGFzc05hbWU9ImdoaGlkZXIgdW5idG4iOwogICAgbWJ0bi5zZXRBdHRyaWJ1dGUoInRpdGxlIiwiTWFuYWdlIEdvb2dsZSBIaXQgSGlkZXIgU2V0dGluZ3MiKTsKICAgIG1idG4uaWQgPSAiZ2hoTW5nQnRuIjsKICAgIG1idG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHNob3dNYW5hZ2VGb3JtLHRydWUpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYnRuKTsKfQpmdW5jdGlvbiB1bmR1cE1uZ0J0bigpewogICAgdmFyIHVuYnRucyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoInVuYnRuIik7CiAgICB3aGlsZSAodW5idG5zLmxlbmd0aCA+IDEpewogICAgICAgIHVuYnRuc1t1bmJ0bnMubGVuZ3RoIC0gMV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh1bmJ0bnNbdW5idG5zLmxlbmd0aCAtIDFdKTsKICAgIH0KfQphc3luYyBmdW5jdGlvbiBzaG93TWFuYWdlRm9ybShlKXsKICAgIGlmICh3aW5kb3cuc2VsZiAhPSB3aW5kb3cudG9wKSByZXR1cm47CiAgICB2YXIgbWZkOwogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpKSBhZGRNYW5hZ2VGb3JtKCk7CiAgICBtZmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobW5nZm9ybSIpOwogICAgaWYgKG1mZC5zdHlsZS5kaXNwbGF5ICE9ICJub25lIiAmJiBlICE9ICJtbmdmb3JtIil7IC8vIFRvZ2dsZSB0byBoaWRkZW4KICAgICAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpWzBdID09ICJtbmciKSB0b2dnbGVCbG9ja0hpZGVycygiSCIpOwogICAgICAgIGlmIChtcG9wZW4uc3Vic3RyKDAsMykgPT0gIlktWSIpewogICAgICAgICAgICBtcG9wZW4gPSAiWS1OIjsKICAgICAgICAgICAgZ2hoUHJlZk8ubW5ncGFuZW9wZW5bMF0gPSBtcG9wZW47CiAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG1mZC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAobmVlZHVwZGF0ZSA9PSB0cnVlKSByZWZyZXNoU2l0ZUxpc3QoKTsKICAgICAgICBtZmQuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICAgICAgaWYgKG1wb3Blbi5zdWJzdHIoMCwzKSA9PSAiWS1ZIiAmJiBtcG9wZW4ubGVuZ3RoID09IDUpeyAvLyBSZXN0b3JlIGxhc3QgZGlzcGxheWVkIHRhYgogICAgICAgICAgICB2YXIgdGFibnVtID0gbXBvcGVuLnN1YnN0cig0LDEpOwogICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2doaG10Jyt0YWJudW0pLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKXsKICAgICAgICAgICAgICAgIHRvZ2dsZWxpc3QoJ2doaHRzJyt0YWJudW0pOwogICAgICAgICAgICAgICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKVswXSA9PSAibW5nIikgdG9nZ2xlQmxvY2tIaWRlcnMoIlMiKTsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZSA9PSAib2JqZWN0IikgZS50YXJnZXQuYmx1cigpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobXQxIikuc3R5bGUuZGlzcGxheSAhPSAibm9uZSIgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG10NCIpLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiKXsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mMSIpLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodXRpbCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mMSIpLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKSkgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mMSIpLnJlbW92ZUF0dHJpYnV0ZSgiZGlzYWJsZWQiKTsKICAgICAgICAgICAgaWYgKGJMVW9wZW4gIT0gIk4iKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodXRpbCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgIH0KICAgICAgICBzZXRDdXJyZW50VGFiKCk7CiAgICAgICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKVswXSA9PSAibW5nIikgdG9nZ2xlQmxvY2tIaWRlcnMoIlMiKTsKICAgIH0KICAgIGlmICh0eXBlb2YgZSA9PSAib2JqZWN0IikgZS50YXJnZXQuYmx1cigpOwp9CmZ1bmN0aW9uIHNldEN1cnJlbnRUYWIoKXsKICAgIHZhciBrLCB0YWJudW07CiAgICB2YXIgdGFic2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI21mbGlzdHM+ZGl2Iik7CiAgICBmb3IgKGs9MDsgazx0YWJzZXQubGVuZ3RoOyBrKyspewogICAgICAgIHRhYm51bSA9IHRhYnNldFtrXS5nZXRBdHRyaWJ1dGUoImlkIik7CiAgICAgICAgdGFibnVtID0gdGFibnVtLnN1YnN0cih0YWJudW0ubGVuZ3RoLTEpOwogICAgICAgIGlmICh0YWJzZXRba10uc3R5bGUuZGlzcGxheSAhPSAibm9uZSIpewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodHMiK3RhYm51bSkuY2xhc3NOYW1lID0gImdoaEN1clRhYiI7CiAgICAgICAgICAgIGlmIChtcG9wZW4uc3Vic3RyKDAsMSkgPT0gIlkiKXsKICAgICAgICAgICAgICAgIG1wb3BlbiA9ICJZLVktIit0YWJudW07CiAgICAgICAgICAgICAgICBnaGhQcmVmTy5tbmdwYW5lb3BlblswXSA9IG1wb3BlbjsKICAgICAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsgLyogTk9UIFNZTkNIUk9OT1VTICovCiAgICAgICAgICAgICAgICAgICAgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0cyIrdGFibnVtKS5jbGFzc05hbWUgPSAiIjsKICAgIH0KfQovLyBGdW5jdGlvbnMgcmVsYXRpbmcgdG8gdGhlIE1hbmFnZSBHSEggZm9ybQpmdW5jdGlvbiBhZGRNYW5hZ2VGb3JtKCl7CiAgICB2YXIgbWZkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBtZmQuaWQgPSAiZ2hobW5nZm9ybSI7CiAgICBtZmQuY2xhc3NOYW1lID0gImdoaHBhbmUiOwogICAgbWZkLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJkaXNwbGF5Om5vbmU7Iik7CiAgICBtZmQuaW5uZXJIVE1MID0gIjxmb3JtIG9uc3VibWl0PVwicmV0dXJuIGZhbHNlO1wiPjxkaXYgaWQ9XCJnaGh0c2RpdlwiPiIgKwogICAgICAgICI8cCBzdHlsZT1cIm1hcmdpbjo2cHggMCAtMXB4IDBcIiBpZD1cImdoaHRzdHJpcFwiPiIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaHRzMVwiIHRpdGxlPVwiR2VuZXJhbCBVc2UgYW5kIE5vdGljZXNcIj5Ib21lPC9idXR0b24+IiArCiAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hodHMyXCIgdGl0bGU9XCJSZWd1bGFyIEJsb2NrIExpc3RcIj5CbG9jazwvYnV0dG9uPiIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaHRzM1wiIHRpdGxlPVwiUGVybWEtYmFuIExpc3RcIj5QZXJtYS1iYW48L2J1dHRvbj4iICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGh0czRcIiB0aXRsZT1cIk1hbmFnZSBTY3JpcHQgT3B0aW9uc1wiPk9wdGlvbnM8L2J1dHRvbj48L3A+PC9kaXY+IiArCiAgICAgICAgIjxkaXYgaWQ9XCJtZmxpc3RzXCIgc3R5bGU9XCJ3aWR0aDoyMzBweFwiPiIgKwogICAgICAgICI8ZGl2IGlkPVwiZ2hobXQxXCI+PHA+V2VsY29tZSB0byBHb29nbGUgSGl0IEhpZGVyISA8YSBocmVmPVwiaHR0cHM6Ly93d3cuamVmZmVyc29uc2NoZXIuY29tL2dtL2dvb2dsZS1oaXQtaGlkZXIvXCIgIiArCiAgICAgICAgInN0eWxlPVwiZmxvYXQ6cmlnaHQ7XCIgdGFyZ2V0PVwiX2JsYW5rXCIgdGl0bGU9XCJEb2N1bWVudGF0aW9uXCI+SlM8L2E+PC9wPiIgKwogICAgICAgICI8ZGl2IGNsYXNzPVwiZ2hodGFiXCI+IiArCiAgICAgICAgIjxwIHN0eWxlPVwicGFkZGluZzowLjI1ZW07bWFyZ2luOjAuMjVlbVwiPkNsaWNrIHRoZSBibG9jayBidXR0b24gKCA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdoaGlkZXJcIiBvbmNsaWNrPVwicmV0dXJuIGZhbHNlO1wiPiIgKyB0eHRzLmJsb2NrWzBdICsgIjwvYnV0dG9uPiApICIgKwogICAgICAgICJuZXh0IHRvIGEgaGl0IHRpdGxlIHRvIGJsb2NrIHJlc3VsdHMgZnJvbSB0aGF0IHNpdGUuIEEgPGI+cmVndWxhcjwvYj4gYmxvY2tlZCBoaXQgYmVjb21lcyBhIG9uZS1saW5lIG5vdGF0aW9uLCAiICsKICAgICAgICAid2hpbGUgYSA8Yj5QZXJtYS1iYW48L2I+IGRpc2FwcGVhcnMgY29tcGxldGVseS48L3A+IiArCiAgICAgICAgIjxwIHN0eWxlPVwiYm9yZGVyLXRvcDoxcHggc29saWQgIzAwMDsgcGFkZGluZzowLjI1ZW07bWFyZ2luOjAuMjVlbVwiPjxsYWJlbCB0aXRsZT1cIlN3aXRjaCBiZXR3ZWVuIHNob3dpbmcgYW5kIGhpZGluZyByZXN1bHQgdGl0bGVzICIgKwogICAgICAgICJmb3IgcmVndWxhciBibG9ja2VkIGhpdHNcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNoa3Nob3dub3RjXCIgaWQ9XCJjaGtzaG93bm90Y1wiPiBTaG93IGhpZGRlbiBoaXQgbm90aWNlczwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWwgdGl0bGU9XCJTd2l0Y2ggYmV0d2VlbiBibG9jayBkaWFsb2cgYW5kIG9uZS1jbGljayBibG9ja2luZ1wiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hrMWNsaWNrXCIgIiArCiAgICAgICAgImlkPVwiY2hrMWNsaWNrXCI+IEVuYWJsZSAxLWNsaWNrIGJsb2NraW5nPC9sYWJlbD48L3A+IiArCiAgICAgICAgIjxwIHN0eWxlPVwiYm9yZGVyLXRvcDoxcHggc29saWQgIzAwMDsgcGFkZGluZzowLjI1ZW07bWFyZ2luOjAuMjVlbVwiPnYyLjIuMiAmY29weTsgMjAyMiBKZWZmZXJzb24gU2NoZXIuIExlYXJuIG1vcmUgb24gIiArCiAgICAgICAgIjxhIGhyZWY9XCIiICsgc2NyaXB0X2Fib3V0ICsgIlwiPnRoaXMgc2NyaXB0J3MgcGFnZTwvYT4uPC9wPjwvZGl2PjwvZGl2PiIgKwogICAgICAgICI8ZGl2IGlkPVwiZ2hobXQyXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj48cD5DbGljayB0byByZW1vdmUgZnJvbSByZWd1bGFyIGJsb2NrIGxpc3Q6PC9wPiIgKwogICAgICAgICI8ZGl2IGNsYXNzPVwiZ2hodGFiXCI+PHVsIGlkPVwiZ2hoc2l0ZWxpc3RcIj48L3VsPjwvZGl2PjwvZGl2PlxuIiArCiAgICAgICAgIjxkaXYgaWQ9XCJnaGhtdDNcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPjxwPkNsaWNrIHRvIHJlbW92ZSBmcm9tIFBlcm1hLWJhbiBsaXN0OjwvcD4iICsKICAgICAgICAiPGRpdiBjbGFzcz1cImdoaHRhYlwiPjx1bCBpZD1cImdoaHBiYW5saXN0XCI+PC91bD48L2Rpdj48L2Rpdj4iICsKICAgICAgICAiPGRpdiBpZD1cImdoaG10NFwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+PHA+TWFuYWdlIHNjcmlwdCBvcHRpb25zOjwvcD4iICsKICAgICAgICAiPGRpdiBjbGFzcz1cImdoaHRhYlwiIGlkPVwiYnRuZWRpdFwiPiIgKwogICAgICAgICI8cCBpZD1cImFkZHJhZGlvc1wiPkFkZCBuZXdseSBibG9ja2VkIGRvbWFpbnM6PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJhZGRwb3NcIiB2YWx1ZT1cImVuZFwiPiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0PC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImFkZHBvc1wiIHZhbHVlPVwidG9wXCI+IGF0IHRoZSB0b3Agb2YgdGhlIGxpc3Q8L2xhYmVsPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYWRkcG9zXCIgdmFsdWU9XCJzb3J0XCI+IGluIGFscGhhYmV0aWNhbCBvcmRlcjwvbGFiZWw+PC9wPiIgKwogICAgICAgICI8cCBpZD1cImFnZ3Jlc3NyYWRzXCIgc3R5bGU9XCJib3JkZXItdG9wOjFweCBzb2xpZCAjMDAwO3BhZGRpbmctdG9wOjAuMjVlbTttYXJnaW4tYm90dG9tOjhweFwiPkJsb2NrIGZvcm0gZGVmYXVsdHMgdG86PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJhZ2dsZXZlbFwiIHZhbHVlPVwibm9uZVwiPiBhbHdheXMgdGhlIGZ1bGwgZG9tYWluPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImFnZ2xldmVsXCIgdmFsdWU9XCJhbGxcIj4gYWx3YXlzIHRoZSBwYXJ0aWFsIGRvbWFpbjwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJhZ2dsZXZlbFwiIHZhbHVlPVwid3d3XCI+IHBhcnRpYWwgZG9tYWluIGZvciB3d3cgb25seTwvbGFiZWw+PC9wPiIgKwogICAgICAgICI8cCBpZD1cImJ0bnJhZGlvc1wiIHN0eWxlPVwiYm9yZGVyLXRvcDoxcHggc29saWQgIzAwMDtwYWRkaW5nLXRvcDowLjI1ZW07bWFyZ2luLWJvdHRvbTo4cHhcIj5Vc2VyIGludGVyZmFjZSBzdHlsZTo8YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInVpc3R5bGVcIiB2YWx1ZT1cImJvdGhcIj4gU2hvdyBNYW5hZ2UgSGlkaW5nICZhbXA7ICIgKyB0eHRzLmJsb2NrWzBdICsgIjwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWw+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJtYmlmcmFtZVwiIGlkPVwibWJpZnJhbWVcIj4gTWFuYWdlIEhpZGluZyBpbiBpZnJhbWVzPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbCB0aXRsZT1cIllvdSBjYW4gY2xpY2sgYSAiICsgdHh0cy5ibG9ja1swXSArICIgYnV0dG9uIHRvIG9wZW4gdGhpcyBkaWFsb2dcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInVpc3R5bGVcIiB2YWx1ZT1cImJsa1wiPiBIaWRlIE1hbmFnZSBIaWRpbmcgYnV0dG9uPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxsYWJlbCB0aXRsZT1cIiIgKyB0eHRzLmJsb2NrWzBdICsgIiBidXR0b25zIHdpbGwgYXBwZWFyIG9ubHkgd2hlbiB0aGlzIGRpYWxvZyBpcyBkaXNwbGF5ZWRcIj48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInVpc3R5bGVcIiB2YWx1ZT1cIm1uZ1wiPiBIaWRlICIgKyB0eHRzLmJsb2NrWzBdICsgIiBidXR0b25zPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDo0cHg7XCI+TWFuYWdlIEhpZGluZyBidXR0b24gcG9zaXRpb246PC9zcGFuPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW5nYnRucG9zXCIgdmFsdWU9XCJSXCI+IFNpZGU8L2xhYmVsPiAiICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwibW5nYnRucG9zXCIgdmFsdWU9XCJUXCI+IFRvcDwvbGFiZWw+ICIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJtbmdidG5wb3NcIiB2YWx1ZT1cIkJcIj4gQm90dG9tPC9sYWJlbD48YnI+IiArCiAgICAgICAgIjxzcGFuIHN0eWxlPVwiZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luLXRvcDo0cHg7XCI+QmxvY2sgYnV0dG9uIHBvc2l0aW9uIDxpPihyZWxvYWRzKTwvaT46PC9zcGFuPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYmxvY2twb3NpdFwiIHZhbHVlPVwiSFwiPiBIZWFkbGluZTwvbGFiZWw+ICIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJibG9ja3Bvc2l0XCIgdmFsdWU9XCJDXCI+IENpdGUgbGluZTwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8c3BhbiBzdHlsZT1cImRpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6NHB4O1wiPkRpc3BsYXkgYmxvY2sgYnV0dG9uczo8L3NwYW4+PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJibG9ja2Rpc3BcIiB2YWx1ZT1cIlBcIj4gQWx3YXlzPC9sYWJlbD4gIiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImJsb2NrZGlzcFwiIHZhbHVlPVwiTVwiPiBPbiBNb3VzZW92ZXI8L2xhYmVsPjxicj4iICsKICAgICAgICAiPHNwYW4gc3R5bGU9XCJkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tdG9wOjRweDtcIj5CbG9jayBidXR0b24gdG9vbHRpcHM6PC9zcGFuPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwiYmxvY2t0dGlwXCIgdmFsdWU9XCJZXCI+IEZ1bGwgRGV0YWlsPC9sYWJlbD4gIiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImJsb2NrdHRpcFwiIHZhbHVlPVwiTlwiPiBOb25lPC9sYWJlbD48L3A+IiArCiAgICAgICAgIjxwIGlkPVwibWlzY3ByZWZcIiBzdHlsZT1cImJvcmRlci10b3A6MXB4IHNvbGlkICMwMDA7cGFkZGluZy10b3A6MC4yNWVtO21hcmdpbi1ib3R0b206OHB4XCI+TWlzYyBQcmVmZXJlbmNlczo8YnI+IiArCiAgICAgICAgIjxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNoa2FqYXhcIiBpZD1cImNoa2FqYXhcIj4gSW5zdGFudC9BSkFYL0F1dG9wYWdlcjwvbGFiZWw+PGJyPiIgKwogICAgICAgICI8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjaGtkb200XCIgaWQ9XCJjaGtkb200XCI+IERPTTQgTXV0YXRpb24gT2JzZXJ2ZXI8L2xhYmVsPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hrbXBvcGVuXCIgaWQ9XCJjaGttcG9wZW5cIj4gUmUtb3BlbiBNYW5hZ2VtZW50IFBhbmU8L2xhYmVsPjxicj4iICsKICAgICAgICAiPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hrMXBiYW5cIiBpZD1cImNoazFwYmFuXCI+IDEtY2xpY2sgdG8gUGVybWEtYmFuIGxpc3Q8L2xhYmVsPjxicj4iICsKICAgICAgICAiPGxhYmVsIHRpdGxlPVwiVHJ5IG91dCBmZWF0dXJlcyB0aGF0IGhhdmVuJ3QgYmVlbiBjb21wbGV0ZWx5IHRlc3RlZFwiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiY2hrYmV0YVwiICIgKwogICAgICAgICJpZD1cImNoa2JldGFcIj4gRW5hYmxlIGJldGEgZmVhdHVyZXM8L2xhYmVsPjwvcD4iICsKICAgICAgICAiPHAgc3R5bGU9XCJib3JkZXItdG9wOjFweCBzb2xpZCAjMDAwO3BhZGRpbmctdG9wOjAuMjVlbTttYXJnaW4tYm90dG9tOjhweFwiPkVkaXQgY2FwdGlvbnM6PC9wPiIgKwogICAgICAgICI8cD48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImdoaGlkZXJcIiBpZD1cImdoaGVkaXQxXCIga2V5PVwiYmxvY2tcIj4iICsgdHh0cy5ibG9ja1swXSArICI8L2J1dHRvbj4gIiArCiAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ2hoaWRlclwiIGlkPVwiZ2hoZWRpdDNcIiBrZXk9XCJ1bmJsb2NrXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiM5ZjZcIj4iICsgdHh0cy51bmJsb2NrWzBdICsgIjwvYnV0dG9uPiAiICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJnaGhpZGVyXCIgaWQ9XCJnaGhlZGl0MlwiIGtleT1cInBiYW5cIiBzdHlsZT1cImJhY2tncm91bmQ6I2Y2NlwiPiIgKyB0eHRzLnBiYW5bMF0gKyAiPC9idXR0b24+PC9wPiIgKwogICAgICAgICI8cD48aT5SZWxvYWQgdG8gY29tcGxldGUgY2hhbmdlczwvaT48L3A+PHA+PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZnJcIj5SZXN0b3JlIGRlZmF1bHQgY2FwdGlvbnM8L2J1dHRvbj48L3A+IiArCiAgICAgICAgIjxwIHN0eWxlPVwiYm9yZGVyLXRvcDoxcHggc29saWQgIzAwMDtwYWRkaW5nLXRvcDowLjI1ZW07bWFyZ2luLWJvdHRvbTo4cHhcIj5DdXN0b20gc3R5bGUgcnVsZXM6PGJyPiIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaGVjc3JcIj5FZGl0IEN1c3RvbSBTdHlsZSBSdWxlczwvYnV0dG9uPjwvcD48L2Rpdj48L2Rpdj4iICsKICAgICAgICAiPC9kaXY+PHAgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpwcmU7bWFyZ2luOjFlbSAwXCI+IiArCiAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hobWYxXCI+IiArIHR4dHMuc2F2ZWJ0blswXSArICI8c3BhbiBpZD1cIm51bWNoZ3NcIj48L3NwYW4+PC9idXR0b24+ICIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaG1mM1wiIHRpdGxlPVwiRGlzcGxheSBhZGRpdGlvbmFsIGJ1dHRvbnMgZm9yIGxpc3QgbWFuYWdlbWVudFwiPkxpc3QgVXRpbCAiICsKICAgICAgICAiPGRpdiBzdHlsZT1cImRpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZTowLjllbTtjb2xvcjojODg4XCI+PHNwYW4gaWQ9XCJnaGhkb3dudHJpYW5nbGVcIj4mIzk2NjA7PC9zcGFuPiIgKwogICAgICAgICI8c3BhbiBpZD1cImdoaHVwdHJpYW5nbGVcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPiYjOTY1MDs8L3NwYW4+PC9kaXY+PC9idXR0b24+ICIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaG1mMlwiPiIgKyB0eHRzLmNsb3NlYnRuWzBdICsgIjwvYnV0dG9uPjwvcD48cCBpZD1cImdoaHV0aWxcIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPiIgKwogICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaG1mNFwiIHRpdGxlPVwiRGlzcGxheSBibG9jayBsaXN0IGZvciBjb3B5aW5nIHRvIGJhY2t1cCBvciBzaGFyZVwiPiIgKwogICAgICAgIHR4dHMuZXhpbWJ0blswXSArICI8L2J1dHRvbj4gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZjdcIiB0aXRsZT1cIkltcG9ydCBkb21haW5zIHRvIHRoZSBibG9jayBsaXN0XCI+IiArCiAgICAgICAgdHh0cy5pbXBvYnRuWzBdICsgIjwvYnV0dG9uPiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaG1mOFwiIHRpdGxlPVwiQWRkIGFsbCBkb21haW5zIG9uIHRoaXMgcGFnZSB0byBjdXJyZW50IGxpc3RcIj4iICsKICAgICAgICB0eHRzLmFkZGFsbGJ0blswXSArICI8L2J1dHRvbj48YnIgLz48YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaG1mNVwiIHRpdGxlPVwiU29ydCBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlclwiPiIgKwogICAgICAgIHR4dHMuc29ydGJ0blswXSArICI8L2J1dHRvbj4gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJnaGhtZjZcIiB0aXRsZT1cIkRlLWR1cGxpY2F0ZSBibG9jayBsaXN0IGJ5IHJlbW92aW5nIHVubmVjZXNzYXJ5IGRvbWFpbnNcIj4iICsKICAgICAgICB0eHRzLmRlZHVwYnRuWzBdICsgIjwvYnV0dG9uPiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaG1mOVwiIHRpdGxlPVwiUmVtb3ZlIHd3dyBmcm9tIGJsb2NrZWQgZG9tYWluc1wiPiIgKwogICAgICAgIHR4dHMudW53d3didG5bMF0gKyAiPC9idXR0b24+PC9wPjwvZm9ybT4iOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtZmQpOwogICAgZml4U2hvd0hpZGVCdG4oKTsKICAgIGZpeHVpc3R5bGUoKTsKICAgIGZpeGFkZHBvcygpOwogICAgZml4YWdnYmxvY2soKTsKICAgIGZpeGFqYXhzdHlsZSgpOwogICAgZml4cGFuZXBlcnNpc3QoKTsKICAgIGZpeDFjbGlja3N0eWxlKCk7CiAgICBmaXhCZXRhKCk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodHMxIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRvZ2dsZWxpc3QsdHJ1ZSk7IC8vIHRhYnMKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0czIiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdG9nZ2xlbGlzdCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0czMiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdG9nZ2xlbGlzdCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0czQiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdG9nZ2xlbGlzdCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGtzaG93bm90YyIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdXBkdHByZWYsdHJ1ZSk7IC8vIGhvbWUKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGsxY2xpY2siKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHQxY2xpY2ssdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoc2l0ZWxpc3QiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdG9nZ2xlc2l0ZSx0cnVlKTsgLy8gYmxvY2sKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhwYmFubGlzdCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0b2dnbGVzaXRlLHRydWUpOyAvLyBwYmFuCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWRkcmFkaW9zIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix1cGR0YWRkcG9zLHRydWUpOyAvLyBvcHRpb25zCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWdncmVzc3JhZHMiKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHRhZ2dyZXNzLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2FqYXgiKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHRBSkFYLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2RvbTQiKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHRBSkFYLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa21wb3BlbiIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdXBkdHBlcnNpc3QsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrMXBiYW4iKS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLHVwZHQxY2xpY2ssdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrYmV0YSIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsdXBkdEJldGEsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRucmFkaW9zIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIix1cGR0dWlzdHlsZSx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhlZGl0MSIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixjaGdjYXB0aW9uLHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGVkaXQyIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGNoZ2NhcHRpb24sdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZWRpdDMiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsY2hnY2FwdGlvbix0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZnIiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscmVzZXRUZXh0U3RyaW5ncyx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhlY3NyIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLG9wZW5DdXN0b21TdHlsZUJhcix0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjEiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsc2F2ZWVkaXRzLHRydWUpOyAvLyBidXR0b25zCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobWYyIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGdoaGNsb3NlZm9ybSx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjMiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsdG9nZ2xlTGlzdFV0aWwsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobWY0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGV4cG9ydGxpc3QsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobWY1IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHNvcnRsaXN0LHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mNiIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixkZWR1cCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjciKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsaW1wb3J0bGlzdCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjgiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsYWRkQWxsTm93LHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mOSIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix1bnd3dyx0cnVlKTsKICAgIC8vIEFkZCBKUyBpY29uIGxpbmsKICAgIGFkZEJ0bkxpbmsoKTsKfQphc3luYyBmdW5jdGlvbiBhZGRCdG5MaW5rKCl7CiAgICB2YXIgSlNCVE4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKTsKICAgIEpTQlROLnNldEF0dHJpYnV0ZSgnYWx0JywgJ0pTJyk7CiAgICBpZiAodHlwZW9mIEdNLmdldFJlc291cmNlVXJsID09PSAidW5kZWZpbmVkIil7CiAgICAgICAgSlNCVE4uc3JjID0gR01fZ2V0UmVzb3VyY2VVUkwoIm15Y29uIik7CiAgICB9IGVsc2UgeyAvKiBhc3luY2hyb25vdXMqLwogICAgICAgIEpTQlROLnNyYyA9IGF3YWl0IEdNLmdldFJlc291cmNlVXJsKCJteWNvbiIpOwogICAgfQogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2doaG10MSBhIikudGV4dENvbnRlbnQgPSAiIjsKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNnaGhtdDEgYSIpLmFwcGVuZENoaWxkKEpTQlROKTsKfQpmdW5jdGlvbiB0b2dnbGVsaXN0KGUpeyAvLyBDaGFuZ2UgdGFicwogICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJyl7CiAgICAgICAgdmFyIHRndGlkID0gZTsKICAgIH0gZWxzZSB7CiAgICAgICAgZS50YXJnZXQuYmx1cigpOwogICAgICAgIGlmIChlLnRhcmdldC5jbGFzc05hbWUgPT0gImdoaEN1clRhYiIpIHJldHVybjsKICAgICAgICB0Z3RpZCA9IGUudGFyZ2V0LmlkOwogICAgfQogICAgdmFyIHRhYmJ0bnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjZ2hodHN0cmlwPmJ1dHRvbiIpOwogICAgdmFyIGssIHRhYm51bTsKICAgIGZvciAoaz0wOyBrPHRhYmJ0bnMubGVuZ3RoOyBrKyspewogICAgICAgIHRhYm51bSA9IHRhYmJ0bnNba10uaWQ7CiAgICAgICAgdGFibnVtID0gdGFibnVtLnN1YnN0cih0YWJudW0ubGVuZ3RoLTEpOwogICAgICAgIGlmICh0Z3RpZCA9PSB0YWJidG5zW2tdLmlkKXsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG10Iit0YWJudW0pLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hobXQiK3RhYm51bSkuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICB9CiAgICB9CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG10MSIpLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtdDQiKS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIil7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1mMSIpLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh1dGlsIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjEiKS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtZjEiKS5yZW1vdmVBdHRyaWJ1dGUoImRpc2FibGVkIik7CiAgICAgICAgaWYgKGJMVW9wZW4gIT0gIk4iKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodXRpbCIpLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgfQogICAgc2V0Q3VycmVudFRhYigpOwp9CmZ1bmN0aW9uIHRvZ2dsZUxpc3RVdGlsKGUpeyAvLyBEaXNwbGF5L2Nsb3NlIGV4dHJhIHNldCBvZiBidXR0b25zCiAgICBlLnRhcmdldC5ibHVyKCk7CiAgICB2YXIgcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh1dGlsIik7CiAgICBpZiAoIXApIHJldHVybjsKICAgIC8vIElmIG5vdCBkaXNwbGF5aW5nIGEgbGlzdCBub3csIG1vdmUgdG8gYSBsaXN0CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG10MSIpLnN0eWxlLmRpc3BsYXkgIT0gIm5vbmUiIHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhtdDQiKS5zdHlsZS5kaXNwbGF5ICE9ICJub25lIil7CiAgICAgICAgdG9nZ2xlbGlzdCgnZ2hodHMyJyk7CiAgICAgICAgcC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsgLy8gQWx3YXlzIG9wZW4gYnV0dG9uIHBhbmUKICAgICAgICBiTFVvcGVuID0gIlkiOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnaGhkb3dudHJpYW5nbGUnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdnaGh1cHRyaWFuZ2xlJykuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgfSBlbHNlIHsKICAgICAgICBpZiAocC5zdHlsZS5kaXNwbGF5ICE9ICJibG9jayIpeyAvLyBUb2dnbGUgd2hlbiBsaXN0IGFscmVhZHkgd2FzIGRpc3BsYXllZAogICAgICAgICAgICBwLnN0eWxlLmRpc3BsYXkgPSAiYmxvY2siOwogICAgICAgICAgICBiTFVvcGVuID0gIlkiOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2hoZG93bnRyaWFuZ2xlJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2doaHVwdHJpYW5nbGUnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICBiTFVvcGVuID0gIk4iOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2hoZG93bnRyaWFuZ2xlJykuc3R5bGUuZGlzcGxheSA9ICcnOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2hodXB0cmlhbmdsZScpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIHRvZ2dsZXNpdGUoZSl7IC8vIERlc2lnbmF0ZSBsaXN0IGl0ZW1zIGZvciB1bmJsb2NrLCBwYmFuIG9yIGJsb2NrCiAgICB2YXIgdCwgbCwgcywgcGlkOwogICAgdCA9IGUudGFyZ2V0OwogICAgaWYgKHQuY2xhc3NOYW1lID09ICJnaGhpbmZvIikgdCA9IHQubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgbCA9IHQucGFyZW50Tm9kZTsKICAgIHBpZCA9IGwucGFyZW50Tm9kZS5pZDsKICAgIHN3aXRjaCAodC5jbGFzc05hbWUpewogICAgICAgIGNhc2UgImdoaGhvc3QgZ2hocGIiOgogICAgICAgICAgICB0LmNsYXNzTmFtZSA9ICJnaGhob3N0IGdoaGJsayI7IC8vIHRvZ2dsZSB0byBibG9jawogICAgICAgICAgICBpZiAobC5ub2RlTmFtZSA9PSAiTEkiKXsKICAgICAgICAgICAgICAgIGlmIChwaWQgPT0gImdoaHNpdGVsaXN0Iil7CiAgICAgICAgICAgICAgICAgICAgbC5jaGlsZHJlblswXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgICAgICAgICAgICAgIGxpc3RjaGdzID0gbGlzdGNoZ3MgLSAxOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBsLmNoaWxkcmVuWzBdLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKICAgICAgICAgICAgICAgICAgICBsLmNoaWxkcmVuWzBdLnRleHRDb250ZW50ID0gInRvICIgKyB0eHRzLmJsb2NrWzBdOwogICAgICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiNjY2MiOwogICAgICAgICAgICAgICAgICAgIGxpc3RjaGdzID0gbGlzdGNoZ3MgKyAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgImdoaGhvc3QgZ2hoZGVsIjoKICAgICAgICAgICAgdC5jbGFzc05hbWUgPSAiZ2hoaG9zdCBnaGhwYiI7IC8vIHRvZ2dsZSB0byBwZXJtYS1iYW4KICAgICAgICAgICAgaWYgKGwubm9kZU5hbWUgPT0gIkxJIil7CiAgICAgICAgICAgICAgICBpZiAocGlkID09ICJnaGhwYmFubGlzdCIpewogICAgICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0uc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICAgICAgICAgICAgICBsaXN0Y2hncyA9IGxpc3RjaGdzIC0gMTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbC5jaGlsZHJlblswXS5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7CiAgICAgICAgICAgICAgICAgICAgbC5jaGlsZHJlblswXS50ZXh0Q29udGVudCA9ICJ0byAiICsgdHh0cy5wYmFuWzBdOwogICAgICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiNmNjYiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHQuY2xhc3NOYW1lID0gImdoaGhvc3QgZ2hoZGVsIjsgLy8gdG9nZ2xlIHRvIHVuYmxvY2sKICAgICAgICAgICAgaWYgKGwubm9kZU5hbWUgPT0gIkxJIil7CiAgICAgICAgICAgICAgICBsLmNoaWxkcmVuWzBdLnN0eWxlLmRpc3BsYXkgPSAiaW5saW5lIjsKICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0udGV4dENvbnRlbnQgPSAidG8gIiArIHR4dHMudW5ibG9ja1swXTsKICAgICAgICAgICAgICAgIGwuY2hpbGRyZW5bMF0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiM5ZjYiOwogICAgICAgICAgICAgICAgaWYgKHBpZCA9PSAiZ2hoc2l0ZWxpc3QiKXsKICAgICAgICAgICAgICAgICAgICBsaXN0Y2hncyA9IGxpc3RjaGdzICsgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgfQp9CmFzeW5jIGZ1bmN0aW9uIHNhdmVlZGl0cyhlKXsgLy8gU2F2ZSBjaGFuZ2VzIG1hZGUgb24gdGFicyAyIGFuZCAzCiAgICBpZiAoZSl7CiAgICAgICAgaWYgKGxpc3RjaGdzID09IDApewogICAgICAgICAgICBpZiAoIWNvbmZpcm0oIk5vIGNoYW5nZXMgZGV0ZWN0ZWQuIFNhdmUgYW55d2F5PyIpKXsKICAgICAgICAgICAgICAgIGUudGFyZ2V0LmJsdXIoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghY29uZmlybSgiU2F2ZSBjaGFuZ2VzIHRvIGJsb2NrIGxpc3Q/IikpewogICAgICAgICAgICAgICAgZS50YXJnZXQuYmx1cigpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdmFyIHNsaXN0LCBpLCBzcCwgdHRlbXAsIHB0ZW1wOwogICAgc2xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoc2l0ZWxpc3QiKTsKICAgIHR0ZW1wID0gIiI7CiAgICBwdGVtcCA9ICIiOwogICAgZm9yIChpPTA7aTxzbGlzdC5jaGlsZHJlbi5sZW5ndGg7aSsrKXsKICAgICAgICBpZiAoc2xpc3QuY2hpbGRyZW5baV0ubm9kZU5hbWUgPT0gIkxJIikgewogICAgICAgICAgICBzcCA9IHNsaXN0LmNoaWxkcmVuW2ldLmNoaWxkcmVuWzFdOwogICAgICAgICAgICBzd2l0Y2ggKHNwLmNsYXNzTmFtZSl7CiAgICAgICAgICAgICAgICBjYXNlICJnaGhob3N0IGdoaGJsayI6CiAgICAgICAgICAgICAgICAgICAgdHRlbXAgKz0gc3AudGV4dENvbnRlbnQgKyAiOnR8IjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgImdoaGhvc3QgZ2hocGIiOgogICAgICAgICAgICAgICAgICAgIHB0ZW1wICs9IHNwLnRleHRDb250ZW50ICsgIjpwfCI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIC8vIHRvIGJlIHVuYmxvY2tlZAogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgc2xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocGJhbmxpc3QiKTsKICAgIGZvciAoaT0wO2k8c2xpc3QuY2hpbGRyZW4ubGVuZ3RoO2krKyl7CiAgICAgICAgaWYgKHNsaXN0LmNoaWxkcmVuW2ldLm5vZGVOYW1lID09ICJMSSIpIHsKICAgICAgICAgICAgc3AgPSBzbGlzdC5jaGlsZHJlbltpXS5jaGlsZHJlblsxXTsKICAgICAgICAgICAgc3dpdGNoIChzcC5jbGFzc05hbWUpewogICAgICAgICAgICAgICAgY2FzZSAiZ2hoaG9zdCBnaGhibGsiOgogICAgICAgICAgICAgICAgICAgIHR0ZW1wICs9IHNwLnRleHRDb250ZW50ICsgIjp0fCI7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJnaGhob3N0IGdoaHBiIjoKICAgICAgICAgICAgICAgICAgICBwdGVtcCArPSBzcC50ZXh0Q29udGVudCArICI6cHwiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAvLyB0byBiZSB1bmJsb2NrZWQKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsICJ8IiArIHR0ZW1wICsgcHRlbXApOwogICAgICAgIGJsaXN0ID0gR01fZ2V0VmFsdWUoImhpZGV5aG9zdHMiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCAifCIgKyB0dGVtcCArIHB0ZW1wKTsKICAgICAgICBibGlzdCA9IGF3YWl0IEdNLmdldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICB9CiAgICBoaWRlaGl0cyhudWxsLHRydWUpOwogICAgcmVmcmVzaFNpdGVMaXN0KCk7CiAgICBsaXN0Y2hncyA9IDA7CiAgICBpZiAoZSkgZS50YXJnZXQuYmx1cigpOwp9CmZ1bmN0aW9uIHJlZnJlc2hTaXRlTGlzdCgpeyAvLyBSZWJ1aWxkIGxpc3RzIGZvciB0YWJzIDIgYW5kIDMKICAgIHZhciBzYXJyYXksIHNsaXN0ID0gJycsIHBibGlzdCA9ICcnLCB1bEIsIHVsUCwgaTsKICAgIGlmIChibGlzdC5zdWJzdHIoMCwxKSAhPSAifCIpIGJsaXN0ID0gInwiICsgYmxpc3Q7CiAgICBzYXJyYXkgPSBibGlzdC5zdWJzdHIoMSkuc3BsaXQoInwiKTsKICAgIGZvciAoaT0wOyBpPHNhcnJheS5sZW5ndGgtMTsgaSsrKXsKICAgICAgICBpZiAoc2FycmF5W2ldLmluZGV4T2YoIjpwIik8MCkgewogICAgICAgICAgICBzbGlzdCArPSAnPGxpPjxzcGFuIGNsYXNzPSJnaGhpbmZvIj48L3NwYW4+PHNwYW4gY2xhc3M9ImdoaGhvc3QgZ2hoYmxrIj4nICsgc2FycmF5W2ldLnNwbGl0KCc6JylbMF0gKyAnPC9zcGFuPjwvbGk+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYmxpc3QgKz0gJzxsaT48c3BhbiBjbGFzcz0iZ2hoaW5mbyI+PC9zcGFuPjxzcGFuIGNsYXNzPSJnaGhob3N0IGdoaHBiIj4nICsgc2FycmF5W2ldLnNwbGl0KCc6JylbMF0gKyAnPC9zcGFuPjwvbGk+JzsKICAgICAgICB9CiAgICB9CiAgICB1bEIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoc2l0ZWxpc3QiKTsKICAgIHdoaWxlICh1bEIuZmlyc3RDaGlsZCkgdWxCLnJlbW92ZUNoaWxkKHVsQi5maXJzdENoaWxkKTsKICAgIHVsQi5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIHNsaXN0KTsKICAgIHVsUCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhwYmFubGlzdCIpOwogICAgd2hpbGUgKHVsUC5maXJzdENoaWxkKSB1bFAucmVtb3ZlQ2hpbGQodWxQLmZpcnN0Q2hpbGQpOwogICAgdWxQLmluc2VydEFkamFjZW50SFRNTCgnYmVmb3JlZW5kJywgcGJsaXN0KTsKICAgIG5lZWR1cGRhdGUgPSBmYWxzZTsKfQphc3luYyBmdW5jdGlvbiB1cGR0YWRkcG9zKGUpeyAvLyBJbXBsZW1lbnQgY2hhbmdlIGZvciByYWRpbyBidXR0b25zIHJlIHdoZXJlIHRvIGFkZCB0byBsaXN0CiAgICB2YXIgcmFkcyA9IGUudGFyZ2V0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbdHlwZT0ncmFkaW8nXSIpOwogICAgZm9yICh2YXIgaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChyYWRzW2ldLmNoZWNrZWQpewogICAgICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSAic29ydCIpewogICAgICAgICAgICAgICAgaWYoY29uZmlybSgiU29ydCBsaXN0cyBub3c/IFNvcnRpbmcgaXMgaXJyZXZlcnNpYmxlLiIpKXsKICAgICAgICAgICAgICAgICAgICBpZiAobGlzdGNoZ3MgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maXJtKCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgdG8geW91ciBsaXN0cy4gU2F2ZSBjaGFuZ2VzIGFuZCBzb3J0LCBvciBjYW5jZWwgc29ydGluZz8iKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZWRpdHMobnVsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhhZGRwb3MoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBzb3J0bGlzdChudWxsKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZml4YWRkcG9zKCk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGFkZEF0ID0gcmFkc1tpXS52YWx1ZTsKICAgICAgICAgICAgZ2hoUHJlZk8uYWRkdG9saXN0cG9zWzBdID0gYWRkQXQ7CiAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGZpeGFkZHBvcygpOwp9CmZ1bmN0aW9uIGZpeGFkZHBvcygpeyAvLyBDaGVjayBhcHByb3ByaWF0ZSByYWRpbyBidXR0b24gcmUgd2hlcmUgdG8gYWRkIHRvIGxpc3QKICAgIHZhciByYWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFkZHJhZGlvcyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9J3JhZGlvJ10iKTsKICAgIGZvciAodmFyIGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSBhZGRBdCl7CiAgICAgICAgICAgIHJhZHNbaV0uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZiAocmFkc1tpXS5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICByYWRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gdXBkdGFnZ3Jlc3MoZSl7IC8vIEltcGxlbWVudCBjaGFuZ2UgZm9yIHJhZGlvIGJ1dHRvbnMgcmUgZGVmYXVsdCBkb21haW4gdG8gYmxvY2sKICAgIHZhciByYWRzID0gZS50YXJnZXQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPSdyYWRpbyddIik7CiAgICBmb3IgKHZhciBpPTA7IGk8cmFkcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgaWYgKHJhZHNbaV0uY2hlY2tlZCl7CiAgICAgICAgICAgIGJBZ2dyZXNzID0gcmFkc1tpXS52YWx1ZTsKICAgICAgICAgICAgZ2hoUHJlZk8uYWdncmVzc2l2ZWJsb2NrWzBdID0gYkFnZ3Jlc3M7CiAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIGZpeGFnZ2Jsb2NrKCk7Cn0KZnVuY3Rpb24gZml4YWdnYmxvY2soKXsgLy8gQ2hlY2sgYXBwcm9wcmlhdGUgcmFkaW8gYnV0dG9uIHJlIGRlZmF1bHQgZG9tYWluIHRvIGJsb2NrCiAgICB2YXIgcmFkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhZ2dyZXNzcmFkcyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9J3JhZGlvJ10iKTsKICAgIGZvciAodmFyIGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSBiQWdncmVzcyl7CiAgICAgICAgICAgIHJhZHNbaV0uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZiAocmFkc1tpXS5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICByYWRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gdXBkdHVpc3R5bGUoZSl7IC8vIFN0b3JlIHNldHRpbmdzIGZvciBidXR0b25zIHRvIGRpc3BsYXkKICAgIHZhciBtYnBhcnRzID0gbWJzdHlsZS5zcGxpdCgiLSIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDEpIG1icGFydHMucHVzaCgiaWZyTiIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDIpIG1icGFydHMucHVzaCgiUiIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDMpIG1icGFydHMucHVzaCgiUCIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDQpIG1icGFydHMucHVzaCgiWSIpOwogICAgaWYgKG1icGFydHMubGVuZ3RoID09IDUpIG1icGFydHMucHVzaCgiSCIpOwogICAgaWYgKGUudGFyZ2V0LmlkID09ICJtYmlmcmFtZSIpIHsgLy8gSGFuZGxlIGlmcmFtZSBjaGVja2JveAogICAgICAgIHZhciBjaGsgPSBlLnRhcmdldDsKICAgICAgICBpZiAoY2hrLmNoZWNrZWQpewogICAgICAgICAgICBtYnBhcnRzWzFdID0gImlmclkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1icGFydHNbMV0gPSAiaWZyTiI7CiAgICAgICAgfQogICAgICAgIG1ic3R5bGUgPSBtYnBhcnRzLmpvaW4oIi0iKTsKICAgICAgICBnaGhQcmVmTy5tbmdidG5zdHlsZVswXSA9IG1ic3R5bGU7CiAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgfQogICAgfSBlbHNlIHsgLy8gSGFuZGxlIHJhZGlvIGJ1dHRvbnMKICAgICAgICBpZiAoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJuYW1lIikgPT0gInVpc3R5bGUiKXsKICAgICAgICAgICAgdmFyIHJhZHMgPSBlLnRhcmdldC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9J3Vpc3R5bGUnXSIpOwogICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8cmFkcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICBpZiAocmFkc1tpXS5jaGVja2VkKXsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJhZHNbaV0udmFsdWUpewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJibGsiOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJwYXJ0c1swXSA9IHJhZHNbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoTW5nQnRuIikucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgiQWZ0ZXIgeW91IGNsb3NlIHRoZSBtYW5hZ2VtZW50IHBhbmUsIGNsaWNrIGFueSBibG9jayBidXR0b24gdG8gb3BlbiBpdCBhZ2Fpbi4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICJtbmciOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlybSgiRGlzcGxheSBibG9jayBidXR0b25zIG9ubHkgd2hlbiB0aGlzIGRpYWxvZyBpcyBvcGVuPyIpKSBtYnBhcnRzWzBdID0gIm1uZyI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGUudGFyZ2V0LmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWJwYXJ0c1swXSA9ICJib3RoIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaE1uZ0J0biIpKSBhZGRNbmdCdG4oKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbWJzdHlsZSA9IG1icGFydHMuam9pbigiLSIpOwogICAgICAgICAgICAgICAgICAgIGdoaFByZWZPLm1uZ2J0bnN0eWxlWzBdID0gbWJzdHlsZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgeyAvLyBIYW5kbGUgTWFuYWdlbWVudCBCdXR0b24gcG9zaXRpb24gYW5kIGJsb2NrIGJ1dHRvbiBkaXNwbGF5IHN0eWxlCiAgICAgICAgICAgIHJhZHMgPSBlLnRhcmdldC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9J21uZ2J0bnBvcyddIik7CiAgICAgICAgICAgIGZvciAoaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgICAgICAgICAgaWYgKHJhZHNbaV0uY2hlY2tlZCl7CiAgICAgICAgICAgICAgICAgICAgbWJwYXJ0c1syXSA9IHJhZHNbaV0udmFsdWU7CiAgICAgICAgICAgICAgICAgICAgbWJzdHlsZSA9IG1icGFydHMuam9pbigiLSIpOwogICAgICAgICAgICAgICAgICAgIGdoaFByZWZPLm1uZ2J0bnN0eWxlWzBdID0gbWJzdHlsZTsKICAgICAgICAgICAgICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgICAgICAgICAgICAgIEdNX3NldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmFkcyA9IGUudGFyZ2V0LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZT0nYmxvY2tkaXNwJ10iKTsKICAgICAgICAgICAgZm9yIChpPTA7IGk8cmFkcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgICAgICBpZiAocmFkc1tpXS5jaGVja2VkKXsKICAgICAgICAgICAgICAgICAgICBtYnBhcnRzWzNdID0gcmFkc1tpXS52YWx1ZTsKICAgICAgICAgICAgICAgICAgICBtYnN0eWxlID0gbWJwYXJ0cy5qb2luKCItIik7CiAgICAgICAgICAgICAgICAgICAgZ2hoUHJlZk8ubW5nYnRuc3R5bGVbMF0gPSBtYnN0eWxlOwogICAgICAgICAgICAgICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgICAgICAgICAgICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByYWRzID0gZS50YXJnZXQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSdibG9ja3R0aXAnXSIpOwogICAgICAgICAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIGlmIChyYWRzW2ldLmNoZWNrZWQpewogICAgICAgICAgICAgICAgICAgIG1icGFydHNbNF0gPSByYWRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIG1ic3R5bGUgPSBtYnBhcnRzLmpvaW4oIi0iKTsKICAgICAgICAgICAgICAgICAgICBnaGhQcmVmTy5tbmdidG5zdHlsZVswXSA9IG1ic3R5bGU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJhZHMgPSBlLnRhcmdldC5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9J2Jsb2NrcG9zaXQnXSIpOwogICAgICAgICAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgICAgIGlmIChyYWRzW2ldLmNoZWNrZWQpewogICAgICAgICAgICAgICAgICAgIG1icGFydHNbNV0gPSByYWRzW2ldLnZhbHVlOwogICAgICAgICAgICAgICAgICAgIG1ic3R5bGUgPSBtYnBhcnRzLmpvaW4oIi0iKTsKICAgICAgICAgICAgICAgICAgICBnaGhQcmVmTy5tbmdidG5zdHlsZVswXSA9IG1ic3R5bGU7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICAgICAgICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJnaGhwcmVmcyIsIEpTT04uc3RyaW5naWZ5KGdoaFByZWZPKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGZpeHVpc3R5bGUoKTsKfQpmdW5jdGlvbiBmaXh1aXN0eWxlKCl7IC8vIENoZWNrIGFwcHJvcHJpYXRlIHJhZGlvIGJ1dHRvbiByZSBidXR0b25zIHRvIGRpc3BsYXkKICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIikubGVuZ3RoID09IDEpIG1ic3R5bGUgPSBtYnN0eWxlICsgIi1pZnJOLVItUC1ZLUgiOwogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKS5sZW5ndGggPT0gMikgbWJzdHlsZSA9IG1ic3R5bGUgKyAiLVItUC1ZLUgiOwogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKS5sZW5ndGggPT0gMykgbWJzdHlsZSA9IG1ic3R5bGUgKyAiLVAtWS1IIjsKICAgIGlmIChtYnN0eWxlLnNwbGl0KCItIikubGVuZ3RoID09IDQpIG1ic3R5bGUgPSBtYnN0eWxlICsgIi1ZLUgiOwogICAgaWYgKG1ic3R5bGUuc3BsaXQoIi0iKS5sZW5ndGggPT0gNSkgbWJzdHlsZSA9IG1ic3R5bGUgKyAiLUgiOwogICAgdmFyIHJhZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRucmFkaW9zIikucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZV49J3Vpc3R5bGUnXSIpOwogICAgZm9yICh2YXIgaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChyYWRzW2ldLnZhbHVlID09IG1ic3R5bGUuc3BsaXQoIi0iKVswXSl7CiAgICAgICAgICAgIHJhZHNbaV0uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZiAocmFkc1tpXS5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICByYWRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICB2YXIgY2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1iaWZyYW1lIik7CiAgICBpZiAobWJzdHlsZS5zcGxpdCgiLSIpWzFdID09ICJpZnJZIil7CiAgICAgICAgY2hrLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICBjaGsuY2hlY2tlZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAgIGNoay5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICBjaGsuY2hlY2tlZCA9IGZhbHNlOwogICAgfQogICAgcmFkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidG5yYWRpb3MiKS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lXj0nbW5nYnRucG9zJ10iKTsKICAgIGZvciAoaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChyYWRzW2ldLnZhbHVlID09IG1ic3R5bGUuc3BsaXQoIi0iKVsyXSl7CiAgICAgICAgICAgIHJhZHNbaV0uc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpZiAocmFkc1tpXS5oYXNBdHRyaWJ1dGUoImNoZWNrZWQiKSl7CiAgICAgICAgICAgICAgICByYWRzW2ldLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByYWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJ0bnJhZGlvcyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWVePSdibG9ja2Rpc3AnXSIpOwogICAgZm9yIChpPTA7IGk8cmFkcy5sZW5ndGg7IGkrKyl7CiAgICAgICAgaWYgKHJhZHNbaV0udmFsdWUgPT0gbWJzdHlsZS5zcGxpdCgiLSIpWzNdKXsKICAgICAgICAgICAgcmFkc1tpXS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgICAgIHJhZHNbaV0uY2hlY2tlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGlmIChyYWRzW2ldLmhhc0F0dHJpYnV0ZSgiY2hlY2tlZCIpKXsKICAgICAgICAgICAgICAgIHJhZHNbaV0ucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgICAgICAgICByYWRzW2ldLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHJhZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnRucmFkaW9zIikucXVlcnlTZWxlY3RvckFsbCgiaW5wdXRbbmFtZV49J2Jsb2NrdHRpcCddIik7CiAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSBtYnN0eWxlLnNwbGl0KCItIilbNF0pewogICAgICAgICAgICByYWRzW2ldLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaWYgKHJhZHNbaV0uaGFzQXR0cmlidXRlKCJjaGVja2VkIikpewogICAgICAgICAgICAgICAgcmFkc1tpXS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICAgICAgICAgIHJhZHNbaV0uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmFkcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidG5yYWRpb3MiKS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lXj0nYmxvY2twb3NpdCddIik7CiAgICBmb3IgKGk9MDsgaTxyYWRzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAocmFkc1tpXS52YWx1ZSA9PSBtYnN0eWxlLnNwbGl0KCItIilbNV0pewogICAgICAgICAgICByYWRzW2ldLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICAgICAgcmFkc1tpXS5jaGVja2VkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgaWYgKHJhZHNbaV0uaGFzQXR0cmlidXRlKCJjaGVja2VkIikpewogICAgICAgICAgICAgICAgcmFkc1tpXS5yZW1vdmVBdHRyaWJ1dGUoImNoZWNrZWQiKTsKICAgICAgICAgICAgICAgIHJhZHNbaV0uY2hlY2tlZCA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdG9nZ2xlY2l0ZWxpbmUobWJzdHlsZS5zcGxpdCgiLSIpWzVdKTsKfQphc3luYyBmdW5jdGlvbiB1cGR0QUpBWChlKXsgLy8gU3RvcmUgc2V0dGluZ3MgZm9yIEFKQVggcHJlZmVyZW5jZXMKICAgIHZhciBjaGsgPSBlLnRhcmdldDsKICAgIGlmIChjaGsuaWQgPT0gImNoa2FqYXgiKXsKICAgICAgICBpZiAoY2hrLmNoZWNrZWQpewogICAgICAgICAgICBiQUpBWCA9ICJvbiI7CiAgICAgICAgICAgIGlmIChjaGdNb24pIGNoZ01vbi5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgIGVsc2UgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01TdWJ0cmVlTW9kaWZpZWQiLCBjaGVja09saXN0LCBmYWxzZSk7CiAgICAgICAgICAgIHNldE11dGF0aW9uV2F0Y2goKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiQUpBWCA9ICJvZmYiOwogICAgICAgICAgICBpZiAoY2hnTW9uKSBjaGdNb24uZGlzY29ubmVjdCgpOwogICAgICAgICAgICBlbHNlIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgY2hlY2tPbGlzdCwgZmFsc2UpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGNoay5jaGVja2VkKXsKICAgICAgICAgICAgYk11dE9iID0gIlkiOwogICAgICAgICAgICBpZiAoIWNoZ01vbil7CiAgICAgICAgICAgICAgICBpZiAoYkFKQVgpewogICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgY2hlY2tPbGlzdCwgZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIHNldE11dGF0aW9uV2F0Y2goKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJNdXRPYiA9ICJOIjsKICAgICAgICAgICAgaWYgKGNoZ01vbikgY2hnTW9uLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgaWYgKGJBSkFYKXsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NU3VidHJlZU1vZGlmaWVkIiwgY2hlY2tPbGlzdCwgZmFsc2UpOwogICAgICAgICAgICAgICAgc2V0TXV0YXRpb25XYXRjaCgpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZ2hoUHJlZk8udXNlbXV0YXRpb25bMF0gPSBiQUpBWCArICItIiArIGJNdXRPYjsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgfSBlbHNlIHsKICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgfQogICAgZml4YWpheHN0eWxlKCk7Cn0KZnVuY3Rpb24gZml4YWpheHN0eWxlKCl7IC8vIENoZWNrIGJveGVzIGZvciBBSkFYIHByZWZlcmVuY2VzCiAgICB2YXIgY2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2FqYXgiKTsKICAgIGlmIChiQUpBWCA9PSAib24iKXsKICAgICAgICBjaGsuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgIGNoay5jaGVja2VkID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgY2hrLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgIGNoay5jaGVja2VkID0gZmFsc2U7CiAgICB9CiAgICBjaGsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hrZG9tNCIpOwogICAgaWYgKGJNdXRPYiA9PSAiWSIpewogICAgICAgIGNoay5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICBjaGsucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KfQphc3luYyBmdW5jdGlvbiB1cGR0cGVyc2lzdChlKXsgLy8gU3RvcmUgc2V0dGluZyBmb3IgcGVyc2lzdGVuY2UgcHJlZmVyZW5jZQogICAgdmFyIGNoayA9IGUudGFyZ2V0OwogICAgaWYgKGNoay5jaGVja2VkKXsKICAgICAgICBtcG9wZW4gPSAiWSIgKyBtcG9wZW4uc3Vic3RyKDEpOwogICAgfSBlbHNlIHsKICAgICAgICBtcG9wZW4gPSAiTiIgKyBtcG9wZW4uc3Vic3RyKDEpOwogICAgfQogICAgZ2hoUHJlZk8ubW5ncGFuZW9wZW5bMF0gPSBtcG9wZW47CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgIH0KICAgIGZpeHBhbmVwZXJzaXN0KCk7Cn0KZnVuY3Rpb24gZml4cGFuZXBlcnNpc3QoKXsgLy8gQ2hlY2sgYm94IGZvciBwZXJzaXN0ZW5jZSBwcmVmZXJlbmNlCiAgICB2YXIgY2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa21wb3BlbiIpOwogICAgaWYgKG1wb3Blbi5zdWJzdHIoMCwxKSA9PSAiWSIpewogICAgICAgIGNoay5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICBjaGsucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KfQphc3luYyBmdW5jdGlvbiB1cGR0MWNsaWNrKGUpeyAvLyBTdG9yZSBzZXR0aW5nIGZvciAxLWNsaWNrIHByZWZlcmVuY2VzCiAgICB2YXIgY2hrID0gZS50YXJnZXQ7CiAgICBpZiAoY2hrLmlkID09ICJjaGsxY2xpY2siIHx8IGNoay5pZCA9PSAiY2hrMWNsaWNrYmYiKXsKICAgICAgICBpZiAoY2hrLmNoZWNrZWQpewogICAgICAgICAgICBwcmVmMWNsaWNrID0gIlkiICsgcHJlZjFjbGljay5zdWJzdHIoMSwyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwcmVmMWNsaWNrID0gIk4iICsgcHJlZjFjbGljay5zdWJzdHIoMSwyKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGlmIChjaGsuY2hlY2tlZCl7CiAgICAgICAgICAgIHByZWYxY2xpY2sgPSBwcmVmMWNsaWNrLnN1YnN0cigwLDIpICsgIlkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByZWYxY2xpY2sgPSBwcmVmMWNsaWNrLnN1YnN0cigwLDIpICsgIk4iOwogICAgICAgIH0KICAgIH0KICAgIGdoaFByZWZPLm9uZWNsaWNrWzBdID0gcHJlZjFjbGljazsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgfSBlbHNlIHsKICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOwogICAgfQogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGZpeDFjbGlja3N0eWxlKCk7Cn0KZnVuY3Rpb24gZml4MWNsaWNrc3R5bGUoKXsgLy8gQ2hlY2sgYm94ZXMgZm9yIG9uZS1jbGljayBwcmVmZXJlbmNlcwogICAgdmFyIGNoa01QID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoazFjbGljayIpOwogICAgdmFyIGNoa0JGID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoazFjbGlja2JmIik7CiAgICBpZiAocHJlZjFjbGljay5zdWJzdHIoMCwxKSA9PSAiWSIpewogICAgICAgIGNoa01QLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKTsKICAgICAgICBjaGtNUC5jaGVja2VkID0gdHJ1ZTsKICAgICAgICBpZiAoY2hrQkYpewogICAgICAgICAgICBjaGtCRi5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgICAgIGNoa0JGLmNoZWNrZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgY2hrTVAucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgY2hrTVAuY2hlY2tlZCA9IGZhbHNlOwogICAgICAgIGlmIChjaGtCRil7CiAgICAgICAgICAgIGNoa0JGLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgICAgICBjaGtCRi5jaGVja2VkID0gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgdmFyIGNoayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGsxcGJhbiIpOwogICAgaWYgKHByZWYxY2xpY2suc3Vic3RyKDIsMSkgPT0gIlkiKXsKICAgICAgICBjaGsuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpOwogICAgICAgIGNoay5jaGVja2VkID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgICAgY2hrLnJlbW92ZUF0dHJpYnV0ZSgiY2hlY2tlZCIpOwogICAgICAgIGNoay5jaGVja2VkID0gZmFsc2U7CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gdXBkdEJldGEoZSl7IC8vIFN0b3JlIHNldHRpbmcgZm9yIHJ1bmJldGEgcHJlZmVyZW5jZQogICAgdmFyIGNoayA9IGUudGFyZ2V0OwogICAgaWYgKGNoay5jaGVja2VkKXsKICAgICAgICBiZXRhdGVzdCA9ICJZIjsKICAgIH0gZWxzZSB7CiAgICAgICAgYmV0YXRlc3QgPSAiTiI7CiAgICB9CiAgICBnaGhQcmVmTy5ydW5iZXRhWzBdID0gYmV0YXRlc3Q7CiAgICBpZiAoIUdNNCl7CiAgICAgICAgR01fc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImdoaHByZWZzIiwgSlNPTi5zdHJpbmdpZnkoZ2hoUHJlZk8pKTsKICAgIH0KICAgIGZpeEJldGEoKTsKfQpmdW5jdGlvbiBmaXhCZXRhKCl7IC8vIENoZWNrIGJveCBmb3IgcnVuYmV0YSBwcmVmZXJlbmNlCiAgICB2YXIgY2hrID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2JldGEiKTsKICAgIGlmIChiZXRhdGVzdCA9PSAiWSIpewogICAgICAgIGNoay5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgICBjaGsucmVtb3ZlQXR0cmlidXRlKCJjaGVja2VkIik7CiAgICAgICAgY2hrLmNoZWNrZWQgPSBmYWxzZTsKICAgIH0KfQphc3luYyBmdW5jdGlvbiBjaGdjYXB0aW9uKGUpeyAvLyBTdG9yZSBidXR0b24gY2FwdGlvbiBjaGFuZ2VzIChidXQgZG8gbm90IGltbWVkaWF0ZWx5IHJlZnJlc2gpCiAgICB2YXIgYnRuLCBrZXksIGlucHV0OwogICAgYnRuID0gZS50YXJnZXQ7CiAgICBrZXkgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUoImtleSIpOwogICAgZS50YXJnZXQuYmx1cigpOwogICAgaW5wdXQgPSBwcm9tcHQodHh0c1trZXldWzFdLCB0eHRzW2tleV1bMF0pOwogICAgaWYgKCFpbnB1dCkgcmV0dXJuOwogICAgaWYgKGlucHV0Lmxlbmd0aCA+IDAgJiYgaW5wdXQgIT0gdHh0c1trZXldWzBdKXsKICAgICAgICB0eHRzW2tleV1bMF0gPSBpbnB1dC5yZXBsYWNlKC9cIi9nLCInJyIpOwogICAgICAgIGJ0bi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0eHRzW2tleV1bMF0pKTsKICAgICAgICBidG4ucmVtb3ZlQ2hpbGQoYnRuLmZpcnN0Q2hpbGQpOwogICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgR01fc2V0VmFsdWUoInRleHRzdHJpbmdzIiwgSlNPTi5zdHJpbmdpZnkodHh0cykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF3YWl0IEdNLnNldFZhbHVlKCJ0ZXh0c3RyaW5ncyIsIEpTT04uc3RyaW5naWZ5KHR4dHMpKTsKICAgICAgICB9CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gcmVzZXRUZXh0U3RyaW5ncyhlKXsgLy8gUmVzZXQgYnV0dG9ucyBjYXB0aW9ucyB0byBkZWZhdWx0cwogICAgaWYgKGNvbmZpcm0oIlJlc3RvcmUgZGVmYXVsdCBidXR0b24gY2FwdGlvbnM/IikpewogICAgICAgIHR4dHMgPSBkZWZhdWx0VHh0czsKICAgICAgICBpZiAoIUdNNCl7CiAgICAgICAgICAgIEdNX3NldFZhbHVlKCJ0ZXh0c3RyaW5ncyIsIEpTT04uc3RyaW5naWZ5KHR4dHMpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgidGV4dHN0cmluZ3MiLCBKU09OLnN0cmluZ2lmeSh0eHRzKSk7CiAgICAgICAgfQogICAgICAgIGFsZXJ0KCJQbGVhc2UgcmVsb2FkIHRvIHNlZSB0aGUgY2hhbmdlcy4iKTsKICAgICAgICBlLnRhcmdldC5ibHVyKCk7CiAgICB9Cn0KYXN5bmMgZnVuY3Rpb24gZXhwb3J0bGlzdChlKXsgLy8gRGlzcGxheSBhbmQgcG9wdWxhdGUgZXhwb3J0IGZvcm0sIGNsZWFuIHVwIGZyb20gYW55IHByaW9yIHVzZQogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwb3J0IikpIGluc2VydEV4cG9ydEZvcm0oKTsKICAgIHZhciBleHBEaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwb3J0Iik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhpbWhlYWQiKS5pbm5lckhUTUwgPSAiRXhwb3J0IEJsb2NrIExpc3QiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGV4aW1pbmZvMSIpLmlubmVySFRNTCA9ICJUaGVzZSBib3hlcyBkaXNwbGF5IHlvdXIgY3VycmVudCBibG9jayBsaXN0LiAiICsKICAgICAgICAiPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJleHBnb3RvcHJlaW1wXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj5TaG93IG9sZCBibG9jayBsaXN0IChwcmlvciB0byBsYXN0IGltcG9ydCk8L2J1dHRvbj48YnIgLz48YnIgLz4iICsKICAgICAgICAiT24gdGhlIGxlZnQsIHlvdSBoYXZlIHRoZSBsaXN0IGluIGl0cyBuYXRpdmUgZm9ybWF0LiBCeSBzYXZpbmcgdGhpcyBmb3JtYXQsIHlvdSBjYW4gcHJlc2VydmUgeW91ciByZWd1bGFyL1Blcm1hLWJhbiAiICsKICAgICAgICAiYmxvY2sgZGVjaXNpb25zLiA8YnIgLz48YnIgLz5PbiB0aGUgcmlnaHQsIHlvdSBoYXZlIGEgc2ltcGxlIGxpc3Qgb2YgZG9tYWlucy4gIiArCiAgICAgICAgIlRoaXMgd291bGQgYmUgYSBnb29kIGZvcm1hdCBmb3Igc2hhcmluZyB5b3VyIGxpc3Qgd2l0aCBvdGhlcnMuIjsKICAgIGlmICghR000KXsKICAgICAgICB2YXIgY3Vycmxpc3QgPSBHTV9nZXRWYWx1ZSgiaGlkZXlob3N0cyIpOwogICAgfSBlbHNlIHsKICAgICAgICBjdXJybGlzdCA9IGF3YWl0IEdNLmdldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICB9CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFsZWZ0IikudmFsdWUgPSBjdXJybGlzdDsKICAgIHZhciBkb21MaXN0ID0gY3Vycmxpc3Quc3Vic3RyKDEpLnJlcGxhY2UoLzpbdHBdXHwvZywgIlxuIik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnZhbHVlID0gZG9tTGlzdC5yZXBsYWNlKC9cbiokLywgIiIpOwogICAgaWYgKCFHTTQpewogICAgICAgIHZhciBwcmVpbXBvbGlzdCA9IEdNX2dldFZhbHVlKCJoaWRleWJhY2siLCAiIik7CiAgICB9IGVsc2UgewogICAgICAgIHByZWltcG9saXN0ID0gYXdhaXQgR00uZ2V0VmFsdWUoImhpZGV5YmFjayIsICIiKTsKICAgIH0KICAgIGlmIChwcmVpbXBvbGlzdC5sZW5ndGggPiAwKXsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhwZ290b3ByZWltcCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixleHBvcnRvbGRsaXN0LHRydWUpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleHBnb3RvcHJlaW1wIikuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgfQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGxlZnRjb250cm9scyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocmlnaHRjb250cm9scyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGJsZGl2Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgIGV4cERpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgIGUudGFyZ2V0LmJsdXIoKTsKfQpmdW5jdGlvbiBpbnNlcnRFeHBvcnRGb3JtKCl7CiAgICB2YXIgZE5ldywgYnRuLCBwYXIsIHRhOwogICAgZE5ldyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZE5ldy5pZCA9ICJnaGhleHBvcnQiOwogICAgZE5ldy5jbGFzc05hbWUgPSAiZ2hocGFuZSI7CiAgICBkTmV3LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJwb3NpdGlvbjpmaXhlZDt0b3A6MTBweDtsZWZ0OjUlO3dpZHRoOjkwJTt6LWluZGV4OjEwMDAwO2JhY2tncm91bmQ6I2RkZDtwYWRkaW5nOjFlbTtmb250LXNpemU6MS4yNWVtO2Rpc3BsYXk6bm9uZTttYXgtaGVpZ2h0Ojkwdmg7b3ZlcmZsb3cteTphdXRvOyIpOwogICAgZE5ldy5pbm5lckhUTUwgPSAnPGJ1dHRvbiBpZD0iZXhwb3J0Y2xvc2UiIHR5cGU9ImJ1dHRvbiIgc3R5bGU9ImZsb2F0OiByaWdodDsgbWFyZ2luOiAwIDAgNHB4IDRweDsiIGNsYXNzPSJnaGhpZGVyIj5DbG9zZTwvYnV0dG9uPicgKwogICAgICAgICc8cCBzdHlsZT0ibWFyZ2luLXRvcDowOyBmb250LXdlaWdodDogYm9sZDsiIGlkPSJnaGhleGltaGVhZCI+PC9wPicgKwogICAgICAgICc8cCBpZD0iZ2hoZXhpbWluZm8xIj48L3A+JyArCiAgICAgICAgJzxkaXYgaWQ9ImdoaGxlZnQiIHN0eWxlPSJ3aWR0aDo0OSU7ZmxvYXQ6bGVmdCI+PHRleHRhcmVhIGlkPSJnaGh0YWxlZnQiICcgKwogICAgICAgICdzcGVsbGNoZWNrPSJmYWxzZSIgc3R5bGU9IndpZHRoOjEwMCU7aGVpZ2h0OmNhbGMoOTB2aCAtIDMwMHB4KTtvdmVyZmxvdy15OnNjcm9sbCI+PC90ZXh0YXJlYT4nICsKICAgICAgICAnPGRpdiBpZD0iZ2hobGVmdGNvbnRyb2xzIiBzdHlsZT0iY2xlYXI6bGVmdDtkaXNwbGF5Om5vbmUiPjxwPjxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iZ2hoZXhwMSI+UGFyc2UgTGlzdCBmb3IgSW1wb3J0PC9idXR0b24+PC9wPjwvZGl2PjwvZGl2PicgKwogICAgICAgICc8ZGl2IGlkPSJnaGhyaWdodCIgc3R5bGU9IndpZHRoOjQ5JTtmbG9hdDpyaWdodCI+PHRleHRhcmVhIGlkPSJnaGh0YXJpZ2h0IiAnICsKICAgICAgICAnc3BlbGxjaGVjaz0iZmFsc2UiIHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDpjYWxjKDkwdmggLSAzMDBweCk7b3ZlcmZsb3cteTpzY3JvbGwiPjwvdGV4dGFyZWE+JyArCiAgICAgICAgJzxkaXYgaWQ9ImdoaHRibGRpdiIgc3R5bGU9ImhlaWdodDpjYWxjKDkwdmggLSAzMDBweCk7b3ZlcmZsb3cteTpzY3JvbGw7b3ZlcmZsb3cteDpzY3JvbGw7YmFja2dyb3VuZDojZmZmO3BhZGRpbmc6NHB4IDAgMCA0cHg7Ym9yZGVyOjFweCBzb2xpZCAjYWFjO21hcmdpbi10b3A6MXB4O2Rpc3BsYXk6bm9uZSI+PC9kaXY+ICcgKwogICAgICAgICc8ZGl2IGlkPSJnaGhyaWdodGNvbnRyb2xzIiBzdHlsZT0iY2xlYXI6cmlnaHQ7ZGlzcGxheTpub25lIj48cCBpZD0iaW1wcmFkaW9zIj5QbGVhc2UgcmV2aWV3IHRoZSBhYm92ZSBsaXN0IGZvciBhY2N1cmFjeS4gSWYgY29ycmVjdCwgYWRkIGRvbWFpbnMgdG86IDxicj4nICsKICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iaW1wYnR5cGUiIHZhbHVlPSJhc2lzIj4mbmJzcDt0aGUgbGlzdCBzcGVjaWZpZWQgdW5kZXIgQmxvY2sgVHlwZTwvbGFiZWw+IDxiciAvPicgKwogICAgICAgICc8bGFiZWw+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJpbXBidHlwZSIgdmFsdWU9InQiPiZuYnNwO3RoZSByZWd1bGFyIGJsb2NrIGxpc3Q8L2xhYmVsPiA8YnIgLz4nICsKICAgICAgICAnPGxhYmVsPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iaW1wYnR5cGUiIHZhbHVlPSJwIj4mbmJzcDt0aGUgUGVybWEtYmFuIGxpc3Q8L2xhYmVsPiAmbmJzcDsgJyArCiAgICAgICAgJzxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0iZ2hoZXhwMiI+SW1wb3J0PC9idXR0b24+ICZuYnNwOyA8c3BhbiBzdHlsZT0iZmxvYXQ6cmlnaHQ7IGZvbnQtc3R5bGU6aXRhbGljOyBvcGFjaXR5OjAuODsiPlJlcGxhY2UgZW50aXJlIGJsb2NrbGlzdDombmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJjaGtpbXBvcmVwbCI+PC9zcGFuPjwvcD48L2Rpdj48L2Rpdj4nOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkTmV3KTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdleHBvcnRjbG9zZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXtkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ2hoZXhwb3J0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzt9LCB0cnVlKTsKfQpmdW5jdGlvbiBpbXBvcnRsaXN0KGUpeyAvLyBEaXNwbGF5IGltcG9ydCBmb3JtLCBjbGVhbiB1cCBmcm9tIGFueSBwcmlvciB1c2UKICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGV4cG9ydCIpKSBpbnNlcnRFeHBvcnRGb3JtKCk7CiAgICB2YXIgZXhwRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGV4cG9ydCIpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGV4aW1oZWFkIikuaW5uZXJIVE1MID0gJ0ltcG9ydCBCbG9jayBMaXN0JzsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhleGltaW5mbzEiKS5pbm5lckhUTUwgPSAiPHN0cm9uZz5BcyBhIHByZWNhdXRpb24gaW4gY2FzZSBzb21ldGhpbmcgZ29lcyB3cm9uZywgcGxlYXNlIHVzZSB0aGUgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJpbXBnb3RvZXhwXCI+RXhwb3J0PC9idXR0b24+ICIgKwogICAgICAgICJmZWF0dXJlIHRvIGNvcHkgYW5kIHNhdmUgeW91ciBjdXJyZW50IGxpc3QgYXMgYSBiYWNrdXAuPC9zdHJvbmc+IDxiciAvPjxiciAvPiIgKwogICAgICAgICJUbyBiZWdpbiwgcGFzdGUgeW91ciBsaXN0IGludG8gdGhlIGxlZnQgYm94IGJlbG93LiBUaGVuIGNsaWNrIHRoZSBQYXJzZSBMaXN0IGZvciBJbXBvcnQgYnV0dG9uLiBUaGlzIHNjcmlwdCBjYW4gaW1wb3J0IGEgbGlzdCBpbiBpdHMgb3duIG5hdGl2ZSBmb3JtYXQsIG9yIGEgcGxhaW4gbGlzdCBvZiBkb21haW5zIHdpdGggYSBzZXBhcmF0ZSBkb21haW4gb24gZWFjaCBsaW5lLCBvciAiICsKICAgICAgICAic2VwYXJhdGVkIGJ5IHNwYWNlcy4gKEl0IGFsc28gY29udmVydHMgdGhlIE5vaXNlIFJlZHVjdGlvbiBmb3IgR29vZ2xlIGFuZCBHb29nbGUgRG9tYWluIEJsb2NrZXIgZm9ybWF0cy4pIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGh0YWxlZnQiKS52YWx1ZSA9ICIiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGxlZnRjb250cm9scyIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhyaWdodGNvbnRyb2xzIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhleHAxIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHBhcnNlTGlzdCx0cnVlKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbXBnb3RvZXhwIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGV4cG9ydGxpc3QsdHJ1ZSk7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGJsZGl2Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGtpbXBvcmVwbCIpLmNoZWNrZWQgPSBmYWxzZTsKICAgIGV4cERpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgIGUudGFyZ2V0LmJsdXIoKTsKfQpmdW5jdGlvbiBwYXJzZUxpc3QoZSl7IC8vIFBhcnNlIHB1dGF0aXZlIGRvbWFpbiBsaXN0IGFuZCByZWRpc3BsYXkgY2xlYW5lZCB1cAogICAgdmFyIHR4dCwgc2l0ZXMgPSBbXSwgYkhhc1R5cGVzID0gMCwgaSwgdGJvZCwgdGhkLCByYXNpcywgbGJwb3MsIHJicG9zOwogICAgdHh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRhbGVmdCIpLnZhbHVlOwogICAgaWYgKHR4dC5sZW5ndGggPCA0KXsKICAgICAgICBhbGVydCgiQmxvY2sgbGlzdCB0b28gc2hvcnQhIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRibGRpdiIpLmlubmVySFRNTCA9ICIiOwogICAgLy8gY2xlYW4gdXAvY29udmVydCBkb21haW4gbGlzdCB0byBwaXBlLWRlbGltaXRlZAogICAgdHh0ID0gdHh0LnJlcGxhY2UoLyhodHRwfGh0dHBzKTovZywgIiIpOwogICAgdHh0ID0gdHh0LnJlcGxhY2UoLygsfFwvfDspL2csICJ8Iik7CiAgICB0eHQgPSB0eHQucmVwbGFjZSgvXHMrL2csICJ8Iik7CiAgICB0eHQgPSB0eHQucmVwbGFjZSgvXHwrL2csICJ8Iik7CiAgICB0eHQgPSB0eHQucmVwbGFjZSgvW1w8XD4iJz0jXCFcdTIwMThcdTIwMTlcKFwpXHtcfV0vZywgIiIpOwogICAgLy8gc3RyaXAgcmVnZXgKICAgIHR4dCA9IHR4dC5yZXBsYWNlKC8oXCt8XCp8XCR8XFwpL2csICIiKTsKICAgIHdoaWxlICh0eHQuaW5kZXhPZigiWyIpID4gLTEgJiYgdHh0LmluZGV4T2YoIl0iKSA+IC0xKXsKICAgICAgICBsYnBvcyA9IHR4dC5pbmRleE9mKCJbIik7CiAgICAgICAgcmJwb3MgPSB0eHQuaW5kZXhPZigiXSIpOwogICAgICAgIGlmIChsYnBvcyA+IDAgJiYgcmJwb3MgKyAxIDwgdHh0Lmxlbmd0aCkgdHh0ID0gdHh0LnN1YnN0cmluZygwLGxicG9zKSArIHR4dC5zdWJzdHJpbmcocmJwb3MrMSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChsYnBvcyA9PSAwICYmIHJicG9zICsgMSA8IHR4dC5sZW5ndGgpIHR4dCA9IHR4dC5zdWJzdHJpbmcocmJwb3MrMSk7CiAgICAgICAgICAgIGVsc2UgYnJlYWs7IC8vIGZvciBzb21lIHJlYXNvbiwgZW50aXJlIGxpc3QgaXMgYnJhY2tldGVkPz8KICAgICAgICB9CiAgICB9CiAgICBpZiAodHh0LmluZGV4T2YoIjoiKSA+IC0xKSBiSGFzVHlwZXMgPSAxOwogICAgc2l0ZXMgPSB0eHQuc3BsaXQoInwiKTsKICAgIGZvciAoaT0wOyBpPHNpdGVzLmxlbmd0aDsgaSsrKXsKICAgICAgICBpZiAoc2l0ZXNbaV0ubGVuZ3RoID4gMSl7CiAgICAgICAgICAgIGlmIChzaXRlc1tpXS5pbmRleE9mKCIuIikgPT0gMCkgc2l0ZXNbaV0gPSBzaXRlc1tpXS5zdWJzdHIoMSk7CiAgICAgICAgICAgIGlmIChzaXRlc1tpXS5pbmRleE9mKCI/IikgPiAtMSkgc2l0ZXNbaV0gPSBzaXRlc1tpXS5zdWJzdHIoMCxzaXRlc1tpXS5pbmRleE9mKCI/IikpOwogICAgICAgICAgICBpZiAoYkhhc1R5cGVzID09IDEpewogICAgICAgICAgICAgICAgaWYgKHNpdGVzW2ldLmluZGV4T2YoIjp0IikgPT0gc2l0ZXNbaV0ubGVuZ3RoIC0gMiB8fCBzaXRlc1tpXS5pbmRleE9mKCI6cCIpID09IHNpdGVzW2ldLmxlbmd0aCAtIDIpewogICAgICAgICAgICAgICAgICAgIHNpdGVzW2ldID0gIjx0cj48dGQ+IiArIHNpdGVzW2ldLnJlcGxhY2UoIjp0IiwiPC90ZD48dGQ+cmVndWxhciIpLnJlcGxhY2UoIjpwIiwiPC90ZD48dGQ+UGVybWEtYmFuIikgKyAiPC90ZD48L3RyPiI7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmIChzaXRlc1tpXS5pbmRleE9mKCI6IikgPiAtMSkgc2l0ZXNbaV0gPSBzaXRlc1tpXS5zdWJzdHIoMCwgc2l0ZXNbaV0uaW5kZXhPZigiOiIpKTsKICAgICAgICAgICAgICAgICAgICBzaXRlc1tpXSA9ICI8dHI+PHRkPiIgKyBzaXRlc1tpXSArICI8L3RkPjx0ZD4odW5zcGVjaWZpZWQpPC90ZD48L3RyPiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFBsYWluIGxpc3QKICAgICAgICAgICAgICAgIHNpdGVzW2ldID0gIjx0cj48dGQ+IiArIHNpdGVzW2ldICsgIjwvdGQ+PC90cj4iOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdGJvZCA9ICI8dGJvZHk+XG4iICsgc2l0ZXMuam9pbigiXG4iKSArICI8L3Rib2R5PiI7CiAgICBpZiAoc2l0ZXMubGVuZ3RoID09IDApewogICAgICAgIGFsZXJ0KCJVbmFibGUgdG8gcGFyc2UgdGhlIGxpc3QsIHNvcnJ5LiIpOyByZXR1cm47CiAgICB9CiAgICBpZiAoYkhhc1R5cGVzID09IDEpIHRoZCA9ICI8dGhlYWQ+PHRyPjx0aD5Eb21haW48L3RoPjx0aD5CbG9jayBUeXBlPC90aD48L3RyPjwvdGhlYWQ+IjsKICAgIGVsc2UgdGhkID0gIjx0aGVhZD48dHI+PHRoPkRvbWFpbjwvdGg+PC90cj48L3RoZWFkPiI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGJsZGl2IikuaW5uZXJIVE1MID0gIjx0YWJsZSBjZWxsc3BhY2luZz1cIjBcIiBjbGFzcz1cImdoaHRibFwiIGlkPVwiZ2hocGFyc2VkXCI+IiArIHRoZCArIHRib2QgKyAiPC90YWJsZT4iOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHRibGRpdiIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgIHJhc2lzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaHJpZ2h0Y29udHJvbHMiKS5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt2YWx1ZT0nYXNpcyddIilbMF07CiAgICBpZiAoYkhhc1R5cGVzID09IDEpewogICAgICAgIGlmIChyYXNpcy5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpIHJhc2lzLnJlbW92ZUF0dHJpYnV0ZSgiZGlzYWJsZWQiKTsKICAgICAgICByYXNpcy5jaGVja2VkID0gdHJ1ZTsKICAgICAgICByYXNpcy5wYXJlbnROb2RlLnN0eWxlLmNvbG9yID0gIiI7CiAgICB9IGVsc2UgewogICAgICAgIHJhc2lzLnNldEF0dHJpYnV0ZSgiZGlzYWJsZWQiLCJkaXNhYmxlZCIpOwogICAgICAgIHJhc2lzLnBhcmVudE5vZGUuc3R5bGUuY29sb3IgPSAicmdiKDE3MiwgMTY4LCAxNTMpIjsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocmlnaHRjb250cm9scyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3ZhbHVlPSd0J10iKVswXS5jaGVja2VkID0gdHJ1ZTsKICAgIH0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhyaWdodGNvbnRyb2xzIikuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoZXhwMiIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixkb0ltcG9ydCx0cnVlKTsKICAgIGUudGFyZ2V0LmJsdXIoKTsKfQphc3luYyBmdW5jdGlvbiBkb0ltcG9ydChlKXsgLy8gQWRkIHNpdGVzIGZyb20gY2xlYW5lZCB1cCBkb21haW4gbGlzdCB0byBzY3JpcHQgYmxvY2sgbGlzdHMKICAgIHZhciB0YmwsIHJhZHMsIGksIHR5cGVSdWxlLCByb3dzLCBkb20sIG5ld0RvbXMgPSAiIjsKICAgIHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhwYXJzZWQiKTsKICAgIGlmICghdGJsKXsKICAgICAgICBhbGVydCgiVW5hYmxlIHRvIGxvY2F0ZSB0YWJsZSBvZiBwYXJzZWQgZG9tYWlucyEiKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGJsLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpewogICAgICAgIGFsZXJ0KCJQbGVhc2Ugc3RhcnQgdGhlIGltcG9ydCBwcm9jZXNzIGFnYWluISIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIHJhZHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocmlnaHRjb250cm9scyIpLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9J3JhZGlvJ10iKTsKICAgIGZvciAoaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChyYWRzW2ldLmNoZWNrZWQpewogICAgICAgICAgICB0eXBlUnVsZSA9IHJhZHNbaV0udmFsdWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KICAgIHJvd3MgPSB0YmwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRyIik7CiAgICBmb3IgKGk9MDsgaTxyb3dzLmxlbmd0aDsgaSsrKXsKICAgICAgICBkb20gPSByb3dzW2ldLmNoaWxkcmVuWzBdLnRleHRDb250ZW50OwogICAgICAgIGlmIChkb20ubGFzdEluZGV4T2YoIi4iKSA8IGRvbS5sZW5ndGgtMiAmJiBkb20uaW5kZXhPZigiLiIpID4gMCl7CiAgICAgICAgICAgIHN3aXRjaCAodHlwZVJ1bGUpewogICAgICAgICAgICAgICAgY2FzZSAiYXNpcyI6CiAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3NbaV0uY2hpbGRyZW5bMV0udGV4dENvbnRlbnQgPT0gIlBlcm1hLWJhbiIpIG5ld0RvbXMgKz0gZG9tICsgIjpwfCI7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBuZXdEb21zICs9IGRvbSArICI6dHwiOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBuZXdEb21zICs9IGRvbSArICI6IiArIHR5cGVSdWxlICsgInwiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJvd3NbaV0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiNmZjAiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJvd3NbaV0uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gIiNmMDAiOwogICAgICAgIH0KICAgIH0KICAgIGlmIChuZXdEb21zICE9ICIiKXsKICAgICAgICAvLyBCYWNrIHVwIGN1cnJlbnQgYmxvY2sgbGlzdAogICAgICAgIGlmICghR000KXsKICAgICAgICAgICAgR01fc2V0VmFsdWUoImhpZGV5YmFjayIsIGJsaXN0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiaGlkZXliYWNrIiwgYmxpc3QpOwogICAgICAgIH0KICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoa2ltcG9yZXBsIikuY2hlY2tlZCA9PSB0cnVlKXsKICAgICAgICAgICAgaWYgKGNvbmZpcm0oIkRlbGV0ZSBjdXJyZW50IGJsb2NrIGxpc3QgYW5kIHJlcGxhY2UgaXQgd2l0aCBkb21haW5zIHlvdSBhcmUgaW1wb3J0aW5nPyAoVG8gYWRkIHRvIHRoZSBjdXJyZW50IGJsb2NrIGxpc3QsIGNsaWNrIENhbmNlbC4pIikpIHsKICAgICAgICAgICAgICAgIGJsaXN0ID0gIiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGJsaXN0ID09ICIiKSBibGlzdCA9ICJ8IiArIG5ld0RvbXM7CiAgICAgICAgZWxzZSBibGlzdCArPSBuZXdEb21zOwogICAgICAgIC8vIFBlcnNpc3QgdXBkYXRlZCBibG9jayBsaXN0CiAgICAgICAgaWYgKCFHTTQpewogICAgICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIGJsaXN0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhd2FpdCBHTS5zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIGJsaXN0KTsKICAgICAgICB9CiAgICAgICAgaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaG1uZ2Zvcm0iKS5zdHlsZS5kaXNwbGF5PT0iYmxvY2siKSByZWZyZXNoU2l0ZUxpc3QoKTsKICAgICAgICBoaWRlaGl0cyhudWxsLHRydWUpOwogICAgfQogICAgYWxlcnQoIkltcG9ydCBvZiB5ZWxsb3ctaGlnaGxpZ2h0ZWQgZG9tYWlucyBjb21wbGV0ZWQuIFBsZWFzZSBjaGVjayB0aGUgTWFuYWdlbWVudCBQYW5lIHRvICIgKwogICAgICAgICAgInZpZXcsIHNvcnQsIGFuZC9vciBkZS1kdXBsaWNhdGUgeW91ciBpbXBvcnRlZCBkb21haW5zLiIpOwp9CmFzeW5jIGZ1bmN0aW9uIGV4cG9ydG9sZGxpc3QoZSl7IC8vIERpc3BsYXkgYW5kIHBvcHVsYXRlIGV4cG9ydCBmb3JtIHdpdGggcHJlLWltcG9ydCBsaXN0CiAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhleHBvcnQiKSkgaW5zZXJ0RXhwb3J0Rm9ybSgpOwogICAgdmFyIGV4cERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhleHBvcnQiKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhleGltaGVhZCIpLmlubmVySFRNTCA9ICJFeHBvcnQgT2xkIChQcmUtSW1wb3J0KSBCbG9jayBMaXN0IjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhleGltaW5mbzEiKS5pbm5lckhUTUwgPSAiVGhlc2UgYm94ZXMgZGlzcGxheSB5b3VyIG9sZCBibG9jayBsaXN0IGZyb20gYmVmb3JlIHRoZSBsYXN0IGltcG9ydC4gIiArCiAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZXhwZ290b2JsaXN0XCI+U2hvdyBjdXJyZW50IGJsb2NrIGxpc3Q8L2J1dHRvbj48YnIgLz48YnIgLz4iICsKICAgICAgICAiT24gdGhlIGxlZnQsIHlvdSBoYXZlIHRoZSBsaXN0IGluIGl0cyBuYXRpdmUgZm9ybWF0LiBCeSBzYXZpbmcgdGhpcyBmb3JtYXQsIHlvdSBjYW4gcHJlc2VydmUgeW91ciByZWd1bGFyL1Blcm1hLWJhbiAiICsKICAgICAgICAiYmxvY2sgZGVjaXNpb25zLiA8YnIgLz48YnIgLz5PbiB0aGUgcmlnaHQsIHlvdSBoYXZlIGEgc2ltcGxlIGxpc3Qgb2YgZG9tYWlucy4gIiArCiAgICAgICAgIlRoaXMgd291bGQgYmUgYSBnb29kIGZvcm1hdCBmb3Igc2hhcmluZyB5b3VyIGxpc3Qgd2l0aCBvdGhlcnMuIjsKICAgIGlmICghR000KXsKICAgICAgICB2YXIgcHJlaW1wb2xpc3QgPSBHTV9nZXRWYWx1ZSgiaGlkZXliYWNrIiwgIiIpOwogICAgfSBlbHNlIHsKICAgICAgICBwcmVpbXBvbGlzdCA9IGF3YWl0IEdNLmdldFZhbHVlKCJoaWRleWJhY2siLCAiIik7CiAgICB9CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFsZWZ0IikudmFsdWUgPSBwcmVpbXBvbGlzdDsKICAgIHZhciBkb21MaXN0ID0gcHJlaW1wb2xpc3Quc3Vic3RyKDEpLnJlcGxhY2UoLzpbdHBdXHwvZywgIlxuIik7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnZhbHVlID0gZG9tTGlzdC5yZXBsYWNlKC9cbiokLywgIiIpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV4cGdvdG9ibGlzdCIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixleHBvcnRsaXN0LHRydWUpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGxlZnRjb250cm9scyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hocmlnaHRjb250cm9scyIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGJsZGl2Iikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hodGFyaWdodCIpLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgIGV4cERpdi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgIGUudGFyZ2V0LmJsdXIoKTsKfQphc3luYyBmdW5jdGlvbiBzb3J0bGlzdChlKXsgLy8gQWxwaGEtc29ydCBibG9jayBsaXN0CiAgICBpZiAobGlzdGNoZ3MgPiAwKSB7CiAgICAgICAgaWYgKGNvbmZpcm0oIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcyB0byB5b3VyIGxpc3RzLiBTYXZlIGNoYW5nZXMgYW5kIHNvcnQsIG9yIGNhbmNlbCBzb3J0aW5nPyIpKXsKICAgICAgICAgICAgc2F2ZWVkaXRzKG51bGwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CiAgICBpZiAoYmxpc3Quc3Vic3RyKDAsMSkgIT0gInwiKSBibGlzdCA9ICJ8IiArIGJsaXN0OwogICAgdmFyIHNhcnJheSA9IGJsaXN0LnN1YnN0cigxLGJsaXN0Lmxlbmd0aC0yKS5zcGxpdCgifCIpOwogICAgc2FycmF5LnNvcnQoKTsKICAgIC8vIFBlcnNpc3Qgc29ydGVkIGxpc3QKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsICJ8IiArIHNhcnJheS5qb2luKCJ8IikgKyAifCIpOwogICAgICAgIGJsaXN0ID0gR01fZ2V0VmFsdWUoImhpZGV5aG9zdHMiKTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCAifCIgKyBzYXJyYXkuam9pbigifCIpICsgInwiKTsKICAgICAgICBibGlzdCA9IGF3YWl0IEdNLmdldFZhbHVlKCJoaWRleWhvc3RzIik7CiAgICB9CiAgICByZWZyZXNoU2l0ZUxpc3QoKTsKICAgIGlmIChlKSBlLnRhcmdldC5ibHVyKCk7Cn0KYXN5bmMgZnVuY3Rpb24gZGVkdXAoZSl7IC8vIERlLWR1cGxpY2F0ZSBibG9jayBsaXN0cwogICAgaWYgKCFjb25maXJtKCJJZiB5b3UgYmxvY2sgZXhhbXBsZS5jb20sIHlvdSBkb24ndCBhbHNvIG5lZWQgdG8gYmxvY2sgd3d3LmV4YW1wbGUuY29tLiBSZW1vdmUgdW5uZWNlc3NhcnkgZG9tYWlucyBmcm9tIHRoZSBibG9jayBsaXN0PyIpKSByZXR1cm47CiAgICB2YXIgYmFycmF5LCBpLCBqLCBpYWRkLCBzbWFpbiwgc3Rlc3QsIHNyZW1kID0gIiIsIHNxdWVzID0gIiI7CiAgICBpZiAoYmxpc3Quc3Vic3RyKDAsMSkgIT0gInwiKSBibGlzdCA9ICJ8IiArIGJsaXN0OwogICAgYmFycmF5ID0gYmxpc3Quc3Vic3RyKDEsYmxpc3QubGVuZ3RoLTIpLnNwbGl0KCJ8Iik7CiAgICBmb3IgKGk9MDsgaTxiYXJyYXkubGVuZ3RoOyBpKyspewogICAgICAgIGlmIChiYXJyYXlbaV0uaW5kZXhPZigiOnQiKSA+IC0xKXsKICAgICAgICAgICAgYmFycmF5W2ldID0gYmFycmF5W2ldLnN1YnN0cigwLGJhcnJheVtpXS5pbmRleE9mKCI6IikpLnNwbGl0KCIuIikucmV2ZXJzZSgpLmpvaW4oIi4iKSArICIhdCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGJhcnJheVtpXS5pbmRleE9mKCI6cCIpID4gLTEpewogICAgICAgICAgICAgICAgYmFycmF5W2ldID0gYmFycmF5W2ldLnN1YnN0cigwLGJhcnJheVtpXS5pbmRleE9mKCI6IikpLnNwbGl0KCIuIikucmV2ZXJzZSgpLmpvaW4oIi4iKSArICIhcCI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBiYXJyYXlbaV0gPSBiYXJyYXlbaV0uc3BsaXQoIi4iKS5yZXZlcnNlKCkuam9pbigiLiIpICsgIiF0IjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGJhcnJheS5zb3J0KCk7CiAgICBmb3IgKGk9MDsgaTxiYXJyYXkubGVuZ3RoLTE7IGkrKyl7CiAgICAgICAgaWFkZCA9IDA7CiAgICAgICAgZm9yIChqPTE7IGo8YmFycmF5Lmxlbmd0aC1pOyBqKyspewogICAgICAgICAgICBpZiAoYmFycmF5W2kral0uaW5kZXhPZihiYXJyYXlbaV0uc3Vic3RyKDAsYmFycmF5W2ldLmxlbmd0aC0yKSkgIT0gMCkgYnJlYWs7CiAgICAgICAgICAgIHNtYWluID0gYmFycmF5W2ldLnN1YnN0cigwLGJhcnJheVtpXS5sZW5ndGgtMikuc3BsaXQoIi4iKS5yZXZlcnNlKCkuam9pbigiLiIpOwogICAgICAgICAgICBzdGVzdCA9IGJhcnJheVtpK2pdLnN1YnN0cigwLGJhcnJheVtpK2pdLmxlbmd0aC0yKS5zcGxpdCgiLiIpLnJldmVyc2UoKS5qb2luKCIuIik7CiAgICAgICAgICAgIGlmIChzdGVzdC5pbmRleE9mKHNtYWluKSA8IDApIGJyZWFrOwogICAgICAgICAgICBpZiAoYmFycmF5W2ldLnN1YnN0cihiYXJyYXlbaV0ubGVuZ3RoLTEpID09IGJhcnJheVtpK2pdLnN1YnN0cihiYXJyYXlbaStqXS5sZW5ndGgtMSkpewogICAgICAgICAgICAgICAgYmxpc3QgPSBibGlzdC5yZXBsYWNlKHN0ZXN0ICsgIjoiICsgYmFycmF5W2kral0uc3Vic3RyKGJhcnJheVtpK2pdLmxlbmd0aC0xKSArICJ8IiwgIiIpOwogICAgICAgICAgICAgICAgc3JlbWQgKz0gInxSZW1vdmVkOiAiICsgc3Rlc3QgKyAiOyBDb3ZlcmVkIGJ5OiAiICsgc21haW47CiAgICAgICAgICAgICAgICBpYWRkICs9IDE7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdGVzdCArPSAoYmFycmF5W2kral0uc3Vic3RyKGJhcnJheVtpK2pdLmxlbmd0aC0xKSA9PSAidCIpID8gIiAocmVndWxhcikiIDogIiAocGVybWFiYW4pIjsKICAgICAgICAgICAgICAgIHNtYWluICs9IChiYXJyYXlbaV0uc3Vic3RyKGJhcnJheVtpXS5sZW5ndGgtMSkgPT0gInQiKSA/ICIgKHJlZ3VsYXIpIiA6ICIgKHBlcm1hYmFuKSI7CiAgICAgICAgICAgICAgICBzcXVlcyArPSAifERpZG4ndCByZW1vdmUgIiArIHN0ZXN0ICsgIiBkdWUgdG8gYmxvY2sgdHlwZSBkaWZmZXJlbmNlIGZyb20gIiArIHNtYWluOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGkgKz0gaWFkZDsKICAgIH0KICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIGJsaXN0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBibGlzdCk7CiAgICB9CiAgICByZWZyZXNoU2l0ZUxpc3QoKTsKICAgIC8vIFRvRG86IEFsZXJ0cyBhcmUgdGVtcG9yYXJ5OyBuaWNlciBkaXNwbGF5ICJzb21lIGRheSIKICAgIGlmIChzcmVtZCAhPSAiIikgYWxlcnQoc3JlbWQuc3Vic3RyKDEpLnJlcGxhY2UoL1x8L2csIlxuIikpOwogICAgaWYgKHNxdWVzICE9ICIiKSBhbGVydChzcXVlcy5zdWJzdHIoMSkucmVwbGFjZSgvXHwvZywiXG4iKSk7CiAgICBpZiAoc3JlbWQgPT0gIiIgJiYgc3F1ZXMgPT0gIiIpIGFsZXJ0KCJObyB1bm5lY2Vzc2FyeSBkb21haW5zIGZvdW5kLiIpOwogICAgaWYgKGUpIGUudGFyZ2V0LmJsdXIoKTsKfQphc3luYyBmdW5jdGlvbiB1bnd3dyhlKXsgLy8gUmVtb3ZlIHd3dyBmcm9tIGJlZ2lubmluZ3Mgb2YgZG9tYWlucwogICAgaWYgKCFjb25maXJtKCJZb3UgY2FuIGJsb2NrIG90aGVyIHN1YmRvbWFpbnMgb24gZXhhbXBsZS5jb20gYnkgcmVtb3Zpbmcgd3d3IGZyb20gdGhlIGJlZ2lubmluZyAoZS5nLiwgYmxvZy5leGFtcGxlLmNvbSkuIFVwZGF0ZSB0aGUgYmxvY2sgbGlzdD8iKSkgcmV0dXJuOwogICAgaWYgKGJsaXN0LnN1YnN0cigwLDEpICE9ICJ8IikgYmxpc3QgPSAifCIgKyBibGlzdDsKICAgIGJsaXN0ID0gYmxpc3QucmVwbGFjZSgvXHx3d3dcLi9nLCAiXHwiKTsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXlob3N0cyIsIGJsaXN0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGV5aG9zdHMiLCBibGlzdCk7CiAgICB9CiAgICByZWZyZXNoU2l0ZUxpc3QoKTsKICAgIGlmIChlKSBlLnRhcmdldC5ibHVyKCk7Cn0KLy8gTWlzYyBmdW5jdGlvbnMKZnVuY3Rpb24gY29udmVydEZvcm1hdCgpewogICAgaWYgKEdNNCkgcmV0dXJuOyAvL0xlZ2FjeSBvbmx5CiAgICBpZiAoYmxpc3Quc3Vic3RyKDAsMSkgIT0gInwiKSBibGlzdCA9ICJ8IiArIGJsaXN0OwogICAgYmxpc3QgPSAifCIgKyBibGlzdC5zbGljZSgxKS5yZXBsYWNlKC9cfC9nLCI6dHwiKTsKICAgIEdNX3NldFZhbHVlKCJoaWRleWhvc3RzIiwgYmxpc3QpOwp9CmZ1bmN0aW9uIGNvbnZlcnRUeHRzKHN0clR4dHMpewogICAgdmFyIG9sZFR4dHM7CiAgICBvbGRUeHRzID0gSlNPTi5wYXJzZShzdHJUeHRzKTsKICAgIHR4dHMgPSBkZWZhdWx0VHh0czsKICAgIGlmIChHTTQpIHJldHVybjsgLy9MZWdhY3kgb25seQogICAgaWYgKHR4dHNQcmVmLmluZGV4T2YoIjpbIikgPT0gLTEpeyAvLyAwLjh4IHRvIDAuOXgrCiAgICAgICAgdHh0cy5ibG9ja1swXSA9IG9sZFR4dHMuYmxvY2s7CiAgICAgICAgdHh0cy51bmJsb2NrWzBdID0gb2xkVHh0cy51bmJsb2NrOwogICAgICAgIHR4dHMucGJhblswXSA9IG9sZFR4dHMucGJhbjsKICAgICAgICB0eHRzLm9rYnRuWzBdID0gb2xkVHh0cy5va2J0bjsKICAgICAgICB0eHRzLmNhbmNlbGJ0blswXSA9IG9sZFR4dHMuY2FuY2VsYnRuOwogICAgICAgIHR4dHMuc2F2ZWJ0blswXSA9IG9sZFR4dHMuc2F2ZWJ0bjsKICAgICAgICB0eHRzLmNsb3NlYnRuWzBdID0gb2xkVHh0cy5jbG9zZWJ0bjsKICAgIH0gZWxzZSB7IC8vIDAuOXggdG8gMS4xeCsKICAgICAgICB0eHRzLmJsb2NrWzBdID0gb2xkVHh0cy5ibG9ja1swXTsKICAgICAgICB0eHRzLnVuYmxvY2tbMF0gPSBvbGRUeHRzLnVuYmxvY2tbMF07CiAgICAgICAgdHh0cy5wYmFuWzBdID0gb2xkVHh0cy5wYmFuWzBdOwogICAgICAgIHR4dHMub2tidG5bMF0gPSBvbGRUeHRzLm9rYnRuWzBdOwogICAgICAgIHR4dHMuY2FuY2VsYnRuWzBdID0gb2xkVHh0cy5jYW5jZWxidG5bMF07CiAgICAgICAgdHh0cy5zYXZlYnRuWzBdID0gb2xkVHh0cy5zYXZlYnRuWzBdOwogICAgICAgIHR4dHMuY2xvc2VidG5bMF0gPSBvbGRUeHRzLmNsb3NlYnRuWzBdOwogICAgICAgIGlmIChvbGRUeHRzLm9rUGJ0bikgdHh0cy5va1BidG5bMF0gPSBvbGRUeHRzLm9rUGJ0blswXTsKICAgICAgICBpZiAob2xkVHh0cy5jYW5jZWxNYnRuKSB0eHRzLmNhbmNlbE1idG5bMF0gPSBvbGRUeHRzLmNhbmNlbE1idG5bMF07CiAgICAgICAgaWYgKG9sZFR4dHMubW5nYnRuKSB0eHRzLm1uZ2J0blswXSA9IG9sZFR4dHMubW5nYnRuWzBdOwogICAgICAgIGlmICh0eHRzLnNhdmVidG5bMF09PSJTYXZlIENoYW5nZXMiKSB0eHRzLnNhdmVidG5bMF09IlNhdmUgTGlzdHMiOyAvLyB2MS4xCiAgICAgICAgLy8gMS4xIHRvIDEuMisKICAgICAgICBpZiAob2xkVHh0cy5leGltYnRuKSB0eHRzLmV4aW1idG5bMF0gPSBvbGRUeHRzLmV4aW1idG5bMF07CiAgICAgICAgLy8gMS4yIHRvIDEuMysKICAgICAgICBpZiAob2xkVHh0cy51dGlsYnRuKSB0eHRzLnV0aWxidG5bMF0gPSBvbGRUeHRzLnV0aWxidG5bMF07CiAgICAgICAgaWYgKG9sZFR4dHMuc29ydGJ0bikgdHh0cy5zb3J0YnRuWzBdID0gb2xkVHh0cy5zb3J0YnRuWzBdOwogICAgICAgIGlmIChvbGRUeHRzLnVud3d3YnRuKSB0eHRzLnVud3d3YnRuWzBdID0gb2xkVHh0cy51bnd3d2J0blswXTsKICAgICAgICBpZiAob2xkVHh0cy5kZWR1cGJ0bikgdHh0cy5kZWR1cGJ0blswXSA9IG9sZFR4dHMuZGVkdXBidG5bMF07CiAgICAgICAgLy8gMi4wLjkrIChjYXRjaC11cCkKICAgICAgICBpZiAob2xkVHh0cy5vbmV0aW1lKSB0eHRzLm9uZXRpbWVbMF0gPSBvbGRUeHRzLm9uZXRpbWVbMF07CiAgICAgICAgaWYgKG9sZFR4dHMuc2hvd25vdGMpIHR4dHMuc2hvd25vdGNbMF0gPSBvbGRUeHRzLnNob3dub3RjWzBdOwogICAgICAgIGlmIChvbGRUeHRzLmhpZGVub3RjKSB0eHRzLmhpZGVub3RjWzBdID0gb2xkVHh0cy5oaWRlbm90Y1swXTsKICAgICAgICBpZiAob2xkVHh0cy5pbXBvYnRuKSB0eHRzLmltcG9idG5bMF0gPSBvbGRUeHRzLmltcG9idG5bMF07CiAgICAgICAgaWYgKG9sZFR4dHMuc2hhcmVidG4pIHR4dHMuc2hhcmVidG5bMF0gPSBvbGRUeHRzLnNoYXJlYnRuWzBdOwogICAgfQogICAgR01fc2V0VmFsdWUoInRleHRzdHJpbmdzIiwgSlNPTi5zdHJpbmdpZnkodHh0cykpOyAvLyByZXF1aXJlcyBGeCAzLjUrCn0KZnVuY3Rpb24gZ2hoa2lsbGV2ZW50KGUpewogICAgaWYgKGUuY3VycmVudFRhcmdldC5ub2RlTmFtZSA9PSAiQlVUVE9OIiB8fCBlLmN1cnJlbnRUYXJnZXQubm9kZU5hbWUgPT0gIklOUFVUIikgcmV0dXJuOwogICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKfQpmdW5jdGlvbiB0b2dnbGVCbG9ja0hpZGVycyhzdHIpewogICAgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoU3R5bGVOb0Jsb2NrIik7CiAgICBpZiAoc3RyID09ICJTIil7CiAgICAgICAgaWYgKHMpIHMucmVtb3ZlKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHN0ciA9PSAiSCIpewogICAgICAgIGlmIChzKSByZXR1cm47CiAgICAgICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgcy5pZCA9ICJnaGhTdHlsZU5vQmxvY2siOwogICAgICAgIHMuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiAgICAgICAgcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiLmdoaGJ7ZGlzcGxheTpub25lfSIpKTsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHMpOwogICAgfQp9CmZ1bmN0aW9uIHJlZnJlc2hMaXN0ZW5lcnMoZSl7IC8vIGZvciBBdXRvUGFnZXIgZXh0ZW5zaW9uCiAgICB2YXIgYmJ0bnMsIGJub3RjLCBpLCBqOwogICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2Y250IikpIHJldHVybjsKICAgIGJidG5zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm5hdmNudCIpLnF1ZXJ5U2VsZWN0b3JBbGwoIi5naGhiIik7CiAgICBmb3IgKGk9MDtpPGJidG5zLmxlbmd0aDtpKyspewogICAgICAgIGJidG5zW2ldLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIixzaG93YmZkLHRydWUpOwogICAgICAgIGJidG5zW2ldLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixzaG93YmZkLHRydWUpOwogICAgfQogICAgYm5vdGMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibmF2Y250IikucXVlcnlTZWxlY3RvckFsbCgiLmdoaGQiKTsKICAgIGZvciAoaT0wO2k8Ym5vdGMubGVuZ3RoO2krKyl7CiAgICAgICAgYm5vdGNbaV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLHJlc2hvdyx0cnVlKTsKICAgICAgICBibm90Y1tpXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIscmVzaG93LHRydWUpOwogICAgICAgIGJidG5zID0gYm5vdGNbaV0ucXVlcnlTZWxlY3RvckFsbCgiYnV0dG9uLmdoaGlkZXIiKTsKICAgICAgICBmb3IgKGo9MDtqPGJidG5zLmxlbmd0aDtqKyspewogICAgICAgICAgICBpZiAoYmJ0bnNbal0uZ2V0QXR0cmlidXRlKCJ0aXRsZSIpPT0iVW5ibG9jayB0aGlzIHNpdGUiKXsKICAgICAgICAgICAgICAgIGJidG5zW2pdLnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIix1bmJsb2NrLHRydWUpOwogICAgICAgICAgICAgICAgYmJ0bnNbal0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHVuYmxvY2ssdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGJidG5zW2pdLmdldEF0dHJpYnV0ZSgidGl0bGUiKT09IlBlcm1hbmVudGx5IGhpZGUgdGhpcyBzaXRlIil7CiAgICAgICAgICAgICAgICBiYnRuc1tqXS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIscGVybWJhbix0cnVlKTsKICAgICAgICAgICAgICAgIGJidG5zW2pdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixwZXJtYmFuLHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChiYnRuc1tqXS5nZXRBdHRyaWJ1dGUoInRpdGxlIik9PSJSZS1oaWRlIHRoaXMgaGl0Iil7CiAgICAgICAgICAgICAgICBiYnRuc1tqXS5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIscmVoaWRlLHRydWUpOwogICAgICAgICAgICAgICAgYmJ0bnNbal0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHJlaGlkZSx0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQpmdW5jdGlvbiBjb252ZXJ0UHJlZnMoYXJyUHJlZnMsIGFsbG5ldyl7CiAgICBnaGhQcmVmTyA9IGFyclByZWZzOwogICAgaWYgKEdNNCkgcmV0dXJuOyAvLyBMZWdhY3kgb25seQogICAgaWYgKGFsbG5ldyA9PSAidHJ1ZSIpeyAvLyAxLjMuNyB0byAxLjQueAogICAgICAgIHZhciB0bXAgPSBHTV9nZXRWYWx1ZSgic2hvd25vdGMiKTsKICAgICAgICBpZiAodG1wKXsKICAgICAgICAgICAgaWYgKHRtcC5sZW5ndGggPiAwKSBnaGhQcmVmTy5zaG93bm90Y1swXSA9IHRtcDsKICAgICAgICAgICAgR01fZGVsZXRlVmFsdWUoInNob3dub3RjIik7CiAgICAgICAgfQogICAgICAgIHRtcCA9IEdNX2dldFZhbHVlKCJtbmdwYW5lb3BlbiIpOwogICAgICAgIGlmICh0bXApewogICAgICAgICAgICBpZiAodG1wLmxlbmd0aCA+IDApIGdoaFByZWZPLm1uZ3BhbmVvcGVuWzBdID0gdG1wOwogICAgICAgICAgICBHTV9kZWxldGVWYWx1ZSgibW5ncGFuZW9wZW4iKTsKICAgICAgICB9CiAgICAgICAgdG1wID0gR01fZ2V0VmFsdWUoIm1uZ2J0bnN0eWxlIik7CiAgICAgICAgaWYgKHRtcCl7aWYgKHRtcC5sZW5ndGggPiAwKXsKICAgICAgICAgICAgaWYgKHRtcC5pbmRleE9mKCItIik+LTEpIHRtcCA9ICJib3RoIjsgLy8gZGVmYXVsdCBhbmNpZW50IHByZWYKICAgICAgICAgICAgZ2hoUHJlZk8ubW5nYnRuc3R5bGVbMF0gPSB0bXA7CiAgICAgICAgICAgIEdNX2RlbGV0ZVZhbHVlKCJtbmdidG5zdHlsZSIpOwogICAgICAgIH19CiAgICAgICAgdG1wID0gR01fZ2V0VmFsdWUoImFkZHRvbGlzdHBvcyIpOwogICAgICAgIGlmICh0bXApewogICAgICAgICAgICBpZiAodG1wLmxlbmd0aCA+IDApIGdoaFByZWZPLmFkZHRvbGlzdHBvc1swXSA9IHRtcDsKICAgICAgICAgICAgR01fZGVsZXRlVmFsdWUoImFkZHRvbGlzdHBvcyIpOwogICAgICAgIH0KICAgICAgICB0bXAgPSBHTV9nZXRWYWx1ZSgiYWdncmVzc2l2ZWJsb2NrIik7CiAgICAgICAgaWYgKHRtcCl7CiAgICAgICAgICAgIGlmICh0bXAubGVuZ3RoID4gMCkgZ2hoUHJlZk8uYWdncmVzc2l2ZWJsb2NrWzBdID0gdG1wOwogICAgICAgICAgICBHTV9kZWxldGVWYWx1ZSgiYWdncmVzc2l2ZWJsb2NrIik7CiAgICAgICAgfQogICAgICAgIHRtcCA9IEdNX2dldFZhbHVlKCJ1c2VtdXRhdGlvbiIpOwogICAgICAgIGlmICh0bXApewogICAgICAgICAgICBpZiAodG1wLmxlbmd0aCA+IDApIGdoaFByZWZPLnVzZW11dGF0aW9uWzBdID0gdG1wOwogICAgICAgICAgICBHTV9kZWxldGVWYWx1ZSgidXNlbXV0YXRpb24iKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgIGlmIChnaGhQcmVmcy5pbmRleE9mKCJyZXNlcnZlZDEiKT4tMSl7CiAgICAgICAgICAgIHZhciBvbGRQcmVmcyA9IEpTT04ucGFyc2UoZ2hoUHJlZnMpOwogICAgICAgICAgICBnaGhQcmVmTy5zaG93bm90Y1swXSA9IG9sZFByZWZzLnNob3dub3RjWzBdOwogICAgICAgICAgICBnaGhQcmVmTy5tbmdwYW5lb3BlblswXSA9IG9sZFByZWZzLm1uZ3BhbmVvcGVuWzBdOwogICAgICAgICAgICBnaGhQcmVmTy5tbmdidG5zdHlsZVswXSA9IG9sZFByZWZzLm1uZ2J0bnN0eWxlWzBdOwogICAgICAgICAgICBnaGhQcmVmTy5hZGR0b2xpc3Rwb3NbMF0gPSBvbGRQcmVmcy5hZGR0b2xpc3Rwb3NbMF07CiAgICAgICAgICAgIGdoaFByZWZPLmFnZ3Jlc3NpdmVibG9ja1swXSA9IG9sZFByZWZzLmFnZ3Jlc3NpdmVibG9ja1swXTsKICAgICAgICAgICAgZ2hoUHJlZk8udXNlbXV0YXRpb25bMF0gPSBvbGRQcmVmcy51c2VtdXRhdGlvblswXTsKICAgICAgICAgICAgZ2hoUHJlZk8ub25lY2xpY2tbMF0gPSBvbGRQcmVmcy5vbmVjbGlja1swXTsKICAgICAgICB9CiAgICB9CiAgICBHTV9zZXRWYWx1ZSgiZ2hocHJlZnMiLCBKU09OLnN0cmluZ2lmeShnaGhQcmVmTykpOyAvLyByZXF1aXJlcyBGeCAzLjUrCn0KZnVuY3Rpb24gdG9nZ2xlYmJ0bihlKXsKICAgIHZhciBiYnRuID0gZS5jdXJyZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5naGhiJyk7CiAgICBpZiAoYmJ0bil7CiAgICAgICAgaWYgKGUudHlwZSA9PSAibW91c2VvdmVyIikgYmJ0bi5zdHlsZS52aXNpYmlsaXR5ID0gIiI7CiAgICAgICAgZWxzZSBiYnRuLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKICAgIH0KfQpmdW5jdGlvbiByZVF1ZXJ5KGUpewogICAgdmFyIHNzLCByYWRzLCBpOwogICAgaWYgKGUpewogICAgICAgIGlmIChlLnRhcmdldC5pZCA9PSAiZ2hoYmY1Iikgc3MgPSAiK3NpdGU6IjsKICAgICAgICBlbHNlIHNzID0gIistc2l0ZToiOwogICAgICAgIHJhZHMgPSBlLnRhcmdldC5mb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9InJhZGlvIl0nKTsKICAgIH0gZWxzZSB7CiAgICAgICAgc3MgPSAiKy1zaXRlOiI7IC8vIEFMVCBvbWl0CiAgICAgICAgcmFkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNnaGhibG9ja2Zvcm0gZm9ybScpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W3R5cGU9InJhZGlvIl0nKTsKICAgIH0KICAgIGlmIChyYWRzLmxlbmd0aCA+IDApewogICAgICAgIGZvciAoaT0wOyBpPHJhZHMubGVuZ3RoOyBpKyspewogICAgICAgICAgICBpZihyYWRzW2ldLmNoZWNrZWQpewogICAgICAgICAgICAgICAgc3MgKz0gcmFkc1tpXS5uZXh0RWxlbWVudFNpYmxpbmcudGV4dENvbnRlbnQ7CiAgICAgICAgICAgICAgICByZVFyeShzcyk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSBjb25zb2xlLmxvZygiTE9HOnJlUXVlcnkgZmFpbDogbm8gcmFkcyIpOwp9CmZ1bmN0aW9uIHJlUXJ5KGQpewogICAgaWYgKCFkKSByZXR1cm47CiAgICB2YXIgcXNwID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiPyIpOwogICAgaWYgKHFzcCA8IDApIHJldHVybjsKICAgIHZhciBxID0gd2luZG93LmxvY2F0aW9uLmhyZWYuc3Vic3RyKHFzcCsxKTsKICAgIGlmIChkLnN1YnN0cigwLDIpID09ICIrLSIgJiYgKHEuaW5kZXhPZihkKyIlMjAiKT4tMSB8fCBxLmluZGV4T2YoZCsiJiIpPi0xKSkgcmV0dXJuOyAvLyB0cnkgdG8gYmxvY2sgZHVwcywgbWF5IGJlIG92ZXJpbmNsdXNpdmUKICAgIHZhciBxYSA9IHEuc3BsaXQoIiYiKTsKICAgIHZhciBoYXNfcSA9IGZhbHNlOwogICAgZm9yICh2YXIgaj1xYS5sZW5ndGgtMTsgaj49MDsgai0tKXsKICAgICAgICBpZiAocWFbal0uc3BsaXQoIj0iKVswXSA9PSAicSIpewogICAgICAgICAgICBxYVtqXSArPSBkOwogICAgICAgICAgICBoYXNfcSA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChxYVtqXS5pbmRleE9mKCIjcT0iKSA+IC0xKXsKICAgICAgICAgICAgICAgIHFhW2pdICs9IGQ7CiAgICAgICAgICAgICAgICBoYXNfcSA9IHRydWU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmIChoYXNfcSkgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zdWJzdHIoMCwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZigiPyIpKzEpICsgcWEuam9pbigiJiIpOwogICAgZWxzZSBjb25zb2xlLmxvZygiTE9HOlVuYWJsZSB0byBhZGQgbmV3IHNlYXJjaCB0ZXJtIHRvIFVSTCIpOwp9CmZ1bmN0aW9uIHRvZ2dsZWNpdGVsaW5lKHBvc2l0KSB7CiAgICB2YXIgZ2hoYmRfc3R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJicG9zY2l0ZWxpbmUiKTsKICAgIGlmIChwb3NpdCA9PSAiQyIpewogICAgICAgIGlmICghZ2hoYmRfc3R5KXsKICAgICAgICAgICAgZ2hoYmRfc3R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICAgICAgZ2hoYmRfc3R5LmlkID0gImJicG9zY2l0ZWxpbmUiOwogICAgICAgICAgICBnaGhiZF9zdHkuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZ2hoYmRfc3R5KTsKICAgICAgICB9CiAgICAgICAgLy8gImlubGluZSIgdGhlIGFjdGlvbiBtZW51CiAgICAgICAgZ2hoYmRfc3R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIuYWN0aW9uLW1lbnUge3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lICFpbXBvcnRhbnQ7fSAuYWN0aW9uLW1lbnUgLmNsaWNrYWJsZS1kcm9wZG93bi1hcnJvdywgLmFjdGlvbi1tZW51IC5hYl9idXR0b24sIC5hY3Rpb24tbWVudSA+IGEge2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50O30gLmFjdGlvbi1tZW51LXBhbmVsLCAuYWN0aW9uLW1lbnUtcGFuZWwgdWwsIC5hY3Rpb24tbWVudS1wYW5lbCBvbCwgLmFjdGlvbi1tZW51LWl0ZW0ge2Rpc3BsYXk6aW5saW5lICFpbXBvcnRhbnQ7IHZpc2liaWxpdHk6IHZpc2libGUgIWltcG9ydGFudDsgYm9yZGVyOm5vbmUgIWltcG9ydGFudDsgYm94LXNoYWRvdzpub25lICFpbXBvcnRhbnQ7IGJhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQgIWltcG9ydGFudDsgbWFyZ2luOjAgICFpbXBvcnRhbnQ7IHBhZGRpbmc6MCAhaW1wb3J0YW50OyB0b3A6MCAhaW1wb3J0YW50OyBoZWlnaHQ6YXV0byAhaW1wb3J0YW50OyBsaW5lLWhlaWdodDphdXRvICFpbXBvcnRhbnQ7fSAuYWN0aW9uLW1lbnUtaXRlbSBhLmZsLCAuYWN0aW9uLW1lbnUtYnV0dG9uIHtwYWRkaW5nOjAgMCAwIDZweCAhaW1wb3J0YW50OyBkaXNwbGF5OmlubGluZSAhaW1wb3J0YW50O30gIC5hY3Rpb24tbWVudS1wYW5lbCB7cG9zaXRpb246c3RhdGljO30gLmFjdGlvbi1tZW51LWl0ZW0gYS5mbDpob3ZlciB7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSAhaW1wb3J0YW50O30gLmFjdGlvbi1tZW51ICsgLmNyYyB7bWFyZ2luLXJpZ2h0OiA5cHggIWltcG9ydGFudDt9IC5hY3Rpb24tbWVudSArIC5jcmMgLl9CcyB7bWFyZ2luLWxlZnQ6IDFweCAhaW1wb3J0YW50O30iKSk7CiAgICAgICAgLy8gcmVzdHlsZSB0aGUgYmxvY2sgYnV0dG9uCiAgICAgICAgZ2hoYmRfc3R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIuZ2hoYiB7Ym9yZGVyOm5vbmUhaW1wb3J0YW50OyB0ZXh0LWRlY29yYXRpb246bm9uZSFpbXBvcnRhbnQ7IGZvbnQtc2l6ZToxZW0haW1wb3J0YW50OyBjb2xvcjojMzMzIWltcG9ydGFudDsgcGFkZGluZzowIWltcG9ydGFudDsgbWFyZ2luLWxlZnQ6OHB4IWltcG9ydGFudDt9IC5naGhiOmhvdmVyIHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSAhaW1wb3J0YW50O30iKSk7CiAgICB9IGVsc2UgeyAvLyByZW1vdmUgY2l0ZWxpbmUgcnVsZXMKICAgICAgICBpZiAoZ2hoYmRfc3R5KXsKICAgICAgICAgICAgd2hpbGUoZ2hoYmRfc3R5LmZpcnN0Q2hpbGQpIGdoaGJkX3N0eS5yZW1vdmVDaGlsZChnaGhiZF9zdHkuZmlyc3RDaGlsZCk7CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIG9wZW5DdXN0b21TdHlsZUJhcihlKXsKICAgIC8vIENyZWF0ZSBmaXhlZCBkaXYgd2l0aCB0ZXh0IGlucHV0IGFuZCBidXR0b25zOiBTYXZlLCBUZXN0LCBDbG9zZQogICAgdmFyIGNzYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhjc2IiKTsKICAgIGlmIChjc2IpewogICAgICAgIGNzYi5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKICAgIH0gZWxzZSB7CiAgICAgICAgY3NiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgY3NiLmlkID0gImdoaGNzYiI7CiAgICAgICAgY3NiLnNldEF0dHJpYnV0ZSgic3R5bGUiLCJwb3NpdGlvbjpmaXhlZDtib3R0b206MDtsZWZ0OjA7ei1pbmRleDo3NTA7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNhZmE7Iik7CiAgICAgICAgY3NiLmlubmVySFRNTCA9ICI8Zm9ybSBvbnN1Ym1pdD1cInJldHVybiBmYWxzZTtcIj48cCBzdHlsZT1cIm1hcmdpbjowLjc1ZW07XCI+PGlucHV0IGlkPVwiZ2hoY3NicnVsZVwiIHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJ3aWR0aDo4MCVcIj4gIiArCiAgICAgICAgICAgICI8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImdoaGNzYjFcIiB0aXRsZT1cIlNhdmUgYW5kIEFwcGx5XCI+U2F2ZTwvYnV0dG9uPiAiICsKICAgICAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hoY3NiMlwiIHRpdGxlPVwiVGVzdCBDdXJyZW50IFJ1bGVzXCI+VGVzdDwvYnV0dG9uPiAiICsKICAgICAgICAgICAgIjxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiZ2hoY3NiM1wiIHRpdGxlPVwiQ2xvc2VcIj5DbG9zZTwvYnV0dG9uPjwvcD48L2Zvcm0+IjsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNzYik7CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGNzYjEiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsc2F2ZUN1c3RvbVN0eWxlLHRydWUpOwogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhjc2IyIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRlc3RDdXN0b21TdHlsZSx0cnVlKTsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoY3NiMyIpLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixjbG9zZUN1c3RvbVN0eWxlQmFyLHRydWUpOwogICAgfQogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGNzYnJ1bGUiKS52YWx1ZSA9IGN1c3RTdHk7Cn0KYXN5bmMgZnVuY3Rpb24gc2F2ZUN1c3RvbVN0eWxlKGUpewogICAgLy8gVXBkYXRlIHByZWZlcmVuY2VzIGFuZCBhcHBseSBjaGFuZ2UgdG8gc3R5bGUjZ2hoYmRjdXN0c3R5CiAgICBjdXN0U3R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGNzYnJ1bGUiKS52YWx1ZTsKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgiaGlkZXJTdHlsZXMiLCBjdXN0U3R5KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoImhpZGVyU3R5bGVzIiwgY3VzdFN0eSk7CiAgICB9CiAgICBpbmplY3RDdXN0b20oKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZGN1c3RzdHkiKS5pbm5lckhUTUwgPSAiIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZGN1c3RzdHkiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjdXN0U3R5KSk7Cn0KZnVuY3Rpb24gdGVzdEN1c3RvbVN0eWxlKGUpewogICAgLy8gQWRkL0VkaXQgc3R5bGUjZ2hoYmRjdXN0c3R5CiAgICBpbmplY3RDdXN0b20oKTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZGN1c3RzdHkiKS5pbm5lckhUTUwgPSAiIjsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnaGhiZGN1c3RzdHkiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoY3NicnVsZSIpLnZhbHVlKSk7Cn0KZnVuY3Rpb24gY2xvc2VDdXN0b21TdHlsZUJhcihlKXsKICAgIC8vIFR1cm4gb2ZmIGRpc3BsYXkgYW5kIHJlYXBwbHkgc2F2ZWQgc3R5bGUgdG8gc3R5bGUjZ2hoYmRjdXN0c3R5CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ2hoY3NiIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIGluamVjdEN1c3RvbSgpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJkY3VzdHN0eSIpLmlubmVySFRNTCA9ICIiOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdoaGJkY3VzdHN0eSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGN1c3RTdHkpKTsKfQpmdW5jdGlvbiByZW1vdmVQQnMoZSl7IC8vIEdvb2dsZU1vbmtleVIgbGF5b3V0IG9ubHkKICAgIC8vIFNjaGVkdWxlIFBlcm1hYmFuIHJlbW92YWwgKHByZXZlbnQgc2ltdWx0YW5lb3VzL2NvbmZsaWN0aW5nIHJ1bnMpCiAgICB2YXIgUEJzQmxhbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgidGFibGUjR1RSIGxpW2Jsb2NraGlkZGVuXSwgdGFibGUjR1RSIGRpdi5nW2Jsb2NraGlkZGVuXSwgdGFibGUjR1RSIHRkOmVtcHR5Iik7CiAgICBpZiAoUEJzQmxhbmtzLmxlbmd0aCA8IDEpIHJldHVybjsKICAgIGlmICh0X3BiKSB3aW5kb3cuY2xlYXJUaW1lb3V0KHRfcGIpOwogICAgdF9wYiA9IHdpbmRvdy5zZXRUaW1lb3V0KEdNUnNodWZmbGUsIDEwMCk7Cn0KZnVuY3Rpb24gR01Sc2h1ZmZsZSgpeyAvLyBHb29nbGVNb25rZXlSIGxheW91dCBvbmx5CiAgICAvLyBEZWxldGUgUGVybWFiYW4gaGl0cwogICAgdmFyIFBCcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInRhYmxlI0dUUiBsaVtibG9ja2hpZGRlbl0sIHRhYmxlI0dUUiBkaXYuZ1tibG9ja2hpZGRlbl0iKTsKICAgIGlmIChQQnMubGVuZ3RoID4gMCl7CiAgICAgICAgZm9yICh2YXIgaT1QQnMubGVuZ3RoOyBpPjA7IGktLSkgUEJzW2ktMV0ucmVtb3ZlKCk7CiAgICB9CiAgICAvLyBDaGVjayBlbnRpcmUgdGFibGUgZm9yIGVtcHR5IGNlbGxzIGFuZCBzaHVmZmxlIGNvbnRlbnRzCiAgICB2YXIgdGJsLCByb3csIGNlbGwsIGVtcHRpZXM7CiAgICB0YmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiR1RSIik7CiAgICBmb3IgKHJvdz0wOyByb3c8dGJsLnJvd3MubGVuZ3RoOyByb3crKyl7CiAgICAgICAgZW1wdGllcyA9IHRibC5yb3dzW3Jvd10ucXVlcnlTZWxlY3RvckFsbCgidGQ6ZW1wdHkiKS5sZW5ndGg7CiAgICAgICAgaWYgKGVtcHRpZXMgPiAwICYmIGVtcHRpZXMgPCB0Ymwucm93c1tyb3ddLmNlbGxzLmxlbmd0aCl7CiAgICAgICAgICAgIGZvciAoY2VsbD0wOyBjZWxsPHRibC5yb3dzW3Jvd10uY2VsbHMubGVuZ3RoOyBjZWxsKyspewogICAgICAgICAgICAgICAgaWYgKHRibC5yb3dzW3Jvd10uY2VsbHNbY2VsbF0uY2hpbGROb2Rlcy5sZW5ndGggPT0gMCl7CiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGxGcm9tTmV4dCh0Ymwucm93c1tyb3ddLmNlbGxzW2NlbGxdKSA9PSAiU1RPUCIpewogICAgICAgICAgICAgICAgICAgICAgICBpZiAodF9wYikgd2luZG93LmNsZWFyVGltZW91dCh0X3BiKTsKICAgICAgICAgICAgICAgICAgICAgICAgdF9wYiA9IHdpbmRvdy5zZXRUaW1lb3V0KEdNUnNodWZmbGUsIDEwMDApOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CmZ1bmN0aW9uIGZpbGxGcm9tTmV4dCh0Z3QpewogICAgdmFyIHNyYyA9IGdldE5leHRDZWxsKHRndCwgdHJ1ZSk7CiAgICBpZiAoIXNyYykgcmV0dXJuICJTVE9QIjsKICAgIHdoaWxlIChzcmMuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB0Z3QuYXBwZW5kQ2hpbGQoc3JjLmNoaWxkTm9kZXNbMF0pOwp9CmZ1bmN0aW9uIGdldE5leHRDZWxsKGFDZWxsLCBibG5Ob25FbXB0eSl7CiAgICB2YXIgc3RhcnRjZWxsID0gYUNlbGw7CiAgICB2YXIgcmV0Y2VsbDsKICAgIHZhciBpPTA7CiAgICB3aGlsZSAoaTwxMDAwKSB7CiAgICAgICAgaWYgKHN0YXJ0Y2VsbC5uZXh0RWxlbWVudFNpYmxpbmcpeyAvLyBub3QgdGhlIGxhc3QgY2VsbCBpbiB0aGUgcm93CiAgICAgICAgICAgIHJldGNlbGwgPSBzdGFydGNlbGwubmV4dEVsZW1lbnRTaWJsaW5nOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGFydGNlbGwucGFyZW50Tm9kZS5uZXh0RWxlbWVudFNpYmxpbmcpeyAvLyBsYXN0IGNlbGwgaW4gcm93IGFuZCB0aGVyZSdzIGFub3RoZXIgcm93CiAgICAgICAgICAgICAgICByZXRjZWxsID0gc3RhcnRjZWxsLnBhcmVudE5vZGUubmV4dEVsZW1lbnRTaWJsaW5nLmNlbGxzWzBdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7IC8vIGVuZCBvZiB0YWJsZQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICghcmV0Y2VsbCl7CiAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBjb3JydXB0ZWQgdGFibGUgc3RydWN0dXJlCiAgICAgICAgfQogICAgICAgIGlmIChibG5Ob25FbXB0eSl7CiAgICAgICAgICAgIGlmIChyZXRjZWxsLnF1ZXJ5U2VsZWN0b3IoImxpIikpewogICAgICAgICAgICAgICAgcmV0dXJuIHJldGNlbGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdGFydGNlbGwgPSByZXRjZWxsOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHJldGNlbGw7CiAgICAgICAgfQogICAgICAgIGkrKzsKICAgIH0KfQovLyAiQWRkIEFsbCIgZmVhdHVyZSAyLjAuOQphc3luYyBmdW5jdGlvbiBhZGRBbGxOb3coZSl7CiAgICB2YXIgdW5iID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2doaHJlc3VsdD0idW5zZXQiXVtnaGhob3N0XScpLCBkb20gPSAnJywgcGRvbSA9ICcnLCBkb21saXN0ID0gJyc7CiAgICBmb3IgKHZhciBpPTA7IGk8dW5iLmxlbmd0aDsgaSsrKXsKICAgICAgICAvLyBDb21wdXRlIGRvbWFpbiBiYXNlZCBvbiB1c2VyIHByZWZlcmVuY2UKICAgICAgICBkb20gPSB1bmJbaV0uZ2V0QXR0cmlidXRlKCdnaGhob3N0Jyk7CiAgICAgICAgcGRvbSA9IGRvbS5zdWJzdHIoZG9tLmluZGV4T2YoJy4nKSArIDEpOwogICAgICAgIGlmIChwZG9tLmluZGV4T2YoJy4nKSA+IC0xICYmIHBhdElQdjQudGVzdChkb20pICE9IHRydWUpewogICAgICAgICAgICBzd2l0Y2ggKGJBZ2dyZXNzKXsKICAgICAgICAgICAgICAgIGNhc2UgJ2FsbCc6CiAgICAgICAgICAgICAgICAgICAgZG9tID0gcGRvbTsgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd3d3cnOgogICAgICAgICAgICAgICAgICAgIGlmIChkb20uc3Vic3RyKDAsMykgPT0gJ3d3dycpIGRvbSA9IHBkb207IGJyZWFrOwogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGZ1bGwgZG9tYWluCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gQWRkIGRvbSB0byBkb21zIGFycnJheSAoYXZvaWRpbmcgZHVwbGljYXRlcykKICAgICAgICBpZiAoZG9tcy5pbmNsdWRlcyhkb20pICE9PSB0cnVlKSBkb21zLnB1c2goZG9tKTsKICAgIH0KICAgIC8vIEFkZCBuZXcgZG9tYWlucyB0byB0aGUgY3VycmVudGx5IGRpc3BsYXllZCBibG9jayBsaXN0CiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uLmdoaEN1clRhYicpLmlkID09ICdnaGh0czMnKXsgLy8gcGJhbgogICAgICAgIGRvbWxpc3QgPSBkb21zLmpvaW4oJzpwfCcpICsgJzpwJzsKICAgIH0gZWxzZSB7IC8vIHJlZ3VsYXIKICAgICAgICBkb21saXN0ID0gZG9tcy5qb2luKCc6dHwnKSArICc6dCc7CiAgICB9CiAgICBpZiAoYmxpc3Quc3Vic3RyKDAsMSkgIT0gJ3wnKSBibGlzdCA9ICd8JyArIGJsaXN0OwogICAgaWYgKGFkZEF0ID09ICdlbmQnKSBibGlzdCArPSBkb21saXN0ICsgJ3wnOwogICAgZWxzZSBibGlzdCA9ICd8JyArIGRvbWxpc3QgKyBibGlzdDsKICAgIG5lZWR1cGRhdGUgPSB0cnVlOwogICAgLy8gU3RvcmUgdGhlIGxpc3QKICAgIGlmICghR000KXsKICAgICAgICBHTV9zZXRWYWx1ZSgnaGlkZXlob3N0cycsIGJsaXN0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgR00uc2V0VmFsdWUoJ2hpZGV5aG9zdHMnLCBibGlzdCk7CiAgICB9CiAgICAvLyBBcHBseSB0aGUgY2hhbmdlIHRvIHRoZSByZXN1bHRzCiAgICBoaWRlaGl0cyhudWxsLHRydWUpOwogICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdHVFInKSkgcmVtb3ZlUEJzKCk7CiAgICAvLyBVcGRhdGUgdGhlIGRpYWxvZwogICAgaWYgKGFkZEF0ID09ICdzb3J0Jykgc29ydGxpc3QobnVsbCk7CiAgICByZWZyZXNoU2l0ZUxpc3QoKTsKfQo=","resources":[{"meta":{"name":"gfrk-GHHbD-ver222.png","url":"https://www.jeffersonscher.com/gm/src/gfrk-GHHbD-ver222.png","ts":1649415624667,"mimetype":"image/png"},"source":"wolQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgDAAAAKC0PUwAAAARnQU1BAADCr8OINwXCisOpAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccOJZTwAAAAGUExURcOMAADDv8O/w7/Dg8OzQRIAAAACdFJOU8O/AMOlwrcwSgAAAD9JREFUeMOawozCj8ORCgBABARnw7/Dv8Knwq9EwosHwp0HamInaBVfAAITw5PCgMKsAsOZw5QBI8Kjw7Z3RsK3aMKGw4rDpgBTw61QfMKnZsK5wp97AgwAW1MAwqEHOh5OAAAAAElFTkTCrkJgwoI="}]},{"name":"Direct links out","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["*://google.*","*://www.google.*","*://encrypted.google.*"],"orig_matches":["*://yandex.ru/*","*://yandex.ua/*","*://yandex.by/*","*://yandex.kz/*","*://yandex.com.tr/*","*://yandex.com/*","*://*.yandex.ru/*","*://*.yandex.ua/*","*://*.yandex.by/*","*://*.yandex.kz/*","*://*.yandex.com.tr/*","*://*.yandex.com/*","*://youtube.com/*","*://*.youtube.com/*","*://wikimapia.org/*","*://deviantart.com/*","*://*.deviantart.com/*","*://joyreactor.cc/*","*://*.joyreactor.cc/*","*://reactor.cc/*","*://*.reactor.cc/*","*://joyreactor.com/*","*://*.joyreactor.com/*","*://vk.com/*","*://*.vk.com/*","*://ok.ru/*","*://*.ok.ru/*","*://steamcommunity.com/*","*://*.steamcommunity.com/*","*://facebook.com/*","*://*.facebook.com/*","*://twitter.com/*","*://*.twitter.com/*","*://4pda.ru/*","*://*.4pda.ru/*","*://kat.cr/*","*://kickassto.co/*","*://katproxy.is/*","*://thekat.tv/*","*://*.kat.cr/*","*://*.kickassto.co/*","*://*.katproxy.is/*","*://*.thekat.tv/*","*://addons.mozilla.org/*","*://pixiv.net/*","*://*.pixiv.net/*","*://tumblr.com/*","*://*.tumblr.com/*","*://danieldefo.ru/*","*://*.danieldefo.ru/*","*://yaplakal.com/*","*://*.yaplakal.com/*","*://soundcloud.com/*","*://*.soundcloud.com/*","*://upwork.com/*","*://*.upwork.com/*","*://picarto.tv/*","*://*.picarto.tv/*","*://taker.im/*","*://*.taker.im/*","*://*.forumavia.ru/*","*://*.slack.com/*","*://instagram.com/*","*://*.instagram.com/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1525361734624,"data":{}},"enabled":true,"position":9,"file_url":"https://openuserjs.org/install/nokeya/Direct_links_out.user.js","uuid":"f7dfc06c-8af4-4016-92f9-e21c74771af5","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIERpcmVjdCBsaW5rcyBvdXQKLy8gQG5hbWU6cnUgICAgINCf0YDRj9C80YvQtSDRgdGB0YvQu9C60Lgg0L3QsNGA0YPQttGDCi8vIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGFsbCAiWW91IGFyZSBsZWF2aW5nIG91ciBzaXRlIiBhbmQgcmVkaXJlY3Rpb24gc3R1ZmYgZnJvbSBsaW5rcwovLyBAZGVzY3JpcHRpb246cnUg0KPQsdC40YDQsNC10YIgItCR0LvQsC3QsdC70LAt0LHQu9CwLCDQktGLINC/0L7QutC40LTQsNC10YLQtSDQvdCw0Ygg0YHQsNC50YIiINC4INC/0LXRgNC10LDQtNGA0LXRgdCw0YbQuNC4INC40Lcg0YHRgdGL0LvQvtC6Ci8vIEBuYW1lc3BhY2UgICBodHRwczovL2dpdGh1Yi5jb20vbm9rZXlhCi8vIEBhdXRob3IgICAgICBub2tleWEKLy8gQHVwZGF0ZSAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2tleWEvZGlyZWN0LWxpbmtzLW91dC9yYXcvbWFzdGVyL2RpcmVjdC1saW5rcy1vdXQudXNlci5qcwovLyBAaWNvbiAgICAgICAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25va2V5YS9kaXJlY3QtbGlua3Mtb3V0L21hc3Rlci9pY29uLnBuZwovLyBAdmVyc2lvbiAgICAgMi4xOQovLyBAZ3JhbnQgICAgICAgbm9uZQovL2dvb2dsZQovLyBAaW5jbHVkZSAgICAgKjovL2dvb2dsZS4qCi8vIEBpbmNsdWRlICAgICAqOi8vd3d3Lmdvb2dsZS4qCi8vIEBpbmNsdWRlICAgICAqOi8vZW5jcnlwdGVkLmdvb2dsZS4qCi8veWFuZGV4Ci8vIEBtYXRjaCAgICAgICAqOi8veWFuZGV4LnJ1LyoKLy8gQG1hdGNoICAgICAgICo6Ly95YW5kZXgudWEvKgovLyBAbWF0Y2ggICAgICAgKjovL3lhbmRleC5ieS8qCi8vIEBtYXRjaCAgICAgICAqOi8veWFuZGV4Lmt6LyoKLy8gQG1hdGNoICAgICAgICo6Ly95YW5kZXguY29tLnRyLyoKLy8gQG1hdGNoICAgICAgICo6Ly95YW5kZXguY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnlhbmRleC5ydS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi55YW5kZXgudWEvKgovLyBAbWF0Y2ggICAgICAgKjovLyoueWFuZGV4LmJ5LyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnlhbmRleC5rei8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi55YW5kZXguY29tLnRyLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnlhbmRleC5jb20vKgovL3lvdXR1YmUKLy8gQG1hdGNoICAgICAgICo6Ly95b3V0dWJlLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi55b3V0dWJlLmNvbS8qCi8vd2lraW1hcGlhCi8vIEBtYXRjaCAgICAgICAqOi8vd2lraW1hcGlhLm9yZy8qCi8vZGV2aWFudGFydAovLyBAbWF0Y2ggICAgICAgKjovL2RldmlhbnRhcnQuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmRldmlhbnRhcnQuY29tLyoKLy9qb3lyZWFjdG9yCi8vIEBtYXRjaCAgICAgICAqOi8vam95cmVhY3Rvci5jYy8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5qb3lyZWFjdG9yLmNjLyoKLy8gQG1hdGNoICAgICAgICo6Ly9yZWFjdG9yLmNjLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnJlYWN0b3IuY2MvKgovLyBAbWF0Y2ggICAgICAgKjovL2pveXJlYWN0b3IuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmpveXJlYWN0b3IuY29tLyoKLy92awovLyBAbWF0Y2ggICAgICAgKjovL3ZrLmNvbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi52ay5jb20vKgovL29rCi8vIEBtYXRjaCAgICAgICAqOi8vb2sucnUvKgovLyBAbWF0Y2ggICAgICAgKjovLyoub2sucnUvKgovL3N0ZWFtCi8vIEBtYXRjaCAgICAgICAqOi8vc3RlYW1jb21tdW5pdHkuY29tLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnN0ZWFtY29tbXVuaXR5LmNvbS8qCi8vZmIKLy8gQG1hdGNoICAgICAgICo6Ly9mYWNlYm9vay5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouZmFjZWJvb2suY29tLyoKLy90d2l0dGVyCi8vIEBtYXRjaCAgICAgICAqOi8vdHdpdHRlci5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoudHdpdHRlci5jb20vKgovLzRwZGEKLy8gQG1hdGNoICAgICAgICo6Ly80cGRhLnJ1LyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLjRwZGEucnUvKgovL2tpY2thc3MKLy8gQG1hdGNoICAgICAgICo6Ly9rYXQuY3IvKgovLyBAbWF0Y2ggICAgICAgKjovL2tpY2thc3N0by5jby8qCi8vIEBtYXRjaCAgICAgICAqOi8va2F0cHJveHkuaXMvKgovLyBAbWF0Y2ggICAgICAgKjovL3RoZWthdC50di8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5rYXQuY3IvKgovLyBAbWF0Y2ggICAgICAgKjovLyoua2lja2Fzc3RvLmNvLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLmthdHByb3h5LmlzLyoKLy8gQG1hdGNoICAgICAgICo6Ly8qLnRoZWthdC50di8qCi8vQU1PCi8vIEBtYXRjaCAgICAgICAqOi8vYWRkb25zLm1vemlsbGEub3JnLyoKLy9waXhpdgovLyBAbWF0Y2ggICAgICAgKjovL3BpeGl2Lm5ldC8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi5waXhpdi5uZXQvKgovL3R1bWJscgovLyBAbWF0Y2ggICAgICAgKjovL3R1bWJsci5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoudHVtYmxyLmNvbS8qCi8vZGFuaWVsZGVmbwovLyBAbWF0Y2ggICAgICAgKjovL2RhbmllbGRlZm8ucnUvKgovLyBAbWF0Y2ggICAgICAgKjovLyouZGFuaWVsZGVmby5ydS8qCi8veWFwbGFrYWwKLy8gQG1hdGNoICAgICAgICo6Ly95YXBsYWthbC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoueWFwbGFrYWwuY29tLyoKLy9zb3VuZGNsb3VkCi8vIEBtYXRjaCAgICAgICAqOi8vc291bmRjbG91ZC5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouc291bmRjbG91ZC5jb20vKgovL3Vwd29yawovLyBAbWF0Y2ggICAgICAgKjovL3Vwd29yay5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyoudXB3b3JrLmNvbS8qCi8vcGljYXJ0bwovLyBAbWF0Y2ggICAgICAgKjovL3BpY2FydG8udHYvKgovLyBAbWF0Y2ggICAgICAgKjovLyoucGljYXJ0by50di8qCi8vdGFrZXIKLy8gQG1hdGNoICAgICAgICo6Ly90YWtlci5pbS8qCi8vIEBtYXRjaCAgICAgICAqOi8vKi50YWtlci5pbS8qCi8vZm9ydW1hdmlhCi8vIEBtYXRjaCAgICAgICAqOi8vKi5mb3J1bWF2aWEucnUvKgovL3NsYWNrCi8vIEBtYXRjaCAgICAgICAqOi8vKi5zbGFjay5jb20vKgovL2luc3RhZ3JhbQovLyBAbWF0Y2ggICAgICAgKjovL2luc3RhZ3JhbS5jb20vKgovLyBAbWF0Y2ggICAgICAgKjovLyouaW5zdGFncmFtLmNvbS8qCgovLyA9PS9Vc2VyU2NyaXB0PT0KKGZ1bmN0aW9uKCkgewogICAgLy8gYW5jaG9ycyBhbmQgZnVuY3Rpb25zCiAgICB2YXIgYW5jaG9yOwogICAgdmFyIGFmdGVyOwogICAgdmFyIHJ3TGluayA9IGZ1bmN0aW9uKCl7fTsKICAgIHZhciByd0FsbCA9IGZ1bmN0aW9uKCl7fTsKICAgIHZhciByZXRUcnVlID0gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9OyAvL2R1bW15IGZ1bmN0aW9uIHRvIGFsd2F5cyByZXR1cm4gdHJ1ZQoKICAgIC8vIHNpbXBsZSByZXdyaXRlIGxpbmsgLSAgYmFzZWQgb24gYW5jaG9ycwogICAgZnVuY3Rpb24gcndTaW1wbGUobGluayl7CiAgICAgICAgaWYgKGFuY2hvcil7CiAgICAgICAgICAgIHZhciBuZHggPSBsaW5rLmhyZWYuaW5kZXhPZihhbmNob3IpOwogICAgICAgICAgICBpZiAobmR4ICE9IC0xKXsKICAgICAgICAgICAgICAgIHZhciBuZXdsaW5rID0gbGluay5ocmVmLnN1YnN0cmluZyhuZHggKyBhbmNob3IubGVuZ3RoKTsKICAgICAgICAgICAgICAgIGlmIChhZnRlcil7CiAgICAgICAgICAgICAgICAgICAgbmR4ID0gbmV3bGluay5pbmRleE9mKGFmdGVyKTsKICAgICAgICAgICAgICAgICAgICBpZiAobmR4ICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICBuZXdsaW5rID0gbmV3bGluay5zdWJzdHJpbmcoMCwgbmR4KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxpbmsuaHJlZiA9IHVuZXNjYXBlKG5ld2xpbmspOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcndhU2ltcGxlKCl7CiAgICAgICAgdmFyIGxpbmtzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgKytpKQogICAgICAgICAgICByd0xpbmsobGlua3NbaV0pOwogICAgfQogICAgLy8gdmsKICAgIGZ1bmN0aW9uIHJ3VksobGluayl7CiAgICAgICAgaWYgKGxpbmsuY2xhc3NOYW1lID09PSAncGFnZV9tZWRpYV9saW5rX3RodW1iJykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBwYXJlbnQgPSBsaW5rLnBhcmVudE5vZGU7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHBhcmVudC5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgICAgICAgcGFyZW50LnJlbW92ZUF0dHJpYnV0ZSgnaHJlZicpOwogICAgICAgICAgICBwYXJlbnQucmVtb3ZlQXR0cmlidXRlKCdvbmNsaWNrJyk7CiAgICAgICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdvbmNsaWNrJyk7CiAgICAgICAgfQoKICAgICAgICB2YXIgbmR4ID0gbGluay5ocmVmLmluZGV4T2YoYW5jaG9yKTsKICAgICAgICBpZiAobmR4ICE9IC0xKXsKICAgICAgICAgICAgdmFyIG5ld2xpbmsgPSBsaW5rLmhyZWYuc3Vic3RyaW5nKG5keCArIGFuY2hvci5sZW5ndGgpOwogICAgICAgICAgICB2YXIgYWZ0ZXJBcnIgPSBbJyZwb3N0PScsICcmZWw9c25pcHBldCcsICcmY2Nfa2V5PSddOwogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFmdGVyQXJyLmxlbmd0aDsgKytpKXsKICAgICAgICAgICAgICAgIG5keCA9IG5ld2xpbmsuaW5kZXhPZihhZnRlckFycltpXSk7CiAgICAgICAgICAgICAgICBpZiAobmR4ICE9IC0xKQogICAgICAgICAgICAgICAgICAgIG5ld2xpbmsgPSBuZXdsaW5rLnN1YnN0cmluZygwLCBuZHgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHVuZXNjYXBlKG5ld2xpbmspOwogICAgICAgIH0KICAgIH0KICAgIC8vIHR3aXR0ZXIKICAgIGZ1bmN0aW9uIHJ3VHdpdHRlcihsaW5rKXsKICAgICAgICBpZiAobGluay5oYXNBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQtdXJsJykpewogICAgICAgICAgICBsaW5rLmhyZWYgPSBsaW5rLmdldEF0dHJpYnV0ZSgnZGF0YS1leHBhbmRlZC11cmwnKTsKICAgICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQtdXJsJyk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gcndhVHdpdHRlcigpewogICAgICAgIHZhciBsaW5rcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3R3aXR0ZXItdGltZWxpbmUtbGluaycpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyArK2kpCiAgICAgICAgICAgIHJ3TGluayhsaW5rc1tpXSk7CiAgICB9CiAgICAvLyBraWNrYXNzCiAgICBmdW5jdGlvbiByd0tpY2thc3MobGluayl7CiAgICAgICAgdmFyIG5keCA9IGxpbmsuaHJlZi5pbmRleE9mKGFuY2hvcik7CiAgICAgICAgaWYgKG5keCAhPSAtMSl7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IHdpbmRvdy5hdG9iKHVuZXNjYXBlKGxpbmsuaHJlZi5zdWJzdHJpbmcobmR4ICsgYW5jaG9yLmxlbmd0aCwgbGluay5ocmVmLmxlbmd0aCAtIDEpKSk7CiAgICAgICAgICAgIGxpbmsuY2xhc3NOYW1lID0gJyc7CiAgICAgICAgfQogICAgfQogICAgLy8geW91dHViZQogICAgZnVuY3Rpb24gcndZb3V0dWJlKGxpbmspewogICAgICAgIGlmICgvcmVkaXJlY3QvaS50ZXN0KGxpbmsuY2xhc3NOYW1lKSkKICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2RhdGEtcmVkaXJlY3QtaHJlZi11cGRhdGVkJywgJ3RydWUnKTsKICAgICAgICByd1NpbXBsZShsaW5rKTsKICAgIH0KICAgIC8vIGZhY2Vib29rCiAgICBmdW5jdGlvbiByd0ZhY2Vib29rKGxpbmspewogICAgICAgIGlmICgvcmVmZXJyZXJfbG9nL2kudGVzdChsaW5rLm9uY2xpY2spKXsKICAgICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ29uY2xpY2snKTsKICAgICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ29ubW91c2VvdmVyJyk7CiAgICAgICAgfQogICAgICAgIHJ3U2ltcGxlKGxpbmspOwogICAgfQogICAgLy8gZ29vZ2xlCiAgICBmdW5jdGlvbiByd0dvb2dsZShsaW5rKXsKICAgICAgICAvLyByZXBsYWNlIGdsb2JhbCByd3Qgc2NyaXB0CiAgICAgICAgaWYgKHdpbmRvdy5yd3QgJiYgd2luZG93LnJ3dCAhPSByZXRUcnVlKXsKICAgICAgICAgICAgZGVsZXRlIHdpbmRvdy5yd3Q7CiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdyd3QnLCB7IHZhbHVlOiByZXRUcnVlLCB3cml0YWJsZTogZmFsc2UgfSk7CiAgICAgICAgfQoKICAgICAgICAvLyBtYWluIHNlYXJjaAogICAgICAgIGlmIChsaW5rLmhhc0F0dHJpYnV0ZSgnb25tb3VzZWRvd24nKSkKICAgICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ29ubW91c2Vkb3duJyk7CiAgICAgICAgLy8gaW1hZ2VzCiAgICAgICAgaWYgKGxpbmsuaGFzQXR0cmlidXRlKCdqc2FjdGlvbicpKXsKICAgICAgICAgICB2YXIgdG1wID0gbGluay5nZXRBdHRyaWJ1dGUoJ2pzYWN0aW9uJyk7CiAgICAgICAgICAgaWYgKHRtcCkKICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2pzYWN0aW9uJywgdG1wLnJlcGxhY2UoLyhtb3VzZWRvd246aXJjLnJsfGtleWRvd246aXJjLnJsaykvZywnJykpOwogICAgICAgIH0KICAgIH0KCiAgICAvLyB5YW5kZXgKICAgIGZ1bmN0aW9uIHJ3WWFuZGV4KGxpbmspewogICAgICAgIC8vIG1haW4gc2VhcmNoCiAgICAgICAgaWYgKGxpbmsuaGFzQXR0cmlidXRlKCdvbm1vdXNlZG93bicpKQogICAgICAgICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgnb25tb3VzZWRvd24nKTsKICAgICAgICAvLyBpbWFnZXMKICAgICAgICBhbmNob3IgPSAnJmltZ191cmw9JzsKICAgICAgICBhZnRlciA9ICcmcG9zPSc7CiAgICAgICAgcndTaW1wbGUobGluayk7CiAgICB9CiAgICAvL21vemlsbGEgYWRkb25zIHN0b3JlCiAgICBmdW5jdGlvbiByd0FNTyhsaW5rKXsKICAgICAgICBpZiAoL291dGdvaW5nLnByb2QubW96YXdzLm5ldC9pLnRlc3QobGluay5ocmVmKSl7CiAgICAgICAgICAgIHZhciB0bXAgPSBsaW5rLmhyZWY7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9ICIjIjsKICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBmaWdodCBtb3ppbGxhJ3MgcmVwbGFjaW5nIG9mIGRpcmVjdCByZWRpcmVjdCBzdHJpbmcgd2l0aCBqcXVlcnkgZXZlbnRzCiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbGluay5ocmVmID0gdW5lc2NhcGUodG1wLnJlcGxhY2UoLyhodHRwfGh0dHBzKTpcL1wvb3V0Z29pbmcucHJvZC5tb3phd3MubmV0XC92MVwvWzAtOWEtekEtWl0rXC8vaSwnJykpOyB9LCAxMDApOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBkYW5pdWVsZGVmbwogICAgZnVuY3Rpb24gcndEYW5pZWxEZWZvKGxpbmspewogICAgICAgIGlmIChsaW5rLmhhc0F0dHJpYnV0ZSgnZGF0YS1wcm94eS1ocmVmJykpCiAgICAgICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXByb3h5LWhyZWYnKTsKICAgIH0KCiAgICAvLyBzbGFjawogICAgZnVuY3Rpb24gcndTbGFjayhsaW5rKXsKICAgICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgnb25jbGljaycpOwogICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdvbm1vdXNlb3ZlcicpOwogICAgfQoKICAgIC8vIGRldGVybWluZSBhbmNob3JzLCBmdW5jdGlvbnMgYW5kIGxpc3RlbmVycwogICAgKGZ1bmN0aW9uICgpCiAgICB7CiAgICAgICAgcndMaW5rID0gcndTaW1wbGU7CiAgICAgICAgcndBbGwgPSByd2FTaW1wbGU7CgogICAgICAgIHZhciBsb2MgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7CiAgICAgICAgaWYgKC9nb29nbGUvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIHJ3TGluayA9IHJ3R29vZ2xlOwogICAgICAgIGVsc2UgaWYgKC95b3V0dWJlL2kudGVzdChsb2MpKXsKICAgICAgICAgICAgYW5jaG9yID0gJ3JlZGlyZWN0P3E9JzsKICAgICAgICAgICAgYWZ0ZXIgPSAnJnJlZGlyX3Rva2VuPSc7CiAgICAgICAgICAgIHJ3TGluayA9IHJ3WW91dHViZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoL2ZhY2Vib29rL2kudGVzdChsb2MpKXsKICAgICAgICAgICAgYW5jaG9yID0gJ3U9JzsKICAgICAgICAgICAgYWZ0ZXIgPSAnJmg9JzsKICAgICAgICAgICAgcndMaW5rID0gcndGYWNlYm9vazsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoL2luc3RhZ3JhbS9pLnRlc3QobG9jKSl7CiAgICAgICAgICAgIGFuY2hvciA9ICd1PSc7CiAgICAgICAgICAgIGFmdGVyID0gJyZlPSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKC90d2l0dGVyL2kudGVzdChsb2MpKXsKICAgICAgICAgICAgcndMaW5rID0gcndUd2l0dGVyOwogICAgICAgICAgICByd0FsbCA9IHJ3YVR3aXR0ZXI7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKC95YW5kZXgvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIHJ3TGluayA9IHJ3WWFuZGV4OwogICAgICAgIGVsc2UgaWYgKC92ay9pLnRlc3QobG9jKSl7CiAgICAgICAgICAgIGFuY2hvciA9ICd0bz0nOwogICAgICAgICAgICByd0xpbmsgPSByd1ZLOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvb2svaS50ZXN0KGxvYykpewogICAgICAgICAgICBhbmNob3IgPSAnc3QubGluaz0nOwogICAgICAgICAgICBhZnRlciA9ICcmc3QubmFtZT0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvcGl4aXYvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIGFuY2hvciA9ICdqdW1wLnBocD8nOwogICAgICAgIGVsc2UgaWYgKC90dW1ibHIvaS50ZXN0KGxvYykpewogICAgICAgICAgICBhbmNob3IgPSAicmVkaXJlY3Q/ej0iOwogICAgICAgICAgICBhZnRlciA9ICImdD0iOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvZGV2aWFudGFydC9pLnRlc3QobG9jKSkKICAgICAgICAgICAgYW5jaG9yID0gJ291dGdvaW5nPyc7CiAgICAgICAgZWxzZSBpZiAoLyhzdGVhbXxyZWFjdG9yKS9pLnRlc3QobG9jKSkKICAgICAgICAgICAgYW5jaG9yID0gJ3VybD0nOwogICAgICAgIGVsc2UgaWYgKC8oa2F0fGtpY2thc3MpL2kudGVzdChsb2MpKXsKICAgICAgICAgICAgYW5jaG9yID0gJ2NvbmZpcm0vdXJsLyc7CiAgICAgICAgICAgIHJ3TGluayA9IHJ3S2lja2FzczsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoL3NvdW5kY2xvdWQvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIGFuY2hvciA9ICJleGl0LnNjLz91cmw9IjsKICAgICAgICBlbHNlIGlmICgvdXB3b3JrL2kudGVzdChsb2MpKQogICAgICAgICAgICBhbmNob3IgPSAnbGVhdmluZy1vZGVzaz9yZWY9JzsKICAgICAgICBlbHNlIGlmICgvNHBkYS9pLnRlc3QobG9jKSl7CiAgICAgICAgICAgIGFuY2hvciA9ICdnby8/dT0nOwogICAgICAgICAgICBhZnRlciA9ICcmZT0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvbW96aWxsYS9pLnRlc3QobG9jKSkKICAgICAgICAgICAgcndMaW5rID0gcndBTU87CiAgICAgICAgZWxzZSBpZiAoL2RhbmllbGRlZm8vaS50ZXN0KGxvYykpCiAgICAgICAgICAgIHJ3TGluayA9IHJ3RGFuaWVsRGVmbzsKICAgICAgICBlbHNlIGlmICgveWFwbGFrYWwvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIGFuY2hvciA9ICJnby8/IjsKICAgICAgICBlbHNlIGlmICgvd2lraW1hcGlhLm9yZy9pLnRlc3QobG9jKSkKICAgICAgICAgICAgYW5jaG9yID0gJ2V4dGVybmFsX2xpbms/dXJsPSc7CiAgICAgICAgZWxzZSBpZiAoL2ZvcnVtYXZpYS5ydS9pLnRlc3QobG9jKSkKICAgICAgICAgICAgYW5jaG9yID0gJy9lLz9sPSc7CiAgICAgICAgZWxzZSBpZiAoL3BpY2FydG8vaS50ZXN0KGxvYykpewogICAgICAgICAgICBhbmNob3IgPSAicmVmZXJyZXI/Z289IjsKICAgICAgICAgICAgYWZ0ZXIgPSAiJnJlZj0iOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgvdGFrZXIvaS50ZXN0KGxvYykpCiAgICAgICAgICAgIGFuY2hvciA9ICJwaHBCQjIvZ290by8iOwogICAgICAgIGVsc2UgaWYgKC9zbGFjay9pLnRlc3QobG9jKSkKICAgICAgICAgICAgcndMaW5rID0gcndTbGFjazsKCiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NTm9kZUluc2VydGVkJywgZnVuY3Rpb24oZXZlbnQpewogICAgICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC50YXJnZXQgfHwgIShldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpCiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIHZhciBub2RlID0gZXZlbnQudGFyZ2V0OwogICAgICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50KQogICAgICAgICAgICAgICAgcndMaW5rKG5vZGUpOwogICAgICAgICAgICB2YXIgbGlua3MgPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlua3MubGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICByd0xpbmsobGlua3NbaV0pOwogICAgICAgIH0sIGZhbHNlKTsKICAgIH0pKCk7CiAgICByd0FsbCgpOwp9KSgpOwo="},{"name":"AdsBypasser","options":{"check_for_updates":true,"compat_foreach":false,"compat_metadata":false,"compat_prototypes":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":["*"],"orig_excludes":[],"orig_includes":["http://*","https://*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":["binbox.io"],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1650052370947,"data":{"align_center":"btrue","change_background":"btrue","external_server_support":"bfalse","log_level":"n1","redirect_image":"btrue","scale_image":"btrue","version":"n4"}},"enabled":true,"position":10,"file_url":"https://adsbypasser.github.io/releases/adsbypasser.full.es7.user.js","uuid":"07631f02-8bd1-41d7-b717-38c702eff6d8","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICAgIEFkc0J5cGFzc2VyCi8vIEBuYW1lc3BhY2UgICAgICBBZHNCeXBhc3NlcgovLyBAZGVzY3JpcHRpb24gICAgQnlwYXNzIEFkcwovLyBAY29weXJpZ2h0ICAgICAgMjAxMissIFdlaS1DaGVuZyBQYW4sIGh0dHBzOi8vYWRzYnlwYXNzZXIuZ2l0aHViLmlvLwovLyBAdmVyc2lvbiAgICAgICAgNy4xOS4wCi8vIEBsaWNlbnNlICAgICAgICBCU0QKLy8gQGhvbWVwYWdlVVJMICAgIGh0dHBzOi8vYWRzYnlwYXNzZXIuZ2l0aHViLmlvLwovLyBAc3VwcG9ydFVSTCAgICAgaHR0cHM6Ly9naXRodWIuY29tL2Fkc2J5cGFzc2VyL2Fkc2J5cGFzc2VyL2lzc3VlcwovLyBAdXBkYXRlVVJMICAgICAgaHR0cHM6Ly9hZHNieXBhc3Nlci5naXRodWIuaW8vcmVsZWFzZXMvYWRzYnlwYXNzZXIuZnVsbC5lczcubWV0YS5qcwovLyBAZG93bmxvYWRVUkwgICAgaHR0cHM6Ly9hZHNieXBhc3Nlci5naXRodWIuaW8vcmVsZWFzZXMvYWRzYnlwYXNzZXIuZnVsbC5lczcudXNlci5qcwovLyBAaWNvbiAgICAgICAgICAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fkc2J5cGFzc2VyL2Fkc2J5cGFzc2VyL3Y3LjE5LjAvcmVzb3VyY2VzL2ltZy9sb2dvLnBuZwovLyBAZ3JhbnQgICAgICAgICAgR01fZGVsZXRlVmFsdWUKLy8gQGdyYW50ICAgICAgICAgIEdNX2dldFJlc291cmNlVVJMCi8vIEBncmFudCAgICAgICAgICBHTV9nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgR01fb3BlbkluVGFiCi8vIEBncmFudCAgICAgICAgICBHTV9yZWdpc3Rlck1lbnVDb21tYW5kCi8vIEBncmFudCAgICAgICAgICBHTV9zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgR01feG1saHR0cFJlcXVlc3QKLy8gQGdyYW50ICAgICAgICAgIEdNLmRlbGV0ZVZhbHVlCi8vIEBncmFudCAgICAgICAgICBHTS5nZXRSZXNvdXJjZVVybAovLyBAZ3JhbnQgICAgICAgICAgR00uZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICAgIEdNLm9wZW5JblRhYgovLyBAZ3JhbnQgICAgICAgICAgR00uc2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICAgIEdNLnhtbEh0dHBSZXF1ZXN0Ci8vIEBncmFudCAgICAgICAgICB1bnNhZmVXaW5kb3cKLy8gQHJlc291cmNlICAgICAgIGFsaWduQ2VudGVyIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hZHNieXBhc3Nlci9hZHNieXBhc3Nlci92Ny4xOS4wL3Jlc291cmNlcy9jc3MvYWxpZ25fY2VudGVyLmNzcwovLyBAcmVzb3VyY2UgICAgICAgc2NhbGVJbWFnZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWRzYnlwYXNzZXIvYWRzYnlwYXNzZXIvdjcuMTkuMC9yZXNvdXJjZXMvY3NzL3NjYWxlX2ltYWdlLmNzcwovLyBAcmVzb3VyY2UgICAgICAgYmdJbWFnZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWRzYnlwYXNzZXIvYWRzYnlwYXNzZXIvdjcuMTkuMC9yZXNvdXJjZXMvaW1nL2ltYWdlZG9jLWRhcmtub2lzZS5wbmcKLy8gQHJ1bi1hdCAgICAgICAgIGRvY3VtZW50LXN0YXJ0Ci8vIEBpbmNsdWRlICAgICAgICBodHRwOi8vKgovLyBAaW5jbHVkZSAgICAgICAgaHR0cHM6Ly8qCi8vIEBjb25uZWN0ICAgICAgICAqCi8vID09L1VzZXJTY3JpcHQ9PQoKIChmdW5jdGlvbihtb2R1bGVzKSB7IAogCXZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307CiAJZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkgewogCQlpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkgewogCQkJcmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7CiAJCX0KIAkJdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0gewogCQkJaTogbW9kdWxlSWQsCiAJCQlsOiBmYWxzZSwKIAkJCWV4cG9ydHM6IHt9CiAJCX07CiAJCW1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pOwogCQltb2R1bGUubCA9IHRydWU7CiAJCXJldHVybiBtb2R1bGUuZXhwb3J0czsKIAl9CiAJX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlczsKIAlfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzOwogCV9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikgewogCQlpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7CiAJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTsKIAkJfQogCX07CiAJX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykgewogCQlpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHsKIAkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pOwogCQl9CiAJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7CiAJfTsKIAlfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkgewogCQlpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTsKIAkJaWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTsKIAkJaWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTsKIAkJdmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTsKIAkJX193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTsKIAkJT2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pOwogCQlpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7CiAJCXJldHVybiBuczsKIAl9OwogCV9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkgewogCQl2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID8KIAkJCWZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6CiAJCQlmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9OwogCQlfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7CiAJCXJldHVybiBnZXR0ZXI7CiAJfTsKIAlfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07CiAJX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gIiI7CiAJcmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMCk7CiB9KQogKFsKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwogdmFyIHV0aWxfZGlzcGF0Y2hlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTsKIHZhciB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwogdmFyIHV0aWxfY29uZmlnX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpOwogdmFyIHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwogdmFyIF9BRFNCWVBBU1NFUl9IQU5ETEVSU19fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7CmNvbnN0IGlzU2FmYXJpID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdpbmRvdy5IVE1MRWxlbWVudCkuaW5kZXhPZignQ29uc3RydWN0b3InKSA+IDA7CmZ1bmN0aW9uIGRpc2FibGVXaW5kb3dPcGVuICgpIHsKICB0cnkgewogICAgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ1c3ciXS5vcGVuID0gZnVuY3Rpb24gKCkgewogICAgICByZXR1cm4gewogICAgICAgIGNsb3NlZDogZmFsc2UsCiAgICAgIH07CiAgICB9OwogIH0gY2F0Y2ggKGUpIHsKICAgIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJ3YXJuIl0pKCdjYW5ub3QgbW9jayB3aW5kb3cub3BlbicpOwogIH0KICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVzdyJdLmFsZXJ0ID0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vcCJdOwogIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sidXN3Il0uY29uZmlybSA9IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub3AiXTsKfQpmdW5jdGlvbiBkaXNhYmxlTGVhdmVQcm9tcHQgKGVsZW1lbnQpIHsKICBpZiAoIWVsZW1lbnQpIHsKICAgIHJldHVybjsKICB9CiAgY29uc3Qgc2VhbCA9IHsKICAgIHNldDogZnVuY3Rpb24gKCkgewogICAgICBPYmplY3QodXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siaW5mbyJdKSgnYmxvY2tlZCBvbmJlZm9yZXVubG9hZCcpOwogICAgfSwKICB9OwogIGVsZW1lbnQub25iZWZvcmV1bmxvYWQgPSB1bmRlZmluZWQ7CiAgaWYgKGlzU2FmYXJpKSB7CiAgICBlbGVtZW50Ll9fZGVmaW5lU2V0dGVyX18oJ29uYmVmb3JldW5sb2FkJywgc2VhbC5zZXQpOwogIH0gZWxzZSB7CiAgICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVzdyJdLk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnb25iZWZvcmV1bmxvYWQnLCB7CiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgIGdldDogdW5kZWZpbmVkLAogICAgICBzZXQ6IHNlYWwuc2V0LAogICAgfSk7CiAgfQogIGNvbnN0IG9hZWwgPSBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXI7CiAgY29uc3QgbmFlbCA9IGZ1bmN0aW9uICh0eXBlKSB7CiAgICBpZiAodHlwZSA9PT0gJ2JlZm9yZXVubG9hZCcpIHsKICAgICAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bImluZm8iXSkoJ2Jsb2NrZWQgYWRkRXZlbnRMaXN0ZW5lciBvbmJlZm9yZXVubG9hZCcpOwogICAgICByZXR1cm47CiAgICB9CiAgICByZXR1cm4gb2FlbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogIH07CiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyID0gbmFlbDsKfQpmdW5jdGlvbiBjaGFuZ2VUaXRsZSAoKSB7CiAgZG9jdW1lbnQudGl0bGUgKz0gJyAtIEFkc0J5cGFzc2VyJzsKfQphc3luYyBmdW5jdGlvbiBiZWZvcmVET01SZWFkeSAoaGFuZGxlcikgewogIGNvbnN0IGNvbmZpZyA9IGF3YWl0IE9iamVjdCh1dGlsX2NvbmZpZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJkdW1wQ29uZmlnIl0pKCk7CiAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bImluZm8iXSkoJ3dvcmtpbmcgb25cbiVzIFxud2l0aFxuJXMnLCB3aW5kb3cubG9jYXRpb24udG9TdHJpbmcoKSwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7CiAgZGlzYWJsZUxlYXZlUHJvbXB0KHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sidXN3Il0pOwogIGRpc2FibGVXaW5kb3dPcGVuKCk7CiAgYXdhaXQgaGFuZGxlci5zdGFydCgpOwp9CmFzeW5jIGZ1bmN0aW9uIGFmdGVyRE9NUmVhZHkgKGhhbmRsZXIpIHsKICBkaXNhYmxlTGVhdmVQcm9tcHQodXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ1c3ciXS5kb2N1bWVudC5ib2R5KTsKICBjaGFuZ2VUaXRsZSgpOwogIGF3YWl0IGhhbmRsZXIucmVhZHkoKTsKfQpmdW5jdGlvbiB3YWl0RE9NICgpIHsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9PSAnbG9hZGluZycpIHsKICAgICAgcmVzb2x2ZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4gewogICAgICByZXNvbHZlKCk7CiAgICB9KTsKICB9KTsKfQphc3luYyBmdW5jdGlvbiBtYWluICgpIHsKICBpZiAodXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJyYXdVU1ciXS50b3AgIT09IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sicmF3VVNXIl0uc2VsZikgewogICAgcmV0dXJuOwogIH0KICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0ucmVnaXN0ZXJNZW51Q29tbWFuZCgnQWRzQnlwYXNzZXIgLSBDb25maWd1cmUnLCAoKSA9PiB7CiAgICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0ub3BlbkluVGFiKCdodHRwczovL2Fkc2J5cGFzc2VyLmdpdGh1Yi5pby9jb25maWd1cmUuaHRtbCcpOwogIH0pOwogIGF3YWl0IE9iamVjdCh1dGlsX2NvbmZpZ19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fWyJsb2FkQ29uZmlnIl0pKCk7CiAgY29uc3QgaGFuZGxlciA9IE9iamVjdCh1dGlsX2Rpc3BhdGNoZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siZmluZEhhbmRsZXIiXSkoKTsKICBpZiAoaGFuZGxlcikgewogICAgYXdhaXQgYmVmb3JlRE9NUmVhZHkoaGFuZGxlcik7CiAgICBhd2FpdCB3YWl0RE9NKCk7CiAgICBhd2FpdCBhZnRlckRPTVJlYWR5KGhhbmRsZXIpOwogICAgcmV0dXJuOwogIH0KfQptYWluKCkuY2F0Y2goKGUpID0+IHsKICBPYmplY3QodXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1sid2FybiJdKShlKTsKfSk7CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkFkc0J5cGFzc2VyRXJyb3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFkc0J5cGFzc2VyRXJyb3I7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJldmVyeSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXZlcnk7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJmaW5kIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmaW5kOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZm9yRWFjaCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm9yRWFjaDsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImlzU3RyaW5nIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N0cmluZzsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm1hcCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbWFwOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAibm9uZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9uZTsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIm5vcCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9wOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicGFydGlhbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcGFydGlhbDsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInRyeUV2ZXJ5IiwgZnVuY3Rpb24oKSB7IHJldHVybiB0cnlFdmVyeTsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIndhaXQiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHdhaXQ7IH0pOwpjbGFzcyBBZHNCeXBhc3NlckVycm9yIGV4dGVuZHMgRXJyb3IgewogIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7CiAgICBzdXBlcihtZXNzYWdlKTsKICB9CiAgZ2V0IG5hbWUgKCkgewogICAgcmV0dXJuICdBZHNCeXBhc3NlckVycm9yJzsKICB9Cn0KZnVuY3Rpb24gZm9yRWFjaCAoY29sbGVjdGlvbiwgZm4pIHsKICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHsKICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGNvbGxlY3Rpb24sIGZuKTsKICB9CiAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pLmZvckVhY2goKGspID0+IHsKICAgIHJldHVybiBmbihjb2xsZWN0aW9uW2tdLCBrLCBjb2xsZWN0aW9uKTsKICB9KTsKfQpmdW5jdGlvbiBldmVyeSAoY29sbGVjdGlvbiwgZm4pIHsKICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHsKICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuZXZlcnkuY2FsbChjb2xsZWN0aW9uLCBmbik7CiAgfQogIHJldHVybiBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKS5ldmVyeSgoaykgPT4gewogICAgcmV0dXJuIGZuKGNvbGxlY3Rpb25ba10sIGssIGNvbGxlY3Rpb24pOwogIH0pOwp9CmZ1bmN0aW9uIG1hcCAoY29sbGVjdGlvbiwgZm4pIHsKICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHsKICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoY29sbGVjdGlvbiwgZm4pOwogIH0KICBjb25zdCBtYXBwZWQgPSBPYmplY3QuYXNzaWduKHt9LCBjb2xsZWN0aW9uKTsKICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtYXBwZWQpLmZvckVhY2goKGspID0+IHsKICAgIG1hcHBlZFtrXSA9IGZuKGNvbGxlY3Rpb25ba10sIGssIGNvbGxlY3Rpb24pOwogIH0pOwogIHJldHVybiBtYXBwZWQ7Cn0KZnVuY3Rpb24gZmluZCAoY29sbGVjdGlvbiwgZm4pIHsKICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBlbnVtZXJhdGUoY29sbGVjdGlvbikpIHsKICAgIGNvbnN0IHIgPSBmbih2LCBrLCBjb2xsZWN0aW9uKTsKICAgIGlmIChyICE9PSBub25lKSB7CiAgICAgIHJldHVybiBbaywgdiwgcl07CiAgICB9CiAgfQogIHJldHVybiBbbm9uZSwgbm9uZSwgbm9uZV07Cn0KZnVuY3Rpb24gKiBlbnVtZXJhdGUgKGNvbGxlY3Rpb24pIHsKICBpZiAoaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHsKICAgIHlpZWxkICogQXJyYXkucHJvdG90eXBlLmVudHJpZXMuY2FsbChjb2xsZWN0aW9uKTsKICAgIHJldHVybjsKICB9CiAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNvbGxlY3Rpb24pOwogIGZvciAoY29uc3QgayBvZiBrZXlzKSB7CiAgICB5aWVsZCBbaywgY29sbGVjdGlvbltrXV07CiAgfQp9CmZ1bmN0aW9uIGlzQXJyYXlMaWtlIChjb2xsZWN0aW9uKSB7CiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikgfHwgaXNOb2RlTGlzdChjb2xsZWN0aW9uKTsKfQpmdW5jdGlvbiBpc05vZGVMaXN0IChjb2xsZWN0aW9uKSB7CiAgcmV0dXJuIGNvbGxlY3Rpb24uY29uc3RydWN0b3IubmFtZSA9PT0gJ05vZGVMaXN0JzsKfQpmdW5jdGlvbiBwYXJ0aWFsIChmbiwgLi4uYXJncykgewogIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHsKICAgIHRocm93IG5ldyBBZHNCeXBhc3NlckVycm9yKCdtdXN0IGdpdmUgYSBmdW5jdGlvbicpOwogIH0KICByZXR1cm4gKC4uLmlubmVyQXJncykgPT4gewogICAgcmV0dXJuIGZuKC4uLmFyZ3MuY29uY2F0KGlubmVyQXJncykpOwogIH07Cn0KZnVuY3Rpb24gaXNTdHJpbmcgKHZhbHVlKSB7CiAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB8fCAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpOwp9CmZ1bmN0aW9uIG5vcCAoKSB7Cn0KY29uc3Qgbm9uZSA9IG5vcDsKZnVuY3Rpb24gd2FpdCAobXNEZWxheSkgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dChyZXNvbHZlLCBtc0RlbGF5KTsKICB9KTsKfQpmdW5jdGlvbiB0cnlFdmVyeSAobXNJbnRlcnZhbCwgZm4pIHsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgIGNvbnN0IGhhbmRsZSA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgY29uc3QgcmVzdWx0ID0gZm4oKTsKICAgICAgaWYgKHJlc3VsdCAhPT0gbm9uZSkgewogICAgICAgIGNsZWFySW50ZXJ2YWwoaGFuZGxlKTsKICAgICAgICByZXNvbHZlKHJlc3VsdCk7CiAgICAgIH0KICAgIH0sIG1zSW50ZXJ2YWwpOwogIH0pOwp9CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInJlZ2lzdGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlcjsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImZpbmRIYW5kbGVyIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmaW5kSGFuZGxlcjsgfSk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwpjb25zdCBwYXR0ZXJucyA9IFtdOwpmdW5jdGlvbiByZWdpc3RlciAocGF0dGVybikgewogIHBhdHRlcm5zLnB1c2gocGF0dGVybik7Cn0KZnVuY3Rpb24gZGlzcGF0Y2hCeU9iamVjdCAocnVsZSwgdXJsXzYpIHsKICBjb25zdCBtYXRjaGVkID0gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJtYXAiXSkocnVsZSwgKHBhdHRlcm4sIHBhcnQpID0+IHsKICAgIGlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7CiAgICAgIHJldHVybiB1cmxfNltwYXJ0XS5tYXRjaChwYXR0ZXJuKTsKICAgIH0KICAgIGlmIChBcnJheS5pc0FycmF5KHBhdHRlcm4pKSB7CiAgICAgIGNvbnN0IFssICwgcl0gPSBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZpbmQiXSkocGF0dGVybiwgKHNwKSA9PiB7CiAgICAgICAgY29uc3QgbSA9IHVybF82W3BhcnRdLm1hdGNoKHNwKTsKICAgICAgICByZXR1cm4gbSB8fCB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9uZSJdOwogICAgICB9KTsKICAgICAgcmV0dXJuIHIgIT09IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl0gPyByIDogbnVsbDsKICAgIH0KICAgIHRocm93IG5ldyB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWRzQnlwYXNzZXJFcnJvciJdKCdpbnZhbGlkIHJ1bGUnKTsKICB9KTsKICBjb25zdCBwYXNzZWQgPSBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImV2ZXJ5Il0pKG1hdGNoZWQsICh2KSA9PiB7CiAgICByZXR1cm4gISF2OwogIH0pOwogIHJldHVybiBwYXNzZWQgPyBtYXRjaGVkIDogbnVsbDsKfQpmdW5jdGlvbiBkaXNwYXRjaEJ5UmVnRXhwIChydWxlLCB1cmxfMSkgewogIHJldHVybiB1cmxfMS5tYXRjaChydWxlKTsKfQpmdW5jdGlvbiBkaXNwYXRjaEJ5QXJyYXkgKHJ1bGVzLCB1cmxfMSwgdXJsXzMsIHVybF82KSB7CiAgY29uc3QgWywgLCByXSA9IE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZmluZCJdKShydWxlcywgKHJ1bGUpID0+IHsKICAgIGNvbnN0IG0gPSBkaXNwYXRjaChydWxlLCB1cmxfMSwgdXJsXzMsIHVybF82KTsKICAgIHJldHVybiBtID8gbSA6IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl07CiAgfSk7CiAgcmV0dXJuIHIgIT09IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl0gPyByIDogbnVsbDsKfQpmdW5jdGlvbiBkaXNwYXRjaEJ5U3RyaW5nIChydWxlLCB1cmxfMykgewogIGxldCBzY2hlbWUgPSAvXCp8aHR0cHM/fGZpbGV8ZnRwfGNocm9tZS1leHRlbnNpb24vOwogIGxldCBob3N0ID0gL1wqfChcKlwuKT8oW14vKl0rKS87CiAgbGV0IHBhdGggPSAvXC8uKi87CiAgbGV0IHRtcCA9IGBeKCR7c2NoZW1lLnNvdXJjZX0pOi8vKCR7aG9zdC5zb3VyY2V9KT8oJHtwYXRoLnNvdXJjZX0pJGA7CiAgbGV0IHVwID0gbmV3IFJlZ0V4cCh0bXApOwogIGNvbnN0IG1hdGNoZWQgPSBydWxlLm1hdGNoKHVwKTsKICBpZiAoIW1hdGNoZWQpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBzY2hlbWUgPSBtYXRjaGVkWzFdOwogIGhvc3QgPSBtYXRjaGVkWzJdOwogIGNvbnN0IHdjID0gbWF0Y2hlZFszXTsKICBjb25zdCBzZCA9IG1hdGNoZWRbNF07CiAgcGF0aCA9IG1hdGNoZWRbNV07CiAgaWYgKHNjaGVtZSA9PT0gJyonICYmICEvaHR0cHM/Ly50ZXN0KHVybF8zLnNjaGVtZSkpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAoc2NoZW1lICE9PSB1cmxfMy5zY2hlbWUpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAoc2NoZW1lICE9PSAnZmlsZScgJiYgaG9zdCAhPT0gJyonKSB7CiAgICBpZiAod2MpIHsKICAgICAgdXAgPSB1cmxfMy5ob3N0LmluZGV4T2Yoc2QpOwogICAgICBpZiAodXAgPCAwIHx8IHVwICsgc2QubGVuZ3RoICE9PSB1cmxfMy5ob3N0Lmxlbmd0aCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGhvc3QgIT09IHVybF8zLmhvc3QpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQogIHRtcCA9IHBhdGgucmVwbGFjZSgvWyouW1xdPysjXS9nLCAoYykgPT4gewogICAgaWYgKGMgPT09ICcqJykgewogICAgICByZXR1cm4gJy4qJzsKICAgIH0KICAgIHJldHVybiAnXFwnICsgYzsKICB9KTsKICBwYXRoID0gbmV3IFJlZ0V4cChgXiR7dG1wfSRgKTsKICBpZiAoIXBhdGgudGVzdCh1cmxfMy5wYXRoKSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiB1cmxfMzsKfQpmdW5jdGlvbiBkaXNwYXRjaEJ5RnVuY3Rpb24gKHJ1bGUsIHVybF8xLCB1cmxfMywgdXJsXzYpIHsKICByZXR1cm4gcnVsZSh1cmxfMSwgdXJsXzMsIHVybF82KTsKfQpmdW5jdGlvbiBkaXNwYXRjaCAocnVsZSwgdXJsXzEsIHVybF8zLCB1cmxfNikgewogIGlmIChBcnJheS5pc0FycmF5KHJ1bGUpKSB7CiAgICByZXR1cm4gZGlzcGF0Y2hCeUFycmF5KHJ1bGUsIHVybF8xLCB1cmxfMywgdXJsXzYpOwogIH0KICBpZiAodHlwZW9mIHJ1bGUgPT09ICdmdW5jdGlvbicpIHsKICAgIHJldHVybiBkaXNwYXRjaEJ5RnVuY3Rpb24ocnVsZSwgdXJsXzEsIHVybF8zLCB1cmxfNik7CiAgfQogIGlmIChydWxlIGluc3RhbmNlb2YgUmVnRXhwKSB7CiAgICByZXR1cm4gZGlzcGF0Y2hCeVJlZ0V4cChydWxlLCB1cmxfMSk7CiAgfQogIGlmIChPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImlzU3RyaW5nIl0pKHJ1bGUpKSB7CiAgICByZXR1cm4gZGlzcGF0Y2hCeVN0cmluZyhydWxlLCB1cmxfMyk7CiAgfQogIHJldHVybiBkaXNwYXRjaEJ5T2JqZWN0KHJ1bGUsIHVybF82KTsKfQpmdW5jdGlvbiBmaW5kSGFuZGxlciAoKSB7CiAgY29uc3QgdXJsXzEgPSB3aW5kb3cubG9jYXRpb24udG9TdHJpbmcoKTsKICBjb25zdCB1cmxfMyA9IHsKICAgIHNjaGVtZTogd2luZG93LmxvY2F0aW9uLnByb3RvY29sLnNsaWNlKDAsIC0xKSwKICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5ob3N0LAogICAgcGF0aDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHdpbmRvdy5sb2NhdGlvbi5oYXNoLAogIH07CiAgY29uc3QgdXJsXzYgPSB7CiAgICBzY2hlbWU6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCwKICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSwKICAgIHBvcnQ6IHdpbmRvdy5sb2NhdGlvbi5wb3J0LAogICAgcGF0aDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLAogICAgcXVlcnk6IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gsCiAgICBoYXNoOiB3aW5kb3cubG9jYXRpb24uaGFzaCwKICB9OwogIGNvbnN0IFtpLCBwYXR0ZXJuLCBtYXRjaGVkXSA9IE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZmluZCJdKShwYXR0ZXJucywgKHBhdHRlcm4pID0+IHsKICAgIGNvbnN0IG0gPSBkaXNwYXRjaChwYXR0ZXJuLnJ1bGUsIHVybF8xLCB1cmxfMywgdXJsXzYpOwogICAgcmV0dXJuIG0gPyBtIDogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXTsKICB9KTsKICBpZiAoaSA9PT0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGlmICghcGF0dGVybi5zdGFydCAmJiAhcGF0dGVybi5yZWFkeSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiB7CiAgICBzdGFydDogcGF0dGVybi5zdGFydCA/IE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sicGFydGlhbCJdKShwYXR0ZXJuLnN0YXJ0LCBtYXRjaGVkKSA6IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub3AiXSwKICAgIHJlYWR5OiBwYXR0ZXJuLnJlYWR5ID8gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJwYXJ0aWFsIl0pKHBhdHRlcm4ucmVhZHksIG1hdGNoZWQpIDogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vcCJdLAogIH07Cn0KIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicmF3VVNXIiwgZnVuY3Rpb24oKSB7IHJldHVybiByYXdVU1c7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJ1c3ciLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVzdzsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIkdNQVBJIiwgZnVuY3Rpb24oKSB7IHJldHVybiBHTUFQSTsgfSk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwpjb25zdCByYXdVU1cgPSBnZXRVbnNhZmVXaW5kb3coKTsKY29uc3QgdXN3ID0gZ2V0VW5zYWZlV2luZG93UHJveHkoKTsKY29uc3QgR01BUEkgPSBnZXRHcmVhc2VNb25rZXlBUEkoKTsKZnVuY3Rpb24gZ2V0VW5zYWZlV2luZG93ICgpIHsKICBsZXQgdyA9IG51bGw7CiAgdHJ5IHsKICAgIHcgPSB1bnNhZmVXaW5kb3c7CiAgfSBjYXRjaCAoZSkgewogICAgdHJ5IHsKICAgICAgdyA9ICgwLCBldmFsKSgndGhpcycpLmdsb2JhbDsKICAgIH0gY2F0Y2ggKGUpIHsKICAgIH0KICB9CiAgcmV0dXJuIHcgPyB3IDogKDAsIGV2YWwpKCd0aGlzJykud2luZG93Owp9CmZ1bmN0aW9uIGdldEdyZWFzZU1vbmtleUFQSSAoKSB7CiAgaWYgKHJhd1VTVy5nbG9iYWwpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBjb25zdCBnbSA9IHt9OwogIGlmICh0eXBlb2YgR01fb3BlbkluVGFiID09PSAnZnVuY3Rpb24nKSB7CiAgICBnbS5vcGVuSW5UYWIgPSBHTV9vcGVuSW5UYWI7CiAgfSBlbHNlIHsKICAgIGdtLm9wZW5JblRhYiA9IEdNLm9wZW5JblRhYjsKICB9CiAgaWYgKHR5cGVvZiBHTV9nZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgewogICAgZ20uZ2V0VmFsdWUgPSAobmFtZSwgZGVmYXVsdF8pID0+IHsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShHTV9nZXRWYWx1ZShuYW1lLCBkZWZhdWx0XykpOwogICAgfTsKICB9IGVsc2UgewogICAgZ20uZ2V0VmFsdWUgPSBHTS5nZXRWYWx1ZTsKICB9CiAgaWYgKHR5cGVvZiBHTV9zZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgewogICAgZ20uc2V0VmFsdWUgPSAobmFtZSwgdmFsdWUpID0+IHsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShHTV9zZXRWYWx1ZShuYW1lLCB2YWx1ZSkpOwogICAgfTsKICB9IGVsc2UgewogICAgZ20uc2V0VmFsdWUgPSBHTS5zZXRWYWx1ZTsKICB9CiAgaWYgKHR5cGVvZiBHTV9kZWxldGVWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgewogICAgZ20uZGVsZXRlVmFsdWUgPSAobmFtZSkgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEdNX2RlbGV0ZVZhbHVlKG5hbWUpKTsKICAgIH07CiAgfSBlbHNlIHsKICAgIGdtLmRlbGV0ZVZhbHVlID0gR00uZGVsZXRlVmFsdWU7CiAgfQogIGlmICh0eXBlb2YgR01feG1saHR0cFJlcXVlc3QgPT09ICdmdW5jdGlvbicpIHsKICAgIGdtLnhtbEh0dHBSZXF1ZXN0ID0gR01feG1saHR0cFJlcXVlc3Q7CiAgfSBlbHNlIHsKICAgIGdtLnhtbEh0dHBSZXF1ZXN0ID0gR00ueG1sSHR0cFJlcXVlc3Q7CiAgfQogIGlmICh0eXBlb2YgR01fcmVnaXN0ZXJNZW51Q29tbWFuZCA9PT0gJ2Z1bmN0aW9uJykgewogICAgZ20ucmVnaXN0ZXJNZW51Q29tbWFuZCA9IEdNX3JlZ2lzdGVyTWVudUNvbW1hbmQ7CiAgfSBlbHNlIHsKICAgIGdtLnJlZ2lzdGVyTWVudUNvbW1hbmQgPSB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9wIl07CiAgfQogIGlmICh0eXBlb2YgR01fZ2V0UmVzb3VyY2VVUkwgPT09ICdmdW5jdGlvbicpIHsKICAgIGdtLmdldFJlc291cmNlVXJsID0gKHJlc291cmNlTmFtZSkgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEdNX2dldFJlc291cmNlVVJMKHJlc291cmNlTmFtZSkpOwogICAgfTsKICB9IGVsc2UgaWYgKHR5cGVvZiBHTSA9PT0gJ29iamVjdCcgJiYgR00gJiYgR00uZ2V0UmVzb3VyY2VVcmwpIHsKICAgIGdtLmdldFJlc291cmNlVXJsID0gR00uZ2V0UmVzb3VyY2VVcmw7CiAgfQogIHJldHVybiBnbTsKfQpjb25zdCBNQUdJQ19LRVkgPSAnX19hZHNieXBhc3Nlcl9yZXZlcnNlX3Byb3h5X18nOwpmdW5jdGlvbiBnZXRVbnNhZmVXaW5kb3dQcm94eSAoKSB7CiAgY29uc3QgaXNGaXJlZm94ID0gdHlwZW9mIEluc3RhbGxUcmlnZ2VyICE9PSAndW5kZWZpbmVkJzsKICBjb25zdCBpc1dlYkV4dGVuc2lvbiA9IHR5cGVvZiBjbG9uZUludG8gPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBleHBvcnRGdW5jdGlvbiA9PT0gJ3VuZGVmaW5lZCc7CiAgaWYgKCFpc0ZpcmVmb3ggfHwgaXNXZWJFeHRlbnNpb24pIHsKICAgIHJldHVybiByYXdVU1c7CiAgfQogIGNvbnN0IGRlY29yYXRvciA9IHsKICAgIHNldCAodGFyZ2V0LCBrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkgPT09IE1BR0lDX0tFWSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0ID09PSB1bnNhZmVXaW5kb3cgJiYga2V5ID09PSAnb3BlbicpIHsKICAgICAgICBjb25zdCBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7CiAgICAgICAgZC52YWx1ZSA9IGNsb25lKGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGNvbnN0IHJ2ID0gdmFsdWUoKTsKICAgICAgICAgIHJldHVybiBjbG9uZUludG8ocnYsIHVuc2FmZVdpbmRvdyk7CiAgICAgICAgfSk7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0YXJnZXRba2V5XSA9IGNsb25lKHZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICBnZXQgKHRhcmdldCwga2V5KSB7CiAgICAgIGlmIChrZXkgPT09IE1BR0lDX0tFWSkgewogICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgIH0KICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRba2V5XTsKICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiB2YWx1ZTsKICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8ICh0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGUgIT09ICdvYmplY3QnKSkgewogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFByb3h5KHZhbHVlLCBkZWNvcmF0b3IpOwogICAgfSwKICAgIGFwcGx5ICh0YXJnZXQsIHNlbGYsIGFyZ3MpIHsKICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpOwogICAgICBpZiAodGFyZ2V0ID09PSB1bnNhZmVXaW5kb3cuT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7CiAgICAgICAgYXJnc1swXSA9IGFyZ3NbMF1bTUFHSUNfS0VZXTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0ID09PSB1bnNhZmVXaW5kb3cuRnVuY3Rpb24uYXBwbHkpIHsKICAgICAgICBzZWxmID0gc2VsZltNQUdJQ19LRVldOwogICAgICAgIGFyZ3NbMV0gPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzWzFdKTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0ID09PSB1bnNhZmVXaW5kb3cuZG9jdW1lbnQucXVlcnlTZWxlY3RvcikgewogICAgICAgIHNlbGYgPSBzZWxmW01BR0lDX0tFWV07CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCA9PT0gdW5zYWZlV2luZG93LmRvY3VtZW50LndyaXRlKSB7CiAgICAgICAgc2VsZiA9IHNlbGZbTUFHSUNfS0VZXTsKICAgICAgfQogICAgICBjb25zdCB1c2FyZ3MgPSBjbG9uZShhcmdzKTsKICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShzZWxmLCB1c2FyZ3MpOwogICAgfSwKICAgIGNvbnN0cnVjdCAodGFyZ2V0LCBhcmdzKSB7CiAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKTsKICAgICAgYXJncy51bnNoaWZ0KHVuZGVmaW5lZCk7CiAgICAgIGNvbnN0IHVzYXJncyA9IGNsb25lKGFyZ3MpOwogICAgICBjb25zdCBiaW5kID0gdW5zYWZlV2luZG93LkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kOwogICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KHRhcmdldCwgdXNhcmdzKSk7CiAgICB9LAogIH07CiAgcmV0dXJuIG5ldyBQcm94eSh1bnNhZmVXaW5kb3csIGRlY29yYXRvcik7Cn0KZnVuY3Rpb24gY2xvbmUgKHNhZmUpIHsKICBpZiAoc2FmZSA9PT0gbnVsbCB8fCAhKHNhZmUgaW5zdGFuY2VvZiBPYmplY3QpKSB7CiAgICByZXR1cm4gc2FmZTsKICB9CiAgaWYgKHNhZmUgPT09IHVuc2FmZVdpbmRvdykgewogICAgcmV0dXJuIHNhZmU7CiAgfQogIGlmIChzYWZlIGluc3RhbmNlb2YgU3RyaW5nKSB7CiAgICByZXR1cm4gc2FmZS50b1N0cmluZygpOwogIH0KICBpZiAoc2FmZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7CiAgICByZXR1cm4gZXhwb3J0RnVuY3Rpb24oc2FmZSwgdW5zYWZlV2luZG93LCB7CiAgICAgIGFsbG93Q3Jvc3NPcmlnaW5Bcmd1bWVudHM6IHRydWUsCiAgICB9KTsKICB9CiAgaWYgKHNhZmUgaW5zdGFuY2VvZiBBcnJheSkgewogICAgY29uc3QgdW5zYWZlID0gbmV3IHVuc2FmZVdpbmRvdy5BcnJheSgpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYWZlLmxlbmd0aDsgKytpKSB7CiAgICAgIHVuc2FmZS5wdXNoKGNsb25lKHNhZmVbaV0pKTsKICAgIH0KICAgIHJldHVybiB1bnNhZmU7CiAgfQogIGNvbnN0IHVuc2FmZSA9IG5ldyB1bnNhZmVXaW5kb3cuT2JqZWN0KCk7CiAgT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJmb3JFYWNoIl0pKHNhZmUsICh2LCBrKSA9PiB7CiAgICB1bnNhZmVba10gPSBjbG9uZSh2KTsKICB9KTsKICByZXR1cm4gdW5zYWZlOwp9CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImR1bXBDb25maWciLCBmdW5jdGlvbigpIHsgcmV0dXJuIGR1bXBDb25maWc7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJsb2FkQ29uZmlnIiwgZnVuY3Rpb24oKSB7IHJldHVybiBsb2FkQ29uZmlnOyB9KTsKIHZhciB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CiB2YXIgdXRpbF9kaXNwYXRjaGVyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpOwogdmFyIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CmNvbnN0IE1BTklGRVNUID0gWwogIHsKICAgIGtleTogJ3ZlcnNpb24nLAogICAgZGVmYXVsdF86IDAsCiAgICB2ZXJpZnkgKHYpIHsKICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiB2ID49IDA7CiAgICB9LAogICAgbm9ybWFsaXplOiB0b051bWJlciwKICB9LAogIHsKICAgIGtleTogJ2FsaWduX2NlbnRlcicsCiAgICBkZWZhdWx0XzogdHJ1ZSwKICAgIHZlcmlmeTogaXNCb29sZWFuLAogICAgbm9ybWFsaXplOiB0b0Jvb2xlYW4sCiAgfSwKICB7CiAgICBrZXk6ICdjaGFuZ2VfYmFja2dyb3VuZCcsCiAgICBkZWZhdWx0XzogdHJ1ZSwKICAgIHZlcmlmeTogaXNCb29sZWFuLAogICAgbm9ybWFsaXplOiB0b0Jvb2xlYW4sCiAgfSwKICB7CiAgICBrZXk6ICdyZWRpcmVjdF9pbWFnZScsCiAgICBkZWZhdWx0XzogdHJ1ZSwKICAgIHZlcmlmeTogaXNCb29sZWFuLAogICAgbm9ybWFsaXplOiB0b0Jvb2xlYW4sCiAgfSwKICB7CiAgICBrZXk6ICdzY2FsZV9pbWFnZScsCiAgICBkZWZhdWx0XzogdHJ1ZSwKICAgIHZlcmlmeTogaXNCb29sZWFuLAogICAgbm9ybWFsaXplOiB0b0Jvb2xlYW4sCiAgfSwKICB7CiAgICBrZXk6ICdsb2dfbGV2ZWwnLAogICAgZGVmYXVsdF86IDEsCiAgICB2ZXJpZnkgKHYpIHsKICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnbnVtYmVyJyAmJiB2ID49IDAgJiYgdiA8PSAyOwogICAgfSwKICAgIG5vcm1hbGl6ZTogdG9OdW1iZXIsCiAgfSwKXTsKY29uc3QgUEFUQ0hFUyA9IFsKICBhc3luYyAoKSA9PiB7CiAgICBjb25zdCBhbGlnbkNlbnRlciA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgnYWxpZ25fY2VudGVyJyk7CiAgICBjb25zdCBjaGFuZ2VCYWNrZ3JvdW5kID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKCdjaGFuZ2VfYmFja2dyb3VuZCcpOwogICAgY29uc3Qgc2NhbGVJbWFnZSA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgnc2NhbGVfaW1hZ2UnKTsKICAgIGNvbnN0IHJlZGlyZWN0SW1hZ2UgPSBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoJ3JlZGlyZWN0X2ltYWdlJyk7CiAgICBjb25zdCBhYyA9IHR5cGVvZiBhbGlnbkNlbnRlciA9PT0gJ2Jvb2xlYW4nOwogICAgaWYgKHR5cGVvZiBjaGFuZ2VCYWNrZ3JvdW5kICE9PSAnYm9vbGVhbicpIHsKICAgICAgYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLnNldFZhbHVlKCdjaGFuZ2VfYmFja2dyb3VuZCcsIGFjID8gYWxpZ25DZW50ZXIgOiB0cnVlKTsKICAgIH0KICAgIGlmICh0eXBlb2Ygc2NhbGVJbWFnZSAhPT0gJ2Jvb2xlYW4nKSB7CiAgICAgIGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5zZXRWYWx1ZSgnc2NhbGVfaW1hZ2UnLCBhYyA/IGFsaWduQ2VudGVyIDogdHJ1ZSk7CiAgICB9CiAgICBpZiAoIWFjKSB7CiAgICAgIGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5zZXRWYWx1ZSgnYWxpZ25fY2VudGVyJywgdHJ1ZSk7CiAgICB9CiAgICBpZiAodHlwZW9mIHJlZGlyZWN0SW1hZ2UgIT09ICdib29sZWFuJykgewogICAgICBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uc2V0VmFsdWUoJ3JlZGlyZWN0X2ltYWdlJywgdHJ1ZSk7CiAgICB9CiAgfSwKICBhc3luYyAoKSA9PiB7CiAgICBjb25zdCBleHRlcm5hbFNlcnZlclN1cHBvcnQgPSBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoJ2V4dGVybmFsX3NlcnZlcl9zdXBwb3J0Jyk7CiAgICBpZiAodHlwZW9mIGV4dGVybmFsU2VydmVyU3VwcG9ydCAhPT0gJ2Jvb2xlYW4nKSB7CiAgICAgIGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5zZXRWYWx1ZSgnZXh0ZXJuYWxfc2VydmVyX3N1cHBvcnQnLCBmYWxzZSk7CiAgICB9CiAgfSwKICBhc3luYyAoKSA9PiB7CiAgICBjb25zdCBsb2dMZXZlbCA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgnbG9nX2xldmVsJyk7CiAgICBpZiAodHlwZW9mIGxvZ0xldmVsICE9PSAnbnVtYmVyJykgewogICAgICBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uc2V0VmFsdWUoJ2xvZ19sZXZlbCcsIDEpOwogICAgfQogIH0sCiAgYXN5bmMgKCkgPT4gewogICAgYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmRlbGV0ZVZhbHVlKCdleHRlcm5hbF9zZXJ2ZXJfc3VwcG9ydCcpOwogIH0sCl07CmZ1bmN0aW9uIGlzQm9vbGVhbiAodikgewogIHJldHVybiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nOwp9CmZ1bmN0aW9uIHRvQm9vbGVhbiAodikgewogIHJldHVybiAhIXY7Cn0KZnVuY3Rpb24gdG9OdW1iZXIgKHYpIHsKICByZXR1cm4gcGFyc2VJbnQodiwgMTApOwp9CmFzeW5jIGZ1bmN0aW9uIHNlbml0eUNoZWNrICgpIHsKICBsZXQgdmVyaWZ5UmVzdWx0cyA9IE1BTklGRVNULm1hcChhc3luYyAoZGVzY3JpcHRvcikgPT4gewogICAgY29uc3QgcnYgPSBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoZGVzY3JpcHRvci5rZXkpOwogICAgcmV0dXJuIGRlc2NyaXB0b3IudmVyaWZ5KHJ2KTsKICB9KTsKICB2ZXJpZnlSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwodmVyaWZ5UmVzdWx0cyk7CiAgY29uc3Qgb2sgPSBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImV2ZXJ5Il0pKHZlcmlmeVJlc3VsdHMsIHYgPT4gdik7CiAgaWYgKCFvaykgewogICAgYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLnNldFZhbHVlKCd2ZXJzaW9uJywgMCk7CiAgfQp9CmFzeW5jIGZ1bmN0aW9uIG1pZ3JhdGUgKCkgewogIGxldCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgndmVyc2lvbicpOwogIGlmIChjdXJyZW50VmVyc2lvbiAhPT0gMCAmJiAhY3VycmVudFZlcnNpb24pIHsKICAgIHRocm93IG5ldyB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWRzQnlwYXNzZXJFcnJvciJdKCdpbnZhbGlkIHZlcnNpb24nKTsKICB9CiAgd2hpbGUgKGN1cnJlbnRWZXJzaW9uIDwgUEFUQ0hFUy5sZW5ndGgpIHsKICAgIFBBVENIRVNbY3VycmVudFZlcnNpb25dKCk7CiAgICArK2N1cnJlbnRWZXJzaW9uOwogIH0KICBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uc2V0VmFsdWUoJ3ZlcnNpb24nLCBjdXJyZW50VmVyc2lvbik7Cn0KYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZyAoKSB7CiAgYXdhaXQgc2VuaXR5Q2hlY2soKTsKICBhd2FpdCBtaWdyYXRlKCk7CiAgT2JqZWN0KHV0aWxfZGlzcGF0Y2hlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJyZWdpc3RlciJdKSh7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eYWRzYnlwYXNzZXJcLmdpdGh1YlwuaW8kLywKICAgICAgcGF0aDogL15cL2NvbmZpZ3VyZVwuaHRtbCQvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgYXdhaXQgd2FpdEZvclBhZ2UoKTsKICAgICAgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ1c3ciXS5jb21taXQgPSBhc3luYyAoZGF0YSkgPT4gewogICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7CiAgICAgICAgICBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uc2V0VmFsdWUoaywgdik7CiAgICAgICAgfQogICAgICB9OwogICAgICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInVzdyJdLnJlbmRlcih7CiAgICAgICAgdmVyc2lvbjogYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKCd2ZXJzaW9uJyksCiAgICAgICAgb3B0aW9uczogewogICAgICAgICAgYWxpZ25fY2VudGVyOiB7CiAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsCiAgICAgICAgICAgIHZhbHVlOiBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoJ2FsaWduX2NlbnRlcicpLAogICAgICAgICAgICBsYWJlbDogJ0FsaWduIENlbnRlcicsCiAgICAgICAgICAgIGhlbHA6ICdBbGlnbiBpbWFnZSB0byB0aGUgY2VudGVyIGlmIHBvc3NpYmxlLiAoZGVmYXVsdDogZW5hYmxlZCknLAogICAgICAgICAgfSwKICAgICAgICAgIGNoYW5nZV9iYWNrZ3JvdW5kOiB7CiAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsCiAgICAgICAgICAgIHZhbHVlOiBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoJ2NoYW5nZV9iYWNrZ3JvdW5kJyksCiAgICAgICAgICAgIGxhYmVsOiAnQ2hhbmdlIEJhY2tncm91bmQnLAogICAgICAgICAgICBoZWxwOiAnVXNlIEZpcmVmb3gtbGlrZSBpbWFnZSBiYWNrZ3JvdW5kIGlmIHBvc3NpYmxlLiAoZGVmYXVsdDogZW5hYmxlZCknLAogICAgICAgICAgfSwKICAgICAgICAgIHJlZGlyZWN0X2ltYWdlOiB7CiAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsCiAgICAgICAgICAgIHZhbHVlOiBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIkdNQVBJIl0uZ2V0VmFsdWUoJ3JlZGlyZWN0X2ltYWdlJyksCiAgICAgICAgICAgIGxhYmVsOiAnUmVkaXJlY3QgSW1hZ2UnLAogICAgICAgICAgICBoZWxwOiBbCiAgICAgICAgICAgICAgJ0RpcmVjdGx5IG9wZW4gaW1hZ2UgbGluayBpZiBwb3NzaWJsZS4gKGRlZmF1bHQ6IGVuYWJsZWQpJywKICAgICAgICAgICAgICAnSWYgZGlzYWJsZWQsIHJlZGlyZWN0aW9uIHdpbGwgb25seSB3b3JrcyBvbiBsaW5rIHNob3J0ZW5lciBzaXRlcy4nLAogICAgICAgICAgICBdLmpvaW4oJzxici8+XG4nKSwKICAgICAgICAgIH0sCiAgICAgICAgICBzY2FsZV9pbWFnZTogewogICAgICAgICAgICB0eXBlOiAnY2hlY2tib3gnLAogICAgICAgICAgICB2YWx1ZTogYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKCdzY2FsZV9pbWFnZScpLAogICAgICAgICAgICBsYWJlbDogJ1NjYWxlIEltYWdlJywKICAgICAgICAgICAgaGVscDogJ1doZW4gaW1hZ2UgbG9hZGVkLCBzY2FsZSBpdCB0byBmaXQgd2luZG93IGlmIHBvc3NpYmxlLiAoZGVmYXVsdDogZW5hYmxlZCknLAogICAgICAgICAgfSwKICAgICAgICAgIGxvZ19sZXZlbDogewogICAgICAgICAgICB0eXBlOiAnc2VsZWN0JywKICAgICAgICAgICAgdmFsdWU6IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siR01BUEkiXS5nZXRWYWx1ZSgnbG9nX2xldmVsJyksCiAgICAgICAgICAgIG1lbnU6IFsKICAgICAgICAgICAgICBbMCwgJzAgKHF1aWV0KSddLAogICAgICAgICAgICAgIFsxLCAnMSAoZGVmYXVsdCknXSwKICAgICAgICAgICAgICBbMiwgJzIgKHZlcmJvc2UpJ10sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIGxhYmVsOiAnTG9nIExldmVsJywKICAgICAgICAgICAgaGVscDogWwogICAgICAgICAgICAgICdMb2cgbGV2ZWwgaW4gZGV2ZWxvcGVyIGNvbnNvbGUuIChkZWZhdWx0OiAxKScsCiAgICAgICAgICAgICAgJzAgd2lsbCBub3QgcHJpbnQgYW55dGhpbmcgaW4gY29uc29sZS4nLAogICAgICAgICAgICAgICcxIHdpbGwgb25seSBwcmludCBsb2dzIG9uIGFmZmVjdGVkIHNpdGVzLicsCiAgICAgICAgICAgICAgJzIgd2lsbCBwcmludCBvbiBhbnkgc2l0ZXMuJywKICAgICAgICAgICAgXS5qb2luKCc8YnIvPlxuJyksCiAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgIH0pOwogICAgfSwKICB9KTsKfQpmdW5jdGlvbiB3YWl0Rm9yUGFnZSAoKSB7CiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjb25zdCBpID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICBpZiAodXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ1c3ciXS5yZW5kZXIpIHsKICAgICAgICBjbGVhckludGVydmFsKGkpOwogICAgICAgIHJlc29sdmUoKTsKICAgICAgfQogICAgfSwgNTApOwogIH0pOwp9CmFzeW5jIGZ1bmN0aW9uIGR1bXBDb25maWcgKCkgewogIGxldCBydiA9IE1BTklGRVNULm1hcChhc3luYyAoZGVzY3JpcHRvcikgPT4gewogICAgcmV0dXJuIFtkZXNjcmlwdG9yLmtleSwgYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJHTUFQSSJdLmdldFZhbHVlKGRlc2NyaXB0b3Iua2V5KV07CiAgfSk7CiAgcnYgPSBhd2FpdCBQcm9taXNlLmFsbChydik7CiAgY29uc3QgbyA9IHt9OwogIGZvciAoY29uc3QgW2ssIHZdIG9mIHJ2KSB7CiAgICBvW2tdID0gdjsKICB9CiAgcmV0dXJuIG87Cn0KIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZGVidWciLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRlYnVnOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiaW5mbyIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5mbzsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgIndhcm4iLCBmdW5jdGlvbigpIHsgcmV0dXJuIHdhcm47IH0pOwogdmFyIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKY29uc3QgcXVpZXQgPSBmYWxzZTsKZnVuY3Rpb24gbG9nIChtZXRob2QsIGFyZ3MpIHsKICBpZiAocXVpZXQpIHsKICAgIHJldHVybjsKICB9CiAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpOwogIGlmIChPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImlzU3RyaW5nIl0pKGFyZ3NbMF0pKSB7CiAgICBhcmdzWzBdID0gJ0Fkc0J5cGFzc2VyOiAnICsgYXJnc1swXTsKICB9IGVsc2UgewogICAgYXJncy51bnNoaWZ0KCdBZHNCeXBhc3NlcjonKTsKICB9CiAgY29uc3QgZiA9IGNvbnNvbGVbbWV0aG9kXTsKICBpZiAodHlwZW9mIGYgPT09ICdmdW5jdGlvbicpIHsKICAgIGYuYXBwbHkoY29uc29sZSwgYXJncyk7CiAgfQp9CmZ1bmN0aW9uIGRlYnVnICgpIHsKICBsb2coJ2RlYnVnJywgYXJndW1lbnRzKTsKfQpmdW5jdGlvbiBpbmZvICgpIHsKICBsb2coJ2luZm8nLCBhcmd1bWVudHMpOwp9CmZ1bmN0aW9uIHdhcm4gKCkgewogIGxvZygnd2FybicsIGFyZ3VtZW50cyk7Cn0KIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIHZhciBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmFrb2FtXC5uZXQkLywKICAgIHBhdGg6IC9eXC9kb3dubG9hZFwvKFteL10rKVwvLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBsZXQgZGF0YSA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KGxvY2F0aW9uLmhyZWYsIG0ucGF0aFsxXSk7CiAgICB0cnkgewogICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhcm4oJ0pTT04gZXJyb3I6JywgZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhkYXRhLmRpcmVjdF9saW5rKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/Y29vbHJvbVwuY29tJC8sCiAgICBwYXRoOiAvXlwvZGxwb3BcLnBocCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbWF0Y2hlcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249IihbXiJdKykiPi8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1hdGNoZXNbMV0pOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eKHd3d1wuKT9kbC1wcm90ZWN0XC5jb20kLywKICAgICAgcGF0aDogL1wvW0EtWjAtOV0rLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGlmIChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2NhcHRjaGEnKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBmID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2Zvcm1bbmFtZT1jY2VydXJlXScpOwogICAgICBpZiAoZikgewogICAgICAgIGNvbnN0IGlJbiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbnB1dFtpZD1pbl0nKTsKICAgICAgICBpZiAoaUluLnZhbHVlKSB7CiAgICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg2MDApOwogICAgICAgICAgZi5zdWJtaXQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgWywgLCBwXSA9IGF3YWl0IHdhaXRET00oaUluLCB7CiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsCiAgICAgICAgICB9LCAobXV0YXRpb24pID0+IHsKICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi50YXJnZXQudmFsdWUgfHwgbXV0YXRpb24uYXR0cmlidXRlTmFtZSAhPT0gJ3ZhbHVlJykgewogICAgICAgICAgICAgIHJldHVybiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpSW4udmFsdWUgPSAnVHJhY2tpbmcgdG9vIG11Y2ggaHVydHMgdXNlcnNcJyBwcml2YWN5JzsKICAgICAgICAgICAgaWYgKCFjYW5GYXN0UmVkaXJlY3QoKSkgewogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNjAwKTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHApIHsKICAgICAgICAgICAgYXdhaXQgcDsKICAgICAgICAgICAgZi5zdWJtaXQoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGwgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCQoJyNzbGlua3MgPiBhJyk7CiAgICAgIGlmIChsLmxlbmd0aCA9PT0gMSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsWzBdLmhyZWYpOwogICAgICB9CiAgICB9LAogIH0pOwogIGZ1bmN0aW9uIGNhbkZhc3RSZWRpcmVjdCAoKSB7CiAgICByZXR1cm4gIV9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdmb3JtW25hbWU9Y2NlcnVyZV0nKS5vbnN1Ym1pdCAmJiAhX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2Zvcm1bbmFtZT1jY2VydXJlXSBpbnB1dFtuYW1lPXB3ZF0nKTsKICB9CiAgZnVuY3Rpb24gd2FpdERPTSAoZWxlbWVudCwgY29uZmlnLCBmbikgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4gewogICAgICAgIGNvbnN0IFtrLCB2LCByXSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5maW5kKG11dGF0aW9ucywgZm4pOwogICAgICAgIGlmIChrICE9PSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZSkgewogICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgcmVzb2x2ZShbaywgdiwgcl0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgY29uZmlnKTsKICAgIH0pOwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmVsc2ZpbGVcLm9yZyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZG93biA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjYnRuX2Rvd25sb2FkJyk7CiAgICBpZiAoZG93bikgewogICAgICBkb3duLmNsaWNrKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGNvdW50ZG93biA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZnJtZGxjZW50ZXInKTsKICAgIGNvbnN0IG8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7CiAgICAgIGNvbnN0IHN1Ym1pdCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbnB1dFt0eXBlPSJzdWJtaXQiXVtuYW1lPSJtZXRob2RfZnJlZSJdJyk7CiAgICAgIGlmIChzdWJtaXQpIHsKICAgICAgICBzdWJtaXQuY2xpY2soKTsKICAgICAgfQogICAgfSk7CiAgICBvLm9ic2VydmUoY291bnRkb3duLCB7CiAgICAgIGNoaWxkTGlzdDogdHJ1ZQogICAgfSk7CiAgICBsZXQgc2NyaXB0ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC8uKmV2YWxcKGZ1bmN0aW9uXChwLGEsYyxrLGUsZFwpLiovKTsKICAgIGlmIChzY3JpcHQubGVuZ3RoID4gMCkgewogICAgICBzY3JpcHQgPSBzY3JpcHRbMF0ucmVwbGFjZSgnfHxpbXBvcnRhbnQnLCAnfDB8aW1wb3J0YW50Jyk7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ldmlsKHNjcmlwdCk7CiAgICB9CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP2VtYmVkdXBsb2FkXC5jb20kLywKICAgIHBhdGg6IC9eXC8kLywKICAgIHF1ZXJ5OiAvXlw/XHd7Mn09XHcrJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBkb3dubG9hZFBhZ2UgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmNhdGVnb3JpZXMgYVt0YXJnZXQ9X2JsYW5rXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRvd25sb2FkUGFnZSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLmZpbGVwcm9qZWN0XC5jb21cLmJyJC8sCiAgICBwYXRoOiAvXlwvZmlsZXNcLysvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvPGEgaWQ9ImRvd24iIGhyZWY9IihbXiJdKykiPi8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1bMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14od3d3XC4pP2luZGlzaGFyZVwuKG9yZ3xtZSkkLywKICAgICAgL15iZHVwbG9hZFwuKGluZm98YXNpYSkkLywKICAgICAgL151cGdyYW5kXC5zaXRlJC8sCiAgICAgIC9eM3pmaWxlXC5uZXQkLywKICAgICAgL151cGxvYWRyYXJcLmNvbSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGJ0biA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdidXR0b24jZG93bmxvYWRidG4uZG93bmxvYWRidG4nKTsKICAgIGJ0bi5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7CiAgICBidG4uY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmluc3VyYW5jZS13YWlmdVwuY2YkLywKICAgIHF1ZXJ5OiAvdT0oLispJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Zvcm0nKTsKICAgIGNvbnN0IGFyZ3MgPSB7fTsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5mb3JFYWNoKGYsICh2KSA9PiB7CiAgICAgIGFyZ3Nbdi5uYW1lXSA9IHYudmFsdWU7CiAgICB9KTsKICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnBvc3QoZi5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpLCBhcmdzKTsKICAgIGNvbnN0IGwgPSByZXNwb25zZS5tYXRjaCgvd2luZG93XC5sb2NhdGlvblwuaHJlZi4nKFteJ10rKSc7Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobFsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP2poZWJlcmdcLm5ldCQvLAogICAgcGF0aDogL15cL2NhcHRjaGFcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmRsLWJ1dHRvbicpLmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP2poZWJlcmdcLm5ldCQvLAogICAgcGF0aDogL15cL3JlZGlyZWN0XC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgJ3VzZSBzdHJpY3QnOwogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZUFsbFRpbWVyKCk7CiAgICBjb25zdCBtYXRjaGVzID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC8nc2x1Zyc6XHMqJyhbXiddKyknLFxzKidob3N0ZXInOlxzKicoW14nXSspJy8pOwogICAgY29uc3Qgc2x1ZyA9IG1hdGNoZXNbMV07CiAgICBjb25zdCBob3N0ZXIgPSBtYXRjaGVzWzJdOwogICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdCgnL2dldC9saW5rLycsIHsKICAgICAgc2x1ZywKICAgICAgaG9zdGVyLAogICAgfSk7CiAgICBjb25zdCByZXNwSlNPTiA9IEpTT04ucGFyc2UocmVzcG9uc2UpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJlc3BKU09OLnVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15taXJyb3JhY2VcLihjb218b3JnKSQvLAogICAgcGF0aDogL15cL21cLy4rXC9cZCsvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbWEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYS51ay1idXR0b246bnRoLWNoaWxkKDIpJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobWEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXih3d3dcLik/bWlycm9yY3JlYXRvclwuY29tJC8sCiAgICAgIC9eKHd3d1wuKT9taXJyb3JlZFwudG8kLywKICAgIF0sCiAgICBwYXRoOiAvXlwvZG93bmxpbmtcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5jb2wtc20uY2VudGVyZWQuaGlnaGxpZ2h0IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14od3d3XC4pP21pcnJvcmNyZWF0b3JcLmNvbSQvLAogICAgICAvXih3d3dcLik/bWlycm9yZWRcLnRvJC8sCiAgICBdLAogICAgcGF0aDogL15cL2ZpbGVzXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNkbF9mb3JtJykuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15tdWx0aWZpbGVtaXJyb3JcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbGNvZGUgZm9ybSBidXR0b24nKTsKICAgIG0uY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wubXVsdGl1cGZpbGVcLmNvbSQvLAogICAgcGF0aDogL15cL2ZcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN5dzAnKTsKICAgIGYuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15teWxpbmtnZW5cLmNvbSQvLAogICAgcGF0aDogL15cL3BcLyguKykkLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoJy9nLycgKyBtLnBhdGhbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebXlsaW5rZ2VuXC5jb20kLywKICAgIHBhdGg6IC9eXC9nXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbWFpbi1jb250ZW50IGEuYnRuLmJ0bi1kZWZhdWx0Jyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/cHV0bG9ja2VyXC5jb20kLywKICAgIHBhdGg6IC9eXC9maWxlXC9bMC05QS1GXSskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGMgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2NvbmZpcm1fZm9ybScpOwogICAgYy5zdWJtaXQoKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnVwbG9hZGhhdmVuXC5jb20kLywKICAgIHBhdGg6IC9eXC9kb3dubG9hZFwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwMDApOwogICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuY29udGFjdEZvcm0gI2Rvd25sb2FkTm93QnRuLmJ0bi5idG4tcHJpbWFyeScpOwogICAgZi5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT91cG1pcnJvclwuaW5mbyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNldENvb2tpZSgndXNlcicsICdwcHAnKTsKICAgIGlmIChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2NvdW50RG93blRleHQnKSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZG9jdW1lbnQubG9jYXRpb24udG9TdHJpbmcoKSk7CiAgICB9CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3ZpZHRvXC5tZSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjYnRuX2Rvd25sb2FkJykuZm9ybTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDYgKiAxMDAwKTsKICAgIGYuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnp1cGxvYWRcLm1lJC8sCiAgICAgIC9eemVlZmlsZXNcLmRvd25sb2FkJC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgeiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdidXR0b24jbGlua19idXR0b24nKTsKICAgIHoucmVtb3ZlQXR0cmlidXRlKCdkaXNhYmxlZCcpOwogICAgei5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eMDFcLm5sJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lmcmFtZSNyZWRpcmVjdGZyYW1lJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZi5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eMTBjb1wuKGJpenx4eXp8Y298bWUpJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5nbycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGQuZGF0YXNldC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/KDFiZXwxZGwpXC5iaXokLywKICAgIHBhdGg6IC9eXC96XC5waHAkLywKICAgIHF1ZXJ5OiAvXlw/KC4rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG0ucXVlcnlbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKDFiZXwxZGwpXC5iaXokLywKICAgIHBhdGg6IC9eXC9banRdXC5waHAkLywKICAgIHF1ZXJ5OiAvXlw/cz0vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuai1saW5rJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXjFpbmtcLihjY3xpbmZvKSQvLAogICAgcGF0aDogL15cL1x3KyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IHVybCA9IGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvcignW25hbWU9a2V5d29yZHNdJykuY29udGVudDsKICAgIGNvbnN0IHVybENoZWNrID0gdXJsLm1hdGNoKC9eaHR0cHM/OlwvXC8vKTsKICAgIGlmICghdXJsQ2hlY2spIHsKICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgdXJsOwogICAgfQogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pPzF0aW55XC5uZXQkLywKICAgIHBhdGg6IC9cL1x3Ky8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBkaXJlY3RVcmwgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3dpbmRvd1wubG9jYXRpb249JyhbXiddKyknOy8pOwogICAgaWYgKCFkaXJlY3RVcmwpIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdzY3JpcHQgY29udGVudCBjaGFuZ2VkJyk7CiAgICB9CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZGlyZWN0VXJsWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXjF2XC50byQvLAogICAgcGF0aDogL15cL3RcL1thLXpBLVowLTkvPV0rLywKICB9LAogIGFzeW5jIHN0YXJ0ICgpIHsKICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKCcvdC8nLCAnL3NhbGllbmRvLycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT80ZnVuXC50dyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjb3JpZ2luYWxfdXJsJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaS52YWx1ZSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15hZDJsaW5rc1wuY29tJC8sCiAgICBwYXRoOiAvXlwvXHctLiskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpLCB7CiAgICAgIHBvc3Q6IHsKICAgICAgICBpbWFnZTogJ1NraXAgQWQuJywKICAgICAgfSwKICAgIH0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYWQ0XC5mciQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBzID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC8ic3JjIiwgIihbXiJdKykiLyk7CiAgICBpZiAoIXMpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhcm4oJ2NoYW5nZWQnKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHNbMV0pOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eYWQ3XC5iaXokLywKICAgICAgcGF0aDogL15cL1xkK1wvKC4qKSQvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0IChtKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBsZXQgcmVkaXJlY3RMaW5rID0gbS5wYXRoWzFdOwogICAgICBpZiAoIXJlZGlyZWN0TGluay5tYXRjaCgvXmh0dHBzPzpcL1wvLykpIHsKICAgICAgICByZWRpcmVjdExpbmsgPSAnaHR0cDovLycgKyByZWRpcmVjdExpbms7CiAgICAgIH0KICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJlZGlyZWN0TGluayk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eYWQ3XC5iaXokLywKICAgICAgcGF0aDogL15cL1x3KyQvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICAgIGNvbnN0IHNjcmlwdCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygnY29uc3Qgcl91cmwnKTsKICAgICAgbGV0IHVybCA9IHNjcmlwdC5tYXRjaCgvJnVybD0oW14mXSspLyk7CiAgICAgIHVybCA9IHVybFsxXTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgICB9LAogIH0pOwp9KSgpOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXih3d3dcLik/YWRiXC51ZyQvLAogICAgICAgIC9eKHd3d1wuKT9seW5rXC5teSQvLAogICAgICAgIC9eKHd3d1wuKT9hZHlvdVwuKGNvfG1lKSQvLAogICAgICBdLAogICAgICBwYXRoOiAvXig/IVwvKD86cHJpdmFjeXx0ZXJtc3xjb250YWN0KFwvLiopP3wjLiopPyQpLiokLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBjb25zdCBtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC90b3BcLmxvY2F0aW9uXC5ocmVmPSIoW14iXSspIi8pOwogICAgICBpZiAobSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtWzFdKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IGF3YWl0IGdldEFyZ3VtZW50cygpOwogICAgICB0cnlMaW5rKGFyZ3MpOwogICAgfSwKICB9KTsKICBmdW5jdGlvbiBnZXRBcmd1bWVudHMgKCkgewogICAgY29uc3QgUEFUVEVSTiA9IC9ce1xzKl9hcmdzW159XStcfVtefV0rXH0vOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IG0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoUEFUVEVSTik7CiAgICAgIGlmIChtKSB7CiAgICAgICAgcmVzb2x2ZShtKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7CiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7CiAgICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKG5vZGUpID0+IHsKICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnc2NyaXB0JykgewogICAgICAgICAgICAgIGNvbnN0IG0gPSBub2RlLnRleHRDb250ZW50Lm1hdGNoKFBBVFRFUk4pOwogICAgICAgICAgICAgIGlmIChtKSB7CiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgICAgICByZXNvbHZlKG0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHsKICAgICAgICBjaGlsZExpc3Q6IHRydWUsCiAgICAgIH0pOwogICAgfSkudGhlbigobSkgPT4gewogICAgICByZXR1cm4gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmV2aWwoYCgke21bMF19KWApOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIHRyeUxpbmsgKGFyZ3MpIHsKICAgIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSArICcvc2tpcF90aW1lcic7CiAgICBjb25zdCBpID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdCh1cmwsIGFyZ3MpLnRoZW4oKHRleHQpID0+IHsKICAgICAgICBjb25zdCBqaiA9IEpTT04ucGFyc2UodGV4dCk7CiAgICAgICAgaWYgKCFqai5lcnJvcnMgJiYgamoubWVzc2FnZXMpIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaSk7CiAgICAgICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoamoubWVzc2FnZXMudXJsKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwgMTAwMCk7CiAgfQp9KSgpOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eYWRmXC5seSQvLAogICAgICBwYXRoOiAvXlwvcmVkaXJlY3RpbmdcLyguKykkLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAobSkgewogICAgICBjb25zdCB1cmwgPSBhdG9iKG0ucGF0aFsxXSk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBwYXRoOiAvXC9sb2NrZWQkLywKICAgICAgcXVlcnk6IC91cmw9KFteJl0rKS8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlc2V0Q29va2llcygpOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2V0Q29va2llKCdGTFlTRVNTSUQnLCBnZW5lcmF0ZVJhbmRvbVNlc3Npb25Db29raWUoNDApKTsKICAgICAgY29uc3QgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KG0ucXVlcnlbMV0pOwogICAgICBpZiAodXJsLm1hdGNoKC9eaHR0cC8pKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRvY3VtZW50LnJlZmVycmVyKTsKICAgICAgfQogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBwYXRoOiAvcHVzaHJlZGlyZWN0LywKICAgICAgcXVlcnk6IC8uKmRlc3Q9KFteJl0rKS8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgY29uc3QgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KG0ucXVlcnlbMV0pOwogICAgICBpZiAodXJsLm1hdGNoKC9eaHR0cC8pKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgICAgIH0KICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgcXVlcnk6IC9scD1hZGZseV9hbGxvdyYuKmhyZWY9KFteJl0rKS8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgY29uc3QgdXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KG0ucXVlcnlbMV0pOwogICAgICBpZiAodXJsLm1hdGNoKC9eaHR0cC8pKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgICAgIH0KICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGUgKCkgewogICAgICBjb25zdCBoID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2h0bWxbaWQ9Im1haW5faHRtbCJdJyk7CiAgICAgIGlmIChoKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0sCiAgICBhc3luYyBzdGFydCAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuZG9jdW1lbnQud3JpdGUgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9wOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmJ0b2EgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9wOwogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZXRDb29raWUoJ0ZMWVNFU1NJRCcsIGdlbmVyYXRlUmFuZG9tU2Vzc2lvbkNvb2tpZSg0MCkpOwogICAgICBjb25zdCBjbG9zZSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdkaXZbb25jbGljaz0iY2xvc2VfYmFyKCk7Il0nKTsKICAgICAgaWYgKGNsb3NlKSB7CiAgICAgICAgY2xvc2UuY2xpY2soKTsKICAgICAgfQogICAgICBsZXQgcnYgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KGxvY2F0aW9uLmhyZWYsICcnLCB7CiAgICAgICAgJ09yaWdpbic6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lLAogICAgICAgICdSZWZlcmVyJzogX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmUsCiAgICAgICAgJ1gtUmVxdWVzdGVkLVdpdGgnOiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZSwKICAgICAgfSk7CiAgICAgIHJ2ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnRvRE9NKHJ2KTsKICAgICAgcnYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3ZhciB5c21tID0gJyhbXiddKyknLywgcnYpOwogICAgICBydiA9IHJ2WzFdOwogICAgICBydiA9IGRlY29kZVRva2VuKHJ2KTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJ2KTsKICAgIH0sCiAgfSk7CiAgZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21TZXNzaW9uQ29va2llIChsZW5ndGgpIHsKICAgIGNvbnN0IHJ2ID0gW107CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJ2LnB1c2goTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuY2hhckF0KDIpKTsKICAgIH0KICAgIHJldHVybiBydi5qb2luKCcnKTsKICB9CiAgZnVuY3Rpb24gZGVjb2RlVG9rZW4gKHRva2VuKSB7CiAgICBsZXQgYSA9ICcnOwogICAgbGV0IGIgPSAnJzsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKGkgJSAyID09PSAwKSB7CiAgICAgICAgYSA9IGEgKyB0b2tlbi5jaGFyQXQoaSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYiA9IHRva2VuLmNoYXJBdChpKSArIGI7CiAgICAgIH0KICAgIH0KICAgIHRva2VuID0gYSArIGI7CiAgICBhID0gdG9rZW4uc3BsaXQoJycpOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CiAgICAgIGlmICgvXGQvLnRlc3QoYVtpXSkpIHsKICAgICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBhLmxlbmd0aDsgKytqKSB7CiAgICAgICAgICBpZiAoL1xkLy50ZXN0KGFbal0pKSB7CiAgICAgICAgICAgIGIgPSBhW2ldIF4gYVtqXTsKICAgICAgICAgICAgaWYgKGIgPCAxMCkgewogICAgICAgICAgICAgIGFbaV0gPSBiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGkgPSBqOwogICAgICAgICAgICBqID0gYS5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0b2tlbiA9IGEuam9pbignJyk7CiAgICB0b2tlbiA9IGF0b2IodG9rZW4pOwogICAgdG9rZW4gPSB0b2tlbi5zdWJzdHJpbmcoMTYpOwogICAgdG9rZW4gPSB0b2tlbi5zdWJzdHJpbmcoMCwgdG9rZW4ubGVuZ3RoIC0gMTYpOwogICAgaWYgKGxvY2F0aW9uLmhhc2gpIHsKICAgICAgdG9rZW4gKz0gbG9jYXRpb24uaGFzaDsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9Cn0pKCk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly9hZGZvYy51cy8qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmJvZHk7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgIGxldCBvID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNzaG93U2tpcCcpOwogICAgICAgIGlmIChvKSB7CiAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICBvID0gby5xdWVyeVNlbGVjdG9yKCdhJyk7CiAgICAgICAgICByZXNvbHZlKG8uaHJlZik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7CiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICAgIHN1YnRyZWU6IHRydWUsCiAgICAgIH0pOwogICAgfSk7CiAgICBjb25zdCB1cmwgPSBhd2FpdCBwcm9taXNlOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP2FkbG90XC51cyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBzY3JpcHQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoJ2Zvcm0nKTsKICAgIGNvbnN0IHAgPSAvbmFtZT0nKFteJ10rKScgdmFsdWU9JyhbXiddKyknL2c7CiAgICBjb25zdCBvcHQgPSB7CiAgICAgIGltYWdlOiAnICcsCiAgICB9OwogICAgbGV0IHRtcCA9IG51bGw7CiAgICB3aGlsZSAoKHRtcCA9IHAuZXhlYyhzY3JpcHQpKSkgewogICAgICBvcHRbdG1wWzFdXSA9IHRtcFsyXTsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnJywgewogICAgICBwYXRoOiBvcHQsCiAgICB9KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmFkbXlcLmxpbmskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZm9ybS5lZGl0X2xpbmsnKTsKICAgIGYuc3VibWl0KCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP2FoLWluZm9ybWF0aXF1ZVwuY29tJC8sCiAgICBwYXRoOiAvXlwvWmlwVXJsLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3ppcDMgYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15haFwucGUkLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGxldCBzY3JpcHQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoJ2V2YWwnKTsKICAgICAgc2NyaXB0ID0gZGVjb2RlU2NyaXB0KHNjcmlwdCk7CiAgICAgIHNjcmlwdCA9IGRlY29kZVNjcmlwdChzY3JpcHQpOwogICAgICBzY3JpcHQgPSBkZWNvZGVTY3JpcHQoc2NyaXB0KTsKICAgICAgbGV0IHBhdGggPSBzY3JpcHQubWF0Y2goLyhbXjs9IF0rKT0oW14rIDtdKylcKyJcLiJcKyhbXisgXSspXCsiXC4iXCsoW147IF0rKTsvKTsKICAgICAgaWYgKCFwYXRoKSB7CiAgICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdzY3JpcHQgY2hhbmdlZCcpOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvd1twYXRoWzJdXSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygncmVjYXB0Y2hhJyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHBhdGggPSBbX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvd1twYXRoWzJdXSwgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvd1twYXRoWzNdXSwgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvd1twYXRoWzRdXV0uam9pbignLicpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocGF0aCk7CiAgICB9LAogIH0pOwogIGZ1bmN0aW9uIGRlY29kZVNjcmlwdCAoZW5jb2RlZCkgewogICAgbGV0IGEgPSBlbmNvZGVkLm1hdGNoKC9eXHMqO2V2YWxcKCguKylcKTtccyokLyk7CiAgICBhID0gYVsxXTsKICAgIGNvbnN0IGIgPSBhLm1hdGNoKC9eKC4rKVwoJyhbXiddKyknLCcoW14nXSspJywnKFteJ10rKScsJyhbXiddKyknXCkkLyk7CiAgICBjb25zdCBjID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmV2aWwoYCgke2JbMV19KWApOwogICAgcmV0dXJuIGMoYlsyXSwgYlszXSwgYls0XSwgYls1XSk7CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYWthXC5nciQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpZnJhbWUjeW91cmxzLWZyYW1lJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobC5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15hbFwubHkkLywKICAgICAgL15hbGx5XC5zaCQvLAogICAgICAvXmFsbHlcLnNob3J0ZW5zXC5jbyQvLAogICAgICAvXihkYXVzZWx8b25sZSlcLmNvJC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2h0bWxfZWxlbWVudCcpOwogICAgaWYgKGkpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnI21lc3NhJyk7CiAgICAgIGkuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoLyJocmVmIiwiKFteIl0rKSIgXCsgaGFzaFwpXC5yZW1vdmUvKTsKICAgIGlmICghaSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2Fybignc2l0ZSBjaGFuZ2VkJyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGkgPSBpWzFdICsgbG9jYXRpb24uaGFzaDsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhpKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHd3d1wuKT9hbGxrZXlzaG9wXC5jb20kLywKICAgICAgL15jc2hvcnRcLm9yZyQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGxldCBtYXRjaGVzID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC93aW5kb3dcLmxvY2F0aW9uXC5ocmVmID0gIihbXiJdKykiLyk7CiAgICBtYXRjaGVzID0gbWF0Y2hlc1sxXTsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5udWtlKG1hdGNoZXMpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1hdGNoZXMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYXBrbW9kaWZcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdbbmFtZT0iZ2V0dXJsIl0nKS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYSk7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgY29uc3QgYWpheFBhdHRlcm4gPSAvXCQucG9zdFwoJyhbXiddKiknW157XSsoXHtccypvcHQ6XHMqJ21ha2VfbG9nJ1tefV0rXH1ccypcfSksL2k7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15iY1wudmMkLywKICAgICAgcGF0aDogL14uKyhodHRwcz86XC9cLy4rKSQvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0IChtKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtLnBhdGhbMV0gKyBkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2ggKyBkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15iY1wudmMkLywKICAgICAgcGF0aDogL15cLy4rLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGZpbmRBSkFYVG9rZW4oKTsKICAgICAgY29uc3QgdGltZSA9IGZha2VBSkFYVG9rZW4oKTsKICAgICAgY29uc3QgdXJsID0gYC9mbHkvbG4ucGhwP3dkcz0ke3Rva2VuLndkc30mdGltZT0ke3RpbWV9YDsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwMCk7CiAgICAgIGxldCBydiA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KHVybCwgewogICAgICAgIHhkZjogewogICAgICAgICAgYWZnOiAzMDAsCiAgICAgICAgICBiZmc6IDY0MCwKICAgICAgICAgIGNmZzogNDgwLAogICAgICAgICAgamtpOiB0b2tlbi5qa2ksCiAgICAgICAgICBkZmc6IDY0MCwKICAgICAgICAgIGVmZzogNDgwLAogICAgICAgICAgcnQ6IHRva2VuLnJ0LAogICAgICAgIH0sCiAgICAgICAgb2prOiB0b2tlbi5vamssCiAgICAgIH0pOwogICAgICBydiA9IEpTT04ucGFyc2UocnYpOwogICAgICBpZiAocnYuZXJyb3IpIHsKICAgICAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJ2F1dGggZXJyb3InKTsKICAgICAgfQogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocnYubWVzc2FnZS51cmwpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBbCiAgICAgICAgL15teWxpbmtcLnVzJC8sCiAgICAgICAgL154YWZveFwuY29tJC8sCiAgICAgICAgL156cG96XC5uZXQkLywKICAgICAgICAvXnd3d1wuYWRqZXRcLmV1JC8sCiAgICAgIF0sCiAgICAgIHBhdGg6IC9eXC8uKy8sCiAgICB9LAogICAgcmVhZHk6IHJ1biwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXnlzZWFyXC5jaCQvLAogICAgICBwYXRoOiAvXlwvLisvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgYSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdkaXYuZmx5X2hlYWQgYS5jbG9zZScpOwogICAgICBjb25zdCBmID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2lmcmFtZS5mbHlfZnJhbWUnKTsKICAgICAgaWYgKGEgJiYgZikgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhmLnNyYyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXdhaXQgcnVuKCk7CiAgICAgIH0KICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15hZDVcLmV1JC8sCiAgICAgIHBhdGg6IC9eXC9bXi5dKyQvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICAgIGNvbnN0IHMgPSBzZWFyY2hTY3JpcHQodHJ1ZSk7CiAgICAgIGxldCBtID0gcy5zY3JpcHQubWF0Y2goLyg8Zm9ybSBuYW1lPSJmb3JtMSJtZXRob2Q9InBvc3QiLiooPyE8XFxmb3JtPik8XC9mb3JtPikvKTsKICAgICAgaWYgKCFtKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIG0gPSBtWzFdOwogICAgICBjb25zdCB0eiA9IC0obmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpIC8gNjApOwogICAgICBtID0gbS5yZXBsYWNlKCdcJyt0aW1lem9uZStcJycsIHR6KTsKICAgICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBkLnNldEF0dHJpYnV0ZSgnaWQnLCAnQWRzQnlwYXNzZXJGVFcnKTsKICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6bm9uZTsnKTsKICAgICAgZC5pbm5lckhUTUwgPSBtOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpOwogICAgICBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI0Fkc0J5cGFzc2VyRlRXID4gZm9ybVtuYW1lPWZvcm0xXScpLnN1Ym1pdCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXnRyNVwuaW4kLywKICAgICAgcGF0aDogL15cLy4rLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGF3YWl0IHJ1bih0cnVlKTsKICAgIH0sCiAgfSk7CiAgZnVuY3Rpb24gZGVjb21wcmVzcyAoc2NyaXB0LCB1bnppcCkgewogICAgaWYgKCF1bnppcCkgewogICAgICByZXR1cm4gc2NyaXB0OwogICAgfQogICAgbGV0IG1hdGNoZXMgPSBzY3JpcHQubWF0Y2goL2V2YWwoLiopLyk7CiAgICBpZiAoIW1hdGNoZXMpIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdubyBzY3JpcHQgbWF0Y2hlcyAvZXZhbCguKikvJyk7CiAgICB9CiAgICBtYXRjaGVzID0gbWF0Y2hlc1sxXTsKICAgIHNjcmlwdCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ldmlsKG1hdGNoZXMpOwogICAgcmV0dXJuIHNjcmlwdDsKICB9CiAgZnVuY3Rpb24gc2VhcmNoU2NyaXB0ICh1bnppcCkgewogICAgbGV0IGNvbnRlbnQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoJ21ha2VfbG9nJyk7CiAgICBpZiAoY29udGVudCkgewogICAgICByZXR1cm4gewogICAgICAgIGRpcmVjdDogZmFsc2UsCiAgICAgICAgc2NyaXB0OiBkZWNvbXByZXNzKGNvbnRlbnQsIHVuemlwKSwKICAgICAgfTsKICAgIH0KICAgIGNvbnRlbnQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoJ2NsaWNrX2xvZycpOwogICAgaWYgKGNvbnRlbnQpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBkaXJlY3Q6IHRydWUsCiAgICAgICAgc2NyaXB0OiBkZWNvbXByZXNzKGNvbnRlbnQsIHVuemlwKSwKICAgICAgfTsKICAgIH0KICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignc2NyaXB0IGNoYW5nZWQnKTsKICB9CiAgZnVuY3Rpb24ga25vY2tTZXJ2ZXIgKHNjcmlwdCwgZGlydHlGaXgpIHsKICAgIGNvbnN0IG1hdGNoZXMgPSBzY3JpcHQubWF0Y2goYWpheFBhdHRlcm4pOwogICAgaWYgKCFtYXRjaGVzKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignKGluIGtub2NrIHNlcnZlcikgbm8gc2NyaXB0IG1hdGNoZXMgJC5wb3N0Jyk7CiAgICB9CiAgICBjb25zdCBtYWtlX3VybCA9IG1hdGNoZXNbMV07CiAgICBjb25zdCBtYWtlX29wdHMgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uZXZpbChgKCR7bWF0Y2hlc1syXX0pYCk7CiAgICBjb25zdCBpID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdChtYWtlX3VybCwgbWFrZV9vcHRzKS50aGVuKGZ1bmN0aW9uICh0ZXh0KSB7CiAgICAgICAgaWYgKGRpcnR5Rml4KSB7CiAgICAgICAgICB0ZXh0ID0gdGV4dC5tYXRjaCgvXHsuK1x9LylbMF07CiAgICAgICAgfQogICAgICAgIGNvbnN0IGpqID0gSlNPTi5wYXJzZSh0ZXh0KTsKICAgICAgICBpZiAoamoubWVzc2FnZSkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbChpKTsKICAgICAgICAgIHJldHVybiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoamoubWVzc2FnZS51cmwpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LCAxMDAwKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gcnVuIChkaXJ0eUZpeCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBsZXQgcmVzdWx0ID0gc2VhcmNoU2NyaXB0KHRydWUpOwogICAgaWYgKCFyZXN1bHQuZGlyZWN0KSB7CiAgICAgIGtub2NrU2VydmVyKHJlc3VsdC5zY3JpcHQsZGlydHlGaXgpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gcmVzdWx0LnNjcmlwdC5tYXRjaCgvdG9wXC5sb2NhdGlvblwuaHJlZj0nKFteJ10rKScvKTsKICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJ3NjcmlwdCBjaGFuZ2VkJyk7CiAgICAgIH0KICAgICAgcmVzdWx0ID0gcmVzdWx0WzFdOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocmVzdWx0KTsKICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gZmluZEFKQVhUb2tlbiAoKSB7CiAgICBjb25zdCBydiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygneHl6Jyk7CiAgICBpZiAoIXJ2KSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignc2NyaXB0IGNoYW5nZWQnKTsKICAgIH0KICAgIGxldCB3ZHMgPSBydi5tYXRjaCgveHl6XHMqPVxzKicoW14nXSspJy8pOwogICAgaWYgKCF3ZHMpIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdzY3JpcHQgY2hhbmdlZCcpOwogICAgfQogICAgd2RzID0gd2RzWzFdOwogICAgbGV0IGpraSA9IHJ2Lm1hdGNoKC90a25ccyo9XHMqJyhbXiddKyknLyk7CiAgICBpZiAoIWpraSkgewogICAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJ3NjcmlwdCBjaGFuZ2VkJyk7CiAgICB9CiAgICBqa2kgPSBqa2lbMV07CiAgICBjb25zdCBydCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjcmVjYXB0Y2hhVG9rZW4nKTsKICAgIHdoaWxlICghcnQudmFsdWUpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwKTsKICAgIH0KICAgIHJldHVybiB7CiAgICAgIHdkczogd2RzLAogICAgICBqa2k6IGpraSwKICAgICAgb2prOiAnamZoZycsCiAgICAgIHJ0OiBydC52YWx1ZSwKICAgIH07CiAgfQogIGZ1bmN0aW9uIGZha2VBSkFYVG9rZW4gKCkgewogICAgY29uc3Qgc2tpcEFkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNnZXRMaW5rJykucGFyZW50RWxlbWVudDsKICAgIGNvbnN0IG1hcmdpbiA9IDY7CiAgICBjb25zdCBmYWtlUGFnZVggPSBza2lwQWQub2Zmc2V0TGVmdCArIG1hcmdpbiArIDUwICsgKE1hdGgucmFuZG9tKCkgKiAxMCk7CiAgICBjb25zdCBmYWtlUGFnZVkgPSBza2lwQWQub2Zmc2V0VG9wICsgbWFyZ2luICsgMTUgKyAoTWF0aC5yYW5kb20oKSAqIDEpOwogICAgY29uc3QgcG8gPSBmYWtlUGFnZVggKyAnLCcgKyBmYWtlUGFnZVk7CiAgICBjb25zdCBwb3NYID0galF1ZXJ5T2Zmc2V0KHNraXBBZCkubGVmdCArIG1hcmdpbjsKICAgIGNvbnN0IHBvc1kgPSBqUXVlcnlPZmZzZXQoc2tpcEFkKS50b3AgKyBtYXJnaW47CiAgICBjb25zdCBwb3MgPSBNYXRoLmFicyhmYWtlUGFnZVggLSBwb3NYKSArICcsJyArIE1hdGguYWJzKGZha2VQYWdlWSAtIHBvc1kpOwogICAgY29uc3QgdHN0YV8gPSBNYXRoLmZsb29yKCg1ICsgTWF0aC5yYW5kb20oKSkgKiAxMDAwKTsKICAgIGNvbnN0IHRpbWUgPSBwbyArICc6JyArIHBvcyArICc6JyArIHRzdGFfOwogICAgcmV0dXJuIHRpbWU7CiAgfQogIGZ1bmN0aW9uIGpRdWVyeU9mZnNldCAoZWxlbWVudCkgewogICAgY29uc3QgciA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICByZXR1cm4gewogICAgICB0b3A6IHIudG9wICsgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsCiAgICAgIGxlZnQ6IHIubGVmdCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCwKICAgIH07CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9iaWdsaXN0b2Z3ZWJzaXRlc1wuY29tJC8sCiAgICBwYXRoOiAvXlwvZ29cLyhcdytcLlx3KykkLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoJ2h0dHA6Ly8nICsgbS5wYXRoWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3d3dy5iaWxkLm1lL2JpbGQucGhwP2ZpbGU9KicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjQmlsZCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL2JpbGRyLm5vL3ZpZXcvKicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbWcuYmlsZGUnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgewogICAgICBob3N0OiAvXih3d3dcLik/KFthLXpBLVowLTldK1wuKT9iaW5ib3hcLmlvJC8sCiAgICAgIHBhdGg6IC9cL29cLyhbYS16QS1aMC05XSspLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9eZ3Ntem9uZVwuc2l0ZSQvLAogICAgICBwYXRoOiAvXC9nb1wvKFthLXpBLVowLTldKykvLAogICAgfSwKICBdLAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBjb25zdCBkaXJlY3RfbGluayA9IHdpbmRvdy5hdG9iKG0ucGF0aFsxXSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZGlyZWN0X2xpbmspOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYmxvZ1wubGFuZ3dcLndlYlwuaWQkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHVybCA9IGRlY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldENvb2tpZSgnd3BiX3Zpc2l0X3RpbWUnKSkpOwogICAgaWYgKHVybC5tYXRjaCgvXmh0dHAvKSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVzZXRDb29raWVzKCk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgfQogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYmx1ZW1lZGlhZmlsZXNcLmNvbSQvLAogICAgcGF0aDogL15cL2NyZWF0aW5nbGlua3MvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvRmluaXNoTWVzc2FnZSA9ICc8YSBocmVmPSIoW14iXSspIiA+Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYlsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15jYXRjdXRcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGEgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2RlY29kZVVSSUNvbXBvbmVudFwoJyhbXiddKyknXCkvKTsKICAgIGEgPSBkZWNvZGVVUklDb21wb25lbnQoYVsxXSk7CiAgICBhID0gbmV3IFVSTChhKTsKICAgIGEgPSBhLnNlYXJjaFBhcmFtcy5nZXQoJ2EnKTsKICAgIGEgPSBhdG9iKGEpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9jbGlcLmdzJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2EuUmVkaXJlY3RMaW5rJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmNsa1wuaW0kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgY29uc3QgbWF0Y2hlcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvXCRcKCJcLmNvdW50ZG93biJcKVwuYXR0clwoImhyZWYiLCIoW14iXSspIlwpLyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobWF0Y2hlc1sxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15jb2NvbGVlY2hcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuYnRuLmJ0bi1ibG9jay5idG4tc3VjY2VzcycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKGNvZWd8ZGlzaW5na2F0KVwuaW4kLywKICAgICAgICAvXnd3d1wuKHRlbG9uZGFzbXV8c2lvdG9uZ3xzaWhlcnApXC5jb20kLywKICAgICAgICAvXnd3d1wuZ3JlZ2V0XC5zcGFjZSQvLAogICAgICBdLAogICAgICBwYXRoOiAvXlwvLiskLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAobSkgewogICAgICBjb25zdCBtYXBwZXIgPSBob3N0TWFwcGVyKG0uaG9zdFswXSk7CiAgICAgIGNvbnN0IGI2NCA9IG1hcHBlcigpLm1hdGNoKC9cP3I9KFtcdy9dKz17MCwyfSkvKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGF0b2IoYjY0WzFdKSk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9ec2lwa3VyXC5uZXQkLywKICAgICAgcGF0aDogWwogICAgICAgIC9eXC9cdyskLywKICAgICAgICAvXlwvbWVudWp1bGlua1wvLywKICAgICAgXSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGxldCBkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN0ZXN0YXBrID4gZGl2Jyk7CiAgICAgIGQgPSBkLm9uY2xpY2sudG9TdHJpbmcoKTsKICAgICAgZCA9IGQubWF0Y2goL3dpbmRvd1wub3BlblwoJyhbXiddKyknLyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhkWzFdKTsKICAgIH0sCiAgfSk7CiAgZnVuY3Rpb24gaG9zdE1hcHBlciAoaG9zdCkgewogICAgc3dpdGNoIChob3N0KSB7CiAgICBjYXNlICdkaXNpbmdrYXQuaW4nOgogICAgICByZXR1cm4gKCkgPT4gewogICAgICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYS5idG4tYmxvY2sucmVkaXJlY3QnKTsKICAgICAgICByZXR1cm4gYS5ocmVmOwogICAgICB9OwogICAgY2FzZSAnY29lZy5pbic6CiAgICBjYXNlICd3d3cudGVsb25kYXNtdS5jb20nOgogICAgY2FzZSAnd3d3LnNpb3RvbmcuY29tJzoKICAgIGNhc2UgJ3d3dy5zaWhlcnAuY29tJzoKICAgIGNhc2UgJ3d3dy5ncmVnZXQuc3BhY2UnOgogICAgICByZXR1cm4gKCkgPT4gewogICAgICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmRvd25sb2FkLWxpbmsgYScpOwogICAgICAgIHJldHVybiBhLmhyZWY7CiAgICAgIH07CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9Cn0pKCk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXig/OihcdyspXC4pP2NvaW51cmxcLmNvbSQvLAogICAgICAvXig/OihcdyspXC4pP2N1clwubHYkLywKICAgIF0sCiAgICBwYXRoOiAvXlwvKFstXHddKykkLywKICB9LAogIGFzeW5jIHJlYWR5IChtKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGNvbnN0IGhvc3QgPSAnaHR0cDovL2N1ci5sdi9yZWRpcmVjdF9jdXJsdi5waHAnOwogICAgY29uc3QgcGFyYW0gPSBtLmhvc3RbMV0gPT09IHVuZGVmaW5lZCA/IHsKICAgICAgY29kZTogbS5wYXRoWzFdLAogICAgfSA6IHsKICAgICAgem9uZTogbS5ob3N0WzFdLAogICAgICBuYW1lOiBtLnBhdGhbMV0sCiAgICB9OwogICAgY29uc3QgbWFpbkZyYW1lQ29udGVudCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQoaG9zdCwgcGFyYW0pOwogICAgbGV0IGRvY01haW5GcmFtZSA9IG51bGw7CiAgICB0cnkgewogICAgICBkb2NNYWluRnJhbWUgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0udG9ET00obWFpbkZyYW1lQ29udGVudCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignbWFpbiBmcmFtZSBjaGFuZ2VkJyk7CiAgICB9CiAgICBjb25zdCByRXh0cmFjdExpbmsgPSAvb25jbGljaz0ib3Blbl91cmxcKCcoW14nXSspJyxccyonZ28nXCkvOwogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmZvckVhY2goX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQkKCdpZnJhbWUnLCBkb2NNYWluRnJhbWUpLCAoY3VyckZyYW1lKSA9PiB7CiAgICAgIGNvbnN0IGN1cnJGcmFtZUFkZHIgPSBjdXJyRnJhbWUuZ2V0QXR0cmlidXRlKCdzcmMnKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldChjdXJyRnJhbWVBZGRyKS50aGVuKChjdXJyRnJhbWVDb250ZW50KSA9PiB7CiAgICAgICAgY29uc3QgYVJlYWxMaW5rID0gckV4dHJhY3RMaW5rLmV4ZWMoY3VyckZyYW1lQ29udGVudCk7CiAgICAgICAgaWYgKGFSZWFsTGluayA9PT0gdW5kZWZpbmVkIHx8IGFSZWFsTGlua1sxXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlYWxMaW5rID0gYVJlYWxMaW5rWzFdOwogICAgICAgIHJldHVybiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocmVhbExpbmspOwogICAgICB9KTsKICAgIH0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eY29teW9uZXRcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW5wdXQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW5wdXRbbmFtZT0iZW50ZXIiXScpOwogICAgaW5wdXQuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmNyb2Nrb2xpbmtzXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGMgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmhlYWQgPiBkaXY6bnRoLWNoaWxkKDMpID4gLnNraXAnKTsKICAgIGMuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRhd25zdGF0aW9uXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3RpZGFrYWthbnNlbGFtYW55YSA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZHVybFwubWUkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYVtjbGFzcz0icHJvY2VlZEJ0biJdJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eZWFzeXVybFwubmV0JC8sCiAgICAgIC9eKGF0dXxjbGlja3RocnV8cmVkaXJlY3RzfHJlYWR0aGlzKVwuY2EkLywKICAgICAgL15nb3Nocmlua1wuY29tJC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmcmFtZVtuYW1lPW1haW5dJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZi5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14od3d3XC4pP3NoaW5rXC5tZSQvLAogICAgICAvXihzaG9ufGxpa24pXC54eXokLywKICAgICAgL15mYXNcLmxpJC8sCiAgICAgIC9eKHd3d1wuKT9jcm9jb1wuKG1lfHNpdGUpJC8sCiAgICAgIC9eY3BtbGlua1wubmV0JC8sCiAgICBdLAogICAgcGF0aDogL15cL1tcdy1dKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgaWYgKCFfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2NhcHRjaGEnKSkgewogICAgICBsZXQgZiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjc2tpcCcpOwogICAgICBpZiAoZikgewogICAgICAgIGYuc3VibWl0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2J0bi1tYWluJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhmLmhyZWYpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdkaXZbY2xhc3MkPU92ZXJsYXldJyk7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uYmxvY2soKG5vZGUpID0+IHsKICAgICAgaWYgKG5vZGUuY2xhc3NOYW1lLm1hdGNoKC9PdmVybGF5JC8pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZGl2JykgewogICAgICAgIHJldHVybiBbCiAgICAgICAgICAnMjE0NzQ4MzY0NycsCiAgICAgICAgICAnMicsCiAgICAgICAgXS5zb21lKCh6KSA9PiB7CiAgICAgICAgICByZXR1cm4geiA9PT0gbm9kZS5zdHlsZS56SW5kZXg7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwgZG9jdW1lbnQuYm9keSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgewogICAgICBob3N0OiAvXmNwbWxpbmtcLm5ldCQvLAogICAgICBwYXRoOiAvXlwvZ29cL1tcdy1dKyQvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogL14od3d3XC4pP2Nyb2NvXC4obWV8c2l0ZSkkLywKICAgICAgcGF0aDogL15cL29rXC9cdyskLywKICAgIH0sCiAgXSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjYnRuLW1haW4nKTsKICAgIGNvbnN0IGkgPSBhLmhyZWYubGFzdEluZGV4T2YoJ2h0dHAnKTsKICAgIGEgPSBhLmhyZWYuc3Vic3RyKGkpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15mYXNcLmxpJC8sCiAgICAgIC9eKHd3d1wuKT9zaGlua1wubWUkLywKICAgIF0sCiAgICBwYXRoOiAvXlwvZ29cL1x3KyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjc2tpcCcpOwogICAgZi5zdWJtaXQoKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmZpbGVtZWRpYVwubmV0JC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzY3JpcHQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3dpbmRvdy5sb2NhdGlvbi5ocmVmXHM/PVxzP1woIihodHRwLis/KSJcKS8pOwogICAgaWYgKHNjcmlwdC5sZW5ndGggPiAxKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhzY3JpcHRbMV0pOwogICAgfQogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9maWxvb3BzXC5pbmZvJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN0ZXh0ID4gY2VudGVyIGEsICN0ZXh0ID4gZGl2W2FsaWduPWNlbnRlcl0gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3fGxpbmtzKVwuZml1eHlcLihjb3xieikkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYS5idG4uYScpLmhyZWYpOwogIH0KfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15nYW1lbW9kXC5wcm8kLywKICAgIHBhdGg6IC9eXC9kb3dubG9hZC1maWxlXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZ3AgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3dhaXQtZG9uZSA+IHAgPiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZ3AuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15na3VybFwudXMkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGlmcmFtZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZ2t1cmwtZnJhbWUnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhpZnJhbWUuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmdvdG9cLmxvbmNhdFwuaW4kLywKICAgIHF1ZXJ5OiAvb3Blbj0oLispLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBjb25zdCB1cmwgPSBhdG9iKGF0b2IobS5xdWVyeVsxXSkpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXmdzdXJsXC4obWV8aW4pJC8sCiAgICAgIC9eKGdzdWx8Z2V0c2x8Z2xpbmtzKVwubWUkLywKICAgICAgL15nc3VyXC5pbiQvLAogICAgICAvXmc1dVwucHckLywKICAgICAgL15ndXJsXC5seSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJyNjb250YWluZXInKTsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2xpbmsnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhgJHthLmhyZWZ9JmFiPSR7X0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy54fWApOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZ3VudGluZ1wud2ViXC5pZCQvLAogICAgcGF0aDogL15cL1x3KyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdhLmJ0bi1ibG9jay5yZWRpcmVjdCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15oZWFsdGh5a2tcLmNvbSQvLAogICAgcGF0aDogL15cL3dvcmRwcmVzc1wvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGggPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2NvbnRlbnQgY2VudGVyIGJ1dHRvbicpOwogICAgaC5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaGVuLXRheVwubmV0JC8sCiAgICBwYXRoOiAvXlwvZ29cLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBoID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNkb3dubG9hZF91cmwgZGl2IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhoLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaG90c2hvcnR1cmxcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZnJhbWUgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZnJhbWVbc2Nyb2xsaW5nPXllc10nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhmcmFtZS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaWl2XC5wbCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2NvdW50aW5nJyk7CiAgICBsZXQgcnYgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdChsb2NhdGlvbi5wYXRobmFtZSwgewogICAgICBibG9ja2VyOiAwLAogICAgICBzYWx0OiBkLmRhdGFzZXQuc2FsdCwKICAgIH0sIHsKICAgICAgJ1gtT0NUT0JFUi1SRVFVRVNULUhBTkRMRVInOiAnb25BZnRlclNob3J0Y3V0VmlldycsCiAgICAgICdYLU9DVE9CRVItUkVRVUVTVC1QQVJUSUFMUyc6ICdzaG9ydGN1dC9saW5rX3Nob3cnLAogICAgfSk7CiAgICBydiA9IEpTT04ucGFyc2UocnYpOwogICAgZCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS50b0RPTShydlsnc2hvcnRjdXQvbGlua19zaG93J10pOwogICAgcnYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYScsIGQpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJ2LmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaXR3XC5tZSQvLAogICAgcGF0aDogL15cL3JcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5nby1mb3JtJyk7CiAgICBmLnN1Ym1pdCgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaXR5XC5pbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI21haW4nKTsKICAgIGlmIChmKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhmLnNyYyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIFssICwgZl0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uZmluZChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCQoJ2ZyYW1lJyksIChmcmFtZSkgPT4gewogICAgICBpZiAoZnJhbWUuc3JjLmluZGV4T2YoJ2ludGVyaGVhZGVyLnBocCcpIDwgMCkgewogICAgICAgIHJldHVybiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9uZTsKICAgICAgfQogICAgICByZXR1cm4gZnJhbWUuc3JjOwogICAgfSk7CiAgICBpZiAoZiAhPT0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmUpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGYpOwogICAgICByZXR1cm47CiAgICB9CiAgICBmID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9rcnlwdGVkPShbXiZdKykvKTsKICAgIGlmICghZikgewogICAgICB0aHJvdyBuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IoJ3NpdGUgY2hhbmdlZCcpOwogICAgfQogICAgZiA9IGZbMV07CiAgICBjb25zdCBkYXRhID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5kZXMoJ2tzbnNsbXRtazB2NFBkdml1c2FqcXUnLCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmhleFRvU3RyaW5nKGYpLCAwLCAwKTsKICAgIGlmIChkYXRhKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnaHR0cDovL2l0eS5pbS8xMTA0XzIxXzUwODQ2XycgKyBkYXRhKTsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/a2luZ29mc2hyaW5rXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3RleHRyZXN1bHQgPiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICB7CiAgICAgIGhvc3Q6IC9ec3RcLmt1cm9nYXplXC5uZXQkLywKICAgICAgcXVlcnk6IC9yPSguKykvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogL15zXC55dWtpc3Vic1wuY29tJC8sCiAgICAgIHF1ZXJ5OiAvbGluaz0oLispLywKICAgIH0sCiAgXSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgciA9IGF0b2IobS5xdWVyeVsxXSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsocik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zdFwua3Vyb2dhemVcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdhLnJlZGlyZWN0Jyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRsXC5sYXlhcmthY2EyMVwudmlwJC8sCiAgICBwYXRoOiAvXlwvaWZyYW1lXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbHYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmNvbnRlbnQgI3NraXAgYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGx2LmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZGxcLmxheWFya2FjYTIxXC52aXAkLywKICAgIHBhdGg6IC9eXC8oLispXC8vLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnL2lmcmFtZS90b3AucGhwP3NsdWc9JyArIG0ucGF0aFsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15sZWVjaGFsbFwuZG93bmxvYWQkLywKICAgIHBhdGg6IC9eXC9maWxlXC8oW2EtekEtWjAtOS89XSspLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZGVjb2RlVVJJQ29tcG9uZW50KGF0b2IobS5wYXRoWzFdKSkpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3LmxpZW5zY2FzaC5jb20vbC8qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNyZWRpcl9idG4nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9saW5rXC5pbSQvLAogICAgcGF0aDogL15cL1x3KyQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKCkgewogICAgY29uc3QgdGV4dCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KGRvY3VtZW50LmxvY2F0aW9uLmhyZWYsIHsKICAgICAgaW1hZ2U6ICdDb250aW51ZScsCiAgICB9KTsKICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC93aW5kb3dcLmxvY2F0aW9uXC5yZXBsYWNlXCgnKFteJ10rKSdcKS8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1bMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebGlua1wudGwkLywKICAgIHBhdGg6IC9cLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvZXZhbFwoKC4rfVwpKVwpLyk7CiAgICBtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmV2aWwoYCgke21bMV19KWApOwogICAgbGV0IGwgPSBtLm1hdGNoKC8oPzpcJFwuYWpheC4rfGhyZWY9JykoaHR0cC4rc2tpcC4rfGh0dHBbXiddKyknLGRhdGEvKTsKICAgIGwgPSBsWzFdOwogICAgaWYgKCFsLm1hdGNoKC9za2lwLykpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCB0b2tlbiA9IG0ubWF0Y2goLydYLUNTUkYtVE9LRU4nOicoW14nXSspJ30sLyk7CiAgICBsZXQgcmwgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdChsLCAnJywgewogICAgICAnWC1DU1JGLVRPS0VOJzogdG9rZW5bMV0sCiAgICB9KTsKICAgIHJsID0gSlNPTi5wYXJzZShybCk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocmwudXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmxpbms0YWRcLmNvbSQvLAogICAgcGF0aDogL15cLyguKykkLywKICB9LAogIGFzeW5jIHJlYWR5IChtKSB7CiAgICBsZXQgZCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdkaXZbaWRePW1vZHVsZV9dJyk7CiAgICBkID0gZC5pZC5tYXRjaCgvbW9kdWxlXyhcZCspLyk7CiAgICBkID0gZFsxXTsKICAgIGNvbnN0IHVybCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KCdmb3JtLnBocD9ibG9ja19pZD0nICsgZCwgewogICAgICBjbWQ6ICdnZXRfc291cmNlJywKICAgICAgYWN0OiAnd2FpdGluZycsCiAgICAgIGlkOiBtLnBhdGhbMV0sCiAgICB9KTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwooZnVuY3Rpb24oKSB7CiAgY29uc3QgaG9zdFJ1bGVzID0gWwogICAgL14oKFtcd117OH18d3d3KVwuKT8oYWxsYW5hbHBhc3N8ZHJzdGlja3lmaW5nZXJzfHdoYWNreXZpZHopXC5jb20kLywKICAgIC9eKChbXHddezh9fHd3dylcLik/KGxpbmtiYWJlc3xsaW5rYnVja3MpXC5jb20kLywKICAgIC9eKChbXHddezh9fHd3dylcLik/dGhlc2VibG9nc1wuY29tJC8sCiAgICAvXndhcm5pbmctdGhpcy1saW5rY29kZS13aWxsLWNlYXNlLXdvcmtpbmctc29vblwud3d3XC5saW5rYnVja3NkbnNcLmNvbSQvLAogICAgL14oKFtcd117OH18d3d3KVwuKT8oZmlsZXNvbnRoZXxwb29udG93bnxzZXJpb3VzZGVhbHN8dXJsYmVhdClcLm5ldCQvLAogICAgL14oKFtcd117OH18d3d3KVwuKT8oemF0bmF3cXl8cmh2Z21yaXRteml3Y218ZHdyZnNsc3FwZGZxZnd5KVwubmV0JC8sCiAgICAvXigoW1x3XXs4fXx3d3cpXC4pP2ZyZWVhblwudXMkLywKICAgIC9eKChbXHddezh9fHd3dylcLik/KG1pbml1cmxzfHFxY3xycXF8dGlueWxpbmtzfHl5dilcLmNvJC8sCiAgICAvXigoW1x3XXs4fXx3d3cpXC4pP3lvdWZhcFwubWUkLywKICBdOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IGhvc3RSdWxlcywKICAgICAgcGF0aDogL15cL1x3K1wvdXJsXC8oLispJC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkobSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlQWxsVGltZXIoKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlc2V0Q29va2llcygpOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgICAgbGV0IHVybCA9IG0ucGF0aFsxXSArIHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CiAgICAgIGNvbnN0IG1hdGNoID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9VcmxFbmNvZGVkOiAoW14sXSspLyk7CiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSA9PT0gJ3RydWUnKSB7CiAgICAgICAgdXJsID0gZGVjcnlwdCh1cmwpOwogICAgICB9CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgfQogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IGhvc3RSdWxlcywKICAgIH0sCiAgICBhc3luYyBzdGFydCAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuWE1MSHR0cFJlcXVlc3QgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ubm9wOwogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZUFsbFRpbWVyKCk7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZXNldENvb2tpZXMoKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZigndmVyaWZ5JykgPj0gMCkgewogICAgICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUucmVwbGFjZSgnL3ZlcmlmeScsICcnKTsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocGF0aCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHRva2VuID0gZmluZFRva2VuKGRvY3VtZW50KTsKICAgICAgY29uc3QgdXJsID0gYXdhaXQgc2VuZFJlcXVlc3QodG9rZW4pOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ubnVrZSh1cmwpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgcXVlcnk6IC9eKC4qKVs/Jl1fbGJHYXRlPVxkKyQvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0IChtKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZXRDb29raWUoJ19sYkdhdGVQYXNzZWQnLCAndHJ1ZScpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgbS5xdWVyeVsxXSk7CiAgICB9LAogIH0pOwogIGZ1bmN0aW9uIGZpbmRUb2tlbiAoY29udGV4dCkgewogICAgY29uc3Qgc2NyaXB0ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKCcgICAgdmFyIGYgPSB3aW5kb3dbXCdpbml0XCcgKyBcJ0xiXCcgKyBcJ2pzXCcgKyBcJ1wnXScsIGNvbnRleHQpOwogICAgaWYgKCFzY3JpcHQpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhcm4oJ3BhdHRlcm4gY2hhbmdlZCcpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGxldCBhZHVybCA9IHNjcmlwdC5tYXRjaCgvQWRVcmxccyo6XHMqJyhbXiddKyknLyk7CiAgICBpZiAoIWFkdXJsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgYWR1cmwgPSBhZHVybFsxXTsKICAgIGNvbnN0IG0xID0gc2NyaXB0Lm1hdGNoKC9BZFBvcFVybFxzKjpccyonLitcP1tePV0rPShbXHdcZF0rKScvKTsKICAgIGNvbnN0IG0yID0gc2NyaXB0Lm1hdGNoKC9Ub2tlblxzKjpccyonKFtcd1xkXSspJy8pOwogICAgY29uc3QgdG9rZW4gPSBtMVsxXSB8fCBtMlsxXTsKICAgIGxldCBtID0gc2NyaXB0Lm1hdGNoKC89XHMqKFxkKyk7Lyk7CiAgICBsZXQgYWsgPSBwYXJzZUludChtWzFdLCAxMCk7CiAgICBjb25zdCByZSA9IC9cK1xzKihcZCspOy9nOwogICAgbGV0IHRtcCA9IG51bGw7CiAgICB3aGlsZSgobSA9IHJlLmV4ZWMoc2NyaXB0KSkgIT09IG51bGwpIHsKICAgICAgdG1wID0gbVsxXTsKICAgIH0KICAgIGFrICs9IHBhcnNlSW50KHRtcCwgMTApOwogICAgcmV0dXJuIHsKICAgICAgdDogdG9rZW4sCiAgICAgIGFLOiBhaywKICAgICAgYWR1cmw6IGFkdXJsLAogICAgfTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gc2VuZFJlcXVlc3QgKHRva2VuKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KHRva2VuLmFkdXJsKTsKICAgIGRlbGV0ZSB0b2tlbi5hZHVybDsKICAgIHRva2VuLmFfYiA9IGZhbHNlOwogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmluZm8oJ3dhaXRpbmcgdGhlIGludGVydmFsJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg1MDAwKTsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5pbmZvKCdzZW5kaW5nIHRva2VuOiAlbycsIHRva2VuKTsKICAgIGNvbnN0IHRleHQgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KCcvaW50ZXJtaXNzaW9uL2xvYWRUYXJnZXRVcmwnLCB0b2tlbiwgewogICAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lLAogICAgICBPcmlnaW46IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lLAogICAgfSk7CiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh0ZXh0KTsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5pbmZvKCdyZXNwb25zZTogJW8nLCBkYXRhKTsKICAgIGlmICghZGF0YS5TdWNjZXNzICYmIGRhdGEuRXJyb3JzWzBdID09PSAnSW52YWxpZCB0b2tlbicpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhcm4oJ2dvdCBpbnZhbGlkIHRva2VuJyk7CiAgICAgIHJldHVybiBhd2FpdCByZXRyeSgpOwogICAgfQogICAgaWYgKGRhdGEuQWRCbG9ja1Nwb3R0ZWQpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhcm4oJ2FkYmxvY2sgc3BvdHRlZCcpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZGF0YS5TdWNjZXNzICYmICFkYXRhLkFkQmxvY2tTcG90dGVkICYmIGRhdGEuVXJsKSB7CiAgICAgIHJldHVybiBkYXRhLlVybDsKICAgIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gcmV0cnkgKCkgewogICAgY29uc3QgdGV4dCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQod2luZG93LmxvY2F0aW9uLnRvU3RyaW5nKCksIHt9LCB7CiAgICAgICdYLUZvcndhcmRlZC1Gb3InOiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uZ2VuZXJhdGVSYW5kb21JUCgpLAogICAgfSk7CiAgICBjb25zdCBkID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnRvRE9NKHRleHQpOwogICAgY29uc3QgdCA9IGZpbmRUb2tlbihkKTsKICAgIGlmICghdCkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDAwKTsKICAgICAgcmV0dXJuIGF3YWl0IHJldHJ5KCk7CiAgICB9CiAgICByZXR1cm4gYXdhaXQgc2VuZFJlcXVlc3QodCk7CiAgfQogIGZ1bmN0aW9uIGRlY3J5cHQgKHVybCkgewogICAgdXJsID0gQ29udmVydEZyb21IZXgodXJsKTsKICAgIGxldCB1bnNhZmUgPSBgKCR7RW5jb2RlLnRvU3RyaW5nKCl9KSgiJHt1cmx9IilgOwogICAgdW5zYWZlID0gKDAsIGV2YWwpKHVuc2FmZSk7CiAgICByZXR1cm4gdW5zYWZlOwogIH0KICBmdW5jdGlvbiBDb252ZXJ0RnJvbUhleCAoc3RyKSB7CiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIHdoaWxlIChzdHIubGVuZ3RoID49IDIpIHsKICAgICAgcmVzdWx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChzdHIuc3Vic3RyaW5nKDAsIDIpLCAxNikpKTsKICAgICAgc3RyID0gc3RyLnN1YnN0cmluZygyLCBzdHIubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQuam9pbignJyk7CiAgfQogIGNvbnN0IEVuY29kZSA9IGZ1bmN0aW9uIChzdHIpIHsKICAgIHZhciBzID0gW10sIGogPSAwLCB4LCByZXMgPSAnJywgayA9IGFyZ3VtZW50cy5jYWxsZWUudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywgJycpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICBzW2ldID0gaTsKICAgIH0KICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogICAgICBqID0gKGogKyBzW2ldICsgay5jaGFyQ29kZUF0KGkgJSBrLmxlbmd0aCkpICUgMjU2OwogICAgICB4ID0gc1tpXTsKICAgICAgc1tpXSA9IHNbal07CiAgICAgIHNbal0gPSB4OwogICAgfQogICAgaSA9IDA7CiAgICBqID0gMDsKICAgIGZvciAodmFyIHkgPSAwOyB5IDwgc3RyLmxlbmd0aDsgeSsrKSB7CiAgICAgIGkgPSAoaSArIDEpICUgMjU2OwogICAgICBqID0gKGogKyBzW2ldKSAlIDI1NjsKICAgICAgeCA9IHNbaV07CiAgICAgIHNbaV0gPSBzW2pdOwogICAgICBzW2pdID0geDsKICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoc3RyLmNoYXJDb2RlQXQoeSkgXiBzWyhzW2ldICsgc1tqXSkgJSAyNTZdKTsKICAgIH0KICAgIHJldHVybiByZXM7CiAgfTsKfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wubGlua2RlY29kZVwuY29tJC8sCiAgICBwYXRoOiAvXlwvJC8sCiAgICBxdWVyeTogL15cPyguKykkLywKICB9LAogIGFzeW5jIHJlYWR5IChtKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGxldCBsbmsgPSBtLnF1ZXJ5WzFdOwogICAgaWYgKG0ucXVlcnlbMV0ubWF0Y2goL15odHRwcz86XC9cLy8pKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsbmspOwogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgYiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjcG9wdXAnKTsKICAgIGlmIChiICYmIGIuaHJlZikgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYi5ocmVmKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbSA+IC5WaXNpdF9MaW5rJyk7CiAgICBiID0gYi5vbmNsaWNrLnRvU3RyaW5nKCkubWF0Y2goL3dpbmRvd1wub3BlblwoJyhbXiddKyknLyk7CiAgICBpZiAoIWIpIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlcigncGF0dGVybiBjaGFuZ2VkJyk7CiAgICB9CiAgICBsbmsgPSBiWzFdLm1hdGNoKC9cPyhodHRwcz86XC9cLy4qKSQvKTsKICAgIGlmIChsbmspIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGxua1sxXSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhiWzFdKTsKICB9LAp9KTsKKGZ1bmN0aW9uICgpIHsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBbCiAgICAgICAgL15tZXRcLmJ6JC8sCiAgICAgICAgL150dWlcLmNsaWNrJC8sCiAgICAgICAgL15lYXJuLWd1aWRlXC5jb20kLywKICAgICAgICAvXmFkdXJsXC5pZCQvLAogICAgICAgIC9eKGN1dHdpfGN1dC13fGN1dGx8ZG11cylcLmluJC8sCiAgICAgICAgL14od3d3XC4pP2p1cmxcLmlvJC8sCiAgICAgICAgL15sYXBha1wubGluayQvLAogICAgICAgIC9eKHVsc2hhcmV8dXJsaWtlKVwubmV0JC8sCiAgICAgIF0sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBoYW5kbGVyID0gbmV3IE5vUmVjYXB0Y2hhSGFuZGxlcigpOwogICAgICBhd2FpdCBoYW5kbGVyLmNhbGwoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKGR6NGxpbmt8Z29jaXRsaW5rfDNyYWJjdXR8c2hvcnQyd2lufGFkc3J0fHNob3J0Z2xvYmFsfGphaW5qaW52YW5pfGFncmFkYXJwYW58YmlyZHVybHMpXC5jb20kLywKICAgICAgICAvXihwYXlzaG9ydHVybHx1cmx0aXBzfHNocmlua2Vhcm58aXRpYWR8Y3V0c291ZnxlbmV3c3RhbGt8bG5rczRhbGx8amVqYWtsYWd1fHVybHNob3J0eClcLmNvbSQvLAogICAgICAgIC9eKGVhcm4tdXJsfGJpdC11cmx8Y3V0LXdpbnxsaW5rLXplcm98Y3V0LWVhcm58b3R1cmx8Z2xvcnktbGlua3xjb29sbWl0dGVufGhvc2V4eClcLmNvbSQvLAogICAgICAgIC9eKGVtcGlyZXNob3J0fGVtcGVhcm58dGFybndoMml8dGFiZWlraHx5b3Vydy1heXxyZWI3a29ubGluZXxmYWN0dXJhbHxha2xhNHx0ZWNoc2FwcGFyZWwpXC5jb20kLywKICAgICAgICAvXihzaHJpbmtidWNrfGNsa3BheXxsaW5rc2h0fGhheHJzfGNsaWNrMi11cmx8Y29vbHR4dGdlbnxhcmJhN2NvfHNob3J0bGlua298ZXo0bGlua3NzKVwuY29tJC8sCiAgICAgICAgL14ocGFydHFiMml8a2hyYWJhfGFkbHB1fHRhYmFraGVsb3xhbWVuaXRpZWVzfGNvc21pY21vbnl8aWxpbmtzaG9ydHh8YS1lZ3l8YWRzYWZlbGluaylcLmNvbSQvLAogICAgICAgIC9eKGFkdmFuY2Utd2lzaGluZ2pzfGdvdnRzbWFydGpvYnxibG9nZ2luZ3JhamF8dGVjaGt0aXxzeHRzcXVhZHxhZHBheXRtfHB1c3RrYWxhKVwuY29tJC8sCiAgICAgICAgL14odGhlZ3lhYW5pcG9pbnR8ZG93bmxvYWRkb29tfGxpbmtmYXl8NWJyZ2VkaWR8ZWFydGhwaWNsb3ZlcnxhZGlncHx0b21pZW50fGR6NGludmVzdClcLmNvbSQvLAogICAgICAgIC9eKHRlY2htZW4td29ybGR8cmF6ZXJmbGl4c3xnYW1lc2luZGlhbnN8ZGlzbG9va3N8ZWxraGJyZWw3c3J5fG9uYWFofHVsdHJhc2tvcmEpXC5jb20kLywKICAgICAgICAvXih3cmFwLXcwcmxkfG9tbWFudHJhbWVkaXRhdGlvbnxtYXdkb2t8dGVjaGZpbmRhfGNsaXhnfGJvYXJkZ2lmdHxiZWFzdC1iaXJkc3xjbGljay1wYWlkKVwuY29tJC8sCiAgICAgICAgL14odGFsa2l0dGVjaHl8bmV3c2luanVsZXN8a3V0cGF5fG5pa2thcnJ8dmVibGlua3xhbDNhbWFsbHw2YWJhMmRheXxvcGxvdmVyemhvbWUpXC5jb20kLywKICAgICAgICAvXihrb29yYW11YmFzaGlyfGhlYWx0aGZhcnl8anVzdGxpa2V5b2puYXxzYXJrYXJpam9ic3Jlc3VsdHNzfHphbGlwYXl8dGhlZnJlZWNoKVwuY29tJC8sCiAgICAgICAgL14oaGluZGliZWVufHBhc3Rla2FufGU3a2VseWFuYXxlYS1pc2x5fGFyaXN0b2RlcmFzfHNob3J0em9ufHRyYWRpbmctYXJlYXxhbHNlb28pXC5jb20kLywKICAgICAgICAvXih0ZWNodHJlbWVuZG91c3xmcmVlc3BpbndpbnN8dy1yYWplbXx0aW1ldG9rYXxmb29kcHVmZnxsaW5rc29wfGJvbGx5d29vZGRyYW1hbmV3cylcLmNvbSQvLAogICAgICAgIC9eKGxpbmtleGF8YWRtZXd8c2hydGZseXxrdXlsaW5rfGN1dDRsaW5rc3xhZHNraXBtZXxza2lwdXJsc3xlbHktb203fGJyZW5oZWFsdGgpXC5jb20kLywKICAgICAgICAvXihzbWFydGVhc3lzdHVkeXxjeWFoZWFsdGh8ZXJzaGFkYXR8ejJpfHNydGZseXxhcmJhN2twcm98aGVhbHRoLWdvb29kfHN0YXRlZ29zc2lwKVwuY29tJC8sCiAgICAgICAgL14oYmxvZ2dpbmdneWFuYm94fHlvdXJ0ZWNoZ3VpZGVyfGdpZnNpc3wzcmFiLWNhc2h8cGlua2hpbmRpfHdpc2hlczJ8d2Vhd3B8YTViYXJmYXdyaWEpXC5jb20kLywKICAgICAgICAvXihteWtpbmdnb3xsaS1ua3p8d2luNGN1dHxraGFicmF0a3xwcm9ncmFtc2ZyZXxzYWZlbGlua2Jsb2dnZXJ8bGlua3dlYXxvdXJjYXJlZXJibG9nKVwuY29tJC8sCiAgICAgICAgL14obGlua29ybGlua3xtcmZvdXJ0ZWNofGZhYnNkZWFsc3x0ZWNoNHV0b2RheXx1cmxzYW1vfGVhcm53aXRoc2hvcnRsaW5rfHN3aWdneWdvbGQpXC5jb20kLywKICAgICAgICAvXihlYXJubW9uZXl0YWxrfG5ld3VwZGF0ZXNvbmxpbmV8dXB0b29zfGJha2lsaW5rfGdvc3NpcGNvcm5lcnN8c2xlZ2xlfGZ1dHVyZWZvdW5kYXRpb25uZ28pXC5jb20kLywKICAgICAgICAvXihsb29wZGlldHxpbmZvdGF4Y298bmV3c2F0Zml0fGdvOTl0ZWNofGZ1bGx5dGVjaDI0fGFkZmx5dXJsfGtla29saW5rfHJpZnVybHxhYy1tbylcLmNvbSQvLAogICAgICAgIC9eKGFwa3NocnQpXC5jb20kLywKICAgICAgICAvXih2eVwuKT9hZHN2eVwuY29tJC8sCiAgICAgICAgL14od3d3XC4pPyhjbGtwYXlzfGxua2pvYnxlZnNob3J0KVwuY29tJC8sCiAgICAgICAgL15zaHJ0KDh8MTApXC5jb20kLywKICAgICAgICAvXih0cmxpbmt8d29saW5rfHRvY2RvfGN1dHVybHxjb3Vuc2VsbGluZ3Jlc3VsdDIwMTZ8aWl0amVlbWFpbmd1aWRlfGhlYWx0aGhpbmRpZ3lhbilcLmluJC8sCiAgICAgICAgL14odXRpbWV0YWJsZXJlc3VsdHxkYWlseS1zYWxlfGxpbmtzem9uZXx2aXJhbHRlY2huaWNhbClcLmluJC8sCiAgICAgICAgL14ob2tlfGN1b258Y3Vpb3xjdWVlfGN1dXN8Y3V0b3xsaW5rdG9yfGZseWxpbmt8dWl6fHVpaXxleGV5fHNocmlua21lfHNob3RseSlcLmlvJC8sCiAgICAgICAgL15jdSgyfDN8NXw2fDcpXC5pbyQvLAogICAgICAgIC9eKGFkYmlsdHl8YWRwb3B8dWp2fHRweHxhZHNydHwyZmx5fGxpbjY1fHNob3J0MndpbnxzdWFyYW5rcml8aW5mb3RyZW5keSlcLm1lJC8sCiAgICAgICAgL14oYWR2YW5jZWRhdXRvcmVwYWlydGlwc3x0YWtlaXRmb3J8amVsYWphaGludGVybmV0fHZpcnR1YWxkYXRhfG11aGFtbWFkeW9nYXxzMncpXC5tZSQvLAogICAgICAgIC9eKGNlcG11emlraW5kaXJ8c2hyaW5rZSlcLm1lJC8sCiAgICAgICAgL15saW5rXC5ha3Vub1wubmV0JC8sCiAgICAgICAgL14oc2FmZWxpbmt1fHRpbnlsaW5rc3xsaWNrbGlua3xsaW5rcmV4fHpsc2hvcnRlfHZpdmFkc3xjbGlja2FyfGJpZ2Iwc3MpXC5uZXQkLywKICAgICAgICAvXih2bnVybHx2aW5hdXJsfGZveHVybHxzaG9ydDJ3aW58Y2FzaGF0fHNocnRmbHl8c2hvcnR5ZXx2ZW50YXgpXC5uZXQkLywKICAgICAgICAvXihsaW5rNHdpbnxsaW5rc2FkfHRvcHVybHx4ZW1saW5rfGRpcmVjdGVkbGlua3xpbGxpbmspXC5uZXQkLywKICAgICAgICAvXihjbGljazJ1cmx8bG40MzV8bWVyZGVrYWlkKVwub25saW5lJC8sCiAgICAgICAgL14od3d3XC4pP2Jsb2dnZXJ3b3JsZFwub25saW5lJC8sCiAgICAgICAgL14obG90ZWNobm9jYW58dXBkYXRldHJpYnVufHRlbXBsaW5rfGV6NGxpbmt8c2hvcnRlYXJufGFkYnVsbHxvbmV1cmxzfGFkc3J0fGZyZWViY2MpXC5vcmckLywKICAgICAgICAvXnZveGNcLm9yZyQvLAogICAgICAgIC9eKGNsaWt8dG9rZW5mbHl8Z2V0bGlua3xwc2x8cHNzfHNobG58bHBlfGNocnR8c3pzfG1pbml1cmwpXC5wdyQvLAogICAgICAgIC9eKHd3d1wuKT9sd3RcLnB3JC8sCiAgICAgICAgL14oZWwzaWR8YWxscmVwb3J0c3xjbGlja3NrYXJvKVwuc2l0ZSQvLAogICAgICAgIC9eMTIzbGlua1wuY2FycGFydHN2aWV0OTdcLnNpdGUkLywKICAgICAgICAvXihzaGlua3xzaHJ0ZW58Z2ctbHx2bnVybHxibG9nZ2luZ2Rla2h8bG4xMXxzaDExfHRyYWRlZ3VydXxuZXdza2FydHxraWRzb3JzfHh6MilcLnh5eiQvLAogICAgICAgIC9eKHRlY2hpbmh1Ynx2aXJhbG5vd3xzaG9waGlwcm98dGVjaG5vY2FudmFzfGdldGZyZXNoY2xvdWR8cHJvZml0c3R1ZHl8aWpvYmFuYW5hKVwueHl6JC8sCiAgICAgICAgL14oYXV0b2NhcnNtYWd6fGdldHBvY2tldHx5YXNpbmV3c3xkdW55YW5ld3N8a29taXVwZGF0ZXN8YWxsYXBwfHNtd2Vic3xuZXdzLXRlY2gpXC54eXokLywKICAgICAgICAvXmN1dGRsXC54eXokLywKICAgICAgICAvXihja2t8aWlyfHRpaSlcLmFpJC8sCiAgICAgICAgL150aGluXC5hdCQvLAogICAgICAgIC9eKHRpcHNcLik/YXR2XC5wdyQvLAogICAgICAgIC9ec2tpcFwuYXokLywKICAgICAgICAvXihmdW5ueXF1aXp8bWVkaWFraXRhfGthYmFydmlyYWwpXC5ibG9nJC8sCiAgICAgICAgL14oaWN1dGl0fGVhcm5iaWd8Y3V0ZWFybilcLmNhJC8sCiAgICAgICAgL15lMnNcLmNjJC8sCiAgICAgICAgL14oYWR6dXJsfGxpbmsybGluaylcLmNmJC8sCiAgICAgICAgL14obWxpbmt8Y2wyNTB8eHBpY2tsZXxpbmZvc2VoYXRrdSlcLmNsdWIkLywKICAgICAgICAvXigzYnN0fGNvaW5saW5rfGl0aXVybHxjb3NoaW5rfGxpbms1c3xjdXJzfG1ha2V1cmx8bW9vZGRpc29yZGVyfGN1dGxzKVwuY28kLywKICAgICAgICAvXmJlc3RzY2hvbGFlc2hpcGRlZ3JlZVwuZGF0ZSQvLAogICAgICAgIC9eY2xpY2syc2VlXC5kZXNpJC8sCiAgICAgICAgL14odG55fHRpbnkpXC5lYyQvLAogICAgICAgIC9eOG9cLmVlJC8sCiAgICAgICAgL15wYTRsXC5lc3lcLmVzJC8sCiAgICAgICAgL14oc2hvcnRlYXJufGVucnQpXC5ldSQvLAogICAgICAgIC9eKHNjaWVuY2VsaWZlfGNwbTRhbGwpXC5nYSQvLAogICAgICAgIC9eemFcLmdsJC8sCiAgICAgICAgL156aVwuaHQkLywKICAgICAgICAvXnNob3J0ZWRcLmlkJC8sCiAgICAgICAgL14oaWdyYW18Z3JhbXxwaW5naXQpXC5pbSQvLAogICAgICAgIC9ebWVnYXVybFwuKGlufGxpbmspJC8sCiAgICAgICAgL14oYnVzaW5lc3Npc3MyfHRlY2hhbmRyZXZpZXd8eWVzbW92aWVzYXBwfGtwc2N0aHVsYXNpbG9naW4pXC5pbmZvJC8sCiAgICAgICAgL15zdGZseVwuKGlvfHByZXNzKSQvLAogICAgICAgIC9ebHlvblwua2ltJC8sCiAgICAgICAgL15mY1wubGMkLywKICAgICAgICAvXihwZXR0eXxza2lwc3x0cnxmbGF6KVwubGluayQvLAogICAgICAgIC9ecGF5c2tpcFwuKG1lfG9yZykkLywKICAgICAgICAvXmJ0Y1wubXMkLywKICAgICAgICAvXnNwbGFzaG5ld3NcLm9vbyQvLAogICAgICAgIC9eZXhwcmVzcy1jdXRcLm92aCQvLAogICAgICAgIC9ec2hvcnRcLnBlJC8sCiAgICAgICAgL14oY2xrfGNsbClcLihwcmVzc3xpbmt8c2h8aWN1KSQvLAogICAgICAgIC9eKGxvcHRlfG1lZ2FsaW5rKVwucHJvJC8sCiAgICAgICAgL14xMjNsaW5rXC4ocHd8dmlwKSQvLAogICAgICAgIC9ecm95YWxvd25cLnJldmlldyQvLAogICAgICAgIC9eZWFyblwudGhlcGx1c2l0XC5ybyQvLAogICAgICAgIC9ec2staXBcLihydXx0ZWNoKSQvLAogICAgICAgIC9edGlueWxpbmtcLnJ1biQvLAogICAgICAgIC9eKG9rb3xhaWl8c2hvcnRlbilcLnNoJC8sCiAgICAgICAgL14oZHV0Y2h5Y29ycHxhYm91dHRlY2gpXC5zcGFjZSQvLAogICAgICAgIC9eYnV5aXRvbmxpbmVcLnN0b3JlJC8sCiAgICAgICAgL15lYXRpbmdzXC5zdHJlYW0kLywKICAgICAgICAvXnRsXC50YyQvLAogICAgICAgIC9eKDE5MjE2ODEyNTR8Z2VraXx3ZWduZXJ8Z3BzaG9ydClcLnRlY2gkLywKICAgICAgICAvXihsaW5rdmlwfDRzaG9ydClcLnRrJC8sCiAgICAgICAgL14od3d3XC4pP3BuZFwudGwkLywKICAgICAgICAvXmdldFwudWp2XC5hbCQvLAogICAgICAgIC9eKHVybGNsb3VkfGltYWdlb3B0aW1pemVyKVwudXMkLywKICAgICAgICAvXihrb3lsaW5rc3xidXktaW4tNTk5cnMpXC53aW4kLywKICAgICAgICAvXmV4ZVwuKGlvfGFwcCkkLywKICAgICAgICAvXnNsaW5rXC5iaWQkLywKICAgICAgXSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgUmVjYXB0Y2hhSGFuZGxlcigpOwogICAgICBhd2FpdCBoYW5kbGVyLmNhbGwoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKGFyYWJ0dmxpbmt8c2FmZWt1fGR6NGxpbmspXC5jb20kLywKICAgICAgICAvXmxpbmtzb2ZsaWZlXC5jbyQvLAogICAgICAgIC9ed2lcLmNyJC8sCiAgICAgICAgL14oYml0Y29pbmx5fGNhc2h1cmwpXC5pbiQvLAogICAgICAgIC9ebGlua3NvZlwubGlmZSQvLAogICAgICAgIC9ed2ljclwubWUkLywKICAgICAgICAvXnNocnRpdFwudGVjaCQvLAogICAgICAgIC9eZmlyZXNob3J0c1wudGskLywKICAgICAgICAvXm1pdGx5XC51cyQvLAogICAgICBdLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBJbnZpc2libGVSZWNhcHRjaGFIYW5kbGVyKCk7CiAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBbCiAgICAgICAgL14xMjNzaG9ydFwuYml6JC8sCiAgICAgICAgL14oY3V0cGFpZHx0bWVhcm58aWN1dGxpbmspXC5jb20kLywKICAgICAgICAvXihjdHVpfGN1dGkpXC5pbiQvLAogICAgICAgIC9eenV0cm94XC5saW5rJC8sCiAgICAgICAgL14odGVjaGNyYXplfGhlYWx0aGluc2lkZXIpXC5vbmxpbmUkLywKICAgICAgICAvXmN1dHdpblwuKHVzfGNvbSkkLywKICAgICAgICAvXih3d3dcLik/c2hyaW5rXC52aXAkLywKICAgICAgXSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgTm9uRGlzYWJsZWRSZWNhcHRjaGFIYW5kbGVyKCk7CiAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXih3d3dcLik/b3VybFwuaW8kLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgT1VSTEhhbmRsZXIoKTsKICAgICAgYXdhaXQgaGFuZGxlci5jYWxsKCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eKHd3d1wuKT9saW5rZHJvcFwubmV0JC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBoYW5kbGVyID0gbmV3IExpbmtEcm9wSGFuZGxlcigpOwogICAgICBhd2FpdCBoYW5kbGVyLmNhbGwoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL153d3dcLnNob3J0bHlcLnh5eiQvLAogICAgICBwYXRoOiAvXlwvbGluayQvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaGFuZGxlciA9IG5ldyBTaG9ydGx5SGFuZGxlcigpOwogICAgICBhd2FpdCBoYW5kbGVyLmNhbGwoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKGN1dC11cmxzfGxpbmNsaWt8cHJlbWl1bXplbnxieTZka3xtaWt5bW9vbnN8bWFuMnBybylcLmNvbSQvLAogICAgICAgIC9eKGxpbms0d2lufGxvYWR1cmx8Y3V0NGxpbmt8cmFvbGlua3xhZHNob3J0ZSlcLmNvbSQvLAogICAgICAgIC9ec2hvcnRcLnBhc3Rld21hXC5jb20kLywKICAgICAgICAvXmxpbmtmbHlcLmdhb3NtZWRpYVwuY29tJC8sCiAgICAgICAgL14od3d3XC4pP3ZpcmFsdWtrXC5jb20kLywKICAgICAgICAvXih3d3dcLik/bmlhZ29zaG9ydFwuY29tJC8sCiAgICAgICAgL153d3dcLndvcmxkaGFja1wubmV0JC8sCiAgICAgICAgL14oZWtsaW5rKVwubmV0JC8sCiAgICAgICAgL15yb3l1cmxzXC5iaWQkLywKICAgICAgICAvXnNob3J0aXRcLmNhJC8sCiAgICAgICAgL14odXJsZXxhZHNob3J0KVwuY28kLywKICAgICAgICAvXigxKT9pZHNseVwuKGNvbXxiaWR8bmV0fG9yZykkLywKICAgICAgICAvXnNob3J0YWRcLmNmJC8sCiAgICAgICAgL14oYWRiaWx0eXx0YWl2ZSlcLmluJC8sCiAgICAgICAgL14oY3Vyc3xjcnVzfDRjdXR8dTJzfGwycylcLmlvJC8sCiAgICAgICAgL14xMjNsaW5rXC4oaW98Y298cHJlc3N8cHJvKSQvLAogICAgICAgIC9ecGV0dHlcLmxpbmskLywKICAgICAgICAvXih3ZWVmeXxhZGJ1bGx8emVpenxsaW5rNHxhZGNvaW4pXC5tZSQvLAogICAgICAgIC9eZHp1cmxcLm1sJC8sCiAgICAgICAgL15zcGFtbGlua1wub3JnJC8sCiAgICAgICAgL14odHdpa3xhZHNsaW5rKVwucHckLywKICAgICAgICAvXmdpdFwudGMkLywKICAgICAgICAvXihhZGZ1fGxpbmt1KVwudXMkLywKICAgICAgXSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgU3RhZ2VkSGFuZGxlcigpOwogICAgICBhd2FpdCBoYW5kbGVyLmNhbGwoKTsKICAgIH0sCiAgfSk7CiAgY2xhc3MgQWJzdHJhY3RIYW5kbGVyIHsKICAgIGNvbnN0cnVjdG9yICgpIHsKICAgICAgdGhpcy5fb3ZlcmxheVNlbGVjdG9yID0gWwogICAgICAgICdbY2xhc3MkPSJPdmVybGF5Il0nLAogICAgICAgICcjX19yYW5kb21fY2xhc3NfbmFtZV9fJywKICAgICAgICAnI2hlYWRsaW5lYXRhcycsCiAgICAgICAgJyNteU1vZGFsJywKICAgICAgICAnLm9wYWNpdHlfd3JhcHBlcicsCiAgICAgICAgJyNvdmVybGF5JywKICAgICAgXS5qb2luKCcsICcpOwogICAgICB0aGlzLl9mb3JtU2VsZWN0b3IgPSBbCiAgICAgICAgJyNnby1saW5rJywKICAgICAgICAnLmdvLWxpbmsnLAogICAgICAgICcjb3JpZ2luYWxMaW5rLmdldC1saW5rJywKICAgICAgICAnZm9ybVthY3Rpb249Ii9saW5rcy9nbyJdJywKICAgICAgICAnZm9ybVthY3Rpb249Ii9saW5rcy9saW5rZHJvcGdvIl0nLAogICAgICBdLmpvaW4oJywgJyk7CiAgICB9CiAgICByZW1vdmVPdmVybGF5ICgpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSh0aGlzLl9vdmVybGF5U2VsZWN0b3IpOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uYmxvY2sodGhpcy5fb3ZlcmxheVNlbGVjdG9yLCBkb2N1bWVudC5ib2R5KTsKICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaW5pdGlhbCc7CiAgICAgIH0sIDUwMCk7CiAgICB9CiAgICByZW1vdmVGcmFtZSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgfQogICAgYXN5bmMgY2FsbCAoKSB7CiAgICAgIGNvbnN0IG9rID0gYXdhaXQgdGhpcy5wcmVwYXJlKCk7CiAgICAgIGlmICghb2spIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbXcgPSBhd2FpdCB0aGlzLmdldE1pZGRsZXdhcmUoKTsKICAgICAgaWYgKCFtdykgewogICAgICAgIHRoaXMud2l0aG91dE1pZGRsZXdhcmUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5nZXRVUkwobXcpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICAgIH0KICB9CiAgY2xhc3MgTm9SZWNhcHRjaGFIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyIHsKICAgIHByZXBhcmUgKCkgewogICAgICB0aGlzLnJlbW92ZUZyYW1lKCk7CiAgICAgIHRoaXMucmVtb3ZlT3ZlcmxheSgpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGFzeW5jIGdldE1pZGRsZXdhcmUgKCkgewogICAgICByZXR1cm4gYXdhaXQgZ2V0SlF1ZXJ5Rm9ybSh0aGlzLl9mb3JtU2VsZWN0b3IpOwogICAgfQogICAgd2l0aG91dE1pZGRsZXdhcmUgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygnbm8gZm9ybScpOwogICAgfQogICAgYXN5bmMgZ2V0VVJMIChqRm9ybSkgewogICAgICByZXR1cm4gYXdhaXQgZ2V0VVJMRnJvbUpRdWVyeUZvcm0oakZvcm0pOwogICAgfQogIH0KICBjbGFzcyBSZWNhcHRjaGFIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyIHsKICAgIGFzeW5jIHByZXBhcmUgKCkgewogICAgICB0aGlzLnJlbW92ZU92ZXJsYXkoKTsKICAgICAgY29uc3QgZiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjY2FwdGNoYVNob3J0bGluaywgZGl2LmctcmVjYXB0Y2hhJyk7CiAgICAgIGlmICghZikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5pbmZvKCdyZWNhcHRjaGEgZGV0ZWN0ZWQsIHN0b3AnKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmluZm8oJ3RyeWluZyB0byBsaXN0ZW4gc3VibWl0IGJ1dHRvbicpOwogICAgICBjb25zdCBiID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNpbnZpc2libGVDYXB0Y2hhU2hvcnRsaW5rJyk7CiAgICAgIGlmICghYikgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBhd2FpdCB0aGlzLnN1Ym1pdExpc3RlbihiLCBmKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgYXN5bmMgc3VibWl0TGlzdGVuIChiKSB7CiAgICAgIGNvbnN0IG8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7CiAgICAgICAgaWYgKCFiLmRpc2FibGVkKSB7CiAgICAgICAgICBiLmNsaWNrKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgby5vYnNlcnZlKGIsIHsKICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLAogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGdldE1pZGRsZXdhcmUgKCkgewogICAgICByZXR1cm4gYXdhaXQgZ2V0SlF1ZXJ5Rm9ybSh0aGlzLl9mb3JtU2VsZWN0b3IpOwogICAgfQogICAgd2l0aG91dE1pZGRsZXdhcmUgKCkgewogICAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNsaW5rLXZpZXcnKTsKICAgICAgZi5zdWJtaXQoKTsKICAgIH0KICAgIGFzeW5jIGdldFVSTCAoakZvcm0pIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDAwKTsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgZ2V0VVJMRnJvbUpRdWVyeUZvcm0oakZvcm0pOwogICAgICAgICAgaWYgKHVybCkgewogICAgICAgICAgICByZXR1cm4gdXJsOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YXJuKGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBjbGFzcyBJbnZpc2libGVSZWNhcHRjaGFIYW5kbGVyIGV4dGVuZHMgUmVjYXB0Y2hhSGFuZGxlciB7CiAgICBhc3luYyBzdWJtaXRMaXN0ZW4gKGIsIGYpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoMTAwMCk7CiAgICAgIGNvbnN0IGNsaWNrID0gZi5jbGllbnRXaWR0aCA9PT0gMCB8fCBmLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwOwogICAgICBpZiAoY2xpY2sgJiYgIWIuZGlzYWJsZWQpIHsKICAgICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygnY2xpY2tpbmcgc3VibWl0IGJ1dHRvbiwgYmVjYXVzZSByZWNhcHRjaGEgd2FzIGVtcHR5Jyk7CiAgICAgICAgYi5zZXRBdHRyaWJ1dGUoJ29uY2xpY2snLCAnJyk7CiAgICAgICAgYi5jbGljaygpOwogICAgICB9CiAgICB9CiAgfQogIGNsYXNzIE5vbkRpc2FibGVkUmVjYXB0Y2hhSGFuZGxlciBleHRlbmRzIFJlY2FwdGNoYUhhbmRsZXIgewogICAgYXN5bmMgc3VibWl0TGlzdGVuIChiKSB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwKTsKICAgICAgICBpZiAoZ3JlY2FwdGNoYSAmJiBncmVjYXB0Y2hhLmdldFJlc3BvbnNlKCkubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICBiLmNsaWNrKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgY2xhc3MgT1VSTEhhbmRsZXIgZXh0ZW5kcyBSZWNhcHRjaGFIYW5kbGVyIHsKICAgIGFzeW5jIGdldE1pZGRsZXdhcmUgKCkgewogICAgICByZXR1cm4gewogICAgICAgIHZlcmlmeTogYXdhaXQgZ2V0SlF1ZXJ5Rm9ybSgnI2dldC1saW5rJyksCiAgICAgICAgZ286IGF3YWl0IGdldEpRdWVyeUZvcm0odGhpcy5fZm9ybVNlbGVjdG9yKSwKICAgICAgfTsKICAgIH0KICAgIGFzeW5jIGdldFVSTCAoakZvcm1PYmplY3QpIHsKICAgICAgYXdhaXQgZ2V0VVJMRnJvbUpRdWVyeUZvcm0oakZvcm1PYmplY3QudmVyaWZ5KTsKICAgICAgcmV0dXJuIGF3YWl0IGdldFVSTEZyb21KUXVlcnlGb3JtKGpGb3JtT2JqZWN0LmdvKTsKICAgIH0KICB9CiAgY2xhc3MgTGlua0Ryb3BIYW5kbGVyIGV4dGVuZHMgUmVjYXB0Y2hhSGFuZGxlciB7CiAgICBhc3luYyBnZXRNaWRkbGV3YXJlICgpIHsKICAgICAgcmV0dXJuIGF3YWl0IGdldEpRdWVyeUZvcm0oJyNteWxpbmsxJyk7CiAgICB9CiAgfQogIGNsYXNzIFN0YWdlZEhhbmRsZXIgZXh0ZW5kcyBBYnN0cmFjdEhhbmRsZXIgewogICAgcHJlcGFyZSAoKSB7CiAgICAgIHRoaXMucmVtb3ZlRnJhbWUoKTsKICAgICAgdGhpcy5yZW1vdmVPdmVybGF5KCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXN5bmMgZ2V0TWlkZGxld2FyZSAoKSB7CiAgICAgIGNvbnN0IGYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2xpbmstdmlldycpOwogICAgICBpZiAoIWYpIHsKICAgICAgICByZXR1cm4gZG9jdW1lbnQ7CiAgICAgIH0KICAgICAgY29uc3QgYXJncyA9IGV4dHJhY3RBcmd1bWVudChmKTsKICAgICAgY29uc3QgdXJsID0gZi5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpOwogICAgICBsZXQgcGFnZSA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KHVybCwgYXJncyk7CiAgICAgIHBhZ2UgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0udG9ET00ocGFnZSk7CiAgICAgIHJldHVybiBwYWdlOwogICAgfQogICAgd2l0aG91dE1pZGRsZXdhcmUgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygnbm8gcGFnZScpOwogICAgfQogICAgYXN5bmMgZ2V0VVJMIChwYWdlKSB7CiAgICAgIGNvbnN0IGYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2dvLWxpbmsnLCBwYWdlKTsKICAgICAgY29uc3QgYXJncyA9IGV4dHJhY3RBcmd1bWVudChmKTsKICAgICAgY29uc3QgdXJsID0gZi5nZXRBdHRyaWJ1dGUoJ2FjdGlvbicpOwogICAgICBsZXQgZGF0YSA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KHVybCwgYXJncyk7CiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogICAgICBpZiAoZGF0YSAmJiBkYXRhLnVybCkgewogICAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5udWtlKGRhdGEudXJsKTsKICAgICAgICByZXR1cm4gZGF0YS51cmw7CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCd3cm9uZyBkYXRhJyk7CiAgICB9CiAgfQogIGNsYXNzIFNob3J0bHlIYW5kbGVyIGV4dGVuZHMgQWJzdHJhY3RIYW5kbGVyIHsKICAgIHByZXBhcmUgKCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGFzeW5jIGdldE1pZGRsZXdhcmUgKCkgewogICAgICBsZXQgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbXlNb2RhbCAuYnRuLXByaW1hcnknKTsKICAgICAgYSA9IGEucGF0aG5hbWUubWF0Y2goL15cL3JcLyguKykvKTsKICAgICAgcmV0dXJuIGFbMV07CiAgICB9CiAgICB3aXRob3V0TWlkZGxld2FyZSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5pbmZvKCdubyBwYWdlJyk7CiAgICB9CiAgICBhc3luYyBnZXRVUkwgKGlkKSB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5qUXVlcnkucG9zdCgnZ2V0bGluay5waHAnLCB7aWQ6IGlkfSkuZG9uZShmdW5jdGlvbiAodXJsKSB7CiAgICAgICAgICBpZiAodXJsLm1hdGNoKC9eaHR0cC8pKSB7CiAgICAgICAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwMCk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gZXh0cmFjdEFyZ3VtZW50IChmb3JtKSB7CiAgICBjb25zdCBhcmdzID0ge307CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uZm9yRWFjaChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCQoJ2lucHV0JywgZm9ybSksICh2KSA9PiB7CiAgICAgIGFyZ3Nbdi5uYW1lXSA9IHYudmFsdWU7CiAgICB9KTsKICAgIHJldHVybiBhcmdzOwogIH0KICBhc3luYyBmdW5jdGlvbiBnZXRKUXVlcnlGb3JtIChzZWxlY3RvcikgewogICAgbGV0IGpRdWVyeSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuJDsKICAgIHdoaWxlICghalF1ZXJ5KSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwKTsKICAgICAgalF1ZXJ5ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy4kOwogICAgfQogICAgY29uc3QgZiA9IGpRdWVyeShzZWxlY3Rvcik7CiAgICBpZiAoZi5sZW5ndGggPiAwKSB7CiAgICAgIHJldHVybiBmOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGdldFVSTEZyb21KUXVlcnlGb3JtIChqRm9ybSkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsKICAgICAgaWYgKGpGb3JtLmlzKCdhJykgJiYgakZvcm0uYXR0cignaHJlZicpKSB7CiAgICAgICAgcmVzb2x2ZShqRm9ybS5hdHRyKCdocmVmJykpOwogICAgICB9CiAgICAgIGNvbnN0IGpRdWVyeSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuJDsKICAgICAgalF1ZXJ5LmFqYXgoewogICAgICAgIGRhdGFUeXBlOiAnanNvbicsCiAgICAgICAgdHlwZTogJ1BPU1QnLAogICAgICAgIHVybDogakZvcm0uYXR0cignYWN0aW9uJyksCiAgICAgICAgZGF0YTogakZvcm0uc2VyaWFsaXplKCksCiAgICAgICAgc3VjY2VzczogKHJlc3VsdCkgPT4gewogICAgICAgICAgaWYgKHJlc3VsdC51cmwpIHsKICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQudXJsKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLkFkc0J5cGFzc2VyRXJyb3IocmVzdWx0Lm1lc3NhZ2UpKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGVycm9yOiAoeGhyLCBzdGF0dXMsIGVycm9yKSA9PiB7CiAgICAgICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2Fybih4aHIsIHN0YXR1cywgZXJyb3IpOwogICAgICAgICAgcmVqZWN0KG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcigncmVxdWVzdCBlcnJvcicpKTsKICAgICAgICB9LAogICAgICB9KTsKICAgIH0pOwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmxpbmtkdWl0XC5uZXQkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmNvbC1sZy04IGgxJykudGV4dENvbnRlbnQ7CiAgICBjb25zdCBjaGVjayA9IGwubWF0Y2goL15odHRwcz86XC9cLy8pOwogICAgaWYgKGNoZWNrKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybjsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/bGlua3BsdWdhcHBcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbWNfZW1iZWRfc2lnbnVwX3Njcm9sbCBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmxpbmtzYXNcLnVzJC8sCiAgICBwYXRoOiAvXihcL1x3KykkLywKICB9LAogIGFzeW5jIHJlYWR5IChtKSB7CiAgICBjb25zdCByZWNhcHRjaGEgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0udHJ5RXZlcnkoMTAwMCwgKCkgPT4gewogICAgICBjb25zdCByZWNhcHRjaGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ctcmVjYXB0Y2hhLXJlc3BvbnNlJyk7CiAgICAgIGlmICghcmVjYXB0Y2hhKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKCFyZWNhcHRjaGEudmFsdWUpIHsKICAgICAgICByZXR1cm4gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmU7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlY2FwdGNoYS52YWx1ZTsKICAgIH0pOwogICAgY29uc3QgdXJsID0gYGh0dHA6Ly9pcGluZm8uaW8vJHtfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uZ2VuZXJhdGVSYW5kb21JUCgpfS9qc29uYDsKICAgIGxldCBpcGluZm8gPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KHVybCk7CiAgICBpcGluZm8gPSBKU09OLnBhcnNlKGlwaW5mbyk7CiAgICBjb25zdCBwYXlsb2FkID0gewogICAgICBjb2RlQWRzOiAxLAogICAgICBjb3VudHJ5OiBpcGluZm8uY291bnRyeSwKICAgICAgaXBBZGRyZXNzOiBpcGluZm8uaXAsCiAgICAgIHJlY2FwdGNoYTogcmVjYXB0Y2hhLAogICAgfTsKICAgIGNvbnN0IHRva2VuID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldENvb2tpZSgnWFNSRi1UT0tFTicpOwogICAgbGV0IGRhdGEgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdCgnL2dvJyArIG0ucGF0aFsxXSwgcGF5bG9hZCwgewogICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAnWC1YU1JGLVRPS0VOJzogdG9rZW4sCiAgICB9KTsKICAgIGRhdGEgPSBKU09OLnBhcnNlKGRhdGEpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRhdGEubWVzc2FnZSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15saW5rc2FzXC51cyQvLAogICAgcGF0aDogL15cL2dvXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjYnRuU3VibWl0Jyk7CiAgICBpZiAoIWEpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdXJsID0gYS5ocmVmOwogICAgY29uc3QgcGF0dGVybiA9IC9odHRwcz86XC9cLy9nOwogICAgbGV0IGxhc3RVUkwgPSAnJzsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGNvbnN0IG1hdGNoZWQgPSBwYXR0ZXJuLmV4ZWModXJsKTsKICAgICAgaWYgKCFtYXRjaGVkKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbGFzdFVSTCA9IG1hdGNoZWQgKyB1cmwuc3Vic3RyaW5nKHBhdHRlcm4ubGFzdEluZGV4KTsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsYXN0VVJMKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXihsaW5rc2hyaW5rfGxua3Nocm5rKVwubmV0JC8sCiAgICBwYXRoOiAvXlwvW2EtekEtWjAtOV0rJC8sCiAgfSwKICBhc3luYyBzdGFydCAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93Ll9pbXBzcGNhYmUgPSAwOwogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGwgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3JldkNcKCIoW14iXSspIlwpLyk7CiAgICBsID0gYXRvYihsWzFdKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnLycgKyBsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXihsaW5rc2hyaW5rfGxua3Nocm5rKVwubmV0JC8sCiAgICBwYXRoOiAvPSguKykkLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobS5wYXRoWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmR3aW5kbHlcLmlvJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgbCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvZW5jRFwoIihbXiJdKykiXCkvKTsKICAgIGlmIChsKSB7CiAgICAgIGwgPSBhdG9iKGxbMV0pOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoJy8nICsgbCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGwgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2RvY3VtZW50XC5sb2NhdGlvblwuaHJlZiA9ICIoW14iXSspIi8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGxbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15saW5rc3VwdG9cLmNvbSQvLAogICAgICAvXnVwbGlua3RvXC5tZSQvLAogICAgXSwKICAgIHBhdGg6IC9eXC92aWV3XC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuc3VibWl0LWNhcHRjaGEucm93IC5jb2wtc20tMy5jb2wtc20tb2Zmc2V0LTQgYnV0dG9uJyk7CiAgICBsLmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXmxpbmstdG9cLm5ldCQvLAogICAgICAvXmxpbmt2ZXJ0aXNlXC5jb20kLywKICAgIF0sCiAgICBxdWVyeTogL15cP3I9KFthLXpBLVowLTkvPV0rKSQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGNvbnN0IHVybCA9IGF0b2IobS5xdWVyeVsxXSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRpcmVjdC1saW5rXC5uZXQkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGx2ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC93aW5kb3cubG9jYXRpb24uaHJlZiA9IFwoIihbXiJdKykiXCk7Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobHZbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHJkPylsbmtcLmNvJC8sCiAgICBwYXRoOiAvXlwvW14uXSskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGYgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnaWZyYW1lI2Rlc3QnKTsKICAgIGlmIChmKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhmLnNyYyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgbGV0IG8gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI3VybGhvbGRlcicpOwogICAgaWYgKG8pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG8udmFsdWUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBvID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNza2lwQnRuJyk7CiAgICBpZiAobykgewogICAgICBvID0gby5xdWVyeVNlbGVjdG9yKCdhJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhvLmhyZWYpOwogICAgICByZXR1cm47CiAgICB9CiAgICBvID0gZG9jdW1lbnQudGl0bGUucmVwbGFjZSgvKExOSy5jb3xMaW5rYmVlKVxzKjpccyovLCAnJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsobyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLmxvbGluZXpcLmNvbSQvLAogICAgcXVlcnk6IC9cPyguKykvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtLnF1ZXJ5WzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wubWlqZVwubmV0JC8sCiAgICBwYXRoOiAvXlwvXHcrXC8oLispJC8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgdXJsID0gYXRvYihtLnBhdGhbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXm1pbmlkcm9pZFwubmV0JC8sCiAgICAgIC9ebGlua3BvaVwuaW4kLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2EucmVkaXJlY3QsIGFbdGFyZ2V0PV9ibGFua11bcmVsPW5vZm9sbG93XScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15taXJyb3JmaWxlaG9zdFwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgzICogMTAwMCk7CiAgICBjb25zdCBmcmFtZSA9IGZyYW1lc1swXTsKICAgIGNvbnN0IGZvcm0gPSBmcmFtZS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7CiAgICBmb3JtLnRhcmdldCA9ICdfcGFyZW50JzsKICAgIGZvcm0uYWN0aW9uID0gbG9jYXRpb24udG9TdHJpbmcoKTsKICAgIGNvbnN0IGlucHV0ID0gZnJhbWUuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgIGlucHV0LnZhbHVlID0gJ0Rvd25sb2FkJzsKICAgIGlucHV0LnR5cGUgPSAnc3VibWl0JzsKICAgIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgZnJhbWUuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTsKICAgIGlucHV0LmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15tb2VzdWJzXC5jb20kLywKICAgIHBhdGg6IC9eXC91cmxcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuZ290b2xpbmsgPiBjZW50ZXI6bnRoLWNoaWxkKDEpID4gZGl2Om50aC1jaGlsZCgxKSA+IGk6bnRoLWNoaWxkKDIpJyk7CiAgICBhID0gYS50ZXh0Q29udGVudDsKICAgIGNvbnN0IGkgPSBhLmxhc3RJbmRleE9mKCdodHRwJyk7CiAgICBhID0gYS5zdWJzdHIoaSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly9teS1saW5rLnByby8qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lmcmFtZVtzY3JvbGxpbmc9YXV0b10nKTsKICAgIGlmIChpKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhpLnNyYyk7CiAgICB9CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP215bGlua1wuem9uZSQvLAogICAgcGF0aDogL15cL1teL10rJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGNvbnN0IG1hdGNoZXMgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoLzxhIGhyZWY9Imh0dHBzOlwvXC8oPzp3d3dcLik/bXlsaW5rXC56b25lXC9saW5rXC9yZWRpcmVjdFwvXD91cmw9KFteJl0rKSYvKTsKICAgIGNvbnN0IHVybCA9IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaGVzWzFdKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eb25lcGllY2UtZXhcLmNvbVwuYnIkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgY29uc3QgbWF0Y2hlcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvPGEgaHJlZj0iKFteJl0rKSg/PSIgKS8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1hdGNoZXNbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL153d3dcLm5hbWl5dFwuY29tJC8sCiAgICAgIC9ecmVhbHNodFwubW9iaSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG4gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3NlY3Rpb24xIGZvcm0gaW5wdXQjc2VjdGlvbjEnKTsKICAgIG4uY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXm5tYWNcLnRvJC8sCiAgICBwYXRoOiAvXlwvZG93bmxvYWRcLyguKykvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGNvbnN0IHVybCA9IGF0b2IobS5wYXRoWzFdKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebnNmd1wuaW4kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2xvbmdfdXJsIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebnV0c2hlbGx1cmxcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaWZyYW1lID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lmcmFtZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGlmcmFtZS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5vbmlcLnZuJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgIGxldCBkYXRhID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9kYXRhOiIoW14iXSspIi8pOwogICAgaWYgKCFkYXRhKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcigncGF0dGVybiBjaGFuZ2VkJyk7CiAgICB9CiAgICBkYXRhID0gZGF0YVsxXTsKICAgIGNvbnN0IHVybCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQoJy9jbGljay5odG1sJywgZGF0YSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHd3d1wuKT9vdW9cLihpb3xwcmVzcykkLywKICAgICAgL14oc2xvb21wfG5vdmFlbnJldGEpXC5zcGFjZSQvLAogICAgXSwKICAgIHBhdGg6IC9eXC9nb1wvXHcrJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZm9ybScpLnN1Ym1pdCgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecFwucHckLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgbGV0IG0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3dpbmRvd1wubG9jYXRpb24gPSAiKC4qKSI7Lyk7CiAgICBtID0gbVsxXTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnBkaTJcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IHMgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3RvcFwubG9jYXRpb24gPSAnKFteJ10rKScvKTsKICAgIHMgPSBzWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14ocHJvYnVzaW5lc3NodWJ8dGVjbm9nYilcLmNvbSQvLAogICAgICAvXih0cmFja3l3ZXxzdGFydmF0ZSlcLmluJC8sCiAgICAgIC9edmlyYWxjb2xsZWN0XC5pbmZvJC8sCiAgICAgIC9eKHRlY2hub2RpYXxvdXJ0ZWNobm9ld3xtdXRoYXJhbW1zc3x0aGFuZGF8dGhpbmFuYSlcLnh5eiQvLAogICAgICAvXmVudHJldGVuZG9uYXdlYlwuZ2EkLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgZiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdmb3JtW2lkJD0tc3Vic2NyaWJlXScpOwogICAgaWYgKGYpIHsKICAgICAgZi5hY3Rpb24gPSBmLmFjdGlvbi5yZXBsYWNlKCdodHRwOicsICdodHRwczonKTsKICAgICAgZi5zdWJtaXQoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvbG9jYXRpb25cLmhyZWY9IihbXiJdKykiLyk7CiAgICBmID0gZlsxXTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnB1Y3VrXC54eXokLywKICAgIHBhdGg6IC9eXC9cdysvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgcHggPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2NvbnRlbnQgYXJ0aWNsZSBjZW50ZXIgYS5idXR0b24uaWNvbi5mYS1saW5rJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocHguaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly9yaWNobGluay5jb20vYXBwL3dlYnNjcj9jbWQ9X2NsaWNrJmtleT0qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmcmFtZXNldCcpOwogICAgZiA9IGYub25sb2FkLnRvU3RyaW5nKCk7CiAgICBmID0gZi5tYXRjaCgvdXJsPShbXiZdKykvKTsKICAgIGlmIChmKSB7CiAgICAgIGYgPSBkZWNvZGVVUklDb21wb25lbnQoZlsxXSk7CiAgICB9IGVsc2UgewogICAgICBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ZyYW1lW25hbWU9c2l0ZV0nKTsKICAgICAgZiA9IGYuc3JjOwogICAgfQogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecHJldmlld1wucmx1XC5ydSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjY29udGVudCA+IC5sb25nX3VybCA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5yb25cLnZuJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzY3JpcHQgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoJ2xpbmtuZXh0dG9wJyk7CiAgICBjb25zdCBkYXRhID0gc2NyaXB0Lm1hdGNoKC9kYXRhOiIoW14iXSspIi8pOwogICAgbGV0IHVybCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuZG9tYWluICsgJ2NsaWNrLmh0bWw/JyArIGRhdGFbMV07CiAgICB1cmwgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KHVybCwge30sIHsKICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04JywKICAgIH0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3NhXC5hZSQvLAogICAgcGF0aDogL15cL1x3K1wvJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9jb25zdCByZWFsX2xpbmsgPSAnKFteJ10rKSc7Lyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3NhZmV1cmxcLmV1JC8sCiAgICBwYXRoOiAvXC9cdysvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGRpcmVjdFVybCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvd2luZG93XC5vcGVuXCgiKFteIl0rKSJcKTsvKTsKICAgIGlmICghZGlyZWN0VXJsKSB7CiAgICAgIHRocm93IG5ldyBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uQWRzQnlwYXNzZXJFcnJvcignc2NyaXB0IGNvbnRlbnQgY2hhbmdlZCcpOwogICAgfQogICAgZGlyZWN0VXJsID0gZGlyZWN0VXJsWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRpcmVjdFVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnNlZ21lbnRuZXh0XC5jb20kLywKICAgICAgL14od3d3XC4pP3ZpZGVvZ2FtZXNibG9nZ2VyXC5jb20kLywKICAgIF0sCiAgICBwYXRoOiAvXlwvaW50ZXJzdGl0aWFsXC5odG1sJC8sCiAgICBxdWVyeTogL3JldHVybl91cmw9KFteJl0rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRlY29kZVVSSUNvbXBvbmVudChtLnF1ZXJ5WzFdKSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXih3d3dcLik/c2VtcHJvdFwuY29tJC8sCiAgICAgIC9eNDZcLjE2NlwuMTY3XC4xNiQvLAogICAgXSwKICAgIHBhdGg6IC9eXC9haGxpXC5waHAvLAogICAgcXVlcnk6IC9eXD91cmw9KC4qKS8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzZW0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3ZhciB0aGVfdXJsID0gJyhbXiddKyknOy8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHNlbVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXih3d3dcLik/YXBwbG9hZHpcLnJ1JC8sCiAgICAgIC9eKHd3d1wuKT9zZW9tYWZpYVwubmV0JC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ3RhYmxlIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIGNvbnN0IGhvc3RSdWxlcyA9IFsKICAgIC9eKGpudzB8Y2xsa21lfGNsa21laW58Y29ybmVleXxjZWVzdHkpXC5jb20kLywKICAgIC9eKGRlc3R5eXxmZXN0eXl8Z2VzdHl5KVwuY29tJC8sCiAgICAvXnNoXC5zdCQvLAogICAgL14odmlpZHx3aWlkfGNsa21lKVwubWUkLywKICBdOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IGhvc3RSdWxlcywKICAgICAgcGF0aDogL15cL2ZyZWV6ZVwvLisvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgICAgY29uc3QgbyA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHsKICAgICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4gewogICAgICAgICAgICBpZiAobXV0YXRpb24udGFyZ2V0LmdldEF0dHJpYnV0ZSgnY2xhc3MnKS5tYXRjaCgvYWN0aXZlLykpIHsKICAgICAgICAgICAgICBvLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgICAgICByZXNvbHZlKG11dGF0aW9uLnRhcmdldC5ocmVmKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgby5vYnNlcnZlKE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjc2tpcF9idXR0b24nKSwgewogICAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlcjogWydjbGFzcyddLAogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgY29uc3QgdXJsID0gYXdhaXQgcHJvbWlzZTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IGhvc3RSdWxlcywKICAgICAgcGF0aDogL2h0dHBzPzpcL1wvLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAoKSB7CiAgICAgIGxldCB1cmwgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUgKyB3aW5kb3cubG9jYXRpb24uc2VhcmNoICsgd2luZG93LmxvY2F0aW9uLmhhc2g7CiAgICAgIHVybCA9IHVybC5tYXRjaCgvKGh0dHBzPzpcL1wvLiopJC8pOwogICAgICB1cmwgPSB1cmxbMV07CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBob3N0UnVsZXMsCiAgICAgIHBhdGg6IC9eXC9bXGRcd10rLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuX2ltcHNwY2FiZSA9IDA7CiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZUFsbFRpbWVyKCk7CiAgICAgIGNvbnN0IG0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL3Nlc3Npb25JZDogIihbXGRcd10rKSIsLyk7CiAgICAgIGlmIChtKSB7CiAgICAgICAgYWZ0ZXJHb3RTZXNzaW9uSWQobVsxXSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7CiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goKCkgPT4gewogICAgICAgICAgY29uc3QgbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvc2Vzc2lvbklkOiAiKFtcZFx3XSspIiwvKTsKICAgICAgICAgIGlmIChtKSB7CiAgICAgICAgICAgIG8uZGlzY29ubmVjdCgpOwogICAgICAgICAgICBhZnRlckdvdFNlc3Npb25JZChtWzFdKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIG8ub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7CiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICB9KTsKICAgIH0sCiAgfSk7CiAgZnVuY3Rpb24gYWZ0ZXJHb3RTZXNzaW9uSWQgKHNlc3Npb25JZCkgewogICAgY29uc3QgWF9OZXdSZWxpY19JRCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygveHBpZDoiKFteIl0rKSIvKTsKICAgIGNvbnN0IGRhdGEgPSB7CiAgICAgIGFkU2Vzc2lvbklkOiBzZXNzaW9uSWQsCiAgICB9OwogICAgY29uc3QgaGVhZGVyID0gewogICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQnLAogICAgfTsKICAgIGlmIChYX05ld1JlbGljX0lEKSB7CiAgICAgIGhlYWRlclsnWC1OZXdSZWxpYy1JRCddID0gWF9OZXdSZWxpY19JRDsKICAgIH0KICAgIGNvbnN0IGkgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQoJy9zaG9ydGVzdC11cmwvZW5kLWFkc2Vzc2lvbicsIGRhdGEsIGhlYWRlcikudGhlbihmdW5jdGlvbiAodGV4dCkgewogICAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHRleHQpOwogICAgICAgIGlmIChyLnN0YXR1cyA9PSAnb2snICYmIHIuZGVzdGluYXRpb25VcmwpIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaSk7CiAgICAgICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlQWxsVGltZXIoKTsKICAgICAgICAgIGNvbnN0IHVybCA9IGRlY29kZVVSSUNvbXBvbmVudChyLmRlc3RpbmF0aW9uVXJsKTsKICAgICAgICAgIHJldHVybiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodXJsKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwgMTAwMCk7CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHNob3J0fHNydClcLmFtJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg1MDAwKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnJywgewogICAgICBwb3N0OiB7CiAgICAgICAgX2ltYWdlOiAnQ29udGludWUnLAogICAgICB9LAogICAgfSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3Nob3J0aVwuZ2EkLywKICAgIHBhdGg6IFsKICAgICAgL15cL1x3KyQvLAogICAgICAvXlwvdXJsX3JlZGlyZWN0b3JcLmh0bWwkLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBmID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQkKCdmcmFtZScpOwogICAgY29uc3QgWywgdixdID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmZpbmQoZiwgKHZhbHVlKSA9PiB7CiAgICAgIGlmICh2YWx1ZS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpIHsKICAgICAgICByZXR1cm4gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmU7CiAgICAgIH0KICAgICAgcmV0dXJuICdUYXJnZXQgZnJhbWUgZm91bmQnOwogICAgfSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsodi5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec2hvcnRpZFwuY28kLywKICAgIHBhdGg6IC9eXC9bYS16QS1aMC05XSsvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgcyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdhI21ha2luZ2RpZmZlcmVudHRpbWVyJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsocy5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmdldFwuc2hyaW5rLXNlcnZpY2VcLml0JC8sCiAgICBwYXRoOiAvXlwvKC4rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGAvL3d3dy5zaHJpbmstc2VydmljZS5pdC9zaHJpbmtlZC8ke20ucGF0aFsxXX1gKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wuc2hyaW5rLXNlcnZpY2VcLml0JC8sCiAgICBwYXRoOiAvXlwvc2hyaW5rZWRcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W2lkXVtuYW1lXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGkudmFsdWUpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5zaHJpbmstc2VydmljZVwuaXQkLywKICAgIHBhdGg6IC9eXC9bc2VdXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2JvZHkgPiBpbnB1dFtpZF1bbmFtZV0nKTsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhpLnZhbHVlKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnNodFwuaW8kLywKICAgIHBhdGg6IC9eXC9cZCtcLyguKykkLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBsZXQgdXJsID0gYXRvYihtLnBhdGhbMV0pOwogICAgdXJsID0gdXJsLm1hdGNoKC9ce3NodC1pb1x9KC4rKVx7c2h0LWlvXH0uKlx7c2h0LWlvXH0vKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmxbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec2h0bGlua1wuY28kLywKICAgIHBhdGg6IC9eXC9zaG9ydC11cmxcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtZXRhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ21ldGFbbmFtZT0iZGVzY3JpcHRpb24iXScpOwogICAgY29uc3QgdXJsID0gbWV0YS5jb250ZW50OwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zaHRtZVwuY28kLywKICAgIHBhdGg6IC9eXC9cdysvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgcyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuY29udGVudCBkaXYgYSBidXR0b24nKTsKICAgIHMuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/c2ltaWxhcnNpdGVzXC5jb20kLywKICAgIHBhdGg6IC9eXC9nb3RvXC8oW14/XSspLwogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGxldCBsID0gbS5wYXRoWzFdOwogICAgaWYgKCEvXmh0dHBzPzpcL1wvLy50ZXN0KGwpKSB7CiAgICAgIGwgPSAnaHR0cDovLycgKyBsOwogICAgfQogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec2xpbmtcLmJpZCQvLAogICAgcGF0aDogL15cL3Nob3J0XC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcudGV4dC1jZW50ZXIgYSNidG4tbWFpbi5idG4uYnRuLW1haW4nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5zcGFzdGVcLmNvbSQvLAogICAgcGF0aDogL15cL2dvXC9cdyskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGlkID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9ce2lkOicoXGQrKSdcfS8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoMzAwMCk7CiAgICBjb25zdCB1cmwgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucG9zdCgnL3NpdGUvZ2V0UmVkaXJlY3RMaW5rJywgewogICAgICBpZDogaWRbMV0sCiAgICB9KTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5zcGFzdGVcLmNvbSQvLAogICAgcGF0aDogL15cLyhzfHNpdGUpXC9cdyskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGNhcHRjaGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2dsb2JhbENhcHRjaGFDb25maXJtJyk7CiAgICBjYXB0Y2hhLmNsaWNrKCk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDAwKTsKICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgIGNvbnN0IHdvcmQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2N1cnJlbnRDYXBRdWUnKS50ZXh0Q29udGVudDsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoMTAwKTsKICAgICAgT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoYFtkYXRhLWlkPScke3dvcmR9J11gKS5jbGljaygpOwogICAgfQogICAgT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN0ZW1wbGF0ZS1jb250YWN0Zm9ybS1zdWJtaXQnKS5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec3ViMnVubG9ja1wuY29tJC8sCiAgICBwYXRoOiAvXlwvbGlua1wvZ2V0XC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3Qgc3UgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYSNsaW5rLnVubG9jay1zdGVwLWxpbmsuZ2V0bGluaycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHN1LmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec3ViMnVubG9ja1wuY29tJC8sCiAgICBwYXRoOiAvXlwvW2EtekEtWjAtOV0rLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHN1ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC8naHJlZicsICcoW14nXSspJy8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHN1WzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/c3VwZXJjaGVhdHNcLmNvbSQvLAogICAgcGF0aDogL15cL2ludGVyc3RpdGlhbFwuaHRtbCQvLAogICAgcXVlcnk6IC8oPzpcP3wmKW9sZHVybD0oW14mXSspKD86JHwmKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG0ucXVlcnlbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec3VyZnNlZXNcLmNvbSQvLAogICAgcXVlcnk6IC9eXD9nbz0oW2EtekEtWjAtOV0rKSQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKCkgewogICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoJ2dvJywgJ2xpbmsnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnN1cmZzZWVzXC5jb20kLywKICAgIHF1ZXJ5OiAvXlw/bGluaz0oW2EtekEtWjAtOV0rKShjbGlja2FydXJsKT8kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHMgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW5wdXQuYnRuLmJ0bi1wcmltYXJ5Jyk7CiAgICBzLmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zdXJmc2Vlc1wuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBzdXJsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN3cHNhZmUtbGlua3ogYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHN1cmwuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15zd3p6XC54eXokLywKICAgIHBhdGg6IC9eXC9saW5rXC9cdytcLyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdhLmJ0bi13cmFwcGVyLmxpbmsnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhnLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IFsKICAgIHsKICAgICAgaG9zdDogL14od3d3XC4pP3N5bG5rXC5uZXQkLywKICAgICAgcXVlcnk6IC9saW5rPShbXiZdKykvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogL14od3d3XC4pP2NvbXB1bFwuaW4kLywKICAgICAgcGF0aDogL15cL1tucF1cLnBocCQvLAogICAgICBxdWVyeTogL3Y9KFteJl0rKS8sCiAgICB9LAogICAgewogICAgICBob3N0OiBbCiAgICAgICAgL14oc3BvcnRzMTR8bW90b3Nwb3J0KVwucHckLywKICAgICAgICAvXmxpbmR1bmdcLmluJC8sCiAgICAgICAgL15tb3RvbmV3c1wuY2x1YiQvLAogICAgICAgIC9ed3dbMjNdXC5waWNuaWN0cmFuc1wuY29tJC8sCiAgICAgICAgL14oYXpoaWV8c2tpbm55Y2F0KVwubmV0JC8sCiAgICAgICAgL153dzJcLmF3c3Vic1wuY28kLywKICAgICAgICAvXnBsYW50YWhlaW1cLih3ZWJcLmlkfGNvbSkkLywKICAgICAgICAvXmlyaXN2ZXJhXC5jb20kLywKICAgICAgXSwKICAgICAgcXVlcnk6IC9eXD9kPShbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXmlcLmd0YWluZFwuY29tJC8sCiAgICAgICAgL15wZWJpc25pcy1tdWRhXC5jb20kLywKICAgICAgICAvXmhpa2FyaW5vYWthcmlvc3RcLmluZm8kLywKICAgICAgXSwKICAgICAgcXVlcnk6IC9eXD8oW2EtekEtWjAtOS89XSspJC8sCiAgICB9LAogICAgewogICAgICBob3N0OiBbCiAgICAgICAgL1wuYmxvZ3Nwb3RcLmNvbT8vLAogICAgICAgIC9eKHd3d1wuKT9kZXNpZ25teWhvbWVlXC5jb20kLywKICAgICAgICAvXih3d3dcLik/bG9zc3RvclwuY29tJC8sCiAgICAgICAgL14oKGt1cm9zYWZlfGt1cm9zYWZldHkpXC4pP21lbmFudGlzZW5qYVwuY29tJC8sCiAgICAgICAgL15kcml2ZVwuamVwaXRrZXJ0YXNcLmNvbSQvLAogICAgICAgIC9ebGV3YXRcLndpYnVpbmRvXC5jb20kLywKICAgICAgICAvXihvbWdtdXNpa3xvbWdseXJpY3N8azJuYmxvZylcLmNvbSQvLAogICAgICAgIC9eKHNpbWFob2xpbmF8YXV0ZWNoKVwueHl6JC8sCiAgICAgICAgL14od3d3XC4pP2lkLXNlY3VyZWxpbmtcLnh5eiQvLAogICAgICAgIC9eKHd3d1wuKT9jb252ZXJ0aGlua3NcLnh5eiQvLAogICAgICAgIC9eKHd3d1wuKT9tYXJpdmVsa2VjZVwueHl6JC8sCiAgICAgICAgL14od3d3XC4pP3lhbWV0ZXNlbnBhaVwueHl6JC8sCiAgICAgICAgL14od3d3XC4pP3RvanJvc1wudGskLywKICAgICAgICAvXih3d3dcLik/YW5qYXlcLmluZm8kLywKICAgICAgICAvXih3d3dcLik/a2Fra29paXNhZmVcLnVzJC8sCiAgICAgICAgL14od3d3XC4pP2t1cm9zYWZlXC4od2Vic2l0ZXxvbmxpbmUpJC8sCiAgICAgICAgL14od3d3XC4pP2RyYWtvcnNhZmVcLnRlY2gkLywKICAgICAgICAvXihmbWxhd2tlcnN8aW5kZXhtb3ZpZSlcLmNsdWIkLywKICAgICAgICAvXm1pY2luXC5vbmxpbmUkLywKICAgICAgICAvXnVuZHVoXC5pbi8sCiAgICAgICAgL15hZDRtc2FuXC53aW4kLywKICAgICAgICAvXm5vb3l1bFwuY28kLywKICAgICAgICAvXnBhZnBhZlwuaW5mbyQvLAogICAgICAgIC9eaGlnaHRlY2hcLndlYlwuaWQkLywKICAgICAgXSwKICAgICAgcXVlcnk6IFsKICAgICAgICAvXlw/dXJsPShbYS16QS1aMC05Lz1dKykkLywKICAgICAgICAvXlw/aWQ9KFthLXpBLVowLTkvPV0rKSQvLAogICAgICAgIC9eXD9zaXRlPShbYS16QS1aMC05Lz1dKykkLywKICAgICAgXSwKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXihzZWhhdGxlZ2F8ZGF2aW5zdXJhbmNlfGhlYWx0aHRvZHxpcmlzdmVyYXxha2Fub3NvcmF8c3ViZXRlbmV3cylcLmNvbSQvLAogICAgICAgIC9eKHd3d1wuKT9tZW5hbnRpc2VuamFcLmNvbSQvLAogICAgICAgIC9eKGJ1c2luZXNzZm9yeW91YW5kfHRyYXZlbHdpdGh0cmlja3N8c2l0dXNiYXJ1KVwubWUkLywKICAgICAgICAvXnBsYW50YWhlaW1cLih3ZWJcLmlkfGNvbSkkLywKICAgICAgICAvXih3d3dcLik/c3RhcnpvbmVcLmNjJC8sCiAgICAgICAgL14od3d3XC4pP2tha2tvaWlzYWZlXC51cyQvLAogICAgICAgIC9eKHd3d1wuKT9wb2xyZWNcLnNpdGUkLywKICAgICAgICAvXnl1bWVjaGFuXC5jbHViJC8sCiAgICAgICAgL15jZWtsaW5rdVwueHl6JC8sCiAgICAgICAgL15saW5kdW5nXC4oaW58bWUpJC8sCiAgICAgICAgL14od3d3XC4pP2JvbGFva2VcLmNsdWIkLywKICAgICAgXSwKICAgICAgcXVlcnk6IC9eXD9yPShbYS16QS1aMC05Lz1dKykkLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9ed3d3XC5jb21wYXJ0aWVuZG9mdWxsXC5uZXQkLywKICAgICAgcGF0aDogL15cL2dvMi8sCiAgICAgIHF1ZXJ5OiAvXlw/cD0oW2EtekEtWjAtOS89XSspJC8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXmFuaW1lZm9yY2VcLnN0cmVhbSQvLAogICAgICBxdWVyeTogL15cP2w9KFthLXpBLVowLTkvPV0rKSQvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogL14od3d3XC4pP2R1a3VuLWNpdFwuY29tJC8sCiAgICAgIHF1ZXJ5OiAvXlw/cz0oW2EtekEtWjAtOS89XSspJC8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXnVsdGltYXRlXC50dXJrZG93blwuY29tJC8sCiAgICAgIHF1ZXJ5OiAvXlw/c3RlcG9uZT0oW2EtekEtWjAtOS89XSspJC8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXmxlZWNocHJlbWl1bVwubGluayQvLAogICAgICBwYXRoOiAvXlwvY2hlYXRcLy8sCiAgICAgIHF1ZXJ5OiAvXlw/bGluaz0oW2EtekEtWjAtOS89XSspJC8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXmNsb3NldG9waWNcLnNpdGUkLywKICAgICAgcXVlcnk6IC9eXD9nbz0oW2EtekEtWjAtOS89XSspJC8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXmluZm9zaWFcLnh5eiQvLAogICAgICBxdWVyeTogL15cP2tlc2VoYXRhbj0oW2EtekEtWjAtOS89JV0rKSQvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogL15yZW1peXVcLm1lJC8sCiAgICAgIHF1ZXJ5OiAvXlw/cmVmZj0oW2EtekEtWjAtOS89XSspJC8sCiAgICB9LAogIF0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGNvbnN0IHJhd0xpbmsgPSBhdG9iKGRlY29kZVVSSUNvbXBvbmVudChtLnF1ZXJ5WzFdKSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocmF3TGluayk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgewogICAgICBob3N0OiBbCiAgICAgICAgLyhefFwuKXNhZmVsaW5rKGNvbnZlcnRlcnxyZXZpZXd4PylcLmNvbT8kLywKICAgICAgICAvXmdpZ2E3NFwuY29tJC8sCiAgICAgICAgL14oYXdzdWJzY298YWQ0bXNhbilcLm1sJC8sCiAgICAgICAgL15uZWtvcG9pXC5nYSQvLAogICAgICBdLAogICAgICBxdWVyeTogL2lkPShbXHdcXF0rPSopLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXihuYWlzaG98ZmlsbWt1fGhlbnBvaSlcLmxvbXBhdFwuaW4kLywKICAgICAgICAvXmVkb2dhd2FcLmxvblwucHckLywKICAgICAgICAvXnRlbG9sZXRcLmluJC8sCiAgICAgIF0sCiAgICAgIHF1ZXJ5OiAvZ289KFtcd1xcXSs9KikvLAogICAgfSwKICBdLAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBsZXQgbCA9IGF0b2IobS5xdWVyeVsxXSk7CiAgICBjb25zdCB0YWJsZSA9IHsKICAgICAgJyEnOiAnYScsCiAgICAgICcpJzogJ2UnLAogICAgICAnXyc6ICdpJywKICAgICAgJygnOiAnbycsCiAgICAgICcqJzogJ3UnLAogICAgfTsKICAgIGwgPSBsLnJlcGxhY2UoL1shKV8oKl0vZywgZnVuY3Rpb24gKG0pIHsKICAgICAgcmV0dXJuIHRhYmxlW21dOwogICAgfSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3NhZmVsaW5rcmV2aWV3XC5jb20kLywKICAgIHBhdGg6IC9eXC9cdytcL2Nvc3RcLyhbXHcuXSspXC8/JC8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgbCA9ICdodHRwOi8vJyArIG0ucGF0aFsxXTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKGdhbWVpbmZvfGFwYXNpaHxhdXRvcmlkZSlcLnB3JC8sCiAgICAgIC9eKHd3d1wuKT9saWZlc3VyYW5jZVwuaW5mbyQvLAogICAgICAvXnNwZWVkY2FyXC5jbHViJC8sCiAgICAgIC9eKHd3d1wuKT9ib2xhb2tlXC5jbHViJC8sCiAgICAgIC9eKGludGVyY2VsZXN0aWFsfHN3ZWV0bGFudGVybnxkYXZpbnN1cmFuY2V8dGVjaG5sYWIpXC5jb20kLywKICAgICAgL15hd2NhclwuaWN1JC8sCiAgICAgIC9ec2t5aW5zdXJhbmNlXC5tbCQvLAogICAgICAvXihnZXRpbmZvc3xzZWhhdHNlZ2FyfGxvbmVseW1vb24pXC5uZXQkLywKICAgICAgL15zdHRcLmF3c3Vic1wuY28kLywKICAgICAgL14od2lidWluZG98bmF0dXJhbGhlYWx0aHkpXC54eXokLywKICAgICAgL153YWlmdXNhZmVcLm9vbyQvLAogICAgXSwKICAgIHF1ZXJ5OiAvXlw/KGlkfGN8ayk9KFthLXpBLVowLTkvPV0rKSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmb3JtJyk7CiAgICBmLnN1Ym1pdCgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL14obGlua2FjaHxhdXRvbGlua2FjaClcLmNvbSQvLAogICAgXSwKICAgIHF1ZXJ5OiAvXlw/aWQ9KFthLXpBLVowLTkvPV0rKSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuaHVtYW5jaGVjayBmb3JtJyk7CiAgICBnLnN1Ym1pdCgpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IFsKICAgIHsKICAgICAgaG9zdDogWwogICAgICAgIC9ebW90b25ld3NcLmNsdWIkLywKICAgICAgICAvXih3d3dcLik/Ym9sYW9rZVwuY2x1YiQvLAogICAgICAgIC9eKGFuaS1zaGFyZXxhdXRvbGlua2FjaClcLmNvbSQvLAogICAgICAgIC9eKGF1dG9mYW5zfGxhbmRzY2FwZW5hdHVyZSlcLnB3JC8sCiAgICAgICAgL14od3d3XC4pP2xpZmVzdXJhbmNlXC5pbmZvJC8sCiAgICAgIF0sCiAgICAgIHF1ZXJ5OiAvZ2V0PShbXiZdKykvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKGdhbWVpbmZvKVwucHckLywKICAgICAgICAvXih3d3dcLik/bGlmZXN1cmFuY2VcLmluZm8kLywKICAgICAgICAvXnNwZWVkY2FyXC5jbHViJC8sCiAgICAgICAgL14od3d3XC4pP2JvbGFva2VcLmNsdWIkLywKICAgICAgICAvXihhdXRvbGlua2FjaHxkYXZpbnN1cmFuY2UpXC5jb20kLywKICAgICAgICAvXmF3Y2FyXC5pY3UkLywKICAgICAgICAvXnNreWluc3VyYW5jZVwubWwkLywKICAgICAgICAvXihnZXRpbmZvcylcLm5ldCQvLAogICAgICAgIC9ec3R0XC5hd3N1YnNcLmNvJC8sCiAgICAgICAgL153aWJ1aW5kb1wueHl6JC8sCiAgICAgIF0sCiAgICB9LAogIF0sCiAgYXN5bmMgcmVhZHkgKG0pIHsKICAgIGxldCBzID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC8oY29uc3R8dmFyKSBhPScoW14nXSspJy8pOwogICAgaWYgKHMpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHNbMl0pOwogICAgICByZXR1cm47CiAgICB9CiAgICBzID0gYXRvYihtLnF1ZXJ5WzFdKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhzKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ed2FpZnVzYWZlXC5vb28kLywKICAgICAgL15uYXR1cmFsaGVhbHRoeVwueHl6JC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoMTAwMCk7CiAgICBjb25zdCBsbiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbGFuZGluZy5ydXJhc2FmZWN0cmwgLnRvIGEnKTsKICAgIGxuLmNsaWNrKCk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDAwKTsKICAgIGNvbnN0IHRsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5ydXJhc2FmZWN0cmwgaW1nI3Nob3dsaW5rLnNwb2ludCcpOwogICAgdGwuY2xpY2soKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKHNlaGF0c2VnYXJ8bG9uZWx5bW9vbilcLm5ldCQvLAogICAgICAvXihpbnRlcmNlbGVzdGlhbHxzd2VldGxhbnRlcm4pXC5jb20kLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCgxMDAwKTsKICAgIGNvbnN0IGxuID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNsYW5kaW5nLnNvcmFjdHJsIC50byBhJyk7CiAgICBsbi5jbGljaygpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoMjAwMCk7IAogICAgY29uc3QgdGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLnNvcmFjdHJsIGltZyNzaG93bGluay5zcG9pbnQnKTsKICAgIHRsLmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXihsaW5rYWNofHRlY2hubGFiKVwuY29tJC8sCiAgICAgIC9eKGFwYXNpaHxhdXRvcmlkZSlcLnB3JC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoMTAwMCk7CiAgICBjb25zdCBsbiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbGFuZGluZy5zb3JhY3RybCAudG8gYScpOwogICAgbG4uY2xpY2soKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDUwMDApOyAKICAgIGNvbnN0IHRsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5zb3JhY3RybCBpbWcjc2hvd2xpbmsuc3BvaW50Jyk7CiAgICB0bC5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebGV3YXRcLmluJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNsYW5qdXQgPiAjZ29lcyA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec2FyZGVhdGhcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3Qgc2QgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmRvd25sb2FkLWxpbmsgPiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3Blbkxpbmsoc2QuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15nb291XC5pbiQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZG93bmxvYWRfbGluayA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhnLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IFsKICAgIHsKICAgICAgaG9zdDogL150b3V0LWRlYnJpZFwubmV0JC8sCiAgICAgIHBhdGg6IC9eXC9hcGlcLy8sCiAgICB9LAogICAgewogICAgICBob3N0OiAvXjE2M1wuMTcyXC44M1wuMTQ1JC8sCiAgICAgIHBhdGg6IC9eXC9kZWJcL2FwaVwvLywKICAgIH0sCiAgXSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCB0ID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5kb3dubG9hZC1ib3ggPiBkaXYgPiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsodC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRyaXZlaHViXC5saW5rJC8sCiAgICBwYXRoOiAvXlwvZmlsZVwucGhwLywKICAgIHF1ZXJ5OiAvXlw/aWQ9KC4rKS8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5pbmZvYm94ID4gY2VudGVyID4gYiA+IGEjcHJvY2VlZC5idG4uYnRuLWRhbmdlcicpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGQuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15rb21iYXRjaFwubG9uY2F0XC5wdyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IHMgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL1wub3BlblwoIihbXiJdKykiLC8pOwogICAgcyA9IHNbMV0ubWF0Y2goL2dvPShbXiZdKykvKTsKICAgIHMgPSBhdG9iKHNbMV0pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ec2tpcGxpbmtcLmlvJC8sCiAgICBwYXRoOiAvXlwvZ2V0XC9saW5rXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgcyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcucGFuZWwucGFuZWwtZGVmYXVsdC5wYW5lbC1ib2R5ID4gY2VudGVyID4gY2VudGVyID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHMuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXih2MVwuKT9oZXhhZmlsZVwubmV0JC8sCiAgICAgIC9ec2tpcGxpbmtcLmlvJC8sCiAgICBdLAogICAgcGF0aDogL15cL1thLXpBLVowLTldKy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBoID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC89IihbXiJdKykiLGU9MCxmPWEvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhoWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRyaXZlZmlsZXNcLmJpZCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvd2luZG93XC5vcGVuXCgnKFteJ10rKSdcKTsvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhkWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmFuZHJvaWQtMVwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9pZD1kb3dubG9hZD48XC9kaXY+PGEgaHJlZj0oW14+XSspPi8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGFbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYm9vc3RcLmluayQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKCkgewogICAgY29uc3QgYiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdib2R5JykuZ2V0QXR0cmlidXRlKCdyZXN1bHQnKTsKICAgIGlmIChiKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhdG9iKGIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybjsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmRvd25sb2FkLW1pcnJvclwuZ2EkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGRtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9hIGhyZWY9JyhbXiddKyknLyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZG1bMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9edXJsXC5odWxibG9nXC5jb20kLywKICAgIHBhdGg6IC9eXC9bYS16QS1aMC05XSsvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaCA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvImhyZWY9JyhbXiddKyknLyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaFsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnd3WzIzXVwucGljbmljdHJhbnNcLmNvbSQvLAogICAgICAvXnNob3J0XC5hd3N1YnNcLihjb3xtZSkkLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Rpdi5raXJpID4gY2VudGVyID4gYScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXih3d3dcLik/YW5qYXlcLmluZm8kLywKICAgICAgL14od3d3XC4pP3RldGV3XC5pbmZvJC8sCiAgICAgIC9ed3d3XC5uamlpclwuY29tJC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZGl2LmRvd25sb2FkLWxpbmsgPiBhJyk7CiAgICBhID0gYS5ocmVmLm1hdGNoKC9yPSguKikkLyk7CiAgICBhID0gYXRvYihhWzFdKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ec3BhY2V0aWNhXC5jb20kLywKICAgICAgL15za2lubnljYXRcLm9yZyQvLAogICAgXSwKICAgIHBhdGg6IC9eXC9cdyskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmJ0bicpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15kYXVuc2hvcnRlXC50ZWtub2xvZ2lsaW5rXC5jb20kLywKICAgIHBhdGg6IC9eXC9saW5rc2hvcnRlbGlua1wvc2FmZWxpbmtcLnBocCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdkaXYuYXJ0aWNsZSA+IGRpdjpudGgtY2hpbGQoMSkgPiBjZW50ZXIgPiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobC5ocmVmLCB7CiAgICAgIHJlZmVyZXI6IGZhbHNlLAogICAgfSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL150ZWtub3NhZmVcLnRla25vbG9naWxpbmtcLmNvbSQvLAogICAgcGF0aDogL15cL2xpbmt0ZWtub2xpbmtcL3NhZmVsaW5rc2NyaXB0XC5waHAkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3RlbXBsYXRlbW9fY29udGVudCA+IGRpdiA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsLmhyZWYsIHsKICAgICAgcmVmZXJlcjogZmFsc2UsCiAgICB9KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnphcFwuaW4kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHogPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLnBhbmVsLWJvZHkgYnV0dG9uJyk7CiAgICB6LmNsaWNrKCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXihzYXRhbmlhYmF0Y2h8Z2V0LWNsaWNrMilcLmJsb2dzcG90XC5jb20kLywKICAgICAgL14od3d3XC4pP3ZlaGljbGUtdGVjaG5vXC5jZiQvLAogICAgICAvXih3d3dcLik/dGV0ZXdsaW5rXC5tZSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGNsYnQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYnV0dG9uI2dvdG9saW5rJyk7CiAgICBjbGJ0LnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS53YWl0KDEpOwogICAgY2xidC5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaWRuYXRpb25cLm5ldCQvLAogICAgcXVlcnk6IC9eXD9wYWdlPS8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNsaW5rbycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL150ZWNoZnVuZGFcLm5ldCQvLAogICAgcGF0aDogWwogICAgICAvXlwvbGlua1wvLywKICAgICAgL15cL3NhZmVcLy8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcuaGlkZSBhLmJ0bicpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL150aGluZmlcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdkaXYgcCBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmhlbGxvXC50cmlidW50ZWtub1wuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2RpdiBwIHUgYiBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICB7CiAgICAgIGhvc3Q6IC9edGlueWFycm93c1wuY29tJC8sCiAgICAgIHBhdGg6IC9eXC9wcmV2aWV3XC5waHAkLywKICAgICAgcXVlcnk6IC9eXD9wYWdlPShbXiZdKykvLAogICAgfSwKICAgIHsKICAgICAgaG9zdDogL153d3dcLmphdmxpYnJhcnlcLmNvbSQvLAogICAgICBxdWVyeTogL3VybD0oW14mXSspLywKICAgIH0sCiAgXSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGRlY29kZVVSSUNvbXBvbmVudChtLnF1ZXJ5WzFdKSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL150aW55dXJsXC5pcyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5jb3VudD0wOwogICAgY29uc3QgbGluayA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS50cnlFdmVyeSgyMDAsICgpID0+IHsKICAgICAgY29uc3QgbGluayA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdhW2lkXj1za2lwLWJ0bl0nKS5ocmVmOwogICAgICBpZiAobGluay5pbmNsdWRlcygndGlueXVybC5pcycpKSB7CiAgICAgICAgcmV0dXJuIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBsaW5rOwogICAgICB9CiAgICB9KTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhsaW5rKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/dG90YWxkZWJyaWRcLm9yZyQvLAogICAgcGF0aDovXC9sXC8obFwucGhwKT8kLywKICAgIHF1ZXJ5OiAvXD9hZHM9KFthLXpBLVowLTk9XSspJC8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgY29uc3QgbCA9IGF0b2IobS5xdWVyeVsxXSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL150dXJrZG93blwuY29tJC8sCiAgICBwYXRoOiAvXlwvbGluay8sCiAgICBxdWVyeTogL15cP2lkPSguKykvLAogIH0sCiAgYXN5bmMgcmVhZHkgKG0pIHsKICAgIGxldCBodG1sID0gYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLmdldChgP2FqYXg9JHttLnF1ZXJ5WzFdfWApOwogICAgaHRtbCA9IEpTT04ucGFyc2UoaHRtbCk7CiAgICBjb25zdCByZXMgPSAvc3RlcG9uZT0oLispLy5leGVjKGh0bWwudXJsKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhhdG9iKHJlc1sxXSkpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9edVwudG8kLywKICAgIHBhdGg6IC9eXC9bXHctXSsvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgdSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvd2luZG93LmxvY2F0aW9uPScoW14nXSspJzsvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1WzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnVuZmFrZVwuaXQkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGZyYW1lID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ZyYW1lJyk7CiAgICBjb25zdCBpID0gZnJhbWUuc3JjLmxhc3RJbmRleE9mKCdodHRwOi8vJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZnJhbWUuc3JjLnN1YnN0cihpKSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXnVyXC5seSQvLAogICAgICAvXnVybHlcLm1vYmkkLywKICAgIF0sCiAgICBwYXRoOiAvXlwveCguKykvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoJy94JywgJy9nb2lpLycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogIH0KfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL151cmxcLmZtJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjbGlja2J0biBhJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnVybFwuaWUkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYVt0aXRsZT0iTGluayB0byBvcmlnaW5hbCBVUkwiXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvKF58XC4pdXJsY2FzaFwuKGNvbXxuZXR8b3JnKSQvLAogICAgICAvXihiYXQ1fGRldG9uYXRpbmd8Y2VsZWJjbGt8ZWlnaHR0ZWVufHNtaWxpbmdsaW5rc3xwZWVrYXRteWdpcmxmcmllbmR8cG9ybnlob3N0fGNsYjF8dXJsZ2FsbGVyaWVzKVwuY29tJC8sCiAgICAgIC9ebG9vYmxlXC5uZXQkLywKICAgICAgL154eHhzXC5vcmckLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBpZiAoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdyAmJiBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmxpbmtEZXN0VXJsKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmxpbmtEZXN0VXJsKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbWF0Y2hlcyA9IGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MLm1hdGNoKC9saW5rRGVzdFVybCA9ICcoLispJy8pOwogICAgaWYgKG1hdGNoZXMpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1hdGNoZXNbMV0pOwogICAgICByZXR1cm47CiAgICB9CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL151cmxpbm5cLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdNRVRBW0hUVFAtRVFVSVY9cmVmcmVzaF0nKS5nZXRBdHRyaWJ1dGUoJ0NPTlRFTlQnKS5tYXRjaCgvdXJsPScoW14nXSspJy8pOwogICAgaWYgKG0pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG1bMV0pOwogICAgfQogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9edXJsbXNcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaWZyYW1lID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb250ZW50Jyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoaWZyYW1lLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3VybHYyXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGlmICh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZignbG9ja2VkJykgPj0gMCkgewogICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoJy9sb2NrZWQnLCAnJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvamV0b249KFtcd10rKS8pOwogICAgY29uc3QgbCA9ICdodHRwOi8vdXJsdjIuY29tL2FsZ28ucGhwP2FjdGlvbj1wYXNzZXImcHg9MCZzbz0xJmpldG9uPScgKyBtWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNSAqIDEwMDApOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT91c2tpcFwubWUkLywKICAgIHBhdGg6IC9eXC9nb1wvXHcrJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNidG4tbWFpbicpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL151eDlcLmRlJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtZXRhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ21ldGFbaHR0cC1lcXVpdj0icmVmcmVzaCJdW2NvbnRlbnQqPSJ1cmw9Il0nKTsKICAgIGNvbnN0IHVybCA9IG1ldGEuZ2V0QXR0cmlidXRlKCdjb250ZW50JykubWF0Y2goL2h0dHAuKi8pWzBdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL152YXZpXC5jbyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZ29MaW5rJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobC5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnZjcnlwdFwubmV0JC8sCiAgICBwYXRoOiAvXlwvZmFzdHNoaWVsZFwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IHYgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnZm9ybSBpbnB1dC5idG5jb250aW51ZScpOwogICAgdi5jbGljaygpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC52aWlkaWlcLmluZm8kLywKICAgIHF1ZXJ5OiAvdXJsPShbXiZdKykvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGNvbnN0IHVybCA9IGRlY29kZVVSSUNvbXBvbmVudChtLnF1ZXJ5WzFdKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC52aWlkaWlcLmluZm8kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG8gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLmJnbGluaycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKG8uaHJlZik7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3ZpclwuYWwkLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG0gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2NvbnN0IHRhcmdldF91cmwgPSAnKFteJ10rKSc7Lyk7CiAgICBpZiAoIW0pIHsKICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdzaXRlIGNoYW5nZWQnKTsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/dnp0dXJsXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGZyYW1lID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ZyYW1lW3Njcm9sbGluZz15ZXNdJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoZnJhbWUuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnN0XC53YXJkaGFuaW1lXC5uZXQkLywKICAgIHBhdGg6IC9eXC9pXC9cZCskLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3dyYXBwZXIgPiBbY2xhc3NePSJ0b21ibyJdID4gYVt0YXJnZXQ9Il9ibGFuayJdJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXndpa2lhbGxcLm9yZyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZGl2ID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2RpdiNwbGFjZS5nZXQtYnRuJyk7CiAgICBjb25zdCBvID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gewogICAgICBjb25zdCBhID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2RpdiNwbGFjZS5nZXQtYnRuID4gYVtocmVmXScpOwogICAgICBpZiAoYSAmJiBhLmhyZWYpIHsKICAgICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICAgICAgfQogICAgfSk7CiAgICBvLm9ic2VydmUoZGl2LCB7CiAgICAgIGNoaWxkTGlzdDogdHJ1ZQogICAgfSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153b25cLnBlJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCcucHJvZ3Jlc3MuY2FwdGNoYV9sb2FkZXIsIHNraXBib3gnKTsKICAgIGNvbnN0IGNhcHRjaGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3JlY2FwdGNoYScpOwogICAgY2FwdGNoYS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgICBpZiAoY2FwdGNoYS5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHsKICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBvYnNlcnZlci5vYnNlcnZlKGNhcHRjaGEsIHsKICAgICAgICBhdHRyaWJ1dGVzOiB0cnVlLAogICAgICB9KTsKICAgIH0pOwogICAgYXdhaXQgcDsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmxvbmdVUkwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8veWVwLml0L3ByZXZpZXcucGhwP3A9KicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbGluayA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmb250W2NvbG9yPSJncmV5Il0nKS5pbm5lckhUTUw7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsobGluayk7CiAgfSwKfSk7CigoKSA9PiB7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6ICdodHRwOi8vd3d3Lnlvb2NsaWNrLmNvbS9sLyonLAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCdpZnJhbWUnKTsKICAgICAgY29uc3QgdW5pcSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cudW5pcSB8fCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LnVuaXFpOwogICAgICBpZiAoIXVuaXEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZTsKICAgICAgY29uc3QgdXJsID0gYCR7cGF0aH0/YWpheD10cnVlJmFkYmxvY2s9ZmFsc2Umb2xkPWZhbHNlJmZyYW1lZD1mYWxzZSZ1bmlxPSR7dW5pcX1gOwogICAgICBhd2FpdCBnZXRVUkwodXJsKTsKICAgIH0sCiAgfSk7CiAgYXN5bmMgZnVuY3Rpb24gZ2V0VVJMICh1cmwpIHsKICAgIGNvbnN0IHRleHQgPSBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uZ2V0KHVybCk7CiAgICBjb25zdCBnb29kVVJMID0gL14oaHR0cHM/fGZ0cCk6XC9cLygoKChbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbISQmJygpKissOz1dfDopKkApPygoKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSlcLihcZHxbMS05XVxkfDFcZFxkfDJbMC00XVxkfDI1WzAtNV0pXC4oXGR8WzEtOV1cZHwxXGRcZHwyWzAtNF1cZHwyNVswLTVdKVwuKFxkfFsxLTldXGR8MVxkXGR8MlswLTRdXGR8MjVbMC01XSkpfCgoKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKShbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSkqKFthLXpdfFxkfFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSkpXC4pKygoW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCgoW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKSooW2Etel18W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pKSlcLj8pKDpcZCopPykoXC8oKChbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbISQmJygpKissOz1dfDp8QCkrKFwvKChbYS16XXxcZHwtfFwufF98fnxbXHUwMEEwLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkVGXSl8KCVbXGRhLWZdezJ9KXxbISQmJygpKissOz1dfDp8QCkqKSopPyk/KFw/KCgoW2Etel18XGR8LXxcLnxffH58W1x1MDBBMC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkZFRl0pfCglW1xkYS1mXXsyfSl8WyEkJicoKSorLDs9XXw6fEApfFtcdUUwMDAtXHVGOEZGXXxcL3xcPykqKT8oIygoKFthLXpdfFxkfC18XC58X3x+fFtcdTAwQTAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRUZdKXwoJVtcZGEtZl17Mn0pfFshJCYnKCkqKyw7PV18OnxAKXxcL3xcPykqKT8kL2kudGVzdCh0ZXh0KTsKICAgIGlmIChnb29kVVJMKSB7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayh0ZXh0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwKTsKICAgIGF3YWl0IGdldFVSTCh1cmwpOwogIH0KfSkoKTsKKGZ1bmN0aW9uICgpIHsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXih3d3dcLik/KFthLXpBLVowLTldK1wuKT9iaW5ib3hcLmlvJC8sCiAgICAgIHBhdGg6IC9cLyhbYS16QS1aMC05XSspLywKICAgICAgaGFzaDogLyg/OiMoW2EtekEtWjAtOV0rKSk/LywKICAgIH0sCiAgICBhc3luYyByZWFkeSAobSkgewogICAgICBjb25zdCBzamNsID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5zamNsOwogICAgICBjb25zdCBwYXN0ZV9pZCA9IG0ucGF0aFsxXTsKICAgICAgY29uc3QgcGFzdGVfc2FsdCA9IG0uaGFzaFsxXTsKICAgICAgY29uc3QgQVBJX1VSTCA9IGBodHRwczovL2JpbmJveC5pby8ke3Bhc3RlX2lkfS5qc29uYDsKICAgICAgbGV0IHBhc3RlSW5mbyA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5nZXQoQVBJX1VSTCwgZmFsc2UsIHsKICAgICAgICBPcmlnaW46IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lLAogICAgICAgIFJlZmVyZXI6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lLAogICAgICAgIENvb2tpZTogJ3JlZmVycmVyPTEnLAogICAgICAgICdYLVJlcXVlc3RlZC1XaXRoJzogX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmUsCiAgICAgIH0pOwogICAgICBwYXN0ZUluZm8gPSBKU09OLnBhcnNlKHBhc3RlSW5mbyk7CiAgICAgIGlmICghcGFzdGVJbmZvLm9rKSB7CiAgICAgICAgdGhyb3cgbmV3IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5BZHNCeXBhc3NlckVycm9yKCdlcnJvciB3aGVuIGdldHRpbmcgcGFzdGUgaW5mb3JtYXRpb24nKTsKICAgICAgfQogICAgICBpZiAocGFzdGVJbmZvLnBhc3RlLnVybCkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXN0ZUluZm8ucGFzdGUudXJsKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgcmF3X3Bhc3RlID0gc2pjbC5kZWNyeXB0KHBhc3RlX3NhbHQsIHBhc3RlSW5mby5wYXN0ZS50ZXh0KTsKICAgICAgaWYgKGlzTGluayhyYXdfcGFzdGUpKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHJhd19wYXN0ZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpOwogICAgICBlbG0uaWQgPSAncGFzdGUtdGV4dCc7CiAgICAgIGVsbS5pbm5lckhUTUwgPSBsaW5raWZ5KHJhd19wYXN0ZSk7CiAgICAgIGNvbnN0IGZyYW1lID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNwYXN0ZS1mcmFtZSwgI2NhcHRjaGEtcGFnZScpOwogICAgICBmcmFtZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbG0sIGZyYW1lKTsKICAgIH0sCiAgfSk7CiAgY29uc3Qgc1VybCA9ICcoXFxiKGh0dHBzP3xmdHB8ZmlsZSk6Ly9bLUEtWjAtOSsmQCMvJT89fl98ITosLjtdKlstQS1aMC05KyZAIy8lPX5ffF0pJzsKICBmdW5jdGlvbiBpc0xpbmsgKHRleHQpIHsKICAgIGNvbnN0IHJVcmwgPSBuZXcgUmVnRXhwKGBeJHtzVXJsfSRgLCAnaScpOwogICAgcmV0dXJuIHJVcmwudGVzdCh0ZXh0KTsKICB9CiAgZnVuY3Rpb24gbGlua2lmeSAodGV4dCkgewogICAgY29uc3QgclVybCA9IG5ldyBSZWdFeHAoc1VybCwgJ2lnJyk7CiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKHJVcmwsIChtYXRjaCkgPT4gewogICAgICByZXR1cm4gYDxhIGhyZWY9IiR7bWF0Y2h9Ij4ke21hdGNofTwvYT5gOwogICAgfSk7CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9wYXN0ZWRcLmNvJC8sCiAgICBwYXRoOiAvXlwvXHcrJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ucmVtb3ZlKCcjY2FwdGNoYV9vdmVybGF5Jyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL153d3dcLjJpXC4oc2t8Y3opJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpbWcgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3dyYXAzIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICAnaHR0cDovLyouYWJsb2FkLmRlL2ltYWdlLnBocD9pbWc9KicsCiAgICAnaHR0cDovL3d3dy5pbWFnZXVwLnJ1LyovKi8qLmh0bWwnLAogIF0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjaW1hZ2UnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eYWxsLXBvc3RlclwucnUkLywKICAgIHF1ZXJ5OiAvXlw/dj0vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjaW1hZ2VuIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15idW5ueWZvcnVtXC5vcmckLywKICAgIHF1ZXJ5OiAvXlw/dj0vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbWdbdGl0bGVePUNsaWNrXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15iYXlpbWdcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjbWFpbkltYWdlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmJlZWltZ1wuY29tJC8sCiAgICBwYXRoOiAvXC92aWV3XC8uKi8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpbWcgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nLmltZy1yZXNwb25zaXZlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGltZy5zcmMsIHsKICAgICAgcmVwbGFjZTogdHJ1ZSwKICAgIH0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3LmJpbGRlci11cGxvYWQuZXUvc2hvdy5waHA/ZmlsZT0qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W3R5cGU9aW1hZ2VdJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3d3dy5jYXNpbWFnZXMuY29tL2ltZy5waHA/KicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ3RkIGEgaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGltZy5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vY3ViZXVwbG9hZC5jb20vaW0vKicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ltZy5nYWxsZXJ5QmlnSW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGltZy5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZGVwaWNcLm1lJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNwaWMnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKGltZ2Rpbm98aW1ndGlnZXJ8aW1nemFwKVwuY29tJC8sCiAgICBwYXRoOiAvXlwvdmlld2VyXC5waHAkLywKICAgIHF1ZXJ5OiAvXlw/ZmlsZT0vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjY3Vyc29yX2x1cGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2Uoby5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vKi5kaXJlY3R1cGxvYWQubmV0L2ZpbGUvKi5odG0nLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI0ltZ0ZyYW1lJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eZXdhXC5hYyQvLAogICAgICAvXmVsaWxcLmNjJC8sCiAgICBdLAogICAgcGF0aDogL15cLyguKikkLywKICB9LAogIGFzeW5jIHJlYWR5IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg1MDAwKTsKICAgIGNvbnN0IHVybCA9IGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KCcvc2l0ZS9nZXQtbmV3LXJlZGlyZWN0LWxpbmsnLCB7CiAgICAgIGNvZGU6IG0ucGF0aFsxXSwKICAgICAgYWRzX2Jsb2NrZWQ6IGZhbHNlLAogICAgfSk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKHVybCk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15pbWcodml2fGZzaHxicmR8a29yKVwueHl6JC8sCiAgICBwYXRoOiAvXlwvLiokLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnLm1haW4tY29udGVudC1ib3gnKTsKICAgIGNvbnN0IHJ2ID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnNlYXJjaEZyb21TY3JpcHRzKC9kb2N1bWVudFwubG9jYXRpb25cLmhyZWY9IihbXiJdKykiLywgZCk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKHJ2WzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmZhc3RwaWNcLnJ1JC8sCiAgICBwYXRoOiAvXlwvdmlld1wvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3BpY0NvbnRhaW5lciBpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMsIHsKICAgICAgcmVmZXJlcjogdHJ1ZSwKICAgIH0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZmFzdHBpY1wub3JnJC8sCiAgICBwYXRoOiAvXlwvdmlld1wvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3BpY0NvbnRhaW5lciBpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eZm9wa29kaWFrXC5zaXRlJC8sCiAgICBwYXRoOiAvXlwvaW1hZ2VcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpbWcgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaGVhZCA+IGxpbmtbcmVsPWltYWdlX3NyY10nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaW1nLmhyZWYpOwogIH0KfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly93d3cuZm90b2xpbmsuc3Uvdi5waHA/aWQ9KicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjY29udGVudCBpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3LmZvdG9zaWsucGwvcG9rYXpfb2JyYXplay9wZWxueS8qLmh0bWwnLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYS5ub2JvcmRlciBpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15mcmVha2ltYWdlXC5jb20kLywKICAgICAgL153d3dcLmhvc3RwaWNcLm9yZyQvLAogICAgXSwKICAgIHBhdGg6IC9eXC92aWV3XC5waHAkLywKICAgIHF1ZXJ5OiAvXlw/ZmlsZW5hbWU9KFteJl0rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSgnL2ltYWdlcy8nICsgbS5xdWVyeVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP2ZyZWVpbWd1cFwuY29tJC8sCiAgICBwYXRoOiAvXlwveHh4XC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNtYWluaW1hZ2UnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaW1nLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15mdWxsaW1nXC5jb20kLywKICAgIHF1ZXJ5OiAvXlw/dj0oW14mXSspLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKCcvaW1hZ2VzLycgKyBtLnF1ZXJ5WzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltYWdlcDJwXC5jb20kLywKICAgIHF1ZXJ5OiAvXlw/dj0oW14mXSspLywKICB9LAogIGFzeW5jIHN0YXJ0IChtKSB7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKCcvaW1hZ2VzLycgKyBtLnF1ZXJ5WzFdICsgJy5qcGVnJyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgJ2h0dHA6Ly9mdW5reWltZy5jb20vdmlld2VyLnBocD9pbWc9KicsCiAgICAnaHR0cDovL2Z1bmt5aW1nLmNvbS92aWV3LyonLAogIF0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjdmlld2VyIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgY29uc3QgaG9zdFJ1bGUgPSAvXmdvaW1hZ2Vob3N0XC5jb20kLzsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBob3N0UnVsZSwKICAgICAgcGF0aDogL15cL3h4eFwvaW1hZ2VzXC8vLAogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBob3N0UnVsZSwKICAgICAgcGF0aDogL15cL3h4eFwvKC4rKS8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSgnL3h4eC9pbWFnZXMvJyArIG0ucGF0aFsxXSk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IGhvc3RSdWxlLAogICAgICBxdWVyeTogL15cP3Y9KC4rKS8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSgnL3h4eC9pbWFnZXMvJyArIG0ucXVlcnlbMV0pOwogICAgfSwKICB9KTsKfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3d3dy5ob3N0aW5ncGljcy5uZXQvdmlld2VyLnBocD9pZD0qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNpbWdfdmlld2VyJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICAnaHR0cDovL2lmb3Rvcy5wbC96b2JhY3ovKicsCiAgICAnaHR0cHM6Ly9wb3N0aW1nLmNjLyonLAogICAgJ2h0dHBzOi8vcGl4eHhlbHMuY2MvKicsCiAgXSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBtID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ21ldGFbcHJvcGVydHk9Im9nOmltYWdlIl0nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UobS5jb250ZW50KTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltYVwuc28kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltYWdlX2Jsb2NrIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltYWR1bFwuY29tJC8sCiAgICBxdWVyeTogL1w/cFttdF09KC4rKS8sCiAgfSwKICBhc3luYyBzdGFydCAobSkgewogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSgnLz9kaT0nICsgbS5xdWVyeVsxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15pbWFnZTJ5b3VcLnJ1JC8sCiAgICBwYXRoOiAvXlwvXGQrXC9cZCsvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdkaXYudF90aXBzMiBkaXYgPiBpbWcnKTsKICAgIGlmICghaSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoJycsIHsKICAgICAgICBwb3N0OiB7CiAgICAgICAgICBfY29uZmlybTogJycsCiAgICAgICAgfSwKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5pbWFnZWJhbVwuY29tJC8sCiAgICBwYXRoOiAvXlwvKHZpZXd8aW1hZ2UpXC8uKiQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IG8gPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnZGl2LnZpZXctbmF2aWdhdGlvbiA+IGE6bnRoLWNoaWxkKDMpJyk7CiAgICBpZiAobykgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKG8uaHJlZik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG8gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2FwcCA+IG1haW4gPiBkaXYgPiBoMiA+IGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhvLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3LmltYWdlaG91c2luZy5jb20vaW1hZ2UvKicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCd0ZC50ZXh0X2l0ZW0gaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL2ltYWdlbm8uY29tLyouaHRtbCcsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjaW1hZ2VfZGl2IGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL14od3d3XC4pP2ltYWdlcG9ydGVyXC5jb20kLywKICAgICAgcGF0aDogL15cL1x3ezEyfVwvLipcLmh0bWwkLywKICAgIH0sCiAgICByZWFkeTogcnVuLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXih3d3dcLik/KGltYWdlY2Fycnl8aW1hZ2VkdW5rfGltYWdlcG9ydGVyfGltYWdlc3dpdGNoKVwuY29tJC8sCiAgICAgICAgL14od3d3XC4pPyhwaWNsZWV0fHBpY3R1cmVkaXB8cGljdHVyZXR1cm4pXC5jb20kLywKICAgICAgICAvXih3d3dcLik/aW1nc3BpY2VcLmNvbSQvLAogICAgICAgIC9eKHd3d1wuKT8ocGljbGFtYm98eWFua29pbWFnZXMpXC5uZXQkLywKICAgICAgXSwKICAgIH0sCiAgICByZWFkeTogcnVuLAogIH0pOwogIGFzeW5jIGZ1bmN0aW9uIHJ1biAoKSB7CiAgICBjb25zdCBvID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNkb3dubG9hZF9ib3ggaW1nW2lkXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShvLnNyYyk7CiAgfQp9KSgpOwooZnVuY3Rpb24gKCkgewogIGNvbnN0IGhvc3QgPSAvXmltYWdlc2hhY2tcLnVzJC87CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogaG9zdCwKICAgICAgcGF0aDogL15cL3Bob3RvXC8uK1wvKC4rKVwvKFteL10rKS8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShgL2YvJHttLnBhdGhbMV19LyR7bS5wYXRoWzJdfS9gKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogaG9zdCwKICAgICAgcGF0aDogL15cL2ZcLy4rXC9bXi9dKy8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNmdWxsaW1nJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogICAgfSwKICB9KTsKfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL2ltYWdlc2hvc3QucnUvcGhvdG8vKi9pZCouaHRtbCcsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjYnBob3RvIGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoYS5ocmVmKTsKICB9LAp9KTsKKGZ1bmN0aW9uICgpIHsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogWwogICAgICB7CiAgICAgICAgaG9zdDogWwogICAgICAgICAgL153d3dcLihmcmVlYnVua2VyfGltZ2NhcnJ5fGltZ3Nob3RzKVwuY29tJC8sCiAgICAgICAgICAvXnd3d1wuaW1hZ2VzbmFrZVwuKGNvbXxvcmcpJC8sCiAgICAgICAgXSwKICAgICAgICBwYXRoOiAvXlwvc2hvd1wucGhwJC8sCiAgICAgICAgcXVlcnk6IC9eXD8vLAogICAgICB9LAogICAgICB7CiAgICAgICAgaG9zdDogL153d3dcLihmcmVlYnVua2VyfGltZ3Nob3RzKVwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL3Nob3dcLy8sCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBob3N0OiAvXmltYWdlYmFuXC4ocnV8bmV0KSQvLAogICAgICAgIHBhdGg6IC9eXC9zaG93XC9cZHs0fVwvXGR7Mn1cL1xkezJ9XC8uKy8sCiAgICAgIH0sCiAgICAgICdodHRwOi8vZm90b28ucGwvc2hvdy5waHA/aW1nPSouaHRtbCcsCiAgICAgIHsKICAgICAgICBob3N0OiAvXnd3d1wuaW1hZ2VzdGltZVwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL3Nob3dcLnBocFwvLipcLmh0bWwkLywKICAgICAgfSwKICAgIF0sCiAgICByZWFkeTogcnVuLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXnd3d1wuKGltZ2NhcnJ5fGltYWdlZnJ1aXQpXC5jb20kLywKICAgICAgICAvXnd3d1wucG9ybmJ1c1wub3JnJC8sCiAgICAgICAgL153d3dcLmltYWdlc25ha2VcLihjb218b3JnKSQvLAogICAgICBdLAogICAgICBwYXRoOiAvXlwvKGltZ3xzaG93KVwvLywKICAgIH0sCiAgICByZWFkeTogcnVuMiwKICB9KTsKICBhc3luYyBmdW5jdGlvbiBydW4gKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjaW1nX29iaicpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYywgewogICAgICByZWZlcmVyOiB0cnVlLAogICAgfSk7CiAgfQogIGFzeW5jIGZ1bmN0aW9uIHJ1bjIgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjaW1nX29iaicpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYywgewogICAgICByZXBsYWNlOiB0cnVlLAogICAgfSk7CiAgfQp9KSgpOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiBbCiAgICAgIHsKICAgICAgICBob3N0OiAvXmltYWdlbnBpY1wuY29tJC8sCiAgICAgICAgcGF0aDogL15cLy4qXC8uK1wuaHRtbD8kLywKICAgICAgfSwKICAgICAgewogICAgICAgIGhvc3Q6IFsKICAgICAgICAgIC9eaW1hZ2V0d2lzdFwuY29tJC8sCiAgICAgICAgICAvXnZpcHJcLmltJC8sCiAgICAgICAgXQogICAgICB9LAogICAgXSwKICAgIHJlYWR5OiBydW4sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL14oaW1hZ2V4cG9ydHxpbWFnZXNoaW1hZ2UpXC5jb20kLywKICAgIH0sCiAgICByZWFkeTogcnVuLAogIH0pOwogIGFzeW5jIGZ1bmN0aW9uIHJ1biAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ltZy5waWMnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL2ltYWdldXBwZXIuY29tL2kvPyonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogWwogICAgJ2h0dHBzOi8vKi5pbWFnZXZlbnVlLmNvbS8qJywKICBdLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnYVt0aXRsZV0gaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltYWdlemlsbGFcLm5ldCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjcGhvdG8nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMsIHsKICAgICAgcmVmZXJlcjogdHJ1ZSwKICAgIH0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vaW1nLjNlenkubmV0LyouaHRtJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBsID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2xpbmtbcmVsPSJpbWFnZV9zcmMiXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShsLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vaW1nMS5pbWFnaWxpdmUuY29tLyovKicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgYSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjcGFnZSBhLmJ1dHRvbicpOwogICAgaWYgKGEpIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3BhZ2UgPiBpbWc6bm90KFtpZF0pJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wuKGltZ2JhYmVzfGltZ2ZsYXJlKVwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBsZXQgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbnB1dFtvbmNsaWNrXScpOwogICAgaWYgKGkpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5EZWNvZGUoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjdGhpc19pbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15pbWdiYXJcLm5ldCQvLAogICAgcGF0aDogL15cL2ltZ19zaG93XC5waHAkLywKICAgIHF1ZXJ5OiAvXlw/dmlld19pZD0vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdjZW50ZXIgaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltZ2JhclwubmV0JC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2Rpdi5wYW5lbC50b3AgZm9ybSBpbnB1dFtuYW1lPXNpZF0nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnL2ltZ19zaG93LnBocD92aWV3X2lkPScgKyBpLnZhbHVlKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltZ2JveFwuY29tJC8sCiAgICBwYXRoOiAvXlwvW1xkXHddKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNpbWcnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwooZnVuY3Rpb24gKCkgewogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXihpbWdmYW50YXN5fGltZ25lbW98aW1nY3VybHxpbWFnZWRvbWlubylcLmNvbSQvLAogICAgICAgIC9eMGltZ1wubmV0JC8sCiAgICAgICAgL15idW5ueWZvcnVtXC5vcmckLywKICAgICAgXSwKICAgICAgcXVlcnk6IC9eXD9bcHZdPS8sCiAgICB9LAogICAgcmVhZHk6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5wYXJ0aWFsKGhlbHBlciwgZmFsc2UpLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1nc2F5XC5jb20kLywKICAgICAgcXVlcnk6IC9eXD9bcHZdPS8sCiAgICB9LAogICAgcmVhZHk6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5wYXJ0aWFsKGhlbHBlciwgdHJ1ZSksCiAgfSk7CiAgYXN5bmMgZnVuY3Rpb24gaGVscGVyIChkb1JlcGxhY2UpIHsKICAgIGlmIChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmNvbmZpcm1BZ2UpIHsKICAgICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLndpbmRvdy5jb25maXJtQWdlKDEpOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb250YWluZXItaG9tZSBpbWdbb25jbGlja10nKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMsIHsKICAgICAgcmVwbGFjZTogZG9SZXBsYWNlLAogICAgfSk7CiAgfQp9KSgpOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15jb3JlcGl4XC5vcmckLywKICAgICAgL14od3d3XC4pP3h4eGltYWdldHBiXC5vcmckLywKICAgICAgL15pbWdob3N0XC4odG9wfGNsdWIpJC8sCiAgICAgIC9ecG9ybmJha2VyXC5tZW4kLywKICAgICAgL15zb21uYXRoMjAwM1wueHl6JC8sCiAgICBdLAogICAgcGF0aDogL15cL2ltYWdlXC8uKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbnB1dCNlbWJlZC1jb2RlLTIudGV4dC1pbnB1dCcpLmdldEF0dHJpYnV0ZSgndmFsdWUnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15pbWdtYXNzXC5jb20kLywKICAgIHBhdGg6IC9eXC9pbWFnZVwvW1xkXHddKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnI2xvYWRpbmcyJyk7CiAgICBjb25zdCBkID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5ib3gnKTsKICAgIGQuc3R5bGUuZGlzcGxheSA9ICdpbml0aWFsJzsKICAgIGQuc3R5bGUub3BhY2l0eSA9ICdpbml0aWFsJzsKICB9LAp9KTsKKGZ1bmN0aW9uICgpIHsKICBjb25zdCBQQVRIX1JVTEUgPSAvXlwvKFswLTlhLXpBLVotX10rKShcLnxcL3wkKS87CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9eKGltZ21vbmtleXxpbWd0cmV4fGltZ3ZlfHVwbG9hZHJyfGltYWdlZWVyfHBpYy1tYW5pYWMpXC5jb20kLywKICAgICAgICAvXihodWxraW1nZXxpbWdzZW58aW1nc3RvfGt2YWRvcnxrcm9waWN8cGljZG9sbGFyfHNpbHZlcnBpYylcLmNvbSQvLAogICAgICAgIC9ed3d3XC51aW1nc2hhcmVcLmNvbSQvLAogICAgICAgIC9eKHd3d1wuKT9pbWdzZWVcLm1lJC8sCiAgICAgICAgL14oaW1nY2xpY2t8cGljczR5b3UpXC5uZXQkLywKICAgICAgXSwKICAgICAgcGF0aDogUEFUSF9SVUxFLAogICAgfSwKICAgIGFzeW5jIHJlYWR5IChtKSB7CiAgICAgIGF3YWl0IGhlbHBlcihtLnBhdGhbMV0sIGdldE5leHQxKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWdvdXRsZXRcLmNvbSQvLAogICAgICBwYXRoOiBQQVRIX1JVTEUsCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWMnKTsKICAgICAgaWYgKGkpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZCA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdkaXZbaWRePSJpbWFnZXZpZXdpIl0nKTsKICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IHdhaXRET00oZCwgKG5vZGUpID0+IHsKICAgICAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJ0ZPUk0nICYmIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbnB1dFtuYW1lPSJpZCJdJywgbm9kZSk7CiAgICAgIH0pOwogICAgICBub2RlLnN1Ym1pdCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmltZ3JvY2tcLmluZm8kLywKICAgICAgcGF0aDogUEFUSF9SVUxFLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbWcucGljdmlldycpOwogICAgICBpZiAoaSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93Ll8weDMzN2M0YiA9IG51bGw7CiAgICAgIGNvbnN0IG5vZGUgPSBhd2FpdCBnZXRBbWJpZ3VvdXNGb3JtKCdkaXZbaWRdICsgZGl2W2lkXSA+IHN0eWxlJywgKG5vZGUpID0+IHsKICAgICAgICByZXR1cm4gbm9kZS5wYXJlbnRFbGVtZW50OwogICAgICB9KTsKICAgICAgbm9kZS5jbGljaygpOwogICAgICBub2RlLmNsaWNrKCk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15waWNyb2tcLmNvbSQvLAogICAgICBwYXRoOiBQQVRIX1JVTEUsCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWN2aWV3Jyk7CiAgICAgIGlmIChpKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG5vZGUgPSBhd2FpdCBnZXRBbWJpZ3VvdXNGb3JtKCdib2R5ID4gZGl2ID4gZGl2W2lkXSA+IHN0eWxlJywgKG5vZGUpID0+IHsKICAgICAgICByZXR1cm4gbm9kZS5wYXJlbnRFbGVtZW50OwogICAgICB9KTsKICAgICAgbm9kZS5jbGljaygpOwogICAgICBub2RlLmNsaWNrKCk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWdvdXRsZXRcLnB3JC8sCiAgICAgIHBhdGg6IFBBVEhfUlVMRSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnaW1nLnBpY3ZpZXcnKTsKICAgICAgaWYgKGkpIHsKICAgICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93Ll8weDViNTBiNyA9IG51bGw7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuXzB4NWI1MGI3ID0gbnVsbDsKICAgICAgbGV0IG5vZGUgPSBudWxsOwogICAgICB3aGlsZSAoIW5vZGUpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg1MDApOwogICAgICAgIG5vZGUgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnYnV0dG9uW25hbWU9Im5leHQiXScpOwogICAgICB9CiAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgbm9kZS5jbGljaygpOwogICAgICBub2RlLmNsaWNrKCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXihwaWNiYXJvbnxpbWdiYXJvbnxrdmFkb3J8Zm90b2tpeilcLmNvbSQvLAogICAgICAgIC9eaW1nZmlsZXNcLm9yZyQvLAogICAgICBdLAogICAgICBwYXRoOiBQQVRIX1JVTEUsCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWMnKTsKICAgICAgaWYgKGkpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmb3JtJyk7CiAgICAgIGYuc3VibWl0KCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiAvXmh0dHA6XC9cL2ltZ2RyYWdvblwuY29tXC8oZ2V0ZmlsXC5waHB8ZGwpJC8sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnaW1nLnBpYycpOwogICAgICBpZiAoaSkgewogICAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ud2FpdCg1MDApOwogICAgICBjb25zdCBmID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNDb250aW51ZUZSTScpOwogICAgICBmLnN1Ym1pdCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmltZ3JvY2tcLnB3JC8sCiAgICAgIHBhdGg6IFBBVEhfUlVMRSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnaW1nLnBpY3ZpZXcnKTsKICAgICAgaWYgKGkpIHsKICAgICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdldEFtYmlndW91c0Zvcm0oCiAgICAgICAgJ2RpdltpZF0gKyBkaXZbaWRdID4gaW5wdXQ6bm90KFtzdHlsZV0pJywKICAgICAgICAobm9kZSkgPT4gewogICAgICAgICAgY29uc3QgZCA9IG5vZGUucGFyZW50RWxlbWVudDsKICAgICAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgICAgIHJldHVybiBkOwogICAgICAgIH0pOwogICAgICBub2RlLmNsaWNrKCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eKGltZ3ZpZXd8aW1ndG93bnxpbWdtYXplfGltZ2RldylcLnB3JC8sCiAgICAgIHBhdGg6IFBBVEhfUlVMRSwKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBjb25zdCBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWN2aWV3Jyk7CiAgICAgIGlmIChpKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS53aW5kb3cuXzB4NThmZjM1ID0gbnVsbDsKICAgICAgY29uc3Qgbm9kZSA9IGF3YWl0IGdldEFtYmlndW91c0Zvcm0oCiAgICAgICAgJ3NjcmlwdCArIGRpdltpZF0gPiBpbnB1dDpub3QoW3N0eWxlXSknLAogICAgICAgIChub2RlKSA9PiB7CiAgICAgICAgICBjb25zdCBkID0gbm9kZS5wYXJlbnRFbGVtZW50OwogICAgICAgICAgbm9kZS5jbGljaygpOwogICAgICAgICAgcmV0dXJuIGQ7CiAgICAgICAgfSk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWdhbnRcLmNvbSQvLAogICAgICBwYXRoOiAvXlwvaW1nLShcZCspXC5odG1sJC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGBpbWd2aWV3LSR7bS5wYXRoWzFdfS5odG1sYCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1nYW50XC5jb20kLywKICAgICAgcGF0aDogL15cL2ltZ3ZpZXctXGQrXC5odG1sJC8sCiAgICB9LAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNwaWNWaWV3Jyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogICAgfSwKICB9KTsKICBmdW5jdGlvbiB3YWl0RE9NIChlbGVtZW50LCBmbikgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4gewogICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbikgPT4gewogICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgIT09ICdjaGlsZExpc3QnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IFtrLCAsIHJdID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmZpbmQobXV0YXRpb24uYWRkZWROb2RlcywgKGNoaWxkKSA9PiB7CiAgICAgICAgICAgIHJldHVybiBmbihjaGlsZCkgPyBjaGlsZCA6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5ub25lOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoayA9PT0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLm5vbmUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgICAgcmVzb2x2ZShyKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgewogICAgICAgIGNoaWxkTGlzdDogdHJ1ZSwKICAgICAgfSk7CiAgICB9KTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gZ2V0QW1iaWd1b3VzRm9ybSAoc2VsZWN0b3IsIHNoZWxsTm9ybWFsaXplcikgewogICAgY29uc3QgZCA9IGF3YWl0IHdhaXRGb3JtU2hlbGwoc2VsZWN0b3IsIHNoZWxsTm9ybWFsaXplcik7CiAgICBjb25zdCBzdHlsZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdzdHlsZScsIGQpOwogICAgbGV0IHZpc2libGVDbGFzc2VzID0gcGFyc2VTdHlsZShzdHlsZSk7CiAgICB2aXNpYmxlQ2xhc3NlcyA9IGZpbHRlckR1cGxpY2F0ZWQodmlzaWJsZUNsYXNzZXMpOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29uc3QgYnV0dG9uID0gZmluZFZpc2libGVGb3JtKHZpc2libGVDbGFzc2VzKTsKICAgICAgaWYgKGJ1dHRvbikgewogICAgICAgIHJldHVybiBidXR0b247CiAgICAgIH0KICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLndhaXQoNTAwKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gd2FpdEZvcm1TaGVsbCAoc2VsZWN0b3IsIG5vcm1hbGl6ZXIpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgICBjb25zdCBoYW5kbGUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgbGV0IHNoZWxsID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoc2VsZWN0b3IpOwogICAgICAgIGlmICghc2hlbGwpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY2xlYXJJbnRlcnZhbChoYW5kbGUpOwogICAgICAgIHNoZWxsID0gbm9ybWFsaXplcihzaGVsbCk7CiAgICAgICAgcmVzb2x2ZShzaGVsbCk7CiAgICAgIH0sIDUwMCk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gcGFyc2VTdHlsZSAoc3R5bGUpIHsKICAgIHN0eWxlID0gc3R5bGUudGV4dENvbnRlbnQ7CiAgICBjb25zdCBwYXR0ZXJuID0gL1wuKFx3Kylce3Zpc2liaWxpdHk6aW5pdGlhbDtcfS9nOwogICAgbGV0IHJ2ID0gbnVsbDsKICAgIGNvbnN0IGNsYXNzZXMgPSBbXTsKICAgIHdoaWxlICgocnYgPSBwYXR0ZXJuLmV4ZWMoc3R5bGUpKSAhPT0gbnVsbCkgewogICAgICBjbGFzc2VzLnB1c2gocnZbMV0pOwogICAgfQogICAgcmV0dXJuIGNsYXNzZXM7CiAgfQogIGZ1bmN0aW9uIGZpbHRlckR1cGxpY2F0ZWQgKGNsYXNzZXMpIHsKICAgIGNvbnN0IHRhYmxlID0gbmV3IE1hcCgpOwogICAgZm9yIChjb25zdCBjIG9mIGNsYXNzZXMpIHsKICAgICAgaWYgKHRhYmxlLmhhcyhjKSkgewogICAgICAgIHRhYmxlLnNldChjLCBmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGFibGUuc2V0KGMsIHRydWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gQXJyYXkuZnJvbSh0YWJsZS5lbnRyaWVzKCkpLmZpbHRlcigoW18sIHVuaXF1ZV0pID0+IHsKICAgICAgcmV0dXJuIHVuaXF1ZTsKICAgIH0pLm1hcCgoW18sIGNdKSA9PiB7CiAgICAgIHJldHVybiBjOwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGZpbmRWaXNpYmxlRm9ybSAoY2xhc3NlcykgewogICAgZm9yIChjb25zdCBjbGFzc18gb2YgY2xhc3NlcykgewogICAgICBjb25zdCBmb3JtID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoYGZvcm0uJHtjbGFzc199YCk7CiAgICAgIGlmICghZm9ybSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGNvbnN0IGJ1dHRvbiA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbnB1dFt0eXBlPSJidXR0b24iXSwgYnV0dG9uW3R5cGU9ImJ1dHRvbiJdLCBidXR0b25bY2xhc3NdJywgZm9ybSk7CiAgICAgIGlmICghYnV0dG9uKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgdiA9IGdldENvbXB1dGVkU3R5bGUoYnV0dG9uKS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5Jyk7CiAgICAgIGlmICh2ICE9PSAndmlzaWJsZScpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICByZXR1cm4gYnV0dG9uOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIGdldE5leHQxIChpKSB7CiAgICByZXR1cm4gaS52YWx1ZTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gaGVscGVyIChpZCwgZ2V0TmV4dCkgewogICAgY29uc3QgcmVjYXB0Y2hhID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNyZWNhcHRjaGFfd2lkZ2V0LCAjY2FwdGNoYScpOwogICAgaWYgKHJlY2FwdGNoYSkgewogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0uaW5mbygnc3RvcCBiZWNhdXNlIHJlY2FwdGNoYScpOwogICAgICByZXR1cm47CiAgICB9CiAgICBsZXQgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbnB1dFtuYW1lPSJuZXh0Il0nKTsKICAgIGlmIChpKSB7CiAgICAgIGNvbnN0IG5leHQgPSBnZXROZXh0KGkpOwogICAgICBhd2FpdCBnbyhpZCwgT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W25hbWU9InByZSJdJykudmFsdWUsIG5leHQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJ2ltZy5waWN2aWV3LCBpbWcucGljJyk7CiAgICBpZiAoaSkgewogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLmluZm8oJ2RvIG5vdGhpbmcnKTsKICB9CiAgYXN5bmMgZnVuY3Rpb24gZ28gKGlkLCBwcmUsIG5leHQpIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluaygnJywgewogICAgICBwb3N0OiB7CiAgICAgICAgb3A6ICd2aWV3JywKICAgICAgICBpZDogaWQsCiAgICAgICAgcHJlOiBwcmUsCiAgICAgICAgbmV4dDogbmV4dCwKICAgICAgICBhZGI6ICcwJywKICAgICAgfSwKICAgIH0pOwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltZ3RvcnJudFwuaW4kLywKICAgIHBhdGg6IC9eXC92aWV3XC5waHAkLywKICAgIHF1ZXJ5OiAvXlw/aWQ9LiovLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2NlbnRlciBkaXYgdGFibGUudGcgdGJvZHkgdHIgdGQgY2VudGVyIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXmltZ3ZhdWx0XC5wdyQvLAogICAgcGF0aDogL15cL3ZpZXctaW1hZ2VcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2FydGljbGUgZGl2LnNwYW43IGFbdGFyZ2V0PSJfYmxhbmsiXScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShhLmhyZWYpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL153d3dcLihpbWdza3l8aW1nZmlsZXxpbWdzZWUpXC5uZXQkLywKICAgICAgL153d3dcLmltYWdlc3BpY3lcLnNpdGUkLywKICAgIF0sCiAgICBwYXRoOiAvXlwvc2l0ZVwvdlwvXGQrJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBhID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNteVVuaXF1ZUltZycpLnBhcmVudE5vZGU7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsoYS5ocmVmKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXnd3d1wuKGltZ3NreXxpbWdmaWxlfGltZ3NlZSlcLm5ldCQvLAogICAgICAgIC9ed3d3XC5pbWFnZXNwaWN5XC5zaXRlJC8sCiAgICAgICAgL14oaW1neGVufGltZ3dlbmd8aW1ndGlnZXJ8aW1ndml2b3xpbWd3ZXdvfGltZ2ZseWVyKVwueHl6JC8sCiAgICAgIF0sCiAgICAgIHBhdGg6IC9eXC9bYS16fDAtOV17NCwxMH0kLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXih3d3dcLik/aW1nYWlyXC5uZXQkLywKICAgICAgICAvXih3d3dcLik/aW1hZ2VraW5nXC54eXokLywKICAgICAgICAvXnd3d1wuY2xvdWRnYWxsZXJ5XC5uZXQkLywKICAgICAgICAvXmtla29sYW5ndGlcLmNvbSQvLAogICAgICAgIC9eaW1na2lhXC5idXp6JC8sCiAgICAgIF0sCiAgICB9LAogIF0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgbWF0Y2hlcyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5zZWFyY2hGcm9tU2NyaXB0cygvZG9jdW1lbnRcLmdldEVsZW1lbnRCeUlkXCgic29EYUJ1ZyJcKVwuc3JjID0gIihbXiJdKykiOy8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShtYXRjaGVzWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICB7CiAgICAgIGhvc3Q6IFsKICAgICAgICAvXmltZ2t1aXdcLnh5eiQvLAogICAgICAgIC9eKGltZ3dleHxpbWd3YW5nfGltZ21lbm98aW1nd2F2fGltZ3h2ZHxpbWdiYmR8aW1ncXRlfGltZ2tvYylcLmJ1enokLywKICAgICAgXSwKICAgICAgcGF0aDogL15cL1thLXp8MC05XXs0LDEwfSQvLAogICAgfSwKICBdLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG1hdGNoZXMgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2VhcmNoRnJvbVNjcmlwdHMoL2RvY3VtZW50XC5nZXRFbGVtZW50QnlJZFwoIm5ld0ltZ0UiXClcLnNyYyA9ICIoW14iXSspIjsvKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UobWF0Y2hlc1sxXSk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogJ2h0dHA6Ly9pcGljLnN1Lz9wYWdlPWltZyZwaWM9KicsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZnonKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eaVwuamF2dG9yXC5jb20kLywKICAgIHBhdGg6IC9eXC9pbWFnZVwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3Nob3dfaW1nIGltZycpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15rZXB0YXJvbG9cLmh1JC8sCiAgICBwYXRoOiAvXihcL1teL10rXC9bXi9dK1wuanBnKSQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoJ2h0dHA6Ly93d3cua2VwdGFyb2xvLmh1L2tlcCcgKyBtLnBhdGhbMV0pOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ebG9zdHBpY1wubmV0JC8sCiAgICBxdWVyeTogL15cP3Bob3RvPVxkKyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbWcubm90aW5saW5lLmNpcmNsZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7CihmdW5jdGlvbiAoKSB7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogWwogICAgICAgIC9ebWlyYWdlcGljc1wuY29tJC8sCiAgICAgICAgL15mdW5leHRyYVwuaG9zdHppXC5jb20kLywKICAgICAgICAvXmJpbGRlclwubml4aGVscFwuZGUkLywKICAgICAgICAvXmltYWdlY3VybFwuKGNvbXxvcmcpJC8sCiAgICAgICAgL15mb3RvLXBpY1wubmV0JC8sCiAgICAgIF0sCiAgICAgIHBhdGg6IC9eXC92aWV3ZXJcLnBocCQvLAogICAgICBxdWVyeTogL2ZpbGU9KFteJl0rKS8sCiAgICB9LAogICAgc3RhcnQ6IGhlbHBlciwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmltZ3NpblwuY29tJC8sCiAgICAgIHBhdGg6IC9eXC92aWV3ZXJcLnBocCQvLAogICAgICBxdWVyeTogL2ZpbGU9KFteJl0rKS8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSgnL2ZpbGVzLycgKyBtLnF1ZXJ5WzFdKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL14oaW1nbmlwfGltZ2NlbnRyYWx8aW1nY3JlYW0pXC5jb20kLywKICAgICAgcGF0aDogL15cL3ZpZXdlcnIuKlwucGhwJC8sCiAgICAgIHF1ZXJ5OiAvZmlsZT0oW14mXSspLywKICAgIH0sCiAgICBzdGFydDogaGVscGVyLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiBbCiAgICAgICdodHRwOi8vd3d3Lm92ZXJwaWMubmV0L3ZpZXdlci5waHA/ZmlsZT0qJywKICAgIF0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI21haW5faW1nJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXnh4eGhvc3RcLm1lJC8sCiAgICAgIHBhdGg6IC9eXC92aWV3ZXJcZCtcLnBocCQvLAogICAgICBxdWVyeTogL2ZpbGU9KFteJl0rKS8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKG0pIHsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSgnZmlsZXMvJyArIG0ucXVlcnlbMV0pOwogICAgfSwKICB9KTsKICBhc3luYyBmdW5jdGlvbiBoZWxwZXIgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoJy9pbWFnZXMvJyArIG0ucXVlcnlbMV0pOwogIH0KfSkoKTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnd3d1wubXJqaFwub3JnJC8sCiAgICBwYXRoOiAvXlwvZ2FsbGVyeVwucGhwJC8sCiAgICBxdWVyeTogL15cP2VudHJ5PSguKykkLywKICB9LAogIGFzeW5jIHJlYWR5IChtKSB7CiAgICBjb25zdCB1cmwgPSBtLnF1ZXJ5WzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSgnLycgKyB1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC5ub2Vsc2hhY2tcLmNvbSQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjZWx0X3RvX2FmZicpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXm92ZXJkcmVhbVwuY3okLywKICAgICAgL15waWNsaWNrXC5vcmckLywKICAgIF0sCiAgICBwYXRoOiAvXlwvaW1hZ2VcLy8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpbWcgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2Z1bGxfaW1hZ2UnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaW1nLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogWwogICAgICAvXmltZ2F6dXJlXC5jb20kLywKICAgICAgL15zaGFnZ3lpbWdcLnBybyQvLAogICAgICAvXnBpYy1tb25leVwucnUkLywKICAgICAgL15kYWlseWltYWdlc1wueHl6JC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgZiA9IGRvY3VtZW50LmZvcm1zWzBdOwogICAgY29uc3Qgc2lnID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2lucHV0W25hbWU9InNpZyJdJywgZikudmFsdWU7CiAgICBjb25zdCBwaWNfaWQgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW5wdXRbbmFtZT0icGljX2lkIl0nLCBmKS52YWx1ZTsKICAgIGNvbnN0IHJlZmVyZXIgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW5wdXRbbmFtZT0icmVmZXJlciJdJywgZikudmFsdWU7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGAvcGljLmpwZWc/cGljX2lkPSR7cGljX2lkfSZzaWc9JHtzaWd9JnJlZmVyZXI9JHtyZWZlcmVyfWApOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3LnBpYy11cGxvYWQuZGUvdmlldy0qLmh0bWwnLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJy5hZHZlcnQnKTsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nLnByZXZpZXdfcGljdHVyZV8yYiwgaW1nLm9yaWdpbmFsX3BpY3R1cmVfMmInKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15waWM0eW91XC5ydSQvLAogICAgICAvXnBpYzV5b3VcLnJ1JC8sCiAgICBdLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgaWYgKF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjZDEgPiBpbWcnKSAhPSBudWxsKSB7CiAgICAgIGNvbnN0IFVSTHBhcmFtcyA9IGxvY2F0aW9uLmhyZWYuc3BsaXQoJy8nLCA1KTsKICAgICAgbGV0IG5leHQgPSBVUkxwYXJhbXMuam9pbignLycpOwogICAgICBuZXh0ID0gbmV4dCArICcvMS8nOwogICAgICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uc2V0Q29va2llKCdwNHljbGljaycsICcxJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhuZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2QxIGltZycpLnNyYzsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpKTsKICAgIH0KICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/cGljY2FzaFwubmV0JC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJy5jb250YWluZXIgPiBpbWcnKTsKICAgIGNvbnN0IG0gPSBpLm9uY2xpY2sudG9TdHJpbmcoKS5tYXRjaCgvbXNob3dcKCcoW14nXSspJ1wpOy8pOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShtWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXihwaWNleHBvc2VkfGNyb2VhKVwuY29tJC8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2ltZy5waWMnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IFsKICAgICdodHRwOi8vYW1hdGV1cmZyZWFrLm9yZy9zaGFyZS0qLmh0bWwnLAogICAgJ2h0dHA6Ly9hbWF0ZXVyZnJlYWsub3JnL3NoYXJlLnBocD9pZD0qJywKICAgICdodHRwOi8vcGljZm94Lm9yZy8qJywKICAgICdodHRwOi8vd3d3LmV1cm8tcGljLmV1L3NoYXJlLnBocD9pZD0qJywKICAgICdodHRwOi8veHh4LmZyZWVpbWFnZS51cy9zaGFyZS5waHA/aWQ9KicsCiAgICAnaHR0cDovL3d3dy5waXhzb3IuY29tL3NoYXJlLnBocD9pZD0qJywKICAgICdodHRwOi8vd3d3LnBpeHNvci5jb20vc2hhcmUtKi5odG1sJywKICAgICdodHRwOi8vcGl4c29yLmNvbS9YWFgvc2hhcmUtKi5odG1sJywKICAgICdodHRwOi8vaG9sZHRoZW1vYW4ubmV0L3gvc2hhcmUtKi5odG1sJywKICAgICdodHRwOi8vd3d3LmltZ3oucHcvc2hhcmUtKi5odG1sJywKICAgICdodHRwczovL2ltZ3V1ci5waWN0dXJlcy9zaGFyZS0qLmh0bWwnCiAgXSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBvID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNpaW1nJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKG8uc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9eKGRybGlua3xwaWNwaWMpXC5vbmxpbmUkLywKICAgICAgL15waWNjbG9ja1wucnUkLywKICAgIF0sCiAgICBwYXRoOiAvXlwvXGQrXC9cZCtcLyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgbGV0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3BheV90aHVtYl9pbWcgaW1nJyk7CiAgICBpID0gaS5nZXRBdHRyaWJ1dGUoJ29uY2xpY2snKTsKICAgIGkgPSBpLm1hdGNoKC9tc2hvd1woJyguKyknXCkvKTsKICAgIGkgPSBpWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICAnaHR0cDovL3BpY3MtbW9uZXkucnUvYWxscGljZnJlZS8qJywKICAgICdodHRwOi8vd3d3LnBpY3MtbW9uZXkucnUvYWxsaW1hZ2UvKicsCiAgXSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15waWNzLW1vbmV5XC5ydSQvLAogICAgcGF0aDogL15cL3ZcLnBocCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lJyk7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ2NlbnRlciBpbWc6bm90KFtpZF0pJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ed3d3XC5waWNzLW1vbmV5XC5ydSQvLAogICAgICAvXihwaWNrZXItY2xpY2t8cDB4cGljbW9uZXkpXC5ydSQvLAogICAgXSwKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgbGV0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2QxIGltZywgI3BheV90aHVtYl9pbWcgPiBpbWcnKTsKICAgIGkgPSBpLm9uY2xpY2sudG9TdHJpbmcoKTsKICAgIGkgPSBpLm1hdGNoKC9tc2hvd1woJyguKyknXCkvKTsKICAgIGkgPSBpWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiAnaHR0cDovL3BpY3NoYXJlLmdlZW56YS5jb20vcGljcy8qJywKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNwaWNTaGFyZV9pbWFnZV9jb250YWluZXInKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecGljc3RyZWFtXC50diQvLAogICAgcGF0aDogL15cLy4qXC8uKlwuaHRtbCQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyN2aWV3MSA+IGRpdjpudGgtY2hpbGQoMSkgPiBpbWc6bnRoLWNoaWxkKDEpJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGltZy5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9eKHd3d1wuKT9waW1wYW5kaG9zdFwuY29tJC8sCiAgICBwYXRoOiAvXlwvaW1hZ2VcL1xkKy8sCiAgICBxdWVyeTogL15cP3NpemU9b3JpZ2luYWwvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNvdmVyZmxvdy13cmFwcGVyIGltZy5vcmlnaW5hbCcpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXih3d3dcLik/cGltcGFuZGhvc3RcLmNvbSQvLAogICAgcGF0aDogL15cL2ltYWdlXC9cZCsvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhtLnBhdGggKyAnP3NpemU9b3JpZ2luYWwnKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICB7CiAgICAgIGhvc3Q6IC9eKHd3d1wuKT9waXhob3N0XC50byQvLAogICAgICBwYXRoOiAvXlwvc2hvd1wvLywKICAgIH0sCiAgICB7CiAgICAgIGhvc3Q6IC9eM3hwbGFuZXRcLmNvbSQvLAogICAgICBwYXRoOiAvXlwvdmlld2ltYWdlXC8vLAogICAgfSwKICBdLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZSwgI2FkJyk7CiAgICBsZXQgbyA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjYWxsJyk7CiAgICBpZiAobykgewogICAgICBvLnN0eWxlLmRpc3BsYXkgPSAnJzsKICAgIH0KICAgIG8gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI3Nob3dfaW1hZ2UsICNpbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShvLnNyYyk7CiAgfSwKfSk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL14od3d3XC4pP3BpeHJvdXRlXC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IG8gPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2Rvd25sb2FkX2JveCBpbWcjaW1ncHJldmlldy5waWMnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2Uoby5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL15wcm50c2NyXC5jb20kLywKICAgICAgL15wcm50XC5zYyQvLAogICAgXSwKICAgIHBhdGg6IC9cLmh0bWwkLywKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiBbCiAgICAgIC9ecHJudHNjclwuY29tJC8sCiAgICAgIC9ecHJudFwuc2MkLywKICAgIF0sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBjb25zdCBpID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNzY3JlZW5zaG90LWltYWdlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnByb25waWNcLm9yZyQvLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgdXJsQmFzZUltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCd0YWJsZS5uZXdfdGFibGUyOm50aC1jaGlsZCgxKSBpbWcubGluaycpOwogICAgY29uc3QgYmFzZVVybCA9IHVybEJhc2VJbWcuc3JjLnNwbGl0KCd0aF8nKVswXTsKICAgIGNvbnN0IGltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCd0YWJsZS5uZXdfdGFibGUyOm50aC1jaGlsZCgyKSBpbWcubGluaycpOwogICAgY29uc3QgdXJsID0gYmFzZVVybCArIGltZy5zcmMuc3BsaXQoJ3RoXycpWzFdOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSh1cmwpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ecXJycm9cLmNvbSQvLAogICAgcGF0aDogL14oXC9pbWFnZXNcLy4rKVwuaHRtbCQvLAogIH0sCiAgYXN5bmMgc3RhcnQgKG0pIHsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UobS5wYXRoWzFdKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiB7CiAgICBob3N0OiAvXnJhZGlrYWxcLnJ1JC8sCiAgICBwYXRoOiAvXlwvYmlnXC8vLAogIH0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcuYmFzZS1wYWdlX2NlbnRlciA+IGRpdjpudGgtY2hpbGQoMikgPiBpbWc6bnRoLWNoaWxkKDEpJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICB9LAp9KTsKKGZ1bmN0aW9uICgpIHsKICBjb25zdCBkZWZhdWx0QWN0aW9uID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnBhcnRpYWwoYWN0aW9uLCAnI2NvbnRpbnVldG9pbWFnZSA+IGZvcm0gaW5wdXQnLCAnaW1nW2NsYXNzXj1jZW50cmVkXScpOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiBbCiAgICAgIHsKICAgICAgICBob3N0OiBbCiAgICAgICAgICAvXihpbWFnZWNvcm58aW1hZ2VkZWNvZGV8aW1hZ2Vrb3xpbWFnZXNodG9ybXxpbWFnZXJhdmVuKVwuY29tJC8sCiAgICAgICAgICAvXihpbWdpY3l8aW1nc2F2dnl8aW1ndHphcnxpbWd0b3JuYWRvfGltZ2tpY2tzfGltZzJzaGFyZSlcLmNvbSQvLAogICAgICAgICAgL14oaW1ndHJpYWx8aW1ncmVwdXRhfGltZ2ZhcHBlcnxpbWdwYXJ0fGltZ2JhbGFuYXxpbWdqYXp6KVwuY29tJC8sCiAgICAgICAgICAvXihob3N0dXJpbWFnZXxncmVhc3lpbWFnZXxkYW1pbWFnZXx4eHhzY3JlZW5zfHdwYzh8ZGltdHVzKVwuY29tJC8sCiAgICAgICAgICAvXihpbWdpeHh4fGltZ2hpdHxpbWdtYWlufGltZy1wbGFuZXR8aW1nLXBheSlcLmNvbSQvLAogICAgICAgICAgL14odGluaXpvfGVyaW1nZXxuaW16c2hhcmV8aGRtb3phfGltZ2Rhd2drbnV0dHopXC5jb20kLywKICAgICAgICAgIC9eKHd3d1wuKT8oaW1nbGVtb258aW1hZ2VibGlua3N8bXVsdGlpbWcpXC5jb20kLywKICAgICAgICAgIC9eKGl8eHh4KVwuaGVudGFpeW91dHViZVwuY29tJC8sCiAgICAgICAgICAvXihpXC4pP2ltZ3NlZWRzP1wuY29tJC8sCiAgICAgICAgICAvXmhvdGltYWdlc1wuZXUkLywKICAgICAgICAgIC8oXnxcLik1NTg4OFwuZXUkLywKICAgICAgICAgIC9eKGltZ3NlcnZlfGltZ3Byb2plY3R8aW1ncHl0aG9ufGltZ3BpeHxuYXVnaHR5Z2F0ZXxnYWxsZXJ5Y2xvdWR8eHhpbWd8aW1nLXZpZXcpXC5uZXQkLywKICAgICAgICAgIC9eKHh4eHdlYmRseHh4fHRlZW5zaG90fGltYWdlb258aW1hZ2V0ZWFtfHZveWV1cmltYWdlfHRlZW5pbWFnZXxtZWdhaW1hZ2UpXC5vcmckLywKICAgICAgICAgIC9eKGltZ3N0dWRpb3xpbWdzcG90KVwub3JnJC8sCiAgICAgICAgICAvXihwaWN6fHVucG9ybilcLnNpdGUkLywKICAgICAgICAgIC9ecGljXC5ob3RpbWdcLnNpdGUkLywKICAgICAgICAgIC9eKGRhbGV6b2J1eHxlY29pbWFnZXN8dXZvbmFoYXplKVwueHl6JC8sCiAgICAgICAgICAvXnh4eFwuKHNleGV4fHBvcm5zY3JlZW4pXC54eXokLywKICAgICAgICAgIC9eYWNpZGltZ1wuY2MkLywKICAgICAgICAgIC9edW5kZXJwaWNcLmNsdWIkLywKICAgICAgICAgIC9eaW1nY2xvdWRcLmNvJC8sCiAgICAgICAgICAvXmRhcnBpeFwuZ2EkLywKICAgICAgICAgIC9eKHBvcC1pbWd8YWRzLWltZylcLmluZm8kLywKICAgICAgICAgIC9eY3Vib25hd1wubWwkLywKICAgICAgICAgIC9eKGRvbWFpbmt8cG9ybm8tcGlyYXQpXC5ydSQvLAogICAgICAgICAgL15pcGljdHVyZVwuc3UkLywKICAgICAgICAgIC9eaW1hZ2VzcHVibGljXC50ayQvLAogICAgICAgICAgL15zXC5pbWdob3N0XC50b3AkLywKICAgICAgICAgIC9ed3d3XC5ob3RpbWFnZVwudWskLywKICAgICAgICAgIC9ecGl4dXBcLnVzJC8sCiAgICAgICAgXSwKICAgICAgICBwYXRoOiAvXC9pbWctLipcLmh0bWwvLAogICAgICB9LAogICAgICB7CiAgICAgICAgaG9zdDogL14oaGVudGFpLXBvcHxzdGFyLWhlbnRhaSlcLmNvbSQvLAogICAgICAgIHBhdGg6IC9eXC9bdGldXC9pbWctLipcLmh0bWwvLAogICAgICB9LAogICAgICB7CiAgICAgICAgaG9zdDogL15pbWdraW5nXC5jbyQvLAogICAgICAgIHBhdGg6IC9eXC9pbWc0Py0uKlwuaHRtbC8sCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBob3N0OiAvXmltYVwuZ3kkLywKICAgICAgICBwYXRoOiAvXlwvaVwvLiskLywKICAgICAgfSwKICAgICAgewogICAgICAgIGhvc3Q6IC9ecGljbW96YVwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL1wvP2ltZy0uKlwuaHRtbCQvLAogICAgICB9LAogICAgXSwKICAgIHJlYWR5OiBkZWZhdWx0QWN0aW9uLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1ncmF0XC5jb20kLywKICAgICAgcGF0aDogL15cL2ltZy0uKlwuaHRtbC8sCiAgICB9LAogICAgcmVhZHk6IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5wYXJ0aWFsKGFjdGlvbiwgJyNjbG9zZScsICcjbWFpbl9pbWFnZSBpbWcuY2VudGVyLWJsb2NrLmltZy1yZXNwb25zaXZlJyksCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL14od3d3XC4pP2ltZ2ZyZXNoXC5pbmZvJC8sCiAgICAgIHBhdGg6IC9eXC9pbWctLipcLmh0bWwkLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZW1vdmUoJ2lmcmFtZScpOwogICAgICBsZXQgbm9kZSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCcjY29udGludWV0b2ltYWdlID4gZm9ybSBpbnB1dCcpOwogICAgICBpZiAobm9kZSkgewogICAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgICBub2RlLmNsaWNrKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5yZXNldENvb2tpZXMoKTsKICAgICAgbm9kZSA9IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS4kKCdpbWdbY2xhc3NePWNlbnRyZWRdJyk7CiAgICAgIGlmIChub2RlKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShub2RlLnNyYyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5wb3N0KHdpbmRvdy5sb2NhdGlvbi5ocmVmLnRvU3RyaW5nKCksIHsKICAgICAgICBjdGk6IDEsCiAgICAgICAgcmVmOiAnJywKICAgICAgICByYzogMSwKICAgICAgICBycDogMSwKICAgICAgICBidDogMCwKICAgICAgICBidzogJ2VkZ2UnLAogICAgICB9KTsKICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogWwogICAgICB7CiAgICAgICAgaG9zdDogL15pbWdraW5nXC5jbyQvLAogICAgICAgIHBhdGg6IC9eXC9pbWdzLS4qXC5odG1sLywKICAgICAgfSwKICAgICAgewogICAgICAgIGhvc3Q6IC9eKGltZ2tpbmdzfGltYWdlcmFyKVwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL2ltZy0uKlwuaHRtbC8sCiAgICAgIH0sCiAgICBdLAogICAgYXN5bmMgcmVhZHkgKCkgewogICAgICBjb25zdCB1cmwgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ud2luZG93LmxpbmtpZDsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZSh1cmwpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmltZ2tpbmdzXC5jb20kLywKICAgICAgcGF0aDogL15cL2ltZzItLipcLmh0bWwvLAogICAgfSwKICAgIHJlYWR5OiBkZWZhdWx0QWN0aW9uLAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW1ncHJpbWVcLmNvbSQvLAogICAgICBwYXRoOiAvXlwvaW1nYS11XC8oLispXC5qcGVnXC5odG1sLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAoKSB7CiAgICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKCcvaW1nYS11JywgJy91JykucmVwbGFjZSgnLmh0bWwnLCAnJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15wb3JueWZhcFwuY29tJC8sCiAgICAgIHBhdGg6IC9cL3BpY1wvLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IHAgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nI215SW1nJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UocC5zcmMpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXmZ1bmltZ1wubmV0JC8sCiAgICAgIHBhdGg6IC9cL2ltZy0uKlwuaHRtbC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnL2ltZy0nLCAnL2ltZzMtJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15mdW5pbWdcLm5ldCQvLAogICAgICBwYXRoOiAvXC9pbWczLS4qXC5odG1sLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2NvbnRpbnVldG9pbWFnZSBpbWcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpLnNyYyk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eMjJwaXh4XC54eXokLywKICAgICAgcGF0aDogL15cL2lhLVtpb11cLyguKylcLmpwZWdcLmh0bWwvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0ICgpIHsKICAgICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoJy9pYS0nLCAnLycpLnJlcGxhY2UoJy5odG1sJywgJycpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkxpbmsocGF0aCk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eMjJwaXh4XC54eXokLywKICAgICAgcGF0aDogL15cL3gtb1wvKC4rKVwuanBlZ1wuaHRtbC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnL3gtJywgJy8nKS5yZXBsYWNlKCcuaHRtbCcsICcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgfSwKICB9KTsKICAgIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eMjJwaXh4XC54eXokLywKICAgICAgcGF0aDogL15cL3ktb1wvKC4rKVwuanBlZ1wuaHRtbC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnL3ktJywgJy8nKS5yZXBsYWNlKCcuaHRtbCcsICcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiAvXjIycGl4eFwueHl6JC8sCiAgICAgIHBhdGg6IC9eXC94LWlcLyguKylcLmpwZWdcLmh0bWwvLAogICAgfSwKICAgIGFzeW5jIHN0YXJ0ICgpIHsKICAgICAgY29uc3QgcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoJy94JywgJy95Jyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhwYXRoKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL150cnVlaW1nXC54eXokLywKICAgICAgcGF0aDogL15cL3UtYlwvKC4rKVwuanBlZ1wuaHRtbC8sCiAgICB9LAogICAgYXN5bmMgc3RhcnQgKCkgewogICAgICBjb25zdCBwYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnL3UtJywgJy8nKS5yZXBsYWNlKCcuaHRtbCcsICcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogWwogICAgICB7CiAgICAgICAgaG9zdDogL15pbWFnZXJhclwuY29tJC8sCiAgICAgICAgcGF0aDogL15cL2ltZzItLywKICAgICAgfSwKICAgICAgewogICAgICAgIGhvc3Q6IC9eaW1na2luZ1wuY28kLywKICAgICAgICBwYXRoOiAvXlwvaW1nW3YzXS0uKlwuaHRtbC8sCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBob3N0OiAvXnBpY3N0YXRlXC5jb20kLywKICAgICAgICBwYXRoOiAvXlwvdmlld1wvZnVsbFwvLiovLAogICAgICB9LAogICAgXSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdpbWdbYWx0XScpOwogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGkuc3JjKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWdwcmltZVwuY29tJC8sCiAgICAgIHBhdGg6IC9eXC9pbWcuKlwuaHRtbCQvLAogICAgfSwKICAgIGFzeW5jIHJlYWR5ICgpIHsKICAgICAgbGV0IGEgPSBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0uJCgnI2NvbnRpbnVldG9pbWFnZSBhJyk7CiAgICAgIGlmIChhKSB7CiAgICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKGEuaHJlZik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGEgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnaW1nW2FsdF0nKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShhLnNyYyk7CiAgICB9LAogIH0pOwogIF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgICBydWxlOiB7CiAgICAgIGhvc3Q6IC9eaW14XC50byQvLAogICAgICBwYXRoOiBbCiAgICAgICAgL15cL2ltZy0uKlwuaHRtbC8sCiAgICAgICAgL15cL2lcLy4qLywKICAgICAgXSwKICAgIH0sCiAgICByZWFkeTogX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnBhcnRpYWwoYWN0aW9uLCAnI2NvbnRpbnVlYnV0dG9uLCAjY29udGludWV0b2ltYWdlIGlucHV0W3R5cGU9InN1Ym1pdCJdJywgJ2ltZ1tjbGFzc149Y2VudHJlZF0nKSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogewogICAgICBob3N0OiBbCiAgICAgICAgL14od3d3XC4pP2ltZ2RyaXZlXC5uZXQkLywKICAgICAgICAvXih3d3dcLik/KGltZ3RheGl8aW1nd2FsbGV0fGltZ2FkdWx0KVwuY29tJC8sCiAgICAgIF0sCiAgICAgIHBhdGg6IC9eXC9pbWctLipcLmh0bWwkLywKICAgIH0sCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGxldCBtID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJ21ldGFbcHJvcGVydHk9Im9nOmltYWdlIl0nKTsKICAgICAgbSA9IG0uY29udGVudC5yZXBsYWNlKCdzbWFsbCcsICdiaWcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShtKTsKICAgIH0sCiAgfSk7CiAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICAgIHJ1bGU6IHsKICAgICAgaG9zdDogL15pbWFnZXNjYW5uZXJcLmNjJC8sCiAgICAgIHBhdGg6IC9eXC8uKlwuanBnXC5odG1sLywKICAgIH0sCiAgICBhc3luYyBzdGFydCAoKSB7CiAgICAgIGNvbnN0IHBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZi5yZXBsYWNlKCcuaHRtbCcsICcnKTsKICAgICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5MaW5rKHBhdGgpOwogICAgfSwKICB9KTsKICBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogICAgcnVsZTogJ2h0dHBzOi8vaW1nY2xvdWQucHcvaW1hZ2UvKicsCiAgICBhc3luYyByZWFkeSAoKSB7CiAgICAgIGNvbnN0IGwgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnbGlua1tyZWw9ImltYWdlX3NyYyJdJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UobC5ocmVmKTsKICAgIH0sCiAgfSk7CiAgYXN5bmMgZnVuY3Rpb24gYWN0aW9uIChmaXJzdFNlbGVjdG9yLCBzZWNvbmRTZWxlY3RvcikgewogICAgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLnJlbW92ZSgnaWZyYW1lLCAjYWRibG9ja19kZXRlY3QsIC5wb3B1cE92ZXJsYXknKTsKICAgIGxldCBub2RlID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoZmlyc3RTZWxlY3Rvcik7CiAgICBpZiAobm9kZSkgewogICAgICBub2RlID0gZmluZEZpcnN0Rm9ybShub2RlKTsKICAgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSBub2RlLm91dGVySFRNTDsKICAgICAgbm9kZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmb3JtIGlucHV0Jyk7CiAgICAgIG5vZGUuY2xpY2soKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgbm9kZSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKHNlY29uZFNlbGVjdG9yKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2Uobm9kZS5zcmMpOwogIH0KICBmdW5jdGlvbiBmaW5kRmlyc3RGb3JtIChjaGlsZCkgewogICAgd2hpbGUgKGNoaWxkICYmIGNoaWxkLmxvY2FsTmFtZSAhPT0gJ2Zvcm0nKSB7CiAgICAgIGNoaWxkID0gY2hpbGQucGFyZW50RWxlbWVudDsKICAgIH0KICAgIHJldHVybiBjaGlsZDsKICB9Cn0pKCk7Cl9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIl8iXS5yZWdpc3Rlcih7CiAgcnVsZTogewogICAgaG9zdDogL15waWNcLnMtamF2XC5jb20kLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGltZyA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcud3AtcG9zdC1pbWFnZScpOwogICAgYXdhaXQgX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLm9wZW5JbWFnZShpbWcuc3JjKTsKICB9LAp9KTsKX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siXyJdLnJlZ2lzdGVyKHsKICBydWxlOiBbCiAgICAnaHR0cDovL3NjcmVlbmxpc3QucnUvZGV0YWlscy5waHA/aW1hZ2VfaWQ9KicsCiAgICAnaHR0cDovL3d3dy5pbWFnZW5ldHouZGUvKi8qLmh0bWwnLAogIF0sCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNwaWN0dXJlJyk7CiAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGltZy5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vd3d3LnN1YmlyaW1hZ2VuZXMuY29tLyouaHRtbCcsCiAgYXN5bmMgcmVhZHkgKCkgewogICAgY29uc3QgaSA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCcjSW1hZ2VuVmlzdWFsaXphZGEnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6ICdodHRwOi8vdGlueXBpYy5jb20vdmlldy5waHA/cGljPSonLAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltZ0VsZW1lbnQnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IC9ed3d3XC50dXJib2ltYWdlaG9zdFwuY29tJC8sCiAgICBwYXRoOiAvXlwvcFwvLywKICB9LAogIGFzeW5jIHJlYWR5ICgpIHsKICAgIGNvbnN0IGkgPSBPYmplY3QoX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdKSgnI2ltYWdlaWQnKTsKICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuSW1hZ2UoaS5zcmMpOwogIH0sCn0pOwpfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJfIl0ucmVnaXN0ZXIoewogIHJ1bGU6IHsKICAgIGhvc3Q6IFsKICAgICAgL154YW91dGNob3VjXC5saXZlJC8sCiAgICAgIC9eeHh4XC5mb3Brb2RpYWtcLnNpdGUkLywKICAgICAgL15ibGFtZWxlc3NcLndvcmskLywKICAgIF0sCiAgICBwYXRoOiAvXlwvaW1nLS8sCiAgfSwKICBhc3luYyByZWFkeSAoKSB7CiAgICBpZiAoZG9jdW1lbnQucmVmZXJyZXIgPT0gZG9jdW1lbnQubG9jYXRpb24uaHJlZikgewogICAgICBsZXQgaW1nID0gX0FEU0JZUEFTU0VSX05BTUVTUEFDRV9fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siJCJdLiQoJyNjb250YWluZXIgPiBhID4gaW1nJyk7CiAgICAgIGlmICghaW1nKSB7CiAgICAgICAgaW1nID0gT2JqZWN0KF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXSkoJyNjb250YWluZXIgPiBpbWcnKTsKICAgICAgfQogICAgICBhd2FpdCBfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0ub3BlbkltYWdlKGltZy5zcmMpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgZiA9IE9iamVjdChfQURTQllQQVNTRVJfTkFNRVNQQUNFX19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyIkIl0pKCdmb3JtJyk7CiAgICAgIGF3YWl0IF9BRFNCWVBBU1NFUl9OQU1FU1BBQ0VfX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIiQiXS5vcGVuTGluayhmLmFjdGlvbiwgeyAKICAgICAgICBwb3N0OiB7CiAgICAgICAgICBpbWdDb250aW51ZTogJ0NvbnRpbnVlIHRvIGltYWdlIC4uLicsCiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9Cn0pOwogfSksCiAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJfIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiJCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gJDsgfSk7CiB2YXIgdXRpbF9hamF4X19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpOwogdmFyIHV0aWxfY29va2llX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpOwogdmFyIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKIHZhciB1dGlsX2Rpc3BhdGNoZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7CiB2YXIgdXRpbF9kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwogdmFyIHV0aWxfaW1hZ2VfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpOwogdmFyIHV0aWxfbGlua19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7CiB2YXIgdXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CiB2YXIgdXRpbF9taXNjX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTsKIHZhciB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwpjb25zdCBfID0gewogIEFkc0J5cGFzc2VyRXJyb3I6IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJBZHNCeXBhc3NlckVycm9yIl0sCiAgZXZpbDogdXRpbF9taXNjX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bImV2aWwiXSwKICBmaW5kOiB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1siZmluZCJdLAogIGZvckVhY2g6IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJmb3JFYWNoIl0sCiAgZ2VuZXJhdGVSYW5kb21JUDogdXRpbF9taXNjX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bImdlbmVyYXRlUmFuZG9tSVAiXSwKICBpbmZvOiB1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJpbmZvIl0sCiAgbm9uZTogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIm5vbmUiXSwKICBwYXJ0aWFsOiB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1sicGFydGlhbCJdLAogIHJlZ2lzdGVyOiB1dGlsX2Rpc3BhdGNoZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1sicmVnaXN0ZXIiXSwKICB0cnlFdmVyeTogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bInRyeUV2ZXJ5Il0sCiAgd2FpdDogdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bIndhaXQiXSwKICB3YXJuOiB1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fWyJ3YXJuIl0sCn07CmZ1bmN0aW9uICQgKHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgcmV0dXJuIE9iamVjdCh1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJxdWVyeVNlbGVjdG9yIl0pKHNlbGVjdG9yLCBjb250ZXh0KTsKfQokLiQgPSB1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJxdWVyeVNlbGVjdG9yT3JOdWxsIl07CiQuJCQgPSB1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJxdWVyeVNlbGVjdG9yQWxsIl07CiQuYmxvY2sgPSB1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJibG9jayJdOwokLmdldCA9IHV0aWxfYWpheF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJnZXQiXTsKJC5nZXRDb29raWUgPSB1dGlsX2Nvb2tpZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJnZXRDb29raWUiXTsKJC5udWtlID0gdXRpbF9taXNjX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19bIm51a2UiXTsKJC5vcGVuSW1hZ2UgPSB1dGlsX2ltYWdlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19bIm9wZW5JbWFnZSJdOwokLm9wZW5MaW5rID0gdXRpbF9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19bIm9wZW5MaW5rIl07CiQucG9zdCA9IHV0aWxfYWpheF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJwb3N0Il07CiQucmVtb3ZlID0gdXRpbF9kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1sicmVtb3ZlIl07CiQucmVtb3ZlQWxsVGltZXIgPSB1dGlsX21pc2NfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX1sicmVtb3ZlQWxsVGltZXIiXTsKJC5yZXNldENvb2tpZXMgPSB1dGlsX2Nvb2tpZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJyZXNldENvb2tpZXMiXTsKJC5zZWFyY2hGcm9tU2NyaXB0cyA9IHV0aWxfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bInNlYXJjaEZyb21TY3JpcHRzIl07CiQuc2V0Q29va2llID0gdXRpbF9jb29raWVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1sic2V0Q29va2llIl07CiQudG9ET00gPSB1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJ0b0RPTSJdOwokLndpbmRvdyA9IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX1sidXN3Il07CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImdldCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0OyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicG9zdCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcG9zdDsgfSk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwogdmFyIHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7CiB2YXIgdXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CmNsYXNzIEFqYXhFcnJvciBleHRlbmRzIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJBZHNCeXBhc3NlckVycm9yIl0gewogIGNvbnN0cnVjdG9yIChtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycywgc3RhdHVzLCByZXNwb25zZSkgewogICAgc3VwZXIoYCR7bWV0aG9kfSAke3VybH0gZ290ICR7c3RhdHVzfWApOwogICAgdGhpcy5fbWV0aG9kID0gbWV0aG9kOwogICAgdGhpcy5fdXJsID0gdXJsOwogICAgdGhpcy5fZGF0YSA9IGRhdGE7CiAgICB0aGlzLl9oZWFkZXJzID0gaGVhZGVyczsKICAgIHRoaXMuX3N0YXR1cyA9IHN0YXR1czsKICAgIHRoaXMuX3Jlc3BvbnNlID0gcmVzcG9uc2U7CiAgfQogIGdldCBuYW1lICgpIHsKICAgIHJldHVybiAnQWpheEVycm9yJzsKICB9CiAgZ2V0IG1ldGhvZCAoKSB7CiAgICByZXR1cm4gdGhpcy5fbWV0aG9kOwogIH0KICBnZXQgdXJsICgpIHsKICAgIHJldHVybiB0aGlzLl91cmw7CiAgfQogIGdldCBkYXRhICgpIHsKICAgIHJldHVybiB0aGlzLl9kYXRhOwogIH0KICBnZXQgaGVhZGVycyAoKSB7CiAgICByZXR1cm4gdGhpcy5faGVhZGVyczsKICB9CiAgZ2V0IHN0YXR1cyAoKSB7CiAgICByZXR1cm4gdGhpcy5fc3RhdHVzOwogIH0KICBnZXQgcmVzcG9uc2UgKCkgewogICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlOwogIH0KfQpmdW5jdGlvbiAqIGZsYXR0ZW5PYmplY3QgKG9iamVjdCkgewogIGlmICghb2JqZWN0KSB7CiAgICByZXR1cm47CiAgfQogIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9iamVjdCkpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7CiAgICAgIGZvciAoY29uc3Qgdl8gb2YgdikgewogICAgICAgIHlpZWxkIFtbaywgJyddLCB2X107CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnKSB7CiAgICAgIGZvciAoY29uc3QgW2tfLCB2X10gb2YgZmxhdHRlbk9iamVjdCh2KSkgewogICAgICAgIHlpZWxkIFtbaywgLi4ua19dLCB2X107CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHlpZWxkIFtba10sIHZdOwogICAgfQogIH0KfQpmdW5jdGlvbiBmbGF0dGVuS2V5IChrZXlMaXN0KSB7CiAgY29uc3QgW2hlYWQsIC4uLnJlc3RdID0ga2V5TGlzdDsKICByZXR1cm4gYCR7aGVhZH0ke3Jlc3QubWFwKF8gPT4gYFske199XWApfWA7Cn0KZnVuY3Rpb24gZGVlcEpvaW4gKHByZWZpeCwgb2JqZWN0KSB7CiAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7CiAgY29uc3QgbWFwcGVkID0gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJtYXAiXSkoa2V5cywgKGspID0+IHsKICAgIGNvbnN0IHYgPSBvYmplY3Rba107CiAgICBjb25zdCBrZXkgPSBgJHtwcmVmaXh9WyR7a31dYDsKICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHsKICAgICAgcmV0dXJuIGRlZXBKb2luKGtleSwgdik7CiAgICB9CiAgICBjb25zdCB0bXAgPSBba2V5LCB2XS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KTsKICAgIHJldHVybiB0bXAuam9pbignPScpOwogIH0pOwogIHJldHVybiBtYXBwZWQuam9pbignJicpOwp9CmZ1bmN0aW9uIHRvUXVlcnkgKGRhdGEpIHsKICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGE7CiAgaWYgKGRhdGEgPT09IG51bGwgfHwgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdvYmplY3QnKSkgewogICAgcmV0dXJuICcnOwogIH0KICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHsKICAgIHJldHVybiBkYXRhOwogIH0KICBpZiAoZGF0YSBpbnN0YW5jZW9mIFN0cmluZykgewogICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTsKICB9CiAgY29uc3Qga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGRhdGEpOwogIHJldHVybiBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm1hcCJdKShrZXlzLCAoaykgPT4gewogICAgY29uc3QgdiA9IGRhdGFba107CiAgICBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnKSB7CiAgICAgIHJldHVybiBkZWVwSm9pbihrLCB2KTsKICAgIH0KICAgIGNvbnN0IHRtcCA9IFtrLCB2XS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KTsKICAgIHJldHVybiB0bXAuam9pbignPScpOwogIH0pLmpvaW4oJyYnKTsKfQpmdW5jdGlvbiB0b0Zvcm0gKGRhdGEpIHsKICBjb25zdCB0eXBlID0gdHlwZW9mIGRhdGE7CiAgaWYgKGRhdGEgPT09IG51bGwgfHwgKHR5cGUgIT09ICdzdHJpbmcnICYmIHR5cGUgIT09ICdvYmplY3QnKSkgewogICAgcmV0dXJuICcnOwogIH0KICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHsKICAgIHJldHVybiBkYXRhOwogIH0KICBpZiAoZGF0YSBpbnN0YW5jZW9mIFN0cmluZykgewogICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTsKICB9CiAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpOwogIGZvciAoY29uc3QgW2ssIHZdIG9mIGZsYXR0ZW5PYmplY3QoZGF0YSkpIHsKICAgIGZvcm0uYXBwZW5kKGZsYXR0ZW5LZXkoayksIHYpOwogIH0KICByZXR1cm4gZm9ybTsKfQpmdW5jdGlvbiBhamF4IChtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycykgewogIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJkZWJ1ZyJdKSgnYWpheCcsIG1ldGhvZCwgdXJsLCBkYXRhLCBoZWFkZXJzKTsKICBjb25zdCBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogIGwuaHJlZiA9IHVybDsKICBjb25zdCByZXFIb3N0ID0gbC5ob3N0bmFtZTsKICBjb25zdCBvdmVycmlkZUhlYWRlcnMgPSB7CiAgICBIb3N0OiByZXFIb3N0IHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0LAogICAgT3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLAogICAgUmVmZXJlcjogd2luZG93LmxvY2F0aW9uLmhyZWYsCiAgICAnWC1SZXF1ZXN0ZWQtV2l0aCc6ICdYTUxIdHRwUmVxdWVzdCcsCiAgfTsKICBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZvckVhY2giXSkob3ZlcnJpZGVIZWFkZXJzLCAodiwgaykgPT4gewogICAgaWYgKGhlYWRlcnNba10gPT09IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl0pIHsKICAgICAgZGVsZXRlIGhlYWRlcnNba107CiAgICB9IGVsc2UgewogICAgICBoZWFkZXJzW2tdID0gdjsKICAgIH0KICB9KTsKICBpZiAoZGF0YSkgewogICAgaWYgKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddLmluZGV4T2YoJ2pzb24nKSA+PSAwKSB7CiAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKTsKICAgIH0gZWxzZSBpZiAoaGVhZGVyc1snQ29udGVudC1UeXBlJ10uaW5kZXhPZignbXVsdGlwYXJ0JykgPj0gMCkgewogICAgICBkYXRhID0gdG9Gb3JtKGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgZGF0YSA9IHRvUXVlcnkoZGF0YSk7CiAgICB9CiAgICBoZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gZGF0YS5sZW5ndGg7CiAgfQogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7CiAgICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bIkdNQVBJIl0ueG1sSHR0cFJlcXVlc3QoewogICAgICBtZXRob2Q6IG1ldGhvZCwKICAgICAgdXJsOiB1cmwsCiAgICAgIGRhdGE6IGRhdGEsCiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsCiAgICAgIG9ubG9hZCAocmVzcG9uc2UpIHsKICAgICAgICByZXNwb25zZSA9ICh0eXBlb2YgcmVzcG9uc2UucmVzcG9uc2VUZXh0ICE9PSAndW5kZWZpbmVkJykgPyByZXNwb25zZSA6IHRoaXM7CiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7CiAgICAgICAgICByZWplY3QobmV3IEFqYXhFcnJvcihtZXRob2QsIHVybCwgZGF0YSwgaGVhZGVycywgcmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5yZXNwb25zZVRleHQpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5yZXNwb25zZVRleHQpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgb25lcnJvciAocmVzcG9uc2UpIHsKICAgICAgICByZXNwb25zZSA9ICh0eXBlb2YgcmVzcG9uc2UucmVzcG9uc2VUZXh0ICE9PSAndW5kZWZpbmVkJykgPyByZXNwb25zZSA6IHRoaXM7CiAgICAgICAgcmVqZWN0KG5ldyBBamF4RXJyb3IobWV0aG9kLCB1cmwsIGRhdGEsIGhlYWRlcnMsIHJlc3BvbnNlLnN0YXR1cywgcmVzcG9uc2UucmVzcG9uc2VUZXh0KSk7CiAgICAgIH0sCiAgICB9KTsKICB9KTsKfQpmdW5jdGlvbiBnZXQgKHVybCwgZGF0YSwgaGVhZGVycykgewogIGRhdGEgPSB0b1F1ZXJ5KGRhdGEpOwogIGRhdGEgPSBkYXRhID8gJz8nICsgZGF0YSA6ICcnOwogIGhlYWRlcnMgPSBoZWFkZXJzIHx8IHt9OwogIHJldHVybiBhamF4KCdHRVQnLCB1cmwgKyBkYXRhLCAnJywgaGVhZGVycyk7Cn0KZnVuY3Rpb24gcG9zdCAodXJsLCBkYXRhLCBoZWFkZXJzKSB7CiAgY29uc3QgaCA9IHsKICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04JywKICB9OwogIGlmIChoZWFkZXJzKSB7CiAgICBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZvckVhY2giXSkoaGVhZGVycywgKHYsIGspID0+IHsKICAgICAgaFtrXSA9IHY7CiAgICB9KTsKICB9CiAgcmV0dXJuIGFqYXgoJ1BPU1QnLCB1cmwsIGRhdGEsIGgpOwp9CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInNldENvb2tpZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0Q29va2llOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZ2V0Q29va2llIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRDb29raWU7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJyZXNldENvb2tpZXMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlc2V0Q29va2llczsgfSk7CiB2YXIgdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpOwpmdW5jdGlvbiBzZXRDb29raWUgKGtleSwgdmFsdWUpIHsKICBkb2N1bWVudC5jb29raWUgPSBgJHtrZXl9PSR7dmFsdWV9O3BhdGg9JHtsb2NhdGlvbi5wYXRobmFtZX07YDsKfQpmdW5jdGlvbiBnZXRDb29raWUgKGtleSkgewogIGxldCBbLCBjLF0gPSBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZpbmQiXSkoZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JyksICh2KSA9PiB7CiAgICBjb25zdCBrID0gdi5yZXBsYWNlKC9eXHMqKFthLXpBLVowLTktX10rKT0uKyQvLCAnJDEnKTsKICAgIGlmIChrICE9PSBrZXkpIHsKICAgICAgcmV0dXJuIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl07CiAgICB9CiAgfSk7CiAgaWYgKGMgPT09IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl0pIHsKICAgIHJldHVybiBudWxsOwogIH0KICBjID0gYy5yZXBsYWNlKC9eXHMqW2EtekEtWjAtOS1fXSs9KFteO10rKS4/JC8sICckMScpOwogIGlmICghYykgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiBjOwp9CmZ1bmN0aW9uIHJlc2V0Q29va2llcyAoKSB7CiAgY29uc3QgYSA9IGRvY3VtZW50LmRvbWFpbjsKICBjb25zdCBiID0gZG9jdW1lbnQuZG9tYWluLnJlcGxhY2UoL153d3dcLi8sICcnKTsKICBjb25zdCBjID0gZG9jdW1lbnQuZG9tYWluLnJlcGxhY2UoL14oXHcrXC4pKz8oXHcrXC5cdyspJC8sICckMicpOwogIGNvbnN0IGQgPSAobmV3IERhdGUoMWUzKSkudG9VVENTdHJpbmcoKTsKICBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZvckVhY2giXSkoZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JyksICh2KSA9PiB7CiAgICBjb25zdCBrID0gdi5yZXBsYWNlKC9eXHMqKFx3Kyk9LiskLywgJyQxJyk7CiAgICBkb2N1bWVudC5jb29raWUgPSBgJHtrfT07ZXhwaXJlcz0ke2R9O2A7CiAgICBkb2N1bWVudC5jb29raWUgPSBgJHtrfT07cGF0aD0vO2V4cGlyZXM9JHtkfTtgOwogICAgY29uc3QgZSA9IChhLCBiLCBjKSA9PiBgJHthfT07cGF0aD0vO2RvbWFpbj0ke2J9O2V4cGlyZXM9JHtjfTtgOwogICAgZG9jdW1lbnQuY29va2llID0gZShrLCBhLCBkKTsKICAgIGRvY3VtZW50LmNvb2tpZSA9IGUoaywgYiwgZCk7CiAgICBkb2N1bWVudC5jb29raWUgPSBlKGssIGMsIGQpOwogIH0pOwp9CiB9KSwKIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHsKInVzZSBzdHJpY3QiOwpfX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImJsb2NrIiwgZnVuY3Rpb24oKSB7IHJldHVybiBibG9jazsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInF1ZXJ5U2VsZWN0b3IiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHF1ZXJ5U2VsZWN0b3I7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJxdWVyeVNlbGVjdG9yQWxsIiwgZnVuY3Rpb24oKSB7IHJldHVybiBxdWVyeVNlbGVjdG9yQWxsOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAicXVlcnlTZWxlY3Rvck9yTnVsbCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcXVlcnlTZWxlY3Rvck9yTnVsbDsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgInJlbW92ZSIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVtb3ZlOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAic2VhcmNoRnJvbVNjcmlwdHMiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNlYXJjaEZyb21TY3JpcHRzOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAidG9ET00iLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvRE9NOyB9KTsKIHZhciB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7CiB2YXIgdXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7CmNsYXNzIERvbU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWRzQnlwYXNzZXJFcnJvciJdIHsKICBjb25zdHJ1Y3RvciAoc2VsZWN0b3IpIHsKICAgIHN1cGVyKGBcYCR7c2VsZWN0b3J9XGAgbm90IGZvdW5kYCk7CiAgfQogIGdldCBuYW1lICgpIHsKICAgIHJldHVybiAnRG9tTm90Rm91bmRFcnJvcic7CiAgfQp9CmZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3IgKHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LnF1ZXJ5U2VsZWN0b3IpIHsKICAgIGNvbnRleHQgPSBkb2N1bWVudDsKICB9CiAgY29uc3QgbiA9IGNvbnRleHQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CiAgaWYgKCFuKSB7CiAgICB0aHJvdyBuZXcgRG9tTm90Rm91bmRFcnJvcihzZWxlY3Rvcik7CiAgfQogIHJldHVybiBuOwp9CmZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JPck51bGwgKHNlbGVjdG9yLCBjb250ZXh0KSB7CiAgdHJ5IHsKICAgIHJldHVybiBxdWVyeVNlbGVjdG9yKHNlbGVjdG9yLCBjb250ZXh0KTsKICB9IGNhdGNoIChlKSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbCAoc2VsZWN0b3IsIGNvbnRleHQpIHsKICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQucXVlcnlTZWxlY3RvckFsbCkgewogICAgY29udGV4dCA9IGRvY3VtZW50OwogIH0KICBjb25zdCBucyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CiAgcmV0dXJuIG5zOwp9CmZ1bmN0aW9uIHRvRE9NIChyYXdIVE1MKSB7CiAgdHJ5IHsKICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKICAgIGNvbnN0IERPTUhUTUwgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHJhd0hUTUwsICd0ZXh0L2h0bWwnKTsKICAgIHJldHVybiBET01IVE1MOwogIH0gY2F0Y2ggKGUpIHsKICAgIHRocm93IG5ldyB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siQWRzQnlwYXNzZXJFcnJvciJdKCdjb3VsZCBub3QgcGFyc2UgSFRNTCB0byBET00nKTsKICB9Cn0KZnVuY3Rpb24gcmVtb3ZlIChzZWxlY3RvciwgY29udGV4dCkgewogIGNvbnN0IG5vZGVzID0gcXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciwgY29udGV4dCk7CiAgT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJmb3JFYWNoIl0pKG5vZGVzLCAoZSkgPT4gewogICAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bImRlYnVnIl0pKCdyZW1vdmVkJywgZSk7CiAgICBlLnJlbW92ZSgpOwogIH0pOwp9CmZ1bmN0aW9uIGJsb2NrIChzZWxlY3RvciwgY29udGV4dD1udWxsKSB7CiAgaWYgKCFjb250ZXh0KSB7CiAgICBjb250ZXh0ID0gZG9jdW1lbnQ7CiAgfQogIGxldCBmbiA9IG51bGw7CiAgaWYgKE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siaXNTdHJpbmciXSkoc2VsZWN0b3IpKSB7CiAgICBmbiA9ICgpID0+IHsKICAgICAgcmVtb3ZlKHNlbGVjdG9yLCBjb250ZXh0KTsKICAgIH07CiAgfSBlbHNlIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHsKICAgIGZuID0gKG11dGF0aW9uKSA9PiB7CiAgICAgIG11dGF0aW9uLmFkZGVkTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4gewogICAgICAgIGlmIChzZWxlY3Rvcihub2RlKSkgewogICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9OwogIH0gZWxzZSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd3cm9uZyBzZWxlY3RvcicpOwogIH0KICBjb25zdCBvID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4gewogICAgbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7CiAgICAgIGZuKG11dGF0aW9uKTsKICAgIH0pOwogIH0pOwogIG8ub2JzZXJ2ZShjb250ZXh0LCB7CiAgICBjaGlsZExpc3Q6IHRydWUsCiAgICBzdWJ0cmVlOiB0cnVlLAogIH0pOwp9CmZ1bmN0aW9uIHNlYXJjaEZyb21TY3JpcHRzQnlSZWdFeHAgKHBhdHRlcm4sIGNvbnRleHQpIHsKICBjb25zdCBzY3JpcHRzID0gcXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0JywgY29udGV4dCk7CiAgY29uc3QgWywgLCBtXSA9IE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siZmluZCJdKShzY3JpcHRzLCAocykgPT4gewogICAgY29uc3QgbSA9IHMudGV4dENvbnRlbnQubWF0Y2gocGF0dGVybik7CiAgICBpZiAoIW0pIHsKICAgICAgcmV0dXJuIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl07CiAgICB9CiAgICByZXR1cm4gbTsKICB9KTsKICBpZiAobSA9PT0gdXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm5vbmUiXSkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiBtOwp9CmZ1bmN0aW9uIHNlYXJjaEZyb21TY3JpcHRzQnlTdHJpbmcgKHBhdHRlcm4sIGNvbnRleHQpIHsKICBjb25zdCBzY3JpcHRzID0gcXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0JywgY29udGV4dCk7CiAgY29uc3QgWywgbSxdID0gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJmaW5kIl0pKHNjcmlwdHMsIChzKSA9PiB7CiAgICBjb25zdCBtID0gcy50ZXh0Q29udGVudC5pbmRleE9mKHBhdHRlcm4pOwogICAgaWYgKG0gPCAwKSB7CiAgICAgIHJldHVybiB1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9uZSJdOwogICAgfQogICAgcmV0dXJuIG07CiAgfSk7CiAgaWYgKG0gPT09IHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJub25lIl0pIHsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4gbS50ZXh0Q29udGVudDsKfQpmdW5jdGlvbiBzZWFyY2hGcm9tU2NyaXB0cyAocGF0dGVybiwgY29udGV4dCkgewogIGlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7CiAgICByZXR1cm4gc2VhcmNoRnJvbVNjcmlwdHNCeVJlZ0V4cChwYXR0ZXJuLCBjb250ZXh0KTsKICB9IGVsc2UgaWYgKE9iamVjdCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1siaXNTdHJpbmciXSkocGF0dGVybikpIHsKICAgIHJldHVybiBzZWFyY2hGcm9tU2NyaXB0c0J5U3RyaW5nKHBhdHRlcm4sIGNvbnRleHQpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KIH0pLAogKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykgewoidXNlIHN0cmljdCI7Cl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAib3BlbkltYWdlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBvcGVuSW1hZ2U7IH0pOwogdmFyIHV0aWxfbGlua19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7CiB2YXIgdXRpbF9kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApOwogdmFyIHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwogdmFyIHV0aWxfbWlzY19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7CiB2YXIgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTsKYXN5bmMgZnVuY3Rpb24gb3BlbkltYWdlIChpbWdTcmMsIG9wdGlvbnMpIHsKICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCByZXBsYWNlID0gISFvcHRpb25zLnJlcGxhY2U7CiAgY29uc3QgcmVmZXJlciA9ICEhb3B0aW9ucy5yZWZlcmVyOwogIGlmIChyZXBsYWNlKSB7CiAgICBhd2FpdCByZXBsYWNlQm9keShpbWdTcmMpOwogICAgcmV0dXJuOwogIH0KICBjb25zdCByZWRpcmVjdEltYWdlID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHTUFQSSJdLmdldFZhbHVlKCdyZWRpcmVjdF9pbWFnZScpOwogIGlmIChyZWRpcmVjdEltYWdlKSB7CiAgICBhd2FpdCBPYmplY3QodXRpbF9saW5rX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bIm9wZW5MaW5rIl0pKGltZ1NyYywgewogICAgICByZWZlcmVyOiByZWZlcmVyLAogICAgfSk7CiAgfQp9CmZ1bmN0aW9uIGVuYWJsZVNjcm9sbGluZyAoKSB7CiAgY29uc3QgbyA9IGRvY3VtZW50LmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA6IGRvY3VtZW50LmJvZHk7CiAgby5zdHlsZS5vdmVyZmxvdyA9ICcnOwp9CmZ1bmN0aW9uIHRvZ2dsZVNocmlua2luZyAoKSB7CiAgdGhpcy5jbGFzc0xpc3QudG9nZ2xlKCdhZHNieXBhc3Nlci1zaHJpbmtlZCcpOwp9CmZ1bmN0aW9uIGNoZWNrU2NhbGluZyAoKSB7CiAgY29uc3QgbncgPSB0aGlzLm5hdHVyYWxXaWR0aDsKICBjb25zdCBuaCA9IHRoaXMubmF0dXJhbEhlaWdodDsKICBjb25zdCBjdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDsKICBjb25zdCBjaCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7CiAgaWYgKChudyA+IGN3IHx8IG5oID4gY2gpICYmICF0aGlzLmNsYXNzTGlzdC5jb250YWlucygnYWRzYnlwYXNzZXItcmVzaXphYmxlJykpIHsKICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnYWRzYnlwYXNzZXItcmVzaXphYmxlJyk7CiAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ2Fkc2J5cGFzc2VyLXNocmlua2VkJyk7CiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlU2hyaW5raW5nKTsKICB9IGVsc2UgaWYgKChudyA8PSBjdyAmJiBuaCA8PSBjaCkgJiYgdGhpcy5jbGFzc0xpc3QuY29udGFpbnMoJ2Fkc2J5cGFzc2VyLXJlc2l6YWJsZScpKSB7CiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlU2hyaW5raW5nKTsKICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnYWRzYnlwYXNzZXItc2hyaW5rZWQnKTsKICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZSgnYWRzYnlwYXNzZXItcmVzaXphYmxlJyk7CiAgfQp9CmFzeW5jIGZ1bmN0aW9uIHNjYWxlSW1hZ2UgKGkpIHsKICBjb25zdCBzaVVSTCA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR01BUEkiXS5nZXRSZXNvdXJjZVVybCgnc2NhbGVJbWFnZScpOwogIGFwcGVuZFN0eWxlVVJMKHNpVVJMKTsKICBpZiAoaS5uYXR1cmFsV2lkdGggJiYgaS5uYXR1cmFsSGVpZ2h0KSB7CiAgICBjaGVja1NjYWxpbmcuY2FsbChpKTsKICB9IGVsc2UgewogICAgaS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgY2hlY2tTY2FsaW5nKTsKICB9CiAgbGV0IGggPSAwOwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7CiAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KGgpOwogICAgaCA9IHdpbmRvdy5zZXRUaW1lb3V0KGNoZWNrU2NhbGluZy5iaW5kKGkpLCAxMDApOwogIH0pOwp9CmFzeW5jIGZ1bmN0aW9uIGNoYW5nZUJhY2tncm91bmQgKCkgewogIGNvbnN0IGJnSW1hZ2UgPSBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdNQVBJIl0uZ2V0UmVzb3VyY2VVcmwoJ2JnSW1hZ2UnKTsKICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjMjIyMjIyJzsKICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJyR7YmdJbWFnZX0nKWA7Cn0KYXN5bmMgZnVuY3Rpb24gYWxpZ25DZW50ZXIgKCkgewogIGNvbnN0IGFjVVJMID0gYXdhaXQgdXRpbF9wbGF0Zm9ybV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fWyJHTUFQSSJdLmdldFJlc291cmNlVXJsKCdhbGlnbkNlbnRlcicpOwogIGFwcGVuZFN0eWxlVVJMKGFjVVJMKTsKfQpmdW5jdGlvbiBpbmplY3RTdHlsZSAoZCwgaSkgewogIE9iamVjdCh1dGlsX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJyZW1vdmUiXSkoJ3N0eWxlLCBsaW5rW3JlbD1zdHlsZXNoZWV0XScpOwogIGQuaWQgPSAnYWRzYnlwYXNzZXItd3JhcHBlcic7CiAgaS5pZCA9ICdhZHNieXBhc3Nlci1pbWFnZSc7Cn0KZnVuY3Rpb24gYXBwZW5kU3R5bGVVUkwgKHVybCkgewogIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CiAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7CiAgbGluay50eXBlID0gJ3RleHQvY3NzJzsKICBsaW5rLmhyZWYgPSB1cmw7CiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKfQphc3luYyBmdW5jdGlvbiByZXBsYWNlQm9keSAoaW1nU3JjKSB7CiAgY29uc3QgcmVkaXJlY3RJbWFnZSA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR01BUEkiXS5nZXRWYWx1ZSgncmVkaXJlY3RfaW1hZ2UnKTsKICBpZiAoIXJlZGlyZWN0SW1hZ2UpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKCFpbWdTcmMpIHsKICAgIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ3YXJuIl0pKCdmYWxzZSB1cmwnKTsKICAgIHJldHVybjsKICB9CiAgT2JqZWN0KHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19bImluZm8iXSkoYHJlcGxhY2luZyBib2R5IHdpdGggXGAke2ltZ1NyY31cYCAuLi5gKTsKICBPYmplY3QodXRpbF9taXNjX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19bInJlbW92ZUFsbFRpbWVyIl0pKCk7CiAgZW5hYmxlU2Nyb2xsaW5nKCk7CiAgZG9jdW1lbnQuYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JvZHknKTsKICBjb25zdCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTsKICBjb25zdCBpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CiAgaS5zcmMgPSBpbWdTcmM7CiAgZC5hcHBlbmRDaGlsZChpKTsKICBjb25zdCBhYyA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR01BUEkiXS5nZXRWYWx1ZSgnYWxpZ25fY2VudGVyJyk7CiAgY29uc3Qgc2kgPSBhd2FpdCB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19bIkdNQVBJIl0uZ2V0VmFsdWUoJ3NjYWxlX2ltYWdlJyk7CiAgaWYgKGFjIHx8IHNpKSB7CiAgICBpbmplY3RTdHlsZShkLCBpKTsKICB9CiAgaWYgKGFjKSB7CiAgICBhd2FpdCBhbGlnbkNlbnRlcigpOwogIH0KICBjb25zdCBjYiA9IGF3YWl0IHV0aWxfcGxhdGZvcm1fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1siR01BUEkiXS5nZXRWYWx1ZSgnY2hhbmdlX2JhY2tncm91bmQnKTsKICBpZiAoY2IpIHsKICAgIGF3YWl0IGNoYW5nZUJhY2tncm91bmQoKTsKICB9CiAgaWYgKHNpKSB7CiAgICBhd2FpdCBzY2FsZUltYWdlKGkpOwogIH0KfQogfSksCiAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJvcGVuTGluayIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gb3Blbkxpbms7IH0pOwogdmFyIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKIHZhciB1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTsKZnVuY3Rpb24gcHJlcGFyZSAoZSkgewogIGlmICghZG9jdW1lbnQuYm9keSkgewogICAgZG9jdW1lbnQuYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JvZHknKTsKICB9CiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTsKICByZXR1cm4gT2JqZWN0KHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWyJ3YWl0Il0pKDApOwp9CmFzeW5jIGZ1bmN0aW9uIGdldCAodXJsKSB7CiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICBhLmhyZWYgPSB1cmw7CiAgbGV0IGNsaWNrZWQgPSBmYWxzZTsKICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7CiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGNsaWNrZWQgPSB0cnVlOwogIH0sIHRydWUpOwogIGF3YWl0IHByZXBhcmUoYSk7CiAgYS5jbGljaygpOwogIGNvbnN0IHRpY2sgPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICBpZiAoY2xpY2tlZCkgewogICAgICBPYmplY3QodXRpbF9sb2dnZXJfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1siaW5mbyJdKSgnYWxyZWFkeSBjbGlja2VkJyk7CiAgICAgIGNsZWFySW50ZXJ2YWwodGljayk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJpbmZvIl0pKCd0cnkgYWdhaW4nKTsKICAgIGEuY2xpY2soKTsKICB9LCA1MDApOwp9CmFzeW5jIGZ1bmN0aW9uIHBvc3QgKHBhdGgsIHBhcmFtcykgewogIHBhcmFtcyA9IHBhcmFtcyB8fCB7fTsKICBjb25zdCBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOwogIGZvcm0ubWV0aG9kID0gJ3Bvc3QnOwogIGZvcm0uYWN0aW9uID0gcGF0aDsKICBPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImZvckVhY2giXSkocGFyYW1zLCAodmFsdWUsIGtleSkgPT4gewogICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nOwogICAgaW5wdXQubmFtZSA9IGtleTsKICAgIGlucHV0LnZhbHVlID0gdmFsdWU7CiAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTsKICB9KTsKICBhd2FpdCBwcmVwYXJlKGZvcm0pOwogIGZvcm0uc3VibWl0KCk7Cn0KYXN5bmMgZnVuY3Rpb24gb3BlbkxpbmsgKHRvLCBvcHRpb25zKSB7CiAgaWYgKCFPYmplY3QodXRpbF9jb3JlX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bImlzU3RyaW5nIl0pKHRvKSAmJiAhdG8pIHsKICAgIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJ3YXJuIl0pKCdmYWxzZSBVUkwnKTsKICAgIHJldHVybjsKICB9CiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CiAgY29uc3Qgd2l0aFJlZmVyZXIgPSB0eXBlb2Ygb3B0aW9ucy5yZWZlcmVyID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBvcHRpb25zLnJlZmVyZXI7CiAgY29uc3QgcG9zdERhdGEgPSBvcHRpb25zLnBvc3Q7CiAgY29uc3QgZnJvbSA9IHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpOwogIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fWyJpbmZvIl0pKGAke2Zyb219IC0+ICR7dG99YCk7CiAgaWYgKHBvc3REYXRhKSB7CiAgICBhd2FpdCBwb3N0KHRvLCBwb3N0RGF0YSk7CiAgICByZXR1cm47CiAgfQogIGlmICh3aXRoUmVmZXJlcikgewogICAgYXdhaXQgZ2V0KHRvKTsKICAgIHJldHVybjsKICB9CiAgd2luZG93LnRvcC5sb2NhdGlvbi5yZXBsYWNlKHRvKTsKfQogfSksCiAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7CiJ1c2Ugc3RyaWN0IjsKX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJyZW1vdmVBbGxUaW1lciIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVtb3ZlQWxsVGltZXI7IH0pOwogX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sICJudWtlIiwgZnVuY3Rpb24oKSB7IHJldHVybiBudWtlOyB9KTsKIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCAiZ2VuZXJhdGVSYW5kb21JUCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2VuZXJhdGVSYW5kb21JUDsgfSk7CiBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgImV2aWwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGV2aWw7IH0pOwogdmFyIHV0aWxfY29yZV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTsKIHZhciB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpOwogdmFyIHV0aWxfbG9nZ2VyX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpOwpmdW5jdGlvbiByZW1vdmVBbGxUaW1lciAoKSB7CiAgbGV0IGhhbmRsZSA9IHdpbmRvdy5zZXRJbnRlcnZhbCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9wIl0sIDEwKTsKICB3aGlsZSAoaGFuZGxlID4gMCkgewogICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaGFuZGxlLS0pOwogIH0KICBoYW5kbGUgPSB3aW5kb3cuc2V0VGltZW91dCh1dGlsX2NvcmVfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1sibm9wIl0sIDEwKTsKICB3aGlsZSAoaGFuZGxlID4gMCkgewogICAgd2luZG93LmNsZWFyVGltZW91dChoYW5kbGUtLSk7CiAgfQp9CmZ1bmN0aW9uIG51a2UgKHVybCkgewogIHRyeSB7CiAgICB1dGlsX3BsYXRmb3JtX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19bInVzdyJdLmRvY3VtZW50LndyaXRlKCdudWtlZCBieSBBZHNCeXBhc3NlciwgbGVhZGluZyB0byAuLi48YnIvPicpOwogIH0gY2F0Y2ggKGUpIHsKICAgIE9iamVjdCh1dGlsX2xvZ2dlcl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fWyJ3YXJuIl0pKCdudWtlIGZhaWxlZCcsIGUpOwogIH0KICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwogIGEuaHJlZiA9IHVybDsKICBhLnRleHRDb250ZW50ID0gdXJsOwogIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7Cn0KZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21JUCAoKSB7CiAgcmV0dXJuIFswLCAwLCAwLCAwXS5tYXAoKCkgPT4gewogICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1Nik7CiAgfSkuam9pbignLicpOwp9CmZ1bmN0aW9uIGV2aWwgKHNjcmlwdCkgewogIHJldHVybiAoKAogICAgR00sCiAgICBHTV9kZWxldGVWYWx1ZSwKICAgIEdNX2dldFJlc291cmNlVVJMLAogICAgR01fZ2V0VmFsdWUsCiAgICBHTV9vcGVuSW5UYWIsCiAgICBHTV9yZWdpc3Rlck1lbnVDb21tYW5kLAogICAgR01fc2V0VmFsdWUsCiAgICBHTV94bWxodHRwUmVxdWVzdCwKICAgIHVuc2FmZVdpbmRvdywKICAgIHdpbmRvdywKICApID0+IHsKICAgIHJldHVybiBldmFsKHNjcmlwdCk7CiAgfSkoKTsKfQogfSkKIF0pOw==","resources":[{"meta":{"name":"align_center.css","url":"https://raw.githubusercontent.com/adsbypasser/adsbypasser/v7.19.0/resources/css/align_center.css","ts":1649334290508,"mimetype":"text/css"},"source":"aHRtbCB7CiAgaGVpZ2h0OiAxMDAlOwp9Cgpib2R5IHsKICBoZWlnaHQ6IDEwMCU7CiAgbWFyZ2luOiAwOwp9CgojYWRzYnlwYXNzZXItd3JhcHBlciB7CiAgd2lkdGg6IDEwMCU7CiAgaGVpZ2h0OiAxMDAlOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgbGluZS1oZWlnaHQ6IDA7Cn0KCiNhZHNieXBhc3Nlci1pbWFnZSB7CiAgbWFyZ2luOiBhdXRvOwogIHRvcDogMDsKICBib3R0b206IDA7CiAgbGVmdDogMDsKICByaWdodDogMDsKfQo="},{"meta":{"name":"scale_image.css","url":"https://raw.githubusercontent.com/adsbypasser/adsbypasser/v7.19.0/resources/css/scale_image.css","ts":1649334290510,"mimetype":"text/css"},"source":"I2Fkc2J5cGFzc2VyLWltYWdlLmFkc2J5cGFzc2VyLXJlc2l6YWJsZSB7CiAgY3Vyc29yOiAtd2Via2l0LXpvb20tb3V0OwogIGN1cnNvcjogLW1vei16b29tLW91dDsKICBjdXJzb3I6IHpvb20tb3V0Owp9CgojYWRzYnlwYXNzZXItaW1hZ2UuYWRzYnlwYXNzZXItcmVzaXphYmxlLmFkc2J5cGFzc2VyLXNocmlua2VkIHsKICBtYXgtd2lkdGg6IDEwMCU7CiAgbWF4LWhlaWdodDogMTAwJTsKICBjdXJzb3I6IC13ZWJraXQtem9vbS1pbjsKICBjdXJzb3I6IC1tb3otem9vbS1pbjsKICBjdXJzb3I6IHpvb20taW47Cn0K"},{"meta":{"name":"imagedoc-darknoise.png","url":"https://raw.githubusercontent.com/adsbypasser/adsbypasser/v7.19.0/resources/img/imagedoc-darknoise.png","ts":1649334290512,"mimetype":"image/png"},"source":"wolQTkcNChoKAAAADUlIRFIAAABYAAAAWAQDAAAAwoPCuy0HAAAAG1BMVEXDvsO+w74BAQHDv8O/w78KCgoDAwN/f3/DtcO1w7XCgMKAwoDDvMO8w7zDoQ8Ew7YAAAAJdFJOUwUFBQUFBQUFBcKHDsOTw70AAAvDgklEQVR4Xg3DijljwrJaEADDkBnDtnIue3lxL0HCjUkJwpp8wrEEw6NWwoJLTAkaE0swbj/Du8K9w64UB37DhS1uKsOzwqLDsMOCWHzDqMKfw4BICSlZwqjDvirCtsObw59Rw7MfQsKjc2tIwpfCtMKADcKlwpvCpcKQTxPCl13Cs8Kow4k3I13CjAzCilrCp2vCoMKIwrFZFAhjwqE/wpDDpjvChMKHIi/Dtl/CrAPCt1zDv8O0w6gLwpQnecKSd8O8w73DpMOgfcK8wobCpcOQM8OlacKVwoc/wrREw6gyF8KOYsKqKkvChsKvw6xNZylOwp49RkpVCsK+fFkME8KIw403w4x7R8OJwoDCnsOcw7xiCDnDlS4rFjIEVQ7DjsO2OgAuQF8fEcO6wo5Ow6EtI8OTCsKBND3DhMKswoYmw71xw4VtCMOtH1MXD8KXVG7CnX04V2PCkDlywrPDocOSw4LCsGAdG8OLw7cFTcO+wpjCvFYjwojDgcOLw78PUcKRW8KlLg7DskstADnClCI1w64lHcKwwqYpOsOmHzAEw4bCnsKZw79mw43DlsOqCi/Dp1HCvsO9Wz0DL8O/w4HDrmTCh8OLwrDCvEPDrsKbwqo5HkDDjA3CvcOZWsOpw7DCtsKvwpTDjENUw7DDmmENw5bDrzbDksKMw55Jw7HDpgjCulDDhMKQwpfDp8KGwrPDrcK7wprCtsKDwrcXwpZ0f8KTw6tlLMO8bMKlEsOaw7sKw58jwpXCt8KXKsOwH8OmwonDscOwPcKuVsOdScO8ZsOlV8Olw5DDiMKlCMKcw6UGw6PCh8Oqwo3DizMrbsK6w4h1woABwoHCvXpIb8OLwol4McKmwrjDojYVw4ldwpEUS8KSw6fCh8K2HcOLMMK2Y13CqR/DvlfCg8O0O8OXwrheelbCgxVSQkNXwqXCgwLDhMKeFXpdJcKaLnrCjnYIIMKQEDJ3RcO7NMOEwosrwqPDt2rDt8KKMlPDlMOtGsKUw7QnLWJvJMK0e18ew5fCg8OXw6bDtQPCqhbDryjDm8OZwrdBCsKFw4HCk3huSMK/RsKKazbDkwoqw5EET8OYwozCsMKcworCpkjCoMK4CivCn2zCs8KSw70wG3M1EEVDJMO+VTfCucKuLjYCwoJcw50ZDsObwqHCgcKgRmorw44UQ8Krw43DoMKCWDLClC/CoQTCsTLDi8KmUFjDnALCmmrCrcOow7vDhMOECsKGEA9Vw5lyE8Ojw7fDksO4wo3CnMOHWcO5wrXDnznCkMOgwqMdw7PDlk4Ow7YUwp/DvsK8wqPCssKCC37CrytFbEDDiVjCv8KmPwpgw4PCocOtFMKyB8Kawq4ow5ptZ2fDmxorCMKKEMOkw5Vmw5XCpcKewqHDjgzDu8K9w6PDlV8oP8Kzw47Cl8Oywp3Dn8OZZU5IWcKdHcKCesKRHC4uOBpBwrE/DcOtwobDhScwA8KJbcKewqPDtMO9w6/Dk8KKFxY8w45Pw74dH8ONNEkzwoEgbMKYDcO5ScKswrPDlm/Drm8YJmEDwqZ9w7zCkcKHw5gdw4fCjcKmUVXDucOXaipaR8OxAzzCrkgsccOVw4zCsMOHeMOIXsOlw4kQRsOswrMpwqjDkxMyw60rJCVvQsOkwoPDmMKuwoPDsELDqcOtw63DvkUQw7PDlyTCtcKRbGHDnC/ChDfCsx3DkywDelvCrsO2wq/DsjkIwqkLw6s0wrDDgk0AI8OPwqIEJMKvw5XCjsOQQMO+UUrCgsOEw5tuw67Di8OLw6fDm2Y6dhLDgcKASxHCh18cTGjDiMK/fMK+w6tCwqbCt3YAZQXDvMKpw73DmyQ1HMO/wppdwo7DmMK+KwAZw7Rsw7NDN3bDncOdSQQJw5LCvWkWB8OGH8KwwoHCpcKywpHDosK0w5jCjD3Cg8OFfR/CjnnDhG4/LGB+woPDvcO8eRHDncOEdsOswoohwonCoMOXCk/Dt1TDk8O6wpTCjE/DtTBnwrDDh8KAAUZlwqLCrsKPw7DCpREsGw0Ww6jCgMOcwrsNw73Dn2rCpCfCiijCgGBLOw3Dpk/Cq3Ydw67Ch0VbwrzDi8KOIsKJwokPV8OBOiDCqiLDi8OkwpUuWzkITGnCqEkLw6Rcw7vCqXPDuUvDscKawq05Py/Ci8KgYhDClMKywq/ClcOGwofCsFHCvVIuwrofw7rCnR8+wrvCsMO0RsKGwo/Cq8K4L3ZCA3kkQyYuw4ZREEjCicK7wr8FJcK8wrNPw4FsdMKvdF7CgRx7OcO2R8KYwotTNmFzMmZ/XMKNY3gJNMKVEMK9wrpTw450w4BudXknw4jCi8Oiwq3CjlrDqEkSd1ZVPMKEwq/DgzlUZMOWwrbDs8KmUsKNQ8Kyc8KswqlxOWcywoTDsMKuP8Oxw4l8w7nDjVcCwrp1RULCs8O6IsKPw7fCqMO2FcOFJgPDq8O0HnErw5IlHUrCtErDpcObwoDCj1FQamvDqcKJwqXDkcOYwpddD8KoPMKfwoTCshcfw5/CjT4LwpAvwqDChMKXJMKPV8K1w4DDv8KDwqx6w6kiIxo8fkXDlsK3GkbDvBlZw7Enw6nDvH7DvC7Dj3VwARjCs0rCjsK9VEnCnlfDiHjDrGnDtcOMEsKFw63CgsOgH8KPKQzCisKDDBzChMKXVAc9w4kGOcKjwpQgw7DDgzTCnhXCggNhw6jCiEgBc1EHw7sGwqsuPEfDnMK5w7rDsMOPw5zCiFrCiMOVwrHCtMKYE8KxwojDmsOeOsOkwqERw7/DvcKkwozDocKbUGHDmcOGw5hXGcO2IcKEO3pYw5jCpcKmw7/DpEdPF2PDksKZw4zCvsOraMO6e2HDgTzDlsOew7vDglUyw6RQBsK1wp0vw5vCgcKHwobDmG0GwpAnTsOFw4nDtykKw6vDksK7FTJiM8O6asO7w7DDtgTDnAI9Lk1aIUsDwocMNsKHTsOPJ8OJwqchMBcWwqFQw5bCp3/DpVoKwp4IwrMneAUhSsOoQ8OZEmnCucOyw45KLsOewpsTwpXChcKLDhrCicKVw5jCkMKEKjXCrsOuS8Kqw4LDp8KyFEnCg8KBWFHDkl4oHn8Ww7PCtRnCuxbDvMKJw554SxHDlsKJKcOPKnMyAhzDncKGLcKwN8OwKB9zwpjDgMK2wqPCuybDgcOyH8OQeMKSYl9YCMK3w6dfwoo/wqDCr0DCiUV0NmNOEMOqwq8xHzfDlsKbw5FIwoHDiGJbT8KXw7PCq0jCosOSBsONEcK1woBDWirCiRDCkMK5w74VdnbDh3LClHLCnsOdw7zDlSzCmMOpwoUIb8Oiw5N2AcOywpjCtHojUsOgwrUIfA06AMKrw59CY8O/VAXDksOUA8O2wpMyfsO0wrAaTcKnw68XI8K7bz8Uw7TDoMKpwpXDncKqw5XDocOGwrbDj8KZFsK7dMOgCcKIwpbDpsOOPMO+w5drJ8Oiw77CvS3CiX3CmmjDtMO9Dz4+TVPDgcKheyMcPMOWfsK5wprDgMOrGX5gU8O+TcK+c8KrM8O+G8ODw6cIw6vCjT7Dl8KBGWcTM8OuZcOqw6bCi1jDqn1Kw4TDnsKuw5V0V8OJwrvCmhPDtAd+VUh1fMKMCBYQcsOxOcKMwroSHl9lw6nCmsKIJsK9LULDncKbwrDCiyR8w63ClMKrwo9Cb8OUOkQBwokbcMK9w5HCpjZXwpnCmk9XwonClx/DjMO8Nh8CS8Okfj7ClxPCnkhywq/ClQlpKMKzw5MIw4rDm2EwwpfDrMOSw7rClMOuwoNDw5DDkCTCpyUOS33DlHvDrsO1WcK5w7gjwpEPw7J1w74Vw6c6RGjDmsK+JcKZwqtAwq7ClnXCkFpyYwcvw5RmLnPDlMKzT8OMYwYFw47CjMKrXcKEDExxwoBQwpPCn8K6ZHnCr8K/TGTDrcK8DMKBF0FUw7nDgGw9w7U2NU9Bwo4IL8OBw41rw7xEQAPDgMKAwp3DkMK4w5Q0wqnDhMOow6RVa0lOwp7CqGg7S8O3w55cFnMBdMOKdMOgTsKRccOLw60OKcOaYTQ1wonClH8ubMKqBsOpYlfCtMKsQMOBwrsiwpbCkEkHw6HCgcOCKcKvTsOAwqvCv1R7LSXDvRMZAMODwo4ZEcOMVMOcwr50OHnDigMiwpk1w61fwoofwqFWwqItRGDCg3/CuyHCusO5wp7DulTDlsK1w6XDucKhwovCnMOnw4NrCcKqwqNgworDiFdDw4XDiQfCocOZwpzDmRLCo1LDq0LDrsKGc8O5w4MHwozCkkbClMO3ekMDw7RWPMOXwobCpMOwwoHCgiUeDsO1dC9TX3UTw78efmLDrsK1CsOuR8OtwpTChcKeIUIYbsOcw7MWX2fClMKHwpo1w7oXw7sfw6rDiWzDiAASw5NkNsOewqvDuENmwpxgw5oJIcO4woDCn0lPDlLCknzDiWY1w67DpDkQZsK+GGXChcKaesOBd8Obw5fDnMKjwq15wokJaMOKT8OAwp4Two8ww6NuGQ4wwqnCligpc1TCncKgw7NWBhZfw5zDkxPDiCp3ICRnVCrDtmhRQm7DkgYaIAh6E0xNeQ15wqrCklfDjMOSE8KBw74Ww7sPw6hRwqLCjjPCngQxSMK1wo/CnMKvOCsEe8OCWMKnBUbCj8Kdw6U2I8OMY8OUZcK2B3jCicOKfMOZw7vDjcOrw5zDpEgVCMOjScOJSRTDnh8+w6HDlMKFw7jDmCrDtMKSVcKjw4YzwrTDpMOEwpfDlMKGwpN4OcKTRGEeKsOwL8K1wqbCgWjCtCfCjcO7Ric/wrhyMXLDi8Kvw6IKMsOGF2/DoFvDqMOQwoRFMWxAT8OJDMOXwovDoFvDokc9w4DCriMjA0tZwrwQAMOrWCkSw5rCisKQw4fDuX4TPMOzwobDsDDCjWPCggLDtyBkw5bCpyJuOFTCgRnDg3HDvcO5wqZfXcOmwotbwr0Iw44heUTCu8KXVcK2bktFwqLCuSlnA8O8w7XDui3CocKdw5vCkMKuNHHCv8K+B8KIB1kcwqQpwp7DuMKfInZXI3wQCwDClMKgwoM5w6wYccKOAMKYHRnDm8KMwp3CmD5sBsKeGATChlfDlsOhw719wrA+w4VTwpgSw7HCmTTDkMKwEcKFwpBDwqRkwpTDrBgJwr4ewrtMDcK1wrDCvTXDjsK6w5XDtcK7wrBxIsKvV8KJwr7Cg8KQUxtSK012wrYsUMK5GsKGw4AhBEh9FjdzL8OQTQEcU0rCvsOTw57DrWsTw6IWUmDCiMKnBMOZHcKQwq7Dpl9THCvCgnDDqFnCqcO3wqTCuQxjQ8KxKMOIZQkDAMKvw77CrUk6w6JeCcOPw7fClknDm8OvwqzDgMKqw6PCvwwEISvDvsK2cMO/F8Oaw43DviASw4jChsOyw7xEeinCoHpIAsKycsKxwoTDk8KYw4MewrnCs8OXwofDhcK7w6tALzFRw7rDrjrCoMKDTsK+w753wrkxwp7Ct8OXPsKyRMOoZcKiHcOdPQjCq2bCgSnCr8ONMMKCw5/DnBHCuFsBBMOmRMK7RsKHw4lxCwDDgQXCvk54wp4aEsKtwrlcE0xPasOzWcOnVsObMjPCj8OgwoIMwqlnwpciQcONPzXCqBXCqcOrw5h7wr5Ww7dOYRXDuDNmw5rCusKjw5Ykw7sFC8KwVVsuPkwqw5XDrk/DssOYDcKNVsOIwpTDjMOwXcOjNcOWRmrCjx3DiihTwonDjcONw4IDIVXChi8fw4VWeRbDuF0Aw45mM8KpEsOow6gKwrtewowWCWrDn8O2w79BUjB3DsOHUCzCnltOCT4wwrl0w6/ChgvDk8KfwqnDsHhVf8Kww4LDqMKfwrfDq2HCs2TCrMOeLsKnwpDDoT4kXMKDw7sCwoUvw6XCjF/CqcOww4A7w5rDkS1/O8ODJcKeJ1rDq8OTw6HDt8Knw64Ww7DCqETDi8OXwpwnw6wsw7PDpgvDuEDDpRnDjDROHwzCrSlUw6Q4BHLDmhLCvMOvw78Aw73DtABmwozDlmTDkAAAAABJRU5Ewq5CYMKC"}]},{"name":"AntiAdware","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http*://*180upload.com/*","http*://*4upfiles.com/*","http*://*get*.adobe.com/*flashplayer/*","http*://*get*.adobe.com/*reader/*","http*://*afterdawn.com/software/*","http*://*akafile.com/akago.php","http*://*chip.de/downloads/*","http*://*clicknupload.com/*","http*://*cloudyvideos.com/*","http*://*coolrom.com/*/*","http*://*clipconverter.cc/download/*","http*://*dailyuploads.net/*","http*://*datafilehost.com/d/*","http*://*davvas.com/*","http*://*d-h.st/*","http*://*download.cnet.com/*","http*://*telecharger.cnet.com/*","http*://*descargar.cnet.com/*","http*://*de.download.cnet.com/*","http*://*filefactory.com/file/*","http*://*filescdn.com/*","http*://*filehippo.com/*download*","http*://*freewarefiles.com/downloads_counter.php*","http*://*google.*/earth/download/ge/agree.html","http*://*hugefiles.net/*","http*://*hulkload.com/*","http*://*kingfiles.net/*","http*://*letitbit.net/download/*","http*://*loveroms.com/*","http*://*up.media1fire.com/*","http*://*mightyupload.com/*","http*://*mp3fil.*/get/*","http*://*mp3juices.to/*","http*://*mp3olimp.net/*","http*://*mp3olimpz.com/*","http*://*opensubtitles.org/*/subtitles/*","http*://*revclouds.com/*","http*://*romhustler.net/download/*","http*://*romhustler.net/rom/*","http*://*secureupload.eu/*","http*://*sendspace.com/file/*","http*://*sharebeast.com/*","http*://*shared.com/*","http*://*softm8.com*","http*://*.softonic.*","http*://*sourceforge.net/*","http*://*tusfiles.net/*","http*://*unlimitzone.com/*","http*://*uploading.com/*","http*://*uploadocean.com/*","http*://*uplod.ws/*","http*://*uploads.to/*","http*://*uptobox.com/*","http*://*userscdn.com/*","http*://*ziddu.com/downloadfile/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1525361829807,"data":{}},"enabled":true,"position":11,"file_url":"https://raw.githubusercontent.com/HandyUserscripts/AntiAdware/master/AntiAdware.user.js","uuid":"9fedc355-cfb6-413e-8632-e448d97efc1d","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgQW50aUFkd2FyZQovLyBAbmFtZTpmciBBbnRpQWR3YXJlCi8vIEBuYW1lOmRlIEFudGlBZHdhcmUKLy8gQG5hbWU6emgtVFcgQW50aUFkd2FyZQovLyBAbmFtZTp6aC1DTiBBbnRpQWR3YXJlCi8vIEBhdXRob3Igbm9uYW1lMTIwCi8vIEBuYW1lc3BhY2UgSGFuZHlVc2Vyc2NyaXB0cwovLyBAaWNvbiBodHRwczovL2kuaW1ndXIuY29tL3RxN1BKcjAucG5nCi8vIEBkZXNjcmlwdGlvbiBSZW1vdmUgZm9yY2VkIGRvd25sb2FkIGFjY2VsZXJhdG9ycywgbWFuYWdlcnMsIGFuZCBhZHdhcmUgb24gc3VwcG9ydGVkIHdlYnNpdGVzCi8vIEBkZXNjcmlwdGlvbjpmciDDiXZpdGV6IGxlcyBhcHBsaWNhdGlvbnMgaW5kw6lzaXJhYmxlcyBsb3JzIGRlcyB0w6lsw6ljaGFyZ2VtZW50cyBzdXIgZGUgbm9tYnJldXggc2l0ZXMgYXZlYyBBbnRpQWR3YXJlICEKLy8gQGRlc2NyaXB0aW9uOmRlIE1pdCBBbnRpQWR3YXJlIHZlcm1laWRlc3QgZHUgYXVmIHphaGxyZWljaGVuIFdlYnNlaXRlbiBkZW4gdmVyc2VoZW50bGljaGVuIERvd25sb2FkIHZvbiB1bmVyd8O8bnNjaHRlbiBQcm9ncmFtbWVuCi8vIEBkZXNjcmlwdGlvbjp6aC1UVyBBbnRpQWR3YXJlLCDorpPkvaDpgb/lhY3lnKjoqLHlpJrntrLnq5nkuIrmhI/lpJbkuIvovInliLDlu6PlkYrou5/pq5QuCi8vIEBkZXNjcmlwdGlvbjp6aC1DTiBBbnRpQWR3YXJlLCDorqnkvaDpgb/lhY3lnKjorrjlpJrnvZHnq5nkuIrmhI/lpJbkuIvovb3liLDlub/lkYrova/kvZMuCi8vIEB2ZXJzaW9uIDEuNDIuMQovLyBAbGljZW5zZSBDcmVhdGl2ZSBDb21tb25zIEJZLU5DLVNBCgovLyBqUXVlcnkgZGVwZW5kZW5jeTsgYW4gb2ZmbGluZSB2ZXJzaW9uIG9mIHRoaXMgaXMgaW5jbHVkZWQgaW4gdGhlIHNjcmlwdCBpbiBjYXNlIGl0IGdvZXMgZG93bgovLyBAcmVxdWlyZSBodHRwOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0yLjAuMy5taW4uanMKCi8vIEBpbmNsdWRlIGh0dHAqOi8vKjE4MHVwbG9hZC5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLyo0dXBmaWxlcy5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypnZXQqLmFkb2JlLmNvbS8qZmxhc2hwbGF5ZXIvKgovLyBAaW5jbHVkZSBodHRwKjovLypnZXQqLmFkb2JlLmNvbS8qcmVhZGVyLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qYWZ0ZXJkYXduLmNvbS9zb2Z0d2FyZS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmFrYWZpbGUuY29tL2FrYWdvLnBocAovLyBAaW5jbHVkZSBodHRwKjovLypjaGlwLmRlL2Rvd25sb2Fkcy8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmNsaWNrbnVwbG9hZC5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypjbG91ZHl2aWRlb3MuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qY29vbHJvbS5jb20vKi8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmNsaXBjb252ZXJ0ZXIuY2MvZG93bmxvYWQvKgovLyBAaW5jbHVkZSBodHRwKjovLypkYWlseXVwbG9hZHMubmV0LyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZGF0YWZpbGVob3N0LmNvbS9kLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZGF2dmFzLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmQtaC5zdC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmRvd25sb2FkLmNuZXQuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qdGVsZWNoYXJnZXIuY25ldC5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypkZXNjYXJnYXIuY25ldC5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypkZS5kb3dubG9hZC5jbmV0LmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmZpbGVmYWN0b3J5LmNvbS9maWxlLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZmlsZXNjZG4uY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZmlsZWhpcHBvLmNvbS8qZG93bmxvYWQqCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmZyZWV3YXJlZmlsZXMuY29tL2Rvd25sb2Fkc19jb3VudGVyLnBocCoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qZ29vZ2xlLiovZWFydGgvZG93bmxvYWQvZ2UvYWdyZWUuaHRtbAovLyBAaW5jbHVkZSBodHRwKjovLypodWdlZmlsZXMubmV0LyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qaHVsa2xvYWQuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qa2luZ2ZpbGVzLm5ldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmxldGl0Yml0Lm5ldC9kb3dubG9hZC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKmxvdmVyb21zLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVwLm1lZGlhMWZpcmUuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qbWlnaHR5dXBsb2FkLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKm1wM2ZpbC4qL2dldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKm1wM2p1aWNlcy50by8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKm1wM29saW1wLm5ldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKm1wM29saW1wei5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypvcGVuc3VidGl0bGVzLm9yZy8qL3N1YnRpdGxlcy8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnJldmNsb3Vkcy5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLypyb21odXN0bGVyLm5ldC9kb3dubG9hZC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnJvbWh1c3RsZXIubmV0L3JvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNlY3VyZXVwbG9hZC5ldS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNlbmRzcGFjZS5jb20vZmlsZS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNoYXJlYmVhc3QuY29tLyoKLy8gQGluY2x1ZGUgaHR0cCo6Ly8qc2hhcmVkLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNvZnRtOC5jb20qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKi5zb2Z0b25pYy4qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnNvdXJjZWZvcmdlLm5ldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnR1c2ZpbGVzLm5ldC8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVubGltaXR6b25lLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVwbG9hZGluZy5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLyp1cGxvYWRvY2Vhbi5jb20vKgovLyBAaW5jbHVkZSBodHRwKjovLyp1cGxvZC53cy8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVwbG9hZHMudG8vKgovLyBAaW5jbHVkZSBodHRwKjovLyp1cHRvYm94LmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnVzZXJzY2RuLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHAqOi8vKnppZGR1LmNvbS9kb3dubG9hZGZpbGUvKgoKLy8gV2UgZG9uJ3QgdXNlIHRoaXMgbWV0aG9kLCBob3dldmVyIGEgc2lkZSBlZmZlY3Qgb2YgaXQgaXMgdGhhdCBpdCByZXN0b3JlcyB0aGUgR3JlYXNlbW9ua2V5IHNhbmRib3gsIGF2b2lkaW5nIGpRdWVyeSBjb25mbGljdHMKLy8gQGdyYW50IEdNX2FkZFN0eWxlCgovLyBAZ3JhbnQgdW5zYWZlV2luZG93CgovLyBAaG9tZXBhZ2VVUkwgaHR0cHM6Ly9naXRodWIuY29tL0hhbmR5VXNlcnNjcmlwdHMvQW50aUFkd2FyZSNyZWFkbWUKLy8gQHN1cHBvcnRVUkwgaHR0cHM6Ly9naXRodWIuY29tL0hhbmR5VXNlcnNjcmlwdHMvQW50aUFkd2FyZS9pc3N1ZXMKLy8gQHVwZGF0ZVVSTCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vSGFuZHlVc2Vyc2NyaXB0cy9BbnRpQWR3YXJlL21hc3Rlci9BbnRpQWR3YXJlLm1ldGEuanMKLy8gQGRvd25sb2FkVVJMIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9IYW5keVVzZXJzY3JpcHRzL0FudGlBZHdhcmUvbWFzdGVyL0FudGlBZHdhcmUudXNlci5qcwoKCi8vIEBydW4tYXQgZG9jdW1lbnQtc3RhcnQKLy8gPT0vVXNlclNjcmlwdD09Cgp2b2lkCmZ1bmN0aW9uICgpIHsKICAgIC8vIElmIHRydWUsIGRpc3BsYXlzIGxvZyBpbiB0aGUgY29uc29sZQogICAgdmFyIG9fZGVidWcgPSBmYWxzZQoKICAgIC8vIFJ1bGVzIGluZm9ybWluZyB3aGF0IHRvIGRvIG9uIGVhY2ggc3VwcG9ydGVkIHdlYnNpdGUKICAgIHZhciBhZHdhcmVSdWxlcyA9IHsKICAgICAgICBhMTgwdXBsb2FkOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnMTgwdXBsb2FkLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyN1c2VfaW5zdGFsbGVyJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI3VzZV9pbnN0YWxsZXInLCAnbGFiZWxbZm9yPXVzZV9pbnN0YWxsZXJdJ10KICAgICAgICB9LAogICAgICAgIGE0dXBmaWxlczogewogICAgICAgICAgICBob3N0OiBbJzR1cGZpbGVzLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyN1c2VfZG93bmxvYWRlciddLAogICAgICAgICAgICBoaWRlOiBbJ2xhYmVsW2Zvcj11c2VfZG93bmxvYWRlcl0nXQogICAgICAgIH0sCiAgICAgICAgQWRvYmU6IHsKICAgICAgICAgICAgaG9zdDogWydnZXRcXGQ/LmFkb2JlLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNvZmZlckNoZWNrYm94JywnI29mZmVyQ2hlY2tib3gxJywnI29mZmVyQ2hlY2tib3gyJywnI29mZmVyQ2hlY2tib3gzJywnI29mZmVyQ2hlY2tib3g0J10sCiAgICAgICAgICAgIGhpZGU6IFsnLkNvbnRlbnRDb2x1bW4uQ29udGVudENvbHVtbi0yJ10KICAgICAgICB9LAogICAgICAgIEFmdGVyZGF3bjogewogICAgICAgICAgICBob3N0OiBbJ2FmdGVyZGF3bi5jb20nXSwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAvLyBEb3dubG9hZCBwYWdlIGRpcmVjdGx5IGFjY2Vzc2VkIGZyb20gYW5vdGhlciB3ZWJzaXRlCiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5jb250YWlucygnaW5zdGFsbGVyPTEnKSkgewogICAgICAgICAgICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBwYWdlIHdpdGhvdXQgdGhlIGRvd25sb2FkIG1hbmFnZXIKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5yZXBsYWNlKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSgnaW5zdGFsbGVyPTEnLCAnaW5zdGFsbGVyPTAnKSkKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTb2Z0d2FyZSBwYWdlCiAgICAgICAgICAgICAgICAkKCdpbnB1dFtuYW1lPWluc3RhbGxlcl0nKS5wcm9wKCd2YWx1ZScsICcwJykKICAgICAgICAgICAgICAgIHZhciBkb3dubG9hZEJ1dHRvbiA9ICQoJyNkb3dubG9hZC1tYWluLWJ1dHRvbicpCiAgICAgICAgICAgICAgICB2YXIgYWR3YXJlTGluayA9IGRvd25sb2FkQnV0dG9uLnByb3AoJ2hyZWYnKQogICAgICAgICAgICAgICAgYWR3YXJlTGluayA9IGFkd2FyZUxpbmsucmVwbGFjZSgnaW5zdGFsbGVyPTEnLCAnaW5zdGFsbGVyPTAnKQogICAgICAgICAgICAgICAgZG93bmxvYWRCdXR0b24ucHJvcCgnaHJlZicsIGFkd2FyZUxpbmspCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIEFrYWZpbGU6IHsKICAgICAgICAgICAgaG9zdDogWydha2FmaWxlLmNvbSddLAogICAgICAgICAgICAvLyBGaW5kIHRoZSByZWFsIGRvd25sb2FkIGxpbmsgaW4gdGhlIGNvbW1lbnRzIHNlY3Rpb24gYW5kIHJlcGxhY2UgdGhlIGZha2Ugb25lIHdpdGggdGhpcyAoaWYgdGhlIGZha2UgaXMgbm90IGEgdmFsaWQgbGluaykKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgLy8gSWYgdGhlIGxpbmsgaXMgYWxyZWFkeSBhIHZhbGlkIG9uZSB3ZSBkb24ndCByZXBsYWNlIGl0CiAgICAgICAgICAgICAgICB2YXIgdGVzdEhvc3QgPSBuZXcgUmVnRXhwKCJhaWsud29sZnVwLm5ldCIsICdpJykKICAgICAgICAgICAgICAgIGlmICh0ZXN0SG9zdC50ZXN0KCQoIiNkb3dubG9hZDEiKS5hdHRyKCJocmVmIikpKSByZXR1cm4KICAgICAgICAgICAgICAgIC8vIEdldCBjb21tZW50IHNlY3Rpb24gYW5kIGVudW1lcmF0ZSBlYWNoIGVsZW1lbnQgaGF2aW5nIHRoZSByaWdodCBpZCwgY2hlY2sgaWYgaXQncyBhIHByb3BlciBkb3dubG9hZCBsaW5rCiAgICAgICAgICAgICAgICB2YXIgY29tbWVudHMgPSAkKCcjY29udGludWUnKS5jb21tZW50cygpLmNoaWxkcmVuKCcjZG93bmxvYWQxJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3RIb3N0LnRlc3QoJCh0aGlzKS5hdHRyKCJocmVmIikpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoIiNkb3dubG9hZDEiKS5hdHRyKCJocmVmIiwgJCh0aGlzKS5hdHRyKCJocmVmIikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvL0NoaXA6IHsKICAgICAgICAgICAgLy9ob3N0OiBbJ2NoaXAuZGUnXSwKICAgICAgICAgICAgLy9oaWRlOiBbJy5kb3dubG9hZF9idXR0b24nXSwKICAgICAgICAgICAgLy9leGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8vdmFyIGRsID0gJCgnLk1hbnVhbEluc3RhbGxMaW5rJykucHJvcCgnaHJlZicpCiAgICAgICAgICAgICAgICAvL3ZhciBidG4gPSAkKCcuZGwtYnRuLWRlZmF1bHQgLkRvd25sb2FkLUJ1dHRvbicpCgogICAgICAgICAgICAgICAgLy9idG4ucHJvcCgnaHJlZicsIGRsKQogICAgICAgICAgICAvL30KICAgICAgICAvL30sCiAgICAgICAgQ2xpY2tudXBsb2FkOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnY2xpY2tudXBsb2FkLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNkX2FjY19jaGVja2JveCddLAogICAgICAgICAgICBoaWRlOiBbJyN3X2Rvd25sb2FkJywgJyNkX2FjYyddCiAgICAgICAgfSwKICAgICAgICBDbGlwQ29udmVydGVyOiB7CiAgICAgICAgCWhvc3Q6IFsnY2xpcGNvbnZlcnRlci5jYyddLAogICAgICAgIAl1bmNoZWNrOiBbJyNkbGNwJ10sCiAgICAgICAgCWhpZGU6IFsnZGl2W3N0eWxlPSJ3aWR0aDogMzQwcHg7bWFyZ2luLWxlZnQ6IDI1cHg7bWFyZ2luLXRvcDogN3B4OyJdJ10KICAgICAgICB9LAogICAgICAgIENsb3VkeVZpZGVvczogewogICAgICAgICAgICBob3N0OiBbJ2Nsb3VkeXZpZGVvcy5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdXNlLW1hbmFnZXInXSwKICAgICAgICAgICAgaGlkZTogWycjZG93bmxvYWQtYm94ID4gbGFiZWwnXQogICAgICAgIH0sCiAgICAgICAgQ29vbHJvbTogewogICAgICAgICAgICBob3N0OiBbJ2Nvb2xyb20uY29tJ10sCiAgICAgICAgICAgIGhpZGU6IFsndGFibGVbYWxpZ249ImNlbnRlciJdW3dpZHRoPSIzMDAiXSddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICB2YXIgZG93bmxvYWRCdXR0b24gPSAkKCdpbWdbc3JjKj0iZG93bmxvYWRfbGFyZ2UucG5nIl0nKS5wYXJlbnQoJ2EnKQogICAgICAgICAgICAgICAgICB2YXIgZG93bmxvYWRJZCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJylbM10KCiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG93bmxvYWRCdXR0b24gIT0gJ3VuZGVmaW5lZCcgJiYgZG93bmxvYWRJZC5tYXRjaCgvXlxkKyQvKSkgewogICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHJpZCBvZiBhbGwgZXZlbnRzIG9uIHRoZSBidXR0b24KICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdCdXR0b24gPSBkb3dubG9hZEJ1dHRvbi5jbG9uZSgpCiAgICAgICAgICAgICAgICAgICAgICBuZXdCdXR0b24ucHJvcCgnaHJlZicsICcvZGxwb3AucGhwP2lkPScgKyBkb3dubG9hZElkKQogICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRCdXR0b24ucmVwbGFjZVdpdGgobmV3QnV0dG9uKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgRGFpbHlVcGxvYWRzOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnZGFpbHl1cGxvYWRzLm5ldCddLAogICAgICAgICAgICBoaWRlOiBbJ2xhYmVsW3N0eWxlPSJmb250LXNpemU6eC1zbWFsbCJdJ10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI2Noa0lzQWRkJ10KICAgICAgICB9LAogICAgICAgIERhdGFmaWxlaG9zdDogewogICAgICAgICAgICBob3N0OiBbJ2RhdGFmaWxlaG9zdC5jb20nXSwKICAgICAgICAgICAgaGlkZTogWydmb3JtW25hbWU9Y2JmXSddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBpZCA9IGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9eXC9kXC8oXHcrKSQvKVsxXQogICAgICAgICAgICAgICAgLy8gRGF0YUZpbGVIb3N0IGRvZXNuJ3QgYWxsb3cgdG8gZG93bmxvYWQgdXNpbmcgSFRUUFMKICAgICAgICAgICAgICAgIHZhciBhZHdhcmVsZXNzTGluayA9ICdodHRwOicgKyAnLy8nICsgZG9jdW1lbnQubG9jYXRpb24uaG9zdG5hbWUgKyAnL2dldC5waHA/ZmlsZT0nICsgaWQKCiAgICAgICAgICAgICAgICB2YXIgbiA9ICQoJyNkbCA+IGEnKS5jbG9uZSgpCgogICAgICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgYWR3YXJlIGxpbmsKICAgICAgICAgICAgICAgIG4ucHJvcCgnaHJlZicsIGFkd2FyZWxlc3NMaW5rKQoKICAgICAgICAgICAgICAgIC8vIEF2b2lkIHJlZGlyZWN0aW9uIHRvIGFkd2FyZQogICAgICAgICAgICAgICAgJCgnI2RsJykucmVwbGFjZVdpdGgobik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIERhdnZhczogewogICAgICAgICAgICBob3N0OiBbJ2RhdnZhcy5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjY2hsaW5rJ10sCiAgICAgICAgICAgIGhpZGU6IFsnbGFiZWxbZm9yPWNobGlua10nLCAnI2NobGluayddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBidG4gPSAkKCcjYnRuX2Rvd25sb2FkJykKICAgICAgICAgICAgICAgIGlmICghZXhpc3RzKGJ0bikpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJ0bi5yZW1vdmVBdHRyKCdvbmNsaWNrJykKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgRGV2SG9zdDogewogICAgICAgICAgICBob3N0OiBbJ2QtaC5zdCddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNkbS1jaGVjayddLAogICAgICAgICAgICBoaWRlOiBbJyNkb3dubG9hZG1hbmFnZXInLCdhOmhhcyg+aW1nW3NyYyo9Ii9hc3NldHMvaW1nL2Rvd25sb2FkMS5wbmciXSknLCAnI2Rvd25sb2FkZmlsZTInXSwKICAgICAgICB9LAogICAgICAgIERvd25sb2FkOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnZG93bmxvYWQuY25ldC5jb20nLCd0ZWxlY2hhcmdlci5jbmV0LmNvbScsJ2Rlc2Nhcmdhci5jbmV0LmNvbSddLAogICAgICAgICAgICBoaWRlOiBbJy5kbG4tc3ViLW1lc3NhZ2UnLCcjdGl0bGUtZGV0YWlsLWRvd25sb2FkLW5vdy1idXR0b24tZGxtLW5vdGljZS1pY29uJywnLmRvd25sb2FkLW5vdy5kaXJlY3QtZG93bmxvYWQtYnV0dG9uLWRsbiddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIC8vIC0tPiBUaGlzIGlzIGZvciBwcm9ncmFtIHBhZ2VzCiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSByZWFsIGRvd25sb2FkIGxpbmsKICAgICAgICAgICAgICAgIHZhciBhZHdhcmVsZXNzTGluayA9ICQoJy5kb3dubG9hZC1ub3cnKS5hdHRyKCdkYXRhLW5vZGxtLXVybCcpCiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdWNjZXNzZnVsbHkgZm91bmQgaXQKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWR3YXJlbGVzc0xpbmsgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgICAgICAgICAvLyBXZSByZXBsYWNlIHRoZSBhZHdhcmUtZW5hYmxlZCBsaW5rIHdpdGggdGhlIGFkd2FyZWxlc3MgbGluawogICAgICAgICAgICAgICAgICAgIHZhciBidG4gPSAkKCJhLmRsbi1hOmhhcygnLmRsbi1jdGEnKSIpCiAgICAgICAgICAgICAgICAgICAgYnRuLnByb3AoJ2hyZWYnLCBhZHdhcmVsZXNzTGluaykKICAgICAgICAgICAgICAgICAgICBidG4uYXR0cignZGF0YS1ocmVmJywgYWR3YXJlbGVzc0xpbmspCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gLS0+IFRoaXMgaXMgZm9yIHNlYXJjaCBsaXN0cwogICAgICAgICAgICAgICAgLy8gQ2hlY2sgZWFjaCBkb3dubG9hZCBidXR0b24gZnJvbSB0aGUgbGlzdAogICAgICAgICAgICAgICAgJCgnLmRvd25sb2FkLW5vdy5saXN0aW5nLWJ1dHRvbi1kbG4nKS5lYWNoKAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGN1cnJJbmRleCwgY3VyckRPTUVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJFbGVtZW50ID0gJChjdXJyRE9NRWxlbWVudCkKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZGlyZWN0IGRvd25sb2FkIGxpbmsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJEaXJlY3REbExpbmsgPSBjdXJyRWxlbWVudC5hdHRyKCdkYXRhLW5vZGxtLXVybCcpCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBmaW5kIHRoZSBkaXJlY3QgZG93bmxvYWQgbGluaywgd2UgYWJhbmRvbgogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJEaXJlY3REbExpbmsgPT0gJ3VuZGVmaW5lZCcpIHtyZXR1cm59CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBkb3dubG9hZCBsaW5rIHdpdGggdGhlIGRpcmVjdCwgZG93bmxvYWQgbWFuYWdlci1sZXNzIGxpbmsKICAgICAgICAgICAgICAgICAgICAgICAgY3VyckVsZW1lbnQuY2hpbGRyZW4oJy5kbG4tYScpLnByb3AoJ2hyZWYnLCBjdXJyRGlyZWN0RGxMaW5rKQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU29tZWhvdyB0aGlzIGNsYXNzIHByZXZlbnRzIHRoZSBkb3dubG9hZCBmcm9tIGxhdW5jaGluZyBwcm9wZXJseSAoYXQgbGVhc3Qgb24gRmlyZWZveCkKICAgICAgICAgICAgICAgICAgICAgICAgY3VyckVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2Rvd25sb2FkLW5vdycpCiAgICAgICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgRmlsZWZhY3Rvcnk6IHsKICAgICAgICAgICAgaG9zdDogWydmaWxlZmFjdG9yeS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjZG93bmxvYWRfbWFuYWdlciA+IGlucHV0OmNoZWNrYm94J10sCiAgICAgICAgICAgIGhpZGU6IFsnI2Rvd25sb2FkX21hbmFnZXInXQogICAgICAgIH0sCiAgICAgICAgRmlsZXNDRE46IHsKICAgICAgICAgICAgaG9zdDogWydmaWxlc2Nkbi5jb20nXSwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAkKCcjYnRuX2Rvd25sb2FkJykucHJvcCgnb25jbGljaycsIG51bGwpCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIEZyZWV3YXJlZmlsZXM6IHsKICAgICAgICAgICAgaG9zdDogWydmcmVld2FyZWZpbGVzLmNvbSddLAogICAgICAgICAgICBoaWRlOiBbJ3NwYW4uc21hbGxsaW5rczpjb250YWlucygiZG93bmxvYWQgbWFuYWdlciIpJ10sCiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGRpcmVjdExpbmsgPSAkKCdhLmR3bmxvY2F0aW9ucycpLnByb3AoJ2hyZWYnKQogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkaXJlY3RMaW5rID09ICd1bmRlZmluZWQnKSB7cmV0dXJufQoKICAgICAgICAgICAgICAgICQoJ3RkW3dpZHRoPTMzMF1bYWxpZ249bGVmdF0gPiBhJykucHJvcCgnaHJlZicsIGRpcmVjdExpbmspCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIEdvb2dsZUVhcnRoOiB7CiAgICAgICAgCWhvc3Q6IFsnZ29vZ2xlLiddLAogICAgICAgIAl1bmNoZWNrOiBbJyNkbC1hZ3JlZS1jaHJvbWUnLCcjZGwtYWdyZWUtY2hyb21lLWRlZmF1bHQnXSwKICAgICAgICAJaGlkZTogWycjZGwtY2hyb21lLXByb21vJ10KICAgICAgICB9LAogICAgICAgIEh1Z2VmaWxlczogewogICAgICAgICAgICBob3N0OiBbJ2h1Z2VmaWxlcy5uZXQnXSwKICAgICAgICAgICAgdW5jaGVjazogWycjZGFwJywnI3VzZV9kb3dubG9hZGVyJ10sCiAgICAgICAgICAgIGhpZGU6IFsic3Bhbjpjb250YWlucygndXNpbmcgZG93bmxvYWQgYWNjZWxlcmF0b3InKSIsICcjZGFwJywgJyN1c2VfZG93bmxvYWRlcicsICdpbWdbc3JjPSJodHRwOi8vaHVnZWZpbGVzLm5ldC9idXR0b24ucG5nIl0nXQogICAgICAgIH0sCiAgICAgICAgSHVsa2xvYWQ6IHsKICAgICAgICAgICAgaG9zdDogWydodWxrbG9hZC5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjc3Buc3JkbGQnLCAnI3VzZS1tYW5hZ2VyJ10sCiAgICAgICAgICAgIGhpZGU6IFsKICAgICAgICAgICAgCSJmb3JtOmNvbnRhaW5zKCdkb3dubG9hZCBUaGUgRlJFRSBkb3dubG9hZCBhY2NlbGVyYXRvcicpIiwnI3NwbnNyZGxkJywnI2Rvd25sb2FkLXRpY2snLAogICAgICAgICAgICAJJ2ltZ1tzcmNePSJodHRwOi8vaHVsa2xvYWQuY29tL2ltYWdlcy9kbGQiXScsIC8vIEZha2UgZG93bmxvYWQgYnV0dG9uCiAgICAgICAgICAgIAknZGl2LmFsZXJ0W29uY2xpY2s9ImdvdG8oKSJdJywgLy8gRmFrZSBzcG9uc29yZWQgbGlua3MKICAgICAgICAgICAgCSdkaXZbc3R5bGUqPSJoZWlnaHQ6IDkwcHg7IGJvcmRlcjogM3B4IHNvbGlkIHJnYigyMDUsIDI0MCwgMjQ2KSJdJyAvLyBGYWtlIGRvd25sb2FkIGJhbm5lciAobGl2ZXJzZWx5KQogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICBLaW5nZmlsZXM6IHsKICAgICAgICAgICAgaG9zdDogWydraW5nZmlsZXMubmV0J10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI2NtbGlfZG93bmxvYWRlciddLAogICAgICAgICAgICBoaWRlOiBbJyN0ZXN0MSddLAogICAgICAgICAgICAvLyBBdm9pZHMgYSBwb3B1cCB3aGVuIHVuY2hlY2tpbmcgdGhlIGNoZWNrYm94CiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJCgnI2NtbGlfZG93bmxvYWRlcicpLnByb3AoJ29uY2xpY2snLCBudWxsKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBMZXRpdGJpdDogewogICAgICAgICAgICBob3N0OiBbJ2xldGl0Yml0Lm5ldCddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNza3ltb25rX2NoZWNrYm94J10sCiAgICAgICAgICAgIGhpZGU6IFsnI3NreW1vbmtfY2hlY2tib3gnLCAnbGFiZWxbZm9yPXNreW1vbmtfY2hlY2tib3hdJ10KICAgICAgICB9LAogICAgICAgIExvdmVSb21zOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnbG92ZXJvbXMuY29tJ10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI2Rvd25sb2FkV2l0aE1hbmFnZXInXSwKICAgICAgICAgICAgaGlkZTogWycuZG93bmxvYWQtbGFiZWwnXQogICAgICAgIH0sCiAgICAgICAgVXBNZWRpYTFmaXJlOiB7CiAgICAgICAgICAgIGhvc3Q6IFsndXAubWVkaWExZmlyZS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdXNlLW1hbmFnZXInXSwKICAgICAgICAgICAgaGlkZTogWycjZG93bmxvYWQtYm94JywgJyNzcG9uc29yMicsICdkaXYuY29udGVudG9yID4gY2VudGVyJywgJy5hbGVydDInLCAnaW1nW3NyY149Imh0dHA6Ly91cC5tZWRpYTFmaXJlLmNvbS9uYi9SZWNfYiJdJ10KICAgICAgICB9LAogICAgICAgIE1pZ2h0eXVwbG9hZDogewogICAgICAgICAgICBob3N0OiBbJ21pZ2h0eXVwbG9hZC5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdXNlX2luc3RhbGxlciddLAogICAgICAgICAgICBoaWRlOiBbJyN1c2VfaW5zdGFsbGVyJywgJ2xhYmVsW2Zvcj11c2VfaW5zdGFsbGVyXScsJyNsbmtfZG93bmxvYWQgfiBiciddCiAgICAgICAgfSwKICAgICAgICBNcDNmaWw6IHsKICAgICAgICAgICAgaG9zdDogWydtcDNmaWxcLiddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNjaGVjayA+IGlucHV0OmNoZWNrYm94W25hbWU9Y2hlY2tdJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI2NoZWNrJ10KICAgICAgICB9LAogICAgICAgIE1wM2p1aWNlczogewogICAgICAgICAgICBob3N0OiBbJ21wM2p1aWNlcy50byddLAogICAgICAgICAgICB1bmNoZWNrOiBbJ2lucHV0OmNoZWNrYm94W25hbWU9ZGxfbWFuYWdlcl0nXSwKICAgICAgICAgICAgaGlkZTogWycuZGxfbWFuYWdlciwuY1tzdHlsZT0iaGVpZ2h0OjgwcHgiXSddCiAgICAgICAgfSwKICAgICAgICBNcDNvbGltcDogewogICAgICAgIAlob3N0OiBbJ21wM29saW1wLm5ldHxtcDNvbGltcHouY29tJ10sCiAgICAgICAgCXVuY2hlY2s6IFsnI2Rvd25sb2FkLW1hbmFnZXItY2hlY2tib3gnXSwKICAgICAgICAJaGlkZTogWycjZG93bmxvYWQtbWFuYWdlciddCiAgICAgICAgfSwKICAgICAgICBPcGVuc3VidGl0bGVzOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnb3BlbnN1YnRpdGxlcy5vcmcnXSwKICAgICAgICAgICAgdW5jaGVjazogWycjY2JEb3dubG9hZGVyJ10sCiAgICAgICAgICAgIG9wdHVuY2hlY2s6IHsKICAgICAgICAgICAgICAgIC8vIE5ldmVyIHN0b3AgdG8gdHJ5IHVuY2hlY2tpbmcgdGhlIGNoZWNrYm94CiAgICAgICAgICAgICAgICBjb25zdGFudGNoZWNrOiB0cnVlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGhpZGU6IFsnI2NiRG93bmxvYWRlcicsJyNsYi1kd2wnXSwKICAgICAgICAgICAgb3B0aGlkZTogewogICAgICAgICAgICAgICAgLy8gTmV2ZXIgc3RvcCB0byB0cnkgaGlkaW5nIHRoZSBvYmplY3QKICAgICAgICAgICAgICAgIGNvbnN0YW50Y2hlY2s6IHRydWUKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgRmlsZWhpcHBvOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnZmlsZWhpcHBvLmNvbSddLAogICAgICAgICAgICAvLyBXaWxsIGRvIG5vdGhpbmcgb24gcGFnZXMgd2l0aG91dCBhIGRvd25sb2FkIG1hbmFnZXIKICAgICAgICAgICAgaGlkZTogWycjcHJvZ3JhbS1oZWFkZXItZG93bmxvYWQtbGluay1kbS10ZXh0JywgJyNkaXJlY3QtZG93bmxvYWQtbGluay1jb250YWluZXInXSwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYWR3T2JqID0gJCgnLnByb2dyYW0taGVhZGVyLWRvd25sb2FkLWxpbmsuZG93bmxvYWQtbWFuYWdlci1lbmFibGVkJykKICAgICAgICAgICAgICAgIC8vIEFwcGVuZCA/ZGlyZWN0IGF0IHRoZSBlbmQgb2YgdGhlIFVSTCBzbyB0aGF0IGl0IGRvZXNuJ3QgcHJvdmlkZSB0aGUgZG93bmxvYWQgbWFuYWdlcgogICAgICAgICAgICAgICAgdmFyIGRpcmVjdFVybCA9IGFkd09iai5hdHRyKCdocmVmJykgKyAnP2RpcmVjdCcKCiAgICAgICAgICAgICAgICBhZHdPYmouYXR0cignaHJlZicsIGRpcmVjdFVybCkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgUmV2Q2xvdWRzOiB7CiAgICAgICAgICAgIGhvc3Q6IFsncmV2Y2xvdWRzLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyN0aWNrLWR3biddLAogICAgICAgICAgICBoaWRlOiBbJy50aWNrLWJveCddCiAgICAgICAgfSwKICAgICAgICBSb21odXN0bGVyOiB7CiAgICAgICAgICAgIGhvc3Q6IFsncm9taHVzdGxlci5uZXQnXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdXNlX2FjY2VsZXJhdG9yJ10sCiAgICAgICAgICAgIGhpZGU6IFsnLmFjY2VsZXJhdG9yJ10KICAgICAgICB9LAogICAgICAgIFNlY3VyZXVwbG9hZDogewogICAgICAgIAlob3N0OiBbJ3NlY3VyZXVwbG9hZC5ldSddLAogICAgICAgIAl1bmNoZWNrOiBbJ2Zvcm1bbmFtZT1kbG1hbmFnZXJdID4gaW5wdXQ6Y2hlY2tib3gnXSwKICAgICAgICAJb3B0dW5jaGVjazogewogICAgICAgICAgICAgICAgLy8gTmV2ZXIgc3RvcCB0byB0cnkgdW5jaGVja2luZyB0aGUgY2hlY2tib3gKICAgICAgICAgICAgICAgIGNvbnN0YW50Y2hlY2s6IHRydWUKICAgICAgICAgICAgfSwKICAgICAgICAJaGlkZTogWydmb3JtW25hbWU9ZGxtYW5hZ2VyXScsICdpbWdbc3JjPSJodHRwczovL3d3dy5zZWN1cmV1cGxvYWQuZXUvZ2Z4L2RsYnRuLnBuZyJdJywgJ2ltZ1tzcmM9Imh0dHBzOi8vd3d3LnNlY3VyZXVwbG9hZC5ldS9nZngvZnJlZWRsLnBuZyJdJ10sCiAgICAgICAgCW9wdGhpZGU6IHsKICAgICAgICAgICAgICAgIC8vIE5ldmVyIHN0b3AgdG8gdHJ5IGhpZGluZyB0aGUgb2JqZWN0CiAgICAgICAgICAgICAgICBjb25zdGFudGNoZWNrOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIFNlbmRzcGFjZTogewogICAgICAgICAgICBob3N0OiBbJ3NlbmRzcGFjZS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjcXVpY2tjaGsnXSwKICAgICAgICAgICAgaGlkZTogWyJmb3JtID4gZGl2OmNvbnRhaW5zKCd3aXRoIHNlbmRzcGFjZSBhY2NlbGVyYXRvcicpIiwnI3F1aWNrY2hrJ10KICAgICAgICB9LAogICAgICAgIFNoYXJlYmVhc3Q6IHsKICAgICAgICAgICAgaG9zdDogWydzaGFyZWJlYXN0LmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNzaGFyZWJlYXN0X2Rvd25sb2FkZXInXSwKICAgICAgICAgICAgaGlkZTogWycjc2hhcmViZWFzdF9kb3dubG9hZGVyX2NvbnRhaW5lciddCiAgICAgICAgfSwKICAgICAgICBTaGFyZWQ6IHsKICAgICAgICAgICAgaG9zdDogWydzaGFyZWQuY29tJ10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI3VzZS1tYW5hZ2VyJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI3dlYnBpY2stb3B0aW9uJ10KICAgICAgICB9LAogICAgICAgIFNvZnRNODogewogICAgICAgICAgICBob3N0OiBbJy5zb2Z0bTguY29tJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI2RpbmZvMltzdHlsZT0iY2xlYXI6Ym90aDsiXSddLCAvLyBCbGFoIGJsYWggYWJvdXQgQWR3YXJlCiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGJ1dE1hdGNoID0gJy5idXR0b25Eb3dubG9hZC5kYnRuZGwnCiAgICAgICAgICAgICAgICB2YXIgZGxCdXQgPSAkKGJ1dE1hdGNoKQoKICAgICAgICAgICAgICAgIC8vIFRha2UgdGhlIGxhc3QgcGFydCBvZiB0aGUgcGF0aCBvZiB0aGUgVVJMCiAgICAgICAgICAgICAgICB2YXIgZXhlTmFtZSA9IGRsQnV0LnByb3AoJ2hyZWYnKS5zcGxpdCgnLycpLnBvcCgpCgogICAgICAgICAgICAgICAgLy8gRm91bmQgaW4gdGhlIGFkd2FyZSBpbnN0YWxsYXRpb24gZXhlY3V0YWJsZQogICAgICAgICAgICAgICAgdmFyIG5vQWRMbmsgPSAnaHR0cDovL2guc29mdG04LmNvbS8nICsgZXhlTmFtZQoKICAgICAgICAgICAgICAgIC8vIENhbiBiZSBtdWx0aXBsZSBidXR0b25zCiAgICAgICAgICAgICAgICBkbEJ1dC5wcm9wKCdocmVmJywgbm9BZExuaykKICAgICAgICAgICAgICAgIHVuc2FmZVdpbmRvdy4kKGJ1dE1hdGNoKS5vZmYoJ2NsaWNrJykgLy8gUHJldmVudHMgdGhlIGRvd25sb2FkIGZyb20gbGF1bmNoaW5nIHByb3Blcmx5CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIFNvZnRvbmljOiB7CiAgICAgICAgICAgIGhvc3Q6IFsnLnNvZnRvbmljLiddLAogICAgICAgICAgICBoaWRlOiBbJ2gyOmNvbnRhaW5zKCJTb2Z0b25pYyBEb3dubG9hZGVyIikgfiB1bCcsJ2gyOmNvbnRhaW5zKCJTb2Z0b25pYyBEb3dubG9hZGVyIiksIC5ib3gtZG93bmxvYWQtZm9vdGVyJ10sCiAgICAgICAgICAgIGV4ZWM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGxpbmtGb2xsb3cgPSAkKCcjZG93bmxvYWRfYWx0ZXJuYXRpdmUgPiBwID4gYVtyZWw9bm9mb2xsb3ddJykKICAgICAgICAgICAgICAgIGlmIChleGlzdHMobGlua0ZvbGxvdykpIHsKICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5sb2NhdGlvbi5yZXBsYWNlKGxpbmtGb2xsb3cucHJvcCgnaHJlZicpKQogICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhciBtYW5hZ2VyQnV0dG9uID0gJCgnI2Rvd25sb2FkLWJ1dHRvbi1zZCwgI2Rvd25sb2FkLWJ1dHRvbicpCiAgICAgICAgICAgICAgICB2YXIgZGlyZWN0QnV0dG9uID0gJCgnI2Rvd25sb2FkLWJ1dHRvbi1hbHRlcm5hdGl2ZScpCiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0cyhtYW5hZ2VyQnV0dG9uKSB8fCAhZXhpc3RzKGRpcmVjdEJ1dHRvbikpIHtyZXR1cm59CgogICAgICAgICAgICAgICAgdmFyIGRpcmVjdExpbmsgPSBkaXJlY3RCdXR0b24ucHJvcCgnaHJlZicpCgogICAgICAgICAgICAgICAgLy8gQXZvaWQgalF1ZXJ5IGNsaWNrIHJlZGlyZWN0aW9uIHNldCBvbiB0aGUgZG93bmxvYWQgYnV0dG9uCiAgICAgICAgICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHt1bnNhZmVXaW5kb3cuJCgnI2Rvd25sb2FkLWJ1dHRvbi1zZCwgI2Rvd25sb2FkLWJ1dHRvbicpLm9mZignY2xpY2snKX0sIDEwMCkKCiAgICAgICAgICAgICAgICBtYW5hZ2VyQnV0dG9uLnByb3AoJ2hyZWYnLCBkaXJlY3RMaW5rKQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBTb3VyY2Vmb3JnZTogewogICAgICAgICAgICBob3N0OiBbJ3NvdXJjZWZvcmdlLm5ldCddLAogICAgICAgICAgICBoaWRlOiBbJy5kaXJlY3QtZGwnLCAnLmluZm8tY2lyY2xlJywgJy5idG4tZGRsLXRvZ2dsZSddLAogICAgICAgICAgICBleGVjOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgCS8vIEhvdGZpeDogaWYgdGhlIHVzZXIgaXMgb24gYW4gYWR3YXJlLWJ1bmRsZWQgZG93bmxvYWQgcGFnZQogICAgICAgICAgICAJaWYgKGRvY3VtZW50LmxvY2F0aW9uLnBhdGhuYW1lLmNvbnRhaW5zKCcvZG93bmxvYWQnKSAmJiAhZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLmNvbnRhaW5zKCdub3dyYXAnKSkgewogICAgICAgICAgICAJCS8vIEFkZCB0aGUgYXJndW1lbnQgYXMgZmlyc3QgYXJndW1lbnQgKD8pIG9yIHNlY29uZGFyeSBhcmd1bWVudCAoJikKICAgICAgICAgICAgCQl2YXIgcHJlZml4ID0gZG9jdW1lbnQubG9jYXRpb24uc2VhcmNoLmNvbnRhaW5zKCc/Jyk/ICcmJyA6ICc/JzsKICAgICAgICAgICAgCQlkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2ggPSBkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2ggKyBwcmVmaXggKyAnbm93cmFwJzsKICAgICAgICAgICAgCX0KCiAgICAgICAgICAgIAl0cnkgewoJICAgICAgICAgICAgCS8vIFNlZW4gaW4gYnJvd3NpbmcgZmlsZXMgcGFnZXMKCSAgICAgICAgICAgIAl2YXIgdG9nZ2xlQnRuID0gJCgnYS5idG4tZGRsLXRvZ2dsZScpOwoJICAgICAgICAgICAgCS8vIEluIGNhc2UgdGhlIHRleHQgY29udGFpbnMgdGhlIHBhdHRlcm4gdGVsbGluZyB0byB0aGUgdXNlciB0aGF0IGFkd2FyZSBpcyBlbmFibGVkCgkgICAgICAgICAgICAJaWYgKGV4aXN0cyh0b2dnbGVCdG4pICYmIHRvZ2dsZUJ0bi5odG1sKCkuY29udGFpbnModG9nZ2xlQnRuLmF0dHIoJ2RhdGEtY29udGVudC1ub3dyYXAnKSkpIHsKCSAgICAgICAgICAgIAkJLy8gV2UgZGlzYWJsZSBpdAoJICAgICAgICAgICAgCQl1bnNhZmVXaW5kb3cuJCgnYS5idG4tZGRsLXRvZ2dsZScpLmNsaWNrKCk7CgkgICAgICAgICAgICAJfQoJICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KCiAgICAgICAgICAgIAkvLyAtLT4gVGhpcyBpcyBmb3IgcHJvZ3JhbSBwYWdlcwogICAgICAgICAgICAJLy8gVHJ5IHRvIGdldCB0aGUgcmVhbCBsaW5rCiAgICAgICAgICAgIAl2YXIgcmVhbExpbmsgPSAkKCcuZGlyZWN0LWRsJykucHJvcCgnaHJlZicpCgogICAgICAgICAgICAJLy8gSWYgd2UgZm91bmQgdGhlIGRpcmVjdCBkb3dubG9hZCBsaW5rLCB0aGVuIGl0IG1lYW5zIHRoaXMgZG93bmxvYWQgaXMgYnVuZGxlZCB3aXRoIGEgcGllY2Ugb2YgYWR3YXJlCiAgICAgICAgICAgIAlpZiAodHlwZW9mIHJlYWxMaW5rICE9ICd1bmRlZmluZWQnKSB7CgkgICAgICAgICAgICAJLy8gUmVwbGFjZSB0aGUgZG93bmxvYWQgbGluayB3aXRoIHRoZSByZWFsIG9uZQoJICAgICAgICAgICAgCSQoJyNkb3dubG9hZF9idXR0b24gPiAuc2ZkbCcpLnByb3AoJ2hyZWYnLCByZWFsTGluaykKCgkgICAgICAgICAgICAJLy8gTm93IHdlJ3JlIHRyeWluZyB0byBjaGFuZ2UgdGhlICJJbnN0YWxsZXIgRW5hYmxlZCIgdGV4dCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlCgkgICAgICAgICAgICAJdmFyIGNvbnRhaW5zRmlsZU5hbWUgPSAkKCcuc2ZkbCcpLmF0dHIoJ29sZHRpdGxlJykKCSAgICAgICAgICAgIAl2YXIgZXh0cmFjdEZpbGVOYW1lID0gL1wvKD8hLipcLykoW14gXSspLwoKCSAgICAgICAgICAgIAl2YXIgZmlsZU5hbWUgPSBleHRyYWN0RmlsZU5hbWUuZXhlYyhjb250YWluc0ZpbGVOYW1lKQoKCSAgICAgICAgICAgIAkkKCJzbWFsbDpjb250YWlucygnSW5zdGFsbGVyIEVuYWJsZWQnKSIpLmh0bWwoZmlsZU5hbWVbMV0pCgkgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gLS0+IFRoaXMgaXMgZm9yIHRoZSBtYWluIHBhZ2UgYW5kIHNlYXJjaGVzCiAgICAgICAgICAgICAgICAvLyBUT0RPOiB1c2UgYSBtdXRhdGlvbiBvYnNlcnZlciBmb3Igc2VhcmNoIHBhZ2VzIChub3QgbmVlZGVkIGZvciBtYWluIHBhZ2UpCiAgICAgICAgICAgICAgICBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAkKCIuc2ZkbC5zZmRsLWxpdGUiKS5lYWNoKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3JjZSBkb3dubG9hZGluZyB0aGUgYWR3YXJlLWZyZWUgcHJvZ3JhbQogICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkSHJlZiA9ICQodGhpcykucHJvcCgnaHJlZicpCgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhbHJlYWR5IGFwcGVuZGVkIG91ciBuby1hZHdhcmUgYXJndW1lbnQsIGxlYXZlCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRIcmVmLnN1YnN0cmluZyhvbGRIcmVmLmxlbmd0aC03KSA9PSAnJm5vd3JhcCcpIHtyZXR1cm59CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgYXBwZW5kIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykucHJvcCgnaHJlZicsICQodGhpcykucHJvcCgnaHJlZicpICsgJyZub3dyYXAnKQogICAgICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICB9LCA1MCkKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgVHVzZmlsZXM6IHsKICAgICAgICAgICAgaG9zdDogWyd0dXNmaWxlcy5uZXQnXSwKICAgICAgICAgICAgdW5jaGVjazogWydpbnB1dDpjaGVja2JveFtuYW1lPXF1aWNrXSddLAogICAgICAgICAgICBoaWRlOiBbJ2lucHV0OmNoZWNrYm94W25hbWU9cXVpY2tdIH4gbGFiZWwnLCAnaW5wdXQ6Y2hlY2tib3hbbmFtZT1xdWlja10nLCdhW3RhcmdldD1fYmxhbmtdW2hyZWYqPSJodHRwOi8vc2hhcmVzdXBlci5pbmZvLyJdLGltZ1tzcmM9Imh0dHBzOi8vei50dXNmaWxlcy5uZXQvaS9kbGwucG5nIl0nXQogICAgICAgIH0sCiAgICAgICAgVXBsb2FkaW5nOiB7CiAgICAgICAgICAgIGhvc3Q6IFsndXBsb2FkaW5nLmNvbSddLAogICAgICAgICAgICB1bmNoZWNrOiBbJyNmb3JjZV9leGUnXSwKICAgICAgICAgICAgaGlkZTogWycudXNlX2Rvd25sb2FkX21hbmFnZXInXQogICAgICAgIH0sCiAgICAgICAgVXBsb2FkT2NlYW46IHsKICAgICAgICAgICAgaG9zdDogWyd1cGxvYWRvY2Vhbi5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjdGljay1kd24nXSwKICAgICAgICAgICAgaGlkZTogWycudGljay1ib3gnXQogICAgICAgIH0sCiAgICAgICAgVXBsb2R3czp7CiAgICAgICAgICAgIGhvc3Q6IFsndXBsb2Qud3MnXSwKICAgICAgICAgICAgdW5jaGVjazogWycjY2hrSXNBZGQnXSwKICAgICAgICAgICAgaGlkZTogWydsYWJlbDpjb250YWlucygib2ZmZXIiKScsJ2ltZ1tzcmM9Imh0dHA6Ly9nb28uZ2wvQ0dIVlZvIl0nXQogICAgICAgIH0sCiAgICAgICAgVXBsb2FkczogewogICAgICAgICAgICBob3N0OiBbJ3VwbG9hZHMudG8nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjY2hrSXNBZGQnXSwKICAgICAgICAgICAgaGlkZTogWydhOmNvbnRhaW5zKCJNQU5BR0VSIiknLCdjZW50ZXI6Y29udGFpbnMoIk9mZmVyIiknXSwKICAgICAgICB9LAogICAgICAgIFVwdG9ib3g6IHsKICAgICAgICAgICAgaG9zdDogWyd1cHRvYm94LmNvbSddLAogICAgICAgICAgICBoaWRlOiBbJ2Rpdi5yZXNlbGxlciA+IHRhYmxlW2FsaWduPWNlbnRlcl0nXSwKICAgICAgICAgICAgZXhlYzogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYnV0dG9uID0gJCgnZGl2LnJlc2VsbGVyID4gdGFibGVbYWxpZ249Y2VudGVyXSBkaXZbYWxpZ249Y2VudGVyXSA+IGEnKQogICAgICAgICAgICAgICAgdmFyIGFkd2FyZSA9IGJ1dHRvbi5wcm9wKCdocmVmJykKCiAgICAgICAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcmVhbCBkb3dubG9hZCBsaW5rIGFuZCBjaGFuZ2UgdGhlIGJ1dHRvbiB3aXRoIHRoaXMgbGluawogICAgICAgICAgICAgICAgdmFyIGRvd25sb2FkID0gYWR3YXJlLm1hdGNoKC8mcHJvZHVjdF9kb3dubG9hZF91cmw9KFteJCZdKykkLylbMV0KICAgICAgICAgICAgICAgIGJ1dHRvbi5wcm9wKCdocmVmJywgZG93bmxvYWQpCgogICAgICAgICAgICAgICAgLy8gUHV0IHRoZSBidXR0b24gaW4gYSB2aXNpYmxlIGxvY2F0aW9uCiAgICAgICAgICAgICAgICAkKCdkaXYucmVzZWxsZXIgPiB0YWJsZVthbGlnbj1jZW50ZXJdJykuYmVmb3JlKGJ1dHRvbikKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgVW5saW1pdHpvbmU6IHsKICAgICAgICAgICAgaG9zdDogWyd1bmxpbWl0em9uZS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjZGxtJ10sCiAgICAgICAgICAgIGhpZGU6IFsnI2RsbSB+IGInLCcjZGxtJ10KICAgICAgICB9LAogICAgICAgIFVzZXJzQ0ROOiB7CiAgICAgICAgICAgIGhvc3Q6IFsndXNlcnNjZG4uY29tJ10sCiAgICAgICAgICAgIHVuY2hlY2s6IFsnI2Noa0lzQWRkJ10sCiAgICAgICAgICAgIGhpZGU6IFsnbGFiZWw6Y29udGFpbnMoIkRvd25sb2FkIG1hbmFnZXIiKSddCiAgICAgICAgfSwKICAgICAgICBaaWRkdTogewogICAgICAgICAgICBob3N0OiBbJ2Rvd25sb2Fkcy56aWRkdS5jb20nXSwKICAgICAgICAgICAgdW5jaGVjazogWycjYWNjZWxlcmF0b3InXSwKICAgICAgICAgICAgaGlkZTogWyd0ZC50ZXh0MTI6Y29udGFpbnMoInppZGR1IGFjY2VsZXJhdG9yIiknXQogICAgICAgIH0KICAgIH0KCiAgICAvLyBJZiB0aGUgcmVxdWlyZSB3YXNuJ3QgZXhlY3V0ZWQgKEdvb2dsZSBDaHJvbWUgaW5zdGFsbGF0aW9uIHdpdGhvdXQgVGFtcGVybW9ua2V5KSwgalF1ZXJ5IDIuMDNtaW4KICAgIGlmICh0eXBlb2YgJCA9PSAidW5kZWZpbmVkIikgewogICAgICAgIChmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyPXR5cGVvZiB1bmRlZmluZWQsaT1lLmxvY2F0aW9uLG89ZS5kb2N1bWVudCxzPW8uZG9jdW1lbnRFbGVtZW50LGE9ZS5qUXVlcnksdT1lLiQsbD17fSxjPVtdLHA9IjIuMC4zIixmPWMuY29uY2F0LGg9Yy5wdXNoLGQ9Yy5zbGljZSxnPWMuaW5kZXhPZixtPWwudG9TdHJpbmcseT1sLmhhc093blByb3BlcnR5LHY9cC50cmltLHg9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbmV3IHguZm4uaW5pdChlLG4sdCl9LGI9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2Usdz0vXFMrL2csVD0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLEM9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxrPS9eLW1zLS8sTj0vLShbXGRhLXpdKS9naSxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0sUz1mdW5jdGlvbigpe28ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSx4LnJlYWR5KCl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpwLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKHI9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOlQuZXhlYyhlKSwhcnx8IXJbMV0mJnQpcmV0dXJuIXR8fHQuanF1ZXJ5Pyh0fHxuKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IodCkuZmluZChlKTtpZihyWzFdKXtpZih0PXQgaW5zdGFuY2VvZiB4P3RbMF06dCx4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoclsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVudHx8dDpvLCEwKSksQy50ZXN0KHJbMV0pJiZ4LmlzUGxhaW5PYmplY3QodCkpZm9yKHIgaW4gdCl4LmlzRnVuY3Rpb24odGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gaT1vLmdldEVsZW1lbnRCeUlkKHJbMl0pLGkmJmkucGFyZW50Tm9kZSYmKHRoaXMubGVuZ3RoPTEsdGhpc1swXT1pKSx0aGlzLmNvbnRleHQ9byx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9uLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dW5kZWZpbmVkJiYodGhpcy5zZWxlY3Rvcj1lLnNlbGVjdG9yLHRoaXMuY29udGV4dD1lLmNvbnRleHQpLHgubWFrZUFycmF5KGUsdGhpcykpfSxzZWxlY3RvcjoiIixsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3RoaXMudG9BcnJheSgpOjA+ZT90aGlzW3RoaXMubGVuZ3RoK2VdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD14Lm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdC5jb250ZXh0PXRoaXMuY29udGV4dCx0fSxlYWNoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguZWFjaCh0aGlzLGUsdCl9LHJlYWR5OmZ1bmN0aW9uKGUpe3JldHVybiB4LnJlYWR5LnByb21pc2UoKS5kb25lKGUpLHRoaXN9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGQuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoMD5lP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJnQ+bj9bdGhpc1tuXV06W10pfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpoLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSx4LmZuLmluaXQucHJvdG90eXBlPXguZm4seC5leHRlbmQ9eC5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8scz1hcmd1bWVudHNbMF18fHt9LGE9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgcyYmKGw9cyxzPWFyZ3VtZW50c1sxXXx8e30sYT0yKSwib2JqZWN0Ij09dHlwZW9mIHN8fHguaXNGdW5jdGlvbihzKXx8KHM9e30pLHU9PT1hJiYocz10aGlzLC0tYSk7dT5hO2ErKylpZihudWxsIT0oZT1hcmd1bWVudHNbYV0pKWZvcih0IGluIGUpbj1zW3RdLHI9ZVt0XSxzIT09ciYmKGwmJnImJih4LmlzUGxhaW5PYmplY3Qocil8fChpPXguaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmeC5pc0FycmF5KG4pP246W10pOm89biYmeC5pc1BsYWluT2JqZWN0KG4pP246e30sc1t0XT14LmV4dGVuZChsLG8scikpOnIhPT11bmRlZmluZWQmJihzW3RdPXIpKTtyZXR1cm4gc30seC5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKHArTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksbm9Db25mbGljdDpmdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09eCYmKGUuJD11KSx0JiZlLmpRdWVyeT09PXgmJihlLmpRdWVyeT1hKSx4fSxpc1JlYWR5OiExLHJlYWR5V2FpdDoxLGhvbGRSZWFkeTpmdW5jdGlvbihlKXtlP3gucmVhZHlXYWl0Kys6eC5yZWFkeSghMCl9LHJlYWR5OmZ1bmN0aW9uKGUpeyhlPT09ITA/LS14LnJlYWR5V2FpdDp4LmlzUmVhZHkpfHwoeC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4wfHwobi5yZXNvbHZlV2l0aChvLFt4XSkseC5mbi50cmlnZ2VyJiZ4KG8pLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpKSl9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9sW20uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe2lmKCJvYmplY3QiIT09eC50eXBlKGUpfHxlLm5vZGVUeXBlfHx4LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYheS5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9cmV0dXJuITB9LGlzRW1wdHlPYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoZSl9LHBhcnNlSFRNTDpmdW5jdGlvbihlLHQsbil7aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDsiYm9vbGVhbiI9PXR5cGVvZiB0JiYobj10LHQ9ITEpLHQ9dHx8bzt2YXIgcj1DLmV4ZWMoZSksaT0hbiYmW107cmV0dXJuIHI/W3QuY3JlYXRlRWxlbWVudChyWzFdKV06KHI9eC5idWlsZEZyYWdtZW50KFtlXSx0LGkpLGkmJngoaSkucmVtb3ZlKCkseC5tZXJnZShbXSxyLmNoaWxkTm9kZXMpKX0scGFyc2VKU09OOkpTT04ucGFyc2UscGFyc2VYTUw6ZnVuY3Rpb24oZSl7dmFyIHQsbjtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXtuPW5ldyBET01QYXJzZXIsdD1uLnBhcnNlRnJvbVN0cmluZyhlLCJ0ZXh0L3htbCIpfWNhdGNoKHIpe3Q9dW5kZWZpbmVkfXJldHVybighdHx8dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZ4LmVycm9yKCJJbnZhbGlkIFhNTDogIitlKSx0fSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZXZhbDtlPXgudHJpbShlKSxlJiYoMT09PWUuaW5kZXhPZigidXNlIHN0cmljdCIpPyh0PW8uY3JlYXRlRWxlbWVudCgic2NyaXB0IiksdC50ZXh0PWUsby5oZWFkLmFwcGVuZENoaWxkKHQpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCkpOm4oZSkpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShrLCJtcy0iKS5yZXBsYWNlKE4sRSl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpO2lmKG4pe2lmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBmb3IoaSBpbiBlKWlmKHI9dC5hcHBseShlW2ldLG4pLHI9PT0hMSlicmVha31lbHNlIGlmKHMpe2Zvcig7bz5pO2krKylpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuY2FsbChlW2ldLGksZVtpXSkscj09PSExKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOnYuY2FsbChlKX0sbWFrZUFycmF5OmZ1bmN0aW9uKGUsdCl7dmFyIG49dHx8W107cmV0dXJuIG51bGwhPWUmJihqKE9iamVjdChlKSk/eC5tZXJnZShuLCJzdHJpbmciPT10eXBlb2YgZT9bZV06ZSk6aC5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmcuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGgscj1lLmxlbmd0aCxpPTA7aWYoIm51bWJlciI9PXR5cGVvZiBuKWZvcig7bj5pO2krKyllW3IrK109dFtpXTtlbHNlIHdoaWxlKHRbaV0hPT11bmRlZmluZWQpZVtyKytdPXRbaSsrXTtyZXR1cm4gZS5sZW5ndGg9cixlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLG89MCxzPWUubGVuZ3RoO2ZvcihuPSEhbjtzPm87bysrKXI9ISF0KGVbb10sbyksbiE9PXImJmkucHVzaChlW29dKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPTAsbz1lLmxlbmd0aCxzPWooZSksYT1bXTtpZihzKWZvcig7bz5pO2krKylyPXQoZVtpXSxpLG4pLG51bGwhPXImJihhW2EubGVuZ3RoXT1yKTtlbHNlIGZvcihpIGluIGUpcj10KGVbaV0saSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7cmV0dXJuIGYuYXBwbHkoW10sYSl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJihuPWVbdF0sdD1lLGU9bikseC5pc0Z1bmN0aW9uKGUpPyhyPWQuY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoZC5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHguZ3VpZCsrLGkpOnVuZGVmaW5lZH0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuLHIsaSxvLHMpe3ZhciBhPTAsdT1lLmxlbmd0aCxsPW51bGw9PW47aWYoIm9iamVjdCI9PT14LnR5cGUobikpe2k9ITA7Zm9yKGEgaW4gbil4LmFjY2VzcyhlLHQsYSxuW2FdLCEwLG8scyl9ZWxzZSBpZihyIT09dW5kZWZpbmVkJiYoaT0hMCx4LmlzRnVuY3Rpb24ocil8fChzPSEwKSxsJiYocz8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwoeChlKSxuKX0pKSx0KSlmb3IoO3U+YTthKyspdChlW2FdLG4scz9yOnIuY2FsbChlW2FdLGEsdChlW2FdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxub3c6RGF0ZS5ub3csc3dhcDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHM9e307Zm9yKG8gaW4gdClzW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2k9bi5hcHBseShlLHJ8fFtdKTtmb3IobyBpbiB0KWUuc3R5bGVbb109c1tvXTtyZXR1cm4gaX19KSx4LnJlYWR5LnByb21pc2U9ZnVuY3Rpb24odCl7cmV0dXJuIG58fChuPXguRGVmZXJyZWQoKSwiY29tcGxldGUiPT09by5yZWFkeVN0YXRlP3NldFRpbWVvdXQoeC5yZWFkeSk6KG8uYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsUywhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixTLCExKSkpLG4ucHJvbWlzZSh0KX0seC5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7bFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBqKGUpe3ZhciB0PWUubGVuZ3RoLG49eC50eXBlKGUpO3JldHVybiB4LmlzV2luZG93KGUpPyExOjE9PT1lLm5vZGVUeXBlJiZ0PyEwOiJhcnJheSI9PT1ufHwiZnVuY3Rpb24iIT09biYmKDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfXQ9eChvKSxmdW5jdGlvbihlLHVuZGVmaW5lZCl7dmFyIHQsbixyLGksbyxzLGEsdSxsLGMscCxmLGgsZCxnLG0seSx2PSJzaXp6bGUiKy1uZXcgRGF0ZSxiPWUuZG9jdW1lbnQsdz0wLFQ9MCxDPXN0KCksaz1zdCgpLE49c3QoKSxFPSExLFM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KEU9ITAsMCk6MH0saj10eXBlb2YgdW5kZWZpbmVkLEQ9MTw8MzEsQT17fS5oYXNPd25Qcm9wZXJ0eSxMPVtdLHE9TC5wb3AsSD1MLnB1c2gsTz1MLnB1c2gsRj1MLnNsaWNlLFA9TC5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDtuPnQ7dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxSPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsTT0iW1xceDIwXFx0XFxyXFxuXFxmXSIsVz0iKD86XFxcXC58W1xcdy1dfFteXFx4MDAtXFx4YTBdKSsiLCQ9Vy5yZXBsYWNlKCJ3IiwidyMiKSxCPSJcXFsiK00rIiooIitXKyIpIitNKyIqKD86KFsqXiR8IX5dPz0pIitNKyIqKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woIiskKyIpfCl8KSIrTSsiKlxcXSIsST0iOigiK1crIikoPzpcXCgoKFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcM3woKD86XFxcXC58W15cXFxcKClbXFxdXXwiK0IucmVwbGFjZSgzLDgpKyIpKil8LiopXFwpfCkiLHo9UmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89UmVnRXhwKCJeIitNKyIqLCIrTSsiKiIpLFg9UmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLFU9UmVnRXhwKE0rIipbK35dIiksWT1SZWdFeHAoIj0iK00rIiooW15cXF0nXCJdKikiK00rIipcXF0iLCJnIiksVj1SZWdFeHAoSSksRz1SZWdFeHAoIl4iKyQrIiQiKSxKPXtJRDpSZWdFeHAoIl4jKCIrVysiKSIpLENMQVNTOlJlZ0V4cCgiXlxcLigiK1crIikiKSxUQUc6UmVnRXhwKCJeKCIrVy5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6UmVnRXhwKCJeIitCKSxQU0VVRE86UmVnRXhwKCJeIitJKSxDSElMRDpSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOlJlZ0V4cCgiXig/OiIrUisiKSQiLCJpIiksbmVlZHNDb250ZXh0OlJlZ0V4cCgiXiIrTSsiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitNKyIqKCg/Oi1cXGQpP1xcZCopIitNKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSxRPS9eW157XStce1xzKlxbbmF0aXZlIFx3LyxLPS9eKD86IyhbXHctXSspfChcdyspfFwuKFtcdy1dKykpJC8sWj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGV0PS9eaFxkJC9pLHR0PS8nfFxcL2csbnQ9UmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIikscnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9PXJ8fG4/dDowPnI/U3RyaW5nLmZyb21DaGFyQ29kZShyKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHI+PjEwLDU2MzIwfDEwMjMmcil9O3RyeXtPLmFwcGx5KEw9Ri5jYWxsKGIuY2hpbGROb2RlcyksYi5jaGlsZE5vZGVzKSxMW2IuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGl0KXtPPXthcHBseTpMLmxlbmd0aD9mdW5jdGlvbihlLHQpe0guYXBwbHkoZSxGLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDt3aGlsZShlW24rK109dFtyKytdKTtlLmxlbmd0aD1uLTF9fX1mdW5jdGlvbiBvdChlLHQscixpKXt2YXIgbyxzLGEsdSxsLGYsZyxtLHgsdztpZigodD90Lm93bmVyRG9jdW1lbnR8fHQ6YikhPT1wJiZjKHQpLHQ9dHx8cCxyPXJ8fFtdLCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHI7aWYoMSE9PSh1PXQubm9kZVR5cGUpJiY5IT09dSlyZXR1cm5bXTtpZihoJiYhaSl7aWYobz1LLmV4ZWMoZSkpaWYoYT1vWzFdKXtpZig5PT09dSl7aWYocz10LmdldEVsZW1lbnRCeUlkKGEpLCFzfHwhcy5wYXJlbnROb2RlKXJldHVybiByO2lmKHMuaWQ9PT1hKXJldHVybiByLnB1c2gocykscn1lbHNlIGlmKHQub3duZXJEb2N1bWVudCYmKHM9dC5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpKSYmeSh0LHMpJiZzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxzZXtpZihvWzJdKXJldHVybiBPLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSkscjtpZigoYT1vWzNdKSYmbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIE8uYXBwbHkocix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYSkpLHJ9aWYobi5xc2EmJighZHx8IWQudGVzdChlKSkpe2lmKG09Zz12LHg9dCx3PTk9PT11JiZlLDE9PT11JiYib2JqZWN0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zj1ndChlKSwoZz10LmdldEF0dHJpYnV0ZSgiaWQiKSk/bT1nLnJlcGxhY2UodHQsIlxcJCYiKTp0LnNldEF0dHJpYnV0ZSgiaWQiLG0pLG09IltpZD0nIittKyInXSAiLGw9Zi5sZW5ndGg7d2hpbGUobC0tKWZbbF09bSttdChmW2xdKTt4PVUudGVzdChlKSYmdC5wYXJlbnROb2RlfHx0LHc9Zi5qb2luKCIsIil9aWYodyl0cnl7cmV0dXJuIE8uYXBwbHkocix4LnF1ZXJ5U2VsZWN0b3JBbGwodykpLHJ9Y2F0Y2goVCl7fWZpbmFsbHl7Z3x8dC5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fX1yZXR1cm4ga3QoZS5yZXBsYWNlKHosIiQxIiksdCxyLGkpfWZ1bmN0aW9uIHN0KCl7dmFyIGU9W107ZnVuY3Rpb24gdChuLHIpe3JldHVybiBlLnB1c2gobis9IiAiKT5pLmNhY2hlTGVuZ3RoJiZkZWxldGUgdFtlLnNoaWZ0KCldLHRbbl09cn1yZXR1cm4gdH1mdW5jdGlvbiBhdChlKXtyZXR1cm4gZVt2XT0hMCxlfWZ1bmN0aW9uIHV0KGUpe3ZhciB0PXAuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChuKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gbHQoZSx0KXt2YXIgbj1lLnNwbGl0KCJ8Iikscj1lLmxlbmd0aDt3aGlsZShyLS0paS5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbj10JiZlLHI9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiYofnQuc291cmNlSW5kZXh8fEQpLSh+ZS5zb3VyY2VJbmRleHx8RCk7aWYocilyZXR1cm4gcjtpZihuKXdoaWxlKG49bi5uZXh0U2libGluZylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIHB0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PW4mJnQudHlwZT09PWV9fWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBodChlKXtyZXR1cm4gYXQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9K3QsYXQoZnVuY3Rpb24obixyKXt2YXIgaSxvPWUoW10sbi5sZW5ndGgsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0pbltpPW9bc11dJiYobltpXT0hKHJbaV09bltpXSkpfSl9KX1zPW90LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdD8iSFRNTCIhPT10Lm5vZGVOYW1lOiExfSxuPW90LnN1cHBvcnQ9e30sYz1vdC5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdD1lP2Uub3duZXJEb2N1bWVudHx8ZTpiLHI9dC5kZWZhdWx0VmlldztyZXR1cm4gdCE9PXAmJjk9PT10Lm5vZGVUeXBlJiZ0LmRvY3VtZW50RWxlbWVudD8ocD10LGY9dC5kb2N1bWVudEVsZW1lbnQsaD0hcyh0KSxyJiZyLmF0dGFjaEV2ZW50JiZyIT09ci50b3AmJnIuYXR0YWNoRXZlbnQoIm9uYmVmb3JldW5sb2FkIixmdW5jdGlvbigpe2MoKX0pLG4uYXR0cmlidXRlcz11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKHQuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGRpdiBjbGFzcz0nYSc+PC9kaXY+PGRpdiBjbGFzcz0nYSBpJz48L2Rpdj4iLGUuZmlyc3RDaGlsZC5jbGFzc05hbWU9ImkiLDI9PT1lLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImkiKS5sZW5ndGh9KSxuLmdldEJ5SWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGYuYXBwZW5kQ2hpbGQoZSkuaWQ9diwhdC5nZXRFbGVtZW50c0J5TmFtZXx8IXQuZ2V0RWxlbWVudHNCeU5hbWUodikubGVuZ3RofSksbi5nZXRCeUlkPyhpLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih0eXBlb2YgdC5nZXRFbGVtZW50QnlJZCE9PWomJmgpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4mJm4ucGFyZW50Tm9kZT9bbl06W119fSxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0pOihkZWxldGUgaS5maW5kLklELGkuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPT1qJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7cmV0dXJuIG4mJm4udmFsdWU9PT10fX0pLGkuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWo/dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTp1bmRlZmluZWR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LGkuZmluZC5DTEFTUz1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp1bmRlZmluZWR9LGc9W10sZD1bXSwobi5xc2E9US50ZXN0KHQucXVlcnlTZWxlY3RvckFsbCkpJiYodXQoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxzZWxlY3Q+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8ZC5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHxkLnB1c2goIjpjaGVja2VkIil9KSx1dChmdW5jdGlvbihlKXt2YXIgbj10LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7bi5zZXRBdHRyaWJ1dGUoInR5cGUiLCJoaWRkZW4iKSxlLmFwcGVuZENoaWxkKG4pLnNldEF0dHJpYnV0ZSgidCIsIiIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3RePScnXSIpLmxlbmd0aCYmZC5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmVuYWJsZWQiKS5sZW5ndGh8fGQucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSxkLnB1c2goIiwuKjoiKX0pKSwobi5tYXRjaGVzU2VsZWN0b3I9US50ZXN0KG09Zi53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGYubW96TWF0Y2hlc1NlbGVjdG9yfHxmLm9NYXRjaGVzU2VsZWN0b3J8fGYubXNNYXRjaGVzU2VsZWN0b3IpKSYmdXQoZnVuY3Rpb24oZSl7bi5kaXNjb25uZWN0ZWRNYXRjaD1tLmNhbGwoZSwiZGl2IiksbS5jYWxsKGUsIltzIT0nJ106eCIpLGcucHVzaCgiIT0iLEkpfSksZD1kLmxlbmd0aCYmUmVnRXhwKGQuam9pbigifCIpKSxnPWcubGVuZ3RoJiZSZWdFeHAoZy5qb2luKCJ8IikpLHk9US50ZXN0KGYuY29udGFpbnMpfHxmLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sUz1mLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUscil7aWYoZT09PXIpcmV0dXJuIEU9ITAsMDt2YXIgaT1yLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpO3JldHVybiBpPzEmaXx8IW4uc29ydERldGFjaGVkJiZyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09aT9lPT09dHx8eShiLGUpPy0xOnI9PT10fHx5KGIscik/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLHIpOjA6NCZpPy0xOjE6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj8tMToxfTpmdW5jdGlvbihlLG4pe3ZhciByLGk9MCxvPWUucGFyZW50Tm9kZSxzPW4ucGFyZW50Tm9kZSxhPVtlXSx1PVtuXTtpZihlPT09bilyZXR1cm4gRT0hMCwwO2lmKCFvfHwhcylyZXR1cm4gZT09PXQ/LTE6bj09PXQ/MTpvPy0xOnM/MTpsP1AuY2FsbChsLGUpLVAuY2FsbChsLG4pOjA7aWYobz09PXMpcmV0dXJuIGN0KGUsbik7cj1lO3doaWxlKHI9ci5wYXJlbnROb2RlKWEudW5zaGlmdChyKTtyPW47d2hpbGUocj1yLnBhcmVudE5vZGUpdS51bnNoaWZ0KHIpO3doaWxlKGFbaV09PT11W2ldKWkrKztyZXR1cm4gaT9jdChhW2ldLHVbaV0pOmFbaV09PT1iPy0xOnVbaV09PT1iPzE6MH0sdCk6cH0sb3QubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBvdChlLG51bGwsbnVsbCx0KX0sb3QubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpLHQ9dC5yZXBsYWNlKFksIj0nJDEnXSIpLCEoIW4ubWF0Y2hlc1NlbGVjdG9yfHwhaHx8ZyYmZy50ZXN0KHQpfHxkJiZkLnRlc3QodCkpKXRyeXt2YXIgcj1tLmNhbGwoZSx0KTtpZihyfHxuLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIHJ9Y2F0Y2goaSl7fXJldHVybiBvdCh0LHAsbnVsbCxbZV0pLmxlbmd0aD4wfSxvdC5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx5KGUsdCl9LG90LmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSk7dmFyIHI9aS5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0sbz1yJiZBLmNhbGwoaS5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/cihlLHQsIWgpOnVuZGVmaW5lZDtyZXR1cm4gbz09PXVuZGVmaW5lZD9uLmF0dHJpYnV0ZXN8fCFoP2UuZ2V0QXR0cmlidXRlKHQpOihvPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJm8uc3BlY2lmaWVkP28udmFsdWU6bnVsbDpvfSxvdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sb3QudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxyPVtdLGk9MCxvPTA7aWYoRT0hbi5kZXRlY3REdXBsaWNhdGVzLGw9IW4uc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoUyksRSl7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPXIucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKHJbaV0sMSl9cmV0dXJuIGV9LG89b3QuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9byhlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9byh0KTtyZXR1cm4gbn0saT1vdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzphdCxtYXRjaDpKLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UobnQscnQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKG50LHJ0KSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8b3QuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmb3QuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG49IWVbNV0mJmVbMl07cmV0dXJuIEouQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dW5kZWZpbmVkP2VbMl09ZVs0XTpuJiZWLnRlc3QobikmJih0PWd0KG4sITApKSYmKHQ9bi5pbmRleE9mKCIpIixuLmxlbmd0aC10KS1uLmxlbmd0aCkmJihlWzBdPWVbMF0uc2xpY2UoMCx0KSxlWzJdPW4uc2xpY2UoMCx0KSksZS5zbGljZSgwLDMpKX19LGZpbHRlcjp7VEFHOmZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKTtyZXR1cm4iKiI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9Q1tlKyIgIl07cmV0dXJuIHR8fCh0PVJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJkMoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1qJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt2YXIgaT1vdC5hdHRyKHIsZSk7cmV0dXJuIG51bGw9PWk/IiE9Ij09PXQ6dD8oaSs9IiIsIj0iPT09dD9pPT09bjoiIT0iPT09dD9pIT09bjoiXj0iPT09dD9uJiYwPT09aS5pbmRleE9mKG4pOiIqPSI9PT10P24mJmkuaW5kZXhPZihuKT4tMToiJD0iPT09dD9uJiZpLnNsaWNlKC1uLmxlbmd0aCk9PT1uOiJ+PSI9PT10PygiICIraSsiICIpLmluZGV4T2Yobik+LTE6Inw9Ij09PXQ/aT09PW58fGkuc2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89Im50aCIhPT1lLnNsaWNlKDAsMykscz0ibGFzdCIhPT1lLnNsaWNlKC00KSxhPSJvZi10eXBlIj09PXQ7cmV0dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMscCxmLGgsZCxnPW8hPT1zPyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIsbT10LnBhcmVudE5vZGUseT1hJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkseD0hdSYmIWE7aWYobSl7aWYobyl7d2hpbGUoZyl7cD10O3doaWxlKHA9cFtnXSlpZihhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7ZD1nPSJvbmx5Ij09PWUmJiFkJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGQ9W3M/bS5maXJzdENoaWxkOm0ubGFzdENoaWxkXSxzJiZ4KXtjPW1bdl18fChtW3ZdPXt9KSxsPWNbZV18fFtdLGg9bFswXT09PXcmJmxbMV0sZj1sWzBdPT09dyYmbFsyXSxwPWgmJm0uY2hpbGROb2Rlc1toXTt3aGlsZShwPSsraCYmcCYmcFtnXXx8KGY9aD0wKXx8ZC5wb3AoKSlpZigxPT09cC5ub2RlVHlwZSYmKytmJiZwPT09dCl7Y1tlXT1bdyxoLGZdO2JyZWFrfX1lbHNlIGlmKHgmJihsPSh0W3ZdfHwodFt2XT17fSkpW2VdKSYmbFswXT09PXcpZj1sWzFdO2Vsc2Ugd2hpbGUocD0rK2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoKGE/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09cC5ub2RlVHlwZSkmJisrZiYmKHgmJigocFt2XXx8KHBbdl09e30pKVtlXT1bdyxmXSkscD09PXQpKWJyZWFrO3JldHVybiBmLT1pLGY9PT1yfHwwPT09ZiVyJiZmL3I+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1pLnBzZXVkb3NbZV18fGkuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiByW3ZdP3IodCk6ci5sZW5ndGg+MT8obj1bZSxlLCIiLHRdLGkuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2F0KGZ1bmN0aW9uKGUsbil7dmFyIGksbz1yKGUsdCkscz1vLmxlbmd0aDt3aGlsZShzLS0paT1QLmNhbGwoZSxvW3NdKSxlW2ldPSEobltpXT1vW3NdKX0pOmZ1bmN0aW9uKGUpe3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6YXQoZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxyPWEoZS5yZXBsYWNlKHosIiQxIikpO3JldHVybiByW3ZdP2F0KGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLHM9cihlLG51bGwsaSxbXSksYT1lLmxlbmd0aDt3aGlsZShhLS0pKG89c1thXSkmJihlW2FdPSEodFthXT1vKSl9KTpmdW5jdGlvbihlLGksbyl7cmV0dXJuIHRbMF09ZSxyKHQsbnVsbCxvLG4pLCFuLnBvcCgpfX0pLGhhczphdChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIG90KGUsdCkubGVuZ3RoPjB9fSksY29udGFpbnM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8byh0KSkuaW5kZXhPZihlKT4tMX19KSxsYW5nOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBHLnRlc3QoZXx8IiIpfHxvdC5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIitlKSxlPWUucmVwbGFjZShudCxydCkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXt2YXIgbjtkbyBpZihuPWg/dC5sYW5nOnQuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHx0LmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybiBuPW4udG9Mb3dlckNhc2UoKSxuPT09ZXx8MD09PW4uaW5kZXhPZihlKyItIik7d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zn0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1wLmFjdGl2ZUVsZW1lbnQmJighcC5oYXNGb2N1c3x8cC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSExfSxkaXNhYmxlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmISFlLmNoZWNrZWR8fCJvcHRpb24iPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LGVtcHR5OmZ1bmN0aW9uKGUpe2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZylpZihlLm5vZGVOYW1lPiJAInx8Mz09PWUubm9kZVR5cGV8fDQ9PT1lLm5vZGVUeXBlKXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWkucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBldC50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gWi50ZXN0KGUubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYiYnV0dG9uIj09PWUudHlwZXx8ImJ1dHRvbiI9PT10fSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHx0LnRvTG93ZXJDYXNlKCk9PT1lLnR5cGUpfSxmaXJzdDpodChmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aHQoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmh0KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bMD5uP24rdDpuXX0pLGV2ZW46aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0wO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MTtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0Omh0KGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0wPm4/bit0Om47Zm9yKDt0PisrcjspZS5wdXNoKHIpO3JldHVybiBlfSl9fSxpLnBzZXVkb3MubnRoPWkucHNldWRvcy5lcTtmb3IodCBpbntyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlpLnBzZXVkb3NbdF09cHQodCk7Zm9yKHQgaW57c3VibWl0OiEwLHJlc2V0OiEwfSlpLnBzZXVkb3NbdF09ZnQodCk7ZnVuY3Rpb24gZHQoKXt9ZHQucHJvdG90eXBlPWkuZmlsdGVycz1pLnBzZXVkb3MsaS5zZXRGaWx0ZXJzPW5ldyBkdDtmdW5jdGlvbiBndChlLHQpe3ZhciBuLHIsbyxzLGEsdSxsLGM9a1tlKyIgIl07aWYoYylyZXR1cm4gdD8wOmMuc2xpY2UoMCk7YT1lLHU9W10sbD1pLnByZUZpbHRlcjt3aGlsZShhKXsoIW58fChyPV8uZXhlYyhhKSkpJiYociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHUucHVzaChvPVtdKSksbj0hMSwocj1YLmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKHosIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2ZvcihzIGluIGkuZmlsdGVyKSEocj1KW3NdLmV4ZWMoYSkpfHxsW3NdJiYhKHI9bFtzXShyKSl8fChuPXIuc2hpZnQoKSxvLnB1c2goe3ZhbHVlOm4sdHlwZTpzLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/b3QuZXJyb3IoZSk6ayhlLHUpLnNsaWNlKDApfWZ1bmN0aW9uIG10KGUpe3ZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO2Zvcig7bj50O3QrKylyKz1lW3RdLnZhbHVlO3JldHVybiByfWZ1bmN0aW9uIHl0KGUsdCxuKXt2YXIgaT10LmRpcixvPW4mJiJwYXJlbnROb2RlIj09PWkscz1UKys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLHIpe3doaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylyZXR1cm4gZSh0LG4scil9OmZ1bmN0aW9uKHQsbixhKXt2YXIgdSxsLGMscD13KyIgIitzO2lmKGEpe3doaWxlKHQ9dFtpXSlpZigoMT09PXQubm9kZVR5cGV8fG8pJiZlKHQsbixhKSlyZXR1cm4hMH1lbHNlIHdoaWxlKHQ9dFtpXSlpZigxPT09dC5ub2RlVHlwZXx8bylpZihjPXRbdl18fCh0W3ZdPXt9KSwobD1jW2ldKSYmbFswXT09PXApe2lmKCh1PWxbMV0pPT09ITB8fHU9PT1yKXJldHVybiB1PT09ITB9ZWxzZSBpZihsPWNbaV09W3BdLGxbMV09ZSh0LG4sYSl8fHIsbFsxXT09PSEwKXJldHVybiEwfX1mdW5jdGlvbiB2dChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiB4dChlLHQsbixyLGkpe3ZhciBvLHM9W10sYT0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O2Zvcig7dT5hO2ErKykobz1lW2FdKSYmKCFufHxuKG8scixpKSkmJihzLnB1c2gobyksbCYmdC5wdXNoKGEpKTtyZXR1cm4gc31mdW5jdGlvbiBidChlLHQsbixyLGksbyl7cmV0dXJuIHImJiFyW3ZdJiYocj1idChyKSksaSYmIWlbdl0mJihpPWJ0KGksbykpLGF0KGZ1bmN0aW9uKG8scyxhLHUpe3ZhciBsLGMscCxmPVtdLGg9W10sZD1zLmxlbmd0aCxnPW98fEN0KHR8fCIqIixhLm5vZGVUeXBlP1thXTphLFtdKSxtPSFlfHwhbyYmdD9nOnh0KGcsZixlLGEsdSkseT1uP2l8fChvP2U6ZHx8cik/W106czptO2lmKG4mJm4obSx5LGEsdSkscil7bD14dCh5LGgpLHIobCxbXSxhLHUpLGM9bC5sZW5ndGg7d2hpbGUoYy0tKShwPWxbY10pJiYoeVtoW2NdXT0hKG1baFtjXV09cCkpfWlmKG8pe2lmKGl8fGUpe2lmKGkpe2w9W10sYz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJmwucHVzaChtW2NdPXApO2kobnVsbCx5PVtdLGwsdSl9Yz15Lmxlbmd0aDt3aGlsZShjLS0pKHA9eVtjXSkmJihsPWk/UC5jYWxsKG8scCk6ZltjXSk+LTEmJihvW2xdPSEoc1tsXT1wKSl9fWVsc2UgeT14dCh5PT09cz95LnNwbGljZShkLHkubGVuZ3RoKTp5KSxpP2kobnVsbCxzLHksdSk6Ty5hcHBseShzLHkpfSl9ZnVuY3Rpb24gd3QoZSl7dmFyIHQsbixyLG89ZS5sZW5ndGgscz1pLnJlbGF0aXZlW2VbMF0udHlwZV0sYT1zfHxpLnJlbGF0aXZlWyIgIl0sbD1zPzE6MCxjPXl0KGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0sYSwhMCkscD15dChmdW5jdGlvbihlKXtyZXR1cm4gUC5jYWxsKHQsZSk+LTF9LGEsITApLGY9W2Z1bmN0aW9uKGUsbixyKXtyZXR1cm4hcyYmKHJ8fG4hPT11KXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOnAoZSxuLHIpKX1dO2Zvcig7bz5sO2wrKylpZihuPWkucmVsYXRpdmVbZVtsXS50eXBlXSlmPVt5dCh2dChmKSxuKV07ZWxzZXtpZihuPWkuZmlsdGVyW2VbbF0udHlwZV0uYXBwbHkobnVsbCxlW2xdLm1hdGNoZXMpLG5bdl0pe2ZvcihyPSsrbDtvPnI7cisrKWlmKGkucmVsYXRpdmVbZVtyXS50eXBlXSlicmVhaztyZXR1cm4gYnQobD4xJiZ2dChmKSxsPjEmJm10KGUuc2xpY2UoMCxsLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtsLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoeiwiJDEiKSxuLHI+bCYmd3QoZS5zbGljZShsLHIpKSxvPnImJnd0KGU9ZS5zbGljZShyKSksbz5yJiZtdChlKSl9Zi5wdXNoKG4pfXJldHVybiB2dChmKX1mdW5jdGlvbiBUdChlLHQpe3ZhciBuPTAsbz10Lmxlbmd0aD4wLHM9ZS5sZW5ndGg+MCxhPWZ1bmN0aW9uKGEsbCxjLGYsaCl7dmFyIGQsZyxtLHk9W10sdj0wLHg9IjAiLGI9YSYmW10sVD1udWxsIT1oLEM9dSxrPWF8fHMmJmkuZmluZC5UQUcoIioiLGgmJmwucGFyZW50Tm9kZXx8bCksTj13Kz1udWxsPT1DPzE6TWF0aC5yYW5kb20oKXx8LjE7Zm9yKFQmJih1PWwhPT1wJiZsLHI9bik7bnVsbCE9KGQ9a1t4XSk7eCsrKXtpZihzJiZkKXtnPTA7d2hpbGUobT1lW2crK10paWYobShkLGwsYykpe2YucHVzaChkKTticmVha31UJiYodz1OLHI9KytuKX1vJiYoKGQ9IW0mJmQpJiZ2LS0sYSYmYi5wdXNoKGQpKX1pZih2Kz14LG8mJnghPT12KXtnPTA7d2hpbGUobT10W2crK10pbShiLHksbCxjKTtpZihhKXtpZih2PjApd2hpbGUoeC0tKWJbeF18fHlbeF18fCh5W3hdPXEuY2FsbChmKSk7eT14dCh5KX1PLmFwcGx5KGYseSksVCYmIWEmJnkubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb3QudW5pcXVlU29ydChmKX1yZXR1cm4gVCYmKHc9Tix1PUMpLGJ9O3JldHVybiBvP2F0KGEpOmF9YT1vdC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLG89TltlKyIgIl07aWYoIW8pe3R8fCh0PWd0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlvPXd0KHRbbl0pLG9bdl0/ci5wdXNoKG8pOmkucHVzaChvKTtvPU4oZSxUdChpLHIpKX1yZXR1cm4gb307ZnVuY3Rpb24gQ3QoZSx0LG4pe3ZhciByPTAsaT10Lmxlbmd0aDtmb3IoO2k+cjtyKyspb3QoZSx0W3JdLG4pO3JldHVybiBufWZ1bmN0aW9uIGt0KGUsdCxyLG8pe3ZhciBzLHUsbCxjLHAsZj1ndChlKTtpZighbyYmMT09PWYubGVuZ3RoKXtpZih1PWZbMF09ZlswXS5zbGljZSgwKSx1Lmxlbmd0aD4yJiYiSUQiPT09KGw9dVswXSkudHlwZSYmbi5nZXRCeUlkJiY5PT09dC5ub2RlVHlwZSYmaCYmaS5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZih0PShpLmZpbmQuSUQobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLHQpfHxbXSlbMF0sIXQpcmV0dXJuIHI7ZT1lLnNsaWNlKHUuc2hpZnQoKS52YWx1ZS5sZW5ndGgpfXM9Si5uZWVkc0NvbnRleHQudGVzdChlKT8wOnUubGVuZ3RoO3doaWxlKHMtLSl7aWYobD11W3NdLGkucmVsYXRpdmVbYz1sLnR5cGVdKWJyZWFrO2lmKChwPWkuZmluZFtjXSkmJihvPXAobC5tYXRjaGVzWzBdLnJlcGxhY2UobnQscnQpLFUudGVzdCh1WzBdLnR5cGUpJiZ0LnBhcmVudE5vZGV8fHQpKSl7aWYodS5zcGxpY2UocywxKSxlPW8ubGVuZ3RoJiZtdCh1KSwhZSlyZXR1cm4gTy5hcHBseShyLG8pLHI7YnJlYWt9fX1yZXR1cm4gYShlLGYpKG8sdCwhaCxyLFUudGVzdChlKSkscn1uLnNvcnRTdGFibGU9di5zcGxpdCgiIikuc29ydChTKS5qb2luKCIiKT09PXYsbi5kZXRlY3REdXBsaWNhdGVzPUUsYygpLG4uc29ydERldGFjaGVkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocC5jcmVhdGVFbGVtZW50KCJkaXYiKSl9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxsdCgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuP3VuZGVmaW5lZDplLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksbi5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxsdCgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT91bmRlZmluZWQ6ZS5kZWZhdWx0VmFsdWV9KSx1dChmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8bHQoUixmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIG4/dW5kZWZpbmVkOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6ZVt0XT09PSEwP3QudG9Mb3dlckNhc2UoKTpudWxsfSkseC5maW5kPW90LHguZXhwcj1vdC5zZWxlY3RvcnMseC5leHByWyI6Il09eC5leHByLnBzZXVkb3MseC51bmlxdWU9b3QudW5pcXVlU29ydCx4LnRleHQ9b3QuZ2V0VGV4dCx4LmlzWE1MRG9jPW90LmlzWE1MLHguY29udGFpbnM9b3QuY29udGFpbnN9KGUpO3ZhciBEPXt9O2Z1bmN0aW9uIEEoZSl7dmFyIHQ9RFtlXT17fTtyZXR1cm4geC5lYWNoKGUubWF0Y2godyl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9eC5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/RFtlXXx8QShlKTp4LmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsaSxvLHMsYT1bXSx1PSFlLm9uY2UmJltdLGw9ZnVuY3Rpb24ocCl7Zm9yKHQ9ZS5tZW1vcnkmJnAsbj0hMCxzPWl8fDAsaT0wLG89YS5sZW5ndGgscj0hMDthJiZvPnM7cysrKWlmKGFbc10uYXBwbHkocFswXSxwWzFdKT09PSExJiZlLnN0b3BPbkZhbHNlKXt0PSExO2JyZWFrfXI9ITEsYSYmKHU/dS5sZW5ndGgmJmwodS5zaGlmdCgpKTp0P2E9W106Yy5kaXNhYmxlKCkpfSxjPXthZGQ6ZnVuY3Rpb24oKXtpZihhKXt2YXIgbj1hLmxlbmd0aDsoZnVuY3Rpb24gcyh0KXt4LmVhY2godCxmdW5jdGlvbih0LG4pe3ZhciByPXgudHlwZShuKTsiZnVuY3Rpb24iPT09cj9lLnVuaXF1ZSYmYy5oYXMobil8fGEucHVzaChuKTpuJiZuLmxlbmd0aCYmInN0cmluZyIhPT1yJiZzKG4pfSl9KShhcmd1bWVudHMpLHI/bz1hLmxlbmd0aDp0JiYoaT1uLGwodCkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmeC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXguaW5BcnJheSh0LGEsbikpPi0xKWEuc3BsaWNlKG4sMSksciYmKG8+PW4mJm8tLSxzPj1uJiZzLS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3guaW5BcnJheShlLGEpPi0xOiEoIWF8fCFhLmxlbmd0aCl9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGE9W10sbz0wLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gYT11PXQ9dW5kZWZpbmVkLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWF9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT11bmRlZmluZWQsdHx8Yy5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIXV9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIWF8fG4mJiF1fHwodD10fHxbXSx0PVtlLHQuc2xpY2U/dC5zbGljZSgpOnRdLHI/dS5wdXNoKHQpOmwodCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW59fTtyZXR1cm4gY30seC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciB0PVtbInJlc29sdmUiLCJkb25lIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLHguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZWplY3RlZCJdLFsibm90aWZ5IiwicHJvZ3Jlc3MiLHguQ2FsbGJhY2tzKCJtZW1vcnkiKV1dLG49InBlbmRpbmciLHI9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIG59LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBpLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sdGhlbjpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4geC5EZWZlcnJlZChmdW5jdGlvbihuKXt4LmVhY2godCxmdW5jdGlvbih0LG8pe3ZhciBzPW9bMF0sYT14LmlzRnVuY3Rpb24oZVt0XSkmJmVbdF07aVtvWzFdXShmdW5jdGlvbigpe3ZhciBlPWEmJmEuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP2UucHJvbWlzZSgpLmRvbmUobi5yZXNvbHZlKS5mYWlsKG4ucmVqZWN0KS5wcm9ncmVzcyhuLm5vdGlmeSk6bltzKyJXaXRoIl0odGhpcz09PXI/bi5wcm9taXNlKCk6dGhpcyxhP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/eC5leHRlbmQoZSxyKTpyfX0saT17fTtyZXR1cm4gci5waXBlPXIudGhlbix4LmVhY2godCxmdW5jdGlvbihlLG8pe3ZhciBzPW9bMl0sYT1vWzNdO3Jbb1sxXV09cy5hZGQsYSYmcy5hZGQoZnVuY3Rpb24oKXtuPWF9LHRbMV5lXVsyXS5kaXNhYmxlLHRbMl1bMl0ubG9jayksaVtvWzBdXT1mdW5jdGlvbigpe3JldHVybiBpW29bMF0rIldpdGgiXSh0aGlzPT09aT9yOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxpW29bMF0rIldpdGgiXT1zLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWQuY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT0xIT09cnx8ZSYmeC5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLG89MT09PWk/ZTp4LkRlZmVycmVkKCkscz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9kLmNhbGwoYXJndW1lbnRzKTpyLG49PT1hP28ubm90aWZ5V2l0aCh0LG4pOi0taXx8by5yZXNvbHZlV2l0aCh0LG4pfX0sYSx1LGw7aWYocj4xKWZvcihhPUFycmF5KHIpLHU9QXJyYXkociksbD1BcnJheShyKTtyPnQ7dCsrKW5bdF0mJnguaXNGdW5jdGlvbihuW3RdLnByb21pc2UpP25bdF0ucHJvbWlzZSgpLmRvbmUocyh0LGwsbikpLmZhaWwoby5yZWplY3QpLnByb2dyZXNzKHModCx1LGEpKTotLWk7cmV0dXJuIGl8fG8ucmVzb2x2ZVdpdGgobCxuKSxvLnByb21pc2UoKX19KSx4LnN1cHBvcnQ9ZnVuY3Rpb24odCl7dmFyIG49by5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHI9by5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaT1vLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHM9by5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSxhPXMuYXBwZW5kQ2hpbGQoby5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7cmV0dXJuIG4udHlwZT8obi50eXBlPSJjaGVja2JveCIsdC5jaGVja09uPSIiIT09bi52YWx1ZSx0Lm9wdFNlbGVjdGVkPWEuc2VsZWN0ZWQsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSEwLHQuYm94U2l6aW5nUmVsaWFibGU9ITAsdC5waXhlbFBvc2l0aW9uPSExLG4uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW4uY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hYS5kaXNhYmxlZCxuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxuLnZhbHVlPSJ0IixuLnR5cGU9InJhZGlvIix0LnJhZGlvVmFsdWU9InQiPT09bi52YWx1ZSxuLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsInQiKSxuLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxyLmFwcGVuZENoaWxkKG4pLHQuY2hlY2tDbG9uZT1yLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCx0LmZvY3VzaW5CdWJibGVzPSJvbmZvY3VzaW4iaW4gZSxpLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsaS5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1pLnN0eWxlLmJhY2tncm91bmRDbGlwLHgoZnVuY3Rpb24oKXt2YXIgbixyLHM9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6MDtkaXNwbGF5OmJsb2NrOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveCIsYT1vLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07YSYmKG49by5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixhLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGkpLGkuaW5uZXJIVE1MPSIiLGkuc3R5bGUuY3NzVGV4dD0iLXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSUiLHguc3dhcChhLG51bGwhPWEuc3R5bGUuem9vbT97em9vbToxfTp7fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1pLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5bGUoaSxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1pLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1pLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxlLm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGkuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksYS5yZW1vdmVDaGlsZChuKSl9KSx0KTp0fSh7fSk7dmFyIEwscSxIPS8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLyxPPS8oW0EtWl0pL2c7ZnVuY3Rpb24gRigpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmNhY2hlPXt9LDAse2dldDpmdW5jdGlvbigpe3JldHVybnt9fX0pLHRoaXMuZXhwYW5kbz14LmV4cGFuZG8rTWF0aC5yYW5kb20oKX1GLnVpZD0xLEYuYWNjZXB0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlVHlwZT8xPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGU6ITB9LEYucHJvdG90eXBlPXtrZXk6ZnVuY3Rpb24oZSl7aWYoIUYuYWNjZXB0cyhlKSlyZXR1cm4gMDt2YXIgdD17fSxuPWVbdGhpcy5leHBhbmRvXTtpZighbil7bj1GLnVpZCsrO3RyeXt0W3RoaXMuZXhwYW5kb109e3ZhbHVlOm59LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsdCl9Y2F0Y2gocil7dFt0aGlzLmV4cGFuZG9dPW4seC5leHRlbmQoZSx0KX19cmV0dXJuIHRoaXMuY2FjaGVbbl18fCh0aGlzLmNhY2hlW25dPXt9KSxufSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5rZXkoZSksbz10aGlzLmNhY2hlW2ldO2lmKCJzdHJpbmciPT10eXBlb2YgdClvW3RdPW47ZWxzZSBpZih4LmlzRW1wdHlPYmplY3QobykpeC5leHRlbmQodGhpcy5jYWNoZVtpXSx0KTtlbHNlIGZvcihyIGluIHQpb1tyXT10W3JdO3JldHVybiBvfSxnZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNhY2hlW3RoaXMua2V5KGUpXTtyZXR1cm4gdD09PXVuZGVmaW5lZD9uOm5bdF19LGFjY2VzczpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJiJzdHJpbmciPT10eXBlb2YgdCYmbj09PXVuZGVmaW5lZD8ocj10aGlzLmdldChlLHQpLHIhPT11bmRlZmluZWQ/cjp0aGlzLmdldChlLHguY2FtZWxDYXNlKHQpKSk6KHRoaXMuc2V0KGUsdCxuKSxuIT09dW5kZWZpbmVkP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXMua2V5KGUpLHM9dGhpcy5jYWNoZVtvXTtpZih0PT09dW5kZWZpbmVkKXRoaXMuY2FjaGVbb109e307ZWxzZXt4LmlzQXJyYXkodCk/cj10LmNvbmNhdCh0Lm1hcCh4LmNhbWVsQ2FzZSkpOihpPXguY2FtZWxDYXNlKHQpLHQgaW4gcz9yPVt0LGldOihyPWkscj1yIGluIHM/W3JdOnIubWF0Y2godyl8fFtdKSksbj1yLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHNbcltuXV19fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiF4LmlzRW1wdHlPYmplY3QodGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfHx7fSl9LGRpc2NhcmQ6ZnVuY3Rpb24oZSl7ZVt0aGlzLmV4cGFuZG9dJiZkZWxldGUgdGhpcy5jYWNoZVtlW3RoaXMuZXhwYW5kb11dfX0sTD1uZXcgRixxPW5ldyBGLHguZXh0ZW5kKHthY2NlcHREYXRhOkYuYWNjZXB0cyxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBMLmhhc0RhdGEoZSl8fHEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEwuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0wucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3EucmVtb3ZlKGUsdCl9fSkseC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9dGhpc1swXSxvPTAscz1udWxsO2lmKGU9PT11bmRlZmluZWQpe2lmKHRoaXMubGVuZ3RoJiYocz1MLmdldChpKSwxPT09aS5ub2RlVHlwZSYmIXEuZ2V0KGksImhhc0RhdGFBdHRycyIpKSl7Zm9yKG49aS5hdHRyaWJ1dGVzO24ubGVuZ3RoPm87bysrKXI9bltvXS5uYW1lLDA9PT1yLmluZGV4T2YoImRhdGEtIikmJihyPXguY2FtZWxDYXNlKHIuc2xpY2UoNSkpLFAoaSxyLHNbcl0pKTtxLnNldChpLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gc31yZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5zZXQodGhpcyxlKX0pOnguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCl7dmFyIG4scj14LmNhbWVsQ2FzZShlKTtpZihpJiZ0PT09dW5kZWZpbmVkKXtpZihuPUwuZ2V0KGksZSksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPUwuZ2V0KGksciksbiE9PXVuZGVmaW5lZClyZXR1cm4gbjtpZihuPVAoaSxyLHVuZGVmaW5lZCksbiE9PXVuZGVmaW5lZClyZXR1cm4gbn1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPUwuZ2V0KHRoaXMscik7TC5zZXQodGhpcyxyLHQpLC0xIT09ZS5pbmRleE9mKCItIikmJm4hPT11bmRlZmluZWQmJkwuc2V0KHRoaXMsZSx0KX0pfSxudWxsLHQsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtMLnJlbW92ZSh0aGlzLGUpfSl9fSk7ZnVuY3Rpb24gUChlLHQsbil7dmFyIHI7aWYobj09PXVuZGVmaW5lZCYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShPLCItJDEiKS50b0xvd2VyQ2FzZSgpLG49ZS5nZXRBdHRyaWJ1dGUociksInN0cmluZyI9PXR5cGVvZiBuKXt0cnl7bj0idHJ1ZSI9PT1uPyEwOiJmYWxzZSI9PT1uPyExOiJudWxsIj09PW4/bnVsbDorbisiIj09PW4/K246SC50ZXN0KG4pP0pTT04ucGFyc2Uobik6bn1jYXRjaChpKXt9TC5zZXQoZSx0LG4pfWVsc2Ugbj11bmRlZmluZWQ7cmV0dXJuIG59eC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4gZT8odD0odHx8ImZ4IikrInF1ZXVlIixyPXEuZ2V0KGUsdCksbiYmKCFyfHx4LmlzQXJyYXkobik/cj1xLmFjY2VzcyhlLHQseC5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W10pOnVuZGVmaW5lZH0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj14LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPXguX3F1ZXVlSG9va3MoZSx0KSxzPWZ1bmN0aW9uKCl7eC5kZXF1ZXVlKGUsdCl9OyJpbnByb2dyZXNzIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkmJigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwoZSxzLG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIHEuZ2V0KGUsbil8fHEuYWNjZXNzKGUsbix7ZW1wdHk6eC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7cS5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSkseC5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iZngiLG4tLSksbj5hcmd1bWVudHMubGVuZ3RoP3gucXVldWUodGhpc1swXSxlKTp0PT09dW5kZWZpbmVkP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49eC5xdWV1ZSh0aGlzLGUsdCk7eC5fcXVldWVIb29rcyh0aGlzLGUpLCJmeCI9PT1lJiYiaW5wcm9ncmVzcyIhPT1uWzBdJiZ4LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmRlcXVldWUodGhpcyxlKX0pfSxkZWxheTpmdW5jdGlvbihlLHQpe3JldHVybiBlPXguZng/eC5meC5zcGVlZHNbZV18fGU6ZSx0PXR8fCJmeCIsdGhpcy5xdWV1ZSh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9c2V0VGltZW91dCh0LGUpO24uc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChyKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MSxpPXguRGVmZXJyZWQoKSxvPXRoaXMscz10aGlzLmxlbmd0aCxhPWZ1bmN0aW9uKCl7LS1yfHxpLnJlc29sdmVXaXRoKG8sW29dKX07InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9dW5kZWZpbmVkKSxlPWV8fCJmeCI7d2hpbGUocy0tKW49cS5nZXQob1tzXSxlKyJxdWV1ZUhvb2tzIiksbiYmbi5lbXB0eSYmKHIrKyxuLmVtcHR5LmFkZChhKSk7cmV0dXJuIGEoKSxpLnByb21pc2UodCl9fSk7dmFyIFIsTSxXPS9bXHRcclxuXGZdL2csJD0vXHIvZyxCPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2k7eC5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyx4LmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3gucmVtb3ZlQXR0cih0aGlzLGUpfSl9LHByb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyx4LnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW3gucHJvcEZpeFtlXXx8ZV19KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1PSJzdHJpbmciPT10eXBlb2YgZSYmZTtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKHUpZm9yKHQ9KGV8fCIiKS5tYXRjaCh3KXx8W107YT5zO3MrKylpZihuPXRoaXNbc10scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFcsIiAiKToiICIpKXtvPTA7d2hpbGUoaT10W28rK10pMD5yLmluZGV4T2YoIiAiK2krIiAiKSYmKHIrPWkrIiAiKTtuLmNsYXNzTmFtZT14LnRyaW0ocil9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8scz0wLGE9dGhpcy5sZW5ndGgsdT0wPT09YXJndW1lbnRzLmxlbmd0aHx8InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpOiIiKSl7bz0wO3doaWxlKGk9dFtvKytdKXdoaWxlKHIuaW5kZXhPZigiICIraSsiICIpPj0wKXI9ci5yZXBsYWNlKCIgIitpKyIgIiwiICIpO24uY2xhc3NOYW1lPWU/eC50cmltKHIpOiIifXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJiJzdHJpbmciPT09bj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVDbGFzcyhlKTp4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykudG9nZ2xlQ2xhc3MoZS5jYWxsKHRoaXMsbix0aGlzLmNsYXNzTmFtZSx0KSx0KX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe2lmKCJzdHJpbmciPT09bil7dmFyIHQsaT0wLG89eCh0aGlzKSxzPWUubWF0Y2godyl8fFtdO3doaWxlKHQ9c1tpKytdKW8uaGFzQ2xhc3ModCk/by5yZW1vdmVDbGFzcyh0KTpvLmFkZENsYXNzKHQpfWVsc2Uobj09PXJ8fCJib29sZWFuIj09PW4pJiYodGhpcy5jbGFzc05hbWUmJnEuc2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8ZT09PSExPyIiOnEuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PSIgIitlKyIgIixuPTAscj10aGlzLmxlbmd0aDtmb3IoO3I+bjtuKyspaWYoMT09PXRoaXNbbl0ubm9kZVR5cGUmJigiICIrdGhpc1tuXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFcsIiAiKS5pbmRleE9mKHQpPj0wKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj14LmlzRnVuY3Rpb24oZSksdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3ZhciBpOzE9PT10aGlzLm5vZGVUeXBlJiYoaT1yP2UuY2FsbCh0aGlzLG4seCh0aGlzKS52YWwoKSk6ZSxudWxsPT1pP2k9IiI6Im51bWJlciI9PXR5cGVvZiBpP2krPSIiOnguaXNBcnJheShpKSYmKGk9eC5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLHQ9eC52YWxIb29rc1t0aGlzLnR5cGVdfHx4LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sdCYmInNldCJpbiB0JiZ0LnNldCh0aGlzLGksInZhbHVlIikhPT11bmRlZmluZWR8fCh0aGlzLnZhbHVlPWkpKX0pO2lmKGkpcmV0dXJuIHQ9eC52YWxIb29rc1tpLnR5cGVdfHx4LnZhbEhvb2tzW2kubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sdCYmImdldCJpbiB0JiYobj10LmdldChpLCJ2YWx1ZSIpKSE9PXVuZGVmaW5lZD9uOihuPWkudmFsdWUsInN0cmluZyI9PXR5cGVvZiBuP24ucmVwbGFjZSgkLCIiKTpudWxsPT1uPyIiOm4pfX19KSx4LmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUuYXR0cmlidXRlcy52YWx1ZTtyZXR1cm4hdHx8dC5zcGVjaWZpZWQ/ZS52YWx1ZTplLnRleHR9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9ZS5vcHRpb25zLGk9ZS5zZWxlY3RlZEluZGV4LG89InNlbGVjdC1vbmUiPT09ZS50eXBlfHwwPmkscz1vP251bGw6W10sYT1vP2krMTpyLmxlbmd0aCx1PTA+aT9hOm8/aTowO2Zvcig7YT51O3UrKylpZihuPXJbdV0sISghbi5zZWxlY3RlZCYmdSE9PWl8fCh4LnN1cHBvcnQub3B0RGlzYWJsZWQ/bi5kaXNhYmxlZDpudWxsIT09bi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikpfHxuLnBhcmVudE5vZGUuZGlzYWJsZWQmJngubm9kZU5hbWUobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD14KG4pLnZhbCgpLG8pcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89eC5tYWtlQXJyYXkodCkscz1pLmxlbmd0aDt3aGlsZShzLS0pcj1pW3NdLChyLnNlbGVjdGVkPXguaW5BcnJheSh4KHIpLnZhbCgpLG8pPj0wKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19LGF0dHI6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLG8scz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIHR5cGVvZiBlLmdldEF0dHJpYnV0ZT09PXI/eC5wcm9wKGUsdCxuKTooMT09PXMmJnguaXNYTUxEb2MoZSl8fCh0PXQudG9Mb3dlckNhc2UoKSxpPXguYXR0ckhvb2tzW3RdfHwoeC5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9NOlIpKSxuPT09dW5kZWZpbmVkP2kmJiJnZXQiaW4gaSYmbnVsbCE9PShvPWkuZ2V0KGUsdCkpP286KG89eC5maW5kLmF0dHIoZSx0KSxudWxsPT1vP3VuZGVmaW5lZDpvKTpudWxsIT09bj9pJiYic2V0ImluIGkmJihvPWkuc2V0KGUsbix0KSkhPT11bmRlZmluZWQ/bzooZS5zZXRBdHRyaWJ1dGUodCxuKyIiKSxuKTooeC5yZW1vdmVBdHRyKGUsdCksdW5kZWZpbmVkKSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9MCxvPXQmJnQubWF0Y2godyk7aWYobyYmMT09PWUubm9kZVR5cGUpd2hpbGUobj1vW2krK10pcj14LnByb3BGaXhbbl18fG4seC5leHByLm1hdGNoLmJvb2wudGVzdChuKSYmKGVbcl09ITEpLGUucmVtb3ZlQXR0cmlidXRlKG4pfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCF4LnN1cHBvcnQucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJngubm9kZU5hbWUoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIG89MSE9PXN8fCF4LmlzWE1MRG9jKGUpLG8mJih0PXgucHJvcEZpeFt0XXx8dCxpPXgucHJvcEhvb2tzW3RdKSxuIT09dW5kZWZpbmVkP2kmJiJzZXQiaW4gaSYmKHI9aS5zZXQoZSxuLHQpKSE9PXVuZGVmaW5lZD9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fEIudGVzdChlLm5vZGVOYW1lKXx8ZS5ocmVmP2UudGFiSW5kZXg6LTF9fX19KSxNPXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0PT09ITE/eC5yZW1vdmVBdHRyKGUsbik6ZS5zZXRBdHRyaWJ1dGUobixuKSxufX0seC5lYWNoKHguZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXHcrL2cpLGZ1bmN0aW9uKGUsdCl7dmFyIG49eC5leHByLmF0dHJIYW5kbGVbdF18fHguZmluZC5hdHRyO3guZXhwci5hdHRySGFuZGxlW3RdPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT14LmV4cHIuYXR0ckhhbmRsZVt0XSxvPXI/dW5kZWZpbmVkOih4LmV4cHIuYXR0ckhhbmRsZVt0XT11bmRlZmluZWQpIT1uKGUsdCxyKT90LnRvTG93ZXJDYXNlKCk6bnVsbDtyZXR1cm4geC5leHByLmF0dHJIYW5kbGVbdF09aSxvfX0pLHguc3VwcG9ydC5vcHRTZWxlY3RlZHx8KHgucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9fSkseC5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXt4LnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSkseC5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7eC52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHguaXNBcnJheSh0KT9lLmNoZWNrZWQ9eC5pbkFycmF5KHgoZSkudmFsKCksdCk+PTA6dW5kZWZpbmVkfX0seC5zdXBwb3J0LmNoZWNrT258fCh4LnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSk7dmFyIEk9L15rZXkvLHo9L14oPzptb3VzZXxjb250ZXh0bWVudSl8Y2xpY2svLF89L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFg9L14oW14uXSopKD86XC4oLispfCkkLztmdW5jdGlvbiBVKCl7cmV0dXJuITB9ZnVuY3Rpb24gWSgpe3JldHVybiExfWZ1bmN0aW9uIFYoKXt0cnl7cmV0dXJuIG8uYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fXguZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oZSx0LG4saSxvKXt2YXIgcyxhLHUsbCxjLHAsZixoLGQsZyxtLHk9cS5nZXQoZSk7aWYoeSl7bi5oYW5kbGVyJiYocz1uLG49cy5oYW5kbGVyLG89cy5zZWxlY3Rvciksbi5ndWlkfHwobi5ndWlkPXguZ3VpZCsrKSwobD15LmV2ZW50cyl8fChsPXkuZXZlbnRzPXt9KSwoYT15LmhhbmRsZSl8fChhPXkuaGFuZGxlPWZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgeD09PXJ8fGUmJnguZXZlbnQudHJpZ2dlcmVkPT09ZS50eXBlP3VuZGVmaW5lZDp4LmV2ZW50LmRpc3BhdGNoLmFwcGx5KGEuZWxlbSxhcmd1bWVudHMpfSxhLmVsZW09ZSksdD0odHx8IiIpLm1hdGNoKHcpfHxbIiJdLGM9dC5sZW5ndGg7d2hpbGUoYy0tKXU9WC5leGVjKHRbY10pfHxbXSxkPW09dVsxXSxnPSh1WzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZCYmKGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShvP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXguZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6bSxkYXRhOmksaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOm8sbmVlZHNDb250ZXh0Om8mJnguZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChvKSxuYW1lc3BhY2U6Zy5qb2luKCIuIil9LHMpLChoPWxbZF0pfHwoaD1sW2RdPVtdLGguZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJmYuc2V0dXAuY2FsbChlLGksZyxhKSE9PSExfHxlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcihkLGEsITEpKSxmLmFkZCYmKGYuYWRkLmNhbGwoZSxwKSxwLmhhbmRsZXIuZ3VpZHx8KHAuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLG8/aC5zcGxpY2UoaC5kZWxlZ2F0ZUNvdW50KyssMCxwKTpoLnB1c2gocCkseC5ldmVudC5nbG9iYWxbZF09ITApO2U9bnVsbH19LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHMsYSx1LGwsYyxwLGYsaCxkLGcsbT1xLmhhc0RhdGEoZSkmJnEuZ2V0KGUpO2lmKG0mJih1PW0uZXZlbnRzKSl7dD0odHx8IiIpLm1hdGNoKHcpfHxbIiJdLGw9dC5sZW5ndGg7d2hpbGUobC0tKWlmKGE9WC5leGVjKHRbbF0pfHxbXSxoPWc9YVsxXSxkPShhWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksaCl7cD14LmV2ZW50LnNwZWNpYWxbaF18fHt9LGg9KHI/cC5kZWxlZ2F0ZVR5cGU6cC5iaW5kVHlwZSl8fGgsZj11W2hdfHxbXSxhPWFbMl0mJlJlZ0V4cCgiKF58XFwuKSIrZC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxzPW89Zi5sZW5ndGg7d2hpbGUoby0tKWM9ZltvXSwhaSYmZyE9PWMub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWMuZ3VpZHx8YSYmIWEudGVzdChjLm5hbWVzcGFjZSl8fHImJnIhPT1jLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFjLnNlbGVjdG9yKXx8KGYuc3BsaWNlKG8sMSksYy5zZWxlY3RvciYmZi5kZWxlZ2F0ZUNvdW50LS0scC5yZW1vdmUmJnAucmVtb3ZlLmNhbGwoZSxjKSk7cyYmIWYubGVuZ3RoJiYocC50ZWFyZG93biYmcC50ZWFyZG93bi5jYWxsKGUsZCxtLmhhbmRsZSkhPT0hMXx8eC5yZW1vdmVFdmVudChlLGgsbS5oYW5kbGUpLGRlbGV0ZSB1W2hdKX1lbHNlIGZvcihoIGluIHUpeC5ldmVudC5yZW1vdmUoZSxoK3RbbF0sbixyLCEwKTt4LmlzRW1wdHlPYmplY3QodSkmJihkZWxldGUgbS5oYW5kbGUscS5yZW1vdmUoZSwiZXZlbnRzIikpfX0sdHJpZ2dlcjpmdW5jdGlvbih0LG4scixpKXt2YXIgcyxhLHUsbCxjLHAsZixoPVtyfHxvXSxkPXkuY2FsbCh0LCJ0eXBlIik/dC50eXBlOnQsZz15LmNhbGwodCwibmFtZXNwYWNlIik/dC5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihhPXU9cj1yfHxvLDMhPT1yLm5vZGVUeXBlJiY4IT09ci5ub2RlVHlwZSYmIV8udGVzdChkK3guZXZlbnQudHJpZ2dlcmVkKSYmKGQuaW5kZXhPZigiLiIpPj0wJiYoZz1kLnNwbGl0KCIuIiksZD1nLnNoaWZ0KCksZy5zb3J0KCkpLGM9MD5kLmluZGV4T2YoIjoiKSYmIm9uIitkLHQ9dFt4LmV4cGFuZG9dP3Q6bmV3IHguRXZlbnQoZCwib2JqZWN0Ij09dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPWk/MjozLHQubmFtZXNwYWNlPWcuam9pbigiLiIpLHQubmFtZXNwYWNlX3JlPXQubmFtZXNwYWNlP1JlZ0V4cCgiKF58XFwuKSIrZy5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLHQucmVzdWx0PXVuZGVmaW5lZCx0LnRhcmdldHx8KHQudGFyZ2V0PXIpLG49bnVsbD09bj9bdF06eC5tYWtlQXJyYXkobixbdF0pLGY9eC5ldmVudC5zcGVjaWFsW2RdfHx7fSxpfHwhZi50cmlnZ2VyfHxmLnRyaWdnZXIuYXBwbHkocixuKSE9PSExKSl7aWYoIWkmJiFmLm5vQnViYmxlJiYheC5pc1dpbmRvdyhyKSl7Zm9yKGw9Zi5kZWxlZ2F0ZVR5cGV8fGQsXy50ZXN0KGwrZCl8fChhPWEucGFyZW50Tm9kZSk7YTthPWEucGFyZW50Tm9kZSloLnB1c2goYSksdT1hO3U9PT0oci5vd25lckRvY3VtZW50fHxvKSYmaC5wdXNoKHUuZGVmYXVsdFZpZXd8fHUucGFyZW50V2luZG93fHxlKX1zPTA7d2hpbGUoKGE9aFtzKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl0LnR5cGU9cz4xP2w6Zi5iaW5kVHlwZXx8ZCxwPShxLmdldChhLCJldmVudHMiKXx8e30pW3QudHlwZV0mJnEuZ2V0KGEsImhhbmRsZSIpLHAmJnAuYXBwbHkoYSxuKSxwPWMmJmFbY10scCYmeC5hY2NlcHREYXRhKGEpJiZwLmFwcGx5JiZwLmFwcGx5KGEsbik9PT0hMSYmdC5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0LnR5cGU9ZCxpfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLl9kZWZhdWx0JiZmLl9kZWZhdWx0LmFwcGx5KGgucG9wKCksbikhPT0hMXx8IXguYWNjZXB0RGF0YShyKXx8YyYmeC5pc0Z1bmN0aW9uKHJbZF0pJiYheC5pc1dpbmRvdyhyKSYmKHU9cltjXSx1JiYocltjXT1udWxsKSx4LmV2ZW50LnRyaWdnZXJlZD1kLHJbZF0oKSx4LmV2ZW50LnRyaWdnZXJlZD11bmRlZmluZWQsdSYmKHJbY109dSkpLHQucmVzdWx0fX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZT14LmV2ZW50LmZpeChlKTt2YXIgdCxuLHIsaSxvLHM9W10sYT1kLmNhbGwoYXJndW1lbnRzKSx1PShxLmdldCh0aGlzLCJldmVudHMiKXx8e30pW2UudHlwZV18fFtdLGw9eC5ldmVudC5zcGVjaWFsW2UudHlwZV18fHt9O2lmKGFbMF09ZSxlLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWwucHJlRGlzcGF0Y2h8fGwucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGUpIT09ITEpe3M9eC5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsZSx1KSx0PTA7d2hpbGUoKGk9c1t0KytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7ZS5jdXJyZW50VGFyZ2V0PWkuZWxlbSxuPTA7d2hpbGUoKG89aS5oYW5kbGVyc1tuKytdKSYmIWUuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSkoIWUubmFtZXNwYWNlX3JlfHxlLm5hbWVzcGFjZV9yZS50ZXN0KG8ubmFtZXNwYWNlKSkmJihlLmhhbmRsZU9iaj1vLGUuZGF0YT1vLmRhdGEscj0oKHguZXZlbnQuc3BlY2lhbFtvLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8by5oYW5kbGVyKS5hcHBseShpLmVsZW0sYSksciE9PXVuZGVmaW5lZCYmKGUucmVzdWx0PXIpPT09ITEmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBsLnBvc3REaXNwYXRjaCYmbC5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLGUpLGUucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxzPVtdLGE9dC5kZWxlZ2F0ZUNvdW50LHU9ZS50YXJnZXQ7aWYoYSYmdS5ub2RlVHlwZSYmKCFlLmJ1dHRvbnx8ImNsaWNrIiE9PWUudHlwZSkpZm9yKDt1IT09dGhpczt1PXUucGFyZW50Tm9kZXx8dGhpcylpZih1LmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1lLnR5cGUpe2ZvcihyPVtdLG49MDthPm47bisrKW89dFtuXSxpPW8uc2VsZWN0b3IrIiAiLHJbaV09PT11bmRlZmluZWQmJihyW2ldPW8ubmVlZHNDb250ZXh0P3goaSx0aGlzKS5pbmRleCh1KT49MDp4LmZpbmQoaSx0aGlzLG51bGwsW3VdKS5sZW5ndGgpLHJbaV0mJnIucHVzaChvKTtyLmxlbmd0aCYmcy5wdXNoKHtlbGVtOnUsaGFuZGxlcnM6cn0pfXJldHVybiB0Lmxlbmd0aD5hJiZzLnB1c2goe2VsZW06dGhpcyxoYW5kbGVyczp0LnNsaWNlKGEpfSksc30scHJvcHM6ImFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWUud2hpY2gmJihlLndoaWNoPW51bGwhPXQuY2hhckNvZGU/dC5jaGFyQ29kZTp0LmtleUNvZGUpLGV9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzPXQuYnV0dG9uO3JldHVybiBudWxsPT1lLnBhZ2VYJiZudWxsIT10LmNsaWVudFgmJihuPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fG8scj1uLmRvY3VtZW50RWxlbWVudCxpPW4uYm9keSxlLnBhZ2VYPXQuY2xpZW50WCsociYmci5zY3JvbGxMZWZ0fHxpJiZpLnNjcm9sbExlZnR8fDApLShyJiZyLmNsaWVudExlZnR8fGkmJmkuY2xpZW50TGVmdHx8MCksZS5wYWdlWT10LmNsaWVudFkrKHImJnIuc2Nyb2xsVG9wfHxpJiZpLnNjcm9sbFRvcHx8MCktKHImJnIuY2xpZW50VG9wfHxpJiZpLmNsaWVudFRvcHx8MCkpLGUud2hpY2h8fHM9PT11bmRlZmluZWR8fChlLndoaWNoPTEmcz8xOjImcz8zOjQmcz8yOjApLGV9fSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt4LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scixpPWUudHlwZSxzPWUsYT10aGlzLmZpeEhvb2tzW2ldO2F8fCh0aGlzLmZpeEhvb2tzW2ldPWE9ei50ZXN0KGkpP3RoaXMubW91c2VIb29rczpJLnRlc3QoaSk/dGhpcy5rZXlIb29rczp7fSkscj1hLnByb3BzP3RoaXMucHJvcHMuY29uY2F0KGEucHJvcHMpOnRoaXMucHJvcHMsZT1uZXcgeC5FdmVudChzKSx0PXIubGVuZ3RoO3doaWxlKHQtLSluPXJbdF0sZVtuXT1zW25dO3JldHVybiBlLnRhcmdldHx8KGUudGFyZ2V0PW8pLDM9PT1lLnRhcmdldC5ub2RlVHlwZSYmKGUudGFyZ2V0PWUudGFyZ2V0LnBhcmVudE5vZGUpLGEuZmlsdGVyP2EuZmlsdGVyKGUscyk6ZX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMhPT1WKCkmJnRoaXMuZm9jdXM/KHRoaXMuZm9jdXMoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM9PT1WKCkmJnRoaXMuYmx1cj8odGhpcy5ibHVyKCksITEpOnVuZGVmaW5lZH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmeC5ub2RlTmFtZSh0aGlzLCJpbnB1dCIpPyh0aGlzLmNsaWNrKCksITEpOnVuZGVmaW5lZH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHgubm9kZU5hbWUoZS50YXJnZXQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe2UucmVzdWx0IT09dW5kZWZpbmVkJiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmV4dGVuZChuZXcgeC5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO3I/eC5ldmVudC50cmlnZ2VyKGksbnVsbCx0KTp4LmV2ZW50LmRpc3BhdGNoLmNhbGwodCxpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZuLnByZXZlbnREZWZhdWx0KCl9fSx4LnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4sITEpfSx4LkV2ZW50PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4LkV2ZW50PyhlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHxlLmdldFByZXZlbnREZWZhdWx0JiZlLmdldFByZXZlbnREZWZhdWx0KCk/VTpZKTp0aGlzLnR5cGU9ZSx0JiZ4LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHx4Lm5vdygpLHRoaXNbeC5leHBhbmRvXT0hMCx1bmRlZmluZWQpOm5ldyB4LkV2ZW50KGUsdCl9LHguRXZlbnQucHJvdG90eXBlPXtpc0RlZmF1bHRQcmV2ZW50ZWQ6WSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpZLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOlkscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9VSxlJiZlLnByZXZlbnREZWZhdWx0JiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPVUsZSYmZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9VSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0seC5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oZSx0KXt4LmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dGhpcyxpPWUucmVsYXRlZFRhcmdldCxvPWUuaGFuZGxlT2JqO3JldHVybighaXx8aSE9PXImJiF4LmNvbnRhaW5zKHIsaSkpJiYoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSx4LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fHguZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9ZnVuY3Rpb24oZSl7eC5ldmVudC5zaW11bGF0ZSh0LGUudGFyZ2V0LHguZXZlbnQuZml4KGUpLCEwKX07eC5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpezA9PT1uKysmJm8uYWRkRXZlbnRMaXN0ZW5lcihlLHIsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpezA9PT0tLW4mJm8ucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLHIsITApfX19KSx4LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7InN0cmluZyIhPXR5cGVvZiB0JiYobj1ufHx0LHQ9dW5kZWZpbmVkKTtmb3IocyBpbiBlKXRoaXMub24ocyx0LG4sZVtzXSxpKTtyZXR1cm4gdGhpc31pZihudWxsPT1uJiZudWxsPT1yPyhyPXQsbj10PXVuZGVmaW5lZCk6bnVsbD09ciYmKCJzdHJpbmciPT10eXBlb2YgdD8ocj1uLG49dW5kZWZpbmVkKToocj1uLG49dCx0PXVuZGVmaW5lZCkpLHI9PT0hMSlyPVk7ZWxzZSBpZighcilyZXR1cm4gdGhpcztyZXR1cm4gMT09PWkmJihvPXIscj1mdW5jdGlvbihlKXtyZXR1cm4geCgpLm9mZihlKSxvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sci5ndWlkPW8uZ3VpZHx8KG8uZ3VpZD14Lmd1aWQrKykpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQuYWRkKHRoaXMsZSxyLG4sdCl9KX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaix4KGUuZGVsZWdhdGVUYXJnZXQpLm9mZihyLm5hbWVzcGFjZT9yLm9yaWdUeXBlKyIuIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKGkgaW4gZSl0aGlzLm9mZihpLHQsZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuKHQ9PT0hMXx8ImZ1bmN0aW9uIj09dHlwZW9mIHQpJiYobj10LHQ9dW5kZWZpbmVkKSxuPT09ITEmJihuPVkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07cmV0dXJuIG4/eC5ldmVudC50cmlnZ2VyKGUsdCxuLCEwKTp1bmRlZmluZWR9fSk7dmFyIEc9L14uW146I1xbXC4sXSokLyxKPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFE9eC5leHByLm1hdGNoLm5lZWRzQ29udGV4dCxLPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3guZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG49W10scj10aGlzLGk9ci5sZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayh4KGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7aT50O3QrKylpZih4LmNvbnRhaW5zKHJbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKHQ9MDtpPnQ7dCsrKXguZmluZChlLHJbdF0sbik7cmV0dXJuIG49dGhpcy5wdXNoU3RhY2soaT4xP3gudW5pcXVlKG4pOm4pLG4uc2VsZWN0b3I9dGhpcy5zZWxlY3Rvcj90aGlzLnNlbGVjdG9yKyIgIitlOmUsbn0saGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXgoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPTA7Zm9yKDtuPmU7ZSsrKWlmKHguY29udGFpbnModGhpcyx0W2VdKSlyZXR1cm4hMH0pfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITApKX0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhldCh0aGlzLGV8fFtdLCExKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhZXQodGhpcywic3RyaW5nIj09dHlwZW9mIGUmJlEudGVzdChlKT94KGUpOmV8fFtdLCExKS5sZW5ndGh9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLHM9US50ZXN0KGUpfHwic3RyaW5nIiE9dHlwZW9mIGU/eChlLHR8fHRoaXMuY29udGV4dCk6MDtmb3IoO2k+cjtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZigxMT5uLm5vZGVUeXBlJiYocz9zLmluZGV4KG4pPi0xOjE9PT1uLm5vZGVUeXBlJiZ4LmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtuPW8ucHVzaChuKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGg+MT94LnVuaXF1ZShvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP2cuY2FsbCh4KGUpLHRoaXNbMF0pOmcuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj0ic3RyaW5nIj09dHlwZW9mIGU/eChlLHQpOngubWFrZUFycmF5KGUmJmUubm9kZVR5cGU/W2VdOmUpLHI9eC5tZXJnZSh0aGlzLmdldCgpLG4pO3JldHVybiB0aGlzLnB1c2hTdGFjayh4LnVuaXF1ZShyKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pO2Z1bmN0aW9uIFooZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfXguZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwicGFyZW50Tm9kZSIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gWihlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBaKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4geC5zaWJsaW5nKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4geC5zaWJsaW5nKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNvbnRlbnREb2N1bWVudHx8eC5tZXJnZShbXSxlLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9eC5tYXAodGhpcyx0LG4pO3JldHVybiJVbnRpbCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmInN0cmluZyI9PXR5cGVvZiByJiYoaT14LmZpbHRlcihyLGkpKSx0aGlzLmxlbmd0aD4xJiYoS1tlXXx8eC51bmlxdWUoaSksSi50ZXN0KGUpJiZpLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2soaSl9fSkseC5leHRlbmQoe2ZpbHRlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT94LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOnguZmluZC5tYXRjaGVzKGUseC5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxkaXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVtdLGk9biE9PXVuZGVmaW5lZDt3aGlsZSgoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGUpaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJngoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxzaWJsaW5nOmZ1bmN0aW9uKGUsdCl7dmFyIG49W107Zm9yKDtlO2U9ZS5uZXh0U2libGluZykxPT09ZS5ub2RlVHlwZSYmZSE9PXQmJm4ucHVzaChlKTtyZXR1cm4gbn19KTtmdW5jdGlvbiBldChlLHQsbil7aWYoeC5pc0Z1bmN0aW9uKHQpKXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiEhdC5jYWxsKGUscixlKSE9PW59KTtpZih0Lm5vZGVUeXBlKXJldHVybiB4LmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXtpZihHLnRlc3QodCkpcmV0dXJuIHguZmlsdGVyKHQsZSxuKTt0PXguZmlsdGVyKHQsZSl9cmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBnLmNhbGwodCxlKT49MCE9PW59KX12YXIgdHQ9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW1x3Ol0rKVtePl0qKVwvPi9naSxudD0vPChbXHc6XSspLyxydD0vPHwmIz9cdys7LyxpdD0vPCg/OnNjcmlwdHxzdHlsZXxsaW5rKS9pLG90PS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLHN0PS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGF0PS9eJHxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSx1dD0vXnRydWVcLyguKikvLGx0PS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZyxjdD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLGNvbDpbMiwiPHRhYmxlPjxjb2xncm91cD4iLCI8L2NvbGdyb3VwPjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDpbMCwiIiwiIl19O2N0Lm9wdGdyb3VwPWN0Lm9wdGlvbixjdC50Ym9keT1jdC50Zm9vdD1jdC5jb2xncm91cD1jdC5jYXB0aW9uPWN0LnRoZWFkLGN0LnRoPWN0LnRkLHguZm4uZXh0ZW5kKHt0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dW5kZWZpbmVkP3gudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fG8pLmNyZWF0ZVRleHROb2RlKGUpKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PXB0KHRoaXMsZSk7dC5hcHBlbmRDaGlsZChlKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzLm5leHRTaWJsaW5nKX0pfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWU/eC5maWx0ZXIoZSx0aGlzKTp0aGlzLGk9MDtmb3IoO251bGwhPShuPXJbaV0pO2krKyl0fHwxIT09bi5ub2RlVHlwZXx8eC5jbGVhbkRhdGEobXQobikpLG4ucGFyZW50Tm9kZSYmKHQmJnguY29udGFpbnMobi5vd25lckRvY3VtZW50LG4pJiZkdChtdChuLCJzY3JpcHQiKSksbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXt2YXIgZSx0PTA7Zm9yKDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJih4LmNsZWFuRGF0YShtdChlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbD09ZT8hMTplLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4geC5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZihlPT09dW5kZWZpbmVkJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhaXQudGVzdChlKSYmIWN0WyhudC5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1lLnJlcGxhY2UodHQsIjwkMT48LyQyPiIpO3RyeXtmb3IoO3I+bjtuKyspdD10aGlzW25dfHx7fSwxPT09dC5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goaSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9eC5tYXAodGhpcyxmdW5jdGlvbihlKXtyZXR1cm5bZS5uZXh0U2libGluZyxlLnBhcmVudE5vZGVdfSksdD0wO3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihuKXt2YXIgcj1lW3QrK10saT1lW3QrK107aSYmKHImJnIucGFyZW50Tm9kZSE9PWkmJihyPXRoaXMubmV4dFNpYmxpbmcpLHgodGhpcykucmVtb3ZlKCksaS5pbnNlcnRCZWZvcmUobixyKSl9LCEwKSx0P3RoaXM6dGhpcy5yZW1vdmUoKX0sZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlbW92ZShlLCEwKX0sZG9tTWFuaXA6ZnVuY3Rpb24oZSx0LG4pe2U9Zi5hcHBseShbXSxlKTt2YXIgcixpLG8scyxhLHUsbD0wLGM9dGhpcy5sZW5ndGgscD10aGlzLGg9Yy0xLGQ9ZVswXSxnPXguaXNGdW5jdGlvbihkKTtpZihnfHwhKDE+PWN8fCJzdHJpbmciIT10eXBlb2YgZHx8eC5zdXBwb3J0LmNoZWNrQ2xvbmUpJiZzdC50ZXN0KGQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24ocil7dmFyIGk9cC5lcShyKTtnJiYoZVswXT1kLmNhbGwodGhpcyxyLGkuaHRtbCgpKSksaS5kb21NYW5pcChlLHQsbil9KTtpZihjJiYocj14LmJ1aWxkRnJhZ21lbnQoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQsITEsIW4mJnRoaXMpLGk9ci5maXJzdENoaWxkLDE9PT1yLmNoaWxkTm9kZXMubGVuZ3RoJiYocj1pKSxpKSl7Zm9yKG89eC5tYXAobXQociwic2NyaXB0IiksZnQpLHM9by5sZW5ndGg7Yz5sO2wrKylhPXIsbCE9PWgmJihhPXguY2xvbmUoYSwhMCwhMCkscyYmeC5tZXJnZShvLG10KGEsInNjcmlwdCIpKSksdC5jYWxsKHRoaXNbbF0sYSxsKTtpZihzKWZvcih1PW9bby5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCx4Lm1hcChvLGh0KSxsPTA7cz5sO2wrKylhPW9bbF0sYXQudGVzdChhLnR5cGV8fCIiKSYmIXEuYWNjZXNzKGEsImdsb2JhbEV2YWwiKSYmeC5jb250YWlucyh1LGEpJiYoYS5zcmM/eC5fZXZhbFVybChhLnNyYyk6eC5nbG9iYWxFdmFsKGEudGV4dENvbnRlbnQucmVwbGFjZShsdCwiIikpKX1yZXR1cm4gdGhpc319KSx4LmVhY2goe2FwcGVuZFRvOiJhcHBlbmQiLHByZXBlbmRUbzoicHJlcGVuZCIsaW5zZXJ0QmVmb3JlOiJiZWZvcmUiLGluc2VydEFmdGVyOiJhZnRlciIscmVwbGFjZUFsbDoicmVwbGFjZVdpdGgifSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSl7dmFyIG4scj1bXSxpPXgoZSksbz1pLmxlbmd0aC0xLHM9MDtmb3IoO28+PXM7cysrKW49cz09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx4KGlbc10pW3RdKG4pLGguYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSkseC5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhPWUuY2xvbmVOb2RlKCEwKSx1PXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpO2lmKCEoeC5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx4LmlzWE1MRG9jKGUpKSlmb3Iocz1tdChhKSxvPW10KGUpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspeXQob1tyXSxzW3JdKTtpZih0KWlmKG4pZm9yKG89b3x8bXQoZSkscz1zfHxtdChhKSxyPTAsaT1vLmxlbmd0aDtpPnI7cisrKWd0KG9bcl0sc1tyXSk7ZWxzZSBndChlLGEpO3JldHVybiBzPW10KGEsInNjcmlwdCIpLHMubGVuZ3RoPjAmJmR0KHMsIXUmJm10KGUsInNjcmlwdCIpKSxhfSxidWlsZEZyYWdtZW50OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhLHUsbCxjPTAscD1lLmxlbmd0aCxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9W107Zm9yKDtwPmM7YysrKWlmKGk9ZVtjXSxpfHwwPT09aSlpZigib2JqZWN0Ij09PXgudHlwZShpKSl4Lm1lcmdlKGgsaS5ub2RlVHlwZT9baV06aSk7ZWxzZSBpZihydC50ZXN0KGkpKXtvPW98fGYuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSkscz0obnQuZXhlYyhpKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxhPWN0W3NdfHxjdC5fZGVmYXVsdCxvLmlubmVySFRNTD1hWzFdK2kucmVwbGFjZSh0dCwiPCQxPjwvJDI+IikrYVsyXSxsPWFbMF07d2hpbGUobC0tKW89by5sYXN0Q2hpbGQ7eC5tZXJnZShoLG8uY2hpbGROb2Rlcyksbz1mLmZpcnN0Q2hpbGQsby50ZXh0Q29udGVudD0iIn1lbHNlIGgucHVzaCh0LmNyZWF0ZVRleHROb2RlKGkpKTtmLnRleHRDb250ZW50PSIiLGM9MDt3aGlsZShpPWhbYysrXSlpZigoIXJ8fC0xPT09eC5pbkFycmF5KGkscikpJiYodT14LmNvbnRhaW5zKGkub3duZXJEb2N1bWVudCxpKSxvPW10KGYuYXBwZW5kQ2hpbGQoaSksInNjcmlwdCIpLHUmJmR0KG8pLG4pKXtsPTA7d2hpbGUoaT1vW2wrK10pYXQudGVzdChpLnR5cGV8fCIiKSYmbi5wdXNoKGkpfXJldHVybiBmfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzLGE9eC5ldmVudC5zcGVjaWFsLHU9MDtmb3IoOyhuPWVbdV0pIT09dW5kZWZpbmVkO3UrKyl7aWYoRi5hY2NlcHRzKG4pJiYobz1uW3EuZXhwYW5kb10sbyYmKHQ9cS5jYWNoZVtvXSkpKXtpZihyPU9iamVjdC5rZXlzKHQuZXZlbnRzfHx7fSksci5sZW5ndGgpZm9yKHM9MDsoaT1yW3NdKSE9PXVuZGVmaW5lZDtzKyspYVtpXT94LmV2ZW50LnJlbW92ZShuLGkpOngucmVtb3ZlRXZlbnQobixpLHQuaGFuZGxlKTtxLmNhY2hlW29dJiZkZWxldGUgcS5jYWNoZVtvXX1kZWxldGUgTC5jYWNoZVtuW0wuZXhwYW5kb11dfX0sX2V2YWxVcmw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX19KTtmdW5jdGlvbiBwdChlLHQpe3JldHVybiB4Lm5vZGVOYW1lKGUsInRhYmxlIikmJngubm9kZU5hbWUoMT09PXQubm9kZVR5cGU/dDp0LmZpcnN0Q2hpbGQsInRyIik/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKVswXXx8ZS5hcHBlbmRDaGlsZChlLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGJvZHkiKSk6ZX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIGh0KGUpe3ZhciB0PXV0LmV4ZWMoZS50eXBlKTtyZXR1cm4gdD9lLnR5cGU9dFsxXTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7Zm9yKDtuPnI7cisrKXEuc2V0KGVbcl0sImdsb2JhbEV2YWwiLCF0fHxxLmdldCh0W3JdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIGd0KGUsdCl7dmFyIG4scixpLG8scyxhLHUsbDtpZigxPT09dC5ub2RlVHlwZSl7aWYocS5oYXNEYXRhKGUpJiYobz1xLmFjY2VzcyhlKSxzPXEuc2V0KHQsbyksbD1vLmV2ZW50cykpe2RlbGV0ZSBzLmhhbmRsZSxzLmV2ZW50cz17fTtmb3IoaSBpbiBsKWZvcihuPTAscj1sW2ldLmxlbmd0aDtyPm47bisrKXguZXZlbnQuYWRkKHQsaSxsW2ldW25dKX1MLmhhc0RhdGEoZSkmJihhPUwuYWNjZXNzKGUpLHU9eC5leHRlbmQoe30sYSksTC5zZXQodCx1KSl9fWZ1bmN0aW9uIG10KGUsdCl7dmFyIG49ZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6ZS5xdWVyeVNlbGVjdG9yQWxsP2UucXVlcnlTZWxlY3RvckFsbCh0fHwiKiIpOltdO3JldHVybiB0PT09dW5kZWZpbmVkfHx0JiZ4Lm5vZGVOYW1lKGUsdCk/eC5tZXJnZShbZV0sbik6bn1mdW5jdGlvbiB5dChlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09biYmb3QudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6KCJpbnB1dCI9PT1ufHwidGV4dGFyZWEiPT09bikmJih0LmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZSl9eC5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS53cmFwQWxsKGUuY2FsbCh0aGlzLHQpKX0pOih0aGlzWzBdJiYodD14KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdEVsZW1lbnRDaGlsZCllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXMpfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9eCh0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD14LmlzRnVuY3Rpb24oZSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt4KHRoaXMpLndyYXBBbGwodD9lLmNhbGwodGhpcyxuKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7eC5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fHgodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfX0pO3ZhciB2dCx4dCxidD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sd3Q9L15tYXJnaW4vLFR0PVJlZ0V4cCgiXigiK2IrIikoLiopJCIsImkiKSxDdD1SZWdFeHAoIl4oIitiKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksa3Q9UmVnRXhwKCJeKFsrLV0pPSgiK2IrIikiLCJpIiksTnQ9e0JPRFk6ImJsb2NrIn0sRXQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFN0PXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LGp0PVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sRHQ9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXTtmdW5jdGlvbiBBdChlLHQpe2lmKHQgaW4gZSlyZXR1cm4gdDt2YXIgbj10LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSkscj10LGk9RHQubGVuZ3RoO3doaWxlKGktLSlpZih0PUR0W2ldK24sdCBpbiBlKXJldHVybiB0O3JldHVybiByfWZ1bmN0aW9uIEx0KGUsdCl7cmV0dXJuIGU9dHx8ZSwibm9uZSI9PT14LmNzcyhlLCJkaXNwbGF5Iil8fCF4LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKX1mdW5jdGlvbiBxdCh0KXtyZXR1cm4gZS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCl9ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbixyLGksbz1bXSxzPTAsYT1lLmxlbmd0aDtmb3IoO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJihvW3NdPXEuZ2V0KHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhvW3NdfHwibm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmTHQocikmJihvW3NdPXEuYWNjZXNzKHIsIm9sZGRpc3BsYXkiLFJ0KHIubm9kZU5hbWUpKSkpOm9bc118fChpPUx0KHIpLChuJiYibm9uZSIhPT1ufHwhaSkmJnEuc2V0KHIsIm9sZGRpc3BsYXkiLGk/bjp4LmNzcyhyLCJkaXNwbGF5IikpKSk7Zm9yKHM9MDthPnM7cysrKXI9ZVtzXSxyLnN0eWxlJiYodCYmIm5vbmUiIT09ci5zdHlsZS5kaXNwbGF5JiYiIiE9PXIuc3R5bGUuZGlzcGxheXx8KHIuc3R5bGUuZGlzcGxheT10P29bc118fCIiOiJub25lIikpO3JldHVybiBlfXguZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9LHM9MDtpZih4LmlzQXJyYXkodCkpe2ZvcihyPXF0KGUpLGk9dC5sZW5ndGg7aT5zO3MrKylvW3Rbc11dPXguY3NzKGUsdFtzXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gbiE9PXVuZGVmaW5lZD94LnN0eWxlKGUsdCxuKTp4LmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBIdCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBIdCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtMdCh0aGlzKT94KHRoaXMpLnNob3coKTp4KHRoaXMpLmhpZGUoKX0pfX0pLHguZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49dnQoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOntjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6ImNzc0Zsb2F0In0sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLHMsYT14LmNhbWVsQ2FzZSh0KSx1PWUuc3R5bGU7cmV0dXJuIHQ9eC5jc3NQcm9wc1thXXx8KHguY3NzUHJvcHNbYV09QXQodSxhKSkscz14LmNzc0hvb2tzW3RdfHx4LmNzc0hvb2tzW2FdLG49PT11bmRlZmluZWQ/cyYmImdldCJpbiBzJiYoaT1zLmdldChlLCExLHIpKSE9PXVuZGVmaW5lZD9pOnVbdF06KG89dHlwZW9mIG4sInN0cmluZyI9PT1vJiYoaT1rdC5leGVjKG4pKSYmKG49KGlbMV0rMSkqaVsyXStwYXJzZUZsb2F0KHguY3NzKGUsdCkpLG89Im51bWJlciIpLG51bGw9PW58fCJudW1iZXIiPT09byYmaXNOYU4obil8fCgibnVtYmVyIiE9PW98fHguY3NzTnVtYmVyW2FdfHwobis9InB4IikseC5zdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fCh1W3RdPSJpbmhlcml0IikscyYmInNldCJpbiBzJiYobj1zLnNldChlLG4scikpPT09dW5kZWZpbmVkfHwodVt0XT1uKSksdW5kZWZpbmVkKX19LGNzczpmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLHMsYT14LmNhbWVsQ2FzZSh0KTtyZXR1cm4gdD14LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdChlLnN0eWxlLGEpKSxzPXguY3NzSG9va3NbdF18fHguY3NzSG9va3NbYV0scyYmImdldCJpbiBzJiYoaT1zLmdldChlLCEwLG4pKSxpPT09dW5kZWZpbmVkJiYoaT12dChlLHQscikpLCJub3JtYWwiPT09aSYmdCBpbiBTdCYmKGk9U3RbdF0pLCIiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLG49PT0hMHx8eC5pc051bWVyaWMobyk/b3x8MDppKTppfX0pLHZ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scz1ufHxxdChlKSxhPXM/cy5nZXRQcm9wZXJ0eVZhbHVlKHQpfHxzW3RdOnVuZGVmaW5lZCx1PWUuc3R5bGU7cmV0dXJuIHMmJigiIiE9PWF8fHguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHwoYT14LnN0eWxlKGUsdCkpLEN0LnRlc3QoYSkmJnd0LnRlc3QodCkmJihyPXUud2lkdGgsaT11Lm1pbldpZHRoLG89dS5tYXhXaWR0aCx1Lm1pbldpZHRoPXUubWF4V2lkdGg9dS53aWR0aD1hLGE9cy53aWR0aCx1LndpZHRoPXIsdS5taW5XaWR0aD1pLHUubWF4V2lkdGg9bykpLGF9O2Z1bmN0aW9uIE90KGUsdCxuKXt2YXIgcj1UdC5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsxXS0obnx8MCkpKyhyWzJdfHwicHgiKTp0fWZ1bmN0aW9uIEZ0KGUsdCxuLHIsaSl7dmFyIG89bj09PShyPyJib3JkZXIiOiJjb250ZW50Iik/NDoid2lkdGgiPT09dD8xOjAscz0wO2Zvcig7ND5vO28rPTIpIm1hcmdpbiI9PT1uJiYocys9eC5jc3MoZSxuK2p0W29dLCEwLGkpKSxyPygiY29udGVudCI9PT1uJiYocy09eC5jc3MoZSwicGFkZGluZyIranRbb10sITAsaSkpLCJtYXJnaW4iIT09biYmKHMtPXguY3NzKGUsImJvcmRlciIranRbb10rIldpZHRoIiwhMCxpKSkpOihzKz14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxpKSwicGFkZGluZyIhPT1uJiYocys9eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkpKSk7cmV0dXJuIHN9ZnVuY3Rpb24gUHQoZSx0LG4pe3ZhciByPSEwLGk9IndpZHRoIj09PXQ/ZS5vZmZzZXRXaWR0aDplLm9mZnNldEhlaWdodCxvPXF0KGUpLHM9eC5zdXBwb3J0LmJveFNpemluZyYmImJvcmRlci1ib3giPT09eC5jc3MoZSwiYm94U2l6aW5nIiwhMSxvKTtpZigwPj1pfHxudWxsPT1pKXtpZihpPXZ0KGUsdCxvKSwoMD5pfHxudWxsPT1pKSYmKGk9ZS5zdHlsZVt0XSksQ3QudGVzdChpKSlyZXR1cm4gaTtyPXMmJih4LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGV8fGk9PT1lLnN0eWxlW3RdKSxpPXBhcnNlRmxvYXQoaSl8fDB9cmV0dXJuIGkrRnQoZSx0LG58fChzPyJib3JkZXIiOiJjb250ZW50IikscixvKSsicHgifWZ1bmN0aW9uIFJ0KGUpe3ZhciB0PW8sbj1OdFtlXTtyZXR1cm4gbnx8KG49TXQoZSx0KSwibm9uZSIhPT1uJiZufHwoeHQ9KHh0fHx4KCI8aWZyYW1lIGZyYW1lYm9yZGVyPScwJyB3aWR0aD0nMCcgaGVpZ2h0PScwJy8+IikuY3NzKCJjc3NUZXh0IiwiZGlzcGxheTpibG9jayAhaW1wb3J0YW50IikpLmFwcGVuZFRvKHQuZG9jdW1lbnRFbGVtZW50KSx0PSh4dFswXS5jb250ZW50V2luZG93fHx4dFswXS5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LHQud3JpdGUoIjwhZG9jdHlwZSBodG1sPjxodG1sPjxib2R5PiIpLHQuY2xvc2UoKSxuPU10KGUsdCkseHQuZGV0YWNoKCkpLE50W2VdPW4pLG59ZnVuY3Rpb24gTXQoZSx0KXt2YXIgbj14KHQuY3JlYXRlRWxlbWVudChlKSkuYXBwZW5kVG8odC5ib2R5KSxyPXguY3NzKG5bMF0sImRpc3BsYXkiKTtyZXR1cm4gbi5yZW1vdmUoKSxyfXguZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oZSx0KXt4LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBuPzA9PT1lLm9mZnNldFdpZHRoJiZidC50ZXN0KHguY3NzKGUsImRpc3BsYXkiKSk/eC5zd2FwKGUsRXQsZnVuY3Rpb24oKXtyZXR1cm4gUHQoZSx0LHIpfSk6UHQoZSx0LHIpOnVuZGVmaW5lZH0sc2V0OmZ1bmN0aW9uKGUsbixyKXt2YXIgaT1yJiZxdChlKTtyZXR1cm4gT3QoZSxuLHI/RnQoZSx0LHIseC5zdXBwb3J0LmJveFNpemluZyYmImJvcmRlci1ib3giPT09eC5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxpKTowKX19fSkseChmdW5jdGlvbigpe3guc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0fHwoeC5jc3NIb29rcy5tYXJnaW5SaWdodD17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/eC5zd2FwKGUse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LHZ0LFtlLCJtYXJnaW5SaWdodCJdKTp1bmRlZmluZWR9fSksIXguc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ4LmZuLnBvc2l0aW9uJiZ4LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXt4LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj8obj12dChlLHQpLEN0LnRlc3Qobik/eChlKS5wb3NpdGlvbigpW3RdKyJweCI6bik6dW5kZWZpbmVkfX19KX0pLHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIDA+PWUub2Zmc2V0V2lkdGgmJjA+PWUub2Zmc2V0SGVpZ2h0fSx4LmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiF4LmV4cHIuZmlsdGVycy5oaWRkZW4oZSl9KSx4LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe3ZhciByPTAsaT17fSxvPSJzdHJpbmciPT10eXBlb2Ygbj9uLnNwbGl0KCIgIik6W25dO2Zvcig7ND5yO3IrKylpW2UranRbcl0rdF09b1tyXXx8b1tyLTJdfHxvWzBdO3JldHVybiBpfX0sd3QudGVzdChlKXx8KHguY3NzSG9va3NbZSt0XS5zZXQ9T3QpfSk7dmFyIFd0PS8lMjAvZywkdD0vXFtcXSQvLEJ0PS9ccj9cbi9nLEl0PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSx6dD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7eC5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB4LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9eC5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/eC5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYheCh0aGlzKS5pcygiOmRpc2FibGVkIikmJnp0LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFJdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhb3QudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj14KHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6eC5pc0FycmF5KG4pP3gubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShCdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoQnQsIlxyXG4iKX19KS5nZXQoKX19KSx4LnBhcmFtPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPWZ1bmN0aW9uKGUsdCl7dD14LmlzRnVuY3Rpb24odCk/dCgpOm51bGw9PXQ/IiI6dCxyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KX07aWYodD09PXVuZGVmaW5lZCYmKHQ9eC5hamF4U2V0dGluZ3MmJnguYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSx4LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYheC5pc1BsYWluT2JqZWN0KGUpKXguZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpX3QobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpLnJlcGxhY2UoV3QsIisiKX07ZnVuY3Rpb24gX3QoZSx0LG4scil7dmFyIGk7aWYoeC5pc0FycmF5KHQpKXguZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8JHQudGVzdChlKT9yKGUsaSk6X3QoZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaT90OiIiKSsiXSIsaSxuLHIpfSk7ZWxzZSBpZihufHwib2JqZWN0IiE9PXgudHlwZSh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KV90KGUrIlsiK2krIl0iLHRbaV0sbixyKX14LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx4LmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pO3ZhciBYdCxVdCxZdD14Lm5vdygpLFZ0PS9cPy8sR3Q9LyMuKiQvLEp0PS8oWz8mXSlfPVteJl0qLyxRdD0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLEt0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFp0PS9eKD86R0VUfEhFQUQpJC8sZW49L15cL1wvLyx0bj0vXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sbm49eC5mbi5sb2FkLHJuPXt9LG9uPXt9LHNuPSIqLyIuY29uY2F0KCIqIik7dHJ5e1V0PWkuaHJlZn1jYXRjaChhbil7VXQ9by5jcmVhdGVFbGVtZW50KCJhIiksVXQuaHJlZj0iIixVdD1VdC5ocmVmfVh0PXRuLmV4ZWMoVXQudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIHVuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpfHxbXTtpZih4LmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBsbihlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1vbjtmdW5jdGlvbiBzKGEpe3ZhciB1O3JldHVybiBpW2FdPSEwLHguZWFjaChlW2FdfHxbXSxmdW5jdGlvbihlLGEpe3ZhciBsPWEodCxuLHIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgbHx8b3x8aVtsXT9vPyEodT1sKTp1bmRlZmluZWQ6KHQuZGF0YVR5cGVzLnVuc2hpZnQobCkscyhsKSwhMSl9KSx1fXJldHVybiBzKHQuZGF0YVR5cGVzWzBdKXx8IWlbIioiXSYmcygiKiIpfWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG4scixpPXguYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXRbbl0hPT11bmRlZmluZWQmJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJnguZXh0ZW5kKCEwLGUsciksZX14LmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe2lmKCJzdHJpbmciIT10eXBlb2YgZSYmbm4pcmV0dXJuIG5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgcixpLG8scz10aGlzLGE9ZS5pbmRleE9mKCIgIik7cmV0dXJuIGE+PTAmJihyPWUuc2xpY2UoYSksZT1lLnNsaWNlKDAsYSkpLHguaXNGdW5jdGlvbih0KT8obj10LHQ9dW5kZWZpbmVkKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIikscy5sZW5ndGg+MCYmeC5hamF4KHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1sKHI/eCgiPGRpdj4iKS5hcHBlbmQoeC5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5jb21wbGV0ZShuJiZmdW5jdGlvbihlLHQpe3MuZWFjaChuLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LHguZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHguZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpVdCx0eXBlOiJHRVQiLGlzTG9jYWw6S3QudGVzdChYdFsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpzbix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOngucGFyc2VKU09OLCJ0ZXh0IHhtbCI6eC5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/Y24oY24oZSx4LmFqYXhTZXR0aW5ncyksdCk6Y24oeC5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6dW4ocm4pLGFqYXhUcmFuc3BvcnQ6dW4ob24pLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLHQ9dHx8e307dmFyIG4scixpLG8scyxhLHUsbCxjPXguYWpheFNldHVwKHt9LHQpLHA9Yy5jb250ZXh0fHxjLGY9Yy5jb250ZXh0JiYocC5ub2RlVHlwZXx8cC5qcXVlcnkpP3gocCk6eC5ldmVudCxoPXguRGVmZXJyZWQoKSxkPXguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGc9Yy5zdGF0dXNDb2RlfHx7fSxtPXt9LHk9e30sdj0wLGI9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoMj09PXYpe2lmKCFvKXtvPXt9O3doaWxlKHQ9UXQuZXhlYyhpKSlvW3RbMV0udG9Mb3dlckNhc2UoKV09dFsyXX10PW9bZS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbnVsbD09dD9udWxsOnR9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiAyPT09dj9pOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHZ8fChlPXlbbl09eVtuXXx8ZSxtW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ8fChjLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZigyPnYpZm9yKHQgaW4gZSlnW3RdPVtnW3RdLGVbdF1dO2Vsc2UgVC5hbHdheXMoZVtULnN0YXR1c10pO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXt2YXIgdD1lfHxiO3JldHVybiBuJiZuLmFib3J0KHQpLGsoMCx0KSx0aGlzfX07aWYoaC5wcm9taXNlKFQpLmNvbXBsZXRlPWQuYWRkLFQuc3VjY2Vzcz1ULmRvbmUsVC5lcnJvcj1ULmZhaWwsYy51cmw9KChlfHxjLnVybHx8VXQpKyIiKS5yZXBsYWNlKEd0LCIiKS5yZXBsYWNlKGVuLFh0WzFdKyIvLyIpLGMudHlwZT10Lm1ldGhvZHx8dC50eXBlfHxjLm1ldGhvZHx8Yy50eXBlLGMuZGF0YVR5cGVzPXgudHJpbShjLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2godyl8fFsiIl0sbnVsbD09Yy5jcm9zc0RvbWFpbiYmKGE9dG4uZXhlYyhjLnVybC50b0xvd2VyQ2FzZSgpKSxjLmNyb3NzRG9tYWluPSEoIWF8fGFbMV09PT1YdFsxXSYmYVsyXT09PVh0WzJdJiYoYVszXXx8KCJodHRwOiI9PT1hWzFdPyI4MCI6IjQ0MyIpKT09PShYdFszXXx8KCJodHRwOiI9PT1YdFsxXT8iODAiOiI0NDMiKSkpKSxjLmRhdGEmJmMucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2YgYy5kYXRhJiYoYy5kYXRhPXgucGFyYW0oYy5kYXRhLGMudHJhZGl0aW9uYWwpKSxsbihybixjLHQsVCksMj09PXYpcmV0dXJuIFQ7dT1jLmdsb2JhbCx1JiYwPT09eC5hY3RpdmUrKyYmeC5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxjLnR5cGU9Yy50eXBlLnRvVXBwZXJDYXNlKCksYy5oYXNDb250ZW50PSFadC50ZXN0KGMudHlwZSkscj1jLnVybCxjLmhhc0NvbnRlbnR8fChjLmRhdGEmJihyPWMudXJsKz0oVnQudGVzdChyKT8iJiI6Ij8iKStjLmRhdGEsZGVsZXRlIGMuZGF0YSksYy5jYWNoZT09PSExJiYoYy51cmw9SnQudGVzdChyKT9yLnJlcGxhY2UoSnQsIiQxXz0iK1l0KyspOnIrKFZ0LnRlc3Qocik/IiYiOiI/IikrIl89IitZdCsrKSksYy5pZk1vZGlmaWVkJiYoeC5sYXN0TW9kaWZpZWRbcl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLHgubGFzdE1vZGlmaWVkW3JdKSx4LmV0YWdbcl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIseC5ldGFnW3JdKSksKGMuZGF0YSYmYy5oYXNDb250ZW50JiZjLmNvbnRlbnRUeXBlIT09ITF8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsYy5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGMuZGF0YVR5cGVzWzBdJiZjLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dP2MuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0rKCIqIiE9PWMuZGF0YVR5cGVzWzBdPyIsICIrc24rIjsgcT0wLjAxIjoiIik6Yy5hY2NlcHRzWyIqIl0pO2ZvcihsIGluIGMuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIobCxjLmhlYWRlcnNbbF0pO2lmKGMuYmVmb3JlU2VuZCYmKGMuYmVmb3JlU2VuZC5jYWxsKHAsVCxjKT09PSExfHwyPT09dikpcmV0dXJuIFQuYWJvcnQoKTtiPSJhYm9ydCI7Zm9yKGwgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pVFtsXShjW2xdKTtpZihuPWxuKG9uLGMsdCxUKSl7VC5yZWFkeVN0YXRlPTEsdSYmZi50cmlnZ2VyKCJhamF4U2VuZCIsW1QsY10pLGMuYXN5bmMmJmMudGltZW91dD4wJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSxjLnRpbWVvdXQpKTt0cnl7dj0xLG4uc2VuZChtLGspfWNhdGNoKEMpe2lmKCEoMj52KSl0aHJvdyBDO2soLTEsQyl9fWVsc2UgaygtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24gayhlLHQsbyxhKXt2YXIgbCxtLHksYix3LEM9dDsyIT09diYmKHY9MixzJiZjbGVhclRpbWVvdXQocyksbj11bmRlZmluZWQsaT1hfHwiIixULnJlYWR5U3RhdGU9ZT4wPzQ6MCxsPWU+PTIwMCYmMzAwPmV8fDMwND09PWUsbyYmKGI9cG4oYyxULG8pKSxiPWZuKGMsYixULGwpLGw/KGMuaWZNb2RpZmllZCYmKHc9VC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHcmJih4Lmxhc3RNb2RpZmllZFtyXT13KSx3PVQuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx3JiYoeC5ldGFnW3JdPXcpKSwyMDQ9PT1lfHwiSEVBRCI9PT1jLnR5cGU/Qz0ibm9jb250ZW50IjozMDQ9PT1lP0M9Im5vdG1vZGlmaWVkIjooQz1iLnN0YXRlLG09Yi5kYXRhLHk9Yi5lcnJvcixsPSF5KSk6KHk9QywoZXx8IUMpJiYoQz0iZXJyb3IiLDA+ZSYmKGU9MCkpKSxULnN0YXR1cz1lLFQuc3RhdHVzVGV4dD0odHx8QykrIiIsbD9oLnJlc29sdmVXaXRoKHAsW20sQyxUXSk6aC5yZWplY3RXaXRoKHAsW1QsQyx5XSksVC5zdGF0dXNDb2RlKGcpLGc9dW5kZWZpbmVkLHUmJmYudHJpZ2dlcihsPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW1QsYyxsP206eV0pLGQuZmlyZVdpdGgocCxbVCxDXSksdSYmKGYudHJpZ2dlcigiYWpheENvbXBsZXRlIixbVCxjXSksLS14LmFjdGl2ZXx8eC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIFR9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5nZXQoZSx1bmRlZmluZWQsdCwic2NyaXB0Iil9fSkseC5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsdCl7eFt0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4geC5pc0Z1bmN0aW9uKG4pJiYoaT1pfHxyLHI9bixuPXVuZGVmaW5lZCkseC5hamF4KHt1cmw6ZSx0eXBlOnQsZGF0YVR5cGU6aSxkYXRhOm4sc3VjY2VzczpyfSl9fSk7ZnVuY3Rpb24gcG4oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLHI9PT11bmRlZmluZWQmJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIGEpaWYoYVtpXSYmYVtpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pO2JyZWFrfXN8fChzPWkpfW89b3x8c31yZXR1cm4gbz8obyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dKTp1bmRlZmluZWR9ZnVuY3Rpb24gZm4oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsPXt9LGM9ZS5kYXRhVHlwZXMuc2xpY2UoKTtpZihjWzFdKWZvcihzIGluIGUuY29udmVydGVycylsW3MudG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW3NdO289Yy5zaGlmdCgpO3doaWxlKG8paWYoZS5yZXNwb25zZUZpZWxkc1tvXSYmKG5bZS5yZXNwb25zZUZpZWxkc1tvXV09dCksIXUmJnImJmUuZGF0YUZpbHRlciYmKHQ9ZS5kYXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpLHU9byxvPWMuc2hpZnQoKSlpZigiKiI9PT1vKW89dTtlbHNlIGlmKCIqIiE9PXUmJnUhPT1vKXtpZihzPWxbdSsiICIrb118fGxbIiogIitvXSwhcylmb3IoaSBpbiBsKWlmKGE9aS5zcGxpdCgiICIpLGFbMV09PT1vJiYocz1sW3UrIiAiK2FbMF1dfHxsWyIqICIrYVswXV0pKXtzPT09ITA/cz1sW2ldOmxbaV0hPT0hMCYmKG89YVswXSxjLnVuc2hpZnQoYVsxXSkpO2JyZWFrfWlmKHMhPT0hMClpZihzJiZlWyJ0aHJvd3MiXSl0PXModCk7ZWxzZSB0cnl7dD1zKHQpfWNhdGNoKHApe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOnM/cDoiTm8gY29udmVyc2lvbiBmcm9tICIrdSsiIHRvICIrb319fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX14LmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiB4Lmdsb2JhbEV2YWwoZSksZX19fSkseC5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2UuY2FjaGU9PT11bmRlZmluZWQmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiKX0pLHguYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKHIsaSl7dD14KCI8c2NyaXB0PiIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKCJsb2FkIGVycm9yIixuPWZ1bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJmkoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxvLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIGhuPVtdLGRuPS8oPSlcPyg/PSZ8JCl8XD9cPy87eC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPWhuLnBvcCgpfHx4LmV4cGFuZG8rIl8iK1l0Kys7cmV0dXJuIHRoaXNbZV09ITAsZX19KSx4LmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLHMsYT10Lmpzb25wIT09ITEmJihkbi50ZXN0KHQudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIHQuZGF0YSYmISh0LmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJmRuLnRlc3QodC5kYXRhKSYmImRhdGEiKTtyZXR1cm4gYXx8Impzb25wIj09PXQuZGF0YVR5cGVzWzBdPyhpPXQuanNvbnBDYWxsYmFjaz14LmlzRnVuY3Rpb24odC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2ssYT90W2FdPXRbYV0ucmVwbGFjZShkbiwiJDEiK2kpOnQuanNvbnAhPT0hMSYmKHQudXJsKz0oVnQudGVzdCh0LnVybCk/IiYiOiI/IikrdC5qc29ucCsiPSIraSksdC5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHN8fHguZXJyb3IoaSsiIHdhcyBub3QgY2FsbGVkIiksc1swXX0sdC5kYXRhVHlwZXNbMF09Impzb24iLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7cz1hcmd1bWVudHN9LHIuYWx3YXlzKGZ1bmN0aW9uKCl7ZVtpXT1vLHRbaV0mJih0Lmpzb25wQ2FsbGJhY2s9bi5qc29ucENhbGxiYWNrLGhuLnB1c2goaSkpLHMmJnguaXNGdW5jdGlvbihvKSYmbyhzWzBdKSxzPW89dW5kZWZpbmVkfSksInNjcmlwdCIpOnVuZGVmaW5lZH0pLHguYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3ZhciBnbj14LmFqYXhTZXR0aW5ncy54aHIoKSxtbj17MDoyMDAsMTIyMzoyMDR9LHluPTAsdm49e307ZS5BY3RpdmVYT2JqZWN0JiZ4KGUpLm9uKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHZuKXZuW2VdKCk7dm49dW5kZWZpbmVkfSkseC5zdXBwb3J0LmNvcnM9ISFnbiYmIndpdGhDcmVkZW50aWFscyJpbiBnbix4LnN1cHBvcnQuYWpheD1nbj0hIWduLHguYWpheFRyYW5zcG9ydChmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5zdXBwb3J0LmNvcnN8fGduJiYhZS5jcm9zc0RvbWFpbj97c2VuZDpmdW5jdGlvbihuLHIpe3ZhciBpLG8scz1lLnhocigpO2lmKHMub3BlbihlLnR5cGUsZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpLGUueGhyRmllbGRzKWZvcihpIGluIGUueGhyRmllbGRzKXNbaV09ZS54aHJGaWVsZHNbaV07ZS5taW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUoZS5taW1lVHlwZSksZS5jcm9zc0RvbWFpbnx8blsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoblsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO2ZvcihpIGluIG4pcy5zZXRSZXF1ZXN0SGVhZGVyKGksbltpXSk7dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0JiYoZGVsZXRlIHZuW29dLHQ9cy5vbmxvYWQ9cy5vbmVycm9yPW51bGwsImFib3J0Ij09PWU/cy5hYm9ydCgpOiJlcnJvciI9PT1lP3Iocy5zdGF0dXN8fDQwNCxzLnN0YXR1c1RleHQpOnIobW5bcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsInN0cmluZyI9PXR5cGVvZiBzLnJlc3BvbnNlVGV4dD97dGV4dDpzLnJlc3BvbnNlVGV4dH06dW5kZWZpbmVkLHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPXQoKSxzLm9uZXJyb3I9dCgiZXJyb3IiKSx0PXZuW289eW4rK109dCgiYWJvcnQiKSxzLnNlbmQoZS5oYXNDb250ZW50JiZlLmRhdGF8fG51bGwpfSxhYm9ydDpmdW5jdGlvbigpe3QmJnQoKX19OnVuZGVmaW5lZH0pO3ZhciB4bixibix3bj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sVG49UmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrYisiKShbYS16JV0qKSQiLCJpIiksQ249L3F1ZXVlSG9va3MkLyxrbj1bQW5dLE5uPXsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpLHI9bi5jdXIoKSxpPVRuLmV4ZWModCksbz1pJiZpWzNdfHwoeC5jc3NOdW1iZXJbZV0/IiI6InB4Iikscz0oeC5jc3NOdW1iZXJbZV18fCJweCIhPT1vJiYrcikmJlRuLmV4ZWMoeC5jc3Mobi5lbGVtLGUpKSxhPTEsdT0yMDtpZihzJiZzWzNdIT09byl7bz1vfHxzWzNdLGk9aXx8W10scz0rcnx8MTtkbyBhPWF8fCIuNSIscy89YSx4LnN0eWxlKG4uZWxlbSxlLHMrbyk7d2hpbGUoYSE9PShhPW4uY3VyKCkvcikmJjEhPT1hJiYtLXUpfXJldHVybiBpJiYocz1uLnN0YXJ0PStzfHwrcnx8MCxuLnVuaXQ9byxuLmVuZD1pWzFdP3MrKGlbMV0rMSkqaVsyXToraVsyXSksbn1dfTtmdW5jdGlvbiBFbigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eG49dW5kZWZpbmVkfSkseG49eC5ub3coKX1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHIsaT0oTm5bdF18fFtdKS5jb25jYXQoTm5bIioiXSksbz0wLHM9aS5sZW5ndGg7Zm9yKDtzPm87bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBqbihlLHQsbil7dmFyIHIsaSxvPTAscz1rbi5sZW5ndGgsYT14LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO3ZhciB0PXhufHxFbigpLG49TWF0aC5tYXgoMCxsLnN0YXJ0VGltZStsLmR1cmF0aW9uLXQpLHI9bi9sLmR1cmF0aW9ufHwwLG89MS1yLHM9MCx1PWwudHdlZW5zLmxlbmd0aDtmb3IoO3U+cztzKyspbC50d2VlbnNbc10ucnVuKG8pO3JldHVybiBhLm5vdGlmeVdpdGgoZSxbbCxvLG5dKSwxPm8mJnU/bjooYS5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPWEucHJvbWlzZSh7ZWxlbTplLHByb3BzOnguZXh0ZW5kKHt9LHQpLG9wdHM6eC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTp4bnx8RW4oKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXguVHdlZW4oZSxsLm9wdHMsdCxuLGwub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxsLm9wdHMuZWFzaW5nKTtyZXR1cm4gbC50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2wudHdlZW5zLmxlbmd0aDowO2lmKGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7cj5uO24rKylsLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/YS5yZXNvbHZlV2l0aChlLFtsLHRdKTphLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKERuKGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO3M+bztvKyspaWYocj1rbltvXS5jYWxsKGwsZSxjLGwub3B0cykpcmV0dXJuIHI7cmV0dXJuIHgubWFwKGMsU24sbCkseC5pc0Z1bmN0aW9uKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKGUsbCkseC5meC50aW1lcih4LmV4dGVuZCh1LHtlbGVtOmUsYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBEbihlLHQpe3ZhciBuLHIsaSxvLHM7Zm9yKG4gaW4gZSlpZihyPXguY2FtZWxDYXNlKG4pLGk9dFtyXSxvPWVbbl0seC5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSkscz14LmNzc0hvb2tzW3JdLHMmJiJleHBhbmQiaW4gcyl7bz1zLmV4cGFuZChvKSxkZWxldGUgZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfXguQW5pbWF0aW9uPXguZXh0ZW5kKGpuLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7eC5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9yKDtpPnI7cisrKW49ZVtyXSxObltuXT1ObltuXXx8W10sTm5bbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9rbi51bnNoaWZ0KGUpOmtuLnB1c2goZSl9fSk7ZnVuY3Rpb24gQW4oZSx0LG4pe3ZhciByLGksbyxzLGEsdSxsPXRoaXMsYz17fSxwPWUuc3R5bGUsZj1lLm5vZGVUeXBlJiZMdChlKSxoPXEuZ2V0KGUsImZ4c2hvdyIpO24ucXVldWV8fChhPXguX3F1ZXVlSG9va3MoZSwiZngiKSxudWxsPT1hLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHU9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHUoKX0pLGEudW5xdWV1ZWQrKyxsLmFsd2F5cyhmdW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLHgucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksMT09PWUubm9kZVR5cGUmJigiaGVpZ2h0ImluIHR8fCJ3aWR0aCJpbiB0KSYmKG4ub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLCJpbmxpbmUiPT09eC5jc3MoZSwiZGlzcGxheSIpJiYibm9uZSI9PT14LmNzcyhlLCJmbG9hdCIpJiYocC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksbi5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsbC5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLHduLmV4ZWMoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZj8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09aXx8IWh8fGhbcl09PT11bmRlZmluZWQpY29udGludWU7Zj0hMH1jW3JdPWgmJmhbcl18fHguc3R5bGUoZSxyKX1pZigheC5pc0VtcHR5T2JqZWN0KGMpKXtoPyJoaWRkZW4iaW4gaCYmKGY9aC5oaWRkZW4pOmg9cS5hY2Nlc3MoZSwiZnhzaG93Iix7fSksbyYmKGguaGlkZGVuPSFmKSxmP3goZSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe3goZSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7cS5yZW1vdmUoZSwiZnhzaG93Iik7Zm9yKHQgaW4gYyl4LnN0eWxlKGUsdCxjW3RdKX0pO2ZvcihyIGluIGMpcz1TbihmP2hbcl06MCxyLGwpLHIgaW4gaHx8KGhbcl09cy5zdGFydCxmJiYocy5lbmQ9cy5zdGFydCxzLnN0YXJ0PSJ3aWR0aCI9PT1yfHwiaGVpZ2h0Ij09PXI/MTowKSl9fWZ1bmN0aW9uIExuKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBMbi5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfXguVHdlZW49TG4sTG4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMbixpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHwic3dpbmciLHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1yLHRoaXMudW5pdD1vfHwoeC5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPUxuLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpMbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj1Mbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5wb3M9dD10aGlzLm9wdGlvbnMuZHVyYXRpb24/eC5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpMbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxMbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9TG4ucHJvdG90eXBlLExuLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZS5lbGVtW2UucHJvcF18fGUuZWxlbS5zdHlsZSYmbnVsbCE9ZS5lbGVtLnN0eWxlW2UucHJvcF0/KHQ9eC5jc3MoZS5lbGVtLGUucHJvcCwiIiksdCYmImF1dG8iIT09dD90OjApOmUuZWxlbVtlLnByb3BdfSxzZXQ6ZnVuY3Rpb24oZSl7eC5meC5zdGVwW2UucHJvcF0/eC5meC5zdGVwW2UucHJvcF0oZSk6ZS5lbGVtLnN0eWxlJiYobnVsbCE9ZS5lbGVtLnN0eWxlW3guY3NzUHJvcHNbZS5wcm9wXV18fHguY3NzSG9va3NbZS5wcm9wXSk/eC5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCk6ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX0sTG4ucHJvcEhvb2tzLnNjcm9sbFRvcD1Mbi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx4LmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49eC5mblt0XTt4LmZuW3RdPWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUocW4odCwhMCksZSxyLGkpfX0pLHguZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKEx0KS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmlzRW1wdHlPYmplY3QoZSksbz14LnNwZWVkKHQsbixyKSxzPWZ1bmN0aW9uKCl7dmFyIHQ9am4odGhpcyx4LmV4dGVuZCh7fSxlKSxvKTsoaXx8cS5nZXQodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gcy5maW5pc2g9cyxpfHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKHMpOnRoaXMucXVldWUoby5xdWV1ZSxzKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChuKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj10LHQ9ZSxlPXVuZGVmaW5lZCksdCYmZSE9PSExJiZ0aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZSsicXVldWVIb29rcyIsbz14LnRpbWVycyxzPXEuZ2V0KHRoaXMpO2lmKGkpc1tpXSYmc1tpXS5zdG9wJiZyKHNbaV0pO2Vsc2UgZm9yKGkgaW4gcylzW2ldJiZzW2ldLnN0b3AmJkNuLnRlc3QoaSkmJnIoc1tpXSk7Zm9yKGk9by5sZW5ndGg7aS0tOylvW2ldLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW2ldLnF1ZXVlIT09ZXx8KG9baV0uYW5pbS5zdG9wKG4pLHQ9ITEsby5zcGxpY2UoaSwxKSk7KHR8fCFuKSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49cS5nZXQodGhpcykscj1uW2UrInF1ZXVlIl0saT1uW2UrInF1ZXVlSG9va3MiXSxvPXgudGltZXJzLHM9cj9yLmxlbmd0aDowO2ZvcihuLmZpbmlzaD0hMCx4LnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCghMCksby5zcGxpY2UodCwxKSk7Zm9yKHQ9MDtzPnQ7dCsrKXJbdF0mJnJbdF0uZmluaXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pO2Z1bmN0aW9uIHFuKGUsdCl7dmFyIG4scj17aGVpZ2h0OmV9LGk9MDtmb3IodD10PzE6MDs0Pmk7aSs9Mi10KW49anRbaV0sclsibWFyZ2luIituXT1yWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoci5vcGFjaXR5PXIud2lkdGg9ZSkscn14LmVhY2goe3NsaWRlRG93bjpxbigic2hvdyIpLHNsaWRlVXA6cW4oImhpZGUiKSxzbGlkZVRvZ2dsZTpxbigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSkseC5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP3guZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8eC5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiF4LmlzRnVuY3Rpb24odCkmJnR9O3JldHVybiByLmR1cmF0aW9uPXguZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiByLmR1cmF0aW9uP3IuZHVyYXRpb246ci5kdXJhdGlvbiBpbiB4LmZ4LnNwZWVkcz94LmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTp4LmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ci5xdWV1ZXx8ci5xdWV1ZT09PSEwKSYmKHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7eC5pc0Z1bmN0aW9uKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZ4LmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0seC5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfX0seC50aW1lcnM9W10seC5meD1Mbi5wcm90b3R5cGUuaW5pdCx4LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PXgudGltZXJzLG49MDtmb3IoeG49eC5ub3coKTt0Lmxlbmd0aD5uO24rKyllPXRbbl0sZSgpfHx0W25dIT09ZXx8dC5zcGxpY2Uobi0tLDEpO3QubGVuZ3RofHx4LmZ4LnN0b3AoKSx4bj11bmRlZmluZWR9LHguZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ4LnRpbWVycy5wdXNoKGUpJiZ4LmZ4LnN0YXJ0KCl9LHguZnguaW50ZXJ2YWw9MTMseC5meC5zdGFydD1mdW5jdGlvbigpe2JufHwoYm49c2V0SW50ZXJ2YWwoeC5meC50aWNrLHguZnguaW50ZXJ2YWwpKX0seC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChibiksYm49bnVsbH0seC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0seC5meC5zdGVwPXt9LHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4geC5ncmVwKHgudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSkseC5mbi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXVuZGVmaW5lZD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXt4Lm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7dmFyIHQsbixpPXRoaXNbMF0sbz17dG9wOjAsbGVmdDowfSxzPWkmJmkub3duZXJEb2N1bWVudDtpZihzKXJldHVybiB0PXMuZG9jdW1lbnRFbGVtZW50LHguY29udGFpbnModCxpKT8odHlwZW9mIGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09ciYmKG89aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksbj1IbihzKSx7dG9wOm8udG9wK24ucGFnZVlPZmZzZXQtdC5jbGllbnRUb3AsbGVmdDpvLmxlZnQrbi5wYWdlWE9mZnNldC10LmNsaWVudExlZnR9KTpvfSx4Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbCxjPXguY3NzKGUsInBvc2l0aW9uIikscD14KGUpLGY9e307InN0YXRpYyI9PT1jJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxhPXAub2Zmc2V0KCksbz14LmNzcyhlLCJ0b3AiKSx1PXguY3NzKGUsImxlZnQiKSxsPSgiYWJzb2x1dGUiPT09Y3x8ImZpeGVkIj09PWMpJiYobyt1KS5pbmRleE9mKCJhdXRvIik+LTEsbD8ocj1wLnBvc2l0aW9uKCkscz1yLnRvcCxpPXIubGVmdCk6KHM9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLHguaXNGdW5jdGlvbih0KSYmKHQ9dC5jYWxsKGUsbixhKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1hLnRvcCtzKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LWEubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpwLmNzcyhmKX19LHguZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbj10aGlzWzBdLHI9e3RvcDowLGxlZnQ6MH07cmV0dXJuImZpeGVkIj09PXguY3NzKG4sInBvc2l0aW9uIik/dD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihlPXRoaXMub2Zmc2V0UGFyZW50KCksdD10aGlzLm9mZnNldCgpLHgubm9kZU5hbWUoZVswXSwiaHRtbCIpfHwocj1lLm9mZnNldCgpKSxyLnRvcCs9eC5jc3MoZVswXSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxyLmxlZnQrPXguY3NzKGVbMF0sImJvcmRlckxlZnRXaWR0aCIsITApKSx7dG9wOnQudG9wLXIudG9wLXguY3NzKG4sIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LXIubGVmdC14LmNzcyhuLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnR8fHM7d2hpbGUoZSYmIXgubm9kZU5hbWUoZSwiaHRtbCIpJiYic3RhdGljIj09PXguY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8c30pfX0pLHguZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LG4pe3ZhciByPSJwYWdlWU9mZnNldCI9PT1uO3guZm5bdF09ZnVuY3Rpb24oaSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCxpLG8pe3ZhciBzPUhuKHQpO3JldHVybiBvPT09dW5kZWZpbmVkP3M/c1tuXTp0W2ldOihzP3Muc2Nyb2xsVG8ocj9lLnBhZ2VYT2Zmc2V0Om8scj9vOmUucGFnZVlPZmZzZXQpOnRbaV09byx1bmRlZmluZWQpfSx0LGksYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KTtmdW5jdGlvbiBIbihlKXtyZXR1cm4geC5pc1dpbmRvdyhlKT9lOjk9PT1lLm5vZGVUeXBlJiZlLmRlZmF1bHRWaWV3fXguZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrZSxjb250ZW50OnQsIiI6Im91dGVyIitlfSxmdW5jdGlvbihuLHIpe3guZm5bcl09ZnVuY3Rpb24ocixpKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoJiYobnx8ImJvb2xlYW4iIT10eXBlb2Ygcikscz1ufHwocj09PSEwfHxpPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQsbixyKXt2YXIgaTtyZXR1cm4geC5pc1dpbmRvdyh0KT90LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTo5PT09dC5ub2RlVHlwZT8oaT10LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIrZV0saVsic2Nyb2xsIitlXSx0LmJvZHlbIm9mZnNldCIrZV0saVsib2Zmc2V0IitlXSxpWyJjbGllbnQiK2VdKSk6cj09PXVuZGVmaW5lZD94LmNzcyh0LG4scyk6eC5zdHlsZSh0LG4scixzKX0sdCxvP3I6dW5kZWZpbmVkLG8sbnVsbCl9fSl9KSx4LmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHguZm4uYW5kU2VsZj14LmZuLmFkZEJhY2ssIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz14OiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiB4fSksIm9iamVjdCI9PXR5cGVvZiBlJiYib2JqZWN0Ij09dHlwZW9mIGUuZG9jdW1lbnQmJihlLmpRdWVyeT1lLiQ9eCl9KSh3aW5kb3cpOwogICAgICAgIGxvZygnVXNpbmcgaW5saW5lIGpRdWVyeScpCiAgICB9IGVsc2UgewogICAgICAgIGxvZygnVXNpbmcgQHJlcXVpcmUgalF1ZXJ5JykKICAgIH0KCiAgICAvLyBHZW5lcmljIGZ1bmN0aW9ucwoKICAgIC8vIEF2b2lkcyBjb25mbGljdHMgd2hlbiB0aGUgbWFpbiBwYWdlIGlzIGFsc28gdXNpbmcgalF1ZXJ5IG9yIGFub3RoZXIgbGlicmFyeSB1c2luZyAnJCcKICAgIC8vIHRoaXMuJCA9IHRoaXMualF1ZXJ5ID0galF1ZXJ5Lm5vQ29uZmxpY3QodHJ1ZSk7CiAgICAvLyAtLT4gSW5zdGVhZCBJIHVzZSBAZ3JhbnQgR01fYWRkU3R5bGUgd2hpY2ggcmVzdG9yZXMgdGhlIHNhbmRib3ggYW5kIHRodXMgYXZvaWQgdXMgdGhpcyB0cmljawoKICAgIC8vIFRoaXMgalF1ZXJ5IHBsdWdpbiB3aWxsIGdhdGhlciB0aGUgY29tbWVudHMgd2l0aGluCiAgICAvLyB0aGUgY3VycmVudCBqUXVlcnkgY29sbGVjdGlvbiwgcmV0dXJuaW5nIGFsbCB0aGUKICAgIC8vIGNvbW1lbnRzIGluIGEgbmV3IGpRdWVyeSBjb2xsZWN0aW9uLgogICAgLy8KICAgIC8vIE5PVEU6IENvbW1lbnRzIGFyZSB3cmFwcGVkIGluIERJViB0YWdzLgoKICAgIGpRdWVyeS5mbi5jb21tZW50cyA9IGZ1bmN0aW9uIChibG5EZWVwKSB7CiAgICAgICAgdmFyIGJsbkRlZXAgPSAoYmxuRGVlcCB8fCBmYWxzZSk7CiAgICAgICAgdmFyIGpDb21tZW50cyA9ICQoW10pOwoKICAgICAgICAvLyBMb29wIG92ZXIgZWFjaCBub2RlIHRvIHNlYXJjaCBpdHMgY2hpbGRyZW4gZm9yCiAgICAgICAgLy8gY29tbWVudCBub2RlcyBhbmQgZWxlbWVudCBub2RlcyAoaWYgZGVlcCBzZWFyY2gpLgogICAgICAgIHRoaXMuZWFjaCgKICAgICAgICAgICAgZnVuY3Rpb24gKGludEksIG9iak5vZGUpIHsKICAgICAgICAgICAgICAgIHZhciBvYmpDaGlsZE5vZGUgPSBvYmpOb2RlLmZpcnN0Q2hpbGQ7CiAgICAgICAgICAgICAgICB2YXIgc3RyUGFyZW50SUQgPSAkKHRoaXMpLmF0dHIoImlkIik7CgogICAgICAgICAgICAgICAgLy8gS2VlcCBsb29waW5nIG92ZXIgdGhlIHRvcC1sZXZlbCBjaGlsZHJlbgogICAgICAgICAgICAgICAgLy8gd2hpbGUgd2UgaGF2ZSBhIG5vZGUgdG8gZXhhbWluZS4KICAgICAgICAgICAgICAgIHdoaWxlIChvYmpDaGlsZE5vZGUpIHsKCiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgbm9kZSBpcyBhIGNvbW1lbnQuCiAgICAgICAgICAgICAgICAgICAgaWYgKG9iakNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gOCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBjb21tZW50IG5vZGUuIEFkZCBpdCB0bwogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbm9kZXMgY29sbGVjdGlvbiB3cmFwcGVkIGluIGEKICAgICAgICAgICAgICAgICAgICAgICAgLy8gRElWIChhcyB3ZSBtYXkgaGF2ZSBIVE1MKS4KICAgICAgICAgICAgICAgICAgICAgICAgakNvbW1lbnRzID0gakNvbW1lbnRzLmFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8ZGl2IHJlbD0nIiArIHN0clBhcmVudElEICsgIic+IiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpDaGlsZE5vZGUubm9kZVZhbHVlICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8L2Rpdj4iCiAgICAgICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgIGJsbkRlZXAgJiYKICAgICAgICAgICAgICAgICAgICAgICAgKG9iakNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gMSkKICAgICAgICAgICAgICAgICAgICApIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyYXZlcnNlIHRoaXMgbm9kZSBkZWVwbHkuCiAgICAgICAgICAgICAgICAgICAgICAgIGpDb21tZW50cyA9IGpDb21tZW50cy5hZGQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG9iakNoaWxkTm9kZSkuY29tbWVudHModHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNpYmxpbmcuCiAgICAgICAgICAgICAgICAgICAgb2JqQ2hpbGROb2RlID0gb2JqQ2hpbGROb2RlLm5leHRTaWJsaW5nOwoKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICAvLyBSZXR1cm4gdGhlIGpRdWVyeSBjb21tZW50cyBjb2xsZWN0aW9uLgogICAgICAgIHJldHVybiAoakNvbW1lbnRzKTsKICAgIH0KCiAgICAvLyBUZXN0cyBpZiBhIHN0cmluZyBpcyBwYXJ0IG9mIGFub3RoZXIgb25lLgogICAgU3RyaW5nLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh0ZXN0U3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXhPZih0ZXN0U3RyaW5nKSAhPSAtMQogICAgfQoKICAgIC8vIEFsbG93cyB0byByZW1vdmUgYSBzdWJzdHJpbmcgZnJvbSBhIHN0cmluZyBldmVuIHdoZW4gcHJlc2VudCBtdWx0aXBsZSB0aW1lcwogICAgU3RyaW5nLnByb3RvdHlwZS5yZW1vdmVBbGwgPSBmdW5jdGlvbiAodGVzdFN0cmluZykgewogICAgICAgIHZhciByZXRTdHJpbmcgPSB0aGlzOwogICAgICAgIHdoaWxlICgoY3VyckluZGV4ID0gcmV0U3RyaW5nLmluZGV4T2YodGVzdFN0cmluZykpICE9IC0xKSB7CiAgICAgICAgICAgIHJldFN0cmluZyA9IHJldFN0cmluZy5yZW1vdmVPbmNlKHRlc3RTdHJpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0U3RyaW5nCiAgICB9CgogICAgLy8gQWxsb3dzIHRvIHJlbW92ZSBhIHN1YnN0cmluZyBmcm9tIGEgc3RyaW5nIG9uZSB0aW1lLgogICAgU3RyaW5nLnByb3RvdHlwZS5yZW1vdmVPbmNlID0gZnVuY3Rpb24gKHRlc3RTdHJpbmcpIHsKICAgICAgICB2YXIgY3VyckluZGV4ID0gdGhpcy5pbmRleE9mKHRlc3RTdHJpbmcpCiAgICAgICAgaWYgKGN1cnJJbmRleCAhPSAtMSkgcmV0dXJuIHRoaXMuc3Vic3RyaW5nKDAsIGN1cnJJbmRleCkgKyB0aGlzLnN1YnN0cmluZyhjdXJySW5kZXggKyB0ZXN0U3RyaW5nLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcwogICAgfQoKICAgIC8vIEdlbmVyaWMgbG9nIGZ1bmN0aW9uCiAgICBmdW5jdGlvbiBsb2coc3RyaW5nKSB7CiAgICAgICAgaWYgKG9fZGVidWcpIGNvbnNvbGUubG9nKHN0cmluZykKICAgIH0KCiAgICAvLyBDaGVjayBpZiBhIEpRb2JqZWN0IGlzIHZhbGlkCiAgICBmdW5jdGlvbiBleGlzdHMoSlFvYmplY3QpIHsKICAgICAgICByZXR1cm4gKEpRb2JqZWN0Lmxlbmd0aCAhPSAwKQogICAgfQoKICAgIC8vIENoZWNrIGlmIGFuIGlucHV0IGNoZWNrYm94IGlzIGNoZWNrZWQKICAgIGZ1bmN0aW9uIGlzQ2hlY2tlZChKUW9iamVjdCkgewogICAgICAgIHJldHVybiBKUW9iamVjdC5wcm9wKCJjaGVja2VkIikKICAgIH0KCiAgICAvLyBVbmNoZWNrIGFuIGlucHV0IGNoZWNrYm94CiAgICBmdW5jdGlvbiB1bmNoZWNrKEpRb2JqZWN0KSB7CiAgICAgICAgaWYgKCFleGlzdHMoSlFvYmplY3QpKSByZXR1cm4gZmFsc2UKICAgICAgICBpZiAoaXNDaGVja2VkKEpRb2JqZWN0KSkgSlFvYmplY3QuY2xpY2soKQogICAgICAgIC8vIFRoZSBvYmplY3QgZXhpc3RzLCB3ZSBoYXZlIHVuY2hlY2tlZCBpdCBpZiBpdCB3YXMgY2hlY2tlZAogICAgICAgIHJldHVybiB0cnVlCiAgICB9CgogICAgLy8gSGlkZSBhbiBlbGVtZW50IChkb2Vzbid0IGRlbGV0ZSBpdCkKICAgIGZ1bmN0aW9uIGhpZGUoSlFvYmplY3QpIHsKICAgICAgICBpZiAoIWV4aXN0cyhKUW9iamVjdCkpIHJldHVybiBmYWxzZQogICAgICAgIEpRb2JqZWN0LmF0dHIoInN0eWxlIiwgImRpc3BsYXkgOiBub25lICFpbXBvcnRhbnQiKQogICAgICAgIHJldHVybiB0cnVlCiAgICB9CgogICAgLy8gRm9yY2UgYW4gZWxlbWVudCB0byBzaG93CiAgICBmdW5jdGlvbiBzaG93KEpRb2JqZWN0KSB7CiAgICAgICAgaWYgKCFleGlzdHMoSlFvYmplY3QpKSByZXR1cm4gZmFsc2UKCiAgICAgICAgLy8gRklYTUU6IGF2b2lkIHRvIGJsaW5kbHkgc2V0IHRoZSBkaXNwbGF5IHRvIGJsb2NrIChjYW4gYmUgaW5saW5lIHRvbykKICAgICAgICBKUW9iamVjdC5hdHRyKCJzdHlsZSIsICJkaXNwbGF5IDogYmxvY2sgIWltcG9ydGFudCIpCiAgICAgICAgcmV0dXJuIHRydWUKICAgIH0KCiAgICBmb3IgKHZhciBpIGluIGFkd2FyZVJ1bGVzKSB7CiAgICAgICAgLy8gQ3JlYXRlIGEgUmVnRXhwIHRvIHRlc3QgaWYgd2UgYXJlIG9uIHRoaXMgZG9tYWluCiAgICAgICAgdmFyIHRlc3RIb3N0cyA9IG5ldyBSZWdFeHAoYWR3YXJlUnVsZXNbaV0uaG9zdC5qb2luKCd8JyksICdpJykKICAgICAgICAvLyBJZiB3ZSBhcmUgb24gb25lIG9mIHRoZSBkb21haW5zCiAgICAgICAgaWYgKHRlc3RIb3N0cy50ZXN0KGRvY3VtZW50LmRvbWFpbikpIHsKICAgICAgICAgICAgdmFyIGN1cnJSdWxlID0gYWR3YXJlUnVsZXNbaV0KICAgICAgICAgICAgYnJlYWsKICAgICAgICB9CiAgICB9CgogICAgaWYgKHR5cGVvZiBjdXJyUnVsZSA9PSAidW5kZWZpbmVkIikgcmV0dXJuCgogICAgdmFyIGFwcGx5UnVsZXMgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgbG9nKCdUcnlpbmcgdG8gZXhlY3V0ZSBjdXN0b20gZnVuY3Rpb246ICcgKyBjdXJyUnVsZS5leGVjKQogICAgICAgIGlmIChjdXJyUnVsZS5leGVjICE9IHVuZGVmaW5lZCkgY3VyclJ1bGUuZXhlYygpOwogICAgICAgIGxvZygiSXRlcmF0aW5nIHRocm91Z2ggdW5jaGVja3MiKQoKICAgICAgICAvLyBJZiB0aGVyZSBpcyBzb21ldGhpbmcgdG8gdW5jaGVjawogICAgICAgIGlmIChjdXJyUnVsZS51bmNoZWNrICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAvLyBJdGVyYXRlIGVhY2ggY2hlY2tib3ggdG8gdW5jaGVjayBpdAogICAgICAgICAgICAkLmVhY2goY3VyclJ1bGUudW5jaGVjaywgZnVuY3Rpb24gKGtleSwgY3VyclVuY2hlY2spIHsKICAgICAgICAgICAgICAgIGxvZygiVHJ5aW5nIHRvIHVuY2hlY2sgWyIgKyBrZXkgKyAnXScgKyBjdXJyVW5jaGVjaykKICAgICAgICAgICAgICAgIC8vIENvbnN0YW50bHkgdHJ5aW5nIHRvIHVuY2hlY2sgdGhlIGNoZWNrYm94CiAgICAgICAgICAgICAgICBpZiAoY3VyclJ1bGUub3B0dW5jaGVjayAhPSB1bmRlZmluZWQgJiYgY3VyclJ1bGUub3B0dW5jaGVjay5jb25zdGFudGNoZWNrID09IHRydWUpIHsKICAgICAgICAgICAgICAgICAgICB1bmNoZWNrKCQoY3VyclVuY2hlY2spKQogICAgICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY0hpZGUgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuY2hlY2sgaXQKICAgICAgICAgICAgICAgICAgICAgICAgdW5jaGVjaygkKGN1cnJVbmNoZWNrKSkKICAgICAgICAgICAgICAgICAgICB9LCAxMDApCiAgICAgICAgICAgICAgICAgICAgLy8gT25seSB1bmNoZWNraW5nIGl0IG9uY2UKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNoZWNrYm94IHdhcyBzdWNjZXNzZnVsbHkgdW5jaGVja2VkCiAgICAgICAgICAgICAgICAgICAgaWYgKHVuY2hlY2soJChjdXJyVW5jaGVjaykpKSByZXR1cm4KICAgICAgICAgICAgICAgICAgICBsb2coIkNvdWxkbid0IHVuY2hlY2sgdGhlIGNoZWNrYm94IikKICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdG8gdW5jaGVjayBpdCBsYXRlcgogICAgICAgICAgICAgICAgICAgIHZhciBwZXJpb2RpY1VuY2hlY2sgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB1bmNoZWNrIHN1Y2NlZWRlZCB0aGlzIHRpbWUsIHdlIHN0b3AgdGhlIHVuY2hlY2tpbmcKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuY2hlY2soJChjdXJyVW5jaGVjaykpKSBjbGVhckludGVydmFsKHBlcmlvZGljVW5jaGVjaykKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjb250aW51ZSB0byBjaGVjawogICAgICAgICAgICAgICAgICAgIH0sIDEwMCkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZXJlIGlzIHNvbWV0aGluZyB0byBoaWRlCiAgICAgICAgaWYgKGN1cnJSdWxlLmhpZGUgIT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIC8vIEl0ZXJhdGUgZWFjaCBoaWRlIHRvIGhpZGUgaXQKICAgICAgICAgICAgJC5lYWNoKGN1cnJSdWxlLmhpZGUsIGZ1bmN0aW9uIChrZXksIGN1cnJIaWRlKSB7CiAgICAgICAgICAgICAgICBsb2coIlRyeWluZyB0byBoaWRlICIgKyBjdXJySGlkZSkKICAgICAgICAgICAgICAgIC8vIElmIHdlIHRyeSB0byBjb250aW51ZSBoaWRpbmcgaXQgZXZlbiBpZiB0aGUgaGlkaW5nIHdhcyBhbHJlYWR5IHN1Y2Nlc3NmdWwKICAgICAgICAgICAgICAgIGlmIChjdXJyUnVsZS5vcHRoaWRlICE9IHVuZGVmaW5lZCAmJiBjdXJyUnVsZS5vcHRoaWRlLmNvbnN0YW50Y2hlY2sgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIGhpZGUoJChjdXJySGlkZSkpCiAgICAgICAgICAgICAgICAgICAgdmFyIHBlcmlvZGljSGlkZSA9IHNldEludGVydmFsKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSBpdAogICAgICAgICAgICAgICAgICAgICAgICBoaWRlKCQoY3VyckhpZGUpKQogICAgICAgICAgICAgICAgICAgIH0sIDEwMCkKICAgICAgICAgICAgICAgICAgICAvLyBIaWRlIGl0IG9uY2UsIHRoZW4gc3RvcCB0cnlpbmcgdG8gaGlkZSBpdCAodXN1YWwgY2FzZSwgaXQgc3RheXMgaGlkZGVuKQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IHRvIGhpZGUgd2FzIGhpZGRlbgogICAgICAgICAgICAgICAgICAgIGlmIChoaWRlKCQoY3VyckhpZGUpKSkgcmV0dXJuCiAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGhpZGUgaXQgbGF0ZXIKICAgICAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNIaWRlID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgaGlkZSBzdWNjZWVkZWQgdGhpcyB0aW1lLCB3ZSBzdG9wIHRvIHRyeSBoaWRpbmcgaXQKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZGUoJChjdXJySGlkZSkpKSBjbGVhckludGVydmFsKHBlcmlvZGljSGlkZSkKICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjb250aW51ZSB0byB0cnkgaGlkaW5nIGl0CiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KQogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHNob3cKICAgICAgICBpZiAoY3VyclJ1bGUuc2hvdyAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgLy8gSXRlcmF0ZSBlYWNoIHNob3cgdG8gc2hvdyBpdAogICAgICAgICAgICAkLmVhY2goY3VyclJ1bGUuc2hvdywgZnVuY3Rpb24gKGtleSwgY3VyclNob3cpIHsKICAgICAgICAgICAgICAgIGxvZygiVHJ5aW5nIHRvIHNob3cgIiArIGN1cnJTaG93KQoKICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgdG8gc2hvdyB3YXMgc3VjY2Vzc2Z1bGx5IHNob3duCiAgICAgICAgICAgICAgICBpZiAoc2hvdygkKGN1cnJTaG93KSkpIHJldHVybgoKICAgICAgICAgICAgICAgIC8vIFRyeSB0byBzaG93IGl0IGxhdGVyCiAgICAgICAgICAgICAgICB2YXIgcGVyaW9kaWNTaG93ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHNob3coJChjdXJyU2hvdykpCiAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHNob3cgc3VjY2VlZGVkIHRoaXMgdGltZSwgd2Ugc3RvcCB0byB0cnkgc2hvd2luZyBpdAogICAgICAgICAgICAgICAgICAgIGlmIChzaG93KCQoY3VyclNob3cpKSkgY2xlYXJJbnRlcnZhbChwZXJpb2RpY1Nob3cpCiAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBjb250aW51ZSB0byB0cnkgc2hvd2luZyBpdAogICAgICAgICAgICAgICAgfSwgMTAwKQogICAgICAgICAgICB9KQogICAgICAgIH0KICAgIH0KCiAgICAvLyBHb29nbGUgQ2hyb21lIHRyaWNrOiBzb21ldGltZXMgdGhlIHNjcmlwdCBpcyBleGVjdXRlZCBhZnRlciB0aGF0IERPTUNvbnRlbnRMb2FkZWQgd2FzIHRyaWdnZXJlZCwgaW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHJ1biBvdXIgY29kZQogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT0gImNvbXBsZXRlIikgewogICAgICAgIGFwcGx5UnVsZXMoKQogICAgICAgIGxvZygiRGlyZWN0bHkgYXBwbHlpbmcgcnVsZXMiKQogICAgfSBlbHNlIHsKICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGFwcGx5UnVsZXMpCiAgICAgICAgbG9nKCJXYWl0aW5nIGZvciBET01Db250ZW50TG9hZGVkIHRvIGFwcGx5IHJ1bGVzIikKICAgIH0KfSgpCg==","requires":[{"meta":{"name":"jquery-2.0.3.min.js","url":"http://code.jquery.com/jquery-2.0.3.min.js","ts":1649414356838,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2Mi4wLjMgfCAoYykgMjAwNSwgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiwgSW5jLiB8IGpxdWVyeS5vcmcvbGljZW5zZQovL0Agc291cmNlTWFwcGluZ1VSTD1qcXVlcnktMi4wLjMubWluLm1hcAoqLwooZnVuY3Rpb24oZSx1bmRlZmluZWQpe3ZhciB0LG4scj10eXBlb2YgdW5kZWZpbmVkLGk9ZS5sb2NhdGlvbixvPWUuZG9jdW1lbnQscz1vLmRvY3VtZW50RWxlbWVudCxhPWUualF1ZXJ5LHU9ZS4kLGw9e30sYz1bXSxwPSIyLjAuMyIsZj1jLmNvbmNhdCxoPWMucHVzaCxkPWMuc2xpY2UsZz1jLmluZGV4T2YsbT1sLnRvU3RyaW5nLHk9bC5oYXNPd25Qcm9wZXJ0eSx2PXAudHJpbSx4PWZ1bmN0aW9uKGUsbil7cmV0dXJuIG5ldyB4LmZuLmluaXQoZSxuLHQpfSxiPS9bKy1dPyg/OlxkKlwufClcZCsoPzpbZUVdWystXT9cZCt8KS8uc291cmNlLHc9L1xTKy9nLFQ9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxDPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPnwpJC8saz0vXi1tcy0vLE49Ly0oW1xkYS16XSkvZ2ksRT1mdW5jdGlvbihlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9LFM9ZnVuY3Rpb24oKXtvLnJlbW92ZUV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLFMsITEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsUywhMSkseC5yZWFkeSgpfTt4LmZuPXgucHJvdG90eXBlPXtqcXVlcnk6cCxjb25zdHJ1Y3Rvcjp4LGluaXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoIWUpcmV0dXJuIHRoaXM7aWYoInN0cmluZyI9PXR5cGVvZiBlKXtpZihyPSI8Ij09PWUuY2hhckF0KDApJiYiPiI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpULmV4ZWMoZSksIXJ8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2YgeD90WzBdOnQseC5tZXJnZSh0aGlzLHgucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6bywhMCkpLEMudGVzdChyWzFdKSYmeC5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpeC5pc0Z1bmN0aW9uKHRoaXNbcl0pP3RoaXNbcl0odFtyXSk6dGhpcy5hdHRyKHIsdFtyXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGk9by5nZXRFbGVtZW50QnlJZChyWzJdKSxpJiZpLnBhcmVudE5vZGUmJih0aGlzLmxlbmd0aD0xLHRoaXNbMF09aSksdGhpcy5jb250ZXh0PW8sdGhpcy5zZWxlY3Rvcj1lLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXMuY29udGV4dD10aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTp4LmlzRnVuY3Rpb24oZSk/bi5yZWFkeShlKTooZS5zZWxlY3RvciE9PXVuZGVmaW5lZCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx4Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBkLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90aGlzLnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4geC5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh4Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0seC5mbi5pbml0LnByb3RvdHlwZT14LmZuLHguZXh0ZW5kPXguZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLHM9YXJndW1lbnRzWzBdfHx7fSxhPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihsPXMscz1hcmd1bWVudHNbMV18fHt9LGE9MiksIm9iamVjdCI9PXR5cGVvZiBzfHx4LmlzRnVuY3Rpb24ocyl8fChzPXt9KSx1PT09YSYmKHM9dGhpcywtLWEpO3U+YTthKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW2FdKSlmb3IodCBpbiBlKW49c1t0XSxyPWVbdF0scyE9PXImJihsJiZyJiYoeC5pc1BsYWluT2JqZWN0KHIpfHwoaT14LmlzQXJyYXkocikpKT8oaT8oaT0hMSxvPW4mJnguaXNBcnJheShuKT9uOltdKTpvPW4mJnguaXNQbGFpbk9iamVjdChuKT9uOnt9LHNbdF09eC5leHRlbmQobCxvLHIpKTpyIT09dW5kZWZpbmVkJiYoc1t0XT1yKSk7cmV0dXJuIHN9LHguZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhwK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLG5vQ29uZmxpY3Q6ZnVuY3Rpb24odCl7cmV0dXJuIGUuJD09PXgmJihlLiQ9dSksdCYmZS5qUXVlcnk9PT14JiYoZS5qUXVlcnk9YSkseH0saXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxob2xkUmVhZHk6ZnVuY3Rpb24oZSl7ZT94LnJlYWR5V2FpdCsrOngucmVhZHkoITApfSxyZWFkeTpmdW5jdGlvbihlKXsoZT09PSEwPy0teC5yZWFkeVdhaXQ6eC5pc1JlYWR5KXx8KHguaXNSZWFkeT0hMCxlIT09ITAmJi0teC5yZWFkeVdhaXQ+MHx8KG4ucmVzb2x2ZVdpdGgobyxbeF0pLHguZm4udHJpZ2dlciYmeChvKS50cmlnZ2VyKCJyZWFkeSIpLm9mZigicmVhZHkiKSkpfSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PT14LnR5cGUoZSl9LGlzQXJyYXk6QXJyYXkuaXNBcnJheSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09PWUud2luZG93fSxpc051bWVyaWM6ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoZSkpJiZpc0Zpbml0ZShlKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9lKyIiOiJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGU/bFttLmNhbGwoZSldfHwib2JqZWN0Ijp0eXBlb2YgZX0saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXtpZigib2JqZWN0IiE9PXgudHlwZShlKXx8ZS5ub2RlVHlwZXx8eC5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXkuY2FsbChlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwiaXNQcm90b3R5cGVPZiIpKXJldHVybiExfWNhdGNoKHQpe3JldHVybiExfXJldHVybiEwfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IEVycm9yKGUpfSxwYXJzZUhUTUw6ZnVuY3Rpb24oZSx0LG4pe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7ImJvb2xlYW4iPT10eXBlb2YgdCYmKG49dCx0PSExKSx0PXR8fG87dmFyIHI9Qy5leGVjKGUpLGk9IW4mJltdO3JldHVybiByP1t0LmNyZWF0ZUVsZW1lbnQoclsxXSldOihyPXguYnVpbGRGcmFnbWVudChbZV0sdCxpKSxpJiZ4KGkpLnJlbW92ZSgpLHgubWVyZ2UoW10sci5jaGlsZE5vZGVzKSl9LHBhcnNlSlNPTjpKU09OLnBhcnNlLHBhcnNlWE1MOmZ1bmN0aW9uKGUpe3ZhciB0LG47aWYoIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7bj1uZXcgRE9NUGFyc2VyLHQ9bi5wYXJzZUZyb21TdHJpbmcoZSwidGV4dC94bWwiKX1jYXRjaChyKXt0PXVuZGVmaW5lZH1yZXR1cm4oIXR8fHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmeC5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbihlKXt2YXIgdCxuPWV2YWw7ZT14LnRyaW0oZSksZSYmKDE9PT1lLmluZGV4T2YoInVzZSBzdHJpY3QiKT8odD1vLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLHQudGV4dD1lLG8uaGVhZC5hcHBlbmRDaGlsZCh0KS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpKTpuKGUpKX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaywibXMtIikucmVwbGFjZShOLEUpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLHM9aihlKTtpZihuKXtpZihzKXtmb3IoO28+aTtpKyspaWYocj10LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBpZihzKXtmb3IoO28+aTtpKyspaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjp2LmNhbGwoZSl9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYoaihPYmplY3QoZSkpP3gubWVyZ2Uobiwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOmguY2FsbChuLGUpKSxufSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTpnLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoLHI9ZS5sZW5ndGgsaT0wO2lmKCJudW1iZXIiPT10eXBlb2Ygbilmb3IoO24+aTtpKyspZVtyKytdPXRbaV07ZWxzZSB3aGlsZSh0W2ldIT09dW5kZWZpbmVkKWVbcisrXT10W2krK107cmV0dXJuIGUubGVuZ3RoPXIsZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT1bXSxvPTAscz1lLmxlbmd0aDtmb3Iobj0hIW47cz5vO28rKylyPSEhdChlW29dLG8pLG4hPT1yJiZpLnB1c2goZVtvXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT0wLG89ZS5sZW5ndGgscz1qKGUpLGE9W107aWYocylmb3IoO28+aTtpKyspcj10KGVbaV0saSxuKSxudWxsIT1yJiYoYVthLmxlbmd0aF09cik7ZWxzZSBmb3IoaSBpbiBlKXI9dChlW2ldLGksbiksbnVsbCE9ciYmKGFbYS5sZW5ndGhdPXIpO3JldHVybiBmLmFwcGx5KFtdLGEpfSxndWlkOjEscHJveHk6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYobj1lW3RdLHQ9ZSxlPW4pLHguaXNGdW5jdGlvbihlKT8ocj1kLmNhbGwoYXJndW1lbnRzLDIpLGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KGQuY2FsbChhcmd1bWVudHMpKSl9LGkuZ3VpZD1lLmd1aWQ9ZS5ndWlkfHx4Lmd1aWQrKyxpKTp1bmRlZmluZWR9LGFjY2VzczpmdW5jdGlvbihlLHQsbixyLGksbyxzKXt2YXIgYT0wLHU9ZS5sZW5ndGgsbD1udWxsPT1uO2lmKCJvYmplY3QiPT09eC50eXBlKG4pKXtpPSEwO2ZvcihhIGluIG4peC5hY2Nlc3MoZSx0LGEsblthXSwhMCxvLHMpfWVsc2UgaWYociE9PXVuZGVmaW5lZCYmKGk9ITAseC5pc0Z1bmN0aW9uKHIpfHwocz0hMCksbCYmKHM/KHQuY2FsbChlLHIpLHQ9bnVsbCk6KGw9dCx0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbC5jYWxsKHgoZSksbil9KSksdCkpZm9yKDt1PmE7YSsrKXQoZVthXSxuLHM/cjpyLmNhbGwoZVthXSxhLHQoZVthXSxuKSkpO3JldHVybiBpP2U6bD90LmNhbGwoZSk6dT90KGVbMF0sbik6b30sbm93OkRhdGUubm93LHN3YXA6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzPXt9O2ZvcihvIGluIHQpc1tvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPXNbb107cmV0dXJuIGl9fSkseC5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKHQpe3JldHVybiBufHwobj14LkRlZmVycmVkKCksImNvbXBsZXRlIj09PW8ucmVhZHlTdGF0ZT9zZXRUaW1lb3V0KHgucmVhZHkpOihvLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLFMsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsUywhMSkpKSxuLnByb21pc2UodCl9LHguZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2xbIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7ZnVuY3Rpb24gaihlKXt2YXIgdD1lLmxlbmd0aCxuPXgudHlwZShlKTtyZXR1cm4geC5pc1dpbmRvdyhlKT8hMToxPT09ZS5ub2RlVHlwZSYmdD8hMDoiYXJyYXkiPT09bnx8ImZ1bmN0aW9uIiE9PW4mJigwPT09dHx8Im51bWJlciI9PXR5cGVvZiB0JiZ0PjAmJnQtMSBpbiBlKX10PXgobyksZnVuY3Rpb24oZSx1bmRlZmluZWQpe3ZhciB0LG4scixpLG8scyxhLHUsbCxjLHAsZixoLGQsZyxtLHksdj0ic2l6emxlIistbmV3IERhdGUsYj1lLmRvY3VtZW50LHc9MCxUPTAsQz1zdCgpLGs9c3QoKSxOPXN0KCksRT0hMSxTPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PyhFPSEwLDApOjB9LGo9dHlwZW9mIHVuZGVmaW5lZCxEPTE8PDMxLEE9e30uaGFzT3duUHJvcGVydHksTD1bXSxxPUwucG9wLEg9TC5wdXNoLE89TC5wdXNoLEY9TC5zbGljZSxQPUwuaW5kZXhPZnx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3RoO2Zvcig7bj50O3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sUj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLFc9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIiwkPVcucmVwbGFjZSgidyIsIncjIiksQj0iXFxbIitNKyIqKCIrVysiKSIrTSsiKig/OihbKl4kfCF+XT89KSIrTSsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrJCsiKXwpfCkiK00rIipcXF0iLEk9IjooIitXKyIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitCLnJlcGxhY2UoMyw4KSsiKSopfC4qKVxcKXwpIix6PVJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxfPVJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSxYPVJlZ0V4cCgiXiIrTSsiKihbPit+XXwiK00rIikiK00rIioiKSxVPVJlZ0V4cChNKyIqWyt+XSIpLFk9UmVnRXhwKCI9IitNKyIqKFteXFxdJ1wiXSopIitNKyIqXFxdIiwiZyIpLFY9UmVnRXhwKEkpLEc9UmVnRXhwKCJeIiskKyIkIiksSj17SUQ6UmVnRXhwKCJeIygiK1crIikiKSxDTEFTUzpSZWdFeHAoIl5cXC4oIitXKyIpIiksVEFHOlJlZ0V4cCgiXigiK1cucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOlJlZ0V4cCgiXiIrQiksUFNFVURPOlJlZ0V4cCgiXiIrSSksQ0hJTEQ6UmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK00rIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK00rIiooPzooWystXXwpIitNKyIqKFxcZCspfCkpIitNKyIqXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4iK00rIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrTSsiKigoPzotXFxkKT9cXGQqKSIrTSsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sUT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sSz0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLFo9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxldD0vXmhcZCQvaSx0dD0vJ3xcXC9nLG50PVJlZ0V4cCgiXFxcXChbXFxkYS1mXXsxLDZ9IitNKyI/fCgiK00rIil8LikiLCJpZyIpLHJ0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iMHgiK3QtNjU1MzY7cmV0dXJuIHIhPT1yfHxuP3Q6MD5yP1N0cmluZy5mcm9tQ2hhckNvZGUocis2NTUzNik6U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxyPj4xMCw1NjMyMHwxMDIzJnIpfTt0cnl7Ty5hcHBseShMPUYuY2FsbChiLmNoaWxkTm9kZXMpLGIuY2hpbGROb2RlcyksTFtiLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChpdCl7Tz17YXBwbHk6TC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtILmFwcGx5KGUsRi5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb3QoZSx0LHIsaSl7dmFyIG8scyxhLHUsbCxmLGcsbSx4LHc7aWYoKHQ/dC5vd25lckRvY3VtZW50fHx0OmIpIT09cCYmYyh0KSx0PXR8fHAscj1yfHxbXSwhZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiByO2lmKDEhPT0odT10Lm5vZGVUeXBlKSYmOSE9PXUpcmV0dXJuW107aWYoaCYmIWkpe2lmKG89Sy5leGVjKGUpKWlmKGE9b1sxXSl7aWYoOT09PXUpe2lmKHM9dC5nZXRFbGVtZW50QnlJZChhKSwhc3x8IXMucGFyZW50Tm9kZSlyZXR1cm4gcjtpZihzLmlkPT09YSlyZXR1cm4gci5wdXNoKHMpLHJ9ZWxzZSBpZih0Lm93bmVyRG9jdW1lbnQmJihzPXQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKSkmJnkodCxzKSYmcy5pZD09PWEpcmV0dXJuIHIucHVzaChzKSxyfWVsc2V7aWYob1syXSlyZXR1cm4gTy5hcHBseShyLHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLHI7aWYoKGE9b1szXSkmJm4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBPLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGEpKSxyfWlmKG4ucXNhJiYoIWR8fCFkLnRlc3QoZSkpKXtpZihtPWc9dix4PXQsdz05PT09dSYmZSwxPT09dSYmIm9iamVjdCIhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Y9Z3QoZSksKGc9dC5nZXRBdHRyaWJ1dGUoImlkIikpP209Zy5yZXBsYWNlKHR0LCJcXCQmIik6dC5zZXRBdHRyaWJ1dGUoImlkIixtKSxtPSJbaWQ9JyIrbSsiJ10gIixsPWYubGVuZ3RoO3doaWxlKGwtLSlmW2xdPW0rbXQoZltsXSk7eD1VLnRlc3QoZSkmJnQucGFyZW50Tm9kZXx8dCx3PWYuam9pbigiLCIpfWlmKHcpdHJ5e3JldHVybiBPLmFwcGx5KHIseC5xdWVyeVNlbGVjdG9yQWxsKHcpKSxyfWNhdGNoKFQpe31maW5hbGx5e2d8fHQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGt0KGUucmVwbGFjZSh6LCIkMSIpLHQscixpKX1mdW5jdGlvbiBzdCgpe3ZhciBlPVtdO2Z1bmN0aW9uIHQobixyKXtyZXR1cm4gZS5wdXNoKG4rPSIgIik+aS5jYWNoZUxlbmd0aCYmZGVsZXRlIHRbZS5zaGlmdCgpXSx0W25dPXJ9cmV0dXJuIHR9ZnVuY3Rpb24gYXQoZSl7cmV0dXJuIGVbdl09ITAsZX1mdW5jdGlvbiB1dChlKXt2YXIgdD1wLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3RyeXtyZXR1cm4hIWUodCl9Y2F0Y2gobil7cmV0dXJuITF9ZmluYWxseXt0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSx0PW51bGx9fWZ1bmN0aW9uIGx0KGUsdCl7dmFyIG49ZS5zcGxpdCgifCIpLHI9ZS5sZW5ndGg7d2hpbGUoci0tKWkuYXR0ckhhbmRsZVtuW3JdXT10fWZ1bmN0aW9uIGN0KGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmKH50LnNvdXJjZUluZGV4fHxEKS0ofmUuc291cmNlSW5kZXh8fEQpO2lmKHIpcmV0dXJuIHI7aWYobil3aGlsZShuPW4ubmV4dFNpYmxpbmcpaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBwdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1uJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09bnx8ImJ1dHRvbiI9PT1uKSYmdC50eXBlPT09ZX19ZnVuY3Rpb24gaHQoZSl7cmV0dXJuIGF0KGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0LGF0KGZ1bmN0aW9uKG4scil7dmFyIGksbz1lKFtdLG4ubGVuZ3RoLHQpLHM9by5sZW5ndGg7d2hpbGUocy0tKW5baT1vW3NdXSYmKG5baV09IShyW2ldPW5baV0pKX0pfSl9cz1vdC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIHQ/IkhUTUwiIT09dC5ub2RlTmFtZTohMX0sbj1vdC5zdXBwb3J0PXt9LGM9b3Quc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZT9lLm93bmVyRG9jdW1lbnR8fGU6YixyPXQuZGVmYXVsdFZpZXc7cmV0dXJuIHQhPT1wJiY5PT09dC5ub2RlVHlwZSYmdC5kb2N1bWVudEVsZW1lbnQ/KHA9dCxmPXQuZG9jdW1lbnRFbGVtZW50LGg9IXModCksciYmci5hdHRhY2hFdmVudCYmciE9PXIudG9wJiZyLmF0dGFjaEV2ZW50KCJvbmJlZm9yZXVubG9hZCIsZnVuY3Rpb24oKXtjKCl9KSxuLmF0dHJpYnV0ZXM9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksbi5nZXRFbGVtZW50c0J5VGFnTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZCh0LmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLG4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT11dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2EnPjwvZGl2PjxkaXYgY2xhc3M9J2EgaSc+PC9kaXY+IixlLmZpcnN0Q2hpbGQuY2xhc3NOYW1lPSJpIiwyPT09ZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJpIikubGVuZ3RofSksbi5nZXRCeUlkPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBmLmFwcGVuZENoaWxkKGUpLmlkPXYsIXQuZ2V0RWxlbWVudHNCeU5hbWV8fCF0LmdldEVsZW1lbnRzQnlOYW1lKHYpLmxlbmd0aH0pLG4uZ2V0QnlJZD8oaS5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQhPT1qJiZoKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuJiZuLnBhcmVudE5vZGU/W25dOltdfX0saS5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKG50LHJ0KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19KTooZGVsZXRlIGkuZmluZC5JRCxpLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj10eXBlb2YgZS5nZXRBdHRyaWJ1dGVOb2RlIT09aiYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVlPT09dH19KSxpLmZpbmQuVEFHPW4uZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHlwZW9mIHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPT1qP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6dW5kZWZpbmVkfTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT0wLG89dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTtpZigiKiI9PT1lKXt3aGlsZShuPW9baSsrXSkxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBvfSxpLmZpbmQuQ0xBU1M9bi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe3JldHVybiB0eXBlb2YgdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lIT09aiYmaD90LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSk6dW5kZWZpbmVkfSxnPVtdLGQ9W10sKG4ucXNhPVEudGVzdCh0LnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHV0KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGQucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitSKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8ZC5wdXNoKCI6Y2hlY2tlZCIpfSksdXQoZnVuY3Rpb24oZSl7dmFyIG49dC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO24uc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZChuKS5zZXRBdHRyaWJ1dGUoInQiLCIiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0Xj0nJ10iKS5sZW5ndGgmJmQucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxkLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksZC5wdXNoKCIsLio6Iil9KSksKG4ubWF0Y2hlc1NlbGVjdG9yPVEudGVzdChtPWYud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxmLm1vek1hdGNoZXNTZWxlY3Rvcnx8Zi5vTWF0Y2hlc1NlbGVjdG9yfHxmLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnV0KGZ1bmN0aW9uKGUpe24uZGlzY29ubmVjdGVkTWF0Y2g9bS5jYWxsKGUsImRpdiIpLG0uY2FsbChlLCJbcyE9JyddOngiKSxnLnB1c2goIiE9IixJKX0pLGQ9ZC5sZW5ndGgmJlJlZ0V4cChkLmpvaW4oInwiKSksZz1nLmxlbmd0aCYmUmVnRXhwKGcuam9pbigifCIpKSx5PVEudGVzdChmLmNvbnRhaW5zKXx8Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LFM9Zi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHIpe2lmKGU9PT1yKXJldHVybiBFPSEwLDA7dmFyIGk9ci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKTtyZXR1cm4gaT8xJml8fCFuLnNvcnREZXRhY2hlZCYmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PWk/ZT09PXR8fHkoYixlKT8tMTpyPT09dHx8eShiLHIpPzE6bD9QLmNhbGwobCxlKS1QLmNhbGwobCxyKTowOjQmaT8tMToxOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MX06ZnVuY3Rpb24oZSxuKXt2YXIgcixpPTAsbz1lLnBhcmVudE5vZGUscz1uLnBhcmVudE5vZGUsYT1bZV0sdT1bbl07aWYoZT09PW4pcmV0dXJuIEU9ITAsMDtpZighb3x8IXMpcmV0dXJuIGU9PT10Py0xOm49PT10PzE6bz8tMTpzPzE6bD9QLmNhbGwobCxlKS1QLmNhbGwobCxuKTowO2lmKG89PT1zKXJldHVybiBjdChlLG4pO3I9ZTt3aGlsZShyPXIucGFyZW50Tm9kZSlhLnVuc2hpZnQocik7cj1uO3doaWxlKHI9ci5wYXJlbnROb2RlKXUudW5zaGlmdChyKTt3aGlsZShhW2ldPT09dVtpXSlpKys7cmV0dXJuIGk/Y3QoYVtpXSx1W2ldKTphW2ldPT09Yj8tMTp1W2ldPT09Yj8xOjB9LHQpOnB9LG90Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gb3QoZSxudWxsLG51bGwsdCl9LG90Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09cCYmYyhlKSx0PXQucmVwbGFjZShZLCI9JyQxJ10iKSwhKCFuLm1hdGNoZXNTZWxlY3Rvcnx8IWh8fGcmJmcudGVzdCh0KXx8ZCYmZC50ZXN0KHQpKSl0cnl7dmFyIHI9bS5jYWxsKGUsdCk7aWYocnx8bi5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiByfWNhdGNoKGkpe31yZXR1cm4gb3QodCxwLG51bGwsW2VdKS5sZW5ndGg+MH0sb3QuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PXAmJmMoZSkseShlLHQpfSxvdC5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1wJiZjKGUpO3ZhciByPWkuYXR0ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLG89ciYmQS5jYWxsKGkuYXR0ckhhbmRsZSx0LnRvTG93ZXJDYXNlKCkpP3IoZSx0LCFoKTp1bmRlZmluZWQ7cmV0dXJuIG89PT11bmRlZmluZWQ/bi5hdHRyaWJ1dGVzfHwhaD9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNwZWNpZmllZD9vLnZhbHVlOm51bGw6b30sb3QuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LG90LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQscj1bXSxpPTAsbz0wO2lmKEU9IW4uZGV0ZWN0RHVwbGljYXRlcyxsPSFuLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KFMpLEUpe3doaWxlKHQ9ZVtvKytdKXQ9PT1lW29dJiYoaT1yLnB1c2gobykpO3doaWxlKGktLSllLnNwbGljZShyW2ldLDEpfXJldHVybiBlfSxvPW90LmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPW8oZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2UgZm9yKDt0PWVbcl07cisrKW4rPW8odCk7cmV0dXJuIG59LGk9b3Quc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86YXQsbWF0Y2g6SixhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKG50LHJ0KSxlWzNdPShlWzRdfHxlWzVdfHwiIikucmVwbGFjZShudCxydCksIn49Ij09PWVbMl0mJihlWzNdPSIgIitlWzNdKyIgIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksIm50aCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fG90LmVycm9yKGVbMF0pLGVbNF09KyhlWzRdP2VbNV0rKGVbNl18fDEpOjIqKCJldmVuIj09PWVbM118fCJvZGQiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fCJvZGQiPT09ZVszXSkpOmVbM10mJm90LmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzVdJiZlWzJdO3JldHVybiBKLkNISUxELnRlc3QoZVswXSk/bnVsbDooZVszXSYmZVs0XSE9PXVuZGVmaW5lZD9lWzJdPWVbNF06biYmVi50ZXN0KG4pJiYodD1ndChuLCEwKSkmJih0PW4uaW5kZXhPZigiKSIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UobnQscnQpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUNbZSsiICJdO3JldHVybiB0fHwodD1SZWdFeHAoIihefCIrTSsiKSIrZSsiKCIrTSsifCQpIikpJiZDKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09aiYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9b3QuYXR0cihyLGUpO3JldHVybiBudWxsPT1pPyIhPSI9PT10OnQ/KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2krIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10P2k9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLHM9Imxhc3QiIT09ZS5zbGljZSgtNCksYT0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLHAsZixoLGQsZz1vIT09cz8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLG09dC5wYXJlbnROb2RlLHk9YSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHg9IXUmJiFhO2lmKG0pe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYoYT9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2Q9Zz0ib25seSI9PT1lJiYhZCYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihkPVtzP20uZmlyc3RDaGlsZDptLmxhc3RDaGlsZF0scyYmeCl7Yz1tW3ZdfHwobVt2XT17fSksbD1jW2VdfHxbXSxoPWxbMF09PT13JiZsWzFdLGY9bFswXT09PXcmJmxbMl0scD1oJiZtLmNoaWxkTm9kZXNbaF07d2hpbGUocD0rK2gmJnAmJnBbZ118fChmPWg9MCl8fGQucG9wKCkpaWYoMT09PXAubm9kZVR5cGUmJisrZiYmcD09PXQpe2NbZV09W3csaCxmXTticmVha319ZWxzZSBpZih4JiYobD0odFt2XXx8KHRbdl09e30pKVtlXSkmJmxbMF09PT13KWY9bFsxXTtlbHNlIHdoaWxlKHA9KytoJiZwJiZwW2ddfHwoZj1oPTApfHxkLnBvcCgpKWlmKChhP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpJiYrK2YmJih4JiYoKHBbdl18fChwW3ZdPXt9KSlbZV09W3csZl0pLHA9PT10KSlicmVhaztyZXR1cm4gZi09aSxmPT09cnx8MD09PWYlciYmZi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9aS5wc2V1ZG9zW2VdfHxpLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8b3QuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gclt2XT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxpLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9hdChmdW5jdGlvbihlLG4pe3ZhciBpLG89cihlLHQpLHM9by5sZW5ndGg7d2hpbGUocy0tKWk9UC5jYWxsKGUsb1tzXSksZVtpXT0hKG5baV09b1tzXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihlLDAsbil9KTpyfX0scHNldWRvczp7bm90OmF0KGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1hKGUucmVwbGFjZSh6LCIkMSIpKTtyZXR1cm4gclt2XT9hdChmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxzPXIoZSxudWxsLGksW10pLGE9ZS5sZW5ndGg7d2hpbGUoYS0tKShvPXNbYV0pJiYoZVthXT0hKHRbYV09bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSwhbi5wb3AoKX19KSxoYXM6YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBvdChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmF0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fG8odCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzphdChmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGV8fCIiKXx8b3QuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UobnQscnQpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG8gaWYobj1oP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWZ9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09cC5hY3RpdmVFbGVtZW50JiYoIXAuaGFzRm9jdXN8fHAuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlTmFtZT4iQCJ8fDM9PT1lLm5vZGVUeXBlfHw0PT09ZS5ub2RlVHlwZSlyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFpLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZXQudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFoudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0odD1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8dC50b0xvd2VyQ2FzZSgpPT09ZS50eXBlKX0sZmlyc3Q6aHQoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0Omh0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTpodChmdW5jdGlvbihlLHQsbil7cmV0dXJuWzA+bj9uK3Q6bl19KSxldmVuOmh0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MDtmb3IoO3Q+bjtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpodChmdW5jdGlvbihlLHQpe3ZhciBuPTE7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpodChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDpodChmdW5jdGlvbihlLHQsbil7dmFyIHI9MD5uP24rdDpuO2Zvcig7dD4rK3I7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0saS5wc2V1ZG9zLm50aD1pLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0paS5wc2V1ZG9zW3RdPXB0KHQpO2Zvcih0IGlue3N1Ym1pdDohMCxyZXNldDohMH0paS5wc2V1ZG9zW3RdPWZ0KHQpO2Z1bmN0aW9uIGR0KCl7fWR0LnByb3RvdHlwZT1pLmZpbHRlcnM9aS5wc2V1ZG9zLGkuc2V0RmlsdGVycz1uZXcgZHQ7ZnVuY3Rpb24gZ3QoZSx0KXt2YXIgbixyLG8scyxhLHUsbCxjPWtbZSsiICJdO2lmKGMpcmV0dXJuIHQ/MDpjLnNsaWNlKDApO2E9ZSx1PVtdLGw9aS5wcmVGaWx0ZXI7d2hpbGUoYSl7KCFufHwocj1fLmV4ZWMoYSkpKSYmKHImJihhPWEuc2xpY2UoclswXS5sZW5ndGgpfHxhKSx1LnB1c2gobz1bXSkpLG49ITEsKHI9WC5leGVjKGEpKSYmKG49ci5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOnJbMF0ucmVwbGFjZSh6LCIgIil9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtmb3IocyBpbiBpLmZpbHRlcikhKHI9SltzXS5leGVjKGEpKXx8bFtzXSYmIShyPWxbc10ocikpfHwobj1yLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6cyxtYXRjaGVzOnJ9KSxhPWEuc2xpY2Uobi5sZW5ndGgpKTtpZighbilicmVha31yZXR1cm4gdD9hLmxlbmd0aDphP290LmVycm9yKGUpOmsoZSx1KS5zbGljZSgwKX1mdW5jdGlvbiBtdChlKXt2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjtmb3IoO24+dDt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiB5dChlLHQsbil7dmFyIGk9dC5kaXIsbz1uJiYicGFyZW50Tm9kZSI9PT1pLHM9VCsrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixyKXt3aGlsZSh0PXRbaV0paWYoMT09PXQubm9kZVR5cGV8fG8pcmV0dXJuIGUodCxuLHIpfTpmdW5jdGlvbih0LG4sYSl7dmFyIHUsbCxjLHA9dysiICIrcztpZihhKXt3aGlsZSh0PXRbaV0paWYoKDE9PT10Lm5vZGVUeXBlfHxvKSYmZSh0LG4sYSkpcmV0dXJuITB9ZWxzZSB3aGlsZSh0PXRbaV0paWYoMT09PXQubm9kZVR5cGV8fG8paWYoYz10W3ZdfHwodFt2XT17fSksKGw9Y1tpXSkmJmxbMF09PT1wKXtpZigodT1sWzFdKT09PSEwfHx1PT09cilyZXR1cm4gdT09PSEwfWVsc2UgaWYobD1jW2ldPVtwXSxsWzFdPWUodCxuLGEpfHxyLGxbMV09PT0hMClyZXR1cm4hMH19ZnVuY3Rpb24gdnQoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGktLSlpZighZVtpXSh0LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24geHQoZSx0LG4scixpKXt2YXIgbyxzPVtdLGE9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDtmb3IoO3U+YTthKyspKG89ZVthXSkmJighbnx8bihvLHIsaSkpJiYocy5wdXNoKG8pLGwmJnQucHVzaChhKSk7cmV0dXJuIHN9ZnVuY3Rpb24gYnQoZSx0LG4scixpLG8pe3JldHVybiByJiYhclt2XSYmKHI9YnQocikpLGkmJiFpW3ZdJiYoaT1idChpLG8pKSxhdChmdW5jdGlvbihvLHMsYSx1KXt2YXIgbCxjLHAsZj1bXSxoPVtdLGQ9cy5sZW5ndGgsZz1vfHxDdCh0fHwiKiIsYS5ub2RlVHlwZT9bYV06YSxbXSksbT0hZXx8IW8mJnQ/Zzp4dChnLGYsZSxhLHUpLHk9bj9pfHwobz9lOmR8fHIpP1tdOnM6bTtpZihuJiZuKG0seSxhLHUpLHIpe2w9eHQoeSxoKSxyKGwsW10sYSx1KSxjPWwubGVuZ3RoO3doaWxlKGMtLSkocD1sW2NdKSYmKHlbaFtjXV09IShtW2hbY11dPXApKX1pZihvKXtpZihpfHxlKXtpZihpKXtsPVtdLGM9eS5sZW5ndGg7d2hpbGUoYy0tKShwPXlbY10pJiZsLnB1c2gobVtjXT1wKTtpKG51bGwseT1bXSxsLHUpfWM9eS5sZW5ndGg7d2hpbGUoYy0tKShwPXlbY10pJiYobD1pP1AuY2FsbChvLHApOmZbY10pPi0xJiYob1tsXT0hKHNbbF09cCkpfX1lbHNlIHk9eHQoeT09PXM/eS5zcGxpY2UoZCx5Lmxlbmd0aCk6eSksaT9pKG51bGwscyx5LHUpOk8uYXBwbHkocyx5KX0pfWZ1bmN0aW9uIHd0KGUpe3ZhciB0LG4scixvPWUubGVuZ3RoLHM9aS5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9c3x8aS5yZWxhdGl2ZVsiICJdLGw9cz8xOjAsYz15dChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LGEsITApLHA9eXQoZnVuY3Rpb24oZSl7cmV0dXJuIFAuY2FsbCh0LGUpPi0xfSxhLCEwKSxmPVtmdW5jdGlvbihlLG4scil7cmV0dXJuIXMmJihyfHxuIT09dSl8fCgodD1uKS5ub2RlVHlwZT9jKGUsbixyKTpwKGUsbixyKSl9XTtmb3IoO28+bDtsKyspaWYobj1pLnJlbGF0aXZlW2VbbF0udHlwZV0pZj1beXQodnQoZiksbildO2Vsc2V7aWYobj1pLmZpbHRlcltlW2xdLnR5cGVdLmFwcGx5KG51bGwsZVtsXS5tYXRjaGVzKSxuW3ZdKXtmb3Iocj0rK2w7bz5yO3IrKylpZihpLnJlbGF0aXZlW2Vbcl0udHlwZV0pYnJlYWs7cmV0dXJuIGJ0KGw+MSYmdnQoZiksbD4xJiZtdChlLnNsaWNlKDAsbC0xKS5jb25jYXQoe3ZhbHVlOiIgIj09PWVbbC0yXS50eXBlPyIqIjoiIn0pKS5yZXBsYWNlKHosIiQxIiksbixyPmwmJnd0KGUuc2xpY2UobCxyKSksbz5yJiZ3dChlPWUuc2xpY2UocikpLG8+ciYmbXQoZSkpfWYucHVzaChuKX1yZXR1cm4gdnQoZil9ZnVuY3Rpb24gVHQoZSx0KXt2YXIgbj0wLG89dC5sZW5ndGg+MCxzPWUubGVuZ3RoPjAsYT1mdW5jdGlvbihhLGwsYyxmLGgpe3ZhciBkLGcsbSx5PVtdLHY9MCx4PSIwIixiPWEmJltdLFQ9bnVsbCE9aCxDPXUsaz1hfHxzJiZpLmZpbmQuVEFHKCIqIixoJiZsLnBhcmVudE5vZGV8fGwpLE49dys9bnVsbD09Qz8xOk1hdGgucmFuZG9tKCl8fC4xO2ZvcihUJiYodT1sIT09cCYmbCxyPW4pO251bGwhPShkPWtbeF0pO3grKyl7aWYocyYmZCl7Zz0wO3doaWxlKG09ZVtnKytdKWlmKG0oZCxsLGMpKXtmLnB1c2goZCk7YnJlYWt9VCYmKHc9TixyPSsrbil9byYmKChkPSFtJiZkKSYmdi0tLGEmJmIucHVzaChkKSl9aWYodis9eCxvJiZ4IT09dil7Zz0wO3doaWxlKG09dFtnKytdKW0oYix5LGwsYyk7aWYoYSl7aWYodj4wKXdoaWxlKHgtLSliW3hdfHx5W3hdfHwoeVt4XT1xLmNhbGwoZikpO3k9eHQoeSl9Ty5hcHBseShmLHkpLFQmJiFhJiZ5Lmxlbmd0aD4wJiZ2K3QubGVuZ3RoPjEmJm90LnVuaXF1ZVNvcnQoZil9cmV0dXJuIFQmJih3PU4sdT1DKSxifTtyZXR1cm4gbz9hdChhKTphfWE9b3QuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPU5bZSsiICJdO2lmKCFvKXt0fHwodD1ndChlKSksbj10Lmxlbmd0aDt3aGlsZShuLS0pbz13dCh0W25dKSxvW3ZdP3IucHVzaChvKTppLnB1c2gobyk7bz1OKGUsVHQoaSxyKSl9cmV0dXJuIG99O2Z1bmN0aW9uIEN0KGUsdCxuKXt2YXIgcj0wLGk9dC5sZW5ndGg7Zm9yKDtpPnI7cisrKW90KGUsdFtyXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBrdChlLHQscixvKXt2YXIgcyx1LGwsYyxwLGY9Z3QoZSk7aWYoIW8mJjE9PT1mLmxlbmd0aCl7aWYodT1mWzBdPWZbMF0uc2xpY2UoMCksdS5sZW5ndGg+MiYmIklEIj09PShsPXVbMF0pLnR5cGUmJm4uZ2V0QnlJZCYmOT09PXQubm9kZVR5cGUmJmgmJmkucmVsYXRpdmVbdVsxXS50eXBlXSl7aWYodD0oaS5maW5kLklEKGwubWF0Y2hlc1swXS5yZXBsYWNlKG50LHJ0KSx0KXx8W10pWzBdLCF0KXJldHVybiByO2U9ZS5zbGljZSh1LnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1zPUoubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3aGlsZShzLS0pe2lmKGw9dVtzXSxpLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigocD1pLmZpbmRbY10pJiYobz1wKGwubWF0Y2hlc1swXS5yZXBsYWNlKG50LHJ0KSxVLnRlc3QodVswXS50eXBlKSYmdC5wYXJlbnROb2RlfHx0KSkpe2lmKHUuc3BsaWNlKHMsMSksZT1vLmxlbmd0aCYmbXQodSksIWUpcmV0dXJuIE8uYXBwbHkocixvKSxyO2JyZWFrfX19cmV0dXJuIGEoZSxmKShvLHQsIWgscixVLnRlc3QoZSkpLHJ9bi5zb3J0U3RhYmxlPXYuc3BsaXQoIiIpLnNvcnQoUykuam9pbigiIik9PT12LG4uZGV0ZWN0RHVwbGljYXRlcz1FLGMoKSxuLnNvcnREZXRhY2hlZD11dChmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHAuY3JlYXRlRWxlbWVudCgiZGl2IikpfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8YSBocmVmPScjJz48L2E+IiwiIyI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJocmVmIil9KXx8bHQoInR5cGV8aHJlZnxoZWlnaHR8d2lkdGgiLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj91bmRlZmluZWQ6ZS5nZXRBdHRyaWJ1dGUodCwidHlwZSI9PT10LnRvTG93ZXJDYXNlKCk/MToyKX0pLG4uYXR0cmlidXRlcyYmdXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8aW5wdXQvPiIsZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiKSwiIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoInZhbHVlIil9KXx8bHQoInZhbHVlIixmdW5jdGlvbihlLHQsbil7cmV0dXJuIG58fCJpbnB1dCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/dW5kZWZpbmVkOmUuZGVmYXVsdFZhbHVlfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGx0KFIsZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiBuP3VuZGVmaW5lZDoocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOmVbdF09PT0hMD90LnRvTG93ZXJDYXNlKCk6bnVsbH0pLHguZmluZD1vdCx4LmV4cHI9b3Quc2VsZWN0b3JzLHguZXhwclsiOiJdPXguZXhwci5wc2V1ZG9zLHgudW5pcXVlPW90LnVuaXF1ZVNvcnQseC50ZXh0PW90LmdldFRleHQseC5pc1hNTERvYz1vdC5pc1hNTCx4LmNvbnRhaW5zPW90LmNvbnRhaW5zfShlKTt2YXIgRD17fTtmdW5jdGlvbiBBKGUpe3ZhciB0PURbZV09e307cmV0dXJuIHguZWFjaChlLm1hdGNoKHcpfHxbXSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KSx0fXguQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9InN0cmluZyI9PXR5cGVvZiBlP0RbZV18fEEoZSk6eC5leHRlbmQoe30sZSk7dmFyIHQsbixyLGksbyxzLGE9W10sdT0hZS5vbmNlJiZbXSxsPWZ1bmN0aW9uKHApe2Zvcih0PWUubWVtb3J5JiZwLG49ITAscz1pfHwwLGk9MCxvPWEubGVuZ3RoLHI9ITA7YSYmbz5zO3MrKylpZihhW3NdLmFwcGx5KHBbMF0scFsxXSk9PT0hMSYmZS5zdG9wT25GYWxzZSl7dD0hMTticmVha31yPSExLGEmJih1P3UubGVuZ3RoJiZsKHUuc2hpZnQoKSk6dD9hPVtdOmMuZGlzYWJsZSgpKX0sYz17YWRkOmZ1bmN0aW9uKCl7aWYoYSl7dmFyIG49YS5sZW5ndGg7KGZ1bmN0aW9uIHModCl7eC5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj14LnR5cGUobik7ImZ1bmN0aW9uIj09PXI/ZS51bmlxdWUmJmMuaGFzKG4pfHxhLnB1c2gobik6biYmbi5sZW5ndGgmJiJzdHJpbmciIT09ciYmcyhuKX0pfSkoYXJndW1lbnRzKSxyP289YS5sZW5ndGg6dCYmKGk9bixsKHQpKX1yZXR1cm4gdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIGEmJnguZWFjaChhcmd1bWVudHMsZnVuY3Rpb24oZSx0KXt2YXIgbjt3aGlsZSgobj14LmluQXJyYXkodCxhLG4pKT4tMSlhLnNwbGljZShuLDEpLHImJihvPj1uJiZvLS0scz49biYmcy0tKX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT94LmluQXJyYXkoZSxhKT4tMTohKCFhfHwhYS5sZW5ndGgpfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBhPVtdLG89MCx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT10PXVuZGVmaW5lZCx0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFhfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIHU9dW5kZWZpbmVkLHR8fGMuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiF1fSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiFhfHxuJiYhdXx8KHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxyP3UucHVzaCh0KTpsKHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGMuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFufX07cmV0dXJuIGN9LHguZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIseC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix4LkNhbGxiYWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHguRGVmZXJyZWQoZnVuY3Rpb24obil7eC5lYWNoKHQsZnVuY3Rpb24odCxvKXt2YXIgcz1vWzBdLGE9eC5pc0Z1bmN0aW9uKGVbdF0pJiZlW3RdO2lbb1sxXV0oZnVuY3Rpb24oKXt2YXIgZT1hJiZhLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bcysiV2l0aCJdKHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMsYT9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3guZXh0ZW5kKGUscik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRoZW4seC5lYWNoKHQsZnVuY3Rpb24oZSxvKXt2YXIgcz1vWzJdLGE9b1szXTtyW29bMV1dPXMuYWRkLGEmJnMuYWRkKGZ1bmN0aW9uKCl7bj1hfSx0WzFeZV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2spLGlbb1swXV09ZnVuY3Rpb24oKXtyZXR1cm4gaVtvWzBdKyJXaXRoIl0odGhpcz09PWk/cjp0aGlzLGFyZ3VtZW50cyksdGhpc30saVtvWzBdKyJXaXRoIl09cy5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1kLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9MSE9PXJ8fGUmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxvPTE9PT1pP2U6eC5EZWZlcnJlZCgpLHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVudHMubGVuZ3RoPjE/ZC5jYWxsKGFyZ3VtZW50cyk6cixuPT09YT9vLm5vdGlmeVdpdGgodCxuKTotLWl8fG8ucmVzb2x2ZVdpdGgodCxuKX19LGEsdSxsO2lmKHI+MSlmb3IoYT1BcnJheShyKSx1PUFycmF5KHIpLGw9QXJyYXkocik7cj50O3QrKyluW3RdJiZ4LmlzRnVuY3Rpb24oblt0XS5wcm9taXNlKT9uW3RdLnByb21pc2UoKS5kb25lKHModCxsLG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhzKHQsdSxhKSk6LS1pO3JldHVybiBpfHxvLnJlc29sdmVXaXRoKGwsbiksby5wcm9taXNlKCl9fSkseC5zdXBwb3J0PWZ1bmN0aW9uKHQpe3ZhciBuPW8uY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxyPW8uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGk9by5jcmVhdGVFbGVtZW50KCJkaXYiKSxzPW8uY3JlYXRlRWxlbWVudCgic2VsZWN0IiksYT1zLmFwcGVuZENoaWxkKG8uY3JlYXRlRWxlbWVudCgib3B0aW9uIikpO3JldHVybiBuLnR5cGU/KG4udHlwZT0iY2hlY2tib3giLHQuY2hlY2tPbj0iIiE9PW4udmFsdWUsdC5vcHRTZWxlY3RlZD1hLnNlbGVjdGVkLHQucmVsaWFibGVNYXJnaW5SaWdodD0hMCx0LmJveFNpemluZ1JlbGlhYmxlPSEwLHQucGl4ZWxQb3NpdGlvbj0hMSxuLmNoZWNrZWQ9ITAsdC5ub0Nsb25lQ2hlY2tlZD1uLmNsb25lTm9kZSghMCkuY2hlY2tlZCxzLmRpc2FibGVkPSEwLHQub3B0RGlzYWJsZWQ9IWEuZGlzYWJsZWQsbj1vLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksbi52YWx1ZT0idCIsbi50eXBlPSJyYWRpbyIsdC5yYWRpb1ZhbHVlPSJ0Ij09PW4udmFsdWUsbi5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJ0Iiksbi5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0Iiksci5hcHBlbmRDaGlsZChuKSx0LmNoZWNrQ2xvbmU9ci5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsdC5mb2N1c2luQnViYmxlcz0ib25mb2N1c2luImluIGUsaS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLGkuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIix0LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09aS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCx4KGZ1bmN0aW9uKCl7dmFyIG4scixzPSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jazstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3giLGE9by5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdO2EmJihuPW8uY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5zdHlsZS5jc3NUZXh0PSJib3JkZXI6MDt3aWR0aDowO2hlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6LTk5OTlweDttYXJnaW4tdG9wOjFweCIsYS5hcHBlbmRDaGlsZChuKS5hcHBlbmRDaGlsZChpKSxpLmlubmVySFRNTD0iIixpLnN0eWxlLmNzc1RleHQ9Ii13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElIix4LnN3YXAoYSxudWxsIT1hLnN0eWxlLnpvb20/e3pvb206MX06e30sZnVuY3Rpb24oKXt0LmJveFNpemluZz00PT09aS5vZmZzZXRXaWR0aH0pLGUuZ2V0Q29tcHV0ZWRTdHlsZSYmKHQucGl4ZWxQb3NpdGlvbj0iMSUiIT09KGUuZ2V0Q29tcHV0ZWRTdHlsZShpLG51bGwpfHx7fSkudG9wLHQuYm94U2l6aW5nUmVsaWFibGU9IjRweCI9PT0oZS5nZXRDb21wdXRlZFN0eWxlKGksbnVsbCl8fHt3aWR0aDoiNHB4In0pLndpZHRoLHI9aS5hcHBlbmRDaGlsZChvLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxyLnN0eWxlLmNzc1RleHQ9aS5zdHlsZS5jc3NUZXh0PXMsci5zdHlsZS5tYXJnaW5SaWdodD1yLnN0eWxlLndpZHRoPSIwIixpLnN0eWxlLndpZHRoPSIxcHgiLHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0eWxlKHIsbnVsbCl8fHt9KS5tYXJnaW5SaWdodCkpLGEucmVtb3ZlQ2hpbGQobikpfSksdCk6dH0oe30pO3ZhciBMLHEsSD0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sTz0vKFtBLVpdKS9nO2Z1bmN0aW9uIEYoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5jYWNoZT17fSwwLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm57fX19KSx0aGlzLmV4cGFuZG89eC5leHBhbmRvK01hdGgucmFuZG9tKCl9Ri51aWQ9MSxGLmFjY2VwdHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZVR5cGU/MT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlOiEwfSxGLnByb3RvdHlwZT17a2V5OmZ1bmN0aW9uKGUpe2lmKCFGLmFjY2VwdHMoZSkpcmV0dXJuIDA7dmFyIHQ9e30sbj1lW3RoaXMuZXhwYW5kb107aWYoIW4pe249Ri51aWQrKzt0cnl7dFt0aGlzLmV4cGFuZG9dPXt2YWx1ZTpufSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHQpfWNhdGNoKHIpe3RbdGhpcy5leHBhbmRvXT1uLHguZXh0ZW5kKGUsdCl9fXJldHVybiB0aGlzLmNhY2hlW25dfHwodGhpcy5jYWNoZVtuXT17fSksbn0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMua2V5KGUpLG89dGhpcy5jYWNoZVtpXTtpZigic3RyaW5nIj09dHlwZW9mIHQpb1t0XT1uO2Vsc2UgaWYoeC5pc0VtcHR5T2JqZWN0KG8pKXguZXh0ZW5kKHRoaXMuY2FjaGVbaV0sdCk7ZWxzZSBmb3IociBpbiB0KW9bcl09dFtyXTtyZXR1cm4gb30sZ2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jYWNoZVt0aGlzLmtleShlKV07cmV0dXJuIHQ9PT11bmRlZmluZWQ/bjpuW3RdfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB0PT09dW5kZWZpbmVkfHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJm49PT11bmRlZmluZWQ/KHI9dGhpcy5nZXQoZSx0KSxyIT09dW5kZWZpbmVkP3I6dGhpcy5nZXQoZSx4LmNhbWVsQ2FzZSh0KSkpOih0aGlzLnNldChlLHQsbiksbiE9PXVuZGVmaW5lZD9uOnQpfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzLmtleShlKSxzPXRoaXMuY2FjaGVbb107aWYodD09PXVuZGVmaW5lZCl0aGlzLmNhY2hlW29dPXt9O2Vsc2V7eC5pc0FycmF5KHQpP3I9dC5jb25jYXQodC5tYXAoeC5jYW1lbENhc2UpKTooaT14LmNhbWVsQ2FzZSh0KSx0IGluIHM/cj1bdCxpXToocj1pLHI9ciBpbiBzP1tyXTpyLm1hdGNoKHcpfHxbXSkpLG49ci5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSBzW3Jbbl1dfX0saGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4heC5pc0VtcHR5T2JqZWN0KHRoaXMuY2FjaGVbZVt0aGlzLmV4cGFuZG9dXXx8e30pfSxkaXNjYXJkOmZ1bmN0aW9uKGUpe2VbdGhpcy5leHBhbmRvXSYmZGVsZXRlIHRoaXMuY2FjaGVbZVt0aGlzLmV4cGFuZG9dXX19LEw9bmV3IEYscT1uZXcgRix4LmV4dGVuZCh7YWNjZXB0RGF0YTpGLmFjY2VwdHMsaGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gTC5oYXNEYXRhKGUpfHxxLmhhc0RhdGEoZSl9LGRhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBMLmFjY2VzcyhlLHQsbil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtMLnJlbW92ZShlLHQpfSxfZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHEuYWNjZXNzKGUsdCxuKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtxLnJlbW92ZShlLHQpfX0pLHguZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPXRoaXNbMF0sbz0wLHM9bnVsbDtpZihlPT09dW5kZWZpbmVkKXtpZih0aGlzLmxlbmd0aCYmKHM9TC5nZXQoaSksMT09PWkubm9kZVR5cGUmJiFxLmdldChpLCJoYXNEYXRhQXR0cnMiKSkpe2ZvcihuPWkuYXR0cmlidXRlcztuLmxlbmd0aD5vO28rKylyPW5bb10ubmFtZSwwPT09ci5pbmRleE9mKCJkYXRhLSIpJiYocj14LmNhbWVsQ2FzZShyLnNsaWNlKDUpKSxQKGkscixzW3JdKSk7cS5zZXQoaSwiaGFzRGF0YUF0dHJzIiwhMCl9cmV0dXJuIHN9cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe0wuc2V0KHRoaXMsZSl9KTp4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQpe3ZhciBuLHI9eC5jYW1lbENhc2UoZSk7aWYoaSYmdD09PXVuZGVmaW5lZCl7aWYobj1MLmdldChpLGUpLG4hPT11bmRlZmluZWQpcmV0dXJuIG47aWYobj1MLmdldChpLHIpLG4hPT11bmRlZmluZWQpcmV0dXJuIG47aWYobj1QKGkscix1bmRlZmluZWQpLG4hPT11bmRlZmluZWQpcmV0dXJuIG59ZWxzZSB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1MLmdldCh0aGlzLHIpO0wuc2V0KHRoaXMscix0KSwtMSE9PWUuaW5kZXhPZigiLSIpJiZuIT09dW5kZWZpbmVkJiZMLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7TC5yZW1vdmUodGhpcyxlKX0pfX0pO2Z1bmN0aW9uIFAoZSx0LG4pe3ZhciByO2lmKG49PT11bmRlZmluZWQmJjE9PT1lLm5vZGVUeXBlKWlmKHI9ImRhdGEtIit0LnJlcGxhY2UoTywiLSQxIikudG9Mb3dlckNhc2UoKSxuPWUuZ2V0QXR0cmlidXRlKHIpLCJzdHJpbmciPT10eXBlb2Ygbil7dHJ5e249InRydWUiPT09bj8hMDoiZmFsc2UiPT09bj8hMToibnVsbCI9PT1uP251bGw6K24rIiI9PT1uPytuOkgudGVzdChuKT9KU09OLnBhcnNlKG4pOm59Y2F0Y2goaSl7fUwuc2V0KGUsdCxuKX1lbHNlIG49dW5kZWZpbmVkO3JldHVybiBufXguZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI7cmV0dXJuIGU/KHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1xLmdldChlLHQpLG4mJighcnx8eC5pc0FycmF5KG4pP3I9cS5hY2Nlc3MoZSx0LHgubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdKTp1bmRlZmluZWR9LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49eC5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz14Ll9xdWV1ZUhvb2tzKGUsdCkscz1mdW5jdGlvbigpe3guZGVxdWV1ZShlLHQpCn07ImlucHJvZ3Jlc3MiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKCJmeCI9PT10JiZuLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxkZWxldGUgby5zdG9wLGkuY2FsbChlLHMsbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gcS5nZXQoZSxuKXx8cS5hY2Nlc3MoZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtxLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSx4LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPSJmeCIsbi0tKSxuPmFyZ3VtZW50cy5sZW5ndGg/eC5xdWV1ZSh0aGlzWzBdLGUpOnQ9PT11bmRlZmluZWQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj14LnF1ZXVlKHRoaXMsZSx0KTt4Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PW5bMF0mJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9eC5EZWZlcnJlZCgpLG89dGhpcyxzPXRoaXMubGVuZ3RoLGE9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLGU9ZXx8ImZ4Ijt3aGlsZShzLS0pbj1xLmdldChvW3NdLGUrInF1ZXVlSG9va3MiKSxuJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKGEpKTtyZXR1cm4gYSgpLGkucHJvbWlzZSh0KX19KTt2YXIgUixNLFc9L1tcdFxyXG5cZl0vZywkPS9cci9nLEI9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaTt4LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbeC5wcm9wRml4W2VdfHxlXX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHM9MCxhPXRoaXMubGVuZ3RoLHU9InN0cmluZyI9PXR5cGVvZiBlJiZlO2lmKHguaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCx0aGlzLmNsYXNzTmFtZSkpfSk7aWYodSlmb3IodD0oZXx8IiIpLm1hdGNoKHcpfHxbXTthPnM7cysrKWlmKG49dGhpc1tzXSxyPTE9PT1uLm5vZGVUeXBlJiYobi5jbGFzc05hbWU/KCIgIituLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpOiIgIikpe289MDt3aGlsZShpPXRbbysrXSkwPnIuaW5kZXhPZigiICIraSsiICIpJiYocis9aSsiICIpO24uY2xhc3NOYW1lPXgudHJpbShyKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxzPTAsYT10aGlzLmxlbmd0aCx1PTA9PT1hcmd1bWVudHMubGVuZ3RofHwic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZih1KWZvcih0PShlfHwiIikubWF0Y2godyl8fFtdO2E+cztzKyspaWYobj10aGlzW3NdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShXLCIgIik6IiIpKXtvPTA7d2hpbGUoaT10W28rK10pd2hpbGUoci5pbmRleE9mKCIgIitpKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK2krIiAiLCIgIik7bi5jbGFzc05hbWU9ZT94LnRyaW0ocik6IiJ9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmInN0cmluZyI9PT1uP3Q/dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJlbW92ZUNsYXNzKGUpOnguaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYoInN0cmluZyI9PT1uKXt2YXIgdCxpPTAsbz14KHRoaXMpLHM9ZS5tYXRjaCh3KXx8W107d2hpbGUodD1zW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZShuPT09cnx8ImJvb2xlYW4iPT09bikmJih0aGlzLmNsYXNzTmFtZSYmcS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6cS5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVywiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPXguaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIGk7MT09PXRoaXMubm9kZVR5cGUmJihpPXI/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PWk/aT0iIjoibnVtYmVyIj09dHlwZW9mIGk/aSs9IiI6eC5pc0FycmF5KGkpJiYoaT14Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksdD14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYic2V0ImluIHQmJnQuc2V0KHRoaXMsaSwidmFsdWUiKSE9PXVuZGVmaW5lZHx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4gdD14LnZhbEhvb2tzW2kudHlwZV18fHgudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSx0JiYiZ2V0ImluIHQmJihuPXQuZ2V0KGksInZhbHVlIikpIT09dW5kZWZpbmVkP246KG49aS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIG4/bi5yZXBsYWNlKCQsIiIpOm51bGw9PW4/IiI6bil9fX0pLHguZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgsbz0ic2VsZWN0LW9uZSI9PT1lLnR5cGV8fDA+aSxzPW8/bnVsbDpbXSxhPW8/aSsxOnIubGVuZ3RoLHU9MD5pP2E6bz9pOjA7Zm9yKDthPnU7dSsrKWlmKG49clt1XSwhKCFuLnNlbGVjdGVkJiZ1IT09aXx8KHguc3VwcG9ydC5vcHREaXNhYmxlZD9uLmRpc2FibGVkOm51bGwhPT1uLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKSl8fG4ucGFyZW50Tm9kZS5kaXNhYmxlZCYmeC5ub2RlTmFtZShuLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtpZih0PXgobikudmFsKCksbylyZXR1cm4gdDtzLnB1c2godCl9cmV0dXJuIHN9LHNldDpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLm9wdGlvbnMsbz14Lm1ha2VBcnJheSh0KSxzPWkubGVuZ3RoO3doaWxlKHMtLSlyPWlbc10sKHIuc2VsZWN0ZWQ9eC5pbkFycmF5KHgocikudmFsKCksbyk+PTApJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX0sYXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gdHlwZW9mIGUuZ2V0QXR0cmlidXRlPT09cj94LnByb3AoZSx0LG4pOigxPT09cyYmeC5pc1hNTERvYyhlKXx8KHQ9dC50b0xvd2VyQ2FzZSgpLGk9eC5hdHRySG9va3NbdF18fCh4LmV4cHIubWF0Y2guYm9vbC50ZXN0KHQpP006UikpLG49PT11bmRlZmluZWQ/aSYmImdldCJpbiBpJiZudWxsIT09KG89aS5nZXQoZSx0KSk/bzoobz14LmZpbmQuYXR0cihlLHQpLG51bGw9PW8/dW5kZWZpbmVkOm8pOm51bGwhPT1uP2kmJiJzZXQiaW4gaSYmKG89aS5zZXQoZSxuLHQpKSE9PXVuZGVmaW5lZD9vOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOih4LnJlbW92ZUF0dHIoZSx0KSx1bmRlZmluZWQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaCh3KTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgucHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pJiYoZVtyXT0hMSksZS5yZW1vdmVBdHRyaWJ1dGUobil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXguc3VwcG9ydC5yYWRpb1ZhbHVlJiYicmFkaW8iPT09dCYmeC5ub2RlTmFtZShlLCJpbnB1dCIpKXt2YXIgbj1lLnZhbHVlO3JldHVybiBlLnNldEF0dHJpYnV0ZSgidHlwZSIsdCksbiYmKGUudmFsdWU9biksdH19fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9LHByb3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPWUubm9kZVR5cGU7aWYoZSYmMyE9PXMmJjghPT1zJiYyIT09cylyZXR1cm4gbz0xIT09c3x8IXguaXNYTUxEb2MoZSksbyYmKHQ9eC5wcm9wRml4W3RdfHx0LGk9eC5wcm9wSG9va3NbdF0pLG4hPT11bmRlZmluZWQ/aSYmInNldCJpbiBpJiYocj1pLnNldChlLG4sdCkpIT09dW5kZWZpbmVkP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8Qi50ZXN0KGUubm9kZU5hbWUpfHxlLmhyZWY/ZS50YWJJbmRleDotMX19fX0pLE09e3NldDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQ9PT0hMT94LnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSx4LmVhY2goeC5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj14LmV4cHIuYXR0ckhhbmRsZVt0XXx8eC5maW5kLmF0dHI7eC5leHByLmF0dHJIYW5kbGVbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXguZXhwci5hdHRySGFuZGxlW3RdLG89cj91bmRlZmluZWQ6KHguZXhwci5hdHRySGFuZGxlW3RdPXVuZGVmaW5lZCkhPW4oZSx0LHIpP3QudG9Mb3dlckNhc2UoKTpudWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVt0XT1pLG99fSkseC5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx4LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt4LnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5pc0FycmF5KHQpP2UuY2hlY2tlZD14LmluQXJyYXkoeChlKS52YWwoKSx0KT49MDp1bmRlZmluZWR9fSx4LnN1cHBvcnQuY2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgST0vXmtleS8sej0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sXz0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sWD0vXihbXi5dKikoPzpcLiguKyl8KSQvO2Z1bmN0aW9uIFUoKXtyZXR1cm4hMH1mdW5jdGlvbiBZKCl7cmV0dXJuITF9ZnVuY3Rpb24gVigpe3RyeXtyZXR1cm4gby5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319eC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixpLG8pe3ZhciBzLGEsdSxsLGMscCxmLGgsZCxnLG0seT1xLmdldChlKTtpZih5KXtuLmhhbmRsZXImJihzPW4sbj1zLmhhbmRsZXIsbz1zLnNlbGVjdG9yKSxuLmd1aWR8fChuLmd1aWQ9eC5ndWlkKyspLChsPXkuZXZlbnRzKXx8KGw9eS5ldmVudHM9e30pLChhPXkuaGFuZGxlKXx8KGE9eS5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09cnx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dW5kZWZpbmVkOnguZXZlbnQuZGlzcGF0Y2guYXBwbHkoYS5lbGVtLGFyZ3VtZW50cyl9LGEuZWxlbT1lKSx0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sYz10Lmxlbmd0aDt3aGlsZShjLS0pdT1YLmV4ZWModFtjXSl8fFtdLGQ9bT11WzFdLGc9KHVbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KG8/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LHA9eC5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTptLGRhdGE6aSxoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6byxuZWVkc0NvbnRleHQ6byYmeC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KG8pLG5hbWVzcGFjZTpnLmpvaW4oIi4iKX0scyksKGg9bFtkXSl8fChoPWxbZF09W10saC5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmZi5zZXR1cC5jYWxsKGUsaSxnLGEpIT09ITF8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSwhMSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLHApLHAuaGFuZGxlci5ndWlkfHwocC5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksbz9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLHApOmgucHVzaChwKSx4LmV2ZW50Lmdsb2JhbFtkXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8scyxhLHUsbCxjLHAsZixoLGQsZyxtPXEuaGFzRGF0YShlKSYmcS5nZXQoZSk7aWYobSYmKHU9bS5ldmVudHMpKXt0PSh0fHwiIikubWF0Y2godyl8fFsiIl0sbD10Lmxlbmd0aDt3aGlsZShsLS0paWYoYT1YLmV4ZWModFtsXSl8fFtdLGg9Zz1hWzFdLGQ9KGFbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxoKXtwPXguZXZlbnQuc3BlY2lhbFtoXXx8e30saD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8aCxmPXVbaF18fFtdLGE9YVsyXSYmUmVnRXhwKCIoXnxcXC4pIitkLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLHM9bz1mLmxlbmd0aDt3aGlsZShvLS0pYz1mW29dLCFpJiZnIT09Yy5vcmlnVHlwZXx8biYmbi5ndWlkIT09Yy5ndWlkfHxhJiYhYS50ZXN0KGMubmFtZXNwYWNlKXx8ciYmciE9PWMuc2VsZWN0b3ImJigiKioiIT09cnx8IWMuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGMpKTtzJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRlYXJkb3duLmNhbGwoZSxkLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsaCxtLmhhbmRsZSksZGVsZXRlIHVbaF0pfWVsc2UgZm9yKGggaW4gdSl4LmV2ZW50LnJlbW92ZShlLGgrdFtsXSxuLHIsITApO3guaXNFbXB0eU9iamVjdCh1KSYmKGRlbGV0ZSBtLmhhbmRsZSxxLnJlbW92ZShlLCJldmVudHMiKSl9fSx0cmlnZ2VyOmZ1bmN0aW9uKHQsbixyLGkpe3ZhciBzLGEsdSxsLGMscCxmLGg9W3J8fG9dLGQ9eS5jYWxsKHQsInR5cGUiKT90LnR5cGU6dCxnPXkuY2FsbCh0LCJuYW1lc3BhY2UiKT90Lm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdO2lmKGE9dT1yPXJ8fG8sMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiYhXy50ZXN0KGQreC5ldmVudC50cmlnZ2VyZWQpJiYoZC5pbmRleE9mKCIuIik+PTAmJihnPWQuc3BsaXQoIi4iKSxkPWcuc2hpZnQoKSxnLnNvcnQoKSksYz0wPmQuaW5kZXhPZigiOiIpJiYib24iK2QsdD10W3guZXhwYW5kb10/dDpuZXcgeC5FdmVudChkLCJvYmplY3QiPT10eXBlb2YgdCYmdCksdC5pc1RyaWdnZXI9aT8yOjMsdC5uYW1lc3BhY2U9Zy5qb2luKCIuIiksdC5uYW1lc3BhY2VfcmU9dC5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIitnLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsdC5yZXN1bHQ9dW5kZWZpbmVkLHQudGFyZ2V0fHwodC50YXJnZXQ9ciksbj1udWxsPT1uP1t0XTp4Lm1ha2VBcnJheShuLFt0XSksZj14LmV2ZW50LnNwZWNpYWxbZF18fHt9LGl8fCFmLnRyaWdnZXJ8fGYudHJpZ2dlci5hcHBseShyLG4pIT09ITEpKXtpZighaSYmIWYubm9CdWJibGUmJiF4LmlzV2luZG93KHIpKXtmb3IobD1mLmRlbGVnYXRlVHlwZXx8ZCxfLnRlc3QobCtkKXx8KGE9YS5wYXJlbnROb2RlKTthO2E9YS5wYXJlbnROb2RlKWgucHVzaChhKSx1PWE7dT09PShyLm93bmVyRG9jdW1lbnR8fG8pJiZoLnB1c2godS5kZWZhdWx0Vmlld3x8dS5wYXJlbnRXaW5kb3d8fGUpfXM9MDt3aGlsZSgoYT1oW3MrK10pJiYhdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXQudHlwZT1zPjE/bDpmLmJpbmRUeXBlfHxkLHA9KHEuZ2V0KGEsImV2ZW50cyIpfHx7fSlbdC50eXBlXSYmcS5nZXQoYSwiaGFuZGxlIikscCYmcC5hcHBseShhLG4pLHA9YyYmYVtjXSxwJiZ4LmFjY2VwdERhdGEoYSkmJnAuYXBwbHkmJnAuYXBwbHkoYSxuKT09PSExJiZ0LnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIHQudHlwZT1kLGl8fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fGYuX2RlZmF1bHQmJmYuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxuKSE9PSExfHwheC5hY2NlcHREYXRhKHIpfHxjJiZ4LmlzRnVuY3Rpb24ocltkXSkmJiF4LmlzV2luZG93KHIpJiYodT1yW2NdLHUmJihyW2NdPW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWQscltkXSgpLHguZXZlbnQudHJpZ2dlcmVkPXVuZGVmaW5lZCx1JiYocltjXT11KSksdC5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZlbnQuZml4KGUpO3ZhciB0LG4scixpLG8scz1bXSxhPWQuY2FsbChhcmd1bWVudHMpLHU9KHEuZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbZS50eXBlXXx8W10sbD14LmV2ZW50LnNwZWNpYWxbZS50eXBlXXx8e307aWYoYVswXT1lLGUuZGVsZWdhdGVUYXJnZXQ9dGhpcywhbC5wcmVEaXNwYXRjaHx8bC5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsZSkhPT0hMSl7cz14LmV2ZW50LmhhbmRsZXJzLmNhbGwodGhpcyxlLHUpLHQ9MDt3aGlsZSgoaT1zW3QrK10pJiYhZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKXtlLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDt3aGlsZSgobz1pLmhhbmRsZXJzW24rK10pJiYhZS5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpKSghZS5uYW1lc3BhY2VfcmV8fGUubmFtZXNwYWNlX3JlLnRlc3Qoby5uYW1lc3BhY2UpKSYmKGUuaGFuZGxlT2JqPW8sZS5kYXRhPW8uZGF0YSxyPSgoeC5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSxhKSxyIT09dW5kZWZpbmVkJiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGwucG9zdERpc3BhdGNoJiZsLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLHM9W10sYT10LmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihhJiZ1Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPT10aGlzO3U9dS5wYXJlbnROb2RlfHx0aGlzKWlmKHUuZGlzYWJsZWQhPT0hMHx8ImNsaWNrIiE9PWUudHlwZSl7Zm9yKHI9W10sbj0wO2E+bjtuKyspbz10W25dLGk9by5zZWxlY3RvcisiICIscltpXT09PXVuZGVmaW5lZCYmKHJbaV09by5uZWVkc0NvbnRleHQ/eChpLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChpLHRoaXMsbnVsbCxbdV0pLmxlbmd0aCkscltpXSYmci5wdXNoKG8pO3IubGVuZ3RoJiZzLnB1c2goe2VsZW06dSxoYW5kbGVyczpyfSl9cmV0dXJuIHQubGVuZ3RoPmEmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOnQuc2xpY2UoYSl9KSxzfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLHM9dC5idXR0b247cmV0dXJuIG51bGw9PWUucGFnZVgmJm51bGwhPXQuY2xpZW50WCYmKG49ZS50YXJnZXQub3duZXJEb2N1bWVudHx8byxyPW4uZG9jdW1lbnRFbGVtZW50LGk9bi5ib2R5LGUucGFnZVg9dC5jbGllbnRYKyhyJiZyLnNjcm9sbExlZnR8fGkmJmkuc2Nyb2xsTGVmdHx8MCktKHImJnIuY2xpZW50TGVmdHx8aSYmaS5jbGllbnRMZWZ0fHwwKSxlLnBhZ2VZPXQuY2xpZW50WSsociYmci5zY3JvbGxUb3B8fGkmJmkuc2Nyb2xsVG9wfHwwKS0ociYmci5jbGllbnRUb3B8fGkmJmkuY2xpZW50VG9wfHwwKSksZS53aGljaHx8cz09PXVuZGVmaW5lZHx8KGUud2hpY2g9MSZzPzE6MiZzPzM6NCZzPzI6MCksZX19LGZpeDpmdW5jdGlvbihlKXtpZihlW3guZXhwYW5kb10pcmV0dXJuIGU7dmFyIHQsbixyLGk9ZS50eXBlLHM9ZSxhPXRoaXMuZml4SG9va3NbaV07YXx8KHRoaXMuZml4SG9va3NbaV09YT16LnRlc3QoaSk/dGhpcy5tb3VzZUhvb2tzOkkudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPWEucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoYS5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyB4LkV2ZW50KHMpLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPXNbbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9byksMz09PWUudGFyZ2V0Lm5vZGVUeXBlJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksYS5maWx0ZXI/YS5maWx0ZXIoZSxzKTplfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcyE9PVYoKSYmdGhpcy5mb2N1cz8odGhpcy5mb2N1cygpLCExKTp1bmRlZmluZWR9LGRlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PVYoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dW5kZWZpbmVkfSxkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4iY2hlY2tib3giPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZ4Lm5vZGVOYW1lKHRoaXMsImlucHV0Iik/KHRoaXMuY2xpY2soKSwhMSk6dW5kZWZpbmVkfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5yZXN1bHQhPT11bmRlZmluZWQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXguZXh0ZW5kKG5ldyB4LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj94LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnguZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHgucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9LHguRXZlbnQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHguRXZlbnQ/KGUmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9VOlkpOnRoaXMudHlwZT1lLHQmJnguZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fHgubm93KCksdGhpc1t4LmV4cGFuZG9dPSEwLHVuZGVmaW5lZCk6bmV3IHguRXZlbnQoZSx0KX0seC5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpZLGlzUHJvcGFnYXRpb25TdG9wcGVkOlksaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6WSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1VLGUmJmUucHJldmVudERlZmF1bHQmJmUucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9VSxlJiZlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1VLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSx4LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3guZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmo7cmV0dXJuKCFpfHxpIT09ciYmIXguY29udGFpbnMocixpKSkmJihlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmby5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmby5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIHQmJihuPW58fHQsdD11bmRlZmluZWQpO2ZvcihzIGluIGUpdGhpcy5vbihzLHQsbixlW3NdLGkpO3JldHVybiB0aGlzfWlmKG51bGw9PW4mJm51bGw9PXI/KHI9dCxuPXQ9dW5kZWZpbmVkKTpudWxsPT1yJiYoInN0cmluZyI9PXR5cGVvZiB0PyhyPW4sbj11bmRlZmluZWQpOihyPW4sbj10LHQ9dW5kZWZpbmVkKSkscj09PSExKXI9WTtlbHNlIGlmKCFyKXJldHVybiB0aGlzO3JldHVybiAxPT09aSYmKG89cixyPWZ1bmN0aW9uKGUpe3JldHVybiB4KCkub2ZmKGUpLG8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyLmd1aWQ9by5ndWlkfHwoby5ndWlkPXguZ3VpZCsrKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5hZGQodGhpcyxlLHIsbix0KX0pfSxvbmU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24oZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLHgoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKHIubmFtZXNwYWNlP3Iub3JpZ1R5cGUrIi4iK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4odD09PSExfHwiZnVuY3Rpb24iPT10eXBlb2YgdCkmJihuPXQsdD11bmRlZmluZWQpLG49PT0hMSYmKG49WSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX0sdHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtyZXR1cm4gbj94LmV2ZW50LnRyaWdnZXIoZSx0LG4sITApOnVuZGVmaW5lZH19KTt2YXIgRz0vXi5bXjojXFtcLixdKiQvLEo9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sUT14LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LEs9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hTdGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9eChlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9MDtmb3IoO24+ZTtlKyspaWYoeC5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZXQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFldCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmUS50ZXN0KGUpP3goZSk6ZXx8W10sITEpLmxlbmd0aH0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10scz1RLnRlc3QoZSl8fCJzdHJpbmciIT10eXBlb2YgZT94KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7aT5yO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKDExPm4ubm9kZVR5cGUmJihzP3MuaW5kZXgobik+LTE6MT09PW4ubm9kZVR5cGUmJnguZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSkpe249by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP3gudW5pcXVlKG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/Zy5jYWxsKHgoZSksdGhpc1swXSk6Zy5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPSJzdHJpbmciPT10eXBlb2YgZT94KGUsdCk6eC5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj14Lm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHgudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSk7ZnVuY3Rpb24gWihlLHQpe3doaWxlKChlPWVbdF0pJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBaKGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIFooZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmRpcihlLCJuZXh0U2libGluZyIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiB4LnNpYmxpbmcoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY29udGVudERvY3VtZW50fHx4Lm1lcmdlKFtdLGUuY2hpbGROb2Rlcyl9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT14Lm1hcCh0aGlzLHQsbik7cmV0dXJuIlVudGlsIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiYic3RyaW5nIj09dHlwZW9mIHImJihpPXguZmlsdGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihLW2VdfHx4LnVuaXF1ZShpKSxKLnRlc3QoZSkmJmkucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5maW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRpcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT1uIT09dW5kZWZpbmVkO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmeChlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pO2Z1bmN0aW9uIGV0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKEcudGVzdCh0KSlyZXR1cm4geC5maWx0ZXIodCxlLG4pO3Q9eC5maWx0ZXIodCxlKX1yZXR1cm4geC5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGcuY2FsbCh0LGUpPj0wIT09bn0pfXZhciB0dD0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2dpLG50PS88KFtcdzpdKykvLHJ0PS88fCYjP1x3KzsvLGl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksb3Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksc3Q9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksYXQ9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLHV0PS9edHJ1ZVwvKC4qKS8sbHQ9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLGN0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSx0cjpbMiwiPHRhYmxlPjx0Ym9keT4iLCI8L3Rib2R5PjwvdGFibGU+Il0sdGQ6WzMsIjx0YWJsZT48dGJvZHk+PHRyPiIsIjwvdHI+PC90Ym9keT48L3RhYmxlPiJdLF9kZWZhdWx0OlswLCIiLCIiXX07Y3Qub3B0Z3JvdXA9Y3Qub3B0aW9uLGN0LnRib2R5PWN0LnRmb290PWN0LmNvbGdyb3VwPWN0LmNhcHRpb249Y3QudGhlYWQsY3QudGg9Y3QudGQseC5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT11bmRlZmluZWQ/eC50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8bykuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9cHQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1wdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMpOnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNsZWFuRGF0YShtdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJmR0KG10KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHguY2xlYW5EYXRhKG10KGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsPT1lPyExOmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB4LmNsb25lKHRoaXMsZSx0KX0pfSxodG1sOmZ1bmN0aW9uKGUpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKGU9PT11bmRlZmluZWQmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFpdC50ZXN0KGUpJiYhY3RbKG50LmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPWUucmVwbGFjZSh0dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7cj5uO24rKyl0PXRoaXNbbl18fHt9LDE9PT10Lm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEobXQodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChpKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtpJiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1vdmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQsbil7ZT1mLmFwcGx5KFtdLGUpO3ZhciByLGksbyxzLGEsdSxsPTAsYz10aGlzLmxlbmd0aCxwPXRoaXMsaD1jLTEsZD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGQpO2lmKGd8fCEoMT49Y3x8InN0cmluZyIhPXR5cGVvZiBkfHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJnN0LnRlc3QoZCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWQuY2FsbCh0aGlzLHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihyPXguYnVpbGRGcmFnbWVudChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcyksaT1yLmZpcnN0Q2hpbGQsMT09PXIuY2hpbGROb2Rlcy5sZW5ndGgmJihyPWkpLGkpKXtmb3Iobz14Lm1hcChtdChyLCJzY3JpcHQiKSxmdCkscz1vLmxlbmd0aDtjPmw7bCsrKWE9cixsIT09aCYmKGE9eC5jbG9uZShhLCEwLCEwKSxzJiZ4Lm1lcmdlKG8sbXQoYSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1tsXSxhLGwpO2lmKHMpZm9yKHU9b1tvLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKG8saHQpLGw9MDtzPmw7bCsrKWE9b1tsXSxhdC50ZXN0KGEudHlwZXx8IiIpJiYhcS5hY2Nlc3MoYSwiZ2xvYmFsRXZhbCIpJiZ4LmNvbnRhaW5zKHUsYSkmJihhLnNyYz94Ll9ldmFsVXJsKGEuc3JjKTp4Lmdsb2JhbEV2YWwoYS50ZXh0Q29udGVudC5yZXBsYWNlKGx0LCIiKSkpfXJldHVybiB0aGlzfX0pLHguZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlKXt2YXIgbixyPVtdLGk9eChlKSxvPWkubGVuZ3RoLTEscz0wO2Zvcig7bz49cztzKyspbj1zPT09bz90aGlzOnRoaXMuY2xvbmUoITApLHgoaVtzXSlbdF0obiksaC5hcHBseShyLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KSx4LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jbG9uZU5vZGUoITApLHU9eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoISh4LnN1cHBvcnQubm9DbG9uZUNoZWNrZWR8fDEhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGV8fHguaXNYTUxEb2MoZSkpKWZvcihzPW10KGEpLG89bXQoZSkscj0wLGk9by5sZW5ndGg7aT5yO3IrKyl5dChvW3JdLHNbcl0pO2lmKHQpaWYobilmb3Iobz1vfHxtdChlKSxzPXN8fG10KGEpLHI9MCxpPW8ubGVuZ3RoO2k+cjtyKyspZ3Qob1tyXSxzW3JdKTtlbHNlIGd0KGUsYSk7cmV0dXJuIHM9bXQoYSwic2NyaXB0Iikscy5sZW5ndGg+MCYmZHQocywhdSYmbXQoZSwic2NyaXB0IikpLGF9LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsLGM9MCxwPWUubGVuZ3RoLGY9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1bXTtmb3IoO3A+YztjKyspaWYoaT1lW2NdLGl8fDA9PT1pKWlmKCJvYmplY3QiPT09eC50eXBlKGkpKXgubWVyZ2UoaCxpLm5vZGVUeXBlP1tpXTppKTtlbHNlIGlmKHJ0LnRlc3QoaSkpe289b3x8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShudC5leGVjKGkpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLGE9Y3Rbc118fGN0Ll9kZWZhdWx0LG8uaW5uZXJIVE1MPWFbMV0raS5yZXBsYWNlKHR0LCI8JDE+PC8kMj4iKSthWzJdLGw9YVswXTt3aGlsZShsLS0pbz1vLmxhc3RDaGlsZDt4Lm1lcmdlKGgsby5jaGlsZE5vZGVzKSxvPWYuZmlyc3RDaGlsZCxvLnRleHRDb250ZW50PSIifWVsc2UgaC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUoaSkpO2YudGV4dENvbnRlbnQ9IiIsYz0wO3doaWxlKGk9aFtjKytdKWlmKCghcnx8LTE9PT14LmluQXJyYXkoaSxyKSkmJih1PXguY29udGFpbnMoaS5vd25lckRvY3VtZW50LGkpLG89bXQoZi5hcHBlbmRDaGlsZChpKSwic2NyaXB0IiksdSYmZHQobyksbikpe2w9MDt3aGlsZShpPW9bbCsrXSlhdC50ZXN0KGkudHlwZXx8IiIpJiZuLnB1c2goaSl9cmV0dXJuIGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLHMsYT14LmV2ZW50LnNwZWNpYWwsdT0wO2Zvcig7KG49ZVt1XSkhPT11bmRlZmluZWQ7dSsrKXtpZihGLmFjY2VwdHMobikmJihvPW5bcS5leHBhbmRvXSxvJiYodD1xLmNhY2hlW29dKSkpe2lmKHI9T2JqZWN0LmtleXModC5ldmVudHN8fHt9KSxyLmxlbmd0aClmb3Iocz0wOyhpPXJbc10pIT09dW5kZWZpbmVkO3MrKylhW2ldP3guZXZlbnQucmVtb3ZlKG4saSk6eC5yZW1vdmVFdmVudChuLGksdC5oYW5kbGUpO3EuY2FjaGVbb10mJmRlbGV0ZSBxLmNhY2hlW29dfWRlbGV0ZSBMLmNhY2hlW25bTC5leHBhbmRvXV19fSxfZXZhbFVybDpmdW5jdGlvbihlKXtyZXR1cm4geC5hamF4KHt1cmw6ZSx0eXBlOiJHRVQiLGRhdGFUeXBlOiJzY3JpcHQiLGFzeW5jOiExLGdsb2JhbDohMSwidGhyb3dzIjohMH0pfX0pO2Z1bmN0aW9uIHB0KGUsdCl7cmV0dXJuIHgubm9kZU5hbWUoZSwidGFibGUiKSYmeC5ub2RlTmFtZSgxPT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0Ym9keSIpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpKTplfWZ1bmN0aW9uIGZ0KGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gaHQoZSl7dmFyIHQ9dXQuZXhlYyhlLnR5cGUpO3JldHVybiB0P2UudHlwZT10WzFdOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBkdChlLHQpe3ZhciBuPWUubGVuZ3RoLHI9MDtmb3IoO24+cjtyKyspcS5zZXQoZVtyXSwiZ2xvYmFsRXZhbCIsIXR8fHEuZ2V0KHRbcl0sImdsb2JhbEV2YWwiKSl9ZnVuY3Rpb24gZ3QoZSx0KXt2YXIgbixyLGksbyxzLGEsdSxsO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihxLmhhc0RhdGEoZSkmJihvPXEuYWNjZXNzKGUpLHM9cS5zZXQodCxvKSxsPW8uZXZlbnRzKSl7ZGVsZXRlIHMuaGFuZGxlLHMuZXZlbnRzPXt9O2ZvcihpIGluIGwpZm9yKG49MCxyPWxbaV0ubGVuZ3RoO3I+bjtuKyspeC5ldmVudC5hZGQodCxpLGxbaV1bbl0pfUwuaGFzRGF0YShlKSYmKGE9TC5hY2Nlc3MoZSksdT14LmV4dGVuZCh7fSxhKSxMLnNldCh0LHUpKX19ZnVuY3Rpb24gbXQoZSx0KXt2YXIgbj1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8IioiKTplLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W107cmV0dXJuIHQ9PT11bmRlZmluZWR8fHQmJngubm9kZU5hbWUoZSx0KT94Lm1lcmdlKFtlXSxuKTpufWZ1bmN0aW9uIHl0KGUsdCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyJpbnB1dCI9PT1uJiZvdC50ZXN0KGUudHlwZSk/dC5jaGVja2VkPWUuY2hlY2tlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX14LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk6KHRoaXNbMF0mJih0PXgoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpcyl9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4geC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14KHRoaXMpLG49dC5jb250ZW50cygpO24ubGVuZ3RoP24ud3JhcEFsbChlKTp0LmFwcGVuZChlKX0pfSx3cmFwOmZ1bmN0aW9uKGUpe3ZhciB0PXguaXNGdW5jdGlvbihlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3godGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcmVudCgpLmVhY2goZnVuY3Rpb24oKXt4Lm5vZGVOYW1lKHRoaXMsImJvZHkiKXx8eCh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSkuZW5kKCl9fSk7dmFyIHZ0LHh0LGJ0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyx3dD0vXm1hcmdpbi8sVHQ9UmVnRXhwKCJeKCIrYisiKSguKikkIiwiaSIpLEN0PVJlZ0V4cCgiXigiK2IrIikoPyFweClbYS16JV0rJCIsImkiKSxrdD1SZWdFeHAoIl4oWystXSk9KCIrYisiKSIsImkiKSxOdD17Qk9EWToiYmxvY2sifSxFdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sU3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sanQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxEdD1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIEF0KGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1EdC5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9RHRbaV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHF0KHQpe3JldHVybiBlLmdldENvbXB1dGVkU3R5bGUodCxudWxsKX1mdW5jdGlvbiBIdChlLHQpe3ZhciBuLHIsaSxvPVtdLHM9MCxhPWUubGVuZ3RoO2Zvcig7YT5zO3MrKylyPWVbc10sci5zdHlsZSYmKG9bc109cS5nZXQociwib2xkZGlzcGxheSIpLG49ci5zdHlsZS5kaXNwbGF5LHQ/KG9bc118fCJub25lIiE9PW58fChyLnN0eWxlLmRpc3BsYXk9IiIpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZMdChyKSYmKG9bc109cS5hY2Nlc3Mociwib2xkZGlzcGxheSIsUnQoci5ub2RlTmFtZSkpKSk6b1tzXXx8KGk9THQociksKG4mJiJub25lIiE9PW58fCFpKSYmcS5zZXQociwib2xkZGlzcGxheSIsaT9uOnguY3NzKHIsImRpc3BsYXkiKSkpKTtmb3Iocz0wO2E+cztzKyspcj1lW3NdLHIuc3R5bGUmJih0JiYibm9uZSIhPT1yLnN0eWxlLmRpc3BsYXkmJiIiIT09ci5zdHlsZS5kaXNwbGF5fHwoci5zdHlsZS5kaXNwbGF5PXQ/b1tzXXx8IiI6Im5vbmUiKSk7cmV0dXJuIGV9eC5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30scz0wO2lmKHguaXNBcnJheSh0KSl7Zm9yKHI9cXQoZSksaT10Lmxlbmd0aDtpPnM7cysrKW9bdFtzXV09eC5jc3MoZSx0W3NdLCExLHIpO3JldHVybiBvfXJldHVybiBuIT09dW5kZWZpbmVkP3guc3R5bGUoZSx0LG4pOnguY3NzKGUsdCl9LGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIEh0KHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe0x0KHRoaXMpP3godGhpcykuc2hvdygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj12dChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0IjoiY3NzRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5bGUpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpLHU9ZS5zdHlsZTtyZXR1cm4gdD14LmNzc1Byb3BzW2FdfHwoeC5jc3NQcm9wc1thXT1BdCh1LGEpKSxzPXguY3NzSG9va3NbdF18fHguY3NzSG9va3NbYV0sbj09PXVuZGVmaW5lZD9zJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITEscikpIT09dW5kZWZpbmVkP2k6dVt0XToobz10eXBlb2Ygbiwic3RyaW5nIj09PW8mJihpPWt0LmV4ZWMobikpJiYobj0oaVsxXSsxKSppWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSx0KSksbz0ibnVtYmVyIiksbnVsbD09bnx8Im51bWJlciI9PT1vJiZpc05hTihuKXx8KCJudW1iZXIiIT09b3x8eC5jc3NOdW1iZXJbYV18fChuKz0icHgiKSx4LnN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KHVbdF09ImluaGVyaXQiKSxzJiYic2V0ImluIHMmJihuPXMuc2V0KGUsbixyKSk9PT11bmRlZmluZWR8fCh1W3RdPW4pKSx1bmRlZmluZWQpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhPXguY2FtZWxDYXNlKHQpO3JldHVybiB0PXguY3NzUHJvcHNbYV18fCh4LmNzc1Byb3BzW2FdPUF0KGUuc3R5bGUsYSkpLHM9eC5jc3NIb29rc1t0XXx8eC5jc3NIb29rc1thXSxzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsITAsbikpLGk9PT11bmRlZmluZWQmJihpPXZ0KGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFN0JiYoaT1TdFt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksbj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmkpOml9fSksdnQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxzPW58fHF0KGUpLGE9cz9zLmdldFByb3BlcnR5VmFsdWUodCl8fHNbdF06dW5kZWZpbmVkLHU9ZS5zdHlsZTtyZXR1cm4gcyYmKCIiIT09YXx8eC5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fChhPXguc3R5bGUoZSx0KSksQ3QudGVzdChhKSYmd3QudGVzdCh0KSYmKHI9dS53aWR0aCxpPXUubWluV2lkdGgsbz11Lm1heFdpZHRoLHUubWluV2lkdGg9dS5tYXhXaWR0aD11LndpZHRoPWEsYT1zLndpZHRoLHUud2lkdGg9cix1Lm1pbldpZHRoPWksdS5tYXhXaWR0aD1vKSksYX07ZnVuY3Rpb24gT3QoZSx0LG4pe3ZhciByPVR0LmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzFdLShufHwwKSkrKHJbMl18fCJweCIpOnR9ZnVuY3Rpb24gRnQoZSx0LG4scixpKXt2YXIgbz1uPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKT80OiJ3aWR0aCI9PT10PzE6MCxzPTA7Zm9yKDs0Pm87bys9MikibWFyZ2luIj09PW4mJihzKz14LmNzcyhlLG4ranRbb10sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJihzLT14LmNzcyhlLCJwYWRkaW5nIitqdFtvXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYocy09eC5jc3MoZSwiYm9yZGVyIitqdFtvXSsiV2lkdGgiLCEwLGkpKSk6KHMrPXguY3NzKGUsInBhZGRpbmciK2p0W29dLCEwLGkpLCJwYWRkaW5nIiE9PW4mJihzKz14LmNzcyhlLCJib3JkZXIiK2p0W29dKyJXaWR0aCIsITAsaSkpKTtyZXR1cm4gc31mdW5jdGlvbiBQdChlLHQsbil7dmFyIHI9ITAsaT0id2lkdGgiPT09dD9lLm9mZnNldFdpZHRoOmUub2Zmc2V0SGVpZ2h0LG89cXQoZSkscz14LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLG8pO2lmKDA+PWl8fG51bGw9PWkpe2lmKGk9dnQoZSx0LG8pLCgwPml8fG51bGw9PWkpJiYoaT1lLnN0eWxlW3RdKSxDdC50ZXN0KGkpKXJldHVybiBpO3I9cyYmKHguc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZXx8aT09PWUuc3R5bGVbdF0pLGk9cGFyc2VGbG9hdChpKXx8MH1yZXR1cm4gaStGdChlLHQsbnx8KHM/ImJvcmRlciI6ImNvbnRlbnQiKSxyLG8pKyJweCJ9ZnVuY3Rpb24gUnQoZSl7dmFyIHQ9byxuPU50W2VdO3JldHVybiBufHwobj1NdChlLHQpLCJub25lIiE9PW4mJm58fCh4dD0oeHR8fHgoIjxpZnJhbWUgZnJhbWVib3JkZXI9JzAnIHdpZHRoPScwJyBoZWlnaHQ9JzAnLz4iKS5jc3MoImNzc1RleHQiLCJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQiKSkuYXBwZW5kVG8odC5kb2N1bWVudEVsZW1lbnQpLHQ9KHh0WzBdLmNvbnRlbnRXaW5kb3d8fHh0WzBdLmNvbnRlbnREb2N1bWVudCkuZG9jdW1lbnQsdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksdC5jbG9zZSgpLG49TXQoZSx0KSx4dC5kZXRhY2goKSksTnRbZV09biksbn1mdW5jdGlvbiBNdChlLHQpe3ZhciBuPXgodC5jcmVhdGVFbGVtZW50KGUpKS5hcHBlbmRUbyh0LmJvZHkpLHI9eC5jc3MoblswXSwiZGlzcGxheSIpO3JldHVybiBuLnJlbW92ZSgpLHJ9eC5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7cmV0dXJuIG4/MD09PWUub2Zmc2V0V2lkdGgmJmJ0LnRlc3QoeC5jc3MoZSwiZGlzcGxheSIpKT94LnN3YXAoZSxFdCxmdW5jdGlvbigpe3JldHVybiBQdChlLHQscil9KTpQdChlLHQscik6dW5kZWZpbmVkfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPXImJnF0KGUpO3JldHVybiBPdChlLG4scj9GdChlLHQscix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sdnQsW2UsIm1hcmdpblJpZ2h0Il0pOnVuZGVmaW5lZH19KSwheC5zdXBwb3J0LnBpeGVsUG9zaXRpb24mJnguZm4ucG9zaXRpb24mJnguZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe3guY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4pe3JldHVybiBuPyhuPXZ0KGUsdCksQ3QudGVzdChuKT94KGUpLnBvc2l0aW9uKClbdF0rInB4IjpuKTp1bmRlZmluZWR9fX0pfSkseC5leHByJiZ4LmV4cHIuZmlsdGVycyYmKHguZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4gMD49ZS5vZmZzZXRXaWR0aCYmMD49ZS5vZmZzZXRIZWlnaHR9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStqdFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSx3dC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1PdCl9KTt2YXIgV3Q9LyUyMC9nLCR0PS9cW1xdJC8sQnQ9L1xyP1xuL2csSXQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLHp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmenQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIUl0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFvdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKEJ0LCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShCdCwiXHJcbiIpfX0pLmdldCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt0PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LHJbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZih0PT09dW5kZWZpbmVkJiYodD14LmFqYXhTZXR0aW5ncyYmeC5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpLHguaXNBcnJheShlKXx8ZS5qcXVlcnkmJiF4LmlzUGxhaW5PYmplY3QoZSkpeC5lYWNoKGUsZnVuY3Rpb24oKXtpKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKG4gaW4gZSlfdChuLGVbbl0sdCxpKTtyZXR1cm4gci5qb2luKCImIikucmVwbGFjZShXdCwiKyIpfTtmdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaTtpZih4LmlzQXJyYXkodCkpeC5lYWNoKHQsZnVuY3Rpb24odCxpKXtufHwkdC50ZXN0KGUpP3IoZSxpKTpfdChlKyJbIisoIm9iamVjdCI9PXR5cGVvZiBpP3Q6IiIpKyJdIixpLG4scil9KTtlbHNlIGlmKG58fCJvYmplY3QiIT09eC50eXBlKHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpX3QoZSsiWyIraSsiXSIsdFtpXSxuLHIpfXguZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe3guZm5bdF09ZnVuY3Rpb24oZSxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4wP3RoaXMub24odCxudWxsLGUsbik6dGhpcy50cmlnZ2VyKHQpfX0pLHguZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCkKfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pO3ZhciBYdCxVdCxZdD14Lm5vdygpLFZ0PS9cPy8sR3Q9LyMuKiQvLEp0PS8oWz8mXSlfPVteJl0qLyxRdD0vXiguKj8pOlsgXHRdKihbXlxyXG5dKikkL2dtLEt0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFp0PS9eKD86R0VUfEhFQUQpJC8sZW49L15cL1wvLyx0bj0vXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sbm49eC5mbi5sb2FkLHJuPXt9LG9uPXt9LHNuPSIqLyIuY29uY2F0KCIqIik7dHJ5e1V0PWkuaHJlZn1jYXRjaChhbil7VXQ9by5jcmVhdGVFbGVtZW50KCJhIiksVXQuaHJlZj0iIixVdD1VdC5ocmVmfVh0PXRuLmV4ZWMoVXQudG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIHVuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKHcpfHxbXTtpZih4LmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBsbihlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1vbjtmdW5jdGlvbiBzKGEpe3ZhciB1O3JldHVybiBpW2FdPSEwLHguZWFjaChlW2FdfHxbXSxmdW5jdGlvbihlLGEpe3ZhciBsPWEodCxuLHIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgbHx8b3x8aVtsXT9vPyEodT1sKTp1bmRlZmluZWQ6KHQuZGF0YVR5cGVzLnVuc2hpZnQobCkscyhsKSwhMSl9KSx1fXJldHVybiBzKHQuZGF0YVR5cGVzWzBdKXx8IWlbIioiXSYmcygiKiIpfWZ1bmN0aW9uIGNuKGUsdCl7dmFyIG4scixpPXguYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXRbbl0hPT11bmRlZmluZWQmJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJnguZXh0ZW5kKCEwLGUsciksZX14LmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe2lmKCJzdHJpbmciIT10eXBlb2YgZSYmbm4pcmV0dXJuIG5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgcixpLG8scz10aGlzLGE9ZS5pbmRleE9mKCIgIik7cmV0dXJuIGE+PTAmJihyPWUuc2xpY2UoYSksZT1lLnNsaWNlKDAsYSkpLHguaXNGdW5jdGlvbih0KT8obj10LHQ9dW5kZWZpbmVkKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIikscy5sZW5ndGg+MCYmeC5hamF4KHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1sKHI/eCgiPGRpdj4iKS5hcHBlbmQoeC5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5jb21wbGV0ZShuJiZmdW5jdGlvbihlLHQpe3MuZWFjaChuLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LHguZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHguZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpVdCx0eXBlOiJHRVQiLGlzTG9jYWw6S3QudGVzdChYdFsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpzbix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOngucGFyc2VKU09OLCJ0ZXh0IHhtbCI6eC5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/Y24oY24oZSx4LmFqYXhTZXR0aW5ncyksdCk6Y24oeC5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6dW4ocm4pLGFqYXhUcmFuc3BvcnQ6dW4ob24pLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT11bmRlZmluZWQpLHQ9dHx8e307dmFyIG4scixpLG8scyxhLHUsbCxjPXguYWpheFNldHVwKHt9LHQpLHA9Yy5jb250ZXh0fHxjLGY9Yy5jb250ZXh0JiYocC5ub2RlVHlwZXx8cC5qcXVlcnkpP3gocCk6eC5ldmVudCxoPXguRGVmZXJyZWQoKSxkPXguQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGc9Yy5zdGF0dXNDb2RlfHx7fSxtPXt9LHk9e30sdj0wLGI9ImNhbmNlbGVkIixUPXtyZWFkeVN0YXRlOjAsZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoMj09PXYpe2lmKCFvKXtvPXt9O3doaWxlKHQ9UXQuZXhlYyhpKSlvW3RbMV0udG9Mb3dlckNhc2UoKV09dFsyXX10PW9bZS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbnVsbD09dD9udWxsOnR9LGdldEFsbFJlc3BvbnNlSGVhZGVyczpmdW5jdGlvbigpe3JldHVybiAyPT09dj9pOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHZ8fChlPXlbbl09eVtuXXx8ZSxtW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZ8fChjLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZigyPnYpZm9yKHQgaW4gZSlnW3RdPVtnW3RdLGVbdF1dO2Vsc2UgVC5hbHdheXMoZVtULnN0YXR1c10pO3JldHVybiB0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXt2YXIgdD1lfHxiO3JldHVybiBuJiZuLmFib3J0KHQpLGsoMCx0KSx0aGlzfX07aWYoaC5wcm9taXNlKFQpLmNvbXBsZXRlPWQuYWRkLFQuc3VjY2Vzcz1ULmRvbmUsVC5lcnJvcj1ULmZhaWwsYy51cmw9KChlfHxjLnVybHx8VXQpKyIiKS5yZXBsYWNlKEd0LCIiKS5yZXBsYWNlKGVuLFh0WzFdKyIvLyIpLGMudHlwZT10Lm1ldGhvZHx8dC50eXBlfHxjLm1ldGhvZHx8Yy50eXBlLGMuZGF0YVR5cGVzPXgudHJpbShjLmRhdGFUeXBlfHwiKiIpLnRvTG93ZXJDYXNlKCkubWF0Y2godyl8fFsiIl0sbnVsbD09Yy5jcm9zc0RvbWFpbiYmKGE9dG4uZXhlYyhjLnVybC50b0xvd2VyQ2FzZSgpKSxjLmNyb3NzRG9tYWluPSEoIWF8fGFbMV09PT1YdFsxXSYmYVsyXT09PVh0WzJdJiYoYVszXXx8KCJodHRwOiI9PT1hWzFdPyI4MCI6IjQ0MyIpKT09PShYdFszXXx8KCJodHRwOiI9PT1YdFsxXT8iODAiOiI0NDMiKSkpKSxjLmRhdGEmJmMucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2YgYy5kYXRhJiYoYy5kYXRhPXgucGFyYW0oYy5kYXRhLGMudHJhZGl0aW9uYWwpKSxsbihybixjLHQsVCksMj09PXYpcmV0dXJuIFQ7dT1jLmdsb2JhbCx1JiYwPT09eC5hY3RpdmUrKyYmeC5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxjLnR5cGU9Yy50eXBlLnRvVXBwZXJDYXNlKCksYy5oYXNDb250ZW50PSFadC50ZXN0KGMudHlwZSkscj1jLnVybCxjLmhhc0NvbnRlbnR8fChjLmRhdGEmJihyPWMudXJsKz0oVnQudGVzdChyKT8iJiI6Ij8iKStjLmRhdGEsZGVsZXRlIGMuZGF0YSksYy5jYWNoZT09PSExJiYoYy51cmw9SnQudGVzdChyKT9yLnJlcGxhY2UoSnQsIiQxXz0iK1l0KyspOnIrKFZ0LnRlc3Qocik/IiYiOiI/IikrIl89IitZdCsrKSksYy5pZk1vZGlmaWVkJiYoeC5sYXN0TW9kaWZpZWRbcl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLHgubGFzdE1vZGlmaWVkW3JdKSx4LmV0YWdbcl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIseC5ldGFnW3JdKSksKGMuZGF0YSYmYy5oYXNDb250ZW50JiZjLmNvbnRlbnRUeXBlIT09ITF8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsYy5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGMuZGF0YVR5cGVzWzBdJiZjLmFjY2VwdHNbYy5kYXRhVHlwZXNbMF1dP2MuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0rKCIqIiE9PWMuZGF0YVR5cGVzWzBdPyIsICIrc24rIjsgcT0wLjAxIjoiIik6Yy5hY2NlcHRzWyIqIl0pO2ZvcihsIGluIGMuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIobCxjLmhlYWRlcnNbbF0pO2lmKGMuYmVmb3JlU2VuZCYmKGMuYmVmb3JlU2VuZC5jYWxsKHAsVCxjKT09PSExfHwyPT09dikpcmV0dXJuIFQuYWJvcnQoKTtiPSJhYm9ydCI7Zm9yKGwgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0pVFtsXShjW2xdKTtpZihuPWxuKG9uLGMsdCxUKSl7VC5yZWFkeVN0YXRlPTEsdSYmZi50cmlnZ2VyKCJhamF4U2VuZCIsW1QsY10pLGMuYXN5bmMmJmMudGltZW91dD4wJiYocz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VC5hYm9ydCgidGltZW91dCIpfSxjLnRpbWVvdXQpKTt0cnl7dj0xLG4uc2VuZChtLGspfWNhdGNoKEMpe2lmKCEoMj52KSl0aHJvdyBDO2soLTEsQyl9fWVsc2UgaygtMSwiTm8gVHJhbnNwb3J0Iik7ZnVuY3Rpb24gayhlLHQsbyxhKXt2YXIgbCxtLHksYix3LEM9dDsyIT09diYmKHY9MixzJiZjbGVhclRpbWVvdXQocyksbj11bmRlZmluZWQsaT1hfHwiIixULnJlYWR5U3RhdGU9ZT4wPzQ6MCxsPWU+PTIwMCYmMzAwPmV8fDMwND09PWUsbyYmKGI9cG4oYyxULG8pKSxiPWZuKGMsYixULGwpLGw/KGMuaWZNb2RpZmllZCYmKHc9VC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLHcmJih4Lmxhc3RNb2RpZmllZFtyXT13KSx3PVQuZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSx3JiYoeC5ldGFnW3JdPXcpKSwyMDQ9PT1lfHwiSEVBRCI9PT1jLnR5cGU/Qz0ibm9jb250ZW50IjozMDQ9PT1lP0M9Im5vdG1vZGlmaWVkIjooQz1iLnN0YXRlLG09Yi5kYXRhLHk9Yi5lcnJvcixsPSF5KSk6KHk9QywoZXx8IUMpJiYoQz0iZXJyb3IiLDA+ZSYmKGU9MCkpKSxULnN0YXR1cz1lLFQuc3RhdHVzVGV4dD0odHx8QykrIiIsbD9oLnJlc29sdmVXaXRoKHAsW20sQyxUXSk6aC5yZWplY3RXaXRoKHAsW1QsQyx5XSksVC5zdGF0dXNDb2RlKGcpLGc9dW5kZWZpbmVkLHUmJmYudHJpZ2dlcihsPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW1QsYyxsP206eV0pLGQuZmlyZVdpdGgocCxbVCxDXSksdSYmKGYudHJpZ2dlcigiYWpheENvbXBsZXRlIixbVCxjXSksLS14LmFjdGl2ZXx8eC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIFR9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geC5nZXQoZSx1bmRlZmluZWQsdCwic2NyaXB0Iil9fSkseC5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUsdCl7eFt0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4geC5pc0Z1bmN0aW9uKG4pJiYoaT1pfHxyLHI9bixuPXVuZGVmaW5lZCkseC5hamF4KHt1cmw6ZSx0eXBlOnQsZGF0YVR5cGU6aSxkYXRhOm4sc3VjY2VzczpyfSl9fSk7ZnVuY3Rpb24gcG4oZSx0LG4pe3ZhciByLGksbyxzLGE9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLHI9PT11bmRlZmluZWQmJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIGEpaWYoYVtpXSYmYVtpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pO2JyZWFrfXN8fChzPWkpfW89b3x8c31yZXR1cm4gbz8obyE9PXVbMF0mJnUudW5zaGlmdChvKSxuW29dKTp1bmRlZmluZWR9ZnVuY3Rpb24gZm4oZSx0LG4scil7dmFyIGksbyxzLGEsdSxsPXt9LGM9ZS5kYXRhVHlwZXMuc2xpY2UoKTtpZihjWzFdKWZvcihzIGluIGUuY29udmVydGVycylsW3MudG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW3NdO289Yy5zaGlmdCgpO3doaWxlKG8paWYoZS5yZXNwb25zZUZpZWxkc1tvXSYmKG5bZS5yZXNwb25zZUZpZWxkc1tvXV09dCksIXUmJnImJmUuZGF0YUZpbHRlciYmKHQ9ZS5kYXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpLHU9byxvPWMuc2hpZnQoKSlpZigiKiI9PT1vKW89dTtlbHNlIGlmKCIqIiE9PXUmJnUhPT1vKXtpZihzPWxbdSsiICIrb118fGxbIiogIitvXSwhcylmb3IoaSBpbiBsKWlmKGE9aS5zcGxpdCgiICIpLGFbMV09PT1vJiYocz1sW3UrIiAiK2FbMF1dfHxsWyIqICIrYVswXV0pKXtzPT09ITA/cz1sW2ldOmxbaV0hPT0hMCYmKG89YVswXSxjLnVuc2hpZnQoYVsxXSkpO2JyZWFrfWlmKHMhPT0hMClpZihzJiZlWyJ0aHJvd3MiXSl0PXModCk7ZWxzZSB0cnl7dD1zKHQpfWNhdGNoKHApe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOnM/cDoiTm8gY29udmVyc2lvbiBmcm9tICIrdSsiIHRvICIrb319fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX14LmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6Lyg/OmphdmF8ZWNtYSlzY3JpcHQvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiB4Lmdsb2JhbEV2YWwoZSksZX19fSkseC5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2UuY2FjaGU9PT11bmRlZmluZWQmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiKX0pLHguYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKHIsaSl7dD14KCI8c2NyaXB0PiIpLnByb3Aoe2FzeW5jOiEwLGNoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKCJsb2FkIGVycm9yIixuPWZ1bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJmkoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxvLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIGhuPVtdLGRuPS8oPSlcPyg/PSZ8JCl8XD9cPy87eC5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPWhuLnBvcCgpfHx4LmV4cGFuZG8rIl8iK1l0Kys7cmV0dXJuIHRoaXNbZV09ITAsZX19KSx4LmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLHMsYT10Lmpzb25wIT09ITEmJihkbi50ZXN0KHQudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIHQuZGF0YSYmISh0LmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJmRuLnRlc3QodC5kYXRhKSYmImRhdGEiKTtyZXR1cm4gYXx8Impzb25wIj09PXQuZGF0YVR5cGVzWzBdPyhpPXQuanNvbnBDYWxsYmFjaz14LmlzRnVuY3Rpb24odC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2ssYT90W2FdPXRbYV0ucmVwbGFjZShkbiwiJDEiK2kpOnQuanNvbnAhPT0hMSYmKHQudXJsKz0oVnQudGVzdCh0LnVybCk/IiYiOiI/IikrdC5qc29ucCsiPSIraSksdC5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHN8fHguZXJyb3IoaSsiIHdhcyBub3QgY2FsbGVkIiksc1swXX0sdC5kYXRhVHlwZXNbMF09Impzb24iLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7cz1hcmd1bWVudHN9LHIuYWx3YXlzKGZ1bmN0aW9uKCl7ZVtpXT1vLHRbaV0mJih0Lmpzb25wQ2FsbGJhY2s9bi5qc29ucENhbGxiYWNrLGhuLnB1c2goaSkpLHMmJnguaXNGdW5jdGlvbihvKSYmbyhzWzBdKSxzPW89dW5kZWZpbmVkfSksInNjcmlwdCIpOnVuZGVmaW5lZH0pLHguYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3ZhciBnbj14LmFqYXhTZXR0aW5ncy54aHIoKSxtbj17MDoyMDAsMTIyMzoyMDR9LHluPTAsdm49e307ZS5BY3RpdmVYT2JqZWN0JiZ4KGUpLm9uKCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHZuKXZuW2VdKCk7dm49dW5kZWZpbmVkfSkseC5zdXBwb3J0LmNvcnM9ISFnbiYmIndpdGhDcmVkZW50aWFscyJpbiBnbix4LnN1cHBvcnQuYWpheD1nbj0hIWduLHguYWpheFRyYW5zcG9ydChmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4geC5zdXBwb3J0LmNvcnN8fGduJiYhZS5jcm9zc0RvbWFpbj97c2VuZDpmdW5jdGlvbihuLHIpe3ZhciBpLG8scz1lLnhocigpO2lmKHMub3BlbihlLnR5cGUsZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpLGUueGhyRmllbGRzKWZvcihpIGluIGUueGhyRmllbGRzKXNbaV09ZS54aHJGaWVsZHNbaV07ZS5taW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUoZS5taW1lVHlwZSksZS5jcm9zc0RvbWFpbnx8blsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoblsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO2ZvcihpIGluIG4pcy5zZXRSZXF1ZXN0SGVhZGVyKGksbltpXSk7dD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt0JiYoZGVsZXRlIHZuW29dLHQ9cy5vbmxvYWQ9cy5vbmVycm9yPW51bGwsImFib3J0Ij09PWU/cy5hYm9ydCgpOiJlcnJvciI9PT1lP3Iocy5zdGF0dXN8fDQwNCxzLnN0YXR1c1RleHQpOnIobW5bcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsInN0cmluZyI9PXR5cGVvZiBzLnJlc3BvbnNlVGV4dD97dGV4dDpzLnJlc3BvbnNlVGV4dH06dW5kZWZpbmVkLHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPXQoKSxzLm9uZXJyb3I9dCgiZXJyb3IiKSx0PXZuW289eW4rK109dCgiYWJvcnQiKSxzLnNlbmQoZS5oYXNDb250ZW50JiZlLmRhdGF8fG51bGwpfSxhYm9ydDpmdW5jdGlvbigpe3QmJnQoKX19OnVuZGVmaW5lZH0pO3ZhciB4bixibix3bj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sVG49UmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrYisiKShbYS16JV0qKSQiLCJpIiksQ249L3F1ZXVlSG9va3MkLyxrbj1bQW5dLE5uPXsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpLHI9bi5jdXIoKSxpPVRuLmV4ZWModCksbz1pJiZpWzNdfHwoeC5jc3NOdW1iZXJbZV0/IiI6InB4Iikscz0oeC5jc3NOdW1iZXJbZV18fCJweCIhPT1vJiYrcikmJlRuLmV4ZWMoeC5jc3Mobi5lbGVtLGUpKSxhPTEsdT0yMDtpZihzJiZzWzNdIT09byl7bz1vfHxzWzNdLGk9aXx8W10scz0rcnx8MTtkbyBhPWF8fCIuNSIscy89YSx4LnN0eWxlKG4uZWxlbSxlLHMrbyk7d2hpbGUoYSE9PShhPW4uY3VyKCkvcikmJjEhPT1hJiYtLXUpfXJldHVybiBpJiYocz1uLnN0YXJ0PStzfHwrcnx8MCxuLnVuaXQ9byxuLmVuZD1pWzFdP3MrKGlbMV0rMSkqaVsyXToraVsyXSksbn1dfTtmdW5jdGlvbiBFbigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eG49dW5kZWZpbmVkfSkseG49eC5ub3coKX1mdW5jdGlvbiBTbihlLHQsbil7dmFyIHIsaT0oTm5bdF18fFtdKS5jb25jYXQoTm5bIioiXSksbz0wLHM9aS5sZW5ndGg7Zm9yKDtzPm87bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBqbihlLHQsbil7dmFyIHIsaSxvPTAscz1rbi5sZW5ndGgsYT14LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO3ZhciB0PXhufHxFbigpLG49TWF0aC5tYXgoMCxsLnN0YXJ0VGltZStsLmR1cmF0aW9uLXQpLHI9bi9sLmR1cmF0aW9ufHwwLG89MS1yLHM9MCx1PWwudHdlZW5zLmxlbmd0aDtmb3IoO3U+cztzKyspbC50d2VlbnNbc10ucnVuKG8pO3JldHVybiBhLm5vdGlmeVdpdGgoZSxbbCxvLG5dKSwxPm8mJnU/bjooYS5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPWEucHJvbWlzZSh7ZWxlbTplLHByb3BzOnguZXh0ZW5kKHt9LHQpLG9wdHM6eC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTp4bnx8RW4oKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXguVHdlZW4oZSxsLm9wdHMsdCxuLGwub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxsLm9wdHMuZWFzaW5nKTtyZXR1cm4gbC50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2wudHdlZW5zLmxlbmd0aDowO2lmKGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7cj5uO24rKylsLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/YS5yZXNvbHZlV2l0aChlLFtsLHRdKTphLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKERuKGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO3M+bztvKyspaWYocj1rbltvXS5jYWxsKGwsZSxjLGwub3B0cykpcmV0dXJuIHI7cmV0dXJuIHgubWFwKGMsU24sbCkseC5pc0Z1bmN0aW9uKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKGUsbCkseC5meC50aW1lcih4LmV4dGVuZCh1LHtlbGVtOmUsYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKX1mdW5jdGlvbiBEbihlLHQpe3ZhciBuLHIsaSxvLHM7Zm9yKG4gaW4gZSlpZihyPXguY2FtZWxDYXNlKG4pLGk9dFtyXSxvPWVbbl0seC5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSkscz14LmNzc0hvb2tzW3JdLHMmJiJleHBhbmQiaW4gcyl7bz1zLmV4cGFuZChvKSxkZWxldGUgZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfXguQW5pbWF0aW9uPXguZXh0ZW5kKGpuLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7eC5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9yKDtpPnI7cisrKW49ZVtyXSxObltuXT1ObltuXXx8W10sTm5bbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9rbi51bnNoaWZ0KGUpOmtuLnB1c2goZSl9fSk7ZnVuY3Rpb24gQW4oZSx0LG4pe3ZhciByLGksbyxzLGEsdSxsPXRoaXMsYz17fSxwPWUuc3R5bGUsZj1lLm5vZGVUeXBlJiZMdChlKSxoPXEuZ2V0KGUsImZ4c2hvdyIpO24ucXVldWV8fChhPXguX3F1ZXVlSG9va3MoZSwiZngiKSxudWxsPT1hLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHU9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHUoKX0pLGEudW5xdWV1ZWQrKyxsLmFsd2F5cyhmdW5jdGlvbigpe2wuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLHgucXVldWUoZSwiZngiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksMT09PWUubm9kZVR5cGUmJigiaGVpZ2h0ImluIHR8fCJ3aWR0aCJpbiB0KSYmKG4ub3ZlcmZsb3c9W3Aub3ZlcmZsb3cscC5vdmVyZmxvd1gscC5vdmVyZmxvd1ldLCJpbmxpbmUiPT09eC5jc3MoZSwiZGlzcGxheSIpJiYibm9uZSI9PT14LmNzcyhlLCJmbG9hdCIpJiYocC5kaXNwbGF5PSJpbmxpbmUtYmxvY2siKSksbi5vdmVyZmxvdyYmKHAub3ZlcmZsb3c9ImhpZGRlbiIsbC5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLHduLmV4ZWMoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZj8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09aXx8IWh8fGhbcl09PT11bmRlZmluZWQpY29udGludWU7Zj0hMH1jW3JdPWgmJmhbcl18fHguc3R5bGUoZSxyKX1pZigheC5pc0VtcHR5T2JqZWN0KGMpKXtoPyJoaWRkZW4iaW4gaCYmKGY9aC5oaWRkZW4pOmg9cS5hY2Nlc3MoZSwiZnhzaG93Iix7fSksbyYmKGguaGlkZGVuPSFmKSxmP3goZSkuc2hvdygpOmwuZG9uZShmdW5jdGlvbigpe3goZSkuaGlkZSgpfSksbC5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7cS5yZW1vdmUoZSwiZnhzaG93Iik7Zm9yKHQgaW4gYyl4LnN0eWxlKGUsdCxjW3RdKX0pO2ZvcihyIGluIGMpcz1TbihmP2hbcl06MCxyLGwpLHIgaW4gaHx8KGhbcl09cy5zdGFydCxmJiYocy5lbmQ9cy5zdGFydCxzLnN0YXJ0PSJ3aWR0aCI9PT1yfHwiaGVpZ2h0Ij09PXI/MTowKSl9fWZ1bmN0aW9uIExuKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBMbi5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfXguVHdlZW49TG4sTG4ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpMbixpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHwic3dpbmciLHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1yLHRoaXMudW5pdD1vfHwoeC5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPUxuLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpMbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj1Mbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5wb3M9dD10aGlzLm9wdGlvbnMuZHVyYXRpb24/eC5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpMbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxMbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9TG4ucHJvdG90eXBlLExuLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbnVsbD09ZS5lbGVtW2UucHJvcF18fGUuZWxlbS5zdHlsZSYmbnVsbCE9ZS5lbGVtLnN0eWxlW2UucHJvcF0/KHQ9eC5jc3MoZS5lbGVtLGUucHJvcCwiIiksdCYmImF1dG8iIT09dD90OjApOmUuZWxlbVtlLnByb3BdfSxzZXQ6ZnVuY3Rpb24oZSl7eC5meC5zdGVwW2UucHJvcF0/eC5meC5zdGVwW2UucHJvcF0oZSk6ZS5lbGVtLnN0eWxlJiYobnVsbCE9ZS5lbGVtLnN0eWxlW3guY3NzUHJvcHNbZS5wcm9wXV18fHguY3NzSG9va3NbZS5wcm9wXSk/eC5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCk6ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX0sTG4ucHJvcEhvb2tzLnNjcm9sbFRvcD1Mbi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx4LmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49eC5mblt0XTt4LmZuW3RdPWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gbnVsbD09ZXx8ImJvb2xlYW4iPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUocW4odCwhMCksZSxyLGkpfX0pLHguZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKEx0KS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmlzRW1wdHlPYmplY3QoZSksbz14LnNwZWVkKHQsbixyKSxzPWZ1bmN0aW9uKCl7dmFyIHQ9am4odGhpcyx4LmV4dGVuZCh7fSxlKSxvKTsoaXx8cS5nZXQodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gcy5maW5pc2g9cyxpfHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKHMpOnRoaXMucXVldWUoby5xdWV1ZSxzKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChuKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj10LHQ9ZSxlPXVuZGVmaW5lZCksdCYmZSE9PSExJiZ0aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZSsicXVldWVIb29rcyIsbz14LnRpbWVycyxzPXEuZ2V0KHRoaXMpO2lmKGkpc1tpXSYmc1tpXS5zdG9wJiZyKHNbaV0pO2Vsc2UgZm9yKGkgaW4gcylzW2ldJiZzW2ldLnN0b3AmJkNuLnRlc3QoaSkmJnIoc1tpXSk7Zm9yKGk9by5sZW5ndGg7aS0tOylvW2ldLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW2ldLnF1ZXVlIT09ZXx8KG9baV0uYW5pbS5zdG9wKG4pLHQ9ITEsby5zcGxpY2UoaSwxKSk7KHR8fCFuKSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49cS5nZXQodGhpcykscj1uW2UrInF1ZXVlIl0saT1uW2UrInF1ZXVlSG9va3MiXSxvPXgudGltZXJzLHM9cj9yLmxlbmd0aDowO2ZvcihuLmZpbmlzaD0hMCx4LnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCghMCksby5zcGxpY2UodCwxKSk7Zm9yKHQ9MDtzPnQ7dCsrKXJbdF0mJnJbdF0uZmluaXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pO2Z1bmN0aW9uIHFuKGUsdCl7dmFyIG4scj17aGVpZ2h0OmV9LGk9MDtmb3IodD10PzE6MDs0Pmk7aSs9Mi10KW49anRbaV0sclsibWFyZ2luIituXT1yWyJwYWRkaW5nIituXT1lO3JldHVybiB0JiYoci5vcGFjaXR5PXIud2lkdGg9ZSkscn14LmVhY2goe3NsaWRlRG93bjpxbigic2hvdyIpLHNsaWRlVXA6cW4oImhpZGUiKSxzbGlkZVRvZ2dsZTpxbigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe3guZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSkseC5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP3guZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8eC5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiF4LmlzRnVuY3Rpb24odCkmJnR9O3JldHVybiByLmR1cmF0aW9uPXguZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiByLmR1cmF0aW9uP3IuZHVyYXRpb246ci5kdXJhdGlvbiBpbiB4LmZ4LnNwZWVkcz94LmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTp4LmZ4LnNwZWVkcy5fZGVmYXVsdCwobnVsbD09ci5xdWV1ZXx8ci5xdWV1ZT09PSEwKSYmKHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7eC5pc0Z1bmN0aW9uKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZ4LmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0seC5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfX0seC50aW1lcnM9W10seC5meD1Mbi5wcm90b3R5cGUuaW5pdCx4LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PXgudGltZXJzLG49MDtmb3IoeG49eC5ub3coKTt0Lmxlbmd0aD5uO24rKyllPXRbbl0sZSgpfHx0W25dIT09ZXx8dC5zcGxpY2Uobi0tLDEpO3QubGVuZ3RofHx4LmZ4LnN0b3AoKSx4bj11bmRlZmluZWR9LHguZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ4LnRpbWVycy5wdXNoKGUpJiZ4LmZ4LnN0YXJ0KCl9LHguZnguaW50ZXJ2YWw9MTMseC5meC5zdGFydD1mdW5jdGlvbigpe2JufHwoYm49c2V0SW50ZXJ2YWwoeC5meC50aWNrLHguZnguaW50ZXJ2YWwpKX0seC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChibiksYm49bnVsbH0seC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0seC5meC5zdGVwPXt9LHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4geC5ncmVwKHgudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSkseC5mbi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXVuZGVmaW5lZD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXt4Lm9mZnNldC5zZXRPZmZzZXQodGhpcyxlLHQpfSk7dmFyIHQsbixpPXRoaXNbMF0sbz17dG9wOjAsbGVmdDowfSxzPWkmJmkub3duZXJEb2N1bWVudDtpZihzKXJldHVybiB0PXMuZG9jdW1lbnRFbGVtZW50LHguY29udGFpbnModCxpKT8odHlwZW9mIGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0IT09ciYmKG89aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSksbj1IbihzKSx7dG9wOm8udG9wK24ucGFnZVlPZmZzZXQtdC5jbGllbnRUb3AsbGVmdDpvLmxlZnQrbi5wYWdlWE9mZnNldC10LmNsaWVudExlZnR9KTpvfSx4Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8scyxhLHUsbCxjPXguY3NzKGUsInBvc2l0aW9uIikscD14KGUpLGY9e307InN0YXRpYyI9PT1jJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxhPXAub2Zmc2V0KCksbz14LmNzcyhlLCJ0b3AiKSx1PXguY3NzKGUsImxlZnQiKSxsPSgiYWJzb2x1dGUiPT09Y3x8ImZpeGVkIj09PWMpJiYobyt1KS5pbmRleE9mKCJhdXRvIik+LTEsbD8ocj1wLnBvc2l0aW9uKCkscz1yLnRvcCxpPXIubGVmdCk6KHM9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLHguaXNGdW5jdGlvbih0KSYmKHQ9dC5jYWxsKGUsbixhKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1hLnRvcCtzKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LWEubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpwLmNzcyhmKX19LHguZm4uZXh0ZW5kKHtwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbj10aGlzWzBdLHI9e3RvcDowLGxlZnQ6MH07cmV0dXJuImZpeGVkIj09PXguY3NzKG4sInBvc2l0aW9uIik/dD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOihlPXRoaXMub2Zmc2V0UGFyZW50KCksdD10aGlzLm9mZnNldCgpLHgubm9kZU5hbWUoZVswXSwiaHRtbCIpfHwocj1lLm9mZnNldCgpKSxyLnRvcCs9eC5jc3MoZVswXSwiYm9yZGVyVG9wV2lkdGgiLCEwKSxyLmxlZnQrPXguY3NzKGVbMF0sImJvcmRlckxlZnRXaWR0aCIsITApKSx7dG9wOnQudG9wLXIudG9wLXguY3NzKG4sIm1hcmdpblRvcCIsITApLGxlZnQ6dC5sZWZ0LXIubGVmdC14LmNzcyhuLCJtYXJnaW5MZWZ0IiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnR8fHM7d2hpbGUoZSYmIXgubm9kZU5hbWUoZSwiaHRtbCIpJiYic3RhdGljIj09PXguY3NzKGUsInBvc2l0aW9uIikpZT1lLm9mZnNldFBhcmVudDtyZXR1cm4gZXx8c30pfX0pLHguZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LG4pe3ZhciByPSJwYWdlWU9mZnNldCI9PT1uO3guZm5bdF09ZnVuY3Rpb24oaSl7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24odCxpLG8pe3ZhciBzPUhuKHQpO3JldHVybiBvPT09dW5kZWZpbmVkP3M/c1tuXTp0W2ldOihzP3Muc2Nyb2xsVG8ocj9lLnBhZ2VYT2Zmc2V0Om8scj9vOmUucGFnZVlPZmZzZXQpOnRbaV09byx1bmRlZmluZWQpfSx0LGksYXJndW1lbnRzLmxlbmd0aCxudWxsKX19KTtmdW5jdGlvbiBIbihlKXtyZXR1cm4geC5pc1dpbmRvdyhlKT9lOjk9PT1lLm5vZGVUeXBlJiZlLmRlZmF1bHRWaWV3fXguZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5lYWNoKHtwYWRkaW5nOiJpbm5lciIrZSxjb250ZW50OnQsIiI6Im91dGVyIitlfSxmdW5jdGlvbihuLHIpe3guZm5bcl09ZnVuY3Rpb24ocixpKXt2YXIgbz1hcmd1bWVudHMubGVuZ3RoJiYobnx8ImJvb2xlYW4iIT10eXBlb2Ygcikscz1ufHwocj09PSEwfHxpPT09ITA/Im1hcmdpbiI6ImJvcmRlciIpO3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKHQsbixyKXt2YXIgaTtyZXR1cm4geC5pc1dpbmRvdyh0KT90LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTo5PT09dC5ub2RlVHlwZT8oaT10LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIrZV0saVsic2Nyb2xsIitlXSx0LmJvZHlbIm9mZnNldCIrZV0saVsib2Zmc2V0IitlXSxpWyJjbGllbnQiK2VdKSk6cj09PXVuZGVmaW5lZD94LmNzcyh0LG4scyk6eC5zdHlsZSh0LG4scixzKX0sdCxvP3I6dW5kZWZpbmVkLG8sbnVsbCl9fSl9KSx4LmZuLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sZW5ndGh9LHguZm4uYW5kU2VsZj14LmZuLmFkZEJhY2ssIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz14OiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQmJmRlZmluZSgianF1ZXJ5IixbXSxmdW5jdGlvbigpe3JldHVybiB4fSksIm9iamVjdCI9PXR5cGVvZiBlJiYib2JqZWN0Ij09dHlwZW9mIGUuZG9jdW1lbnQmJihlLmpRdWVyeT1lLiQ9eCl9KSh3aW5kb3cpOwo="}]},{"name":"Filecrypt cleaner","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["filecrypt.cc/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1526307676798,"data":{}},"enabled":false,"position":12,"file_url":"https://code.ponywave.de/workspace/test/fuck/filecryptcleaner.user.js","uuid":"aa255f04-b20c-4244-b349-aa0d060fb834","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBGaWxlY3J5cHQgY2xlYW5lcgovLyBAbmFtZXNwYWNlICAgIGh0dHA6Ly90YW1wZXJtb25rZXkubmV0LwovLyBAdmVyc2lvbiAgICAgIDAuMTIKLy8gQGRlc2NyaXB0aW9uICBSZW1vdmVzIEJhbm5lciBmcm9tIGZpbGVjcnlwdC5jYwovLyBAYXV0aG9yICAgICAgIEFrYW1hcnUKLy8gQGhvbWVwYWdlVVJMICBodHRwczovL2FrYW1hcnUuZGUKLy8gQHVwZGF0ZVVSTCAgICBodHRwczovL2NvZGUucG9ueXdhdmUuZGUvd29ya3NwYWNlL3Rlc3QvZnVjay9maWxlY3J5cHRjbGVhbmVyLnVzZXIuanMKLy8gQG1hdGNoICAgICAgICBmaWxlY3J5cHQuY2MvKgoKLy8gQGdyYW50ICAgICAgICBub25lCgoKLy8gPT0vVXNlclNjcmlwdD09Ci8qIGpzaGludCAtVzA5NyAqLwondXNlIHN0cmljdCc7CgovLyBUaGlzIGZldGNoZXMgYWxsIG9mIHRoZSA8aW1nPiB0YWdzIGFuZCBzdG9yZXMgdGhlbSBpbiAidGFncyIuCnZhciB0YWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpOwoKLy8gVGhpcyBsb29wcyBvdmVyIGFsbCBvZiB0aGUgPGltZz4gdGFncy4KZm9yICh2YXIgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKSB7CgogIC8vIFRoaXMgcmVwbGFjZXMgdGhlIHNyYyBhdHRyaWJ1dGUgb2YgdGhlIHRhZyB3aXRoIHRoZSBtb2RpZmllZCBvbmUKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL3VsaTIucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL3VsaTIucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZpbGVjcnlwdC5jYy9ibG9iL3VsaTIucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly9maWxlY3J5cHQuY2MvYmxvYi91bGkyLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly93d3cuZmlsZWNyeXB0LmNjL2ltYWdlcy91bGkyLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vd3d3LmZpbGVjcnlwdC5jYy9pbWFnZXMvdWxpMi5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwOi8vZmlsZWNyeXB0LmNjL2ltYWdlcy94cjJtMnZjcy5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwczovL2ZpbGVjcnlwdC5jYy9pbWFnZXMveHIybTJ2Y3MucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL3d3dy5maWxlY3J5cHQuY2MvaW1hZ2VzL3hyMm0ydmNzLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vd3d3LmZpbGVjcnlwdC5jYy9pbWFnZXMveHIybTJ2Y3MucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZpbGVjcnlwdC5jYy9pbWFnZXMvc29ydGUucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL3NvcnRlLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9maWxlY3J5cHQuY2MvYmxvYi9zb3J0ZS5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwczovL2ZpbGVjcnlwdC5jYy9ibG9iL3NvcnRlLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly93d3cuZmlsZWNyeXB0LmNjL2ltYWdlcy9zb3J0ZS5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwczovL3d3dy5maWxlY3J5cHQuY2MvaW1hZ2VzL3NvcnRlLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL2praDMyNGtqaC5wbmcnLCAnJyk7CiAgdGFnc1tpXS5zcmMgPSB0YWdzW2ldLnNyYy5yZXBsYWNlKCdodHRwczovL2ZpbGVjcnlwdC5jYy9pbWFnZXMvamtoMzI0a2poLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly93d3cuZmlsZWNyeXB0LmNjL2ltYWdlcy9qa2gzMjRramgucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly93d3cuZmlsZWNyeXB0LmNjL2ltYWdlcy9qa2gzMjRramgucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cHM6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL2Y0YTEwYTE3LmpwZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly9maWxlY3J5cHQuY2MvaW1hZ2VzL2Y0YTEwYTE3LmpwZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vd3d3LmZpbGVjcnlwdC5jYy9pbWFnZXMvZjRhMTBhMTcuanBnJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL3d3dy5maWxlY3J5cHQuY2MvaW1hZ2VzL2Y0YTEwYTE3LmpwZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vZmlsZWNyeXB0LmNjL2Jsb2IvNXZwZGVub2QucG5nJywgJycpOwogIHRhZ3NbaV0uc3JjID0gdGFnc1tpXS5zcmMucmVwbGFjZSgnaHR0cDovL2ZpbGVjcnlwdC5jYy9ibG9iLzV2cGRlbm9kLnBuZycsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHA6Ly90aGV2cG5kZWFsLmRvd25sb2FkL2IvNWFkODdlNDQxOWQ1NDI4YjE5MTMyYjM4LzkyNDkwODA1MCcsICcnKTsKICB0YWdzW2ldLnNyYyA9IHRhZ3NbaV0uc3JjLnJlcGxhY2UoJ2h0dHBzOi8vdGhldnBuZGVhbC5kb3dubG9hZC9iLzVhZDg3ZTQ0MTlkNTQyOGIxOTEzMmIzOC85MjQ5MDgwNTAnLCAnJyk7Cn0="},{"name":"Twitter background restorer","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["https://twitter.com/"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1527247725611,"data":{"backgroundURL":"shttps://img.ponywave.de/di/H0XJ/Noire_(Profilhintergrund)_Hyperdimension_Neptunia_Re;Birth1.jpg"}},"enabled":false,"position":13,"file_url":"https://openuserjs.org/install/agubelu/Twitter_background_restorer.user.js","uuid":"dc85c590-3b26-4c53-91bb-4975dedcb51e","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFR3aXR0ZXIgYmFja2dyb3VuZCByZXN0b3JlcgovLyBAbmFtZXNwYWNlICAgYWd1YmVsdQovLyBAaW5jbHVkZSAgICAgaHR0cHM6Ly90d2l0dGVyLmNvbS8KLy8gQGdyYW50ICAgICAgIEdNX2dldFZhbHVlCi8vIEBncmFudCAgICAgICBHTV9zZXRWYWx1ZQovLyBAdmVyc2lvbiAgICAgMQovLyA9PS9Vc2VyU2NyaXB0PT0KCiAgdmFyIGJnX3VybCA9IEdNX2dldFZhbHVlKCJiYWNrZ3JvdW5kVVJMIiwgZmFsc2UpOwoKICBpZighYmdfdXJsKSB7CiAgIGJnX3VybCA9IHByb21wdCgiUGxlYXNlIGlucHV0IHlvdXIgYmFja2dyb3VuZCBpbWFnZSBVUkw6IiwgIiIpOwogICBHTV9zZXRWYWx1ZSgiYmFja2dyb3VuZFVSTCIsIGJnX3VybCk7CiAgfQoKICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICJ1cmwoJyIgKyBiZ191cmwgKyAiJykiOwogIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9ICJuby1yZXBlYXQiOwogIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZEF0dGFjaG1lbnQgPSAiZml4ZWQiOw=="},{"name":"Romsmania.cc - Swap download link","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://romsmania.cc/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1538310704784,"data":{}},"enabled":true,"position":14,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/romsmania-link-swapper.user.js","uuid":"a298c7e0-6776-4c9f-aeab-70a9659bc1d1","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBSb21zbWFuaWEuY2MgLSBTd2FwIGRvd25sb2FkIGxpbmsKLy8gQHZlcnNpb24gICAgICAxLjEuMgovLyBAZGVzY3JpcHRpb24gIFN3YXBzIHRoZSBkb3dubG9hZCBidXR0b24gbGluayBhbmQgZm9yY2VzIGRvd25sb2FkIHdpdGhvdXQgdGltZW91dAovLyBAYXV0aG9yICAgICAgIEJyYXdsCi8vIEBtYXRjaCAgICAgICAgaHR0cHM6Ly9yb21zbWFuaWEuY2MvKgovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vcm9tc21hbmlhLmNjL2Zhdmljb24uaWNvCi8vIEBkb3dubG9hZFVSTCAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEvcmF3L3JvbXNtYW5pYS1saW5rLXN3YXBwZXIudXNlci5qcwovLyBAdXBkYXRlVVJMICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9yb21zbWFuaWEtbGluay1zd2FwcGVyLnVzZXIuanMKLy8gQHN1cHBvcnRVUkwgICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMSNjb21tZW50cwovLyBAZ3JhbnQgICAgICAgIG5vbmUKLy8gPT0vVXNlclNjcmlwdD09CgooZnVuY3Rpb24oKSB7CiAgICAndXNlIHN0cmljdCc7CiAgICAKICAgIGlmIChkb2N1bWVudC5VUkwuc3BsaXQoJy8nKVszXSA9PT0gJ2Rvd25sb2FkJykgewogICAgICAgIC8vIEZvcmNlIGRvd25sb2FkIGFuZCBjbGVhciBjb3VudGRvd24KICAgICAgICBmb3IodmFyIGk9MDsgaTwxMDAwMDA7IGkrKykgY2xlYXJUaW1lb3V0KGkpOyAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDQzMzk0NAogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3dhaXRfX3RleHQnKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3dhaXRfX2xpbmsnKVswXTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUmVwbGFjZSBETCBMaW5rCiAgICAgICAgdmFyIGRsTGlua0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rvd25sb2FkX2xpbmsnKTsKICAgICAgICBkbExpbmtFbC5ocmVmID0gZGxMaW5rRWwuaHJlZi5yZXBsYWNlKCc/ZmFzdCcsICcnKTsKCiAgICAgICAgLy8gSGlkZSAic2hvdyBtb3JlIgogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vcmUnKVswXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgIAogICAgICAgIC8vIEFwcGVuZCBpbmZvCiAgICAgICAgdmFyIGFib3V0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwogICAgICAgIGFib3V0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJMaW5rIHN3YXBwZWQgd2l0aCBMaW5rIFN3YXBwZXIgVXNlcnNjcmlwdCIpKTsKICAgICAgICBkbExpbmtFbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhYm91dCwgZGxMaW5rRWwubmV4dFNpYmxpbmcpOwogICAgfQoKfSkoKTsK"},{"name":"EmuParadise Download Workaround","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.emuparadise.me/*/*/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1538315498494,"data":{}},"enabled":true,"position":15,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/emuparadise-download-workaround.user.js","uuid":"86973ddc-e3ce-44bb-9b12-f678538e835e","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBFbXVQYXJhZGlzZSBEb3dubG9hZCBXb3JrYXJvdW5kCi8vIEB2ZXJzaW9uICAgICAgMS4xLjIuMQovLyBAZGVzY3JpcHRpb24gIFJlcGxhY2VzIHRoZSBkb3dubG9hZCBidXR0b24gbGluayB3aXRoIGEgd29ya2luZyBvbmUuIE5vdyB3aXRob3V0IGpRdWVyeSEKLy8gQGF1dGhvciAgICAgICBFcHR1biwgQnJhd2wKLy8gQG1hdGNoICAgICAgICBodHRwczovL3d3dy5lbXVwYXJhZGlzZS5tZS8qLyovKgovLyBAZG93bmxvYWRVUkwgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9lbXVwYXJhZGlzZS1kb3dubG9hZC13b3JrYXJvdW5kLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCAgICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcvZW11cGFyYWRpc2UtZG93bmxvYWQtd29ya2Fyb3VuZC51c2VyLmpzCi8vIEBzdXBwb3J0VVJMICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEjY29tbWVudHMKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwogICAgCiAgICB2YXIgdXJsV2l0aG91dEFuY2hvciA9IGRvY3VtZW50LlVSTC5zcGxpdCgnIycpWzBdOwogICAgdmFyIGlkID0gdXJsV2l0aG91dEFuY2hvci5zcGxpdCgnLycpWzVdOwogICAgdmFyIGRsTGlua0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZG93bmxvYWQtbGluaycpWzBdOwoKICAgIHZhciBsaW5rRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CiAgICBsaW5rRWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0Rvd25sb2FkIHVzaW5nIHRoZSB3b3JrYXJvdW5kIHNjcmlwdCAobWlkZGxlIGNsaWNrIGluIEZpcmVmb3gpJykpOwogICAgbGlua0VsLmhyZWYgPSAnL3JvbXMvZ2V0LWRvd25sb2FkLnBocD9naWQ9JyArIGlkICsgJyZ0ZXN0PXRydWUnCiAgICBsaW5rRWwudGFyZ2V0ID0gJ19ibGFuaycKCiAgICBkbExpbmtFbC5pbnNlcnRCZWZvcmUobGlua0VsLCBkbExpbmtFbC5maXJzdENoaWxkKTsKICAgIGxpbmtFbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKICAgIGxpbmtFbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKCn0pKCk7Cg=="},{"name":"Fuck You Discord","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://old.reddit.com/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1545167415570,"data":{}},"enabled":false,"position":16,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/fuck-you-discord.user.js","uuid":"ea7d525b-a3bb-4644-bbca-2de685782a18","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBGdWNrIFlvdSBEaXNjb3JkCi8vIEB2ZXJzaW9uICAgICAgMS4wLjEuMQovLyBAZGVzY3JpcHRpb24gIFN3YXBzIERpc2NvcmRhcHAgSW1hZ2UgTGlua3MKLy8gQGF1dGhvciAgICAgICBCcmF3bAovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vb2xkLnJlZGRpdC5jb20vKgovLyBAZG93bmxvYWRVUkwgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9mdWNrLXlvdS1kaXNjb3JkLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCAgICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcvZnVjay15b3UtZGlzY29yZC51c2VyLmpzCi8vIEBzdXBwb3J0VVJMICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEjY29tbWVudHMKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwogICAgdmFyIHBhdHRlcm4gPSAvXmh0dHBzPzpcL1wvLitcLmRpc2NvcmRhcHBcLig/OmNvbXxuZXQpXC9hdHRhY2htZW50c1wvXGQrXC9cZCtcLy4rXC4oPzpwbmd8anBnfGpwZWd8Z2lmfGJtcCkvOwogICAgCiAgICB2YXIgYWxsX2xpbmtzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTsKICAgIGZvcih2YXIgaT0wOyBpIDwgYWxsX2xpbmtzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGxpbmsgPSBhbGxfbGlua3NbaV07CiAgICAgICAgaWYocGF0dGVybi50ZXN0KGxpbmspKSB7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9ICJodHRwczovL2FuZGk3LnViZXIuc3BhY2UvaW1nLnBocD91cmw9IiArIGxpbmsuaHJlZjsKICAgICAgICB9CiAgICB9CiAgICAKICAgIHZhciBhbGxfaW1hZ2VzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpOwogICAgZm9yKHZhciBpPTA7IGkgPCBhbGxfaW1hZ2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGltYWdlID0gYWxsX2ltYWdlc1tpXTsKICAgICAgICBpZihwYXR0ZXJuLnRlc3QoaW1hZ2UpKSB7CiAgICAgICAgICAgIGltYWdlLnNyYyA9ICJodHRwczovL2FuZGk3LnViZXIuc3BhY2UvaW1nLnBocD91cmw9IiArIGltYWdlLnNyYzsKICAgICAgICB9CiAgICB9Cgp9KSgpOwo="},{"name":"YouTube (Old Design) - No Translation","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.youtube.com/watch?v=*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1548697487946,"data":{}},"enabled":false,"position":17,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/youtube-no-translation.user.js","uuid":"7afb5e7b-eaca-4afc-9a35-d47f2e95d5e6","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBZb3VUdWJlIChPbGQgRGVzaWduKSAtIE5vIFRyYW5zbGF0aW9uCi8vIEB2ZXJzaW9uICAgICAgMS4wLjAKLy8gQGRlc2NyaXB0aW9uICBVc2VzIHRoZSBvcmlnaW5hbCB0aXRsZSBmb3IgdmlkZW8gcGFnZXMKLy8gQGF1dGhvciAgICAgICBCcmF3bAovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9KgovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vcy55dGltZy5jb20veXRzL2ltZy9mYXZpY29uLXZmbDhxU1YyRi5pY28KLy8gQGRvd25sb2FkVVJMICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcveW91dHViZS1uby10cmFuc2xhdGlvbi51c2VyLmpzCi8vIEB1cGRhdGVVUkwgICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEvcmF3L3lvdXR1YmUtbm8tdHJhbnNsYXRpb24udXNlci5qcwovLyBAc3VwcG9ydFVSTCAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxI2NvbW1lbnRzCi8vIEBncmFudCAgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKICAgIAogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVvdy10aXRsZSIpLmlubmVyVGV4dCA9IGRvY3VtZW50LnRpdGxlLnN1YnN0cmluZygwLCBkb2N1bWVudC50aXRsZS5sZW5ndGggLSAxMCk7Cgp9KSgpOwo="},{"name":"Zeit.de - Kein ZEIT PLUS","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.zeit.de/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1548697543065,"data":{}},"enabled":true,"position":18,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/kein-zeit-plus.user.js","uuid":"08c51ebb-c99d-4e7d-a99e-873e08dc1756","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBaZWl0LmRlIC0gS2VpbiBaRUlUIFBMVVMKLy8gQHZlcnNpb24gICAgICAxLjAuMAovLyBAZGVzY3JpcHRpb24gIEVudGZlcm50IFpFSVQgUExVUyBBcnRpa2VsCi8vIEBhdXRob3IgICAgICAgQnJhd2wKLy8gQG1hdGNoICAgICAgICBodHRwczovL3d3dy56ZWl0LmRlLyoKLy8gQGljb24gICAgICAgICBodHRwczovL3d3dy56ZWl0LmRlL2Zhdmljb24uaWNvCi8vIEBkb3dubG9hZFVSTCAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEvcmF3L2tlaW4temVpdC1wbHVzLnVzZXIuanMKLy8gQHVwZGF0ZVVSTCAgICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcva2Vpbi16ZWl0LXBsdXMudXNlci5qcwovLyBAc3VwcG9ydFVSTCAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxI2NvbW1lbnRzCi8vIEBncmFudCAgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbigpIHsKICAgICd1c2Ugc3RyaWN0JzsKICAgIAogICAgdmFyIGFydGljbGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2FydGljbGUnKTsKICAgIHZhciB6cGx1c2FydGljbGUgPSBudWxsOwogICAgZm9yKHZhciBpID0gMDsgaSA8IGFydGljbGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICBpZih0eXBlb2YgYXJ0aWNsZXNbaV0uZGF0YXNldFsienBsdXMiXSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHpwbHVzYXJ0aWNsZSA9IGFydGljbGVzW2ldOwogICAgICAgICAgenBsdXNhcnRpY2xlLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgICB9CiAgICB9Cgp9KSgpOwo="},{"name":"Google.de - \"Es fehlt\" gar nichts","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.google.com/search*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1551373828622,"data":{}},"enabled":true,"position":19,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/google-es-fehlt-gar-nichts.user.js","uuid":"91a44956-59ac-48f0-8bce-d212ad13ce81","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBHb29nbGUuZGUgLSAiRXMgZmVobHQiIGdhciBuaWNodHMKLy8gQHZlcnNpb24gICAgICAxLjAuMS4xCi8vIEBkZXNjcmlwdGlvbiAgR3JhdXQgIkVzIGZlaGx0IiBFcmdlYm5pc3NlIGF1cwovLyBAYXV0aG9yICAgICAgIEJyYXdsMzQ1Ci8vIEBtYXRjaCAgICAgICAgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zZWFyY2gqCi8vIEBpY29uICAgICAgICAgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9zMi9mYXZpY29ucz9kb21haW49d3d3Lmdvb2dsZS5jb20KLy8gQGRvd25sb2FkVVJMICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcvZ29vZ2xlLWVzLWZlaGx0LWdhci1uaWNodHMudXNlci5qcwovLyBAdXBkYXRlVVJMICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9nb29nbGUtZXMtZmVobHQtZ2FyLW5pY2h0cy51c2VyLmpzCi8vIEBzdXBwb3J0VVJMICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEjY29tbWVudHMKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBhbGxfbWlzc2luZyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzIik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbF9taXNzaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIG1pc3NpbmdQYXJlbnQgPSBhbGxfbWlzc2luZ1tpXS5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50OwogICAgICAgIG1pc3NpbmdQYXJlbnQuc3R5bGUub3BhY2l0eSA9IDAuMzsKICAgIH0KCn0pKCk7Cg=="},{"name":"blockblockadblock","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_prototypes":true,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1565462276679,"data":{}},"enabled":true,"position":20,"file_url":"https://github.com/Mechazawa/BlockBlockAdBlock/raw/master/blockblockadblock.user.js","uuid":"200d4fa2-fd29-434a-80b8-0d5142335612","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIGJsb2NrYmxvY2thZGJsb2NrCi8vIEBkZXNjcmlwdGlvbiBCbG9ja3MgQmxvY2tBZEJsb2NrLmpzIGZyb20gcnVubmluZwovLyBAbmFtZXNwYWNlICAgTWVjaGF6YXdhCi8vIEBhdXRob3IgICAgICBNZWNoYXphd2EKLy8gQGluY2x1ZGUgICAgICoKLy8gQHZlcnNpb24gICAgIDQKLy8gQGxpY2Vuc2UgICAgIFVubGljZW5zZQovLyBAdXBkYXRlVVJMICAgaHR0cHM6Ly9naXRodWIuY29tL01lY2hhemF3YS9CbG9ja0Jsb2NrQWRCbG9jay9yYXcvbWFzdGVyL0Jsb2NrQmxvY2tBZEJsb2NrLnVzZXIuanMKLy8gQHJ1bi1hdCAgICAgIGRvY3VtZW50LXN0YXJ0Ci8vIEBncmFudCAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKCgovLyBJIGhhdmUgYSBidW5jaCBtb3JlIHdheXMgb2YgZGV0ZWN0aW5nIGl0IGluIGNhc2UgdGhpcyBtZXRob2QgZXZlciBnZXRzIGJsb2NrZWQKKGZ1bmN0aW9uKHdpbmRvdykgewogICAgdmFyIHdpbmRvd0tleXNEZWZhdWx0ID0gT2JqZWN0LmtleXMod2luZG93KTsKICAgIHZhciBpc0ZpcmVmb3ggPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gLTE7CgogICAgdmFyIHBpdm90ID0gJ0x5OTNkM2N1WjI5dloyeGxMbU52YlM5aFpITmxibk5sTDNOMFlYSjBMMmx0WVdkbGN5OW1ZWFpwWTI5dUxtbGpidz09JzsKCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHdpbmRvd0tleXNTdXNwZWN0ID0gT2JqZWN0LmtleXMod2luZG93KQogICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB3aW5kb3dLZXlzRGVmYXVsdC5pbmRleE9mKHgpID09PSAtMSAmJiB4Lmxlbmd0aCA9PSAxMjt9KTsKCiAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHdpbmRvd0tleXNTdXNwZWN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHZhciBzdXNwZWN0TmFtZSA9IHdpbmRvd0tleXNTdXNwZWN0W2ldOwoKICAgICAgICAgICAgaWYoaXNGaXJlZm94KSB7CiAgICAgICAgICAgICAgICB2YXIgc3VzcGVjdCA9IHdpbmRvd1tzdXNwZWN0TmFtZV07CiAgICAgICAgICAgICAgICB2YXIgc3VzcGVjdEtleXMgPSBPYmplY3Qua2V5cyhzdXNwZWN0KTsKICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGZvciAodmFyIGlpIGluIHN1c3BlY3RLZXlzKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHN1c3BlY3Rbc3VzcGVjdEtleXNbaWldXS50b1NvdXJjZSgpOwogICAgICAgICAgICAgICAgICAgIGZvdW5kID0gc291cmNlLmluZGV4T2YocGl2b3QpICE9PSAtMTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvdW5kID0gL1xEXGRcRC8uZXhlYyhzdXNwZWN0TmFtZSkgIT09IG51bGw7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKGZvdW5kKSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRm91bmQgQmxvY2tBZEJsb2NrIHdpdGggbmFtZSAnICsgc3VzcGVjdE5hbWUpOwogICAgICAgICAgICAgICAgZGVsZXRlIHdpbmRvd1tzdXNwZWN0TmFtZV07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKfSkod2luZG93KTsK"},{"name":"shrtz.me Ad Patch","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http://*/*","https://*/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1565462292927,"data":{}},"enabled":false,"position":21,"file_url":"https://greasyfork.org/scripts/386992-shrtz-me-ad-patch/code/shrtzme%20Ad%20Patch.user.js","uuid":"eee13c42-e3dd-4776-a1da-e723f3e6e7b5","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBzaHJ0ei5tZSBBZCBQYXRjaAovLyBAbmFtZXNwYWNlICAgIFNob3J0em9uCi8vIEB2ZXJzaW9uICAgICAgMC4xCi8vIEBkZXNjcmlwdGlvbiAgUGF0Y2hlcyBtb3N0IFNob3J0em9uIHNocnR6Lm1lIGxpbmtzIHRvIHJlbW92ZSBhZHMsIHRpbWVyLCBhbmQgbWFrZSB0aGVtIGF1dG9tYXRpY2FsbHkgcHJvY2VlZCBhZnRlciBjYXB0Y2hhIGlzIHNvbHZlZC4KLy8gQGF1dGhvciAgICAgICA0Y2hhbm5lbCBQaXJhdGUKLy8gQGluY2x1ZGUgICAgICBodHRwOi8vKi8qCi8vIEBpbmNsdWRlICAgICAgaHR0cHM6Ly8qLyoKLy8gQHJlcXVpcmUgICAgICBodHRwOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0zLjMuMS5taW4uanMKLy8gQGdyYW50ICAgICAgICBub25lCi8vIEBydW4tYXQgICAgICAgZG9jdW1lbnQtc3RhcnQKLy8gPT0vVXNlclNjcmlwdD09Cgp2YXIgdGltZVZhbCA9IDEwMDsKCmF1dG9Qcm9jZWVkID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoJCgnI2NvdW50ZG93bicpLmxlbmd0aCkgewogICAgICAgIHZhciBlID0gJCgnI2dvLWxpbmsnKTsKICAgICAgICB2YXIgbiA9IGUuZmluZCgiYnV0dG9uIik7CiAgICAgICAgJCgnI3RpbWVyJykudGV4dChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxNTk2KSkKICAgICAgICAkLmFqYXgoewogICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAogICAgICAgICAgICB0eXBlOiAnUE9TVCcsCiAgICAgICAgICAgIHVybDogZS5hdHRyKCdhY3Rpb24nKSwKICAgICAgICAgICAgZGF0YTogZS5zZXJpYWxpemUoKSwKICAgICAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24odCkgewogICAgICAgICAgICAgICAgJ2Jhbm5lcicgPT09IGFkX3R5cGUgJiYgKG4uYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKSwgJCgnYS5nZXQtbGluaycpLnRleHQoYXRvYignVEdWaGRtbHVaeUJ6YUdsMGRIa2dZV1FnYzJsMFpTNHVMaUIzWVdsMElHOXVaU0J0YjIxbGJuUWdZbkp2JykpLCAkKCcjdGltZXInKS50ZXh0KCcwJykpLCAnaW50ZXJzdGl0aWFsJyA9PT0gYWRfdHlwZSAmJiBuLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJykKICAgICAgICAgICAgfSwKICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24odCwgZSwgbikgewogICAgICAgICAgICAgICAgaWYgKHQudXJsLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodC51cmwpOwogICAgICAgICAgICAgICAgICAgICQoJyNjb3VudGRvd24nKS5wYXJlbnQoKS5maW5kKCdoNCcpLnRleHQoYXRvYignV1c5MWNpQnNhVzVySUdseklISmxZV1I1TGlCU1pXUnBjbVZqZEdsdVp5QjBieUI1YjNWeUlHeHBibXNnYm05M0lRJykpOwogICAgICAgICAgICAgICAgICAgICQoJyNjb3VudGRvd24nKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHQsIGUsIG4pIHsKICAgICAgICAgICAgICAgICQoJyN0aW1lcicpLnRleHQoJ1JFRUUnKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKHQsIGUpIHt9CiAgICAgICAgfSkKICAgIH0KICAgIHZhciBhdXRvU3VibWl0ID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdWJCdG4gPSAkKCcjaW52aXNpYmxlQ2FwdGNoYVNob3J0bGluaycpOwogICAgICAgIHZhciBzdWJCdG5UeHQgPSAnVjJGcGRHbHVaeUJtYjNJZ2VXOTFJSFJ2SUhOdmJIWmxJSFJvWlNCallYQjBZMmhoTGk0dSc7CiAgICAgICAgaWYgKHN1YkJ0bi5sZW5ndGggJiYgc3ViQnRuLmlzKCc6ZW5hYmxlZCcpICYmIHN1YkJ0bi50ZXh0KCkgPT0gYXRvYihzdWJCdG5UeHQpKSB7CiAgICAgICAgICAgIHN1YkJ0bi50ZXh0KGF0b2IoJ1VISnZZMlZ6YzJsdVp5QnpiMngyWldRZ1kyRndkR05vWVNCaGJuTjNaWElnYm05M0xpNHUnKSk7CiAgICAgICAgICAgIHN1YkJ0bi5jbGljaygpOwogICAgICAgIH0KICAgICAgICBpZiAoc3ViQnRuLmxlbmd0aCAmJiBzdWJCdG4uaXMoJzpkaXNhYmxlZCcpKSB7CiAgICAgICAgICAgIHN1YkJ0bi50ZXh0KGF0b2Ioc3ViQnRuVHh0KSk7CiAgICAgICAgfQogICAgfSwgdGltZVZhbCk7Cn0KCmF1dG9GaXhQYWdlID0gZnVuY3Rpb24oKSB7CiAgICBpZiAoJCgnZm9vdGVyJykubGVuZ3RoKSB7CiAgICAgICAgJCgnLnRleHQtbGVmdCxzdHJvbmcnKS5yZW1vdmUoKTsKICAgICAgICAkKCcjbGluay12aWV3JykuY29udGVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiAodGhpcy5ub2RlVHlwZSA9PSAzKTsKICAgICAgICB9KS5yZW1vdmUoKTsKICAgICAgICAkKCcjbGluay12aWV3JykuZmluZCgnYnIsY2VudGVyOmVxKDEpJykucmVtb3ZlKCk7CiAgICAgICAgJCgnLmNvb2tpZS1tZXNzYWdlLC5jb29raWUtY29uZmlybScpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICQoJ2NlbnRlcjplcSgwKSwjbWFpbk5hdiwuYmFubmVyLWlubmVyLGZvb3RlcicpLnJlbW92ZSgpOwogICAgICAgICQoJy5ib3gtbWFpbicpLmNzcyh7CiAgICAgICAgICAgICdib3JkZXInOiAnbm9uZScKICAgICAgICB9KTsKICAgICAgICAkKCcjaW52aXNpYmxlQ2FwdGNoYVNob3J0bGluaycpLmh0bWwoJ1N1Ym1pdCcpOwogICAgfQp9CgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsKICAgIGlmICgkKCJodG1sOmNvbnRhaW5zKGF0b2IoVFdGa1pTQjNhWFJvSU9LWnBTQnBiaUJKYm1ScFlRPT0pKSIpKSB7CiAgICAgICAgd2luZG93LnNldEludGVydmFsKCdhdXRvRml4UGFnZSgpOyBhdXRvUHJvY2VlZCgpOycsIHRpbWVWYWwpOwogICAgfQp9KTsKd2luZG93LnNldEludGVydmFsKCdjaGVja0FkYmxvY2tVc2VyID0gY2hlY2tBZHNieXBhc3NlclVzZXIgPSBjaGVja1ByaXZhdGVNb2RlID0gbnVsbDsnLCB0aW1lVmFsKTs=","requires":[{"meta":{"name":"jquery-3.3.1.min.js","url":"http://code.jquery.com/jquery-3.3.1.min.js","ts":1566068227859,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2My4zLjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO3ZhciBuPVtdLHI9ZS5kb2N1bWVudCxpPU9iamVjdC5nZXRQcm90b3R5cGVPZixvPW4uc2xpY2UsYT1uLmNvbmNhdCxzPW4ucHVzaCx1PW4uaW5kZXhPZixsPXt9LGM9bC50b1N0cmluZyxmPWwuaGFzT3duUHJvcGVydHkscD1mLnRvU3RyaW5nLGQ9cC5jYWxsKE9iamVjdCksaD17fSxnPWZ1bmN0aW9uIGUodCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJudW1iZXIiIT10eXBlb2YgdC5ub2RlVHlwZX0seT1mdW5jdGlvbiBlKHQpe3JldHVybiBudWxsIT10JiZ0PT09dC53aW5kb3d9LHY9e3R5cGU6ITAsc3JjOiEwLG5vTW9kdWxlOiEwfTtmdW5jdGlvbiBtKGUsdCxuKXt2YXIgaSxvPSh0PXR8fHIpLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKG8udGV4dD1lLG4pZm9yKGkgaW4gdiluW2ldJiYob1tpXT1uW2ldKTt0LmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB4KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9sW2MuY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBiPSIzLjMuMSIsdz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgdy5mbi5pbml0KGUsdCl9LFQ9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nO3cuZm49dy5wcm90b3R5cGU9e2pxdWVyeToiMy4zLjEiLGNvbnN0cnVjdG9yOncsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBvLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9vLmNhbGwodGhpcyk6ZTwwP3RoaXNbZSt0aGlzLmxlbmd0aF06dGhpc1tlXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGUpe3ZhciB0PXcubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGUpO3JldHVybiB0LnByZXZPYmplY3Q9dGhpcyx0fSxlYWNoOmZ1bmN0aW9uKGUpe3JldHVybiB3LmVhY2godGhpcyxlKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh3Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsbj0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4+PTAmJm48dD9bdGhpc1tuXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6cyxzb3J0Om4uc29ydCxzcGxpY2U6bi5zcGxpY2V9LHcuZXh0ZW5kPXcuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksIm9iamVjdCI9PXR5cGVvZiBhfHxnKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSluPWFbdF0sYSE9PShyPWVbdF0pJiYobCYmciYmKHcuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmQXJyYXkuaXNBcnJheShuKT9uOltdKTpvPW4mJncuaXNQbGFpbk9iamVjdChuKT9uOnt9LGFbdF09dy5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LHcuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKygiMy4zLjEiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1jLmNhbGwoZSkpJiYoISh0PWkoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj1mLmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJnAuY2FsbChuKT09PWQpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSl7bShlKX0sZWFjaDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtpZihDKGUpKXtmb3Iobj1lLmxlbmd0aDtyPG47cisrKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVha31lbHNlIGZvcihyIGluIGUpaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKFQsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKEMoT2JqZWN0KGUpKT93Lm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTpzLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6dS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGgscz0hbjtvPGE7bysrKShyPSF0KGVbb10sbykpIT09cyYmaS5wdXNoKGVbb10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLHM9W107aWYoQyhlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmcy5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJnMucHVzaChpKTtyZXR1cm4gYS5hcHBseShbXSxzKX0sZ3VpZDoxLHN1cHBvcnQ6aH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih3LmZuW1N5bWJvbC5pdGVyYXRvcl09bltTeW1ib2wuaXRlcmF0b3JdKSx3LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7bFsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTtmdW5jdGlvbiBDKGUpe3ZhciB0PSEhZSYmImxlbmd0aCJpbiBlJiZlLmxlbmd0aCxuPXgoZSk7cmV0dXJuIWcoZSkmJiF5KGUpJiYoImFycmF5Ij09PW58fDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfXZhciBFPWZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLHUsbCxjLGYscCxkLGgsZyx5LHYsbSx4LGI9InNpenpsZSIrMSpuZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxFPWFlKCksaz1hZSgpLFM9YWUoKSxEPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoZj0hMCksMH0sTj17fS5oYXNPd25Qcm9wZXJ0eSxBPVtdLGo9QS5wb3AscT1BLnB1c2gsTD1BLnB1c2gsSD1BLnNsaWNlLE89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFA9ImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkIixNPSJbXFx4MjBcXHRcXHJcXG5cXGZdIixSPSIoPzpcXFxcLnxbXFx3LV18W15cMC1cXHhhMF0pKyIsST0iXFxbIitNKyIqKCIrUisiKSg/OiIrTSsiKihbKl4kfCF+XT89KSIrTSsiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK1IrIikpfCkiK00rIipcXF0iLFc9IjooIitSKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitJKyIpKil8LiopXFwpfCkiLCQ9bmV3IFJlZ0V4cChNKyIrIiwiZyIpLEI9bmV3IFJlZ0V4cCgiXiIrTSsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitNKyIrJCIsImciKSxGPW5ldyBSZWdFeHAoIl4iK00rIiosIitNKyIqIiksXz1uZXcgUmVnRXhwKCJeIitNKyIqKFs+K35dfCIrTSsiKSIrTSsiKiIpLHo9bmV3IFJlZ0V4cCgiPSIrTSsiKihbXlxcXSdcIl0qPykiK00rIipcXF0iLCJnIiksWD1uZXcgUmVnRXhwKFcpLFU9bmV3IFJlZ0V4cCgiXiIrUisiJCIpLFY9e0lEOm5ldyBSZWdFeHAoIl4jKCIrUisiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitSKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitSKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrSSksUFNFVURPOm5ldyBSZWdFeHAoIl4iK1cpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1ArIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LEc9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxZPS9eaFxkJC9pLFE9L15bXntdK1x7XHMqXFtuYXRpdmUgXHcvLEo9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxLPS9bK35dLyxaPW5ldyBSZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrTSsiP3woIitNKyIpfC4pIiwiaWciKSxlZT1mdW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0sdGU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csbmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxyZT1mdW5jdGlvbigpe3AoKX0saWU9bWUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYoImZvcm0iaW4gZXx8ImxhYmVsImluIGUpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0wuYXBwbHkoQT1ILmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEFbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7TD17YXBwbHk6QS5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtxLmFwcGx5KGUsSC5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb2UoZSx0LHIsaSl7dmFyIG8scyxsLGMsZixoLHYsbT10JiZ0Lm93bmVyRG9jdW1lbnQsVD10P3Qubm9kZVR5cGU6OTtpZihyPXJ8fFtdLCJzdHJpbmciIT10eXBlb2YgZXx8IWV8fDEhPT1UJiY5IT09VCYmMTEhPT1UKXJldHVybiByO2lmKCFpJiYoKHQ/dC5vd25lckRvY3VtZW50fHx0OncpIT09ZCYmcCh0KSx0PXR8fGQsZykpe2lmKDExIT09VCYmKGY9Si5leGVjKGUpKSlpZihvPWZbMV0pe2lmKDk9PT1UKXtpZighKGw9dC5nZXRFbGVtZW50QnlJZChvKSkpcmV0dXJuIHI7aWYobC5pZD09PW8pcmV0dXJuIHIucHVzaChsKSxyfWVsc2UgaWYobSYmKGw9bS5nZXRFbGVtZW50QnlJZChvKSkmJngodCxsKSYmbC5pZD09PW8pcmV0dXJuIHIucHVzaChsKSxyfWVsc2V7aWYoZlsyXSlyZXR1cm4gTC5hcHBseShyLHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSkpLHI7aWYoKG89ZlszXSkmJm4uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBMLmFwcGx5KHIsdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKG8pKSxyfWlmKG4ucXNhJiYhU1tlKyIgIl0mJigheXx8IXkudGVzdChlKSkpe2lmKDEhPT1UKW09dCx2PWU7ZWxzZSBpZigib2JqZWN0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7KGM9dC5nZXRBdHRyaWJ1dGUoImlkIikpP2M9Yy5yZXBsYWNlKHRlLG5lKTp0LnNldEF0dHJpYnV0ZSgiaWQiLGM9Yikscz0oaD1hKGUpKS5sZW5ndGg7d2hpbGUocy0tKWhbc109IiMiK2MrIiAiK3ZlKGhbc10pO3Y9aC5qb2luKCIsIiksbT1LLnRlc3QoZSkmJmdlKHQucGFyZW50Tm9kZSl8fHR9aWYodil0cnl7cmV0dXJuIEwuYXBwbHkocixtLnF1ZXJ5U2VsZWN0b3JBbGwodikpLHJ9Y2F0Y2goZSl7fWZpbmFsbHl7Yz09PWImJnQucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIHUoZS5yZXBsYWNlKEIsIiQxIiksdCxyLGkpfWZ1bmN0aW9uIGFlKCl7dmFyIGU9W107ZnVuY3Rpb24gdChuLGkpe3JldHVybiBlLnB1c2gobisiICIpPnIuY2FjaGVMZW5ndGgmJmRlbGV0ZSB0W2Uuc2hpZnQoKV0sdFtuKyIgIl09aX1yZXR1cm4gdH1mdW5jdGlvbiBzZShlKXtyZXR1cm4gZVtiXT0hMCxlfWZ1bmN0aW9uIHVlKGUpe3ZhciB0PWQuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBsZShlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxpPW4ubGVuZ3RoO3doaWxlKGktLSlyLmF0dHJIYW5kbGVbbltpXV09dH1mdW5jdGlvbiBjZShlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZmUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiJpbnB1dCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQudHlwZT09PWV9fWZ1bmN0aW9uIHBlKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT1ufHwiYnV0dG9uIj09PW4pJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBkZShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuImZvcm0iaW4gdD90LnBhcmVudE5vZGUmJiExPT09dC5kaXNhYmxlZD8ibGFiZWwiaW4gdD8ibGFiZWwiaW4gdC5wYXJlbnROb2RlP3QucGFyZW50Tm9kZS5kaXNhYmxlZD09PWU6dC5kaXNhYmxlZD09PWU6dC5pc0Rpc2FibGVkPT09ZXx8dC5pc0Rpc2FibGVkIT09IWUmJmllKHQpPT09ZTp0LmRpc2FibGVkPT09ZToibGFiZWwiaW4gdCYmdC5kaXNhYmxlZD09PWV9fWZ1bmN0aW9uIGhlKGUpe3JldHVybiBzZShmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxzZShmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIGdlKGUpe3JldHVybiBlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9bj1vZS5zdXBwb3J0PXt9LG89b2UuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiEhdCYmIkhUTUwiIT09dC5ub2RlTmFtZX0scD1vZS5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdCxpLGE9ZT9lLm93bmVyRG9jdW1lbnR8fGU6dztyZXR1cm4gYSE9PWQmJjk9PT1hLm5vZGVUeXBlJiZhLmRvY3VtZW50RWxlbWVudD8oZD1hLGg9ZC5kb2N1bWVudEVsZW1lbnQsZz0hbyhkKSx3IT09ZCYmKGk9ZC5kZWZhdWx0VmlldykmJmkudG9wIT09aSYmKGkuYWRkRXZlbnRMaXN0ZW5lcj9pLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIscmUsITEpOmkuYXR0YWNoRXZlbnQmJmkuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixyZSkpLG4uYXR0cmlidXRlcz11ZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxuLmdldEVsZW1lbnRzQnlUYWdOYW1lPXVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKGQuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPVEudGVzdChkLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLG4uZ2V0QnlJZD11ZShmdW5jdGlvbihlKXtyZXR1cm4gaC5hcHBlbmRDaGlsZChlKS5pZD1iLCFkLmdldEVsZW1lbnRzQnlOYW1lfHwhZC5nZXRFbGVtZW50c0J5TmFtZShiKS5sZW5ndGh9KSxuLmdldEJ5SWQ/KHIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShaLGVlKTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJpZCIpPT09dH19LHIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmZyl7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gbj9bbl06W119fSk6KHIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShaLGVlKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49InVuZGVmaW5lZCIhPXR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSxyLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJmcpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2k9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7d2hpbGUobz1pW3IrK10paWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLHIuZmluZC5UQUc9bi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOm4ucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LHIuZmluZC5DTEFTUz1uLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmcpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sdj1bXSx5PVtdLChuLnFzYT1RLnRlc3QoZC5xdWVyeVNlbGVjdG9yQWxsKSkmJih1ZShmdW5jdGlvbihlKXtoLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD0iPGEgaWQ9JyIrYisiJz48L2E+PHNlbGVjdCBpZD0nIitiKyItXHJcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+PG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD4iLGUucXVlcnlTZWxlY3RvckFsbCgiW21zYWxsb3djYXB0dXJlXj0nJ10iKS5sZW5ndGgmJnkucHVzaCgiWypeJF09IitNKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fHkucHVzaCgiXFxbIitNKyIqKD86dmFsdWV8IitQKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbaWR+PSIrYisiLV0iKS5sZW5ndGh8fHkucHVzaCgifj0iKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpjaGVja2VkIikubGVuZ3RofHx5LnB1c2goIjpjaGVja2VkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJhIyIrYisiKyoiKS5sZW5ndGh8fHkucHVzaCgiLiMuK1srfl0iKX0pLHVlKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD4iO3ZhciB0PWQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTt0LnNldEF0dHJpYnV0ZSgidHlwZSIsImhpZGRlbiIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKCJuYW1lIiwiRCIpLGUucXVlcnlTZWxlY3RvckFsbCgiW25hbWU9ZF0iKS5sZW5ndGgmJnkucHVzaCgibmFtZSIrTSsiKlsqXiR8IX5dPz0iKSwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCYmeS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpLGguYXBwZW5kQ2hpbGQoZSkuZGlzYWJsZWQ9ITAsMiE9PWUucXVlcnlTZWxlY3RvckFsbCgiOmRpc2FibGVkIikubGVuZ3RoJiZ5LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IikseS5wdXNoKCIsLio6Iil9KSksKG4ubWF0Y2hlc1NlbGVjdG9yPVEudGVzdChtPWgubWF0Y2hlc3x8aC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fGgubW96TWF0Y2hlc1NlbGVjdG9yfHxoLm9NYXRjaGVzU2VsZWN0b3J8fGgubXNNYXRjaGVzU2VsZWN0b3IpKSYmdWUoZnVuY3Rpb24oZSl7bi5kaXNjb25uZWN0ZWRNYXRjaD1tLmNhbGwoZSwiKiIpLG0uY2FsbChlLCJbcyE9JyddOngiKSx2LnB1c2goIiE9IixXKX0pLHk9eS5sZW5ndGgmJm5ldyBSZWdFeHAoeS5qb2luKCJ8IikpLHY9di5sZW5ndGgmJm5ldyBSZWdFeHAodi5qb2luKCJ8IikpLHQ9US50ZXN0KGguY29tcGFyZURvY3VtZW50UG9zaXRpb24pLHg9dHx8US50ZXN0KGguY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodCl3aGlsZSh0PXQucGFyZW50Tm9kZSlpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sRD10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGY9ITAsMDt2YXIgcj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gcnx8KDEmKHI9KGUub3duZXJEb2N1bWVudHx8ZSk9PT0odC5vd25lckRvY3VtZW50fHx0KT9lLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpOjEpfHwhbi5zb3J0RGV0YWNoZWQmJnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSk9PT1yP2U9PT1kfHxlLm93bmVyRG9jdW1lbnQ9PT13JiZ4KHcsZSk/LTE6dD09PWR8fHQub3duZXJEb2N1bWVudD09PXcmJngodyx0KT8xOmM/TyhjLGUpLU8oYyx0KTowOjQmcj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZj0hMCwwO3ZhciBuLHI9MCxpPWUucGFyZW50Tm9kZSxvPXQucGFyZW50Tm9kZSxhPVtlXSxzPVt0XTtpZighaXx8IW8pcmV0dXJuIGU9PT1kPy0xOnQ9PT1kPzE6aT8tMTpvPzE6Yz9PKGMsZSktTyhjLHQpOjA7aWYoaT09PW8pcmV0dXJuIGNlKGUsdCk7bj1lO3doaWxlKG49bi5wYXJlbnROb2RlKWEudW5zaGlmdChuKTtuPXQ7d2hpbGUobj1uLnBhcmVudE5vZGUpcy51bnNoaWZ0KG4pO3doaWxlKGFbcl09PT1zW3JdKXIrKztyZXR1cm4gcj9jZShhW3JdLHNbcl0pOmFbcl09PT13Py0xOnNbcl09PT13PzE6MH0sZCk6ZH0sb2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBvZShlLG51bGwsbnVsbCx0KX0sb2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpLHQ9dC5yZXBsYWNlKHosIj0nJDEnXSIpLG4ubWF0Y2hlc1NlbGVjdG9yJiZnJiYhU1t0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigheXx8IXkudGVzdCh0KSkpdHJ5e3ZhciByPW0uY2FsbChlLHQpO2lmKHJ8fG4uZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gcn1jYXRjaChlKXt9cmV0dXJuIG9lKHQsZCxudWxsLFtlXSkubGVuZ3RoPjB9LG9lLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPT1kJiZwKGUpLHgoZSx0KX0sb2UuYXR0cj1mdW5jdGlvbihlLHQpeyhlLm93bmVyRG9jdW1lbnR8fGUpIT09ZCYmcChlKTt2YXIgaT1yLmF0dHJIYW5kbGVbdC50b0xvd2VyQ2FzZSgpXSxvPWkmJk4uY2FsbChyLmF0dHJIYW5kbGUsdC50b0xvd2VyQ2FzZSgpKT9pKGUsdCwhZyk6dm9pZCAwO3JldHVybiB2b2lkIDAhPT1vP286bi5hdHRyaWJ1dGVzfHwhZz9lLmdldEF0dHJpYnV0ZSh0KToobz1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZvLnNwZWNpZmllZD9vLnZhbHVlOm51bGx9LG9lLmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZSsiIikucmVwbGFjZSh0ZSxuZSl9LG9lLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sb2UudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxyPVtdLGk9MCxvPTA7aWYoZj0hbi5kZXRlY3REdXBsaWNhdGVzLGM9IW4uc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoRCksZil7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPXIucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKHJbaV0sMSl9cmV0dXJuIGM9bnVsbCxlfSxpPW9lLmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixyPTAsbz1lLm5vZGVUeXBlO2lmKG8pe2lmKDE9PT1vfHw5PT09b3x8MTE9PT1vKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPWkoZSl9ZWxzZSBpZigzPT09b3x8ND09PW8pcmV0dXJuIGUubm9kZVZhbHVlfWVsc2Ugd2hpbGUodD1lW3IrK10pbis9aSh0KTtyZXR1cm4gbn0sKHI9b2Uuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86c2UsbWF0Y2g6VixhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKFosZWUpLGVbM109KGVbM118fGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKFosZWUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxvZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZvZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gVi5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWEobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKFosZWUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUVbZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK00rIikiK2UrIigiK00rInwkKSIpKSYmRShlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoInN0cmluZyI9PXR5cGVvZiBlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWV8fCJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9KX0sQVRUUjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3ZhciBpPW9lLmF0dHIocixlKTtyZXR1cm4gbnVsbD09aT8iIT0iPT09dDohdHx8KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2kucmVwbGFjZSgkLCIgIikrIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10JiYoaT09PW58fGkuc2xpY2UoMCxuLmxlbmd0aCsxKT09PW4rIi0iKSl9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLGE9Imxhc3QiIT09ZS5zbGljZSgtNCkscz0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLGYscCxkLGgsZz1vIT09YT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLHk9dC5wYXJlbnROb2RlLHY9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG09IXUmJiFzLHg9ITE7aWYoeSl7aWYobyl7d2hpbGUoZyl7cD10O3doaWxlKHA9cFtnXSlpZihzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXY6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7aD1nPSJvbmx5Ij09PWUmJiFoJiYibmV4dFNpYmxpbmcifXJldHVybiEwfWlmKGg9W2E/eS5maXJzdENoaWxkOnkubGFzdENoaWxkXSxhJiZtKXt4PShkPShsPShjPShmPShwPXkpW2JdfHwocFtiXT17fSkpW3AudW5pcXVlSURdfHwoZltwLnVuaXF1ZUlEXT17fSkpW2VdfHxbXSlbMF09PT1UJiZsWzFdKSYmbFsyXSxwPWQmJnkuY2hpbGROb2Rlc1tkXTt3aGlsZShwPSsrZCYmcCYmcFtnXXx8KHg9ZD0wKXx8aC5wb3AoKSlpZigxPT09cC5ub2RlVHlwZSYmKyt4JiZwPT09dCl7Y1tlXT1bVCxkLHhdO2JyZWFrfX1lbHNlIGlmKG0mJih4PWQ9KGw9KGM9KGY9KHA9dClbYl18fChwW2JdPXt9KSlbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSlbZV18fFtdKVswXT09PVQmJmxbMV0pLCExPT09eCl3aGlsZShwPSsrZCYmcCYmcFtnXXx8KHg9ZD0wKXx8aC5wb3AoKSlpZigocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT12OjE9PT1wLm5vZGVUeXBlKSYmKyt4JiYobSYmKChjPShmPXBbYl18fChwW2JdPXt9KSlbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSlbZV09W1QseF0pLHA9PT10KSlicmVhaztyZXR1cm4oeC09aSk9PT1yfHx4JXI9PTAmJngvcj49MH19fSxQU0VVRE86ZnVuY3Rpb24oZSx0KXt2YXIgbixpPXIucHNldWRvc1tlXXx8ci5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIGlbYl0/aSh0KTppLmxlbmd0aD4xPyhuPVtlLGUsIiIsdF0sci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/c2UoZnVuY3Rpb24oZSxuKXt2YXIgcixvPWkoZSx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSllW3I9TyhlLG9bYV0pXT0hKG5bcl09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gaShlLDAsbil9KTppfX0scHNldWRvczp7bm90OnNlKGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1zKGUucmVwbGFjZShCLCIkMSIpKTtyZXR1cm4gcltiXT9zZShmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhPXIoZSxudWxsLGksW10pLHM9ZS5sZW5ndGg7d2hpbGUocy0tKShvPWFbc10pJiYoZVtzXT0hKHRbc109bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSx0WzBdPW51bGwsIW4ucG9wKCl9fSksaGFzOnNlKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gb2UoZSx0KS5sZW5ndGg+MH19KSxjb250YWluczpzZShmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoWixlZSksZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQuaW5uZXJUZXh0fHxpKHQpKS5pbmRleE9mKGUpPi0xfX0pLGxhbmc6c2UoZnVuY3Rpb24oZSl7cmV0dXJuIFUudGVzdChlfHwiIil8fG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK2UpLGU9ZS5yZXBsYWNlKFosZWUpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG97aWYobj1nP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4obj1uLnRvTG93ZXJDYXNlKCkpPT09ZXx8MD09PW4uaW5kZXhPZihlKyItIil9d2hpbGUoKHQ9dC5wYXJlbnROb2RlKSYmMT09PXQubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbih0KXt2YXIgbj1lLmxvY2F0aW9uJiZlLmxvY2F0aW9uLmhhc2g7cmV0dXJuIG4mJm4uc2xpY2UoMSk9PT10LmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09aH0sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1kLmFjdGl2ZUVsZW1lbnQmJighZC5oYXNGb2N1c3x8ZC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpkZSghMSksZGlzYWJsZWQ6ZGUoITApLGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYhIWUuY2hlY2tlZHx8Im9wdGlvbiI9PT10JiYhIWUuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LCEwPT09ZS5zZWxlY3RlZH0sZW1wdHk6ZnVuY3Rpb24oZSl7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWlmKGUubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFyLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gWS50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGUubm9kZU5hbWUpfSxidXR0b246ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYiYnV0dG9uIj09PWUudHlwZXx8ImJ1dHRvbiI9PT10fSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJiJ0ZXh0Ij09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpfHwidGV4dCI9PT10LnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpoZShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6aGUoZnVuY3Rpb24oZSx0KXtyZXR1cm5bdC0xXX0pLGVxOmhlKGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24rdDpuXX0pLGV2ZW46aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MTtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxsdDpoZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0OmhlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19KS5wc2V1ZG9zLm50aD1yLnBzZXVkb3MuZXE7Zm9yKHQgaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pci5wc2V1ZG9zW3RdPWZlKHQpO2Zvcih0IGlue3N1Ym1pdDohMCxyZXNldDohMH0pci5wc2V1ZG9zW3RdPXBlKHQpO2Z1bmN0aW9uIHllKCl7fXllLnByb3RvdHlwZT1yLmZpbHRlcnM9ci5wc2V1ZG9zLHIuc2V0RmlsdGVycz1uZXcgeWUsYT1vZS50b2tlbml6ZT1mdW5jdGlvbihlLHQpe3ZhciBuLGksbyxhLHMsdSxsLGM9a1tlKyIgIl07aWYoYylyZXR1cm4gdD8wOmMuc2xpY2UoMCk7cz1lLHU9W10sbD1yLnByZUZpbHRlcjt3aGlsZShzKXtuJiYhKGk9Ri5leGVjKHMpKXx8KGkmJihzPXMuc2xpY2UoaVswXS5sZW5ndGgpfHxzKSx1LnB1c2gobz1bXSkpLG49ITEsKGk9Xy5leGVjKHMpKSYmKG49aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOmlbMF0ucmVwbGFjZShCLCIgIil9KSxzPXMuc2xpY2Uobi5sZW5ndGgpKTtmb3IoYSBpbiByLmZpbHRlcikhKGk9VlthXS5leGVjKHMpKXx8bFthXSYmIShpPWxbYV0oaSkpfHwobj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6YSxtYXRjaGVzOml9KSxzPXMuc2xpY2Uobi5sZW5ndGgpKTtpZighbilicmVha31yZXR1cm4gdD9zLmxlbmd0aDpzP29lLmVycm9yKGUpOmsoZSx1KS5zbGljZSgwKX07ZnVuY3Rpb24gdmUoZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aCxyPSIiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBtZShlLHQsbil7dmFyIHI9dC5kaXIsaT10Lm5leHQsbz1pfHxyLGE9biYmInBhcmVudE5vZGUiPT09byxzPUMrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4saSl7d2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxhKXJldHVybiBlKHQsbixpKTtyZXR1cm4hMX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMsZixwPVtULHNdO2lmKHUpe3doaWxlKHQ9dFtyXSlpZigoMT09PXQubm9kZVR5cGV8fGEpJiZlKHQsbix1KSlyZXR1cm4hMH1lbHNlIHdoaWxlKHQ9dFtyXSlpZigxPT09dC5ub2RlVHlwZXx8YSlpZihmPXRbYl18fCh0W2JdPXt9KSxjPWZbdC51bmlxdWVJRF18fChmW3QudW5pcXVlSURdPXt9KSxpJiZpPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXQ9dFtyXXx8dDtlbHNle2lmKChsPWNbb10pJiZsWzBdPT09VCYmbFsxXT09PXMpcmV0dXJuIHBbMl09bFsyXTtpZihjW29dPXAscFsyXT1lKHQsbix1KSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24geGUoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZnVuY3Rpb24odCxuLHIpe3ZhciBpPWUubGVuZ3RoO3doaWxlKGktLSlpZighZVtpXSh0LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24gYmUoZSx0LG4pe2Zvcih2YXIgcj0wLGk9dC5sZW5ndGg7cjxpO3IrKylvZShlLHRbcl0sbik7cmV0dXJuIG59ZnVuY3Rpb24gd2UoZSx0LG4scixpKXtmb3IodmFyIG8sYT1bXSxzPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7czx1O3MrKykobz1lW3NdKSYmKG4mJiFuKG8scixpKXx8KGEucHVzaChvKSxsJiZ0LnB1c2gocykpKTtyZXR1cm4gYX1mdW5jdGlvbiBUZShlLHQsbixyLGksbyl7cmV0dXJuIHImJiFyW2JdJiYocj1UZShyKSksaSYmIWlbYl0mJihpPVRlKGksbykpLHNlKGZ1bmN0aW9uKG8sYSxzLHUpe3ZhciBsLGMsZixwPVtdLGQ9W10saD1hLmxlbmd0aCxnPW98fGJlKHR8fCIqIixzLm5vZGVUeXBlP1tzXTpzLFtdKSx5PSFlfHwhbyYmdD9nOndlKGcscCxlLHMsdSksdj1uP2l8fChvP2U6aHx8cik/W106YTp5O2lmKG4mJm4oeSx2LHMsdSkscil7bD13ZSh2LGQpLHIobCxbXSxzLHUpLGM9bC5sZW5ndGg7d2hpbGUoYy0tKShmPWxbY10pJiYodltkW2NdXT0hKHlbZFtjXV09ZikpfWlmKG8pe2lmKGl8fGUpe2lmKGkpe2w9W10sYz12Lmxlbmd0aDt3aGlsZShjLS0pKGY9dltjXSkmJmwucHVzaCh5W2NdPWYpO2kobnVsbCx2PVtdLGwsdSl9Yz12Lmxlbmd0aDt3aGlsZShjLS0pKGY9dltjXSkmJihsPWk/TyhvLGYpOnBbY10pPi0xJiYob1tsXT0hKGFbbF09ZikpfX1lbHNlIHY9d2Uodj09PWE/di5zcGxpY2UoaCx2Lmxlbmd0aCk6diksaT9pKG51bGwsYSx2LHUpOkwuYXBwbHkoYSx2KX0pfWZ1bmN0aW9uIENlKGUpe2Zvcih2YXIgdCxuLGksbz1lLmxlbmd0aCxhPXIucmVsYXRpdmVbZVswXS50eXBlXSxzPWF8fHIucmVsYXRpdmVbIiAiXSx1PWE/MTowLGM9bWUoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxmPW1lKGZ1bmN0aW9uKGUpe3JldHVybiBPKHQsZSk+LTF9LHMsITApLHA9W2Z1bmN0aW9uKGUsbixyKXt2YXIgaT0hYSYmKHJ8fG4hPT1sKXx8KCh0PW4pLm5vZGVUeXBlP2MoZSxuLHIpOmYoZSxuLHIpKTtyZXR1cm4gdD1udWxsLGl9XTt1PG87dSsrKWlmKG49ci5yZWxhdGl2ZVtlW3VdLnR5cGVdKXA9W21lKHhlKHApLG4pXTtlbHNle2lmKChuPXIuZmlsdGVyW2VbdV0udHlwZV0uYXBwbHkobnVsbCxlW3VdLm1hdGNoZXMpKVtiXSl7Zm9yKGk9Kyt1O2k8bztpKyspaWYoci5yZWxhdGl2ZVtlW2ldLnR5cGVdKWJyZWFrO3JldHVybiBUZSh1PjEmJnhlKHApLHU+MSYmdmUoZS5zbGljZSgwLHUtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW3UtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZShCLCIkMSIpLG4sdTxpJiZDZShlLnNsaWNlKHUsaSkpLGk8byYmQ2UoZT1lLnNsaWNlKGkpKSxpPG8mJnZlKGUpKX1wLnB1c2gobil9cmV0dXJuIHhlKHApfWZ1bmN0aW9uIEVlKGUsdCl7dmFyIG49dC5sZW5ndGg+MCxpPWUubGVuZ3RoPjAsbz1mdW5jdGlvbihvLGEscyx1LGMpe3ZhciBmLGgseSx2PTAsbT0iMCIseD1vJiZbXSxiPVtdLHc9bCxDPW98fGkmJnIuZmluZC5UQUcoIioiLGMpLEU9VCs9bnVsbD09dz8xOk1hdGgucmFuZG9tKCl8fC4xLGs9Qy5sZW5ndGg7Zm9yKGMmJihsPWE9PT1kfHxhfHxjKTttIT09ayYmbnVsbCE9KGY9Q1ttXSk7bSsrKXtpZihpJiZmKXtoPTAsYXx8Zi5vd25lckRvY3VtZW50PT09ZHx8KHAoZikscz0hZyk7d2hpbGUoeT1lW2grK10paWYoeShmLGF8fGQscykpe3UucHVzaChmKTticmVha31jJiYoVD1FKX1uJiYoKGY9IXkmJmYpJiZ2LS0sbyYmeC5wdXNoKGYpKX1pZih2Kz1tLG4mJm0hPT12KXtoPTA7d2hpbGUoeT10W2grK10peSh4LGIsYSxzKTtpZihvKXtpZih2PjApd2hpbGUobS0tKXhbbV18fGJbbV18fChiW21dPWouY2FsbCh1KSk7Yj13ZShiKX1MLmFwcGx5KHUsYiksYyYmIW8mJmIubGVuZ3RoPjAmJnYrdC5sZW5ndGg+MSYmb2UudW5pcXVlU29ydCh1KX1yZXR1cm4gYyYmKFQ9RSxsPXcpLHh9O3JldHVybiBuP3NlKG8pOm99cmV0dXJuIHM9b2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPVNbZSsiICJdO2lmKCFvKXt0fHwodD1hKGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSkobz1DZSh0W25dKSlbYl0/ci5wdXNoKG8pOmkucHVzaChvKTsobz1TKGUsRWUoaSxyKSkpLnNlbGVjdG9yPWV9cmV0dXJuIG99LHU9b2Uuc2VsZWN0PWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciBvLHUsbCxjLGYscD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSxkPSFpJiZhKGU9cC5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09ZC5sZW5ndGgpe2lmKCh1PWRbMF09ZFswXS5zbGljZSgwKSkubGVuZ3RoPjImJiJJRCI9PT0obD11WzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmZyYmci5yZWxhdGl2ZVt1WzFdLnR5cGVdKXtpZighKHQ9KHIuZmluZC5JRChsLm1hdGNoZXNbMF0ucmVwbGFjZShaLGVlKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtwJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZSh1LnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1vPVYubmVlZHNDb250ZXh0LnRlc3QoZSk/MDp1Lmxlbmd0aDt3aGlsZShvLS0pe2lmKGw9dVtvXSxyLnJlbGF0aXZlW2M9bC50eXBlXSlicmVhaztpZigoZj1yLmZpbmRbY10pJiYoaT1mKGwubWF0Y2hlc1swXS5yZXBsYWNlKFosZWUpLEsudGVzdCh1WzBdLnR5cGUpJiZnZSh0LnBhcmVudE5vZGUpfHx0KSkpe2lmKHUuc3BsaWNlKG8sMSksIShlPWkubGVuZ3RoJiZ2ZSh1KSkpcmV0dXJuIEwuYXBwbHkobixpKSxuO2JyZWFrfX19cmV0dXJuKHB8fHMoZSxkKSkoaSx0LCFnLG4sIXR8fEsudGVzdChlKSYmZ2UodC5wYXJlbnROb2RlKXx8dCksbn0sbi5zb3J0U3RhYmxlPWIuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1iLG4uZGV0ZWN0RHVwbGljYXRlcz0hIWYscCgpLG4uc29ydERldGFjaGVkPXVlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZC5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGxlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxuLmF0dHJpYnV0ZXMmJnVlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGxlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLHVlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxsZShQLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLG9lfShlKTt3LmZpbmQ9RSx3LmV4cHI9RS5zZWxlY3RvcnMsdy5leHByWyI6Il09dy5leHByLnBzZXVkb3Msdy51bmlxdWVTb3J0PXcudW5pcXVlPUUudW5pcXVlU29ydCx3LnRleHQ9RS5nZXRUZXh0LHcuaXNYTUxEb2M9RS5pc1hNTCx3LmNvbnRhaW5zPUUuY29udGFpbnMsdy5lc2NhcGVTZWxlY3Rvcj1FLmVzY2FwZTt2YXIgaz1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmdyhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LEQ9dy5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBOKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgQT0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBqKGUsdCxuKXtyZXR1cm4gZyh0KT93LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiEhdC5jYWxsKGUscixlKSE9PW59KTp0Lm5vZGVUeXBlP3cuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KToic3RyaW5nIiE9dHlwZW9mIHQ/dy5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHUuY2FsbCh0LGUpPi0xIT09bn0pOncuZmlsdGVyKHQsZSxuKX13LmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT93LmZpbmQubWF0Y2hlc1NlbGVjdG9yKHIsZSk/W3JdOltdOncuZmluZC5tYXRjaGVzKGUsdy5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSx3LmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5sZW5ndGgsaT10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sodyhlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8cjt0KyspaWYody5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKyl3LmZpbmQoZSxpW3RdLG4pO3JldHVybiByPjE/dy51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaih0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhaih0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmRC50ZXN0KGUpP3coZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgcSxMPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwjKFtcdy1dKykpJC87KHcuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZihuPW58fHEsInN0cmluZyI9PXR5cGVvZiBlKXtpZighKGk9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmZS5sZW5ndGg+PTM/W251bGwsZSxudWxsXTpMLmV4ZWMoZSkpfHwhaVsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKGlbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIHc/dFswXTp0LHcubWVyZ2UodGhpcyx3LnBhcnNlSFRNTChpWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OnIsITApKSxBLnRlc3QoaVsxXSkmJncuaXNQbGFpbk9iamVjdCh0KSlmb3IoaSBpbiB0KWcodGhpc1tpXSk/dGhpc1tpXSh0W2ldKTp0aGlzLmF0dHIoaSx0W2ldKTtyZXR1cm4gdGhpc31yZXR1cm4obz1yLmdldEVsZW1lbnRCeUlkKGlbMl0pKSYmKHRoaXNbMF09byx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTpnKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKHcpOncubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9dy5mbixxPXcocik7dmFyIEg9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sTz17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTt3LmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXcoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYody5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9InN0cmluZyIhPXR5cGVvZiBlJiZ3KGUpO2lmKCFELnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/YS5pbmRleChuKT4tMToxPT09bi5ub2RlVHlwZSYmdy5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7by5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP3cudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP3UuY2FsbCh3KGUpLHRoaXNbMF0pOnUuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sody51bmlxdWVTb3J0KHcubWVyZ2UodGhpcy5nZXQoKSx3KGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pO2Z1bmN0aW9uIFAoZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfXcuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gayhlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFAoZSwibmV4dFNpYmxpbmciKX0scHJldjpmdW5jdGlvbihlKXtyZXR1cm4gUChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gayhlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBrKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBrKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gayhlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gUygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIFMoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIE4oZSwiaWZyYW1lIik/ZS5jb250ZW50RG9jdW1lbnQ6KE4oZSwidGVtcGxhdGUiKSYmKGU9ZS5jb250ZW50fHxlKSx3Lm1lcmdlKFtdLGUuY2hpbGROb2RlcykpfX0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9dy5tYXAodGhpcyx0LG4pO3JldHVybiJVbnRpbCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmInN0cmluZyI9PXR5cGVvZiByJiYoaT13LmZpbHRlcihyLGkpKSx0aGlzLmxlbmd0aD4xJiYoT1tlXXx8dy51bmlxdWVTb3J0KGkpLEgudGVzdChlKSYmaS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGkpfX0pO3ZhciBNPS9bXlx4MjBcdFxyXG5cZl0rL2c7ZnVuY3Rpb24gUihlKXt2YXIgdD17fTtyZXR1cm4gdy5lYWNoKGUubWF0Y2goTSl8fFtdLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9dy5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT0ic3RyaW5nIj09dHlwZW9mIGU/UihlKTp3LmV4dGVuZCh7fSxlKTt2YXIgdCxuLHIsaSxvPVtdLGE9W10scz0tMSx1PWZ1bmN0aW9uKCl7Zm9yKGk9aXx8ZS5vbmNlLHI9dD0hMDthLmxlbmd0aDtzPS0xKXtuPWEuc2hpZnQoKTt3aGlsZSgrK3M8by5sZW5ndGgpITE9PT1vW3NdLmFwcGx5KG5bMF0sblsxXSkmJmUuc3RvcE9uRmFsc2UmJihzPW8ubGVuZ3RoLG49ITEpfWUubWVtb3J5fHwobj0hMSksdD0hMSxpJiYobz1uP1tdOiIiKX0sbD17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihuJiYhdCYmKHM9by5sZW5ndGgtMSxhLnB1c2gobikpLGZ1bmN0aW9uIHQobil7dy5lYWNoKG4sZnVuY3Rpb24obixyKXtnKHIpP2UudW5pcXVlJiZsLmhhcyhyKXx8by5wdXNoKHIpOnImJnIubGVuZ3RoJiYic3RyaW5nIiE9PXgocikmJnQocil9KX0oYXJndW1lbnRzKSxuJiYhdCYmdSgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gdy5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXcuaW5BcnJheSh0LG8sbikpPi0xKW8uc3BsaWNlKG4sMSksbjw9cyYmcy0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3cuaW5BcnJheShlLG8pPi0xOm8ubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIG8mJihvPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGk9YT1bXSxvPW49IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hb30sbG9jazpmdW5jdGlvbigpe3JldHVybiBpPWE9W10sbnx8dHx8KG89bj0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFpfSxmaXJlV2l0aDpmdW5jdGlvbihlLG4pe3JldHVybiBpfHwobj1bZSwobj1ufHxbXSkuc2xpY2U/bi5zbGljZSgpOm5dLGEucHVzaChuKSx0fHx1KCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gbC5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXJ9fTtyZXR1cm4gbH07ZnVuY3Rpb24gSShlKXtyZXR1cm4gZX1mdW5jdGlvbiBXKGUpe3Rocm93IGV9ZnVuY3Rpb24gJChlLHQsbixyKXt2YXIgaTt0cnl7ZSYmZyhpPWUucHJvbWlzZSk/aS5jYWxsKGUpLmRvbmUodCkuZmFpbChuKTplJiZnKGk9ZS50aGVuKT9pLmNhbGwoZSx0LG4pOnQuYXBwbHkodm9pZCAwLFtlXS5zbGljZShyKSl9Y2F0Y2goZSl7bi5hcHBseSh2b2lkIDAsW2VdKX19dy5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKHQpe3ZhciBuPVtbIm5vdGlmeSIsInByb2dyZXNzIix3LkNhbGxiYWNrcygibWVtb3J5Iiksdy5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLHcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLHcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSx3LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxyPSJwZW5kaW5nIixpPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiByfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gby5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGkudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uKHQpe3cuZWFjaChuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZyhlW3JbNF1dKSYmZVtyWzRdXTtvW3JbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmZyhlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHQubm90aWZ5KS5kb25lKHQucmVzb2x2ZSkuZmFpbCh0LnJlamVjdCk6dFtyWzBdKyJXaXRoIl0odGhpcyxpP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxyLGkpe3ZhciBvPTA7ZnVuY3Rpb24gYSh0LG4scixpKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcz10aGlzLHU9YXJndW1lbnRzLGw9ZnVuY3Rpb24oKXt2YXIgZSxsO2lmKCEodDxvKSl7aWYoKGU9ci5hcHBseShzLHUpKT09PW4ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO2w9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sZyhsKT9pP2wuY2FsbChlLGEobyxuLEksaSksYShvLG4sVyxpKSk6KG8rKyxsLmNhbGwoZSxhKG8sbixJLGkpLGEobyxuLFcsaSksYShvLG4sSSxuLm5vdGlmeVdpdGgpKSk6KHIhPT1JJiYocz12b2lkIDAsdT1bZV0pLChpfHxuLnJlc29sdmVXaXRoKShzLHUpKX19LGM9aT9sOmZ1bmN0aW9uKCl7dHJ5e2woKX1jYXRjaChlKXt3LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJncuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLGMuc3RhY2tUcmFjZSksdCsxPj1vJiYociE9PVcmJihzPXZvaWQgMCx1PVtlXSksbi5yZWplY3RXaXRoKHMsdSkpfX07dD9jKCk6KHcuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYoYy5zdGFja1RyYWNlPXcuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLGUuc2V0VGltZW91dChjKSl9fXJldHVybiB3LkRlZmVycmVkKGZ1bmN0aW9uKGUpe25bMF1bM10uYWRkKGEoMCxlLGcoaSk/aTpJLGUubm90aWZ5V2l0aCkpLG5bMV1bM10uYWRkKGEoMCxlLGcodCk/dDpJKSksblsyXVszXS5hZGQoYSgwLGUsZyhyKT9yOlcpKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT93LmV4dGVuZChlLGkpOml9fSxvPXt9O3JldHVybiB3LmVhY2gobixmdW5jdGlvbihlLHQpe3ZhciBhPXRbMl0scz10WzVdO2lbdFsxXV09YS5hZGQscyYmYS5hZGQoZnVuY3Rpb24oKXtyPXN9LG5bMy1lXVsyXS5kaXNhYmxlLG5bMy1lXVszXS5kaXNhYmxlLG5bMF1bMl0ubG9jayxuWzBdWzNdLmxvY2spLGEuYWRkKHRbM10uZmlyZSksb1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBvW3RbMF0rIldpdGgiXSh0aGlzPT09bz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LG9bdFswXSsiV2l0aCJdPWEuZmlyZVdpdGh9KSxpLnByb21pc2UobyksdCYmdC5jYWxsKG8sbyksb30sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49dCxyPUFycmF5KG4pLGk9by5jYWxsKGFyZ3VtZW50cyksYT13LkRlZmVycmVkKCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cltlXT10aGlzLGlbZV09YXJndW1lbnRzLmxlbmd0aD4xP28uY2FsbChhcmd1bWVudHMpOm4sLS10fHxhLnJlc29sdmVXaXRoKHIsaSl9fTtpZih0PD0xJiYoJChlLGEuZG9uZShzKG4pKS5yZXNvbHZlLGEucmVqZWN0LCF0KSwicGVuZGluZyI9PT1hLnN0YXRlKCl8fGcoaVtuXSYmaVtuXS50aGVuKSkpcmV0dXJuIGEudGhlbigpO3doaWxlKG4tLSkkKGlbbl0scyhuKSxhLnJlamVjdCk7cmV0dXJuIGEucHJvbWlzZSgpfX0pO3ZhciBCPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO3cuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbih0LG4pe2UuY29uc29sZSYmZS5jb25zb2xlLndhcm4mJnQmJkIudGVzdCh0Lm5hbWUpJiZlLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIit0Lm1lc3NhZ2UsdC5zdGFjayxuKX0sdy5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbih0KXtlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9O3ZhciBGPXcuRGVmZXJyZWQoKTt3LmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7dy5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LHcuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS13LnJlYWR5V2FpdDp3LmlzUmVhZHkpfHwody5pc1JlYWR5PSEwLCEwIT09ZSYmLS13LnJlYWR5V2FpdD4wfHxGLnJlc29sdmVXaXRoKHIsW3ddKSl9fSksdy5yZWFkeS50aGVuPUYudGhlbjtmdW5jdGlvbiBfKCl7ci5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixfKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLF8pLHcucmVhZHkoKX0iY29tcGxldGUiPT09ci5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1yLnJlYWR5U3RhdGUmJiFyLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9lLnNldFRpbWVvdXQody5yZWFkeSk6KHIuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsXyksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixfKSk7dmFyIHo9ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXgobikpe2k9ITA7Zm9yKHMgaW4gbil6KGUsdCxzLG5bc10sITAsbyxhKX1lbHNlIGlmKHZvaWQgMCE9PXImJihpPSEwLGcocil8fChhPSEwKSxsJiYoYT8odC5jYWxsKGUsciksdD1udWxsKToobD10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBsLmNhbGwodyhlKSxuKX0pKSx0KSlmb3IoO3M8dTtzKyspdChlW3NdLG4sYT9yOnIuY2FsbChlW3NdLHMsdChlW3NdLG4pKSk7cmV0dXJuIGk/ZTpsP3QuY2FsbChlKTp1P3QoZVswXSxuKTpvfSxYPS9eLW1zLS8sVT0vLShbYS16XSkvZztmdW5jdGlvbiBWKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBHKGUpe3JldHVybiBlLnJlcGxhY2UoWCwibXMtIikucmVwbGFjZShVLFYpfXZhciBZPWZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZXx8OT09PWUubm9kZVR5cGV8fCErZS5ub2RlVHlwZX07ZnVuY3Rpb24gUSgpe3RoaXMuZXhwYW5kbz13LmV4cGFuZG8rUS51aWQrK31RLnVpZD0xLFEucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LFkoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpW0codCldPW47ZWxzZSBmb3IociBpbiB0KWlbRyhyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtHKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmInN0cmluZyI9PXR5cGVvZiB0JiZ2b2lkIDA9PT1uP3RoaXMuZ2V0KGUsdCk6KHRoaXMuc2V0KGUsdCxuKSx2b2lkIDAhPT1uP246dCl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZVt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PXIpe2lmKHZvaWQgMCE9PXQpe249KHQ9QXJyYXkuaXNBcnJheSh0KT90Lm1hcChHKToodD1HKHQpKWluIHI/W3RdOnQubWF0Y2goTSl8fFtdKS5sZW5ndGg7d2hpbGUobi0tKWRlbGV0ZSByW3Rbbl1dfSh2b2lkIDA9PT10fHx3LmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiF3LmlzRW1wdHlPYmplY3QodCl9fTt2YXIgSj1uZXcgUSxLPW5ldyBRLFo9L14oPzpce1tcd1xXXSpcfXxcW1tcd1xXXSpcXSkkLyxlZT0vW0EtWl0vZztmdW5jdGlvbiB0ZShlKXtyZXR1cm4idHJ1ZSI9PT1lfHwiZmFsc2UiIT09ZSYmKCJudWxsIj09PWU/bnVsbDplPT09K2UrIiI/K2U6Wi50ZXN0KGUpP0pTT04ucGFyc2UoZSk6ZSl9ZnVuY3Rpb24gbmUoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJjE9PT1lLm5vZGVUeXBlKWlmKHI9ImRhdGEtIit0LnJlcGxhY2UoZWUsIi0kJiIpLnRvTG93ZXJDYXNlKCksInN0cmluZyI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249dGUobil9Y2F0Y2goZSl7fUsuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufXcuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBLLmhhc0RhdGEoZSl8fEouaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEsuYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0sucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSi5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9fSksdy5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWUpe2lmKHRoaXMubGVuZ3RoJiYoaT1LLmdldChvKSwxPT09by5ub2RlVHlwZSYmIUouZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7bj1hLmxlbmd0aDt3aGlsZShuLS0pYVtuXSYmMD09PShyPWFbbl0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9RyhyLnNsaWNlKDUpKSxuZShvLHIsaVtyXSkpO0ouc2V0KG8sImhhc0RhdGFBdHRycyIsITApfXJldHVybiBpfXJldHVybiJvYmplY3QiPT10eXBlb2YgZT90aGlzLmVhY2goZnVuY3Rpb24oKXtLLnNldCh0aGlzLGUpfSk6eih0aGlzLGZ1bmN0aW9uKHQpe3ZhciBuO2lmKG8mJnZvaWQgMD09PXQpe2lmKHZvaWQgMCE9PShuPUsuZ2V0KG8sZSkpKXJldHVybiBuO2lmKHZvaWQgMCE9PShuPW5lKG8sZSkpKXJldHVybiBufWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Sy5zZXQodGhpcyxlLHQpfSl9LG51bGwsdCxhcmd1bWVudHMubGVuZ3RoPjEsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0sucmVtb3ZlKHRoaXMsZSl9KX19KSx3LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1KLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPUouYWNjZXNzKGUsdCx3Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj13LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPXcuX3F1ZXVlSG9va3MoZSx0KSxhPWZ1bmN0aW9uKCl7dy5kZXF1ZXVlKGUsdCl9OyJpbnByb2dyZXNzIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkmJigiZngiPT09dCYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwoZSxhLG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIEouZ2V0KGUsbil8fEouYWNjZXNzKGUsbix7ZW1wdHk6dy5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IikuYWRkKGZ1bmN0aW9uKCl7Si5yZW1vdmUoZSxbdCsicXVldWUiLG5dKX0pfSl9fSksdy5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49MjtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iZngiLG4tLSksYXJndW1lbnRzLmxlbmd0aDxuP3cucXVldWUodGhpc1swXSxlKTp2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dy5xdWV1ZSh0aGlzLGUsdCk7dy5fcXVldWVIb29rcyh0aGlzLGUpLCJmeCI9PT1lJiYiaW5wcm9ncmVzcyIhPT1uWzBdJiZ3LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3LmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9dy5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8ImZ4Ijt3aGlsZShhLS0pKG49Si5nZXQob1thXSxlKyJxdWV1ZUhvb2tzIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgcmU9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsaWU9bmV3IFJlZ0V4cCgiXig/OihbKy1dKT18KSgiK3JlKyIpKFthLXolXSopJCIsImkiKSxvZT1bIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGFlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIm5vbmUiPT09KGU9dHx8ZSkuc3R5bGUuZGlzcGxheXx8IiI9PT1lLnN0eWxlLmRpc3BsYXkmJncuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpJiYibm9uZSI9PT13LmNzcyhlLCJkaXNwbGF5Iil9LHNlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYT17fTtmb3IobyBpbiB0KWFbb109ZS5zdHlsZVtvXSxlLnN0eWxlW29dPXRbb107aT1uLmFwcGx5KGUscnx8W10pO2ZvcihvIGluIHQpZS5zdHlsZVtvXT1hW29dO3JldHVybiBpfTtmdW5jdGlvbiB1ZShlLHQsbixyKXt2YXIgaSxvLGE9MjAscz1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIHcuY3NzKGUsdCwiIil9LHU9cygpLGw9biYmblszXXx8KHcuY3NzTnVtYmVyW3RdPyIiOiJweCIpLGM9KHcuY3NzTnVtYmVyW3RdfHwicHgiIT09bCYmK3UpJiZpZS5leGVjKHcuY3NzKGUsdCkpO2lmKGMmJmNbM10hPT1sKXt1Lz0yLGw9bHx8Y1szXSxjPSt1fHwxO3doaWxlKGEtLSl3LnN0eWxlKGUsdCxjK2wpLCgxLW8pKigxLShvPXMoKS91fHwuNSkpPD0wJiYoYT0wKSxjLz1vO2MqPTIsdy5zdHlsZShlLHQsYytsKSxuPW58fFtdfXJldHVybiBuJiYoYz0rY3x8K3V8fDAsaT1uWzFdP2MrKG5bMV0rMSkqblsyXTorblsyXSxyJiYoci51bml0PWwsci5zdGFydD1jLHIuZW5kPWkpKSxpfXZhciBsZT17fTtmdW5jdGlvbiBjZShlKXt2YXIgdCxuPWUub3duZXJEb2N1bWVudCxyPWUubm9kZU5hbWUsaT1sZVtyXTtyZXR1cm4gaXx8KHQ9bi5ib2R5LmFwcGVuZENoaWxkKG4uY3JlYXRlRWxlbWVudChyKSksaT13LmNzcyh0LCJkaXNwbGF5IiksdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLCJub25lIj09PWkmJihpPSJibG9jayIpLGxlW3JdPWksaSl9ZnVuY3Rpb24gZmUoZSx0KXtmb3IodmFyIG4scixpPVtdLG89MCxhPWUubGVuZ3RoO288YTtvKyspKHI9ZVtvXSkuc3R5bGUmJihuPXIuc3R5bGUuZGlzcGxheSx0Pygibm9uZSI9PT1uJiYoaVtvXT1KLmdldChyLCJkaXNwbGF5Iil8fG51bGwsaVtvXXx8KHIuc3R5bGUuZGlzcGxheT0iIikpLCIiPT09ci5zdHlsZS5kaXNwbGF5JiZhZShyKSYmKGlbb109Y2UocikpKToibm9uZSIhPT1uJiYoaVtvXT0ibm9uZSIsSi5zZXQociwiZGlzcGxheSIsbikpKTtmb3Iobz0wO288YTtvKyspbnVsbCE9aVtvXSYmKGVbb10uc3R5bGUuZGlzcGxheT1pW29dKTtyZXR1cm4gZX13LmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXthZSh0aGlzKT93KHRoaXMpLnNob3coKTp3KHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKykvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksZ2U9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtnZS5vcHRncm91cD1nZS5vcHRpb24sZ2UudGJvZHk9Z2UudGZvb3Q9Z2UuY29sZ3JvdXA9Z2UuY2FwdGlvbj1nZS50aGVhZCxnZS50aD1nZS50ZDtmdW5jdGlvbiB5ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmTihlLHQpP3cubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gdmUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspSi5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fEouZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9dmFyIG1lPS88fCYjP1x3KzsvO2Z1bmN0aW9uIHhlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHA9W10sZD0wLGg9ZS5sZW5ndGg7ZDxoO2QrKylpZigobz1lW2RdKXx8MD09PW8paWYoIm9iamVjdCI9PT14KG8pKXcubWVyZ2UocCxvLm5vZGVUeXBlP1tvXTpvKTtlbHNlIGlmKG1lLnRlc3Qobykpe2E9YXx8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShkZS5leGVjKG8pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHU9Z2Vbc118fGdlLl9kZWZhdWx0LGEuaW5uZXJIVE1MPXVbMV0rdy5odG1sUHJlZmlsdGVyKG8pK3VbMl0sYz11WzBdO3doaWxlKGMtLSlhPWEubGFzdENoaWxkO3cubWVyZ2UocCxhLmNoaWxkTm9kZXMpLChhPWYuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9IiJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD0iIixkPTA7d2hpbGUobz1wW2QrK10paWYociYmdy5pbkFycmF5KG8scik+LTEpaSYmaS5wdXNoKG8pO2Vsc2UgaWYobD13LmNvbnRhaW5zKG8ub3duZXJEb2N1bWVudCxvKSxhPXllKGYuYXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGwmJnZlKGEpLG4pe2M9MDt3aGlsZShvPWFbYysrXSloZS50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9IWZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoci5jcmVhdGVFbGVtZW50KCJkaXYiKSksdD1yLmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCJyYWRpbyIpLHQuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwiY2hlY2tlZCIpLHQuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLGUuYXBwZW5kQ2hpbGQodCksaC5jaGVja0Nsb25lPWUuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLGUuaW5uZXJIVE1MPSI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+IixoLm5vQ2xvbmVDaGVja2VkPSEhZS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIGJlPXIuZG9jdW1lbnRFbGVtZW50LHdlPS9ea2V5LyxUZT0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sQ2U9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIEVlKCl7cmV0dXJuITB9ZnVuY3Rpb24ga2UoKXtyZXR1cm4hMX1mdW5jdGlvbiBTZSgpe3RyeXtyZXR1cm4gci5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319ZnVuY3Rpb24gRGUoZSx0LG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXsic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApO2ZvcihzIGluIHQpRGUoZSxzLG4scix0W3NdLG8pO3JldHVybiBlfWlmKG51bGw9PXImJm51bGw9PWk/KGk9bixyPW49dm9pZCAwKTpudWxsPT1pJiYoInN0cmluZyI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9a2U7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksKGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHcoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KS5ndWlkPWEuZ3VpZHx8KGEuZ3VpZD13Lmd1aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe3cuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX13LmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx5PUouZ2V0KGUpO2lmKHkpe24uaGFuZGxlciYmKG49KG89bikuaGFuZGxlcixpPW8uc2VsZWN0b3IpLGkmJncuZmluZC5tYXRjaGVzU2VsZWN0b3IoYmUsaSksbi5ndWlkfHwobi5ndWlkPXcuZ3VpZCsrKSwodT15LmV2ZW50cyl8fCh1PXkuZXZlbnRzPXt9KSwoYT15LmhhbmRsZSl8fChhPXkuaGFuZGxlPWZ1bmN0aW9uKHQpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgdyYmdy5ldmVudC50cmlnZ2VyZWQhPT10LnR5cGU/dy5ldmVudC5kaXNwYXRjaC5hcHBseShlLGFyZ3VtZW50cyk6dm9pZCAwfSksbD0odD0odHx8IiIpLm1hdGNoKE0pfHxbIiJdKS5sZW5ndGg7d2hpbGUobC0tKWQ9Zz0ocz1DZS5leGVjKHRbbF0pfHxbXSlbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQmJihmPXcuZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0oaT9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZCxmPXcuZXZlbnQuc3BlY2lhbFtkXXx8e30sYz13LmV4dGVuZCh7dHlwZTpkLG9yaWdUeXBlOmcsZGF0YTpyLGhhbmRsZXI6bixndWlkOm4uZ3VpZCxzZWxlY3RvcjppLG5lZWRzQ29udGV4dDppJiZ3LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksbmFtZXNwYWNlOmguam9pbigiLiIpfSxvKSwocD11W2RdKXx8KChwPXVbZF09W10pLmRlbGVnYXRlQ291bnQ9MCxmLnNldHVwJiYhMSE9PWYuc2V0dXAuY2FsbChlLHIsaCxhKXx8ZS5hZGRFdmVudExpc3RlbmVyJiZlLmFkZEV2ZW50TGlzdGVuZXIoZCxhKSksZi5hZGQmJihmLmFkZC5jYWxsKGUsYyksYy5oYW5kbGVyLmd1aWR8fChjLmhhbmRsZXIuZ3VpZD1uLmd1aWQpKSxpP3Auc3BsaWNlKHAuZGVsZWdhdGVDb3VudCsrLDAsYyk6cC5wdXNoKGMpLHcuZXZlbnQuZ2xvYmFsW2RdPSEwKX19LHJlbW92ZTpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcseT1KLmhhc0RhdGEoZSkmJkouZ2V0KGUpO2lmKHkmJih1PXkuZXZlbnRzKSl7bD0odD0odHx8IiIpLm1hdGNoKE0pfHxbIiJdKS5sZW5ndGg7d2hpbGUobC0tKWlmKHM9Q2UuZXhlYyh0W2xdKXx8W10sZD1nPXNbMV0saD0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGQpe2Y9dy5ldmVudC5zcGVjaWFsW2RdfHx7fSxwPXVbZD0ocj9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZF18fFtdLHM9c1syXSYmbmV3IFJlZ0V4cCgiKF58XFwuKSIraC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKSxhPW89cC5sZW5ndGg7d2hpbGUoby0tKWM9cFtvXSwhaSYmZyE9PWMub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWMuZ3VpZHx8cyYmIXMudGVzdChjLm5hbWVzcGFjZSl8fHImJnIhPT1jLnNlbGVjdG9yJiYoIioqIiE9PXJ8fCFjLnNlbGVjdG9yKXx8KHAuc3BsaWNlKG8sMSksYy5zZWxlY3RvciYmcC5kZWxlZ2F0ZUNvdW50LS0sZi5yZW1vdmUmJmYucmVtb3ZlLmNhbGwoZSxjKSk7YSYmIXAubGVuZ3RoJiYoZi50ZWFyZG93biYmITEhPT1mLnRlYXJkb3duLmNhbGwoZSxoLHkuaGFuZGxlKXx8dy5yZW1vdmVFdmVudChlLGQseS5oYW5kbGUpLGRlbGV0ZSB1W2RdKX1lbHNlIGZvcihkIGluIHUpdy5ldmVudC5yZW1vdmUoZSxkK3RbbF0sbixyLCEwKTt3LmlzRW1wdHlPYmplY3QodSkmJkoucmVtb3ZlKGUsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0PXcuZXZlbnQuZml4KGUpLG4scixpLG8sYSxzLHU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGw9KEouZ2V0KHRoaXMsImV2ZW50cyIpfHx7fSlbdC50eXBlXXx8W10sYz13LmV2ZW50LnNwZWNpYWxbdC50eXBlXXx8e307Zm9yKHVbMF09dCxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl1W25dPWFyZ3VtZW50c1tuXTtpZih0LmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWMucHJlRGlzcGF0Y2h8fCExIT09Yy5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsdCkpe3M9dy5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMsdCxsKSxuPTA7d2hpbGUoKG89c1tuKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSl7dC5jdXJyZW50VGFyZ2V0PW8uZWxlbSxyPTA7d2hpbGUoKGE9by5oYW5kbGVyc1tyKytdKSYmIXQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSl0LnJuYW1lc3BhY2UmJiF0LnJuYW1lc3BhY2UudGVzdChhLm5hbWVzcGFjZSl8fCh0LmhhbmRsZU9iaj1hLHQuZGF0YT1hLmRhdGEsdm9pZCAwIT09KGk9KCh3LmV2ZW50LnNwZWNpYWxbYS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGEuaGFuZGxlcikuYXBwbHkoby5lbGVtLHUpKSYmITE9PT0odC5yZXN1bHQ9aSkmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSkpfXJldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHQpLHQucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJmUuYnV0dG9uPj0xKSlmb3IoO2whPT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1sLmRpc2FibGVkKSl7Zm9yKG89W10sYT17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1hW2k9KHI9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKGFbaV09ci5uZWVkc0NvbnRleHQ/dyhpLHRoaXMpLmluZGV4KGwpPi0xOncuZmluZChpLHRoaXMsbnVsbCxbbF0pLmxlbmd0aCksYVtpXSYmby5wdXNoKHIpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczpvfSl9cmV0dXJuIGw9dGhpcyx1PHQubGVuZ3RoJiZzLnB1c2goe2VsZW06bCxoYW5kbGVyczp0LnNsaWNlKHUpfSksc30sYWRkUHJvcDpmdW5jdGlvbihlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LkV2ZW50LnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6Zyh0KT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdCh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W2VdfSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbdy5leHBhbmRvXT9lOm5ldyB3LkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09U2UoKSYmdGhpcy5mb2N1cylyZXR1cm4gdGhpcy5mb2N1cygpLCExfSxkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcz09PVNlKCkmJnRoaXMuYmx1cilyZXR1cm4gdGhpcy5ibHVyKCksITF9LGRlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKCJjaGVja2JveCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2smJk4odGhpcywiaW5wdXQiKSlyZXR1cm4gdGhpcy5jbGljaygpLCExfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4gTihlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LHcucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LHcuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB3LkV2ZW50KSlyZXR1cm4gbmV3IHcuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT9FZTprZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZ3LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbdy5leHBhbmRvXT0hMH0sdy5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOncuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOmtlLGlzUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmtlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUVlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1FZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sdy5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLCJjaGFyIjohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmd2UudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJlRlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSx3LmV2ZW50LmFkZFByb3ApLHcuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oZSx0KXt3LmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dGhpcyxpPWUucmVsYXRlZFRhcmdldCxvPWUuaGFuZGxlT2JqO3JldHVybiBpJiYoaT09PXJ8fHcuY29udGFpbnMocixpKSl8fChlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLHcuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRGUodGhpcyxlLHQsbixyKX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBEZSh0aGlzLGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaix3KGUuZGVsZWdhdGVUYXJnZXQpLm9mZihyLm5hbWVzcGFjZT9yLm9yaWdUeXBlKyIuIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKCJvYmplY3QiPT10eXBlb2YgZSl7Zm9yKGkgaW4gZSl0aGlzLm9mZihpLHQsZVtpXSk7cmV0dXJuIHRoaXN9cmV0dXJuITEhPT10JiYiZnVuY3Rpb24iIT10eXBlb2YgdHx8KG49dCx0PXZvaWQgMCksITE9PT1uJiYobj1rZSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX19KTt2YXIgTmU9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopW14+XSopXC8+L2dpLEFlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLGplPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLHFlPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBMZShlLHQpe3JldHVybiBOKGUsInRhYmxlIikmJk4oMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpP3coZSkuY2hpbGRyZW4oInRib2R5IilbMF18fGU6ZX1mdW5jdGlvbiBIZShlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIE9lKGUpe3JldHVybiJ0cnVlLyI9PT0oZS50eXBlfHwiIikuc2xpY2UoMCw1KT9lLnR5cGU9ZS50eXBlLnNsaWNlKDUpOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBQZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKEouaGFzRGF0YShlKSYmKG89Si5hY2Nlc3MoZSksYT1KLnNldCh0LG8pLGw9by5ldmVudHMpKXtkZWxldGUgYS5oYW5kbGUsYS5ldmVudHM9e307Zm9yKGkgaW4gbClmb3Iobj0wLHI9bFtpXS5sZW5ndGg7bjxyO24rKyl3LmV2ZW50LmFkZCh0LGksbFtpXVtuXSl9Sy5oYXNEYXRhKGUpJiYocz1LLmFjY2VzcyhlKSx1PXcuZXh0ZW5kKHt9LHMpLEsuc2V0KHQsdSkpfX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsiaW5wdXQiPT09biYmcGUudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6ImlucHV0IiE9PW4mJiJ0ZXh0YXJlYSIhPT1ufHwodC5kZWZhdWx0VmFsdWU9ZS5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIFJlKGUsdCxuLHIpe3Q9YS5hcHBseShbXSx0KTt2YXIgaSxvLHMsdSxsLGMsZj0wLHA9ZS5sZW5ndGgsZD1wLTEseT10WzBdLHY9Zyh5KTtpZih2fHxwPjEmJiJzdHJpbmciPT10eXBlb2YgeSYmIWguY2hlY2tDbG9uZSYmamUudGVzdCh5KSlyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKGkpe3ZhciBvPWUuZXEoaSk7diYmKHRbMF09eS5jYWxsKHRoaXMsaSxvLmh0bWwoKSkpLFJlKG8sdCxuLHIpfSk7aWYocCYmKGk9eGUodCxlWzBdLm93bmVyRG9jdW1lbnQsITEsZSxyKSxvPWkuZmlyc3RDaGlsZCwxPT09aS5jaGlsZE5vZGVzLmxlbmd0aCYmKGk9byksb3x8cikpe2Zvcih1PShzPXcubWFwKHllKGksInNjcmlwdCIpLEhlKSkubGVuZ3RoO2Y8cDtmKyspbD1pLGYhPT1kJiYobD13LmNsb25lKGwsITAsITApLHUmJncubWVyZ2Uocyx5ZShsLCJzY3JpcHQiKSkpLG4uY2FsbChlW2ZdLGwsZik7aWYodSlmb3IoYz1zW3MubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsdy5tYXAocyxPZSksZj0wO2Y8dTtmKyspbD1zW2ZdLGhlLnRlc3QobC50eXBlfHwiIikmJiFKLmFjY2VzcyhsLCJnbG9iYWxFdmFsIikmJncuY29udGFpbnMoYyxsKSYmKGwuc3JjJiYibW9kdWxlIiE9PShsLnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpP3cuX2V2YWxVcmwmJncuX2V2YWxVcmwobC5zcmMpOm0obC50ZXh0Q29udGVudC5yZXBsYWNlKHFlLCIiKSxjLGwpKX1yZXR1cm4gZX1mdW5jdGlvbiBJZShlLHQsbil7Zm9yKHZhciByLGk9dD93LmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8dy5jbGVhbkRhdGEoeWUocikpLHIucGFyZW50Tm9kZSYmKG4mJncuY29udGFpbnMoci5vd25lckRvY3VtZW50LHIpJiZ2ZSh5ZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX13LmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKE5lLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5jbG9uZU5vZGUoITApLHU9dy5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoIShoLm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx3LmlzWE1MRG9jKGUpKSlmb3IoYT15ZShzKSxyPTAsaT0obz15ZShlKSkubGVuZ3RoO3I8aTtyKyspTWUob1tyXSxhW3JdKTtpZih0KWlmKG4pZm9yKG89b3x8eWUoZSksYT1hfHx5ZShzKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKVBlKG9bcl0sYVtyXSk7ZWxzZSBQZShlLHMpO3JldHVybihhPXllKHMsInNjcmlwdCIpKS5sZW5ndGg+MCYmdmUoYSwhdSYmeWUoZSwic2NyaXB0IikpLHN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9dy5ldmVudC5zcGVjaWFsLG89MDt2b2lkIDAhPT0obj1lW29dKTtvKyspaWYoWShuKSl7aWYodD1uW0ouZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKWlbcl0/dy5ldmVudC5yZW1vdmUobixyKTp3LnJlbW92ZUV2ZW50KG4scix0LmhhbmRsZSk7bltKLmV4cGFuZG9dPXZvaWQgMH1uW0suZXhwYW5kb10mJihuW0suZXhwYW5kb109dm9pZCAwKX19fSksdy5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gSWUodGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBJZSh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiB6KHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/dy50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFJlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxMZSh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PUxlKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KX0sYWZ0ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gUmUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHcuY2xlYW5EYXRhKHllKGUsITEpKSxlLnRleHRDb250ZW50PSIiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsIT1lJiZlLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdy5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0PXRoaXNbMF18fHt9LG49MCxyPXRoaXMubGVuZ3RoO2lmKHZvaWQgMD09PWUmJjE9PT10Lm5vZGVUeXBlKXJldHVybiB0LmlubmVySFRNTDtpZigic3RyaW5nIj09dHlwZW9mIGUmJiFBZS50ZXN0KGUpJiYhZ2VbKGRlLmV4ZWMoZSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCldKXtlPXcuaHRtbFByZWZpbHRlcihlKTt0cnl7Zm9yKDtuPHI7bisrKTE9PT0odD10aGlzW25dfHx7fSkubm9kZVR5cGUmJih3LmNsZWFuRGF0YSh5ZSh0LCExKSksdC5pbm5lckhUTUw9ZSk7dD0wfWNhdGNoKGUpe319dCYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBSZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbih0KXt2YXIgbj10aGlzLnBhcmVudE5vZGU7dy5pbkFycmF5KHRoaXMsZSk8MCYmKHcuY2xlYW5EYXRhKHllKHRoaXMpKSxuJiZuLnJlcGxhY2VDaGlsZCh0LHRoaXMpKX0sZSl9fSksdy5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLGk9dyhlKSxvPWkubGVuZ3RoLTEsYT0wO2E8PW87YSsrKW49YT09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx3KGlbYV0pW3RdKG4pLHMuYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSk7dmFyIFdlPW5ldyBSZWdFeHAoIl4oIityZSsiKSg/IXB4KVthLXolXSskIiwiaSIpLCRlPWZ1bmN0aW9uKHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gbiYmbi5vcGVuZXJ8fChuPWUpLG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KX0sQmU9bmV3IFJlZ0V4cChvZS5qb2luKCJ8IiksImkiKTshZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aWYoYyl7bC5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIixjLnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjYwJTt0b3A6MSUiLGJlLmFwcGVuZENoaWxkKGwpLmFwcGVuZENoaWxkKGMpO3ZhciB0PWUuZ2V0Q29tcHV0ZWRTdHlsZShjKTtpPSIxJSIhPT10LnRvcCx1PTEyPT09bih0Lm1hcmdpbkxlZnQpLGMuc3R5bGUucmlnaHQ9IjYwJSIscz0zNj09PW4odC5yaWdodCksbz0zNj09PW4odC53aWR0aCksYy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGE9MzY9PT1jLm9mZnNldFdpZHRofHwiYWJzb2x1dGUiLGJlLnJlbW92ZUNoaWxkKGwpLGM9bnVsbH19ZnVuY3Rpb24gbihlKXtyZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGUpKX12YXIgaSxvLGEscyx1LGw9ci5jcmVhdGVFbGVtZW50KCJkaXYiKSxjPXIuY3JlYXRlRWxlbWVudCgiZGl2Iik7Yy5zdHlsZSYmKGMuc3R5bGUuYmFja2dyb3VuZENsaXA9ImNvbnRlbnQtYm94IixjLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsaC5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PWMuc3R5bGUuYmFja2dyb3VuZENsaXAsdy5leHRlbmQoaCx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLG99LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxzfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxpfSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLHV9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLGF9fSkpfSgpO2Z1bmN0aW9uIEZlKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuc3R5bGU7cmV0dXJuKG49bnx8JGUoZSkpJiYoIiIhPT0oYT1uLmdldFByb3BlcnR5VmFsdWUodCl8fG5bdF0pfHx3LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KGE9dy5zdHlsZShlLHQpKSwhaC5waXhlbEJveFN0eWxlcygpJiZXZS50ZXN0KGEpJiZCZS50ZXN0KHQpJiYocj1zLndpZHRoLGk9cy5taW5XaWR0aCxvPXMubWF4V2lkdGgscy5taW5XaWR0aD1zLm1heFdpZHRoPXMud2lkdGg9YSxhPW4ud2lkdGgscy53aWR0aD1yLHMubWluV2lkdGg9aSxzLm1heFdpZHRoPW8pKSx2b2lkIDAhPT1hP2ErIiI6YX1mdW5jdGlvbiBfZShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtpZighZSgpKXJldHVybih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuZ2V0fX19dmFyIHplPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxYZT0vXi0tLyxVZT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sVmU9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9LEdlPVsiV2Via2l0IiwiTW96IiwibXMiXSxZZT1yLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlO2Z1bmN0aW9uIFFlKGUpe2lmKGUgaW4gWWUpcmV0dXJuIGU7dmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1HZS5sZW5ndGg7d2hpbGUobi0tKWlmKChlPUdlW25dK3QpaW4gWWUpcmV0dXJuIGV9ZnVuY3Rpb24gSmUoZSl7dmFyIHQ9dy5jc3NQcm9wc1tlXTtyZXR1cm4gdHx8KHQ9dy5jc3NQcm9wc1tlXT1RZShlKXx8ZSksdH1mdW5jdGlvbiBLZShlLHQsbil7dmFyIHI9aWUuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8InB4Iik6dH1mdW5jdGlvbiBaZShlLHQsbixyLGksbyl7dmFyIGE9IndpZHRoIj09PXQ/MTowLHM9MCx1PTA7aWYobj09PShyPyJib3JkZXIiOiJjb250ZW50IikpcmV0dXJuIDA7Zm9yKDthPDQ7YSs9MikibWFyZ2luIj09PW4mJih1Kz13LmNzcyhlLG4rb2VbYV0sITAsaSkpLHI/KCJjb250ZW50Ij09PW4mJih1LT13LmNzcyhlLCJwYWRkaW5nIitvZVthXSwhMCxpKSksIm1hcmdpbiIhPT1uJiYodS09dy5jc3MoZSwiYm9yZGVyIitvZVthXSsiV2lkdGgiLCEwLGkpKSk6KHUrPXcuY3NzKGUsInBhZGRpbmciK29lW2FdLCEwLGkpLCJwYWRkaW5nIiE9PW4/dSs9dy5jc3MoZSwiYm9yZGVyIitvZVthXSsiV2lkdGgiLCEwLGkpOnMrPXcuY3NzKGUsImJvcmRlciIrb2VbYV0rIldpZHRoIiwhMCxpKSk7cmV0dXJuIXImJm8+PTAmJih1Kz1NYXRoLm1heCgwLE1hdGguY2VpbChlWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXS1vLXUtcy0uNSkpKSx1fWZ1bmN0aW9uIGV0KGUsdCxuKXt2YXIgcj0kZShlKSxpPUZlKGUsdCxyKSxvPSJib3JkZXItYm94Ij09PXcuY3NzKGUsImJveFNpemluZyIsITEsciksYT1vO2lmKFdlLnRlc3QoaSkpe2lmKCFuKXJldHVybiBpO2k9ImF1dG8ifXJldHVybiBhPWEmJihoLmJveFNpemluZ1JlbGlhYmxlKCl8fGk9PT1lLnN0eWxlW3RdKSwoImF1dG8iPT09aXx8IXBhcnNlRmxvYXQoaSkmJiJpbmxpbmUiPT09dy5jc3MoZSwiZGlzcGxheSIsITEscikpJiYoaT1lWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXSxhPSEwKSwoaT1wYXJzZUZsb2F0KGkpfHwwKStaZShlLHQsbnx8KG8/ImJvcmRlciI6ImNvbnRlbnQiKSxhLHIsaSkrInB4In13LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPUZlKGUsIm9wYWNpdHkiKTtyZXR1cm4iIj09PW4/IjEiOm59fX19LGNzc051bWJlcjp7YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6ITAsY29sdW1uQ291bnQ6ITAsZmlsbE9wYWNpdHk6ITAsZmxleEdyb3c6ITAsZmxleFNocmluazohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1HKHQpLHU9WGUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9SmUocykpLGE9dy5jc3NIb29rc1t0XXx8dy5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09KG89dHlwZW9mIG4pJiYoaT1pZS5leGVjKG4pKSYmaVsxXSYmKG49dWUoZSx0LGkpLG89Im51bWJlciIpLG51bGwhPW4mJm49PT1uJiYoIm51bWJlciI9PT1vJiYobis9aSYmaVszXXx8KHcuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSxoLmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW3RdPSJpbmhlcml0IiksYSYmInNldCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9Ryh0KTtyZXR1cm4gWGUudGVzdCh0KXx8KHQ9SmUocykpLChhPXcuY3NzSG9va3NbdF18fHcuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPUZlKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIFZlJiYoaT1WZVt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksdy5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobilyZXR1cm4hemUudGVzdCh3LmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP2V0KGUsdCxyKTpzZShlLFVlLGZ1bmN0aW9uKCl7cmV0dXJuIGV0KGUsdCxyKX0pfSxzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG89JGUoZSksYT0iYm9yZGVyLWJveCI9PT13LmNzcyhlLCJib3hTaXppbmciLCExLG8pLHM9ciYmWmUoZSx0LHIsYSxvKTtyZXR1cm4gYSYmaC5zY3JvbGxib3hTaXplKCk9PT1vLnBvc2l0aW9uJiYocy09TWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLXBhcnNlRmxvYXQob1t0XSktWmUoZSx0LCJib3JkZXIiLCExLG8pLS41KSkscyYmKGk9aWUuZXhlYyhuKSkmJiJweCIhPT0oaVszXXx8InB4IikmJihlLnN0eWxlW3RdPW4sbj13LmNzcyhlLHQpKSxLZShlLG4scyl9fX0pLHcuY3NzSG9va3MubWFyZ2luTGVmdD1fZShoLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoRmUoZSwibWFyZ2luTGVmdCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LXNlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpKyJweCJ9KSx3LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe3cuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe2Zvcih2YXIgcj0wLGk9e30sbz0ic3RyaW5nIj09dHlwZW9mIG4/bi5zcGxpdCgiICIpOltuXTtyPDQ7cisrKWlbZStvZVtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSwibWFyZ2luIiE9PWUmJih3LmNzc0hvb2tzW2UrdF0uc2V0PUtlKX0pLHcuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPSRlKGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPXcuY3NzKGUsdFthXSwhMSxyKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09bj93LnN0eWxlKGUsdCxuKTp3LmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX19KTtmdW5jdGlvbiB0dChlLHQsbixyLGkpe3JldHVybiBuZXcgdHQucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX13LlR3ZWVuPXR0LHR0LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dHQsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8dy5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh3LmNzc051bWJlcltuXT8iIjoicHgiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIGU9dHQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOnR0LnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPXR0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9dD13LmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6dHQucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sdHQucHJvdG90eXBlLmluaXQucHJvdG90eXBlPXR0LnByb3RvdHlwZSx0dC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXToodD13LmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ/dDowfSxzZXQ6ZnVuY3Rpb24oZSl7dy5meC5zdGVwW2UucHJvcF0/dy5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8bnVsbD09ZS5lbGVtLnN0eWxlW3cuY3NzUHJvcHNbZS5wcm9wXV0mJiF3LmNzc0hvb2tzW2UucHJvcF0/ZS5lbGVtW2UucHJvcF09ZS5ub3c6dy5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCl9fX0sdHQucHJvcEhvb2tzLnNjcm9sbFRvcD10dC5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx3LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9LF9kZWZhdWx0OiJzd2luZyJ9LHcuZng9dHQucHJvdG90eXBlLmluaXQsdy5meC5zdGVwPXt9O3ZhciBudCxydCxpdD0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sb3Q9L3F1ZXVlSG9va3MkLztmdW5jdGlvbiBhdCgpe3J0JiYoITE9PT1yLmhpZGRlbiYmZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYXQpOmUuc2V0VGltZW91dChhdCx3LmZ4LmludGVydmFsKSx3LmZ4LnRpY2soKSl9ZnVuY3Rpb24gc3QoKXtyZXR1cm4gZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bnQ9dm9pZCAwfSksbnQ9RGF0ZS5ub3coKX1mdW5jdGlvbiB1dChlLHQpe3ZhciBuLHI9MCxpPXtoZWlnaHQ6ZX07Zm9yKHQ9dD8xOjA7cjw0O3IrPTItdClpWyJtYXJnaW4iKyhuPW9lW3JdKV09aVsicGFkZGluZyIrbl09ZTtyZXR1cm4gdCYmKGkub3BhY2l0eT1pLndpZHRoPWUpLGl9ZnVuY3Rpb24gbHQoZSx0LG4pe2Zvcih2YXIgcixpPShwdC50d2VlbmVyc1t0XXx8W10pLmNvbmNhdChwdC50d2VlbmVyc1siKiJdKSxvPTAsYT1pLmxlbmd0aDtvPGE7bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBjdChlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYyxmPSJ3aWR0aCJpbiB0fHwiaGVpZ2h0ImluIHQscD10aGlzLGQ9e30saD1lLnN0eWxlLGc9ZS5ub2RlVHlwZSYmYWUoZSkseT1KLmdldChlLCJmeHNob3ciKTtuLnF1ZXVlfHwobnVsbD09KGE9dy5fcXVldWVIb29rcyhlLCJmeCIpKS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCxzPWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHxzKCl9KSxhLnVucXVldWVkKysscC5hbHdheXMoZnVuY3Rpb24oKXtwLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSx3LnF1ZXVlKGUsImZ4IikubGVuZ3RofHxhLmVtcHR5LmZpcmUoKX0pfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLGl0LnRlc3QoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZz8iaGlkZSI6InNob3ciKSl7aWYoInNob3ciIT09aXx8IXl8fHZvaWQgMD09PXlbcl0pY29udGludWU7Zz0hMH1kW3JdPXkmJnlbcl18fHcuc3R5bGUoZSxyKX1pZigodT0hdy5pc0VtcHR5T2JqZWN0KHQpKXx8IXcuaXNFbXB0eU9iamVjdChkKSl7ZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxudWxsPT0obD15JiZ5LmRpc3BsYXkpJiYobD1KLmdldChlLCJkaXNwbGF5IikpLCJub25lIj09PShjPXcuY3NzKGUsImRpc3BsYXkiKSkmJihsP2M9bDooZmUoW2VdLCEwKSxsPWUuc3R5bGUuZGlzcGxheXx8bCxjPXcuY3NzKGUsImRpc3BsYXkiKSxmZShbZV0pKSksKCJpbmxpbmUiPT09Y3x8ImlubGluZS1ibG9jayI9PT1jJiZudWxsIT1sKSYmIm5vbmUiPT09dy5jc3MoZSwiZmxvYXQiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9bH0pLG51bGw9PWwmJihjPWguZGlzcGxheSxsPSJub25lIj09PWM/IiI6YykpLGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExO2ZvcihyIGluIGQpdXx8KHk/ImhpZGRlbiJpbiB5JiYoZz15LmhpZGRlbik6eT1KLmFjY2VzcyhlLCJmeHNob3ciLHtkaXNwbGF5Omx9KSxvJiYoeS5oaWRkZW49IWcpLGcmJmZlKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Z3x8ZmUoW2VdKSxKLnJlbW92ZShlLCJmeHNob3ciKTtmb3IociBpbiBkKXcuc3R5bGUoZSxyLGRbcl0pfSkpLHU9bHQoZz95W3JdOjAscixwKSxyIGluIHl8fCh5W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9fWZ1bmN0aW9uIGZ0KGUsdCl7dmFyIG4scixpLG8sYTtmb3IobiBpbiBlKWlmKHI9RyhuKSxpPXRbcl0sbz1lW25dLEFycmF5LmlzQXJyYXkobykmJihpPW9bMV0sbz1lW25dPW9bMF0pLG4hPT1yJiYoZVtyXT1vLGRlbGV0ZSBlW25dKSwoYT13LmNzc0hvb2tzW3JdKSYmImV4cGFuZCJpbiBhKXtvPWEuZXhwYW5kKG8pLGRlbGV0ZSBlW3JdO2ZvcihuIGluIG8pbiBpbiBlfHwoZVtuXT1vW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9ZnVuY3Rpb24gcHQoZSx0LG4pe3ZhciByLGksbz0wLGE9cHQucHJlZmlsdGVycy5sZW5ndGgscz13LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO2Zvcih2YXIgdD1udHx8c3QoKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPTEtKG4vbC5kdXJhdGlvbnx8MCksbz0wLGE9bC50d2VlbnMubGVuZ3RoO288YTtvKyspbC50d2VlbnNbb10ucnVuKHIpO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbbCxyLG5dKSxyPDEmJmE/bjooYXx8cy5ub3RpZnlXaXRoKGUsW2wsMSwwXSkscy5yZXNvbHZlV2l0aChlLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOncuZXh0ZW5kKHt9LHQpLG9wdHM6dy5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOncuZWFzaW5nLl9kZWZhdWx0fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6bnR8fHN0KCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj13LlR3ZWVuKGUsbC5vcHRzLHQsbixsLm9wdHMuc3BlY2lhbEVhc2luZ1t0XXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gocikscn0sc3RvcDpmdW5jdGlvbih0KXt2YXIgbj0wLHI9dD9sLnR3ZWVucy5sZW5ndGg6MDtpZihpKXJldHVybiB0aGlzO2ZvcihpPSEwO248cjtuKyspbC50d2VlbnNbbl0ucnVuKDEpO3JldHVybiB0PyhzLm5vdGlmeVdpdGgoZSxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKGUsW2wsdF0pKTpzLnJlamVjdFdpdGgoZSxbbCx0XSksdGhpc319KSxjPWwucHJvcHM7Zm9yKGZ0KGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO288YTtvKyspaWYocj1wdC5wcmVmaWx0ZXJzW29dLmNhbGwobCxlLGMsbC5vcHRzKSlyZXR1cm4gZyhyLnN0b3ApJiYody5fcXVldWVIb29rcyhsLmVsZW0sbC5vcHRzLnF1ZXVlKS5zdG9wPXIuc3RvcC5iaW5kKHIpKSxyO3JldHVybiB3Lm1hcChjLGx0LGwpLGcobC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwoZSxsKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKSx3LmZ4LnRpbWVyKHcuZXh0ZW5kKHUse2VsZW06ZSxhbmltOmwscXVldWU6bC5vcHRzLnF1ZXVlfSkpLGx9dy5BbmltYXRpb249dy5leHRlbmQocHQse3R3ZWVuZXJzOnsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpO3JldHVybiB1ZShuLmVsZW0sZSxpZS5leGVjKHQpLG4pLG59XX0sdHdlZW5lcjpmdW5jdGlvbihlLHQpe2coZSk/KHQ9ZSxlPVsiKiJdKTplPWUubWF0Y2goTSk7Zm9yKHZhciBuLHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbj1lW3JdLHB0LnR3ZWVuZXJzW25dPXB0LnR3ZWVuZXJzW25dfHxbXSxwdC50d2VlbmVyc1tuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXJzOltjdF0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9wdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6cHQucHJlZmlsdGVycy5wdXNoKGUpfX0pLHcuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJiJvYmplY3QiPT10eXBlb2YgZT93LmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fGcoZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIWcodCkmJnR9O3JldHVybiB3LmZ4Lm9mZj9yLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiB3LmZ4LnNwZWVkcz9yLmR1cmF0aW9uPXcuZnguc3BlZWRzW3IuZHVyYXRpb25dOnIuZHVyYXRpb249dy5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9ImZ4Iiksci5vbGQ9ci5jb21wbGV0ZSxyLmNvbXBsZXRlPWZ1bmN0aW9uKCl7ZyhyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmdy5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHcuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT13LmlzRW1wdHlPYmplY3QoZSksbz13LnNwZWVkKHQsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIHQ9cHQodGhpcyx3LmV4dGVuZCh7fSxlKSxvKTsoaXx8Si5nZXQodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChuKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj10LHQ9ZSxlPXZvaWQgMCksdCYmITEhPT1lJiZ0aGlzLnF1ZXVlKGV8fCJmeCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZSsicXVldWVIb29rcyIsbz13LnRpbWVycyxhPUouZ2V0KHRoaXMpO2lmKGkpYVtpXSYmYVtpXS5zdG9wJiZyKGFbaV0pO2Vsc2UgZm9yKGkgaW4gYSlhW2ldJiZhW2ldLnN0b3AmJm90LnRlc3QoaSkmJnIoYVtpXSk7Zm9yKGk9by5sZW5ndGg7aS0tOylvW2ldLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW2ldLnF1ZXVlIT09ZXx8KG9baV0uYW5pbS5zdG9wKG4pLHQ9ITEsby5zcGxpY2UoaSwxKSk7IXQmJm58fHcuZGVxdWV1ZSh0aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXtyZXR1cm4hMSE9PWUmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49Si5nZXQodGhpcykscj1uW2UrInF1ZXVlIl0saT1uW2UrInF1ZXVlSG9va3MiXSxvPXcudGltZXJzLGE9cj9yLmxlbmd0aDowO2ZvcihuLmZpbmlzaD0hMCx3LnF1ZXVlKHRoaXMsZSxbXSksaSYmaS5zdG9wJiZpLnN0b3AuY2FsbCh0aGlzLCEwKSx0PW8ubGVuZ3RoO3QtLTspb1t0XS5lbGVtPT09dGhpcyYmb1t0XS5xdWV1ZT09PWUmJihvW3RdLmFuaW0uc3RvcCghMCksby5zcGxpY2UodCwxKSk7Zm9yKHQ9MDt0PGE7dCsrKXJbdF0mJnJbdF0uZmluaXNoJiZyW3RdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBuLmZpbmlzaH0pfX0pLHcuZWFjaChbInRvZ2dsZSIsInNob3ciLCJoaWRlIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj13LmZuW3RdO3cuZm5bdF09ZnVuY3Rpb24oZSxyLGkpe3JldHVybiBudWxsPT1lfHwiYm9vbGVhbiI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZSh1dCh0LCEwKSxlLHIsaSl9fSksdy5lYWNoKHtzbGlkZURvd246dXQoInNob3ciKSxzbGlkZVVwOnV0KCJoaWRlIiksc2xpZGVUb2dnbGU6dXQoInRvZ2dsZSIpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oZSx0KXt3LmZuW2VdPWZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gdGhpcy5hbmltYXRlKHQsZSxuLHIpfX0pLHcudGltZXJzPVtdLHcuZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9MCxuPXcudGltZXJzO2ZvcihudD1EYXRlLm5vdygpO3Q8bi5sZW5ndGg7dCsrKShlPW5bdF0pKCl8fG5bdF0hPT1lfHxuLnNwbGljZSh0LS0sMSk7bi5sZW5ndGh8fHcuZnguc3RvcCgpLG50PXZvaWQgMH0sdy5meC50aW1lcj1mdW5jdGlvbihlKXt3LnRpbWVycy5wdXNoKGUpLHcuZnguc3RhcnQoKX0sdy5meC5pbnRlcnZhbD0xMyx3LmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7cnR8fChydD0hMCxhdCgpKX0sdy5meC5zdG9wPWZ1bmN0aW9uKCl7cnQ9bnVsbH0sdy5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sdy5mbi5kZWxheT1mdW5jdGlvbih0LG4pe3JldHVybiB0PXcuZng/dy5meC5zcGVlZHNbdF18fHQ6dCxuPW58fCJmeCIsdGhpcy5xdWV1ZShuLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5zZXRUaW1lb3V0KG4sdCk7ci5zdG9wPWZ1bmN0aW9uKCl7ZS5jbGVhclRpbWVvdXQoaSl9fSl9LGZ1bmN0aW9uKCl7dmFyIGU9ci5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHQ9ci5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChyLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTtlLnR5cGU9ImNoZWNrYm94IixoLmNoZWNrT249IiIhPT1lLnZhbHVlLGgub3B0U2VsZWN0ZWQ9dC5zZWxlY3RlZCwoZT1yLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixlLnR5cGU9InJhZGlvIixoLnJhZGlvVmFsdWU9InQiPT09ZS52YWx1ZX0oKTt2YXIgZHQsaHQ9dy5leHByLmF0dHJIYW5kbGU7dy5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcuYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dy5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSx3LmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGUuZ2V0QXR0cmlidXRlP3cucHJvcChlLHQsbik6KDE9PT1vJiZ3LmlzWE1MRG9jKGUpfHwoaT13LmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwody5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9kdDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgdy5yZW1vdmVBdHRyKGUsdCk6aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbisiIiksbik6aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjpudWxsPT0ocj13LmZpbmQuYXR0cihlLHQpKT92b2lkIDA6cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIWgucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJk4oZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKE0pO2lmKGkmJjE9PT1lLm5vZGVUeXBlKXdoaWxlKG49aVtyKytdKWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLGR0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD93LnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSx3LmVhY2gody5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgbj1odFt0XXx8dy5maW5kLmF0dHI7aHRbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG8sYT10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHJ8fChvPWh0W2FdLGh0W2FdPWksaT1udWxsIT1uKGUsdCxyKT9hOm51bGwsaHRbYV09byksaX19KTt2YXIgZ3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7dy5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4geih0aGlzLHcucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbdy5wcm9wRml4W2VdfHxlXX0pfX0pLHcuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89ZS5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmdy5pc1hNTERvYyhlKXx8KHQ9dy5wcm9wRml4W3RdfHx0LGk9dy5wcm9wSG9va3NbdF0pLHZvaWQgMCE9PW4/aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJiJnZXQiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXcuZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6Z3QudGVzdChlLm5vZGVOYW1lKXx8eXQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7ImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSJ9fSksaC5vcHRTZWxlY3RlZHx8KHcucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiZ0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7dCYmKHQuc2VsZWN0ZWRJbmRleCx0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSx3LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3cucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KTtmdW5jdGlvbiB2dChlKXtyZXR1cm4oZS5tYXRjaChNKXx8W10pLmpvaW4oIiAiKX1mdW5jdGlvbiBtdChlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIn1mdW5jdGlvbiB4dChlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOiJzdHJpbmciPT10eXBlb2YgZT9lLm1hdGNoKE0pfHxbXTpbXX13LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHMsdT0wO2lmKGcoZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt3KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsbXQodGhpcykpKX0pO2lmKCh0PXh0KGUpKS5sZW5ndGgpd2hpbGUobj10aGlzW3UrK10paWYoaT1tdChuKSxyPTE9PT1uLm5vZGVUeXBlJiYiICIrdnQoaSkrIiAiKXthPTA7d2hpbGUobz10W2ErK10pci5pbmRleE9mKCIgIitvKyIgIik8MCYmKHIrPW8rIiAiKTtpIT09KHM9dnQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1PTA7aWYoZyhlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3codGhpcykucmVtb3ZlQ2xhc3MoZS5jYWxsKHRoaXMsdCxtdCh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cigiY2xhc3MiLCIiKTtpZigodD14dChlKSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9bXQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK3Z0KGkpKyIgIil7YT0wO3doaWxlKG89dFthKytdKXdoaWxlKHIuaW5kZXhPZigiICIrbysiICIpPi0xKXI9ci5yZXBsYWNlKCIgIitvKyIgIiwiICIpO2khPT0ocz12dChyKSkmJm4uc2V0QXR0cmlidXRlKCJjbGFzcyIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGUscj0ic3RyaW5nIj09PW58fEFycmF5LmlzQXJyYXkoZSk7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmcj90P3RoaXMuYWRkQ2xhc3MoZSk6dGhpcy5yZW1vdmVDbGFzcyhlKTpnKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt3KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sbXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpLG8sYTtpZihyKXtpPTAsbz13KHRoaXMpLGE9eHQoZSk7d2hpbGUodD1hW2krK10pby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCl9ZWxzZSB2b2lkIDAhPT1lJiYiYm9vbGVhbiIhPT1ufHwoKHQ9bXQodGhpcykpJiZKLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIix0KSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIix0fHwhMT09PWU/IiI6Si5nZXQodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj0wO3Q9IiAiK2UrIiAiO3doaWxlKG49dGhpc1tyKytdKWlmKDE9PT1uLm5vZGVUeXBlJiYoIiAiK3Z0KG10KG4pKSsiICIpLmluZGV4T2YodCk+LTEpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGJ0PS9cci9nO3cuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj1nKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgaTsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PShpPXI/ZS5jYWxsKHRoaXMsbix3KHRoaXMpLnZhbCgpKTplKT9pPSIiOiJudW1iZXIiPT10eXBlb2YgaT9pKz0iIjpBcnJheS5pc0FycmF5KGkpJiYoaT13Lm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSksKHQ9dy52YWxIb29rc1t0aGlzLnR5cGVdfHx3LnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiYic2V0ImluIHQmJnZvaWQgMCE9PXQuc2V0KHRoaXMsaSwidmFsdWUiKXx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4odD13LnZhbEhvb2tzW2kudHlwZV18fHcudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJnZXQiaW4gdCYmdm9pZCAwIT09KG49dC5nZXQoaSwidmFsdWUiKSk/bjoic3RyaW5nIj09dHlwZW9mKG49aS52YWx1ZSk/bi5yZXBsYWNlKGJ0LCIiKTpudWxsPT1uPyIiOm59fX0pLHcuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dy5maW5kLmF0dHIoZSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9dD90OnZ0KHcudGV4dChlKSl9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT1lLm9wdGlvbnMsbz1lLnNlbGVjdGVkSW5kZXgsYT0ic2VsZWN0LW9uZSI9PT1lLnR5cGUscz1hP251bGw6W10sdT1hP28rMTppLmxlbmd0aDtmb3Iocj1vPDA/dTphP286MDtyPHU7cisrKWlmKCgobj1pW3JdKS5zZWxlY3RlZHx8cj09PW8pJiYhbi5kaXNhYmxlZCYmKCFuLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFOKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9dyhuKS52YWwoKSxhKXJldHVybiB0O3MucHVzaCh0KX1yZXR1cm4gc30sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUub3B0aW9ucyxvPXcubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7d2hpbGUoYS0tKSgocj1pW2FdKS5zZWxlY3RlZD13LmluQXJyYXkody52YWxIb29rcy5vcHRpb24uZ2V0KHIpLG8pPi0xKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19fSksdy5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7dy52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZS5jaGVja2VkPXcuaW5BcnJheSh3KGUpLnZhbCgpLHQpPi0xfX0saC5jaGVja09ufHwody52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lLmdldEF0dHJpYnV0ZSgidmFsdWUiKT8ib24iOmUudmFsdWV9KX0pLGguZm9jdXNpbj0ib25mb2N1c2luImluIGU7dmFyIHd0PS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxUdD1mdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfTt3LmV4dGVuZCh3LmV2ZW50LHt0cmlnZ2VyOmZ1bmN0aW9uKHQsbixpLG8pe3ZhciBhLHMsdSxsLGMscCxkLGgsdj1baXx8cl0sbT1mLmNhbGwodCwidHlwZSIpP3QudHlwZTp0LHg9Zi5jYWxsKHQsIm5hbWVzcGFjZSIpP3QubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYocz1oPXU9aT1pfHxyLDMhPT1pLm5vZGVUeXBlJiY4IT09aS5ub2RlVHlwZSYmIXd0LnRlc3QobSt3LmV2ZW50LnRyaWdnZXJlZCkmJihtLmluZGV4T2YoIi4iKT4tMSYmKG09KHg9bS5zcGxpdCgiLiIpKS5zaGlmdCgpLHguc29ydCgpKSxjPW0uaW5kZXhPZigiOiIpPDAmJiJvbiIrbSx0PXRbdy5leHBhbmRvXT90Om5ldyB3LkV2ZW50KG0sIm9iamVjdCI9PXR5cGVvZiB0JiZ0KSx0LmlzVHJpZ2dlcj1vPzI6Myx0Lm5hbWVzcGFjZT14LmpvaW4oIi4iKSx0LnJuYW1lc3BhY2U9dC5uYW1lc3BhY2U/bmV3IFJlZ0V4cCgiKF58XFwuKSIreC5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsLHQucmVzdWx0PXZvaWQgMCx0LnRhcmdldHx8KHQudGFyZ2V0PWkpLG49bnVsbD09bj9bdF06dy5tYWtlQXJyYXkobixbdF0pLGQ9dy5ldmVudC5zcGVjaWFsW21dfHx7fSxvfHwhZC50cmlnZ2VyfHwhMSE9PWQudHJpZ2dlci5hcHBseShpLG4pKSl7aWYoIW8mJiFkLm5vQnViYmxlJiYheShpKSl7Zm9yKGw9ZC5kZWxlZ2F0ZVR5cGV8fG0sd3QudGVzdChsK20pfHwocz1zLnBhcmVudE5vZGUpO3M7cz1zLnBhcmVudE5vZGUpdi5wdXNoKHMpLHU9czt1PT09KGkub3duZXJEb2N1bWVudHx8cikmJnYucHVzaCh1LmRlZmF1bHRWaWV3fHx1LnBhcmVudFdpbmRvd3x8ZSl9YT0wO3doaWxlKChzPXZbYSsrXSkmJiF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpaD1zLHQudHlwZT1hPjE/bDpkLmJpbmRUeXBlfHxtLChwPShKLmdldChzLCJldmVudHMiKXx8e30pW3QudHlwZV0mJkouZ2V0KHMsImhhbmRsZSIpKSYmcC5hcHBseShzLG4pLChwPWMmJnNbY10pJiZwLmFwcGx5JiZZKHMpJiYodC5yZXN1bHQ9cC5hcHBseShzLG4pLCExPT09dC5yZXN1bHQmJnQucHJldmVudERlZmF1bHQoKSk7cmV0dXJuIHQudHlwZT1tLG98fHQuaXNEZWZhdWx0UHJldmVudGVkKCl8fGQuX2RlZmF1bHQmJiExIT09ZC5fZGVmYXVsdC5hcHBseSh2LnBvcCgpLG4pfHwhWShpKXx8YyYmZyhpW21dKSYmIXkoaSkmJigodT1pW2NdKSYmKGlbY109bnVsbCksdy5ldmVudC50cmlnZ2VyZWQ9bSx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmguYWRkRXZlbnRMaXN0ZW5lcihtLFR0KSxpW21dKCksdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZoLnJlbW92ZUV2ZW50TGlzdGVuZXIobSxUdCksdy5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLHUmJihpW2NdPXUpKSx0LnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj13LmV4dGVuZChuZXcgdy5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTt3LmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLHcuZm4uZXh0ZW5kKHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3cuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIHcuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSksaC5mb2N1c2lufHx3LmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7dy5ldmVudC5zaW11bGF0ZSh0LGUudGFyZ2V0LHcuZXZlbnQuZml4KGUpKX07dy5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPUouYWNjZXNzKHIsdCk7aXx8ci5hZGRFdmVudExpc3RlbmVyKGUsbiwhMCksSi5hY2Nlc3Mocix0LChpfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsaT1KLmFjY2VzcyhyLHQpLTE7aT9KLmFjY2VzcyhyLHQsaSk6KHIucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLG4sITApLEoucmVtb3ZlKHIsdCkpfX19KTt2YXIgQ3Q9ZS5sb2NhdGlvbixFdD1EYXRlLm5vdygpLGt0PS9cPy87dy5wYXJzZVhNTD1mdW5jdGlvbih0KXt2YXIgbjtpZighdHx8InN0cmluZyIhPXR5cGVvZiB0KXJldHVybiBudWxsO3RyeXtuPShuZXcgZS5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LCJ0ZXh0L3htbCIpfWNhdGNoKGUpe249dm9pZCAwfXJldHVybiBuJiYhbi5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGh8fHcuZXJyb3IoIkludmFsaWQgWE1MOiAiK3QpLG59O3ZhciBTdD0vXFtcXSQvLER0PS9ccj9cbi9nLE50PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxBdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnVuY3Rpb24ganQoZSx0LG4scil7dmFyIGk7aWYoQXJyYXkuaXNBcnJheSh0KSl3LmVhY2godCxmdW5jdGlvbih0LGkpe258fFN0LnRlc3QoZSk/cihlLGkpOmp0KGUrIlsiKygib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPWk/dDoiIikrIl0iLGksbixyKX0pO2Vsc2UgaWYobnx8Im9iamVjdCIhPT14KHQpKXIoZSx0KTtlbHNlIGZvcihpIGluIHQpanQoZSsiWyIraSsiXSIsdFtpXSxuLHIpfXcucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1nKHQpP3QoKTp0O3Jbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KG51bGw9PW4/IiI6bil9O2lmKEFycmF5LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYhdy5pc1BsYWluT2JqZWN0KGUpKXcuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpanQobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbigiJiIpfSx3LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHcucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT13LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT93Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF3KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmQXQudGVzdCh0aGlzLm5vZGVOYW1lKSYmIU50LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFwZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXcodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP3cubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShEdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoRHQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgcXQ9LyUyMC9nLEx0PS8jLiokLyxIdD0vKFs/Jl0pXz1bXiZdKi8sT3Q9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxQdD0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxNdD0vXig/OkdFVHxIRUFEKSQvLFJ0PS9eXC9cLy8sSXQ9e30sV3Q9e30sJHQ9IiovIi5jb25jYXQoIioiKSxCdD1yLmNyZWF0ZUVsZW1lbnQoImEiKTtCdC5ocmVmPUN0LmhyZWY7ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7InN0cmluZyIhPXR5cGVvZiB0JiYobj10LHQ9IioiKTt2YXIgcixpPTAsbz10LnRvTG93ZXJDYXNlKCkubWF0Y2goTSl8fFtdO2lmKGcobikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBfdChlLHQsbixyKXt2YXIgaT17fSxvPWU9PT1XdDtmdW5jdGlvbiBhKHMpe3ZhciB1O3JldHVybiBpW3NdPSEwLHcuZWFjaChlW3NdfHxbXSxmdW5jdGlvbihlLHMpe3ZhciBsPXModCxuLHIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgbHx8b3x8aVtsXT9vPyEodT1sKTp2b2lkIDA6KHQuZGF0YVR5cGVzLnVuc2hpZnQobCksYShsKSwhMSl9KSx1fXJldHVybiBhKHQuZGF0YVR5cGVzWzBdKXx8IWlbIioiXSYmYSgiKiIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPXcuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJncuZXh0ZW5kKCEwLGUsciksZX1mdW5jdGlvbiBYdChlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1LnNoaWZ0KCksdm9pZCAwPT09ciYmKHI9ZS5taW1lVHlwZXx8dC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKHIpZm9yKGkgaW4gcylpZihzW2ldJiZzW2ldLnRlc3Qocikpe3UudW5zaGlmdChpKTticmVha31pZih1WzBdaW4gbilvPXVbMF07ZWxzZXtmb3IoaSBpbiBuKXtpZighdVswXXx8ZS5jb252ZXJ0ZXJzW2krIiAiK3VbMF1dKXtvPWk7YnJlYWt9YXx8KGE9aSl9bz1vfHxhfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXX1mdW5jdGlvbiBVdChlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fXcuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpDdC5ocmVmLHR5cGU6IkdFVCIsaXNMb2NhbDpQdC50ZXN0KEN0LnByb3RvY29sKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIsYWNjZXB0czp7IioiOiR0LHRleHQ6InRleHQvcGxhaW4iLGh0bWw6InRleHQvaHRtbCIseG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQifSxjb250ZW50czp7eG1sOi9cYnhtbFxiLyxodG1sOi9cYmh0bWwvLGpzb246L1xianNvblxiL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOkpTT04ucGFyc2UsInRleHQgeG1sIjp3LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD96dCh6dChlLHcuYWpheFNldHRpbmdzKSx0KTp6dCh3LmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjpGdChJdCksYWpheFRyYW5zcG9ydDpGdChXdCksYWpheDpmdW5jdGlvbih0LG4peyJvYmplY3QiPT10eXBlb2YgdCYmKG49dCx0PXZvaWQgMCksbj1ufHx7fTt2YXIgaSxvLGEscyx1LGwsYyxmLHAsZCxoPXcuYWpheFNldHVwKHt9LG4pLGc9aC5jb250ZXh0fHxoLHk9aC5jb250ZXh0JiYoZy5ub2RlVHlwZXx8Zy5qcXVlcnkpP3coZyk6dy5ldmVudCx2PXcuRGVmZXJyZWQoKSxtPXcuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLHg9aC5zdGF0dXNDb2RlfHx7fSxiPXt9LFQ9e30sQz0iY2FuY2VsZWQiLEU9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZihjKXtpZighcyl7cz17fTt3aGlsZSh0PU90LmV4ZWMoYSkpc1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1zW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYz9hOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09YyYmKGU9VFtlLnRvTG93ZXJDYXNlKCldPVRbZS50b0xvd2VyQ2FzZSgpXXx8ZSxiW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWMmJihoLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihjKUUuYWx3YXlzKGVbRS5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpeFt0XT1beFt0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8QztyZXR1cm4gaSYmaS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKHYucHJvbWlzZShFKSxoLnVybD0oKHR8fGgudXJsfHxDdC5ocmVmKSsiIikucmVwbGFjZShSdCxDdC5wcm90b2NvbCsiLy8iKSxoLnR5cGU9bi5tZXRob2R8fG4udHlwZXx8aC5tZXRob2R8fGgudHlwZSxoLmRhdGFUeXBlcz0oaC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKE0pfHxbIiJdLG51bGw9PWguY3Jvc3NEb21haW4pe2w9ci5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e2wuaHJlZj1oLnVybCxsLmhyZWY9bC5ocmVmLGguY3Jvc3NEb21haW49QnQucHJvdG9jb2wrIi8vIitCdC5ob3N0IT1sLnByb3RvY29sKyIvLyIrbC5ob3N0fWNhdGNoKGUpe2guY3Jvc3NEb21haW49ITB9fWlmKGguZGF0YSYmaC5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBoLmRhdGEmJihoLmRhdGE9dy5wYXJhbShoLmRhdGEsaC50cmFkaXRpb25hbCkpLF90KEl0LGgsbixFKSxjKXJldHVybiBFOyhmPXcuZXZlbnQmJmguZ2xvYmFsKSYmMD09dy5hY3RpdmUrKyYmdy5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSxoLnR5cGU9aC50eXBlLnRvVXBwZXJDYXNlKCksaC5oYXNDb250ZW50PSFNdC50ZXN0KGgudHlwZSksbz1oLnVybC5yZXBsYWNlKEx0LCIiKSxoLmhhc0NvbnRlbnQ/aC5kYXRhJiZoLnByb2Nlc3NEYXRhJiYwPT09KGguY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmKGguZGF0YT1oLmRhdGEucmVwbGFjZShxdCwiKyIpKTooZD1oLnVybC5zbGljZShvLmxlbmd0aCksaC5kYXRhJiYoaC5wcm9jZXNzRGF0YXx8InN0cmluZyI9PXR5cGVvZiBoLmRhdGEpJiYobys9KGt0LnRlc3Qobyk/IiYiOiI/IikraC5kYXRhLGRlbGV0ZSBoLmRhdGEpLCExPT09aC5jYWNoZSYmKG89by5yZXBsYWNlKEh0LCIkMSIpLGQ9KGt0LnRlc3Qobyk/IiYiOiI/IikrIl89IitFdCsrK2QpLGgudXJsPW8rZCksaC5pZk1vZGlmaWVkJiYody5sYXN0TW9kaWZpZWRbb10mJkUuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLHcubGFzdE1vZGlmaWVkW29dKSx3LmV0YWdbb10mJkUuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsdy5ldGFnW29dKSksKGguZGF0YSYmaC5oYXNDb250ZW50JiYhMSE9PWguY29udGVudFR5cGV8fG4uY29udGVudFR5cGUpJiZFLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsaC5jb250ZW50VHlwZSksRS5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGguZGF0YVR5cGVzWzBdJiZoLmFjY2VwdHNbaC5kYXRhVHlwZXNbMF1dP2guYWNjZXB0c1toLmRhdGFUeXBlc1swXV0rKCIqIiE9PWguZGF0YVR5cGVzWzBdPyIsICIrJHQrIjsgcT0wLjAxIjoiIik6aC5hY2NlcHRzWyIqIl0pO2ZvcihwIGluIGguaGVhZGVycylFLnNldFJlcXVlc3RIZWFkZXIocCxoLmhlYWRlcnNbcF0pO2lmKGguYmVmb3JlU2VuZCYmKCExPT09aC5iZWZvcmVTZW5kLmNhbGwoZyxFLGgpfHxjKSlyZXR1cm4gRS5hYm9ydCgpO2lmKEM9ImFib3J0IixtLmFkZChoLmNvbXBsZXRlKSxFLmRvbmUoaC5zdWNjZXNzKSxFLmZhaWwoaC5lcnJvciksaT1fdChXdCxoLG4sRSkpe2lmKEUucmVhZHlTdGF0ZT0xLGYmJnkudHJpZ2dlcigiYWpheFNlbmQiLFtFLGhdKSxjKXJldHVybiBFO2guYXN5bmMmJmgudGltZW91dD4wJiYodT1lLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtFLmFib3J0KCJ0aW1lb3V0Iil9LGgudGltZW91dCkpO3RyeXtjPSExLGkuc2VuZChiLGspfWNhdGNoKGUpe2lmKGMpdGhyb3cgZTtrKC0xLGUpfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGsodCxuLHIscyl7dmFyIGwscCxkLGIsVCxDPW47Y3x8KGM9ITAsdSYmZS5jbGVhclRpbWVvdXQodSksaT12b2lkIDAsYT1zfHwiIixFLnJlYWR5U3RhdGU9dD4wPzQ6MCxsPXQ+PTIwMCYmdDwzMDB8fDMwND09PXQsciYmKGI9WHQoaCxFLHIpKSxiPVV0KGgsYixFLGwpLGw/KGguaWZNb2RpZmllZCYmKChUPUUuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSkmJih3Lmxhc3RNb2RpZmllZFtvXT1UKSwoVD1FLmdldFJlc3BvbnNlSGVhZGVyKCJldGFnIikpJiYody5ldGFnW29dPVQpKSwyMDQ9PT10fHwiSEVBRCI9PT1oLnR5cGU/Qz0ibm9jb250ZW50IjozMDQ9PT10P0M9Im5vdG1vZGlmaWVkIjooQz1iLnN0YXRlLHA9Yi5kYXRhLGw9IShkPWIuZXJyb3IpKSk6KGQ9QywhdCYmQ3x8KEM9ImVycm9yIix0PDAmJih0PTApKSksRS5zdGF0dXM9dCxFLnN0YXR1c1RleHQ9KG58fEMpKyIiLGw/di5yZXNvbHZlV2l0aChnLFtwLEMsRV0pOnYucmVqZWN0V2l0aChnLFtFLEMsZF0pLEUuc3RhdHVzQ29kZSh4KSx4PXZvaWQgMCxmJiZ5LnRyaWdnZXIobD8iYWpheFN1Y2Nlc3MiOiJhamF4RXJyb3IiLFtFLGgsbD9wOmRdKSxtLmZpcmVXaXRoKGcsW0UsQ10pLGYmJih5LnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW0UsaF0pLC0tdy5hY3RpdmV8fHcuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSkpfXJldHVybiBFfSxnZXRKU09OOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdy5nZXQoZSx0LG4sImpzb24iKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHcuZ2V0KGUsdm9pZCAwLHQsInNjcmlwdCIpfX0pLHcuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLHQpe3dbdF09ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIGcobikmJihpPWl8fHIscj1uLG49dm9pZCAwKSx3LmFqYXgody5leHRlbmQoe3VybDplLHR5cGU6dCxkYXRhVHlwZTppLGRhdGE6bixzdWNjZXNzOnJ9LHcuaXNQbGFpbk9iamVjdChlKSYmZSkpfX0pLHcuX2V2YWxVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIHcuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX0sdy5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHRoaXNbMF0mJihnKGUpJiYoZT1lLmNhbGwodGhpc1swXSkpLHQ9dyhlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RFbGVtZW50Q2hpbGQpZT1lLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGcoZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3codGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXcodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9ZyhlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3codGhpcykud3JhcEFsbCh0P2UuY2FsbCh0aGlzLG4pOmUpfSl9LHVud3JhcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wYXJlbnQoZSkubm90KCJib2R5IikuZWFjaChmdW5jdGlvbigpe3codGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9fSksdy5leHByLnBzZXVkb3MuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiF3LmV4cHIucHNldWRvcy52aXNpYmxlKGUpfSx3LmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiEhKGUub2Zmc2V0V2lkdGh8fGUub2Zmc2V0SGVpZ2h0fHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0sdy5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgZS5YTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIgVnQ9ezA6MjAwLDEyMjM6MjA0fSxHdD13LmFqYXhTZXR0aW5ncy54aHIoKTtoLmNvcnM9ISFHdCYmIndpdGhDcmVkZW50aWFscyJpbiBHdCxoLmFqYXg9R3Q9ISFHdCx3LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24odCl7dmFyIG4scjtpZihoLmNvcnN8fEd0JiYhdC5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBhLHM9dC54aHIoKTtpZihzLm9wZW4odC50eXBlLHQudXJsLHQuYXN5bmMsdC51c2VybmFtZSx0LnBhc3N3b3JkKSx0LnhockZpZWxkcylmb3IoYSBpbiB0LnhockZpZWxkcylzW2FdPXQueGhyRmllbGRzW2FdO3QubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKHQubWltZVR5cGUpLHQuY3Jvc3NEb21haW58fGlbIlgtUmVxdWVzdGVkLVdpdGgiXXx8KGlbIlgtUmVxdWVzdGVkLVdpdGgiXT0iWE1MSHR0cFJlcXVlc3QiKTtmb3IoYSBpbiBpKXMuc2V0UmVxdWVzdEhlYWRlcihhLGlbYV0pO249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7biYmKG49cj1zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbmFib3J0PXMub250aW1lb3V0PXMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsImFib3J0Ij09PWU/cy5hYm9ydCgpOiJlcnJvciI9PT1lPyJudW1iZXIiIT10eXBlb2Ygcy5zdGF0dXM/bygwLCJlcnJvciIpOm8ocy5zdGF0dXMscy5zdGF0dXNUZXh0KTpvKFZ0W3Muc3RhdHVzXXx8cy5zdGF0dXMscy5zdGF0dXNUZXh0LCJ0ZXh0IiE9PShzLnJlc3BvbnNlVHlwZXx8InRleHQiKXx8InN0cmluZyIhPXR5cGVvZiBzLnJlc3BvbnNlVGV4dD97YmluYXJ5OnMucmVzcG9uc2V9Ont0ZXh0OnMucmVzcG9uc2VUZXh0fSxzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxzLm9ubG9hZD1uKCkscj1zLm9uZXJyb3I9cy5vbnRpbWVvdXQ9bigiZXJyb3IiKSx2b2lkIDAhPT1zLm9uYWJvcnQ/cy5vbmFib3J0PXI6cy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09cy5yZWFkeVN0YXRlJiZlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtuJiZyKCl9KX0sbj1uKCJhYm9ydCIpO3RyeXtzLnNlbmQodC5oYXNDb250ZW50JiZ0LmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKG4pdGhyb3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19KSx3LmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24oZSl7ZS5jcm9zc0RvbWFpbiYmKGUuY29udGVudHMuc2NyaXB0PSExKX0pLHcuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovXGIoPzpqYXZhfGVjbWEpc2NyaXB0XGIvfSxjb252ZXJ0ZXJzOnsidGV4dCBzY3JpcHQiOmZ1bmN0aW9uKGUpe3JldHVybiB3Lmdsb2JhbEV2YWwoZSksZX19fSksdy5hamF4UHJlZmlsdGVyKCJzY3JpcHQiLGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUuY2FjaGUmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiKX0pLHcuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKGksbyl7dD13KCI8c2NyaXB0PiIpLnByb3Aoe2NoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKCJsb2FkIGVycm9yIixuPWZ1bmN0aW9uKGUpe3QucmVtb3ZlKCksbj1udWxsLGUmJm8oImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxyLmhlYWQuYXBwZW5kQ2hpbGQodFswXSl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19fSk7dmFyIFl0PVtdLFF0PS8oPSlcPyg/PSZ8JCl8XD9cPy87dy5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPVl0LnBvcCgpfHx3LmV4cGFuZG8rIl8iK0V0Kys7cmV0dXJuIHRoaXNbZV09ITAsZX19KSx3LmFqYXhQcmVmaWx0ZXIoImpzb24ganNvbnAiLGZ1bmN0aW9uKHQsbixyKXt2YXIgaSxvLGEscz0hMSE9PXQuanNvbnAmJihRdC50ZXN0KHQudXJsKT8idXJsIjoic3RyaW5nIj09dHlwZW9mIHQuZGF0YSYmMD09PSh0LmNvbnRlbnRUeXBlfHwiIikuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIikmJlF0LnRlc3QodC5kYXRhKSYmImRhdGEiKTtpZihzfHwianNvbnAiPT09dC5kYXRhVHlwZXNbMF0pcmV0dXJuIGk9dC5qc29ucENhbGxiYWNrPWcodC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2sscz90W3NdPXRbc10ucmVwbGFjZShRdCwiJDEiK2kpOiExIT09dC5qc29ucCYmKHQudXJsKz0oa3QudGVzdCh0LnVybCk/IiYiOiI/IikrdC5qc29ucCsiPSIraSksdC5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIGF8fHcuZXJyb3IoaSsiIHdhcyBub3QgY2FsbGVkIiksYVswXX0sdC5kYXRhVHlwZXNbMF09Impzb24iLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7YT1hcmd1bWVudHN9LHIuYWx3YXlzKGZ1bmN0aW9uKCl7dm9pZCAwPT09bz93KGUpLnJlbW92ZVByb3AoaSk6ZVtpXT1vLHRbaV0mJih0Lmpzb25wQ2FsbGJhY2s9bi5qc29ucENhbGxiYWNrLFl0LnB1c2goaSkpLGEmJmcobykmJm8oYVswXSksYT1vPXZvaWQgMH0pLCJzY3JpcHQifSksaC5jcmVhdGVIVE1MRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgZT1yLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikuYm9keTtyZXR1cm4gZS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09ZS5jaGlsZE5vZGVzLmxlbmd0aH0oKSx3LnBhcnNlSFRNTD1mdW5jdGlvbihlLHQsbil7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybltdOyJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSk7dmFyIGksbyxhO3JldHVybiB0fHwoaC5jcmVhdGVIVE1MRG9jdW1lbnQ/KChpPSh0PXIuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKSkuY3JlYXRlRWxlbWVudCgiYmFzZSIpKS5ocmVmPXIubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQoaSkpOnQ9ciksbz1BLmV4ZWMoZSksYT0hbiYmW10sbz9bdC5jcmVhdGVFbGVtZW50KG9bMV0pXToobz14ZShbZV0sdCxhKSxhJiZhLmxlbmd0aCYmdyhhKS5yZW1vdmUoKSx3Lm1lcmdlKFtdLG8uY2hpbGROb2RlcykpfSx3LmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPXRoaXMscz1lLmluZGV4T2YoIiAiKTtyZXR1cm4gcz4tMSYmKHI9dnQoZS5zbGljZShzKSksZT1lLnNsaWNlKDAscykpLGcodCk/KG49dCx0PXZvaWQgMCk6dCYmIm9iamVjdCI9PXR5cGVvZiB0JiYoaT0iUE9TVCIpLGEubGVuZ3RoPjAmJncuYWpheCh7dXJsOmUsdHlwZTppfHwiR0VUIixkYXRhVHlwZToiaHRtbCIsZGF0YTp0fSkuZG9uZShmdW5jdGlvbihlKXtvPWFyZ3VtZW50cyxhLmh0bWwocj93KCI8ZGl2PiIpLmFwcGVuZCh3LnBhcnNlSFRNTChlKSkuZmluZChyKTplKX0pLmFsd2F5cyhuJiZmdW5jdGlvbihlLHQpe2EuZWFjaChmdW5jdGlvbigpe24uYXBwbHkodGhpcyxvfHxbZS5yZXNwb25zZVRleHQsdCxlXSl9KX0pLHRoaXN9LHcuZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7dy5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHcuZXhwci5wc2V1ZG9zLmFuaW1hdGVkPWZ1bmN0aW9uKGUpe3JldHVybiB3LmdyZXAody50aW1lcnMsZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10LmVsZW19KS5sZW5ndGh9LHcub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGM9dy5jc3MoZSwicG9zaXRpb24iKSxmPXcoZSkscD17fTsic3RhdGljIj09PWMmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9Zi5vZmZzZXQoKSxvPXcuY3NzKGUsInRvcCIpLHU9dy5jc3MoZSwibGVmdCIpLChsPSgiYWJzb2x1dGUiPT09Y3x8ImZpeGVkIj09PWMpJiYobyt1KS5pbmRleE9mKCJhdXRvIik+LTEpPyhhPShyPWYucG9zaXRpb24oKSkudG9wLGk9ci5sZWZ0KTooYT1wYXJzZUZsb2F0KG8pfHwwLGk9cGFyc2VGbG9hdCh1KXx8MCksZyh0KSYmKHQ9dC5jYWxsKGUsbix3LmV4dGVuZCh7fSxzKSkpLG51bGwhPXQudG9wJiYocC50b3A9dC50b3Atcy50b3ArYSksbnVsbCE9dC5sZWZ0JiYocC5sZWZ0PXQubGVmdC1zLmxlZnQraSksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUscCk6Zi5jc3MocCl9fSx3LmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWU/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7dy5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciB0LG4scj10aGlzWzBdO2lmKHIpcmV0dXJuIHIuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KHQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7dG9wOnQudG9wK24ucGFnZVlPZmZzZXQsbGVmdDp0LmxlZnQrbi5wYWdlWE9mZnNldH0pOnt0b3A6MCxsZWZ0OjB9fSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09dy5jc3MociwicG9zaXRpb24iKSl0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt0PXRoaXMub2Zmc2V0KCksbj1yLm93bmVyRG9jdW1lbnQsZT1yLm9mZnNldFBhcmVudHx8bi5kb2N1bWVudEVsZW1lbnQ7d2hpbGUoZSYmKGU9PT1uLmJvZHl8fGU9PT1uLmRvY3VtZW50RWxlbWVudCkmJiJzdGF0aWMiPT09dy5jc3MoZSwicG9zaXRpb24iKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT13KGUpLm9mZnNldCgpKS50b3ArPXcuY3NzKGUsImJvcmRlclRvcFdpZHRoIiwhMCksaS5sZWZ0Kz13LmNzcyhlLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSl9cmV0dXJue3RvcDp0LnRvcC1pLnRvcC13LmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtdy5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGUmJiJzdGF0aWMiPT09dy5jc3MoZSwicG9zaXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxiZX0pfX0pLHcuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPSJwYWdlWU9mZnNldCI9PT10O3cuZm5bZV09ZnVuY3Rpb24ocil7cmV0dXJuIHoodGhpcyxmdW5jdGlvbihlLHIsaSl7dmFyIG87aWYoeShlKT9vPWU6OT09PWUubm9kZVR5cGUmJihvPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PWkpcmV0dXJuIG8/b1t0XTplW3JdO28/by5zY3JvbGxUbyhuP28ucGFnZVhPZmZzZXQ6aSxuP2k6by5wYWdlWU9mZnNldCk6ZVtyXT1pfSxlLHIsYXJndW1lbnRzLmxlbmd0aCl9fSksdy5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsdCl7dy5jc3NIb29rc1t0XT1fZShoLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSxuKXtpZihuKXJldHVybiBuPUZlKGUsdCksV2UudGVzdChuKT93KGUpLnBvc2l0aW9uKClbdF0rInB4IjpufSl9KSx3LmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihlLHQpe3cuZWFjaCh7cGFkZGluZzoiaW5uZXIiK2UsY29udGVudDp0LCIiOiJvdXRlciIrZX0sZnVuY3Rpb24obixyKXt3LmZuW3JdPWZ1bmN0aW9uKGksbyl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aCYmKG58fCJib29sZWFuIiE9dHlwZW9mIGkpLHM9bnx8KCEwPT09aXx8ITA9PT1vPyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4geih0aGlzLGZ1bmN0aW9uKHQsbixpKXt2YXIgbztyZXR1cm4geSh0KT8wPT09ci5pbmRleE9mKCJvdXRlciIpP3RbImlubmVyIitlXTp0LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitlXTo5PT09dC5ub2RlVHlwZT8obz10LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heCh0LmJvZHlbInNjcm9sbCIrZV0sb1sic2Nyb2xsIitlXSx0LmJvZHlbIm9mZnNldCIrZV0sb1sib2Zmc2V0IitlXSxvWyJjbGllbnQiK2VdKSk6dm9pZCAwPT09aT93LmNzcyh0LG4scyk6dy5zdHlsZSh0LG4saSxzKX0sdCxhP2k6dm9pZCAwLGEpfX0pfSksdy5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7dy5mblt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9fSksdy5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLHcuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KSx3LnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxnKGUpKXJldHVybiByPW8uY2FsbChhcmd1bWVudHMsMiksaT1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHR8fHRoaXMsci5jb25jYXQoby5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHcuZ3VpZCsrLGl9LHcuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/dy5yZWFkeVdhaXQrKzp3LnJlYWR5KCEwKX0sdy5pc0FycmF5PUFycmF5LmlzQXJyYXksdy5wYXJzZUpTT049SlNPTi5wYXJzZSx3Lm5vZGVOYW1lPU4sdy5pc0Z1bmN0aW9uPWcsdy5pc1dpbmRvdz15LHcuY2FtZWxDYXNlPUcsdy50eXBlPXgsdy5ub3c9RGF0ZS5ub3csdy5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9dy50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gd30pO3ZhciBKdD1lLmpRdWVyeSxLdD1lLiQ7cmV0dXJuIHcubm9Db25mbGljdD1mdW5jdGlvbih0KXtyZXR1cm4gZS4kPT09dyYmKGUuJD1LdCksdCYmZS5qUXVlcnk9PT13JiYoZS5qUXVlcnk9SnQpLHd9LHR8fChlLmpRdWVyeT1lLiQ9dyksd30pOwo="}]},{"name":"Wanikani Open Framework","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https://(www|preview).wanikani.com//"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1569496792154,"data":{}},"enabled":false,"position":22,"file_url":"https://greasyfork.org/scripts/38582-wanikani-open-framework/code/Wanikani%20Open%20Framework.user.js","uuid":"7f924af5-f9b9-42ef-bb24-3855f9e901fb","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFdhbmlrYW5pIE9wZW4gRnJhbWV3b3JrCi8vIEBuYW1lc3BhY2UgICByZmluZGxleQovLyBAZGVzY3JpcHRpb24gRnJhbWV3b3JrIGZvciB3cml0aW5nIHNjcmlwdHMgZm9yIFdhbmlrYW5pCi8vIEB2ZXJzaW9uICAgICAxLjAuNTAKLy8gQGluY2x1ZGUgICAgIC9eaHR0cHM6Ly8od3d3fHByZXZpZXcpLndhbmlrYW5pLmNvbS8vCi8vIEBjb3B5cmlnaHQgICAyMDE4KywgUm9iaW4gRmluZGxleQovLyBAbGljZW5zZSAgICAgTUlUOyBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCi8vIEBydW4tYXQgICAgICBkb2N1bWVudC1zdGFydAovLyBAZ3JhbnQgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCihmdW5jdGlvbihnbG9iYWwpIHsKCSd1c2Ugc3RyaWN0JzsKCgkvKiBlc2xpbnQgbm8tbXVsdGktc3BhY2VzOiBvZmYgKi8KCS8qIGdsb2JhbHMgd2tvZiAqLwoKCXZhciB2ZXJzaW9uID0gJzEuMC41MCc7Cgl2YXIgaWdub3JlX21pc3NpbmdfaW5kZXhlZGRiID0gZmFsc2U7CgoJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBTdXBwb3J0ZWQgTW9kdWxlcwoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCXZhciBzdXBwb3J0ZWRfbW9kdWxlcyA9IHsKCQlBcGl2MjogICAgeyB1cmw6ICdodHRwczovL2dyZWFzeWZvcmsub3JnL3NjcmlwdHMvMzg1ODEtd2FuaWthbmktb3Blbi1mcmFtZXdvcmstYXBpdjItbW9kdWxlL2NvZGUvV2FuaWthbmklMjBPcGVuJTIwRnJhbWV3b3JrJTIwLSUyMEFwaXYyJTIwbW9kdWxlLmpzP3ZlcnNpb249NzQ3ODY2J30sCgkJSXRlbURhdGE6IHsgdXJsOiAnaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzM4NTgwLXdhbmlrYW5pLW9wZW4tZnJhbWV3b3JrLWl0ZW1kYXRhLW1vZHVsZS9jb2RlL1dhbmlrYW5pJTIwT3BlbiUyMEZyYW1ld29yayUyMC0lMjBJdGVtRGF0YSUyMG1vZHVsZS5qcz92ZXJzaW9uPTc2Nzg2OCd9LAoJCU1lbnU6ICAgICB7IHVybDogJ2h0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy8zODU3OC13YW5pa2FuaS1vcGVuLWZyYW1ld29yay1tZW51LW1vZHVsZS9jb2RlL1dhbmlrYW5pJTIwT3BlbiUyMEZyYW1ld29yayUyMC0lMjBNZW51JTIwbW9kdWxlLmpzP3ZlcnNpb249NzQ1Mzg4J30sCgkJUHJvZ3Jlc3M6IHsgdXJsOiAnaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzM4NTc3LXdhbmlrYW5pLW9wZW4tZnJhbWV3b3JrLXByb2dyZXNzLW1vZHVsZS9jb2RlL1dhbmlrYW5pJTIwT3BlbiUyMEZyYW1ld29yayUyMC0lMjBQcm9ncmVzcyUyMG1vZHVsZS5qcz92ZXJzaW9uPTYwMTQ3Myd9LAoJCVNldHRpbmdzOiB7IHVybDogJ2h0dHBzOi8vZ3JlYXN5Zm9yay5vcmcvc2NyaXB0cy8zODU3Ni13YW5pa2FuaS1vcGVuLWZyYW1ld29yay1zZXR0aW5ncy1tb2R1bGUvY29kZS9XYW5pa2FuaSUyME9wZW4lMjBGcmFtZXdvcmslMjAtJTIwU2V0dGluZ3MlMjBtb2R1bGUuanM/dmVyc2lvbj02MDc4NzEnfSwKCX07CgoJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBQdWJsaXNoZWQgaW50ZXJmYWNlCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJdmFyIHB1Ymxpc2hlZF9pbnRlcmZhY2UgPSB7CgkJaW5jbHVkZTogaW5jbHVkZSwgICAgICAgICAgICAgIC8vIGluY2x1ZGUobW9kdWxlX2xpc3QpICAgICAgICA9PiBQcm9taXNlCgkJcmVhZHk6ICAgcmVhZHksICAgICAgICAgICAgICAgIC8vIHJlYWR5KG1vZHVsZV9saXN0KSAgICAgICAgICA9PiBQcm9taXNlCgoJCWxvYWRfZmlsZTogICBsb2FkX2ZpbGUsICAgICAgICAvLyBsb2FkX2ZpbGUodXJsLCB1c2VfY2FjaGUpICAgPT4gUHJvbWlzZQoJCWxvYWRfY3NzOiAgICBsb2FkX2NzcywgICAgICAgICAvLyBsb2FkX2Nzcyh1cmwsIHVzZV9jYWNoZSkgICAgPT4gUHJvbWlzZQoJCWxvYWRfc2NyaXB0OiBsb2FkX3NjcmlwdCwgICAgICAvLyBsb2FkX3NjcmlwdCh1cmwsIHVzZV9jYWNoZSkgPT4gUHJvbWlzZQoKCQlmaWxlX2NhY2hlOiB7CgkJCWRpcjogICAge30sICAgICAgICAgICAgICAgIC8vIE9iamVjdCBjb250YWluaW5nIGRpcmVjdG9yeSBvZiBmaWxlcy4KCQkJbHM6ICAgICBmaWxlX2NhY2hlX2xpc3QsICAgLy8gbHMoKQoJCQljbGVhcjogIGZpbGVfY2FjaGVfY2xlYXIsICAvLyBjbGVhcigpICAgICAgICAgICAgID0+IFByb21pc2UKCQkJZGVsZXRlOiBmaWxlX2NhY2hlX2RlbGV0ZSwgLy8gZGVsZXRlKG5hbWUpICAgICAgICA9PiBQcm9taXNlCgkJCWZsdXNoOiAgZmlsZV9jYWNoZV9mbHVzaCwgIC8vIGZsdXNoKCkgICAgICAgICAgICAgPT4gUHJvbWlzZQoJCQlsb2FkOiAgIGZpbGVfY2FjaGVfbG9hZCwgICAvLyBsb2FkKG5hbWUpICAgICAgICAgID0+IFByb21pc2UKCQkJc2F2ZTogICBmaWxlX2NhY2hlX3NhdmUsICAgLy8gc2F2ZShuYW1lLCBjb250ZW50KSA9PiBQcm9taXNlCgkJCW5vX2NhY2hlOmZpbGVfbm9jYWNoZSwgICAgIC8vIG5vX2NhY2hlKG1vZHVsZXMpCgkJfSwKCgkJb246ICAgICAgd2FpdF9ldmVudCwgICAgICAgICAgIC8vIG9uKGV2ZW50LCBjYWxsYmFjaykKCQl0cmlnZ2VyOiB0cmlnZ2VyX2V2ZW50LCAgICAgICAgLy8gdHJpZ2dlcihldmVudFssIGRhdGExWywgZGF0YTJbLCAuLi5dXV0pCgoJCWdldF9zdGF0ZTogIGdldF9zdGF0ZSwgICAgICAgICAvLyBnZXQoc3RhdGVfdmFyKQoJCXNldF9zdGF0ZTogIHNldF9zdGF0ZSwgICAgICAgICAvLyBzZXQoc3RhdGVfdmFyLCB2YWx1ZSkKCQl3YWl0X3N0YXRlOiB3YWl0X3N0YXRlLCAgICAgICAgLy8gd2FpdChzdGF0ZV92YXIsIHZhbHVlWywgY2FsbGJhY2tbLCBwZXJzaXN0ZW50XV0pID0+IGlmIG5vIGNhbGxiYWNrLCByZXR1cm4gb25lLXNob3QgUHJvbWlzZQoKCQl2ZXJzaW9uOiB7CgkJCXZhbHVlOiB2ZXJzaW9uLAoJCQljb21wYXJlX3RvOiBjb21wYXJlX3RvLCAgICAvLyBjb21wYXJlX3ZlcnNpb24odmVyc2lvbikKCQl9Cgl9OwoKCXB1Ymxpc2hlZF9pbnRlcmZhY2Uuc3VwcG9ydF9maWxlcyA9IHsKCQknanF1ZXJ5X3VpLmpzJzogJ2h0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5dWkvMS4xMi4xL2pxdWVyeS11aS5taW4uanMnLAoJCSdqcXVpX3drbWFpbi5jc3MnOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3JmaW5kbGV5L3dhbmlrYW5pLW9wZW4tZnJhbWV3b3JrLzE1NTBhZjgzODNlYzI4YWQ0MDZjZjQwMWFlZTJkZTRjNTI0NDZmNmMvanF1aS13a21haW4uY3NzJywKCX07CgoJLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCglmdW5jdGlvbiBzcGxpdF9saXN0KHN0cikge3JldHVybiBzdHIucmVwbGFjZSgvXlxzK3xccyooLClccyp8XHMrJC9nLCAnJDEnKS5zcGxpdCgnLCcpLmZpbHRlcihmdW5jdGlvbihuYW1lKSB7cmV0dXJuIChuYW1lLmxlbmd0aCA+IDApO30pO30KCWZ1bmN0aW9uIHByb21pc2UoKXt2YXIgYSxiLGM9bmV3IFByb21pc2UoZnVuY3Rpb24oZCxlKXthPWQ7Yj1lO30pO2MucmVzb2x2ZT1hO2MucmVqZWN0PWI7cmV0dXJuIGM7fQoKCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIENvbXBhcmUgdGhlIGZyYW1ld29yayB2ZXJzaW9uIGFnYWluc3QgYSBzcGVjaWZpYyB2ZXJzaW9uLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGNvbXBhcmVfdG8oY2xpZW50X3ZlcnNpb24pIHsKCQl2YXIgY2xpZW50X3ZlciA9IGNsaWVudF92ZXJzaW9uLnNwbGl0KCcuJykubWFwKGQgPT4gTnVtYmVyKGQpKTsKCQl2YXIgd2tvZl92ZXIgPSB2ZXJzaW9uLnNwbGl0KCcuJykubWFwKGQgPT4gTnVtYmVyKGQpKTsKCQl2YXIgbGVuID0gTWF0aC5tYXgoY2xpZW50X3Zlci5sZW5ndGgsIHdrb2ZfdmVyLmxlbmd0aCk7CgkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbGVuOyBpZHgrKykgewoJCQl2YXIgYSA9IGNsaWVudF92ZXJbaWR4XSB8fCAwOwoJCQl2YXIgYiA9IHdrb2ZfdmVyW2lkeF0gfHwgMDsKCQkJaWYgKGEgPT09IGIpIGNvbnRpbnVlOwoJCQlpZiAoYSA8IGIpIHJldHVybiAnbmV3ZXInOwoJCQlyZXR1cm4gJ29sZGVyJzsKCQl9CgkJcmV0dXJuICdzYW1lJzsKCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gSW5jbHVkZSBhIGxpc3Qgb2YgbW9kdWxlcy4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgl2YXIgaW5jbHVkZV9wcm9taXNlcyA9IHt9OwoKCWZ1bmN0aW9uIGluY2x1ZGUobW9kdWxlX2xpc3QpIHsKCQlpZiAod2tvZi5nZXRfc3RhdGUoJ3drb2Yud2tvZicpICE9PSAncmVhZHknKSB7CgkJCXJldHVybiB3a29mLnJlYWR5KCd3a29mJykudGhlbihmdW5jdGlvbigpe3JldHVybiB3a29mLmluY2x1ZGUobW9kdWxlX2xpc3QpO30pOwoJCX0KCQl2YXIgaW5jbHVkZV9wcm9taXNlID0gcHJvbWlzZSgpOwoJCXZhciBtb2R1bGVfbmFtZXMgPSBzcGxpdF9saXN0KG1vZHVsZV9saXN0KTsKCQl2YXIgc2NyaXB0X2NudCA9IG1vZHVsZV9uYW1lcy5sZW5ndGg7CgkJaWYgKHNjcmlwdF9jbnQgPT09IDApIHsKCQkJaW5jbHVkZV9wcm9taXNlLnJlc29sdmUoe2xvYWRlZDpbXSwgZmFpbGVkOltdfSk7CgkJCXJldHVybiBpbmNsdWRlX3Byb21pc2U7CgkJfQoKCQl2YXIgZG9uZV9jbnQgPSAwOwoJCXZhciBsb2FkZWQgPSBbXSwgZmFpbGVkID0gW107CgkJdmFyIG5vX2NhY2hlID0gc3BsaXRfbGlzdChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2tvZi5pbmNsdWRlLm5vY2FjaGUnKSB8fCAnJyk7CgkJZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbW9kdWxlX25hbWVzLmxlbmd0aDsgaWR4KyspIHsKCQkJdmFyIG1vZHVsZV9uYW1lID0gbW9kdWxlX25hbWVzW2lkeF07CgkJCXZhciBtb2R1bGUgPSBzdXBwb3J0ZWRfbW9kdWxlc1ttb2R1bGVfbmFtZV07CgkJCWlmICghbW9kdWxlKSB7CgkJCQlmYWlsZWQucHVzaCh7bmFtZTptb2R1bGVfbmFtZSwgdXJsOnVuZGVmaW5lZH0pOwoJCQkJY2hlY2tfZG9uZSgpOwoJCQkJY29udGludWU7CgkJCX0KCQkJdmFyIGF3YWl0X2xvYWQgPSBpbmNsdWRlX3Byb21pc2VzW21vZHVsZV9uYW1lXTsKCQkJdmFyIHVzZV9jYWNoZSA9IChub19jYWNoZS5pbmRleE9mKG1vZHVsZV9uYW1lKSA8IDApICYmIChub19jYWNoZS5pbmRleE9mKCcqJykgPCAwKTsKCQkJaWYgKCF1c2VfY2FjaGUpIGZpbGVfY2FjaGVfZGVsZXRlKG1vZHVsZS51cmwpOwoJCQlpZiAoYXdhaXRfbG9hZCA9PT0gdW5kZWZpbmVkKSBpbmNsdWRlX3Byb21pc2VzW21vZHVsZV9uYW1lXSA9IGF3YWl0X2xvYWQgPSBsb2FkX3NjcmlwdChtb2R1bGUudXJsLCB1c2VfY2FjaGUpOwoJCQlhd2FpdF9sb2FkLnRoZW4ocHVzaF9sb2FkZWQsIHB1c2hfZmFpbGVkKTsKCQl9CgoJCXJldHVybiBpbmNsdWRlX3Byb21pc2U7CgoJCWZ1bmN0aW9uIHB1c2hfbG9hZGVkKHVybCkgewoJCQlsb2FkZWQucHVzaCh1cmwpOwoJCQljaGVja19kb25lKCk7CgkJfQoKCQlmdW5jdGlvbiBwdXNoX2ZhaWxlZCh1cmwpIHsKCQkJZmFpbGVkLnB1c2godXJsKTsKCQkJY2hlY2tfZG9uZSgpOwoJCX0KCgkJZnVuY3Rpb24gY2hlY2tfZG9uZSgpIHsKCQkJaWYgKCsrZG9uZV9jbnQgPCBzY3JpcHRfY250KSByZXR1cm47CgkJCWlmIChmYWlsZWQubGVuZ3RoID09PSAwKSBpbmNsdWRlX3Byb21pc2UucmVzb2x2ZSh7bG9hZGVkOmxvYWRlZCwgZmFpbGVkOmZhaWxlZH0pOwoJCQllbHNlIGluY2x1ZGVfcHJvbWlzZS5yZWplY3Qoe2Vycm9yOidGYWlsdXJlIGxvYWRpbmcgbW9kdWxlJywgbG9hZGVkOmxvYWRlZCwgZmFpbGVkOmZhaWxlZH0pOwoJCX0KCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gV2FpdCBmb3IgYWxsIG1vZHVsZXMgdG8gcmVwb3J0IHRoYXQgdGhleSBhcmUgcmVhZHkKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiByZWFkeShtb2R1bGVfbGlzdCkgewoJCXZhciBtb2R1bGVfbmFtZXMgPSBzcGxpdF9saXN0KG1vZHVsZV9saXN0KTsKCgkJdmFyIHJlYWR5X3Byb21pc2VzID0gWyBdOwoJCWZvciAodmFyIGlkeCBpbiBtb2R1bGVfbmFtZXMpIHsKCQkJdmFyIG1vZHVsZV9uYW1lID0gbW9kdWxlX25hbWVzW2lkeF07CgkJCXJlYWR5X3Byb21pc2VzLnB1c2god2FpdF9zdGF0ZSgnd2tvZi4nICsgbW9kdWxlX25hbWUsICdyZWFkeScpKTsKCQl9CgoJCWlmIChyZWFkeV9wcm9taXNlcy5sZW5ndGggPT09IDApIHsKCQkJcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwoJCX0gZWxzZSBpZiAocmVhZHlfcHJvbWlzZXMubGVuZ3RoID09PSAxKSB7CgkJCXJldHVybiByZWFkeV9wcm9taXNlc1swXTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gUHJvbWlzZS5hbGwocmVhZHlfcHJvbWlzZXMpOwoJCX0KCX0KCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIExvYWQgYSBmaWxlIGFzeW5jaHJvbm91c2x5LCBhbmQgcGFzcyB0aGUgZmlsZSBhcyByZXNvbHZlZCBQcm9taXNlIGRhdGEuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gbG9hZF9maWxlKHVybCwgdXNlX2NhY2hlKSB7CgkJdmFyIGZldGNoX3Byb21pc2UgPSBwcm9taXNlKCk7CgkJdmFyIG5vX2NhY2hlID0gc3BsaXRfbGlzdChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2tvZi5sb2FkX2ZpbGUubm9jYWNoZScpIHx8ICcnKTsKCQlpZiAobm9fY2FjaGUuaW5kZXhPZih1cmwpID49IDAgfHwgbm9fY2FjaGUuaW5kZXhPZignKicpID49IDApIHVzZV9jYWNoZSA9IGZhbHNlOwoJCWlmICh1c2VfY2FjaGUgPT09IHRydWUpIHsKCQkJcmV0dXJuIGZpbGVfY2FjaGVfbG9hZCh1cmwsIHVzZV9jYWNoZSkuY2F0Y2goZmV0Y2hfdXJsKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gZmV0Y2hfdXJsKCk7CgkJfQoKCQkvLyBSZXRyaWV2ZSBmaWxlIGZyb20gc2VydmVyCgkJZnVuY3Rpb24gZmV0Y2hfdXJsKCl7CgkJCXZhciByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgkJCXJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gcHJvY2Vzc19yZXN1bHQ7CgkJCXJlcXVlc3Qub3BlbignR0VUJywgdXJsLCB0cnVlKTsKCQkJcmVxdWVzdC5zZW5kKCk7CgkJCXJldHVybiBmZXRjaF9wcm9taXNlOwoJCX0KCgkJZnVuY3Rpb24gcHJvY2Vzc19yZXN1bHQoZXZlbnQpewoJCQlpZiAoZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUgIT09IDQpIHJldHVybjsKCQkJaWYgKGV2ZW50LnRhcmdldC5zdGF0dXMgPj0gNDAwIHx8IGV2ZW50LnRhcmdldC5zdGF0dXMgPT09IDApIHJldHVybiBmZXRjaF9wcm9taXNlLnJlamVjdChldmVudC50YXJnZXQuc3RhdHVzKTsKCQkJaWYgKHVzZV9jYWNoZSkgewoJCQkJZmlsZV9jYWNoZV9zYXZlKHVybCwgZXZlbnQudGFyZ2V0LnJlc3BvbnNlKQoJCQkJLnRoZW4oZmV0Y2hfcHJvbWlzZS5yZXNvbHZlLmJpbmQobnVsbCxldmVudC50YXJnZXQucmVzcG9uc2UpKTsKCQkJfSBlbHNlIHsKCQkJCWZldGNoX3Byb21pc2UucmVzb2x2ZShldmVudC50YXJnZXQucmVzcG9uc2UpOwoJCQl9CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBMb2FkIGFuZCBpbnN0YWxsIGEgc3BlY2lmaWMgZmlsZSB0eXBlIGludG8gdGhlIERPTS4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBsb2FkX2FuZF9hcHBlbmQodXJsLCB0YWdfbmFtZSwgbG9jYXRpb24sIHVzZV9jYWNoZSkgewoJCXVybCA9IHVybC5yZXBsYWNlKC8iL2csJ1wnJyk7CgkJaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFnX25hbWUrJ1t1aWQ9IicrdXJsKyciXScpICE9PSBudWxsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CgkJcmV0dXJuIGxvYWRfZmlsZSh1cmwsIHVzZV9jYWNoZSkudGhlbihhcHBlbmRfdG9fdGFnKTsKCgkJZnVuY3Rpb24gYXBwZW5kX3RvX3RhZyhjb250ZW50KSB7CgkJCXZhciB0YWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ19uYW1lKTsKCQkJdGFnLmlubmVySFRNTCA9IGNvbnRlbnQ7CgkJCXRhZy5zZXRBdHRyaWJ1dGUoJ3VpZCcsIHVybCk7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobG9jYXRpb24pLmFwcGVuZENoaWxkKHRhZyk7CgkJCXJldHVybiB1cmw7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBMb2FkIGFuZCBpbnN0YWxsIGEgQ1NTIGZpbGUuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gbG9hZF9jc3ModXJsLCB1c2VfY2FjaGUpIHsKCQlyZXR1cm4gbG9hZF9hbmRfYXBwZW5kKHVybCwgJ3N0eWxlJywgJ2hlYWQnLCB1c2VfY2FjaGUpOwoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBMb2FkIGFuZCBpbnN0YWxsIEphdmFzY3JpcHQuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gbG9hZF9zY3JpcHQodXJsLCB1c2VfY2FjaGUpIHsKCQlyZXR1cm4gbG9hZF9hbmRfYXBwZW5kKHVybCwgJ3NjcmlwdCcsICdib2R5JywgdXNlX2NhY2hlKTsKCX0KCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJdmFyIHN0YXRlX2xpc3RlbmVycyA9IHt9OwoJdmFyIHN0YXRlX3ZhbHVlcyA9IHt9OwoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBHZXQgdGhlIHZhbHVlIG9mIGEgc3RhdGUgdmFyaWFibGUsIGFuZCBub3RpZnkgbGlzdGVuZXJzLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGdldF9zdGF0ZShzdGF0ZV92YXIpIHsKCQlyZXR1cm4gc3RhdGVfdmFsdWVzW3N0YXRlX3Zhcl07Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIFNldCB0aGUgdmFsdWUgb2YgYSBzdGF0ZSB2YXJpYWJsZSwgYW5kIG5vdGlmeSBsaXN0ZW5lcnMuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gc2V0X3N0YXRlKHN0YXRlX3ZhciwgdmFsdWUpIHsKCQl2YXIgb2xkX3ZhbHVlID0gc3RhdGVfdmFsdWVzW3N0YXRlX3Zhcl07CgkJaWYgKG9sZF92YWx1ZSA9PT0gdmFsdWUpIHJldHVybjsKCQlzdGF0ZV92YWx1ZXNbc3RhdGVfdmFyXSA9IHZhbHVlOwoKCQkvLyBEbyBsaXN0ZW5lciBjYWxsYmFja3MsIGFuZCByZW1vdmUgbm9uLXBlcnNpc3RlbnQgbGlzdGVuZXJzCgkJdmFyIGxpc3RlbmVycyA9IHN0YXRlX2xpc3RlbmVyc1tzdGF0ZV92YXJdOwoJCXZhciBwZXJzaXN0ZW50X2xpc3RlbmVycyA9IFsgXTsKCQlmb3IgKHZhciBpZHggaW4gbGlzdGVuZXJzKSB7CgkJCXZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpZHhdOwoJCQl2YXIga2VlcCA9IHRydWU7CgkJCWlmIChsaXN0ZW5lci52YWx1ZSA9PT0gdmFsdWUgfHwgbGlzdGVuZXIudmFsdWUgPT09ICcqJykgewoJCQkJa2VlcCA9IGxpc3RlbmVyLnBlcnNpc3RlbnQ7CgkJCQl0cnkgewoJCQkJCWxpc3RlbmVyLmNhbGxiYWNrKHZhbHVlLCBvbGRfdmFsdWUpOwoJCQkJfSBjYXRjaCAoZSkge30KCQkJfQoJCQlpZiAoa2VlcCkgcGVyc2lzdGVudF9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7CgkJfQoJCXN0YXRlX2xpc3RlbmVyc1tzdGF0ZV92YXJdID0gcGVyc2lzdGVudF9saXN0ZW5lcnM7Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIFdoZW4gc3RhdGUgb2Ygc3RhdGVfdmFyIGNoYW5nZXMgdG8gdmFsdWUsIGNhbGwgY2FsbGJhY2suCgkvLyBJZiBwZXJzaXN0ZW50ID09PSB0cnVlLCBjb250aW51ZSBsaXN0ZW5pbmcgZm9yIGFkZGl0aW9uYWwgc3RhdGUgY2hhbmdlcwoJLy8gSWYgdmFsdWUgaXMgJyonLCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBmb3IgYWxsIHN0YXRlIGNoYW5nZXMuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gd2FpdF9zdGF0ZShzdGF0ZV92YXIsIHZhbHVlLCBjYWxsYmFjaywgcGVyc2lzdGVudCkgewoJCXZhciBwcm9taXNlOwoJCWlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7CgkJCXByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHsKCQkJCWNhbGxiYWNrID0gcmVzb2x2ZTsKCQkJfSk7CgkJfQoJCWlmIChzdGF0ZV9saXN0ZW5lcnNbc3RhdGVfdmFyXSA9PT0gdW5kZWZpbmVkKSBzdGF0ZV9saXN0ZW5lcnNbc3RhdGVfdmFyXSA9IFsgXTsKCQlwZXJzaXN0ZW50ID0gKHBlcnNpc3RlbnQgPT09IHRydWUpOwoJCXZhciBjdXJyZW50X3ZhbHVlID0gc3RhdGVfdmFsdWVzW3N0YXRlX3Zhcl07CgkJaWYgKHBlcnNpc3RlbnQgfHwgdmFsdWUgIT09IGN1cnJlbnRfdmFsdWUpIHN0YXRlX2xpc3RlbmVyc1tzdGF0ZV92YXJdLnB1c2goe2NhbGxiYWNrOmNhbGxiYWNrLCBwZXJzaXN0ZW50OnBlcnNpc3RlbnQsIHZhbHVlOnZhbHVlfSk7CgoJCS8vIElmIGl0J3MgYWxyZWFkeSBhdCB0aGUgZGVzaXJlZCBzdGF0ZSwgY2FsbCB0aGUgY2FsbGJhY2sgaW1tZWRpYXRlbHkuCgkJaWYgKHZhbHVlID09PSBjdXJyZW50X3ZhbHVlKSB7CgkJCXRyeSB7CgkJCQljYWxsYmFjayh2YWx1ZSwgY3VycmVudF92YWx1ZSk7CgkJCX0gY2F0Y2ggKGVycikge30KCQl9CgkJcmV0dXJuIHByb21pc2U7Cgl9CgkvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCXZhciBldmVudF9saXN0ZW5lcnMgPSB7fTsKCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gRmlyZSBhbiBldmVudCwgd2hpY2ggdGhlbiBjYWxscyBjYWxsYmFja3MgZm9yIGFueSBsaXN0ZW5lcnMuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gdHJpZ2dlcl9ldmVudChldmVudCkgewoJCXZhciBsaXN0ZW5lcnMgPSBldmVudF9saXN0ZW5lcnNbZXZlbnRdOwoJCWlmIChsaXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuOwoJCXZhciBhcmdzID0gW107CgkJQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJncyxhcmd1bWVudHMpOwoJCWFyZ3Muc2hpZnQoKTsKCQlmb3IgKHZhciBpZHggaW4gbGlzdGVuZXJzKSB0cnkgewoJCQlsaXN0ZW5lcnNbaWR4XS5hcHBseShudWxsLGFyZ3MpOwoJCX0gY2F0Y2ggKGVycikge30KCQlyZXR1cm4gZ2xvYmFsLndrb2Y7Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIEFkZCBhIGxpc3RlbmVyIGZvciBhbiBldmVudC4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiB3YWl0X2V2ZW50KGV2ZW50LCBjYWxsYmFjaykgewoJCWlmIChldmVudF9saXN0ZW5lcnNbZXZlbnRdID09PSB1bmRlZmluZWQpIGV2ZW50X2xpc3RlbmVyc1tldmVudF0gPSBbXTsKCQlldmVudF9saXN0ZW5lcnNbZXZlbnRdLnB1c2goY2FsbGJhY2spOwoJCXJldHVybiBnbG9iYWwud2tvZjsKCX0KCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoJdmFyIGZpbGVfY2FjaGVfb3Blbl9wcm9taXNlOwoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBPcGVuIHRoZSBmaWxlX2NhY2hlIGRhdGFiYXNlIChvciByZXR1cm4gaGFuZGxlIGlmIG9wZW4pLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGZpbGVfY2FjaGVfb3BlbigpIHsKCQlpZiAoZmlsZV9jYWNoZV9vcGVuX3Byb21pc2UpIHJldHVybiBmaWxlX2NhY2hlX29wZW5fcHJvbWlzZTsKCQl2YXIgb3Blbl9wcm9taXNlID0gcHJvbWlzZSgpOwoJCWZpbGVfY2FjaGVfb3Blbl9wcm9taXNlID0gb3Blbl9wcm9taXNlOwoJCXZhciByZXF1ZXN0OwoJCXJlcXVlc3QgPSBpbmRleGVkREIub3Blbignd2tvZi5maWxlX2NhY2hlJyk7CgkJcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSB1cGdyYWRlX2RiOwoJCXJlcXVlc3Qub25zdWNjZXNzID0gZ2V0X2RpcjsKCQlyZXF1ZXN0Lm9uZXJyb3IgPSBlcnJvcjsKCQlyZXR1cm4gb3Blbl9wcm9taXNlOwoKCQlmdW5jdGlvbiBlcnJvcigpIHsKCQkJY29uc29sZS5sb2coJ2luZGV4ZWREQiBjb3VsZCBub3Qgb3BlbiEnKTsKCQkJd2tvZi5maWxlX2NhY2hlLmRpciA9IHt9OwoJCQlpZiAoaWdub3JlX21pc3NpbmdfaW5kZXhlZGRiKSB7CgkJCQlvcGVuX3Byb21pc2UucmVzb2x2ZShudWxsKTsKCQkJfSBlbHNlIHsKCQkJCW9wZW5fcHJvbWlzZS5yZWplY3QoKTsKCQkJfQoJCX0KCgkJZnVuY3Rpb24gdXBncmFkZV9kYihldmVudCl7CgkJCXZhciBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CgkJCXZhciBzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdmaWxlcycsIHtrZXlQYXRoOiduYW1lJ30pOwoJCX0KCgkJZnVuY3Rpb24gZ2V0X2RpcihldmVudCl7CgkJCXZhciBkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CgkJCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmaWxlcycsICdyZWFkb25seScpOwoJCQl2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnZmlsZXMnKTsKCQkJdmFyIHJlcXVlc3QgPSBzdG9yZS5nZXQoJ1tkaXJdJyk7CgkJCXJlcXVlc3Qub25zdWNjZXNzID0gcHJvY2Vzc19kaXI7CgkJCXRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBvcGVuX3Byb21pc2UucmVzb2x2ZS5iaW5kKG51bGwsIGRiKTsKCQkJb3Blbl9wcm9taXNlLnRoZW4oc2V0VGltZW91dC5iaW5kKG51bGwsIGZpbGVfY2FjaGVfY2xlYW51cCwgMTAwMDApKTsKCQl9CgoJCWZ1bmN0aW9uIHByb2Nlc3NfZGlyKGV2ZW50KXsKCQkJaWYgKGV2ZW50LnRhcmdldC5yZXN1bHQgPT09IHVuZGVmaW5lZCkgewoJCQkJd2tvZi5maWxlX2NhY2hlLmRpciA9IHt9OwoJCQl9IGVsc2UgewoJCQkJd2tvZi5maWxlX2NhY2hlLmRpciA9IEpTT04ucGFyc2UoZXZlbnQudGFyZ2V0LnJlc3VsdC5jb250ZW50KTsKCQkJfQoJCX0KCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gTGlzdHMgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGVfY2FjaGUuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gZmlsZV9jYWNoZV9saXN0KCkgewoJCWNvbnNvbGUubG9nKE9iamVjdC5rZXlzKHdrb2YuZmlsZV9jYWNoZS5kaXIpLnNvcnQoKS5qb2luKCdcbicpKTsKCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gQ2xlYXIgdGhlIGZpbGVfY2FjaGUgZGF0YWJhc2UuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gZmlsZV9jYWNoZV9jbGVhcigpIHsKCQlyZXR1cm4gZmlsZV9jYWNoZV9vcGVuKCkudGhlbihjbGVhcik7CgoJCWZ1bmN0aW9uIGNsZWFyKGRiKSB7CgkJCXZhciBjbGVhcl9wcm9taXNlID0gcHJvbWlzZSgpOwoJCQl3a29mLmZpbGVfY2FjaGUuZGlyID0ge307CgkJCWlmIChkYiA9PT0gbnVsbCkgcmV0dXJuIGNsZWFyX3Byb21pc2UucmVzb2x2ZSgpOwoJCQl2YXIgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignZmlsZXMnLCAncmVhZHdyaXRlJyk7CgkJCXZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdmaWxlcycpOwoJCQlzdG9yZS5jbGVhcigpOwoJCQl0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gY2xlYXJfcHJvbWlzZS5yZXNvbHZlOwoJCX0KCX0KCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gRGVsZXRlIGEgZmlsZSBmcm9tIHRoZSBmaWxlX2NhY2hlIGRhdGFiYXNlLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGZpbGVfY2FjaGVfZGVsZXRlKHBhdHRlcm4pIHsKCQlyZXR1cm4gZmlsZV9jYWNoZV9vcGVuKCkudGhlbihkZWwpOwoKCQlmdW5jdGlvbiBkZWwoZGIpIHsKCQkJdmFyIGRlbF9wcm9taXNlID0gcHJvbWlzZSgpOwoJCQlpZiAoZGIgPT09IG51bGwpIHJldHVybiBkZWxfcHJvbWlzZS5yZXNvbHZlKCk7CgkJCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmaWxlcycsICdyZWFkd3JpdGUnKTsKCQkJdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2ZpbGVzJyk7CgkJCXZhciBmaWxlcyA9IE9iamVjdC5rZXlzKHdrb2YuZmlsZV9jYWNoZS5kaXIpLmZpbHRlcihmdW5jdGlvbihmaWxlKXsKCQkJCWlmIChwYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwKSB7CgkJCQkJcmV0dXJuIGZpbGUubWF0Y2gocGF0dGVybikgIT09IG51bGw7CgkJCQl9IGVsc2UgewoJCQkJCXJldHVybiAoZmlsZSA9PT0gcGF0dGVybik7CgkJCQl9CgkJCX0pOwoJCQlmaWxlcy5mb3JFYWNoKGZ1bmN0aW9uKGZpbGUpewoJCQkJc3RvcmUuZGVsZXRlKGZpbGUpOwoJCQkJZGVsZXRlIHdrb2YuZmlsZV9jYWNoZS5kaXJbZmlsZV07CgkJCX0pOwoJCQlmaWxlX2NhY2hlX2Rpcl9zYXZlKCk7CgkJCXRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBkZWxfcHJvbWlzZS5yZXNvbHZlLmJpbmQobnVsbCwgZmlsZXMpOwoJCQlyZXR1cm4gZGVsX3Byb21pc2U7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBGb3JjZSBpbW1lZGlhdGUgc2F2ZSBvZiBmaWxlX2NhY2hlIGRpcmVjdG9yeS4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBmaWxlX2NhY2hlX2ZsdXNoKCkgewoJCWZpbGVfY2FjaGVfZGlyX3NhdmUodHJ1ZSAvKiBpbW1lZGlhdGVseSAqLyk7Cgl9CgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIExvYWQgYSBmaWxlIGZyb20gdGhlIGZpbGVfY2FjaGUgZGF0YWJhc2UuCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJZnVuY3Rpb24gZmlsZV9jYWNoZV9sb2FkKG5hbWUpIHsKCQl2YXIgbG9hZF9wcm9taXNlID0gcHJvbWlzZSgpOwoJCXJldHVybiBmaWxlX2NhY2hlX29wZW4oKS50aGVuKGxvYWQpOwoKCQlmdW5jdGlvbiBsb2FkKGRiKSB7CgkJCWlmICh3a29mLmZpbGVfY2FjaGUuZGlyW25hbWVdID09PSB1bmRlZmluZWQpIHsKCQkJCWxvYWRfcHJvbWlzZS5yZWplY3QobmFtZSk7CgkJCQlyZXR1cm4gbG9hZF9wcm9taXNlOwoJCQl9CgkJCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmaWxlcycsICdyZWFkb25seScpOwoJCQl2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnZmlsZXMnKTsKCQkJdmFyIHJlcXVlc3QgPSBzdG9yZS5nZXQobmFtZSk7CgkJCXdrb2YuZmlsZV9jYWNoZS5kaXJbbmFtZV0ubGFzdF9sb2FkZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7CgkJCWZpbGVfY2FjaGVfZGlyX3NhdmUoKTsKCQkJcmVxdWVzdC5vbnN1Y2Nlc3MgPSBmaW5pc2g7CgkJCXJlcXVlc3Qub25lcnJvciA9IGVycm9yOwoJCQlyZXR1cm4gbG9hZF9wcm9taXNlOwoKCQkJZnVuY3Rpb24gZmluaXNoKGV2ZW50KXsKCQkJCWlmIChldmVudC50YXJnZXQucmVzdWx0ID09PSB1bmRlZmluZWQpIHsKCQkJCQlsb2FkX3Byb21pc2UucmVqZWN0KG5hbWUpOwoJCQkJfSBlbHNlIHsKCQkJCQlsb2FkX3Byb21pc2UucmVzb2x2ZShldmVudC50YXJnZXQucmVzdWx0LmNvbnRlbnQpOwoJCQkJfQoJCQl9CgoJCQlmdW5jdGlvbiBlcnJvcihldmVudCl7CgkJCQlsb2FkX3Byb21pc2UucmVqZWN0KG5hbWUpOwoJCQl9CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBTYXZlIGEgZmlsZSBpbnRvIHRoZSBmaWxlX2NhY2hlIGRhdGFiYXNlLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGZpbGVfY2FjaGVfc2F2ZShuYW1lLCBjb250ZW50LCBleHRyYV9hdHRyaWJzKSB7CgkJcmV0dXJuIGZpbGVfY2FjaGVfb3BlbigpLnRoZW4oc2F2ZSk7CgoJCWZ1bmN0aW9uIHNhdmUoZGIpIHsKCQkJdmFyIHNhdmVfcHJvbWlzZSA9IHByb21pc2UoKTsKCQkJaWYgKGRiID09PSBudWxsKSByZXR1cm4gc2F2ZV9wcm9taXNlLnJlc29sdmUobmFtZSk7CgkJCXZhciB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdmaWxlcycsICdyZWFkd3JpdGUnKTsKCQkJdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ2ZpbGVzJyk7CgkJCXN0b3JlLnB1dCh7bmFtZTpuYW1lLGNvbnRlbnQ6Y29udGVudH0pOwoJCQl2YXIgbm93ID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpOwoJCQl3a29mLmZpbGVfY2FjaGUuZGlyW25hbWVdID0gT2JqZWN0LmFzc2lnbih7YWRkZWQ6bm93LCBsYXN0X2xvYWRlZDpub3d9LCBleHRyYV9hdHRyaWJzKTsKCQkJZmlsZV9jYWNoZV9kaXJfc2F2ZSh0cnVlIC8qIGltbWVkaWF0ZWx5ICovKTsKCQkJdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IHNhdmVfcHJvbWlzZS5yZXNvbHZlLmJpbmQobnVsbCwgbmFtZSk7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBTYXZlIGEgdGhlIGZpbGVfY2FjaGUgZGlyZWN0b3J5IGNvbnRlbnRzLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCXZhciBmY19zeW5jX3RpbWVyOwoJZnVuY3Rpb24gZmlsZV9jYWNoZV9kaXJfc2F2ZShpbW1lZGlhdGVseSkgewoJCWlmIChmY19zeW5jX3RpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dChmY19zeW5jX3RpbWVyKTsKCQl2YXIgZGVsYXkgPSAoaW1tZWRpYXRlbHkgPyAwIDogMjAwMCk7CgkJZmNfc3luY190aW1lciA9IHNldFRpbWVvdXQoc2F2ZSwgZGVsYXkpOwoKCQlmdW5jdGlvbiBzYXZlKCl7CgkJCWZpbGVfY2FjaGVfb3BlbigpLnRoZW4oc2F2ZTIpOwoJCX0KCgkJZnVuY3Rpb24gc2F2ZTIoZGIpewoJCQlmY19zeW5jX3RpbWVyID0gdW5kZWZpbmVkOwoJCQl2YXIgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignZmlsZXMnLCAncmVhZHdyaXRlJyk7CgkJCXZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdmaWxlcycpOwoJCQlzdG9yZS5wdXQoe25hbWU6J1tkaXJdJyxjb250ZW50OkpTT04uc3RyaW5naWZ5KHdrb2YuZmlsZV9jYWNoZS5kaXIpfSk7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBSZW1vdmUgZmlsZXMgdGhhdCBoYXZlbid0IGJlZW4gYWNjZXNzZWQgaW4gYSB3aGlsZS4KCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBmaWxlX2NhY2hlX2NsZWFudXAoKSB7CgkJdmFyIHRocmVzaG9sZCA9IG5ldyBEYXRlKCkgLSAxNCo4NjQwMDAwMDsgLy8gMTQgZGF5cwoJCXZhciBvbGRfZmlsZXMgPSBbXTsKCQlmb3IgKHZhciBmbmFtZSBpbiB3a29mLmZpbGVfY2FjaGUuZGlyKSB7CgkJCWlmIChmbmFtZS5tYXRjaCgvXndrb2ZcLnNldHRpbmdzXC4vKSkgY29udGludWU7IC8vIERvbid0IGZsdXNoIHNldHRpbmdzIGZpbGVzLgoJCQl2YXIgZmRhdGUgPSBuZXcgRGF0ZSh3a29mLmZpbGVfY2FjaGUuZGlyW2ZuYW1lXS5sYXN0X2xvYWRlZCk7CgkJCWlmIChmZGF0ZSA8IHRocmVzaG9sZCkgb2xkX2ZpbGVzLnB1c2goZm5hbWUpOwoJCX0KCQlpZiAob2xkX2ZpbGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoJCWNvbnNvbGUubG9nKCdDbGVhbmluZyBvdXQgJytvbGRfZmlsZXMubGVuZ3RoKycgb2xkIGZpbGUocykgZnJvbSAid2tvZi5maWxlX2NhY2hlIjonKTsKCQlmb3IgKHZhciBmbnVtIGluIG9sZF9maWxlcykgewoJCQljb25zb2xlLmxvZygnICAnKyhOdW1iZXIoZm51bSkrMSkrJzogJytvbGRfZmlsZXNbZm51bV0pOwoJCQl3a29mLmZpbGVfY2FjaGUuZGVsZXRlKG9sZF9maWxlc1tmbnVtXSk7CgkJfQoJfQoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBQcm9jZXNzIG5vLWNhY2hlIHJlcXVlc3RzLgoJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCWZ1bmN0aW9uIGZpbGVfbm9jYWNoZShsaXN0KSB7CgkJaWYgKGxpc3QgPT09IHVuZGVmaW5lZCkgewoJCQlsaXN0ID0gc3BsaXRfbGlzdChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2tvZi5pbmNsdWRlLm5vY2FjaGUnKSB8fCAnJyk7CgkJCWxpc3QgPSBsaXN0LmNvbmNhdChzcGxpdF9saXN0KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3a29mLmxvYWRfZmlsZS5ub2NhY2hlJykgfHwgJycpKTsKCQkJY29uc29sZS5sb2cobGlzdC5qb2luKCcsJykpOwoJCX0gZWxzZSBpZiAodHlwZW9mIGxpc3QgPT09ICdzdHJpbmcnKSB7CgkJCXZhciBub19jYWNoZSA9IHNwbGl0X2xpc3QobGlzdCk7CgkJCXZhciBpZHgsIG1vZHVsZXMgPSBbXSwgdXJscyA9IFtdOwoJCQlmb3IgKGlkeCA9IDA7IGlkeCA8IG5vX2NhY2hlLmxlbmd0aDsgaWR4KyspIHsKCQkJCXZhciBpdGVtID0gbm9fY2FjaGVbaWR4XTsKCQkJCWlmIChzdXBwb3J0ZWRfbW9kdWxlc1tpdGVtXSAhPT0gdW5kZWZpbmVkKSB7CgkJCQkJbW9kdWxlcy5wdXNoKGl0ZW0pOwoJCQkJfSBlbHNlIHsKCQkJCQl1cmxzLnB1c2goaXRlbSk7CgkJCQl9CgkJCX0KCQkJY29uc29sZS5sb2coJ01vZHVsZXM6ICcrbW9kdWxlcy5qb2luKCcsJykpOwoJCQljb25zb2xlLmxvZygnICAgVVJMczogJyt1cmxzLmpvaW4oJywnKSk7CgkJCWxvY2FsU3RvcmFnZS5zZXRJdGVtKCd3a29mLmluY2x1ZGUubm9jYWNoZScsIG1vZHVsZXMuam9pbignLCcpKTsKCQkJbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3drb2YubG9hZF9maWxlLm5vY2FjaGUnLCB1cmxzLmpvaW4oJywnKSk7CgkJfQoJfQoKCWZ1bmN0aW9uIGRvY19yZWFkeSgpIHsKCQl3a29mLnNldF9zdGF0ZSgnd2tvZi5kb2N1bWVudCcsICdyZWFkeScpOwoJfQoKCS8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgkvLyBCb290bG9hZGVyIFN0YXJ0dXAKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglmdW5jdGlvbiBzdGFydHVwKCkgewoJCWdsb2JhbC53a29mID0gcHVibGlzaGVkX2ludGVyZmFjZTsKCgkJLy8gTWFyayBkb2N1bWVudCBzdGF0ZSBhcyAncmVhZHknLgoJCWlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7CgkJCWRvY19yZWFkeSgpOwoJCX0gZWxzZSB7CgkJCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZG9jX3JlYWR5LCBmYWxzZSk7ICAvLyBOb3RpZnkgbGlzdGVuZXJzIHRoYXQgd2UgYXJlIHJlYWR5LgoJCX0KCgkJLy8gT3BlbiBjYWNoZSwgc28gd2tvZi5maWxlX2NhY2hlLmRpciBpcyBhdmFpbGFibGUgdG8gY29uc29sZSBpbW1lZGlhdGVseS4KCQlmaWxlX2NhY2hlX29wZW4oKTsKCQl3a29mLnNldF9zdGF0ZSgnd2tvZi53a29mJywgJ3JlYWR5Jyk7Cgl9CglzdGFydHVwKCk7Cgp9KSh3aW5kb3cpOw=="},{"name":"Wanikani Ultimate Timeline","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https://(www|preview).wanikani.com/(dashboard)?$/"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1569496814431,"data":{}},"enabled":false,"position":23,"file_url":"https://greasyfork.org/scripts/13475-wanikani-ultimate-timeline/code/Wanikani%20Ultimate%20Timeline.user.js","uuid":"7f921d4d-9651-4d39-9aad-f16c23a1e0de","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFdhbmlrYW5pIFVsdGltYXRlIFRpbWVsaW5lCi8vIEBuYW1lc3BhY2UgICByZmluZGxleQovLyBAZGVzY3JpcHRpb24gUmV2aWV3IHNjaGVkdWxlIGV4cGxvcmVyIGZvciBXYW5pS2FuaQovLyBAdmVyc2lvbiAgICAgNy4wLjI0Ci8vIEBpbmNsdWRlICAgICAvXmh0dHBzOi8vKHd3d3xwcmV2aWV3KS53YW5pa2FuaS5jb20vKGRhc2hib2FyZCk/JC8KLy8gQGNvcHlyaWdodCAgIDIwMTgrLCBSb2JpbiBGaW5kbGV5Ci8vIEBsaWNlbnNlICAgICBNSVQ7IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKLy8gQHJ1bi1hdCAgICAgIGRvY3VtZW50LWVuZAovLyBAZ3JhbnQgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCndpbmRvdy50aW1lbGluZSA9IHt9OwoKKGZ1bmN0aW9uKGdvYmopIHsKCiAgICAvKiBnbG9iYWwgJCwgd2tvZiAqLwogICAgLyogZXNsaW50IG5vLW11bHRpLXNwYWNlczogIm9mZiIgKi8KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEluaXRpYWxpemF0aW9uIG9mIHRoZSBXYW5pa2FuaSBPcGVuIEZyYW1ld29yay4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgdmFyIHNjcmlwdF9uYW1lID0gJ1VsdGltYXRlIFRpbWVsaW5lJzsKICAgIHZhciB3a29mX3ZlcnNpb25fbmVlZGVkID0gJzEuMC4yNyc7CiAgICBpZiAoIXdpbmRvdy53a29mKSB7CiAgICAgICAgaWYgKGNvbmZpcm0oc2NyaXB0X25hbWUrJyByZXF1aXJlcyBXYW5pa2FuaSBPcGVuIEZyYW1ld29yay5cbkRvIHlvdSB3YW50IHRvIGJlIGZvcndhcmRlZCB0byB0aGUgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucz8nKSkgewogICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdodHRwczovL2NvbW11bml0eS53YW5pa2FuaS5jb20vdC9pbnN0cnVjdGlvbnMtaW5zdGFsbGluZy13YW5pa2FuaS1vcGVuLWZyYW1ld29yay8yODU0OSc7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICh3a29mLnZlcnNpb24uY29tcGFyZV90byh3a29mX3ZlcnNpb25fbmVlZGVkKSA9PT0gJ29sZGVyJykgewogICAgICAgIGlmIChjb25maXJtKHNjcmlwdF9uYW1lKycgcmVxdWlyZXMgV2FuaWthbmkgT3BlbiBGcmFtZXdvcmsgdmVyc2lvbiAnK3drb2ZfdmVyc2lvbl9uZWVkZWQrJy5cbkRvIHlvdSB3YW50IHRvIGJlIGZvcndhcmRlZCB0byB0aGUgdXBkYXRlIHBhZ2U/JykpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9lbi9zY3JpcHRzLzM4NTgyLXdhbmlrYW5pLW9wZW4tZnJhbWV3b3JrJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdrb2YuaW5jbHVkZSgnSXRlbURhdGEsTWVudSxTZXR0aW5ncycpOwogICAgd2tvZi5yZWFkeSgnZG9jdW1lbnQsSXRlbURhdGEsTWVudSxTZXR0aW5ncycpLnRoZW4obG9hZF9zZXR0aW5ncykudGhlbihzdGFydHVwKTsKCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIENoYXJ0IGRlZmluaW5nIHRoZSBhdXRvLXNjYWxpbmcgZmFjdG9ycyBvZiB0aGUgWC1heGlzLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2YXIgeHNjYWxlID0gewogICAgICAgIC8vIFNjYWxpbmcgY2hhcnQuICBFYWNoIGNvbHVtbiByZXByZXNlbnRzIGEgc2NhbGluZyByYW5nZSwKICAgICAgICAvLyBhbmQgZWFjaCByb3cgaXMgc29tZXRoaW5nIHRoYXQgd2UgYXJlIHNjYWxpbmcuCiAgICAgICAgaG91cnNfcGVyX2xhYmVsOiAgIFsgIDEgLCAgMyAsICA2ICwgIDEyICwgIDI0ICwgIDQ4ICwgNzIwIF0sCiAgICAgICAgcmVkX3RpY19jaG9pY2VzOiAgIFsnMWQnLCcxZCcsJzFkJywgJzFkJywgJzF3JywnMXdzJywgJzFtJ10sIC8vIFJlZCBtYWpvciB0aWNzIChyZWQgbGFiZWwpCiAgICAgICAgbWFqb3JfdGljX2Nob2ljZXM6IFsnMWgnLCczaCcsJzZoJywnMTJoJywgJzFkJywnMWRzJywgJzVEJ10sIC8vIE1ham9yIHRpY3MgKGhhcyBsYWJlbCkKICAgICAgICBtaW5vcl90aWNfY2hvaWNlczogWyAnLScsJzFoJywnMWgnLCAnM2gnLCAnNmgnLCcxMmgnLCAnMWQnXSwgLy8gTWlub3IgdGljcyAobm8gbGFiZWwpCiAgICAgICAgYnVuZGxlX2Nob2ljZXMgICA6IFsgIDEgLCAgMSAsICAxICwgICAzICwgICA2ICwgIDEyICwgIDI0IF0sIC8vIEhvdyBtYW55IGhvdXJzIGFyZSBidW5kbGVkIHRvZ2V0aGVyLgogICAgICAgIGlkeDogMAogICAgfTsKCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEludGVyYWwgZ2xvYmFsIG9iamVjdCBmb3IgY2VudHJhbGl6aW5nIGRhdGEgYW5kIGNvbmZpZ3VyYXRpb24uCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBncmFwaCA9IHsKICAgICAgICBlbGVtOiBudWxsLAogICAgICAgIG1hcmdpbjogewogICAgICAgICAgICB0b3A6IDE2LAogICAgICAgICAgICBsZWZ0OiAyOCwKICAgICAgICAgICAgYm90dG9tOiAxNiwKICAgICAgICB9LAogICAgICAgIHhfYXhpczogewogICAgICAgICAgICB3aWR0aDogMCwKICAgICAgICAgICAgbWF4X2hvdXJzOiAwLAogICAgICAgICAgICBwaXhlbHNfcGVyX3RpYzogMCwKICAgICAgICB9LAogICAgICAgIHlfYXhpczogewogICAgICAgICAgICBoZWlnaHQ6IDEwMCwKICAgICAgICAgICAgbWluX2hlaWdodDogODAsCiAgICAgICAgICAgIG1heF9oZWlnaHQ6IDMwMCwKICAgICAgICAgICAgbWF4X3Jldmlld3M6IDAsCiAgICAgICAgfSwKICAgICAgICByYWRpY2FsX2NhY2hlOiB7fSwKICAgIH07CiAgICBnb2JqLmdyYXBoID0gZ3JhcGg7CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBHbG9iYWwgdXRpbGl0eSBmdW5jdGlvbnMuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHRvX3RpdGxlX2Nhc2Uoc3RyKSB7cmV0dXJuIHN0ci5yZXBsYWNlKC9cd1xTKi9nLCBmdW5jdGlvbih0eHQpe3JldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk7fSk7fQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2xvYmFsIHZhcmlhYmxlcwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2YXIgc2V0dGluZ3MsIHNldHRpbmdzX2RpYWxvZzsKICAgIHZhciB0el9vZnMgPSBuZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgICB2YXIgdGltZV9zaGlmdCA9IE1hdGguY2VpbCh0el9vZnMgLyA2MCkgKiA2MCAtIHR6X29mczsKCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTG9hZCB0aGUgc2NyaXB0IHNldHRpbmdzLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBsb2FkX3NldHRpbmdzKCkgewogICAgICAgIHZhciBkZWZhdWx0cyA9IHsKICAgICAgICAgICAgbWluaW1pemVkOiBmYWxzZSwKICAgICAgICAgICAgcGxhY2VtZW50OiAnYmVmb3JlX25leHRyZXZpZXcnLAogICAgICAgICAgICB0aW1lX2Zvcm1hdDogJzEyaG91cicsCiAgICAgICAgICAgIGdyYXBoX2hlaWdodDogMTAwLAogICAgICAgICAgICBtYXhfZGF5czogMTQsCiAgICAgICAgICAgIGRheXM6IDMuNSwKICAgICAgICAgICAgbWF4X2Jhcl93aWR0aDogNDAsCiAgICAgICAgICAgIG1heF9iYXJfaGVpZ2h0OiAwLAogICAgICAgICAgICBmaXhlZF9iYXJfaGVpZ2h0OiBmYWxzZSwKICAgICAgICAgICAgYmFyX3N0eWxlOiAnaXRlbV90eXBlJywKICAgICAgICAgICAgc3JzX2N1cnJfbmV4dDogJ2N1cnInLAogICAgICAgICAgICBjdXJyZW50X2xldmVsX21hcmtlcnM6ICdya3YnLAogICAgICAgICAgICBidXJuX21hcmtlcnM6ICdzaG93JywKICAgICAgICAgICAgc2hvd19yZXZpZXdfZGV0YWlsczogJ2Z1bGwnLAogICAgICAgICAgICByZXZpZXdfZGV0YWlsc19zdW1tYXJ5OiAnaXRlbV90eXBlJywKICAgICAgICAgICAgcmV2aWV3X2RldGFpbHNfYnV0dG9uczogdHJ1ZSwKICAgICAgICAgICAgc2hvd19iYXJfc3R5bGVfZHJvcGRvd246IHRydWUsCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gd2tvZi5TZXR0aW5ncy5sb2FkKCd0aW1lbGluZScsIGRlZmF1bHRzKS50aGVuKGZ1bmN0aW9uKGRhdGEpewogICAgICAgICAgICBzZXR0aW5ncyA9IHdrb2Yuc2V0dGluZ3MudGltZWxpbmU7CiAgICAgICAgICAgIHN3aXRjaCAoc2V0dGluZ3Muc2hvd19tYXJrZXJzKSB7CiAgICAgICAgICAgICAgICBjYXNlICdub25lJzoKICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5jdXJyZW50X2xldmVsX21hcmtlcnMgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYnVybl9tYXJrZXJzID0gJ2hpZGUnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnY3Vycic6CiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuY3VycmVudF9sZXZlbF9tYXJrZXJzID0gJ3Jrdic7CiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYnVybl9tYXJrZXJzID0gJ2hpZGUnOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnYnVybic6CiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuY3VycmVudF9sZXZlbF9tYXJrZXJzID0gJ25vbmUnOwogICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmJ1cm5fbWFya2VycyA9ICdzaG93JzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2JvdGgnOgogICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmN1cnJlbnRfbGV2ZWxfbWFya2VycyA9ICdya3YnOwogICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmJ1cm5fbWFya2VycyA9ICdzaG93JzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZWxldGUgc2V0dGluZ3Muc2hvd19tYXJrZXJzOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTdGFydHVwCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHN0YXJ0dXAoKSB7CiAgICAgICAgaW5zdGFsbF9jc3MoKTsKICAgICAgICBpbnN0YWxsX21lbnVfbGluaygpOwogICAgICAgIHBsYWNlX3RpbWVsaW5lKHRydWUgLyogZmlyc3RfdGltZSAqLyk7CiAgICAgICAgZmV0Y2hfYW5kX3VwZGF0ZSgpOwogICAgICAgIHN0YXJ0X3JlZnJlc2hfdGltZXIoKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEluc3RhbGwgYSBsaW5rIHRvIHRoZSBzZXR0aW5ncyBpbiB0aGUgbWVudS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaW5zdGFsbF9tZW51X2xpbmsoKQogICAgewogICAgICAgIHdrb2YuTWVudS5pbnNlcnRfc2NyaXB0X2xpbmsoewogICAgICAgICAgICBuYW1lOiAndGltZWxpbmUnLAogICAgICAgICAgICBzdWJtZW51OiAnU2V0dGluZ3MnLAogICAgICAgICAgICB0aXRsZTogJ1VsdGltYXRlIFRpbWVsaW5lJywKICAgICAgICAgICAgb25fY2xpY2s6IG9wZW5fc2V0dGluZ3MKICAgICAgICB9KTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFRvcC1sZXZlbCBIVE1MIGZvciB0aGUgc2NyaXB0LgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2YXIgdGltZWxpbmVfaHRtbCA9CiAgICAgICAgJzxzZWN0aW9uIGlkPSJ0aW1lbGluZSI+JysKICAgICAgICAnICA8aDQgY2xhc3M9Im5vX21pbiI+UmV2aWV3cyBUaW1lbGluZTwvaDQ+JysKICAgICAgICAnICA8aSBjbGFzcz0ibGluayBvcGVuIG5vc2VsZWN0IG5vX21pbiBpY29uLWNoZXZyb24tdXAiIHRpdGxlPSJPcGVuIHRoZSB0aW1lbGluZSI+PC9pPicrCiAgICAgICAgJyAgPGkgY2xhc3M9ImxpbmsgbWluaW1pemUgbm9zZWxlY3QgaWNvbi1jaGV2cm9uLWRvd24iIHRpdGxlPSJNaW5pbWl6ZSB0aGUgdGltZWxpbmUiPjwvaT4nKwogICAgICAgICcgIDxpIGNsYXNzPSJsaW5rIHJlZnJlc2ggbm9zZWxlY3QgaWNvbi1yZWZyZXNoIiB0aXRsZT0iUmVmcmVzaCI+PC9pPicrCiAgICAgICAgJyAgPGkgY2xhc3M9Imxpbmsgc2V0dGluZ3Mgbm9zZWxlY3QgaWNvbi1nZWFyIiB0aXRsZT0iQ2hhbmdlIHRpbWVsaW5lIHNldHRpbmdzIj48L2k+JysKICAgICAgICAnICA8c3BhbiBjbGFzcz0iYmFyX3N0eWxlIGhpZGRlbiI+PGxhYmVsPkJhciBTdHlsZTogPC9sYWJlbD48c2VsZWN0PicrCiAgICAgICAgJyAgICA8b3B0aW9uIG5hbWU9ImNvdW50Ij5SZXZpZXcgQ291bnQ8L29wdGlvbj4nKwogICAgICAgICcgICAgPG9wdGlvbiBuYW1lPSJpdGVtX3R5cGUiPkl0ZW0gVHlwZTwvb3B0aW9uPicrCiAgICAgICAgJyAgICA8b3B0aW9uIG5hbWU9InNyc19zdGFnZSI+U1JTIExldmVsPC9vcHRpb24+JysKICAgICAgICAnICAgIDxvcHRpb24gbmFtZT0ibGV2ZWwiPkxldmVsPC9vcHRpb24+JysKICAgICAgICAnICA8L3NlbGVjdD48L3NwYW4+JysKICAgICAgICAnICA8Zm9ybSBjbGFzcz0icmFuZ2VfZm9ybSIgY2xhc3M9ImhpZGRlbiI+PGxhYmVsPjxzcGFuIGNsYXNzPSJyYW5nZV9yZXZpZXdzIj4wPC9zcGFuPiByZXZpZXdzIGluIDxzcGFuIGNsYXNzPSJyYW5nZV9kYXlzIj4zIGRheXM8L3NwYW4+IDxpbnB1dCBjbGFzcz0icmFuZ2VfaW5wdXQiIHR5cGU9InJhbmdlIiBtaW49IjAuMjUiIG1heD0iNyIgdmFsdWU9IjMiIHN0ZXA9IjAuMjUiIG5hbWU9InJhbmdlX2lucHV0Ij48L2xhYmVsPjwvZm9ybT48YnIgY2xlYXI9ImFsbCIgY2xhc3M9Im5vX21pbiI+JysKICAgICAgICAnICA8ZGl2IGNsYXNzPSJncmFwaF93cmFwIj4nKwogICAgICAgICcgICAgPGRpdiBjbGFzcz0icmV2aWV3X2luZm8gaGlkZGVuIj48ZGl2IGNsYXNzPSJpbm5lciI+PC9kaXY+PC9kaXY+JysKICAgICAgICAnICAgIDxkaXYgY2xhc3M9ImdyYXBoX3BhbmVsIj48L2Rpdj4nKwogICAgICAgICcgIDwvZGl2PicrCiAgICAgICAgJzwvc2VjdGlvbj4nOwoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSW5zdGFsbCB0aGUgc3R5bGUgc2hlZXQgZm9yIHRoZSBzY3JpcHQuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGluc3RhbGxfY3NzKCkgewogICAgICAgIHZhciB0aW1lbGluZV9jc3MgPQogICAgICAgICAgICAnLm5vc2VsZWN0IHstd2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDpub25lOyAta2h0bWwtdXNlci1zZWxlY3Q6bm9uZTsgLW1vei11c2VyLXNlbGVjdDpub25lOyAtbXMtdXNlci1zZWxlY3Q6bm9uZTsgdXNlci1zZWxlY3Q6bm9uZTsgY3Vyc29yOmRlZmF1bHQ7fScrCiAgICAgICAgICAgICcuZGFzaGJvYXJkIHNlY3Rpb24ucmV2aWV3LXN0YXR1cyB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNmZmZmZmY7fScrCiAgICAgICAgICAgICcuZGFzaGJvYXJkIHNlY3Rpb24ucmV2aWV3LXN0YXR1cyB1bCBsaSB0aW1lIHt3aGl0ZS1zcGFjZTogbm93cmFwOyBvdmVyZmxvdy14OiBoaWRkZW47IGhlaWdodDogMS41ZW07IG1hcmdpbi1ib3R0b206IDA7fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lIHttYXJnaW4tYm90dG9tOiAwcHg7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDRkNGQ0O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lID4gaDQge2NsZWFyOm5vbmU7IGZsb2F0OmxlZnQ7IGhlaWdodDoyMHB4OyBtYXJnaW4tdG9wOjBweDsgbWFyZ2luLWJvdHRvbTo0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgbWFyZ2luLXJpZ2h0OjEycHg7fScrCiAgICAgICAgICAgICdAbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHsjdGltZWxpbmUgaDQge2Rpc3BsYXk6IG5vbmU7fX0nKwogICAgICAgICAgICAnI3RpbWVsaW5lID4gLmxpbmsge2NvbG9yOnJnYmEoMCwwLDAsMC4zKTsgZm9udC1zaXplOjEuMWVtOyB0ZXh0LWRlY29yYXRpb246bm9uZTsgY3Vyc29yOnBvaW50ZXI7IG1hcmdpbi1yaWdodDo0cHg7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgPiAubGluazpob3ZlciB7Y29sb3I6cmdiYSgyNTUsMzEsMzEsMC41KTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZTpub3QoLm1pbikgPiAubGluay5vcGVuLCAjdGltZWxpbmUubWluID4gOm5vdCgubm9fbWluKSB7ZGlzcGxheTpub25lO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lID4gLnJhbmdlX2Zvcm0ge2Zsb2F0OnJpZ2h0OyBtYXJnaW4tYm90dG9tOjBweDsgdGV4dC1hbGlnbjpyaWdodDt9JysKCiAgICAgICAgICAgICcjdGltZWxpbmUgLmJhcl9zdHlsZSBsYWJlbCB7ZGlzcGxheTppbmxpbmU7IG1hcmdpbi1sZWZ0OjgwcHg7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLmJhcl9zdHlsZSBzZWxlY3Qge2hlaWdodDphdXRvOyBwYWRkaW5nOjA7IHdpZHRoOmF1dG87IHZlcnRpY2FsLWFsaWduOmJhc2VsaW5lOyBiYWNrZ3JvdW5kLWNvbG9yOiNlM2UzZTM7IGJvcmRlcjoxcHggc29saWQgI2FhYTsgYm9yZGVyLXJhZGl1czoycHg7fScrCiAgICAgICAgICAgICdAbWVkaWEgKG1heC13aWR0aDogOTc5cHgpIHsnKwogICAgICAgICAgICAnICAjdGltZWxpbmUgLmJhcl9zdHlsZSB7ZmxvYXQ6bGVmdDsgY2xlYXI6Ym90aDsgbWFyZ2luLWxlZnQ6aW5oZXJpdDt9JysKICAgICAgICAgICAgJyAgI3RpbWVsaW5lIC5iYXJfc3R5bGUgbGFiZWwge21hcmdpbi1sZWZ0OmluaGVyaXQ7fScrCiAgICAgICAgICAgICd9JysKICAgICAgICAgICAgJ0BtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkgeyN0aW1lbGluZSAubGluayB7ZmxvYXQ6bGVmdDt9fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lID4gLmdyYXBoX3BhbmVsIGRpdiwgI3RpbWVsaW5lID4gLmdyYXBoX3BhbmVsIGNhbnZhcyB7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSA+IC5ncmFwaF9wYW5lbCBkaXYge2JvcmRlcjoxcHggc29saWQgI2Q0ZDRkNDt9JysKCiAgICAgICAgICAgICcjdGltZWxpbmUgLmdyYXBoX3dyYXAge3Bvc2l0aW9uOnJlbGF0aXZlO30nKwoKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8ge3Bvc2l0aW9uOmFic29sdXRlOyBwYWRkaW5nLWJvdHRvbToxNTBweDsgei1pbmRleDo1O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuaW5uZXIge3BhZGRpbmc6NHB4IDhweCA4cHggOHB4OyBjb2xvcjojZWVlZWVlOyBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMC44KTsgYm9yZGVyLXJhZGl1czo0cHg7IGZvbnQtd2VpZ2h0OmJvbGQ7IHotaW5kZXg6MjsgYm94LXNpemluZzpib3JkZXItYm94O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuc3VtbWFyeSB7Zm9udC1mYW1pbHk6Ik9wZW4gU2FucyIsIkhlbHZldGljYSBOZXVlIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsgZm9udC1zaXplOjEzcHg7IGRpc3BsYXk6aW5saW5lLWJsb2NrO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuc3VtbWFyeSBkaXYge3BhZGRpbmc6MHB4IDhweDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLmluZGVudCB7cGFkZGluZzowOyBtYXJnaW4tYm90dG9tOjhweDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLmluZGVudDpsYXN0LWNoaWxkIHttYXJnaW4tYm90dG9tOjA7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvIC5zdW1tYXJ5IC5maXhlZCB7dGV4dC1hbGlnbjpyaWdodDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLnRvdCB7Y29sb3I6IzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjojZWZlZmVmOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNlZmVmZWYsICNjZmNmY2YpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuaXRlbXNfd3JhcCB7cG9zaXRpb246cmVsYXRpdmU7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnN1bW1hcnkgLmZpeGVkIHtkaXNwbGF5OmlubGluZS1ibG9jazt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLmluZGVudD5kaXYge2Rpc3BsYXk6bm9uZX0nKwoKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJpdGVtX3R5cGUiXSAuc3VtbWFyeSAuaXRlbV90eXBlIHtkaXNwbGF5OmJsb2NrO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9InNyc19zdGFnZSJdIC5zdW1tYXJ5IC5zcnNfc3RhZ2Uge2Rpc3BsYXk6YmxvY2s7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ibGV2ZWwiXSAuc3VtbWFyeSAubGV2ZWwge2Rpc3BsYXk6YmxvY2s7fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9ImNvdW50Il0gLml0ZW1fbGlzdCA+IGxpIHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2VmZWZlZiwgI2NmY2ZjZik7IGNvbG9yOiMwMDA7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0iY291bnQiXSAuaXRlbV9saXN0ID4gbGkgc3ZnIHtzdHJva2U6IzAwMDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJpdGVtX3R5cGUiXSAucmFkIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMDk2ZTc7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzBhZiwgIzAwOTNkZCk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0iaXRlbV90eXBlIl0gLmthbiB7YmFja2dyb3VuZC1jb2xvcjojZWUwMGExOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmMGEsICNkZDAwOTMpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9Iml0ZW1fdHlwZSJdIC52b2Mge2JhY2tncm91bmQtY29sb3I6Izk4MDBlODsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjYTBmLCAjOTMwMGRkKTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJzcnNfc3RhZ2UiXSAuYXBwciB7YmFja2dyb3VuZC1jb2xvcjojZGQwMDkzOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZjAwYWEsICNiMzAwNzcpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9InNyc19zdGFnZSJdIC5ndXJ1IHtiYWNrZ3JvdW5kLWNvbG9yOiM4ODJkOWU7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2FhMzhjNywgIzY2MjI3Nyk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ic3JzX3N0YWdlIl0gLm1hc3Qge2JhY2tncm91bmQtY29sb3I6IzI5NGRkYjsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNTE2ZWUxLCAjMjE0MmM0KTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJzcnNfc3RhZ2UiXSAuZW5saSB7YmFja2dyb3VuZC1jb2xvcjojMDA5M2RkOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMwMGFhZmYsICMwMDc3YjMpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9InNyc19zdGFnZSJdIC5idXJuIHtiYWNrZ3JvdW5kLWNvbG9yOiM0MzQzNDM7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzQzNDM0MywgIzFhMWExYSk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ic3JzX3N0YWdlIl0gbGkuYnVybiB7Ym9yZGVyOjFweCBzb2xpZCAjNzc3O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9ImxldmVsIl0gLmx2bGdycDAge2JhY2tncm91bmQtY29sb3I6IzVlYjZlODsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNWViNmU4LCAjMWQ4YWM5KTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJsZXZlbCJdIC5sdmxncnAxIHtiYWNrZ3JvdW5kLWNvbG9yOiNlMjVlYmM7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI2UyNWViYywgI2MyMjQ5NSk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ibGV2ZWwiXSAubHZsZ3JwMiB7YmFja2dyb3VuZC1jb2xvcjojYWY3OWMzOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNhZjc5YzMsICM4NzQ3OWUpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9ImxldmVsIl0gLmx2bGdycDMge2JhY2tncm91bmQtY29sb3I6Izc2OGNlNzsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNzY4Y2U3LCAjMjY0YWQ5KTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm9bZGF0YS1tb2RlPSJsZXZlbCJdIC5sdmxncnA0IHtiYWNrZ3JvdW5kLWNvbG9yOiM1ZTVlNjQ7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzVlNWU2NCwgIzMxMzEzNSk7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLnJldmlld19pbmZvW2RhdGEtbW9kZT0ibGV2ZWwiXSAubHZsZ3JwNSB7YmFja2dyb3VuZC1jb2xvcjojZjVjNjY3OyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmNWM2NjcsICNmMGE1MGYpOyBjb2xvcjojMzMzfScrCgogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mb1tkYXRhLW1vZGU9ImxldmVsIl0gLmx2bGdycDUgc3ZnIHtzdHJva2U6IzMzM30nKwoKICAgICAgICAgICAgJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLnN1bW1hcnkgLmluZGVudD4uY3VyIHtkaXNwbGF5OmJsb2NrOyBmb250LXN0eWxlOml0YWxpYzsgY29sb3I6IzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjojZmZmZjg4OyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNmZmZmYWEsICNlZWVlNzcpO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyAuc3VtbWFyeSAuaW5kZW50Pi5idXIge2Rpc3BsYXk6YmxvY2s7IGZvbnQtc3R5bGU6aXRhbGljOyBjb2xvcjojZmZmZmZmOyBiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzQ0NDQ0NCwgIzAwMDAwMCk7fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lIC5pdGVtX2xpc3Qge21hcmdpbjogOHB4IDAgMCAwOyBwYWRkaW5nOiAwcHg7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgLml0ZW1fbGlzdCA+IGxpIHtwYWRkaW5nOjAgM3B4OyBtYXJnaW46MXB4IDFweDsgZGlzcGxheTppbmxpbmUtYmxvY2s7IGJvcmRlci1yYWRpdXM6NHB4OyBmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsOyBjdXJzb3I6ZGVmYXVsdDsgYm94LXNpemluZzpib3JkZXItYm94OyBib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMCk7fScrCgogICAgICAgICAgICAnI3RpbWVsaW5lW2RhdGEtZGV0YWlsPSJmdWxsIl0gLml0ZW1fbGlzdCA+IGxpIHtjdXJzb3I6cG9pbnRlcjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAuaXRlbV9pbmZvIHtwb3NpdGlvbjphYnNvbHV0ZTsgYmFja2dyb3VuZDojMzMzOyBib3JkZXI6OHB4IHNvbGlkIHJnYmEoMCwwLDAsMC43KTsgYm9yZGVyLXJhZGl1czo2cHg7IGxlZnQ6NHB4OyBwYWRkaW5nOjAgOHB4OyB6LWluZGV4OjEwO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5pdGVtX2luZm8gLml0ZW0ge2ZvbnQtc2l6ZToyZW07IGxpbmUtaGVpZ2h0OjEuMmVtO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbyBzdmcucmFkaWNhbCB7ZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDo4NTtzdHJva2UtbGluZWNhcDpzcXVhcmU7c3Ryb2tlLW1pdGVybGltaXQ6Mjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAuaXRlbV9saXN0IHN2Zy5yYWRpY2FsIHt3aWR0aDoxZW07IHRyYW5zZm9ybTp0cmFuc2xhdGVZKDJweCk7IHN0cm9rZS13aWR0aDo4NTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAuaXRlbV9pbmZvIC5pdGVtIHN2Zy5yYWRpY2FsIHt3aWR0aDoyOHB4OyB0cmFuc2Zvcm06dHJhbnNsYXRlWSgycHgpO30nKwoKICAgICAgICAgICAgJyN0aW1lbGluZSAuZGV0YWlsX2J1dHRvbnMge2Rpc3BsYXk6aW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjp0b3A7IG1hcmdpbi1sZWZ0OjhweDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSAuZGV0YWlsX2J1dHRvbnMgYnV0dG9uIHtkaXNwbGF5OmJsb2NrOyB3aWR0aDoxMzBweDsgcGFkZGluZzowOyBtYXJnaW4tYm90dG9tOjJweDt9JysKCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIHtvdmVyZmxvdzpoaWRkZW47fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5ncmlkIHtwb2ludGVyLWV2ZW50czpub25lO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZ3JpZCBwYXRoIHtmaWxsOm5vbmU7c3Ryb2tlOmJsYWNrO3N0cm9rZS1saW5lY2FwOnNxdWFyZTtzaGFwZS1yZW5kZXJpbmc6Y3Jpc3BFZGdlczt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmdyaWQgLmxpZ2h0IHtzdHJva2U6I2ZmZmZmZjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmdyaWQgLnNoYWRvdyB7c3Ryb2tlOiNkNWQ1ZDU7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5ncmlkIC5tYWpvciB7b3BhY2l0eTowLjE1O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZ3JpZCAubWlub3Ige29wYWNpdHk6MC4wNTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmdyaWQgLnJlZHRpYyB7c3Ryb2tlOiNmMjI7b3BhY2l0eToxO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZ3JpZCAubWF4IHtzdHJva2U6I2YyMjtvcGFjaXR5OjAuMjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmJvdW5kYXJ5IHtmaWxsOiMwMDA7b3BhY2l0eTowO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAucmVzaXplX2dyaXAge2ZpbGw6bm9uZTtjdXJzb3I6cm93LXJlc2l6ZTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLnJlc2l6ZV9ncmlwIC5saWdodCB7c3Ryb2tlOiNmZmZmZmY7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5yZXNpemVfZ3JpcCAuc2hhZG93IHtzdHJva2U6I2JiYjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgdGV4dC5yZWR0aWMge2ZpbGw6I2YyMjtmb250LXdlaWdodDpib2xkO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAubGFiZWwteCB0ZXh0IHt0ZXh0LWFuY2hvcjpzdGFydDtmb250LXNpemU6MC44ZW07fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5sYWJlbC15IHRleHQge3RleHQtYW5jaG9yOmVuZDtmb250LXNpemU6MC44ZW07fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIHRleHQge3BvaW50ZXItZXZlbnRzOm5vbmU7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5iYXJzIHJlY3Qge3N0cm9rZTpub25lO3NoYXBlLXJlbmRlcmluZzpjcmlzcEVkZ2VzO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuYmFyLm92ZXJsYXkge29wYWNpdHk6MDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmJrZ2Qge2ZpbGw6I2Y3ZjdmNzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLnJhZCB7ZmlsbDojMDBhMWYxO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAua2FuIHtmaWxsOiNmMTAwYTE7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC52b2Mge2ZpbGw6I2ExMDBmMTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLnN1bSB7ZmlsbDojMjk0ZGRiO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuYXBwciB7ZmlsbDojZGQwMDkzO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZ3VydSB7ZmlsbDojODgyZDllO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAubWFzdCB7ZmlsbDojMjk0ZGRiO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuZW5saSB7ZmlsbDojMDA5M2RkO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuYnVybiB7ZmlsbDojNDM0MzQzO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuY291bnQge2ZpbGw6Izc3OGFkODt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDAge2ZpbGw6IzVlYjZlODt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDEge2ZpbGw6I2UyNWViYzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDIge2ZpbGw6I2FmNzljMzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDMge2ZpbGw6Izc2OGNlNzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDQge2ZpbGw6IzVlNWU2NDt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmx2bGdycDUge2ZpbGw6I2Y1YzY2Nzt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmJhcnMgLmN1ciB7ZmlsbDojZmZmZmZmO29wYWNpdHk6MC42O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuYmFycyAuYnVyIHtmaWxsOiMwMDAwMDA7b3BhY2l0eTowLjQ7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5tYXJrZXJzIHtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MC41O30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAubWFya2VycyAuYnVyIHtmaWxsOiMwMDAwMDA7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5tYXJrZXJzIC5jdXIge2ZpbGw6I2ZmZmZmZjt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcgLmhpZ2hsaWdodCAuYm91bmRhcnkge2N1cnNvcjpwb2ludGVyO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lW2RhdGEtZGV0YWlsPSJub25lIl0gLmhpZ2hsaWdodCAuYm91bmRhcnkge2N1cnNvcjphdXRvO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuaGlnaGxpZ2h0IC5tYXJrZXIge3BvaW50ZXItZXZlbnRzOm5vbmU7c2hhcGUtcmVuZGVyaW5nOmNyaXNwRWRnZXM7fScrCiAgICAgICAgICAgICcjdGltZWxpbmUgc3ZnIC5oaWdobGlnaHQgcGF0aC5tYXJrZXIge2ZpbGw6IzAwYTFmMTsgc3Ryb2tlOiMwMGExZjE7IHN0cm9rZS13aWR0aDoyO30nKwogICAgICAgICAgICAnI3RpbWVsaW5lIHN2ZyAuaGlnaGxpZ2h0IHJlY3QubWFya2VyIHtmaWxsOnJnYmEoMCwxNjEsMjQxLDAuMSk7IHN0cm9rZTojMDBhMWYxOyBzdHJva2Utd2lkdGg6MTt9JysKICAgICAgICAgICAgJyN0aW1lbGluZSBzdmcubGluazpob3ZlciAqIHtmaWxsOnJnYigyNTUsMzEsMzEpO30nKwogICAgICAgICAgICAnYm9keS5tdXRlX3BvcG92ZXIgLnBvcG92ZXIuc3JzIHtkaXNwbGF5Om5vbmUgIWltcG9ydGFudDt9JysKICAgICAgICAgICAgJyc7CgogICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxzdHlsZT4nK3RpbWVsaW5lX2NzcysnPC9zdHlsZT4nKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUGxhY2UgdGhlIHRpbWVsaW5lIG9uIHRoZSBkYXNoYm9hcmQsIG9yIGFkanVzdCBpdHMgbG9jYXRpb24gb24gdGhlIHBhZ2UuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHBsYWNlX3RpbWVsaW5lKGZpcnN0X3RpbWUpIHsKICAgICAgICB2YXIgdGltZWxpbmUgPSAoZmlyc3RfdGltZSA/ICQodGltZWxpbmVfaHRtbCkgOiAkKCcjdGltZWxpbmUnKSk7CiAgICAgICAgc3dpdGNoIChzZXR0aW5ncy5wbGFjZW1lbnQpIHsKICAgICAgICAgICAgY2FzZSAnYWZ0ZXJfbmV4dHJldmlldycgICA6ICQoJ3NlY3Rpb24ucmV2aWV3LXN0YXR1cycpLmFmdGVyKHRpbWVsaW5lKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2FmdGVyX3Nyc3Byb2dyZXNzJyAgOiAkKCdzZWN0aW9uLnNycy1wcm9ncmVzcycpLmFmdGVyKHRpbWVsaW5lKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2FmdGVyX2xldmVscHJvZ3Jlc3MnOiAkKCdzZWN0aW9uLnByb2dyZXNzaW9uJykuYWZ0ZXIodGltZWxpbmUpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAnYWZ0ZXJfdW5sb2NrcycgICAgICA6ICQoJ3NlY3Rpb24ucmVjZW50LXVubG9ja3MnKS5jbG9zZXN0KCdkaXYucm93JykuYWZ0ZXIodGltZWxpbmUpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAnYWZ0ZXJfcmVjZW50Y2hhdCcgICA6ICQoJ3NlY3Rpb24uZm9ydW0tdG9waWNzLWxpc3QnKS5jbG9zZXN0KCdkaXYucm93JykuYWZ0ZXIodGltZWxpbmUpOyBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDogJCgnc2VjdGlvbi5yZXZpZXctc3RhdHVzJykuYmVmb3JlKHRpbWVsaW5lKTsgYnJlYWs7IC8vICdiZWZvcmVfbmV4dHJldmlldycKICAgICAgICB9CiAgICAgICAgaWYgKGZpcnN0X3RpbWUpIHsKICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBVSSBmcm9tIHNldHRpbmdzCiAgICAgICAgICAgIGdyYXBoLmVsZW0gPSB0aW1lbGluZS5maW5kKCcuZ3JhcGhfcGFuZWwnKTsKICAgICAgICAgICAgZ3JhcGgueF9heGlzLndpZHRoID0gZ3JhcGguZWxlbS53aWR0aCgpIC0gZ3JhcGgubWFyZ2luLmxlZnQ7CiAgICAgICAgICAgIGdyYXBoLnlfYXhpcy5oZWlnaHQgPSBzZXR0aW5ncy5ncmFwaF9oZWlnaHQgLSAoZ3JhcGgubWFyZ2luLnRvcCArIGdyYXBoLm1hcmdpbi5ib3R0b20pOwogICAgICAgICAgICB1cGRhdGVfbWluaW1pemUoKTsKICAgICAgICAgICAgaW5pdF91aSgpOwoKICAgICAgICAgICAgLy8gSW5zdGFsbCBldmVudCBoYW5kbGVycwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcubGluay5vcGVuLCAubGluay5taW5pbWl6ZScpLm9uKCdjbGljaycsIHRvZ2dsZV9taW5pbWl6ZSk7CiAgICAgICAgICAgIHRpbWVsaW5lLmZpbmQoJy5saW5rLnJlZnJlc2gnKS5vbignY2xpY2snLCBmZXRjaF9hbmRfdXBkYXRlKTsKICAgICAgICAgICAgdGltZWxpbmUuZmluZCgnLmxpbmsuc2V0dGluZ3MnKS5vbignY2xpY2snLCBvcGVuX3NldHRpbmdzKTsKICAgICAgICAgICAgdGltZWxpbmUuZmluZCgnLmJhcl9zdHlsZSBzZWxlY3QnKS5vbignY2hhbmdlJywgYmFyX3N0eWxlX2NoYW5nZWQpOwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcucmFuZ2VfaW5wdXQnKS5vbignaW5wdXQgY2hhbmdlJywgZGF5c19jaGFuZ2VkKTsKICAgICAgICAgICAgdGltZWxpbmUuZmluZCgnLnJldmlld19pbmZvPi5pbm5lcicpLm9uKCdtb3VzZWVudGVyJywgJy5pdGVtX2xpc3QgPiBsaScsIGl0ZW1faG92ZXIpOwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcucmV2aWV3X2luZm8+LmlubmVyJykub24oJ21vdXNlbGVhdmUnLCAnLml0ZW1fbGlzdCcsIGl0ZW1faG92ZXIpOwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcucmV2aWV3X2luZm8+LmlubmVyJykub24oJ2NsaWNrJywgJy5kZXRhaWxfYnV0dG9ucyBidXR0b24nLCBkZXRhaWxfYnV0dG9uX2NsaWNrZWQpOwogICAgICAgICAgICB0aW1lbGluZS5maW5kKCcucmV2aWV3X2luZm8+LmlubmVyJykub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtyZXR1cm4gZmFsc2U7fSk7CiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB3aW5kb3dfcmVzaXplZCk7CiAgICAgICAgfQogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBUb2dnbGUgd2hldGhlciB0aGUgdGltZWxpbmUgaXMgbWluaW1pemVkLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiB0b2dnbGVfbWluaW1pemUoKSB7CiAgICAgICAgc2V0dGluZ3MubWluaW1pemVkID0gIXNldHRpbmdzLm1pbmltaXplZDsKICAgICAgICB1cGRhdGVfbWluaW1pemUoKTsKICAgICAgICBzYXZlX3NldHRpbmdzKCk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEhpZGUgb3IgdW5oaWRlIHRoZSB0aW1lbGluZSB3aGVuIHRoZSB1c2VyIG1pbmltaXplcy9yZXN0b3Jlcy4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gdXBkYXRlX21pbmltaXplKCkgewogICAgICAgIHZhciB0aW1lbGluZSA9ICQoJyN0aW1lbGluZScpOwogICAgICAgIHZhciBpc19taW4gPSB0aW1lbGluZS5oYXNDbGFzcygnbWluJyk7CiAgICAgICAgaWYgKHNldHRpbmdzLm1pbmltaXplZCAmJiAhaXNfbWluKSB7CiAgICAgICAgICAgIHRpbWVsaW5lLmFkZENsYXNzKCdtaW4nKTsKICAgICAgICB9IGVsc2UgaWYgKCFzZXR0aW5ncy5taW5pbWl6ZWQgJiYgaXNfbWluKSB7CiAgICAgICAgICAgIHRpbWVsaW5lLnJlbW92ZUNsYXNzKCdtaW4nKTsKICAgICAgICB9CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFVwZGF0ZSB0aGUgdGltZWxpbmUgYWZ0ZXIgdGhlIHVzZXIgY2hhbmdlcyB0aGUgbnVtYmVyIG9mIGRheXMgdG8gZGlzcGxheS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZGF5c19jaGFuZ2VkKCkgewogICAgICAgIHZhciBkYXlzID0gTnVtYmVyKCQoJyN0aW1lbGluZSAucmFuZ2VfaW5wdXQnKS52YWwoKSk7CiAgICAgICAgaWYgKGRheXMgPT09IHNldHRpbmdzLmRheXMpIHJldHVybjsKICAgICAgICBzZXR0aW5ncy5kYXlzID0gZGF5czsKICAgICAgICB1cGRhdGVfc2xpZGVyX2RheXMoKTsKICAgICAgICBidW5kbGVfYnlfdGltZXNsb3QoKTsKICAgICAgICB1cGRhdGVfc2xpZGVyX3Jldmlld3MoKTsKICAgICAgICBkcmF3X3RpbWVsaW5lKCk7CiAgICAgICAgc2F2ZV9zZXR0aW5ncygpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBIYW5kbGVyIGZvciB3aGVuIHVzZXIgY2hhbmdlcyB0aGUgQmFyIFN0eWxlLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBiYXJfc3R5bGVfY2hhbmdlZCgpIHsKICAgICAgICBzZXR0aW5ncy5iYXJfc3R5bGUgPSAkKCcjdGltZWxpbmUgLmJhcl9zdHlsZSBzZWxlY3QgOnNlbGVjdGVkJykuYXR0cignbmFtZScpOwogICAgICAgIGRyYXdfdGltZWxpbmUoKTsKICAgICAgICBzYXZlX3NldHRpbmdzKCk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEhhbmRsZXIgZm9yIHdoZW4gdXNlciBjbGlja3MgJ1NhdmUnIGluIHRoZSBzZXR0aW5ncyB3aW5kb3cuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHNldHRpbmdzX3NhdmVkKCkgewogICAgICAgIHNldHRpbmdzID0gd2tvZi5zZXR0aW5ncy50aW1lbGluZTsKICAgICAgICBwbGFjZV90aW1lbGluZShmYWxzZSAvKiBmaXJzdF90aW1lICovKTsKICAgICAgICBpbml0X3VpKCk7CiAgICAgICAgYnVuZGxlX2J5X3RpbWVzbG90KCk7CiAgICAgICAgZHJhd190aW1lbGluZSgpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBJbml0aWFsaXplIHRoZSB1c2VyIGludGVyZmFjZS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaW5pdF91aSgpIHsKICAgICAgICBpbml0X3NsaWRlcigpOwogICAgICAgIGlmIChzZXR0aW5ncy5zaG93X2Jhcl9zdHlsZV9kcm9wZG93bikgewogICAgICAgICAgICAkKCcjdGltZWxpbmUgLmJhcl9zdHlsZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKCcjdGltZWxpbmUgLmJhcl9zdHlsZScpLmFkZENsYXNzKCdoaWRkZW4nKTsKICAgICAgICB9CiAgICAgICAgJCgnI3RpbWVsaW5lIC5iYXJfc3R5bGUgb3B0aW9uW25hbWU9Iicrc2V0dGluZ3MuYmFyX3N0eWxlKyciXScpLnByb3AoJ3NlbGVjdGVkJyx0cnVlKTsKICAgICAgICAkKCcjdGltZWxpbmUnKS5hdHRyKCdkYXRhLWRldGFpbCcsIHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMpOwogICAgICAgICQoJyN0aW1lbGluZSAucmV2aWV3X2luZm8nKS5hdHRyKCdkYXRhLW1vZGUnLCBzZXR0aW5ncy5yZXZpZXdfZGV0YWlsc19zdW1tYXJ5KTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSW5pdGlhbGl6ZSB0aGUgc2NhbGUgc2xpZGVyLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBpbml0X3NsaWRlcigpIHsKICAgICAgICB2YXIgcmFuZ2UgPSAkKCcjdGltZWxpbmUgLnJhbmdlX2lucHV0Jyk7CiAgICAgICAgaWYgKHNldHRpbmdzLmRheXMgPiBzZXR0aW5ncy5tYXhfZGF5cykgewogICAgICAgICAgICBzZXR0aW5ncy5kYXlzID0gc2V0dGluZ3MubWF4X2RheXM7CiAgICAgICAgICAgIHNhdmVfc2V0dGluZ3MoKTsKICAgICAgICB9CiAgICAgICAgcmFuZ2UuYXR0cignbWF4Jywgc2V0dGluZ3MubWF4X2RheXMpOwogICAgICAgIHJhbmdlLmF0dHIoJ3ZhbHVlJywgc2V0dGluZ3MuZGF5cyk7CiAgICAgICAgdXBkYXRlX3NsaWRlcl9kYXlzKCk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFVwZGF0ZSB0aGUgJ3Jldmlld3MnIHRleHQgb2YgdGhlIHNjYWxlIHNsaWRlci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gdXBkYXRlX3NsaWRlcl9yZXZpZXdzKCkgewogICAgICAgIHZhciByZXZpZXdfY291bnQgPSAkKCcjdGltZWxpbmUgLnJhbmdlX3Jldmlld3MnKTsKICAgICAgICByZXZpZXdfY291bnQudGV4dChncmFwaC50b3RhbF9yZXZpZXdzKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gVXBkYXRlIHRoZSAnZGF5cycgdGV4dCBvZiB0aGUgc2NhbGUgc2xpZGVyLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiB1cGRhdGVfc2xpZGVyX2RheXMoKSB7CiAgICAgICAgdmFyIGRheXMgPSBzZXR0aW5ncy5kYXlzOwogICAgICAgIHZhciBwZXJpb2QgPSAkKCcjdGltZWxpbmUgLnJhbmdlX2RheXMnKTsKICAgICAgICBpZiAoZGF5cyA8PSAxKSB7CiAgICAgICAgICAgIHBlcmlvZC50ZXh0KChkYXlzKjI0KSsnIGhvdXJzJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGVyaW9kLnRleHQoZGF5cy50b0ZpeGVkKDIpKycgZGF5cycpOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU2F2ZSB0aGUgc2NyaXB0IHNldHRpbmdzIChhZnRlciBhIDUwMG1zIGRlbGF5KS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgdmFyIHNhdmVfZGVsYXlfdGltZXI7CiAgICBmdW5jdGlvbiBzYXZlX3NldHRpbmdzKCkgewogICAgICAgIGlmIChzYXZlX2RlbGF5X3RpbWVyICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dChzYXZlX2RlbGF5X3RpbWVyKTsKICAgICAgICBzYXZlX2RlbGF5X3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICB3a29mLlNldHRpbmdzLnNhdmUoJ3RpbWVsaW5lJyk7CiAgICAgICAgfSwgNTAwKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSGFuZGxlciBmb3IgcmVzaXppbmcgdGhlIHBhbmVsIGJ5IGRyYWdnaW5nIHRoZSBib3R0b20gb2YgdGhlIGdyYXBoLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHJlc2l6ZV9wYW5lbChlKSB7CiAgICAgICAgaWYgKGUuYnV0dG9uICE9PSAwKSByZXR1cm47CiAgICAgICAgdmFyIHBhbmVsID0gJCgnI3RpbWVsaW5lID4gLmdyYXBoX3BhbmVsJyk7CiAgICAgICAgdmFyIHN0YXJ0X3kgPSBlLnBhZ2VZOwogICAgICAgIHZhciBzdGFydF9oZWlnaHQgPSBzZXR0aW5ncy5ncmFwaF9oZWlnaHQ7CiAgICAgICAgJCgnYm9keScpCiAgICAgICAgLmFkZENsYXNzKCdtdXRlX3BvcG92ZXInKQogICAgICAgIC5vbignbW91c2Vtb3ZlLnRpbWVsaW5lX3Jlc2l6ZSB0b3VjaG1vdmUudGltZWxpbmVfcmVzaXplJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBzdGFydF9oZWlnaHQgKyAoZS5wYWdlWSAtIHN0YXJ0X3kpOwogICAgICAgICAgICBpZiAoaGVpZ2h0IDwgZ3JhcGgueV9heGlzLm1pbl9oZWlnaHQpIGhlaWdodCA9IGdyYXBoLnlfYXhpcy5taW5faGVpZ2h0OwogICAgICAgICAgICBpZiAoaGVpZ2h0ID4gZ3JhcGgueV9heGlzLm1heF9oZWlnaHQpIGhlaWdodCA9IGdyYXBoLnlfYXhpcy5tYXhfaGVpZ2h0OwogICAgICAgICAgICBzZXR0aW5ncy5ncmFwaF9oZWlnaHQgPSBoZWlnaHQ7CiAgICAgICAgICAgIGdyYXBoLnlfYXhpcy5oZWlnaHQgPSBoZWlnaHQgLSAoZ3JhcGgubWFyZ2luLnRvcCArIGdyYXBoLm1hcmdpbi5ib3R0b20pOwogICAgICAgICAgICBkcmF3X3RpbWVsaW5lKCk7CiAgICAgICAgfSkKICAgICAgICAub24oJ21vdXNldXAudGltZWxpbmVfcmVzaXplIHRvdWNoZW5kLnRpbWVsaW5lX3Jlc2l6ZScsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICBzYXZlX3NldHRpbmdzKCk7CiAgICAgICAgICAgICQoJ2JvZHknKS5vZmYoJy50aW1lbGluZV9yZXNpemUnKS5yZW1vdmVDbGFzcygnbXV0ZV9wb3BvdmVyJyk7CiAgICAgICAgfSk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEV2ZW50IGhhbmRsZXIgZm9yIGhvdmVyaW5nIG92ZXIgdGhlIHRpbWUgc2NhbGUgZm9yIGhpZ2hsaWdodGluZy4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICB2YXIgaGlnaGxpZ2h0ID0ge3N0YXJ0OjAsIGVuZDowLCBkcmFnZ2luZzpmYWxzZSwgaGlnaGxpZ2h0ZWQ6IGZhbHNlfTsKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodF9ob3ZlcihlKSB7CiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMgPT09ICdub25lJykgcmV0dXJuOwogICAgICAgIGlmIChoaWdobGlnaHQuZHJhZ2dpbmcpIHJldHVybiB0cnVlOwogICAgICAgIHZhciBidW5kbGVfaWR4ID0gbmVhcmVzdF9idW5kbGUoZS5wYWdlWCk7CiAgICAgICAgdmFyIHg7CiAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnbW91c2VlbnRlcic6CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ21vdXNlbW92ZSc6CiAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0LmhpZ2hsaWdodGVkKSByZXR1cm47CiAgICAgICAgICAgICAgICB4ID0gYnVuZGxlX3RvX3goYnVuZGxlX2lkeCk7CiAgICAgICAgICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCAubWFya2VyLnN0YXJ0JykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnK3grJywwKScpOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdtb3VzZWxlYXZlJzoKICAgICAgICAgICAgICAgIGlmIChoaWdobGlnaHQuZHJhZ2dpbmcgfHwgaGlnaGxpZ2h0LmhpZ2hsaWdodGVkKSByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIGhpZGVfaGlnaGxpZ2h0KCk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ3RvdWNoc3RhcnQnOgogICAgICAgICAgICBjYXNlICdtb3VzZWRvd24nOgogICAgICAgICAgICAgICAgaWYgKGUuYnV0dG9uICE9PSAwKSByZXR1cm47CiAgICAgICAgICAgICAgICBoaWdobGlnaHQuaGlnaGxpZ2h0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgaGlnaGxpZ2h0LmRyYWdnaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGhpZ2hsaWdodC5zdGFydCA9IGJ1bmRsZV9pZHg7CiAgICAgICAgICAgICAgICB4ID0gYnVuZGxlX3RvX3goYnVuZGxlX2lkeCk7CiAgICAgICAgICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCAubWFya2VyLnN0YXJ0JykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnK3grJywwKScpOwogICAgICAgICAgICAgICAgJCgnI3RpbWVsaW5lIC5oaWdobGlnaHQgLm1hcmtlci5lbmQnKS5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKC0xMDAsMCknKTsKICAgICAgICAgICAgICAgICQoJyN0aW1lbGluZSAuaGlnaGxpZ2h0IHJlY3QubWFya2VyJykuYXR0cignd2lkdGgnLDApLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyt4KycsMCknKTsKICAgICAgICAgICAgICAgICQoJ2JvZHknKS5vbignbW91c2Vtb3ZlLnRpbWVsaW5lX2hpZ2hsaWdodCcsIGhpZ2hsaWdodF9kcmFnKTsKICAgICAgICAgICAgICAgICQoJ2JvZHknKS5vbigndG91Y2hlbmQudGltZWxpbmVfaGlnaGxpZ2h0IG1vdXNldXAudGltZWxpbmVfaGlnaGxpZ2h0JywgaGlnaGxpZ2h0X3JlbGVhc2UpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFdmVuIGhhbmRsZXIgZm9yIGRyYWdnaW5nIHdoZW4gaGlnaGxpZ2h0aW5nIGEgdGltZSByYW5nZS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBoaWdobGlnaHRfZHJhZyhlKSB7CiAgICAgICAgdmFyIGJ1bmRsZV9pZHggPSBuZWFyZXN0X2J1bmRsZShlLnBhZ2VYKTsKICAgICAgICBoaWdobGlnaHQuZW5kID0gYnVuZGxlX2lkeDsKICAgICAgICB2YXIgeDEgPSBidW5kbGVfdG9feChoaWdobGlnaHQuc3RhcnQpOwogICAgICAgIHZhciB4MiA9IGJ1bmRsZV90b194KGhpZ2hsaWdodC5lbmQpOwogICAgICAgICQoJyN0aW1lbGluZSAuaGlnaGxpZ2h0IC5tYXJrZXIuZW5kJykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnK3gyKycsMCknKTsKICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCByZWN0Lm1hcmtlcicpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJytNYXRoLm1pbih4MSx4MikrJy41LDAuNSknKS5hdHRyKCd3aWR0aCcsTWF0aC5hYnMoeDIteDEpKTsKICAgICAgICBzaG93X3Jldmlld19pbmZvKGZhbHNlIC8qIHN0aWNreSAqLyk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEV2ZW50IGhhbmRsZXIgZm9yIHRoZSBlbmQgb2YgYSAnZHJhZycgd2hlbiBoaWdobGlnaHRpbmcgYSB0aW1lIHJhbmdlLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGhpZ2hsaWdodF9yZWxlYXNlKGUpIHsKICAgICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjsKICAgICAgICBoaWdobGlnaHQuZHJhZ2dpbmcgPSBmYWxzZTsKICAgICAgICAkKCdib2R5Jykub2ZmKCcudGltZWxpbmVfaGlnaGxpZ2h0Jyk7CiAgICAgICAgdmFyIGJ1bmRsZV9pZHggPSBuZWFyZXN0X2J1bmRsZShlLnBhZ2VYKTsKICAgICAgICBoaWdobGlnaHQuZW5kID0gYnVuZGxlX2lkeDsKICAgICAgICBpZiAoaGlnaGxpZ2h0LnN0YXJ0ID09PSBoaWdobGlnaHQuZW5kKSB7CiAgICAgICAgICAgIGhpZGVfaGlnaGxpZ2h0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFyIHgxID0gYnVuZGxlX3RvX3goTWF0aC5taW4oaGlnaGxpZ2h0LnN0YXJ0LCBoaWdobGlnaHQuZW5kKSk7CiAgICAgICAgICAgIHZhciB4MiA9IGJ1bmRsZV90b194KE1hdGgubWF4KGhpZ2hsaWdodC5zdGFydCwgaGlnaGxpZ2h0LmVuZCkpOwogICAgICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCAubWFya2VyLnN0YXJ0JykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnK3gxKycsMCknKTsKICAgICAgICAgICAgJCgnI3RpbWVsaW5lIC5oaWdobGlnaHQgLm1hcmtlci5lbmQnKS5hdHRyKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKCcreDIrJywwKScpOwogICAgICAgICAgICAkKCcjdGltZWxpbmUgLmhpZ2hsaWdodCByZWN0Lm1hcmtlcicpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyt4MSsnLjUsMC41KScpLmF0dHIoJ3dpZHRoJyx4Mi14MSk7CiAgICAgICAgICAgIGhpZ2hsaWdodC5oaWdobGlnaHRlZCA9IHRydWU7CiAgICAgICAgICAgIHNob3dfcmV2aWV3X2luZm8odHJ1ZSAvKiBzdGlja3kgKi8pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEhpZGUgdGhlIHRpbWVsaW5lJ3MgaGlnaGxpZ2h0IGN1cnNvcnMuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaGlkZV9oaWdobGlnaHQoKSB7CiAgICAgICAgaGlnaGxpZ2h0LnN0YXJ0ID0gLTE7CiAgICAgICAgaGlnaGxpZ2h0LmVuZCA9IC0xOwogICAgICAgIGhpZ2hsaWdodC5oaWdobGlnaHRlZCA9IGZhbHNlOwogICAgICAgICQoJyN0aW1lbGluZSAuaGlnaGxpZ2h0IHJlY3QubWFya2VyJykuYXR0cignd2lkdGgnLDApLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTEwMCwwLjUpJyk7CiAgICAgICAgJCgnI3RpbWVsaW5lIC5oaWdobGlnaHQgLm1hcmtlci5zdGFydCcpLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoLTEwMCwwKScpOwogICAgICAgICQoJyN0aW1lbGluZSAuaGlnaGxpZ2h0IC5tYXJrZXIuZW5kJykuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgtMTAwLDApJyk7CiAgICAgICAgaGlkZV9yZXZpZXdfaW5mbygpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBuZWFyZXN0X2J1bmRsZSgpCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gbmVhcmVzdF9idW5kbGUoeCkgewogICAgICAgIHZhciBwYW5lbF9sZWZ0ID0gTWF0aC5mbG9vcigkKCcjdGltZWxpbmUgLmdyYXBoX3BhbmVsJykub2Zmc2V0KCkubGVmdCk7CiAgICAgICAgeCAtPSBwYW5lbF9sZWZ0ICsgZ3JhcGgubWFyZ2luLmxlZnQ7CiAgICAgICAgaWYgKHggPCAwKSB4ID0gMDsKICAgICAgICB2YXIgdGljID0geCAqIGdyYXBoLnhfYXhpcy5tYXhfaG91cnMgLyBncmFwaC54X2F4aXMud2lkdGg7CiAgICAgICAgdmFyIGJ1bmRsZV9pZHggPSBncmFwaC50aW1lc2xvdHNbTWF0aC5taW4oZ3JhcGgueF9heGlzLm1heF9ob3Vycy0xLCBNYXRoLmZsb29yKHRpYykpXTsKICAgICAgICB2YXIgYnVuZGxlID0gZ3JhcGguYnVuZGxlc1tidW5kbGVfaWR4XTsKICAgICAgICB2YXIgc3RhcnQgPSBidW5kbGUuc3RhcnRfdGltZTsKICAgICAgICB2YXIgZW5kID0gYnVuZGxlLmVuZF90aW1lOwogICAgICAgIHJldHVybiAodGljIDw9ICgoc3RhcnQrZW5kKS8yKSA/IGJ1bmRsZV9pZHggOiBidW5kbGVfaWR4KzEpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBDb252ZXJ0IGEgYnVuZGxlX2lkeCB0byBhIGdyYXBoIGhvdXIgb2Zmc2V0LgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGJ1bmRsZV90b190aWMoYnVuZGxlX2lkeCkgewogICAgICAgIGlmIChidW5kbGVfaWR4ID49IGdyYXBoLmJ1bmRsZXMubGVuZ3RoKSByZXR1cm4gZ3JhcGgueF9heGlzLm1heF9ob3VyczsKICAgICAgICByZXR1cm4gZ3JhcGguYnVuZGxlc1tidW5kbGVfaWR4XS5zdGFydF90aW1lOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBDb252ZXJ0IGEgYnVuZGxlX2lkeCB0byBhIGdyYXBoIFggb2Zmc2V0LgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGJ1bmRsZV90b194KGJ1bmRsZV9pZHgpIHsKICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChidW5kbGVfdG9fdGljKGJ1bmRsZV9pZHgpICogZ3JhcGgudGljX3NwYWNpbmcpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBPcGVuIHRoZSBzZXR0aW5ncyBkaWFsb2cKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gb3Blbl9zZXR0aW5ncygpIHsKICAgICAgICB2YXIgY29uZmlnID0gewogICAgICAgICAgICBzY3JpcHRfaWQ6ICd0aW1lbGluZScsCiAgICAgICAgICAgIHRpdGxlOiAnVWx0aW1hdGUgVGltZWxpbmUnLAogICAgICAgICAgICBvbl9zYXZlOiBzZXR0aW5nc19zYXZlZCwKICAgICAgICAgICAgY29udGVudDogewogICAgICAgICAgICAgICAgdGFiczoge3R5cGU6J3RhYnNldCcsIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICAgICBwZ0dyYXBoOiB7dHlwZToncGFnZScsIGxhYmVsOidHcmFwaCcsIGhvdmVyX3RpcDonR3JhcGggU2V0dGluZ3MnLCBjb250ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgICAgIGdycFBsYWNlbWVudDoge3R5cGU6J2dyb3VwJywgbGFiZWw6J1BsYWNlbWVudCcsIGNvbnRlbnQ6ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50OiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonUGxhY2VtZW50IG9uIERhc2hib2FyZCcsIGRlZmF1bHQ6J2JlZm9yZV9uZXh0cmV2aWV3JywgY29udGVudDp7YmVmb3JlX25leHRyZXZpZXc6J0JlZm9yZSAiTmV4dCBSZXZpZXciJyxhZnRlcl9uZXh0cmV2aWV3OidBZnRlciAiTmV4dCBSZXZpZXciJyxhZnRlcl9zcnNwcm9ncmVzczonQWZ0ZXIgIlNSUyBQcm9ncmVzcyInLGFmdGVyX2xldmVscHJvZ3Jlc3M6J0FmdGVyICJMZXZlbCBQcm9ncmVzcyInLGFmdGVyX3VubG9ja3M6J0FmdGVyICJOZXcgVW5sb2NrcyInLGFmdGVyX3JlY2VudGNoYXQ6J0FmdGVyIFJlY2VudCBGb3J1bSBBY3Rpdml0eSd9LCBob3Zlcl90aXA6J0Nob29zZSB3aGVyZSB0aGUgdGltZWxpbmUgd2lsbFxuYmUgcG9zaXRpb25lZCBvbiB0aGUgZGFzaGJvYXJkLid9LAogICAgICAgICAgICAgICAgICAgICAgICB9fSwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JwVGltZToge3R5cGU6J2dyb3VwJywgbGFiZWw6J1RpbWUnLCBjb250ZW50OnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfZm9ybWF0OiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonVGltZSBGb3JtYXQnLCBkZWZhdWx0OicxMmhvdXInLCBjb250ZW50OnsnMTJob3VyJzonMTItaG91cicsJzI0aG91cic6JzI0LWhvdXInLCAnaG91cnNfb25seSc6ICdIb3VycyBvbmx5J30sIGhvdmVyX3RpcDonRGlzcGxheSB0aW1lIGluIDEyIG9yIDI0LWhvdXIgZm9ybWF0LCBvciBob3Vycy1mcm9tLW5vdy4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heF9kYXlzOiB7dHlwZTonbnVtYmVyJywgbGFiZWw6J1NsaWRlciBSYW5nZSBNYXggKGRheXMpJywgbWluOjEsIG1heDoxMjUsIGRlZmF1bHQ6NywgaG92ZXJfdGlwOidDaG9vc2UgbWF4aW11bSByYW5nZSBvZiB0aGUgdGltZWxpbmUgc2xpZGVyIChpbiBkYXlzKS4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICAgICAgICAgIGdycEJhcnM6IHt0eXBlOidncm91cCcsIGxhYmVsOidCYXJzJywgY29udGVudDp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYmFyX3dpZHRoOiB7dHlwZTonbnVtYmVyJywgbGFiZWw6J01heCBCYXIgV2lkdGggKHBpeGVscyknLCBkZWZhdWx0OjAsIGhvdmVyX3RpcDonU2V0IHRoZSBtYXhpbXVtIGJhciB3aWR0aCAoaW4gcGl4ZWxzKS5cbigwID0gdW5saW1pdGVkKSd9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2Jhcl9oZWlnaHQ6IHt0eXBlOidudW1iZXInLCBsYWJlbDonTWF4IEdyYXBoIEhlaWdodCAocmV2aWV3cyknLCBkZWZhdWx0OjAsIGhvdmVyX3RpcDonU2V0IHRoZSBtYXhpbXVtIGdyYXBoIGhlaWdodCAoaW4gcmV2aWV3cykuXG4oMCA9IHVubGltaXRlZClcblVzZWZ1bCBmb3Igd2hlbiB5b3UgaGF2ZSBhIGh1Z2UgYmFja2xvZy4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX2Jhcl9oZWlnaHQ6IHt0eXBlOidjaGVja2JveCcsIGxhYmVsOidGb3JjZSBHcmFwaCB0byBNYXggSGVpZ2h0JywgZGVmYXVsdDpmYWxzZSwgaG92ZXJfdGlwOidGb3JjZSB0aGUgZ3JhcGggaGVpZ2h0IHRvIGFsd2F5cyBiZSB0aGUgTWF4IEdyYXBoIEhlaWdodC5cblVzZWZ1bCB3aGVuIGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgcmV2aWV3cyB5b3UgZG8gaW4gb25lIHNpdHRpbmcuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJfc3R5bGU6IHt0eXBlOidkcm9wZG93bicsIGxhYmVsOidCYXIgU3R5bGUnLCBkZWZhdWx0OidpdGVtX3R5cGUnLCBjb250ZW50OnsnY291bnQnOidSZXZpZXcgQ291bnQnLCdpdGVtX3R5cGUnOidJdGVtIFR5cGUnLCdzcnNfc3RhZ2UnOidTUlMgTGV2ZWwnLCdsZXZlbCc6J0xldmVsJ30sIGhvdmVyX3RpcDonQ2hvb3NlIGhvdyBiYXJzIGFyZSBzdWJkaXZpZGVkLid9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JzX2N1cnJfbmV4dDoge3R5cGU6J2Ryb3Bkb3duJywgbGFiZWw6J0N1cnJlbnQgLyBOZXh0IFNSUyBMZXZlbCcsIGRlZmF1bHQ6J2N1cnInLCBjb250ZW50OnsnY3Vycic6J0N1cnJlbnQgU1JTIExldmVsJywnbmV4dCc6J05leHQgU1JTIExldmVsJ30sIGhvdmVyX3RpcDonU2VsZWN0IHdoZXRoZXIgU1JTIGlzIGNvbG9yLWNvZGVkIGJ5XG5jdXJyZW50IFNSUyBsZXZlbCwgb3IgbmV4dCBTUlMgbGV2ZWwuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIH19LAogICAgICAgICAgICAgICAgICAgICAgICBncnBNYXJrZXJzOiB7dHlwZTonZ3JvdXAnLCBsYWJlbDonTWFya2VycycsIGNvbnRlbnQ6ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9sZXZlbF9tYXJrZXJzOiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonQ3VycmVudCBMZXZlbCBNYXJrZXJzJywgZGVmYXVsdDoncmt2JywgY29udGVudDp7J25vbmUnOidOb25lJywncmsnOidSYWQgKyBLYW4nLCdya3YnOidSYWQgKyBLYW4gKyBWb2MnfSwgaG92ZXJfdGlwOidTZWxlY3Qgd2hpY2ggaXRlbSB0eXBlcyB3aWxsIHRyaWdnZXIgYSBDdXJyZW50IExldmVsXG5tYXJrZXIgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZ3JhcGguJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXJuX21hcmtlcnM6IHt0eXBlOidkcm9wZG93bicsIGxhYmVsOidCdXJuIE1hcmtlcnMnLCBkZWZhdWx0OidzaG93JywgY29udGVudDp7J3Nob3cnOidTaG93JywnaGlkZSc6J0hpZGUnfSwgaG92ZXJfdGlwOidTZWxlY3Qgd2hldGhlciBCdXJuIG1hcmtlcnMgYXJlIHNob3duXG5hdCB0aGUgYm90dG9tIG9mIHRoZSBncmFwaC4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICAgICAgcGdSZXZpZXdEZXRhaWxzOiB7dHlwZToncGFnZScsIGxhYmVsOidSZXZpZXcgRGV0YWlscycsIGhvdmVyX3RpcDonUmV2aWV3IERldGFpbHMgUG9wLXVwJywgY29udGVudDogewogICAgICAgICAgICAgICAgICAgICAgICBzaG93X3Jldmlld19kZXRhaWxzOiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonU2hvdyBSZXZpZXcgRGV0YWlscycsIGRlZmF1bHQ6J2Z1bGwnLCBjb250ZW50Onsnbm9uZSc6J05vbmUnLCdzdW1tYXJ5JzonU3VtbWFyeScsJ2l0ZW1fbGlzdCc6J0l0ZW0gTGlzdCcsJ2Z1bGwnOidGdWxsIEl0ZW0gRGV0YWlscyd9LCBob3Zlcl90aXA6J0Nob29zZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIHRvIGRpc3BsYXlcbndoZW4gYSBiYXIgb3IgdGltZSByYW5nZSBpcyBzZWxlY3RlZC4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgcmV2aWV3X2RldGFpbHNfc3VtbWFyeToge3R5cGU6J2Ryb3Bkb3duJywgbGFiZWw6J1JldmlldyBEZXRhaWxzIFN1bW1hcnknLCBkZWZhdWx0OidpdGVtX3R5cGUnLCBjb250ZW50OnsnY291bnQnOidSZXZpZXcgQ291bnQnLCdpdGVtX3R5cGUnOidJdGVtIFR5cGUnLCdzcnNfc3RhZ2UnOidTUlMgTGV2ZWwnLCdsZXZlbCc6J0xldmVsJ30sIGhvdmVyX3RpcDonQ2hvb3NlIHdoaWNoIHN1bW1hcnkgaW5mb3JtYXRpb24gdG9cbmRpc3BsYXkgb24gdGhlIFJldmlldyBEZXRhaWxzIHBvcC11cC4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgcmV2aWV3X2RldGFpbHNfYnV0dG9uczoge3R5cGU6J2NoZWNrYm94JywgbGFiZWw6J1Nob3cgUmV2aWV3IERldGFpbHMgQnV0dG9ucycsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidTaG93IGNvbmZpZ3VyYXRpb24gYnV0dG9ucyBvbiBSZXZpZXcgRGV0YWlscyBwb3AtdXAuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfYmFyX3N0eWxlX2Ryb3Bkb3duOiB7dHlwZTonY2hlY2tib3gnLCBsYWJlbDonU2hvdyBCYXIgU3R5bGUgRHJvcGRvd24nLCBkZWZhdWx0OmZhbHNlLCBob3Zlcl90aXA6J1Nob3cgdGhlIEJhciBTdHlsZSBkcm9wZG93biBhYm92ZSB0aGUgdGltZWxpbmUuJ30sCiAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICB9fSwKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdmFyIHNldHRpbmdzX2RpYWxvZyA9IG5ldyB3a29mLlNldHRpbmdzKGNvbmZpZyk7CiAgICAgICAgc2V0dGluZ3NfZGlhbG9nLm9wZW4oKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgaG91cnMgcGVyIGJhci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZ2V0X2hvdXJzX3Blcl9iYXIoKSB7CiAgICAgICAgZ3JhcGgueF9heGlzLndpZHRoID0gZ3JhcGguZWxlbS53aWR0aCgpIC0gZ3JhcGgubWFyZ2luLmxlZnQ7CiAgICAgICAgZ3JhcGgueF9heGlzLm1heF9ob3VycyA9IE1hdGgucm91bmQoc2V0dGluZ3MuZGF5cyAqIDI0KTsKCiAgICAgICAgLy8gTm8gbW9yZSB0aGFuIDEgbGFiZWwgZXZlcnkgNTAgcGl4ZWxzCiAgICAgICAgdmFyIG1pbl9waXhlbHNfcGVyX2xhYmVsID0gNTA7CiAgICAgICAgZ3JhcGgubWluX2hvdXJzX3Blcl9sYWJlbCA9IG1pbl9waXhlbHNfcGVyX2xhYmVsICogZ3JhcGgueF9heGlzLm1heF9ob3VycyAvIGdyYXBoLnhfYXhpcy53aWR0aDsKICAgICAgICB4c2NhbGUuaWR4ID0gMDsKICAgICAgICB3aGlsZSAoKHhzY2FsZS5ob3Vyc19wZXJfbGFiZWxbeHNjYWxlLmlkeF0gPD0gZ3JhcGgubWluX2hvdXJzX3Blcl9sYWJlbCkgJiYKICAgICAgICAgICAgICAgKHhzY2FsZS5pZHggPCB4c2NhbGUuaG91cnNfcGVyX2xhYmVsLmxlbmd0aC0xKSkgewogICAgICAgICAgICB4c2NhbGUuaWR4Kys7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4geHNjYWxlLmJ1bmRsZV9jaG9pY2VzW3hzY2FsZS5pZHhdOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBNYXAgbGV0dGVycyBpbiB0aGUgeHNjYWxlIGNoYXJ0IHRvIGNvcnJlc3BvbmRpbmcgbGFiZWwtZ2VuZXJhdGluZyBmdW5jdGlvbnMuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBsYWJlbF9mdW5jdGlvbnMgPSB7CiAgICAgICAgJ20nOiBtb250aF9sYWJlbCwKICAgICAgICAndyc6IHdlZWtfbGFiZWwsCiAgICAgICAgJ0QnOiBtZGF5X2xhYmVsLAogICAgICAgICdkJzogZGF5X2xhYmVsLAogICAgICAgICdoJzogaG91cl9sYWJlbCwKICAgICAgICAnLSc6IG5vX2xhYmVsLAogICAgfTsKCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRnVuY3Rpb25zIGZvciBnZW5lcmF0aW5nIHRpbWUtc2NhbGUgbGFiZWxzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIG1vbnRoX2xhYmVsKGRhdGUsIHF0eSwgdXNlX3Nob3J0KSB7CiAgICAgICAgaWYgKGRhdGUuZ2V0SG91cnMoKSAhPT0gMCB8fCBkYXRlLmdldERhdGUoKSAhPT0gMSkgcmV0dXJuOwogICAgICAgIHJldHVybiBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01heScsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddW2RhdGUuZ2V0TW9udGgoKV07CiAgICB9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHdlZWtfbGFiZWwoZGF0ZSwgcXR5LCB1c2Vfc2hvcnQpIHsKICAgICAgICBpZiAoZGF0ZS5nZXRIb3VycygpICE9PSAwIHx8IGRhdGUuZ2V0RGF5KCkgIT09IDApIHJldHVybjsKICAgICAgICByZXR1cm4gKHVzZV9zaG9ydCA/ICdTJyA6ICdTdW4nKTsKICAgIH0KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gbWRheV9sYWJlbChkYXRlLCBxdHksIHVzZV9zaG9ydCkgewogICAgICAgIGlmIChkYXRlLmdldEhvdXJzKCkgIT09IDApIHJldHVybjsKICAgICAgICB2YXIgbWRheSA9IGRhdGUuZ2V0RGF0ZSgpOwogICAgICAgIGlmIChtZGF5ICUgcXR5ICE9PSAwKSByZXR1cm47CiAgICAgICAgcmV0dXJuIG1kYXk7CiAgICB9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGRheV9sYWJlbChkYXRlLCBxdHksIHVzZV9zaG9ydCkgewogICAgICAgIGlmIChkYXRlLmdldEhvdXJzKCkgIT09IDApIHJldHVybjsKICAgICAgICB2YXIgbGFiZWwgPSBbJ1N1bicsJ01vbicsJ1R1ZScsJ1dlZCcsJ1RodScsJ0ZyaScsJ1NhdCddW2RhdGUuZ2V0RGF5KCldOwogICAgICAgIHJldHVybiAodXNlX3Nob3J0ID8gbGFiZWxbMF0gOiBsYWJlbCk7CiAgICB9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGhvdXJfbGFiZWwoZGF0ZSwgcXR5LCB1c2Vfc2hvcnQpIHsKICAgICAgICB2YXIgaGggPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgaWYgKChoaCAlIHF0eSkgIT09IDApIHJldHVybjsKICAgICAgICBpZiAoc2V0dGluZ3MudGltZV9mb3JtYXQgPT09ICcyNGhvdXInKSB7CiAgICAgICAgICAgIHJldHVybiAoJzAnK2hoKyc6MDAnKS5zbGljZSgtNSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICgoKGhoICsgMTEpICUgMTIpICsgMSkgKyAnYXAnW01hdGguZmxvb3IoaGgvMTIpXSArICdtJzsKICAgICAgICB9CiAgICB9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGhvdXJfb25seV9sYWJlbChkYXRlLCBxdHksIHVzZV9zaG9ydCwgdGljX2lkeCkgewogICAgICAgIGlmICh0aWNfaWR4ICUgcXR5ICE9PSAwKSByZXR1cm47CiAgICAgICAgcmV0dXJuIHRpY19pZHggKyAodXNlX3Nob3J0ID8gJ2gnIDogJyBocnMnKTsKICAgIH0KCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIG5vX2xhYmVsKCkge3JldHVybjt9CiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRHJhdyB0aGUgdGltZWxpbmUKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZHJhd190aW1lbGluZSgpIHsKICAgICAgICB2YXIgcGFuZWwgPSBncmFwaC5lbGVtLAogICAgICAgICAgICBwYW5lbF9oZWlnaHQgPSBzZXR0aW5ncy5ncmFwaF9oZWlnaHQsCiAgICAgICAgICAgIHBhbmVsX3dpZHRoID0gZ3JhcGguZWxlbS53aWR0aCgpLAogICAgICAgICAgICBncmFwaF9oZWlnaHQgPSBwYW5lbF9oZWlnaHQgLSAoZ3JhcGgubWFyZ2luLnRvcCArIGdyYXBoLm1hcmdpbi5ib3R0b20pOwoKICAgICAgICB2YXIgbWF0Y2ggPSB4c2NhbGUucmVkX3RpY19jaG9pY2VzW3hzY2FsZS5pZHhdLm1hdGNoKC9eKFxkKikoLikocz8pJC8pOwogICAgICAgIHZhciByZWRfcXR5ID0gTnVtYmVyKG1hdGNoWzFdKTsKICAgICAgICB2YXIgcmVkX2Z1bmMgPSBsYWJlbF9mdW5jdGlvbnNbbWF0Y2hbMl1dOwogICAgICAgIHZhciByZWRfdXNlX3Nob3J0ID0gKG1hdGNoWzNdID09PSAncycpOwoKICAgICAgICBtYXRjaCA9IHhzY2FsZS5tYWpvcl90aWNfY2hvaWNlc1t4c2NhbGUuaWR4XS5tYXRjaCgvXihcZCopKC4pKHM/KSQvKTsKICAgICAgICB2YXIgbWFqX3F0eSA9IE51bWJlcihtYXRjaFsxXSk7CiAgICAgICAgdmFyIG1hal9mdW5jID0gbGFiZWxfZnVuY3Rpb25zW21hdGNoWzJdXTsKICAgICAgICB2YXIgbWFqX3VzZV9zaG9ydCA9IChtYXRjaFszXSA9PT0gJ3MnKTsKCiAgICAgICAgbWF0Y2ggPSB4c2NhbGUubWlub3JfdGljX2Nob2ljZXNbeHNjYWxlLmlkeF0ubWF0Y2goL14oXGQqKSguKShzPykkLyk7CiAgICAgICAgdmFyIG1pbl9xdHkgPSBOdW1iZXIobWF0Y2hbMV0pOwogICAgICAgIHZhciBtaW5fZnVuYyA9IGxhYmVsX2Z1bmN0aW9uc1ttYXRjaFsyXV07CiAgICAgICAgdmFyIG1pbl91c2Vfc2hvcnQgPSAobWF0Y2hbM10gPT09ICdzJyk7CgogICAgICAgIGlmIChzZXR0aW5ncy50aW1lX2Zvcm1hdCA9PT0gJ2hvdXJzX29ubHknKSB7CiAgICAgICAgICAgIHJlZF9mdW5jID0gZnVuY3Rpb24oKSB7cmV0dXJuIDA7fTsKICAgICAgICAgICAgbWFqX2Z1bmMgPSBob3VyX29ubHlfbGFiZWw7CiAgICAgICAgICAgIG1pbl9mdW5jID0gaG91cl9vbmx5X2xhYmVsOwogICAgICAgIH0KCiAgICAgICAgdmFyIGJ1bmRsZV9zaXplID0geHNjYWxlLmJ1bmRsZV9jaG9pY2VzW3hzY2FsZS5pZHhdOwoKICAgICAgICAvLyBTdHJpbmcgZm9yIGJ1aWxkaW5nIGh0bWwuCiAgICAgICAgdmFyIGdyaWQgPSAnJzsKICAgICAgICB2YXIgbGFiZWxfeCA9IFtdOwogICAgICAgIHZhciBsYWJlbF95ID0gJyc7CiAgICAgICAgdmFyIGJhcnMgPSAnJywgYmFyX292ZXJsYXlzID0gJyc7CiAgICAgICAgdmFyIG1hcmtlcnMgPSAnJzsKCiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBEcmF3IHZlcnRpY2FsIGF4aXMgZ3JpZAoKICAgICAgICAvLyBDYWxjdWxhdGUgbWFqb3IgYW5kIG1pbm9yIHZlcnRpY2FsIGdyYXBoIHRpY3MuCiAgICAgICAgdmFyIGluY19zID0gMSwgaW5jX2wgPSA1OwogICAgICAgIHZhciBtYXhfcmV2aWV3cyA9IGdyYXBoLm1heF9yZXZpZXdzOwogICAgICAgIGlmIChzZXR0aW5ncy5tYXhfYmFyX2hlaWdodCA+IDApIHsKICAgICAgICAgICAgaWYgKHNldHRpbmdzLmZpeGVkX2Jhcl9oZWlnaHQgfHwgKG1heF9yZXZpZXdzID4gc2V0dGluZ3MubWF4X2Jhcl9oZWlnaHQpKSBtYXhfcmV2aWV3cyA9IHNldHRpbmdzLm1heF9iYXJfaGVpZ2h0OwogICAgICAgIH0KICAgICAgICB3aGlsZSAoTWF0aC5jZWlsKG1heF9yZXZpZXdzIC8gaW5jX3MpID4gNSkgewogICAgICAgICAgICBzd2l0Y2ggKGluY19zLnRvU3RyaW5nKClbMF0pIHsKICAgICAgICAgICAgICAgIGNhc2UgJzEnOiBpbmNfcyAqPSAyOyBpbmNfbCAqPSAyOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJzInOiBpbmNfcyA9IE1hdGgucm91bmQoMi41ICogaW5jX3MpOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJzUnOiBpbmNfcyAqPSAyOyBpbmNfbCAqPSA1OyBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gRHJhdyB2ZXJ0aWNhbCBncmFwaCB0aWNzICgjIG9mIFJldmlld3MpLgogICAgICAgIHZhciB0aWNfY2xhc3MsIHk7CiAgICAgICAgZ3JhcGgueV9heGlzLm1heF9yZXZpZXdzID0gTWF0aC5tYXgoMywgTWF0aC5jZWlsKG1heF9yZXZpZXdzIC8gaW5jX3MpICogaW5jX3MpOwogICAgICAgIGZvciAodmFyIHRpYyA9IDA7IHRpYyA8PSBncmFwaC55X2F4aXMubWF4X3Jldmlld3M7IHRpYyArPSBpbmNfcykgewogICAgICAgICAgICB0aWNfY2xhc3MgPSAoKHRpYyAlIGluY19sKSA9PT0gMCA/ICdtYWpvcicgOiAnbWlub3InKTsKICAgICAgICAgICAgeSA9IChncmFwaC5tYXJnaW4udG9wICsgZ3JhcGhfaGVpZ2h0KSAtIE1hdGgucm91bmQoZ3JhcGhfaGVpZ2h0ICogKHRpYyAvIGdyYXBoLnlfYXhpcy5tYXhfcmV2aWV3cykpOwogICAgICAgICAgICBpZiAodGljID4gMCkgewogICAgICAgICAgICAgICAgZ3JpZCArPSAnPHBhdGggY2xhc3M9IicrdGljX2NsYXNzKyciIGQ9Ik0nK2dyYXBoLm1hcmdpbi5sZWZ0KycsJyt5KydoJytncmFwaC54X2F4aXMud2lkdGgrJyIgLz4nOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxhYmVsX3kgKz0gJzx0ZXh0IGNsYXNzPSInK3RpY19jbGFzcysnIiB4PSInKyhncmFwaC5tYXJnaW4ubGVmdC00KSsnIiB5PSInK3krJyIgZHk9IjAuNGVtIj4nK3RpYysnPC90ZXh0Pic7CiAgICAgICAgfQoKICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIERyYXcgaG9yaXpvbnRhbCBheGlzIGdyaWQKCiAgICAgICAgZ3JhcGgudGljX3NwYWNpbmcgPSAoZ3JhcGgueF9heGlzLndpZHRoKSAvIChncmFwaC54X2F4aXMubWF4X2hvdXJzKTsgLy8gV2lkdGggb2YgYSB0aW1lIHNsb3QuCiAgICAgICAgdmFyIHByZXZfbGFiZWwgPSAtOWUxMDsKICAgICAgICBmb3IgKHZhciB0aWNfaWR4ID0gMDsgdGljX2lkeCA8IGdyYXBoLnhfYXhpcy5tYXhfaG91cnM7IHRpY19pZHgrKykgewogICAgICAgICAgICB2YXIgdGltZSA9IG5ldyBEYXRlKGdyYXBoLnN0YXJ0X3RpbWUuZ2V0VGltZSgpICsgdGljX2lkeCAqIDM2MDAwMDApOwoKICAgICAgICAgICAgdmFyIHJlZF9sYWJlbCA9IHJlZF9mdW5jKHRpbWUsIHJlZF9xdHksIHJlZF91c2Vfc2hvcnQsIHRpY19pZHgpOwogICAgICAgICAgICB2YXIgbWFqX2xhYmVsID0gbWFqX2Z1bmModGltZSwgbWFqX3F0eSwgbWFqX3VzZV9zaG9ydCwgdGljX2lkeCk7CiAgICAgICAgICAgIHZhciBtaW5fbGFiZWwgPSBtaW5fZnVuYyh0aW1lLCBtaW5fcXR5LCBtaW5fdXNlX3Nob3J0LCB0aWNfaWR4KTsKCiAgICAgICAgICAgIHZhciB4ID0gZ3JhcGgubWFyZ2luLmxlZnQgKyBNYXRoLnJvdW5kKCh0aWNfaWR4IC0gdGltZV9zaGlmdC82MCkgKiBncmFwaC50aWNfc3BhY2luZyk7CiAgICAgICAgICAgIHZhciBsYWJlbDsKICAgICAgICAgICAgaWYgKHJlZF9sYWJlbCkgewogICAgICAgICAgICAgICAgaWYgKHRpY19pZHggPiAwKSBncmlkICs9ICc8cGF0aCBjbGFzcz0icmVkdGljIiBkPSJNJyt4KycsMHYnKyhncmFwaC5tYXJnaW4udG9wK2dyYXBoX2hlaWdodC0xKSsnIiAvPic7CiAgICAgICAgICAgICAgICBpZiAoIW1hal91c2Vfc2hvcnQgJiYgdGljX2lkeCAtIHByZXZfbGFiZWwgPCBncmFwaC5taW5faG91cnNfcGVyX2xhYmVsKjAuNTgpIGxhYmVsX3gucG9wKCk7CiAgICAgICAgICAgICAgICBsYWJlbF94LnB1c2goJzx0ZXh0IGNsYXNzPSJyZWR0aWMiIHg9IicrKHgrNCkrJyIgeT0iJysoZ3JhcGgubWFyZ2luLnRvcC04KSsnIj4nK3JlZF9sYWJlbCsnPC90ZXh0PicpOwogICAgICAgICAgICAgICAgcHJldl9sYWJlbCA9IHRpY19pZHg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFqX2xhYmVsKSB7CiAgICAgICAgICAgICAgICBpZiAodGljX2lkeCA+IDApIGdyaWQgKz0gJzxwYXRoIGNsYXNzPSJtYWpvciIgZD0iTScreCsnLDB2JysoZ3JhcGgubWFyZ2luLnRvcCtncmFwaF9oZWlnaHQtMSkrJyIgLz4nOwogICAgICAgICAgICAgICAgaWYgKG1hal91c2Vfc2hvcnQgfHwgdGljX2lkeCAtIHByZXZfbGFiZWwgPiBncmFwaC5taW5faG91cnNfcGVyX2xhYmVsKjAuNTgpIHsKICAgICAgICAgICAgICAgICAgICBsYWJlbF94LnB1c2goJzx0ZXh0IGNsYXNzPSJtYWpvciIgeD0iJysoeCs0KSsnIiB5PSInKyhncmFwaC5tYXJnaW4udG9wLTgpKyciPicrbWFqX2xhYmVsKyc8L3RleHQ+Jyk7CiAgICAgICAgICAgICAgICAgICAgcHJldl9sYWJlbCA9IHRpY19pZHg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAobWluX2xhYmVsKSB7CiAgICAgICAgICAgICAgICBpZiAodGljX2lkeCA+IDApIGdyaWQgKz0gJzxwYXRoIGNsYXNzPSJtaW5vciIgZD0iTScreCsnLCcrKGdyYXBoLm1hcmdpbi50b3AtNikrJ3YnKyhncmFwaF9oZWlnaHQrNikrJyIgLz4nOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgIC8vIERyYXcgYmFycwoKICAgICAgICB2YXIgbWluX2Jhcl9oZWlnaHQgPSBNYXRoLmNlaWwoZ3JhcGgueV9heGlzLm1heF9yZXZpZXdzIC8gZ3JhcGgueV9heGlzLmhlaWdodCk7CiAgICAgICAgZm9yICh2YXIgYnVuZGxlX2lkeCBpbiBncmFwaC5idW5kbGVzKSB7CiAgICAgICAgICAgIHZhciBidW5kbGUgPSBncmFwaC5idW5kbGVzW2J1bmRsZV9pZHhdOwogICAgICAgICAgICB2YXIgYmFyX3BhcnRzID0gW107CiAgICAgICAgICAgIHZhciBzdGF0cyA9IGJ1bmRsZS5zdGF0czsKCiAgICAgICAgICAgIHZhciB4MSA9IE1hdGgucm91bmQoYnVuZGxlLnN0YXJ0X3RpbWUgKiBncmFwaC50aWNfc3BhY2luZyk7CiAgICAgICAgICAgIHZhciB4MiA9IE1hdGgucm91bmQoYnVuZGxlLmVuZF90aW1lICogZ3JhcGgudGljX3NwYWNpbmcpOwogICAgICAgICAgICBpZiAoc2V0dGluZ3MubWF4X2Jhcl93aWR0aCA+IDApIHgyID0gTWF0aC5taW4oeDEgKyBzZXR0aW5ncy5tYXhfYmFyX3dpZHRoLCB4Mik7CgogICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmdzLmJhcl9zdHlsZSkgewogICAgICAgICAgICAgICAgY2FzZSAnY291bnQnOgogICAgICAgICAgICAgICAgICAgIGlmIChzdGF0cy5jb3VudCkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidjb3VudCcsIGhlaWdodDpzdGF0cy5jb3VudH0pOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ2l0ZW1fdHlwZSc6CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLnJhZCkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidyYWQnLCBoZWlnaHQ6c3RhdHMucmFkfSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLmthbikgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidrYW4nLCBoZWlnaHQ6c3RhdHMua2FufSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRzLnZvYykgYmFyX3BhcnRzLnB1c2goe2NsYXNzOid2b2MnLCBoZWlnaHQ6c3RhdHMudm9jfSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnc3JzX3N0YWdlJzoKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuYXBwcikgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidhcHByJywgaGVpZ2h0OnN0YXRzLmFwcHJ9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZ3VydSkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidndXJ1JywgaGVpZ2h0OnN0YXRzLmd1cnV9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMubWFzdCkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidtYXN0JywgaGVpZ2h0OnN0YXRzLm1hc3R9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuZW5saSkgYmFyX3BhcnRzLnB1c2goe2NsYXNzOidlbmxpJywgaGVpZ2h0OnN0YXRzLmVubGl9KTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHMuYnVybikgYmFyX3BhcnRzLnB1c2goe2NsYXNzOididXJuJywgaGVpZ2h0OnN0YXRzLmJ1cm59KTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICdsZXZlbCc6CiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZ3JwX2lkeCA9IDA7IGdycF9pZHggPD0gNTsgZ3JwX2lkeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncnBfbmFtZSA9ICdsdmxncnAnK2dycF9pZHg7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0c1tncnBfbmFtZV0pIGJhcl9wYXJ0cy5wdXNoKHtjbGFzczonbHZsZ3JwJytncnBfaWR4LCBoZWlnaHQ6c3RhdHNbZ3JwX25hbWVdfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBiYXJfb2Zmc2V0ID0gMDsKICAgICAgICAgICAgZm9yICh2YXIgcGFydF9pZHggaW4gYmFyX3BhcnRzKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFydCA9IGJhcl9wYXJ0c1twYXJ0X2lkeF07CiAgICAgICAgICAgICAgICBpZiAoKHBhcnRfaWR4ID09IGJhcl9wYXJ0cy5sZW5ndGgtMSkgJiYgKGJhcl9vZmZzZXQgKyBwYXJ0LmhlaWdodCA8IG1pbl9iYXJfaGVpZ2h0KSkgewogICAgICAgICAgICAgICAgICAgIHBhcnQuaGVpZ2h0ID0gbWluX2Jhcl9oZWlnaHQgLSBiYXJfb2Zmc2V0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYmFycyArPSAnPHJlY3QgY2xhc3M9ImJhciAnK3BhcnQuY2xhc3MrJyIgeD0iJysoeDErMSkrJyIgeT0iJytiYXJfb2Zmc2V0KyciIHdpZHRoPSInKyh4Mi14MS0zKSsnIiBoZWlnaHQ9IicrcGFydC5oZWlnaHQrJyIgLz4nOwogICAgICAgICAgICAgICAgYmFyX29mZnNldCArPSBwYXJ0LmhlaWdodDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYmFyX3BhcnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGJhcl9vdmVybGF5cyArPSAnPHJlY3QgY2xhc3M9ImJhciBvdmVybGF5IiB4PSInK3gxKyciIHk9IjAiIHdpZHRoPSInKyh4Mi14MSkrJyIgaGVpZ2h0PSInK2dyYXBoLnlfYXhpcy5tYXhfcmV2aWV3cysnIiBkYXRhLWJ1bmRsZT0iJytidW5kbGVfaWR4KyciIC8+JzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIG1hcmtlcl94OwogICAgICAgICAgICBtYXJrZXJfeCA9IGdyYXBoLm1hcmdpbi5sZWZ0ICsgTWF0aC5mbG9vcigoeDEreDIpLzIpOwogICAgICAgICAgICBpZiAoYnVuZGxlLnN0YXRzLmhhc19jdXJyX21hcmtlciAmJiBzZXR0aW5ncy5jdXJyZW50X2xldmVsX21hcmtlcnMgIT09ICdub25lJykgewogICAgICAgICAgICAgICAgbWFya2VycyArPSAnPHBhdGggY2xhc3M9ImN1ciIgZD0iTScrbWFya2VyX3grJywnKyhncmFwaC5tYXJnaW4udG9wK2dyYXBoX2hlaWdodCsxKSsnbC0zLDZoNnoiIC8+JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIGJ1bmRsZS5zdGF0cy5idXJuX2NvdW50ID4gMCAmJiBzZXR0aW5ncy5idXJuX21hcmtlcnMgPT09ICdzaG93JykgewogICAgICAgICAgICAgICAgbWFya2VycyArPSAnPHBhdGggY2xhc3M9ImJ1ciIgZD0iTScrbWFya2VyX3grJywnKyhncmFwaC5tYXJnaW4udG9wK2dyYXBoX2hlaWdodCs4KSsnbC0zLDZoNnoiIC8+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAvLyBBc3NlbWJsZSB0aGUgSFRNTAoKICAgICAgICBwYW5lbC5odG1sKAogICAgICAgICAgICAnPHN2ZyBjbGFzcz0iZ3JhcGggbm9zZWxlY3QiIHdpZHRoPSInK3BhbmVsX3dpZHRoKyciIGhlaWdodD0iJytwYW5lbF9oZWlnaHQrJyI+JysKICAgICAgICAgICAgJyAgPHJlY3QgY2xhc3M9ImJrZ2QiIHg9IicrZ3JhcGgubWFyZ2luLmxlZnQrJyIgeT0iJytncmFwaC5tYXJnaW4udG9wKyciIHdpZHRoPSInK2dyYXBoLnhfYXhpcy53aWR0aCsnIiBoZWlnaHQ9IicrZ3JhcGhfaGVpZ2h0KyciIC8+JysKICAgICAgICAgICAgJyAgPGcgY2xhc3M9ImdyaWQiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuNSwwLjUpIj4nKwogICAgICAgICAgICBncmlkKwogICAgICAgICAgICAnICAgIDxwYXRoIGNsYXNzPSJzaGFkb3ciIGQ9Ik0nKyhncmFwaC5tYXJnaW4ubGVmdC0yKSsnLDB2JysoZ3JhcGgubWFyZ2luLnRvcCtncmFwaF9oZWlnaHQpKycsaCcrKGdyYXBoLm1hcmdpbi5sZWZ0K2dyYXBoLnhfYXhpcy53aWR0aCsxKSsnIiAvPicrCiAgICAgICAgICAgICcgICAgPHBhdGggY2xhc3M9ImxpZ2h0IiBkPSJNJysoZ3JhcGgubWFyZ2luLmxlZnQtMSkrJywwdicrKGdyYXBoLm1hcmdpbi50b3ArZ3JhcGhfaGVpZ2h0LTEpKyciIC8+JysKICAgICAgICAgICAgJyAgICA8cGF0aCBjbGFzcz0ibGlnaHQiIGQ9Ik0nKyhncmFwaC5tYXJnaW4ubGVmdC0yKSsnLCcrKGdyYXBoLm1hcmdpbi50b3ArZ3JhcGhfaGVpZ2h0KzEpKydoJysoZ3JhcGgubWFyZ2luLmxlZnQrZ3JhcGgueF9heGlzLndpZHRoKzEpKyciIC8+JysKICAgICAgICAgICAgJyAgPC9nPicrCiAgICAgICAgICAgICcgIDxnIGNsYXNzPSJsYWJlbC14Ij4nKwogICAgICAgICAgICBsYWJlbF94LmpvaW4oJycpKwogICAgICAgICAgICAnICA8L2c+JysKICAgICAgICAgICAgJyAgPGcgY2xhc3M9ImxhYmVsLXkiPicrCiAgICAgICAgICAgIGxhYmVsX3krCiAgICAgICAgICAgICcgIDwvZz4nKwogICAgICAgICAgICAnICA8ZyBjbGFzcz0ibWFya2VycyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC41LDAuNSkiPicrCiAgICAgICAgICAgIG1hcmtlcnMrCiAgICAgICAgICAgICcgIDwvZz4nKwogICAgICAgICAgICAnICA8ZyBjbGFzcz0iYmFycyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoJytncmFwaC5tYXJnaW4ubGVmdCsnLCcrKGdyYXBoLm1hcmdpbi50b3ArZ3JhcGhfaGVpZ2h0KSsnKSBzY2FsZSgxLCcrKC0xICogZ3JhcGhfaGVpZ2h0IC8gZ3JhcGgueV9heGlzLm1heF9yZXZpZXdzKSsnKSI+JysKICAgICAgICAgICAgYmFycysKICAgICAgICAgICAgYmFyX292ZXJsYXlzKwogICAgICAgICAgICAnICA8L2c+JysKICAgICAgICAgICAgJyAgPGcgY2xhc3M9InJlc2l6ZV9ncmlwIj4nKwogICAgICAgICAgICAnICAgIDxwYXRoIGNsYXNzPSJzaGFkb3ciIGQ9Ik0nKyhwYW5lbF93aWR0aC0yKSsnLCcrcGFuZWxfaGVpZ2h0KydsMiwtMm0wLC00bC02LDZtLTQsMGwxMCwtMTAiIC8+JysKICAgICAgICAgICAgJyAgICA8cGF0aCBjbGFzcz0ibGlnaHQiIGQ9Ik0nKyhwYW5lbF93aWR0aC0zKSsnLCcrcGFuZWxfaGVpZ2h0KydsMywtM20wLC00bC03LDdtLTQsMGwxMSwtMTEiIC8+JysKICAgICAgICAgICAgJyAgICA8cmVjdCBjbGFzcz0iYm91bmRhcnkiIHg9IjAiIHk9IicrKHBhbmVsX2hlaWdodC0xMykrJyIgd2lkdGg9IicrcGFuZWxfd2lkdGgrJyIgaGVpZ2h0PSIxMyIgLz4nKwogICAgICAgICAgICAnICA8L2c+JysKICAgICAgICAgICAgJyAgPGcgY2xhc3M9ImhpZ2hsaWdodCI+JysKICAgICAgICAgICAgJyAgICA8cmVjdCBjbGFzcz0ibWFya2VyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAwLDAuNSkiIHg9IicrZ3JhcGgubWFyZ2luLmxlZnQrJyIgeT0iJytncmFwaC5tYXJnaW4udG9wKyciIHdpZHRoPSIwIiBoZWlnaHQ9IicrZ3JhcGhfaGVpZ2h0KyciIC8+JysKICAgICAgICAgICAgJyAgICA8cGF0aCBjbGFzcz0ibWFya2VyIHN0YXJ0IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTAwLDApIiBkPSJNJytncmFwaC5tYXJnaW4ubGVmdCsnLCcrKGdyYXBoLm1hcmdpbi50b3AtMSkrJ2wtMywtNWg2bC0zLDV2JysoZ3JhcGhfaGVpZ2h0KzEpKyciIC8+JysKICAgICAgICAgICAgJyAgICA8cGF0aCBjbGFzcz0ibWFya2VyIGVuZCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTEwMCwwKSIgZD0iTScrZ3JhcGgubWFyZ2luLmxlZnQrJywnKyhncmFwaC5tYXJnaW4udG9wLTEpKydsLTMsLTVoNmwtMyw1dicrKGdyYXBoX2hlaWdodCsxKSsnIiAvPicrCiAgICAgICAgICAgICcgICAgPHJlY3QgY2xhc3M9ImJvdW5kYXJ5IiB4PSInKyhncmFwaC5tYXJnaW4ubGVmdC0yKSsnIiB5PSIwIiB3aWR0aD0iJysoZ3JhcGgueF9heGlzLndpZHRoKzIpKyciIGhlaWdodD0iJytncmFwaC5tYXJnaW4udG9wKyciIC8+JysKICAgICAgICAgICAgJyAgPC9nPicrCiAgICAgICAgICAgICc8L3N2Zz4nCiAgICAgICAgKTsKICAgICAgICBwYW5lbC5oZWlnaHQocGFuZWxfaGVpZ2h0KTsKCiAgICAgICAgLy8gQXR0YWNoIGV2ZW50IGhhbmRsZXJzCiAgICAgICAgcGFuZWwuZmluZCgnLnJlc2l6ZV9ncmlwIC5ib3VuZGFyeScpLm9uKCdtb3VzZWRvd24gdG91Y2hzdGFydCcsIHJlc2l6ZV9wYW5lbCk7CiAgICAgICAgcGFuZWwuZmluZCgnLmhpZ2hsaWdodCAuYm91bmRhcnknKS5vbignbW91c2VlbnRlciBtb3VzZWxlYXZlIG1vdXNlbW92ZSBtb3VzZWRvd24gdG91Y2hzdGFydCcsIGhpZ2hsaWdodF9ob3Zlcik7CiAgICAgICAgcGFuZWwuZmluZCgnLmJhci5vdmVybGF5Jykub24oJ21vdXNlZW50ZXIgbW91c2VsZWF2ZScsIGJhcl9ob3Zlcik7CiAgICAgICAgcGFuZWwuZmluZCgnLmJhci5vdmVybGF5Jykub24oJ2NsaWNrJywgYmFyX2NsaWNrKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRXZlbnQgaGFuZGxlciBmb3IgY2xpY2tpbmcgdGltZWxpbmUgYmFycy4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gYmFyX2NsaWNrKGUpIHsKICAgICAgICBpZiAoc2V0dGluZ3Muc2hvd19yZXZpZXdfZGV0YWlscyA9PT0gJ25vbmUnKSByZXR1cm47CiAgICAgICAgaWYgKGhpZ2hsaWdodC5oaWdobGlnaHRlZCkgaGlkZV9oaWdobGlnaHQoKTsKICAgICAgICB2YXIgYnVuZGxlX2lkeCA9IE51bWJlcihlLnRhcmdldC5hdHRyaWJ1dGVzWydkYXRhLWJ1bmRsZSddLnZhbHVlKTsKICAgICAgICBoaWdobGlnaHQuc3RhcnQgPSBidW5kbGVfaWR4OwogICAgICAgIGhpZ2hsaWdodC5lbmQgPSBidW5kbGVfaWR4ICsgMTsKICAgICAgICBoaWdobGlnaHQuaGlnaGxpZ2h0ZWQgPSB0cnVlOwogICAgICAgIGdyYXBoLmVsZW0ub2ZmKCcuYmFyX2hvdmVyX21vdmUnKTsKICAgICAgICBzaG93X3Jldmlld19pbmZvKHRydWUgLyogc3RpY2t5ICovLCBlKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRXZlbnQgaGFuZGxlciBmb3IgaG92ZXJpbmcgb3ZlciB0aW1lbGluZSBiYXJzLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBiYXJfaG92ZXIoZSkgewogICAgICAgIGlmIChzZXR0aW5ncy5zaG93X3Jldmlld19kZXRhaWxzID09PSAnbm9uZScpIHJldHVybjsKICAgICAgICBpZiAoaGlnaGxpZ2h0LmhpZ2hsaWdodGVkKSByZXR1cm47CiAgICAgICAgc3dpdGNoIChlLnR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnbW91c2VlbnRlcic6CiAgICAgICAgICAgICAgICB2YXIgYnVuZGxlX2lkeCA9IE51bWJlcihlLnRhcmdldC5hdHRyaWJ1dGVzWydkYXRhLWJ1bmRsZSddLnZhbHVlKTsKICAgICAgICAgICAgICAgIGhpZ2hsaWdodC5zdGFydCA9IGJ1bmRsZV9pZHg7CiAgICAgICAgICAgICAgICBoaWdobGlnaHQuZW5kID0gYnVuZGxlX2lkeCArIDE7CiAgICAgICAgICAgICAgICBzaG93X3Jldmlld19pbmZvKGZhbHNlIC8qIHN0aWNreSAqLywgZSk7CiAgICAgICAgICAgICAgICBncmFwaC5lbGVtLm9uKCdtb3VzZW1vdmUuYmFyX2hvdmVyX21vdmUnLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICAgICBncmFwaC5yZXZpZXdfaW5mby5jc3MoJ3RvcCcsIGUuY2xpZW50WSAtIGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIDMwKTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdtb3VzZWxlYXZlJzoKICAgICAgICAgICAgICAgIGdyYXBoLmVsZW0ub2ZmKCcuYmFyX2hvdmVyX21vdmUnKTsKICAgICAgICAgICAgICAgIGhpZGVfcmV2aWV3X2luZm8oKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gQnVpbGQgYW5kIGRpc3BsYXkgdGhlIFJldmlldyBJbmZvIHBvcC11cC4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gc2hvd19yZXZpZXdfaW5mbyhzdGlja3ksIGUpIHsKICAgICAgICB2YXIgaW5mbyA9ICQoJyN0aW1lbGluZSAucmV2aWV3X2luZm8nKTsKICAgICAgICBpZiAoc3RpY2t5KSB7CiAgICAgICAgICAgICQoJ2JvZHknKS5vZmYoJy50aW1lbGluZV9oaWRlaW5mbycpOwogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAkKCdib2R5Jykub24oJ2NsaWNrLnRpbWVsaW5lX2hpZGVpbmZvJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgJCgnYm9keScpLm9mZignLnRpbWVsaW5lX2hpZGVpbmZvJyk7CiAgICAgICAgICAgICAgICAgICAgaGlkZV9oaWdobGlnaHQoKTsKICAgICAgICAgICAgICAgICAgICBoaWRlX3Jldmlld19pbmZvKCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSwgMTApOwogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXJ0ID0gTWF0aC5taW4oaGlnaGxpZ2h0LnN0YXJ0LCBoaWdobGlnaHQuZW5kKTsKICAgICAgICB2YXIgZW5kID0gTWF0aC5tYXgoaGlnaGxpZ2h0LnN0YXJ0LCBoaWdobGlnaHQuZW5kKTsKCiAgICAgICAgdmFyIGJ1bmRsZSA9IHtpdGVtczpbXX07CiAgICAgICAgZm9yICh2YXIgYnVuZGxlX2lkeCA9IHN0YXJ0OyBidW5kbGVfaWR4IDwgZW5kOyBidW5kbGVfaWR4KyspIHsKICAgICAgICAgICAgYnVuZGxlLml0ZW1zID0gYnVuZGxlLml0ZW1zLmNvbmNhdChncmFwaC5idW5kbGVzW2J1bmRsZV9pZHhdLml0ZW1zKTsKICAgICAgICB9CgogICAgICAgIGNhbGNfYnVuZGxlX3N0YXRzKGJ1bmRsZSk7CgogICAgICAgIC8vIFByaW50IHRoZSBkYXRlIG9yIGRhdGUgcmFuZ2UuCiAgICAgICAgdmFyIGFsbG93X25vdyA9ICgoc3RhcnQgPT09IDApICYmIChncmFwaC5idW5kbGVfc2l6ZSA9PT0gMSkpOwogICAgICAgIHZhciBodG1sID0gJzxkaXY+JzsKICAgICAgICBodG1sICs9IGZvcm1hdF9kYXRlKG5ldyBEYXRlKGdyYXBoLnN0YXJ0X3RpbWUuZ2V0VGltZSgpICsgYnVuZGxlX3RvX3RpYyhzdGFydCkgKiAzNjAwMDAwKSwgYWxsb3dfbm93KTsKICAgICAgICBpZiAoKChlbmQtc3RhcnQpID4gMSkgfHwgKGdyYXBoLmJ1bmRsZV9zaXplID4gMSkpIHsKICAgICAgICAgICAgaHRtbCArPSAnIHRvICcgKyBmb3JtYXRfZGF0ZShuZXcgRGF0ZShncmFwaC5zdGFydF90aW1lLmdldFRpbWUoKSArIGJ1bmRsZV90b190aWMoZW5kKSAqIDM2MDAwMDApKTsKICAgICAgICB9CiAgICAgICAgaHRtbCArPSAnPC9kaXY+JzsKCiAgICAgICAgLy8gUG9wdWxhdGUgaXRlbSB0eXBlIHN1bW1hcmllcy4KICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzdW1tYXJ5Ij4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InRvdCI+JysoYnVuZGxlLnN0YXRzLmNvdW50KSsnIHJldmlld3M8L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImluZGVudCI+JzsKCiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iaXRlbV90eXBlIHJhZCI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nKyhidW5kbGUuc3RhdHMucmFkIHx8IDApKyc8L3NwYW4+IHJhZGljYWxzPC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJpdGVtX3R5cGUga2FuIj48c3BhbiBjbGFzcz0iZml4ZWQiPicrKGJ1bmRsZS5zdGF0cy5rYW4gfHwgMCkrJzwvc3Bhbj4ga2Fuamk8L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9Iml0ZW1fdHlwZSB2b2MiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLnZvYyB8fCAwKSsnPC9zcGFuPiB2b2NhYnVsYXJ5PC9kaXY+JzsKCiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3JzX3N0YWdlIGFwcHIiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmFwcHIgfHwgMCkrJzwvc3Bhbj4gYXBwcmVudGljZTwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3JzX3N0YWdlIGd1cnUiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmd1cnUgfHwgMCkrJzwvc3Bhbj4gZ3VydTwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3JzX3N0YWdlIG1hc3QiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLm1hc3QgfHwgMCkrJzwvc3Bhbj4gbWFzdGVyPC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzcnNfc3RhZ2UgZW5saSI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nKyhidW5kbGUuc3RhdHMuZW5saSB8fCAwKSsnPC9zcGFuPiBlbmxpZ2h0ZW5lZDwvZGl2Pic7CiAgICAgICAgaWYgKHNldHRpbmdzLnNyc19jdXJyX25leHQgPT09ICduZXh0JykgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzcnNfc3RhZ2UgYnVybiI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nKyhidW5kbGUuc3RhdHMuYnVybiB8fCAwKSsnPC9zcGFuPiBidXJuPC9kaXY+JzsKICAgICAgICB9CgogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImxldmVsIGx2bGdycDAiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmx2bGdycDAgfHwgMCkrJzwvc3Bhbj4gbGV2ZWxzIDEtMTA8L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImxldmVsIGx2bGdycDEiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmx2bGdycDEgfHwgMCkrJzwvc3Bhbj4gbGV2ZWxzIDExLTIwPC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJsZXZlbCBsdmxncnAyIj48c3BhbiBjbGFzcz0iZml4ZWQiPicrKGJ1bmRsZS5zdGF0cy5sdmxncnAyIHx8IDApKyc8L3NwYW4+IGxldmVscyAyMS0zMDwvZGl2Pic7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ibGV2ZWwgbHZsZ3JwMyI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nKyhidW5kbGUuc3RhdHMubHZsZ3JwMyB8fCAwKSsnPC9zcGFuPiBsZXZlbHMgMzEtNDA8L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImxldmVsIGx2bGdycDQiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JysoYnVuZGxlLnN0YXRzLmx2bGdycDQgfHwgMCkrJzwvc3Bhbj4gbGV2ZWxzIDQxLTUwPC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJsZXZlbCBsdmxncnA1Ij48c3BhbiBjbGFzcz0iZml4ZWQiPicrKGJ1bmRsZS5zdGF0cy5sdmxncnA1IHx8IDApKyc8L3NwYW4+IGxldmVscyA1MS02MDwvZGl2Pic7CgogICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CgogICAgICAgIGlmICgoYnVuZGxlLnN0YXRzLmN1cnJfY291bnQgPiAwKSB8fCAoYnVuZGxlLnN0YXRzLmJ1cm5fY291bnQgPiAwKSkgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJpbmRlbnQiPic7CiAgICAgICAgICAgIGlmIChidW5kbGUuc3RhdHMuY3Vycl9jb3VudCA+IDApIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImN1ciI+PHNwYW4gY2xhc3M9ImZpeGVkIj4nK2J1bmRsZS5zdGF0cy5jdXJyX2NvdW50Kyc8L3NwYW4+IEN1cnJlbnQgTGV2ZWw8L2Rpdj4nOwogICAgICAgICAgICBpZiAoYnVuZGxlLnN0YXRzLmJ1cm5fY291bnQgPiAwKSBodG1sICs9ICc8ZGl2IGNsYXNzPSJidXIiPjxzcGFuIGNsYXNzPSJmaXhlZCI+JytidW5kbGUuc3RhdHMuYnVybl9jb3VudCsnPC9zcGFuPiBCdXJuIEl0ZW0nKyhidW5kbGUuc3RhdHMuYnVybl9jb3VudCA+IDEgPyAncycgOiAnJykrJzwvZGl2Pic7CiAgICAgICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7CiAgICAgICAgfQoKICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwoKICAgICAgICBpZiAoc2V0dGluZ3MucmV2aWV3X2RldGFpbHNfYnV0dG9ucykgewogICAgICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJkZXRhaWxfYnV0dG9ucyI+JzsKICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz0iY291bnQiPlJldmlldyBDb3VudDwvYnV0dG9uPic7CiAgICAgICAgICAgIGh0bWwgKz0gJzxidXR0b24gY2xhc3M9Iml0ZW1fdHlwZSI+SXRlbSBUeXBlPC9idXR0b24+JzsKICAgICAgICAgICAgaHRtbCArPSAnPGJ1dHRvbiBjbGFzcz0ic3JzX3N0YWdlIj5TUlMgTGV2ZWw8L2J1dHRvbj4nOwogICAgICAgICAgICBodG1sICs9ICc8YnV0dG9uIGNsYXNzPSJsZXZlbCI+TGV2ZWw8L2J1dHRvbj4nOwogICAgICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMgPT09ICdpdGVtX2xpc3QnIHx8IHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMgPT09ICdmdWxsJykgewogICAgICAgICAgICBodG1sID0gcG9wdWxhdGVfaXRlbV9saXN0KGJ1bmRsZSwgaHRtbCk7CiAgICAgICAgfQoKICAgICAgICBpbmZvLmZpbmQoJy5pbm5lcicpLmh0bWwoaHRtbCk7CiAgICAgICAgZ3JhcGgucmV2aWV3X2luZm8gPSBpbmZvOwoKICAgICAgICB2YXIgbnVtX3dpZHRoID0gYnVuZGxlLnN0YXRzLmNvdW50LnRvU3RyaW5nKCk7CiAgICAgICAgaW5mby5maW5kKCcuc3VtbWFyeSAuZml4ZWQnKS5jc3MoJ3dpZHRoJywgKG51bV93aWR0aC50b1N0cmluZygpLmxlbmd0aCAqIDkgKyA4KSArICdweCcpOwoKICAgICAgICB2YXIgdG9wLCBsZWZ0LCByaWdodCwgd2lkdGg7CiAgICAgICAgdmFyIGhhbGZfd2lkdGggPSBncmFwaC54X2F4aXMud2lkdGgvMjsKICAgICAgICB2YXIgeCA9IGJ1bmRsZV90b194KHN0YXJ0KTsKICAgICAgICBpbmZvLmNzcygnbWF4LXdpZHRoJywgaGFsZl93aWR0aCk7CiAgICAgICAgaWYgKGhpZ2hsaWdodC5kcmFnZ2luZykgewogICAgICAgICAgICB0b3AgPSBncmFwaC5tYXJnaW4udG9wICsgZ3JhcGgueV9heGlzLmhlaWdodCArIGdyYXBoLm1hcmdpbi5ib3R0b207CiAgICAgICAgICAgIGlmICh4IDwgaGFsZl93aWR0aCkgewogICAgICAgICAgICAgICAgbGVmdCA9IGdyYXBoLm1hcmdpbi5sZWZ0ICsgeDsKICAgICAgICAgICAgICAgIGluZm8uY3NzKHtsZWZ0OmxlZnQsIHJpZ2h0OidhdXRvJywgdG9wOnRvcH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmlnaHQgPSAwOwogICAgICAgICAgICAgICAgaW5mby5jc3Moe2xlZnQ6J2F1dG8nLCByaWdodDpyaWdodCwgdG9wOnRvcH0pOwogICAgICAgICAgICAgICAgaWYgKHggPCBncmFwaC54X2F4aXMud2lkdGggLSBpbmZvLm91dGVyV2lkdGgoKSkgewogICAgICAgICAgICAgICAgICAgIGxlZnQgPSBncmFwaC5tYXJnaW4ubGVmdCArIHg7CiAgICAgICAgICAgICAgICAgICAgaW5mby5jc3Moe2xlZnQ6bGVmdCwgcmlnaHQ6J2F1dG8nLCB0b3A6dG9wfSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGUpIHsKICAgICAgICAgICAgdG9wID0gZS5jbGllbnRZIC0gZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gMzA7CiAgICAgICAgICAgIGlmICh4IDwgaGFsZl93aWR0aCkgewogICAgICAgICAgICAgICAgbGVmdCA9IGdyYXBoLm1hcmdpbi5sZWZ0ICsgYnVuZGxlX3RvX3goc3RhcnQrMSkgKyA0OwogICAgICAgICAgICAgICAgaW5mby5jc3Moe2xlZnQ6bGVmdCwgcmlnaHQ6J2F1dG8nLCB0b3A6dG9wfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByaWdodCA9IGdyYXBoLnhfYXhpcy53aWR0aCAtIGJ1bmRsZV90b194KHN0YXJ0KSArIDQ7CiAgICAgICAgICAgICAgICBpbmZvLmNzcyh7bGVmdDonYXV0bycsIHJpZ2h0OnJpZ2h0LCB0b3A6dG9wfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGluZm8ucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQb3B1bGF0ZSB0aGUgbGlzdCBvZiBpdGVtcyBwcmVzZW50IGluIGEgdGltZSBidW5kbGUuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHBvcHVsYXRlX2l0ZW1fbGlzdChidW5kbGUsIGh0bWwpIHsKICAgICAgICB2YXIgc3JzX3RvX2NsYXNzID0gewogICAgICAgICAgICBjdXJyOiBbJ2FwcHInLCdhcHByJywnYXBwcicsJ2FwcHInLCdhcHByJywnZ3VydScsJ2d1cnUnLCdtYXN0JywnZW5saSddLAogICAgICAgICAgICBuZXh0OiBbJ2FwcHInLCdhcHByJywnYXBwcicsJ2FwcHInLCdndXJ1JywnZ3VydScsJ21hc3QnLCdlbmxpJywnYnVybiddCiAgICAgICAgfTsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJpdGVtX2luZm8gaGlkZGVuIj48L2Rpdj48dWwgY2xhc3M9Iml0ZW1fbGlzdCI+JzsKICAgICAgICBmb3IgKHZhciBpdGVtX2lkeCBpbiBidW5kbGUuaXRlbXMpIHsKICAgICAgICAgICAgdmFyIGl0ZW0gPSBidW5kbGUuaXRlbXNbaXRlbV9pZHhdOwogICAgICAgICAgICB2YXIgY2xhc3NlcyA9IFsKICAgICAgICAgICAgICAgIGl0ZW0ub2JqZWN0LnNsaWNlKDAsMyksCiAgICAgICAgICAgICAgICBzcnNfdG9fY2xhc3Nbc2V0dGluZ3Muc3JzX2N1cnJfbmV4dF1baXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2VdLAogICAgICAgICAgICAgICAgJ2x2bGdycCcrTWF0aC5mbG9vcigoaXRlbS5kYXRhLmxldmVsLTEpLzEwKQogICAgICAgICAgICBdOwogICAgICAgICAgICB2YXIgaXRlbV9uYW1lOwogICAgICAgICAgICBpZiAoaXRlbS5vYmplY3QgPT09ICdyYWRpY2FsJykgewogICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGF0YS5jaGFyYWN0ZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxpIGNsYXNzPSInK2NsYXNzZXMuam9pbignICcpKyciPicraXRlbS5kYXRhLmNoYXJhY3RlcnMrJzwvbGk+JzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPGxpIGNsYXNzPSInK2NsYXNzZXMuam9pbignICcpKyciIGRhdGEtcmFkbmFtZT0iJytpdGVtLmRhdGEuc2x1ZysnIj4uLi48L2xpPic7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJyN0aW1lbGluZSAucmV2aWV3X2luZm8gLml0ZW1fbGlzdCA+IGxpW2RhdGEtcmFkbmFtZT0iJytpdGVtLmRhdGEuc2x1ZysnIl0nOwogICAgICAgICAgICAgICAgICAgIGxvYWRfcmFkaWNhbF9zdmcoaXRlbSkudGhlbihwb3B1bGF0ZV9yYWRpY2FsX3N2Zy5iaW5kKG51bGwsIHNlbGVjdG9yKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBodG1sICs9ICc8bGkgY2xhc3M9IicrY2xhc3Nlcy5qb2luKCcgJykrJyI+JytpdGVtLmRhdGEuc2x1ZysnPC9saT4nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGh0bWwgKz0gJzwvdWw+JzsKICAgICAgICByZXR1cm4gaHRtbDsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSW5zZXJ0IGFuIHN2ZyBpbnRvIGEgc3BlY2lmaWVkIERPTSBlbGVtZW50LgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBwb3B1bGF0ZV9yYWRpY2FsX3N2ZyhzZWxlY3Rvciwgc3ZnKSB7CiAgICAgICAgJChzZWxlY3RvcikuaHRtbChzdmcpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFdmVudCBoYW5kbGVyIGZvciBidXR0b25zIG9uIHRoZSBSZXZpZXcgSW5mbyBwb3AtdXAuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGRldGFpbF9idXR0b25fY2xpY2tlZChlKSB7CiAgICAgICAgdmFyIG1vZGUgPSBlLnRhcmdldC5jbGFzc05hbWU7CiAgICAgICAgJCgnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbycpLmF0dHIoJ2RhdGEtbW9kZScsIG1vZGUpOwogICAgICAgIHNldHRpbmdzLnJldmlld19kZXRhaWxzX3N1bW1hcnkgPSBtb2RlOwogICAgICAgIHNhdmVfc2V0dGluZ3MoKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRXZlbnQgaGFuZGxlciBmb3IgaG92ZXJpbmcgb3ZlciBhbiBpdGVtIGluIHRoZSBSZXZpZXcgRGV0YWlsIHBvcC11cC4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaXRlbV9ob3ZlcihlKSB7CiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfcmV2aWV3X2RldGFpbHMgIT09ICdmdWxsJykgcmV0dXJuOwogICAgICAgIHZhciBpbmZvID0gJCgnI3RpbWVsaW5lIC5pdGVtX2luZm8nKTsKICAgICAgICBzd2l0Y2ggKGUudHlwZSkgewogICAgICAgICAgICBjYXNlICdtb3VzZWVudGVyJzoKICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkKGUuY3VycmVudFRhcmdldCk7CiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGdyYXBoLmN1cnJlbnRfYnVuZGxlLml0ZW1zW3RhcmdldC5pbmRleCgpXTsKICAgICAgICAgICAgICAgIHZhciBwb3MgPSB0YXJnZXQucG9zaXRpb24oKTsKICAgICAgICAgICAgICAgIGluZm8uY3NzKHt0b3A6cG9zLnRvcCt0YXJnZXQub3V0ZXJIZWlnaHQoKSszfSk7CiAgICAgICAgICAgICAgICBwb3B1bGF0ZV9pdGVtX2luZm8oaW5mbywgaXRlbSk7CiAgICAgICAgICAgICAgICBpbmZvLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6CiAgICAgICAgICAgICAgICBpbmZvLmFkZENsYXNzKCdoaWRkZW4nKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSGFuZGxlciBmb3IgcmVzaXppbmcgdGhlIHRpbWVsaW5lIHdoZW4gdGhlIHdpbmRvdyBzaXplIGNoYW5nZXMuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHdpbmRvd19yZXNpemVkKCkgewogICAgICAgIHZhciBuZXdfd2lkdGggPSBncmFwaC5lbGVtLndpZHRoKCk7CiAgICAgICAgaWYgKG5ld193aWR0aCAhPSBncmFwaC54X2F4aXMud2lkdGggKyBncmFwaC5tYXJnaW4ubGVmdCkgewogICAgICAgICAgICBidW5kbGVfYnlfdGltZXNsb3QoKTsKICAgICAgICAgICAgZHJhd190aW1lbGluZSgpOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2VuZXJhdGUgdGhlIEhUTUwgY29udGVudCBvZiB0aGUgSXRlbSBEZXRhaWwgcG9wLXVwLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBwb3B1bGF0ZV9pdGVtX2luZm8oaW5mbywgaXRlbSkgewogICAgICAgIHZhciBodG1sOwogICAgICAgIHN3aXRjaCAoaXRlbS5vYmplY3QpIHsKICAgICAgICAgICAgY2FzZSAncmFkaWNhbCc6CiAgICAgICAgICAgICAgICBpZiAoaXRlbS5kYXRhLmNoYXJhY3RlcnMpIHsKICAgICAgICAgICAgICAgICAgICBodG1sID0gJzxzcGFuIGNsYXNzPSJpdGVtIj5SYWRpY2FsOiA8c3BhbiBjbGFzcz0ic2x1ZyIgbGFuZz0iamEiPicraXRlbS5kYXRhLmNoYXJhY3RlcnMrJzwvc3Bhbj48L3NwYW4+PGJyPic7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGh0bWwgPSAnPHNwYW4gY2xhc3M9Iml0ZW0iPlJhZGljYWw6IDxzcGFuIGNsYXNzPSJzbHVnIiBkYXRhLXJhZG5hbWU9IicraXRlbS5kYXRhLnNsdWcrJyI+Li4uPC9zcGFuPjwvc3Bhbj48YnI+JzsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSAnI3RpbWVsaW5lIC5pdGVtX2luZm8gW2RhdGEtcmFkbmFtZT0iJytpdGVtLmRhdGEuc2x1ZysnIl0nOwogICAgICAgICAgICAgICAgICAgIGxvYWRfcmFkaWNhbF9zdmcoaXRlbSkudGhlbihwb3B1bGF0ZV9yYWRpY2FsX3N2Zy5iaW5kKG51bGwsIHNlbGVjdG9yKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ2thbmppJzoKICAgICAgICAgICAgICAgIGh0bWwgPSAnPHNwYW4gY2xhc3M9Iml0ZW0iPkthbmppOiA8c3BhbiBjbGFzcz0ic2x1ZyIgbGFuZz0iamEiPicraXRlbS5kYXRhLnNsdWcrJzwvc3Bhbj48L3NwYW4+PGJyPic7CiAgICAgICAgICAgICAgICBodG1sICs9IGdldF9pbXBvcnRhbnRfcmVhZGluZyhpdGVtKSsnPGJyPic7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ3ZvY2FidWxhcnknOgogICAgICAgICAgICAgICAgaHRtbCA9ICc8c3BhbiBjbGFzcz0iaXRlbSI+Vm9jYWI6IDxzcGFuIGNsYXNzPSJzbHVnIiBsYW5nPSJqYSI+JytpdGVtLmRhdGEuc2x1ZysnPC9zcGFuPjwvc3Bhbj48YnI+JzsKICAgICAgICAgICAgICAgIGh0bWwgKz0gJ1JlYWRpbmc6ICcrZ2V0X3JlYWRpbmcoaXRlbSkrJzxicj4nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGh0bWwgKz0gJ01lYW5pbmc6ICcrZ2V0X21lYW5pbmdzKGl0ZW0pKyc8YnI+JzsKICAgICAgICBodG1sICs9ICdMZXZlbDogJytpdGVtLmRhdGEubGV2ZWwrJzxicj4nOwogICAgICAgIGh0bWwgKz0gJ1NSUyBMZXZlbDogJytpdGVtLmFzc2lnbm1lbnRzLnNyc19zdGFnZV9uYW1lOwogICAgICAgIGluZm8uaHRtbChodG1sKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTG9hZCBhIHJhZGljYWwncyBzdmcgZmlsZS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gbG9hZF9yYWRpY2FsX3N2ZyhpdGVtKSB7CiAgICAgICAgdmFyIHByb21pc2UgPSBncmFwaC5yYWRpY2FsX2NhY2hlW2l0ZW0uZGF0YS5zbHVnXTsKICAgICAgICBpZiAocHJvbWlzZSkgcmV0dXJuIHByb21pc2U7CiAgICAgICAgaWYgKGl0ZW0uZGF0YS5jaGFyYWN0ZXJfaW1hZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHByb21pc2U7CiAgICAgICAgdmFyIHVybCA9IGl0ZW0uZGF0YS5jaGFyYWN0ZXJfaW1hZ2VzLmZpbHRlcihmdW5jdGlvbihpbWcpewogICAgICAgICAgICByZXR1cm4gKGltZy5jb250ZW50X3R5cGUgPT09ICdpbWFnZS9zdmcreG1sJyAmJiAhaW1nLm1ldGFkYXRhLmlubGluZV9zdHlsZXMpOwogICAgICAgIH0pWzBdLnVybDsKICAgICAgICBwcm9taXNlID0gd2tvZi5sb2FkX2ZpbGUodXJsKTsKICAgICAgICBncmFwaC5yYWRpY2FsX2NhY2hlW2l0ZW0uZGF0YS5zbHVnXSA9IHByb21pc2U7CiAgICAgICAgcmV0dXJuIHByb21pc2U7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEV4dHJhY3QgdGhlIG1lYW5pbmdzIChpbmNsdWRpbmcgc3lub255bXMpIGZyb20gYW4gaXRlbS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZ2V0X21lYW5pbmdzKGl0ZW0pIHsKICAgICAgICB2YXIgbWVhbmluZ3MgPSBbXTsKICAgICAgICBpZiAoaXRlbS5zdHVkeV9tYXRlcmlhbHMgJiYgaXRlbS5zdHVkeV9tYXRlcmlhbHMubWVhbmluZ19zeW5vbnltcykgewogICAgICAgICAgICBtZWFuaW5ncyA9IGl0ZW0uc3R1ZHlfbWF0ZXJpYWxzLm1lYW5pbmdfc3lub255bXM7CiAgICAgICAgfQogICAgICAgIG1lYW5pbmdzID0gbWVhbmluZ3MuY29uY2F0KGl0ZW0uZGF0YS5tZWFuaW5ncy5tYXAobWVhbmluZyA9PiBtZWFuaW5nLm1lYW5pbmcpKTsKICAgICAgICByZXR1cm4gdG9fdGl0bGVfY2FzZShtZWFuaW5ncy5qb2luKCcsICcpKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gRXh0cmFjdCB0aGUgJ2ltcG9ydGFudCcgcmVhZGluZ3MgZnJvbSBhIGthbmppLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBnZXRfaW1wb3J0YW50X3JlYWRpbmcoaXRlbSkgewogICAgICAgIHZhciByZWFkaW5ncyA9IGl0ZW0uZGF0YS5yZWFkaW5ncy5maWx0ZXIocmVhZGluZyA9PiByZWFkaW5nLnByaW1hcnkpOwogICAgICAgIHJldHVybiB0b190aXRsZV9jYXNlKHJlYWRpbmdzWzBdLnR5cGUpKyc6ICcrcmVhZGluZ3MubWFwKHJlYWRpbmcgPT4gcmVhZGluZy5yZWFkaW5nKS5qb2luKCcsICcpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFeHRyYWN0IHRoZSBsaXN0IG9mIHJlYWRpbmdzIGZyb20gYW4gaXRlbS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZ2V0X3JlYWRpbmcoaXRlbSkgewogICAgICAgIHJldHVybiBpdGVtLmRhdGEucmVhZGluZ3MubWFwKHJlYWRpbmcgPT4gcmVhZGluZy5yZWFkaW5nKS5qb2luKCcsICcpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBIaWRlIHRoZSBSZXZpZXcgSW5mbyBwb3AtdXAuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGhpZGVfcmV2aWV3X2luZm8oKSB7CiAgICAgICAgJCgnI3RpbWVsaW5lIC5yZXZpZXdfaW5mbycpLmFkZENsYXNzKCdoaWRkZW4nKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2VuZXJhdGUgYSBmb3JtYXR0ZWQgZGF0ZSBzdHJpbmcuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGZvcm1hdF9kYXRlKHRpbWUsIGFsbG93X25vdykgewogICAgICAgIHZhciBzdHI7CiAgICAgICAgaWYgKGFsbG93X25vdyAmJiB0aW1lLmdldFRpbWUoKSA+PSBncmFwaC5zdGFydF90aW1lLmdldFRpbWUoKSkgcmV0dXJuICdOb3cnOwogICAgICAgIGlmICh0aW1lLmdldERhdGUoKSA9PT0gKG5ldyBEYXRlKCkpLmdldERhdGUoKSkgewogICAgICAgICAgICBzdHIgPSAnVG9kYXknOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0ciA9ICdTdW5Nb25UdWVXZWRUaHVGcmlTYXQnLnN1YnN0cih0aW1lLmdldERheSgpKjMsIDMpOwogICAgICAgIH0KICAgICAgICBpZiAoc2V0dGluZ3MudGltZV9mb3JtYXQgPT09ICcyNGhvdXInKSB7CiAgICAgICAgICAgIHN0ciArPSAnICcgKyAoJzAnICsgdGltZS5nZXRIb3VycygpKS5zbGljZSgtMikgKyAnOicgKyAoJzAnK3RpbWVfc2hpZnQpLnNsaWNlKC0yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHIgKz0gJyAnICsgKCcwJyArICgoKHRpbWUuZ2V0SG91cnMoKSsxMSklMTIpKzEpKS5zbGljZSgtMikgKyAnOicrKCcwJyt0aW1lX3NoaWZ0KS5zbGljZSgtMikgKyAnYXAnW01hdGguZmxvb3IodGltZS5nZXRIb3VycygpLzEyKV0gKyAnbSc7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHI7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEZldGNoIGl0ZW0gaW5mbywgYW5kIHJlZHJhdyB0aGUgdGltZWxpbmUuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGZldGNoX2FuZF91cGRhdGUoKSB7CiAgICAgICAgcmV0dXJuIHdrb2YuSXRlbURhdGEuZ2V0X2l0ZW1zKCdzdWJqZWN0cywgYXNzaWdubWVudHMsIHN0dWR5X21hdGVyaWFscycpCiAgICAgICAgLnRoZW4ocHJvY2Vzc19pdGVtcykKICAgICAgICAudGhlbihkcmF3X3RpbWVsaW5lKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUHJvY2VzcyB0aGUgZmV0Y2hlZCBpdGVtcy4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gcHJvY2Vzc19pdGVtcyhmZXRjaGVkX2l0ZW1zKSB7CiAgICAgICAgLy8gUmVtb3ZlIGFueSB1bmxlYXJuZWQgaXRlbXMuCiAgICAgICAgZ3JhcGguaXRlbXMgPSBbXTsKICAgICAgICBmb3IgKHZhciBpZHggaW4gZmV0Y2hlZF9pdGVtcykgewogICAgICAgICAgICB2YXIgaXRlbSA9IGZldGNoZWRfaXRlbXNbaWR4XTsKICAgICAgICAgICAgaWYgKCFpdGVtLmFzc2lnbm1lbnRzIHx8ICFpdGVtLmFzc2lnbm1lbnRzLmF2YWlsYWJsZV9hdCB8fCBpdGVtLmFzc2lnbm1lbnRzLnNyc19zdGFnZSA8PSAwKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGl0ZW0uZGF0YS5sZXZlbCA+IHdrb2YudXNlci5sZXZlbCkgY29udGludWU7CiAgICAgICAgICAgIGdyYXBoLml0ZW1zLnB1c2goaXRlbSk7CiAgICAgICAgfQoKICAgICAgICBncmFwaC5pdGVtcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShhLmFzc2lnbm1lbnRzLmF2YWlsYWJsZV9hdCkuZ2V0VGltZSgpIC0gbmV3IERhdGUoYi5hc3NpZ25tZW50cy5hdmFpbGFibGVfYXQpLmdldFRpbWUoKSk7CiAgICAgICAgfSk7CgogICAgICAgIGJ1bmRsZV9ieV90aW1lc2xvdCgpOwogICAgICAgIHVwZGF0ZV9zbGlkZXJfcmV2aWV3cygpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBCdW5kbGUgdGhlIGl0ZW1zIGludG8gdGltZXNsb3RzLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBidW5kbGVfYnlfdGltZXNsb3QoKSB7CiAgICAgICAgdmFyIGJ1bmRsZV9zaXplID0gZ3JhcGguYnVuZGxlX3NpemUgPSBnZXRfaG91cnNfcGVyX2JhcigpOwogICAgICAgIHZhciBidW5kbGVzID0gZ3JhcGguYnVuZGxlcyA9IFtdOwogICAgICAgIHZhciB0aW1lc2xvdHMgPSBncmFwaC50aW1lc2xvdHMgPSBbXTsKCiAgICAgICAgLy8gUmV3aW5kIHRoZSBjbG9jayB0byB0aGUgc3RhcnQgb2YgYSBidW5kbGUgcGVyaW9kLgogICAgICAgIHZhciBzdGFydF90aW1lID0gdG9TdGFydE9mVVRDSG91cihuZXcgRGF0ZSgpKTsKICAgICAgICB3aGlsZSAoc3RhcnRfdGltZS5nZXRIb3VycygpICUgYnVuZGxlX3NpemUgIT09IDApIHN0YXJ0X3RpbWUgPSBuZXcgRGF0ZShzdGFydF90aW1lLmdldFRpbWUoKSAtIDM2MDAwMDApOwogICAgICAgIGdyYXBoLnN0YXJ0X3RpbWUgPSBzdGFydF90aW1lOwoKICAgICAgICAvLyBGaW5kIHRoZSB0aWMgb2YgdGhlIGxhc3QgYnVuZGxlIChyb3VuZCBkb3duIGlmIG9ubHkgYSBwYXJ0aWFsKS4KICAgICAgICBncmFwaC50b3RhbF9yZXZpZXdzID0gMDsKICAgICAgICBncmFwaC5tYXhfcmV2aWV3cyA9IDA7CiAgICAgICAgdmFyIGhvdXIgPSAwLCBpdGVtX2lkeCA9IDAsIGl0ZW1fY291bnQgPSAwOwogICAgICAgIHZhciBidW5kbGUgPSB7c3RhcnRfdGltZTpob3VyLCBpdGVtczpbXX07CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgdGltZXNsb3RzLnB1c2goYnVuZGxlcy5sZW5ndGgpOwogICAgICAgICAgICBob3VyKys7CiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIHBhc3QgZW5kIG9mIHRoZSB0aW1lbGluZSAoaW5jbHVkaW5nIHJvdW5kaW5nIHVwIHRvIHRoZSBuZWFyZXN0IGJ1bmRsZSkKICAgICAgICAgICAgLy8gTmVlZCB0byB1c2UgZGF0ZSBmdW5jdGlvbiB0byBhY2NvdW50IGZvciB0aW1lIHNoaWZ0cyAoZS5nLiBEYXlsaWdodCBTYXZpbmdzIFRpbWUpCiAgICAgICAgICAgIHZhciB0aW1lID0gbmV3IERhdGUoc3RhcnRfdGltZS5nZXRUaW1lKCkgKyBob3VyICogMzYwMDAwMCk7CiAgICAgICAgICAgIGlmICgodGltZS5nZXRIb3VycygpICUgYnVuZGxlX3NpemUpICE9PSAwKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBzdGFydF9pZHggPSBpdGVtX2lkeDsKICAgICAgICAgICAgd2hpbGUgKChpdGVtX2lkeCA8IGdyYXBoLml0ZW1zLmxlbmd0aCkgJiYKICAgICAgICAgICAgICAgICAgIChuZXcgRGF0ZShncmFwaC5pdGVtc1tpdGVtX2lkeF0uYXNzaWdubWVudHMuYXZhaWxhYmxlX2F0KSA8IHRpbWUpKSB7CiAgICAgICAgICAgICAgICBpdGVtX2lkeCsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBidW5kbGUuaXRlbXMgPSBncmFwaC5pdGVtcy5zbGljZShzdGFydF9pZHgsIGl0ZW1faWR4KTsKICAgICAgICAgICAgYnVuZGxlLmVuZF90aW1lID0gaG91cjsKICAgICAgICAgICAgY2FsY19idW5kbGVfc3RhdHMoYnVuZGxlKTsKICAgICAgICAgICAgZ3JhcGguYnVuZGxlcy5wdXNoKGJ1bmRsZSk7CgogICAgICAgICAgICBncmFwaC50b3RhbF9yZXZpZXdzICs9IGJ1bmRsZS5pdGVtcy5sZW5ndGg7CiAgICAgICAgICAgIGlmIChidW5kbGUuaXRlbXMubGVuZ3RoID4gZ3JhcGgubWF4X3Jldmlld3MpIGdyYXBoLm1heF9yZXZpZXdzID0gYnVuZGxlLml0ZW1zLmxlbmd0aDsKICAgICAgICAgICAgaWYgKGhvdXIgPj0gZ3JhcGgueF9heGlzLm1heF9ob3VycykgYnJlYWs7CgogICAgICAgICAgICBidW5kbGUgPSB7c3RhcnRfdGltZTpob3VyLCBpdGVtczpbXX07CiAgICAgICAgfQogICAgICAgIGdyYXBoLnhfYXhpcy5tYXhfaG91cnMgPSBob3VyOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBDYWxjdWxhdGUgc3RhdHMgZm9yIGEgYnVuZGxlCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGNhbGNfYnVuZGxlX3N0YXRzKGJ1bmRsZSkgewogICAgICAgIHZhciBpdHlwZV90b19pbnQgPSB7cmFkaWNhbDowLCBrYW5qaToxLCB2b2NhYnVsYXJ5OjJ9OwogICAgICAgIHZhciBpdHlwZV90b19jbGFzcyA9IHtyYWRpY2FsOidyYWQnLCBrYW5qaTona2FuJywgdm9jYWJ1bGFyeTondm9jJ307CiAgICAgICAgdmFyIHNyc190b19jbGFzcyA9IHsKICAgICAgICAgICAgY3VycjogWydhcHByJywnYXBwcicsJ2FwcHInLCdhcHByJywnYXBwcicsJ2d1cnUnLCdndXJ1JywnbWFzdCcsJ2VubGknXSwKICAgICAgICAgICAgbmV4dDogWydhcHByJywnYXBwcicsJ2FwcHInLCdhcHByJywnZ3VydScsJ2d1cnUnLCdtYXN0JywnZW5saScsJ2J1cm4nXQogICAgICAgIH07CiAgICAgICAgYnVuZGxlLml0ZW1zLnNvcnQoZnVuY3Rpb24oYSwgYil7CiAgICAgICAgICAgIHZhciBhX2l0eXBlID0gaXR5cGVfdG9faW50W2Eub2JqZWN0XTsKICAgICAgICAgICAgdmFyIGJfaXR5cGUgPSBpdHlwZV90b19pbnRbYi5vYmplY3RdOwogICAgICAgICAgICBpZiAoYV9pdHlwZSAhPT0gYl9pdHlwZSkgcmV0dXJuIGFfaXR5cGUgLSBiX2l0eXBlOwogICAgICAgICAgICBpZiAoYS5kYXRhLmxldmVsICE9PSBiLmRhdGEubGV2ZWwpIHJldHVybiBhLmRhdGEubGV2ZWwgLSBiLmRhdGEubGV2ZWw7CiAgICAgICAgICAgIHJldHVybiBhLmRhdGEuc2x1Zy5sb2NhbGVDb21wYXJlKGIuZGF0YS5zbHVnKTsKICAgICAgICB9KTsKICAgICAgICBidW5kbGUuc3RhdHMgPSB7CiAgICAgICAgICAgIGNvdW50OjAsCiAgICAgICAgICAgIHJhZDowLCBrYW46MCwgdm9jOjAsCiAgICAgICAgICAgIGFwcHI6MCwgZ3VydTowLCBtYXN0OjAsIGVubGk6MCwgYnVybjowLAogICAgICAgICAgICBsdmxncnAwOjAsIGx2bGdycDE6MCwgbHZsZ3JwMjowLCBsdmxncnAzOjAsIGx2bGdycDQ6MCwgbHZsZ3JwNTowLAogICAgICAgICAgICBjdXJyX2NvdW50OiAwLAogICAgICAgICAgICBoYXNfY3Vycl9tYXJrZXI6IGZhbHNlLAogICAgICAgICAgICBidXJuX2NvdW50OiAwCiAgICAgICAgfTsKICAgICAgICB2YXIgc3RhdHMgPSBidW5kbGUuc3RhdHM7CiAgICAgICAgZm9yICh2YXIgaXRlbV9pZHggaW4gYnVuZGxlLml0ZW1zKSB7CiAgICAgICAgICAgIHZhciBpdGVtID0gYnVuZGxlLml0ZW1zW2l0ZW1faWR4XTsKICAgICAgICAgICAgc3RhdHMuY291bnQrKzsKICAgICAgICAgICAgc3RhdHNbaXR5cGVfdG9fY2xhc3NbaXRlbS5vYmplY3RdXSsrOwogICAgICAgICAgICBzdGF0c1tzcnNfdG9fY2xhc3Nbc2V0dGluZ3Muc3JzX2N1cnJfbmV4dF1baXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2VdXSsrOwogICAgICAgICAgICBzdGF0c1snbHZsZ3JwJytNYXRoLmZsb29yKChpdGVtLmRhdGEubGV2ZWwtMSkvMTApXSsrOwogICAgICAgICAgICBpZiAoaXRlbS5kYXRhLmxldmVsID09PSB3a29mLnVzZXIubGV2ZWwpIHsKICAgICAgICAgICAgICAgIHN0YXRzLmN1cnJfY291bnQrKzsKICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5jdXJyZW50X2xldmVsX21hcmtlcnMuaW5kZXhPZihpdGVtLm9iamVjdFswXSkgPj0gMCkgewogICAgICAgICAgICAgICAgICAgIHN0YXRzLmhhc19jdXJyX21hcmtlciA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVuZGxlLnN0YXRzLmJ1cm5fY291bnQgPSBidW5kbGUuc3RhdHNbc3JzX3RvX2NsYXNzW3NldHRpbmdzLnNyc19jdXJyX25leHRdWzhdXTsKICAgICAgICBncmFwaC5jdXJyZW50X2J1bmRsZSA9IGJ1bmRsZTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUmV0dXJuIHRoZSB0aW1lc3RhbXAgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgY3VycmVudCBVVEMgaG91ci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gdG9TdGFydE9mVVRDSG91cihkYXRlKSB7CiAgICAgICAgdmFyIGQgPSAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgPyBkYXRlLmdldFRpbWUoKSA6IGRhdGUpOwogICAgICAgIGQgPSBNYXRoLmZsb29yKGQvMzYwMDAwMCkqMzYwMDAwMDsKICAgICAgICByZXR1cm4gKGRhdGUgaW5zdGFuY2VvZiBEYXRlID8gbmV3IERhdGUoZCkgOiBkKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU3RhcnQgYSB0aW1lciB0byByZWZyZXNoIHRoZSB0aW1lbGluZSAod2l0aG91dCBmZXRjaCkgYXQgdGhlIHRvcCBvZiB0aGUgaG91ci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gc3RhcnRfcmVmcmVzaF90aW1lcigpIHsKICAgICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTsKICAgICAgICB2YXIgbmV4dF9ob3VyID0gdG9TdGFydE9mVVRDSG91cihub3cpICsgMzYwMTAwMDsgLy8gMSBzZWNvbmQgcGFzdCB0aGUgbmV4dCBVVEMgaG91ci4KICAgICAgICB2YXIgd2FpdF90aW1lID0gKG5leHRfaG91ciAtIG5vdyk7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgICAgICAgICBidW5kbGVfYnlfdGltZXNsb3QoKTsKICAgICAgICAgICAgdXBkYXRlX3NsaWRlcl9yZXZpZXdzKCk7CiAgICAgICAgICAgIGRyYXdfdGltZWxpbmUoKTsKICAgICAgICAgICAgc3RhcnRfcmVmcmVzaF90aW1lcigpOwogICAgICAgIH0sIHdhaXRfdGltZSk7CiAgICB9Cgp9KSh3aW5kb3cudGltZWxpbmUpOwo="},{"name":"Wanikani Dashboard Progress Plus","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["/^https://(www|preview).wanikani.com/(dashboard)?$/"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-end","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1569496825154,"data":{}},"enabled":false,"position":24,"file_url":"https://greasyfork.org/scripts/9552-wanikani-dashboard-progress-plus/code/Wanikani%20Dashboard%20Progress%20Plus.user.js","uuid":"8e94d762-0bc9-4a42-8145-e177a790cfb5","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFdhbmlrYW5pIERhc2hib2FyZCBQcm9ncmVzcyBQbHVzCi8vIEBuYW1lc3BhY2UgICByZmluZGxleQovLyBAZGVzY3JpcHRpb24gRGlzcGxheSBkZXRhaWxlZCBsZXZlbCBwcm9ncmVzcy4KLy8gQHZlcnNpb24gICAgIDMuMC4yCi8vIEBpbmNsdWRlICAgICAvXmh0dHBzOi8vKHd3d3xwcmV2aWV3KS53YW5pa2FuaS5jb20vKGRhc2hib2FyZCk/JC8KLy8gQGNvcHlyaWdodCAgIDIwMTgrLCBSb2JpbiBGaW5kbGV5Ci8vIEBsaWNlbnNlICAgICBNSVQ7IGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQKLy8gQHJ1bi1hdCAgICAgIGRvY3VtZW50LWVuZAovLyBAZ3JhbnQgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCndpbmRvdy5kcHAgPSB7fTsKCihmdW5jdGlvbihnb2JqKSB7CgogICAgLyogZ2xvYmFsICQsIHdrb2YgKi8KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEluaXRpYWxpemF0aW9uIG9mIHRoZSBXYW5pa2FuaSBPcGVuIEZyYW1ld29yay4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgdmFyIHNjcmlwdF9uYW1lID0gJ0Rhc2hib2FyZCBQcm9ncmVzcyBQbHVzJzsKICAgIGlmICghd2luZG93Lndrb2YpIHsKICAgICAgICBpZiAoY29uZmlybShzY3JpcHRfbmFtZSsnIHJlcXVpcmVzIFdhbmlrYW5pIE9wZW4gRnJhbWV3b3JrLlxuRG8geW91IHdhbnQgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zPycpKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ2h0dHBzOi8vY29tbXVuaXR5LndhbmlrYW5pLmNvbS90L2luc3RydWN0aW9ucy1pbnN0YWxsaW5nLXdhbmlrYW5pLW9wZW4tZnJhbWV3b3JrLzI4NTQ5JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdrb2YuaW5jbHVkZSgnSXRlbURhdGEsIE1lbnUsIFNldHRpbmdzJyk7CiAgICB3a29mLnJlYWR5KCdkb2N1bWVudCxJdGVtRGF0YSxNZW51LFNldHRpbmdzJykudGhlbihsb2FkX3NldHRpbmdzKS50aGVuKHN0YXJ0dXApOwoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBHbG9iYWwgdmFyaWFibGVzCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBzZXR0aW5ncywgc2V0dGluZ3NfZGlhbG9nOwoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBMb2FkIHRoZSBzY3JpcHQgc2V0dGluZ3MuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGxvYWRfc2V0dGluZ3MoKSB7CiAgICAgICAgdmFyIGRlZmF1bHRzID0gewogICAgICAgICAgICB2aXNpYmxlX2l0ZW1zOiAnYWxsJywKICAgICAgICAgICAgbG9ja2VkX3Bvc2l0aW9uOiAnZmlyc3QnLAogICAgICAgICAgICBzaG93XzkwcGVyY2VudDogdHJ1ZSwKICAgICAgICAgICAgc2hvd19jaGFyOiB0cnVlLAogICAgICAgICAgICBlbmFibGVfcG9wdXA6IHRydWUsCiAgICAgICAgICAgIHNob3dfbWVhbmluZzogdHJ1ZSwKICAgICAgICAgICAgc2hvd19yZWFkaW5nOiB0cnVlLAogICAgICAgICAgICBzaG93X3NyczogdHJ1ZSwKICAgICAgICAgICAgc2hvd19uZXh0X3JldmlldzogdHJ1ZSwKICAgICAgICAgICAgc2hvd19wYXNzZWQ6IHRydWUsCiAgICAgICAgICAgIHRpbWVfZm9ybWF0OiAnMTJob3VyJywKICAgICAgICB9OwogICAgICAgIHJldHVybiB3a29mLlNldHRpbmdzLmxvYWQoJ2RwcCcsIGRlZmF1bHRzKS50aGVuKGZ1bmN0aW9uKGRhdGEpewogICAgICAgICAgICBzZXR0aW5ncyA9IHdrb2Yuc2V0dGluZ3MuZHBwOwogICAgICAgIH0pOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBPcGVuIHRoZSBzZXR0aW5ncyBkaWFsb2cKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gb3Blbl9zZXR0aW5ncygpIHsKICAgICAgICB2YXIgY29uZmlnID0gewogICAgICAgICAgICBzY3JpcHRfaWQ6ICdkcHAnLAogICAgICAgICAgICB0aXRsZTogJ0Rhc2hib2FyZCBQcm9ncmVzcyBQbHVzJywKICAgICAgICAgICAgb25fc2F2ZTogc2V0dGluZ3Nfc2F2ZWQsCiAgICAgICAgICAgIG9uX3JlZnJlc2g6IHJlZnJlc2hfc2V0dGluZ3MsCiAgICAgICAgICAgIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgIHRhYnM6IHt0eXBlOid0YWJzZXQnLCBjb250ZW50OiB7CiAgICAgICAgICAgICAgICAgICAgcGdMYXlvdXQ6IHt0eXBlOidwYWdlJywgbGFiZWw6J01haW4gVmlldycsIGhvdmVyX3RpcDonU2V0dGluZ3MgZm9yIHRoZSBtYWluIHZpZXcuJywgY29udGVudDogewogICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlX2l0ZW1zOiB7dHlwZTonZHJvcGRvd24nLCBsYWJlbDonVmlzaWJsZSBJdGVtcycsIGRlZmF1bHQ6J2FsbCcsIGNvbnRlbnQ6e2FsbDonQWxsIEl0ZW1zJyxhcHByX29ubHk6J0FwcHJlbnRpY2UgT25seScsZ3VydV9vbmx5OidHdXJ1KyBPbmx5J30sIGhvdmVyX3RpcDonQ2hvb3NlIHdoaWNoIGl0ZW1zIHRvIHNob3cuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfOTBwZXJjZW50OiB7dHlwZTonY2hlY2tib3gnLCBsYWJlbDonU2hvdyA5MCUgQnJhY2tldCcsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidTaG93IHRoZSBicmFja2V0IGFyb3VuZCA5MCUgb2YgaXRlbXMuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfY2hhcjoge3R5cGU6J2NoZWNrYm94JywgbGFiZWw6J1Nob3cgS2FuamkvUmFkaWNhbCcsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidTaG93IHRoZSBrYW5qaSBvciByYWRpY2FsIGluc2lkZSBlYWNoIHRpbGUuJ30sCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tlZF9wb3NpdGlvbjoge3R5cGU6J2Ryb3Bkb3duJywgbGFiZWw6J0xvY2tlZCBJdGVtIFBvc2l0aW9uJywgZGVmYXVsdDonZmlyc3QnLCBjb250ZW50OntmaXJzdDonRmlyc3QnLGxhc3Q6J0xhc3QnfSwgaG92ZXJfdGlwOidDaG9vc2Ugd2hlcmUgbG9ja2VkIGl0ZW1zIGFyZSBwbGFjZWQuJ30sCiAgICAgICAgICAgICAgICAgICAgfX0sCiAgICAgICAgICAgICAgICAgICAgcGdQb3B1cEluZm86IHt0eXBlOidwYWdlJywgbGFiZWw6J1BvcC11cCBJbmZvJywgaG92ZXJfdGlwOidJbmZvcm1hdGlvbiBzaG93biBpbiB0aGUgcG9wdXAgYm94LicsIGNvbnRlbnQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX3BvcHVwOiB7dHlwZTonY2hlY2tib3gnLCBsYWJlbDonRW5hYmxlIFBvcC11cCBJbmZvIEJveCcsIGRlZmF1bHQ6dHJ1ZSwgcmVmcmVzaF9vbl9jaGFuZ2U6dHJ1ZSwgaG92ZXJfdGlwOidDaG9vc2Ugd2hldGhlciB0byBzaG93IHBvcC11cCBpbmZvIGJveCB3aGVuIGhvdmVyaW5nIG92ZXIgYW4gaXRlbS4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgZ3JwUG9wdXBJbmZvOiB7dHlwZTonZ3JvdXAnLCBsYWJlbDonUG9wLXVwIEluZm8nLCBob3Zlcl90aXA6J0luZm9ybWF0aW9uIHRvIGRpc3BsYXkgaW4gdGhlIHBvcC11cCBib3guJywgY29udGVudDp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X21lYW5pbmc6IHt0eXBlOidjaGVja2JveCcsIGxhYmVsOidTaG93IE1lYW5pbmcnLCBkZWZhdWx0OnRydWUsIGhvdmVyX3RpcDonQ2hvb3NlIHdoZXRoZXIgdG8gc2hvdyB0aGUgaXRlbVwncyBtZWFuaW5nIGluIHRoZSBwb3AtdXAgaW5mby4nfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfcmVhZGluZzoge3R5cGU6J2NoZWNrYm94JywgbGFiZWw6J1Nob3cgUmVhZGluZycsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidDaG9vc2Ugd2hldGhlciB0byBzaG93IHRoZSBpdGVtXCdzIHJlYWRpbmcgaW4gdGhlIHBvcC11cCBpbmZvLid9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd19zcnM6IHt0eXBlOidjaGVja2JveCcsIGxhYmVsOidTaG93IFNSUyBMZXZlbCcsIGRlZmF1bHQ6dHJ1ZSwgaG92ZXJfdGlwOidDaG9vc2Ugd2hldGhlciB0byBzaG93IHRoZSBpdGVtXCdzIFNSUyBsZXZlbCBpbiB0aGUgcG9wLXVwIGluZm8uJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X25leHRfcmV2aWV3OiB7dHlwZTonY2hlY2tib3gnLCBsYWJlbDonU2hvdyBOZXh0IFJldmlldyBEYXRlJywgZGVmYXVsdDp0cnVlLCBob3Zlcl90aXA6J0Nob29zZSB3aGV0aGVyIHRvIHNob3cgdGhlIGl0ZW1cJ3MgbmV4dCByZXZpZXcgZGF0ZSBpbiB0aGUgcG9wLXVwIGluZm8uJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93X3Bhc3NlZDoge3R5cGU6J2NoZWNrYm94JywgbGFiZWw6J1Nob3cgUGFzc2VkIERhdGUnLCBkZWZhdWx0OnRydWUsIGhvdmVyX3RpcDonQ2hvb3NlIHdoZXRoZXIgdG8gc2hvdyB0aGUgZGF0ZSB0aGF0IHRoZSBpdGVtIHBhc3NlZCBpbiB0aGUgcG9wLXVwIGluZm8uJ30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lX2Zvcm1hdDoge3R5cGU6J2Ryb3Bkb3duJywgbGFiZWw6J1RpbWUgRm9ybWF0JywgZGVmYXVsdDonMTJob3VyJywgY29udGVudDp7JzEyaG91cic6JzEyLWhvdXInLCcyNGhvdXInOicyNC1ob3VyJ30sIGhvdmVyX3RpcDonRGlzcGxheSB0aW1lIGluIDEyIG9yIDI0LWhvdXIgZm9ybWF0Lid9LAogICAgICAgICAgICAgICAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgIH19CiAgICAgICAgICAgICAgICB9fQogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB2YXIgc2V0dGluZ3NfZGlhbG9nID0gbmV3IHdrb2YuU2V0dGluZ3MoY29uZmlnKTsKICAgICAgICBzZXR0aW5nc19kaWFsb2cub3BlbigpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSZWZyZXNoIHNldHRpbmdzIGRpYWxvZwogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHJlZnJlc2hfc2V0dGluZ3Moc2V0dGluZ3MpIHsKICAgICAgICBpZiAoc2V0dGluZ3MuZW5hYmxlX3BvcHVwKSB7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19tZWFuaW5nJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuY2xvc2VzdCgnLnJvdycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAkKCcjZHBwX3Nob3dfcmVhZGluZycpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLmNsb3Nlc3QoJy5yb3cnKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgJCgnI2RwcF9zaG93X3NycycpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLmNsb3Nlc3QoJy5yb3cnKS5yZW1vdmVDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgJCgnI2RwcF9zaG93X25leHRfcmV2aWV3JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuY2xvc2VzdCgnLnJvdycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAkKCcjZHBwX3Nob3dfcGFzc2VkJykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuY2xvc2VzdCgnLnJvdycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgICAgICAkKCcjZHBwX3RpbWVfZm9ybWF0JykucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSkuY2xvc2VzdCgnLnJvdycpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19tZWFuaW5nJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5jbG9zZXN0KCcucm93JykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19yZWFkaW5nJykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5jbG9zZXN0KCcucm93JykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19zcnMnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmNsb3Nlc3QoJy5yb3cnKS5hZGRDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgJCgnI2RwcF9zaG93X25leHRfcmV2aWV3JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5jbG9zZXN0KCcucm93JykuYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7CiAgICAgICAgICAgICQoJyNkcHBfc2hvd19wYXNzZWQnKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpLmNsb3Nlc3QoJy5yb3cnKS5hZGRDbGFzcygnZGlzYWJsZWQnKTsKICAgICAgICAgICAgJCgnI2RwcF90aW1lX2Zvcm1hdCcpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSkuY2xvc2VzdCgnLnJvdycpLmFkZENsYXNzKCdkaXNhYmxlZCcpOwogICAgICAgIH0KICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU3RhcnR1cAogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBzdGFydHVwKCkgewogICAgICAgIGluc3RhbGxfY3NzKCk7CiAgICAgICAgaW5zdGFsbF9tZW51KCk7CiAgICAgICAgaW5pdF91aSgpOwoKICAgICAgICB3a29mLkl0ZW1EYXRhLmdldF9pdGVtcyh7CiAgICAgICAgICAgIHdrX2l0ZW1zOnsKICAgICAgICAgICAgICAgIG9wdGlvbnM6ewogICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzOnRydWUsCiAgICAgICAgICAgICAgICAgICAgcmV2aWV3X3N0YXRpc3RpY3M6dHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGZpbHRlcnM6ewogICAgICAgICAgICAgICAgICAgIGxldmVsOicrMCcsCiAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBlOidyYWRpY2FsLGthbmppJywKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pCiAgICAgICAgLnRoZW4ocHJvY2Vzc19pdGVtcyk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIENTUyBTdHlsaW5nCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIHZhciBwcm9ncmVzc19jc3MgPQogICAgICAgICcjd2tvZnNfZHBwIC5yb3cuZGlzYWJsZWQgbGFiZWwge29wYWNpdHk6MC41O30nKwoKICAgICAgICAnZGl2LnByb2dyZXNzLWVudHJpZXMge2dyaWQtZ2FwOjEycHggMHB4O30nKwogICAgICAgICdkaXYucHJvZ3Jlc3MtZW50cnkge3BhZGRpbmc6NHB4O30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnkucGN0OTAge2JhY2tncm91bmQ6I2ZmZjsgYm9yZGVyLXJhZGl1czowOyBib3JkZXItY29sb3I6Izc3NzsgYm9yZGVyLXN0eWxlOnNvbGlkOyBib3JkZXItd2lkdGg6MXB4IDA7IHBhZGRpbmctdG9wOjNweDsgcGFkZGluZy1ib3R0b206M3B4O30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnkucGN0OTAucGN0OTBfbGVmdCB7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4OyBib3JkZXItdG9wLWxlZnQtcmFkaXVzOjdweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czo3cHg7IHBhZGRpbmctbGVmdDozcHg7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeS5wY3Q5MC5wY3Q5MF9yaWdodCB7Ym9yZGVyLXJpZ2h0LXdpZHRoOjFweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6N3B4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo3cHg7IHBhZGRpbmctcmlnaHQ6M3B4O30nKwogICAgICAgICcucHJvZ3Jlc3Npb25bZGF0YS1oaWRlLWNoYXI9InRydWUiXSAucHJvZ3Jlc3MtZW50cnkgYSB7Y29sb3I6dHJhbnNwYXJlbnQ7IHRleHQtc2hhZG93OnVuc2V0O30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnkuZHBwLW5vc2hvdyB7ZGlzcGxheTpub25lO30nKwoKICAgICAgICAvLyBSYWRpY2FsIGNvbG9ycwogICAgICAgICcucHJvZ3Jlc3MtZW50cnlbZGF0YS1zcnMtbHZsPSIwIl0gLnJhZGljYWwtaWNvbiwgLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iMCJdIC5rYW5qaS1pY29uIHtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1pbWFnZTogdXJsKCInKwogICAgICAgICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUNjQUFBQW5DQVlBQUFDTW8xRTFBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGwnKwogICAgICAgICdQQUFBQUY1SlJFRlVlTnJzMDdFTndDQU1CRUR3c3BrcDB6cEJRaUpOK2krT0FxU3ZYalkzdS9zZTUxejdqY2dxdGRpNktyWFl5dWE3MXBGWTdEdTV5SDlYcWNXQUFBSUlJSUFBQWdnZ2dBQUNDQ0NBQUEnKwogICAgICAgICdJSUlJQUFBZ2dnZnJOSGdBRUFYcTVJYWJzTkJPd0FBQUFBU1VWT1JLNUNZSUk9JysKICAgICAgICAnIik7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjAiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMGFhZmY7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjEiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMGFhZmY7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjIiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiMwMGFhZmY7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDBkZWcsIzAwYWFmZiwjMDBhYWZmKTt9JysKICAgICAgICAnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iMyJdIC5yYWRpY2FsLWljb24ge2JhY2tncm91bmQtY29sb3I6IzAwYWFmZjsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMGRlZywjMDBhYWZmLCMwMGFhZmYpO30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnlbZGF0YS1zcnMtbHZsPSI0Il0gLnJhZGljYWwtaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojMDBhYWZmOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCMwMGFhZmYsIzAwYWFmZik7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjUiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiNiNjlhY2Q7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDBkZWcsIzkwNjViMywjYjY5YWNkKTt9JysKICAgICAgICAnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iNiJdIC5yYWRpY2FsLWljb24ge2JhY2tncm91bmQtY29sb3I6I2I2OWFjZDsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMGRlZywjOTA2NWIzLCNiNjlhY2QpO30nKwogICAgICAgICcucHJvZ3Jlc3MtZW50cnlbZGF0YS1zcnMtbHZsPSI3Il0gLnJhZGljYWwtaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojOWFhNWNmOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM3NDgzYmUsIzlhYTVjZik7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjgiXSAucmFkaWNhbC1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiNhM2MzZDM7IGJhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KDBkZWcsIzc1YTViZCwjYTNjM2QzKTt9JysKICAgICAgICAnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iOSJdIC5yYWRpY2FsLWljb24ge2JhY2tncm91bmQtY29sb3I6Izk5OTk5OTsgYmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQoMGRlZywjNzM3MzczLCM5OTk5OTkpO30nKwoKICAgICAgICAvLyBLYW5qaSBjb2xvcnMKICAgICAgICAnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iMCJdIC5rYW5qaS1pY29uIHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjAwYWE7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjEiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojZmYwMGFhOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCNjYzAwODgsI2ZmMDBhYSk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjIiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojZmYwMGFhOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCNjYzAwODgsI2ZmMDBhYSk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjMiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojZmYwMGFhOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCNjYzAwODgsI2ZmMDBhYSk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjQiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojZmYwMGFhOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCNjYzAwODgsI2ZmMDBhYSk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjUiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojYjY5YWNkOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM5MDY1YjMsI2I2OWFjZCk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjYiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojYjY5YWNkOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM5MDY1YjMsI2I2OWFjZCk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjciXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojOWFhNWNmOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM3NDgzYmUsIzlhYTVjZik7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjgiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojYTNjM2QzOyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM3NWE1YmQsI2EzYzNkMyk7fScrCiAgICAgICAgJy5wcm9ncmVzcy1lbnRyeVtkYXRhLXNycy1sdmw9IjkiXSAua2FuamktaWNvbiB7YmFja2dyb3VuZC1jb2xvcjojOTk5OTk5OyBiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCgwZGVnLCM3MzczNzMsIzk5OTk5OSk7fScrCgogICAgICAgICcucHJvZ3Jlc3MtZW50cmllcyAucG9wb3ZlciB7Ym9yZGVyLXJhZGl1czo1cHg7IGJvcmRlcjo1cHggc29saWQgcmdiYSg3NSw3NSw3NSwwLjgpOyBib3gtc2hhZG93Om5vbmU7fScrCiAgICAgICAgJy5wcm9ncmVzc2lvbiAucG9wb3Zlci5yaWdodCAuYXJyb3cge2JvcmRlci1yaWdodC1jb2xvcjpyZ2JhKDc1LDc1LDc1LDAuOCk7IGxlZnQ6LTE2cHg7fScrCiAgICAgICAgJy5wcm9ncmVzc2lvbiAucG9wb3Zlci5yaWdodCAuYXJyb3c6YWZ0ZXIge2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDt9JysKICAgICAgICAnLnByb2dyZXNzaW9uIC5wb3BvdmVyLmxlZnQgLmFycm93IHtib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDc1LDc1LDc1LDAuNTUpO30nKwogICAgICAgICcucHJvZ3Jlc3Npb24gLnBvcG92ZXIgLnBvcG92ZXItY29udGVudCB7dGV4dC1zaGFkb3c6IDAgMXB4IDAgI2ZmZjt9JysKICAgICAgICAnLnByb2dyZXNzaW9uIC5wb3BvdmVyIC5zcnMge2ZvbnQtc2l6ZTo3NSU7IGZvbnQtd2VpZ2h0OmJvbGQ7fScrCiAgICAgICAgJy5wcm9ncmVzc2lvbiAucG9wb3ZlciAubmV4dCB7Zm9udC1zaXplOjc1JTsgZm9udC13ZWlnaHQ6Ym9sZDt9JysKCiAgICAgICAgJy5wcm9ncmVzc2lvbltkYXRhLXNob3ctaXRlbS1uYW1lPSJmYWxzZSJdIC5sYXR0aWNlLXNpbmdsZS1jaGFyYWN0ZXIgbGk+YSB7Y29sb3I6cmdiYSgwLDAsMCwwKTt0ZXh0LXNoYWRvdzowIDAgMCByZ2JhKDAsMCwwLDApO30nOwoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBJbnN0YWxsIHN0eWxlc2hlZXQuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIGluc3RhbGxfY3NzKCkgewogICAgICAgICQoJ2hlYWQnKS5hcHBlbmQoJzxzdHlsZT4nK3Byb2dyZXNzX2NzcysnPC9zdHlsZT4nKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gSW5zdGFsbCBtZW51IGxpbmsKICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gaW5zdGFsbF9tZW51KCkgewoJCS8vIFNldCB1cCBtZW51IGl0ZW0gdG8gb3BlbiBzY3JpcHQuCgkJd2tvZi5NZW51Lmluc2VydF9zY3JpcHRfbGluayh7bmFtZTonZHBwJyxzdWJtZW51OidTZXR0aW5ncycsdGl0bGU6J0Rhc2hib2FyZCBQcm9ncmVzcyBQbHVzJyxvbl9jbGljazpvcGVuX3NldHRpbmdzfSk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEluaXRpYWxpemUgdGhlIHVzZXIgaW50ZXJmYWNlLgogICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBmdW5jdGlvbiBpbml0X3VpKCkgewogICAgICAgICQoJy5wcm9ncmVzc2lvbicpLmF0dHIoJ2RhdGEtaGlkZS1jaGFyJywgIXNldHRpbmdzLnNob3dfY2hhcik7CiAgICAgICAgaWYgKHNldHRpbmdzLmVuYWJsZV9wb3B1cCkgewogICAgICAgICAgICAkKCcucHJvZ3Jlc3MtZW50cmllcycpLnBvcG92ZXIoewogICAgICAgICAgICAgICAgc2VsZWN0b3I6Jy5wcm9ncmVzcy1lbnRyeScsCiAgICAgICAgICAgICAgICB0cmlnZ2VyOidob3ZlcicsCiAgICAgICAgICAgICAgICBhbmltYXRpb246IGZhbHNlLAogICAgICAgICAgICAgICAgaHRtbDp0cnVlLAogICAgICAgICAgICAgICAgY29udGVudDpnZW5lcmF0ZV9pdGVtX2luZm8sCiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6cGxhY2VfaXRlbV9pbmZvLAogICAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkKCcucHJvZ3Jlc3MtZW50cmllcycpLnBvcG92ZXIoJ2Rlc3Ryb3knKTsKICAgICAgICB9CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIEhhbmRsZXIgZm9yIHdoZW4gdXNlciBjbGlja3MgJ1NhdmUnIGluIHRoZSBzZXR0aW5ncyB3aW5kb3cuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHNldHRpbmdzX3NhdmVkKG5ld19zZXR0aW5ncykgewogICAgICAgIGluaXRfdWkoKTsKICAgICAgICBwb3B1bGF0ZV9pdGVtX2luZm8oJ3JhZGljYWwnKTsKICAgICAgICBwb3B1bGF0ZV9pdGVtX2luZm8oJ2thbmppJyk7CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBvcHVsYXRlIGxldmVsIGluZm8gZnJvbSBBUEkuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHByb2Nlc3NfaXRlbXMoZGF0YSkgewogICAgICAgIGdvYmouaXRlbXMgPSB3a29mLkl0ZW1EYXRhLmdldF9pbmRleChkYXRhLCAnaXRlbV90eXBlJyk7CgogICAgICAgIHBvcHVsYXRlX2l0ZW1faW5mbygncmFkaWNhbCcpOwogICAgICAgIHBvcHVsYXRlX2l0ZW1faW5mbygna2FuamknKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gR2VuZXJhdGUgY29udGVudCBmb3IgcG9wb3Zlci4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZ2VuZXJhdGVfaXRlbV9pbmZvKCkgewogICAgICAgIC8vIFBvcHVsYXRlIHRoZSBuZXh0IHJldmlldyBkYXRlLgogICAgICAgIHZhciBlbGVtID0gJCh0aGlzKQogICAgICAgIHZhciBpdGVtID0gJCh0aGlzKS5kYXRhKCdpdGVtJyk7CiAgICAgICAgdmFyIGh0bWwgPSBbXTsKCiAgICAgICAgLy8gRnVuY3Rpb25zIGZvciBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgaW5mb3JtYXRpb24uCiAgICAgICAgZnVuY3Rpb24gYWNjZXB0ZWRfZmlyc3QoYSwgYikgewogICAgICAgICAgICBpZiAoYS5hY2NlcHRlZF9hbnN3ZXIgPT09IGIuYWNjZXB0ZWRfYW5zd2VyKSByZXR1cm4gMDsKICAgICAgICAgICAgaWYgKGEuYWNjZXB0ZWRfYW5zd2VyKSByZXR1cm4gLTE7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBwcmltYXJ5KGEpIHtyZXR1cm4gYS5wcmltYXJ5O30KICAgICAgICBmdW5jdGlvbiB0b19tZWFuaW5nKGEpIHtyZXR1cm4gYS5tZWFuaW5nO30KICAgICAgICBmdW5jdGlvbiB0b19yZWFkaW5nKGEpIHtyZXR1cm4gYS5yZWFkaW5nO30KCiAgICAgICAgLy8gTWVhbmluZwogICAgICAgIGlmIChzZXR0aW5ncy5zaG93X21lYW5pbmcpIHsKICAgICAgICAgICAgdmFyIG1lYW5pbmcgPSBpdGVtLmRhdGEubWVhbmluZ3MuZmlsdGVyKHByaW1hcnkpLnNvcnQoYWNjZXB0ZWRfZmlyc3QpLm1hcCh0b19tZWFuaW5nKS5qb2luKCcsICcpOwogICAgICAgICAgICBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJtZWFuaW5nIj4nK21lYW5pbmcrJzwvc3Bhbj4nKTsKICAgICAgICB9CgogICAgICAgIC8vIFJlYWRpbmcKICAgICAgICBpZiAoc2V0dGluZ3Muc2hvd19yZWFkaW5nICYmIGl0ZW0ub2JqZWN0ID09PSAna2FuamknKSB7CiAgICAgICAgICAgIHZhciByZWFkaW5nID0gaXRlbS5kYXRhLnJlYWRpbmdzLmZpbHRlcihwcmltYXJ5KS5zb3J0KGFjY2VwdGVkX2ZpcnN0KS5tYXAodG9fcmVhZGluZykuam9pbignLCAnKTsKICAgICAgICAgICAgaHRtbC5wdXNoKCc8c3BhbiBjbGFzcz0icmVhZGluZyIgbGFuZz0iamEiPicrcmVhZGluZysnPC9zcGFuPicpOwogICAgICAgIH0KCiAgICAgICAgLy8gU1JTIFN0YWdlCiAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfc3JzICYmIGl0ZW0uYXNzaWdubWVudHMgJiYgaXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2VfbmFtZSkgewogICAgICAgICAgICBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJzcnMiPlNSUzogJytpdGVtLmFzc2lnbm1lbnRzLnNyc19zdGFnZV9uYW1lKyc8L3NwYW4+Jyk7CiAgICAgICAgfQoKICAgICAgICAvLyBQYXNzIERhdGUgYW5kIE5leHQgUmV2aWV3CiAgICAgICAgdmFyIG5leHQgPSBbXTsKICAgICAgICB2YXIgZGF0ZTsKICAgICAgICBpZiAoaXRlbS5hc3NpZ25tZW50cyAmJiBpdGVtLmFzc2lnbm1lbnRzLmF2YWlsYWJsZV9hdCkgewogICAgICAgICAgICBpZiAoaXRlbS5hc3NpZ25tZW50cy5wYXNzZWQpIHsKICAgICAgICAgICAgICAgIGlmIChzZXR0aW5ncy5zaG93X3Bhc3NlZCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmFzc2lnbm1lbnRzLnBhc3NlZF9hdCkgewogICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gZm9ybWF0RGF0ZShuZXcgRGF0ZShpdGVtLmFzc2lnbm1lbnRzLnBhc3NlZF9hdCksIGZhbHNlIC8qIGlzX25leHRfZGF0ZSAqLyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSA9ICdBIGxvbmcgdGltZSBhZ28uLi4nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2goJ1Bhc3NlZDogJytkYXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2UgPT0gOSkgewogICAgICAgICAgICAgICAgaWYgKHNldHRpbmdzLnNob3dfcGFzc2VkKSB7CiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGZvcm1hdERhdGUobmV3IERhdGUoaXRlbS5hc3NpZ25tZW50cy5idXJuZWRfYXQpLCBmYWxzZSAvKiBpc19uZXh0X2RhdGUgKi8pOwogICAgICAgICAgICAgICAgICAgIG5leHQucHVzaCgnQnVybmVkOiAnK2RhdGUpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBuZXh0LnB1c2goJ0J1cm5lZCEnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChzZXR0aW5ncy5zaG93X25leHRfcmV2aWV3KSB7CiAgICAgICAgICAgICAgICBkYXRlID0gZm9ybWF0RGF0ZShuZXcgRGF0ZShpdGVtLmFzc2lnbm1lbnRzLmF2YWlsYWJsZV9hdCksIHRydWUgLyogaXNfbmV4dF9kYXRlICovKTsKICAgICAgICAgICAgICAgIG5leHQucHVzaCgnTmV4dDogJytkYXRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5leHQucHVzaCgnTG9ja2VkIScpOwogICAgICAgIH0KCiAgICAgICAgLy8gUG9wdWxhdGUgcmVtYWluaW5nIGRhdGEgZm9yIHBvcHVwIHdpbmRvdy4KICAgICAgICBpZiAobmV4dC5sZW5ndGggIT09IDApIHsKICAgICAgICAgICAgaHRtbC5wdXNoKCc8c3BhbiBjbGFzcz0ibmV4dCI+JytuZXh0LmpvaW4oJzxicj4nKSsnPC9zcGFuPicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGh0bWwuam9pbignPGJyPicpOwogICAgfQoKICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgcG9wb3ZlciBzaG91bGQgYmUgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhlIGVsZW1lbnQuCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIGZ1bmN0aW9uIHBsYWNlX2l0ZW1faW5mbygpIHsKICAgICAgICB2YXIgZWxlbSA9IHRoaXMuJGVsZW1lbnQuZXEoMCk7CiAgICAgICAgdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50KCk7CiAgICAgICAgcmV0dXJuICgoZWxlbS5wb3NpdGlvbigpLmxlZnQgKyBlbGVtLndpZHRoKCkgLSBwYXJlbnQucG9zaXRpb24oKS5sZWZ0KSA8PSAocGFyZW50LndpZHRoKCkvMikgPyAncmlnaHQnIDogJ2xlZnQnKTsKICAgIH0KCiAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUG9wdWxhdGUgbGV2ZWwgaW5mbyBmcm9tIEFQSS4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gcG9wdWxhdGVfaXRlbV9pbmZvKGl0eXBlKSB7CiAgICAgICAgdmFyIGdyb3VwLGVsZW1zOwogICAgICAgIGlmIChpdHlwZSA9PT0gJ3JhZGljYWwnKSB7CiAgICAgICAgICAgIGdyb3VwID0gJCgnLnByb2dyZXNzLWVudHJpZXMnKS5lcSgwKTsKICAgICAgICAgICAgZ3JvdXAuYXR0cignZGF0YS10eXBlJywncmFkaWNhbCcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGdyb3VwID0gJCgnLnByb2dyZXNzLWVudHJpZXMnKS5lcSgxKTsKICAgICAgICAgICAgZ3JvdXAuYXR0cignZGF0YS10eXBlJywna2FuamknKTsKICAgICAgICB9CiAgICAgICAgZWxlbXMgPSBncm91cC5maW5kKCcucHJvZ3Jlc3MtZW50cnknKTsKICAgICAgICB2YXIgaXRlbXMgPSB3a29mLkl0ZW1EYXRhLmdldF9pbmRleChnb2JqLml0ZW1zW2l0eXBlXSwgJ3NsdWcnKTsKCiAgICAgICAgLy8gUG9wdWxhdGUgaXRlbSBkYXRhLgogICAgICAgIGVsZW1zLmVhY2goZnVuY3Rpb24oaWR4LCBlbGVtKXsKICAgICAgICAgICAgZWxlbSA9ICQoZWxlbSk7CiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQXR0cigndGl0bGUnKTsKICAgICAgICAgICAgdmFyIGEgPSBlbGVtLmZpbmQoJ2EnKTsKICAgICAgICAgICAgdmFyIHNsdWc7CiAgICAgICAgICAgIGlmIChpdHlwZSA9PT0gJ3JhZGljYWwnKSB7CiAgICAgICAgICAgICAgICBzbHVnID0gYS5hdHRyKCdocmVmJykuc3BsaXQoJy8nKVsyXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNsdWcgPSBhLnRleHQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgaXRlbSA9IGl0ZW1zW3NsdWddOwogICAgICAgICAgICBlbGVtLmRhdGEoJ2l0ZW0nLCBpdGVtKTsKCiAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MoJ2RwcC1wcm9ncmVzcycpOwoKICAgICAgICAgICAgLy8gUG9wdWxhdGUgJ2RhdGEtc3JzLWx2bCcsIHdoaWNoIGlzIGEgc3R5bGluZyBzZWxlY3Rvci4KICAgICAgICAgICAgdmFyIHNycyA9IChpdGVtLmFzc2lnbm1lbnRzID8gaXRlbS5hc3NpZ25tZW50cy5zcnNfc3RhZ2UgOiAwKTsgLy8gMCA9PSBsb2NrZWQKICAgICAgICAgICAgZWxlbS5hdHRyKCdkYXRhLXNycy1sdmwnLCBzcnMpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBTb3J0IGl0ZW1zIGJ5IHNycyBsZXZlbCwgdGhlbiByZXZpZXcgZGF0ZSwgdGhlbiBtZWFuaW5nLgogICAgICAgIHZhciBzcnNfbG9ja2VkID0gKHNldHRpbmdzLmxvY2tlZF9wb3NpdGlvbiA9PT0gJ2ZpcnN0JyA/IDAgOiAxMCk7CiAgICAgICAgZWxlbXMuc29ydChmdW5jdGlvbihhLGIpewogICAgICAgICAgICBpZiAoaXR5cGUgPT09ICdyYWRpY2FsJykgewogICAgICAgICAgICAgICAgYSA9IGl0ZW1zWyQoYSkuZmluZCgnLnJhZGljYWwtaWNvbicpLmF0dHIoJ2hyZWYnKS5zcGxpdCgnLycpWzJdXTsKICAgICAgICAgICAgICAgIGIgPSBpdGVtc1skKGIpLmZpbmQoJy5yYWRpY2FsLWljb24nKS5hdHRyKCdocmVmJykuc3BsaXQoJy8nKVsyXV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhID0gaXRlbXNbJChhKS50ZXh0KCldOwogICAgICAgICAgICAgICAgYiA9IGl0ZW1zWyQoYikudGV4dCgpXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGFfcGFzc2VkID0gKGEgJiYgYS5hc3NpZ25tZW50cyAmJiBhLmFzc2lnbm1lbnRzLnBhc3NlZCk7CiAgICAgICAgICAgIHZhciBiX3Bhc3NlZCA9IChiICYmIGIuYXNzaWdubWVudHMgJiYgYi5hc3NpZ25tZW50cy5wYXNzZWQpOwogICAgICAgICAgICBpZiAoIWFfcGFzc2VkICYmIGJfcGFzc2VkKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChhX3Bhc3NlZCAmJiAhYl9wYXNzZWQpIHJldHVybiAxOwogICAgICAgICAgICB2YXIgYV9zcnMgPSAoYSAmJiBhLmFzc2lnbm1lbnRzICYmIGEuYXNzaWdubWVudHMuc3JzX3N0YWdlID8gYS5hc3NpZ25tZW50cy5zcnNfc3RhZ2UgOiBzcnNfbG9ja2VkKTsKICAgICAgICAgICAgdmFyIGJfc3JzID0gKGIgJiYgYi5hc3NpZ25tZW50cyAmJiBiLmFzc2lnbm1lbnRzLnNyc19zdGFnZSA/IGIuYXNzaWdubWVudHMuc3JzX3N0YWdlIDogc3JzX2xvY2tlZCk7CiAgICAgICAgICAgIGlmIChhX3NycyA8IGJfc3JzKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChhX3NycyA+IGJfc3JzKSByZXR1cm4gMTsKICAgICAgICAgICAgdmFyIGFfYXZhaWwgPSAoYSAmJiBhLmFzc2lnbm1lbnRzICYmIGEuYXNzaWdubWVudHMuYXZhaWxhYmxlX2F0ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYS5hc3NpZ25tZW50cy5hdmFpbGFibGVfYXQpLmdldFRpbWUoKSA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgICAgICAgICAgdmFyIGJfYXZhaWwgPSAoYiAmJiBiLmFzc2lnbm1lbnRzICYmIGIuYXNzaWdubWVudHMuYXZhaWxhYmxlX2F0ID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5hc3NpZ25tZW50cy5hdmFpbGFibGVfYXQpLmdldFRpbWUoKSA6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICAgICAgICAgICAgaWYgKGFfYXZhaWwgPCBiX2F2YWlsKSByZXR1cm4gMTsKICAgICAgICAgICAgaWYgKGFfYXZhaWwgPiBiX2F2YWlsKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChhLmRhdGEuc2x1ZyA8IGIuZGF0YS5zbHVnKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChhLmRhdGEuc2x1ZyA+IGIuZGF0YS5zbHVnKSByZXR1cm4gMTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfSk7CiAgICAgICAgZWxlbXMuZGV0YWNoKCkuYXBwZW5kVG8oZ3JvdXApOwoKICAgICAgICBlbGVtcy5yZW1vdmVDbGFzcygnZHBwLW5vc2hvdyBwY3Q5MF9sZWZ0IHBjdDkwIHBjdDkwX3JpZ2h0Jyk7CiAgICAgICAgdmFyIHNyc2x2bDsKICAgICAgICBzd2l0Y2ggKHNldHRpbmdzLnZpc2libGVfaXRlbXMpIHsKICAgICAgICAgICAgY2FzZSAnYXBwcl9vbmx5JzoKICAgICAgICAgICAgICAgIGZvciAoc3JzbHZsPTU7IHNyc2x2bDw9OTsgc3JzbHZsKyspIHsKICAgICAgICAgICAgICAgICAgICAkKCcucHJvZ3Jlc3MtZW50cnlbZGF0YS1zcnMtbHZsPSInK3Nyc2x2bCsnIl0nKS5hZGRDbGFzcygnZHBwLW5vc2hvdycpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2d1cnVfb25seSc6CiAgICAgICAgICAgICAgICBmb3IgKHNyc2x2bD0wOyBzcnNsdmw8PTQ7IHNyc2x2bCsrKSB7CiAgICAgICAgICAgICAgICAgICAgJCgnLnByb2dyZXNzLWVudHJ5W2RhdGEtc3JzLWx2bD0iJytzcnNsdmwrJyJdJykuYWRkQ2xhc3MoJ2RwcC1ub3Nob3cnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc2V0dGluZ3Muc2hvd185MHBlcmNlbnQgJiYgaXR5cGUgPT09ICdrYW5qaScpIHsKICAgICAgICAgICAgLy8gQWRkIG1hcmtlciBhdCA5MCUsIGluZGljYXRpbmcgd2hlbiBsZXZlbCB3aWxsIGJlIGNvbXBsZXRlLgogICAgICAgICAgICAvLyBGaXJzdCwgbWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCAxMCUgb2YgaXRlbXMgbGVmdC4KICAgICAgICAgICAgdmFyIGlkeDkwID0gTWF0aC5mbG9vcihlbGVtcy5sZW5ndGggKiAwLjEpOwogICAgICAgICAgICB2YXIgbGVuID0gZWxlbXMuY2hpbGRyZW4oJzpub3QoLmRwcC1ub3Nob3cpJykubGVuZ3RoOwogICAgICAgICAgICBpZiAoaWR4OTAgPCBsZW4pIHsKICAgICAgICAgICAgICAgIHZhciB2aXNpYmxlX2VsZW1zID0gZWxlbXMuZmlsdGVyKCc6bm90KC5kcHAtbm9zaG93KScpOwogICAgICAgICAgICAgICAgdmlzaWJsZV9lbGVtcy5lcShpZHg5MCkuYWRkQ2xhc3MoJ3BjdDkwX2xlZnQnKTsKICAgICAgICAgICAgICAgIHZpc2libGVfZWxlbXMuc2xpY2UoaWR4OTApLmFkZENsYXNzKCdwY3Q5MCcpOwogICAgICAgICAgICAgICAgdmlzaWJsZV9lbGVtcy5sYXN0KCkuYWRkQ2xhc3MoJ3BjdDkwX3JpZ2h0Jyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByaW50IGRhdGUgaW4gcHJldHR5IGZvcm1hdC4KICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShkLCBpc19uZXh0X2RhdGUpewogICAgICAgIHZhciBzID0gJyc7CiAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICAgICAgdmFyIFlZID0gZC5nZXRGdWxsWWVhcigpLAogICAgICAgICAgICBNTSA9IGQuZ2V0TW9udGgoKSwKICAgICAgICAgICAgREQgPSBkLmdldERhdGUoKSwKICAgICAgICAgICAgaGggPSBkLmdldEhvdXJzKCksCiAgICAgICAgICAgIG1tID0gZC5nZXRNaW51dGVzKCksCiAgICAgICAgICAgIG9uZV9kYXkgPSAyNCo2MCo2MCoxMDAwOwoKICAgICAgICBpZiAoaXNfbmV4dF9kYXRlICYmIGQgPCBub3cpIHJldHVybiAiQXZhaWxhYmxlIE5vdyI7CiAgICAgICAgdmFyIHNhbWVfZGF5ID0gKChZWSA9PSBub3cuZ2V0RnVsbFllYXIoKSkgJiYgKE1NID09IG5vdy5nZXRNb250aCgpKSAmJiAoREQgPT0gbm93LmdldERhdGUoKSkgPyAxIDogMCk7CgogICAgICAgIC8vICAgIElmIHRvZGF5OiAgIlRvZGF5IDg6MTVwbSIKICAgICAgICAvLyAgICBvdGhlcndpc2U6ICJXZWQsIEFwciAxNSwgODoxNXBtIgogICAgICAgIGlmIChzYW1lX2RheSkgewogICAgICAgICAgICBzICs9ICdUb2RheSAnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHMgKz0gWydTdW4nLCdNb24nLCdUdWUnLCdXZWQnLCdUaHUnLCdGcmknLCdTYXQnXVtkLmdldERheSgpXSsnLCAnKwogICAgICAgICAgICAgICAgWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYXknLCdKdW4nLCdKdWwnLCdBdWcnLCdTZXAnLCdPY3QnLCdOb3YnLCdEZWMnXVtNTV0rJyAnK0REKycsICc7CiAgICAgICAgfQogICAgICAgIGlmIChzZXR0aW5ncy50aW1lX2Zvcm1hdCA9PT0gJzI0aG91cicpIHsKICAgICAgICAgICAgcyArPSAoJzAnK2hoKS5zbGljZSgtMikrJzonKygnMCcrbW0pLnNsaWNlKC0yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzICs9ICgoKGhoKzExKSUxMikrMSkrJzonKygnMCcrbW0pLnNsaWNlKC0yKStbJ2FtJywncG0nXVtNYXRoLmZsb29yKGQuZ2V0SG91cnMoKS8xMildOwogICAgICAgIH0KCiAgICAgICAgLy8gQXBwZW5kICIoWCBkYXlzKSIuCiAgICAgICAgaWYgKGlzX25leHRfZGF0ZSAmJiAhc2FtZV9kYXkpIHsKICAgICAgICAgICAgdmFyIGRheXMgPSAoTWF0aC5mbG9vcigoZC5nZXRUaW1lKCktZC5nZXRUaW1lem9uZU9mZnNldCgpKjYwKjEwMDApL29uZV9kYXkpLU1hdGguZmxvb3IoKG5vdy5nZXRUaW1lKCktZC5nZXRUaW1lem9uZU9mZnNldCgpKjYwKjEwMDApL29uZV9kYXkpKTsKICAgICAgICAgICAgaWYgKGRheXMpIHMgKz0gJyAoJytkYXlzKycgZGF5JysoZGF5cz4xPydzJzonJykrJyknOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHM7CiAgICB9Cgp9KSh3aW5kb3cuZHBwKTsK"},{"name":"Replace Text","options":{"check_for_updates":false,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_prototypes":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1570721213155,"data":{}},"enabled":false,"position":25,"uuid":"ada1e30c-e7af-4950-af97-01317d5b1849","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBSZXBsYWNlIFRleHQKLy8gQG5hbWVzcGFjZSAgICBodHRwczovL2FrYW1hcnUuZGUvCi8vIEB2ZXJzaW9uICAgICAgMC4xCi8vIEBkZXNjcmlwdGlvbiAgLQovLyBAYXV0aG9yICAgICAgIEFrYW1hcnUKLy8gQG1hdGNoICAgICAgICAqCi8vIEBncmFudCAgICAgICAgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KKGZ1bmN0aW9uICgpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICB2YXIgd29yZHMgPSB7CiAgICAgICAgLy8gU3ludGF4OiAnU2VhcmNoIHdvcmQnIDogJ1JlcGxhY2Ugd29yZCcsCiAgICAgICAgJ0Rpc2NvcmQgc2VydmVyJzonJywKICAgICAgICAnam9pbiBvdXInOicnLAogICAgICAgICdqb2luIG91ciBEaXNjb3JkIHNlcnZlcic6JycKICAgICAgICB9OwoKCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgY29kZSBpcwogICAgLy8gRG9uJ3QgZWRpdCBiZWxvdyB0aGlzCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCiAgICB2YXIgcmVnZXhzID0gW10sIHJlcGxhY2VtZW50cyA9IFtdLAogICAgICAgIHRhZ3NXaGl0ZWxpc3QgPSBbJ1BSRScsICdCTE9DS1FVT1RFJywgJ0NPREUnLCAnSU5QVVQnLCAnQlVUVE9OJywgJ1RFWFRBUkVBJ10sCiAgICAgICAgcklzUmVnZXhwID0gL15cLyguKylcLyhbZ2ltXSspPyQvLAogICAgICAgIHdvcmQsIHRleHQsIHRleHRzLCBpLCB1c2VyUmVnZXhwOwoKICAgIC8vIHByZXBhcmVSZWdleCBieSBKb2VTaW1tb25zCiAgICAvLyB1c2VkIHRvIHRha2UgYSBzdHJpbmcgYW5kIHJlYWR5IGl0IGZvciB1c2UgaW4gbmV3IFJlZ0V4cCgpCiAgICBmdW5jdGlvbiBwcmVwYXJlUmVnZXgoc3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW1xbXF1cXlwmXCRcLlwoXClcP1wvXFxcK1x7XH1cfF0pL2csICdcXCQxJyk7CiAgICB9CgogICAgLy8gZnVuY3Rpb24gdG8gZGVjaWRlIHdoZXRoZXIgYSBwYXJlbnQgdGFnIHdpbGwgaGF2ZSBpdHMgdGV4dCByZXBsYWNlZCBvciBub3QKICAgIGZ1bmN0aW9uIGlzVGFnT2sodGFnKSB7CiAgICAgICAgcmV0dXJuIHRhZ3NXaGl0ZWxpc3QuaW5kZXhPZih0YWcpID09PSAtMTsKICAgIH0KCiAgICBkZWxldGUgd29yZHNbJyddOyAvLyBzbyB0aGUgdXNlciBjYW4gYWRkIGVhY2ggZW50cnkgZW5kaW5nIHdpdGggYSBjb21tYSwKICAgICAgICAgICAgICAgICAgICAgIC8vIEkgcHV0IGFuIGV4dHJhIGVtcHR5IGtleS92YWx1ZSBwYWlyIGluIHRoZSBvYmplY3QuCiAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBiZWZvcmUgY29udGludWluZwoKICAgIC8vIGNvbnZlcnQgdGhlICd3b3JkcycgSlNPTiBvYmplY3QgdG8gYW4gQXJyYXkKICAgIGZvciAod29yZCBpbiB3b3JkcykgewogICAgICAgIGlmICggdHlwZW9mIHdvcmQgPT09ICdzdHJpbmcnICYmIHdvcmRzLmhhc093blByb3BlcnR5KHdvcmQpICkgewogICAgICAgICAgICB1c2VyUmVnZXhwID0gd29yZC5tYXRjaChySXNSZWdleHApOwoKICAgICAgICAgICAgLy8gYWRkIHRoZSBzZWFyY2gvbmVlZGxlL3F1ZXJ5CiAgICAgICAgICAgIGlmICh1c2VyUmVnZXhwKSB7CiAgICAgICAgICAgICAgICByZWdleHMucHVzaCgKICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKHVzZXJSZWdleHBbMV0sICdnJykKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZWdleHMucHVzaCgKICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKHByZXBhcmVSZWdleCh3b3JkKS5yZXBsYWNlKC9cXD9cKi9nLCBmdW5jdGlvbiAoZnVsbE1hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxsTWF0Y2ggPT09ICdcXConID8gJyonIDogJ1teIF0qJzsKICAgICAgICAgICAgICAgICAgICB9KSwgJ2cnKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gYWRkIHRoZSByZXBsYWNlbWVudAogICAgICAgICAgICByZXBsYWNlbWVudHMucHVzaCggd29yZHNbd29yZF0gKTsKICAgICAgICB9CiAgICB9CgogICAgLy8gZG8gdGhlIHJlcGxhY2VtZW50CiAgICB0ZXh0cyA9IGRvY3VtZW50LmV2YWx1YXRlKCcvL2JvZHkvL3RleHQoKVsgbm9ybWFsaXplLXNwYWNlKC4pICE9ICIiIF0nLCBkb2N1bWVudCwgbnVsbCwgNiwgbnVsbCk7CiAgICBmb3IgKGkgPSAwOyB0ZXh0ID0gdGV4dHMuc25hcHNob3RJdGVtKGkpOyBpICs9IDEpIHsKICAgICAgICBpZiAoIGlzVGFnT2sodGV4dC5wYXJlbnROb2RlLnRhZ05hbWUpICkgewogICAgICAgICAgICByZWdleHMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CiAgICAgICAgICAgICAgICB0ZXh0LmRhdGEgPSB0ZXh0LmRhdGEucmVwbGFjZSggdmFsdWUsIHJlcGxhY2VtZW50c1tpbmRleF0gKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKfSgpKTs="},{"name":"Youtube Peek Preview","options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_prototypes":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":["https://twitter.com/*"],"orig_includes":[],"orig_matches":["*://*/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1571246066949,"data":{"userSettings":"s{\"regions\":[\"DE\"],\"noTooltip\":true,\"allowOnYoutube\":false}"}},"enabled":true,"position":26,"file_url":"https://greasyfork.org/scripts/370755-youtube-peek-preview/code/Youtube%20Peek%20Preview.user.js","uuid":"08dff494-f978-49b2-a69c-1ceff99b0120","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBZb3V0dWJlIFBlZWsgUHJldmlldwovLyBAbmFtZXNwYWNlICAgIGh0dHA6Ly90YW1wZXJtb25rZXkubmV0LwovLyBAdmVyc2lvbiAgICAgIDAuMi4zCi8vIEBkZXNjcmlwdGlvbiAgU2VlIHZpZGVvIHRodW1ibmFpbHMsIHJhdGluZ3MgYW5kIG90aGVyIGRldGFpbHMgd2hlbiB5b3UgbW91c2Ugb3ZlciBhIFlvdXR1YmUgbGluayBmcm9tIGFsbW9zdCBhbnkgd2Vic2l0ZQovLyBAYXV0aG9yICAgICAgIHNjcmlwdHBvc3QKLy8gQG1hdGNoICAgICAgICAqOi8vKi8qCi8vIEBleGNsdWRlICAgICAgaHR0cHM6Ly90d2l0dGVyLmNvbS8qCi8vIEBncmFudCAgICAgICAgR01fc2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgIEdNX2RlbGV0ZVZhbHVlCi8vIEBncmFudCAgICAgICAgR01fcmVnaXN0ZXJNZW51Q29tbWFuZAovLyA9PS9Vc2VyU2NyaXB0PT0KKGZ1bmN0aW9uICgpIHsKICAgIC8vIFJlbW92ZSBkZXByZWNhdGVkIHN0b3JhZ2Ugc3RydWN0dXJlIGZyb20gZWFybGllciB2ZXJzaW9ucy4KICAgIC8vIENvbmZpZ3VyZSBzZXR0aW5ncyB0aHJvdWdoIHlvdXIgYnJvd3NlciBleHRlbnNpb24gaWNvbiwgdW5kZXIgIllvdXR1YmUgUGVlayBTZXR0aW5ncyIKICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShHTV9nZXRWYWx1ZSgndXNlclNldHRpbmdzJywgJ3t9JykpOwogICAgaWYgKHNldHRpbmdzLmhhc093blByb3BlcnR5KCdSRUdJT05TJykpIHsKICAgICAgICBHTV9kZWxldGVWYWx1ZSgndXNlclNldHRpbmdzJyk7CiAgICB9Cn0pKCk7Ci8qIQoqIENsYW1wLmpzIDAuNS4xCioKKiBDb3B5cmlnaHQgMjAxMS0yMDEzLCBKb3NlcGggU2NobWl0dCBodHRwOi8vam9lLnNoCiogUmVsZWFzZWQgdW5kZXIgdGhlIFdURlBMIGxpY2Vuc2UKKiBodHRwOi8vc2FtLnpveS5vcmcvd3RmcGwvCiovCihmdW5jdGlvbiAoKSB7CiAgICAvKioKICAgICAqIENsYW1wcyBhIHRleHQgbm9kZS4KICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQuIEVsZW1lbnQgY29udGFpbmluZyB0aGUgdGV4dCBub2RlIHRvIGNsYW1wLgogICAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMuIE9wdGlvbnMgdG8gcGFzcyB0byB0aGUgY2xhbXBlci4KICAgICAqLwogICAgZnVuY3Rpb24gY2xhbXAoZWxlbWVudCwgb3B0aW9ucykgewogICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICAgIHZhciBzZWxmID0gdGhpcywgd2luID0gd2luZG93LCBvcHQgPSB7CiAgICAgICAgICAgIGNsYW1wOiBvcHRpb25zLmNsYW1wIHx8IDIsCiAgICAgICAgICAgIHVzZU5hdGl2ZUNsYW1wOiB0eXBlb2YgKG9wdGlvbnMudXNlTmF0aXZlQ2xhbXApICE9ICd1bmRlZmluZWQnID8gb3B0aW9ucy51c2VOYXRpdmVDbGFtcCA6IHRydWUsCiAgICAgICAgICAgIHNwbGl0T25DaGFyczogb3B0aW9ucy5zcGxpdE9uQ2hhcnMgfHwgWycuJywgJy0nLCAn4oCTJywgJ+KAlCcsICcgJ10sCiAgICAgICAgICAgIGFuaW1hdGU6IG9wdGlvbnMuYW5pbWF0ZSB8fCBmYWxzZSwKICAgICAgICAgICAgdHJ1bmNhdGlvbkNoYXI6IG9wdGlvbnMudHJ1bmNhdGlvbkNoYXIgfHwgJ+KApicsCiAgICAgICAgICAgIHRydW5jYXRpb25IVE1MOiBvcHRpb25zLnRydW5jYXRpb25IVE1MCiAgICAgICAgfSwgc3R5ID0gZWxlbWVudC5zdHlsZSwgb3JpZ2luYWxUZXh0ID0gZWxlbWVudC5pbm5lckhUTUwsIHN1cHBvcnRzTmF0aXZlQ2xhbXAgPSB0eXBlb2YgKGVsZW1lbnQuc3R5bGUud2Via2l0TGluZUNsYW1wKSAhPSAndW5kZWZpbmVkJywgY2xhbXBWYWx1ZSA9IG9wdC5jbGFtcCwgaXNDU1NWYWx1ZSA9IGNsYW1wVmFsdWUuaW5kZXhPZiAmJiAoY2xhbXBWYWx1ZS5pbmRleE9mKCdweCcpID4gLTEgfHwgY2xhbXBWYWx1ZS5pbmRleE9mKCdlbScpID4gLTEpLCB0cnVuY2F0aW9uSFRNTENvbnRhaW5lcjsKICAgICAgICBpZiAob3B0LnRydW5jYXRpb25IVE1MKSB7CiAgICAgICAgICAgIHRydW5jYXRpb25IVE1MQ29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogICAgICAgICAgICB0cnVuY2F0aW9uSFRNTENvbnRhaW5lci5pbm5lckhUTUwgPSBvcHQudHJ1bmNhdGlvbkhUTUw7CiAgICAgICAgfQogICAgICAgIC8vIFVUSUxJVFkgRlVOQ1RJT05TCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJuIHRoZSBjdXJyZW50IHN0eWxlIGZvciBhbiBlbGVtZW50LgogICAgICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW0gVGhlIGVsZW1lbnQgdG8gY29tcHV0ZS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCBUaGUgc3R5bGUgcHJvcGVydHkuCiAgICAgICAgICogQHJldHVybnMge251bWJlcn0KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBjb21wdXRlU3R5bGUoZWxlbSwgcHJvcCkgewogICAgICAgICAgICBpZiAoIXdpbi5nZXRDb21wdXRlZFN0eWxlKSB7CiAgICAgICAgICAgICAgICB3aW4uZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uIChlbCwgcHNldWRvKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbCA9IGVsOwogICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uIChwcm9wKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZSA9IC8oXC0oW2Etel0pezF9KS9nOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCA9PSAnZmxvYXQnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcCA9ICdzdHlsZUZsb2F0JzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlLnRlc3QocHJvcCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3AgPSBwcm9wLnJlcGxhY2UocmUsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzWzJdLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWwuY3VycmVudFN0eWxlICYmIGVsLmN1cnJlbnRTdHlsZVtwcm9wXSA/IGVsLmN1cnJlbnRTdHlsZVtwcm9wXSA6IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHdpbi5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUocHJvcCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxpbmVzIG9mIHRleHQgdGhhdCBzaG91bGQgYmUgcmVuZGVyZWQgYmFzZWQKICAgICAgICAgKiBvbiB0aGUgY3VycmVudCBoZWlnaHQgb2YgdGhlIGVsZW1lbnQgYW5kIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgdGV4dC4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRNYXhMaW5lcyhoZWlnaHQpIHsKICAgICAgICAgICAgdmFyIGF2YWlsSGVpZ2h0ID0gaGVpZ2h0IHx8IGVsZW1lbnQuY2xpZW50SGVpZ2h0LCBsaW5lSGVpZ2h0ID0gZ2V0TGluZUhlaWdodChlbGVtZW50KTsKICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGguZmxvb3IoYXZhaWxIZWlnaHQgLyBsaW5lSGVpZ2h0KSwgMCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gaGVpZ2h0IGEgZ2l2ZW4gZWxlbWVudCBzaG91bGQgaGF2ZSBiYXNlZCBvbiB0aGUgbGluZS0KICAgICAgICAgKiBoZWlnaHQgb2YgdGhlIHRleHQgYW5kIHRoZSBnaXZlbiBjbGFtcCB2YWx1ZS4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBnZXRNYXhIZWlnaHQoY2xtcCkgewogICAgICAgICAgICB2YXIgbGluZUhlaWdodCA9IGdldExpbmVIZWlnaHQoZWxlbWVudCk7CiAgICAgICAgICAgIHJldHVybiBsaW5lSGVpZ2h0ICogY2xtcDsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyB0aGUgbGluZS1oZWlnaHQgb2YgYW4gZWxlbWVudCBhcyBhbiBpbnRlZ2VyLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldExpbmVIZWlnaHQoZWxlbSkgewogICAgICAgICAgICB2YXIgbGggPSBjb21wdXRlU3R5bGUoZWxlbSwgJ2xpbmUtaGVpZ2h0Jyk7CiAgICAgICAgICAgIGlmIChsaCA9PSAnbm9ybWFsJykgewogICAgICAgICAgICAgICAgLy8gTm9ybWFsIGxpbmUgaGVpZ2h0cyB2YXJ5IGZyb20gYnJvd3NlciB0byBicm93c2VyLiBUaGUgc3BlYyByZWNvbW1lbmRzCiAgICAgICAgICAgICAgICAvLyBhIHZhbHVlIGJldHdlZW4gMS4wIGFuZCAxLjIgb2YgdGhlIGZvbnQgc2l6ZS4gVXNpbmcgMS4xIHRvIHNwbGl0IHRoZSBkaWZmLgogICAgICAgICAgICAgICAgbGggPSBwYXJzZUludChjb21wdXRlU3R5bGUoZWxlbSwgJ2ZvbnQtc2l6ZScpKSAqIDEuMjsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQobGgpOwogICAgICAgIH0KICAgICAgICAvLyBNRUFUIEFORCBQT1RBVE9FUyAoTU1NTSwgUE9UQVRPRVMuLi4pCiAgICAgICAgdmFyIHNwbGl0T25DaGFycyA9IG9wdC5zcGxpdE9uQ2hhcnMuc2xpY2UoMCksIHNwbGl0Q2hhciA9IHNwbGl0T25DaGFyc1swXSwgY2h1bmtzLCBsYXN0Q2h1bms7CiAgICAgICAgLyoqCiAgICAgICAgICogR2V0cyBhbiBlbGVtZW50J3MgbGFzdCBjaGlsZC4gVGhhdCBtYXkgYmUgYW5vdGhlciBub2RlIG9yIGEgbm9kZSdzIGNvbnRlbnRzLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGdldExhc3RDaGlsZChlbGVtKSB7CiAgICAgICAgICAgIC8vQ3VycmVudCBlbGVtZW50IGhhcyBjaGlsZHJlbiwgbmVlZCB0byBnbyBkZWVwZXIgYW5kIGdldCBsYXN0IGNoaWxkIGFzIGEgdGV4dCBub2RlCiAgICAgICAgICAgIGlmIChlbGVtLmxhc3RDaGlsZC5jaGlsZHJlbiAmJiBlbGVtLmxhc3RDaGlsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TGFzdENoaWxkKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsZW0uY2hpbGRyZW4pLnBvcCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL1RoaXMgaXMgdGhlIGFic29sdXRlIGxhc3QgY2hpbGQsIGEgdGV4dCBub2RlLCBidXQgc29tZXRoaW5nJ3Mgd3Jvbmcgd2l0aCBpdC4gUmVtb3ZlIGl0IGFuZCBrZWVwIHRyeWluZwogICAgICAgICAgICBlbHNlIGlmICghZWxlbS5sYXN0Q2hpbGQgfHwgIWVsZW0ubGFzdENoaWxkLm5vZGVWYWx1ZSB8fCBlbGVtLmxhc3RDaGlsZC5ub2RlVmFsdWUgPT0gJycgfHwgZWxlbS5sYXN0Q2hpbGQubm9kZVZhbHVlID09IG9wdC50cnVuY2F0aW9uQ2hhcikgewogICAgICAgICAgICAgICAgZWxlbS5sYXN0Q2hpbGQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtLmxhc3RDaGlsZCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TGFzdENoaWxkKGVsZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vVGhpcyBpcyB0aGUgbGFzdCBjaGlsZCB3ZSB3YW50LCByZXR1cm4gaXQKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5sYXN0Q2hpbGQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogUmVtb3ZlcyBvbmUgY2hhcmFjdGVyIGF0IGEgdGltZSBmcm9tIHRoZSB0ZXh0IHVudGlsIGl0cyB3aWR0aCBvcgogICAgICAgICAqIGhlaWdodCBpcyBiZW5lYXRoIHRoZSBwYXNzZWQtaW4gbWF4IHBhcmFtLgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHRydW5jYXRlKHRhcmdldCwgbWF4SGVpZ2h0KSB7CiAgICAgICAgICAgIGlmICghbWF4SGVpZ2h0KSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIFJlc2V0cyBnbG9iYWwgdmFyaWFibGVzLgogICAgICAgICAgICAgKi8KICAgICAgICAgICAgZnVuY3Rpb24gcmVzZXQoKSB7CiAgICAgICAgICAgICAgICBzcGxpdE9uQ2hhcnMgPSBvcHQuc3BsaXRPbkNoYXJzLnNsaWNlKDApOwogICAgICAgICAgICAgICAgc3BsaXRDaGFyID0gc3BsaXRPbkNoYXJzWzBdOwogICAgICAgICAgICAgICAgY2h1bmtzID0gbnVsbDsKICAgICAgICAgICAgICAgIGxhc3RDaHVuayA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG5vZGVWYWx1ZSA9IHRhcmdldC5ub2RlVmFsdWUucmVwbGFjZShvcHQudHJ1bmNhdGlvbkNoYXIsICcnKTsKICAgICAgICAgICAgLy9HcmFiIHRoZSBuZXh0IGNodW5rcwogICAgICAgICAgICBpZiAoIWNodW5rcykgewogICAgICAgICAgICAgICAgLy9JZiB0aGVyZSBhcmUgbW9yZSBjaGFyYWN0ZXJzIHRvIHRyeSwgZ3JhYiB0aGUgbmV4dCBvbmUKICAgICAgICAgICAgICAgIGlmIChzcGxpdE9uQ2hhcnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIHNwbGl0Q2hhciA9IHNwbGl0T25DaGFycy5zaGlmdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy9ObyBjaGFyYWN0ZXJzIHRvIGNodW5rIGJ5LiBHbyBjaGFyYWN0ZXItYnktY2hhcmFjdGVyCiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzcGxpdENoYXIgPSAnJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNodW5rcyA9IG5vZGVWYWx1ZS5zcGxpdChzcGxpdENoYXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vSWYgdGhlcmUgYXJlIGNodW5rcyBsZWZ0IHRvIHJlbW92ZSwgcmVtb3ZlIHRoZSBsYXN0IG9uZSBhbmQgc2VlIGlmCiAgICAgICAgICAgIC8vIHRoZSBub2RlVmFsdWUgZml0cy4KICAgICAgICAgICAgaWYgKGNodW5rcy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2h1bmtzJywgY2h1bmtzKTsKICAgICAgICAgICAgICAgIGxhc3RDaHVuayA9IGNodW5rcy5wb3AoKTsKICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdsYXN0Q2h1bmsnLCBsYXN0Q2h1bmspOwogICAgICAgICAgICAgICAgYXBwbHlFbGxpcHNpcyh0YXJnZXQsIGNodW5rcy5qb2luKHNwbGl0Q2hhcikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vTm8gbW9yZSBjaHVua3MgY2FuIGJlIHJlbW92ZWQgdXNpbmcgdGhpcyBjaGFyYWN0ZXIKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBjaHVua3MgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vSW5zZXJ0IHRoZSBjdXN0b20gSFRNTCBiZWZvcmUgdGhlIHRydW5jYXRpb24gY2hhcmFjdGVyCiAgICAgICAgICAgIGlmICh0cnVuY2F0aW9uSFRNTENvbnRhaW5lcikgewogICAgICAgICAgICAgICAgdGFyZ2V0Lm5vZGVWYWx1ZSA9IHRhcmdldC5ub2RlVmFsdWUucmVwbGFjZShvcHQudHJ1bmNhdGlvbkNoYXIsICcnKTsKICAgICAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGFyZ2V0Lm5vZGVWYWx1ZSArICcgJyArIHRydW5jYXRpb25IVE1MQ29udGFpbmVyLmlubmVySFRNTCArIG9wdC50cnVuY2F0aW9uQ2hhcjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvL1NlYXJjaCBwcm9kdWNlZCB2YWxpZCBjaHVua3MKICAgICAgICAgICAgaWYgKGNodW5rcykgewogICAgICAgICAgICAgICAgLy9JdCBmaXRzCiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGllbnRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgLy9UaGVyZSdzIHN0aWxsIG1vcmUgY2hhcmFjdGVycyB0byB0cnkgc3BsaXR0aW5nIG9uLCBub3QgcXVpdGUgZG9uZSB5ZXQKICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXRPbkNoYXJzLmxlbmd0aCA+PSAwICYmIHNwbGl0Q2hhciAhPSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICBhcHBseUVsbGlwc2lzKHRhcmdldCwgY2h1bmtzLmpvaW4oc3BsaXRDaGFyKSArIHNwbGl0Q2hhciArIGxhc3RDaHVuayk7CiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIC8vRmluaXNoZWQhCiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmlubmVySFRNTDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy9ObyB2YWxpZCBjaHVua3MgcHJvZHVjZWQKICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAvL05vIHZhbGlkIGNodW5rcyBldmVuIHdoZW4gc3BsaXR0aW5nIGJ5IGxldHRlciwgdGltZSB0byBtb3ZlCiAgICAgICAgICAgICAgICAvL29uIHRvIHRoZSBuZXh0IG5vZGUKICAgICAgICAgICAgICAgIGlmIChzcGxpdENoYXIgPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICBhcHBseUVsbGlwc2lzKHRhcmdldCwgJycpOwogICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGdldExhc3RDaGlsZChlbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICByZXNldCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vSWYgeW91IGdldCBoZXJlIGl0IG1lYW5zIHN0aWxsIHRvbyBiaWcsIGxldCdzIGtlZXAgdHJ1bmNhdGluZwogICAgICAgICAgICBpZiAob3B0LmFuaW1hdGUpIHsKICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgIHRydW5jYXRlKHRhcmdldCwgbWF4SGVpZ2h0KTsKICAgICAgICAgICAgICAgIH0sIG9wdC5hbmltYXRlID09PSB0cnVlID8gMTAgOiBvcHQuYW5pbWF0ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1bmNhdGUodGFyZ2V0LCBtYXhIZWlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZ1bmN0aW9uIGFwcGx5RWxsaXBzaXMoZWxlbSwgc3RyKSB7CiAgICAgICAgICAgIGVsZW0ubm9kZVZhbHVlID0gc3RyICsgb3B0LnRydW5jYXRpb25DaGFyOwogICAgICAgIH0KICAgICAgICAvLyBDT05TVFJVQ1RPUgogICAgICAgIGlmIChjbGFtcFZhbHVlID09ICdhdXRvJykgewogICAgICAgICAgICBjbGFtcFZhbHVlID0gZ2V0TWF4TGluZXMoKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoaXNDU1NWYWx1ZSkgewogICAgICAgICAgICBjbGFtcFZhbHVlID0gZ2V0TWF4TGluZXMocGFyc2VJbnQoY2xhbXBWYWx1ZSkpOwogICAgICAgIH0KICAgICAgICB2YXIgY2xhbXBlZFRleHQ7CiAgICAgICAgaWYgKHN1cHBvcnRzTmF0aXZlQ2xhbXAgJiYgb3B0LnVzZU5hdGl2ZUNsYW1wKSB7CiAgICAgICAgICAgIHN0eS5vdmVyZmxvdyA9ICdoaWRkZW4nOwogICAgICAgICAgICBzdHkudGV4dE92ZXJmbG93ID0gJ2VsbGlwc2lzJzsKICAgICAgICAgICAgc3R5LndlYmtpdEJveE9yaWVudCA9ICd2ZXJ0aWNhbCc7CiAgICAgICAgICAgIHN0eS5kaXNwbGF5ID0gJy13ZWJraXQtYm94JzsKICAgICAgICAgICAgc3R5LndlYmtpdExpbmVDbGFtcCA9IGNsYW1wVmFsdWU7CiAgICAgICAgICAgIGlmIChpc0NTU1ZhbHVlKSB7CiAgICAgICAgICAgICAgICBzdHkuaGVpZ2h0ID0gb3B0LmNsYW1wICsgJ3B4JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGhlaWdodCA9IGdldE1heEhlaWdodChjbGFtcFZhbHVlKTsKICAgICAgICAgICAgaWYgKGhlaWdodCA8PSBlbGVtZW50LmNsaWVudEhlaWdodCkgewogICAgICAgICAgICAgICAgY2xhbXBlZFRleHQgPSB0cnVuY2F0ZShnZXRMYXN0Q2hpbGQoZWxlbWVudCksIGhlaWdodCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ29yaWdpbmFsJzogb3JpZ2luYWxUZXh0LAogICAgICAgICAgICAnY2xhbXBlZCc6IGNsYW1wZWRUZXh0CiAgICAgICAgfTsKICAgIH0KICAgIHdpbmRvdy4kY2xhbXAgPSBjbGFtcDsKfSkoKTsKKGZ1bmN0aW9uICgpIHsKICAgIC8vIEJlZ2luIHNjcmlwdDogWW91dHViZSBQZWVrCiAgICAndXNlIHN0cmljdCc7CiAgICBjb25zdCBERUZBVUxUX09QVElPTlMgPSB7CiAgICAgICAgcmVnaW9uczogW10sCiAgICAgICAgbm9Ub29sdGlwOiB0cnVlLAogICAgICAgIGFsbG93T25Zb3V0dWJlOiBmYWxzZQogICAgfTsKICAgIGNvbnN0IE9QVElPTlMgPSBKU09OLnBhcnNlKEdNX2dldFZhbHVlKCd1c2VyU2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeShERUZBVUxUX09QVElPTlMpKSk7CiAgICBjb25zdCBhcGlLZXkgPSAnQUl6YVN5Qm5pYlZsVkRHQzd0X3dkM1pFclZLNlhGM2hwM0c3eHRBJzsKICAgIGNvbnN0IHJlID0gewogICAgICAgIGlzVmlkZW9MaW5rOiAvKD86eW91dHViZVwuY29tXC8oPzp3YXRjaFw/Lip2PXxhdHRyaWJ1dGlvbl9saW5rKXx5b3V0dVwuYmVcL3x5MnVcLmJlXC8pL2ksCiAgICAgICAgZ2V0VmlkZW9JZDogLyg/OnlvdXR1YmVcLmNvbVwvd2F0Y2hcPy4qdj18eW91dHVcLmJlXC98eTJ1XC5iZVwvKShbLV9BLVphLXowLTldezExfSkvaSwKICAgICAgICBnZXRUaW1lTGVuZ3RoOiAvXGQrW0EtWl0vZywKICAgIH07CiAgICBjb25zdCBjYWNoZSA9IHt9OwogICAgY29uc3QgZGVsYXlfb3BlbiA9IDEwMDsKICAgIGNvbnN0IGRlbGF5X2Nsb3NlID0gMDsKICAgIGxldCB0bW9fb3BlbjsKICAgIGxldCB0bW9fY2xvc2U7CiAgICBjb25zdCBfc3R5bGVzaGVldCA9IFN0cmluZy5yYXcgYDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgaWQ9Inl0LXBlZWsiPi55dC1wZWVrLC55dC1wZWVrLWxvYWRpbmd7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMjM0NTY3ODl9Lnl0LXBlZWssLnl0LXBlZWstY2Zne2JveC1zaGFkb3c6dmFyKC0tc2hhZG93LWJpZyk7LS1zaGFkb3ctYmlnOjAgNHB4IDhweCBoc2xhKDAsMCUsMCUsLjIpLDAgOHB4IDE2cHggaHNsYSgwLDAlLDAlLC4yKSwwIDRweCA0cHggaHNsYSgwLDAlLDEwMCUsLjEpfS55dC1wZWVrLWxvYWRpbmd7d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjZweCAwO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6IzhhYTRiMTtib3gtc2l6aW5nOmJvcmRlci1ib3g7YW5pbWF0aW9uLWR1cmF0aW9uOjFzO2FuaW1hdGlvbi1uYW1lOnNwaW47YW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDppbmZpbml0ZTthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmN1YmljLWJlemllciguNjcsLjg4LC41MywuMzcpfS55dC1wZWVrIC55dC1wZWVrLWxvYWRpbmd7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3JpZ2h0OjA7bWFyZ2luOmF1dG87YmFja2dyb3VuZDowIDA7Ym9yZGVyLWNvbG9yOmhzbGEoMjAwLDIwJSw2MiUsLjUpO3dpZHRoOjMycHg7aGVpZ2h0OjMycHh9Lnl0LXBlZWsgLnl0LXBlZWstY2hhbiwueXQtcGVlay1ibG9ja2Vke2JvcmRlci10b3A6MXB4IHNvbGlkIGhzbGEoMCwwJSwxMDAlLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3h9QGtleWZyYW1lcyBzcGlue2Zyb217dHJhbnNmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fS55dC1wZWVre2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kOiMyMzI2Mjg7bWFyZ2luOjA7cGFkZGluZzowO2NvbG9yOiM5OTkhaW1wb3J0YW50O2ZvbnQ6NDAwIDEycHgvMS4yICJzZWdvZSB1aSIsYXJpYWwsc2Fucy1zZXJpZiFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czozcHghaW1wb3J0YW50O292ZXJmbG93OmhpZGRlbn0ueXQtcGVlay1jb2xze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7cG9zaXRpb246cmVsYXRpdmV9Lnl0LXBlZWstY29scz5kaXZ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG99Lnl0LXBlZWstaW5mb3tib3gtc2l6aW5nOmJvcmRlci1ib3g7bWF4LXdpZHRoOjIzMHB4O2Rpc3BsYXk6ZmxleDtmbGV4OjEgMCBhdXRvO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ueXQtcGVlay1yb3d7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS55dC1wZWVrLWluZm8+ZGl2e3BhZGRpbmc6NnB4IDEycHh9Lnl0LXBlZWsgLnl0LXBlZWstdGl0bGV7Zm9udC1zaXplOjE0cHg7Y29sb3I6I2ZmZn0ueXQtcGVlayAueXQtcGVlay1kZXNje3BhZGRpbmctdG9wOjA7Zm9udC1zaXplOjE0cHh9Lnl0LXBlZWsgLnl0LXBlZWstZGF0ZXtkaXNwbGF5OmlubGluZS1ibG9jaztvcmRlcjotMX0ueXQtcGVlayAueXQtcGVlay12aWV3c3tkaXNwbGF5OmlubGluZS1ibG9ja30ueXQtcGVlayAueXQtcGVlay1jaGFue2NvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7d2lkdGg6MTAwJX0ueXQtcGVlay1wcmV2aWV3e3Bvc2l0aW9uOnJlbGF0aXZlO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtvcmRlcjotMTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ueXQtcGVlay10aHVtYntwb3NpdGlvbjpyZWxhdGl2ZTttaW4taGVpZ2h0OjE2OXB4O3dpZHRoOjMwMHB4fS55dC1wZWVrLXRodW1iIGltZ3tvYmplY3QtZml0Om5vbmU7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS55dC1wZWVrLWxlbmd0aHtmb250OjcwMCAxMnB4LzEgYXJpYWwsc2Fucy1zZXJpZjtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206OHB4O2xlZnQ6NHB4O3BhZGRpbmc6MnB4IDVweDtjb2xvcjojZmZmO2JhY2tncm91bmQ6aHNsYSgwLDAlLDAlLC45KTtib3JkZXItcmFkaXVzOjNweH0ueXQtcGVlay1zY29yZXttYXJnaW46MXB4IDA7d2lkdGg6MTAwJTtoZWlnaHQ6M3B4O2JhY2tncm91bmQ6I2NjY30ueXQtcGVlay1zY29yZSBkaXZ7aGVpZ2h0OmluaGVyaXQ7YmFja2dyb3VuZDojMDA5OGU1fS55dC1wZWVrLWJsb2NrZWR7cGFkZGluZzo1cHggMTJweDtjb2xvcjojYjJiMmIyO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjttYXgtd2lkdGg6NTMwcHh9Lnl0LXBlZWstYmxvY2tlZCBlbXtmb250LXdlaWdodDo3MDA7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgMnB4O2JhY2tncm91bmQ6I2RjMTQzYztib3JkZXItcmFkaXVzOjJweH0ueXQtcGVlay1jZmd7Zm9udDo0MDAgMTJweC8xLjM1IHNhbnMtc2VyaWY7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6MTVweDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzowIDE1cHg7d2lkdGg6MzAwcHg7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiMwMDA7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6MCAwIDNweCAzcHg7Ym9yZGVyLXdpZHRoOjAgMXB4IDFweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiM5OTk7bWF4LWhlaWdodDoxMDB2aDtvdmVyZmxvdzphdXRvO3otaW5kZXg6MTIzNDU2Nzl9Lnl0LXBlZWstY2ZnLWZvb3RlciwueXQtcGVlay1jZmctaXRlbXtwYWRkaW5nOjEwcHggMH0ueXQtcGVlay1jZmctaGVhZGluZ3twYWRkaW5nOjEwcHggMDtmb250OjQwMCAxNHB4LzEgc2Fucy1zZXJpZn0ueXQtcGVlay1jZmctbGFiZWx7Zm9udC13ZWlnaHQ6NzAwfS55dC1wZWVrLWNmZy1pdGVtIGxhYmVse2Rpc3BsYXk6YmxvY2t9Lnl0LXBlZWstY2ZnLWRlc2N7Y29sb3I6IzhjOGM4YzttYXJnaW46LjI1ZW0gMCAwfS55dC1wZWVrLWNmZy1pdGVtIHRleHRhcmVhe2JveC1zaXppbmc6Ym9yZGVyLWJveDttaW4td2lkdGg6MTAwcHg7d2lkdGg6MTAwJTttaW4taGVpZ2h0OjJlbX0ueXQtcGVlay1jZmcgYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQ6NDAwIDEycHgvMSBzYW5zLXNlcmlmO2JvcmRlcjpub25lO2JvcmRlci1yYWRpdXM6M3B4O21hcmdpbjowIC41ZW0gMCAwO3BhZGRpbmc6MTBweCAxOHB4O3RyYW5zaXRpb246YmFja2dyb3VuZCAuMnM7Y3Vyc29yOmRlZmF1bHR9Lnl0LXBlZWstY2ZnLXNhdmV7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNkODI2MjZ9Lnl0LXBlZWstY2ZnLWNhbmNlbHtjb2xvcjojMDAwO2JhY2tncm91bmQ6MCAwfS55dC1wZWVrLWNmZy1zYXZlOmhvdmVye2JhY2tncm91bmQ6I2I3MTQxNH0ueXQtcGVlay1jZmctY2FuY2VsOmhvdmVye2JhY2tncm91bmQ6I2U1ZTVlNX0ueXQtcGVlay1taXNzaW5nIC55dC1wZWVrLWNoYW4sLnl0LXBlZWstbWlzc2luZyAueXQtcGVlay1yb3csLnl0LXBlZWstbWlzc2luZyAueXQtcGVlay10aHVtYntkaXNwbGF5Om5vbmV9Lnl0LXBlZWssLnl0LXBlZWstbG9hZGluZywueXQtcGVlay10aHVtYiBpbWd7b3BhY2l0eTowO3RyYW5zaXRpb246b3BhY2l0eSAuMjVzfS55dC1wZWVrLXJlYWR5e29wYWNpdHk6MSFpbXBvcnRhbnR9PC9zdHlsZT5gOwogICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEhUTUwoJ2JlZm9yZWVuZCcsIF9zdHlsZXNoZWV0KTsKICAgIGZ1bmN0aW9uIGNvbnRhaW5zRW5jb2RlZENvbXBvbmVudHMoeCkgewogICAgICAgIHJldHVybiAoZGVjb2RlVVJJKHgpICE9PSBkZWNvZGVVUklDb21wb25lbnQoeCkpOwogICAgfQogICAgLyoqCiAgICAgKiBDaGVjayBpZiB3ZSdyZSBvbiBhIHBhcnRpY3VsYXIgZG9tYWluIG5hbWUuCiAgICAgKiBAcGFyYW0gaG9zdCBOYW1lIG9mIHRoZSB3ZWJzaXRlLgogICAgICovCiAgICBmdW5jdGlvbiBzaXRlKGhvc3QpIHsKICAgICAgICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhvc3QuaW5jbHVkZXMoaG9zdCk7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU92ZXIoZXYpIHsKICAgICAgICBsZXQgdGFyZ2V0ID0gZXYudGFyZ2V0OwogICAgICAgIHRhcmdldCA9IHRhcmdldC5jbG9zZXN0KCdhJyk7CiAgICAgICAgaWYgKCF0YXJnZXQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICBsZXQgaHJlZiA9IHRhcmdldC5ocmVmOwogICAgICAgIGlmICghaHJlZikKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIC8vIFNvbWUgc2l0ZXMgcHV0IHRoZSBVUkwgaW4gYSBkYXRhc2V0LiAobm90ZTogdHdpdHRlciBibG9ja3MgZ29vZyBBUEkpCiAgICAgICAgaWYgKHNpdGUoJ3R3aXR0ZXIuY29tJykpIHsKICAgICAgICAgICAgY29uc3QgZGF0YVVybCA9IHRhcmdldC5kYXRhc2V0LmV4cGFuZGVkVXJsOwogICAgICAgICAgICBpZiAoZGF0YVVybCkKICAgICAgICAgICAgICAgIGhyZWYgPSBkYXRhVXJsOwogICAgICAgIH0KICAgICAgICAvLyBDaGVjayBpZiB0aGUgVVJMIGdvZXMgdG8gYSB5b3V0dWJlIHZpZGVvLgogICAgICAgIGlmICghcmUuaXNWaWRlb0xpbmsudGVzdChocmVmKSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIC8vIE5lZWQgdG8ga25vdyBpZiBpdCdzIGFuIGF0dHJpYnV0aW9uIGxpbmsgc28gd2UgY2FuIHJlYWQgdGhlIGVuY29kZWQgcGFyYW1zLgogICAgICAgIGlmICgvYXR0cmlidXRpb25fbGlua1w/L2kudGVzdChocmVmKSkgewogICAgICAgICAgICBjb25zdCBVUklDb21wb25lbnQgPSBocmVmLnN1YnN0cihocmVmLmluZGV4T2YoJyUyRndhdGNoJTNGdiUzRCcpKTsKICAgICAgICAgICAgaWYgKGNvbnRhaW5zRW5jb2RlZENvbXBvbmVudHMoVVJJQ29tcG9uZW50KSkgewogICAgICAgICAgICAgICAgaHJlZiA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbScgKyBkZWNvZGVVUklDb21wb25lbnQoVVJJQ29tcG9uZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBGaW5hbGx5IGdldCB0aGUgdmlkZW8gSUQ7CiAgICAgICAgY29uc3QgaWQgPSByZS5nZXRWaWRlb0lkLmV4ZWMoaHJlZilbMV07CiAgICAgICAgaWYgKCFpZCkKICAgICAgICAgICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgdmlkZW8gSUQnKTsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRtb19vcGVuKTsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRtb19jbG9zZSk7CiAgICAgICAgY29uc3Qgbm9Ub29sdGlwID0gSlNPTi5wYXJzZShHTV9nZXRWYWx1ZSgndXNlclNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoREVGQVVMVF9PUFRJT05TKSkpLm5vVG9vbHRpcDsKICAgICAgICBpZiAobm9Ub29sdGlwKSB7CiAgICAgICAgICAgIHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7CiAgICAgICAgfQogICAgICAgIHRtb19vcGVuID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAoIWNhY2hlLmhhc093blByb3BlcnR5KGlkKSkgewogICAgICAgICAgICAgICAgY29uc3QgcGFydHMgPSAnc25pcHBldCxjb250ZW50RGV0YWlscyxzdGF0aXN0aWNzJzsKICAgICAgICAgICAgICAgIHJlcXVlc3RWaWRlb0RhdGEoZXYsIGlkLCBwYXJ0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBoYW5kbGVTdWNjZXNzKGV2LCBpZCwgY2FjaGVbaWRdKTsKICAgICAgICAgICAgfQogICAgICAgIH0sIGRlbGF5X29wZW4pOwogICAgICAgIGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoZXYpIHsKICAgICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoYW5kbGVNb3VzZUxlYXZlKTsKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0bW9fb3Blbik7CiAgICAgICAgICAgIHRtb19vcGVuID0gbnVsbDsKICAgICAgICAgICAgdG1vX2Nsb3NlID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgcmVtb3ZlUGVla0JveGVzKCk7CiAgICAgICAgICAgIH0sIGRlbGF5X2Nsb3NlKTsKICAgICAgICB9CiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoYW5kbGVNb3VzZUxlYXZlKTsKICAgIH0KICAgIGZ1bmN0aW9uIGxvYWRJbWFnZShwYXRoKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gewogICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGV2ID0+IHJlc29sdmUoaW1nKTsKICAgICAgICAgICAgaW1nLm9uZXJyb3IgPSBldiA9PiByZXNvbHZlKHVuZGVmaW5lZCk7CiAgICAgICAgICAgIGltZy5zcmMgPSBwYXRoIHx8ICcnOwogICAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gZ2V0U2NvcmVQZXJjZW50KGxvdmVycywgaGF0ZXJzKSB7CiAgICAgICAgaWYgKGlzTmFOKGxvdmVycykgfHwgaXNOYU4oaGF0ZXJzKSkKICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgxMDAgKiBsb3ZlcnMgLyAobG92ZXJzICsgaGF0ZXJzKSk7CiAgICB9CiAgICBmdW5jdGlvbiB0b0RpZ2l0YWxUaW1lKHN0cikgewogICAgICAgIGlmICghc3RyKQogICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgIGZ1bmN0aW9uIHBhZChzKSB7CiAgICAgICAgICAgIHJldHVybiBzLmxlbmd0aCA8IDIgPyBgMCR7c31gIDogczsKICAgICAgICB9CiAgICAgICAgY29uc3QgaG91cnMgPSAvKFxkKylILy5leGVjKHN0cik7CiAgICAgICAgY29uc3QgbWlucyA9IC8oXGQrKU0vLmV4ZWMoc3RyKTsKICAgICAgICBjb25zdCBzZWNzID0gLyhcZCspUy8uZXhlYyhzdHIpOwogICAgICAgIGNvbnN0IG91dHB1dCA9IFtdOwogICAgICAgIGlmIChob3VycykKICAgICAgICAgICAgb3V0cHV0LnB1c2gocGFkKGhvdXJzWzFdKSk7CiAgICAgICAgb3V0cHV0LnB1c2gobWlucyA/IHBhZChtaW5zWzFdKSA6ICcwMCcpOwogICAgICAgIG91dHB1dC5wdXNoKHNlY3MgPyBwYWQoc2Vjc1sxXSkgOiAnMDAnKTsKICAgICAgICByZXR1cm4gb3V0cHV0LmpvaW4oJzonKTsKICAgIH0KICAgIGZ1bmN0aW9uIGluc2VydFBlZWtCb3goZXYsIGQpIHsKICAgICAgICBjb25zdCBhID0gZXYudGFyZ2V0OwogICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShHTV9nZXRWYWx1ZSgndXNlclNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoREVGQVVMVF9PUFRJT05TKSkpOwogICAgICAgIC8vIFRva2VuczoKICAgICAgICBjb25zdCB0aXRsZSA9IGQuc25pcHBldC5sb2NhbGl6ZWQudGl0bGU7CiAgICAgICAgY29uc3QgZGVzYyA9IGQuc25pcHBldC5sb2NhbGl6ZWQuZGVzY3JpcHRpb247CiAgICAgICAgY29uc3QgZGF0ZSA9IGRhdGVBc0FnZShkLnNuaXBwZXQucHVibGlzaGVkQXQpOwogICAgICAgIGNvbnN0IGNoYW4gPSBkLnNuaXBwZXQuY2hhbm5lbFRpdGxlOwogICAgICAgIGNvbnN0IHRodW1icyA9IGQuc25pcHBldC50aHVtYm5haWxzOwogICAgICAgIGNvbnN0IGltYWdlUGF0aCA9IHRodW1icy5oYXNPd25Qcm9wZXJ0eSgnbWVkaXVtJykgPyB0aHVtYnMubWVkaXVtLnVybCA6IHVuZGVmaW5lZDsKICAgICAgICBsZXQgYmxvY2tNYXRjaGVkID0gW107CiAgICAgICAgbGV0IGJsb2NrT3RoZXIgPSBbXTsKICAgICAgICBpZiAoc2V0dGluZ3MucmVnaW9ucy5sZW5ndGggJiYgZC5jb250ZW50RGV0YWlscy5oYXNPd25Qcm9wZXJ0eSgncmVnaW9uUmVzdHJpY3Rpb24nKSkgewogICAgICAgICAgICBjb25zdCBibG9ja2VkID0gZC5jb250ZW50RGV0YWlscy5yZWdpb25SZXN0cmljdGlvbi5ibG9ja2VkOwogICAgICAgICAgICBpZiAoYmxvY2tlZCkgewogICAgICAgICAgICAgICAgYmxvY2tNYXRjaGVkID0gYmxvY2tlZC5maWx0ZXIodiA9PiBzZXR0aW5ncy5yZWdpb25zLmluY2x1ZGVzKHYpKS5tYXAodiA9PiBgPGVtPiR7dn08L2VtPmApOwogICAgICAgICAgICAgICAgYmxvY2tPdGhlciA9IGJsb2NrZWQuZmlsdGVyKHYgPT4gIXNldHRpbmdzLnJlZ2lvbnMuaW5jbHVkZXModikpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHZpZXdDb3VudCA9ICtkLnN0YXRpc3RpY3Mudmlld0NvdW50OwogICAgICAgIGNvbnN0IHZpZXdzID0gdmlld0NvdW50ID8gdmlld0NvdW50LnRvTG9jYWxlU3RyaW5nKCkgOiB1bmRlZmluZWQ7CiAgICAgICAgY29uc3Qgc2NvcmUgPSBnZXRTY29yZVBlcmNlbnQoK2Quc3RhdGlzdGljcy5saWtlQ291bnQsICtkLnN0YXRpc3RpY3MuZGlzbGlrZUNvdW50KTsKICAgICAgICBjb25zdCBsZW5ndGggPSB0b0RpZ2l0YWxUaW1lKGQuY29udGVudERldGFpbHMuZHVyYXRpb24pOwogICAgICAgIGxvYWRJbWFnZShpbWFnZVBhdGgpLnRoZW4oaW1nID0+IHsKICAgICAgICAgICAgZmluaXNoZWRMb2FkaW5nKCk7CiAgICAgICAgICAgIGlmICghaW1nKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBpbWcuc2V0QXR0cmlidXRlKCdhbHQnLCB0aXRsZSk7CiAgICAgICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcueXQtcGVlay10aHVtYicpLmFwcGVuZENoaWxkKGltZyk7CiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgICAgIGltZy5jbGFzc0xpc3QuYWRkKCd5dC1wZWVrLXJlYWR5Jyk7CiAgICAgICAgICAgIH0sIDcwKTsKICAgICAgICB9KTsKICAgICAgICAvLyBDcmVhdGUgSFRNTDoKICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gYAogICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jb2xzIj4KICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1pbmZvIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLXZpZXdzIj4ke3ZpZXdzID8gdmlld3MgKyAnIHZpZXdzJyA6ICcnfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1kYXRlIj4ke2RhdGUgPyBkYXRlIDogJyd9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay10aXRsZSI+JHt0aXRsZSA/IHRpdGxlIDogYE5vdCBmb3VuZGB9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1kZXNjIj4ke2Rlc2MgPyBkZXNjIDogJyd9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jaGFuIj4ke2NoYW4gPyBjaGFuIDogJyd9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLXByZXZpZXciPgogICAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstdGh1bWIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstbG9hZGluZyB5dC1wZWVrLXJlYWR5Ij48L2Rpdj4KICAgICAgICAke2xlbmd0aCA/IGA8ZGl2IGNsYXNzPSJ5dC1wZWVrLWxlbmd0aCI+JHtsZW5ndGh9PC9kaXY+YCA6IGBgfQogICAgICAgICR7c2NvcmUgPyBgPGRpdiBjbGFzcz0ieXQtcGVlay1zY29yZSI+PGRpdiBzdHlsZT0id2lkdGg6ICR7c2NvcmV9JTsiPjwvZGl2PjwvZGl2PmAgOiBgYH0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgICR7YmxvY2tNYXRjaGVkLmxlbmd0aCA/IGA8ZGl2IGNsYXNzPSJ5dC1wZWVrLWJsb2NrZWQiPjxzcGFuPkJsb2NrZWQgaW46PC9zcGFuPiAke2Jsb2NrTWF0Y2hlZC5qb2luKCcgJyl9ICR7YmxvY2tPdGhlci5qb2luKCcgJyl9PC9kaXY+YCA6IGBgfQogICAgYDsKICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgneXQtcGVlaycpOwogICAgICAgIGlmICghdGl0bGUpIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3l0LXBlZWstbWlzc2luZycpOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudCgnYmVmb3JlZW5kJywgY29udGFpbmVyKTsKICAgICAgICAvLyBDbGFtcCBsb25nIGxpbmVzIG9mIHRleHQ6CiAgICAgICAgY29uc3QgJHRpdGxlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy55dC1wZWVrLXRpdGxlJyk7CiAgICAgICAgY29uc3QgJGRlc2NyaXB0aW9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy55dC1wZWVrLWRlc2MnKTsKICAgICAgICAkY2xhbXAoJHRpdGxlLCB7IGNsYW1wOiA0LCB1c2VOYXRpdmVDbGFtcDogZmFsc2UgfSk7CiAgICAgICAgJGNsYW1wKCRkZXNjcmlwdGlvbiwgeyBjbGFtcDogNCwgdXNlTmF0aXZlQ2xhbXA6IGZhbHNlIH0pOwogICAgICAgIC8vIEZpbmQgb3B0aW1hbCBwb3NpdGlvbiB3aXRoaW4gdmlld3BvcnQ6CiAgICAgICAgc2V0UG9zaXRpb24oYSwgY29udGFpbmVyKTsKICAgICAgICAvLyBBbGxvdyBmb3Igc21vb3RoIENTUyB0cmFuc2l0aW9uOgogICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3l0LXBlZWstcmVhZHknKTsKICAgICAgICB9LCAwKTsKICAgICAgICAvLyBFdmVudCBsaXN0ZW5lciB0byByZW1vdmUgY29udGFpbmVyIGJlY2F1c2UgaXQgc2hvdWxkbid0IGJlIGludGVyYWN0ZWQgd2l0aDoKICAgICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGV2ID0+IHsKICAgICAgICAgICAgcmVtb3ZlUGVla0JveGVzKCk7CiAgICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiByZW1vdmVQZWVrQm94ZXMoKSB7CiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd5dC1wZWVrJyk7CiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgneXQtcGVlay1yZWFkeScpOwogICAgICAgICAgICAvLyBBbGxvdyBmb3Igc21vb3RoIENTUyB0cmFuc2l0aW9uOgogICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpOwogICAgICAgICAgICB9LCAyNTApOwogICAgICAgIH0KICAgIH0KICAgIC8vIFV0aWxpdHkgdG8gY2hlY2sgaWYgYSBwZWVrIGJveCBpcyBjdXJyZW50bHkgb3BlbiBpbiB0aGUgZG9jdW1lbnQuCiAgICBmdW5jdGlvbiBhY3RpdmVQZWVrQm94KCkgewogICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXQtcGVlaycpOwogICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybiBlbGVtZW50c1swXTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YXJ0ZWRMb2FkaW5nKGV2KSB7CiAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoJ3l0LXBlZWstbG9hZGluZycsICd5dC1wZWVrLXJlYWR5Jyk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2JlZm9yZWVuZCcsIGluZGljYXRvcik7CiAgICAgICAgc2V0UG9zaXRpb24oZXYudGFyZ2V0LCBpbmRpY2F0b3IpOwogICAgfQogICAgZnVuY3Rpb24gZmluaXNoZWRMb2FkaW5nKCkgewogICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgneXQtcGVlay1sb2FkaW5nJyk7CiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7CiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgneXQtcGVlay1yZWFkeScpOwogICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZSgpOwogICAgICAgICAgICB9LCAyNTApOwogICAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGhhbmRsZVN1Y2Nlc3MoZXYsIGlkLCBkKSB7CiAgICAgICAgcmVtb3ZlUGVla0JveGVzKCk7CiAgICAgICAgaWYgKCFkKSB7CiAgICAgICAgICAgIGQgPSB7fTsKICAgICAgICAgICAgZC5pZCA9IGlkOwogICAgICAgICAgICBkLmNvbnRlbnREZXRhaWxzID0gewogICAgICAgICAgICAgICAgZHVyYXRpb246IHVuZGVmaW5lZAogICAgICAgICAgICB9OwogICAgICAgICAgICBkLnNuaXBwZXQgPSB7CiAgICAgICAgICAgICAgICBjaGFubmVsVGl0bGU6ICcnLAogICAgICAgICAgICAgICAgdGh1bWJuYWlsczogeyBtZWRpdW06IHsgdXJsOiB1bmRlZmluZWQgfSB9LAogICAgICAgICAgICAgICAgbG9jYWxpemVkOiB7CiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHVuZGVmaW5lZCwKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYFRoZSB2aWRlbyBtaWdodCBiZSByZW1vdmVkLmAKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwdWJsaXNoZWRBdDogdW5kZWZpbmVkCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIGQuc3RhdGlzdGljcyA9IHt9OwogICAgICAgIH0KICAgICAgICBpbnNlcnRQZWVrQm94KGV2LCBkKTsKICAgICAgICBpZiAoIWNhY2hlLmhhc093blByb3BlcnR5KGlkKSkKICAgICAgICAgICAgY2FjaGVbaWRdID0gZDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcXVlc3RWaWRlb0RhdGEoZXYsIGlkLCBwYXJ0cykgewogICAgICAgIHN0YXJ0ZWRMb2FkaW5nKGV2KTsKICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICB4aHIub3BlbignR0VUJywgYGh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMvdmlkZW9zP2lkPSR7aWR9JnBhcnQ9JHtwYXJ0c30ma2V5PSR7YXBpS2V5fWApOwogICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkgewogICAgICAgICAgICAgICAgZmluaXNoZWRMb2FkaW5nKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRtb19vcGVuKQogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICgheGhyLnJlc3BvbnNlVGV4dC5sZW5ndGgpCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOwogICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkgewogICAgICAgICAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3MoZXYsIGlkLCByZXNwb25zZS5pdGVtc1swXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGVFcnJvcigpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBmaW5pc2hlZExvYWRpbmcoKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgeGhyLnNlbmQoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGRhdGVBc0FnZShpbnB1dFZhbHVlKSB7CiAgICAgICAgaWYgKCFpbnB1dFZhbHVlKQogICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwogICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoaW5wdXRWYWx1ZSk7CiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkudmFsdWVPZigpIC0gZGF0ZS52YWx1ZU9mKCkpOwogICAgICAgIGxldCB5ID0gcGFyc2VJbnQoZGlmZmVyZW5jZS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDQpLCAxMCkgLSAxOTcwOwogICAgICAgIGxldCBtID0gK2RpZmZlcmVuY2UuZ2V0TW9udGgoKTsKICAgICAgICBsZXQgZCA9IGRpZmZlcmVuY2UuZ2V0RGF0ZSgpIC0gMTsKICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgIGlmICh5ID4gMCkKICAgICAgICAgICAgcmVzdWx0ID0gKHkgPT09IDEpID8geSArICcgeWVhciBhZ28nIDogeSArICcgeWVhcnMgYWdvJzsKICAgICAgICBlbHNlIGlmIChtID4gMCkKICAgICAgICAgICAgcmVzdWx0ID0gKG0gPT09IDEpID8gbSArICcgbW9udGggYWdvJyA6IG0gKyAnIG1vbnRocyBhZ28nOwogICAgICAgIGVsc2UgaWYgKGQgPiAwKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IChkID09PSAxKSA/IGQgKyAnIGRheSBhZ28nIDogZCArICcgZGF5cyBhZ28nOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0ID0gJ1RvZGF5JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIC8qKgogICAgICoKICAgICAqIEBwYXJhbSBzb3VyY2UgRWxlbWVudCB0byB1c2UgZm9yIHRoZSByZWxhdGl2ZSBwb3NpdGlvbi4KICAgICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIHBvc2l0aW9uLgogICAgICovCiAgICBmdW5jdGlvbiBzZXRQb3NpdGlvbihzb3VyY2UsIGVsZW1lbnQpIHsKICAgICAgICBjb25zdCBzcmNSZWN0ID0gc291cmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IGNsZWFyYW5jZUhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0IDwgNjAgPyA2MCA6IGVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgICAgIC8vIFZpZXdwb3J0IGRpbWVuc2lvbnM6CiAgICAgICAgY29uc3QgdncgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7CiAgICAgICAgY29uc3QgdmggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OwogICAgICAgIC8vIENhbGN1bGF0ZToKICAgICAgICBjb25zdCBsZWZ0T2ZUYXJnZXQgPSB2dyA8IChzcmNSZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoKTsKICAgICAgICAvLyBBZGQgZXh0cmEgc3BhY2UgZm9yIGJyb3dzZXIgc3RhdHVzIHRvb2x0aXAuCiAgICAgICAgY29uc3QgdG9wT2ZUYXJnZXQgPSB2aCA8IChzcmNSZWN0LnRvcCArIHNyY1JlY3QuaGVpZ2h0ICsgY2xlYXJhbmNlSGVpZ2h0ICsgMjQpOwogICAgICAgIC8vIEFwcGx5IHBvc2l0aW9uOgogICAgICAgIGlmIChsZWZ0T2ZUYXJnZXQpIHsKICAgICAgICAgICAgZWxlbWVudC5zdHlsZS5yaWdodCA9IHZ3IC0gc3JjUmVjdC5yaWdodCArICdweCc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBzcmNSZWN0LmxlZnQgKyAncHgnOwogICAgICAgIH0KICAgICAgICBpZiAodG9wT2ZUYXJnZXQgJiYgKHZoIC8gMiA8IHNyY1JlY3QudG9wKSkgewogICAgICAgICAgICBlbGVtZW50LnN0eWxlLmJvdHRvbSA9ICh2aCAtIHNyY1JlY3QudG9wKSAtIHdpbmRvdy5zY3JvbGxZICsgJ3B4JzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gc3JjUmVjdC5ib3R0b20gKyB3aW5kb3cuc2Nyb2xsWSArICdweCc7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaW5zZXJ0U2V0dGluZ3NEaWFsb2coKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy55dC1wZWVrLWNmZycpKQogICAgICAgICAgICByZXR1cm4gY2xvc2VTZXR0aW5nc0RpYWxvZygpOwogICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKEdNX2dldFZhbHVlKCd1c2VyU2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeShERUZBVUxUX09QVElPTlMpKSk7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlU2V0dGluZ3NDbGljayk7CiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ3l0LXBlZWstY2ZnJyk7CiAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGAKICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jZmctaGVhZGluZyI+WW91dHViZSBQZWVrPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstY2ZnLWl0ZW0iPgogICAgICAgIDxsYWJlbCBjbGFzcz0ieXQtcGVlay1jZmctbGFiZWwiIGZvcj0ieXQtcGVlay1jZmctcmVnaW9ucyI+V2FybiBtZSBpZiB0aGUgdmlkZW8gaXMgYmxvY2tlZCBpbjo8L2xhYmVsPgogICAgICAgIDx0ZXh0YXJlYSBpZD0ieXQtcGVlay1jZmctcmVnaW9ucyI+JHtkYXRhLnJlZ2lvbnMuam9pbignICcpfTwvdGV4dGFyZWE+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jZmctZGVzYyI+U3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgcmVnaW9uIGNvZGVzLiBFLmcuIFVTIEdCIENBLiBMZWF2ZSBibGFuayB0byBpZ25vcmUuPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLWNmZy1pdGVtIj4KICAgICAgICA8bGFiZWw+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ5dC1wZWVrLWNmZy1ub1Rvb2x0aXAiJHtkYXRhLm5vVG9vbHRpcCA/IGAgY2hlY2tlZGAgOiBgYH0+CiAgICAgICAgICBSZW1vdmUgdG9vbHRpcHMgZnJvbSB2aWRlbyBsaW5rcwogICAgICAgIDwvbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ieXQtcGVlay1jZmctZGVzYyI+QmVjYXVzZSB0b29sdGlwcyBjYW4gZ2V0IGluIHRoZSB3YXkgb2YgdGhlIHZpZGVvIHByZXZpZXcuPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ5dC1wZWVrLWNmZy1pdGVtIj4KICAgICAgICA8bGFiZWw+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJ5dC1wZWVrLWNmZy15b3V0dWJlIiR7ZGF0YS5hbGxvd09uWW91dHViZSA/IGAgY2hlY2tlZGAgOiBgYH0+CiAgICAgICAgICBFbmFibGUgb24geW91dHViZS5jb20KICAgICAgICA8L2xhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstY2ZnLWRlc2MiPlBlZWsgaXNuJ3QgaW50ZW5kZWQgZm9yIHVzZSBvbiB5b3V0dWJlLmNvbSwgYnV0IHlvdSBjYW4gc3RpbGwgdXNlIGl0IHRoZXJlLiAodGhpcyBjaGFuZ2UgdGFrZXMgZWZmZWN0IGFmdGVyIHJlbG9hZGluZyk8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Inl0LXBlZWstY2ZnLWZvb3RlciI+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ieXQtcGVlay1jZmctc2F2ZSIgaWQ9Inl0LXBlZWstY2ZnLXNhdmUiPlNBVkU8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJ5dC1wZWVrLWNmZy1jYW5jZWwiIGlkPSJ5dC1wZWVrLWNmZy1jYW5jZWwiPkNBTkNFTDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpOwogICAgfQogICAgZnVuY3Rpb24gaGFuZGxlU2F2ZVNldHRpbmdzKCkgewogICAgICAgIGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy55dC1wZWVrLWNmZycpOwogICAgICAgIGlmICghZGlhbG9nKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgLy8gUmV0cmlldmUgdmFsdWVzOgogICAgICAgIGNvbnN0IHJlZ2lvbnNJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd5dC1wZWVrLWNmZy1yZWdpb25zJyk7CiAgICAgICAgY29uc3Qgbm9Ub29sdGlwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneXQtcGVlay1jZmctbm9Ub29sdGlwJyk7CiAgICAgICAgY29uc3QgYWxsb3dPbllvdXR1YmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneXQtcGVlay1jZmcteW91dHViZScpOwogICAgICAgIC8vIEZvcm1hdCB2YWx1ZXM6CiAgICAgICAgbGV0IHJlZ2lvbnMgPSByZWdpb25zSW5wdXQudmFsdWUudHJpbSgpLnJlcGxhY2UoL1xzXHMrL2csICcgJykudG9VcHBlckNhc2UoKTsKICAgICAgICAvLyBQcmVwYXJlIGRhdGEgb2JqZWN0IGZvciBzdG9yYWdlOgogICAgICAgIGNvbnN0IGRiX2VudHJ5ID0gewogICAgICAgICAgICByZWdpb25zOiByZWdpb25zLnNwbGl0KC9ccy8pLAogICAgICAgICAgICBub1Rvb2x0aXA6IG5vVG9vbHRpcElucHV0LmNoZWNrZWQsCiAgICAgICAgICAgIGFsbG93T25Zb3V0dWJlOiBhbGxvd09uWW91dHViZS5jaGVja2VkCiAgICAgICAgfTsKICAgICAgICBHTV9zZXRWYWx1ZSgndXNlclNldHRpbmdzJywgSlNPTi5zdHJpbmdpZnkoZGJfZW50cnkpKTsKICAgICAgICBjbG9zZVNldHRpbmdzRGlhbG9nKCk7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVTZXR0aW5nc0NsaWNrKGV2KSB7CiAgICAgICAgaWYgKGV2LnRhcmdldC5pZCA9PT0gJ3l0LXBlZWstY2ZnLWNhbmNlbCcpIHsKICAgICAgICAgICAgY2xvc2VTZXR0aW5nc0RpYWxvZygpOwogICAgICAgIH0KICAgICAgICBpZiAoZXYudGFyZ2V0LmlkID09PSAneXQtcGVlay1jZmctc2F2ZScpIHsKICAgICAgICAgICAgaGFuZGxlU2F2ZVNldHRpbmdzKCk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gY2xvc2VTZXR0aW5nc0RpYWxvZygpIHsKICAgICAgICBjb25zdCBkaWFsb2cgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcueXQtcGVlay1jZmcnKTsKICAgICAgICBpZiAoZGlhbG9nKQogICAgICAgICAgICBkaWFsb2cucmVtb3ZlKCk7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVNZW51Q29tbWFuZCgpIHsKICAgICAgICBpbnNlcnRTZXR0aW5nc0RpYWxvZygpOwogICAgfQogICAgR01fcmVnaXN0ZXJNZW51Q29tbWFuZCgnWW91dHViZSBQZWVrIFNldHRpbmdzJywgaGFuZGxlTWVudUNvbW1hbmQpOwogICAgaWYgKHNpdGUoJ3lvdXR1YmUuY29tJykgJiYgIU9QVElPTlMuYWxsb3dPbllvdXR1YmUpCiAgICAgICAgcmV0dXJuOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VvdmVyJywgaGFuZGxlTW91c2VPdmVyKTsKfSkoKTsK"},{"name":"Affiliate killer","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1573407921893,"data":{"hideOriginLink":"sone"}},"enabled":false,"position":27,"file_url":"https://userscripts-mirror.org/scripts/source/411363.user.js","uuid":"3b1d9fd3-b030-4d0d-9916-34e2cf7608ee","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQGlkICAgICAgICAgICAgIEFmZmlsaWF0ZV9raWxsZXIKLy8gQG5hbWUgICAgICAgICAgIEFmZmlsaWF0ZSBraWxsZXIKLy8gQHZlcnNpb24gICAgICAgIDMuOAovLyBAbmFtZXNwYWNlICAgICAgaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQ1NgovLyBAaG9tZXBhZ2VVUkwgICAgaHR0cHM6Ly9ncmVhc3lmb3JrLm9yZy9zY3JpcHRzLzQ1NgovLyBAbGljZW5zZSAgICAgICAgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LW5jLzIuMS9qcC8KLy8gQGF1dGhvciAgICAgICAgIG5vaQovLyBAZGVzY3JpcHRpb24gICAgTm8gbW9yZSBBZmZpbGlhdGUgTGluayEgUGx6IE9yaWdpbmFsIFVSTCEKLy8gQGluY2x1ZGUgICAgICAgIGh0dHAqCi8vIEBncmFudCAgICAgICAgICBHTV9sb2cKLy8gQGdyYW50ICAgICAgICAgIEdNX3NldFZhbHVlCi8vIEBncmFudCAgICAgICAgICBHTV9nZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgICAgR01fcmVnaXN0ZXJNZW51Q29tbWFuZAovLyBAZ3JhbnQgICAgICAgICAgdW5zYWZlV2luZG93Ci8vID09L1VzZXJTY3JpcHQ9PQoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8gVGhlIG9yaWdpbmFsIHNjcmlwdCBpcyBiZWxvdzogICAgICAgICAgICAgICAgICAgLy8KLy8g44Ki44OV44Kj44Oq44Ko44Kk44OI5q6644GXIGZvciBncmVhc2Vtb25rZXkgICAgICAgICAgICAgLy8KLy8gaHR0cDovL2QuaGF0ZW5hLm5lLmpwL2RlcmF3LzIwMDYwOTAyLzExNTcxNDM4MDYgLy8KLy8gYW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gQSBLaWxsZXIgTW9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gaHR0cDovL3d3dzdiLmJpZ2xvYmUubmUuanAvfnlhbWovICAgICAgICAgICAgICAgLy8KLy8gYW5kIHJlcXVpcmUgZWNsLmpzIGF1dG9yOmRyayAgICAgICAgICAgICAgICAgICAgLy8KLy8gaHR0cDovL3d3dy5kcms3LmpwLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KLy8gaHR0cDovL3d3dy5kcms3LmpwL3B1Yi9qcy9lY2xfdGVzdC9lY2xfbmV3LmpzICAgLy8KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK5YmN5pu444GNCgroh6rliIbnlKjjga7jgrnjgq/jg6rjg5fjg4jjgafjgZnjgYzjgIHnn6XkurrjgYvjgonmrLLjgZfjgYTjgajjgYTjgYbopoHmnJvjgYzjgYLjgaPjgZ/jga7jgaflhazplovjgIIK5YuJ5by344GM44Gm44KJ6L+95Yqg44GX44Gm44Gj44Gf44Gu44Gn5q2j55u0576O44GX44GP44Gq44GE44Gn44GZ44CCCuOBk+OBruOCueOCr+ODquODl+ODiOOBruWIqeeUqOOBr+WQhOiHquOBruiHquW3seiyrOS7u+OBp+OBiumhmOOBhOOBl+OBvuOBmeOAggrlvZPjgrnjgq/jg6rjg5fjg4jjgpLliKnnlKjjgZfjgZ/jgZPjgajjgavjgojjgorooqvjgaPjgZ/jgYLjgonjgobjgovmkI3lrrPjgavlr77jgZfjgablhY3osqzjgajjgZXjgZvjgabjgYTjgZ/jgaDjgY3jgb7jgZnjgIIKCkkgbWFkZSB0aGlzIHNjcmlwdCBmb3IgbXlzZWxmLgphbmQgdXBsb2FkZWQgaXQsIHNpbmNlIG15IGFjcXVhaW50YW5jZSB3YW50ZWQgaXQuCkFkZCB0byBPcmlnaW5hbCBTY3JpcHQgdG9vIG11Y2ggLHRoZSBzb3VyY2UgY29kZSBpcyBkaXJ0eS4KClBsZWFzZSB1c2UgdGhpcyBzY3JpcHQgb24gZWFjaCBvbmUgb2YgcmVzcG9uc2liaWxpdHkuIAoKSU4gTk8gRVZFTlQgU0hBTEwgRUlUSEVSIFBBUlRZIEJFIExJQUJMRSBUTyBUSEUgT1RIRVIgUEFSVFkuCgoK44Ki44OV44Kj44Gu5L+u5q2j5Y+W44KK44GT44G844GX44Gu5aCx5ZGK44KC5Y+X44GR5LuY44GR44Gm44GE44G+44GZ44CCCuKGkuS9k+iqv+OBjOiJr+OBkeOCjOOBsOebtOOBl+OBvuOBmeOAggrjgb7jgaDlrp/pqJPmrrXpmo7jga7jgZ/jgoHjg5bjg6njgqbjgrbjgZTjgajjg5Xjg6rjg7zjgrrjgZnjgovloLTlkIjjgoLjgYLjgovjgYvjgoLjgZfjgozjgarjgYTjga7jgafloLHlkYrjgY/jgaDjgZXjgYTjgIIK4oaS5L2T6Kq/44GM772S772ZCgrigLvjgZPjga7jgrnjgq/jg6rjg5fjg4jjga/jgIFBIEtpbGxlciBNb2TkvZzogIXmp5jjgajpgKPntaHkuI3lj6/jga7jgZ/jgoHnhKHmlq3jgaflvJXnlKjjgZfjgabjgYTjgb7jgZnjgIIK5LiH44GM5LiA5L2c6ICF5qeY44GL44KJ5oqX6K2w44GM44GC44Gj44Gf5aC05ZCI44CB5Y2z5Yi75YWs6ZaL5YGc5q2i44GX44G+44GZ44CCCgrjgZPjga7jgr3jg7zjgrnjga/ln7rmnKznmoTjgavmlLnlpInjgIHlho3phY3luIPoh6rnlLHjgafjgZnjgIIK44CMQSBLaWxsZXIgTW9k44CN44Gu5byV55So6YOo5YiG44Gv5ZCE6Ieq5Yik5pat44GX44Gm44GP44Gg44GV44GE44CCCuOBvuOBn+OAgemFjeW4g+OBmeOCi+WgtOWQiOOBr+W8leeUqOWFg+OBqOOBl+OBpuW9k+aWueOBruWQjeWJjeOCkuWFpeOCjOOBpuOBj+OCjOOCi+OBoOOBkeOBp09L44Gn44GZ44CCCuOBqOOBr+OBhOOBiOaCquizquOBoOOBo+OBn+OCiuipkOasuuOBquOBqeOBrueUqOmAlOOBp+OBruaUueWkieOBr+W9k+eEtk5H44Gn44GZ44CCCgrms6jmhI/ngrnjga/jg5XjgqHjgqTjg6vkv53lrZjjga7pmpvjgIHmloflrZfjgqjjg7PjgrPjg7zjg4njga9VVEYtOOOBp+S/neWtmOOBl+OBpuOBj+OBoOOBleOBhOOAgijmloflrZfljJbjgZHlm57pgb8pCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCuWJjeaPkOadoeS7tgoK4peL5b+F6aCICuODu+OCr+ODg+OCreODvChjb29raWUp44Gu5YmK6Zmk44CB44GK44KI44Gz5a6a5pyf55qE44Gq5YmK6ZmkCgrjg7vjg53jgqTjg7Pjg4jjgrXjgqTjg4jjgarjganlvZPjgrnjgq/jg6rjg5fjg4jjgpLli5XkvZzjgZXjgZvjgZ/jgY/jgarjgYTjgrXjgqTjg4jjgpLoqK3lrprjgZnjgosK5L6L77yJ44Ki44OJ44Kq44Oz44GuU2NyaXB0aXNo44GnVOODneOCpOODs+ODiOOCteOCpOODiOOBrumZpOWkluOCkuioreWumuOBmeOCi+WgtOWQiAog44K544Kv44Oq44OX44OI566h55CG55S76Z2i44GL44KJQWZmaWxpYXRlX0tpbGxlcuOBruioreWumuOCkuOCr+ODquODg+OCr+OBlwogZXhjbHVkZeOBq+mZpOWkluOBl+OBn+OBhOOCteOCpOODiOOBrlVSTOOCkuaMh+WumuOBmeOCiyjmraPopo/ooajnj77jgYzkvb/jgYjjgarjgYTvvJ8pCmh0dHA6Ly90bWFsbC50c2l0ZS5qcC8qCmh0dHBzOi8vdG1hbGwudHNpdGUuanAvKgpodHRwOi8vdHNpdGUuanAvKgpodHRwczovL3RzaXRlLmpwLyoK44Gq44GpKOacgOW+jOOBruOCouOCueOCv+ODquOCueOCrygqKeOCkuW/mOOCjOOBmuOBqykKCgril4vku6XkuIvjga/lv4XpoIjjgafjga/jgarjgYTjgZHjganjgoTjgaPjgZ/mlrnjgYzjgYTjgYQKCgox44CB5Z+65pys55qE44GrYWRibG9ja+ezu+OCouODieOCquODs+OBqOS9teeUqOaOqOWlqCjlrprnlaopCuWkp+S9k+OBruOCouODleOCo+ODquOCqOOCpOODiOOBr+OBk+OCjOOBp+aKueauuuOBleOCjOOBvuOBmeOAggrml6XmnKzoqp7jga7jg5XjgqPjg6vjgr/jg7zjgpLpganlvZPjgavos7zoqq3jgZfjgb7jgZfjgofjgYbjgIIK6Kqk54iGKOmWouS/guOBquOBhOOCguOBruOBvuOBp+mdnuihqOekuinjgoLjgYLjgovjga7jgafms6jmhI8KCjLjgIFQZWVyQmxvY2vjgarjganjga7pgJrkv6Hjg5XjgqPjg6vjgr/jg6rjg7PjgrDjgr3jg5Xjg4go5Yid5b+D6ICF5ZCR44GNKQppcOOCkumBruaWreOBmeOCi+OBn+OCgeihqOekuuOBleOCjOOBquOBj+OBquOCiuOCueODg+OCreODqijjgZ/jgaDjgZfjgZ/jgb7jgavplqLkv4LjgarjgYTjga7jgoLpga7mlq3jgZnjgovjga7jgafms6jmhI8pCuW/jeiAhWFkTWF444Gu44KI44GG44Gq5bqD5ZGK44GM6KGo56S644GV44KM44KL44Gg44GR44Gn5aCx6YWs44GM55m655Sf44GZ44KL5LuV57WE44G/44GM44GC44KL44Gu44Gn5bCO5YWl5o6o5aWoCgrlsI7lhaXmlrnms5XjgarjganvvJrohLFHb29nbGXvvKB3aWtp44GuUGVlckJsb2Nr6Kej6Kqs44Oa44O844K4Cmh0dHA6Ly93d3c0LmF0d2lraS5qcC9ub2dvb2dsZS9wYWdlcy8xOS5odG1sCgoz44CB5Y+v6IO944Gq44KJ44Ki44OJ44Kq44OzTm9SZWRpcmVjdOOBqOS9teeUqOaOqOWlqCjjgoTjgoTkuIrntJrogIXlkJHjgZEpCuODquODgOOCpOODrOOCr+ODiOOCkuODluODreODg+OCr+OBl+OBpui7oumAgeWFiFVSTOOCkuihqOekuuOBl+OBpuOBj+OCjOOCi+OBruOBp+OCouODleOCo+ODquOCqOOCpOODiOODquODs+OCr+OCkuS/ruato+OBl+OBvuOBmeOAggrkvZXmlYXjgZPjga7jgqLjg4njgqrjg7PjgYvjgajjgYTjgYbjgajku5bjga7jg6rjg4DjgqTjg6zjgq/jg4jjg5bjg63jg4Pjgq/ns7vjgqLjg4njgqrjg7Pjgafjga/jgrnjg6vjg7zjgZfjgabjgZfjgb7jgYbjgojjgYbjgaoKbWV0YeOCv+OCsOOChGh0dHDjg6rjgq/jgqjjgrnjg4jjgarjganjga7jg6rjg4DjgqTjg6zjgq/jg4jjgoLjg5bjg63jg4Pjgq/lj6/og73jgaDjgYvjgonjgafjgZnjgIIK6KaB6Kit5a6a44CCKOKGk+OBruaWueOBp+ewoeaYk+ino+iqrOOBguOCiuOBvuOBmSkKCuKAu+aWh+Wtl+WMluOBkeWVj+mhjOOBjOeZuueUn+OBmeOCi+ODmuODvOOCuOOBguOCiig0MDPjgqjjg6njg7zjgarjgakpCuOBk+OCjOOBr+a1t+WkluOBruOCouODieOCquODs+OBruOBn+OCgeaXpeacrOiqnuOBruOCqOODs+OCs+ODvOODieODu+ODh+OCs+ODvOODieOBq+WkseaVl+OBl+OBpuOBhOOCi+OBm+OBhOOAggrllY/poYzjgajjgarjgaPjgabjgYTjgotVUkzjgbjjga7jg6rjg4DjgqTjg6zjgq/jg4jjgpLoqLHlj6/jgZnjgovjgajmraPjgZfjgYRVUkzjgbjpo5vjgbPjgb7jgZnjgYzjgIEK44Ki44OV44Kj44Oq44Ko44Kk44OI44Oq44Oz44Kv44G444Gu6Kix5Y+v44Gr44Gq44KJ44Gq44GE44KI44GG6ICD44GI44Gm6Kix5Y+v44GX44G+44GX44KH44GGCgo044CB5Y+v6IO944Gq44KJUmVmZXJyZXIgQ29udHJvbOezu+OCouODieOCquODs+OBqOS9teeUqOaOqOWlqCjjgoTjgoTkuIrntJrogIXlkJHjgZEpCuODhOOCpOODg+OCv+ODvOOChOODluODreOCsFVSTOOBquOBqeOCkueZu+mMsuOBl+OAgeODquODleOCoeODqeOBquOBqeOCkuWFg+OBq+WgsemFrOOCkuaJleOBhuOCouODleOCo+ODquOCqOOCpOODiOOBjOOBguOCi+aooeanmO+8nwrnp4Hjga/jgIxSZWZDb250cm9s44CN44Go44GE44GG44Ki44OJ44Kq44Oz44KS5L2/44Gj44Gm44GE44G+44GZ44GM44CBRmlyZWZveDI544Gn44Ki44OJ44Kq44Oz44OQ44O844GM5YmK6Zmk44GV44KM44Gf44Gu44GnCuePvuWcqOOBruODquODleOCoeODqVVSTOOBjOeiuuiqjeOBp+OBjeOBquOBj+OBquOCiuOBvuOBl+OBn+OAgijjgqLjg4njgqrjg7Pjg5Djg7zlvqnmtLvjgZnjgovjgqLjg4njgqrjg7PjgpLlhaXjgozjgozjgbDlhajmqZ/og73kvb/jgYjjgb7jgZkpCuKAu+OBk+OBoeOCieOCguaWh+Wtl+WMluOBkeWVj+mhjOOBguOCiuOAggoK4oC744GX44Gj44GL44KK6Kit5a6a44GX44Gq44GE44Go55S75YOP44GM6KGo56S644GV44KM44Gq44GE44CB44OV44Kh44Kk44Or44GM44OA44Km44Oz44Ot44O844OJ44Gn44GN44Gq44GE44Gq44Gp44Gu5ZWP6aGM44GM55m655Sf44GX44G+44GZ44CCCuS4gOW/nOS4i+OBruaWueOBp+OBiuWLp+OCgeioreWumuOCkui8ieOBm+OBvuOBmeOAggoKNeOAgVJTU+ezu+OBr+OAjFJTU+W6g+WRiuWJiumZpOekvuOAjeOBquOBqeOBruW6g+WRiuWJiumZpOOCkuWIqeeUqOOBl+OBpuOBj+OBoOOBleOBhOOAggrlvZPjgrnjgq/jg6rjg5fjg4jjgafjga/ln7rmnKznmoTjgatSU1Pjga7jgqLjg5XjgqPjg6rjg7Pjgq/jgavlr77lv5zjgZfjgb7jgZvjgpPjgIIKKOWvvuW/nOOBp+OBjeOBquOBhOWgtOWQiOOBjOOBu+OBqOOCk+OBqeOBruOBn+OCgSkKCgril4vjgZPjgaDjgo/jgorjgZ/jgYTmlrnnlKgK5LiL6KiY44K144Kk44OI44Gn6Imy44CF44Go44Gp44GG44GeCgrohLFHb29nbGXvvKB3aWtpCmh0dHA6Ly93d3c0LmF0d2lraS5qcC9ub2dvb2dsZS8KCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCuOCouODieOCquODs+OBrk5vUmVkaXJlY3TjgYzoia/jgY/jgo/jgYvjgonjgarjgYTvvIHmraPopo/ooajnj77jgaPjgabkvZXvvJ/jgaPjgabkurrnlKgo44Go44Gv44GE44GI6Ieq5YiG44KC5YuJ5by35LitKQoK44G+44Ga5Yid5pyf44Gr55m76Yyy44GV44KM44Gm44GE44KL44KC44Gu44KS5YWo6YOo5YmK6ZmkCgox44CB5Lul5LiL44KS6L+95Yqg44GZ44KL44Go5YWo44Gm44GuVVJM44Gn44Oq44OA44Kk44Os44Kv44OI44KS44OW44Ot44OD44Kv44GX44Gm44GP44KM44KL44KI44GG44Gr44Gq44KL44CCCgpeaHR0cAoo4oaR6Lui6YCB5YWD44Gr44Gg44GR44OB44Kn44OD44Kv44KS5YWl44KM44KL44CC44GT44GT44GM5LiA55Wq5YWI6aCt44Gn44GC44KL44Go44GE44GG5oSP5ZGz44Gu44Kt44Oj44Os44OD44OIKF4p44KS5b+Y44KM44Ga44GrKQrigLvihpHjgZPjgozjgYzntbblr77jgavkuIDnlarkuIvjgavjgarjgovjgojjgYbjgavjgZnjgovjgIIKCjLjgIHoqLHlj6/jgZfjgZ/jgYTjg6rjg4DjgqTjg6zjgq/jg4hVUkzjga/ku6XkuIvjga7jgojjgYbjgavov73liqDjgZnjgovjgIIKICAg44Ob44Ov44Kk44OI44Oq44K544OI44Gu44KI44GG44Gq44KC44Gu44CCCiAgIOKAu+S4iuiomOino+iqrDHjga7jgIxeaHR0cOOAjeOCiOOCiuOCguS4iuOBq+i/veWKoOOBmeOCi+OBk+OBqAoKICAg5L6L77yaaHR0cDovL2hvZ2Vob2dlLmNvLmpw44G+44Gf44GvaHR0cHM6Ly9ob2dlaG9nZS5jby5qcOOCkuioseWPr+OBmeOCi+WgtOWQiAoKXmh0dHBzPzovL2hvZ2Vob2dlLmNvLmpwCijihpHou6LpgIHlhYPjgajoqLHlj6/jgavjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgovjgILjgq3jg6Pjg6zjg4Pjg4goXinjgpLlv5jjgozjgZrjgaspCgogICAg44GT44Gu5aC05ZCI5oyH5a6a44GX44GfVVJM44Gu5b6M44Gr5L2V44GM5p2l44Gm44KC44GE44GE44Gu44GnCiAgICBodHRwOi8vaG9nZWhvZ2UuY28uanAvaG9tZXBhZ2UvaW5kZXguaHRtbOOBquOBqeOCguioseWPr+OBleOCjOOCiwoKCjPjgIHjgIzou6LpgIHlhYPjgI3jgavjg4Hjgqfjg4Pjgq/lhaXjgozjgovjgajku4rooajnpLrjgZXjgozjgabjgYTjgotVUkwo6Lui6YCB5YWDKeOBi+OCieOBruODquODgOOCpOODrOOCr+ODiOOBruioreWumgogICAg44OB44Kn44OD44Kv44KS5aSW44GZ44Go4oCd6Lui6YCB5YWI4oCd44GuVVJM44Gr5a++44GZ44KL6Kit5a6aCiAgICDigLvihpHjgZPjgZPjga/jgYvjgarjgorph43opoEKCjTjgIHjgIzoqLHlj6/jgI3jgavjg4Hjgqfjg4Pjgq/lhaXjgozjgovjgajjg6rjg4DjgqTjg6zjgq/jg4jjgpLmraLjgoHjgZrjgavou6LpgIEo44OR44K544K544Or44O8KQogICAg44OB44Kn44OD44Kv44KS5aSW44GZ44Go44Oq44OA44Kk44Os44Kv44OI44KS44OW44Ot44OD44Kv44GX44Gm6Lui6YCB5YWIVVJM44KS6KGo56S6CiAgICDjg5vjg6/jgqTjg4jjg6rjgrnjg4jjga7jgojjgYbjgavkvb/jgYbjga7jgafov73liqDjgZnjgovloLTlkIjjga/ln7rmnKznmoTjgavoqLHlj6/jgavjg4Hjgqfjg4Pjgq/jgpLlhaXjgozjgosKCiAgICDkvovjgYjjgbAKICAgIF5odHRwOi8vaG9nZS5jb20vc2hvcC8g44OW44Ot44OD44KvCiAgICBeaHR0cDovL2hvZ2UuY29tLyDoqLHlj68KICAgIF5odHRwIOODluODreODg+OCrwogICAg44Gu44KI44GG44Gr5LiK44GL44KJ6Kit5a6a44GX44Gf5aC05ZCI44GvaHR0cDovL2hvZ2UuY29tL3Nob3Av44Gu44OW44Ot44OD44Kv44GM5pyA5YSq5YWI44GnCiAgICDjgZ3jgozku6XlpJbjga5odHRwOi8vaG9nZS5jb20v44Gv6Kix5Y+vKOS+i+OBiOOBsGh0dHA6Ly9ob2dlLmNvbS9zdG9yZS9pbmRleC5odG1s44Gq44Gp44Gv6Kix5Y+vKeOBqOOBquOCiuOAgQogICAg5pyA5b6M44GraHR0cDovL2hvZ2UuY29tL+S7peWkluOBrlVSTOOBr+WFqOmDqOODluODreODg+OCr+OBqOOBquOCi+OAggoKNeOAgeOAjEROU+OAjeOBq+mWouOBl+OBpuOBr+WfuuacrOeahOOBq+ODgeOCp+ODg+OCr+OBl+OBquOBj+OBpk9LCgrigLvms6jmhI/ngrkK6Lui6YCB5YWD44Gr44OB44Kn44OD44Kv44KS5YWl44KM44KL44GL44Gp44GG44GL44Gv44Gh44KD44KT44Go6ICD44GI44Gq44GE44GoCuODluODreODg+OCr+OBmeOBueOBjeOBqOOBk+OCjeOCkuOCueODq+ODvOOBl+OBpuaEj+WRs+OBquOBhOOBk+OBqOOBq+OAggrlj6/og73jgarjgonjgbDjg4njg6HjgqTjg7PjgaDjgZHjgafjgarjgY/ntLDjgYvjgY/mjIflrprjgZnjgovmlrnjgYzkuIflhajjgIIKCgrmnIDkvY7pmZDopprjgYjjgabjgYrjgY/jgajkvr/liKnjgarmraPopo/ooajnj77opo/liYctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK5YmN5o+Q44Go44GX44Gm5b2T54S25Y2K6KeS6Iux5pWw5a2X44Gn44GZ44CCCuiqpOino+immuaCn+OBp+iqrOaYjuOBmeOCi+OBqOOAgeaWh+Wtl+OCkuaknOe0ouOBmeOCi+OBn+OCgeOBruihqOePvuOBp+OBmeOAggoKXmh0dHAKKOKGkeWFiOmgreOBjGh0dHDjgajjgYTjgYbmhI/lkbPjgILjgq3jg6Pjg6zjg4Pjg4goXinjga/jgZPjgZPjgYzkuIDnlarlhYjpoK3jgafjgYLjgovjgajjgYTjgYbmhI/lkbPjgIIpCgpodHRwcz8KKOKGkWh0dHDjgb7jgZ/jga9odHRwc+OBruOBqeOBo+OBoeOBp+OCguOBhOOBhOOCiOOBqOOBhOOBhuaEj+WRs+OAguOCr+OCqOOCueODgeODp+ODs+ODnuODvOOCryg/KeOBruWJjTHmloflrZfjga7mnInnhKHjga4y44OR44K/44O844OzKQoKKGNvLmpwfGNvbXxuZS5qcCkKKOKGkWNvLmpw44G+44Gf44GvY29t44G+44Gf44GvbmUuanDjgajjgYTjgYbmhI/lkbPjgILjg5HjgqTjg5fjg6njgqTjg7MofCnjgafljLrliIfjgovjgajkvZXjg5Hjgr/jg7zjg7PjgavjgoLlr77lv5zlj6/og73jgILmi6zlvKfjgaflm7LjgoDjga7jgpLlv5jjgozjgZrjgaspCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpSZWZDb250cm9s44Gu44GK44GZ44GZ44KB6Kit5a6aCgrjgJDmpoLopoHjgJEK44Oq44OV44Kh44Op44Go44Gv5LuK6KaL44Gm44GE44KL44K144Kk44OI44Gu5YmN44Gr6KaL44Gm44GE44Gf44K144Kk44OIVVJM44Gq44Gp44Gu5bGl5q205oOF5aCx44Gn44CBCuOBneOBruaDheWgseOBq+OBr+aknOe0ouOBl+OBn+WNmOiqnuOBquOBqeOCguWQq+OBvuOCjOOCi+WgtOWQiOOBjOOBguOCiuOBvuOBmeOAggrjgqLjg4njgqrjg7Pjgavjgojjgormm7jjgY3mj5vjgYjjgZ/jgormtojjgZfjgabjgZfjgb7jgYrjgYbjgajjgYTjgYbjgo/jgZHjgafjgZnjgIIKCuOAkOioreWumuOAkQoKMeOAgeacgOWIneOBq+OAjOS4gOimp+OBq+OBquOBhOOCteOCpOODiOOBq+mWouOBmeOCi+imj+WumuWApOOAjeOCkuOAjOWBveijheOAjSjmjqjlpagp44GC44KL44GE44Gv44CM6Zi75q2i44CN44GX44KI44GG44CCCgrjg7vlgb3oo4Xjg7vjg7vjg7vjgZPjgaHjgonjgpLmjqjlpajjgILjgZ3jga7jgrXjgqTjg4jjga7jg4njg6HjgqTjg7NVUkzjgpLjg6rjg5XjgqHjg6nmg4XloLHjgavjgZnjgosK44O76Zi75q2i44O744O744O744Oq44OV44Kh44Op5oOF5aCx44KS5raI5Y6744GX44CB44G+44Gj44GV44KJ44Gq54q25oWL44Gr44GZ44KLKOS4gOmDqOOCteOCpOODiOOBp+ODquODleOCoeODqeOBjOOBvuOBo+OBn+OBj+eEoeOBhOOBqOihqOekuuOBp+OBjeOBquOBj+OBquOCiykK44O76YCa5bi444O744O744O75pys5p2l44Gu44Oq44OV44Kh44Op44Gn44GZ44CC5ZWP6aGM44GM5Ye644Gm56K66KqN44GZ44KL44Go44GN5Lul5aSW44Gv6YG444Gw44Gq44GE5pa544GM44GE44GE44Gn44GZ44CCCuODu+OCq+OCueOCv+ODoOODu+ODu+ODu+iHqueUseOBq+ODquODleOCoeODqeOBrlVSTOOCkuabuOOBjeaPm+OBiOOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOBjOOAgeaZrumAmuOBruS6uuOBr+S4jeimgeOBp+OBl+OCh+OBhuOAggoKMuOAgeWAi+WIpeeZu+mMsuOBp+OCqOODqeODvOWbnumBvwoK6KGo56S644GV44KM44Gq44GE44O744OA44Km44Oz44Ot44O844OJ44GV44KM44Gq44GE44O75aSJ44Gq44Ko44Op44O844GM5Ye644KL44Gq44Gp5ZWP6aGM44GM55m655Sf44GX44Gf44KJ44CBCuOCueODhuODg+ODlzHjgafoqK3lrprjgZfjgZ/lhajkvZPjga7jg6rjg5XjgqHjg6njgIzlgb3oo4XjgI3jgpLjgIzpgJrluLjjgI3jgavoqK3lrprjgZfjgabllY/poYzjgYzop6PmtojjgZXjgozjgovjgYvnorroqo0K44KC44GX44Gd44KM44Gn5ZWP6aGM44GM6Kej5raI44GX44Gf44KJ5Lul5LiL44Gu44KI44GG44Gr5YCL5Yil6L+95Yqg44GX44KI44GGCgrllY/poYzjga7jgrXjgqTjg4jjgafog4zmma/jgpLlj7Pjgq/jg6rjg4Pjgq/jgZfjgablj7Pjgq/jg6rjg4Pjgq/jg6Hjg4vjg6Xjg7zjgpLlh7rjgZkK44CM44GT44Gu44K144Kk44OI44Gr6Zai44GZ44KLIFJlZkNvbnRyb2wg44Kq44OX44K344On44Oz44CN44KS44Kv44Oq44OD44KvCgrjgZnjgovjgajjgZ3jga7jgrXjgqTjg4jjga7jg6rjg5XjgqHjg6nli5XkvZzjgpLmjIflrprjgafjgY3jgovjga7jgafjgZ3jga7jgb7jgb5PS+OCkuaKvOOBmeOAggrigLvjg4fjg5Xjgqnjg6vjg4jjgafjgIzpgJrluLjjgI3jgYzpgbjmip7jgZXjgozjgabjgYTjgovjga/jgZrjgafjgZkKCue1guOCj+OBo+OBn+OCieW/mOOCjOOBmuOBq+WFqOS9k+OBruODquODleOCoeODqeOCkuOAjOWBveijheOAjeOBq+aIu+OBneOBhuOAggoKCjPjgIHjgYrjgZnjgZnjgoHoqK3lrpoKCuS7peS4i+OBrlVSTOOCkuODquODleOCoeODqeOAjOmAmuW4uOOAjeOBp+i/veWKoOOBmeOCi+OAggoK4oC744Gg44Gf44GX6L+95Yqg44Gv5ZCE6Ieq44Gu6Ieq5bex6LKs5Lu744Gn44GK6aGY44GE44GX44G+44GZ44CCCijlrp/pmpvjgavoh6rliIbjgafnorroqo3jgZfjgabjgYvjgonov73liqDjgpLjgYrli6fjgoHjgZfjgb7jgZkpCgrjg7tnb29nbGXjgqLjgqvjgqbjg7Pjg4go56K644GLeW91dHViZeOBi+OCouODs+ODieODreOCpOODieODnuODvOOCseODg+ODiCkKYWNjb3VudHMuZ29vZ2xlLmNvbQoK44O744OL44Kz44OL44Kz5YuV55S757O7CmNvbS5uaWNvdmlkZW8uanAKbmljb2Jsb21hZ2EuanAKCuODu3BpeGl2Cnd3dy5waXhpdi5uZXQKCuODu3ZlY3RvcuOBruODleODquODvOOCveODleODiOODgOOCpuODs+ODreODvOODieOBquOBqQpmdHAudmVjdG9yLmNvLmpwCm15LnZlY3Rvci5jby5qcAoK44O744K944OV44Oe44OD44OXCnBvaW50LnNvZm1hcC5jb20KCuODu+OCveODleODiOODkOODs+OCr+ezuyjlpJrliIbjg5fjg63jg5DjgqTjg4DjgoTpm7voqbHmlpnph5Hns7spCndlYi1tZWlzYWkuc29mdGJhbmt0ZWxlY29tLmNvLmpwCndlYm1laXNhaS5qcAoK44O744Km44Kn44OW6a2a5ouTCm1lZ2Fsb2Rvbi5qcAoK44O744Gh44Ga5Li4Cm1hcC5jaGl6dW1hcnUuY29tCgrjg7vjgoLjgorjgZ/jgb0KZmluZC5tb3JpdGFwby5qcAoKCuKAu+S4iuiomOS7peWkluOBp+OCguihqOekuuOBleOCjOOBquOBhOODu+ODgOOCpuODs+ODreODvOODieOBleOCjOOBquOBhOODu+WkieOBquOCqOODqeODvOOBjOWHuuOCi+OBquOBqQrllY/poYzjgYznmbrnlJ/jgZnjgovjgrXjgqTjg4jjga/jgaHjgonjgbvjgonjgajjgYLjgorjgb7jgZnjgIIK44Gd44Gu5aC05ZCI44Gv5YaN5bqm44K544OG44OD44OXMuOBq+aIu+OCjeOBhgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKuabtOaWsOWxpeattCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgowNi8yOS8yMDE0IC0gdjMuOCAgZml4OnYzLjfjgafjga7kv67mraPjg5/jgrnjga7kv67mraPjg7vjg7vjg7sKMDYvMjkvMjAxNCAtIHYzLjcgIGZpeDrli5XkvZzjgZfjgarjgYvjgaPjgZ/jg5DjgrDkv67mraMKMDYvMjcvMjAxNCAtIHYzLjYgIGZpeDrkvqHmoLzjgrPjg6Djgafkv67mraPpgJTkuK3jgafmraLjgb7jgovnl4fnirbkv67mraPjgILku5YKMDYvMjYvMjAxNCAtIHYzLjUgIGFkZDrmtbflpJbjga7jgqLjg5XjgqPjgavkuIDpg6jlr77lv5wKMDYvMjUvMjAxNCAtIHYzLjQgIGZpeDropoHntKDntpnjgY7otrPjgZfjgavlr77lv5wo57aZ44GO6Laz44GX44Gu5aSa44GE44Oa44O844K444Gq44Gp44Gv5Yem55CG44GM6YeN44GP44Gq44KL5aC05ZCI44GC44KKKQowNi8yMS8yMDE0IC0gdjMuMyAgYWRkOltraWxsZXJd44Gu5paH5a2X6Z2e6KGo56S65qmf6IO96L+95YqgKOOCueOCr+ODquODl+ODiOOBjOODquODs+OCr+OBruS/ruato+ODn+OCueOBguOBo+OBpuOCguawl+OBq+OBl+OBquOBhOOBquOCiemdnuihqOekuuOBp+OBqeOBhuOBnikKMDYvMTgvMjAxNCAtIHYzLjIgIGZpeDrkuIDpg6jjga7jgrXjgqTjg4jjgafjgYrjgYvjgZfjgY/jgarjgaPjgabjgYTjgZ/jga7jgpLkv67mraMKMDYvMTMvMjAxNCAtIHYzLjEgIGRlbDpAdXBkYXRlVVJMCjA2LzEyLzIwMTQgLSB2My4wICBhZGQ644GZ44G544Gm44Gu6KaB57Sg44KS44OB44Kn44OD44Kv44GZ44KL44KI44GG44Gr5aSJ5pu044CC5LuW6Imy44CFCjA2LzA3LzIwMTQgLSB2Mi4xMSBhZGQ6Z29vZ2xl44OI44Op44OD44Kr44O86Zmk5Y67CjA2LzA3LzIwMTQgLSB2Mi4xMCBmaXg65Lim44Gz6aCG44KS44Ki44Or44OV44Kh44OZ44OD44OI6aCG44Gr5pW055CGCjA0LzE2LzIwMTQgLSB2Mi40ICBmaXg644Oa44O844K45YaF44K544Kv44Ot44O844Or55So44Oc44K/44Oz44Gv6Zmk5aSWCjA0LzAyLzIwMTQgLSB2Mi4zICBmaXg65paH5a2X5YyW44GR5Zue6YG/44GrZWNsLmpz44KScmVxdWlyZeOBmeOCi+OCiOOBhuOBq+WkieabtOOAguS7luiJsuOAheS/ruatowowMy8yNS8yMDE0IC0gdjIuMiAgZGVsOuaaq+WumueahOOBq+OCueOCr+ODquODl+ODiOWun+ihjOODh+OCo+ODrOOCpOOCkuWJiumZpAowMy8yNS8yMDE0IC0gdjIuMSAgYWRkOkFtYXpvbuOBruODquODgOOCpOODrOOCr+ODiOmZpOWOuwowMy8yMy8yMDE0IC0gdjIuMCAgYWRkOkFtYXpvbuOBruOCueODnuODvOODiOODleOCqeODs1VSTOOBq+WvvuW/nAowMy8yMi8yMDE0IC0gdjEuOSAgZml4Okdvb2dsZUltYWdl5qSc57Si44Gv6Zmk5aSW44CCb25jbGlja+mZpOWOu+OCkuS/ruato+OBl+OBn+ODquODs+OCr+OBruOBv+mBqeW/nOOBmeOCi+OCiOOBhuOBq+WkieabtOOAggowMy8yMi8yMDE0IC0gdjEuOCAgZml4OuiqrOaYjuaWh+WQueOBo+mjm+OCk+OBoOOBruOBp+abuOOBjeebtOOBl+OAgkFtYXpvbuOBruS/ruatowowMy8xNC8yMDE0IC0gdjEuMCAgcmVsZWFzZQoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCuWCmeW/mOmMsgrjg7tHb29nbGVJbWFnZeaknOe0ouOBp+OBhuOBvuOBj+WLleOBi+OBquOBhOOBruOBp0BleGNsdWRl44Gr6L+95Yqg44CCKnRibT1pc2NoKuOBr0dvb2dsZUltYWdl5qSc57Si55SoCiAg6Kmz57Sw44Km44Kj44Oz44OJ44Km44Gu5Y+z5YG044K144Og44ON44Kk44Or55S75YOP44Kv44Oq44OD44Kv44Gn6LW35YuV44GZ44KL54m55q6K44Gq44K544Kv44Oq44OX44OI44Gn44CBaWZyYW1l5YaF44Gr6KaB57Sg44KS5YWl44KM6L6844KT44Gn44GE44KL5qeY5a2QCiAgRjXjg6rjg63jg7zjg4njgZnjgovjgahpZnJhbWXlhoXjgpLjgrPjg5Tjg7zjgZfjgZ/opoHntKDjga7mlrkoaWZyYW1l44GY44KD44Gq44GP44Gq44KLKeOBq+WIh+OCiuabv+OCj+OCi+OBquOBqeiJsuOAheaMmeWLleOBjOOBiuOBi+OBl+OBhArihpJhZGRFdmVudExpc3RlbmVy44Gn55uj6KaW6L+95Yqg44Gn5a++5b+cCgrjg7vjg4fjgrPjg7zjg4njgqjjg6njg7zjga/jganjgYbjgoTjgolkZWNVUknjgaDjgahFVUMtSlDjgoRTaGlmdC1KSVPjga7mloflrZfliJfjgYzmnaXjgovjgajnmbrnlJ/jgZnjgovmqKHmp5jvvJ8K4oaSZWNsLmpzKEVzY2FwZSBDb2RlYyBMaWJyYXJ5KeOCkuOBiuWAn+OCiuOBmeOCi+OBk+OBqOOBqwrihpJyZXF1aXJl44GL44KJ5Z+L44KB6L6844G/44Gr5aSJ5pu0KEdyZWFzeUZvcmvjgadyZXF1aXJl5L2/44GG44Go6Imy44CF44Go6Z2i5YCS44Gq44Gf44KBKQoK44O7bGlua2lmaWVy44Gu56iu6aGeKGxpbmtpZnkgcGx1cynjgavjgojjgaPjgabjga/jg4fjgqPjg6zjgqTjgpIxMDDlhaXjgozjgarjgYTjgajooajnpLrjgafjgY3jgarjgYTloLTlkIjjgYLjgooK4oaS5qW95aSp44Gu5Z+L44KB6L6844G/5Z6L44OW44Ot44Kw44OE44O844Or44Gu6Kqt44G/6L6844G/44GM6YGF44GE44Gu44GnNTAw44Gr5aSJ5pu0CuKGkmZhY2Vib29r44Gu5qW95aSp5bqD5ZGK44Gu6Kqt44G/6L6844G/44GM6YGF44GPODAw44Gr5aSJ5pu0KOOBk+OCjOOBp+OCguiqreOBv+i+vOOBv+OBjOmBheOBhOOBqOS/ruato+OBp+OBjeOBquOBhOOBkeOBqeOBk+OCjOS7peS4iuOBr+OCueODiOODrOOCueOBruOBn+OCgeWmpeWNlCkK4oaSbXkgeWFob2/jga7jg5rjg7zjgrjjgYzoqq3jgb/ovrzjgb/jgYzpgYXjgY8zMDAw44KC5b+F6KaB44Gq44Gf44KB44OH44Kj44Os44Kk44KS5buD5q2i44GX44Gm44Oh44Kk44Oz6Zai5pWw44Gu6LW35YuV44KS44K/44Kk44Oe44O844Kr44Km44Oz44OI44Gr44GX44GfCuKGkmFkZEV2ZW50TGlzdGVuZXLjgavlpInmm7QKCuODu2FtYXpvbuOBruWfi+OCgei+vOOBv+Wei2ZsYXNo44Gu5aC05ZCI44CB44Oq44OA44Kk44Os44Kv44OI55m655Sf44GZ44KL44Gu44GnTm9SZWRpcmVjdOOBp+ODluODreODg+OCr+W+jOS/ruatowoK44O75rW35aSW6KO944Ki44OJ44Kq44Oz44Gu44Gf44KB44GLbm9yZWRpcmVjdOOBjOODluODreODg+OCr+OBmeOCi+OBqOaXpeacrOiqnuOBjOaWh+Wtl+WMluOBkeOCkui1t+OBk+OBmeaooeanmCjmpb3lpKnjgarjganjgafnorroqo0pCuKGkuOCouODleOCo+ODquOCqOOCpOODiOODquODs+OCr+OBmOOCg+OBquOBhOWgtOWQiOOBr+ODquODgOOCpOODrOOCr+ODiOOCkuioseWPr+OBmeOCi+OBqOWVj+mhjOOBr+ino+a2iOOBmeOCiwrihpLmpb3lpKnjgpLoqLHlj6/jgZfjgaHjgoPjgYbjgajjgqLjg5XjgqPjg6rjgqjjgqTjg4jjg6rjg7Pjgq/jgpLouI/jgpPjgafjgZfjgb7jgYbjga7jgafkuovliY3jgavkv67mraPlj6/og73jgarjgoLjga7jga/kv67mraPjgZfjgZ8o44G+44Gg5LuW44Gr44GC44KL44GL6Kq/5p+75LitKQoK44O7YW1hem9u44Gu5a6a5pyf44GK44OI44Kv5L6/44Oa44O844K444Gn44GG44G+44GP6KGo56S644GV44KM44Gq44GE5LqL6LGh44KS6Kej5rG644Gn44GN44Gq44GE44Gu44GnCiAg6Kmy5b2T44Oa44O844K4KGh0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2wvMjc5OTM5OTA1MSnjgpLpmaTlpJZAZXhjbHVkZQrihpLlr77lv5zlrozkuoYK4oaS5LuW44Gr44KCYW1hem9u5YaF44Gn44GT44Gu44Oh44OL44Ol44O85qyE44KS5L2/44Gj44Gm44KL44Oa44O844K444GM44GC44KL5qih5qeY44CCYW1hem9u6Ieq5L2T44KS55yB44GP44GL5qSc6KiO5LitCgrjg7vjg5bjg63jgrDjg5Hjg7zjg4Tjga7ln4vjgoHovrzjgb/lnovjgrnjgq/jg6rjg5fjg4goLmpz57O7KeOBq+mWouOBmeOCi2Z1bmN0aW9uIGtpbGxKU+OBjOmgk+aMq+S4reOBruOBn+OCgei1t+WLleeuh+aJgOOCkuOCs+ODoeODs+ODiOOCouOCpuODiAoK44O75Lul5LiL44Gv6ZaJ6Y6W77yf44Od44O844OIODA4MOOBq+OBquOBo+OBn+OCiOOBhuOBoOOBkeOBqeS4jeWuieWumuOBquOBruOBp+OBqOOCiuOBguOBiOOBmmdyZWFzeWZvcmvjgbjnp7vooYwKICBodHRwczovL3VzZXJzY3JpcHRzLW1pcnJvci5vcmcvc2NyaXB0cy9zaG93LzQxMTM2MwogIGh0dHBzOi8vdXNlcnNjcmlwdHMtbWlycm9yLm9yZy9zY3JpcHRzL3NvdXJjZS80MTEzNjMudXNlci5qcwoK44O7QHVwZGF0ZVVSTOOCkuWJiumZpCjjgqTjg7Pjgrnjg4jjg7zjg6vjgZfjgZ/jgajjgY3jga7jgrXjgqTjg4hVUkzjgpLjgqLjg4njgqrjg7PjgYzkv53mjIHjgZfjgabjgYTjgovjga7jgafmm7TmlrDlj6/og73jgarmqKHmp5gpCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoKCgovLz09PT09PT09PT09PT3jg5fjg63jgrDjg6njg6Dplovlp4s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQooZnVuY3Rpb24oKSB7CgkvL+ODiOODqeODg+OCreODs+OCsOmZpOWOuwoJcmVtVHJhY2soZG9jdW1lbnQpOwoKCS8v44Om44O844K244O86Kit5a6aKGtpbGxlcuihqOekuuioreWumikKCXZhciBoaWRlT3JpZ2luTGluayA9ICJvbmUiOwoJaGlkZU9yaWdpbkxpbmsgPSB1c2VyQ2ZnKCJoaWRlT3JpZ2luTGluayIpOwoKCS8v5paH5a2X44Ko44Oz44Kz44O844OJ55So44Gu6Zai5pWw6Kqt44G/6L6844G/CgllY2woKTsKCgkvL+ODoeOCpOODs+WHpueQhuWun+ihjAoJd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge21haW4oZG9jdW1lbnQpfSwgMTIwMCApOwkJLy/lh6bnkIbjga4y6YeN5YyW44Gr44Gq44KL44GR44Gp44K144Kk44OI44GU44Go44Gr5YiG44GR44KL44KI44KK44Oe44K344GL44Gq77yfCgoJLy9kb23oqq3jgb/ovrzjgb/lvowoTm9zY3JpcHTjgafmraLjgoHjgabjgovloLTlkIjjga9kb23oqq3jgb/ovrzjgpPjgafjgarjgYTjgaPjgb3jgYTjgILjgYvjgajjgYTjgaPjgabjgZPjga7otbfli5XjgpLmtojjgZnjgajoqq3jgb/ovrzjgb/pgYXlu7bjga7jgYLjgovjgrXjgqTjg4jjgZTjgajjgavliIbjgZHjgovlv4XopoHjgYzjgYLjgospCglkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgZnVuY3Rpb24oZXZ0KXsKCQl2YXIgbm9kZSA9IGV2dC50YXJnZXQ7CgkJd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge21haW4obm9kZSl9LCAxNTAwICk7Cgl9LCBmYWxzZSk7CgkvL+e2meOBjui2s+OBl+imgee0oOWvvuW/nAoJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIiwgZnVuY3Rpb24oZSkgewoJCXdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHttYWluKGUudGFyZ2V0KX0sIDE1MDAgKTsKCX0sIGZhbHNlKTsKCgoJLy/jg6HjgqTjg7Plh6bnkIY9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJZnVuY3Rpb24gbWFpbihkb2N1bWVudCl7Ci8vYWxlcnQoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvY3VtZW50KSk7CnRyeXsKCi8vCQl2YXIgYWxsTGlua3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpOwoJCXZhciBhbGxMaW5rcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CgkJdmFyIGN1dE51bSA9IiI7CgkJdmFyIHN0clVybCA9ICIiOwkvL+S/ruato+OBl+OBn1VSTAoKCgkJLy/ln4vjgoHovrzjgb/lnotqYXZh44K544Kv44Oq44OX44OICi8vCQlraWxsSlMoZG9jdW1lbnQpOwoKCQlmb3IgKGkgPSAwOyBpIDwgYWxsTGlua3MubGVuZ3RoOyBpKyspewoKCgkJCS8vaHJlZuOCkuWQq+OBvuOBquOBhOODquODs+OCr+OBr+mZpOWklgoJCQlpZihhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PSBudWxsCgkJCSAgfHwgYWxsTGlua3NbaV0uaHJlZiA9PSB1bmRlZmluZWQKCQkJICB8fCBhbGxMaW5rc1tpXS5ocmVmID09ICIiKXsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQl2YXIgaHJlZiA9IGFsbExpbmtzW2ldLmhyZWY7CS8v5YWD44GuVVJMKOalteWKm+S4iuabuOOBjeOBl+OBquOBhOOBk+OBqO+8gSkKLy8JCQlzdHJVcmwgPSBocmVmOwoJCQlzdHJVcmwgPSBkZWNVUkkoaHJlZik7CgoJCQkvL+S6i+WJjeS/ruatoz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoKCQkJLy/jgqLjg57jgr7jg7Pjga7jg6rjg4DjgqTjg6zjgq/jg4jpmaTljrsKCQkJaWYoaHJlZi5tYXRjaCgiYW1hem9uLmNvLmpwIikgJiYgaHJlZi5tYXRjaCgvXC9yZWRpcmVjdC8pICl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9leGVjL29iaWRvcy9yZWRpcmVjdD90YWc9YmVzdGdhdGUtMjImcGF0aD1odHRwJTNBJTJGJTJGd3d3LmFtYXpvbi5jby5qcCUyRmdwJTJGb2ZmZXItbGlzdGluZyUyRkIwMENMN0xDM08lMkYlM0Zjb25kaXRpb24lM0RuZXcKCQkJCWlmKGhyZWYubWF0Y2goLyhcJnxcPylwYXRoPWh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwicGF0aCIpOwoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9yZWRpcmVjdC5odG1sL3JlZj1hbWJfbGlua182ODY5NDQyOV8yP2llPVVURjgmbG9jYXRpb249aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uY28uanAlMkZncCUyRmhlbHAlMkZjdXN0b21lciUyRmRpc3BsYXkuaHRtbCUzRm5vZGVJZCUzRDIwMDUwNTgwMCZ0b2tlbj0wQUUxREZBQ0M5NTRGOTE5ODYwNzQ1MDRGNTdDMTM2MkM4NUZCNkU4JnBmX3JkX209QU4xVlJRRU5GUkpONSZwZl9yZF9zPW1lcmNoYW5kaXNlZC1zZWFyY2gtbGVmdC0yJnBmX3JkX3I9MFBXN0cxUkZBS0tWNTkyQ0VYQ0omcGZfcmRfdD0xMDEmcGZfcmRfcD0xNTc5Njg2NDkmcGZfcmRfaT0yNzk5Mzk5MDUxCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJsb2NhdGlvbj1odHRwIikpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsImxvY2F0aW9uIik7CgovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2V4ZWMvb2JpZG9zL3JlZGlyZWN0P2xpbmtfY29kZT11cjImY2FtcD0yNDcmdGFnPW5hcml0YW5ldG1hcC0yMiZjcmVhdGl2ZT0xMjExJnBhdGg9ZXh0ZXJuYWwtc2VhcmNoJTNGc2VhcmNoLXR5cGU9c3MlMjZrZXl3b3JkPSUyNUUzJTI1ODMlMjVBQSUyNUUzJTI1ODIlMjVCOSUyNUUzJTI1ODMlMjU4OCUyNUUzJTI1ODMlMjVBOSUyNUU2JTI1OTIlMjU4MyUyNUU5JTI1ODAlMjU4MCUyNUVGJTI1QkMlMjVBMSUyNUVGJTI1QkMlMjVBMiUyNUVGJTI1QkMlMjVBMyUyNUUzJTI1ODAlMjU4MCUyNmluZGV4PWJvb2tzLWpwCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvZXhlYy9vYmlkb3MvcmVkaXJlY3Q/bGlua19jb2RlPXVyMiZjYW1wPTI0NyZ0YWc9bmFyaXRhbmV0bWFwLTIyJmNyZWF0aXZlPTEyMTEmcGF0aD1leHRlcm5hbC1zZWFyY2g/c2VhcmNoLXR5cGU9c3Mma2V5d29yZD0lRTMlODMlQUElRTMlODIlQjklRTMlODMlODglRTMlODMlQTklRTYlOTIlODMlRTklODAlODAlRUYlQkMlQTElRUYlQkMlQTIlRUYlQkMlQTMlRTMlODAlODAmaW5kZXg9Ym9va3MtanAKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goLyhcP3xcJilwYXRoPS8pKXsKCQkJCQl2YXIgc3RyS2V5ID0gIiI7CgkJCQkJaWYocGFyYW1zWyJrZXl3b3JkIl0gIT0gdW5kZWZpbmVkKXsKCQkJCQkJc3RyS2V5ID0gJyZrZXl3b3JkPScgKyBwYXJhbXNbImtleXdvcmQiXTsKCQkJCQl9CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oLiopcmVkaXJlY3RcPy4qJC9pLCckMScgKyBnZXRSZWRpcmVjdFVybChocmVmLCJwYXRoIikgKyBzdHJLZXkpOwoJCQkJfWVsc2V7CgkJCQl9CgkJCQlzZXRMaW5rKCk7CgovL+ato+OBl+OBhGh0dHA6Ly93d3cuYmVzdGdhdGUubmV0L2dvLnBodG1sP3Byb2R1Y3RpZD1naWdhYnl0ZWdiYnhpNzQ3NzByJmlkPTM2MjUwNjMKLy9odHRwOi8vd3d3LmJlc3RnYXRlLm5ldC9nby5waHRtbD9zaXRlaWQ9QTAwMDAwMSZjYXRlZ29yeWlkPTAwMTAwNjAwODAwMDAwMCZwcm9kdWN0aWQ9Z2lnYWJ5dGVnYmJ4aTc0NzcwciZzb3J0PWVwYzEmb3JkZXJOdW1iZXI9MSZwb2ludFByaWNlPTEwNTQwOCZwcmljZT0xMDU0MDgmaWQ9MzYyNTA2MyZ0eXBlPWIKCQkJLy9iZXN0Z2F0ZeOBruODquODs+OCr+OCkuWPr+iDveOBqumZkOOCiuWJiumZpAoJCQl9ZWxzZSBpZihsb2NhdGlvbi5ocmVmLmluZGV4T2YoInd3dy5iZXN0Z2F0ZS5uZXQiKSA8IDEwICYmIGxvY2F0aW9uLmhyZWYuaW5kZXhPZigid3d3LmJlc3RnYXRlLm5ldCIpID4gMCl7CgkJCQlpZihocmVmLm1hdGNoKCJwcm9kdWN0aWQ9IikgJiYgaHJlZi5tYXRjaCgic2l0ZWlkPSIpKXsKCgkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oLiopZ28ucGh0bWxcPy4qJC9pLCIkMWdvLnBodG1sPyIpICsgInByb2R1Y3RpZD0iICsgcGFyYW1zWyJwcm9kdWN0aWQiXSArICImaWQ9IiArIHBhcmFtc1siaWQiXTsKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cuYmVzdGdhdGUubmV0L2hvcF9hdWN0aW9uLnBocD91cmw9aHR0cCUzQSUyRiUyRnBhZ2UxMy5hdWN0aW9ucy55YWhvby5jby5qcCUyRmpwJTJGYXVjdGlvbiUyRnIxMTI0ODQzOTMmdHlwZT1hdAoJCQkJLy9iZXN0Z2F0ZeOBq+OBguOCi+ODpOODleOCquOCr+ODquODs+OCr+S/ruatowoJCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiaG9wX2F1Y3Rpb24ucGhwIikgJiYgaHJlZi5tYXRjaCgidXJsPWh0dHAiKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKLy/mraPjgZfjgYRodHRwOi8vd3d3LmNvbmVjby5uZXQvZ29zaG9wLmFzcD9tX2lkPThhMTBjZGFiNTk4OWFjOTNlYjEyNTkwNDJmOTc1MGE0JnNob3BfaWQ9MTIyMgovL2h0dHA6Ly93d3cuY29uZWNvLm5ldC9nb3Nob3AuYXNwP21faWQ9OGExMGNkYWI1OTg5YWM5M2ViMTI1OTA0MmY5NzUwYTQmY29tX2lkPTExMzEwMTAxNzkmc2hvcF9pZD0xMjIyJmNfaWQ9MDExNTUwMjImZ29zaG9wPTEmdGE9NS45CgkJCS8vY29uZWNv44Gu44Oq44Oz44Kv44KS5Y+v6IO944Gq6ZmQ44KK5YmK6ZmkCgkJCX1lbHNlIGlmKGxvY2F0aW9uLmhyZWYuaW5kZXhPZigid3d3LmNvbmVjby5uZXQiKSA8IDEwICYmIGxvY2F0aW9uLmhyZWYuaW5kZXhPZigid3d3LmNvbmVjby5uZXQiKSA+IDAgCgkJCSAgJiYgaHJlZi5tYXRjaCgibV9pZD0iKSAmJiBocmVmLm1hdGNoKCJzaG9wX2lkPSIpICYmIGhyZWYubWF0Y2goImNvbV9pZD0iKSl7CgoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKC4qKWdvc2hvcC5hc3BcPy4qJC9pLCJodHRwOi8vd3d3LmNvbmVjby5uZXQvZ29zaG9wLmFzcD8iKSArICJtX2lkPSIgKyBwYXJhbXNbIm1faWQiXSArICImc2hvcF9pZD0iICsgcGFyYW1zWyJzaG9wX2lkIl07CgkJCQlzZXRMaW5rKCk7CgoJCQkvL2NvbmVjb+OBruS+oeagvOavlOi8g+ODquOCueODiCjjg6zjg5Pjg6Xjg7zjga7kuIvjga7mlrkpCgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL15odHRwcz86XC9cL3d3dy5jb25lY28ubmV0XC9mcmFtZXMuYXNwLykpewoJCQkJdmFyIHBhcmFtcyA9IGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CgovL+imi+OChOOBmeOBj+S4gOW6puODh+OCs+ODvOODiWh0dHA6Ly93d3cuY29uZWNvLm5ldC9mcmFtZXMuYXNwP01BSU5fVVJMPUFNZHAvQjAwOFY2RDVNMC9yZWY9YXNjX2RmX0IwMDhWNkQ1TTA5Nzc1ODIvP3RhZz1jb25lY28tMjImY3JlYXRpdmU9OTMxMSZjcmVhdGl2ZUFTSU49QjAwOFY2RDVNMCZsaW5rQ29kZT1kZjAmbWU9QU4xVlJRRU5GUkpONSZDQVRFR09SWV9JRD0yODMyMDAwJlNJRD1DTyZTSE9QX0lEPTI4MzImQ09NQ0FUX0lEPTAxODAyMDgwJkNPTV9JRD0xMTMwNjI3Mjk1JkNPTV9OQU1FPSU4M0wlODMlODQlODNtJTgzJTkzKyU4M2UlODMlOTMlODNMJTgxJTVCJTkzZCU5MSVFQytYK01hcmsrSStLUkYrJTgzeiU4MyU4RiU4M0MlODNnJnRhPTU3Ci8vICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmNvbmVjby5uZXQvZnJhbWVzLmFzcD9NQUlOX1VSTD1BTWRwJTJGQjAwOFY2RDVNMCUyRnJlZiUzRGFzYyU1RmRmJTVGQjAwOFY2RDVNMDk3NzU4MiUyRiUzRnRhZyUzRGNvbmVjbyUyRDIyJTI2Y3JlYXRpdmUlM0Q5MzExJTI2Y3JlYXRpdmVBU0lOJTNEQjAwOFY2RDVNMCUyNmxpbmtDb2RlJTNEZGYwJTI2bWUlM0RBTjFWUlFFTkZSSk41JkNBVEVHT1JZX0lEPTI4MzIwMDAmU0lEPUNPJlNIT1BfSUQ9MjgzMiZDT01DQVRfSUQ9MDE4MDIwODAmQ09NX0lEPTExMzA2MjcyOTUmQ09NX05BTUU9JTI1ODNMJTI1ODMlMjU4NCUyNTgzbSUyNTgzJTI1OTMlMkIlMjU4M2UlMjU4MyUyNTkzJTI1ODNMJTI1ODElMjU1QiUyNTkzZCUyNTkxJTI1RUMlMkJYJTJCTWFyayUyQkklMkJLUkYlMkIlMjU4M3olMjU4MyUyNThGJTI1ODNDJTI1ODNnJnRhPTU3CgkJCQkvL2FtYXpvbuOBruWfi+OCgei+vOOBvwoJCQkJaWYoZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJNQUlOX1VSTCIpLm1hdGNoKC9eQU1kcC8pKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChzdHJVcmwsIk1BSU5fVVJMIikucmVwbGFjZSgvQU1kcC8sJ2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2RwJyk7CgovL2h0dHA6Ly93d3cuY29uZWNvLm5ldC9mcmFtZXMuYXNwP01BSU5fVVJMPVJUYy8wMDExMzRjZS4wZmMzYjEzMy9fUlR2cmdqMTAwMDAwNjM/dXJsPWh0dHAlM0ElMkYlMkZpdGVtLnJha3V0ZW4uY28uanAlMkZkdGMlMkY0OTYwOTk5OTY0MTY0JTJGJkNBVEVHT1JZX0lEPTI2ODMwMDAmU0lEPUNPJlNIT1BfSUQ9MjY4MyZDT01DQVRfSUQ9MDE4MDIwODAmQ09NX0lEPTExMzA2MjcyOTUmQ09NX05BTUU9JTgzTCU4MyU4NCU4M20lODMlOTMrJTkxJUVDJThGJUUzJTkzZCU5MSVFQyU4MWkxMCU4QyU4NSU4MWpYK01hcmsrSStLUkYlMkRXSCU4MWklODN6JTgzJThGJTgzQyU4M2clODFqKyUyOFhNQVJLSUtSRldIJTI5JTI4JTgzJTVDJTgzdCU4MyU3RCU4M2IlODN2JThBeSU5M1YlOEVzJThGJUVBJTkzWCUyOSsmdGE9MTgKLy9odHRwOi8vd3d3LmNvbmVjby5uZXQvZnJhbWVzLmFzcD9NQUlOX1VSTD1SVGMlMkYwMDExMzRjZSUyRTBmYzNiMTMzJTJGJTVGUlR2cmdqMTAwMDAwNjMlM0Z1cmwlM0RodHRwJTI1M0ElMjUyRiUyNTJGaXRlbSUyRXJha3V0ZW4lMkVjbyUyRWpwJTI1MkZkdGMlMjUyRjQ5NjA5OTk5NjQxNjQlMjUyRiZDQVRFR09SWV9JRD0yNjgzMDAwJlNJRD1DTyZTSE9QX0lEPTI2ODMmQ09NQ0FUX0lEPTAxODAyMDgwJkNPTV9JRD0xMTMwNjI3Mjk1JkNPTV9OQU1FPSUyNTgzTCUyNTgzJTI1ODQlMjU4M20lMjU4MyUyNTkzJTJCJTI1OTElMjVFQyUyNThGJTI1RTMlMjU5M2QlMjU5MSUyNUVDJTI1ODFpMTAlMjU4QyUyNTg1JTI1ODFqWCUyQk1hcmslMkJJJTJCS1JGJTI1MkRXSCUyNTgxaSUyNTgzeiUyNTgzJTI1OEYlMjU4M0MlMjU4M2clMjU4MWolMkIlMjUyOFhNQVJLSUtSRldIJTI1MjklMjUyOCUyNTgzJTI1NUMlMjU4M3QlMjU4MyUyNTdEJTI1ODNiJTI1ODN2JTI1OEF5JTI1OTNWJTI1OEVzJTI1OEYlMjVFQSUyNTkzWCUyNTI5JTJCJnRhPTE4CgkJCQkvL+alveWkqeOBruWfi+OCgei+vOOBvwoJCQkJfWVsc2UgaWYoZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJNQUlOX1VSTCIpLm1hdGNoKC9eUlRjLykpewoJCQkJCWlmKGdldFJlZGlyZWN0VXJsKHN0clVybCwiTUFJTl9VUkwiKS5tYXRjaCgvKFw/fFwmKXVybD0vKSl7CgkJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGdldFJlZGlyZWN0VXJsKHN0clVybCwiTUFJTl9VUkwiKSwidXJsIik7CgkJCQkJfQoKLy9odHRwOi8vd3d3LmNvbmVjby5uZXQvZnJhbWVzLmFzcD9NQUlOX1VSTD1MU2ZzJTJEYmluJTJGY2xpY2slM0ZpZCUzRGQ3c0FxR3pjRm1BJTI2b2ZmZXJpZCUzRDI2MTgyMCUyRTEyJTI2c3ViaWQlM0QxJTI2dHlwZSUzRDEwJTI2dG1waWQlM0QxMDM3OCUyNlJEJTVGUEFSTTElM0RodHRwJTI1MjUzQSUyNTI1MkYlMjUyNTJGd3d3JTI1MjUyRXNvZm1hcCUyNTI1MkVjb20lMjUyNTJGcHJvZHVjdCUyNTI1NUZkZXRhaWwlMjUyNTJGZXhlYyUyNTI1MkYlMjUyNTVGJTI1MjUyRnNrdSUyNTI1M0QxMjA1MjQ3MSUyNTI1MkYlMjUyNTJEJTI1MjUyRmdpZCUyNTI1M0RQUzA1MDIwMDAwJkNBVEVHT1JZX0lEPTEyMTUwMDAmU0lEPUNPJlNIT1BfSUQ9MTIxNSZDT01DQVRfSUQ9MDE1MDYwMTAmQ09NX0lEPTExMjA4MjA2OTMmQ09NX05BTUU9RnJhY3RhbCUyQkRlc2lnbiUyQkRlZmluZSUyQlI0JTJCQmxhY2slMkJQZWFybCUyQiUyNTI4RkQlMjUyRENBJTI1MkRERUYlMjUyRFI0JTI1MkRCTCUyNTJGWjElMjUyOSZ0YT0xNS4zCgkJCQkvL2xpbmtzaGFyZeWfi+OCgei+vOOBvwoJCQkJfWVsc2UgaWYoZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJNQUlOX1VSTCIpLm1hdGNoKC9eTFNmcy8pKXsKCQkJCQlpZihzdHJVcmwubWF0Y2goLyhcP3xcJilSRF9QQVJNMT0vKSl7CgkJCQkJCS8v5L2V5pWF44GLMumHjeOCqOODs+OCs+ODvOODieOBleOCjOOBpuOBhOOCiwoJCQkJCQlzdHJVcmwgPSBkZWNVUkkoZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJSRF9QQVJNMSIpKTsKCQkJCQl9CgovL2h0dHA6Ly93d3cuY29uZWNvLm5ldC9mcmFtZXMuYXNwP01BSU5fVVJMPVZDc2VydmxldCUyRnJlZmVycmFsJTNGc2lkJTNEMTM5NDAlMjZwaWQlM0Q4NzcwODQzODMlMjZ2YyU1RnVybCUzRGh0dHAlMjUzQSUyNTJGJTI1MkZ3d3clMjUyRWRvc3BhcmElMjUyRWNvJTI1MkVqcCUyNTJGNXNob3BwaW5nJTI1MkZkZXRhaWwlMjU1RnBhcnRzJTI1MkVwaHAlMjUzRmljJTI1M0QzODUxMTklMjUyNndhYWQlMjUzRHZ4MmJBRFVwJkNBVEVHT1JZX0lEPTExMDUwMDAmU0lEPUNPJlNIT1BfSUQ9MTEwNSZDT01DQVRfSUQ9MDE1MDYwMTAmQ09NX0lEPTExMzEyMjgwNTImQ09NX05BTUU9RnVsbW8lMkJRJTJCRUNBMzM2MEIlMjUyREJUJTI1MjhVMyUyNTI5JnRhPTI5LjYKCQkJCS8vbmV0bW5n5Z+L44KB6L6844G/CgkJCQl9ZWxzZSBpZihnZXRSZWRpcmVjdFVybChzdHJVcmwsIk1BSU5fVVJMIikubWF0Y2goL15WQ3NlcnZsZXQvKSl7CgkJCQkJaWYoc3RyVXJsLm1hdGNoKC8oXD98XCYpdmNfdXJsPS8pKXsKCQkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoc3RyVXJsLCJ2Y191cmwiKTsKCQkJCQl9CgovL2h0dHA6Ly93d3cuY29uZWNvLm5ldC9mcmFtZXMuYXNwP01BSU5fVVJMPWh0dHAlM0ElMkYlMkZzaG9wJTJFaGlrYXJpdHYlMkVuZXQlMkZzaG9wcGluZyUyRmNvbW1vZGl0eSUyRnBsYWxhJTJGNTQxMjY3NDc1MyUyRiUzRnNpZCUzRGMlMjZjaWQlM0RjJkNBVEVHT1JZX0lEPTM0MjUwMDAmU0lEPUNPJlNIT1BfSUQ9MzQyNSZDT01DQVRfSUQ9MDE4MDIwODAmQ09NX0lEPTExMzA2MjcyOTUmQ09NX05BTUU9JTI1QzMlMjVERCUyNUI3JTI1QjAlMjU5M2QlMjU5MSUyNUVDWE1hcmtJS1JGJTI1MkRXSCUyNTI4JTI1Q0UlMjVEQyUyNUIyJTI1QzQlMjUyOSUyQjUwOTRCMDA1JnRhPTE4CgkJCQkvL+mAmuW4uOOBrlVSTAoJCQkJfWVsc2UgaWYoZ2V0UmVkaXJlY3RVcmwoaHJlZiwiTUFJTl9VUkwiKS5tYXRjaCgvXmh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiTUFJTl9VUkwiKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9sLmZhY2Vib29rLmNvbS9sLnBocD91PeODquODgOOCpOODrOOCr+ODiFVSTCZoPS1BUUdpaEJSWiZlbmM9QVpNVTBSN3owMUNfVF9JU01wbUFNSEx5UnBXN1dxamRiOEltM1RQa09iOVk4WEozeFpKZDZtdGNJcU16ZUZpcTFmNHd2dmhidVhkeDlUZm9BcXQ0Nm1xYTBwQVdBYTJKak5iWUhiZloyUE1uUElLdlYtUVliUWJpMS1WUy0yWlNXR0JyRXpFcWlqaEVMMlFKTnhUOXNIVlkmcz0xCgkJCS8vZmFjZWJvb2vjg6rjg4DjgqTjg6zjgq/jg4jpmaTljrsKCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJmYWNlYm9vay5jb20vbC5waHA/dT0iKSA+IC0xICl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1Iik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9jLmtha2FrdS5jb20vZm9yd2FyZGVyL2ZvcndhcmQuYXNweD9TaG9wQ0Q9MzkwNCZQcmRLZXk9SzAwMDA2MTY5ODkmVXJsPWh0dHAlM0ElMkYlMkZrYWtha3UlMkVjb20lMkZqdW1wJTJGYWYlMkYwMDUxJTJGb3V0c2lkZSU1RjMwOTkzJTJFaHRtbCZIYXNoPTNmNmQ1YjBjOWYzOTg5ZDc2YWNkMmUxNjk3YWRhMDQ0CgkJCS8v5L6h5qC844Kz44Og44GuVVJM44KS5LqL5YmN44Gr5L+u5q2jCgkJCX1lbHNlIGlmKGxvY2F0aW9uLmhyZWYuaW5kZXhPZigia2FrYWt1LmNvbS8iKSA+IC0xICYmIGhyZWYuaW5kZXhPZigia2FrYWt1LmNvbS8iKSA8IDEwICYmIGhyZWYuaW5kZXhPZigia2FrYWt1LmNvbS8iKSA+IC0xKXsKCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJilVcmw9aHR0cC8pKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJVcmwiKTsKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9rYWtha3UuY29tL2tzZWFyY2gvcmVkaXJlY3QuYXNwP3U9aHR0cCUzQSUyRiUyRmhiJTJFYWZsJTJFcmFrdXRlbiUyRWNvJTJFanAlMkZoZ2MlMkZnMDBwdWt3MSUyRTRmM2hsNzAzJTJFZzAwcHVrdzElMkU0ZjNobWU0MSUyRiU1RlJUa2NvbTEwMDAwMTExJTNGcGMlM0RodHRwJTI1M0ElMjUyRiUyNTJGaXRlbSUyRXJha3V0ZW4lMkVjbyUyRWpwJTI1MkZqaXNtJTI1MkY0OTUzMTAzMTY4NjE5JTJENDIlMkQ0NDc5JTJEbiUyNTJGJTI2YW1wJTNCbSUzRGh0dHAlMjUzQSUyNTJGJTI1MkZtJTJFcmFrdXRlbiUyRWNvJTJFanAlMjUyRmppc20lMjUyRmklMjUyRjEwMTc3NzExJTI1MkYmaD04MWJkZjQyMGUyOTI4OWM0YzU2MzE3MmM2YmE3ZWNjZAoJCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJyZWRpcmVjdC5hc3AiKSA+IC0xICYmIGhyZWYubWF0Y2goLyhcP3xcJil1PWh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidSIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgkJCX1lbHNlewoJCQl9CgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCgoJCQkvL+ODquODs+OCr+S/ruato+mWi+Wniy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJCQkvL+OCouODleOCo+ODquOCqOOCpOODiOmWoumAoyjjgqLjg5XjgqPjg6rjgqjjgqTjg4jlsILploDns7spLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgovL2h0dHA6Ly9hNS50dWhhbi5uZS5qcC9yLnBocD9zaXRlPWNvbmVjbyZlYz0xNzE1JnBhZ2V0eXBlPWNvbmVjbyZza3U9NDU0OTIxMDAyMDU2MCZjYXQ9MDEwMTEwMTAmcHJpY2U9NTk4ODYmb3A9Y2F0ZWdvcnlfbmFtZSUzRCUyNTgzJTI1NjYlMjU4MyUyNTU4JTI1ODMlMjU0RSUyNTgzJTI1NjclMjU4MyUyNTYyJTI1ODMlMjU3NiUyNTgzJTI1NzAlMjU4MyUyNTVDJTI1ODMlMjU1MiUyNTgzJTI1OTMlMjZpdGVtX2lkJTNEMTEzMDgyOTA2MCUyNnRhJTNEMjAlMjZpdGVtX25hbWUlM0RGTVZEMDUwMk5QJTJCRVNQUklNTyUyQkQ1NTElMjUyRkdYJTJCU1AlMjUyOENlbGVyb24lMkJHMTYxMCUyNTJGMkdCJTI1MkY1MDBHQiUyNTJGRFZEJTI1MkZXaW43JTJCUHJvJTI1MjkmdXJsPWh0dHAlM0ElMkYlMkZ3d3cuY29uZWNvLm5ldCUyRmdvc2hvcC5hc3AlM0ZtX2lkJTNEZWEyZmFmY2RiNDI1MWUxM2Y3YzkxNzJmMGQwODllOTglMjZjb21faWQlM0QxMTMwODI5MDYwJTI2c2hvcF9pZCUzRDE3MTUlMjZjX2lkJTNEMDEwMTEwMTAlMjZnb3Nob3AlM0QxJTI2dGElM0QyMAoJCQkvL2E1LnR1aGFu77yIY29uZWNv44Gn56K66KqN77yJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCWlmKGhyZWYuaW5kZXhPZigiYTUudHVoYW4ubmUuanAiKSA+IC0xICYmIGhyZWYubWF0Y2goIiZ1cmw9aHR0cCIpKXsKLy8JCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8gKltcc1xTXSomdXJsPWh0dHAvLCJodHRwIik7CgoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgoJCQkJc2V0TGluaygpOwovLwkJCQlhbGxMaW5rc1tpXS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgImhlaWdodDphdXRvIWltcG9ydGFudDtiYWNrZ3JvdW5kOm5vbmU7Iik7CgovL3NhbXBsZQovL2h0dHA6Ly9weC5hOC5uZXQvc3Z0L2VqcD9hOG1hdD0xMEZaOEwrOVU4WFBVKzVXUytDMjhQViZhOGVqcHJlZGlyZWN0PWh0dHAlM0ElMkYlMkZpdGVtLnJha3V0ZW4uY28uanAlMkZ0di15YSUy5ZWG5ZOBJTJGCgkJCS8vYTgubmV0PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIuYTgubmV0Iik+LTEpewoJCQkJaWYoaHJlZi5pbmRleE9mKCJhOGVqcHJlZGlyZWN0Iik+LTEpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsImE4ZWpwcmVkaXJlY3QiKTsKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cuYTgubmV0L2NnaS1iaW4vcmVkaXJlY3Q/YXI9aHR0cCUzYSUyZiUyZnd3dy5hOC5uZXQlMmZhcyUyZmFzX3Byb21vJTJmJmE4PWdYVUk3WC1SZkFrY25vRWNub1U2c1JzMFhNMVJmb1VSQm80Uk5vbExtcGpFWTNCeHgKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3JlZGlyZWN0XD9hcj0vKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiYXIiKTsKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9weC5hOC5uZXQvc3Z0L2VqcD9hOG1hdD0xMEJNMk0rN1FNVlcyK01aSSsxNVVaSkwKLy/kv67mraNodHRwOi8vcHguYTgubmV0L3N2dC9lanA/YThtYXQ9KytNWkkrMTVVWkpMCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJhOG1hdD0iKSAmJiBocmVmLm1hdGNoKC9cKy8pKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL2E4bWF0PS4qP1wrLio/XCsvLCJhOG1hdD0/KysiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgoKLy9odHRwOi8vd3d3LmFjY2Vzc3RyYWRlLm5ldC9hdC9jLmh0bWw/cms96Iux5pWw5a2XJnVybD1odHRwJTNBJTJGJTJGd3d3LuOCteOCpOODiC5odG1sJTNGc29ydCUzRDVkJTI2cGFnZSUzRDEKCQkJLy9hY2Nlc3N0cmFkZT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiYWNjZXNzdHJhZGUubmV0LyIpID4gLTEpewoKCQkJCWlmKHN0clVybC5tYXRjaCgiJnVybD1odHRwIikpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9pcy5hY2Nlc3N0cmFkZS5uZXQvY2dpLWJpbi9pc2F0VjIvQWNjZXNzVHJhZGVQL2VudHJ5VjIuY2dpP3JrPTAxMDA0czFzMDA3eHkxJm5pZD1nMTM1NTYxMzUwNCZydXJsPWh0dHAlM0ElMkYlMkZ3d3cuYWNjZXNzdHJhZGUubmUuanAlMkYmbWVkaWE9aHR0cCUzQSUyRiUyRmguYWNjZXNzdHJhZGUubmV0JTJGJmF0c3M9MDEwMDRzMXMwMDd4eTEtM2RlNWI0ZTc1YTVlZjdmNWE4Y2FhOTc1MTk2ZWZiOWEKCQkJCWlmKGhyZWYubWF0Y2goIiZydXJsPWh0dHAiKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwicnVybCIpOwoKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9jbGljay5hZGxhbnRpcy5qcC9hZC9jbGljaz9haWQ9TnpRMk1EY3clMjUwQSZhdD0yJmNpZD1OVEF3TkRZJTI1M0QlMjUwQSZjb252X2lkPU5EUXhORFklMjUzRCUyNTBBJnVybD1odHRwJTI1M0ElMjUyRiUyNTJGYWRmLnNoaW5vYmkuanAlMjUyRnIlMjUyRjcyYjg3ZDQ2NzczOWZjZTVlNDZmNzE3N2ViMDE0ZTM3JTI1M0Z1dG1fc291cmNlJTI1M0RhZG1jbXBueSUyNTI2dXRtX21lZGl1bSUyNTNEYmFubmVyJTI1MjZ1dG1fY2FtcGFpZ24lMjUzRDcyODkwJnppZD1tWXQ5VTk4dTVCYzc5T1FZc2RQdFh3JTNEJTNECgkJCS8vYWRsYW50aXM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJhZGxhbnRpcy5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJ1cmw9IikgPiAtMSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmwiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2FtYW5haW1hZ2VzLmNvbS9sc2dhdGU/bHN0aWQ9cE02YjBqZFFnVk0tWTlpYkZnVGU2WnYxTjBvRDJuWXVNQSZsc3VybD1odHRwJTNBJTJGJTJGYW1hbmFpbWFnZXMuY29tJTJGbHAlMkZjcmVhdGl2ZSUyRmFmcGwxMzAyMjUuaHRtbCUzRnJ0bSUzRGFkX2xzJTI2d2FhZCUzREpHcEQxUmVaCgkJCS8vYW1hbmFpbWFnZXM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJhbWFuYWltYWdlcy5jb20iKSA+IC0xICYmIGhyZWYuaW5kZXhPZigibHN1cmw9aHR0cCIpID4gLTEpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwibHN1cmwiKTsKCQkJCXNldExpbmsoKTsKCgoJCQkvL2ZjMj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJibG9nLmZjMi5jb20vZ29vZHMvIikgPiAtMSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLyhibG9nXC5mYzJcLmNvbVwvZ29vZHNcL1x3K1wvKS4rJC9pLCAiJDEiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3d3dy5nb29nbGUuY28uanAvYWNsaz9zYT1sJmFpPUNzY3ZLc2hzNFUtZTZKTUhBbEFYZjc0RzRCSy1McTVjRXY3MnBqSEhIdnZPeXZnRUlCQkFCS0FWUTB0TDJvQU5naWN2QmhPd1RvQUdaaXMzYkE4Z0JCNmtDeE9ncXQ5SGpSRDZxQkNWUDBOWWZ1SmMzeFR3RF9ZUFkzM0NHMkZPZUJNRVBSWTR0Y2hPa214XzlzYUJKcE44d3dBVUZvQVltZ0FmUDliSWtrQWNCNEJLcWdLblYtN0M2ejU4QiZzaWc9QU9ENjRfMUVSTElyMmxpX09VNWpldl9nRjIzTHlNa3VBdyZjdHlwZT01JnJjdD1qJnE9JUUzJTgyJUFEJUUzJTgzJUJDJUUzJTgzJTlDJUUzJTgzJUJDJUUzJTgzJTg5JUUzJTgxJUFFJUU5JUFCJTk4JUUzJTgxJTk1JnZlZD0wQ0NzUXdnOCZhZHVybD1odHRwOi8vcHJvZHVjdC5yYWt1dGVuLmNvLmpwL3Byb2R1Y3QvLS85ZWQ2YzdlYWQ5NGUzZDA4N2ZhNGY4ODg5NmNkNzI1Yy8lM0ZzYzJpZCUzRGdtY18yMTEyMTNfOWVkNmM3ZWFkOTRlM2QwODdmYTRmODg4OTZjZDcyNWMlMjZzY2lkJTNEc19rd2FfcGxhJmNhZD1yamEKCQkJLy9nb29nbGVBZD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8JCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoImdvb2dsZWFkcy5nLmRvdWJsZWNsaWNrLm5ldC9hY2xrPyIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJhZHVybD1odHRwIikgPiAtMSl7CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL2h0dHBzPzpcL1wvKHd3dy4pP2dvb2dsZShhZHMpPy4vKSl7CgkJCQlpZihocmVmLmluZGV4T2YoIiZhZHVybD1odHRwIikgPiAtMSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiYWR1cmwiKTsKCQkJCQlzdHJVcmwgPSBzdHJVcmwucmVwbGFjZSgvXD9hZGlkPS4qJC8sIiIpOwoKCQkJCQlzZXRMaW5rKCk7CgovL2h0dHBzOi8vd3d3Lmdvb2dsZS5jby5qcC91cmw/c2E9aSZyY3Q9aiZxPSZlc3JjPXMmc291cmNlPWltYWdlcyZjZD0mY2FkPXJqYSZ1YWN0PTgmZG9jaWQ9UDVTcnIzb2NPN0xVbE0mdGJuaWQ9ZHdyZkhnMTVJX1dIbU06JnZlZD0wQ0FFUWp4dyZ1cmw9aHR0cCUzQSUyRiUyRnd3dy5hbWF6b24uY28uanAlMkZULW1hcnQlMjVFNiUyNTk3JTI1QTUlMjVFNiUyNTlDJTI1QUMtJTI1RTMlMjU4MiUyNUFEJTI1RTMlMjU4MyUyNUJDJTI1RTMlMjU4MyUyNTlDJTI1RTMlMjU4MyUyNUJDJTI1RTMlMjU4MyUyNTg5JTI1RTMlMjU4MiUyNUI5JTI1RTMlMjU4MiUyNUJGJTI1RTMlMjU4MyUyNUIzJTI1RTMlMjU4MyUyNTg5LSUyNUU5JTI1QUIlMjU5OCUyNUUzJTI1ODElMjU5NSUyNUU4JTI1QUElMjVCRiUyNUU3JTI1QUYlMjU4MCUyNUU0JTI1QkIlMjU5OCUyNUUzJTI1ODElMjU4RC0lMjVFNiUyNUE1JTI1QkQlMjVFNSUyNTk5JTI1QTgtJTI1RTMlMjU4MiUyNUI3JTI1RTMlMjU4MyUyNUIzJTI1RTMlMjU4MiUyNUJCJTI1RTMlMjU4MiUyNUI1JTI1RTMlMjU4MiUyNUE0JTI1RTMlMjU4MiUyNUI2JTI1RTMlMjU4MyUyNUJDJTI1RTQlMjVCOCUyNUE2JTI1RTglMjVBMSUyNThDJTI1RTglMjVCQyUyNUI4JTI1RTUlMjU4NSUyNUE1JTI1RTUlMjU5MyUyNTgxJTJGZHAlMkZCMDBIVjhHSVBVJmVpPVZDODRVLXVfQ1lUVmtBV0kzSURnRHcmcHNpZz1BRlFqQ05Fd2Y4OTVscTEydVFwYi15UzdubmVYR2JyOGFRJnVzdD0xMzk2Mjc3NDU4Mzk3MTQ3CgkJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoIiZ1cmw9aHR0cCIpID4gLTEpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL3JlZmVyLmlzdG9ja3Bob3RvLmNvbS90YS5waHA/bGM9MDc2NzUwMDQxMDM4MDA0NjUxJmF0aWQ9MTI0MDcxJTdDQmFubmVySUQlM0QxMjQwNzElN0NSZWZlcnJhbE1ldGhvZCUzREJhbm5lciZ1cmw9aHR0cCUzQSUyRiUyRm5paG9uZ28uaXN0b2NrcGhvdG8uY29tCgkJCS8vaXN0b2NrcGhvdG89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIuaXN0b2NrcGhvdG8uIikgPiAtMSAmJiBocmVmLm1hdGNoKC8oXD98XCYpdXJsPWh0dHAvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmwiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2xzLmotYS1uZXQuanAvP2E9MzY4ODImZD00OTQ3MTQmdXJsPWh0dHAlM0ElMkYlMkZ3d3clMkUxMGtlaXlhJTJFY29tJTJGaXRlbSUyRjUwODMlMkVodG1sCgkJCS8vSmFuZXTvvIhjb25lY2/jgafnorroqo3vvIk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIuai1hLW5ldC5qcCIpID4gLTEgJiYgaHJlZi5tYXRjaCgiJnVybD1odHRwIikpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cubGlua3NoYXJlLm5lLmpwL3NjbGFuZC9tZ20vP2lkPWd6ZlNYOSpESTVrCgkJCS8vbGlua3NoYXJlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiLmxpbmtzaGFyZS4iKSA+IC0xICYmIGhyZWYuaW5kZXhPZigiaWQ9IikgPiAtMSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siaWQiXSwiIikucmVwbGFjZSgiaWQ9IiwiIik7CgoJCQkJc2V0TGluaygpOwoKCQkJLy9saW5rc3luZXJneSBsaW5rc2hhcmXjgonjgZfjgYTvvIhjb25lY2/jgarjganjgafnorroqo3vvIk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIubGlua3N5bmVyZ3kuIikgPiAtMSAmJiBocmVmLmluZGV4T2YoIlJEX1BBUk0xPSIpID4gLTEpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiUkRfUEFSTTEiKTsKCgkJCQlzZXRMaW5rKCk7CgovL2h0dHBzOi8vd3d3Mi5saXZlYWRzLmpwL3dpZGdldHNfc3JjL2NjLnBocD9jPXZzJTNEMjQzOTg3MSUyNmFtcCUzQnZwJTNEODc2NDg5OTU0JTI2YW1wJTNCdmNwdG4lM0RmZWI5MmVjMV8yXzEwNjAwMSUyNmFtcCUzQnZjX3VybCUzRGh0dHAlMjUzQSUyNTJGJTI1MkYKCQkJLy9saXZlYWRzLmpwPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoInd3dzIubGl2ZWFkcy5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJ2Y191cmwiKSA+IC0xKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvJmFtcDsvZywgIiYiKTsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKHN0clVybCwidmNfdXJsIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9hbHRmYXJtLm1lZGlhcGxleC5jb20vYWQvY2svMTA1OTEtNjIwNDUtMjY2MTYtNTg4P0FDRD1YUXU0QzNLUjBPYy1RU011T09rV3haa3h6bExhNlJpdWJ3JkRVUkw9aHR0cCUzQSUyRiUyRmFsaWVud2FyZS5qcCUyRgovL2h0dHA6Ly9hZGZhcm0ubWVkaWFwbGV4LmNvbS9hZC9jay8xMDU5MS0xNzMzOTItMzAxNjUtMD9BQ0Q9MTA1OTExNzMzOTIzMDE2NTAmIW1wcm89aHR0cDovL2x0LmRlbGwuY29tL2x0L2x0LmFzcHg/Q0lEPTIxNTAxJkxJRD00OTk2ODQ4JkRHQz1MUyZER1NlZz1ESFMmQUNEPUdTQVhFTmlNY3ZJLUNWNDM4cFF6OUIzY29HbU5tMFZLZWcmRFVSTD1odHRwJTNBJTJGJTJGd3d3LmRlbGwuY29tJTJGanAlMkZwJTJGZGVhbHMlMjMhZGxwZ2lkJTNEbW9iaWxpdHktbGFwdG9wLWRlYWxzCgoJCQkvL21lZGlhcGxleC5jb20o5qSc57Si44GZ44KL44Go44Km44Kj44Or44K544GM44Gp44GG44Gu44Go44GL5Ye644Gm44GP44KL44Oq44OA44Kk44Os44Kv44OI44K144Kk44OIKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goIi5tZWRpYXBsZXguY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgiRFVSTD0iKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiRFVSTCIpOwoJCQkJfQoKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2MuYWYubW9zaGltby5jb20vYWYvYy9jbGljaz9hX2lkPTQyMDg1OSZwX2lkPTE3MCZwY19pZD0xODUmcGxfaWQ9NDA2MiZ1cmw9aHR0cDovL3d3dy5hbWF6b24uY28uanAvZHAvQjAwME1HQlBOSQoJCQkvL+OCguOBl+OCguOCouODleOCo+ODquOCqOOCpOODiD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJjLmFmLm1vc2hpbW8uY29tIikgJiYgaHJlZi5tYXRjaCgidXJsPSIpKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vaW50ci5zaGlub2JpLmpwL0xhbmRpbmdIYW5kbGVyP25tPTQ2MDk1JmNvbW1lcmNpYWxfaWQ9MgoJCQkvL+W/jeiAhWFkbWF4PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgic2hpbm9iaS5qcC9MYW5kaW5nSGFuZGxlciIpKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvXD8uKiQvLCIiKTsKCQkJCXNldExpbmsoKTsKCgkJCS8vdHJhZmZpY2dhdGU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoc3RyVXJsLmluZGV4T2YoInRyYWZmaWNnYXRlLm5ldCIpID4gLTEpewoKLy9odHRwOi8vYWQyLnRyYWZmaWNnYXRlLm5ldC90L3IvMTgvNzAyLzQ0NjYyLzAvLS9odHRwczovL3Nob3AuZWxlY29tLmNvLmpwL1N0b3JlL1Byb2R1Y3QuYXNweD9KYW5DZD00OTUzMTAzMDYyODQ5CgkJCQlpZihocmVmLm1hdGNoKCIvLS9odHRwIikpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvLipcLy1cL2h0dHAvLCJodHRwIik7CgkJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vYWQyLnRyYWZmaWNnYXRlLm5ldC90L3IvMS80NS8xNzU5NjJfMTk5NzAyLzAvVFNUT1hQejE0VE5iUG5oMTlZMnRWX29ERnI2UkxsTgovL+S/ruato2h0dHA6Ly9hZDIudHJhZmZpY2dhdGUubmV0L3Qvci8xLzQ1LzE3NTk2Ml8xOTk3MDIvMC8KCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3RyYWZmaWNnYXRlLm5ldFwvdFwvclwvLykpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKC4qdHJhZmZpY2dhdGUubmV0XC90XC9yXC8uKj9cLy4qP1wvLio/XC8uKj9cLykuKiQvaSwiJDEiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgoJCQkvL3RyYWZmaWNnYXRl44Gud2ViYW50ZW5uYShnYeOBjOW6g+WRiuS4u+aDheWgsSk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy9odHRwOi8vdHIud2ViYW50ZW5uYS5pbmZvL3JkP3dhYWQ9dk9BbXhDdHYmZ2E9V0F5bExULTEKCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgidHIud2ViYW50ZW5uYS5pbmZvIikpewoJCQkJaWYoaHJlZi5tYXRjaCgiJmdhPSIpKXsKCQkJCQkvL+S9leaVheOBi+ODkeODqeODoeODvOOCv+OBlOOBqOa2iOOBmeOBqOOCqOODqeODvOOBjOWHuuOCi+OBruOBp+aVsOWApOOBoOOBkeWJiumZpAoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siZ2EiXSwiIik7CgoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL2NrLmpwLmFwLnZhbHVlY29tbWVyY2UuY29tL3NlcnZsZXQvcmVmZXJyYWw/c2lkPTEzOTQwJnBpZD04NzcwODQzODMmdmNfdXJsPWh0dHA6Ly93d3cuZG9zcGFyYS5jby5qcC81c2hvcHBpbmcvZGV0YWlsX3BhcnRzLnBocD9pYz04MDU1MiZ3YWFkPXZ4MmJBRFVwCi8vaHR0cDovL2F0cS5jay52YWx1ZWNvbW1lcmNlLmNvbS9zZXJ2bGV0L2F0cS9yZWZlcnJhbD9zaWQ9MjIxOTQ0MSZwaWQ9ODc3NTEwNzUzJnZjcHRuPWF1Y3QvcC9sdnF6OG92SGQ2MHVoS0ZndXBjRm5nLS0mdmNfdXJsPWh0dHAlM0ElMkYlMkZwYWdlMy5hdWN0aW9ucy55YWhvby5jby5qcCUyRmpwJTJGYXVjdGlvbiUyRmM0MjQ0NDU2NDYKCQkJLy92YWx1ZWNvbW1lcmNl77yIY29uZWNv44Gn56K66KqN77yJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigidmFsdWVjb21tZXJjZS5jb20vIikgPiAtMSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJaWYoaHJlZi5pbmRleE9mKCJ2Y191cmwiKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ2Y191cmwiKTsKCQkJCX0KCi8vaHR0cDovL2NrLmpwLmFwLnZhbHVlY29tbWVyY2UuY29tL3NlcnZsZXQvcmVmZXJyYWw/dmE9MjI2Njc3MyZzaWQ9MzA5MTM0NCZwaWQ9ODgyMjYwMTc3JnZjaWQ9YkdtVV9BSGpsbHY4NE10LWZaNHdlREl0amNPbW1HY0FGYUpzc3VjcHdkejlrRjc1anFCRG1RJnZjcHViPTAuNjIxNDAxNzI5ODkzMDQyCgkJCQkvL3ZhbHVlY29tbWVyY2XkuI3lrozlhago54Sh6aeE44Gg44GR44Gp5LiN6KaB44Gq44OR44Op44Oh44O844K/44KS5YmK6ZmkKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQkJLy92Y191cmzjga7mjIflrprjgYzjgarjgYTjgoLjga7jga9waWQo44Om44O844K244O8SUTvvJ8p44Gob2ZmZXJpZCjllYblupdJRO+8nynjgavjgojjgaPjgabjgqrjg6rjgrjjg4rjg6vjg6rjg7Pjgq/jgbjpo5vjgbbmqKHmp5gKCQkJCWlmKGhyZWYuaW5kZXhPZigidmE9IikgPiAtMSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidmEiXSwiIik7CgkJCQl9CgkJCQlpZihocmVmLmluZGV4T2YoInZjaWQ9IikgPiAtMSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidmNpZCJdLCIiKTsKCQkJCX0KCQkJCWlmKGhyZWYuaW5kZXhPZigidmNwdWI9IikgPiAtMSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidmNwdWIiXSwiIik7CgkJCQl9CgoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vaXRyYWNrMi52YWx1ZWNvbW1lcmNlLm5lLmpwL2NnaS1iaW4vMjUwNzE2NS92Y19lbnRyeS5wbD9JVFJBQ0tfSU5GTz0wODgyMjYwMTYzMDIzOTI2MjcxNDA2MDIwOTUyMTQmQ09PS0lFX1BBVEg9L2NnaS1iaW4vMjUwNzE2NS8mQ09PS0lFX0RPTUFJTj0udmFsdWVjb21tZXJjZS5uZS5qcCZWSUVXX1VSTD1odHRwJTNBJTJGJTJGd3d3LnRha2FzaGltYXlhLmNvLmpwJTJGc2hvcHBpbmclMkZmb29kJTJGMDQwMDAwMDExNSUyRiZSRUZFUlJFUj1hSFIwY0RvdkwyTnJMbXB3TG1Gd0xuWmhiSFZsWTI5dGJXVnlZMlV1WTI5dEx3JkNPT0tJRV9FWFBJUkVTPUZyaSwlMjAwMSUyMEF1ZyUyMDIwMTQlMjAwOTo1MjoxNCUyMEdNVCZ2YT0yMzkyNjI3JnZzPTMwOTEzNDQmdnA9ODgyMjYwMTYzCi8vaHR0cDovL3d3dy5kYWltYXJ1LW1hdHN1emFrYXlhLmpwL3ZjZW50cnkvP0lUUkFDS19JTkZPPTA4ODIyNjAxNzcwMjI2Njc3MzE0MDYwMjA5NTcyMiZDT09LSUVfUEFUSD0vJkNPT0tJRV9ET01BSU49d3d3LmRhaW1hcnUtbWF0c3V6YWtheWEuanAmVklFV19VUkw9aHR0cCUzQSUyRiUyRnd3dy5kYWltYXJ1LW1hdHN1emFrYXlhLmpwJTJGJlJFRkVSUkVSPWFIUjBjRG92TDJGa0xtcHdMbUZ3TG5aaGJIVmxZMjl0YldWeVkyVXVZMjl0THcmQ09PS0lFX0VYUElSRVM9RnJpLCUyMDAxJTIwQXVnJTIwMjAxNCUyMDA5OjU3OjIyJTIwR01UJnZzPTMwOTEzNDQmdnA9ODgyMjYwMTc3JnZhPTIyNjY3NzMKCQkJLy92YWx1ZWNvbW1lcmNlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigidmFsdWVjb21tZXJjZS5uZS5qcCIpID4gLTEKCQkJICAgICAgfHwgaHJlZi5pbmRleE9mKCJkYWltYXJ1LW1hdHN1emFrYXlhIikgPiAtMSl7CgkJCQlpZihocmVmLmluZGV4T2YoIlZJRVdfVVJMIikgPiAtMSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiVklFV19VUkwiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgoJCQl9ZWxzZXsKCgkJCX0KCgoKCgkJCS8vUlNTLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkvL+WfuuacrOeahOOBq+OBr+WvvuW/nOOBl+OBquOBhCjjgIxSU1PluoPlkYrliYrpmaTnpL7jgI3jgarjganjgZnjgafjgavluoPlkYrliYrpmaTjgZfjgabjgY/jgozjgovjgrXjg7zjg5PjgrnjgYzjgYLjgovjgZ/jgoEpCgoKLy9odHRwOi8vcHNyZC55YWhvby5jby5qcC9QQUdFPVAvTE9DPVBSRC9SPTEvTz1QL01JRD1zdG9yZS13YXgvVEJJRD0vU0lHPTEyNDN0dmFsNi9FWFA9MTIwNjEwMTI0My8qLWh0dHAlM0EvL3JkLnN0b3JlLnlhaG9vLmNvLmpwL3dheC9mdS1lc2EtMTBjZS5odG1sCgkJCS8veWFob2/jga5SU1PvvJ89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJaWYoaHJlZi5pbmRleE9mKCJ5YWhvby5jby5qcCIpID4gMCl7CgkJCQlpZihocmVmLm1hdGNoKCIvKi1odHRwIikpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvLipcL1wqXC1odHRwLywiaHR0cCIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgkJCS8v44Gd44Gu5LuWOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6CgoJCQl9ZWxzZXsKCQkJfQoKCgoJCQkvL+OCteOCpOODiOWIpS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkJCS8vU2hvcOezuzo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6CgoJCQkvL2FtYXpvbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQlpZihocmVmLm1hdGNoKC9eaHR0cHM/OlwvXC8od3d3Lik/YW1hem9uLihqcHxjby5qcHxjb218Y2F8Y29tLmJyfGNvbS5teHxjby51a3xkZXxmcnxpdHxlc3xjbnxpbnxjb20uYXUpLykpewoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9wcm9kdWN0L2ltYWdlcy80MDQ4OTE5Mzc3L3JlZj1kcF9vdGhlcnZpZXdzX3pfMD9pZT1VVEY4JmltZz0wJnM9Ym9va3MKCQkJCS8v5ZWG5ZOB55S75YOP44Gu5YiH44KK5pu/44GIVVJM44Gg44Gj44Gf44KJ6Zmk5aSWCgkJCQlpZihocmVmLm1hdGNoKCIvZ3AvcHJvZHVjdC9pbWFnZXMvIikpewoJCQkJCS8v5L2V44KC44GX44Gq44GECgovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwLy9yZWY9YXNfc2xfcGRfdGZfbGM/dGFnPWE4LWFmZmktNjI0OTgtMjImY2FtcD0xJmNyZWF0aXZlPTEmbGlua0NvZGU9dXIxJnJlZi1yZWZVUkw9aHR0cCUzQSUyRiUyRnJjbS1qcC5hbWF6b24uY28uanAlMkYKCQkJCS8vcmNtLWpwLmFtYXpvbgoJCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvYW1hem9uLihqcHxjby5qcHxjb218Y2F8Y29tLmJyfGNvbS5teHxjby51a3xkZXxmcnxpdHxlc3xjbnxpbnxjb20uYXUpXC9cLy8pKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLyguKi5hbWF6b24uLio/XC8pXC8oLiokKS9pLCIkMSIpOwoKLy9odHRwOi8vYWZmaWxpYXRlLmFtYXpvbi5jby5qcC9ncC9yZWRpcmVjdC5odG1sL3JlZj1hbWJfbGlua184NDM5MzQ5Nl8xP19lbmNvZGluZz1VVEY4JmxvY2F0aW9uPWh0dHAlM0ElMkYlMkZ3d3cuYW1hem9uLmNvLmpwJTJGYiUzRm5vZGUlM0Q0NjUzOTImdG9rZW49MEFFMURGQUNDOTU0RjkxOTg2MDc0NTA0RjU3QzEzNjJDODVGQjZFOCZwZl9yZF9tPUFOMVZSUUVORlJKTjUmcGZfcmRfcz1jZW50ZXItMyZwZl9yZF9yPSZwZl9yZF90PTUwMSZwZl9yZF9wPSZwZl9yZF9pPWFzc29jX21haW4KCQkJCS8vYWZmaWxpYXRlLmFtYXpvbi5jby5qcAoJCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiYWZmaWxpYXRlLmFtYXpvbiIpICYmIGhyZWYubWF0Y2goImxvY2F0aW9uPSIpKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJsb2NhdGlvbiIpOwoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9zL3JlZj1uYl9zYl9ub3NzP19fbWtfamFfSlA944Kr44K/44Kr44OKJnVybD1zZWFyY2gtYWxpYXM9dmlkZW9nYW1lcyZwY3Qtb2ZmPTIwLSZmaWVsZC1rZXl3b3Jkcz3jg6Ljg7Pjg4/jg7MKLy/mnIDlsI9VUkxodHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9mZWF0dXJlLmh0bWwvP2RvY0lkPTMwNzcxMDUyNjYKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9mZWF0dXJlLmh0bWwvcmVmPWFtYl9saW5rXzYyNTI0NDA5XzE/aWU9VVRGOCZkb2NJZD0zMDc3MTA1MjY2JnBmX3JkX209QU4xVlJRRU5GUkpONSZwZl9yZF9zPXJpZ2h0LTMmcGZfcmRfcj0xNUpYUlc5NU5UQTFIUjFIVEZCSiZwZl9yZF90PTE0MDEmcGZfcmRfcD0xMDg4NzcwMDkmcGZfcmRfaT0zMDc3MTA1NTY2JnRhZz1qZ3B0bzEtMjIKCQkJCS8v5LuK5bm05LiA55Wq5aOy44KM44Gf44Op44Oz44Kt44Oz44KwCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJncC9mZWF0dXJlLmh0bWwiKSAmJiBocmVmLm1hdGNoKC9cPy8pKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyhmZWF0dXJlLmh0bWwpLiokL2ksICIkMS8/ZG9jSWQ9IiArIHBhcmFtc1siZG9jSWQiXSk7CgovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvNDA0NzMxODc1Mi9yZWY9YXNfbGlfdGZfdGw/aWU9VVRGOCZjYW1wPTI0NyZjcmVhdGl2ZT0xMjExJmNyZWF0aXZlQVNJTj00MDQ3MzE4NzUyJmxpbmtDb2RlPeOCouODleOCo+ODquOCqOOCpOODiElE44GL44KC44GX44KM44Gq44GEJnRhZz3jgr/jgrDlkI0KCQkJCS8v44Kq44OV44Kh44O844Oq44K544OICgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJncC9vZmZlci1saXN0aW5nLyIpKXsKCQkJCQl2YXIgc2V0UGFnZSA9ICIiOwoJCQkJCXZhciBzZXRDb25kID0gIiI7CgkJCQkJdmFyIHNldFNQRmlsdGVyID0gIiI7CgoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyhvZmZlci1saXN0aW5nKVwvKFx3KykuKiQvaSwgIiQxLyQyLyIpOwoKCQkJCQkvL+ODmuODvOOCuOenu+WLleeUqOODkeODqeODoeODvOOCvwoJCQkJCWlmKGhyZWYubWF0Y2goInN0YXJ0SW5kZXgiKSl7CgkJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJCXNldFBhZ2UgPSAiP3N0YXJ0SW5kZXg9IiArIHBhcmFtc1sic3RhcnRJbmRleCJdOwoJCQkJCQlzdHJVcmwgPSBzdHJVcmwgKyBzZXRQYWdlOwoJCQkJCX0KCi8v5q2j44GX44GEaHR0cDovL3d3dy5hbWF6b24uY28uanAvZ3Avb2ZmZXItbGlzdGluZy9CMDBDUzlMT01ZLz9jb25kaXRpb249dXNlZAovL+ato+OBl+OBhGh0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvQjAwQ1M5TE9NWS8/Y29uZGl0aW9uPW5ldwovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvQjAwQ1M5TE9NWS9zcj0vcWlkPS9yZWY9b2xwX3RhYl9uZXc/aWU9VVRGOCZjb2xpZD0mY29saWlkPSZjb25kaXRpb249bmV3Jm1lPSZxaWQ9JnNlbGxlcj0mc3I9Ci8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvZ3Avb2ZmZXItbGlzdGluZy9CMDBDUzlMT01ZL3NyPS9xaWQ9L3JlZj1vbHBfdGFiX2FsbD9pZT1VVEY4JmNvbGlkPSZjb2xpaWQ9JmNvbmRpdGlvbj1hbGwmbWU9JnFpZD0mc2VsbGVyPSZzaGlwUHJvbW9GaWx0ZXI9JnNvcnQ9c2lwJnNyPQoJCQkJCS8v44GZ44G544Gm44CB5paw5ZOB44CB5Lit5Y+k44Gu5YiH44KK5pu/44GIY29uZGl0aW9uPXVzZWQKCQkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpY29uZGl0aW9uPS8pKXsKCQkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkJaWYoc3RyVXJsLm1hdGNoKC9cPy8pKXsKCQkJCQkJCXNldENvbmQgPSAiJmNvbmRpdGlvbj0iICsgcGFyYW1zWyJjb25kaXRpb24iXTsKCQkJCQkJfWVsc2V7CgkJCQkJCQlzZXRDb25kID0gIj9jb25kaXRpb249IiArIHBhcmFtc1siY29uZGl0aW9uIl07CgkJCQkJCX0KCQkJCQkJc3RyVXJsID0gc3RyVXJsICsgc2V0Q29uZDsKCQkJCQl9CgovL+ato+OBl+OBhGh0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvQjAwQ1M5TE9NWS8/Y29uZGl0aW9uPWFsbCZzaGlwUHJvbW9GaWx0ZXI9MQovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2dwL29mZmVyLWxpc3RpbmcvQjAwQ1M5TE9NWS9zcj0vcWlkPS9yZWY9b2xwX3Nzc19hbGw/aWU9VVRGOCZjb2xpZD0mY29saWlkPSZjb25kaXRpb249YWxsJm1lPSZxaWQ9JnNlbGxlcj0mc2hpcFByb21vRmlsdGVyPTEmc29ydD1zaXAmc3I9CgkJCQkJLy9hbWF6b27jga7jgb/ooajnpLooc2hpcFByb21vRmlsdGVy44GMMeOBoOOBqGFtYXpvbueZuumAgeOBruOBv+OBruaooeanmCkKCQkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpc2hpcFByb21vRmlsdGVyLykpewoJCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCQlpZihzdHJVcmwubWF0Y2goL1w/LykpewoJCQkJCQkJc2V0U1BGaWx0ZXIgPSAiJnNoaXBQcm9tb0ZpbHRlcj0iICsgcGFyYW1zWyJzaGlwUHJvbW9GaWx0ZXIiXTsKCQkJCQkJfWVsc2V7CgkJCQkJCQlzZXRTUEZpbHRlciA9ICI/c2hpcFByb21vRmlsdGVyPSIgKyBwYXJhbXNbInNoaXBQcm9tb0ZpbHRlciJdOwoJCQkJCQl9CgkJCQkJCXN0clVybCA9IHN0clVybCArIHNldFNQRmlsdGVyOwoJCQkJCX0KCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvZ3AvYmVzdHNlbGxlcnMvdmlkZW9nYW1lcy9yZWY9cGRfdHNfemdjX3ZnX3ZpZGVvZ2FtZXNfbW9yZT9wZl9yZF9wPTEyNDM4Mzg0OSZwZl9yZF9zPXJpZ2h0LTUmcGZfcmRfdD0xMDEmcGZfcmRfaT00ODk5ODYmcGZfcmRfbT1BTjFWUlFFTkZSSk41JnBmX3JkX3I9MTdXUjQxMU5HSFg3MTFXRVZTVEYKCQkJCS8v44OZ44K544OI44K744Op44O8CgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCIvYmVzdHNlbGxlcnMvIikgJiYgaHJlZi5tYXRjaCgicmVmPSIpKXsKCQkJCQl2YXIgc3RyUGcgPSAiIjsKCQkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpcGc9LykpewoJCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCQlzdHJQZyA9ICI/cGc9IiArIHBhcmFtc1sicGciXTsKCQkJCQl9CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9yZWY9LiokLywgIiIpOwoJCQkJCXN0clVybCA9IHN0clVybCArIHN0clBnOwoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9PVVRET09SLVBST0RVQ1RTKCVFMyU4MiVBMiVFMyU4MiVBNiVFMyU4MyU4OCVFMyU4MyU4OSVFMyU4MiVBMiVFMyU4MyU5NyVFMyU4MyVBRCVFMyU4MyU4MCVFMyU4MiVBRiVFMyU4MyU4NCkvYi9yZWY9ZHBfYXBwYXJlbF9ieWxpbmVfZXR5P19lbmNvZGluZz1VVEY4Jm5vZGU9MjMzMTY0NjA1MQoJCQkJLy/oqbLlvZPlupfoiJfjga7llYblk4HkuIDopqcKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL1wvYlwvLykgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKW5vZGU9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvKFwvYlwvKS4qJC9pLCAiJDE/bm9kZT0iICsgcGFyYW1zWyJub2RlIl0pOwoKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9zL3JlZj1zOV9kbmF2X2J3X2lyMDNfcz9fX21rX2phX0pQPSU4MyU0QSU4MyU1RSU4MyU0QSU4MyU2OSZub2RlPTIzODY4NzAwNTEmc2VhcmNoLWFsaWFzPW1vYmlsZS1hcHBzJmZpZWxkLXRoZW1lX2Jyb3dzZS1iaW49MjM4ODA2MDA1MSZwZl9yZF9tPUFOMVZSUUVORlJKTjUmcGZfcmRfcz1jZW50ZXItMTAmcGZfcmRfcj0wRDJEN0Q4TUJIOUQ2UlJCV0EzWCZwZl9yZF90PTEwMSZwZl9yZF9wPTE1MjY0OTYwOSZwZl9yZF9pPTIzODExMzAwNTEKLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9zL3JlZj1zOV9kbmF2X2J3X2lyMDJfcz9fX21rX2phX0pQPSU4MyU0QSU4MyU1RSU4MyU0QSU4MyU2OSZub2RlPTIzODY4NzAwNTEmc2VhcmNoLWFsaWFzPW1vYmlsZS1hcHBzJmZpZWxkLXRoZW1lX2Jyb3dzZS1iaW49MjM4ODA1OTA1MSZwZl9yZF9tPUFOMVZSUUVORlJKTjUmcGZfcmRfcz1jZW50ZXItMTAmcGZfcmRfcj0wRDJEN0Q4TUJIOUQ2UlJCV0EzWCZwZl9yZF90PTEwMSZwZl9yZF9wPTE1MjY0OTYwOSZwZl9yZF9pPTIzODExMzAwNTEKCQkJCS8v44Ki44Oe44K+44Oz44Ki44OX44Oq44Gu44K444Oj44Oz44Or77yfCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9cL3NcLy8pICYmIGhyZWYubWF0Y2goLyhcP3xcJilub2RlPS8pKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoKCQkJCQl2YXIgc3RyQW16RmllbGQgPSAiIjsKCgkJCQkJaWYoaHJlZi5tYXRjaCgvZmllbGQtdGhlbWVfYnJvd3NlLWJpbj0vKSl7CgkJCQkJCXN0ckFtekZpZWxkID0gIiZmaWVsZC10aGVtZV9icm93c2UtYmluPSIgKyBwYXJhbXNbImZpZWxkLXRoZW1lX2Jyb3dzZS1iaW4iXTsKCQkJCQl9CgoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyhcL3NcLykuKiQvaSwgIiQxP25vZGU9IiArIHBhcmFtc1sibm9kZSJdICsgc3RyQW16RmllbGQpOwoKLy/mraPjgZfjgYTjgqLjg4njg6zjgrlodHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9hdy9kL0IwMDNZVTNYVU0KLy9odHRwOi8vd3d3LmFtYXpvbi5jby5qcC9ncC9hdy9yZC5odG1sP3VpZD3jgqLjg5XjgqNJROOCieOBl+OBjeOCguOBriZhdD3jgqLjg5XjgqNJROOCieOBl+OBjeOCguOBriZhPUIwMDNZVTNYVU0mdXJsPSUyRmdwJTJGYXclMkZkLmh0bWwmbGM9bXNuCgkJCQkvL+OCueODnuODm+eUqOOCouODieODrOOCuSjmmqvlrprlr77lv5wpCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9cL2dwXC9hd1wvLykpewoJCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJil1aWQ9LykgfHwgaHJlZi5tYXRjaCgvKFw/fFwmKWF0PS8pKXsKCQkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvKGFtYXpvblwuKGpwfGNvLmpwfGNvbXxjYXxjb20uYnJ8Y29tLm14fGNvLnVrfGRlfGZyfGl0fGVzfGNufGlufGNvbS5hdSkpXC8uKiQvaSwgIiQxIiArICIvZ3AvYXcvZC8iICsgcGFyYW1zWyJhIl0pOwoJCQkJCX0KCgkJCQkJLy/jgIxhbWF6b24uY28uanAvZHAv5ZWG5ZOBSUQvP3RhZz3oibLjgIXjgI3nlKjjgavlv7Xjga7jgZ/jgoHlr77lv5wKCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhcL2dwXC9hd1wvZFwvKSguKihcL3wpKT90YWc9LiokL2ksICIkMSIgKyAiJDIiKTsKCQkJCQkvL+OAjGFtYXpvbi5jby5qcC9ncC9hdy9kL+WVhuWTgUlEL3JlZj3jg6rjg5XjgqHjg6kvP3RhZz3oibLjgIXjgI3jga7loLTlkIjlj5bjgorjgZPjgbzjgZnjgojjgYbjgarjga7jgaflr77lv5wKCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhcL2dwXC9hd1wvZFwvKSguKilcL3JlZi4qJC9pLCAiJDEiICsgIiQyLyIpOwoJCQkJCS8v44CMYW1hem9uLmNvLmpwL+aWh+Wtly9kcC/llYblk4FJROOAjeeUqOOBq+W/teOBruOBn+OCgeWvvuW/nAoJCQkJCXN0clVybD1zdHJVcmwucmVwbGFjZSgvKGFtYXpvblwuKGpwfGNvLmpwfGNvbXxjYXxjb20uYnJ8Y29tLm14fGNvLnVrfGRlfGZyfGl0fGVzfGNufGlufGNvbS5hdSkpXC8uKihcL2dwXC9hd1wvZFwvLiokKS9pLCAiJDEiICsgIiQzIik7CgoJCQkJCS8v5ZWG5ZOB6Kqs5piO44Gu44Oq44Oz44Kv44Gn5b+F6KaB44Gq44OR44Op44Oh44O844K/44G+44Gn5raI44GZ44Gu44Gn6KOc44Gm44KTCgkJCQkJaWYoIXN0clVybC5tYXRjaCgiZHNjPSIpICYmIGhyZWYubWF0Y2goImRzYz0iKSl7CgkJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJCXN0clVybCA9IHN0clVybCArICI/ZHNjPSIgKyBwYXJhbXNbImRzYyJdOwoJCQkJCX0KCQkJCQkvL+ips+e0sOiqrOaYjuOBruODquODs+OCr+OBp+W/heimgeOBquODkeODqeODoeODvOOCv+OBvuOBp+a2iOOBmeOBruOBp+ijnOOBpuOCkwoJCQkJCWlmKCFzdHJVcmwubWF0Y2goInBkPSIpICYmIGhyZWYubWF0Y2goInBkPSIpKXsKCQkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkJc3RyVXJsID0gc3RyVXJsICsgIj9wZD0iICsgcGFyYW1zWyJwZCJdOwoJCQkJCX0KCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvcy8/aWU9VVRGOCZrZXl3b3Jkcz0lRUYlQkQlODglRUYlQkQlODQlRUYlQkMlOTUlRUYlQkMlOTklRUYlQkMlOTgmdGFnPXlhaGh5ZC0yMiZpbmRleD1hcHMmanAtYWQtYXA9MCZodmFkaWQ9Mzg3OTE4NzUzMzcmaHZkZXY9YyZyZWY9cGRfc2xfNWd2bmk4c2RiaV9iCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvZ3Avc2VhcmNoP2tleXdvcmRzPVNELUFOVzE0NzVQODEmX19ta19qYV9KUD0lODNKJTgzJTVFJTgzSiU4M2kmdGFnPW1lbW90b3JhLTIyCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9cL3NcLy8pIAoJCQkJICB8fCBocmVmLm1hdGNoKC9cL3NlYXJjaFw/LykpewoJCQkJCS8va2V5d29yZHMoa2V5d29yZHPjgahmaWVsZC1rZXl3b3Jkc+OBrjLnqK7poZ7jgYLjgovmqKHmp5jvvIkKCQkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpa2V5d29yZHM9LykpewoJCQkJCQl2YXIgc3RyUGFnZSA9ICIiOwkvL+ihqOekuuODmuODvOOCuOaVsAoJCQkJCQl2YXIgc3RyUHJpY2VPZmYgPSAiIjsJLy/libLlvJXnjocKCgkJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJCWlmKGhyZWYubWF0Y2goInBhZ2U9IikpewoJCQkJCQkJc3RyUGFnZSA9ICImcGFnZT0iICsgcGFyYW1zWyJwYWdlIl07CgkJCQkJCX0KCQkJCQkJaWYoaHJlZi5tYXRjaCgicGN0LW9mZj0iKSl7CgkJCQkJCQlzdHJQcmljZU9mZiA9ICImcGN0LW9mZj0iICsgcGFyYW1zWyJwY3Qtb2ZmIl07CgkJCQkJCX0KCQkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvKC4qXC8oc1wvfHNlYXJjaCkpLiokL2ksICIkMT9rZXl3b3Jkcz0iICsgcGFyYW1zWyJrZXl3b3JkcyJdICsgc3RyUGFnZSArIHN0clByaWNlT2ZmKTsKCgkJCQkJLy9maWVsZC1rZXl3b3JkcwoJCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goLyhcP3xcJilmaWVsZC1rZXl3b3Jkcz0vKSl7CgkJCQkJCXZhciBzdHJQYWdlID0gIiI7CS8v6KGo56S644Oa44O844K45pWwCgkJCQkJCXZhciBzdHJQcmljZU9mZiA9ICIiOwkvL+WJsuW8leeOhwoKCQkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkJaWYoaHJlZi5tYXRjaCgicGFnZT0iKSl7CgkJCQkJCQlzdHJQYWdlID0gIiZwYWdlPSIgKyBwYXJhbXNbInBhZ2UiXTsKCQkJCQkJfQoJCQkJCQlpZihocmVmLm1hdGNoKCJwY3Qtb2ZmPSIpKXsKCQkJCQkJCXN0clByaWNlT2ZmID0gIiZwY3Qtb2ZmPSIgKyBwYXJhbXNbInBjdC1vZmYiXTsKCQkJCQkJfQoJCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC8oLipcLyhzXC98c2VhcmNoKSkuKiQvaSwgIiQxP2ZpZWxkLWtleXdvcmRzPSIgKyBwYXJhbXNbImZpZWxkLWtleXdvcmRzIl0gKyBzdHJQYWdlICsgc3RyUHJpY2VPZmYpOwoKCQkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpcmg9LykpewoJCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC8oLipcL3NcLykuKiQvaSwgIiQxP3JoPSIgKyBwYXJhbXNbInJoIl0pOwoJCQkJCX0KCi8vaHR0cDovL3d3dy5hbWF6b24uY28uanAvRzI0NiVFMyU4MiVCNyVFMyU4MyVBQSVFMyU4MyVCQyVFMyU4MiVCQS0yNCVFNSU5RSU4QiVFMyU4MyVBRiVFMyU4MiVBNCVFMyU4MyU4OSVFNiVCNiVCMiVFNiU5OSVCNiVFMyU4MyVBMiVFMyU4MyU4QiVFMyU4MiVCRiVFMyU4MyVCQy0xOTIwJUMzJTk3MTA4MC0lRTUlODUlQTUlRTUlOEElOUIlRTclQUIlQUYlRTUlQUQlOTAlRTMlODMlOUYlRTMlODMlOEJELVN1YjE1JUUzJTgzJTk0JUUzJTgzJUIzJUUzJTgzJUJCRFZJLUQlRTIlODAlQkJIRENQJUU1JUFGJUJFJUU1JUJGJTlDJUUzJTgzJUJCSERNSS1HMjQ2SExBQklEL2RwL0IwMEFER00xQTglM0ZTdWJzY3JpcHRpb25JZCUzRDA1NzFCQkdUUVo1WVlQRURTWTAyJTI2dGFnJTNEa2FrYWt1LXBjLXBjb3RoZXItMjIlMjZsaW5rQ29kZSUzRHhtMiUyNmNhbXAlM0QyMDI1JTI2Y3JlYXRpdmUlM0QxNjU5NTMlMjZjcmVhdGl2ZUFTSU4lM0RCMDBBREdNMUE4JTI2bWUlM2RBTjFWUlFFTkZSSk41CgkJCQkvL+mAmuW4uOOBruWVhuWTgVVSTAoJCQkJfWVsc2UgewoKCQkJCQl2YXIgc3RyTmV3VXJsPWhyZWYucmVwbGFjZSgvKGFtYXpvblwuKGpwfGNvLmpwfGNvbXxjYXxjb20uYnJ8Y29tLm14fGNvLnVrfGRlfGZyfGl0fGVzfGNufGlufGNvbS5hdSkpXC8uKlwvKEFTSU58cHJvZHVjdHxkcClcLyhcdyspKFwvfFw/fFwlM0YpLiokL2ksICIkMS8iICsgImRwLyIgKyAiJDQvIik7CgkJCQkJaWYgKGhyZWYgPT0gc3RyTmV3VXJsKSB7CgkJCQkJCS8v44CMYW1hem9uLmNvLmpwL+aWh+Wtly9kcC/llYblk4FJRC8/dGFnPeiJsuOAheOAjeOBruWgtOWQiOOBrumZpOWOuwoJCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC8oYW1hem9uXC4oanB8Y28uanB8Y29tfGNhfGNvbS5icnxjb20ubXh8Y28udWt8ZGV8ZnJ8aXR8ZXN8Y258aW58Y29tLmF1KSlcLy4qXC8oQVNJTnxwcm9kdWN0fGRwKVwvKFx3KykkL2ksICIkMS8iICsgImRwLyIgKyAiJDQiKTsKCgoJCQkJCQkvL+OAjGFtYXpvbi5jby5qcC9kcC/llYblk4FJRC8/dGFnPeiJsuOAheOAjeOBruWgtOWQiOWPluOCiuOBk+OBvOOBmeOCiOOBhuOBquOBruOBp+WvvuW/nAoJCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhcL2RwXC8pKC4qKFwvfCkpXD90YWc9LiokL2ksICIkMSIgKyAiJDIiKTsKCQkJCQkJLy/jgIxhbWF6b24uY28uanAvZHAv5ZWG5ZOBSUQvcmVmPeODquODleOCoeODqS8/dGFnPeiJsuOAheOAjeOBruWgtOWQiOWPluOCiuOBk+OBvOOBmeOCiOOBhuOBquOBruOBp+WvvuW/nAoJCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhcL2RwXC8pKC4qKVwvcmVmLiokL2ksICIkMSIgKyAiJDIvIik7CgoJCQkJCQkvL+OAjGFtYXpvbi5jby5qcC/mloflrZcvZHAv5ZWG5ZOBSUTjgI3mloflrZfjgYzmrovjgovjga7jgafliYrpmaQKCQkJCQkJLy9BbWF6b27lrprmnJ/jgYrjg4jjgq/kvr/jga/pmaTlpJYKCQkJCQkJaWYoIXN0clVybC5tYXRjaCgiL2dwL3N1YnNjcmliZS1hbmQtc2F2ZS8iKSl7CgkJCQkJCQlzdHJVcmw9c3RyVXJsLnJlcGxhY2UoLyhhbWF6b25cLihqcHxjby5qcHxjb218Y2F8Y29tLmJyfGNvbS5teHxjby51a3xkZXxmcnxpdHxlc3xjbnxpbnxjb20uYXUpKVwvLiooXC9kcFwvLiokKS9pLCAiJDEiICsgIiQzIik7CgkJCQkJCX0KCgkJCQkJfWVsc2V7CgkJCQkJCXN0clVybCA9IHN0ck5ld1VybDsKCQkJCQl9CgkJCQl9CgovL2h0dHA6Ly93d3cuYW1hem9uLmNvLmpwL2V4ZWMvb2JpZG9zL2V4dGVybmFsLXNlYXJjaD9zZWFyY2gtdHlwZT1zcyZ0YWc944Ki44OV44Kj44Oq44Ko44Kk44OISUQma2V5d29yZD3mpJzntKLjg6/jg7zjg4kmaW5kZXg9Ym9va3MtanAKCQkJCS8v44Gd44KM44Gn44KC44Ki44OV44Kj44Oq44Ko44Kk44OIdGFn44GM5q6L44Gj44Gm44Gf44KJ5YmK6ZmkCgkJCQlpZihzdHJVcmwubWF0Y2goLyhcP3xcJil0YWc9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidGFnIl0sJycpOwoJCQkJfQoKCQkJCS8v5raI44GX6YGO44GO44Gf44OR44Op44Oh44O844K/44KS6L+95YqgCgkJCQlpZihocmVmLm1hdGNoKC9cPy8pKXsKCQkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQkvL+OCq+ODhuOCtOODqijjgrjjg6Pjg7Pjg6spCgkJCQkJaWYoaHJlZi5tYXRjaCgiaW5kZXg9IikgJiYgIXN0clVybC5tYXRjaCgiaW5kZXg9IikpewoJCQkJCQlpZihzdHJVcmwubWF0Y2goL1w/LykpewoJCQkJCQkJc3RyVXJsID0gc3RyVXJsICsgIiZpbmRleD0iICsgcGFyYW1zWyJpbmRleCJdOwoJCQkJCQl9ZWxzZXsKCQkJCQkJCXN0clVybCA9IHN0clVybCArICI/aW5kZXg9IiArIHBhcmFtc1siaW5kZXgiXTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQkvL1VSTOS/ruatowoJCQkJaWYoc3RyVXJsLmluZGV4T2YoImFtYXpvbi5qcCIpID4gLTEpewoJCQkJCXN0clVybCAgPSBzdHJVcmwucmVwbGFjZSgvYW1hem9uLmpwLywiYW1hem9uLmNvLmpwIik7CgkJCQl9CgoJCQkJc2V0TGluaygpOwkvL+ODquODs+OCr+WkieabtAoKCgkJCS8vQXBwbGVTdG9yZT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJhb3MucHJmLmhuIikpewovL2h0dHA6Ly9hb3MucHJmLmhuL2NsaWNrL2NhbXJlZjoxMGxkNGovcHVicmVmOk9yYm90aXglMjBTcGhlcm8vZGVzdGluYXRpb246aHR0cCUzQSUyRiUyRnN0b3JlLmFwcGxlLmNvbSUyRmpwJTJGcHJvZHVjdCUyRkhEMTYyTEwlMkZBJTJGb3Jib3RpeC1zcGhlcm8tMjAtJTI1RTMlMjU4MyUyNUFEJTI1RTMlMjU4MyUyNTlDJTI1RTMlMjU4MyUyNTg2JTI1RTMlMjU4MiUyNUEzJTI1RTMlMjU4MyUyNTgzJTI1RTMlMjU4MiUyNUFGJTI1RTMlMjU4MyUyNTlDJTI1RTMlMjU4MyUyNUJDJTI1RTMlMjU4MyUyNUFCJTNGZm5vZGUlM0Q0MwovL+ODh+OCs+ODvOODiWh0dHA6Ly9hb3MucHJmLmhuL2NsaWNrL2NhbXJlZjoxMGxkNGovcHVicmVmOk9yYm90aXggU3BoZXJvL2Rlc3RpbmF0aW9uOmh0dHA6Ly9zdG9yZS5hcHBsZS5jb20vanAvcHJvZHVjdC9IRDE2MkxML0Evb3Jib3RpeC1zcGhlcm8tMjAt44Ot44Oc44OG44Kj44OD44Kv44Oc44O844OrP2Zub2RlPTQzCi8vaHR0cDovL2Fvcy5wcmYuaG4vY2xpY2svY2FtcmVmOjEwbGRhbi9wdWJyZWY6SXBob25lJTIwNXMlMjBDYXNlL2Rlc3RpbmF0aW9uOmh0dHAlM0ElMkYlMkZzdG9yZS5hcHBsZS5jb20lMkZqcCUyRnByb2R1Y3QlMkZNRjA0MUZFJTJGQSUyRmlwaG9uZS01cy1jYXNlLSVFMyU4MyU5NiVFMyU4MyVBOSVFMyU4MiVBNiVFMyU4MyVCMyUzRmZub2RlJTNENDcKLy/jg4fjgrPjg7zjg4lodHRwOi8vYW9zLnByZi5obi9jbGljay9jYW1yZWY6MTBsZGFuL3B1YnJlZjpJcGhvbmUgNXMgQ2FzZS9kZXN0aW5hdGlvbjpodHRwOi8vc3RvcmUuYXBwbGUuY29tL2pwL3Byb2R1Y3QvTUYwNDFGRS9BL2lwaG9uZS01cy1jYXNlLeODluODqeOCpuODsz9mbm9kZT00NwoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8uKmRlc3RpbmF0aW9uOi8sIiIpLnJlcGxhY2UoL1w/Zm5vZGU9LiokLywiIik7CgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwczovL2l0dW5lcy5hcHBsZS5jb20vanAvYXBwL2NhbWVyYSsvaWQzMjk2NzA1Nzc/bXQ9OCZ1bz00JmF0PTExbGMydwovL2h0dHBzOi8vd2lkZ2V0cy5pdHVuZXMuYXBwbGUuY29tL3dpZGdldC5odG1sP2M9anAmYnJjPUZGRkZGRiZibGM9RkZGRkZGJnRyYz1GRkZGRkYmdGxjPUZGRkZGRiZkPSZ0PSZtPW11c2ljJmU9YWxidW0mdz0yNTAmaD0zMDAmaWRzPTY2MDEwNzgwNCZ3dD1kaXNjb3ZlcnkmcGFydG5lcklkPSZhZmZpbGlhdGVfaWQ9JmF0PTExbGMydyZjdD0KCQkJLy9pdHVuZXMo44OR44Op44Oh44O844K/YXTjgYzjgqLjg5XjgqPjg6rjgqjjgqTjg4hJROOAgnVv44Gv44Gk44GE44Gn44Gr5YmK6ZmkKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJpdHVuZXMuYXBwbGUuY29tIikgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKWF0PS8pIAoJCQkgICAgICB8fCBocmVmLm1hdGNoKCJ0dW5lcy5hcHBsZS5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpdW89LykKCQkJICAgICAgfHwgaHJlZi5tYXRjaCgiaXR1bmVzLmFwcGxlLmNvbSIpICYmIGhyZWYubWF0Y2goLyhcP3xcJilhSWQ9LykpewoKCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJilhdD0vKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oXD98XCYpYXQ9LiovLCIiKTsKCQkJCX0KCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJil1bz0vKSl7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLyhcP3xcJil1bz0uKi8sIiIpOwoJCQkJfQoKLy9odHRwczovL2Jhbm5lcnMuaXR1bmVzLmFwcGxlLmNvbS9iYW5uZXIuaHRtbD9wYXJ0bmVySWQ9JmFJZD0xMWxjMncmaWQ9NjYwMTA3ODA0JmM9anAmbD1qYS1KUCZidD1jYXRhbG9nJnQ9Y2F0YWxvZ19ibGFjayZ3PTMwMCZoPTI1MAoJCQkJLy9pdHVuZXPjg5Djg4rjg7wo44OR44Op44Oh44O844K/YUlk44GM44Ki44OV44Kj44Oq44Ko44Kk44OISUQpCgkJCQlpZihzdHJVcmwubWF0Y2goLyhcP3xcJilhSWQ9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gIGhyZWYucmVwbGFjZShwYXJhbXNbImFJZCJdLCIiKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwOi8vd3d3LmFyay1wYy5jby5qcC9pLzIwMTA0NzU1Lz9jaWQ9a2FrYWt1CgkJCS8vYXJrLXBj44Gu44OI44Op44OD44Kr44O8PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiYXJrLXBjLmNvLmpwIikgPiAtMSAmJiBocmVmLmluZGV4T2YoIj9jaWQ9IikgPiAtMSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1w/Y2lkPS4qJC8sIiIpOwoJCQkJCgkJCQlzZXRMaW5rKCk7CgovL+ato+OBl+OBhGh0dHA6Ly93d3cuYXNrdWwuY28uanAvcC/llYblk4FJRC8KLy9odHRwOi8vd3d3LmFza3VsLmNvLmpwL3N0bj9tb2RlPWFmZmlsaWF0ZSZ0b29sPTIxNSZmcmFtZVVSTD0vcC/llYblk4FJRC8mc2NfZT1jcF9hX2FzX3ZjX3BzX2FfcF9rYWtha3UKCQkJLy9hc2t1bD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoInd3dy5hc2t1bC5jby5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCIvcC8iKSA+IC0xKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKHd3dy5hc2t1bC5jby5qcClcLy4qKFwvcFwvKSguKlwvKS4qJC9pLCIkMSIrICIkMiIgKyAiJDMiKTsKCgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9hc2t1bGNvcnBvcmF0aW9uLnR0Lm9tdHJkYy5uZXQvbTIvYXNrdWxjb3Jwb3JhdGlvbi91Ym94L3BhZ2U/bWJveD1Mb2hhY29fcGNfeXNocHBvaW50X3JlZGlyZWN0Jm1ib3hEZWZhdWx0PWh0dHAlM0ElMkYlMkZsb2hhY28uanAlMkZldmVudCUyRmJvbnVzX3dpbnRlciUyRiUzRmJrJTNEeSUyNnNjX2UlM0RqX2FzX3lhX3BjX25fcGMKLy9odHRwOi8vYXNrdWxjb3Jwb3JhdGlvbi50dC5vbXRyZGMubmV0L20yL2Fza3VsY29ycG9yYXRpb24vdWJveC9wYWdlP21ib3g9TG9oYWNvX3BjX3lzaHBwb2ludF9yZWRpcmVjdCZtYm94RGVmYXVsdD1odHRwOi8vbG9oYWNvLmpwL2V2ZW50L2JvbnVzX3dpbnRlci8/Yms9eQoJCQkvL2Fza3VsY29ycG9yYXRpb249PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvYXNrdWxjb3Jwb3JhdGlvbi50dC5vbXRyZGMubmV0LykgJiYgaHJlZi5tYXRjaCgvbWJveERlZmF1bHQvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJtYm94RGVmYXVsdCIpOwoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oXD98XCYpYms9LiokLywnJyk7CgoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3LmRlbmEtZWMuY29tL2l0ZW0vMTY3NDI1MjkxP2FmZl9pZD1ja2sKCQkJLy9kZW5hPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiZGVuYS1lYy5jb20iKSA+IC0xICYmIGhyZWYuaW5kZXhPZigiP2FmZl9pZD0iKSA+IC0xKXsKCQkJCWN1dE51bSA9IGhyZWYuaW5kZXhPZigiP2FmZl9pZD0iKTsKCQkJCXN0clVybD1ocmVmLnNsaWNlKDAsY3V0TnVtKTsKCgkJCQlzZXRMaW5rKCk7CgovL2h0dHBzOi8vd3d3Lm15ZG9jb21vLmNvbS9vbmxpbmVzaG9wL3Byb2R1Y3RzL3NtYXJ0X3Bob25lL1NPMDJGLmh0bWw/Y2lkPU9MU19QUkRfU08wMkZfZnJvbV9rZGNfUFJEX1NPMDJGCgkJCS8vZG9jb21vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigibXlkb2NvbW8uY29tIikgPiAtMSAmJiBocmVmLmluZGV4T2YoIi5odG1sPyIpID4gLTEpewoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8uaHRtbD8uKiQvLCIuaHRtbCIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3LmRvbWlub3MuanAvYWZmaWxpYXRlL2xzZGxwLnBocD9zaXRlSUQ9Mnh6N1U5UmczVVUtRVFhN0tmSXlmcjFqTUVvVjA3bk5mdwoJCQkvL2RvbWlub3M9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJkb21pbm9zLmpwIikgPiAtMSAmJiBocmVmLmluZGV4T2YoInNpdGVJRD0iKSA+IC0xKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJzaXRlSUQiXSwiIik7CgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwOi8vd3d3LmRvc3BhcmEuY28uanAvNXNob3BwaW5nL2RldGFpbF9wYXJ0cy5waHA/Ymc9MiZicj05OCZzYnI9NTI5JmljPTM1NjcxNC8KCQkJLy9kb3NwYXJh44Gu5LiN6KaB44Gn5LiN5piO44Gq44OR44Op44Oh44O844K/5YmK6ZmkPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiZG9zcGFyYS5jby5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJpYz0iKSA+IC0xKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLy5waHAuKiQvLCIucGhwP2ljPSIpICsgcGFyYW1zWyJpYyJdICsgIiZsZj0wIjsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3JvdmVyLmViYXkuY29tL3JvdmVyLzEvNzExLTUzMjAwLTE5MjU1LTAvMT9mZjM9NCZwdWI9NTU3NTA0NjQ0MyZ0b29saWQ9MTAwMDEmY2FtcGlkPTUzMzczMTAyMTQmY3VzdG9taWQ9Jm1wcmU9aHR0cCUzQSUyRiUyRnd3dy5lYmF5LmNvbSUyRml0bSUyRkJVTEstV0hPTEVTQUxFLUFSQUNITk9QSE9CSUEtQUxVTUlOSVVNLU1FVEFMLUNBU0UtQ09WRVItQlVNUEVSLUZPUi1JUEhPTkUtNS0lMkYxMTEwNDI4MDQzNzUlM0ZwdCUzRFVLX01vYmlsZVBob25lc19Nb2JpbGVQaG9uZXNDYXNlc1BvdWNoZXMlMjZ2YXIlM0QlMjZoYXNoJTNEaXRlbTE5ZGFhYWJhOTcKCQkJLy9lYmF5PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoIi5lYmF5LmNvbSIpID4gLTEgKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgoJCQkJaWYoaHJlZi5pbmRleE9mKCJtcHJlPWh0dHAiKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJtcHJlIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKLy9odHRwOi8vd3d3LmViYXkuY29tL3JwcC92ZXJhYnJhZGxleS92ZXJhLWJyYWRsZXktb24tZWJheS8/Y3VzdG9taWQ9d0twYmNEcXBFZU9HTG9ySWdaWXFEUTF4ZjRfczd3azNfMF8wXzAmcHViPTU1NzQ2NTI0NTMmYWZlcG49NTMzNzI1OTg4NyZjYW1waWQ9NTMzNzI1OTg4NyZfdHJrc2lkPXAyMDUwNjAxLm0xMjU2Jl9pcGc9MTkyJl90cmtwYXJtcz0lMjZjbGtpZCUzRDIxMzAzODU4OTEzMTM4MTMyMDQmYWZlcG49NTMzNzI1OTg4NwoJCQkJaWYoaHJlZi5pbmRleE9mKCJjdXN0b21pZD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJjdXN0b21pZCJdLCIiKS5yZXBsYWNlKCJjdXN0b21pZD0iLCIiKTsKCQkJCX0KCQkJCWlmKGhyZWYuaW5kZXhPZigiX3Rya3NpZD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJfdHJrc2lkIl0sIiIpLnJlcGxhY2UoIl90cmtzaWQ9IiwiIik7CgkJCQl9CgovL2h0dHA6Ly93d3cua3NkZW5raS5jb20vZWMvY29tbW9kaXR5LzAwMDAwMDAwLzQ5MDU1MjQ4MTEzODQmdmNwdG49RFBGLUM3MEElMjBXLwoJCQkvL2tz6Zu75rCX44Gu5LiN6KaB44Gn5LiN5piO44Gq44OR44Op44Oh44O844K/5YmK6ZmkPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigidmNwdG4iKSA+IC0xKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKFwmfFw/KXZjcHRuLiokLywiIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9sb2hhY28uanAvcHJvZHVjdC8yNjkwODMyLz9zY19lPWFfYXNfdmNfcHNfYV9rYWtha3UKLy9odHRwOi8vbG9oYWNvLmpwL2xrc2VhcmNoLz9jYXRlZ29yeUxsPSZjYXRlZ29yeUw9JmNhdGVnb3J5TT0mY2F0ZWdvcnlTPSZzZWFyY2hXb3JkPSVFNiU4RSU4MyVFOSU5OSVBNCVFNiVBOSU5RiZhbmRPcj0maXRlbUV4cGw9MCZyZXN1bHRUeXBlPSZyZXN1bHRDb3VudD0maXRlbVNwZWM9JnNvcnREaXI9JnNjX2U9bF9kdF95YV9zZV9jX3BjXzU4MDAwMDAwMDAwXzQ1ODY1MyZpb25laWQ9U0lfNjkyMjU1MDM4X18xJnNpc3NyPTEKCQkJLy9sb2hhY289PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJsb2hhY28uanAiKSA+IC0xKXsKCQkJCWlmKHN0clVybC5pbmRleE9mKCJzY19lPSIpID4gLTEpewoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyguKikoXD98XCYpc2NfZT0uKiQvaSwnJDEnKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly93d3cubmVjZGlyZWN0LmpwL3JlZGlyL25kZW50cnlscy5hc3A/bHN0aWQ9Q0JUdFlYTWt3d0ktVGFLajFWWm01WTc4dzB3SnBZYlhZZyZsc3VybD1odHRwJTNBJTJGJTJGd3d3Lm5lY2RpcmVjdC5qcCUyRnNob3AlMkZub3RlJTJGbGF2aWUlMkZzaCUyRmluZGV4Lmh0bWwKCQkJLy9ORUM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigibmVjZGlyZWN0LmpwIikgPiAtMSAmJiBocmVmLm1hdGNoKC8oXD98XCYpbHN1cmw9aHR0cC8pKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsImxzdXJsIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cubmlzc2VuLmNvLmpwL3Nob19pdGVtL3JlZ3VsYXIvNjQwMC82NDAwXzEyODYxLmFzcD9ib29rPTY0MDAmY2F0PW90aGVyMDAzLwoJCQkvL+ODi+ODg+OCu+ODs+OBruS4jeimgeOBp+S4jeaYjuOBquODkeODqeODoeODvOOCv+WJiumZpD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoIm5pc3Nlbi5jby5qcCIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCIuYXNwIikgPiAtMSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLy5hc3AuKiQvLCIuYXNwIik7CgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwOi8vd3d3LmUtbmxzLmNvbS9hY2Nlc3NfcHJvZC5waHA/YWdlbmN5X2lkPWFmNzM5NTQ2LW8wOCZwY29kZT03NzEzCgkJCS8vbmxzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJlLW5scy5jb20iKSAmJiBocmVmLm1hdGNoKCJhZ2VuY3lfaWQ9IikgKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJhZ2VuY3lfaWQiXSwiIikucmVwbGFjZSgvYWdlbmN5X2lkPS8sIiIpOwoKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2NvbWljLnBpeGl2Lm5ldC93b3Jrcy81OT9hZHM9dHgtdzU5CgkJCS8vcGl4aXY9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoInBpeGl2Lm5ldCIpPjAgJiYgaHJlZi5tYXRjaCgiYWRzPSIpKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvXD8uKiQvLCIiKTsKCQkJCXNldExpbmsoKTsKCgovL2h0dHA6Ly9wdC5hZmwucmFrdXRlbi5jby5qcC9jL+aVsOWtly9fUlR2cmdq5pWw5a2XP3VybD1odHRwJTNBJTJGJTJGaXRlbS5yYWt1dGVuLmNvLmpwJTJG44K144Kk44OI5ZCN44Go44GLCgkJCS8v5qW95aSpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigicmFrdXRlbi5jby5qcCIpPjApewovLwkJCQl2YXIgcmFrdGVuUHJtcyA9ICIiOwoKLy9odHRwOi8vaXRlbS5yYWt1dGVuLmNvLmpwL2pldC1wYy80MzAwXzE1Ly0taHlicmlkLS1odHRwOi8vaXRlbS5yYWt1dGVuLmNvLmpwL2pldC1wYy80MzAwXzE1LyZzdWJpZD0mdHlwZT0xMCZ0bXBpZD0xMTA0NQoJCQkJLy/mpb3lpKnjga7jg6rjg4DjgqTjg6zjgq/jg4jpmaTljrsKCQkJCWlmKGhyZWYuaW5kZXhPZigiLS1oeWJyaWQtLWh0dHAiKSA+IC0xKXsKCQkJCQljdXROdW0gPSBocmVmLmluZGV4T2YoIi0taHlicmlkLS0iKTsKCQkJCQlzdHJVcmwgPSBocmVmLnNsaWNlKGN1dE51bSsxMCk7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLyhcP3xcJilzdWJpZD0uKiQvLCcnKTsKCQkJCX0KCgkJCQkvL+OCouODleOCo+ODquOCqOOCpOODiOmZpOWOuwoJCQkJaWYoaHJlZi5pbmRleE9mKCJwdC5hZmwucmFrdXRlbi5jby5qcCIpPi0xICYmIGhyZWYubWF0Y2goLyhcP3xcJil1cmw9LykpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoKCQkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiaGIuYWZsLnJha3V0ZW4uY28uanAiKT4tMSAmJiBocmVmLm1hdGNoKC8oXD98XCYpcGM9LykpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInBjIik7CgoJCQkJfQoKLy9odHRwOi8vcmQucmFrdXRlbi5jby5qcC9hLz9SMj1odHRwOi8vcmFua2luZy5yYWt1dGVuLmNvLmpwL2RhaWx5L2dlbmRlcj1mZW1hbGUvP3NjaWQ9c19rd2FfZHNhJmxzaWQ9MDAwMDA2CgkJCQlpZihocmVmLm1hdGNoKCJyZC5yYWt1dGVuLmNvLmpwIikgJiYgaHJlZi5tYXRjaCgiUjI9IikpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsIlIyIik7CgoJCQkJfQoKLyoKLy9odHRwOi8vZXNlYXJjaC5yYWt1dGVuLmNvLmpwL3Jtcy9zZC9lc2VhcmNoL3ZjP3N2PTImdj0yJmU9MCZzPTI4JnN1Yj0wJms9MCZvaWQ9MDAwJmM9MjgzNiZzaXRlbT0lQTUlRDElQTUlQkQlQTUlQjMlQTUlRjMlQTUlQzclQTUlQjklQTUlQUYrMTgwY20rQk9OJmY9QSZuaXRlbT0mZz0wJm1pbj0mbWF4PSZwPTAKCQkJCS8vZXNlYXJjaOOBr+ODkeODqeODoeODvOOCv+OBruaWh+Wtl+OCqOODs+OCs+ODvOODiVVURjgo77yfKeOCkuODh+OCs+ODvOODieOBmeOCi+OCieOBl+OBhAoJCQkJaWYoaHJlZi5tYXRjaCgiL2VzZWFyY2gucmFrdXRlbi5jby5qcCIpICYmIGhyZWYubWF0Y2goInNpdGVtPSIpKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoKCQkJCQlyYWt0ZW5Qcm1zID0gcmFrdXRlblBhcmFtKCk7CgoJCQkJCXN0clVybCA9ICJodHRwOi8vZXNlYXJjaC5yYWt1dGVuLmNvLmpwL3Jtcy9zZC9lc2VhcmNoL3ZjPyIgKyByYWt0ZW5Qcm1zOwoKCQkJCX0KCi8vaHR0cDovL3NlYXJjaC5yYWt1dGVuLmNvLmpwL3NlYXJjaC9tYWxsP3Y9MiZzPTEmcD0xJm1pbj0mbWF4PSZnPTEwMTE2NCZzaXRlbT13ZWIrbW9uZXkmc3Q9QSZuaXRlbT0lOTIlOTklOEIlRTAlOTQlQTArJTgyJUEwJTgyJUMyJTgyJURDJTgyJUVBK0NvbmZpZGVudGlhbCsrRmFsbG91dAoJCQkJaWYoaHJlZi5tYXRjaCgiL3NlYXJjaC5yYWt1dGVuLmNvLmpwIikgJiYgaHJlZi5tYXRjaCgic2l0ZW09IikpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgoJCQkJCXJha3RlblBybXMgPSByYWt1dGVuUGFyYW0oKTsKCgkJCQkJc3RyVXJsID0gImh0dHA6Ly9zZWFyY2gucmFrdXRlbi5jby5qcC9zZWFyY2gvbWFsbD9zaXRlbT0iICsgcmFrdGVuUHJtczsKCQkJCQkKCQkJCX0KCi8vaHR0cDovL3NlYXJjaC5ib29rcy5yYWt1dGVuLmNvLmpwL2Jrc2VhcmNoL25tP3NpdGVtPSVCRiVCNyVDQSVBMSVDQSVERCVDRSVCNCZzdj0zMCZ2PTImc3B2PTIKCQkJCWlmKGhyZWYubWF0Y2goIi9zZWFyY2guYm9va3MucmFrdXRlbi5jby5qcCIpICYmIGhyZWYubWF0Y2goInNpdGVtPSIpKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoKCQkJCQlyYWt0ZW5Qcm1zID0gcmFrdXRlblBhcmFtKCk7CgoJCQkJCXN0clVybCA9ICJodHRwOi8vc2VhcmNoLmJvb2tzLnJha3V0ZW4uY28uanAvYmtzZWFyY2gvbm0/c2l0ZW09IiArIHJha3RlblBybXMgKyAiJnNwdj0yIjsKCQkJCQkKCQkJCX0KKi8KCgkJCQkvL+OBiuOBneOCieOBj+ODkeODqeODoeODvOOCv+OBrnNjaWTjga/jg4jjg6njg4Pjgqvjg7zjgadzYzJpZOOBjOOCouODleOCo0lE44Go5oCd44KP44KM44KL44Gu44Gn44G+44Go44KB44Gm5YmK6ZmkCgkJCQlzdHJVcmwgPSBzdHJVcmwucmVwbGFjZSgvKFwvfFw/fFwmKXNjaWQ9LiokLywiIikucmVwbGFjZSgvKFwvfFw/fFwmKXNjMmlkPS4qJC8sIiIpOwoKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3d3dy5zZWthaW1vbi5jb20vaXRyYWNrL3ZjdXJsX2VudHJ5LnBsP0lUUkFDS19JTkZPPTA4Nzg2NzIxNDQwMjM1NjUxMTE0MDYyNTIzNDUxMiZDT09LSUVfUEFUSD0vJkNPT0tJRV9ET01BSU49LnNla2FpbW9uLmNvbSZWSUVXX1VSTD1odHRwJTNBJTJGJTJGd3d3LnNla2FpbW9uLmNvbSUyRlZhbHVlQ29tbWVyY2UlMkYmUkVGRVJSRVI9YUhSMGNEb3ZMMk5yTG1wd0xtRndMblpoYkhWbFkyOXRiV1Z5WTJVdVkyOXRMdyZDT09LSUVfRVhQSVJFUz1TdW4sJTIwMjQlMjBBdWclMjAyMDE0JTIwMjM6NDU6MTIlMjBHTVQmdnM9MjI1NDIzNyZ2cD04Nzg2NzIxNDQKCQkJLy9zZWthaW1vbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goIi5zZWthaW1vbi5jb20iKSAmJiBocmVmLm1hdGNoKCJWSUVXX1VSTD1odHRwIikpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiVklFV19VUkwiKTsKCQkJCXNldExpbmsoKTsKCgoJCQkvL+mnv+ays+Wxiz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJzdXJ1Z2EteWEuanAiKSl7CgovL2h0dHA6Ly9hZmZpbGlhdGUuc3VydWdhLXlhLmpwL21vZHVsZXMvYWYvYWZfanVtcC5waHA/dXNlcl9pZD0yMjcmZ29vZHNfdXJsPWh0dHAlM0ElMkYlMkZ3d3cuc3VydWdhLXlhLmpwJTJGZ2FtZS5odG1sCgkJCQlpZihocmVmLm1hdGNoKCJnb29kc191cmw9IikpewoJCQkJCWlmKGdldFJlZGlyZWN0VXJsKGhyZWYsImdvb2RzX3VybCIpICE9ICIiKXsKCQkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiZ29vZHNfdXJsIik7CgkJCQkJCXNldExpbmsoKTsKCQkJCQl9CgkJCQl9CgoKCQkJLy/jg4Tjgq/jg6Ljga7jg4jjg6njg4Pjgqvjg7w9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJ0c3VrdW1vLmNvLmpwIikgPiAtMSAmJiBocmVmLmluZGV4T2YoIj9jaWQ9IikgPiAtMSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1w/Y2lkPS4qJC8sIiIpOwoJCQkJc2V0TGluaygpOwoKCgkJCS8veWFob289PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJ5YWhvby5jby5qcCIpID4gMCl7CgovL2h0dHA6Ly9yZC5saXN0aW5nLnlhaG9vLmNvLmpwL28vc2hvcC9GT1I9UzFpNDNJd3FqbFk2RDdwUWU1N3V4bUdMbnN0WFhRbzF4YnZYaHlldVZoZ3BTYjlKN2pqZ3RIczEuY0RycUEtLTsvYWNsaztfeWx0PUEzSnZkbEpJYURGVFgzNEFNbE9rS2RoRTtfeWx1PVgzb0RNVFJrWlRCemEzRjBCRTlXVEFOT0JGSURNUVJoWkdkeWFXUURPVEkxTVRFNU5EQXhNd1JqYjNOMEEyOWFMbGxPU0hoTGFGZDJhd1JqY25SMmFXUURNekExTnpNMk5UYzJOVE1FWjJOc2JuUnBaQU5sZUhSbGNtNWhiQzE1YWkxd1lYSjBibVZ5TFdjekxXRmtMVEF3TURBME1BUnZiVzBEWlFSelpXTURiM1l0ZEc5d0JITndZV05sYVdRRE1URTFOVEF4TnpFeU5BLS0/c2E9bCZhaT1DYkJVTFNHZ3hVOC1PTE5IQi1RT2U4SUM0QnIzVDh0NEV6WW5yaTNLYm5zbmhVQWdBRUFFZ2lxM0dHeWdDVU9PQ3VMMzVfX19fX3dGZ2ljdkJoT3dUb0FHN2p2UFpBOGdCQWFrQ29iRWtGR0FHUlQ2cUJDQlAwUGxXdWJ2Y2F2eDJjMW9IeHVnRl9jSzBDV2xuWmVOWGo0eUw3T0xoeUtvR0FJQUhyZkdNSnBBSEFRJnNpZz16T3U4cjFJNzVCNklmMlE4Vld6amtrVEtGVjRfYTF5YWlYV18yTVFXeEo0Z2VDRnY1X3k3LyoqaHR0cDovL3d3dy55b2RvYmFzaGkuY29tL2VjL2NhdGVnb3J5L2luZGV4Lmh0bWwlM0Z3b3JkJTNESEQ1OTglMjZ5YWQxJTNEZSUyNnlhZDMlM0RoZDU5OCUyNnlhZDQlM0QzMDU3MzY1NzY1MyUyNnhmciUzRHlhZCUyNnV0bV9zb3VyY2UlM0R5YWhvbyUyNnV0bV9tZWRpdW0lM0RjcGMlMjZ1dG1fdGVybSUzREhENTk4CgkJCQkvL3lhaG9v5bqD5ZGKIOOCueODneODs+OCteODvOODieOCteODvOODgQoJCQkJaWYoaHJlZi5tYXRjaCgvXCpcKmh0dHAvKSl7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLy4qXC9cKlwqaHR0cCguKiQpL2ksJ2h0dHAkMScgKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9yZC55YWhvby5jby5qcC9zaG9wcGluZy9hZHdvcmRzL2V2dD03MTc1OC8wYmM4MHI2LypodHRwOi8vcmQueWFob28uY28uanAvc2hwL2xpc3RpbmcvYWQvZXZ0PTg2MjcwL2V2aj0wYmM4MHI2Lz9odHRwOi8vc3RvcmUuc2hvcHBpbmcueWFob28uY28uanAvZWFzdG5vYm9ydS95MDAxMTkuaHRtbAoJCQkJLy95YWhvb+W6g+WRiijjg6Tjg5Xjgqrjgq/jga7jgqvjg6zjg7Pjg4Djg7zov73liqDjgYzmloflrZfljJbjgZHjga7jgZ/jgoHoqr/mlbTkuK3jgIIKCQkJCS8v44Ki44OV44KjSUTjgYzlkKvjgb7jgozjgovjgYvjgoLjgo/jgYvjgonjgarjgYTjga7jgafkuIDmmYLlh43ntZAp4oaSL2FkL+OBrlVSTOOBruOBv+OBq+WkieabtOOBp+anmOWtkOimiwoJCQkJaWYoaHJlZi5tYXRjaCgvXD9odHRwLykgJiYgaHJlZi5tYXRjaCgvXC9hZFwvLykpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvLipcL1w/aHR0cC8sImh0dHAiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9hcmQueWFob28uY28uanAvU0lHPTE1OXJpcWRsai9NPTMwMDgzOTYyMi4zMDE2OTE2OTcuMzAzMjc5NDUwLjMxMjEwMTE3OS9EPWpwX2F1Y19zanAvUz0yMDg0MjMxNzU2OlNRQi9feWx0PUE3ZFBlQjUxSjRWVHRTb0FlckJNMmpwOC9ZPWpwL0VYUD0xNDAxMjQyNTE3L0w9bVFSOHo3ZFBlX0lGclpwYlV5dGRJd0pIZHZCOElsT0ZKM1VBQ0lqdC9CPU9zYldBTGRQaEFzLS9KPTE0MDEyMzUzMTc2MzEyMjAvU0lHPTEyNDY5ZGg3MS9BPTMwMTg5NzQyMS9SPTAvKmh0dHA6Ly84MTkwLmNvLmpwL3JkL3JkLnBocD9haWQ9eWF1X3NvdXRoXzE0MDUyNl8zCi8vaHR0cDovL2FyZC55YWhvby5jby5qcC9TSUc9MTU5ZjFjOTNxL009MzAwODQyMDU0LjMwMTY5NDU3OS4zMDMyNzk0MjYuMzEyNDQxNzYzL0Q9anBfYXVjX2Rpci9TPTIwODQwMDAwMDM6WVNQL1k9anAvRVhQPTE0MDEyNDM5NDMvTD03djhHbzdkUEY5a0ZyWnBiVXl0ZEl3QWpkdkI4SWxPRkxRY0FCQi5hL0I9RFZYOUFMZFBoQXMtL0o9MTQwMTIzNjc0MzM3NzQxMS9TSUc9MTFqMm1sbGI5L0E9MzAxODk3MzczL1I9MC8qaHR0cDovL2NhcmQueWFob28uY28uanAvY2FtcGFpZ24vCgkJCQkvL3lhaG9v5bqD5ZGKCgkJCQlpZihocmVmLm1hdGNoKC9cL1wqaHR0cC8pKXsKCQkJCQlzdHJVcmwgPSBzdHJVcmwucmVwbGFjZSgvLipcL1wqaHR0cC8sImh0dHAiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9yZC5hbmUueWFob28uY28uanAvcmQ/ZXA9WnU4TTcxdlQ5bWRuZ0FHd2dnWGM3WFNuZjlrdXN6dkh5RmM1VFpiamwyVG5nc2ZDcGNoMHB4cGpjYWdfZy45M3VxVHIyWnlNMVpOT2x4czJMeFNrUE8xTmRWLmwzdHB1OWU2bWhZTDhHOXdxT0tSeGhPSlc0eGozWFFLS3hRdnRxeXF0VUpLZWlmUnVyMjRTdnRlMVVuT0pfMEtXazBKVDhOTkR5R3B2cmRNR1l3LS0mYT1oWTFWamU4X3hENU1ESW83SnctLSZzPUZTaThQcDQ5bFEtLSZ0PURwRVlRSmw2eVFBdnJpZDFzb1E4MzRhbSZDPTkmRD0xJkk9JlJJPWI4MTliOTRjNGUxNjQ0MzQ3NmMzOWU4NDJmMWJjMjQ0JlM9MTI0YTNmZjgwYTg0JmFzPTEmZj0xJmZmPTAmZnFfZD0xLDEsMSwwJmZxX209MywzLDMsMCZmcV93PTEsMSwxLDAmZz00JmxwPWh0dHAlM2EvL3Byb21vdGlvbmFsYWRzLnlhaG9vLmNvLmpwL2Fkcy9saXN0aW5nMDQvJTNmbz1KUDEwMDAmbWFmPTAmbWlkPTAmbz05JnA9OSZxZmlkPSZyPTAmcmZtPSZzZmlkPTAmc2t3aWQ9MCZGPTAmdGxpZD0wJnU9ZGV0YWlsLmNoaWVidWt1cm8ueWFob28uY28uanAvcWEvcXVlc3Rpb25fZGV0YWlsLwoJCQkJLy95YWhvb+W6g+WRiiBZYWhvbyHjg4fjgqPjgrnjg5fjg6zjgqTjgqLjg4njg43jg4Pjg4jjg6/jg7zjgq/vvIhZRE7vvIkKCQkJCWlmKGhyZWYubWF0Y2goL2xwPWh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwibHAiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9vcGVudXNlci5hdWN0aW9ucy55YWhvby5jby5qcC9qcC9zaG93L2F1Y3Rpb25zP3VzZXJJRD3jg6bjg7zjgrbjg7xJRCZ1PeODpuODvOOCtuODvElECgkJCQkvL3lhaG9v44Kq44O844Kv44K344On44Oz44Gu44Ki44OV44Kj44OI44Op44OD44Kr44O844KJ44GX44GN44KC44GuCgkJCQlpZihocmVmLm1hdGNoKCJhdWN0aW9ucy55YWhvby5jby5qcCIpICYmIGhyZWYubWF0Y2goLyhcP3xcJil1PS8pKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgidT0iICsgcGFyYW1zWyJ1Il0sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8q5b+F6aCI44Gu44Gf44KB6Zmk5Y675LiN5Y+v44CC44Kz44Oh44Oz44OI44Ki44Km44OICi8vaHR0cDovL25hdmkuYXVjdGlvbnMueWFob28uY28uanAvanAvY29uZmlnL3JlbWVtYmVyP2FJRD0xODUzOTQxNTkmLmNydW1iPWcvL3NJbTdQMnJkJi5kb25lPWh0dHA6Ly9hdWN0aW9ucy5zZWFyY2gueWFob28uY28uanAvc2VhcmNoP2VpPVVURi04JnA9cm92ZW50YSZhdWNjYXQ9MCZ0YWJfZXg9Y29tbWVyY2UmZWk9VVRGLTgKCQkJCS8veWFob2/jga7jgrvjgq3jg6Xjg6rjg4bjgqPnlKjjga7jg4jjg6njg4Pjgqvjg7zjgajjgYTjgYbjgYvjg6rjg5XjgqHjg6njgb/jgZ/jgYTjgarjgoLjga4o5YCL5Lq65oOF5aCx56K66KqN44Gu44Ot44Kw44Kk44Oz44Gn5b+F6aCI44Gu44Gf44KB6Zmk5Y675LiN5Y+vKQoJCQkJLy8uZG9uZeOBqOOBhOOBhuODkeODqeODoeODvOOCv+OBr+ODquODleOCoeODqeeahOOBquOCguOBruOBqOaAneOCj+OCjOOCiwoJCQkJaWYoaHJlZi5tYXRjaCgvZG9uZT1odHRwLykpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvXCYuZG9uZT1odHRwLiokLywiIik7Ci8vCQkJCQlzZXRMaW5rKCk7CgkJCQl9CiovCgovL2h0dHA6Ly93d3cueW9kb2Jhc2hpLmNvbS9lYy9jYXRlZ29yeS9pbmRleC5odG1sP3dvcmQ9SEQ1OTgmeWFkMT1lJnlhZDM9aGQ1OTgmeWFkND0zMDU3MzY1NzY1MyZ4ZnI9eWFkCgkJCS8v44Oo44OJ44OQ44K3PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigieW9kb2Jhc2hpLmNvbSIpID4gLTEgJiYgaHJlZi5pbmRleE9mKCJ5YWQiKSA+IC0xKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoLyguKmluZGV4Lmh0bWxcP3dvcmQ9KS4qJC9pLCIkMSIpICsgcGFyYW1zWyJ3b3JkIl07CgoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vdHJhY2tpbmcueW91cmd1aWRlLmNvLmpwL2luL3lhLTU3NTA0Mi9odHRwOi8vc2hvcHBpbmcueW91cmd1aWRlLmNvLmpwL3dvcmQvSEQ1OTgvCgkJCS8vdHJhY2tpbmcueW91cmd1aWRlPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigidHJhY2tpbmcueW91cmd1aWRlLmNvLmpwL2luLyIpID4gLTEpewoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8uKnRyYWNraW5nLnlvdXJndWlkZS5jby5qcFwvaW5cLy4qXC8oaHR0cC4qJCkvaSwiJDEiKTsKCgkJCQlzZXRMaW5rKCk7CgoKCQkJLy/lkIzkurrns7s6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OgoKLy9odHRwOi8vd3d3LmFraWJhaW4uY29tL2FmYmMucGhwP2FmaWQ944Ki44OV44Kj44Oq44Ko44Kk44OISUQo5pWw5a2XKSZ1cmw9ZDYvCi8vaHR0cDovL3d3dy5ha2liYWluLmNvbS9hZmZpbGlhdGUucGhwP2FmYmlkPeWVhuWTgUlEJnR5cGU9MCZsaW5rPTEmZGlyPTEmYWZpZD0yCgkJCS8v44Ki44Kt44OQ44Kk44OzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiYWtpYmFpbi5jb20iKT4tMSAmJiBocmVmLmluZGV4T2YoImFmaWQ9IikgPiAtMSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siYWZpZCJdLCIiKTsKCi8vaHR0cDovL3d3dy5ha2liYWluLmNvbS9hZmIucGhwP2FmYmlkPeWVhuWTgUlEJnR5cGU9NCZsaW5rPTAmZGlyPTEo4oaQ44Kr44OG44K044OqKSZhZmlkPeOCouODleOCo+ODquOCqOOCpOODiElEKOaVsOWtlykKLy/mraPjgZfjgYRVUkxodHRwOi8vd3d3LmFraWJhaW4uY29tL2QxKOKGkOOCq+ODhuOCtOODqikvP2Nscz1jbnRkdGwmY2lkPeWVhuWTgUlECgkJCQlpZihocmVmLm1hdGNoKCJhZmJpZD0iKSAmJiBocmVmLm1hdGNoKCJkaXI9IikpewoJCQkJCXN0clVybCA9ICJodHRwOi8vd3d3LmFraWJhaW4uY29tL2QiICsgcGFyYW1zWyJkaXIiXSArICIvP2Nscz1jbnRkdGwmY2lkPSIgKyBwYXJhbXNbImFmYmlkIl07CgkJCQl9CgoJCQkJc2V0TGluaygpOwoKCi8vaHR0cDovL3d3dy5kaWdpa2V0LmNvbS9pbmRleC9fZGF0YS9BRklEPWRsZG91amluLwovL2h0dHA6Ly93d3cuZGlnaWtldC5jb20vd29yay9zaG93L19kYXRhL0lEPUlUTTAwOTk0NjUvQUZJRD1kbGRvdWppbi8KCQkJCWlmKGhyZWYuaW5kZXhPZigiQUZJRD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL0FGSUQ9LipcLy8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL3d3dy5kLWRyb3BzLmNvbS8/YWZfY2Q9QUYxMjY5NgoJCQkvL2QtZHJvcCjplonpjpbihpLlho3plovvvJ8pPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goImQtZHJvcHMuY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgiYWZfY2Q9IikpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKFw/fFwmKWFmX2NkPS4qJC8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL3d3dy5kZC1zdHlsZS5jb20vaW5kZXgucGhwP2FkPTIwNDEKCQkJLy9kZC1TdHlsZT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJkZC1zdHlsZS5jb20iKSl7CgkJCQlpZihocmVmLm1hdGNoKCJhZD0iKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oXD98XCYpYWQ9LiokLywiIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKCQkJLy/jg4fjgrjjgrHjg4Pjg4g9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJkaWdpa2V0LmNvbSIpPi0xKXsKLy9odHRwOi8vd3d3LmRpZ2lrZXQuY29tL3AvYWZsaW5rL19kYXRhL0FGSUQ9ZGxkb3VqaW4vP1VSTD1odHRwJTNBJTJGJTJGd3d3LmRpZ2lrZXQuY29tJTJGY29tbW9uJTJGYWZmaWxpYXRlJTJGCgkJCQlpZihocmVmLmluZGV4T2YoIlVSTD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJVUkwiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly93d3cuZGlnaWtldC5jb20vd29yay9zaG93L19kYXRhL0lEPUlUTTAwOTIwMjAvQUZJRD1rMTA0MDA0MS8KCQkJCWlmKGhyZWYubWF0Y2goL1wvQUZJRD0vKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cQUZJRD0uKj9cLy8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgoJCQkvL0RM44GS44Gj44Gh44KFPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiZ2V0Y2h1LmNvbSIpPi0xICYmIGhyZWYuaW5kZXhPZigiYWYiKSA+IC0xKXsKCQkJCS8v5b+144Gu44Gf44KB5YWI44Gr44Ki44OV44KjSUTmtojljrsKCQkJCWlmKGhyZWYuaW5kZXhPZigiYWZmPSIpID4gLTEpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siYWZmIl0sIiIpOwoJCQkJfQovL2h0dHA6Ly9vcmRlci5nZXRjaHUuY29tL3IucGhwP2FmZj0wMDE1NjAtMDEtMDAmdD0yJmdjZD1EMDAyNTQ3NAovL+ato+OBl+OBhFVSTGh0dHA6Ly9kbC5nZXRjaHUuY29tL2luZGV4LnBocD9hY3Rpb249Z2QmZ2NkPUQwMDI4ODU5CgkJCQlpZihocmVmLmluZGV4T2YoImdjZD0iKSA+IC0xKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCXN0clVybCA9ICJodHRwOi8vZGwuZ2V0Y2h1LmNvbS9pbmRleC5waHA/YWN0aW9uPWdkJmdjZD0iICsgcGFyYW1zWyJnY2QiXTsKCQkJCX0KCgovL+ato+OBl+OBhFVSTGh0dHA6Ly9kbC5nZXRjaHUuY29tL2luZGV4LnBocD9hY3Rpb249bVN0YXRpYyZ0bm89U3RnUExvZ19ORVcKLy/jg4fjgrPjg7zjg4lVUkxodHRwOi8vb3JkZXIuZ2V0Y2h1LmNvbS9yLnBocD9hZmY9JnVybD1odHRwOi8vZGwuZ2V0Y2h1LmNvbS9pbmRleC5waHA/YWN0aW9uPW1TdGF0aWMmdG5vPVN0Z1BMb2dfTkVXKwovL2h0dHA6Ly9vcmRlci5nZXRjaHUuY29tL3IucGhwP2FmZj0wMDAwMTAtMDItMDAmdXJsPWh0dHAlM0ElMkYlMkZkbC5nZXRjaHUuY29tJTJGaW5kZXgucGhwJTNGYWN0aW9uJTNEbVN0YXRpYyUyNnRubyUzRFN0Z1BMb2dfTkVXKwoJCQkJLy9VUkzjg6rjg4DjgqTjg6zjgq/jg4jjga7loLTlkIgKCQkJCWlmKGhyZWYubWF0Y2goInVybD0iKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgoJCQkJCS8v5LiN6KaB44Gq5pyA5b6M44GuK+OCkuWJiumZpAoJCQkJCWlmKHN0clVybC5jaGFyQXQoc3RyVXJsLmxlbmd0aCAtIDEpID09ICIrIil7CgkJCQkJCXN0clVybCA9IHN0clVybC5zbGljZSgwLC0xKTsKCQkJCQl9CgkJCQl9CgovL2h0dHA6Ly9pbWFnZS5nZXRjaHUuY29tL2FwaS9nZXR1cmwucGh0bWwvaWQvNzY5MDAyL2FmLzYwMS9hZnR5cGUvMS9zaWQvODUxL3VybC9zb2Z0LnBodG1sLS8/aWQ9NzY5MDAyCi8v5q2j44GX44GEVVJMaHR0cDovL3d3dy5nZXRjaHUuY29tL3NvZnQucGh0bWw/aWQ9NzY5MDAyCgkJCQlpZihocmVmLm1hdGNoKCIvYWYvIikgJiYgaHJlZi5tYXRjaCgiL2FmdHlwZS8iKSAmJiBocmVmLm1hdGNoKCIvc2lkLyIpKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWZcLy4qP1wvLywiLyIpOwoJCQkJCXN0clVybCA9IHN0clVybC5yZXBsYWNlKC9cL2FmdHlwZVwvLio/XC8vLCIvIik7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoL1wvc2lkXC8uKj9cLy8sIi8iKTsKCQkJCQkKCQkJCQlzdHJVcmwgPSAiaHR0cDovL3d3dy5nZXRjaHUuY29tLyIgKyBzdHJVcmwucmVwbGFjZSgvLipcL3VybFwvKC4qPyktXC8vaSwiJDEiKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgoKCQkJLy9EbHNpdGU9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCIuZGxzaXRlLmNvbSIpID4gLTEgJiYgIGhyZWYubWF0Y2goLyhcL3wlMkYpZGxhZihcL3wlMkYpLykpewoKCi8v5q2j44GX44GEVVJMIGh0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgo4oaQ44K444Oj44Oz44OrKS93b3JrLz0vcHJvZHVjdF9pZC9SSueVquWPty8KLy9odHRwOi8vd3d3LmRsc2l0ZS5jb20vaG9tZS9kbGFmLz0vYWlkL+ODpuODvOOCtuODvElEL3VybC9odHRwOi8vd3d3LmRsc2l0ZS5jb20vbWFuaWF4L3dvcmsvPS9wcm9kdWN0X2lkL1JK55Wq5Y+3Lmh0bWwvP21lZGl1bT1ibG9nJnByb2dyYW09b25fc2FsZSZzb3VyY2U9YmxvZ3BhcnRzX3ZfcmFua2luZwovL2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvd29yay89L3Byb2R1Y3RfaWQvUkrnlarlj7cvP21lZGl1bT1ibG9nJnByb2dyYW09b25fc2FsZSZzb3VyY2U9YmxvZ3BhcnRzX1JhbmtpbmdQYXJ0cyZ1bmlxdWVfb3A9YWYKCQkJCS8v5ZWG5ZOB44Oa44O844K444G444Gu44K444Oj44Oz44OX44Kv44OD44K344On44Oz44KS5YmK6ZmkCgkJCQlpZihocmVmLmluZGV4T2YoIi91cmwvaHR0cCIpID4gLTEpewoJCQkJCWN1dE51bT1ocmVmLmluZGV4T2YoIi91cmwvaHR0cCIpOwoJCQkJCXN0clVybD1ocmVmLnNsaWNlKGN1dE51bSs1KTsKCgkJCQkJc3RyVXJsPXN0clVybC5yZXBsYWNlKC8uaHRtbC4qJC8sIi8iKTsKCgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoL1w/LiokLywiLyIpOwoKLy/mraPjgZfjgYRVUkwgaHR0cDovL3d3dy5kbHNpdGUuY29tL21hbmlheC93b3JrLz0vcHJvZHVjdF9pZC9SSueVquWPty8KLy9odHRwOi8vd3d3LmRsc2l0ZS5jb20vbWFuaWF4L2RsYWYvPS9saW5rL3dvcmsvYWlkL+ODpuODvOOCtuODvElEL2lkL1JK55Wq5Y+3Lmh0bWwKLy9odHRwOi8vbWFuaWF4LmRsc2l0ZS5jb20vZGxhZi89L2xpbmsvd29yay9haWQv44Om44O844K244O8SUQvaWQvUkrnlarlj7cuaHRtbAoJCQkJLy/llYblk4Hjg5rjg7zjgrgKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL2lkXC8oUnxCfFYpSi8pICl7CgoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLy5odG1sLiokLywiLyIpLnJlcGxhY2UoL2FpZFwvICpbXHNcU10qXC9pZC8sJz0vcHJvZHVjdF9pZCcpLnJlcGxhY2UoL1wvZGxhZlwvPVwvbGluay8sJycpOwoKLy/mraPjgZfjgYRVUkxodHRwOi8vd3d3LmRsc2l0ZS5jb20vbWFuaWF4L2NpcmNsZS9wcm9maWxlLz0vbWFrZXJfaWQvUkfnlarlj7cuaHRtbAovL2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvZGxhZi89L2xpbmsvcHJvZmlsZS9haWQv44Om44O844K244O8SUQvbWFrZXIvUkfnlarlj7cuaHRtbAoJCQkJLy/lh7rniYjjgrDjg6vjg7zjg5cKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL21ha2VyXC8oUnxCKUcvKSl7CgkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvZGxhZlwvICpbXHNcU10qXC9tYWtlci8sJ21ha2VyJyk7CgovL2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvZGxhZi89L2FpZC8vdXJsL2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9ob21lL3dlbGNvbWUKCQkJCS8v44OI44OD44OX44Oa44O844K444Go44GL44O744O744O75LiA5bqm44Om44O844K244O8SUTjga5VUkzplovjgY/jgajjgq/jg4Pjgq3jg7zjgYzmrovjgovjgaPjgb3jgYQKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goIi91cmwvIikpewoJCQkJCWlmKGhyZWYuaW5kZXhPZigiL3VybC8iKSA+IC0xKXsKCQkJCQkJc3RyVXJsPWhyZWYucmVwbGFjZSgvXC91cmxcL2h0dHA6XC9cLy4qJC8sIiIpLnJlcGxhY2UoLy5odG0vLCIvIik7CgoJCQkJCX0KCi8vaHR0cDovL3d3dy5kbHNpdGUuY29tL2hvbWUvZGxhZi89L2FpZC/jg6bjg7zjgrbjg7xJRC9saW5rL3RvcC5odG1sCi8vaHR0cDovL3d3dy5kbHNpdGUuY29tL21hbmlheC9kbGFmLz0vYWlkL+ODpuODvOOCtuODvElEL3llYXIvMjAxNC9tb250aC81L2RheS8zMS9saW5rL25ld3MuaHRtbAovL+OBk+OBhuOBmeOCi+OBqOOCouODleOCo+ODquOCqOOCpOODiOa2iOOBm+OCi2h0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvZGxhZi89L3llYXIvMjAxNC9tb250aC81L2RheS8zMS9saW5rL25ld3MuaHRtbAovL2RsYWYvPS/jgYLjgorjgafjgrXjgqTjg4jjgavooYzjgY/jgajjg4jjg6njg4Pjgqvjg7zjg5Hjg6njg6Hjg7zjgr/jgYzku5jjgYTjgaHjgoPjgYbjgZHjganogp3lv4Pjga7jgqLjg5XjgqPjg6rjgqjjgqTjg4hJROeEoeOBhOOBruOBp+OBiuOBneOCieOBj+eEoeWuswovL+ato+OBl+OBhFVSTGh0dHA6Ly93d3cuZGxzaXRlLmNvbS9tYW5pYXgvbmV3Lz0veWVhci8yMDE0L21vbi81L2RheS8zMS8KCQkJCS8v44Gd44Gu5LuWCgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCIvYWlkLyIpKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWlkXC8uKj9cLy8sIi8iKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgkJCQkvL0NTU+S/ruatowoJCQkJZGxzaXRlQ1NTKCkKCgkJCS8vRGxzaXRl5q6L44KKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiLmRsc2l0ZS5jb20iKSA+IC0xKXsKCQkJCWlmKGhyZWYuaW5kZXhPZigiLz8iKSA+IC0xKXsKCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC9cL1w/LiokLywiLyIpOwoJCQkJCXNldExpbmsoKTsKCQkJCQlkbHNpdGVDU1MoKQoJCQkJfQoKCgkJCS8vRE1NPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goLy5kbW0uY28obXwuanApLykgJiYgaHJlZi5pbmRleE9mKCJfYXJ0aWNsZT0iKTwwKXsKCQkJCWlmKGhyZWYuaW5kZXhPZigiX2x1cmw9IikgPiAtMSl7CgkJCQkJY3V0TnVtPWhyZWYuaW5kZXhPZigiX2x1cmw9Iik7CgkJCQkJc3RyVXJsPWhyZWYuc2xpY2UoY3V0TnVtKzYpOwoJCQkJfQoKaHR0cDovL3d3dy5kbW0uY28uanAvZGMvZG91amluLy0vbGlzdC89L2FydGljbGU9bWFrZXIvaWQ9MjUxMzgvY2hlZWthbWE1OC0wMDEKCQkJCWlmKGhyZWYuaW5kZXhPZigiL2lkPSIpID4gLTEpewoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyguKlwvaWQ9Lio/XC8pLiokL2ksJyQxJyk7CgkJCQl9CgovL2h0dHA6Ly93d3cuZG1tLmNvLmpwL21vbm8vYm9vay8tL2RldGFpbC89L2NpZD3llYblk4FJRC/jgqLjg5XjgqPjg6rjgqjjgqTjg4hJRAoJCQkJaWYoaHJlZi5pbmRleE9mKCIvY2lkPSIpID4gLTEpewoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLyguKlwvY2lkPS4qP1wvKS4qJC9pLCckMScpOwoJCQkJfQoKLy9odHRwOi8vd3d3LmRtbS5jby5qcC9wcG0vPS9famxvZmY9MS8xMjNkLTAwNgovL2h0dHA6Ly93d3cuZG1tLmNvLmpwL2RpZ2l0YWwvZG91amluLz0vX2psb2ZmPTEvZG91amluLTAwMQovL2h0dHA6Ly93d3cuZG1tLmNvbS9yZW50YWwvLS9kZXRhaWwvPS9jaWQ9MDAwXzM4NC9famxvZmY9MS8KCQkJCWlmKGhyZWYuaW5kZXhPZigiX2psb2ZmPSIpPi0xKXsKCQkJCQlzdHJVcmw9aHJlZi5yZXBsYWNlKC9cL19qbG9mZj0uKiQvaSwnLycpOwoJCQkJCi8vaHR0cDovL3d3dy5kbW0uY29tL2RpZ2l0YWwvdmlkZW8vbW9uZG8vbW9yb3lhbWFfcG9yb3JpL2luZGV4X2h0bWwvPS9jaF9uYXZpPS9qbG9mZi0wMDEKCQkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiamxvZmYtIik+LTEpewoJCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoL1wvamxvZmYtLiokLywnLycpOwoJCQkJfQoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vYWQuYy1hdHMuanAvYWQvcC9yP19zaXRlPTY3Jl9hcnRpY2xlPTc0Jl9saW5rPTkzJl9pbWFnZT05MwovL2h0dHA6Ly9hZC5tYWlzdC5qcC9hZC9wL3I/X3NpdGU9MTAxNjUmX2xvYz0xMDQ1MCZfY2FtcGFpZ249NjYzJl9hcnRpY2xlPTU3NzcmX2xpbms9MzQzNDYmX2ltYWdlPTM1NTIxJl9kZWxpdmVyPTEKLy9odHRwOi8vYWQuZG1tLmNvbS9hZC9wL3I/X3NpdGU9OTk5OTk5OSZfYXJ0aWNsZT0xMDUyJl9saW5rPei7oumAgeWFiOOBrlVSTOaMh+WumueUqOOBruaVsOWtlyZfaW1hZ2U95LiN5piO44Gq5pWw5a2XCi8vaHR0cDovL2FwcC1hZGZvcmNlLmpwL2FkL3Avcj9fc2l0ZT05MzY0Jl9hcnRpY2xlPTU2Njc0Jl9saW5rPTE3MzEyOTAmX2ltYWdlPTE3MzEyOTEmc3VpZD1lYWUwOGZmNmQ1MWU2OGU4MTc4OGNhYTM3Y2Q3ZWI4MDQzNTI3MmM3YWE2OGJmNjQzMjM3MzkwNGRmZmU5NjdjJnNhZD0zMjQzNzkyMzgKLy/mnIDlsI/mp4vmiJAoX2xpbmvjgYzlv4XopoHjgarloLTlkIjjgoLjgYLjgovvvJ8paHR0cDovL2FwcC1hZGZvcmNlLmpwL2FkL3Avcj9fYXJ0aWNsZT01NjY3NCZfaW1hZ2U9MTczMTI5MQoJCQkvL0RNTeezu+OBquOBruOBi+OBqu+8n19zaXRl44GM44Ki44OV44Kj44Go5oCd44KP44KM44KL44GM5raI44GZ44Go5oCS44KJ44KM44KL5aC05ZCI44GM44GC44KL44Gu44Gn44GC44KK44GI44Gq44GE5aSn44GN44GE5pWw5a2X5oyH5a6a44CCX2FydGljbGXjgYxVUkzmjIflrpo9PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoIl9hcnRpY2xlPSIpPi0xKXsKCQkJCXZhciBzdHJTaXRlID0gIiI7CgkJCQl2YXIgc3RyTGluayA9ICIiOwoJCQkJdmFyIHN0ckltYWdlID0gIiI7CgoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCgkJCQlpZihocmVmLmluZGV4T2YoIl9zaXRlPSIpPi0xKXsKCQkJCQlzdHJTaXRlID0gIiZfc2l0ZT05OTk5OTk5OTk5OSI7CgkJCQl9CgkJCQlpZihocmVmLmluZGV4T2YoIl9saW5rPSIpPi0xKXsKCQkJCQlpZihwYXJhbXNbIl9saW5rIl0gIT0gIiIpewoJCQkJCQlzdHJMaW5rID0gIiZfbGluaz0iICsgcGFyYW1zWyJfbGluayJdOwoJCQkJCX0KCQkJCX0KCQkJCWlmKGhyZWYuaW5kZXhPZigiX2ltYWdlPSIpPi0xKXsKCQkJCQlpZihwYXJhbXNbIl9pbWFnZSJdICE9ICIiKXsKCQkJCQkJc3RySW1hZ2UgPSAiJl9pbWFnZT0iICsgcGFyYW1zWyJfaW1hZ2UiXTsKCQkJCQl9CgkJCQl9CgoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cPy4qJC8sIj9fYXJ0aWNsZT0iKSArIHBhcmFtc1siX2FydGljbGUiXSArIHN0clNpdGUgKyBzdHJMaW5rICsgc3RySW1hZ2U7CgoJCQkJc2V0TGluaygpOwoKCQkJLy/jgY7jgoXjgaPjgag9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiZ3l1dHRvLmNvbSIpICYmIGhyZWYubWF0Y2goL1wvYWYtLykpewoKCi8vZ3l1dHRvLmNvbS9ib29rL2FmLTEyOTkvYi02MS9hZnR5cGUtMi8o4oaQ5pyA5b6M44Gu44K544Op44OD44K344Ol44GM54Sh44GEVVJM44KC44GC44KL44Gu44Gn5rOo5oSPKQoJCQkJaWYoaHJlZi5tYXRjaCgvYWZ0eXBlLipcLy8pKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWYtLiphZnR5cGUuKj9cLy8sIi8iKTsKCi8vaHR0cDovL2d5dXR0by5jb20vY2FydC9hZi05MjU2L2FmdHlwZS0xP2FjdGlvbj1hZGQmaWQ9MTA0NDA5Jml0ZW1fcHJpY2VfaWQ9MTUyODE5Ci8v5q2j44GX44GEVVJMaHR0cDovL2d5dXR0by5jb20vY2FydC8/YWN0aW9uPWFkZCZpZD0xMDQ0MDkmaXRlbV9wcmljZV9pZD0xNTI4MTkKCQkJCX1lbHNlIGlmKGhyZWYubWF0Y2goImlkPSIpICYmIGhyZWYubWF0Y2goIml0ZW1fcHJpY2VfaWQiKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9hZi0uKlw/LywiPyIpOwoKLy9odHRwOi8vZ3l1dHRvLmNvbS9hZi05ODc4KOKGkOOCouODleOCo+ODquOCqOOCpOODiElEKS9zZWFyY2gvc2VhcmNoX2xpc3QucGhwP3ByZVBhZ2U9JmFjdGlvbj1zb3J0JmdlbnJlX2lkPTIwNjg3Jm1vZGU9c2VhcmNoJnN1Yl9jYXRlZ29yeV9pZD0xNiZzZWFyY2hfaXRlbV9zZWFyY2hfaWQ9JnNldF9jYXRlZ29yeV9mbGFnPTEmc3R5cGU9bmV3CgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9cL2FmLS4qP1wvLykgJiYgIWhyZWYubWF0Y2goImFmdHlwZSIpKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWYtLio/XC8vLCIvIik7CgoJCQkJfWVsc2V7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cL2FmLS4qJC8sIiIpOwoJCQkJfQoKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL2d5dXQudG8vY2F0ZWdvcnkucGh0bWw/YWZpZD03NjctVCZpdGVtPTExNTY4NAovL+S/ruato2h0dHA6Ly9neXV0LnRvL2l0ZW0xMTU2ODQKLy/jgZ3jga7lvozpo5vjgbZodHRwOi8vZ3l1dHRvLmNvbS9pL2l0ZW0xMTU2ODQKCQkJLy/jgY7jgoXjgaPjgag9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiZ3l1dC50byIpKXsKCQkJCWlmKGhyZWYubWF0Y2goImFmaWQ9IikgJiYgaHJlZi5tYXRjaCgiaXRlbT0iKSl7CgkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQlzdHJVcmwgPSAiaHR0cDovL2d5dXQudG8vaXRlbSIgKyBwYXJhbXNbIml0ZW0iXTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cubWVsb25ib29rcy5jb20vaW5kZXgucGhwP21haW5fcGFnZT1hZmZpX2dvJmFmZmlfdXJsPWh0dHAlM0ElMkYlMkZ3d3cubWVsb25ib29rcy5jb20lMkZpbmRleC5waHAlM0ZtYWluX3BhZ2UlM0RpbmRleCUyNmFnZSUzRDElMjZjYXRlZ29yeSUzRDAmYWZmaV9pZD1kb3VqaW4KCQkJLy/jg6Hjg63jg7Pjg5bjg4Pjgq/jgrk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgibWVsb25ib29rcy5jb20iKSl7CgkJCQlpZihocmVmLm1hdGNoKCJhZmZpX3VybD0iKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwiYWZmaV91cmwiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9Ci8vaHR0cDovL3d3dy5tZWxvbmJvb2tzLmNvbS9pbmRleC5waHA/bWFpbl9wYWdlPXByb2R1Y3RfaW5mbyZwcm9kdWN0c19pZD1JVDAwMDAxNTk5NjkjLlU0bm53MUZRSlVNLnR3aXR0ZXIKCQkJCWlmKGhyZWYubWF0Y2goIiMuIikpewoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvI1wuLiokLywiIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKLy9odHRwOi8vbWFya2V0LnN1cnBhcmEuY29tL2dvLz9JSUQ95ZWG5ZOBSUQmQUZJRD3jgqLjg5XjgqPjg6rjgqjjgqTjg4hJRAovL2h0dHA6Ly9tYXJrZXQuc3VycGFyYS5jb20vZ28vP0FGSUQ944Ki44OV44Kj44Oq44Ko44Kk44OISUQmSUlEPeWVhuWTgUlECgkJCS8v44K144O844OR44OpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goInN1cnBhcmEuY29tIikgJiYgaHJlZi5tYXRjaCgiQUZJRCIpKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJBRklEIl0sIiIpOwoKCQkJCXNldExpbmsoKTsKCgkJCS8v44Gd44Gu5LuWOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCgoJCQl9ZWxzZXsKCQkJfQoKCgkJCS8v44K544Oe44Ob6Zai6YCjKOeEoemnhOOBi+OCguOBl+OCjOOBquOBhOOBkeOBqeS9meWIhuOBquODkeODqeODoeODvOOCv+WJiumZpCktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9odHRwOi8vYXBwZHJpdmVyLmpwL3Mvc21hcnQtYy9jbGljaz9kaWdlc3Q9ZmYzZTQyYjgzZWVhNjU4NzM2Y2FkZTgwZmQ2YzBhN2ZhYWY0NDc0ODRmY2RhZDBkMDBhY2YyNTNhMmE0YzIzZCZjYW1wYWlnbl9pZD0xNzU3MSZpZGVudGlmaWVyPTJ3NG9sVnRDCgkJCS8vYXBwLWFkZm9yY2U9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQlpZihocmVmLm1hdGNoKCJhcHBkcml2ZXIuanAvcy8iKSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL2lkZW50aWZpZXI9LiokLywnaWRlbnRpZmllcj0nKTsKCQkJCQoJCQkJc2V0TGluaygpOwoKCgkJCS8v44Gd44Gu5LuWOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCgkJCX1lbHNlewoKCQkJfQoKCgoKCQkJLy/mtbflpJbjgqLjg5XjgqPjgrXjgqTjg4jplqLpgKMo54Sh6aeE44GL44KC44GX44KM44Gq44GE44GR44Gp5L2Z5YiG44Gq44OR44Op44Oh44O844K/5YmK6ZmkKS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKLy9odHRwOi8vc2NyaXB0cy5hZmZpbGlhdGVmdXR1cmUuY29tL0FGQ2xpY2suYXNwP2FmZmlsaWF0ZUlEPTMwNjgwMCZtZXJjaGFudElEPTYyODYmcHJvZ3JhbW1lSUQ9MTczNTcmbWVkaWFJRD0xNDE1OTUmdHJhY2tpbmc9RWJzZXRwaG90b3MuY29tJnVybD0KLy9odHRwOi8vc2NyaXB0cy5hZmZpbGlhdGVmdXR1cmUuY29tL0FGQ2xpY2suYXNwP21lcmNoYW50SUQ9OTk5OTk5OTkmcHJvZ3JhbW1lSUQ9MTczNTcmbWVkaWFJRD05OTk5OTk5OTkmdHJhY2tpbmc9CgkJCS8vYWZmaWxpYXRlIGZ1dHVyZSjmtbflpJYpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJaWYoaHJlZi5tYXRjaCgiYWZmaWxpYXRlZnV0dXJlLmNvbSIpICYmIGhyZWYubWF0Y2goImFmZmlsaWF0ZUlEPSIpKXsKCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1w/LiokLywiIikgKyAiP3Byb2dyYW1tZUlEPSIgKyBwYXJhbXNbInByb2dyYW1tZUlEIl0gKyAiJm1lcmNoYW50SUQ9OTk5OTk5OTkmbWVkaWFJRD05OTk5OTk5OTkmdHJhY2tpbmc9IjsKCQkJCXNldExpbmsoKTsKCgovL2h0dHA6Ly9hZmZpbGlhdGVzLmpsaXN0LmNvbS9jbGljay80NzIxP3VybD1odHRwOi8vd3d3LmpsaXN0LmNvbS9wcm9kdWN0L1BSRTM2NTcKCQkJLy9BZmZpbGlhdGUgamxpc3Qo5rW35aSW57O7KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJhZmZpbGlhdGVzLmpsaXN0LmNvbSIpKXsKCQkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJil1cmw9aHR0cC8pKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmwiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly93d3cuYXdpbjEuY29tL2NyZWFkLnBocD9hd2lubWlkPTU2MTgmYXdpbmFmZmlkPSEhIWlkISEhJmNsaWNrcmVmPSZwPWh0dHAlM0ElMkYlMkZ3d3cub2thZGlyZWN0LmNvbSUyRm91dGxldCUyRiAKCQkJLy9BZmZpbGlhdGUgV2luZG93KOa1t+Wkluezuyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgiYXdpbjEuY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgvKFw/fFwmKXA9aHR0cC8pKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJwIik7CgkJCQkJc2V0TGluaygpOwoKLy9odHRwczovL3d3dy5hd2luMS5jb20vYXdjbGljay5waHA/bWlkPTEwNzQmaWQ9MTc2OTE3CgkJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpaWQ9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siaWQiXSwiIikucmVwbGFjZSgvKFw/fFwmKWlkPS8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL3d3dy5jZGphcGFuLmNvLmpwL2FmZi9jbGljay5jZ2kvUHl0SlRHVzdMb2svNDc1OS9BMDEzNjExL2dvb2RzJTJGZ29vZHNfZGV0YWlsLmh0bWw/S0VZPU5FT0dEUy0xMDY0OTkKLy/mraPjgZfjgYRodHRwOi8vd3d3LmNkamFwYW4uY28uanAvcHJvZHVjdC9ORU9HRFMtMTA2NDk5CgkJCS8vY2RKYXBhbijmtbflpJYpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvd3d3LmNkamFwYW4uY28uanBcL2FmZlwvLykpewoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCgkJCQlpZihwYXJhbXNbIktFWSJdICE9ICIiKXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvYWZmXC8uKktFWT0vLCIvcHJvZHVjdC8iKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly93d3cuY2RqYXBhbi5jby5qcC9jZ2ktYmluL2FmZmNsaWNrLmNnaT9LRVk9JnRvPWh0dHAlM0ElMkYlMkZ3d3cuY2RqYXBhbi5jby5qcCUyRmRldGFpbHZpZXcuaHRtbCZjbGljaz01OWNUaSUyRkguZFlEQXNUQXFlMXVhVE81UGE4V0ImaXNfbmVvbG9nPTAKCQkJLy9jZEphcGFuKOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC93d3cuY2RqYXBhbi5jby5qcFwvY2dpLWJpblwvYWZmY2xpY2suY2dpLykgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKXRvPWh0dHAvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ0byIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3LmNsaXhnYWxvcmUuY29tL1BTYWxlLmFzcHg/QklEPTMzMjI4JkFmSUQ9MTgxNjAxJkFkSUQ9NDY4NSZMUD13d3cud2luZW1ha2Vyc2Nob2ljZS5jb20uYXUKCQkJLy9jbGl4Z2Fsb3JlKOa1t+Wkluezu+OCouODleOCoyk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJjbGl4Z2Fsb3JlLmNvbSIpID4gLTEgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKUxQPS8pKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsIkxQIik7CgkJCQlpZighc3RyVXJsLm1hdGNoKC9eaHR0cC8pKXsKCQkJCQlzdHJVcmwgPSAiaHR0cDovLyIgKyBzdHJVcmw7CgkJCQl9CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly93d3cuamRvcW9jeS5jb20vY2xpY2stNzQ3NDc3OS0xMDY3NjAyNj91cmw9aHR0cCUzQSUyRiUyRnd3dy5kaXNuZXlzdG9yZS5jb20lMkZ0cmFuc2ZlciUyRjIyNDUxMCUyRnRlZXMtdG9wcy1zaGlydHMtY2xvdGhlcy1jb3VudHJ5LWJlYXItamFtYm9yZWUtYXR0cmFjdGlvbi1wb3N0ZXItdGVlLWZvci1hZHVsdHMtbGltaXRlZC1hdmFpbGFiaWxpdHklMkZtcCUKLy9odHRwOi8vd3d3LnRrcWxoY2UuY29tL2NsaWNrLTc0NzQ3NzktMTA2NzYwMjY/dXJsPWh0dHAlM0ElMkYlMkZ3d3cuZGlzbmV5c3RvcmUuY29tJTJGdHJhbnNmZXIlMkYyMjQ1MTAlMkZ0ZWVzLXRvcHMtc2hpcnRzLWNsb3RoZXMtY291bnRyeS1iZWFyLWphbWJvcmVlLWF0dHJhY3Rpb24tcG9zdGVyLXRlZS1mb3ItYWR1bHRzLWxpbWl0ZWQtYXZhaWxhYmlsaXR5JTJGbXAlMkYxMzU2Mjk2JTJGMTAwMDIyOCUyRiUzRkNNUCUzREFGTC1BZmZMU0dlbiUyNmF0dCUzRExTR2VuQWZmbCZjanNrdT03NTA1MDU1ODgwNDkwTQoJCQkvL0NvbW1pc3Npb24gSnVuY3Rpb24o5rW35aSWKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCS8v44Oq44OA44Kk44Os44Kv44OI5b6M44Gr5rCX5LyR44KB56iL5bqm44Gr5L+u5q2jCgkJCX1lbHNlIGlmKGhyZWYuaW5kZXhPZigiamRvcW9jeS5jb20iKSA+IC0xICB8fCBocmVmLm1hdGNoKCJ0a3FsaGNlLmNvbSIpKXsKCQkJCWlmKGhyZWYubWF0Y2goInVybD1odHRwIikpewoJCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInVybCIpOwoJCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3d3dy5qZG9xb2N5LmNvbS9jbGljay03NDc0Nzc5LTEwNjc2MDI2CgkJCQl9ZWxzZXsKCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1wvY2xpY2stLio/LS8sIi9jbGljay0wLSIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL2NqLmRvdG9taS5jb20vcGIxMTVndjMyTC92MTYvS0tNTk1PUUovSi9KL0ovSj93PWQlM0MlM0NxMjJ5JTNBJTJGJTJGNTU1LnNteHp4bDcubHh2JTNBSDklMkZsdXJsdC05LUFBQ0RDRUc5JTNDJTNDUCUzQ3EyMnklM0ElMkYlMkY1NTUuc214enhsNy5seHYlMkYlM0MKCQkJLy9Db21taXNzaW9uIEp1bmN0aW9uKOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJkb3RvbWkuY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgvXD8vKSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cPy4qJC8sIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCi8vaHR0cDovL2dldC5lc2VsbGVyYXRlLm5ldC9nZXQvQUxQNDA0ODk1NjM2L2RlZmF1bHQuaHRtP3NrdWlkPVNLVTgyOTE2NDEzMzIwJmFmZmlkPUFGTDgzOTE2NTA2MjAmYXQ9CgkJCS8vZXNlbGxlcmF0ZSjmtbflpJbns7spPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goImVzZWxsZXJhdGUubmV0IikpewoJCQkJaWYoaHJlZi5tYXRjaCgvKFw/fFwmKWFmZmlkPUFGTC8pKXsKCQkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFmZmlkIl0sIiIpLnJlcGxhY2UoLyhcP3xcJilhZmZpZD0vLCIiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly90cmFjay5tb3JlbmljaGUuY29tL2hpdC5waHA/dz0yNDUzNjImcz0yNTYKCQkJLy9Nb3JlTmljaGUo5rW35aSW57O7KT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJ0cmFjay5tb3JlbmljaGUuY29tIikpewoJCQkJaWYoaHJlZi5tYXRjaCgvKFw/fFwmKXc9LykpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sidyJdLCIiKS5yZXBsYWNlKC8oXD98XCYpdz0vLCIiKTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly90cmFjay5vbWd1ay5jb20vP0FJRD01NzM4NzQmTUlEPTUxOTUxMiZQSUQ9MTEyODUmQ0lEPTQxNDgyMjMmQ1JJRD02MjM1NSZXSUQ9NTAyMTAKCQkJLy9PbmxpbmUgTWVkaWEgR3JvdXAo5rW35aSWKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCS8vQUlE44GM44Ki44OV44KjUElE44GM44Oa44O844K444Gn44Gp44Gh44KJ44KC5raI44Gb44Gq44GE44CC6aOb44KT44Gg44GC44Go44Gu44Oa44O844K444KS5L+u5q2j44GX44Gm5a++5b+cKOawl+S8keOCgSkKCQkJLy9DUklE44Gv55S75YOPVVJM44Gj44G944GECgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3RyYWNrLm9tZyh1a3wyfC4qKS5jb20vKSAmJiBocmVmLm1hdGNoKCJXSUQ9IikpewoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvXD8uKiQvLCIiKSArICI/QUlEPSIgKyBwYXJhbXNbIkFJRCJdICsgIiZQSUQ9IiArIHBhcmFtc1siUElEIl0gKyAiJkNSSUQ9IiArIHBhcmFtc1siQ1JJRCJdOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3Lm15ZGVhbC5jb20ubXkvdHJhdmVsLz9hX2FpZD0xMjM0NTY3ODkxCgkJCS8vT25saW5lIE1lZGlhIEdyb3VwKOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9teWRlYWwuY29tLm15LykgJiYgaHJlZi5tYXRjaCgiYV9haWQ9IikpewoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFfYWlkIl0sIiIpLnJlcGxhY2UoImFfYWlkPSIsIiIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vd3d3LnBhaWRvbnJlc3VsdHMubmV0L2MvMzc2NDUvMS84NzYvMAoJCQkvL3BhaWQgb24gcmVzdWx0cyjmtbflpJYpPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3BhaWRvbnJlc3VsdHMubmV0XC9jXC8vKSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL3BhaWRvbnJlc3VsdHMubmV0XC9jXC8oLio/KVwvaS8sIjk5OTk5OTk5OTkiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3NlY3VyZS5zdHJhd2JlcnJ5bmV0LmNvbS9jalBhZ2UuYXNweD91cmw9aHR0cCUzQS8vdXMuc3RyYXdiZXJyeW5ldC5jb20vbmV3LWN1c3RvbWVyLwoJCQkvL3NlY3VyZS5zdHJhd2JlcnJ5bmV0P+a1t+WkluOBquOBruOBp+OCiOOBj+OCj+OBi+OCk+OBquOBhOOBkeOBqUNvbW1pc3Npb24gSnVuY3Rpb27jgYvjgonpo5vjgpPjgaAKCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgic2VjdXJlLnN0cmF3YmVycnluZXQuY29tIikgJiYgaHJlZi5tYXRjaCgvKFw/fFwmKXVybD1odHRwLykpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHBzOi8vd3d3LnNoYXJlYXNhbGUuY29tL3IuY2ZtP3U9ODQxMTU2JmI9MjM0Nzg2Jm09Mjc2MDEmYWZmdHJhY2s9JnVybGxpbms9d3d3JTJFdGlja2V0Zmx5JTJFY29tJQoJCQkvL3NoYXJlYXNhbGUo5rW35aSWKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJLy91cmxsaW5r44Gu5oyH5a6a44GM44Gq44GE44KC44Gu44KC44GC44Gj44Gf44GR44Gp44CB5L+u5q2j5LiN5Y+v6IO944Gg44Gj44GfKOODkeODqeODoeODvOOCv3Xjgaht44KS6Ieq5YiG44Gu54mp44Gr5beu44GX5pu/44GI44KM44Gw6KGM44GR44KL44G/44Gf44GEKQoJCQkvL2I95pys5p2l44GuVVJM44CBdT3jgqLjg5XjgqPjg6rjgqjjgqTjg4hJROOAgW0944Ki44OV44Kj44Oq44Ko44Kk44OISUTjgajntJDjgaXjgYTjgabjgYTjgovkvZXjgYvjga7mlbDlgKQKCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgic2hhcmVhc2FsZS5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpdXJsbGluaz0vKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmxsaW5rIik7CgoJCQkJaWYoIXN0clVybC5tYXRjaCgvXmh0dHAvKSl7CgkJCQkJc3RyVXJsID0gImh0dHA6Ly8iICsgc3RyVXJsOwoJCQkJfQoKCQkJCXNldExpbmsoKTsKCgovL2h0dHA6Ly9jbGt1ay50cmFkZWRvdWJsZXIuY29tL2NsaWNrP3A9MjE4NzQmYT0yMjEyNzUwJmc9MjEyMjU2MzImZXBpPWJkcGNzZGJwY3VrMjcxMgoJCQkvL1RyYWRlZG91YmxlcijmtbflpJbns7spPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL3RyYWRlZG91Ymxlci5jb21cLy8pKXsKCQkJCWlmKGhyZWYubWF0Y2goImc9IikpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9cPy4qJC8sIiIpOwoKCQkJCQlzdHJVcmwgPSBzdHJVcmwgKyAiP3A9IiArIHBhcmFtc1sicCJdICsgIiZhPSIgKyBwYXJhbXNbImEiXTsKCQkJCQlzZXRMaW5rKCk7CgkJCQl9CgovL2h0dHA6Ly9zb2x1dGlvbnMudHJhZGVkb3VibGVyLmNvbS9yZWRpcmVjdC9leHBlZGlhLz90ZF9wcm9ncmFtX2lkPTIxODc0JkFGRkNJRD1leHBlLnVrLjAwMS4wMDAuMjIxMjc1MC4wJmN1aWQ9ZTYxMDIxZWFmM2NlMjg0YzE2NDc4MjU1MmEwOWUxMDAmQUZGTElEPSZ1cmw9aHR0cCUzQSUyRiUyRnd3dy5leHBlZGlhLmNvLnVrCgkJCQlpZihocmVmLm1hdGNoKC8oXD98XCYpdXJsPWh0dHAvKSl7CgkJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwidXJsIik7CgkJCQkJc2V0TGluaygpOwoJCQkJfQoKLy9odHRwOi8vdHJhY2sud2ViZ2FpbnMuY29tL2NsaWNrLmh0bWw/d2dwcm9ncmFtaWQ9NTU4NiZ3Z2NhbXBhaWduaWQ9JTVFJTVFJTVFY2FtcGFpZ25faWQlNUUlNUUlNUUmd2d0YXJnZXQ9aHR0cDovL3RyYWNrLndlYmdhaW5zLmNvbS9jbGljay5odG1sP3dnY2FtcGFpZ25pZD0lNUUlNUUlNUVjYW1wYWlnbl9pZCU1RSU1RSU1RSZ3Z3Byb2dyYW1pZD01NTg2JndndGFyZ2V0PWh0dHA6Ly93d3cuaWRlbnRpdHlkaXJlY3QuY28udWsvbXktc3BlY2lhbC1jaHJpc3RtYXMtYWR2ZW50dXJlLWJpZy5odG1sP21pZD0xMzA2NCZ1dG1fc291cmNlPXdlYmdhaW5zJnV0bV9tZWRpdW09YWZmaWxpYXRlJnV0bV9jYW1wYWlnbj0xMzA2NAoJCQkvL3dlYmdhaW5zKOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJ0cmFjay53ZWJnYWlucy5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpd2d0YXJnZXQ9aHR0cC8pKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsIndndGFyZ2V0Iik7CgkJCQlzZXRMaW5rKCk7CgoKLy9odHRwOi8vYWQuemFub3guY29tL3BwYy8/MTI2MjExMTFDMTQ1MjcwOTEwMFQmVUxQPWh0dHAlM0El44Oq44OA44Kk44Os44Kv44OI5YWICgkJCS8vWmFub3go5rW35aSWKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJhZC56YW5veC5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpVUxQPWh0dHAvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJVTFAiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3IucmVmaW5lZGFkcy5jb20vYnMtbWFwcGluZy5waHA/dj16MSZhaWQ9MzgxNCZvaWQ9MTAzMSZ6YW5waWQ9MTkxNjk0NzQ2NTY1MTk4NzQ1NiZ1c2VyaWQ9MTAyMTU4MyZ1cmw9aHR0cCUzQSUyRiUyRnd3dzMuYmFzZS5kZSUyRmFkcyUzRnJ0JTNEOCUyNmV0JTNEMTYlMjZpJTNENjMwMjclMjZzZSUzRHAlMjZjcyUzRDUwNDQlMjZldiUzRFtNRURJQUNPREVdJTI2dXNlcmlkJTNEMTAyMTU4MwoJCQkvL1phbm94KOa1t+Wklik9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgicmVmaW5lZGFkcy5jb20iKSAmJiBocmVmLm1hdGNoKC8oXD98XCYpdXJsPWh0dHAvKSl7CgkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJ1cmwiKTsKCQkJCXNldExpbmsoKTsKCgoJCQl9ZWxzZXsKCgkJCX0KCgoKCgoKCQkJLy/lhbHpgJrjg4jjg6njg4Pjgqvjg7zns7so44OI44Op44OD44Kr44O85bCC6ZaA57O7KS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCQkJLy/ooYzli5XliIbmnpDns7s6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCi8vaHR0cDovL3d3dy5zdXJ1Z2EteWEuanAvZGF0YWJhc2UvMTA3MTAwMDAxMDAwLmh0bWw/dXRtX3NvdXJjZT1jb25lY28mdXRtX21lZGl1bT1DUEMmdXRtX2NhbXBhaWduPWtha2FrdV9uZXcmaTRjPTE5MCZpNGE9NQovL2h0dHA6Ly93d3cuY2FyYXZhbi15dS5jb20vc2hvcC9nL2c0OTA1NTI0ODExMzg0Lz91dG1fc291cmNlPWtha2FrdS5jb20mdXRtX21lZGl1bT1wcmljZUNvbXBhcmlzb24mdXRtX2NhbXBhaWduPWtha2FrdS5jb20KLy9odHRwOi8vcC50bC82YlhRP3V0bV9jb250ZW50PWJ1ZmZlcmQwMDQ1CgkJCS8v5YiG5p6Q44OI44Op44OD44Kr44O8CgkJCWlmKGhyZWYubWF0Y2goLyhcP3xcJil1dG1fLykpewoJCQkJaWYoaHJlZi5pbmRleE9mKCJ1dG1fc291cmNlIikgPiAtMSl7CgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oXD98XCYpdXRtX3NvdXJjZT0uKiQvLCIiKTsKCQkJCX0KCgkJCQlpZihocmVmLm1hdGNoKCJ1dG1fY2FtcGFpZ24iKSl7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLyhcP3xcJil1dG1fY2FtcGFpZ249LiokLywiIik7CgkJCQl9CgoJCQkJaWYoaHJlZi5tYXRjaCgidXRtX21lZGl1bSIpKXsKCQkJCQlzdHJVcmwgPSBzdHJVcmwucmVwbGFjZSgvKFw/fFwmKXV0bV9tZWRpdW09LiokLywiIik7CgkJCQl9CgoJCQkJaWYoaHJlZi5tYXRjaCgidXRtX2NvbnRlbnQiKSl7CgkJCQkJc3RyVXJsID0gc3RyVXJsLnJlcGxhY2UoLyhcP3xcJil1dG1fY29udGVudD0uKiQvLCIiKTsKCQkJCX0KCgkJCQlzZXRMaW5rKCk7CgoJCQkvLzJjaOezuzo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCgoJCQkvLzJjaD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXC9pbWUuKG51fHN0KVwvfGp1bXAuMmNoLm5ldFwvXD98cGlua3Rvd2VyLmNvbVwvKS8pKXsKCQkJCXN0clVybD1ocmVmLnJlcGxhY2UoLy4qKFwvaW1lLihudXxzdClcL3xqdW1wLjJjaC5uZXRcL1w/fHBpbmt0b3dlci5jb21cLykvLCJodHRwOi8vIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9yb3V0ZTUub3JnLz9xPWh0dHA6Ly93d3cua2luY2hvLmNvLmpwL3duZXcvMjAwOTAzL2xpcXVpZF9jb3JkbGVzcy9pbmRleC5odG1sCgkJCS8vUkVBRDJDSAoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC9yb3V0ZTUub3JnXC9cP3E9LykpewoJCQkJc3RyVXJsID0gZ2V0UmVkaXJlY3RVcmwoaHJlZiwicSIpOwoJCQkJc2V0TGluaygpOwoKLy9odHRwOi8vYnVianMuY29tL2h0dHA6Ly93d3cuNGdhbWVyLm5ldC9nYW1lcy8xMDYvRzAxMDY0OS8yMDE0MDMwNTAxMi8KCQkJLy9S44Gh44KD44KT44Gt44KLPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goL2J1YmpzLmNvbVwvaHR0cC8pKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvaHR0cHM/OlwvXC9idWJqcy5jb21cL2h0dHAvLCJodHRwIik7CgkJCQlzZXRMaW5rKCk7CgoKCQkJLy/jgqLjg5XjgqPjg6rjgqjjgqTjg4jns7s6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKCQkJLy/igLvjgrfjg6fjg4Pjg5fns7vni6zoh6rjga7jg4jjg6njg4Pjgqvjg7zjgarjganjga/jgrfjg6fjg4Pjg5fliKXjgavov73liqAKCi8v5pmu6YCa44GuVVJMLmh0bWw/YWRfY29kZT0yODgwUzBOTEdDUDE0MDUxNwoJCQkvL2FkX2NvZGXjga/luoPlkYrjga7nsr7luqbjgpLjgYLjgZLjgovjgonjgZfjgYTjga7jgafliYrpmaQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpYWRfY29kZT0vKSl7CgkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFkX2NvZGUiXSwiIikucmVwbGFjZSgvKFw/fCYpYWRfY29kZT0vLCIiKTsKCQkJCXNldExpbmsoKTsKCgkJCS8vYWlk44Gv44Ki44Kv44K744K5SUTjgajjgYTjgYbjgoLjga7jgonjgZfjgY/jgIHluoPlkYrjga7nsr7luqbjgpLjgYLjgZLjgovjgonjgZfjgYTjga7jgafliYrpmaQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goLyhcP3xcJilhaWQ9LykKCQkJICAvL29rd2F2ZeOBr+mZpOWklgoJCQkgICYmICFsb2NhdGlvbi5ocmVmLm1hdGNoKCJva3dhdmUuanAiKQoJCQkgIC8v44Ok44OV44Kq44Kv44KC6Zmk5aSWCgkJCSAgJiYgIWxvY2F0aW9uLmhyZWYubWF0Y2goImF1Y3Rpb25zLnlhaG9vIikKCQkJICAvL2FmZmlsaWF0ZSB3aW5kb3co5rW35aSWKeOCgumZpOWklgoJCQkgICYmICFocmVmLm1hdGNoKCJhZmZpbGlhdGV3aW5kb3cuY29tIikKCQkJICAvL1phbm94KOa1t+WklinjgoLpmaTlpJYKCQkJICAmJiAhaHJlZi5tYXRjaCgicmVmaW5lZGFkcy5jb20iKSl7CgkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFpZCJdLCIiKS5yZXBsYWNlKC8oXD98JilhaWQ9LywiIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9hZGNsci5qcC9jL3FvamRtdWlqP3BjX21haXN0X2J1eWVyPTI1ODEmX2N2cG9pbnQ9ODExJl94dWlkPXh1aWR4NDY3N2IwY2YzOHgzMWMKCQkJLy9hZGNscj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCX1lbHNlIGlmKGhyZWYubWF0Y2goImFkY2xyLmpwIikgJiYgaHJlZi5tYXRjaCgvXD8vKSl7CgkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UoL1w/LiokLywiIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9kbXMubmV0bW5nLmNvbS9zaS9DTS9UcmFja2luZy9UcmFja1JlZGlyZWN0LmFzcHg/c2ljbGllbnRpZD0yNTIwJnJlZGlyZWN0dXJsPWh0dHAlM0ElMkYlMkZwdC5hZmwucmFrdXRlbi5jby5qcCUyRmMlMkYwMDExMzRjZS4wZmMzYjEzMyUyRl9SVHZyZ2oxMDAwMDA2MyUzRnVybCUzRGh0dHAlM0ElMkYlMkZpdGVtLnJha3V0ZW4uY28uanAlMkZkdGMlMkY0OTYwOTk5OTY0MTY0JTJGJlNJQ3VzdFRyYW5zVHlwZT05ODU0JnRyYW5zYWN0aW9uYW1vdW50PTE4JngxPTI2ODMmeDI9MDE4MDIwODAmeDM9MTEzMDYyNzI5NSZ4ND0manNjcmlwdD0wCi8vaHR0cDovL2Rtcy5uZXRtbmcuY29tL3NpL0NNL1RyYWNraW5nL1RyYWNrUmVkaXJlY3QuYXNweD9zaWNsaWVudGlkPTI1MjAmcmVkaXJlY3R1cmw9aHR0cDovL3d3dy5hbWF6b24uY28uanAvZHAvQjAwMTlEUEhWTy9yZWY9YXNjX2RmX0IwMDE5RFBIVk85NTM5NDkvP3RhZz1jb25lY28tY2UtMjImY3JlYXRpdmU9OTMxMSZjcmVhdGl2ZUFTSU49QjAwMTlEUEhWTyZsaW5rQ29kZT1hc24mbWU9QU4xVlJRRU5GUkpONSZTSUN1c3RUcmFuc1R5cGU9OTg1NCZ0cmFuc2FjdGlvbmFtb3VudD01Mi42JngxPTI4MjgmeDI9MDExMDk5OTkmeDM9MTA5MDkwOTIxMiZ4ND04ZjAwMWIyNDg3Y2RhNTRjYzQ2NDk2YzMzMDg2NjhjMSZqc2NyaXB0PTAKCQkJLy9uZXRtbmc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCQkJfWVsc2UgaWYoaHJlZi5pbmRleE9mKCJkbXMubmV0bW5nLmNvbSIpID4gLTEpewoJCQkJaWYoaHJlZi5pbmRleE9mKCJyZWRpcmVjdHVybD0iKSA+IC0xKXsKCQkJCQlzdHJVcmwgPSBnZXRSZWRpcmVjdFVybChocmVmLCJyZWRpcmVjdHVybCIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgkJCS8v5aSa5YiG44OI44Op44OD44Kr44O844Go5oCd44KP44KM44KLKGxpc3QuUTEw44Go44GL44Gn56K66KqNKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoImphZWh1aWQiKSA+IC0xKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKFw/fFwmKWphZWh1aWQ9LiokLywiIik7CgkJCQlzZXRMaW5rKCk7CgovL2h0dHA6Ly9kbXMubmV0bW5nLmNvbS9zaS9jbS90cmFja2luZy9jbGlja3JlZGlyZWN0LmFzcHg/c2l0cmFja2luZ2lkPTU2NTIzMTU1MCZzaWNsaWVudGlkPTc3MjImc2lhZHRyYWNraWQ9MzE4OTEwMzIzNjYmc2luZXR3b3JrPXMmc2ltb2JpbGU9JnNpZGV2aWNlPWMKLy9odHRwOi8vdHJhY2suc2VhcmNoaWduaXRlLmNvbS9zaS9jbS90cmFja2luZy9jbGlja3JlZGlyZWN0LmFzcHg/c2l0cmFja2luZ2lkPTY5NjI5NjQwNiZzaWNsaWVudGlkPTk5OTImc2lhZHRyYWNraWQ9NDI2OTcyNzg2ODQmc2luZXR3b3JrPXMmc2ltb2JpbGU9JnNpZGV2aWNlPWMKCQkJLy/jg5Hjg6njg6Hjg7zjgr9zaXRyYWNraW5naWTku6XpmY3pmaTljrso5a6f6aiT55qE5a6f6KOFKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKCJzaXRyYWNraW5naWQiKSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC8oLipzaXRyYWNraW5naWQpLiokL2ksJyQxPScpICsgcGFyYW1zWyJzaXRyYWNraW5naWQiXTsKCQkJCXNldExpbmsoKTsKCgkJCS8vdHJhZmZpY2dhdGXjga7jg4jjg6njg4Pjgqvjg7zlnovjgqLjg5XjgqPjg6rjgqjjgqTjg4jjgonjgZfjgY3jg5Hjg6njg6Hjg7zjgr/jgpLkuovliY3jgavmtojjgZko5bqD5ZGK57WM55Sx5b6M44Gr44Kq44Oq44K444OK44OrVVJM44Grd2FwcuOBjOOBpOOBj+OCieOBl+OBhO+8nyk9PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpd2Fwcj0vKSl7CgkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbIndhcHIiXSwiIik7CgkJCQlzZXRMaW5rKCk7CgoJCQkvL3RyYWZmaWNnYXRl44GLTGlua3N5bmVyZ3njga7jg4jjg6njg4Pjgqvjg7zlnovjgqLjg5XjgqPjg6rjgqjjgqTjg4jjgonjgZfjgY3jg5Hjg6njg6Hjg7zjgr/jgpLkuovliY3jgavmtojjgZko44Kq44Oq44K444OK44OrVVJM44GrcGFydG5lcklk44GM44Gk44GP44KJ44GX44GE77yfKT09PT0KCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvKFw/fFwmKXBhcnRuZXJpZD0vKSl7CgkJCQl2YXIgcGFyYW1zID0gY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbInBhcnRuZXJpZCJdLCIiKS5yZXBsYWNlKCJwYXJ0bmVyaWQ9IiwiIik7CgkJCQlzZXRMaW5rKCk7CgoJCQkvL+OCouODleOCo+ODquOCqOOCpOODiOOBqOaAneOBl+OBjeS4jeimgeOBquODkeODqeODoeODvOOCv3Zvcz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLm1hdGNoKC8oXD98XCYpdm9zPS8pKXsKCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZSgvKFw/fFwmKXZvcz0uKiQvLCIiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3RleHRhZC5uZXQ6MTAwMDEvY2dpLWJpbi9yZWRpci5jZ2k/dWlkPTEwNDczJmJpZD0yJmZyb209dmlkZW8mc2l0ZT1odHRwOi8vd3d3LjJpY2EubmV0LyVFNiU5NiU5OSVFOSU4NyU5MS8KCQkJLy90ZXh0YWQKCQkJfWVsc2UgaWYoaHJlZi5tYXRjaCgvdGV4dGFkLm5ldC8pICYmIGhyZWYubWF0Y2goL3NpdGU9aHR0cC8pKXsKCQkJCXN0clVybCA9IGdldFJlZGlyZWN0VXJsKGhyZWYsInNpdGUiKTsKCQkJCXNldExpbmsoKTsKCi8vaHR0cDovL3d3dy54YWlkLmpwL3IvP2RpZD01MDAwMzY3NzgmZ3VpZD1PTiZfeHVpZD14dWlkeDQ2NzdhMzcyMTd4NWU2CgkJCS8veGFpZOW6g+WRiui/vei3oT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCQl9ZWxzZSBpZihocmVmLmluZGV4T2YoInhhaWQuanAiKSA+IC0xICYmIGhyZWYuaW5kZXhPZigiX3h1aWQ9IikgPiAtMSl7CgkJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCQlzdHJVcmwgPSBocmVmLnJlcGxhY2UocGFyYW1zWyJfeHVpZCJdLCIiKTsKCQkJCQlzZXRMaW5rKCk7CgoJCQkvL+OBneOBruS7ljo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OgoKCQkJfWVsc2V7CgkJCQkvL3dhYWTjgpLlrp/pqJPnmoTjgavliYrpmaQKCQkJCWlmKGhyZWYubWF0Y2goIiZ3YWFkIikpewoJCQkJCXZhciBwYXJhbXMgID0gIGNyZWF0ZVBhcmFtQXJyYXkoaHJlZik7CS8v44OR44Op44Oh44O844K/5qC857SNCgkJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1sid2FhZCJdLCIiKS5yZXBsYWNlKCJ3YWFkPSIsIiIpOwoJCQkJCXNldExpbmsoKTsKCQkJCX0KCgkJCX0KCgoKCgoJCQkvL+acgOe1guS/ruatoz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCWlmKHN0clVybC5tYXRjaCgiYWZmaWxpYXRlX3R5cGU9IikpewoJCQkJdmFyIHBhcmFtcyAgPSAgY3JlYXRlUGFyYW1BcnJheShocmVmKTsJLy/jg5Hjg6njg6Hjg7zjgr/moLzntI0KCQkJCXN0clVybCA9IGhyZWYucmVwbGFjZShwYXJhbXNbImFmZmlsaWF0ZV90eXBlIl0sIiIpLnJlcGxhY2UoImFmZmlsaWF0ZV90eXBlPSIsIiIpOwoJCQkJc2V0TGluaygpOwoJCQl9CgoJCQlpZihzdHJVcmwubWF0Y2goImFmZmlsaWF0ZV9pZD0iKSl7CgkJCQl2YXIgcGFyYW1zICA9ICBjcmVhdGVQYXJhbUFycmF5KGhyZWYpOwkvL+ODkeODqeODoeODvOOCv+agvOe0jQoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKHBhcmFtc1siYWZmaWxpYXRlX2lkIl0sIiIpLnJlcGxhY2UoImFmZmlsaWF0ZV9pZD0iLCIiKTsKCQkJCXNldExpbmsoKTsKCQkJfQoKLy9odHRwOi8vd3d3LmRpc25leXN0b3JlLmNvbS90cmFuc2Zlci8yMjQ1MTAvP0NNUD1BRkwtQWZmTFNHZW4mYXR0PUxTR2VuQWZmbCZ1cmw9JkxTSUQ9MHwxMDY3NjAyNnwKCQkJLy9Db21taXNzaW9uIEp1bmN0aW9uKOa1t+Wkluezuynjga7mrovjgorvvJ8KCQkJaWYoaHJlZi5tYXRjaCgvTFNJRD0uKj9cfC4qP1x8LykpewoJCQkJc3RyVXJsID0gaHJlZi5yZXBsYWNlKC9MU0lEPS4qP1x8Lio/XHwvLCIiKTsKCQkJCXNldExpbmsoKTsKCQkJfQoKCgkJCS8v5pyA57WC5L+u5q2j44GT44GT44G+44GnPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoKCQl9Ly9tYWluIGZvcuaWh+OBk+OBk+OBvuOBpz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KfWNhdGNoKGUpewovLwl0aHJvdyhlKTsKCUdNX2xvZyhlKTsKfQoKCi8q5a++5b+c5LiN5Y+v6IO944Gg44Gj44Gf44KC44Gu5LiA6KanKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKCi8vaHR0cDovL3N0b3JlLnNob3BwaW5nLnlhaG9vLmNvLmpwLyjljYrop5Loi7HmlbDlrZfjga7jg57jgqTjgrfjg6fjg4Pjg5dJRCkvKOWNiuinkuiLseaVsOWtl+OBruWVhuWTgUlEKS5odG1sCgkvL3lhaG9v44Gu44Oe44Kk44K344On44OD44OXVVJMPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy9odHRwOi8vcmQuYW5lLnlhaG9vLmNvLmpwL3JkP2VwPVJXLnUyZnUxanRyc1Bna0FvUzNvcFV2Vmh3ZURFSU5iaktXSnpiTEVlcTB4MUxweHRvU1UxLlBjUzBjOXhkc0VocmEzMVhUMUR3dl91elZBQkV3V2l2N193b19oYXRMRl9Na2kxb1BRaTNwNi51NHV1YmVIUWVYQ1pCV3M5UzJNWXFwOTk4MHpLSV9FblhJTmJZZHY5MDFTMThFUVlzRjBER1RiNXFkaW5uN19XS3p2RnhqQ3FMc1Bka2txJmE9MmFfN1V0Z194RDVoOXJLZFRBLS0mcz1HN3BIVkxBOXhEM0tsQS0tJnQ9dDUubkFqTl8wejJjdmctLSZDPTkmRD0xJkk9JlJJPTY2YmYzZDEyNjQxYzE4YTM5ZTI0YTMzZjZhYjhmYzUxJlM9MzZjMmMxYTBkYzA0JmFzPTEmZj0xJmZmPTAmZnFfZD0xLDEsMSwwJmZxX209MSwxLDEsMCZmcV93PTEsMSwxLDAmZz00JmxwPSZtYWY9MCZtaWQ9MCZvPTkmcD05JnFmaWQ9JnI9MCZyZm09JnNmaWQ9MCZza3dpZD0wJkY9MCZ0bGlkPTAmdT1hdWN0aW9ucy55YWhvby5jby5qcAovL+ato+OBl+OBhFVSTGh0dHA6Ly93d3cuY2hvLXJlaS5jb20vCgkvL3lhaG9v44Gu5bqD5ZGKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy9odHRwOi8vY2xpY2subGlua3N5bmVyZ3kuY29tL2ZzLWJpbi9jbGljaz9pZD1HU0FYRU5pTWN2SSZvZmZlcmlkPTM5MjUwLjEwMDAwMjM5JnR5cGU9NCZzdWJpZD0wCgkvL2xpbmtzaGFyZWxpbmtzeW5lcmd5PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy9odHRwOi8vY2suanAuYXAudmFsdWVjb21tZXJjZS5jb20vc2VydmxldC9yZWZlcnJhbD92YT0yMjY2NzczJnNpZD0zMDkxMzQ0JnBpZD04ODIyNjAxNzcmdmNpZD1iR21VX0FIamxsdjg0TXQtZlo0d2VESXRqY09tbUdjQUZhSnNzdWNwd2R6OWtGNzVqcUJEbVEmdmNwdWI9MC42MjE0MDE3Mjk4OTMwNDIKCS8vdmFsdWVjb21tZXJjZeS4jeWujOWFqCjnhKHpp4TjgaDjgZHjgankuI3opoHjgarjg5Hjg6njg6Hjg7zjgr/jgpLliYrpmaQp4oaQ44K544Kv44Oq44OX44OI44Gr6L+95Yqg5riICgkv4oaR44Gu44Oq44Oz44Kv44Gu5b6M44KC44Ki44OV44Kj44Oq44Oz44Kv44KS57WM55Sx44GZ44KL44Gu44Gg44GR44Gp44CB5L+u5q2j5Y+v6IO944Gg44Gj44Gf44Gu44Gn44Gd44Gh44KJ44Gv5L+u5q2jKOWKueaenOOBjOOBguOCi+OBi+OBr+S4jeaYjikKCgovL2h0dHA6Ly9jb2ludXJsLmNvbS9nZXQucGhwP2lkPTIwNDg3Ci8v4oaR44GuVVJM44GL44KJ4oaT44GuVVJM44GM55Sf5oiQ44GV44KM44KL44CCCi8vaHR0cDovL2NvaW51cmwuY29tL25ld2NsaWNrLnBocD9wPXRBYmNsZVY1a2p1ZU1DclRXZDR3M3lWRTZ0SlBwaDlYMHVGbWpzUWlZaXlZeExOJTJCS1IlMkI1TjZVc0dXamRMM1ZlU2pwcyUyQmslMkY1MTc0Vk12azAxMHF2b3B1ZEJxVllSQUJPdGtRWlNyNzBVRVZLOGNUOFVIbUNxN3ZndE51SGJOcGpjeTJEM25VT2F2NEo1NzdNNjBHeFVtbVIlMkZoMWdFR1hyVlgwcGgwcFE0VG15ejQ3TWFic2ZDS0FRTDNTT2JDViUyQgoJLy/jg5Pjg4Pjg4jjgrPjgqTjg7Mo5Luu5oOz6YCa6LKoKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCS8v44Gp44Gh44KJ44KC5L+u5q2j5LiN5Y+v44Gq44Gu44Gn44Gd44KC44Gd44KC5YmK6Zmk44GX44Gf5pa544GM44GE44GECgoKLy9hbWF6b27jgrnjg6njgqTjg4njgrfjg6fjg7zjgqbjgqPjgrjjgqfjg4Pjg4gKLy9hbWF6b27jgY/jgovjgY/jgovjgqbjgqPjgrjjgqfjg4Pjg4gKLy/ihpHjgqLjg5XjgqPjg6rjgqjjgqTjg4hJROOCkuabuOOBjeaPm+OBiOOCi+OBqOmdnuihqOekuuOBq+OBquOCi+OAguOCouODleOCo0lE5b+F6aCI77yfCgoqKuWvvuW/nOS4jeWPr+iDveOBoOOBo+OBn+OCguOBruS4gOimp+OBk+OBk+OBvuOBpyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCgovL2phdmFzY3JpcHTjgr/jgrAo5pyq5a6f6KOF6Kq/5pW05a6f6aiT5LitKT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKLy88c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vd3d3LmRsc2l0ZS5jb20vanMvYmxvZ19wYXJ0cy5qcyIgY2hhcnNldD0iVVRGLTgiPjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij53aW5kb3dbImh0dHA6Ly93d3cuZGxzaXRlLmNvbS8iXS5jcmVhdGVCbG9nUGFydHMoeyJ0eXBlIjoiUmFua2luZ1BhcnRzIiwidHlwZSI6IlJhbmtpbmdQYXJ0cyIsImFpZCI6ImRvamluIiwiZGlzcGxheSI6ImltYWdlIiwiaW1hZ2UiOiJsYXJnZSIsImNvdW50IjoiNSIsInNpdGUiOiJtYW5pYXgiLCJhbm5vdW5jZSI6IjEiLCJncm8iOiIwIiwibWVuIjoiMCIsImxvbGkiOiIwIiwic2hvdGEiOiIwIiwia2luc2hpbiI6IjAiLCJqeXV1a2FuIjoiMCIsInBlcmlvZCI6IjI0aCIsInRpdGxlIjoiMjTmmYLplpPjg6njg7Pjgq3jg7PjgrAiLCJ3aWR0aCI6IjE5MCIsInJvdW5kIjoiMCIsImRlY29yYXRpb24iOiIwIiwiY2hhcmFjdGVyIjoiIiwibG9nbyI6ImRsc2l0ZSIsImJhbm5lciI6IjEiLCJ3cmFwcGVyIjoiMSIsImJ1dHRvblR5cGUiOiIwMiIsImJvZHlDb2xvciI6IiNmZmUzZWEiLCJ0aXRsZUNvbG9yIjoiI2ZmYTYwMCIsInRpdGxlVGV4dENvbG9yIjoiI2ZmZmZmZiJ9KTs8L3NjcmlwdD4KCQkvL0RMc2l0ZeWfi+OCgei+vOOBv2phdmFzY3JpcHQKCQkvL+OCueOCr+ODquODl+ODiOOBq+iHquWLleiqreOBv+i+vOOBv+mWouaVsOOBjOOBguOBo+OBpuOCouODleOCo+ODquOCqOOCpOODiOODquODs+OCr+OBjOW+qea0u+OBl+OBpuOBl+OBvuOBhuOAguWvvuetluaWueazleiAg+OBiOS4rQoJCS8v5YCZ6KOcMe+8muOCueOCr+ODquODl+ODiOOBruOCouODleOCo+ODquOCqOOCpOODiElE566H5omA44KS5aSJ5pu044GX44Gm44Kq44OW44K444Kn44Kv44OI44KS5paw6KaP44Gn55Sf5oiQ4oaS5L2V5pWF44GL44Kq44O844OI44Ot44O844OJ44Gn44K544Kv44Oq44OX44OI44Gg44GR44Gu44Oa44O844K444Gr6aOb44G2CgkJLy/lgJnoo5wy77yaaHR0cDovL3d3dy5kbHNpdGUuY29tL2pzL2Jsb2dfcGFydHMuanPjga7plqLmlbDjgpLkuIrmm7jjgY3ihpLli4nlvLfkuK0KCQlmdW5jdGlvbiBraWxsSlMoZG9jdW1lbnQpewoKCQkJdmFyIGFsbFNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7CgoJCQlmb3IgKGkgPSAwOyBpIDwgYWxsU2NyaXB0cy5sZW5ndGg7IGkrKyl7CgkJCQl2YXIgYmxvZ1BhcnRzID0gYWxsU2NyaXB0c1tpXS5pbm5lckhUTUw7CgoJCQkJaWYoYmxvZ1BhcnRzLm1hdGNoKC8iYWlkIjouKiwvKSl7Ci8vYWxlcnQoYWxsU2NyaXB0c1tpXS5pbm5lckhUTUwpOwoJCQkJCWJsb2dQYXJ0cyA9IGJsb2dQYXJ0cy5yZXBsYWNlKC8iYWlkIjouKiwiZGlzcGxheSIvLCciYWlkIjoiIiwiZGlzcGxheScpOwoKCi8v4oaT44Ki44OV44Kj44Oq44Ko44Kk44OISUTjga7lhaXjgaPjgZ/jgrnjgq/jg6rjg5fjg4jjgr/jgrDjgpLmtojjgZfjgabjgb/jgZ/jgZHjganjgZnjgafjgavjgqTjg7Pjgrnjgr/jg7PjgrnljJbjgZXjgozjgZ/lvozjgaDjgajmhI/lkbPjgYzjgarjgYTvvJ8KYWxsU2NyaXB0c1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGFsbFNjcmlwdHNbaV0pOwoKLy/mnIDliJ3jga7jgrnjgq/jg6rjg5fjg4jjgr/jgrDjgpLnlJ/miJDjgIJibG9nX3BhcnRzLmpz44KS6Kqt44G/6L6844KA44Gg44GR44Gg44GX5pyA5Yid44GL44KJ6Kqt44G/6L6844G+44KM44Gm44KL44GX6L+95Yqg5LiN6KaB77yfCnZhciBlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKZWxlLnR5cGUgPSAidGV4dC9qYXZhc2NyaXB0IjsKZWxlLnNyYyA9ICJodHRwOi8vd3d3LmRsc2l0ZS5jb20vanMvYmxvZ19wYXJ0cy5qcyI7CmVsZS5jaGFyc2V0ID0gIlVURi04IjsKCi8v5qyh44Gu44K544Kv44Oq44OX44OI44K/44Kw44CC44OW44Ot44Kw44OR44O844OE44KS55Sf5oiQ44GZ44KL44Gf44KB44Gu5byV5pWw44Gu44G/CnZhciBlbGUyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CmVsZTIudHlwZSA9ICJ0ZXh0L2phdmFzY3JpcHQiOwplbGUyLmlubmVySFRNTCA9IGJsb2dQYXJ0czsKCi8vYWxsU2NyaXB0c1tpXS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGVsZSk7Ci8vYWxsU2NyaXB0c1tpXS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGVsZTIpOwovL+KGkeOCquODluOCuOOCp+OCr+ODiGVsZTLjgpLopoHntKDjgajjgZfjgabov73liqDjgZnjgovjgajkvZXmlYXjgYvjg5rjg7zjgrjjgpLpgbfnp7vjgZfjgabjgZfjgb7jgYYKCgkJCQl9CgkJCX0vL2ZvcuaWh+OBk+OBk+OBvuOBpwoKLyoKCQkJLy/jgrnjgq/jg6rjg5fjg4jjgr/jgrDjgavnlJ/miJDjgZXjgozjgovlrp/pmpvjga7jg5bjg63jgrDjg5Hjg7zjg4TjgavlpInmm7TjgpLliqDjgYjjgabjgb/jgovvvJ8KCQkJdmFyIGFsbFNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJETHNpdGVfYnBfYm9keSIpOwoJCQlmb3IgKGkgPSAwOyBpIDwgYWxsU2NyaXB0cy5sZW5ndGg7IGkrKyl7CgoJCQl9Ly9mb3LmlofjgZPjgZPjgb7jgacKKi8KCQl9CgovL2phdmFzY3JpcHTjgr/jgrDjgZPjgZPjgb7jgac9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgoKCgkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1tYWlu44Gu5YWx6YCa44OV44Kh44Oz44Kv44K344On44OzPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCi8vQSBtb2Qga2lsbGVy44KI44KK5oqc57KLKOODh+OCs+ODvOODiemDqOWIhjHjgYvmiYDjga7jgb/mm7jjgY3mj5vjgYhkZWNVUkkpLS0tLS0tLS0tLS0KCQlmdW5jdGlvbiBjcmVhdGVQYXJhbUFycmF5KHVybCkKCQl7CgkJICAgIHZhciBwYXJhbXMgID0gbmV3IEFycmF5KCk7CgkJICAgIHZhciBwb3MgPSB1cmwuaW5kZXhPZigiPyIpOwoKCQkgICAgaWYocG9zIDwgMCkgewoJCSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHVybCA6IiArIHVybCk7CgkJICAgIH0KCQkgICAgdmFyIHRtcEFyeSA9IHVybC5zdWJzdHJpbmcocG9zKzEsdXJsLmxlbmd0aCkuc3BsaXQoIiYiKTsKCgkJICAgIGZvcih2YXIgaT0wOyBpPHRtcEFyeS5sZW5ndGg7IGkrKykgewoJCSAgICAgICAgdmFyIHN0ciA9IHRtcEFyeVtpXTsKCQkgICAgICAgIHZhciBhbXBlcnNhbmRQb3MgPSBzdHIuaW5kZXhPZigiPSIpOwoJCSAgICAgICAgaWYoYW1wZXJzYW5kUG9zIDwgMCkgewoJCSAgICAgICAgICAgIHBhcmFtc1tzdHJdID0gIiI7CgkJICAgICAgICB9CgkJICAgICAgICBlbHNlIHsKCQkgICAgICAgICAgICB2YXIga2V5ID1zdHIuc3Vic3RyaW5nKDAsYW1wZXJzYW5kUG9zKTsKCQkgICAgICAgICAgICB2YXIgdmFsPXN0ci5zdWJzdHJpbmcoYW1wZXJzYW5kUG9zKzEsc3RyLmxlbmd0aCk7CgkJICAgICAgICAgICAgcGFyYW1zW2tleV0gPSB2YWw7CgkJICAgICAgICB9CgkJICAgIH0KCQkgICAgcGFyYW1zLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7CgkJICAgICAgICB2YXIgdGhpc0Z1bmMgPSB0aGlzLnRvU3RyaW5nOwoJCSAgICAgICAgZGVsZXRlIHRoaXMudG9TdHJpbmc7CgkJICAgICAgICB2YXIgcmV0dXJuVmFsID0gIiI7CgkJICAgICAgICBmb3IodmFyIGtleSBpbiB0aGlzKSB7CgkJICAgICAgICAgICAgcmV0dXJuVmFsID1yZXR1cm5WYWwgKyBrZXkgKyAiPSIgKyB0aGlzW2tleV0gKyAiJiI7CgkJICAgICAgICB9CgkJICAgICAgICB0aGlzLnRvU3RyaW5nID0gdGhpc0Z1bmM7CgkJICAgICAgICByZXR1cm4gcmV0dXJuVmFsOwoJCSAgICB9CgkJICAgIHJldHVybiBwYXJhbXM7CgkJfQoKCQlmdW5jdGlvbiBnZXRSZWRpcmVjdFVybCh1cmwsIHBhcmFtTmFtZSkKCQl7CgkJICAgIHZhciBwYXJhbXMgPSBjcmVhdGVQYXJhbUFycmF5KHVybCk7CgkJICAgIHZhciByZWRpcmVjdFVybCA9IHBhcmFtc1twYXJhbU5hbWVdOwoJCSAgICByZXR1cm4gZGVjVVJJKHJlZGlyZWN0VXJsKTsKCQkgICAgdGhyb3cgbmV3IEVycm9yKCk7CgkJfQoKLy9BIG1vZCBraWxsZXLjgojjgormipznsovjgZPjgZPjgb7jgactLS0tLS0tLS0tLQoKCgoJCS8vVVJM44KS5aSJ5pu077yG44Kq44Oq44K444OK44OrVVJM6L+95YqgCgkJZnVuY3Rpb24gc2V0TGluaygpewp0cnl7CgovLwkJCXN0clVybCA9IGRlY1VSSShzdHJVcmwpOwoKCQkJLy/kvZXjgoLjgZfjgarjgYQKCQkJaWYoaHJlZi5pbmRleE9mKCJjb25lY28ubmV0L3BvaW50IikgPiAtMSAKCQkJICAvL+ODq+ODvOODl+mYsuatoueUqAoJCQkgIHx8IGRlY1VSSShkZWNVUkkoYWxsTGlua3NbaV0uaHJlZikpID09IHN0clVybAoJCQkgIC8v44Oa44O844K444K544Kv44Ot44O844Or57O744Gv6Zmk5aSWCgkJCSAgfHwgaHJlZi5tYXRjaChsb2NhdGlvbi5ocmVmICsgIiMiKSB8fCBkZWNVUkkoaHJlZikubWF0Y2goZGVjVVJJKGxvY2F0aW9uLmhyZWYpICsgIiMiKQoJCQkgIC8vZ29vZ2xl44Kk44Oh44O844K45qSc57Si44Gu6Zmk5aSWKOOCteODoOODjeOCpOODq+S4gOimp+OAguips+e0sOeUu+mdouOBruaWueOBp+OBr+OBquOBhCkKCQkJICB8fCBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgIT0gbnVsbCAmJiBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikubWF0Y2goInJnX2wiKQoJCQkgIC8vZ29vZ2xl44Kk44Oh44O844K45qSc57Si44Gu6Zmk5aSWKOips+e0sOeUu+mdouOBruWPs+WBtOOCteODoOODjeS4gOimp+OBq+OBr+inpuOCjOOBquOBhCkKCQkJICB8fCBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgIT0gbnVsbCAmJiBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikubWF0Y2goImlyY19yaW1hc2siKQopewoKCQkJCS8v5L2V44KC44GX44Gq44GECgoJCQkvL+ODq+ODvOODl+mYsuatouOBq+S7peS4i+OBryYm44Gn44Gq44GR44KM44Gw44Gq44KJ44Gq44GECgkJCX1lbHNlIGlmKGhyZWYgIT0gc3RyVXJsICYmICFhbGxMaW5rc1tpXS5pbm5lckhUTUwubWF0Y2goIktpbGxlciIpICYmIGFsbExpbmtzW2ldLmdldEF0dHJpYnV0ZSgiQWtpbGxfY2hlY2siKSAhPSAia2lsbGVkIil7CgoKCQkJCS8vY2xhc3PlkI3jgoLlvJXjgY3ntpnjgYzjgarjgYTjgajphY3nva7jgYzjgZrjgozjgovjgZ/jgoHntpnmib8oQW1hem9u44Gn56K66KqN44CC5a++6LGh44GuY2xhc3PjgatDU1PjgafoqK3lrprjgZfjgabjgos/KQoJCQkJdmFyIHNldENsYXNzID0gIiI7CgkJCQlpZihhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNsYXNzIikgIT0gbnVsbCl7CgkJCQkJc2V0Q2xhc3MgPSAnIGNsYXNzPSInICsgYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJjbGFzcyIpICsgJyInOwoJCQkJfQoKCQkJCS8v44Ok44OV44Kq44Kv44Gq44Gp44Gn5L+u5q2j44GX44Gf44Oq44Oz44Kv44GraWTjgYzjgarjgYTjgajkvY3nva7jgYzjgZrjgozjgabnlLvlg4/jgYzjgarjgY/jgarjgovjga7jgafoqK3lrpoKCQkJCXZhciBzZXRJZCA9ICIiOwoJCQkJaWYoYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJpZCIpICE9IG51bGwpewoJCQkJCXNldElkID0gJyBpZD0iJyArIGFsbExpbmtzW2ldLmdldEF0dHJpYnV0ZSgiaWQiKSArICciJzsKCQkJCX0KCgkJCQkvL0FSRUHjgr/jgrDjga7loLTlkIjlvJXjgY3ntpnjgY7lv4XpoIjvvJ8KCQkJCXZhciBzZXRDb29yZHMgPSAiIjsKCQkJCWlmKGFsbExpbmtzW2ldLmdldEF0dHJpYnV0ZSgiY29vcmRzIikgIT0gbnVsbCl7CgkJCQkJc2V0Q29vcmRzID0gJyBjb29yZHM9IicgKyBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoImNvb3JkcyIpICsgJyInOwoJCQkJfQoKCQkJCS8v5paw44GX44GE44Km44Kj44Oz44OJ44KmKOOCv+ODlinjgavplovjgY/oqK3lrprjgaDjgZHjga/ntpnmib8KCQkJCXZhciBzZXRCbGFuayA9ICIiOwoJCQkJaWYoYWxsTGlua3NbaV0udGFyZ2V0ID09ICJfYmxhbmsiKXsKCQkJCQlzZXRCbGFuayA9ICcgdGFyZ2V0PSJfYmxhbmsiJzsKCQkJCX0KCgkJCQkvL+WFg+OBruODquODs+OCr+OBq2Nzc+OBp+iDjOaZr+aMh+WumuOBl+OBpuOBguOBo+OBn+WgtOWQiOe2meaJvwoJCQkJdmFyIHNldFN0eWxlID0iIjsKCQkJCWlmKGFsbExpbmtzW2ldLmdldEF0dHJpYnV0ZSgic3R5bGUiKSAhPSBudWxsKXsKCQkJCQlpZihhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIikubWF0Y2goImJhY2tncm91bmQiKSAmJiBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIikubWF0Y2goInVybCIpKXsKCQkJCQkJc2V0U3R5bGUgPSBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CgkJCQkJfQoJCQkJfQoKCQkJCS8vc29sdHkgZGVzaWdu44GuQW1hem9uIE1vZGVybiBSYW5raW5n44Gr5a++5b+cCgkJCQkvL2ltZ+OCv+OCsOOBjOOBguOBo+OBpuWFg+OBruODquODs+OCr+OBq+mrmOOBleOBqOW5heOBruioreWumuOBjOOBguOBo+OBn+WgtOWQiOWkieaVsOOBq+OCu+ODg+ODiOOBl+OBpuW+jOOBp+W+qeWFgwoJCQkJdmFyIHN0ckhXID0gIiI7CgkJCQlpZihhbGxMaW5rc1tpXS5pbm5lckhUTUwubWF0Y2goLyg8aW1nIHw8SU1HICkvKQoJCQkJICAmJiBhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIikgIT0gbnVsbCl7CgkJCQkJaWYoYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJzdHlsZSIpLm1hdGNoKCJoZWlnaHQ6IikpewkKCgkJCQkJCXN0ckhXID0gImhlaWdodDoiICsgYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJzdHlsZSIpLnJlcGxhY2UoLy4qaGVpZ2h0OiguKj8pXDsuKiQvaSwiJDEiKSArICI7IgoJCQkJCX0KCQkJCQlpZihhbGxMaW5rc1tpXS5nZXRBdHRyaWJ1dGUoInN0eWxlIikubWF0Y2goIndpZHRoOiIpKXsJCgkJCQkJCXN0ckhXICs9ICJ3aWR0aDoiICsgYWxsTGlua3NbaV0uZ2V0QXR0cmlidXRlKCJzdHlsZSIpLnJlcGxhY2UoLy4qd2lkdGg6KC4qPylcOy4qJC9pLCIkMSIpICsgIjsiCgkJCQkJfQoJCQkJfQoKCQkJCS8v5L+u5q2j44GX44Gf44Oq44Oz44Kv5YaF44Gr5YWD44Gu44K/44Kw5YaF44Gu6KaB57Sg44KS5q6L44GZKGltZ+OBquOBqSkKCQkJCXZhciBzdHJUeHQgPSBhbGxMaW5rc1tpXS5pbm5lckhUTUw7CgoKCQkJCS8v5YWD44Gu44Oq44Oz44Kv44Gu5b6M44Gr5L+u5q2j44GX44Gf44Oq44Oz44Kv44KS6L+95YqgCgkJCQlhbGxMaW5rc1tpXS5pbnNlcnRBZGphY2VudEhUTUwoJ2FmdGVyZW5kJywgJzwnICsgYWxsTGlua3NbaV0udGFnTmFtZSArIHNldElkICsgc2V0Q2xhc3MgKyBzZXRCbGFuayArIHNldENvb3JkcyArICcgaHJlZj0iJyArIHN0clVybCArICciPicgKyBzdHJUeHQgKyAnPC9hPicpOyAKCgkJCQkvL+WFg+OBruODquODs+OCr+OBjGHjgr/jgrDjgZjjgoPjgarjgYvjgaPjgZ/loLTlkIjjgIFh44K/44Kw44Gr44GX44Gm44OO44O844OJ5L+u5q2jCgkJCQlpZihhbGxMaW5rc1tpXS50YWdOYW1lICE9ICJhIiAmJiBhbGxMaW5rc1tpXS50YWdOYW1lICE9ICJBIil7CgkJCQkJdmFyIG9sZE5vZGUgPSBhbGxMaW5rc1tpXTsKCgkJCQkJdmFyIG5ld05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7CgkJCQkJbmV3Tm9kZS5ocmVmID0gb2xkTm9kZS5ocmVmOwoJCQkJCW5ld05vZGUuaW5uZXJIVE1MID0gb2xkTm9kZS5pbm5lckhUTUw7CgoJCQkJCW9sZE5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoIG5ld05vZGUsIG9sZE5vZGUgKTsKCQkJCX0KCgkJCQkvL+S/ruato+ebtOWJjeOBq+S/ruato+a4iOOBv+OBqOOBhOOBhuWIpOWumueUqOODleODqeOCsOi/veWKoAoJCQkJYWxsTGlua3NbaV0uc2V0QXR0cmlidXRlKCJBa2lsbF9jaGVjayIsImtpbGxlZCIpOwoKCQkJCS8vKOKAu+KAu+azqOaEj++8ge+8ge+8ge+8ge+8geS4iuOBruODleODqeOCsOOBrumWk+OBq+WHpueQhuOCkuaMn+OBvuOBquOBhO+8ge+8ge+8ge+8geKAu+KAu+KAuykKCQkJCS8v5YWD44Gu44Oq44Oz44Kv44Gv5Lit6Lqr44KS5raI44GX44Gm44Oq44Oz44Kv44Gg44GR5q6L44GZCgkJCQkvL2tpbGxlcuWFqOmDqOihqOekugoJCQkJaWYoaGlkZU9yaWdpbkxpbmsgPT0gInNob3ciKXsKCQkJCQlhbGxMaW5rc1tpXS5pbm5lckhUTUwgPSAnW0tpbGxlcl0nOwoKCQkJCS8v5YWo6YOo5raI44GZCgkJCQl9ZWxzZSBpZihoaWRlT3JpZ2luTGluayA9PSAiaGlkZSIpewoJCQkJCWFsbExpbmtzW2ldLmlubmVySFRNTCA9ICcnOwoKIAkJCQkvL1traWxsXeOCkuacgOWIneOBoOOBkeihqOekuuOBmeOCi+ioreWumuOBruWgtOWQiAoJCQkJfWVsc2UgaWYoaGlkZU9yaWdpbkxpbmsgPT0gIm9uZSIpewoJCQkJCS8v5LiA5YCL5YmN44Gu6KaB57Sg44GM5L+u5q2j5riI44G/a2lsbGVk44Gg44Gj44Gf5aC05ZCI6Z2e6KGo56S6CgkJCQkJaWYoYWxsTGlua3NbaS0xXS5nZXRBdHRyaWJ1dGUoIkFraWxsX2NoZWNrIikgPT0gImtpbGxlZCIpewoJCQkJCQlhbGxMaW5rc1tpXS5pbm5lckhUTUwgPSAnJzsKCQkJCQkvL+OBneOBhuOBmOOCg+OBquOBi+OBo+OBn+OCiWtpbGxlcuihqOekugoJCQkJCX1lbHNlewoJCQkJCQlhbGxMaW5rc1tpXS5pbm5lckhUTUwgPSAnW0tpbGxlcl0nOwoJCQkJCX0KCQkJCX0KCgkJCQkvL2FtYXpvbuOBquOBqeOBp+WFg+OBruODquODs+OCr+OBq2NsYXNz44GM44Gq44GE44Go5L2N572u44GM44Ga44KM44KL44Gu44Gn5b6p5YWDCgkJCQlpZihhbGxMaW5rc1tpKzFdLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSAhPSBudWxsKXsKCQkJCQlhbGxMaW5rc1tpXS5zZXRBdHRyaWJ1dGUoImNsYXNzIixhbGxMaW5rc1tpKzFdLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSk7CgkJCQl9CgoJCQkJLy/jg6Tjg5Xjgqrjgq/jgarjganjgaflhYPjga7jg6rjg7Pjgq/jgatpZOOBjOOBquOBhOOBqOS9jee9ruOBjOOBmuOCjOOCi+OBruOBp+W+qeWFgwoJCQkJaWYoYWxsTGlua3NbaSsxXS5nZXRBdHRyaWJ1dGUoImlkIikgIT0gbnVsbCl7CgkJCQkJYWxsTGlua3NbaV0uc2V0QXR0cmlidXRlKCJpZCIsYWxsTGlua3NbaSsxXS5nZXRBdHRyaWJ1dGUoImlkIikpOwoJCQkJfQoKCQkJCS8v5L6h5qC844Kz44Og44GoY29uZWNv44Gu44Oc44K/44Oz44GL44KJb25jbGlja+OBp+i1t+WLleOBleOCjOOCi+ODiOODqeODg+OCq+ODvOOCkumZpOWOuyjlrp/pqJPnmoTlrp/oo4UpCgkJCQlhbGxMaW5rc1tpKzFdLnJlbW92ZUF0dHJpYnV0ZSgib25jbGljayIpOwoJCQkJYWxsTGlua3NbaSsxXS5yZW1vdmVBdHRyaWJ1dGUoIm9ubW91c2VjbGljayIpOwoKCQkJCS8v5YWx6YCa44K544K/44Kk44OrCgkJCQl2YXIgc3RyU3R5bGUgPSAnbWF4LWhlaWdodDoyMHB4O21heC13aWR0aDo1MHB4O2hlaWdodDphdXRvO3dpZHRoOmF1dG87YmFja2dyb3VuZDpyZ2JhKDI1NSwwLDAsMC4yKTttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt6LWluZGV4Ojk5OTt0ZXh0LWluZGVudDowOyc7CgoJCQkJLy9BUkVB44K/44Kw44G+44Gf44Gv6KaB57Sg5YaF44GraW1n44K/44Kw44GM44GC44Gj44Gf5aC05ZCICgkJCQlpZihzZXRDb29yZHMgIT0gIiIKCQkJCSAgfHwgYWxsTGlua3NbaSsxXS5pbm5lckhUTUwubWF0Y2goLyg8aW1nIHw8SU1HICkvKSl7CgoJCQkJCS8v5YWD44Gu44Oq44Oz44Kv44GrQ1NT5LuY5YqgCgkJCQkJYWxsTGlua3NbaV0uc2V0QXR0cmlidXRlKCJzdHlsZSIsIHN0clN0eWxlICsgJ3Bvc2l0aW9uOmFic29sdXRlOycpOwoKCQkJCQkvL+WFg+OBruODquODs+OCr+OBq3N0eWxl44Gn6auY44GV44Go5bmF44Gu5oyH5a6a44GM44GC44Gj44Gf5aC05ZCI44Gv5LiK5pu444GNCgkJCQkJaWYoc3RySFcgIT0gIiIpewoJCQkJCQlhbGxMaW5rc1tpKzFdLnNldEF0dHJpYnV0ZSgic3R5bGUiLCBzdHJIVyk7CgkJCQkJfQoKCQkJCQkvL0FSRUHjgr/jgrDjga7loLTlkIjjgIHkv67mraPjgZfjgZ/jg6rjg7Pjgq/jgYzmnIDliJ3jga7lrZDjg47jg7zjg4njgZjjgoPjgarjgYTjgajjgYTjgZHjgarjgYTjga7jgaflhaXjgozmm7/jgYgKCQkJCQlpZihzZXRDb29yZHMgIT0gIiIpewoJCQkJCQlhbGxMaW5rc1tpKzFdLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQoYWxsTGlua3NbaV0pOwkvL+WFpeOCjOabv+OBiAovLwkJCQkJCWFsbExpbmtzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYWxsTGlua3NbaV0pOwkvL+WJiumZpAoJCQkJCX0KCQkJCS8v44Gd44KM5Lul5aSWCgkJCQl9ZWxzZXsKCQkJCQkvL+WFg+OBruODquODs+OCr+OBq0NTU+S7mOWKoAoJCQkJCWFsbExpbmtzW2ldLnNldEF0dHJpYnV0ZSgic3R5bGUiLCBzdHJTdHlsZSArICdwb3NpdGlvbjpyZWxhdGl2ZTsnKTsKCQkJCX0KCgkJCQkvL+WFg+OBruODquODs+OCr+OBq2Nzc+OBp+iDjOaZr+aMh+WumuOBjOOBguOBo+OBn+WgtOWQiAoJCQkJaWYoc2V0U3R5bGUpewoJCQkJCWFsbExpbmtzW2krMV0uc2V0QXR0cmlidXRlKCJzdHlsZSIsIHNldFN0eWxlKTsKCQkJCX0KCgoJCQl9CgovLwkJCXRocm93IG5ldyBFcnJvcigpOwp9Y2F0Y2goZSl7Ci8vCXRocm93KGUpOwoJR01fbG9nKGUpOwp9CgoJCX0KCgoJCS8vRGxzaXRl44Gu44Oq44Oz44Kv5L+u5q2j55SoQ1NTCgkJZnVuY3Rpb24gZGxzaXRlQ1NTKCl7CnRyeXsKCQkJaWYoaHJlZiAhPSBzdHJVcmwpewoKCQkJCS8vQ1NT5LuY5YqgCgkJCQlhbGxMaW5rc1tpXS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgJ2hlaWdodDphdXRvO3dpZHRoOmF1dG87ZmxvYXQ6bGVmdDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Ojk5OTtiYWNrZ3JvdW5kOnJnYmEoMjU1LDAsMCwwLjIpO21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50OycpOwoJCQkJLy/nlLvlg4/ln4vjgoHovrzjgb/jgr/jgqTjg5fku6XlpJbjgatDU1Pku5jliqAKCQkJCWlmKGFsbExpbmtzW2krMV0uaW5uZXJIVE1MLmluZGV4T2YoInNyYz0iKTw9MCl7CgkJCQkJYWxsTGlua3NbaSsxXS5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgIm1hcmdpbi1sZWZ0OjU1cHg7Iik7CgkJCQl9CgkJCX0KLy8JCQl0aHJvdyBuZXcgRXJyb3IoKTsKfWNhdGNoKGUpewovLwl0aHJvdyhlKTsKCUdNX2xvZyhlKTsKfQoKCQl9CgoKCi8qKirjg5Hjg6njg6Hjg7zjgr/lpJrjgZnjgY7jgarjga7jgaflh43ntZDjgILlhYPjgYvjgonlv4XopoHjgarjgYTjgYvjgoLvvJ8oc28gbWFueSB3aGl0ZWxpc3QuYmxhY2tsaXN0IGlzIC4uLj8gSSBoYXZlIG5vIGlkZWEuKQoJCS8v5qW95aSp44OR44Op44Oh44O844K/CgkJZnVuY3Rpb24gcmFrdXRlblBhcmFtKCl7CgkJCQl2YXIgc3RyU2l0ZW0gPSAiIjsJLy/mpJzntKIKCQkJCXZhciBzdHJOaXRlbSA9ICIiOwkvL+aknOe0oumZpOWklgoJCQkJdmFyIHN0clBhZ2UgPSAiIjsJLy/jg5rjg7zjgrjmlbAKCQkJCXZhciBzdHJUeXBlID0gIiI7CS8v44K144O844OQ77yfCgkJCQl2YXIgc3RyU2lkID0gIiI7CS8v44K344On44OD44OXSUQo44K344On44OD44OX5YaF5qSc57Si55So77yfKQoJCQkJdmFyIHN0ckdlbnJlID0gIiI7CS8v44K444Oj44Oz44OrCgkJCQl2YXIgc3RyVmlldyA9ICIiOwkvL+ihqOekuuaWueazlQoJCQkJdmFyIHN0ckZyb21EID0gIiI7CS8v55m65aOy5pel56+E5Zuy5aeL54K5CgkJCQl2YXIgc3RyVG9EID0gIiI7CS8v55m65aOy5pel56+E5Zuy57WC54K5CgkJCQl2YXIgc3RyTWlucCA9ICIiOwkvL+acgOS9juS+oeagvAoJCQkJdmFyIHN0ck1heHAgPSAiIjsJLy/mnIDlpKfkvqHmoLwKCgkJfQoqLwoKCi8vCQl0aHJvdyBuZXcgRXJyb3IoKTsKCX0vL21haW7ntYLkuoYKCgoKCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSDov73liqDplqLmlbAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgovL0dvb2dsZeODiOODqeODg+OCq+ODvOmZpOWOuz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKZnVuY3Rpb24gcmVtVHJhY2sobm9kZSl7CgoJdmFyIHJlc3VsdExpbmtzID0gZG9jdW1lbnQuZXZhbHVhdGUoJy4vL2FbQG9ubW91c2Vkb3duXScsIG5vZGUsIG51bGwsIFhQYXRoUmVzdWx0Lk9SREVSRURfTk9ERV9TTkFQU0hPVF9UWVBFLCBudWxsKTsKCglmb3IgKGkgPSAwOyBpIDwgcmVzdWx0TGlua3Muc25hcHNob3RMZW5ndGg7IGkrKyl7CgkJdmFyIG9sZExpbmsgPSByZXN1bHRMaW5rcy5zbmFwc2hvdEl0ZW0oaSk7CS8v5qSc57Si57WQ5p6c44GuVVJMKE9yaWdpbmFsIFVSTCkKCgkJaWYgKG9sZExpbmsuZ2V0QXR0cmlidXRlKCdvbm1vdXNlZG93bicpKSB7CgkJCW9sZExpbmsucmVtb3ZlQXR0cmlidXRlKCdvbm1vdXNlZG93bicpOwoJCX0KCX0KfQoKCi8vVVJM44OH44Kz44O844OJCmZ1bmN0aW9uIGRlY1VSSShzdHIpewoJdmFyIGNoYXJDb2RlID0gIiI7CglpZiAoc3RyLm1hdGNoKCIlIikpIHsKCQl0cnkgewoJCQljaGFyQ29kZSA9IEdldEVzY2FwZUNvZGVUeXBlKHN0cik7CgkJCWlmICggY2hhckNvZGUgPT0gIlVURjgiICkgewoJCQkJc3RyID0gVW5lc2NhcGVVVEY4KHN0cik7CgkJCX1lbHNlIGlmICggY2hhckNvZGUgPT0gIkVVQ0pQIiApIHsKCQkJCXN0ciA9IFVuZXNjYXBlRVVDSlAoc3RyKTsKCQkJfWVsc2UgaWYgKCBjaGFyQ29kZSA9PSAiU0pJUyIgKSB7CgkJCQlzdHIgPSBVbmVzY2FwZVNKSVMoc3RyKTsKCQkJfWVsc2UgaWYgKCBjaGFyQ29kZSA9PSAiVW5pY29kZSIgKSB7CgkJCQlzdHIgPSB1bmVzY2FwZShzdHIpOwoJCQl9CgkJCQoJCQlyZXR1cm4gc3RyOwoJCQkKCQl9Y2F0Y2goZSl7CgkJCS8vdGhyb3coZSk7CgkJCUdNX2xvZyhlKTsKCQl9Cgl9ZWxzZXsKCQlyZXR1cm4gc3RyOwoJfQovL3Rocm93IG5ldyBFcnJvcigpOwp9CgoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCmZ1bmN0aW9uIHVzZXJDZmcobmFtZSl7CgkvL+ODpuODvOOCtuioreWumuOBi+OCieiqreOBv+i+vOOBvyhMb2FkIHVzZXIncyBzZXR0aW5ncykKCXZhciBzdHJUZXh0ID0gR01fZ2V0VmFsdWUobmFtZSk7CgoJaWYoc3RyVGV4dCA9PSAiaGlkZSIpewoJCUdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoInNob3cgYWxsIFtraWxsZXJdIC1ub3cgaGlkZSBhbGwtIiwgc2hvd0NmZyk7CgoJfWVsc2UgaWYoc3RyVGV4dCA9PSAic2hvdyIpewoJCUdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoInNob3cgYSBba2lsbGVyXSBvbmx5IG9yaWdpbmFsIC1ub3cgc2hvdyBhbGwtIiwgb25lQ2ZnKTsKCi8vCX1lbHNlIGlmKHN0clRleHQgPT0gIm9uZSIpewoJfWVsc2V7CgkJR01fcmVnaXN0ZXJNZW51Q29tbWFuZCgiaGlkZSBhbGwgW2tpbGxlcl0oSXQncyB0cm91YmxlZCx3aGVuIGNvcnJlY3Rpb24gbWlzdG9vay4pIC1ub3cgb25seSBvbmUtIiwgaGlkZUNmZyk7CgoJCWlmKHN0clRleHQgIT0gIm9uZSIpewoJCQlzdHJUZXh0ID0gIm9uZSI7CgkJCUdNX3NldFZhbHVlKCBuYW1lLCBzdHJUZXh0KTsKCQkJd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpOwoJCX0KCX0KCXJldHVybiBzdHJUZXh0Owp9CmZ1bmN0aW9uIHNob3dDZmcoKXsKCUdNX3NldFZhbHVlKCAiaGlkZU9yaWdpbkxpbmsiLCAic2hvdyIpOwoJd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpOwp9CmZ1bmN0aW9uIGhpZGVDZmcoKXsKCUdNX3NldFZhbHVlKCAiaGlkZU9yaWdpbkxpbmsiLCAiaGlkZSIpOwoJd2luZG93LmRvY3VtZW50LmxvY2F0aW9uLnJlbG9hZCgpOwp9CmZ1bmN0aW9uIG9uZUNmZygpewoJR01fc2V0VmFsdWUoICJoaWRlT3JpZ2luTGluayIsICJvbmUiKTsKCXdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbi5yZWxvYWQoKTsKfQoKCgovL0ZvciBDaHJvbWU6Q2hhbmdlICJHTV9zZXRWYWx1ZSAmIEdNX2dldFZhbHVlIiB0byBXZWJTdHJhZ2UtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmlmICghdGhpcy5HTV9nZXRWYWx1ZSB8fCB0aGlzLkdNX2dldFZhbHVlLnRvU3RyaW5nKCkuaW5kZXhPZigibm90IHN1cHBvcnRlZCIpPi0xKSB7Cgl0aGlzLkdNX2dldFZhbHVlPWZ1bmN0aW9uIChrZXksZGVmKSB7CgkJcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOwoJfTsKCXRoaXMuR01fc2V0VmFsdWU9ZnVuY3Rpb24gKGtleSx2YWx1ZSkgewoJCXJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7Cgl9Owp9CgoKCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vR3JlYXNlRm9ya+OBjHJlcXVpcmXjga7lr6nmn7vlv4XopoHjgarjga7jgafjgYTjgaPjgZ3jga7jgZPjgajln4vjgoHovrzjgb/jgb7jgZfjgZ/jgIIKLy9yZXF1aXJlIChjKWh0dHA6Ly93d3cuZHJrNy5qcC9wdWIvanMvZWNsX3Rlc3QvZWNsX25ldy5qcwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoKCmZ1bmN0aW9uIGVjbCgpewp0cnl7CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT3lvJXnlKjplovlp4s9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCS8vCgkvLyBFc2NhcGUgQ29kZWMgTGlicmFyeTogZWNsLmpzIChWZXIuMDQxMjA4KQoJLy8KCS8vIENvcHlyaWdodCAoQykgaHR0cDovL251cnVjb20tYXJjaGl2ZXMuaHAuaW5mb3NlZWsuY28uanAvZGlnaXRhbC8KCS8vCgoJRXNjYXBlU0pJUz1mdW5jdGlvbihzdHIpewoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvW14qKy4tOUEtWl9hLXotXS9nLGZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1zLmNoYXJDb2RlQXQoMCksbTsKCSAgICAgICAgcmV0dXJuIGM8MTI4PyhjPDE2PyIlMCI6IiUiKStjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOjY1Mzc2PGMmJmM8NjU0NDA/IiUiKyhjLTY1MjE2KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTooYz1KQ1QxMTI4MC5pbmRleE9mKHMpKTwwPyIlODFFIjoiJSIrKChtPSgoYzw4MjcyP2M6KGM9SkNUMTEyODAubGFzdEluZGV4T2YocykpKS0oYyU9MTg4KSkvMTg4KTwzMT9tKzEyOTptKzE5MykudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrKDY0PChjKz1jPDYzPzY0OjY1KSYmYzw5MXx8OTU9PWN8fDk2PGMmJmM8MTIzP1N0cmluZy5mcm9tQ2hhckNvZGUoYyk6IiUiK2MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkpCgkgICAgfSkKCX07CgoJVW5lc2NhcGVTSklTPWZ1bmN0aW9uKHN0cil7CgkgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lKDhbMS05QS1GXXxbOUVdWzAtOUEtRl18RlswLTlBLUNdKSglWzQtNjg5QS1GXVswLTlBLUZdfCU3WzAtOUEtRV18W0Atfl0pfCUoWzAtN11bMC05QS1GXXxBWzEtOUEtRl18W0ItRF1bMC05QS1GXSkvaWcsZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBjPXBhcnNlSW50KHMuc3Vic3RyaW5nKDEsMyksMTYpLGw9cy5sZW5ndGg7CgkgICAgICAgIHJldHVybiAzPT1sP1N0cmluZy5mcm9tQ2hhckNvZGUoYzwxNjA/YzpjKzY1MjE2KTpKQ1QxMTI4MC5jaGFyQXQoKGM8MTYwP2MtMTI5OmMtMTkzKSoxODgrKDQ9PWw/cy5jaGFyQ29kZUF0KDMpLTY0OihjPXBhcnNlSW50KHMuc3Vic3RyaW5nKDQpLDE2KSk8MTI3P2MtNjQ6Yy02NSkpCgkgICAgfSkKCX07CgoJRXNjYXBlRVVDSlA9ZnVuY3Rpb24oc3RyKXsKCSAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teKisuLTlBLVpfYS16LV0vZyxmdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGM9cy5jaGFyQ29kZUF0KDApOwoJICAgICAgICByZXR1cm4gKGM8MTI4PyhjPDE2PyIlMCI6IiUiKStjLnRvU3RyaW5nKDE2KTo2NTM3NjxjJiZjPDY1NDQwPyIlOEUlIisoYy02NTIxNikudG9TdHJpbmcoMTYpOihjPUpDVDg4MzYuaW5kZXhPZihzKSk8MD8iJUExJUE2IjoiJSIrKChjLShjJT05NCkpLzk0KzE2MSkudG9TdHJpbmcoMTYpKyIlIisoYysxNjEpLnRvU3RyaW5nKDE2KSkudG9VcHBlckNhc2UoKQoJICAgIH0pCgl9OwoKCVVuZXNjYXBlRVVDSlA9ZnVuY3Rpb24oc3RyKXsKCSAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyglQVsxLTlBLUZdfCVbQi1FXVswLTlBLUZdfCVGWzAtOUEtRV0pezJ9fCU4RSUoQVsxLTlBLUZdfFtCLURdWzAtOUEtRl0pfCVbMC03XVswLTlBLUZdL2lnLGZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1wYXJzZUludChzLnN1YnN0cmluZygxKSwxNik7CgkgICAgICAgIHJldHVybiBjPDE2MT9TdHJpbmcuZnJvbUNoYXJDb2RlKGM8MTI4P2M6cGFyc2VJbnQocy5zdWJzdHJpbmcoNCksMTYpKzY1MjE2KTpKQ1Q4ODM2LmNoYXJBdCgoYy0xNjEpKjk0K3BhcnNlSW50KHMuc3Vic3RyaW5nKDQpLDE2KS0xNjEpCgkgICAgfSkKCX07CgoJRXNjYXBlSklTNz1mdW5jdGlvbihzdHIpewoJICAgIHZhciB1PVN0cmluZy5mcm9tQ2hhckNvZGUscmk9dSg5MiwxMjAsNDgsNDgsNDUsOTIsMTIwLDU1LDcwKSxyaj11KDY1Mzc3LDQ1LDY1NDM5LDkzLDQzKSwKCSAgICBIPWZ1bmN0aW9uKGMpewoJICAgICAgICByZXR1cm4gNDE8YyYmYzw1OCYmNDQhPWN8fDY0PGMmJmM8OTF8fDk1PT1jfHw5NjxjJiZjPDEyMz91KGMpOiIlIitjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpCgkgICAgfSwKCSAgICBJPWZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1zLmNoYXJDb2RlQXQoMCk7CgkgICAgICAgIHJldHVybiAoYzwxNj8iJTAiOiIlIikrYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKQoJICAgIH0sCgkgICAgckk9bmV3IFJlZ0V4cDtySS5jb21waWxlKCJbXiorLi05QS1aX2Etei1dIiwiZyIpOwoJICAgIHJldHVybiAoImciK3N0cisiZyIpLnJlcGxhY2UoUmVnRXhwKCJbIityaSsiXSsiLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiAiJTFCJTI4QiIrcy5yZXBsYWNlKHJJLEkpCgkgICAgfSkucmVwbGFjZShSZWdFeHAoIlsiK3JqLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBjLGk9MCx0PSIlMUIlMjhJIjt3aGlsZShjPXMuY2hhckNvZGVBdChpKyspKXQrPUgoYy02NTM0NCk7cmV0dXJuIHQKCSAgICB9KS5yZXBsYWNlKFJlZ0V4cCgiW14iK3JpK3JqLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBhLGMsaT0wLHQ9IiUxQiUyNEIiO3doaWxlKGE9cy5jaGFyQXQoaSsrKSl0Kz0oYz1KQ1Q4ODM2LmluZGV4T2YoYSkpPDA/IiUyMSUyNiI6SCgoYy0oYyU9OTQpKS85NCszMykrSChjKzMzKTtyZXR1cm4gdAoJICAgIH0pLnNsaWNlKDgsLTEpCgl9OwoKCVVuZXNjYXBlSklTNz1mdW5jdGlvbihzdHIpewoJICAgIHZhciBpPTAscCxxLHM9IiIsdT1TdHJpbmcuZnJvbUNoYXJDb2RlLAoJICAgIFA9KCIlMjhCIitzdHIucmVwbGFjZSgvJTQ5L2csIkkiKS5yZXBsYWNlKC8lMUIlMjQlNFswMl18JTFCJTI0QC9pZywiJTFCJTI0QiIpKS5zcGxpdCgvJTFCL2kpLAoJICAgIEk9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiB1KHBhcnNlSW50KHMuc3Vic3RyaW5nKDEpLDE2KSkKCSAgICB9LAoJICAgIEo9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiB1KCgzPT1zLmxlbmd0aD9wYXJzZUludChzLnN1YnN0cmluZygxKSwxNik6cy5jaGFyQ29kZUF0KDApKSs2NTM0NCkKCSAgICB9LAoJICAgIEs9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBsPXMubGVuZ3RoOwoJICAgICAgICByZXR1cm4gSkNUODgzNi5jaGFyQXQoNDxsPyhwYXJzZUludChzLnN1YnN0cmluZygxKSwxNiktMzMpKjk0K3BhcnNlSW50KHMuc3Vic3RyaW5nKDQpLDE2KS0zMzoyPGw/KDM3PT0obD1zLmNoYXJDb2RlQXQoMCkpPyhwYXJzZUludChzLnN1YnN0cmluZygxLDMpLDE2KS0zMykqOTQrcy5jaGFyQ29kZUF0KDMpOihsLTMzKSo5NCtwYXJzZUludChzLnN1YnN0cmluZygyKSwxNikpLTMzOihzLmNoYXJDb2RlQXQoMCktMzMpKjk0K3MuY2hhckNvZGVBdCgxKS0zMykKCSAgICB9LAoJICAgIHJJPW5ldyBSZWdFeHAscko9bmV3IFJlZ0V4cCxySz1uZXcgUmVnRXhwOwoJICAgIHJJLmNvbXBpbGUoIiVbMC03XVswLTlBLUZdIiwiaWciKTtySi5jb21waWxlKCIoJTJbMS05QS1GXXwlWzMtNV1bMC05QS1GXSl8WyEtX10iLCJpZyIpOwoJICAgIHJLLmNvbXBpbGUoIiglMlsxLTlBLUZdfCVbMy02XVswLTlBLUZdfCU3WzAtOUEtRV0pezJ9fCglMlsxLTlBLUZdfCVbMy02XVswLTlBLUZdfCU3WzAtOUEtRV0pWyEtfl18WyEtfl0oJTJbMS05QS1GXXwlWzMtNl1bMC05QS1GXXwlN1swLTlBLUVdKXxbIS1+XXsyfSIsImlnIik7CgkgICAgd2hpbGUocD1QW2krK10pcys9IiUyNEIiPT0ocT1wLnN1YnN0cmluZygwLDQpKT9wLnN1YnN0cmluZyg0KS5yZXBsYWNlKHJLLEspOiIlMjhJIj09cT9wLnN1YnN0cmluZyg0KS5yZXBsYWNlKHJKLEopOnAucmVwbGFjZShySSxJKS5zdWJzdHJpbmcoMik7CgkgICAgcmV0dXJuIHMKCX07CgoJRXNjYXBlSklTOD1mdW5jdGlvbihzdHIpewoJICAgIHZhciB1PVN0cmluZy5mcm9tQ2hhckNvZGUscj11KDkyLDEyMCw0OCw0OCw0NSw5MiwxMjAsNTUsNzAsNjUzNzcsNDUsNjU0MzksOTMsNDMpLAoJICAgIEg9ZnVuY3Rpb24oYyl7CgkgICAgICAgIHJldHVybiA0MTxjJiZjPDU4JiY0NCE9Y3x8NjQ8YyYmYzw5MXx8OTU9PWN8fDk2PGMmJmM8MTIzP3UoYyk6IiUiK2MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkKCSAgICB9LAoJICAgIEk9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBjPXMuY2hhckNvZGVBdCgwKTsKCSAgICAgICAgcmV0dXJuIChjPDE2PyIlMCI6IiUiKSsoYzwxMjg/YzpjLTY1MjE2KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKQoJICAgIH0sCgkgICAgckk9bmV3IFJlZ0V4cDtySS5jb21waWxlKCJbXiorLi05QS1aX2Etei1dIiwiZyIpOwoJICAgIHJldHVybiAoImciK3N0cisiZyIpLnJlcGxhY2UoUmVnRXhwKCJbIityLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiAiJTFCJTI4QiIrcy5yZXBsYWNlKHJJLEkpCgkgICAgfSkucmVwbGFjZShSZWdFeHAoIlteIityLCJnIiksZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBhLGMsaT0wLHQ9IiUxQiUyNEIiO3doaWxlKGE9cy5jaGFyQXQoaSsrKSl0Kz0oYz1KQ1Q4ODM2LmluZGV4T2YoYSkpPDA/IiUyMSUyNiI6SCgoYy0oYyU9OTQpKS85NCszMykrSChjKzMzKTtyZXR1cm4gdAoJICAgIH0pLnNsaWNlKDgsLTEpCgl9OwoKCVVuZXNjYXBlSklTOD1mdW5jdGlvbihzdHIpewoJICAgIHZhciBpPTAscCxzPSIiLAoJICAgIFA9KCIlMjhCIitzdHIucmVwbGFjZSgvJTFCJTI0JTRbMDJdfCUxQiUyNEAvaWcsIiUxQiUyNEIiKSkuc3BsaXQoLyUxQi9pKSwKCSAgICBJPWZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1wYXJzZUludChzLnN1YnN0cmluZygxKSwxNik7CgkgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGM8MTI4P2M6Yys2NTIxNikKCSAgICB9LAoJICAgIEs9ZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBsPXMubGVuZ3RoOwoJICAgICAgICByZXR1cm4gSkNUODgzNi5jaGFyQXQoNDxsPyhwYXJzZUludChzLnN1YnN0cmluZygxKSwxNiktMzMpKjk0K3BhcnNlSW50KHMuc3Vic3RyaW5nKDQpLDE2KS0zMzoyPGw/KDM3PT0obD1zLmNoYXJDb2RlQXQoMCkpPyhwYXJzZUludChzLnN1YnN0cmluZygxLDMpLDE2KS0zMykqOTQrcy5jaGFyQ29kZUF0KDMpOihsLTMzKSo5NCtwYXJzZUludChzLnN1YnN0cmluZygyKSwxNikpLTMzOihzLmNoYXJDb2RlQXQoMCktMzMpKjk0K3MuY2hhckNvZGVBdCgxKS0zMykKCSAgICB9LAoJICAgIHJJPW5ldyBSZWdFeHAscks9bmV3IFJlZ0V4cDsKCSAgICBySS5jb21waWxlKCIlKFswLTddWzAtOUEtRl18QVsxLTlBLUZdfFtCLURdWzAtOUEtRl0pIiwiaWciKTsKCSAgICBySy5jb21waWxlKCIoJTJbMS05QS1GXXwlWzMtNl1bMC05QS1GXXwlN1swLTlBLUVdKXsyfXwoJTJbMS05QS1GXXwlWzMtNl1bMC05QS1GXXwlN1swLTlBLUVdKVshLX5dfFshLX5dKCUyWzEtOUEtRl18JVszLTZdWzAtOUEtRl18JTdbMC05QS1FXSl8WyEtfl17Mn0iLCJpZyIpOwoJICAgIHdoaWxlKHA9UFtpKytdKXMrPSIlMjRCIj09cC5zdWJzdHJpbmcoMCw0KT9wLnN1YnN0cmluZyg0KS5yZXBsYWNlKHJLLEspOnAucmVwbGFjZShySSxJKS5zdWJzdHJpbmcoMik7CgkgICAgcmV0dXJuIHMKCX07CgoJRXNjYXBlVW5pY29kZT1mdW5jdGlvbihzdHIpewoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvW14qKy4tOUEtWl9hLXotXS9nLGZ1bmN0aW9uKHMpewoJICAgICAgICB2YXIgYz1zLmNoYXJDb2RlQXQoMCk7CgkgICAgICAgIHJldHVybiAoYzwxNj8iJTAiOmM8MjU2PyIlIjpjPDQwOTY/IiV1MCI6IiV1IikrYy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKQoJICAgIH0pCgl9OwoKCVVuZXNjYXBlVW5pY29kZT1mdW5jdGlvbihzdHIpewoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvJXVbMC05QS1GXXs0fXwlWzAtOUEtRl17Mn0vaWcsZnVuY3Rpb24ocyl7CgkgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCIweCIrcy5zdWJzdHJpbmcocy5sZW5ndGgvMykpCgkgICAgfSkKCX07CgoJRXNjYXBlVVRGNz1mdW5jdGlvbihzdHIpewoJICAgIHZhciBCPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5zcGxpdCgiIiksCgkgICAgRT1mdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGM9cy5jaGFyQ29kZUF0KDApOwoJICAgICAgICByZXR1cm4gQltjPj4xMF0rQltjPj40JjYzXStCWyhjJjE1KTw8MnwoYz1zLmNoYXJDb2RlQXQoMSkpPj4xNF0rKDA8PWM/QltjPj44JjYzXStCW2M+PjImNjNdK0JbKGMmMyk8PDR8KGM9cy5jaGFyQ29kZUF0KDIpKT4+MTJdKygwPD1jP0JbYz4+NiY2M10rQltjJjYzXToiIik6IiIpCgkgICAgfSwKCSAgICByZT1uZXcgUmVnRXhwO3JlLmNvbXBpbGUoIlteK117MSwzfSIsImciKTsKCSAgICByZXR1cm4gKHN0cisiZyIpLnJlcGxhY2UoL1teKisuLTlBLVpfYS16LV0rWyorLi05QS1aX2Etei1dfFsrXS9nLGZ1bmN0aW9uKHMpewoJICAgICAgICBpZigiKyI9PXMpcmV0dXJuICIrLSI7CgkgICAgICAgIHZhciBsPXMubGVuZ3RoLTEsdz1zLmNoYXJBdChsKTsKCSAgICAgICAgcmV0dXJuICIrIitzLnN1YnN0cmluZygwLGwpLnJlcGxhY2UocmUsRSkrKCIrIj09dz8iLSstIjoiKiI9PXd8fCIuIj09d3x8Il8iPT13P3c6Ii0iK3cpCgkgICAgfSkuc2xpY2UoMCwtMSkKCX07CgoJVW5lc2NhcGVVVEY3PWZ1bmN0aW9uKHN0cil7CgkgICAgdmFyIGk9MCxCPXt9OwoJICAgIHdoaWxlKGk8NjQpQlsiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuY2hhckF0KGkpXT1pKys7CgkgICAgcmV0dXJuIHN0ci5yZXBsYWNlKFJlZ0V4cCgiWytdWysvLTlBLVphLXpdKi0/IiwiZyIpLGZ1bmN0aW9uKHMpewoJICAgICAgICBpZigiKy0iPT1zKXJldHVybiAiKyI7CgkgICAgICAgIHZhciBiPUJbcy5jaGFyQXQoMSldLGMsaT0xLHQ9IiI7CgkgICAgICAgIHdoaWxlKDA8PWIpewoJICAgICAgICAgICAgaWYoKGM9aSY3KTw2KWM9YzwzP2I8PDEwfEJbcy5jaGFyQXQoKytpKV08PDR8KGI9QltzLmNoYXJBdCgrK2kpXSk+PjI6KGImMyk8PDE0fEJbcy5jaGFyQXQoKytpKV08PDh8QltzLmNoYXJBdCgrK2kpXTw8MnwoYj1CW3MuY2hhckF0KCsraSldKT4+NDsKCSAgICAgICAgICAgIGVsc2V7Yz0oYiYxNSk8PDEyfEJbcy5jaGFyQXQoKytpKV08PDZ8QltzLmNoYXJBdCgrK2kpXTtiPUJbcy5jaGFyQXQoKytpKV19CgkgICAgICAgICAgICBpZihjKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYykKCSAgICAgICAgfQoJICAgICAgICByZXR1cm4gdAoJICAgIH0pCgl9OwoKCUVzY2FwZVVURjg9ZnVuY3Rpb24oc3RyKXsKCSAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teKisuLTlBLVpfYS16LV0vZyxmdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGM9cy5jaGFyQ29kZUF0KDApOwoJICAgICAgICByZXR1cm4gKGM8MTY/IiUwIitjLnRvU3RyaW5nKDE2KTpjPDEyOD8iJSIrYy50b1N0cmluZygxNik6YzwyMDQ4PyIlIisoYz4+NnwxOTIpLnRvU3RyaW5nKDE2KSsiJSIrKGMmNjN8MTI4KS50b1N0cmluZygxNik6IiUiKyhjPj4xMnwyMjQpLnRvU3RyaW5nKDE2KSsiJSIrKGM+PjYmNjN8MTI4KS50b1N0cmluZygxNikrIiUiKyhjJjYzfDEyOCkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpCgkgICAgfSkKCX07CgoJVW5lc2NhcGVVVEY4PWZ1bmN0aW9uKHN0cil7CgkgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8lKEUoMCVbQUJdfFsxLUNFRl0lWzg5QUJdfEQlWzg5XSlbMC05QS1GXXxDWzItOUEtRl18RFswLTlBLUZdKSVbODlBQl1bMC05QS1GXXwlWzAtN11bMC05QS1GXS9pZyxmdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGM9cGFyc2VJbnQocy5zdWJzdHJpbmcoMSksMTYpOwoJICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjPDEyOD9jOmM8MjI0PyhjJjMxKTw8NnxwYXJzZUludChzLnN1YnN0cmluZyg0KSwxNikmNjM6KChjJjE1KTw8NnxwYXJzZUludChzLnN1YnN0cmluZyg0KSwxNikmNjMpPDw2fHBhcnNlSW50KHMuc3Vic3RyaW5nKDcpLDE2KSY2MykKCSAgICB9KQoJfTsKCglFc2NhcGVVVEYxNkxFPWZ1bmN0aW9uKHN0cil7CgkgICAgdmFyIEg9ZnVuY3Rpb24oYyl7CgkgICAgICAgIHJldHVybiA0MTxjJiZjPDU4JiY0NCE9Y3x8NjQ8YyYmYzw5MXx8OTU9PWN8fDk2PGMmJmM8MTIzP1N0cmluZy5mcm9tQ2hhckNvZGUoYyk6KGM8MTY/IiUwIjoiJSIpK2MudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkKCSAgICB9OwoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvW14gXXwgL2csZnVuY3Rpb24ocyl7CgkgICAgICAgIHZhciBjPXMuY2hhckNvZGVBdCgwKTtyZXR1cm4gSChjJjI1NSkrSChjPj44KQoJICAgIH0pCgl9OwoKCVVuZXNjYXBlVVRGMTZMRT1mdW5jdGlvbihzdHIpewoJICAgIHZhciB1PVN0cmluZy5mcm9tQ2hhckNvZGUsYj11KDkyLDEyMCw0OCw0OCw0NSw5MiwxMjAsNzAsNzApOwoJICAgIHJldHVybiBzdHIucmVwbGFjZSgvXiVGRiVGRS9pLCIiKS5yZXBsYWNlKFJlZ0V4cCgiJVswLTlBLUZdezJ9JVswLTlBLUZdezJ9fCVbMC05QS1GXXsyfVsiK2IrIl18WyIrYisiXSVbMC05QS1GXXsyfXxbIitiKyJdezJ9IiwiaWciKSxmdW5jdGlvbihzKXsKCSAgICAgICAgdmFyIGw9cy5sZW5ndGg7CgkgICAgICAgIHJldHVybiB1KDQ8bD8iMHgiK3Muc3Vic3RyaW5nKDQsNikrcy5zdWJzdHJpbmcoMSwzKToyPGw/Mzc9PShsPXMuY2hhckNvZGVBdCgwKSk/cGFyc2VJbnQocy5zdWJzdHJpbmcoMSwzKSwxNil8cy5jaGFyQ29kZUF0KDMpPDw4Omx8cGFyc2VJbnQocy5zdWJzdHJpbmcoMiksMTYpPDw4OnMuY2hhckNvZGVBdCgwKXxzLmNoYXJDb2RlQXQoMSk8PDgpCgkgICAgfSkKCX07CgoJR2V0RXNjYXBlQ29kZVR5cGU9ZnVuY3Rpb24oc3RyKXsKCSAgICBpZigvJXVbMC05QS1GXXs0fS9pLnRlc3Qoc3RyKSlyZXR1cm4gIlVuaWNvZGUiOwoJICAgIGlmKC8lKFswLTlBLURGXVswLTlBLUZdJVs4QV0wJXxFMCU4MHxbMC03XVswLTlBLUZdfENbMDFdKSVbOEFdMHwlMDB8JVs3Rl1GL2kudGVzdChzdHIpKXJldHVybiAiVVRGMTZMRSI7CgkgICAgaWYoLyVFWzAtOUEtRl0lWzhBXTAlWzhBXTB8JVtDRF1bMC05QS1GXSVbOEFdMC9pLnRlc3Qoc3RyKSlyZXR1cm4gIlVURjgiOwoJICAgIGlmKC8lRltERV0vaS50ZXN0KHN0cikpcmV0dXJuIC8lOFswLTlBLURdfCU5WzAtOUEtRl18JUEwL2kudGVzdChzdHIpPyJVVEYxNkxFIjoiRVVDSlAiOwoJICAgIGlmKC8lMUIvaS50ZXN0KHN0cikpcmV0dXJuIC8lW0EtRF1bMC05QS1GXS9pLnRlc3Qoc3RyKT8iSklTOCI6IkpJUzciOwoJICAgIHZhciBTPXN0ci5zdWJzdHJpbmcoMCw2MTQzKS5yZXBsYWNlKC8lWzAtOUEtRl17Mn18W14gXXwgL2lnLGZ1bmN0aW9uKHMpewoJICAgICAgICByZXR1cm4gcy5sZW5ndGg8Mz8iNDAiOnMuc3Vic3RyaW5nKDEpCgkgICAgfSksYyxDLGk9MCxUOwoJICAgIHdoaWxlKDA8PShjPXBhcnNlSW50KFMuc3Vic3RyaW5nKGksaSs9MiksMTYpKSYmaTw0MDkyKWlmKDEyODw9Yyl7CgkgICAgICAgIGlmKChDPXBhcnNlSW50KFMuc3Vic3RyaW5nKGksaSsyKSwxNikpPDEyOClpKz0yOwoJICAgICAgICBlbHNlIGlmKDE5NDw9YyYmYzwyNDAmJkM8MTkyKXsKCSAgICAgICAgICAgIGlmKGM8MjI0KXtUPSJVVEY4IjtpKz0yO2NvbnRpbnVlfQoJICAgICAgICAgICAgaWYoMj09cGFyc2VJbnQoUy5jaGFyQXQoaSsyKSwxNik+PjIpe1Q9IlVURjgiO2krPTQ7Y29udGludWV9CgkgICAgICAgIH0KCSAgICAgICAgaWYoMTQyPT1jJiYxNjE8PUMmJkM8MjI0KXtpZighVClUPSJFVUNKUCI7aWYoIkVVQ0pQIj09VCljb250aW51ZX0KCSAgICAgICAgaWYoYzwxNjEpcmV0dXJuICJTSklTIjsKCSAgICAgICAgaWYoYzwyMjQmJiFUKQoJICAgICAgICAgICAgaWYoKDE2ND09YyYmQzwyNDR8fDE2NT09YyYmQzwyNDcpJiYxNjE8PUMpaSs9MjsKCSAgICAgICAgICAgIGVsc2UgVD0yMjQ8PUM/IkVVQ0pQIjoiU0pJUyI7CgkgICAgICAgIGVsc2UgVD0iRVVDSlAiCgkgICAgfQoJICAgIHJldHVybiBUP1Q6IkVVQ0pQIgoJfTsKCglKQ1QxMTI4MD1GdW5jdGlvbigndmFyIGE9InpLVjMzfmpaNHpOPX5qaTM2WGF6TTkzeSF7fmsyeSFvfmswWmxXNnpOPzNXejNXP3tFS3pLWzMzW2B5fDstfmpeWU9UeiQhfmtOeXxMMSQzNTN+alYzektrM35rLTRQNHpLXzIrfmpZNHkheFlIUn5qbHokX35qazR6JGUzWDVIZTwweSF3eXxYM1s6fmx8VlVbRjNWWjA1Nkh5IW56L20xWEQ2MSsxWFkxRTE9MXl8YnpLaXohSDAzNHpLan5tRXojYzVaQTMtM1gkMX5tQnokJDN+bHl6Iyw0WU41fm1FeiN7WktaM1YlN1l9IUozWC1ZRVhfSigzfm1BeiA9VjtrRTAveXxGM3khfX5tPnovVX5tSX5qXzIrfm1BfmpwMjt+bUB+azMyO35tPlZ9MnV+bUVYIzJ4fm1CeSt4MjI0Mih+bUJ5LDsyMjQyKH5tYXktPjImWGtHMjt+bUl5LV8yJk5YZDI7fm1Heix7NDw2Oi46QipCOlhDND42Oi4+QipCQlhTQStBOlhdRSZFPH5yI3orNjI1eiBzMit6Tj1gSFhJQFlNWElBWFpZVU04WDRLLzpRIVomMzMgM1lXWFt+bUJge3pLdDR6ICh6Vi96IDN6UncyJVdkMzldUzExeiRQQVhINVhiO1pRV1UxWmdXUCUzfm9Ae0RnbCNnZH1UKXtVb3t5NV9ke2VAfUMofSBXVTl8Y0J7d31ienZWfClbfSBIfHpUfWR8fDB+e11RfChse3x4e2l2e2R3fSg1fVtafGt1WiB9Y3F7e3l8aWp9Lkl7aWRib2YlY3VeZH1Sal55fC1Ne0VTWUdZZllzWnNsU2A/WmRZT19fZ0xZUlomZnZiNG9LZmhTZl5kPFllYXNjMWYmYT1obllHe1FZe0RgQnNhfHUsfURsfF9Re0MleEt8QXF9Qz58YyNyeVc9fWVZe0wrYCldW1lGX1ViXmg0fVtYfD9yfHVfZXh9VExAWVJdantTclhnbyp8R3Z8ckt9QiNtdXtSMX1oc3xkUHtDN3xeUXQzfEBQe1lWViB8OCZ9I0R9ZWZ7ZS97Umx8PkhuaX1SMXtaI3tEW31DUWxRfHxFfVtze1NHXytpOGVwbFlbPVt8ZWNbJFlYbiNgaGNtfVlSfHtDaShfW3FsfD84cDNdLX1edHt3eX00bGEmcGN8M2V7UnB7THFpSl0sXSBga2MoXUBjaFluck1gT14sWkxZaFpCXXl3eWZHWX5hZXghX1F3d3thIXwpKmxIck17TituJllZan5aIGIgYyNlX1toWlNvbnxyT3RgfWhCWGFeaXtsaHw8MHx8cntLSntrbmkpfHgsfDBhdVl7RCFeU2Nle3c7fEBTfGNBfVhue0MxaCR7RV1aLVhnWipYUGJwXV5fcWJIXmVbYFlNfGF8fCs9XSFMY31ddmRCYz1qLVlTWkRdWW15WUxZS1o5Wj5YY2N6YzJ7WWh9OUZjI1oubHt9KER7R3t7bVJoQ3xMM2IjfHhLW0JlcGojdXRgSFsse0U5WXJ9MWJ7W2Vde1pGazdbWlliWjBYTF19WWVbKGBkfWMhfCp5YERnPWI7Z1JdSG09aEpob31SLVtufTk7e04hWzdrX3tVYm1OXXJmI3BUZVt4OH0hUWNzX3JzW21gfD5OfV5WfSk3e15yfC9FfSksfUhIe09ZZTJ7U2t4KWU8Xy5jai5jam9NaGNeZH0wdVlaZCFeSl9AZyxbW1s/e2lAXVt8M1N9WWwzfCExfGVafDVJWXd8MUR9ZTd8Q3Z7T0hibngtYHd2Yls2WzR9ID1nK2s6e0M6fWVke1NdfDJNXS19V1p8L3F7TEZ8ZFl1Xn1Hc15je1o9fWg+fC9pfHtXXTp8aXB7Tjp8enR8Uzx7REhbcF90dkR7TjxbOEF4b3tYNGEuXm9eWD5ZZmE1OWAjWkJZZ1l+X3ReOWBqWkhabmA+R1tvYWpaO1gsaSlaLl5+WUplIFppWkZee11bWyNadF58XUZqeF0mXzVkZGRXXVAwQ1stXX1dZHx5IHtDX2pVcWxdIHxPcGFBW1p7bHB8cnp9Ok11I11fWWY2e0VwP2Y1YCRbNl5EXVtedVskWzZeLlo4XV1lUGMyVS89XUteXyteTXtxKnw5dFl1WixzKGRTe2k9fGJOYkJ7dUd9MGpaT2E6Wy1dZFl0dTNdOl08e0RKX1NaSXFyX2BsPVl0YGdrVG5YYjNkQGtpcTBhYFp7fCFCfH1lfVd3e1NwLF5afDA+X1p9MzZ8XUF8LXR9bHR7UjZwaXx2OGhQdSN7Qz5ZT1pIWW1nL1o0bmljS1t9aEZfQmd8WVJaN2N8Y3JrellaWX1faVhjWi58KVV8TDV7Un5xaV5VZ2FAWVt4Yn0mcWRiZDZoNXxCdHdbfWM8e0RzNTNbWTddP1o8fGUwe0xbWktdbVhLWiNaMl50YXZmMGBQRVtPU09hUGA0Z2lgcWpkWU1neXMvP1tuYyx9RUViLGVMXWdbbntFX2IvdmN2Z2Iue2tjd2lgfnYlfDA6fGlLe0poX3ZmNWxifUtMfChvaT1McnpoaFlfXkBgemdmW35nKVtKXzBma19We1QpfUlfe0QmXy9kOVcvfE1VWylmJHhXfT8keHI0PHtMYnt5NH0mdXtYSnxjbXtJdXtqUX1DTWtEe0NYfDdBfUd+e2t0KW5CfGQ1fDwtfVdKfUB8fGRAfEl5fVRzfGlMfC9efG5vfDA7fUw2e1BtXTd9JHpmOnxyMn0/Q19re1IofS13fGBHe0d5W2ddYlZqZT1fMHxQVHteWV55anRUW1tbbCFZZV9gWk5dQFtuXylqM25FZ01hXVl0WXBaeV0uZC1ZX2NqYn5ZfltuY35zQ2kzfHpnfUIwfWRve09ee3wkYF98RHt9VSZ8MCt7SjN8OCpdaWF5eHthe3hKXzl8LGN7RWVdUVhsWWJdJFslWU1jKl13W2FhZmVdYVZZaVtmWkVpaVt4cTJZUVpIZ11ZfmgjfFk6dGhyZV5AXnxfRl5DYlRiR18xXnFmN3tMLWBWRnggWnJ8QEVaO2drWkBzbGdrb2BbZX1UOntDdV5wZGRaX2B5YXZeRWErWyNaQmJTYk9gZWxRZkx1aX0uRnx0eFljYlFgWGVoY0dlfmZjXlJsVntEXzBaQWVqW2wmalNoeEdbaXBCXz11OmVVfTNlOFs9anx7RCh9ZE97RG9bQllVWjAvXUFZRV1BTFloWmNZbFlQL14tXntZdF8xXy07WVRgUDRCWkc9SU9aJl1IW2VdWVlkWzleRlsxWWRaeFo/WntaPF1CYTJbNVliWzBaNGw/XWRfO18pYT9ZR0VZaVl2YF9YbVpzNFpqWV5aYl02Z3FHYVheOVl9ZFhacltnfF1ZfUsgYUZacF5rXkZdTWBee08xWXNdWkNnQ3Y0fEU+fThlYjd9bGB7TDVbWl9mYVF8YzJ9Rmp9aHdeI3xOZ3xCfHx3MnxTaHt2K1tHfWFCfE1ZfUF7fDhvfVh+e0U4cGFaOl1pXk5qcV1uZXcpYC1aPmhhb3VuV2hOfWMje0RmWnxmS11LcUdaPTp1fGZxb3Fjdn0yc3NtfS5ye117bklmVntKVylbS3wsWntVeGN8XWxfS2RDYiVdY2ZvYnlhM2BwfUdefExaaVNDXVV8KFh8a0JsVmdba05vKHtPOmc6fC1OfHFUfTk/e01CaUx9U3F7YFB8M2F8dS57VWFxOntfb3xeU31qWHtGb2IwYDt8I3lfQFtWW0t8Y3dbPF8gfUtVfDBGfWQzfGV0e1E3e0x1WnR0c21mXmtZWmBBZmB9JHh9VWB8V3d9ZF18ID59SyxyJnxYSXwqZXtDL2EtYm1yMWZJZDRbO2I+dFFfOl1oa3tiLXBNZ2VdZ2Zwby58KHdbamdWe0VDMVosWWhhWV5xLF9HW2NfZ1tKMFlYXWBbaF5oWUteX1lpYixgIHtpNnZmQFlNXmhkT0taWm4oamdaPmJ6U0RjXlolW1tvOVsyPS9ZSFooXy9HdV9gKnw4entEVVp4WXRednV2WmpoaV5sYyZnVWQ0fDxVaUFgel0kYi9aP2x9WUleamFIeGV8O0Z9bCR7c1F9NWd9aEF8ZTR9P297aWh9VXp7QylqUGU0XUheSltFZ1t8QU1aTWxjfTose2l6fSMqfGdje0lxfC86fHpLe2wmfSN1fG15ZHt7TSZ2fm5WfTtMfChnfEldb2dkZGIweHNkN15WfSkkdVF7SHphenNneHRzT15sfUY+WkJdcnx7N3tqQGNVXnt7Q2JpWW9IbG5nXWYrblFbYmtUbi99PC1kOXEge0tYYWRaWW8rbnxsW3xsY31WMntbYXtTNFphbX5aYV5ge0hIe3h4X1N2Rnxhaz1jXlt2XjdfcllUYGxkQF06X3ViJVskW21dKFNodX1HMntFLlpVX0xfUnt0emB2aihmP159aHN3en1HZFp9e1M6aGBhRHw/V3xgZGdHfGlme2E4fEoxe04sfS1BbzN7SCN7bWZzUHxbIGJ6bit9X1F7TVR7dTRrSGNqX3FgZVpqWzhvMGp5e3A3fUN8W31sKXtNdVlZe3xGZiFZa24ze3JUfG0sXlJ8LFJ9JH5Za2d4e1AhXT5pWGg2W2xbL31KZ2Nne0pZWi5ecVlmWUlabFtnWiNYaltQYzdZeVpEXitZdDs0O2BlOFl5WlZiUTdZelp4WGphLjdTWWxbc10yXi9IYSRbNlpHWXJiJVhpWWRmMl1IXWtaa1oqWlFbWllTXkhaWGNDYyVafFsoYlZaXV06T0pRX0RaQ2c8WyxdJVphYSBbZ3tDMDBIWVtjJVtDaHlaLFpfYFBiWGErZWhgXiZqUGkwYVtnZ3ZobGVrTF13e1lwXnZ9W2V7fjtrJWEma158blJfel9Rbmd9W0V9KldxOntrXntGSlpwWFJobWgzXnA+ZGVePV83YHxaYmFBWnRkaFo/bjRaTF11YDlaTmMzZyVbNmI9ZS5aVmZDW1paXl5eaER7RSg5YyhreVo9YmJ8U3F7a2B8dm1yPml6bEhbdXxlYH00OX1ZJX1GVHtbentSa31CentUQ2MvbE1pQXFrZihtJGhEYztxb29pW31ebzpjXnxRbX1hX3ttcloocEFgLH08MnNZfCBhZGZfJXx9YH1ZNVU7fS80fEQ+fCRYe2p3e0M8fEYuaEt8KkF7TVJaOFpzbT9pbVptXz9icllXWnJZeGB5VlpjM2FAZj9hS15vakVkIHtiTn0vM1pIXS8kWVpobV4maiA5fChTfGJdbUZ9VUl7cSZhTV1MY3JaNV4ufFtqYFRfVl9HYWt9OUpbIFpDWkR8Xmh7Tjl7fiZbNlpke31CfTJPfGN2XUt9M3N9VXl8bCxmaWhXe0VHYGpfUU9wflokRl56ZXhTYGRjSVNmaFpCWFB8LnZufF9IWVF8KTl8Y3JdPGAmWjZdbV8oWmhQY1NnPmBaXTVgfjFgMFhjYjRrMXtPIWJ6fENOX1R7TFJ8YS9nRmNEfGo8e1ouX1tmKW1QYzoxYFd0SWFUMWNnWWtaT2FWWk9ZRnJFZVt9VCR9Q2h9bWt7Sy1eQF1mSHtIZGlgYypaJnxLdHtpZltDe1E7e3hZQmBkWUlYOlpCW31dKlt7e3A5fDRHWVJoMmFve0RTfFYrW3pkJGBGW1pYS2FkYipBXSBZc11NYWlmfmEvWjJibWNsYjh7SnJvX3J6fHg5Y0hvamJae0d6WnhfKV06e3dBYXllRGx4fTw9YGd7SDF7bCN9OWl8KT18bFB7UXF9Lih7TGF8IVl7aTJFWmZwPWMqfUNje0VEdlZCfDtnfTJ0e1c0YXZeQm49XXJpLHx5P3wzK31UKmNrWip7RmZyNWUlfHNCe2x4XjBdZVpiXTlbU2dBalNfRHx1SFp4XWRpdmVbYy5ZUGtjcS99ZGJ7RVFoJmhRfGVnfUchbGppbHxCT11Ye1FyX0drR2x+WWlZV3U9YzNlYn0yOXYzfER8fTRpfHwue012fSlWe1NQMXtGWH1DWlc2e2NtfHZPe3BTfGUjfUF+fDFpfTgxfE13fWVzfDVbfTN3e0NgaDlhTF1ve31wW0dgPmklYTFaQGBMbjJiRFskX2hgfVpPamhkVHJIe1tqXzprfmt2W1NkdV1DdEx9NDF7SSB8W1t7XVpwJF1YanhqSHRfZVRob2EjaD5zU3Q4fGdLfFRWaVtZe3Q9fUJzfGI3WnByJXtndHxZb3tDU1sve2l0ZXZhfGNmXmhnbn0oJF9jXndtYl5XbSt8NTVqcmJGfHs5XiBxNntDJmMrWktkSmtxX3hPWXFaWVNZWFlsYDhdLWN4WkFxL2IlYipfVnNhWy9ZYmphYy9PYUdaNGZ6YXxhKWdZe1A/fCBJfFkgfCxwaTFuN305Ym05YWR8PWR7YVZ8MkBbKH1CYGQmfFV6fUJ9e2BxfC9IfCFKa017RlV8Q0J8Lnt9QXp9I1B8bGt9S3t8MnJrN3teOF4/YC98az58S2F7U3F9R3p9aW97RHhaaFt5S18jfTk8e1RSZGdjXWB+Wj5KWW1ZSl18YCFaS1pdZ1VjeHxeRVtyWkNkYGY5b1FbTmNEXyRabFo7WnJ9bVh8PSF8JDZaUFpZdElvJWZqfUNwY058Qix7VkR3fmdifUBoWmdgUXtMY21BWyhib2A8fEAkfG8xfFNzfTlaX310Q3xHYHtGL3w5bmR9aT19Vi17TDhhYWVTVF1kYVJidWpoXnhscHE4fH16czRialtTYEp8XT9He1Aje3JEe11JYE9sSHtIbV1WWXVTWVViUmMqNltqYDhdcFpbYnRfL15KYypbPFo/WUV8WGJ8P19aXlZjYXNdaHt0OXxVd2QpXyg9MF42WmJ7TmN9IEVbcVpBZVhbYV1QXnxfSj5lOGBXXmpfWX1Se3tKcF9fXUVlI2U6aVdiOXFfd0tidWpyYlJ9Q1lgLHttSn1nentRXnt0fk58PyBnU2dhYFZffHw6I21pfTN0fC9JYFh7Tip8Y3R8Mmd7a219Z2l8ez17akN9Rjt8RX17WlpqWWYqZnJtdX04VGRyb2l7VFt8K359SEd7Y0p9RE17THB7Q3RkJn0kaGkzfEZafCBtfUtyfDM4fV5jfG1ffFRye1F2fDM2fT9VcD58O1N7RFZ7a19hc31CS3tQfX05cHx0YGpSe3NBbTR7RD1iNHBXYVt9WGl7RWp3RWtJfTNTfEU/dT1YMHtqZn0gU3xOTXxKQ3txb14zY21dLXxKVXgve0Nqe3M+e0NydFtVWHV2fER+fGp8ZHtZWFpSfUFxfTByfShfe3BKZmlfen0wYnwtdmkpWiBtRmUse2Y0fHFgYnt9Xlp7SE17cmJlSFp8Xnhfb3xYTXxMJXx1RlhtfUBDX3t7SGhwJWE3fDBwW1hwK15LfTlVe2JQfTogdFR9Qnx9KyR8YjJ8W158fmh7RkFieVtge314Z3lncnR+aDFbbGlgYzR2enwsN3B+Yih8bXZpTn1ecGdbe04vfGczfF4wYyxnRXxmJXw3TntxW3x0Y3xUS0F7TFV9SUB8QVpwKH1HLXN6e0YgfHFae31GfGYtfVJHbjZ7Wl1fNX0pQn1VSntGRmIyXTRaSUB2PWssXXRfRGc1QmpdWi1dTF12cnBkdmRHbGt8Z0Z9R118SVd9WTBbR3wgL2JvfFRlXixfQn0jbl5ee1FIWUlbP2h4Z3tbYF1EXklZUllUYiZrSltjcmlbZ185XVVkfl5fXTxwQF9lX1hkTm0tXi98NSl8aF97Sjt7a2FjVm9wZiFxO2FzcWR9bil8Lm18YmZ7UVd8VSl9Yit7dEx8d2BgTnx0b3t0IFpPfFRdakZ9Q0J8MFF7ZTVad3xrIHxXZX01OntIT3t0UHdmX3VhampCZlh9LVZfQ197e3J+Z2d8VWRlO3MrfUtOWEh9ISBgS31lV3tVcHdiayVvZ2FXfTlFWU59WVl8JnZ8U0x7QzNbNXMuXVldSV11e002e3BZWmBeLGBaYkNZUlsxbU5nPnJzazBZbVtqckVdUllpWlRyKllKe0dlfCUtbGZ8eShgPVt0fUU2e2shfDMpfVprfSBdW0d7RX5jRnt1M1Uuckp8YTlwI28jWkV8P3x7c1ljI3Z2e0U9fExDfWN1e044YC9gM2A5cnRbNHxIZXtjcXxpU1l4WWB9ViB8KFF8dDR7Qz9da19WbHZrKUJaXnI8e0NMfSNofVIrWzx8aT19WHx7S0FvXXxXPGBLe05XfFp4fSM7fGZle0lNcjx8S350Sl94fUF5TFo/e0d2YkxuUmdOfVgme0g3fHh+fUpte10tfCBHcE51MH0ub2s+fGM0e1BZaXNyRFp8ZndoOXxoZm9Ae0h+WFNiT11PZHZdJWBOXWIxWV1dfGVJWn1fLVpBXWFqLD5lRm4ralthUV8rXWhbSl9tX2ddJV93Zi5gJWsxZSNaP3tDdll1X0JefGdrYFhmaF5NM2BhZkdaLVp8W217TH18azNjcFtpdCBePllVaX5kPntUKn1ZSntRNXtKeGEkaGd8JTRgfXxMQWd2YiB9R317UD18PDtVeHtfc2tSe2NWfC0qfHMte01wfFhQfCRHfF9KfWM2Y017Xz1fRHwqOV4kZWN7Vjt8NFN7cU98d198Ljd9ZDB8L0R9ZX18MEd7RHFdS2Rwe31kZkRpPn1CJXtHZHxubH1sZntDLXt5fXxBTlpyfSM9e1R+fC0ofWMme3BJfGZ0e2xzVlB9KXt8QHV9IVd8YmNtQntkP3xpV3w6ZHhqe1BTa098SGxdTGk6fVZZa0B8Mj17Zm5XdHtNM2BjWjZ8KX18WGp9QllhP3Zve2U0fEw3fEI3e0w3fDFXfGx2WU99VzhuSnwkVmlofHtUe2QqXzF8Oi1uMmRibGtgYGZUe0t5fC0lfW0hfFh5fC1he1B6fVtse2tGanp8aUh9OU57V0V7eCx8anp9UiB7UHx7RCljPW5YfEtxfHNpfUdle3NofFtYe1JGe3RgfGpzcipmWWYsckt8Lzl9JH19TmZ7eSExfDxTdGR9NFdlentXJHtGZF8vXk9bb29xYXdfeltMYE5idls7bDdWW2lpM19QZU19LmhedmlxWWpaKmoxfSsze2J0e0RSWztVR30zT2csclN7Sk97cXd7ZDxfemJBaDxSWzFfcmBpWlRidl5eYX1je2lFZ1FaPGV4WkZnLl5SYitgVWp7YSt7ejxbfnIhXWBbW3xyWllSfD9GfHFwcHBdTHwtZHx9S31ZWlVNfD1ZfGt0bSp9Rl17RDtne3VJfDdrZ159JT9aJWNhe05bXzxxNHhDXWl8UHFaQ11ufS5iRHJuaDBXcXt0cnxPTW42dE18ITZ8VGB7T2B8PiFdamkrXV9iVGVVfVRxfGRzfW58e0dte3osZil9JnN7RFBZSmAle0NHZDV2NHR2YipoVWh+YmZdemBqYWppRnFBaWldYmZ5XlV7T3J8bSt7SSljU3wuOWs6ZTNgXnx4Tn1ARG5saXNgQnxRb3tgV3w+fHxrQX1ZfXtFUll1WXhgJVtleGRgXXxPeWlIdGJ9SG9mVVliRm8hWzV8K11nRHtOSVpSfEdvfS5Ue3JoXjRdU3xDOV99eE9eaWB2ZlF9QyliS3tUTH1jUXw3OWl1fTlhXTtzantQLm8hZltZXXBNYGBKZGFeV2M5WmFydGVCWkNseHRNe0xXfWw5fGEubVV9S1h9NEB7SStmMX0zN3w4dX05Y3x2JHt4R2x6fWpQe0RkMX1lOn0zMX0lM1gkfDIyaTx2K3JAfm1me3NOe0M2N0c5Nzg1NUY0WUw1fThme0RUfHh5e3NPe0RYQjMzNEA1NUoxKTQuRzlBI0pEWXRYVFlNNCwgWVFEOTtYYlhtOVNYXUlCXjRVTj1Ybjw1KDsoRjNZV0BYa0gtWF9WTVtEWU06NVhQIVQmWWA2fCxee0lTLSpELkg+OkxYallRMEkzWGhBRjo5Oig9PS5GKjNGMTE4OUsvNzE2M0QsOkB8ZTJ7TFMzNkQ0aHF7THcvODQ0NDNANC45MzM6MDMwNzo6NkQ3fSZse014NjU3Ozg5OyxLNTY3OEgmOTNEKEg8Jjw+MEI5MFheSTt9QWcxe1AlM0ErPj48OTc1fVtTe1BaRTQ1Mz80fFQye1ErNTE4Nzs+NDQ3Ojgxe0M9aEw2e01lXjo9N2lpe1I9Lj1GPDgxOzQ4P3xoOH1VaHtTRXwsVnhMe1NULDc/OVlfNVhrM0EjOiQlWVNZZFhlS1hPRDgrVFhoNyhAPihZZFhZSFhsOUo2WF81SVhhTDBOPzNZSzdYaCExP1hnWXo5WUVYaFhhWVBYaEMzWGAtWUxZX1hmVmZbRUdYWjVMOEJYTDlZSFhdU1lUWGpMWGRKOiBZY1hiUVhnMVBYXVl4NHxKcntZczQuOFlVK1hJWWAwTiw8SCUtSDs6MEAsNzQvOjg1NDZJPTkxNzcxNTQ4NzBVQ11kPEMzSFhsN0FMWXpYRlhXUDw8P0UhODhFNUAwM1lZWEo/WUpANll4WC1ZZFhoWUd8OW97YGlYallfPllWWGU+QVlGWFsvKElAMDg0MT8pOi1CPTE0MzM3Ojg9fDE0e2MmOTM3ODh8ZGl7Y1ctMD4wPDA5Ny9BO057RnFZcHVnQUZUJVgvWW8zWW4sIz1YbENZSFlOWFtYazNZTjpZUlQ0PyktWUglQTVYbFlGM0MxPU5XeVl9Pjo3NC1DNjczPDY5NTQ1diB7aVQ4NVlFRD02ND0uRjQuLjk4NzgvRDQzNzg/NDhCMzo3OjcvMVZYW2Y0e0Qse2w8NUU3NXtkQWJSQi04LUArO0RCRi8kWmZXOFM8NFloWEEuKDVAKjExWVY4Li9TOTVDLzBSLUE0QVhRWUk3PzY4MTY3Qjk1SEExKjxNMz8xL0A7Lz01NFhiWVAzNn1sY3txelNTMzg6MTk/LC8zOTE5MzU3NC82Njg3OFl3MVgtODdFNj07OTY0WGBUNzM0Oj44Nj4xLz0wOyhJLTE6OjdBTFlHWGhGK1hrW0BXJVRZYlg3KUtYZFlFWGksSC1YaFlNUlhmWUs/WGdYai45SFhfU1hdWUwxWG1ZSj5ZfVd3SVhpSS0zLUdYY1l5WFVZSiRYYFZzWzc7WG5ZRVo7WEYhIDM7JTg7UFhYKE4zWVspWGkxWUUmLyA6Ozc0WVE2WGAzM0M7LSg+WG0wKFRZRi8hWUdYZzggOUw1UDAxWVBYTy01JUN8cWR7ey9LL0U2LD0wMTQ0OjM2MTo5NTU7NjQ0M0A/QjcqNzpGODkmRjM1WWFYLUNZZixYaUZZUlhFX2V7fXNGIDAqN1hSWVBZZlhhNVlYWFk4WGY4WX5YbUFbOVZqWWoqI1lNWElZT1hrLEhIWDQwWXhZTVhVOE9YZTtZRlhMWXVQWFA/RUJbUVYwQ1hmWXs6OVhWW0ZXRTBENlheWVZQKiQ0JU9YaVlRKHx4cHwlYzN7fVZgMT5ZYFhIMDA6OC9NNlhoUTE6OzM0MTR8VEV8Jm9AMSo9ODFHODwzfTY8fChmNj4+PjUtNTo4OzA5M0JeM1UqKypeKlVUMzBYZ1lVJjcqTzE5NTMpNUBFNzgtLUY3WUYqQiYwOiVQNjhXOVpuNTk3NEo5OjozfVZrfC0sQyk9KTFBSjQrPDNZR1hmWVtYUVhtVDFNLVhjWVRZWlhDWVpYRVlYWE1ZTiwxNz5YSUcqU2FTfC9lWUpYYkk/WGROWitXUllQPEY6UiBQWGY7MFhnYCR8MUdYOVlkWGpMWXhXWCFaSVhHWWFYTlltNlg5WU1YPzlFWG1aJlhaI1hRPlllWFJYZkFZWzQgOzBYIVp6MFhkTiRYaFlMIFhJWV5YR05YVVlTLzFZRlhoWWsuVFhuNERYakJ7amd8NERFWF06WGNaTVc9QS4rUVlMPExLWGNbdlYkKyZQWCpaM1hNWUlYVVE6WnZXPCBZU1hGWixYQlllWE1NKT9YYSBYaVo0L0VYY1AzJX0mLXw2fjoxKC0rWVQkQFhJWVJCQzx9Jix8N2FKNn1icHw4KUsxfFhnfDhDfVtUfDhRLjg5Oy05NjRJMzgzNjE8PS87ODgzNjUxNDY3PDc6Pj8xOi59bGV8Olo9Mzk7MVleKT86Sj0/WGZMWGJYaT1RMFlWWU9YYVhpTFhtSlhPNT8uU0ZYaUNZV30tO3w9dSZELVhgTjBYXixZellSWE8oUVhfWVc5YEl8PmhaOk4mWClEUVhQQFlII1htTlhpJFlXWF49IUc2WWJZZFg+WGpZfFhsWF5YZFlrWD5ZblhVWFBZRilGWFRbRVZUTVltWUpYbVlTWG1OWGkjR1htVDNYOEhPWFtaaVhOXUlVMj44WWRYMVliWDxZZld1WjhYU1hjWlUlMDsxWG5Ya1pfV1RHLFhaWVg1WVNYIFlwIDA1Rz9YY1lXKElYZzZLL1hsWVA0WG5JIEBYbk8xVzRacC05Q0AlUURZWCtPWWVYOT4tLVlTWGtELllSJVEvWW8gWVVYXS5YaTxIWUVaMldkQ0U2WU1YYTdGKT0sRD4tQDkvOEA1PT83MTY0OzM1Mzg3P048NjE4PTY+N0QrQzUwPDZCMDNKMHtIanxOOSRELDlJLSwuS0IzfW0gfE56RTA6Oi84MVlxWGpNWGw3WUc7IFsuVz1aMFg0WFFZXTpNWGlSLFhnTT85JDk+Oj9FO1lFNzdWU1tZNTY0NzYwMzkxPzE0OTQxOjA9OjhCOjsvMURYakZBLTU2ND0wQjNYbEgxK0Q4NTowUSFCIzotNiZOLzo5PC1SMy83WG48KjNKNC5IOiszMzRCLj0+MzBILjszODMzLzc2NDY0NjY1NzU1Oi84M0g2NjMzOj07Lj41NjQ1fSZFfFkpPzEvWUctLDkzJk4zQUVANSA8TDEtRy84QTBEODU4LzMwPjg8NTQ5PUBCOF0gVjBbdVZRWWxYZUQoUCNJRCY3VCY3O1hpMDs3VC0kWUUpRT0xOkUxR1IpOi0tMFlJNz1FPH1uOXxhVDY3ODNBPkQ3JjRZRzc9MzkxVztaeDw1Kz5GI0ozOX1vL3xjYzs2PUEwNTBFUVhnOEExLX1ELXxkXjU1NDgwODM1NjM2OTVEPy0uWU9YZDM3SSRATFlMV2VZbFg8WWQrWVIgQSQ7My00WVEtOVhtQTAhOS9YTFlfWVQoPTVYZERJPllKNVhQMVpBV3s5PlhfNlIoWGhZTzY1JkolREEpQy0hQjo5NyNBOTtAP0Y7JjsoOT0xMS89NjU3L0gsPDh9Ynp8al41NDQ2Pi5MKyZZXjhYYjY/KENZT1hiKllGKDhYYEZZUihYUFlWWG1QUSUmREQoWG1aWFc/P1lPWFpYZkNZSjc5LE8pWG5ZRjdLMCFRWG1YaTRJWUZSWFMsNjwlLTpZTygrOi0zUSExRTE6Vyxab31BbXxufjszNTgwNTM0Kj8zWmM0PTkzMzQzNjE2OTM6MzBDPDYvNzE3OjwxLzs+NTkmOjR9NiF8clMzNj0xPzc1PDh9W0J8czgwOTk4MzU3OUkuQS4+ODQ3NTg9MTA4NTY0NzQxSCo5RXtMe3x1JVlRPCU2WGZILllVWGU0WUxALD5OfVR2fHZlKkcwWClaOy8pM0BBNzQoNFAmQTFYOllWSDk3Oyw3NTQqQTY2OjEgRDczOUUzNTUzNTQ1NTU4RTQ/LT9LMTcvNzcwODQzWEFZZjgzOEE3SyVOIVlXNC4kVDE5WmBXSiowWGRZSlhUWU9YTlogMVhhTjFBK0kmWGkuWGszWjNHQiY1JVdoWjErNSNZW1g8NFlNWGhRWW9RWFZYYllROFhTWVVYNFlYQlhXRE1HMFd4WkFbOFYrWjhYO0RdLFZhJCVZZVg/RlhmWFtYZVlmPFg6WltXc1l6OFhfWV0lWG1RKCE3QlhJWkZYXSZZRTNGJCgxWGdZZ1lFJiArWytXITxZTVlGWGM7K1BYQ1lJOVlyV3hHWFk5RFlbIUdYaUk3OjopT0M7KiQuPk4qSEFAe0N8fSZrPTo8VEI4M1hgM1lMK0c0WGlLXWl9KGZZSzw9NSQuRllFJTQqNSpIKjZYa0NZTD0qNlhpNiFZaTFLWFI0WUhYYkM4WGosQjlaYld4L1hiWU9OIzVCfVVlfStRS1huRjEmWVY1WG1ZUTAhKjNJWEJZYjcxPzFCNzVYbUY7MEI5NzY7SC9SWFU6WVpYO0JHLU5YajtYakk+QSNEM0I2MzZOOywqJTxEOjA7WVJYWTk3M0g1KS00RlhPWWYwOjA7Lzc3NTk3NzQ7Nzs6Lzg1NTo1NDNMNDM8PzY9RSwuQTQ6Qz1MKSU0WVYhMShZRS80WUYrIEYzJTtTOyZKQzolLz9ZRVhKNEdYZi9ZUy1FWEVZVyw5O0V9WCR9NTQ3RVhpSz01MS0/NzFDJT81Nzs1PjQ2MzU1M1pnOTA7NjQ0Nz88PjQ6OS43NTM4WGdOe3whfTlLL0UmMy06RCtZRTEpWUUvMzszNy86MDV9bjx9OlVYOFlqNFl0ODY0QEpZSy4uRz0uKEEgUTMlNks+MyhQMyNBWUUkLTZILzQ1NipDPS5YSFlbI1MuPDc4MDE5MTswNTdDKT02SFhqPzk1NUI6SzEgRT4tQi85LDs1LiFMPzowPi8uQC8vOjs3ODMzWVo1Njw0OllFPS86N1pfV0dDJTNJNj5Ya0MqJk5BMTZYPVl6MiRYOlleJko0ODw5OWs4fUN5Qi02MTwxOEs5NDZZTzR7fE59RSlZSUI5SzBMPjQ9NDY8MUswK1I7Ni09MTg4Mzo0Nzg7NCxTKzNZSlhgR0pYaC5ZcCtYbTZNWGNZcFgoPjdZbywvOlg9WjtYaTBZVFlIWGpZbVhpWGo7KjtJLThTNk4jWGdZfS4zWGZZR08zQy8kWGpMJCpOWVgsMSA2O1lIJjxYa0s5QyNJNzQuPn1IZGBBNzQ4WFtUNDUwW243NTw0NDM5OjE4QTEwNz58RVR9UmY8MTsxNDg3Ni9ZYjk4M0U8NS5ZTlhkNDE0OT4sUz0vNEUvPDMwNjQ0M0cvMDZ9MCZ9VWtZU1hGWUY9NDQ9LTUwOTU9ODg7NjM4NDQsOUU2NjQ0e1BMfVdBODo+KTcrPjc2Mz4+MC9CM0E1NDVDQ25UfVhtfGR2fVhxMUwvWU5Yay9IODs7LlI2MzM1MVlZNzQ3QDE1WUU0Sjg7NDY7LjM4Lj40QTM2OS49LTgzLDtZZTM/OjNAWUUuNC0rTjM1MzsvO0AoWFtZWUQ+QC8wNS1JKkAuOjU1MTc0MVlmNT42QTQ0MzwzNTM1Oy41OC84Nj1ENDc1MzQ0MiQ2MzVEMT4wMzU5TlEgQDczOjM6Pj48WG4/OzQzQzE0ID9ZfFg2MTFZRzEmPCssNDwqLFlMWGw8MS9BSVhqRipOODlBNFo1NzZLMVhiSjVZRi5aT1dOLllHWE8vWVEwMTo0RzM4WGwxO0tJMFlGWEI9Ujw3O0QvLC80PjskSSxZR1htOTRATzM1WXo2NjY5NTM4NS4+OjZBIzV9VzduXjQzMzY6NDE1NzU5NzQzNDQzMzwzfFhBfW1gPj1EPjo0QS4zMzczNzA/LTZROTZ7YEV8NEF9Q2B8UXN7TWt8Sit+cj58byx3SHY+Vnd9IWN7SCF8R2J8KkNhNX1KfHwsVXt0K3tDTlshTTY1WVhPWV8qQixZW1o5WGFYW1FZSllMWFBZdVolWGNaOExZW1NZUFlLWk08TE1ZRzlPWXFTUVlNfltle1VKWG1RWXlaTV8pPllqTjF+W2Yze2FYRll8WWs6NDhZZEheTlowfFQpe2pWRllUWk5GWV5ZVFlOfltoe25QWU1ZbjNJXWBFWVVZc1lJWkVZSjdZdylZblhQUVlIK1ouWkFaWV1eWjFZYFlTWkZaeUdZSFhMWUcgOFlkIzR+W2l8KylZSDlEP1leRn5ZN3wtZVl4Wl5XSFlkWWZaUX5banwzPn5ba3wzb1ltWXFZXlhZWU89Wio0W11aL09ZTFhoWjFZTFpJWGdZSUhZRVlLLDxZYFlFWElHWklbM1lPWWNCNFNaIVlIWiomWXtYaTN+W2x8SlNZYFp6P1osflttfE89WWk+Pz9YbllXWG1ZUzYxN1lWWUlIWihaNFt+TDQvPX5bbnxZdXtQKXxdO1lPSEhafX5bbzMzfGE+fltyfGFFXURIfltzfGUkWnp+W3R8a1pGWX5YaFlYWkJbYFl9flt1fHtTWiZPWWtZUVl1WjJaZjhEflt2fSUgflt3M30sUVtYXStZR1llWVBJU35beX00YVohWU5eITZQWip+W3p9P0V+W3szfUNuWj1+W319RWREWnovOUEzKDNTPCxZUjguRD0qWGdZUFljWE4zWjUgNCl+W359Slc9JFl1LlhYfl0gfUtEWGBQWGRaNFhmWXBUSkxZW0Y1XVh+WzJZcH1VK0RaSjo6PDQ0NlttQH5dIzN9XTF+XSV9Xkxad1pRNVpgL09UPFloXiAtfl0mfWp4WyB+bTx6ISUyK35seTRWWS1+bz59cDYyeXohJTIrWGYyK35seTRWWS16UWB6ICg9XSAyen5vMiIsQz17IiAiOjAsIiEiOjF9LGM9MzQsaT0yLHAscz1bXSx1PVN0cmluZy5mcm9tQ2hhckNvZGUsdD11KDEyNTM5KTt3aGlsZSgrK2M8MTI3KUNbdShjKV09Y14zOSYmY145Mj9pKys6MDtpPTA7d2hpbGUoMDw9KGM9Q1thLmNoYXJBdChpKyspXSkpaWYoMTY9PWMpaWYoKGM9Q1thLmNoYXJBdChpKyspXSk8ODcpe2lmKDg2PT1jKWM9MTg3OTt3aGlsZShjLS0pcy5wdXNoKHUoKytwKSl9ZWxzZSBzLnB1c2gocy5qb2luKCIiKS5zdWJzdHIoODI3MiwzNjApKTtlbHNlIGlmKGM8ODYpcy5wdXNoKHUocCs9Yzw1MT9jLTE2OihjLTU1KSo5MitDW2EuY2hhckF0KGkrKyldKSk7ZWxzZSBpZigoYz0oKGMtODYpKjkyK0NbYS5jaGFyQXQoaSsrKV0pKjkyK0NbYS5jaGFyQXQoaSsrKV0pPDQ5MTUyKXMucHVzaCh1KHA9Yzw0MDk2MD9jOmN8NTczNDQpKTtlbHNle2MmPTUxMTt3aGlsZShjLS0pcy5wdXNoKHQpO3A9MTI1Mzl9cmV0dXJuIHMuam9pbigiIiknKSgpOwoKCUpDVDg4MzY9SkNUMTEyODAuc3Vic3RyaW5nKDAsODgzNik7CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT3lvJXnlKjjgZPjgZPjgb7jgac9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKfWNhdGNoKGUpewoJR01fbG9nKGUpOwp9CgoKfS8vLS0tLS0tLS0tLS0tLWVjbCgp44GT44GT44G+44GnLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgoKfSkoKTsK"},{"name":"MyDealz Link Swapper","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.mydealz.de/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1584468190294,"data":{}},"enabled":false,"position":28,"file_url":"https://gist.github.com/Brawl345/96103746f8ef5cce17b0bc38f3e104f1/raw/mydealz-link-swapper.user.js","uuid":"70d09790-1f3f-493f-8b8e-26ec5dbd4322","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBNeURlYWx6IExpbmsgU3dhcHBlcgovLyBAdmVyc2lvbiAgICAgIDEuMC4wCi8vIEBkZXNjcmlwdGlvbiAgWmVpZ3QgcmljaHRpZ2UgTGlua3MgYXVmIE15RGVhbHoKLy8gQGF1dGhvciAgICAgICBCcmF3bDM0NQovLyBAbWF0Y2ggICAgICAgIGh0dHBzOi8vd3d3Lm15ZGVhbHouZGUvKgovLyBAaWNvbiAgICAgICAgIGh0dHBzOi8vd3d3Lm15ZGVhbHouZGUvZmF2aWNvbi5pY28KLy8gQGRvd25sb2FkVVJMICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmF3bDM0NS85NjEwMzc0NmY4ZWY1Y2NlMTdiMGJjMzhmM2UxMDRmMS9yYXcvbXlkZWFsei1saW5rLXN3YXBwZXIudXNlci5qcwovLyBAdXBkYXRlVVJMICAgIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyYXdsMzQ1Lzk2MTAzNzQ2ZjhlZjVjY2UxN2IwYmMzOGYzZTEwNGYxL3Jhdy9teWRlYWx6LWxpbmstc3dhcHBlci51c2VyLmpzCi8vIEBzdXBwb3J0VVJMICAgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJhd2wzNDUvOTYxMDM3NDZmOGVmNWNjZTE3YjBiYzM4ZjNlMTA0ZjEjY29tbWVudHMKLy8gQGdyYW50ICAgICAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIGNvbnN0IGxpbmtzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImEiKTsKICAgIGNvbnN0IGxlbiA9IGxpbmtzLmxlbmd0aAogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgIGNvbnN0IGxpbmsgPSBsaW5rc1tpXTsKICAgICAgICBpZiAobGluay50aXRsZSAhPT0gdW5kZWZpbmVkICYmIGxpbmsudGl0bGUuc3RhcnRzV2l0aCgiaHR0cCIpKSB7CiAgICAgICAgICAgIGxpbmsuaHJlZiA9IGxpbmsudGl0bGU7CiAgICAgICAgfQogICAgfQoKfSkoKTsK"},{"name":"Activate all Itch.io Bundle downloads","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["https://itch.io/bundle/download/*","https://*.itch.io/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1596215832718,"data":{}},"enabled":false,"position":29,"uuid":"7a5e8de5-6e81-450f-a830-fdcce784ab39","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgIEFjdGl2YXRlIGFsbCBJdGNoLmlvIEJ1bmRsZSBkb3dubG9hZHMKLy8gQHZlcnNpb24gIDEKLy8gQGluY2x1ZGUgICAgICAgIGh0dHBzOi8vaXRjaC5pby9idW5kbGUvZG93bmxvYWQvKgovLyBAaW5jbHVkZSAgICAgICAgaHR0cHM6Ly8qLml0Y2guaW8vKgovLyBAcmVxdWlyZSBodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8zLjQuMS9qcXVlcnkubWluLmpzCi8vIEBncmFudCAgICBub25lCi8vID09L1VzZXJTY3JpcHQ9PQoKJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignaHR0cHM6Ly9pdGNoLmlvL2J1bmRsZS9kb3dubG9hZC8nKSA9PSAwKSB7CiAgICAvLyBCdW5kbGUgcGFnZQogICAgdmFyIGNsYWltQnV0dG9ucyA9ICQoJ2J1dHRvblt2YWx1ZT0iY2xhaW0iXScpOwogICAgaWYgKGNsYWltQnV0dG9ucy5sZW5ndGggPiAwKSB7CiAgICAgIC8vIENsYWltIHRoZSBmaXJzdCB1bmNsYWltZWQgZ2FtZSBvbiB0aGUgcGFnZQogICAgICAgIGNsYWltQnV0dG9ucy5maXJzdCgpLmNsaWNrKCk7CiAgICB9CiAgICAgIGVsc2UgewogICAgICAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHBhZ2UgaWYgYWxsIGFyZSBhbHJlYWR5IGNsYWltZWQKICAgICAgdmFyIG5leHRQYWdlQnV0dG9ucyA9ICQoJ2EubmV4dF9wYWdlLmJ1dHRvbicpOwogICAgICBpZiAobmV4dFBhZ2VCdXR0b25zLmxlbmd0aCA+IDApIG5leHRQYWdlQnV0dG9uc1swXS5jbGljaygpOwogICAgfQogIH0KICBlbHNlIGlmICghd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignaHR0cHM6Ly9pdGNoLmlvL2J1bmRsZS9kb3dubG9hZC8nKSA9PSAwKSB7CiAgICAvLyBEb3dubG9hZCBwYWdlLCByZXR1cm4gdG8gYnVuZGxlCiAgICAgIHdpbmRvdy5oaXN0b3J5LmJhY2soKTsKICB9Cn0KLDIwMDApOwp9KTsK","requires":[{"meta":{"name":"jquery.min.js","url":"https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js","ts":1597161911107,"mimetype":"text/javascript"},"source":"LyohIGpRdWVyeSB2My40LjEgfCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIHwganF1ZXJ5Lm9yZy9saWNlbnNlICovCiFmdW5jdGlvbihlLHQpeyJ1c2Ugc3RyaWN0Ijsib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50Iik7cmV0dXJuIHQoZSl9OnQoZSl9KCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKEMsZSl7InVzZSBzdHJpY3QiO3ZhciB0PVtdLEU9Qy5kb2N1bWVudCxyPU9iamVjdC5nZXRQcm90b3R5cGVPZixzPXQuc2xpY2UsZz10LmNvbmNhdCx1PXQucHVzaCxpPXQuaW5kZXhPZixuPXt9LG89bi50b1N0cmluZyx2PW4uaGFzT3duUHJvcGVydHksYT12LnRvU3RyaW5nLGw9YS5jYWxsKE9iamVjdCkseT17fSxtPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYibnVtYmVyIiE9dHlwZW9mIGUubm9kZVR5cGV9LHg9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30sYz17dHlwZTohMCxzcmM6ITAsbm9uY2U6ITAsbm9Nb2R1bGU6ITB9O2Z1bmN0aW9uIGIoZSx0LG4pe3ZhciByLGksbz0obj1ufHxFKS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtpZihvLnRleHQ9ZSx0KWZvcihyIGluIGMpKGk9dFtyXXx8dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKHIpKSYmby5zZXRBdHRyaWJ1dGUocixpKTtuLmhlYWQuYXBwZW5kQ2hpbGQobykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKX1mdW5jdGlvbiB3KGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9uW28uY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfXZhciBmPSIzLjQuMSIsaz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgay5mbi5pbml0KGUsdCl9LHA9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nO2Z1bmN0aW9uIGQoZSl7dmFyIHQ9ISFlJiYibGVuZ3RoImluIGUmJmUubGVuZ3RoLG49dyhlKTtyZXR1cm4hbShlKSYmIXgoZSkmJigiYXJyYXkiPT09bnx8MD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmMDx0JiZ0LTEgaW4gZSl9ay5mbj1rLnByb3RvdHlwZT17anF1ZXJ5OmYsY29uc3RydWN0b3I6ayxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHMuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3MuY2FsbCh0aGlzKTplPDA/dGhpc1tlK3RoaXMubGVuZ3RoXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9ay5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGsuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGsubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2socy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soMDw9biYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDp1LHNvcnQ6dC5zb3J0LHNwbGljZTp0LnNwbGljZX0say5leHRlbmQ9ay5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSx0LG4scixpLG8sYT1hcmd1bWVudHNbMF18fHt9LHM9MSx1PWFyZ3VtZW50cy5sZW5ndGgsbD0hMTtmb3IoImJvb2xlYW4iPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSwib2JqZWN0Ij09dHlwZW9mIGF8fG0oYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKXI9ZVt0XSwiX19wcm90b19fIiE9PXQmJmEhPT1yJiYobCYmciYmKGsuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhuPWFbdF0sbz1pJiYhQXJyYXkuaXNBcnJheShuKT9bXTppfHxrLmlzUGxhaW5PYmplY3Qobik/bjp7fSxpPSExLGFbdF09ay5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LGsuZXh0ZW5kKHtleHBhbmRvOiJqUXVlcnkiKyhmK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xEL2csIiIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKGUpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1vLmNhbGwoZSkpJiYoISh0PXIoZSkpfHwiZnVuY3Rpb24iPT10eXBlb2Yobj12LmNhbGwodCwiY29uc3RydWN0b3IiKSYmdC5jb25zdHJ1Y3RvcikmJmEuY2FsbChuKT09PWwpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSx0KXtiKGUse25vbmNlOnQmJnQubm9uY2V9KX0sZWFjaDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtpZihkKGUpKXtmb3Iobj1lLmxlbmd0aDtyPG47cisrKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVha31lbHNlIGZvcihyIGluIGUpaWYoITE9PT10LmNhbGwoZVtyXSxyLGVbcl0pKWJyZWFrO3JldHVybiBlfSx0cmltOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKHAsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKGQoT2JqZWN0KGUpKT9rLm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTp1LmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6aS5jYWxsKHQsZSxuKX0sbWVyZ2U6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49K3QubGVuZ3RoLHI9MCxpPWUubGVuZ3RoO3I8bjtyKyspZVtpKytdPXRbcl07cmV0dXJuIGUubGVuZ3RoPWksZX0sZ3JlcDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLGk9MCxvPWUubGVuZ3RoLGE9IW47aTxvO2krKykhdChlW2ldLGkpIT09YSYmci5wdXNoKGVbaV0pO3JldHVybiByfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz0wLGE9W107aWYoZChlKSlmb3Iocj1lLmxlbmd0aDtvPHI7bysrKW51bGwhPShpPXQoZVtvXSxvLG4pKSYmYS5wdXNoKGkpO2Vsc2UgZm9yKG8gaW4gZSludWxsIT0oaT10KGVbb10sbyxuKSkmJmEucHVzaChpKTtyZXR1cm4gZy5hcHBseShbXSxhKX0sZ3VpZDoxLHN1cHBvcnQ6eX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihrLmZuW1N5bWJvbC5pdGVyYXRvcl09dFtTeW1ib2wuaXRlcmF0b3JdKSxrLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blsiW29iamVjdCAiK3QrIl0iXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgaD1mdW5jdGlvbihuKXt2YXIgZSxkLGIsbyxpLGgsZixnLHcsdSxsLFQsQyxhLEUsdixzLGMseSxrPSJzaXp6bGUiKzEqbmV3IERhdGUsbT1uLmRvY3VtZW50LFM9MCxyPTAscD11ZSgpLHg9dWUoKSxOPXVlKCksQT11ZSgpLEQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihsPSEwKSwwfSxqPXt9Lmhhc093blByb3BlcnR5LHQ9W10scT10LnBvcCxMPXQucHVzaCxIPXQucHVzaCxPPXQuc2xpY2UsUD1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX0sUj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLE09IltcXHgyMFxcdFxcclxcblxcZl0iLEk9Iig/OlxcXFwufFtcXHctXXxbXlwwLVxceGEwXSkrIixXPSJcXFsiK00rIiooIitJKyIpKD86IitNKyIqKFsqXiR8IX5dPz0pIitNKyIqKD86JygoPzpcXFxcLnxbXlxcXFwnXSkqKSd8XCIoKD86XFxcXC58W15cXFxcXCJdKSopXCJ8KCIrSSsiKSl8KSIrTSsiKlxcXSIsJD0iOigiK0krIikoPzpcXCgoKCcoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwiKXwoKD86XFxcXC58W15cXFxcKClbXFxdXXwiK1crIikqKXwuKilcXCl8KSIsRj1uZXcgUmVnRXhwKE0rIisiLCJnIiksQj1uZXcgUmVnRXhwKCJeIitNKyIrfCgoPzpefFteXFxcXF0pKD86XFxcXC4pKikiK00rIiskIiwiZyIpLF89bmV3IFJlZ0V4cCgiXiIrTSsiKiwiK00rIioiKSx6PW5ldyBSZWdFeHAoIl4iK00rIiooWz4rfl18IitNKyIpIitNKyIqIiksVT1uZXcgUmVnRXhwKE0rInw+IiksWD1uZXcgUmVnRXhwKCQpLFY9bmV3IFJlZ0V4cCgiXiIrSSsiJCIpLEc9e0lEOm5ldyBSZWdFeHAoIl4jKCIrSSsiKSIpLENMQVNTOm5ldyBSZWdFeHAoIl5cXC4oIitJKyIpIiksVEFHOm5ldyBSZWdFeHAoIl4oIitJKyJ8WypdKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrVyksUFNFVURPOm5ldyBSZWdFeHAoIl4iKyQpLENISUxEOm5ldyBSZWdFeHAoIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcKCIrTSsiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTSsiKig/OihbKy1dfCkiK00rIiooXFxkKyl8KSkiK00rIipcXCl8KSIsImkiKSxib29sOm5ldyBSZWdFeHAoIl4oPzoiK1IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKCJeIitNKyIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK00rIiooKD86LVxcZCk/XFxkKikiK00rIipcXCl8KSg/PVteLV18JCkiLCJpIil9LFk9L0hUTUwkL2ksUT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEo9L15oXGQkL2ksSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGVlPS9bK35dLyx0ZT1uZXcgUmVnRXhwKCJcXFxcKFtcXGRhLWZdezEsNn0iK00rIj98KCIrTSsiKXwuKSIsImlnIiksbmU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIweCIrdC02NTUzNjtyZXR1cm4gciE9cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0scmU9LyhbXDAtXHgxZlx4N2ZdfF4tP1xkKXxeLSR8W15cMC1ceDFmXHg3Zi1cdUZGRkZcdy1dL2csaWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD8iXDAiPT09ZT8iXHVmZmZkIjplLnNsaWNlKDAsLTEpKyJcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KSsiICI6IlxcIitlfSxvZT1mdW5jdGlvbigpe1QoKX0sYWU9YmUoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYiZmllbGRzZXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSx7ZGlyOiJwYXJlbnROb2RlIixuZXh0OiJsZWdlbmQifSk7dHJ5e0guYXBwbHkodD1PLmNhbGwobS5jaGlsZE5vZGVzKSxtLmNoaWxkTm9kZXMpLHRbbS5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2goZSl7SD17YXBwbHk6dC5sZW5ndGg/ZnVuY3Rpb24oZSx0KXtMLmFwcGx5KGUsTy5jYWxsKHQpKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxlbmd0aCxyPTA7d2hpbGUoZVtuKytdPXRbcisrXSk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gc2UodCxlLG4scil7dmFyIGksbyxhLHMsdSxsLGMsZj1lJiZlLm93bmVyRG9jdW1lbnQscD1lP2Uubm9kZVR5cGU6OTtpZihuPW58fFtdLCJzdHJpbmciIT10eXBlb2YgdHx8IXR8fDEhPT1wJiY5IT09cCYmMTEhPT1wKXJldHVybiBuO2lmKCFyJiYoKGU/ZS5vd25lckRvY3VtZW50fHxlOm0pIT09QyYmVChlKSxlPWV8fEMsRSkpe2lmKDExIT09cCYmKHU9Wi5leGVjKHQpKSlpZihpPXVbMV0pe2lmKDk9PT1wKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChpKSkpcmV0dXJuIG47aWYoYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYoZiYmKGE9Zi5nZXRFbGVtZW50QnlJZChpKSkmJnkoZSxhKSYmYS5pZD09PWkpcmV0dXJuIG4ucHVzaChhKSxufWVsc2V7aWYodVsyXSlyZXR1cm4gSC5hcHBseShuLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLG47aWYoKGk9dVszXSkmJmQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBILmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGkpKSxufWlmKGQucXNhJiYhQVt0KyIgIl0mJighdnx8IXYudGVzdCh0KSkmJigxIT09cHx8Im9iamVjdCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtpZihjPXQsZj1lLDE9PT1wJiZVLnRlc3QodCkpeyhzPWUuZ2V0QXR0cmlidXRlKCJpZCIpKT9zPXMucmVwbGFjZShyZSxpZSk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPWspLG89KGw9aCh0KSkubGVuZ3RoO3doaWxlKG8tLSlsW29dPSIjIitzKyIgIit4ZShsW29dKTtjPWwuam9pbigiLCIpLGY9ZWUudGVzdCh0KSYmeWUoZS5wYXJlbnROb2RlKXx8ZX10cnl7cmV0dXJuIEguYXBwbHkobixmLnF1ZXJ5U2VsZWN0b3JBbGwoYykpLG59Y2F0Y2goZSl7QSh0LCEwKX1maW5hbGx5e3M9PT1rJiZlLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBnKHQucmVwbGFjZShCLCIkMSIpLGUsbixyKX1mdW5jdGlvbiB1ZSgpe3ZhciByPVtdO3JldHVybiBmdW5jdGlvbiBlKHQsbil7cmV0dXJuIHIucHVzaCh0KyIgIik+Yi5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbci5zaGlmdCgpXSxlW3QrIiAiXT1ufX1mdW5jdGlvbiBsZShlKXtyZXR1cm4gZVtrXT0hMCxlfWZ1bmN0aW9uIGNlKGUpe3ZhciB0PUMuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBmZShlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPW4ubGVuZ3RoO3doaWxlKHItLSliLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBwZShlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZGUodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJmUudHlwZT09PXR9fWZ1bmN0aW9uIGhlKG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKCJpbnB1dCI9PT10fHwiYnV0dG9uIj09PXQpJiZlLnR5cGU9PT1ufX1mdW5jdGlvbiBnZSh0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuImZvcm0iaW4gZT9lLnBhcmVudE5vZGUmJiExPT09ZS5kaXNhYmxlZD8ibGFiZWwiaW4gZT8ibGFiZWwiaW4gZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5kaXNhYmxlZD09PXQ6ZS5kaXNhYmxlZD09PXQ6ZS5pc0Rpc2FibGVkPT09dHx8ZS5pc0Rpc2FibGVkIT09IXQmJmFlKGUpPT09dDplLmRpc2FibGVkPT09dDoibGFiZWwiaW4gZSYmZS5kaXNhYmxlZD09PXR9fWZ1bmN0aW9uIHZlKGEpe3JldHVybiBsZShmdW5jdGlvbihvKXtyZXR1cm4gbz0rbyxsZShmdW5jdGlvbihlLHQpe3ZhciBuLHI9YShbXSxlLmxlbmd0aCxvKSxpPXIubGVuZ3RoO3doaWxlKGktLSllW249cltpXV0mJihlW25dPSEodFtuXT1lW25dKSl9KX0pfWZ1bmN0aW9uIHllKGUpe3JldHVybiBlJiYidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9Zm9yKGUgaW4gZD1zZS5zdXBwb3J0PXt9LGk9c2UuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uYW1lc3BhY2VVUkksbj0oZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIVkudGVzdCh0fHxuJiZuLm5vZGVOYW1lfHwiSFRNTCIpfSxUPXNlLnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lP2Uub3duZXJEb2N1bWVudHx8ZTptO3JldHVybiByIT09QyYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50JiYoYT0oQz1yKS5kb2N1bWVudEVsZW1lbnQsRT0haShDKSxtIT09QyYmKG49Qy5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoInVubG9hZCIsb2UsITEpOm4uYXR0YWNoRXZlbnQmJm4uYXR0YWNoRXZlbnQoIm9udW5sb2FkIixvZSkpLGQuYXR0cmlidXRlcz1jZShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9ImkiLCFlLmdldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIil9KSxkLmdldEVsZW1lbnRzQnlUYWdOYW1lPWNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKEMuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksZC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPUsudGVzdChDLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpLGQuZ2V0QnlJZD1jZShmdW5jdGlvbihlKXtyZXR1cm4gYS5hcHBlbmRDaGlsZChlKS5pZD1rLCFDLmdldEVsZW1lbnRzQnlOYW1lfHwhQy5nZXRFbGVtZW50c0J5TmFtZShrKS5sZW5ndGh9KSxkLmdldEJ5SWQ/KGIuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh0ZSxuZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSxiLmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudEJ5SWQmJkUpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOihiLmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgbj1lLnJlcGxhY2UodGUsbmUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD0idW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiB0JiZ0LnZhbHVlPT09bn19LGIuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgdC5nZXRFbGVtZW50QnlJZCYmRSl7dmFyIG4scixpLG89dC5nZXRFbGVtZW50QnlJZChlKTtpZihvKXtpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107aT10LmdldEVsZW1lbnRzQnlOYW1lKGUpLHI9MDt3aGlsZShvPWlbcisrXSlpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb119cmV0dXJuW119fSksYi5maW5kLlRBRz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6ZC5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoIioiPT09ZSl7d2hpbGUobj1vW2krK10pMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sYi5maW5kLkNMQVNTPWQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmRSlyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxzPVtdLHY9W10sKGQucXNhPUsudGVzdChDLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGNlKGZ1bmN0aW9uKGUpe2EuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIitrKyInPjwvYT48c2VsZWN0IGlkPSciK2srIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmdi5wdXNoKCJbKl4kXT0iK00rIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8di5wdXNoKCJcXFsiK00rIiooPzp2YWx1ZXwiK1IrIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49IitrKyItXSIpLmxlbmd0aHx8di5wdXNoKCJ+PSIpLGUucXVlcnlTZWxlY3RvckFsbCgiOmNoZWNrZWQiKS5sZW5ndGh8fHYucHVzaCgiOmNoZWNrZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoImEjIitrKyIrKiIpLmxlbmd0aHx8di5wdXNoKCIuIy4rWyt+XSIpfSksY2UoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9Qy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmdi5wdXNoKCJuYW1lIitNKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ2LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksYS5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnYucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx2LnB1c2goIiwuKjoiKX0pKSwoZC5tYXRjaGVzU2VsZWN0b3I9Sy50ZXN0KGM9YS5tYXRjaGVzfHxhLndlYmtpdE1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEub01hdGNoZXNTZWxlY3Rvcnx8YS5tc01hdGNoZXNTZWxlY3RvcikpJiZjZShmdW5jdGlvbihlKXtkLmRpc2Nvbm5lY3RlZE1hdGNoPWMuY2FsbChlLCIqIiksYy5jYWxsKGUsIltzIT0nJ106eCIpLHMucHVzaCgiIT0iLCQpfSksdj12Lmxlbmd0aCYmbmV3IFJlZ0V4cCh2LmpvaW4oInwiKSkscz1zLmxlbmd0aCYmbmV3IFJlZ0V4cChzLmpvaW4oInwiKSksdD1LLnRlc3QoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikseT10fHxLLnRlc3QoYS5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISghcnx8MSE9PXIubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHIpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocikpKX06ZnVuY3Rpb24oZSx0KXtpZih0KXdoaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxEPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gbD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09PSh0Lm93bmVyRG9jdW1lbnR8fHQpP2UuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk6MSl8fCFkLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PW4/ZT09PUN8fGUub3duZXJEb2N1bWVudD09PW0mJnkobSxlKT8tMTp0PT09Q3x8dC5vd25lckRvY3VtZW50PT09bSYmeShtLHQpPzE6dT9QKHUsZSktUCh1LHQpOjA6NCZuPy0xOjEpfTpmdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBsPSEwLDA7dmFyIG4scj0wLGk9ZS5wYXJlbnROb2RlLG89dC5wYXJlbnROb2RlLGE9W2VdLHM9W3RdO2lmKCFpfHwhbylyZXR1cm4gZT09PUM/LTE6dD09PUM/MTppPy0xOm8/MTp1P1AodSxlKS1QKHUsdCk6MDtpZihpPT09bylyZXR1cm4gcGUoZSx0KTtuPWU7d2hpbGUobj1uLnBhcmVudE5vZGUpYS51bnNoaWZ0KG4pO249dDt3aGlsZShuPW4ucGFyZW50Tm9kZSlzLnVuc2hpZnQobik7d2hpbGUoYVtyXT09PXNbcl0pcisrO3JldHVybiByP3BlKGFbcl0sc1tyXSk6YVtyXT09PW0/LTE6c1tyXT09PW0/MTowfSksQ30sc2UubWF0Y2hlcz1mdW5jdGlvbihlLHQpe3JldHVybiBzZShlLG51bGwsbnVsbCx0KX0sc2UubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsdCl7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1DJiZUKGUpLGQubWF0Y2hlc1NlbGVjdG9yJiZFJiYhQVt0KyIgIl0mJighc3x8IXMudGVzdCh0KSkmJighdnx8IXYudGVzdCh0KSkpdHJ5e3ZhciBuPWMuY2FsbChlLHQpO2lmKG58fGQuZGlzY29ubmVjdGVkTWF0Y2h8fGUuZG9jdW1lbnQmJjExIT09ZS5kb2N1bWVudC5ub2RlVHlwZSlyZXR1cm4gbn1jYXRjaChlKXtBKHQsITApfXJldHVybiAwPHNlKHQsQyxudWxsLFtlXSkubGVuZ3RofSxzZS5jb250YWlucz1mdW5jdGlvbihlLHQpe3JldHVybihlLm93bmVyRG9jdW1lbnR8fGUpIT09QyYmVChlKSx5KGUsdCl9LHNlLmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PUMmJlQoZSk7dmFyIG49Yi5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZqLmNhbGwoYi5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUUpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmQuYXR0cmlidXRlc3x8IUU/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSxzZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UocmUsaWUpfSxzZS5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrZSl9LHNlLnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTAsaT0wO2lmKGw9IWQuZGV0ZWN0RHVwbGljYXRlcyx1PSFkLnNvcnRTdGFibGUmJmUuc2xpY2UoMCksZS5zb3J0KEQpLGwpe3doaWxlKHQ9ZVtpKytdKXQ9PT1lW2ldJiYocj1uLnB1c2goaSkpO3doaWxlKHItLSllLnNwbGljZShuW3JdLDEpfXJldHVybiB1PW51bGwsZX0sbz1zZS5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLnRleHRDb250ZW50KXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1vKGUpfWVsc2UgaWYoMz09PWl8fDQ9PT1pKXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIHdoaWxlKHQ9ZVtyKytdKW4rPW8odCk7cmV0dXJuIG59LChiPXNlLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOmxlLG1hdGNoOkcsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOnsiPiI6e2RpcjoicGFyZW50Tm9kZSIsZmlyc3Q6ITB9LCIgIjp7ZGlyOiJwYXJlbnROb2RlIn0sIisiOntkaXI6InByZXZpb3VzU2libGluZyIsZmlyc3Q6ITB9LCJ+Ijp7ZGlyOiJwcmV2aW91c1NpYmxpbmcifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh0ZSxuZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8IiIpLnJlcGxhY2UodGUsbmUpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxzZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZzZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gRy5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZYLnRlc3QobikmJih0PWgobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHRlLG5lKS50b0xvd2VyQ2FzZSgpO3JldHVybiIqIj09PWU/ZnVuY3Rpb24oKXtyZXR1cm4hMH06ZnVuY3Rpb24oZSl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXR9fSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1wW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitNKyIpIitlKyIoIitNKyJ8JCkiKSkmJnAoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KCJzdHJpbmciPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHwidW5kZWZpbmVkIiE9dHlwZW9mIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24obixyLGkpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD1zZS5hdHRyKGUsbik7cmV0dXJuIG51bGw9PXQ/IiE9Ij09PXI6IXJ8fCh0Kz0iIiwiPSI9PT1yP3Q9PT1pOiIhPSI9PT1yP3QhPT1pOiJePSI9PT1yP2kmJjA9PT10LmluZGV4T2YoaSk6Iio9Ij09PXI/aSYmLTE8dC5pbmRleE9mKGkpOiIkPSI9PT1yP2kmJnQuc2xpY2UoLWkubGVuZ3RoKT09PWk6In49Ij09PXI/LTE8KCIgIit0LnJlcGxhY2UoRiwiICIpKyIgIikuaW5kZXhPZihpKToifD0iPT09ciYmKHQ9PT1pfHx0LnNsaWNlKDAsaS5sZW5ndGgrMSk9PT1pKyItIikpfX0sQ0hJTEQ6ZnVuY3Rpb24oaCxlLHQsZyx2KXt2YXIgeT0ibnRoIiE9PWguc2xpY2UoMCwzKSxtPSJsYXN0IiE9PWguc2xpY2UoLTQpLHg9Im9mLXR5cGUiPT09ZTtyZXR1cm4gMT09PWcmJjA9PT12P2Z1bmN0aW9uKGUpe3JldHVybiEhZS5wYXJlbnROb2RlfTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9eSE9PW0/Im5leHRTaWJsaW5nIjoicHJldmlvdXNTaWJsaW5nIixjPWUucGFyZW50Tm9kZSxmPXgmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxwPSFuJiYheCxkPSExO2lmKGMpe2lmKHkpe3doaWxlKGwpe2E9ZTt3aGlsZShhPWFbbF0paWYoeD9hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1mOjE9PT1hLm5vZGVUeXBlKXJldHVybiExO3U9bD0ib25seSI9PT1oJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVttP2MuZmlyc3RDaGlsZDpjLmxhc3RDaGlsZF0sbSYmcCl7ZD0ocz0ocj0oaT0obz0oYT1jKVtrXXx8KGFba109e30pKVthLnVuaXF1ZUlEXXx8KG9bYS51bmlxdWVJRF09e30pKVtoXXx8W10pWzBdPT09UyYmclsxXSkmJnJbMl0sYT1zJiZjLmNoaWxkTm9kZXNbc107d2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoMT09PWEubm9kZVR5cGUmJisrZCYmYT09PWUpe2lbaF09W1MscyxkXTticmVha319ZWxzZSBpZihwJiYoZD1zPShyPShpPShvPShhPWUpW2tdfHwoYVtrXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdfHxbXSlbMF09PT1TJiZyWzFdKSwhMT09PWQpd2hpbGUoYT0rK3MmJmEmJmFbbF18fChkPXM9MCl8fHUucG9wKCkpaWYoKHg/YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZjoxPT09YS5ub2RlVHlwZSkmJisrZCYmKHAmJigoaT0obz1hW2tdfHwoYVtrXT17fSkpW2EudW5pcXVlSURdfHwob1thLnVuaXF1ZUlEXT17fSkpW2hdPVtTLGRdKSxhPT09ZSkpYnJlYWs7cmV0dXJuKGQtPXYpPT09Z3x8ZCVnPT0wJiYwPD1kL2d9fX0sUFNFVURPOmZ1bmN0aW9uKGUsbyl7dmFyIHQsYT1iLnBzZXVkb3NbZV18fGIuc2V0RmlsdGVyc1tlLnRvTG93ZXJDYXNlKCldfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgcHNldWRvOiAiK2UpO3JldHVybiBhW2tdP2Eobyk6MTxhLmxlbmd0aD8odD1bZSxlLCIiLG9dLGIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eShlLnRvTG93ZXJDYXNlKCkpP2xlKGZ1bmN0aW9uKGUsdCl7dmFyIG4scj1hKGUsbyksaT1yLmxlbmd0aDt3aGlsZShpLS0pZVtuPVAoZSxyW2ldKV09ISh0W25dPXJbaV0pfSk6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSwwLHQpfSk6YX19LHBzZXVkb3M6e25vdDpsZShmdW5jdGlvbihlKXt2YXIgcj1bXSxpPVtdLHM9ZihlLnJlcGxhY2UoQiwiJDEiKSk7cmV0dXJuIHNba10/bGUoZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbz1zKGUsbnVsbCxyLFtdKSxhPWUubGVuZ3RoO3doaWxlKGEtLSkoaT1vW2FdKSYmKGVbYV09ISh0W2FdPWkpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gclswXT1lLHMocixudWxsLG4saSksclswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpsZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8c2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6bGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHRlLG5lKSxmdW5jdGlvbihlKXtyZXR1cm4tMTwoZS50ZXh0Q29udGVudHx8byhlKSkuaW5kZXhPZih0KX19KSxsYW5nOmxlKGZ1bmN0aW9uKG4pe3JldHVybiBWLnRlc3Qobnx8IiIpfHxzZS5lcnJvcigidW5zdXBwb3J0ZWQgbGFuZzogIituKSxuPW4ucmVwbGFjZSh0ZSxuZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbihlKXt2YXIgdDtkb3tpZih0PUU/ZS5sYW5nOmUuZ2V0QXR0cmlidXRlKCJ4bWw6bGFuZyIpfHxlLmdldEF0dHJpYnV0ZSgibGFuZyIpKXJldHVybih0PXQudG9Mb3dlckNhc2UoKSk9PT1ufHwwPT09dC5pbmRleE9mKG4rIi0iKX13aGlsZSgoZT1lLnBhcmVudE5vZGUpJiYxPT09ZS5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKGUpe3ZhciB0PW4ubG9jYXRpb24mJm4ubG9jYXRpb24uaGFzaDtyZXR1cm4gdCYmdC5zbGljZSgxKT09PWUuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUMuYWN0aXZlRWxlbWVudCYmKCFDLmhhc0ZvY3VzfHxDLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOmdlKCExKSxkaXNhYmxlZDpnZSghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT1lLnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIWIucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBKLnRlc3QoZS5ub2RlTmFtZSl9LGlucHV0OmZ1bmN0aW9uKGUpe3JldHVybiBRLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fCJ0ZXh0Ij09PXQudG9Mb3dlckNhc2UoKSl9LGZpcnN0OnZlKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp2ZShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dmUoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp2ZShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnZlKGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDp0PG4/dDpuOzA8PS0tcjspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6dmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0pLnBzZXVkb3MubnRoPWIucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pYi5wc2V1ZG9zW2VdPWRlKGUpO2ZvcihlIGlue3N1Ym1pdDohMCxyZXNldDohMH0pYi5wc2V1ZG9zW2VdPWhlKGUpO2Z1bmN0aW9uIG1lKCl7fWZ1bmN0aW9uIHhlKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj0iIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gYmUocyxlLHQpe3ZhciB1PWUuZGlyLGw9ZS5uZXh0LGM9bHx8dSxmPXQmJiJwYXJlbnROb2RlIj09PWMscD1yKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe3doaWxlKGU9ZVt1XSlpZigxPT09ZS5ub2RlVHlwZXx8ZilyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT1bUyxwXTtpZihuKXt3aGlsZShlPWVbdV0paWYoKDE9PT1lLm5vZGVUeXBlfHxmKSYmcyhlLHQsbikpcmV0dXJuITB9ZWxzZSB3aGlsZShlPWVbdV0paWYoMT09PWUubm9kZVR5cGV8fGYpaWYoaT0obz1lW2tdfHwoZVtrXT17fSkpW2UudW5pcXVlSURdfHwob1tlLnVuaXF1ZUlEXT17fSksbCYmbD09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSllPWVbdV18fGU7ZWxzZXtpZigocj1pW2NdKSYmclswXT09PVMmJnJbMV09PT1wKXJldHVybiBhWzJdPXJbMl07aWYoKGlbY109YSlbMl09cyhlLHQsbikpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIHdlKGkpe3JldHVybiAxPGkubGVuZ3RoP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1pLmxlbmd0aDt3aGlsZShyLS0paWYoIWlbcl0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTppWzBdfWZ1bmN0aW9uIFRlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGE9W10scz0wLHU9ZS5sZW5ndGgsbD1udWxsIT10O3M8dTtzKyspKG89ZVtzXSkmJihuJiYhbihvLHIsaSl8fChhLnB1c2gobyksbCYmdC5wdXNoKHMpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gQ2UoZCxoLGcsdix5LGUpe3JldHVybiB2JiYhdltrXSYmKHY9Q2UodikpLHkmJiF5W2tdJiYoeT1DZSh5LGUpKSxsZShmdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscz1bXSx1PVtdLGw9dC5sZW5ndGgsYz1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPTAsaT10Lmxlbmd0aDtyPGk7cisrKXNlKGUsdFtyXSxuKTtyZXR1cm4gbn0oaHx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGY9IWR8fCFlJiZoP2M6VGUoYyxzLGQsbixyKSxwPWc/eXx8KGU/ZDpsfHx2KT9bXTp0OmY7aWYoZyYmZyhmLHAsbixyKSx2KXtpPVRlKHAsdSksdihpLFtdLG4sciksbz1pLmxlbmd0aDt3aGlsZShvLS0pKGE9aVtvXSkmJihwW3Vbb11dPSEoZlt1W29dXT1hKSl9aWYoZSl7aWYoeXx8ZCl7aWYoeSl7aT1bXSxvPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmaS5wdXNoKGZbb109YSk7eShudWxsLHA9W10saSxyKX1vPXAubGVuZ3RoO3doaWxlKG8tLSkoYT1wW29dKSYmLTE8KGk9eT9QKGUsYSk6c1tvXSkmJihlW2ldPSEodFtpXT1hKSl9fWVsc2UgcD1UZShwPT09dD9wLnNwbGljZShsLHAubGVuZ3RoKTpwKSx5P3kobnVsbCx0LHAscik6SC5hcHBseSh0LHApfSl9ZnVuY3Rpb24gRWUoZSl7Zm9yKHZhciBpLHQsbixyPWUubGVuZ3RoLG89Yi5yZWxhdGl2ZVtlWzBdLnR5cGVdLGE9b3x8Yi5yZWxhdGl2ZVsiICJdLHM9bz8xOjAsdT1iZShmdW5jdGlvbihlKXtyZXR1cm4gZT09PWl9LGEsITApLGw9YmUoZnVuY3Rpb24oZSl7cmV0dXJuLTE8UChpLGUpfSxhLCEwKSxjPVtmdW5jdGlvbihlLHQsbil7dmFyIHI9IW8mJihufHx0IT09dyl8fCgoaT10KS5ub2RlVHlwZT91KGUsdCxuKTpsKGUsdCxuKSk7cmV0dXJuIGk9bnVsbCxyfV07czxyO3MrKylpZih0PWIucmVsYXRpdmVbZVtzXS50eXBlXSljPVtiZSh3ZShjKSx0KV07ZWxzZXtpZigodD1iLmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSlba10pe2ZvcihuPSsrcztuPHI7bisrKWlmKGIucmVsYXRpdmVbZVtuXS50eXBlXSlicmVhaztyZXR1cm4gQ2UoMTxzJiZ3ZShjKSwxPHMmJnhlKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09ZVtzLTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoQiwiJDEiKSx0LHM8biYmRWUoZS5zbGljZShzLG4pKSxuPHImJkVlKGU9ZS5zbGljZShuKSksbjxyJiZ4ZShlKSl9Yy5wdXNoKHQpfXJldHVybiB3ZShjKX1yZXR1cm4gbWUucHJvdG90eXBlPWIuZmlsdGVycz1iLnBzZXVkb3MsYi5zZXRGaWx0ZXJzPW5ldyBtZSxoPXNlLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLHUsbD14W2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTthPWUscz1bXSx1PWIucHJlRmlsdGVyO3doaWxlKGEpe2ZvcihvIGluIG4mJiEocj1fLmV4ZWMoYSkpfHwociYmKGE9YS5zbGljZShyWzBdLmxlbmd0aCl8fGEpLHMucHVzaChpPVtdKSksbj0hMSwocj16LmV4ZWMoYSkpJiYobj1yLnNoaWZ0KCksaS5wdXNoKHt2YWx1ZTpuLHR5cGU6clswXS5yZXBsYWNlKEIsIiAiKX0pLGE9YS5zbGljZShuLmxlbmd0aCkpLGIuZmlsdGVyKSEocj1HW29dLmV4ZWMoYSkpfHx1W29dJiYhKHI9dVtvXShyKSl8fChuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpvLG1hdGNoZXM6cn0pLGE9YS5zbGljZShuLmxlbmd0aCkpO2lmKCFuKWJyZWFrfXJldHVybiB0P2EubGVuZ3RoOmE/c2UuZXJyb3IoZSk6eChlLHMpLnNsaWNlKDApfSxmPXNlLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbix2LHksbSx4LHIsaT1bXSxvPVtdLGE9TltlKyIgIl07aWYoIWEpe3R8fCh0PWgoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKShhPUVlKHRbbl0pKVtrXT9pLnB1c2goYSk6by5wdXNoKGEpOyhhPU4oZSwodj1vLG09MDwoeT1pKS5sZW5ndGgseD0wPHYubGVuZ3RoLHI9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdT0wLGw9IjAiLGM9ZSYmW10sZj1bXSxwPXcsZD1lfHx4JiZiLmZpbmQuVEFHKCIqIixpKSxoPVMrPW51bGw9PXA/MTpNYXRoLnJhbmRvbSgpfHwuMSxnPWQubGVuZ3RoO2ZvcihpJiYodz10PT09Q3x8dHx8aSk7bCE9PWcmJm51bGwhPShvPWRbbF0pO2wrKyl7aWYoeCYmbyl7YT0wLHR8fG8ub3duZXJEb2N1bWVudD09PUN8fChUKG8pLG49IUUpO3doaWxlKHM9dlthKytdKWlmKHMobyx0fHxDLG4pKXtyLnB1c2gobyk7YnJlYWt9aSYmKFM9aCl9bSYmKChvPSFzJiZvKSYmdS0tLGUmJmMucHVzaChvKSl9aWYodSs9bCxtJiZsIT09dSl7YT0wO3doaWxlKHM9eVthKytdKXMoYyxmLHQsbik7aWYoZSl7aWYoMDx1KXdoaWxlKGwtLSljW2xdfHxmW2xdfHwoZltsXT1xLmNhbGwocikpO2Y9VGUoZil9SC5hcHBseShyLGYpLGkmJiFlJiYwPGYubGVuZ3RoJiYxPHUreS5sZW5ndGgmJnNlLnVuaXF1ZVNvcnQocil9cmV0dXJuIGkmJihTPWgsdz1wKSxjfSxtP2xlKHIpOnIpKSkuc2VsZWN0b3I9ZX1yZXR1cm4gYX0sZz1zZS5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLGM9IXImJmgoZT1sLnNlbGVjdG9yfHxlKTtpZihuPW58fFtdLDE9PT1jLmxlbmd0aCl7aWYoMjwobz1jWzBdPWNbMF0uc2xpY2UoMCkpLmxlbmd0aCYmIklEIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZFJiZiLnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0oYi5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtsJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1pPUcubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDt3aGlsZShpLS0pe2lmKGE9b1tpXSxiLnJlbGF0aXZlW3M9YS50eXBlXSlicmVhaztpZigodT1iLmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHRlLG5lKSxlZS50ZXN0KG9bMF0udHlwZSkmJnllKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJnhlKG8pKSlyZXR1cm4gSC5hcHBseShuLHIpLG47YnJlYWt9fX1yZXR1cm4obHx8ZihlLGMpKShyLHQsIUUsbiwhdHx8ZWUudGVzdChlKSYmeWUodC5wYXJlbnROb2RlKXx8dCksbn0sZC5zb3J0U3RhYmxlPWsuc3BsaXQoIiIpLnNvcnQoRCkuam9pbigiIik9PT1rLGQuZGV0ZWN0RHVwbGljYXRlcz0hIWwsVCgpLGQuc29ydERldGFjaGVkPWNlKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oQy5jcmVhdGVFbGVtZW50KCJmaWVsZHNldCIpKX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGZlKCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuIGUuZ2V0QXR0cmlidXRlKHQsInR5cGUiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxkLmF0dHJpYnV0ZXMmJmNlKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGlucHV0Lz4iLGUuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksIiI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpfSl8fGZlKCJ2YWx1ZSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuJiYiaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGNlKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKX0pfHxmZShSLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHNlfShDKTtrLmZpbmQ9aCxrLmV4cHI9aC5zZWxlY3RvcnMsay5leHByWyI6Il09ay5leHByLnBzZXVkb3Msay51bmlxdWVTb3J0PWsudW5pcXVlPWgudW5pcXVlU29ydCxrLnRleHQ9aC5nZXRUZXh0LGsuaXNYTUxEb2M9aC5pc1hNTCxrLmNvbnRhaW5zPWguY29udGFpbnMsay5lc2NhcGVTZWxlY3Rvcj1oLmVzY2FwZTt2YXIgVD1mdW5jdGlvbihlLHQsbil7dmFyIHI9W10saT12b2lkIDAhPT1uO3doaWxlKChlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZSlpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmayhlKS5pcyhuKSlicmVhaztyLnB1c2goZSl9cmV0dXJuIHJ9LFM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LE49ay5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtmdW5jdGlvbiBBKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX12YXIgRD0vXjwoW2Etel1bXlwvXDA+Olx4MjBcdFxyXG5cZl0qKVtceDIwXHRcclxuXGZdKlwvPz4oPzo8XC9cMT58KSQvaTtmdW5jdGlvbiBqKGUsbixyKXtyZXR1cm4gbShuKT9rLmdyZXAoZSxmdW5jdGlvbihlLHQpe3JldHVybiEhbi5jYWxsKGUsdCxlKSE9PXJ9KTpuLm5vZGVUeXBlP2suZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09biE9PXJ9KToic3RyaW5nIiE9dHlwZW9mIG4/ay5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuLTE8aS5jYWxsKG4sZSkhPT1yfSk6ay5maWx0ZXIobixlLHIpfWsuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP2suZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106ay5maW5kLm1hdGNoZXMoZSxrLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGsuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLnB1c2hTdGFjayhrKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZihrLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKWsuZmluZChlLGlbdF0sbik7cmV0dXJuIDE8cj9rLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhqKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFqKHRoaXMsInN0cmluZyI9PXR5cGVvZiBlJiZOLnRlc3QoZSk/ayhlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBxLEw9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0rKSkkLzsoay5mbi5pbml0PWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8cSwic3RyaW5nIj09dHlwZW9mIGUpe2lmKCEocj0iPCI9PT1lWzBdJiYiPiI9PT1lW2UubGVuZ3RoLTFdJiYzPD1lLmxlbmd0aD9bbnVsbCxlLG51bGxdOkwuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2Ygaz90WzBdOnQsay5tZXJnZSh0aGlzLGsucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6RSwhMCkpLEQudGVzdChyWzFdKSYmay5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbSh0aGlzW3JdKT90aGlzW3JdKHRbcl0pOnRoaXMuYXR0cihyLHRbcl0pO3JldHVybiB0aGlzfXJldHVybihpPUUuZ2V0RWxlbWVudEJ5SWQoclsyXSkpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoayk6ay5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT1rLmZuLHE9ayhFKTt2YXIgSD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxPPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z1bmN0aW9uIFAoZSx0KXt3aGlsZSgoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGUpO3JldHVybiBlfWsuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24oZSl7dmFyIHQ9ayhlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZihrLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT0ic3RyaW5nIiE9dHlwZW9mIGUmJmsoZSk7aWYoIU4udGVzdChlKSlmb3IoO3I8aTtyKyspZm9yKG49dGhpc1tyXTtuJiZuIT09dDtuPW4ucGFyZW50Tm9kZSlpZihuLm5vZGVUeXBlPDExJiYoYT8tMTxhLmluZGV4KG4pOjE9PT1uLm5vZGVUeXBlJiZrLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKDE8by5sZW5ndGg/ay51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT8ic3RyaW5nIj09dHlwZW9mIGU/aS5jYWxsKGsoZSksdGhpc1swXSk6aS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhrLnVuaXF1ZVNvcnQoay5tZXJnZSh0aGlzLmdldCgpLGsoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksay5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBUKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gVChlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gUChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBQKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBUKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIFQoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFQoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBUKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBTKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gUyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGUuY29udGVudERvY3VtZW50P2UuY29udGVudERvY3VtZW50OihBKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksay5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHIsaSl7ay5mbltyXT1mdW5jdGlvbihlLHQpe3ZhciBuPWsubWFwKHRoaXMsaSxlKTtyZXR1cm4iVW50aWwiIT09ci5zbGljZSgtNSkmJih0PWUpLHQmJiJzdHJpbmciPT10eXBlb2YgdCYmKG49ay5maWx0ZXIodCxuKSksMTx0aGlzLmxlbmd0aCYmKE9bcl18fGsudW5pcXVlU29ydChuKSxILnRlc3QocikmJm4ucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhuKX19KTt2YXIgUj0vW15ceDIwXHRcclxuXGZdKy9nO2Z1bmN0aW9uIE0oZSl7cmV0dXJuIGV9ZnVuY3Rpb24gSShlKXt0aHJvdyBlfWZ1bmN0aW9uIFcoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm0oaT1lLnByb21pc2UpP2kuY2FsbChlKS5kb25lKHQpLmZhaWwobik6ZSYmbShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fWsuQ2FsbGJhY2tzPWZ1bmN0aW9uKHIpe3ZhciBlLG47cj0ic3RyaW5nIj09dHlwZW9mIHI/KGU9cixuPXt9LGsuZWFjaChlLm1hdGNoKFIpfHxbXSxmdW5jdGlvbihlLHQpe25bdF09ITB9KSxuKTprLmV4dGVuZCh7fSxyKTt2YXIgaSx0LG8sYSxzPVtdLHU9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKGE9YXx8ci5vbmNlLG89aT0hMDt1Lmxlbmd0aDtsPS0xKXt0PXUuc2hpZnQoKTt3aGlsZSgrK2w8cy5sZW5ndGgpITE9PT1zW2xdLmFwcGx5KHRbMF0sdFsxXSkmJnIuc3RvcE9uRmFsc2UmJihsPXMubGVuZ3RoLHQ9ITEpfXIubWVtb3J5fHwodD0hMSksaT0hMSxhJiYocz10P1tdOiIiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIHMmJih0JiYhaSYmKGw9cy5sZW5ndGgtMSx1LnB1c2godCkpLGZ1bmN0aW9uIG4oZSl7ay5lYWNoKGUsZnVuY3Rpb24oZSx0KXttKHQpP3IudW5pcXVlJiZmLmhhcyh0KXx8cy5wdXNoKHQpOnQmJnQubGVuZ3RoJiYic3RyaW5nIiE9PXcodCkmJm4odCl9KX0oYXJndW1lbnRzKSx0JiYhaSYmYygpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gay5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKC0xPChuPWsuaW5BcnJheSh0LHMsbikpKXMuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlPy0xPGsuaW5BcnJheShlLHMpOjA8cy5sZW5ndGh9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIHMmJihzPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9dT1bXSxzPXQ9IiIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hc30sbG9jazpmdW5jdGlvbigpe3JldHVybiBhPXU9W10sdHx8aXx8KHM9dD0iIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFhfSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiBhfHwodD1bZSwodD10fHxbXSkuc2xpY2U/dC5zbGljZSgpOnRdLHUucHVzaCh0KSxpfHxjKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gZi5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99fTtyZXR1cm4gZn0say5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBvPVtbIm5vdGlmeSIsInByb2dyZXNzIixrLkNhbGxiYWNrcygibWVtb3J5Iiksay5DYWxsYmFja3MoIm1lbW9yeSIpLDJdLFsicmVzb2x2ZSIsImRvbmUiLGsuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGsuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDAsInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIixrLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxrLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwxLCJyZWplY3RlZCJdXSxpPSJwZW5kaW5nIixhPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBpfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LCJjYXRjaCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGEudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGk9YXJndW1lbnRzO3JldHVybiBrLkRlZmVycmVkKGZ1bmN0aW9uKHIpe2suZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShpW3RbNF1dKSYmaVt0WzRdXTtzW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKHIubm90aWZ5KS5kb25lKHIucmVzb2x2ZSkuZmFpbChyLnJlamVjdCk6clt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxpPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLHIpe3ZhciB1PTA7ZnVuY3Rpb24gbChpLG8sYSxzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9YXJndW1lbnRzLGU9ZnVuY3Rpb24oKXt2YXIgZSx0O2lmKCEoaTx1KSl7aWYoKGU9YS5hcHBseShuLHIpKT09PW8ucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvbiIpO3Q9ZSYmKCJvYmplY3QiPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGUpJiZlLnRoZW4sbSh0KT9zP3QuY2FsbChlLGwodSxvLE0scyksbCh1LG8sSSxzKSk6KHUrKyx0LmNhbGwoZSxsKHUsbyxNLHMpLGwodSxvLEkscyksbCh1LG8sTSxvLm5vdGlmeVdpdGgpKSk6KGEhPT1NJiYobj12b2lkIDAscj1bZV0pLChzfHxvLnJlc29sdmVXaXRoKShuLHIpKX19LHQ9cz9lOmZ1bmN0aW9uKCl7dHJ5e2UoKX1jYXRjaChlKXtrLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJmsuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayhlLHQuc3RhY2tUcmFjZSksdTw9aSsxJiYoYSE9PUkmJihuPXZvaWQgMCxyPVtlXSksby5yZWplY3RXaXRoKG4scikpfX07aT90KCk6KGsuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYodC5zdGFja1RyYWNlPWsuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLEMuc2V0VGltZW91dCh0KSl9fXJldHVybiBrLkRlZmVycmVkKGZ1bmN0aW9uKGUpe29bMF1bM10uYWRkKGwoMCxlLG0ocik/cjpNLGUubm90aWZ5V2l0aCkpLG9bMV1bM10uYWRkKGwoMCxlLG0odCk/dDpNKSksb1syXVszXS5hZGQobCgwLGUsbShuKT9uOkkpKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT9rLmV4dGVuZChlLGEpOmF9fSxzPXt9O3JldHVybiBrLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBuPXRbMl0scj10WzVdO2FbdFsxXV09bi5hZGQsciYmbi5hZGQoZnVuY3Rpb24oKXtpPXJ9LG9bMy1lXVsyXS5kaXNhYmxlLG9bMy1lXVszXS5kaXNhYmxlLG9bMF1bMl0ubG9jayxvWzBdWzNdLmxvY2spLG4uYWRkKHRbM10uZmlyZSksc1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBzW3RbMF0rIldpdGgiXSh0aGlzPT09cz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LHNbdFswXSsiV2l0aCJdPW4uZmlyZVdpdGh9KSxhLnByb21pc2UocyksZSYmZS5jYWxsKHMscyksc30sd2hlbjpmdW5jdGlvbihlKXt2YXIgbj1hcmd1bWVudHMubGVuZ3RoLHQ9bixyPUFycmF5KHQpLGk9cy5jYWxsKGFyZ3VtZW50cyksbz1rLkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7clt0XT10aGlzLGlbdF09MTxhcmd1bWVudHMubGVuZ3RoP3MuY2FsbChhcmd1bWVudHMpOmUsLS1ufHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZihuPD0xJiYoVyhlLG8uZG9uZShhKHQpKS5yZXNvbHZlLG8ucmVqZWN0LCFuKSwicGVuZGluZyI9PT1vLnN0YXRlKCl8fG0oaVt0XSYmaVt0XS50aGVuKSkpcmV0dXJuIG8udGhlbigpO3doaWxlKHQtLSlXKGlbdF0sYSh0KSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciAkPS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO2suRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLHQpe0MuY29uc29sZSYmQy5jb25zb2xlLndhcm4mJmUmJiQudGVzdChlLm5hbWUpJiZDLmNvbnNvbGUud2FybigialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogIitlLm1lc3NhZ2UsZS5zdGFjayx0KX0say5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbihlKXtDLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyBlfSl9O3ZhciBGPWsuRGVmZXJyZWQoKTtmdW5jdGlvbiBCKCl7RS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCKSxDLnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLEIpLGsucmVhZHkoKX1rLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBGLnRoZW4oZSlbImNhdGNoIl0oZnVuY3Rpb24oZSl7ay5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LGsuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS1rLnJlYWR5V2FpdDprLmlzUmVhZHkpfHwoay5pc1JlYWR5PSEwKSE9PWUmJjA8LS1rLnJlYWR5V2FpdHx8Ri5yZXNvbHZlV2l0aChFLFtrXSl9fSksay5yZWFkeS50aGVuPUYudGhlbiwiY29tcGxldGUiPT09RS5yZWFkeVN0YXRlfHwibG9hZGluZyIhPT1FLnJlYWR5U3RhdGUmJiFFLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbD9DLnNldFRpbWVvdXQoay5yZWFkeSk6KEUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiksQy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixCKSk7dmFyIF89ZnVuY3Rpb24oZSx0LG4scixpLG8sYSl7dmFyIHM9MCx1PWUubGVuZ3RoLGw9bnVsbD09bjtpZigib2JqZWN0Ij09PXcobikpZm9yKHMgaW4gaT0hMCxuKV8oZSx0LHMsbltzXSwhMCxvLGEpO2Vsc2UgaWYodm9pZCAwIT09ciYmKGk9ITAsbShyKXx8KGE9ITApLGwmJihhPyh0LmNhbGwoZSxyKSx0PW51bGwpOihsPXQsdD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGwuY2FsbChrKGUpLG4pfSkpLHQpKWZvcig7czx1O3MrKyl0KGVbc10sbixhP3I6ci5jYWxsKGVbc10scyx0KGVbc10sbikpKTtyZXR1cm4gaT9lOmw/dC5jYWxsKGUpOnU/dChlWzBdLG4pOm99LHo9L14tbXMtLyxVPS8tKFthLXpdKS9nO2Z1bmN0aW9uIFgoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIGUucmVwbGFjZSh6LCJtcy0iKS5yZXBsYWNlKFUsWCl9dmFyIEc9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtmdW5jdGlvbiBZKCl7dGhpcy5leHBhbmRvPWsuZXhwYW5kbytZLnVpZCsrfVkudWlkPTEsWS5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sRyhlKSYmKGUubm9kZVR5cGU/ZVt0aGlzLmV4cGFuZG9dPXQ6T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdGhpcy5leHBhbmRvLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMH0pKSksdH0sc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPXRoaXMuY2FjaGUoZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KWlbVih0KV09bjtlbHNlIGZvcihyIGluIHQpaVtWKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW1YodCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiYic3RyaW5nIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7bj0odD1BcnJheS5pc0FycmF5KHQpP3QubWFwKFYpOih0PVYodCkpaW4gcj9bdF06dC5tYXRjaChSKXx8W10pLmxlbmd0aDt3aGlsZShuLS0pZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fGsuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIWsuaXNFbXB0eU9iamVjdCh0KX19O3ZhciBRPW5ldyBZLEo9bmV3IFksSz0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLFo9L1tBLVpdL2c7ZnVuY3Rpb24gZWUoZSx0LG4pe3ZhciByLGk7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj0iZGF0YS0iK3QucmVwbGFjZShaLCItJCYiKS50b0xvd2VyQ2FzZSgpLCJzdHJpbmciPT10eXBlb2Yobj1lLmdldEF0dHJpYnV0ZShyKSkpe3RyeXtuPSJ0cnVlIj09PShpPW4pfHwiZmFsc2UiIT09aSYmKCJudWxsIj09PWk/bnVsbDppPT09K2krIiI/K2k6Sy50ZXN0KGkpP0pTT04ucGFyc2UoaSk6aSl9Y2F0Y2goZSl7fUouc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufWsuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBKLmhhc0RhdGEoZSl8fFEuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEouYWNjZXNzKGUsdCxuKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe0oucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1EucmVtb3ZlKGUsdCl9fSksay5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24obixlKXt2YXIgdCxyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PW4pe2lmKHRoaXMubGVuZ3RoJiYoaT1KLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVEuZ2V0KG8sImhhc0RhdGFBdHRycyIpKSl7dD1hLmxlbmd0aDt3aGlsZSh0LS0pYVt0XSYmMD09PShyPWFbdF0ubmFtZSkuaW5kZXhPZigiZGF0YS0iKSYmKHI9VihyLnNsaWNlKDUpKSxlZShvLHIsaVtyXSkpO1Euc2V0KG8sImhhc0RhdGFBdHRycyIsITApfXJldHVybiBpfXJldHVybiJvYmplY3QiPT10eXBlb2Ygbj90aGlzLmVhY2goZnVuY3Rpb24oKXtKLnNldCh0aGlzLG4pfSk6Xyh0aGlzLGZ1bmN0aW9uKGUpe3ZhciB0O2lmKG8mJnZvaWQgMD09PWUpcmV0dXJuIHZvaWQgMCE9PSh0PUouZ2V0KG8sbikpP3Q6dm9pZCAwIT09KHQ9ZWUobyxuKSk/dDp2b2lkIDA7dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Si5zZXQodGhpcyxuLGUpfSl9LG51bGwsZSwxPGFyZ3VtZW50cy5sZW5ndGgsbnVsbCwhMCl9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe0oucmVtb3ZlKHRoaXMsZSl9KX19KSxrLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj1RLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVEuYWNjZXNzKGUsdCxrLm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1rLnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxvPWsuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsZnVuY3Rpb24oKXtrLmRlcXVldWUoZSx0KX0sbykpLCFyJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gUS5nZXQoZSxuKXx8US5hY2Nlc3MoZSxuLHtlbXB0eTprLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtRLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxrLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/ay5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1rLnF1ZXVlKHRoaXMsdCxuKTtrLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJmsuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2suZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT1rLkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscz1mdW5jdGlvbigpey0tcnx8aS5yZXNvbHZlV2l0aChvLFtvXSl9OyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO3doaWxlKGEtLSkobj1RLmdldChvW2FdLGUrInF1ZXVlSG9va3MiKSkmJm4uZW1wdHkmJihyKyssbi5lbXB0eS5hZGQocykpO3JldHVybiBzKCksaS5wcm9taXNlKHQpfX0pO3ZhciB0ZT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxuZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrdGUrIikoW2EteiVdKikkIiwiaSIpLHJlPVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0saWU9RS5kb2N1bWVudEVsZW1lbnQsb2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfSxhZT17Y29tcG9zZWQ6ITB9O2llLmdldFJvb3ROb2RlJiYob2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGsuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHxlLmdldFJvb3ROb2RlKGFlKT09PWUub3duZXJEb2N1bWVudH0pO3ZhciBzZT1mdW5jdGlvbihlLHQpe3JldHVybiJub25lIj09PShlPXR8fGUpLnN0eWxlLmRpc3BsYXl8fCIiPT09ZS5zdHlsZS5kaXNwbGF5JiZvZShlKSYmIm5vbmUiPT09ay5jc3MoZSwiZGlzcGxheSIpfSx1ZT1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGE9e307Zm9yKG8gaW4gdClhW29dPWUuc3R5bGVbb10sZS5zdHlsZVtvXT10W29dO2ZvcihvIGluIGk9bi5hcHBseShlLHJ8fFtdKSx0KWUuc3R5bGVbb109YVtvXTtyZXR1cm4gaX07ZnVuY3Rpb24gbGUoZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBrLmNzcyhlLHQsIiIpfSx1PXMoKSxsPW4mJm5bM118fChrLmNzc051bWJlclt0XT8iIjoicHgiKSxjPWUubm9kZVR5cGUmJihrLmNzc051bWJlclt0XXx8InB4IiE9PWwmJit1KSYmbmUuZXhlYyhrLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7dS89MixsPWx8fGNbM10sYz0rdXx8MTt3aGlsZShhLS0pay5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLGsuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX12YXIgY2U9e307ZnVuY3Rpb24gZmUoZSx0KXtmb3IodmFyIG4scixpLG8sYSxzLHUsbD1bXSxjPTAsZj1lLmxlbmd0aDtjPGY7YysrKShyPWVbY10pLnN0eWxlJiYobj1yLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKGxbY109US5nZXQociwiZGlzcGxheSIpfHxudWxsLGxbY118fChyLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmc2UocikmJihsW2NdPSh1PWE9bz12b2lkIDAsYT0oaT1yKS5vd25lckRvY3VtZW50LHM9aS5ub2RlTmFtZSwodT1jZVtzXSl8fChvPWEuYm9keS5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQocykpLHU9ay5jc3MobywiZGlzcGxheSIpLG8ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvKSwibm9uZSI9PT11JiYodT0iYmxvY2siKSxjZVtzXT11KSkpKToibm9uZSIhPT1uJiYobFtjXT0ibm9uZSIsUS5zZXQociwiZGlzcGxheSIsbikpKTtmb3IoYz0wO2M8ZjtjKyspbnVsbCE9bFtjXSYmKGVbY10uc3R5bGUuZGlzcGxheT1sW2NdKTtyZXR1cm4gZX1rLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBmZSh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtzZSh0aGlzKT9rKHRoaXMpLnNob3coKTprKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBwZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxkZT0vPChbYS16XVteXC9cMD5ceDIwXHRcclxuXGZdKikvaSxoZT0vXiR8Xm1vZHVsZSR8XC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksZ2U9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLHRoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiB2ZShlLHQpe3ZhciBuO3JldHVybiBuPSJ1bmRlZmluZWQiIT10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fCIqIik6InVuZGVmaW5lZCIhPXR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fCIqIik6W10sdm9pZCAwPT09dHx8dCYmQShlLHQpP2subWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24geWUoZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspUS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fFEuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Z2Uub3B0Z3JvdXA9Z2Uub3B0aW9uLGdlLnRib2R5PWdlLnRmb290PWdlLmNvbGdyb3VwPWdlLmNhcHRpb249Z2UudGhlYWQsZ2UudGg9Z2UudGQ7dmFyIG1lLHhlLGJlPS88fCYjP1x3KzsvO2Z1bmN0aW9uIHdlKGUsdCxuLHIsaSl7Zm9yKHZhciBvLGEscyx1LGwsYyxmPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHA9W10sZD0wLGg9ZS5sZW5ndGg7ZDxoO2QrKylpZigobz1lW2RdKXx8MD09PW8paWYoIm9iamVjdCI9PT13KG8pKWsubWVyZ2UocCxvLm5vZGVUeXBlP1tvXTpvKTtlbHNlIGlmKGJlLnRlc3Qobykpe2E9YXx8Zi5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoImRpdiIpKSxzPShkZS5leGVjKG8pfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpLHU9Z2Vbc118fGdlLl9kZWZhdWx0LGEuaW5uZXJIVE1MPXVbMV0ray5odG1sUHJlZmlsdGVyKG8pK3VbMl0sYz11WzBdO3doaWxlKGMtLSlhPWEubGFzdENoaWxkO2subWVyZ2UocCxhLmNoaWxkTm9kZXMpLChhPWYuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9IiJ9ZWxzZSBwLnB1c2godC5jcmVhdGVUZXh0Tm9kZShvKSk7Zi50ZXh0Q29udGVudD0iIixkPTA7d2hpbGUobz1wW2QrK10paWYociYmLTE8ay5pbkFycmF5KG8scikpaSYmaS5wdXNoKG8pO2Vsc2UgaWYobD1vZShvKSxhPXZlKGYuYXBwZW5kQ2hpbGQobyksInNjcmlwdCIpLGwmJnllKGEpLG4pe2M9MDt3aGlsZShvPWFbYysrXSloZS50ZXN0KG8udHlwZXx8IiIpJiZuLnB1c2gobyl9cmV0dXJuIGZ9bWU9RS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoRS5jcmVhdGVFbGVtZW50KCJkaXYiKSksKHhlPUUuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx4ZS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIikseGUuc2V0QXR0cmlidXRlKCJuYW1lIiwidCIpLG1lLmFwcGVuZENoaWxkKHhlKSx5LmNoZWNrQ2xvbmU9bWUuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLG1lLmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIseS5ub0Nsb25lQ2hlY2tlZD0hIW1lLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTt2YXIgVGU9L15rZXkvLENlPS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxFZT0vXihbXi5dKikoPzpcLiguKyl8KS87ZnVuY3Rpb24ga2UoKXtyZXR1cm4hMH1mdW5jdGlvbiBTZSgpe3JldHVybiExfWZ1bmN0aW9uIE5lKGUsdCl7cmV0dXJuIGU9PT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gRS5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319KCk9PSgiZm9jdXMiPT09dCl9ZnVuY3Rpb24gQWUoZSx0LG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiB0KXtmb3IocyBpbiJzdHJpbmciIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCksdClBZShlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXZvaWQgMCk6KGk9cixyPW4sbj12b2lkIDApKSwhMT09PWkpaT1TZTtlbHNlIGlmKCFpKXJldHVybiBlO3JldHVybiAxPT09byYmKGE9aSwoaT1mdW5jdGlvbihlKXtyZXR1cm4gaygpLm9mZihlKSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLmd1aWQ9YS5ndWlkfHwoYS5ndWlkPWsuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0aW9uKCl7ay5ldmVudC5hZGQodGhpcyx0LGkscixuKX0pfWZ1bmN0aW9uIERlKGUsaSxvKXtvPyhRLnNldChlLGksITEpLGsuZXZlbnQuYWRkKGUsaSx7bmFtZXNwYWNlOiExLGhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPVEuZ2V0KHRoaXMsaSk7aWYoMSZlLmlzVHJpZ2dlciYmdGhpc1tpXSl7aWYoci5sZW5ndGgpKGsuZXZlbnQuc3BlY2lhbFtpXXx8e30pLmRlbGVnYXRlVHlwZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtlbHNlIGlmKHI9cy5jYWxsKGFyZ3VtZW50cyksUS5zZXQodGhpcyxpLHIpLHQ9byh0aGlzLGkpLHRoaXNbaV0oKSxyIT09KG49US5nZXQodGhpcyxpKSl8fHQ/US5zZXQodGhpcyxpLCExKTpuPXt9LHIhPT1uKXJldHVybiBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLGUucHJldmVudERlZmF1bHQoKSxuLnZhbHVlfWVsc2Ugci5sZW5ndGgmJihRLnNldCh0aGlzLGkse3ZhbHVlOmsuZXZlbnQudHJpZ2dlcihrLmV4dGVuZChyWzBdLGsuRXZlbnQucHJvdG90eXBlKSxyLnNsaWNlKDEpLHRoaXMpfSksZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9fSkpOnZvaWQgMD09PVEuZ2V0KGUsaSkmJmsuZXZlbnQuYWRkKGUsaSxrZSl9ay5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbih0LGUsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1RLmdldCh0KTtpZih2KXtuLmhhbmRsZXImJihuPShvPW4pLmhhbmRsZXIsaT1vLnNlbGVjdG9yKSxpJiZrLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGllLGkpLG4uZ3VpZHx8KG4uZ3VpZD1rLmd1aWQrKyksKHU9di5ldmVudHMpfHwodT12LmV2ZW50cz17fSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGsmJmsuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP2suZXZlbnQuZGlzcGF0Y2guYXBwbHkodCxhcmd1bWVudHMpOnZvaWQgMH0pLGw9KGU9KGV8fCIiKS5tYXRjaChSKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlkPWc9KHM9RWUuZXhlYyhlW2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkJiYoZj1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KGk/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQsZj1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9ay5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmay5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KGkpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sbyksKHA9dVtkXSl8fCgocD11W2RdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwodCxyLGgsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSxrLmV2ZW50Lmdsb2JhbFtkXT0hMCl9fSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9US5oYXNEYXRhKGUpJiZRLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2w9KHQ9KHR8fCIiKS5tYXRjaChSKXx8WyIiXSkubGVuZ3RoO3doaWxlKGwtLSlpZihkPWc9KHM9RWUuZXhlYyh0W2xdKXx8W10pWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtmPWsuZXZlbnQuc3BlY2lhbFtkXXx8e30scD11W2Q9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGRdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoIihefFxcLikiK2guam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIiksYT1vPXAubGVuZ3RoO3doaWxlKG8tLSljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKCIqKiIhPT1yfHwhYy5zZWxlY3Rvcil8fChwLnNwbGljZShvLDEpLGMuc2VsZWN0b3ImJnAuZGVsZWdhdGVDb3VudC0tLGYucmVtb3ZlJiZmLnJlbW92ZS5jYWxsKGUsYykpO2EmJiFwLmxlbmd0aCYmKGYudGVhcmRvd24mJiExIT09Zi50ZWFyZG93bi5jYWxsKGUsaCx2LmhhbmRsZSl8fGsucmVtb3ZlRXZlbnQoZSxkLHYuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KWsuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7ay5pc0VtcHR5T2JqZWN0KHUpJiZRLnJlbW92ZShlLCJoYW5kbGUgZXZlbnRzIil9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscz1rLmV2ZW50LmZpeChlKSx1PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxsPShRLmdldCh0aGlzLCJldmVudHMiKXx8e30pW3MudHlwZV18fFtdLGM9ay5ldmVudC5zcGVjaWFsW3MudHlwZV18fHt9O2Zvcih1WzBdPXMsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdVt0XT1hcmd1bWVudHNbdF07aWYocy5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHMpKXthPWsuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHMsbCksdD0wO3doaWxlKChpPWFbdCsrXSkmJiFzLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe3MuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wO3doaWxlKChvPWkuaGFuZGxlcnNbbisrXSkmJiFzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpcy5ybmFtZXNwYWNlJiYhMSE9PW8ubmFtZXNwYWNlJiYhcy5ybmFtZXNwYWNlLnRlc3Qoby5uYW1lc3BhY2UpfHwocy5oYW5kbGVPYmo9byxzLmRhdGE9by5kYXRhLHZvaWQgMCE9PShyPSgoay5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSx1KSkmJiExPT09KHMucmVzdWx0PXIpJiYocy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCkpKX1yZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxzKSxzLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmISgiY2xpY2siPT09ZS50eXBlJiYxPD1lLmJ1dHRvbikpZm9yKDtsIT09dGhpcztsPWwucGFyZW50Tm9kZXx8dGhpcylpZigxPT09bC5ub2RlVHlwZSYmKCJjbGljayIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspdm9pZCAwPT09YVtpPShyPXRbbl0pLnNlbGVjdG9yKyIgIl0mJihhW2ldPXIubmVlZHNDb250ZXh0Py0xPGsoaSx0aGlzKS5pbmRleChsKTprLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24odCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoay5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0Om0oZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW2suZXhwYW5kb10/ZTpuZXcgay5FdmVudChlKX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGNsaWNrOntzZXR1cDpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmRGUodCwiY2xpY2siLGtlKSwhMX0sdHJpZ2dlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzfHxlO3JldHVybiBwZS50ZXN0KHQudHlwZSkmJnQuY2xpY2smJkEodCwiaW5wdXQiKSYmRGUodCwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7cmV0dXJuIHBlLnRlc3QodC50eXBlKSYmdC5jbGljayYmQSh0LCJpbnB1dCIpJiZRLmdldCh0LCJjbGljayIpfHxBKHQsImEiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSxrLnJlbW92ZUV2ZW50PWZ1bmN0aW9uKGUsdCxuKXtlLnJlbW92ZUV2ZW50TGlzdGVuZXImJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG4pfSxrLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2Ygay5FdmVudCkpcmV0dXJuIG5ldyBrLkV2ZW50KGUsdCk7ZSYmZS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9ZSx0aGlzLnR5cGU9ZS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWUuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09ZS5kZWZhdWx0UHJldmVudGVkJiYhMT09PWUucmV0dXJuVmFsdWU/a2U6U2UsdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmay5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW2suZXhwYW5kb109ITB9LGsuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjprLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDpTZSxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpTZSxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpTZSxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1rZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1rZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9a2UsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LGsuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCwiY2hhciI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmVGUudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJkNlLnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSxrLmV2ZW50LmFkZFByb3ApLGsuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oZSx0KXtrLmV2ZW50LnNwZWNpYWxbZV09e3NldHVwOmZ1bmN0aW9uKCl7cmV0dXJuIERlKHRoaXMsZSxOZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oKXtyZXR1cm4gRGUodGhpcyxlKSwhMH0sZGVsZWdhdGVUeXBlOnR9fSksay5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0Iixwb2ludGVyZW50ZXI6InBvaW50ZXJvdmVyIixwb2ludGVybGVhdmU6InBvaW50ZXJvdXQifSxmdW5jdGlvbihlLGkpe2suZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOmksYmluZFR5cGU6aSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQsbj1lLnJlbGF0ZWRUYXJnZXQscj1lLmhhbmRsZU9iajtyZXR1cm4gbiYmKG49PT10aGlzfHxrLmNvbnRhaW5zKHRoaXMsbikpfHwoZS50eXBlPXIub3JpZ1R5cGUsdD1yLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT1pKSx0fX19KSxrLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEFlKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gQWUodGhpcyxlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIHI9ZS5oYW5kbGVPYmosayhlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZSsiLiIrci5uYW1lc3BhY2U6ci5vcmlnVHlwZSxyLnNlbGVjdG9yLHIuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49U2UpLHRoaXMuZWFjaChmdW5jdGlvbigpe2suZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIGplPS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cL1wwPlx4MjBcdFxyXG5cZl0qKVtePl0qKVwvPi9naSxxZT0vPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxMZT0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSxIZT0vXlxzKjwhKD86XFtDREFUQVxbfC0tKXwoPzpcXVxdfC0tKT5ccyokL2c7ZnVuY3Rpb24gT2UoZSx0KXtyZXR1cm4gQShlLCJ0YWJsZSIpJiZBKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCwidHIiKSYmayhlKS5jaGlsZHJlbigidGJvZHkiKVswXXx8ZX1mdW5jdGlvbiBQZShlKXtyZXR1cm4gZS50eXBlPShudWxsIT09ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIFJlKGUpe3JldHVybiJ0cnVlLyI9PT0oZS50eXBlfHwiIikuc2xpY2UoMCw1KT9lLnR5cGU9ZS50eXBlLnNsaWNlKDUpOmUucmVtb3ZlQXR0cmlidXRlKCJ0eXBlIiksZX1mdW5jdGlvbiBNZShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKFEuaGFzRGF0YShlKSYmKG89US5hY2Nlc3MoZSksYT1RLnNldCh0LG8pLGw9by5ldmVudHMpKWZvcihpIGluIGRlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fSxsKWZvcihuPTAscj1sW2ldLmxlbmd0aDtuPHI7bisrKWsuZXZlbnQuYWRkKHQsaSxsW2ldW25dKTtKLmhhc0RhdGEoZSkmJihzPUouYWNjZXNzKGUpLHU9ay5leHRlbmQoe30scyksSi5zZXQodCx1KSl9fWZ1bmN0aW9uIEllKG4scixpLG8pe3I9Zy5hcHBseShbXSxyKTt2YXIgZSx0LGEscyx1LGwsYz0wLGY9bi5sZW5ndGgscD1mLTEsZD1yWzBdLGg9bShkKTtpZihofHwxPGYmJiJzdHJpbmciPT10eXBlb2YgZCYmIXkuY2hlY2tDbG9uZSYmTGUudGVzdChkKSlyZXR1cm4gbi5lYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW4uZXEoZSk7aCYmKHJbMF09ZC5jYWxsKHRoaXMsZSx0Lmh0bWwoKSkpLEllKHQscixpLG8pfSk7aWYoZiYmKHQ9KGU9d2UocixuWzBdLm93bmVyRG9jdW1lbnQsITEsbixvKSkuZmlyc3RDaGlsZCwxPT09ZS5jaGlsZE5vZGVzLmxlbmd0aCYmKGU9dCksdHx8bykpe2ZvcihzPShhPWsubWFwKHZlKGUsInNjcmlwdCIpLFBlKSkubGVuZ3RoO2M8ZjtjKyspdT1lLGMhPT1wJiYodT1rLmNsb25lKHUsITAsITApLHMmJmsubWVyZ2UoYSx2ZSh1LCJzY3JpcHQiKSkpLGkuY2FsbChuW2NdLHUsYyk7aWYocylmb3IobD1hW2EubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsay5tYXAoYSxSZSksYz0wO2M8cztjKyspdT1hW2NdLGhlLnRlc3QodS50eXBlfHwiIikmJiFRLmFjY2Vzcyh1LCJnbG9iYWxFdmFsIikmJmsuY29udGFpbnMobCx1KSYmKHUuc3JjJiYibW9kdWxlIiE9PSh1LnR5cGV8fCIiKS50b0xvd2VyQ2FzZSgpP2suX2V2YWxVcmwmJiF1Lm5vTW9kdWxlJiZrLl9ldmFsVXJsKHUuc3JjLHtub25jZTp1Lm5vbmNlfHx1LmdldEF0dHJpYnV0ZSgibm9uY2UiKX0pOmIodS50ZXh0Q29udGVudC5yZXBsYWNlKEhlLCIiKSx1LGwpKX1yZXR1cm4gbn1mdW5jdGlvbiBXZShlLHQsbil7Zm9yKHZhciByLGk9dD9rLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8ay5jbGVhbkRhdGEodmUocikpLHIucGFyZW50Tm9kZSYmKG4mJm9lKHIpJiZ5ZSh2ZShyLCJzY3JpcHQiKSksci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHIpKTtyZXR1cm4gZX1rLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGplLCI8JDE+PC8kMj4iKX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGM9ZS5jbG9uZU5vZGUoITApLGY9b2UoZSk7aWYoISh5Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxrLmlzWE1MRG9jKGUpKSlmb3IoYT12ZShjKSxyPTAsaT0obz12ZShlKSkubGVuZ3RoO3I8aTtyKyspcz1vW3JdLHU9YVtyXSx2b2lkIDAsImlucHV0Ij09PShsPXUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJnBlLnRlc3Qocy50eXBlKT91LmNoZWNrZWQ9cy5jaGVja2VkOiJpbnB1dCIhPT1sJiYidGV4dGFyZWEiIT09bHx8KHUuZGVmYXVsdFZhbHVlPXMuZGVmYXVsdFZhbHVlKTtpZih0KWlmKG4pZm9yKG89b3x8dmUoZSksYT1hfHx2ZShjKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKU1lKG9bcl0sYVtyXSk7ZWxzZSBNZShlLGMpO3JldHVybiAwPChhPXZlKGMsInNjcmlwdCIpKS5sZW5ndGgmJnllKGEsIWYmJnZlKGUsInNjcmlwdCIpKSxjfSxjbGVhbkRhdGE6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4scixpPWsuZXZlbnQuc3BlY2lhbCxvPTA7dm9pZCAwIT09KG49ZVtvXSk7bysrKWlmKEcobikpe2lmKHQ9bltRLmV4cGFuZG9dKXtpZih0LmV2ZW50cylmb3IociBpbiB0LmV2ZW50cylpW3JdP2suZXZlbnQucmVtb3ZlKG4scik6ay5yZW1vdmVFdmVudChuLHIsdC5oYW5kbGUpO25bUS5leHBhbmRvXT12b2lkIDB9bltKLmV4cGFuZG9dJiYobltKLmV4cGFuZG9dPXZvaWQgMCl9fX0pLGsuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIFdlKHRoaXMsZSwhMCl9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gV2UodGhpcyxlKX0sdGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gXyh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2sudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHwodGhpcy50ZXh0Q29udGVudD1lKX0pfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBJZSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8T2UodGhpcyxlKS5hcHBlbmRDaGlsZChlKX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1PZSh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIEllKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJihrLmNsZWFuRGF0YSh2ZShlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbCE9ZSYmZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGsuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYhcWUudGVzdChlKSYmIWdlWyhkZS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1rLmh0bWxQcmVmaWx0ZXIoZSk7dHJ5e2Zvcig7bjxyO24rKykxPT09KHQ9dGhpc1tuXXx8e30pLm5vZGVUeXBlJiYoay5jbGVhbkRhdGEodmUodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChlKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gSWUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2suaW5BcnJheSh0aGlzLG4pPDAmJihrLmNsZWFuRGF0YSh2ZSh0aGlzKSksdCYmdC5yZXBsYWNlQ2hpbGQoZSx0aGlzKSl9LG4pfX0pLGsuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUsYSl7ay5mbltlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXSxyPWsoZSksaT1yLmxlbmd0aC0xLG89MDtvPD1pO28rKyl0PW89PT1pP3RoaXM6dGhpcy5jbG9uZSghMCksayhyW29dKVthXSh0KSx1LmFwcGx5KG4sdC5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4pfX0pO3ZhciAkZT1uZXcgUmVnRXhwKCJeKCIrdGUrIikoPyFweClbYS16JV0rJCIsImkiKSxGZT1mdW5jdGlvbihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7cmV0dXJuIHQmJnQub3BlbmVyfHwodD1DKSx0LmdldENvbXB1dGVkU3R5bGUoZSl9LEJlPW5ldyBSZWdFeHAocmUuam9pbigifCIpLCJpIik7ZnVuY3Rpb24gX2UoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4obj1ufHxGZShlKSkmJigiIiE9PShhPW4uZ2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSl8fG9lKGUpfHwoYT1rLnN0eWxlKGUsdCkpLCF5LnBpeGVsQm94U3R5bGVzKCkmJiRlLnRlc3QoYSkmJkJlLnRlc3QodCkmJihyPXMud2lkdGgsaT1zLm1pbldpZHRoLG89cy5tYXhXaWR0aCxzLm1pbldpZHRoPXMubWF4V2lkdGg9cy53aWR0aD1hLGE9bi53aWR0aCxzLndpZHRoPXIscy5taW5XaWR0aD1pLHMubWF4V2lkdGg9bykpLHZvaWQgMCE9PWE/YSsiIjphfWZ1bmN0aW9uIHplKGUsdCl7cmV0dXJue2dldDpmdW5jdGlvbigpe2lmKCFlKCkpcmV0dXJuKHRoaXMuZ2V0PXQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtkZWxldGUgdGhpcy5nZXR9fX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aWYodSl7cy5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7bWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowIix1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjYwJTt0b3A6MSUiLGllLmFwcGVuZENoaWxkKHMpLmFwcGVuZENoaWxkKHUpO3ZhciBlPUMuZ2V0Q29tcHV0ZWRTdHlsZSh1KTtuPSIxJSIhPT1lLnRvcCxhPTEyPT09dChlLm1hcmdpbkxlZnQpLHUuc3R5bGUucmlnaHQ9IjYwJSIsbz0zNj09PXQoZS5yaWdodCkscj0zNj09PXQoZS53aWR0aCksdS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGk9MTI9PT10KHUub2Zmc2V0V2lkdGgvMyksaWUucmVtb3ZlQ2hpbGQocyksdT1udWxsfX1mdW5jdGlvbiB0KGUpe3JldHVybiBNYXRoLnJvdW5kKHBhcnNlRmxvYXQoZSkpfXZhciBuLHIsaSxvLGEscz1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHU9RS5jcmVhdGVFbGVtZW50KCJkaXYiKTt1LnN0eWxlJiYodS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLHUuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iIix5LmNsZWFyQ2xvbmVTdHlsZT0iY29udGVudC1ib3giPT09dS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCxrLmV4dGVuZCh5LHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCkscn0scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG99LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCksYX0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksaX19KSl9KCk7dmFyIFVlPVsiV2Via2l0IiwiTW96IiwibXMiXSxYZT1FLmNyZWF0ZUVsZW1lbnQoImRpdiIpLnN0eWxlLFZlPXt9O2Z1bmN0aW9uIEdlKGUpe3ZhciB0PWsuY3NzUHJvcHNbZV18fFZlW2VdO3JldHVybiB0fHwoZSBpbiBYZT9lOlZlW2VdPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49VWUubGVuZ3RoO3doaWxlKG4tLSlpZigoZT1VZVtuXSt0KWluIFhlKXJldHVybiBlfShlKXx8ZSl9dmFyIFllPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxRZT0vXi0tLyxKZT17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS2U9e2xldHRlclNwYWNpbmc6IjAiLGZvbnRXZWlnaHQ6IjQwMCJ9O2Z1bmN0aW9uIFplKGUsdCxuKXt2YXIgcj1uZS5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsyXS0obnx8MCkpKyhyWzNdfHwicHgiKTp0fWZ1bmN0aW9uIGV0KGUsdCxuLHIsaSxvKXt2YXIgYT0id2lkdGgiPT09dD8xOjAscz0wLHU9MDtpZihuPT09KHI/ImJvcmRlciI6ImNvbnRlbnQiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKSJtYXJnaW4iPT09biYmKHUrPWsuY3NzKGUsbityZVthXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKHUtPWsuY3NzKGUsInBhZGRpbmciK3JlW2FdLCEwLGkpKSwibWFyZ2luIiE9PW4mJih1LT1rLmNzcyhlLCJib3JkZXIiK3JlW2FdKyJXaWR0aCIsITAsaSkpKToodSs9ay5jc3MoZSwicGFkZGluZyIrcmVbYV0sITAsaSksInBhZGRpbmciIT09bj91Kz1rLmNzcyhlLCJib3JkZXIiK3JlW2FdKyJXaWR0aCIsITAsaSk6cys9ay5jc3MoZSwiYm9yZGVyIityZVthXSsiV2lkdGgiLCEwLGkpKTtyZXR1cm4hciYmMDw9byYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbIm9mZnNldCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLW8tdS1zLS41KSl8fDApLHV9ZnVuY3Rpb24gdHQoZSx0LG4pe3ZhciByPUZlKGUpLGk9KCF5LmJveFNpemluZ1JlbGlhYmxlKCl8fG4pJiYiYm9yZGVyLWJveCI9PT1rLmNzcyhlLCJib3hTaXppbmciLCExLHIpLG89aSxhPV9lKGUsdCxyKSxzPSJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO2lmKCRlLnRlc3QoYSkpe2lmKCFuKXJldHVybiBhO2E9ImF1dG8ifXJldHVybigheS5ib3hTaXppbmdSZWxpYWJsZSgpJiZpfHwiYXV0byI9PT1hfHwhcGFyc2VGbG9hdChhKSYmImlubGluZSI9PT1rLmNzcyhlLCJkaXNwbGF5IiwhMSxyKSkmJmUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJihpPSJib3JkZXItYm94Ij09PWsuY3NzKGUsImJveFNpemluZyIsITEsciksKG89cyBpbiBlKSYmKGE9ZVtzXSkpLChhPXBhcnNlRmxvYXQoYSl8fDApK2V0KGUsdCxufHwoaT8iYm9yZGVyIjoiY29udGVudCIpLG8scixhKSsicHgifWZ1bmN0aW9uIG50KGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBudC5wcm90b3R5cGUuaW5pdChlLHQsbixyLGkpfWsuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49X2UoZSwib3BhY2l0eSIpO3JldHVybiIiPT09bj8iMSI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsZ3JpZEFyZWE6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TdGFydDohMCxncmlkUm93OiEwLGdyaWRSb3dFbmQ6ITAsZ3JpZFJvd1N0YXJ0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6e30sc3R5bGU6ZnVuY3Rpb24oZSx0LG4scil7aWYoZSYmMyE9PWUubm9kZVR5cGUmJjghPT1lLm5vZGVUeXBlJiZlLnN0eWxlKXt2YXIgaSxvLGEscz1WKHQpLHU9UWUudGVzdCh0KSxsPWUuc3R5bGU7aWYodXx8KHQ9R2UocykpLGE9ay5jc3NIb29rc1t0XXx8ay5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiYiZ2V0ImluIGEmJnZvaWQgMCE9PShpPWEuZ2V0KGUsITEscikpP2k6bFt0XTsic3RyaW5nIj09PShvPXR5cGVvZiBuKSYmKGk9bmUuZXhlYyhuKSkmJmlbMV0mJihuPWxlKGUsdCxpKSxvPSJudW1iZXIiKSxudWxsIT1uJiZuPT1uJiYoIm51bWJlciIhPT1vfHx1fHwobis9aSYmaVszXXx8KGsuY3NzTnVtYmVyW3NdPyIiOiJweCIpKSx5LmNsZWFyQ2xvbmVTdHlsZXx8IiIhPT1ufHwwIT09dC5pbmRleE9mKCJiYWNrZ3JvdW5kIil8fChsW3RdPSJpbmhlcml0IiksYSYmInNldCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9Vih0KTtyZXR1cm4gUWUudGVzdCh0KXx8KHQ9R2UocykpLChhPWsuY3NzSG9va3NbdF18fGsuY3NzSG9va3Nbc10pJiYiZ2V0ImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPV9lKGUsdCxyKSksIm5vcm1hbCI9PT1pJiZ0IGluIEtlJiYoaT1LZVt0XSksIiI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksay5lYWNoKFsiaGVpZ2h0Iiwid2lkdGgiXSxmdW5jdGlvbihlLHUpe2suY3NzSG9va3NbdV09e2dldDpmdW5jdGlvbihlLHQsbil7aWYodClyZXR1cm4hWWUudGVzdChrLmNzcyhlLCJkaXNwbGF5IikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP3R0KGUsdSxuKTp1ZShlLEplLGZ1bmN0aW9uKCl7cmV0dXJuIHR0KGUsdSxuKX0pfSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9RmUoZSksbz0heS5zY3JvbGxib3hTaXplKCkmJiJhYnNvbHV0ZSI9PT1pLnBvc2l0aW9uLGE9KG98fG4pJiYiYm9yZGVyLWJveCI9PT1rLmNzcyhlLCJib3hTaXppbmciLCExLGkpLHM9bj9ldChlLHUsbixhLGkpOjA7cmV0dXJuIGEmJm8mJihzLT1NYXRoLmNlaWwoZVsib2Zmc2V0Iit1WzBdLnRvVXBwZXJDYXNlKCkrdS5zbGljZSgxKV0tcGFyc2VGbG9hdChpW3VdKS1ldChlLHUsImJvcmRlciIsITEsaSktLjUpKSxzJiYocj1uZS5leGVjKHQpKSYmInB4IiE9PShyWzNdfHwicHgiKSYmKGUuc3R5bGVbdV09dCx0PWsuY3NzKGUsdSkpLFplKDAsdCxzKX19fSksay5jc3NIb29rcy5tYXJnaW5MZWZ0PXplKHkucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChfZShlLCJtYXJnaW5MZWZ0IikpfHxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtdWUoZSx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrInB4In0pLGsuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGksbyl7ay5jc3NIb29rc1tpK29dPXtleHBhbmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj17fSxyPSJzdHJpbmciPT10eXBlb2YgZT9lLnNwbGl0KCIgIik6W2VdO3Q8NDt0KyspbltpK3JlW3RdK29dPXJbdF18fHJbdC0yXXx8clswXTtyZXR1cm4gbn19LCJtYXJnaW4iIT09aSYmKGsuY3NzSG9va3NbaStvXS5zZXQ9WmUpfSksay5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiBfKHRoaXMsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz17fSxhPTA7aWYoQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHI9RmUoZSksaT10Lmxlbmd0aDthPGk7YSsrKW9bdFthXV09ay5jc3MoZSx0W2FdLCExLHIpO3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP2suc3R5bGUoZSx0LG4pOmsuY3NzKGUsdCl9LGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfX0pLCgoay5Ud2Vlbj1udCkucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpudCxpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHxrLmVhc2luZy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KGsuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1udC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6bnQucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49bnQucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PWsuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpudC5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSkuaW5pdC5wcm90b3R5cGU9bnQucHJvdG90eXBlLChudC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXToodD1rLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PXQ/dDowfSxzZXQ6ZnVuY3Rpb24oZSl7ay5meC5zdGVwW2UucHJvcF0/ay5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8IWsuY3NzSG9va3NbZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW0dlKGUucHJvcCldP2UuZWxlbVtlLnByb3BdPWUubm93Omsuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19KS5zY3JvbGxUb3A9bnQucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0say5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfSxfZGVmYXVsdDoic3dpbmcifSxrLmZ4PW50LnByb3RvdHlwZS5pbml0LGsuZnguc3RlcD17fTt2YXIgcnQsaXQsb3QsYXQsc3Q9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLHV0PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gbHQoKXtpdCYmKCExPT09RS5oaWRkZW4mJkMucmVxdWVzdEFuaW1hdGlvbkZyYW1lP0MucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGx0KTpDLnNldFRpbWVvdXQobHQsay5meC5pbnRlcnZhbCksay5meC50aWNrKCkpfWZ1bmN0aW9uIGN0KCl7cmV0dXJuIEMuc2V0VGltZW91dChmdW5jdGlvbigpe3J0PXZvaWQgMH0pLHJ0PURhdGUubm93KCl9ZnVuY3Rpb24gZnQoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpaVsibWFyZ2luIisobj1yZVtyXSldPWlbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihpLm9wYWNpdHk9aS53aWR0aD1lKSxpfWZ1bmN0aW9uIHB0KGUsdCxuKXtmb3IodmFyIHIsaT0oZHQudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoZHQudHdlZW5lcnNbIioiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gZHQobyxlLHQpe3ZhciBuLGEscj0wLGk9ZHQucHJlZmlsdGVycy5sZW5ndGgscz1rLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihhKXJldHVybiExO2Zvcih2YXIgZT1ydHx8Y3QoKSx0PU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi1lKSxuPTEtKHQvbC5kdXJhdGlvbnx8MCkscj0wLGk9bC50d2VlbnMubGVuZ3RoO3I8aTtyKyspbC50d2VlbnNbcl0ucnVuKG4pO3JldHVybiBzLm5vdGlmeVdpdGgobyxbbCxuLHRdKSxuPDEmJmk/dDooaXx8cy5ub3RpZnlXaXRoKG8sW2wsMSwwXSkscy5yZXNvbHZlV2l0aChvLFtsXSksITEpfSxsPXMucHJvbWlzZSh7ZWxlbTpvLHByb3BzOmsuZXh0ZW5kKHt9LGUpLG9wdHM6ay5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOmsuZWFzaW5nLl9kZWZhdWx0fSx0KSxvcmlnaW5hbFByb3BlcnRpZXM6ZSxvcmlnaW5hbE9wdGlvbnM6dCxzdGFydFRpbWU6cnR8fGN0KCksZHVyYXRpb246dC5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oZSx0KXt2YXIgbj1rLlR3ZWVuKG8sbC5vcHRzLGUsdCxsLm9wdHMuc3BlY2lhbEVhc2luZ1tlXXx8bC5vcHRzLmVhc2luZyk7cmV0dXJuIGwudHdlZW5zLnB1c2gobiksbn0sc3RvcDpmdW5jdGlvbihlKXt2YXIgdD0wLG49ZT9sLnR3ZWVucy5sZW5ndGg6MDtpZihhKXJldHVybiB0aGlzO2ZvcihhPSEwO3Q8bjt0KyspbC50d2VlbnNbdF0ucnVuKDEpO3JldHVybiBlPyhzLm5vdGlmeVdpdGgobyxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKG8sW2wsZV0pKTpzLnJlamVjdFdpdGgobyxbbCxlXSksdGhpc319KSxjPWwucHJvcHM7Zm9yKCFmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihpPXRbcj1WKG4pXSxvPWVbbl0sQXJyYXkuaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLChhPWsuY3NzSG9va3Nbcl0pJiYiZXhwYW5kImluIGEpZm9yKG4gaW4gbz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXSxvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpO2Vsc2UgdFtyXT1pfShjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtyPGk7cisrKWlmKG49ZHQucHJlZmlsdGVyc1tyXS5jYWxsKGwsbyxjLGwub3B0cykpcmV0dXJuIG0obi5zdG9wKSYmKGsuX3F1ZXVlSG9va3MobC5lbGVtLGwub3B0cy5xdWV1ZSkuc3RvcD1uLnN0b3AuYmluZChuKSksbjtyZXR1cm4gay5tYXAoYyxwdCxsKSxtKGwub3B0cy5zdGFydCkmJmwub3B0cy5zdGFydC5jYWxsKG8sbCksbC5wcm9ncmVzcyhsLm9wdHMucHJvZ3Jlc3MpLmRvbmUobC5vcHRzLmRvbmUsbC5vcHRzLmNvbXBsZXRlKS5mYWlsKGwub3B0cy5mYWlsKS5hbHdheXMobC5vcHRzLmFsd2F5cyksay5meC50aW1lcihrLmV4dGVuZCh1LHtlbGVtOm8sYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsfWsuQW5pbWF0aW9uPWsuZXh0ZW5kKGR0LHt0d2VlbmVyczp7IioiOltmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuY3JlYXRlVHdlZW4oZSx0KTtyZXR1cm4gbGUobi5lbGVtLGUsbmUuZXhlYyh0KSxuKSxufV19LHR3ZWVuZXI6ZnVuY3Rpb24oZSx0KXttKGUpPyh0PWUsZT1bIioiXSk6ZT1lLm1hdGNoKFIpO2Zvcih2YXIgbixyPTAsaT1lLmxlbmd0aDtyPGk7cisrKW49ZVtyXSxkdC50d2VlbmVyc1tuXT1kdC50d2VlbmVyc1tuXXx8W10sZHQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj0id2lkdGgiaW4gdHx8ImhlaWdodCJpbiB0LHA9dGhpcyxkPXt9LGg9ZS5zdHlsZSxnPWUubm9kZVR5cGUmJnNlKGUpLHY9US5nZXQoZSwiZnhzaG93Iik7Zm9yKHIgaW4gbi5xdWV1ZXx8KG51bGw9PShhPWsuX3F1ZXVlSG9va3MoZSwiZngiKSkudW5xdWV1ZWQmJihhLnVucXVldWVkPTAscz1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8cygpfSksYS51bnF1ZXVlZCsrLHAuYWx3YXlzKGZ1bmN0aW9uKCl7cC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0say5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9KX0pKSx0KWlmKGk9dFtyXSxzdC50ZXN0KGkpKXtpZihkZWxldGUgdFtyXSxvPW98fCJ0b2dnbGUiPT09aSxpPT09KGc/ImhpZGUiOiJzaG93Iikpe2lmKCJzaG93IiE9PWl8fCF2fHx2b2lkIDA9PT12W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT12JiZ2W3JdfHxrLnN0eWxlKGUscil9aWYoKHU9IWsuaXNFbXB0eU9iamVjdCh0KSl8fCFrLmlzRW1wdHlPYmplY3QoZCkpZm9yKHIgaW4gZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxudWxsPT0obD12JiZ2LmRpc3BsYXkpJiYobD1RLmdldChlLCJkaXNwbGF5IikpLCJub25lIj09PShjPWsuY3NzKGUsImRpc3BsYXkiKSkmJihsP2M9bDooZmUoW2VdLCEwKSxsPWUuc3R5bGUuZGlzcGxheXx8bCxjPWsuY3NzKGUsImRpc3BsYXkiKSxmZShbZV0pKSksKCJpbmxpbmUiPT09Y3x8ImlubGluZS1ibG9jayI9PT1jJiZudWxsIT1sKSYmIm5vbmUiPT09ay5jc3MoZSwiZmxvYXQiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9bH0pLG51bGw9PWwmJihjPWguZGlzcGxheSxsPSJub25lIj09PWM/IiI6YykpLGguZGlzcGxheT0iaW5saW5lLWJsb2NrIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PSJoaWRkZW4iLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExLGQpdXx8KHY/ImhpZGRlbiJpbiB2JiYoZz12LmhpZGRlbik6dj1RLmFjY2VzcyhlLCJmeHNob3ciLHtkaXNwbGF5Omx9KSxvJiYodi5oaWRkZW49IWcpLGcmJmZlKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Zm9yKHIgaW4gZ3x8ZmUoW2VdKSxRLnJlbW92ZShlLCJmeHNob3ciKSxkKWsuc3R5bGUoZSxyLGRbcl0pfSkpLHU9cHQoZz92W3JdOjAscixwKSxyIGluIHZ8fCh2W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P2R0LnByZWZpbHRlcnMudW5zaGlmdChlKTpkdC5wcmVmaWx0ZXJzLnB1c2goZSl9fSksay5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmIm9iamVjdCI9PXR5cGVvZiBlP2suZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8bShlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhbSh0KSYmdH07cmV0dXJuIGsuZngub2ZmP3IuZHVyYXRpb249MDoibnVtYmVyIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIGsuZnguc3BlZWRzP3IuZHVyYXRpb249ay5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj1rLmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXttKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZrLmRlcXVldWUodGhpcyxyLnF1ZXVlKX0scn0say5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoc2UpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWsuaXNFbXB0eU9iamVjdCh0KSxvPWsuc3BlZWQoZSxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgZT1kdCh0aGlzLGsuZXh0ZW5kKHt9LHQpLG8pOyhpfHxRLmdldCh0aGlzLCJmaW5pc2giKSkmJmUuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGksZSxvKXt2YXIgYT1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG8pfTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGkmJihvPWUsZT1pLGk9dm9pZCAwKSxlJiYhMSE9PWkmJnRoaXMucXVldWUoaXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9ITAsdD1udWxsIT1pJiZpKyJxdWV1ZUhvb2tzIixuPWsudGltZXJzLHI9US5nZXQodGhpcyk7aWYodClyW3RdJiZyW3RdLnN0b3AmJmEoclt0XSk7ZWxzZSBmb3IodCBpbiByKXJbdF0mJnJbdF0uc3RvcCYmdXQudGVzdCh0KSYmYShyW3RdKTtmb3IodD1uLmxlbmd0aDt0LS07KW5bdF0uZWxlbSE9PXRoaXN8fG51bGwhPWkmJm5bdF0ucXVldWUhPT1pfHwoblt0XS5hbmltLnN0b3AobyksZT0hMSxuLnNwbGljZSh0LDEpKTshZSYmb3x8ay5kZXF1ZXVlKHRoaXMsaSl9KX0sZmluaXNoOmZ1bmN0aW9uKGEpe3JldHVybiExIT09YSYmKGE9YXx8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdD1RLmdldCh0aGlzKSxuPXRbYSsicXVldWUiXSxyPXRbYSsicXVldWVIb29rcyJdLGk9ay50aW1lcnMsbz1uP24ubGVuZ3RoOjA7Zm9yKHQuZmluaXNoPSEwLGsucXVldWUodGhpcyxhLFtdKSxyJiZyLnN0b3AmJnIuc3RvcC5jYWxsKHRoaXMsITApLGU9aS5sZW5ndGg7ZS0tOylpW2VdLmVsZW09PT10aGlzJiZpW2VdLnF1ZXVlPT09YSYmKGlbZV0uYW5pbS5zdG9wKCEwKSxpLnNwbGljZShlLDEpKTtmb3IoZT0wO2U8bztlKyspbltlXSYmbltlXS5maW5pc2gmJm5bZV0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIHQuZmluaXNofSl9fSksay5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHIpe3ZhciBpPWsuZm5bcl07ay5mbltyXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGZ0KHIsITApLGUsdCxuKX19KSxrLmVhY2goe3NsaWRlRG93bjpmdCgic2hvdyIpLHNsaWRlVXA6ZnQoImhpZGUiKSxzbGlkZVRvZ2dsZTpmdCgidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHIpe2suZm5bZV09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmFuaW1hdGUocixlLHQsbil9fSksay50aW1lcnM9W10say5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49ay50aW1lcnM7Zm9yKHJ0PURhdGUubm93KCk7dDxuLmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8ay5meC5zdG9wKCkscnQ9dm9pZCAwfSxrLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2sudGltZXJzLnB1c2goZSksay5meC5zdGFydCgpfSxrLmZ4LmludGVydmFsPTEzLGsuZnguc3RhcnQ9ZnVuY3Rpb24oKXtpdHx8KGl0PSEwLGx0KCkpfSxrLmZ4LnN0b3A9ZnVuY3Rpb24oKXtpdD1udWxsfSxrLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxrLmZuLmRlbGF5PWZ1bmN0aW9uKHIsZSl7cmV0dXJuIHI9ay5meCYmay5meC5zcGVlZHNbcl18fHIsZT1lfHwiZngiLHRoaXMucXVldWUoZSxmdW5jdGlvbihlLHQpe3ZhciBuPUMuc2V0VGltZW91dChlLHIpO3Quc3RvcD1mdW5jdGlvbigpe0MuY2xlYXJUaW1lb3V0KG4pfX0pfSxvdD1FLmNyZWF0ZUVsZW1lbnQoImlucHV0IiksYXQ9RS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChFLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxvdC50eXBlPSJjaGVja2JveCIseS5jaGVja09uPSIiIT09b3QudmFsdWUseS5vcHRTZWxlY3RlZD1hdC5zZWxlY3RlZCwob3Q9RS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS52YWx1ZT0idCIsb3QudHlwZT0icmFkaW8iLHkucmFkaW9WYWx1ZT0idCI9PT1vdC52YWx1ZTt2YXIgaHQsZ3Q9ay5leHByLmF0dHJIYW5kbGU7ay5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gXyh0aGlzLGsuYXR0cixlLHQsMTxhcmd1bWVudHMubGVuZ3RoKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ay5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSxrLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIGUuZ2V0QXR0cmlidXRlP2sucHJvcChlLHQsbik6KDE9PT1vJiZrLmlzWE1MRG9jKGUpfHwoaT1rLmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwoay5leHByLm1hdGNoLmJvb2wudGVzdCh0KT9odDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgay5yZW1vdmVBdHRyKGUsdCk6aSYmInNldCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbisiIiksbik6aSYmImdldCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjpudWxsPT0ocj1rLmZpbmQuYXR0cihlLHQpKT92b2lkIDA6cil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIXkucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJkEoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKFIpO2lmKGkmJjE9PT1lLm5vZGVUeXBlKXdoaWxlKG49aVtyKytdKWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLGh0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD9rLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxrLmVhY2goay5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgYT1ndFt0XXx8ay5maW5kLmF0dHI7Z3RbdF09ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIG58fChpPWd0W29dLGd0W29dPXIscj1udWxsIT1hKGUsdCxuKT9vOm51bGwsZ3Rbb109aSkscn19KTt2YXIgdnQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx5dD0vXig/OmF8YXJlYSkkL2k7ZnVuY3Rpb24gbXQoZSl7cmV0dXJuKGUubWF0Y2goUil8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24geHQoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9ZnVuY3Rpb24gYnQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZToic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goUil8fFtdfWsuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIF8odGhpcyxrLnByb3AsZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2sucHJvcEZpeFtlXXx8ZV19KX19KSxrLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09PW8mJmsuaXNYTUxEb2MoZSl8fCh0PWsucHJvcEZpeFt0XXx8dCxpPWsucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP2kmJiJzZXQiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOmVbdF09bjppJiYiZ2V0ImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1rLmZpbmQuYXR0cihlLCJ0YWJpbmRleCIpO3JldHVybiB0P3BhcnNlSW50KHQsMTApOnZ0LnRlc3QoZS5ub2RlTmFtZSl8fHl0LnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifX0pLHkub3B0U2VsZWN0ZWR8fChrLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3QmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksay5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtrLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksay5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYSxzLHU9MDtpZihtKHQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7ayh0aGlzKS5hZGRDbGFzcyh0LmNhbGwodGhpcyxlLHh0KHRoaXMpKSl9KTtpZigoZT1idCh0KSkubGVuZ3RoKXdoaWxlKG49dGhpc1t1KytdKWlmKGk9eHQobikscj0xPT09bi5ub2RlVHlwZSYmIiAiK210KGkpKyIgIil7YT0wO3doaWxlKG89ZVthKytdKXIuaW5kZXhPZigiICIrbysiICIpPDAmJihyKz1vKyIgIik7aSE9PShzPW10KHIpKSYmbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixzKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhLHMsdT0wO2lmKG0odCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLnJlbW92ZUNsYXNzKHQuY2FsbCh0aGlzLGUseHQodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoImNsYXNzIiwiIik7aWYoKGU9YnQodCkpLmxlbmd0aCl3aGlsZShuPXRoaXNbdSsrXSlpZihpPXh0KG4pLHI9MT09PW4ubm9kZVR5cGUmJiIgIittdChpKSsiICIpe2E9MDt3aGlsZShvPWVbYSsrXSl3aGlsZSgtMTxyLmluZGV4T2YoIiAiK28rIiAiKSlyPXIucmVwbGFjZSgiICIrbysiICIsIiAiKTtpIT09KHM9bXQocikpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihpLHQpe3ZhciBvPXR5cGVvZiBpLGE9InN0cmluZyI9PT1vfHxBcnJheS5pc0FycmF5KGkpO3JldHVybiJib29sZWFuIj09dHlwZW9mIHQmJmE/dD90aGlzLmFkZENsYXNzKGkpOnRoaXMucmVtb3ZlQ2xhc3MoaSk6bShpKT90aGlzLmVhY2goZnVuY3Rpb24oZSl7ayh0aGlzKS50b2dnbGVDbGFzcyhpLmNhbGwodGhpcyxlLHh0KHRoaXMpLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdCxuLHI7aWYoYSl7dD0wLG49ayh0aGlzKSxyPWJ0KGkpO3doaWxlKGU9clt0KytdKW4uaGFzQ2xhc3MoZSk/bi5yZW1vdmVDbGFzcyhlKTpuLmFkZENsYXNzKGUpfWVsc2Ugdm9pZCAwIT09aSYmImJvb2xlYW4iIT09b3x8KChlPXh0KHRoaXMpKSYmUS5zZXQodGhpcywiX19jbGFzc05hbWVfXyIsZSksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKCJjbGFzcyIsZXx8ITE9PT1pPyIiOlEuZ2V0KHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHI9MDt0PSIgIitlKyIgIjt3aGlsZShuPXRoaXNbcisrXSlpZigxPT09bi5ub2RlVHlwZSYmLTE8KCIgIittdCh4dChuKSkrIiAiKS5pbmRleE9mKHQpKXJldHVybiEwO3JldHVybiExfX0pO3ZhciB3dD0vXHIvZztrLmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKG4pe3ZhciByLGUsaSx0PXRoaXNbMF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bShuKSx0aGlzLmVhY2goZnVuY3Rpb24oZSl7dmFyIHQ7MT09PXRoaXMubm9kZVR5cGUmJihudWxsPT0odD1pP24uY2FsbCh0aGlzLGUsayh0aGlzKS52YWwoKSk6bik/dD0iIjoibnVtYmVyIj09dHlwZW9mIHQ/dCs9IiI6QXJyYXkuaXNBcnJheSh0KSYmKHQ9ay5tYXAodCxmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjplKyIifSkpLChyPWsudmFsSG9va3NbdGhpcy50eXBlXXx8ay52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmInNldCJpbiByJiZ2b2lkIDAhPT1yLnNldCh0aGlzLHQsInZhbHVlIil8fCh0aGlzLnZhbHVlPXQpKX0pKTp0PyhyPWsudmFsSG9va3NbdC50eXBlXXx8ay52YWxIb29rc1t0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmImdldCJpbiByJiZ2b2lkIDAhPT0oZT1yLmdldCh0LCJ2YWx1ZSIpKT9lOiJzdHJpbmciPT10eXBlb2YoZT10LnZhbHVlKT9lLnJlcGxhY2Uod3QsIiIpOm51bGw9PWU/IiI6ZTp2b2lkIDB9fSksay5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD1rLmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6bXQoay50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxvPWUuc2VsZWN0ZWRJbmRleCxhPSJzZWxlY3Qtb25lIj09PWUudHlwZSxzPWE/bnVsbDpbXSx1PWE/bysxOmkubGVuZ3RoO2ZvcihyPW88MD91OmE/bzowO3I8dTtyKyspaWYoKChuPWlbcl0pLnNlbGVjdGVkfHxyPT09bykmJiFuLmRpc2FibGVkJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IUEobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD1rKG4pLnZhbCgpLGEpcmV0dXJuIHQ7cy5wdXNoKHQpfXJldHVybiBzfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9ZS5vcHRpb25zLG89ay5tYWtlQXJyYXkodCksYT1pLmxlbmd0aDt3aGlsZShhLS0pKChyPWlbYV0pLnNlbGVjdGVkPS0xPGsuaW5BcnJheShrLnZhbEhvb2tzLm9wdGlvbi5nZXQociksbykpJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSxrLmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXtrLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9LTE8ay5pbkFycmF5KGsoZSkudmFsKCksdCl9fSx5LmNoZWNrT258fChrLnZhbEhvb2tzW3RoaXNdLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09PWUuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpPyJvbiI6ZS52YWx1ZX0pfSkseS5mb2N1c2luPSJvbmZvY3VzaW4iaW4gQzt2YXIgVHQ9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLEN0PWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9O2suZXh0ZW5kKGsuZXZlbnQse3RyaWdnZXI6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxsLGMsZixwPVtufHxFXSxkPXYuY2FsbChlLCJ0eXBlIik/ZS50eXBlOmUsaD12LmNhbGwoZSwibmFtZXNwYWNlIik/ZS5uYW1lc3BhY2Uuc3BsaXQoIi4iKTpbXTtpZihvPWY9YT1uPW58fEUsMyE9PW4ubm9kZVR5cGUmJjghPT1uLm5vZGVUeXBlJiYhVHQudGVzdChkK2suZXZlbnQudHJpZ2dlcmVkKSYmKC0xPGQuaW5kZXhPZigiLiIpJiYoZD0oaD1kLnNwbGl0KCIuIikpLnNoaWZ0KCksaC5zb3J0KCkpLHU9ZC5pbmRleE9mKCI6Iik8MCYmIm9uIitkLChlPWVbay5leHBhbmRvXT9lOm5ldyBrLkV2ZW50KGQsIm9iamVjdCI9PXR5cGVvZiBlJiZlKSkuaXNUcmlnZ2VyPXI/MjozLGUubmFtZXNwYWNlPWguam9pbigiLiIpLGUucm5hbWVzcGFjZT1lLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsZS5yZXN1bHQ9dm9pZCAwLGUudGFyZ2V0fHwoZS50YXJnZXQ9biksdD1udWxsPT10P1tlXTprLm1ha2VBcnJheSh0LFtlXSksYz1rLmV2ZW50LnNwZWNpYWxbZF18fHt9LHJ8fCFjLnRyaWdnZXJ8fCExIT09Yy50cmlnZ2VyLmFwcGx5KG4sdCkpKXtpZighciYmIWMubm9CdWJibGUmJiF4KG4pKXtmb3Iocz1jLmRlbGVnYXRlVHlwZXx8ZCxUdC50ZXN0KHMrZCl8fChvPW8ucGFyZW50Tm9kZSk7bztvPW8ucGFyZW50Tm9kZSlwLnB1c2gobyksYT1vO2E9PT0obi5vd25lckRvY3VtZW50fHxFKSYmcC5wdXNoKGEuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93fHxDKX1pPTA7d2hpbGUoKG89cFtpKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSlmPW8sZS50eXBlPTE8aT9zOmMuYmluZFR5cGV8fGQsKGw9KFEuZ2V0KG8sImV2ZW50cyIpfHx7fSlbZS50eXBlXSYmUS5nZXQobywiaGFuZGxlIikpJiZsLmFwcGx5KG8sdCksKGw9dSYmb1t1XSkmJmwuYXBwbHkmJkcobykmJihlLnJlc3VsdD1sLmFwcGx5KG8sdCksITE9PT1lLnJlc3VsdCYmZS5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gZS50eXBlPWQscnx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Yy5fZGVmYXVsdCYmITEhPT1jLl9kZWZhdWx0LmFwcGx5KHAucG9wKCksdCl8fCFHKG4pfHx1JiZtKG5bZF0pJiYheChuKSYmKChhPW5bdV0pJiYoblt1XT1udWxsKSxrLmV2ZW50LnRyaWdnZXJlZD1kLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmZi5hZGRFdmVudExpc3RlbmVyKGQsQ3QpLG5bZF0oKSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmYucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLEN0KSxrLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsYSYmKG5bdV09YSkpLGUucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWsuZXh0ZW5kKG5ldyBrLkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMH0pO2suZXZlbnQudHJpZ2dlcihyLG51bGwsdCl9fSksay5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ay5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gay5ldmVudC50cmlnZ2VyKGUsdCxuLCEwKX19KSx5LmZvY3VzaW58fGsuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24obixyKXt2YXIgaT1mdW5jdGlvbihlKXtrLmV2ZW50LnNpbXVsYXRlKHIsZS50YXJnZXQsay5ldmVudC5maXgoZSkpfTtrLmV2ZW50LnNwZWNpYWxbcl09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLHQ9US5hY2Nlc3MoZSxyKTt0fHxlLmFkZEV2ZW50TGlzdGVuZXIobixpLCEwKSxRLmFjY2VzcyhlLHIsKHR8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyx0PVEuYWNjZXNzKGUsciktMTt0P1EuYWNjZXNzKGUscix0KTooZS5yZW1vdmVFdmVudExpc3RlbmVyKG4saSwhMCksUS5yZW1vdmUoZSxyKSl9fX0pO3ZhciBFdD1DLmxvY2F0aW9uLGt0PURhdGUubm93KCksU3Q9L1w/LztrLnBhcnNlWE1MPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e3Q9KG5ldyBDLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIil9Y2F0Y2goZSl7dD12b2lkIDB9cmV0dXJuIHQmJiF0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8ay5lcnJvcigiSW52YWxpZCBYTUw6ICIrZSksdH07dmFyIE50PS9cW1xdJC8sQXQ9L1xyP1xuL2csRHQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGp0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdW5jdGlvbiBxdChuLGUscixpKXt2YXIgdDtpZihBcnJheS5pc0FycmF5KGUpKWsuZWFjaChlLGZ1bmN0aW9uKGUsdCl7cnx8TnQudGVzdChuKT9pKG4sdCk6cXQobisiWyIrKCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dD9lOiIiKSsiXSIsdCxyLGkpfSk7ZWxzZSBpZihyfHwib2JqZWN0IiE9PXcoZSkpaShuLGUpO2Vsc2UgZm9yKHQgaW4gZSlxdChuKyJbIit0KyJdIixlW3RdLHIsaSl9ay5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPW0odCk/dCgpOnQ7cltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQobnVsbD09bj8iIjpuKX07aWYobnVsbD09ZSlyZXR1cm4iIjtpZihBcnJheS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIWsuaXNQbGFpbk9iamVjdChlKSlrLmVhY2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IobiBpbiBlKXF0KG4sZVtuXSx0LGkpO3JldHVybiByLmpvaW4oIiYiKX0say5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiBrLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9ay5wcm9wKHRoaXMsImVsZW1lbnRzIik7cmV0dXJuIGU/ay5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhayh0aGlzKS5pcygiOmRpc2FibGVkIikmJmp0LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFEdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhcGUudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj1rKHRoaXMpLnZhbCgpO3JldHVybiBudWxsPT1uP251bGw6QXJyYXkuaXNBcnJheShuKT9rLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2UoQXQsIlxyXG4iKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKEF0LCJcclxuIil9fSkuZ2V0KCl9fSk7dmFyIEx0PS8lMjAvZyxIdD0vIy4qJC8sT3Q9LyhbPyZdKV89W14mXSovLFB0PS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKSQvZ20sUnQ9L14oPzpHRVR8SEVBRCkkLyxNdD0vXlwvXC8vLEl0PXt9LFd0PXt9LCR0PSIqLyIuY29uY2F0KCIqIiksRnQ9RS5jcmVhdGVFbGVtZW50KCJhIik7ZnVuY3Rpb24gQnQobyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7InN0cmluZyIhPXR5cGVvZiBlJiYodD1lLGU9IioiKTt2YXIgbixyPTAsaT1lLnRvTG93ZXJDYXNlKCkubWF0Y2goUil8fFtdO2lmKG0odCkpd2hpbGUobj1pW3IrK10pIisiPT09blswXT8obj1uLnNsaWNlKDEpfHwiKiIsKG9bbl09b1tuXXx8W10pLnVuc2hpZnQodCkpOihvW25dPW9bbl18fFtdKS5wdXNoKHQpfX1mdW5jdGlvbiBfdCh0LGksbyxhKXt2YXIgcz17fSx1PXQ9PT1XdDtmdW5jdGlvbiBsKGUpe3ZhciByO3JldHVybiBzW2VdPSEwLGsuZWFjaCh0W2VdfHxbXSxmdW5jdGlvbihlLHQpe3ZhciBuPXQoaSxvLGEpO3JldHVybiJzdHJpbmciIT10eXBlb2Ygbnx8dXx8c1tuXT91PyEocj1uKTp2b2lkIDA6KGkuZGF0YVR5cGVzLnVuc2hpZnQobiksbChuKSwhMSl9KSxyfXJldHVybiBsKGkuZGF0YVR5cGVzWzBdKXx8IXNbIioiXSYmbCgiKiIpfWZ1bmN0aW9uIHp0KGUsdCl7dmFyIG4scixpPWsuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJmsuZXh0ZW5kKCEwLGUsciksZX1GdC5ocmVmPUV0LmhyZWYsay5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOkV0LmhyZWYsdHlwZToiR0VUIixpc0xvY2FsOi9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLnRlc3QoRXQucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZToiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IixhY2NlcHRzOnsiKiI6JHQsdGV4dDoidGV4dC9wbGFpbiIsaHRtbDoidGV4dC9odG1sIix4bWw6ImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCJ9LGNvbnRlbnRzOnt4bWw6L1xieG1sXGIvLGh0bWw6L1xiaHRtbC8sanNvbjovXGJqc29uXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0Iixqc29uOiJyZXNwb25zZUpTT04ifSxjb252ZXJ0ZXJzOnsiKiB0ZXh0IjpTdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6SlNPTi5wYXJzZSwidGV4dCB4bWwiOmsucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P3p0KHp0KGUsay5hamF4U2V0dGluZ3MpLHQpOnp0KGsuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOkJ0KEl0KSxhamF4VHJhbnNwb3J0OkJ0KFd0KSxhamF4OmZ1bmN0aW9uKGUsdCl7Im9iamVjdCI9PXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSx0PXR8fHt9O3ZhciBjLGYscCxuLGQscixoLGcsaSxvLHY9ay5hamF4U2V0dXAoe30sdCkseT12LmNvbnRleHR8fHYsbT12LmNvbnRleHQmJih5Lm5vZGVUeXBlfHx5LmpxdWVyeSk/ayh5KTprLmV2ZW50LHg9ay5EZWZlcnJlZCgpLGI9ay5DYWxsYmFja3MoIm9uY2UgbWVtb3J5Iiksdz12LnN0YXR1c0NvZGV8fHt9LGE9e30scz17fSx1PSJjYW5jZWxlZCIsVD17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGgpe2lmKCFuKXtuPXt9O3doaWxlKHQ9UHQuZXhlYyhwKSluW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdPShuW3RbMV0udG9Mb3dlckNhc2UoKSsiICJdfHxbXSkuY29uY2F0KHRbMl0pfXQ9bltlLnRvTG93ZXJDYXNlKCkrIiAiXX1yZXR1cm4gbnVsbD09dD9udWxsOnQuam9pbigiLCAiKX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGg/cDpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWgmJihlPXNbZS50b0xvd2VyQ2FzZSgpXT1zW2UudG9Mb3dlckNhc2UoKV18fGUsYVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1oJiYodi5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoaClULmFsd2F5cyhlW1Quc3RhdHVzXSk7ZWxzZSBmb3IodCBpbiBlKXdbdF09W3dbdF0sZVt0XV07cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fHU7cmV0dXJuIGMmJmMuYWJvcnQodCksbCgwLHQpLHRoaXN9fTtpZih4LnByb21pc2UoVCksdi51cmw9KChlfHx2LnVybHx8RXQuaHJlZikrIiIpLnJlcGxhY2UoTXQsRXQucHJvdG9jb2wrIi8vIiksdi50eXBlPXQubWV0aG9kfHx0LnR5cGV8fHYubWV0aG9kfHx2LnR5cGUsdi5kYXRhVHlwZXM9KHYuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5tYXRjaChSKXx8WyIiXSxudWxsPT12LmNyb3NzRG9tYWluKXtyPUUuY3JlYXRlRWxlbWVudCgiYSIpO3RyeXtyLmhyZWY9di51cmwsci5ocmVmPXIuaHJlZix2LmNyb3NzRG9tYWluPUZ0LnByb3RvY29sKyIvLyIrRnQuaG9zdCE9ci5wcm90b2NvbCsiLy8iK3IuaG9zdH1jYXRjaChlKXt2LmNyb3NzRG9tYWluPSEwfX1pZih2LmRhdGEmJnYucHJvY2Vzc0RhdGEmJiJzdHJpbmciIT10eXBlb2Ygdi5kYXRhJiYodi5kYXRhPWsucGFyYW0odi5kYXRhLHYudHJhZGl0aW9uYWwpKSxfdChJdCx2LHQsVCksaClyZXR1cm4gVDtmb3IoaSBpbihnPWsuZXZlbnQmJnYuZ2xvYmFsKSYmMD09ay5hY3RpdmUrKyYmay5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKSx2LnR5cGU9di50eXBlLnRvVXBwZXJDYXNlKCksdi5oYXNDb250ZW50PSFSdC50ZXN0KHYudHlwZSksZj12LnVybC5yZXBsYWNlKEh0LCIiKSx2Lmhhc0NvbnRlbnQ/di5kYXRhJiZ2LnByb2Nlc3NEYXRhJiYwPT09KHYuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmKHYuZGF0YT12LmRhdGEucmVwbGFjZShMdCwiKyIpKToobz12LnVybC5zbGljZShmLmxlbmd0aCksdi5kYXRhJiYodi5wcm9jZXNzRGF0YXx8InN0cmluZyI9PXR5cGVvZiB2LmRhdGEpJiYoZis9KFN0LnRlc3QoZik/IiYiOiI/Iikrdi5kYXRhLGRlbGV0ZSB2LmRhdGEpLCExPT09di5jYWNoZSYmKGY9Zi5yZXBsYWNlKE90LCIkMSIpLG89KFN0LnRlc3QoZik/IiYiOiI/IikrIl89IitrdCsrK28pLHYudXJsPWYrbyksdi5pZk1vZGlmaWVkJiYoay5sYXN0TW9kaWZpZWRbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGsubGFzdE1vZGlmaWVkW2ZdKSxrLmV0YWdbZl0mJlQuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsay5ldGFnW2ZdKSksKHYuZGF0YSYmdi5oYXNDb250ZW50JiYhMSE9PXYuY29udGVudFR5cGV8fHQuY29udGVudFR5cGUpJiZULnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsdi5jb250ZW50VHlwZSksVC5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLHYuZGF0YVR5cGVzWzBdJiZ2LmFjY2VwdHNbdi5kYXRhVHlwZXNbMF1dP3YuYWNjZXB0c1t2LmRhdGFUeXBlc1swXV0rKCIqIiE9PXYuZGF0YVR5cGVzWzBdPyIsICIrJHQrIjsgcT0wLjAxIjoiIik6di5hY2NlcHRzWyIqIl0pLHYuaGVhZGVycylULnNldFJlcXVlc3RIZWFkZXIoaSx2LmhlYWRlcnNbaV0pO2lmKHYuYmVmb3JlU2VuZCYmKCExPT09di5iZWZvcmVTZW5kLmNhbGwoeSxULHYpfHxoKSlyZXR1cm4gVC5hYm9ydCgpO2lmKHU9ImFib3J0IixiLmFkZCh2LmNvbXBsZXRlKSxULmRvbmUodi5zdWNjZXNzKSxULmZhaWwodi5lcnJvciksYz1fdChXdCx2LHQsVCkpe2lmKFQucmVhZHlTdGF0ZT0xLGcmJm0udHJpZ2dlcigiYWpheFNlbmQiLFtULHZdKSxoKXJldHVybiBUO3YuYXN5bmMmJjA8di50aW1lb3V0JiYoZD1DLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtULmFib3J0KCJ0aW1lb3V0Iil9LHYudGltZW91dCkpO3RyeXtoPSExLGMuc2VuZChhLGwpfWNhdGNoKGUpe2lmKGgpdGhyb3cgZTtsKC0xLGUpfX1lbHNlIGwoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGwoZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPXQ7aHx8KGg9ITAsZCYmQy5jbGVhclRpbWVvdXQoZCksYz12b2lkIDAscD1yfHwiIixULnJlYWR5U3RhdGU9MDxlPzQ6MCxpPTIwMDw9ZSYmZTwzMDB8fDMwND09PWUsbiYmKHM9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5jb250ZW50cyx1PWUuZGF0YVR5cGVzO3doaWxlKCIqIj09PXVbMF0pdS5zaGlmdCgpLHZvaWQgMD09PXImJihyPWUubWltZVR5cGV8fHQuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpKyIgIit1WzBdXSl7bz1pO2JyZWFrfWF8fChhPWkpfW89b3x8YX1pZihvKXJldHVybiBvIT09dVswXSYmdS51bnNoaWZ0KG8pLG5bb119KHYsVCxuKSkscz1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07bz1jLnNoaWZ0KCk7d2hpbGUobylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKCIqIj09PW8pbz11O2Vsc2UgaWYoIioiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrIiAiK29dfHxsWyIqICIrb10pKWZvcihpIGluIGwpaWYoKHM9aS5zcGxpdCgiICIpKVsxXT09PW8mJihhPWxbdSsiICIrc1swXV18fGxbIiogIitzWzBdXSkpeyEwPT09YT9hPWxbaV06ITAhPT1sW2ldJiYobz1zWzBdLGMudW5zaGlmdChzWzFdKSk7YnJlYWt9aWYoITAhPT1hKWlmKGEmJmVbInRocm93cyJdKXQ9YSh0KTtlbHNlIHRyeXt0PWEodCl9Y2F0Y2goZSl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6YT9lOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitvfX19cmV0dXJue3N0YXRlOiJzdWNjZXNzIixkYXRhOnR9fSh2LHMsVCxpKSxpPyh2LmlmTW9kaWZpZWQmJigodT1ULmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIikpJiYoay5sYXN0TW9kaWZpZWRbZl09dSksKHU9VC5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpKSYmKGsuZXRhZ1tmXT11KSksMjA0PT09ZXx8IkhFQUQiPT09di50eXBlP2w9Im5vY29udGVudCI6MzA0PT09ZT9sPSJub3Rtb2RpZmllZCI6KGw9cy5zdGF0ZSxvPXMuZGF0YSxpPSEoYT1zLmVycm9yKSkpOihhPWwsIWUmJmx8fChsPSJlcnJvciIsZTwwJiYoZT0wKSkpLFQuc3RhdHVzPWUsVC5zdGF0dXNUZXh0PSh0fHxsKSsiIixpP3gucmVzb2x2ZVdpdGgoeSxbbyxsLFRdKTp4LnJlamVjdFdpdGgoeSxbVCxsLGFdKSxULnN0YXR1c0NvZGUodyksdz12b2lkIDAsZyYmbS50cmlnZ2VyKGk/ImFqYXhTdWNjZXNzIjoiYWpheEVycm9yIixbVCx2LGk/bzphXSksYi5maXJlV2l0aCh5LFtULGxdKSxnJiYobS50cmlnZ2VyKCJhamF4Q29tcGxldGUiLFtULHZdKSwtLWsuYWN0aXZlfHxrLmV2ZW50LnRyaWdnZXIoImFqYXhTdG9wIikpKX1yZXR1cm4gVH0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGsuZ2V0KGUsdCxuLCJqc29uIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiBrLmdldChlLHZvaWQgMCx0LCJzY3JpcHQiKX19KSxrLmVhY2goWyJnZXQiLCJwb3N0Il0sZnVuY3Rpb24oZSxpKXtrW2ldPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBtKHQpJiYocj1yfHxuLG49dCx0PXZvaWQgMCksay5hamF4KGsuZXh0ZW5kKHt1cmw6ZSx0eXBlOmksZGF0YVR5cGU6cixkYXRhOnQsc3VjY2VzczpufSxrLmlzUGxhaW5PYmplY3QoZSkmJmUpKX19KSxrLl9ldmFsVXJsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGsuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbigpe319LGRhdGFGaWx0ZXI6ZnVuY3Rpb24oZSl7ay5nbG9iYWxFdmFsKGUsdCl9fSl9LGsuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobShlKSYmKGU9ZS5jYWxsKHRoaXNbMF0pKSx0PWsoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt3aGlsZShlLmZpcnN0RWxlbWVudENoaWxkKWU9ZS5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKG4pe3JldHVybiBtKG4pP3RoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLndyYXBJbm5lcihuLmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1rKHRoaXMpLHQ9ZS5jb250ZW50cygpO3QubGVuZ3RoP3Qud3JhcEFsbChuKTplLmFwcGVuZChuKX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBuPW0odCk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtrKHRoaXMpLndyYXBBbGwobj90LmNhbGwodGhpcyxlKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdCgiYm9keSIpLmVhY2goZnVuY3Rpb24oKXtrKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLGsuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbihlKXtyZXR1cm4hay5leHByLnBzZXVkb3MudmlzaWJsZShlKX0say5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LGsuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IEMuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goZSl7fX07dmFyIFV0PXswOjIwMCwxMjIzOjIwNH0sWHQ9ay5hamF4U2V0dGluZ3MueGhyKCk7eS5jb3JzPSEhWHQmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gWHQseS5hamF4PVh0PSEhWHQsay5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGkpe3ZhciBvLGE7aWYoeS5jb3JzfHxYdCYmIWkuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWkueGhyKCk7aWYoci5vcGVuKGkudHlwZSxpLnVybCxpLmFzeW5jLGkudXNlcm5hbWUsaS5wYXNzd29yZCksaS54aHJGaWVsZHMpZm9yKG4gaW4gaS54aHJGaWVsZHMpcltuXT1pLnhockZpZWxkc1tuXTtmb3IobiBpbiBpLm1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZShpLm1pbWVUeXBlKSxpLmNyb3NzRG9tYWlufHxlWyJYLVJlcXVlc3RlZC1XaXRoIl18fChlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0IiksZSlyLnNldFJlcXVlc3RIZWFkZXIobixlW25dKTtvPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe28mJihvPWE9ci5vbmxvYWQ9ci5vbmVycm9yPXIub25hYm9ydD1yLm9udGltZW91dD1yLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLCJhYm9ydCI9PT1lP3IuYWJvcnQoKToiZXJyb3IiPT09ZT8ibnVtYmVyIiE9dHlwZW9mIHIuc3RhdHVzP3QoMCwiZXJyb3IiKTp0KHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6dChVdFtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCwidGV4dCIhPT0oci5yZXNwb25zZVR5cGV8fCJ0ZXh0Iil8fCJzdHJpbmciIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9bygpLGE9ci5vbmVycm9yPXIub250aW1lb3V0PW8oImVycm9yIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1hOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmQy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byYmYSgpfSl9LG89bygiYWJvcnQiKTt0cnl7ci5zZW5kKGkuaGFzQ29udGVudCYmaS5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihvKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe28mJm8oKX19fSksay5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxrLmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xiKD86amF2YXxlY21hKXNjcmlwdFxiL30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4gay5nbG9iYWxFdmFsKGUpLGV9fX0pLGsuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT0iR0VUIil9KSxrLmFqYXhUcmFuc3BvcnQoInNjcmlwdCIsZnVuY3Rpb24obil7dmFyIHIsaTtpZihuLmNyb3NzRG9tYWlufHxuLnNjcmlwdEF0dHJzKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7cj1rKCI8c2NyaXB0PiIpLmF0dHIobi5zY3JpcHRBdHRyc3x8e30pLnByb3Aoe2NoYXJzZXQ6bi5zY3JpcHRDaGFyc2V0LHNyYzpuLnVybH0pLm9uKCJsb2FkIGVycm9yIixpPWZ1bmN0aW9uKGUpe3IucmVtb3ZlKCksaT1udWxsLGUmJnQoImVycm9yIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxFLmhlYWQuYXBwZW5kQ2hpbGQoclswXSl9LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KTt2YXIgVnQsR3Q9W10sWXQ9Lyg9KVw/KD89JnwkKXxcP1w/LztrLmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9R3QucG9wKCl8fGsuZXhwYW5kbysiXyIra3QrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLGsuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPSExIT09ZS5qc29ucCYmKFl0LnRlc3QoZS51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgZS5kYXRhJiYwPT09KGUuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmWXQudGVzdChlLmRhdGEpJiYiZGF0YSIpO2lmKGF8fCJqc29ucCI9PT1lLmRhdGFUeXBlc1swXSlyZXR1cm4gcj1lLmpzb25wQ2FsbGJhY2s9bShlLmpzb25wQ2FsbGJhY2spP2UuanNvbnBDYWxsYmFjaygpOmUuanNvbnBDYWxsYmFjayxhP2VbYV09ZVthXS5yZXBsYWNlKFl0LCIkMSIrcik6ITEhPT1lLmpzb25wJiYoZS51cmwrPShTdC50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmpzb25wKyI9IityKSxlLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gb3x8ay5lcnJvcihyKyIgd2FzIG5vdCBjYWxsZWQiKSxvWzBdfSxlLmRhdGFUeXBlc1swXT0ianNvbiIsaT1DW3JdLENbcl09ZnVuY3Rpb24oKXtvPWFyZ3VtZW50c30sbi5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1pP2soQykucmVtb3ZlUHJvcChyKTpDW3JdPWksZVtyXSYmKGUuanNvbnBDYWxsYmFjaz10Lmpzb25wQ2FsbGJhY2ssR3QucHVzaChyKSksbyYmbShpKSYmaShvWzBdKSxvPWk9dm9pZCAwfSksInNjcmlwdCJ9KSx5LmNyZWF0ZUhUTUxEb2N1bWVudD0oKFZ0PUUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKS5ib2R5KS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09VnQuY2hpbGROb2Rlcy5sZW5ndGgpLGsucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/W106KCJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdHx8KHkuY3JlYXRlSFRNTERvY3VtZW50Pygocj0odD1FLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZj1FLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKHIpKTp0PUUpLG89IW4mJltdLChpPUQuZXhlYyhlKSk/W3QuY3JlYXRlRWxlbWVudChpWzFdKV06KGk9d2UoW2VdLHQsbyksbyYmby5sZW5ndGgmJmsobykucmVtb3ZlKCksay5tZXJnZShbXSxpLmNoaWxkTm9kZXMpKSk7dmFyIHIsaSxvfSxrLmZuLmxvYWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhPXRoaXMscz1lLmluZGV4T2YoIiAiKTtyZXR1cm4tMTxzJiYocj1tdChlLnNsaWNlKHMpKSxlPWUuc2xpY2UoMCxzKSksbSh0KT8obj10LHQ9dm9pZCAwKTp0JiYib2JqZWN0Ij09dHlwZW9mIHQmJihpPSJQT1NUIiksMDxhLmxlbmd0aCYmay5hamF4KHt1cmw6ZSx0eXBlOml8fCJHRVQiLGRhdGFUeXBlOiJodG1sIixkYXRhOnR9KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLGEuaHRtbChyP2soIjxkaXY+IikuYXBwZW5kKGsucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuYWx3YXlzKG4mJmZ1bmN0aW9uKGUsdCl7YS5lYWNoKGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pfSksdGhpc30say5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXtrLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSksay5leHByLnBzZXVkb3MuYW5pbWF0ZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGsuZ3JlcChrLnRpbWVycyxmdW5jdGlvbihlKXtyZXR1cm4gdD09PWUuZWxlbX0pLmxlbmd0aH0say5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGw9ay5jc3MoZSwicG9zaXRpb24iKSxjPWsoZSksZj17fTsic3RhdGljIj09PWwmJihlLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHM9Yy5vZmZzZXQoKSxvPWsuY3NzKGUsInRvcCIpLHU9ay5jc3MoZSwibGVmdCIpLCgiYWJzb2x1dGUiPT09bHx8ImZpeGVkIj09PWwpJiYtMTwobyt1KS5pbmRleE9mKCJhdXRvIik/KGE9KHI9Yy5wb3NpdGlvbigpKS50b3AsaT1yLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAsaT1wYXJzZUZsb2F0KHUpfHwwKSxtKHQpJiYodD10LmNhbGwoZSxuLGsuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihmLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihmLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSwidXNpbmciaW4gdD90LnVzaW5nLmNhbGwoZSxmKTpjLmNzcyhmKX19LGsuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihlKXtrLm9mZnNldC5zZXRPZmZzZXQodGhpcyx0LGUpfSk7dmFyIGUsbixyPXRoaXNbMF07cmV0dXJuIHI/ci5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8oZT1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG49ci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LHt0b3A6ZS50b3Arbi5wYWdlWU9mZnNldCxsZWZ0OmUubGVmdCtuLnBhZ2VYT2Zmc2V0fSk6e3RvcDowLGxlZnQ6MH06dm9pZCAwfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfTtpZigiZml4ZWQiPT09ay5jc3MociwicG9zaXRpb24iKSl0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXt0PXRoaXMub2Zmc2V0KCksbj1yLm93bmVyRG9jdW1lbnQsZT1yLm9mZnNldFBhcmVudHx8bi5kb2N1bWVudEVsZW1lbnQ7d2hpbGUoZSYmKGU9PT1uLmJvZHl8fGU9PT1uLmRvY3VtZW50RWxlbWVudCkmJiJzdGF0aWMiPT09ay5jc3MoZSwicG9zaXRpb24iKSllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJigoaT1rKGUpLm9mZnNldCgpKS50b3ArPWsuY3NzKGUsImJvcmRlclRvcFdpZHRoIiwhMCksaS5sZWZ0Kz1rLmNzcyhlLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSl9cmV0dXJue3RvcDp0LnRvcC1pLnRvcC1rLmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1pLmxlZnQtay5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50O3doaWxlKGUmJiJzdGF0aWMiPT09ay5jc3MoZSwicG9zaXRpb24iKSllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxpZX0pfX0pLGsuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LGkpe3ZhciBvPSJwYWdlWU9mZnNldCI9PT1pO2suZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoeChlKT9yPWU6OT09PWUubm9kZVR5cGUmJihyPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PW4pcmV0dXJuIHI/cltpXTplW3RdO3I/ci5zY3JvbGxUbyhvP3IucGFnZVhPZmZzZXQ6bixvP246ci5wYWdlWU9mZnNldCk6ZVt0XT1ufSx0LGUsYXJndW1lbnRzLmxlbmd0aCl9fSksay5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsbil7ay5jc3NIb29rc1tuXT16ZSh5LnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0PV9lKGUsbiksJGUudGVzdCh0KT9rKGUpLnBvc2l0aW9uKClbbl0rInB4Ijp0fSl9KSxrLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihhLHMpe2suZWFjaCh7cGFkZGluZzoiaW5uZXIiK2EsY29udGVudDpzLCIiOiJvdXRlciIrYX0sZnVuY3Rpb24ocixvKXtrLmZuW29dPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCYmKHJ8fCJib29sZWFuIiE9dHlwZW9mIGUpLGk9cnx8KCEwPT09ZXx8ITA9PT10PyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gXyh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4geChlKT8wPT09by5pbmRleE9mKCJvdXRlciIpP2VbImlubmVyIithXTplLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IithXTo5PT09ZS5ub2RlVHlwZT8ocj1lLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChlLmJvZHlbInNjcm9sbCIrYV0sclsic2Nyb2xsIithXSxlLmJvZHlbIm9mZnNldCIrYV0sclsib2Zmc2V0IithXSxyWyJjbGllbnQiK2FdKSk6dm9pZCAwPT09bj9rLmNzcyhlLHQsaSk6ay5zdHlsZShlLHQsbixpKX0scyxuP2U6dm9pZCAwLG4pfX0pfSksay5lYWNoKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51Ii5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsbil7ay5mbltuXT1mdW5jdGlvbihlLHQpe3JldHVybiAwPGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vbihuLG51bGwsZSx0KTp0aGlzLnRyaWdnZXIobil9fSksay5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLGsuZm4uZXh0ZW5kKHtiaW5kOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vbihlLG51bGwsdCxuKX0sdW5iaW5kOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub2ZmKGUsbnVsbCx0KX0sZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHRoaXMub24odCxlLG4scil9LHVuZGVsZWdhdGU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLm9mZihlLCIqKiIpOnRoaXMub2ZmKHQsZXx8IioqIixuKX19KSxrLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtKGUpKXJldHVybiByPXMuY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHMuY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fGsuZ3VpZCsrLGl9LGsuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/ay5yZWFkeVdhaXQrKzprLnJlYWR5KCEwKX0say5pc0FycmF5PUFycmF5LmlzQXJyYXksay5wYXJzZUpTT049SlNPTi5wYXJzZSxrLm5vZGVOYW1lPUEsay5pc0Z1bmN0aW9uPW0say5pc1dpbmRvdz14LGsuY2FtZWxDYXNlPVYsay50eXBlPXcsay5ub3c9RGF0ZS5ub3csay5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9ay50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSwiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4ga30pO3ZhciBRdD1DLmpRdWVyeSxKdD1DLiQ7cmV0dXJuIGsubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gQy4kPT09ayYmKEMuJD1KdCksZSYmQy5qUXVlcnk9PT1rJiYoQy5qUXVlcnk9UXQpLGt9LGV8fChDLmpRdWVyeT1DLiQ9ayksa30pOwo="}]},{"name":"Tweak New Twitter","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://twitter.com/*","https://mobile.twitter.com/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1606763936073,"data":{}},"enabled":false,"position":30,"file_url":"https://greasyfork.org/scripts/387773-tweak-new-twitter/code/Tweak%20New%20Twitter.user.js","uuid":"aa309ae0-8106-4a23-b438-eee71789405f","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFR3ZWFrIE5ldyBUd2l0dGVyCi8vIEBkZXNjcmlwdGlvbiBTdGF5IG9uIHRoZSBMYXRlc3QgVHdlZXRzIHRpbWVsaW5lLCByZWR1Y2UgImVuZ2FnZW1lbnQiIGFuZCB0b25lIGRvd24gc29tZSBvZiBUd2l0dGVyJ3MgVUkKLy8gQG5hbWVzcGFjZSAgIGh0dHBzOi8vZ2l0aHViLmNvbS9pbnNpbi90d2Vhay1uZXctdHdpdHRlci8KLy8gQG1hdGNoICAgICAgIGh0dHBzOi8vdHdpdHRlci5jb20vKgovLyBAbWF0Y2ggICAgICAgaHR0cHM6Ly9tb2JpbGUudHdpdHRlci5jb20vKgovLyBAdmVyc2lvbiAgICAgMjYKLy8gPT0vVXNlclNjcmlwdD09CgovLyNyZWdpb24gQ29uZmlnICYgdmFyaWFibGVzCi8qKgogKiBEZWZhdWx0IGNvbmZpZyBlbmFibGVzIGFsbCBmZWF0dXJlcy4KICoKICogWW91J2xsIG5lZWQgdG8gZWRpdCB0aGUgY29uZmlnIG9iamVjdCBtYW51YWxseSBmb3Igbm93IGlmIHlvdSdyZSB1c2luZyB0aGlzCiAqIGFzIGEgdXNlciBzY3JpcHQuCiAqLwpsZXQgY29uZmlnID0gewogIGFsd2F5c1VzZUxhdGVzdFR3ZWV0czogdHJ1ZSwKICBmYXN0QmxvY2s6IHRydWUsCiAgaGlkZUFjY291bnRTd2l0Y2hlcjogdHJ1ZSwKICBoaWRlQm9va21hcmtzTmF2OiB0cnVlLAogIGhpZGVFeHBsb3JlTmF2OiB0cnVlLAogIGhpZGVMaXN0c05hdjogdHJ1ZSwKICBoaWRlTWVzc2FnZXNEcmF3ZXI6IHRydWUsCiAgaGlkZU1vcmVUd2VldHM6IHRydWUsCiAgaGlkZVNpZGViYXJDb250ZW50OiB0cnVlLAogIGhpZGVXaG9Ub0ZvbGxvd0V0YzogdHJ1ZSwKICBuYXZCYXNlRm9udFNpemU6IHRydWUsCiAgLyoqIEB0eXBlIHsnc2VwYXJhdGUnfCdoaWRlJ3wnaWdub3JlJ30gKi8KICByZXR3ZWV0czogKCdzZXBhcmF0ZScpLAogIC8qKiBAdHlwZSB7J2hpZ2hsaWdodCd8J2hpZGUnfCdpZ25vcmUnfSAqLwogIHZlcmlmaWVkQWNjb3VudHM6ICgnaWdub3JlJyksCn0KCmNvbmZpZy5lbmFibGVEZWJ1Z0xvZ2dpbmcgPSBmYWxzZQoKY29uc3QgSE9NRSA9ICdIb21lJwpjb25zdCBMQVRFU1RfVFdFRVRTID0gJ0xhdGVzdCBUd2VldHMnCmNvbnN0IE1FU1NBR0VTID0gJ01lc3NhZ2VzJwpjb25zdCBUSU1FTElORV9SRVRXRUVUUyA9ICdUaW1lbGluZSBSZXR3ZWV0cycKCmNvbnN0IFBST0ZJTEVfVElUTEVfUkUgPSAvXChAW2EtelxkX117MSwxNX1cKSQvaQpjb25zdCBUSVRMRV9OT1RJRklDQVRJT05fUkUgPSAvXlwoXGQrXCs/XCkgLwpjb25zdCBVUkxfVFdFRVRfSURfUkUgPSAvXC9zdGF0dXNcLyhcZCspJC8KY29uc3QgVVJMX1BIT1RPX1JFID0gL3Bob3RvXC9cZCQvCgpsZXQgU2VsZWN0b3JzID0gewogIEFDQ09VTlRfU1dJVENIRVI6ICdkaXZbZGF0YS10ZXN0aWQ9IlNpZGVOYXZfQWNjb3VudFN3aXRjaGVyX0J1dHRvbiJdJywKICBNRVNTQUdFU19EUkFXRVI6ICdkaXZbZGF0YS10ZXN0aWQ9IkRNRHJhd2VyIl0nLAogIE5BVl9IT01FX0xJTks6ICdhW2RhdGEtdGVzdGlkPSJBcHBUYWJCYXJfSG9tZV9MaW5rIl0nLAogIFBSSU1BUllfQ09MVU1OOiAnZGl2W2RhdGEtdGVzdGlkPSJwcmltYXJ5Q29sdW1uIl0nLAogIFBSSU1BUllfTkFWOiAnbmF2W2FyaWEtbGFiZWw9IlByaW1hcnkiXScsCiAgUFJPTU9URURfVFdFRVQ6ICdbZGF0YS10ZXN0aWQ9InBsYWNlbWVudFRyYWNraW5nIl0nLAogIFNJREVCQVJfQ09MVU1OOiAnZGl2W2RhdGEtdGVzdGlkPSJzaWRlYmFyQ29sdW1uIl0nLAogIFRJTUVMSU5FX0hFQURJTkc6ICdoMltyb2xlPSJoZWFkaW5nIl0nLAogIFRXRUVUOiAnZGl2W2RhdGEtdGVzdGlkPSJ0d2VldCJdJywKICBWRVJJRklFRF9USUNLOiAnc3ZnW2FyaWEtbGFiZWw9IlZlcmlmaWVkIGFjY291bnQiXScsCn0KCk9iamVjdC5hc3NpZ24oU2VsZWN0b3JzLCB7CiAgU0lERUJBUl9GT09URVI6IGAke1NlbGVjdG9ycy5TSURFQkFSX0NPTFVNTn0gbmF2YCwKICBTSURFQkFSX1BFT1BMRTogYCR7U2VsZWN0b3JzLlNJREVCQVJfQ09MVU1OfSBhc2lkZWAsCiAgU0lERUJBUl9UUkVORFM6IGAke1NlbGVjdG9ycy5TSURFQkFSX0NPTFVNTn0gc2VjdGlvbmAsCiAgVElNRUxJTkU6IGAke1NlbGVjdG9ycy5QUklNQVJZX0NPTFVNTn0gc2VjdGlvbiA+IGgxICsgZGl2W2FyaWEtbGFiZWxdID4gZGl2YCwKfSkKCi8qKiBUaXRsZSBvZiB0aGUgY3VycmVudCBwYWdlLCB3aXRob3V0IHRoZSAnIC8gVHdpdHRlcicgc3VmZml4ICovCmxldCBjdXJyZW50UGFnZSA9ICcnCgovKiogTm90aWZpY2F0aW9uIGNvdW50IGluIHRoZSB0aXRsZSAoaW5jbHVkaW5nIHRyYWlsaW5nIHNwYWNlKSwgZS5nLiAnKDEpICcgKi8KbGV0IGN1cnJlbnROb3RpZmljYXRpb25Db3VudCA9ICcnCgovKiogQ3VycmVudCBVUkwgcGF0aCAqLwpsZXQgY3VycmVudFBhdGggPSAnJwoKLyoqIEZsYWcgZm9yIGEgSG9tZSAvIExhdGVzdCBUd2VldHMgbGluayBoYXZpbmcgYmVlbiBjbGlja2VkICovCmxldCBob21lTGlua0NsaWNrZWQgPSBmYWxzZQoKLyoqCiAqIE11dGF0aW9uT2JzZXJ2ZXJzIGFjdGl2ZSBvbiB0aGUgY3VycmVudCBwYWdlCiAqIEB0eXBlIE11dGF0aW9uT2JzZXJ2ZXJbXQogKi8KbGV0IHBhZ2VPYnNlcnZlcnMgPSBbXQovLyNlbmRyZWdpb24KCi8vI3JlZ2lvbiBVdGlsaXR5IGZ1bmN0aW9ucwpmdW5jdGlvbiBhZGRTdHlsZShjc3MpIHsKICBsZXQgJHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKQogICRzdHlsZS5kYXRhc2V0Lmluc2VydGVkQnkgPSAndHdlYWstbmV3LXR3aXR0ZXInCiAgJHN0eWxlLnRleHRDb250ZW50ID0gY3NzCiAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCgkc3R5bGUpCiAgcmV0dXJuICRzdHlsZQp9CgovKioKICogQHJldHVybnMge1Byb21pc2U8SFRNTEVsZW1lbnQ+fQogKi8KZnVuY3Rpb24gZ2V0RWxlbWVudChzZWxlY3RvciwgewogIG5hbWUgPSBudWxsLAogIHN0b3BJZiA9IG51bGwsCiAgdGFyZ2V0ID0gZG9jdW1lbnQsCiAgdGltZW91dCA9IEluZmluaXR5LAp9ID0ge30pIHsKICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgIGxldCByYWZJZAogICAgbGV0IHRpbWVvdXRJZAoKICAgIGZ1bmN0aW9uIHN0b3AoJGVsZW1lbnQsIHJlYXNvbikgewogICAgICBpZiAoJGVsZW1lbnQgPT0gbnVsbCkgewogICAgICAgIGxvZyhgc3RvcHBlZCB3YWl0aW5nIGZvciAke25hbWUgfHwgc2VsZWN0b3J9IGFmdGVyICR7cmVhc29ufWApCiAgICAgIH0KICAgICAgaWYgKHJhZklkKSB7CiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpCiAgICAgIH0KICAgICAgaWYgKHRpbWVvdXRJZCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpCiAgICAgIH0KICAgICAgcmVzb2x2ZSgkZWxlbWVudCkKICAgIH0KCiAgICBpZiAodGltZW91dCAhPT0gSW5maW5pdHkpIHsKICAgICAgdGltZW91dElkID0gc2V0VGltZW91dChzdG9wLCB0aW1lb3V0LCBudWxsLCBgJHt0aW1lb3V0fW1zIHRpbWVvdXRgKQogICAgfQoKICAgIGZ1bmN0aW9uIHF1ZXJ5RWxlbWVudCgpIHsKICAgICAgbGV0ICRlbGVtZW50ID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpCiAgICAgIGlmICgkZWxlbWVudCkgewogICAgICAgIHN0b3AoJGVsZW1lbnQpCiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RvcElmICE9IG51bGwgJiYgc3RvcElmKCkgPT09IHRydWUpIHsKICAgICAgICBzdG9wKG51bGwsICdzdG9wSWYgY29uZGl0aW9uIG1ldCcpCiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocXVlcnlFbGVtZW50KQogICAgICB9CiAgICB9CgogICAgcXVlcnlFbGVtZW50KCkKICB9KQp9CgpmdW5jdGlvbiBsb2coLi4uYXJncykgewogIGlmIChjb25maWcuZW5hYmxlRGVidWdMb2dnaW5nKSB7CiAgICBjb25zb2xlLmxvZyhgVFdUJHtjdXJyZW50UGFnZSA/IGAoJHtjdXJyZW50UGFnZX0pYCA6ICcnfWAsIC4uLmFyZ3MpCiAgfQp9CgovKioKICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgQVBJLgogKgogKiBUaGUgbGlzdGVuZXIgaXMgY2FsbGVkIGltbWVkaWF0ZWx5IHRvIHN1cHBvcnQgdXNpbmcgYW4gb2JzZXJ2ZXIgYW5kIGl0cwogKiBvcHRpb25zIGFzIGEgdHJpZ2dlciBmb3IgYW55IGNoYW5nZSwgd2l0aG91dCBsb29raW5nIGF0IE11dGF0aW9uUmVjb3Jkcy4KICoKICogQHBhcmFtIHtOb2RlfSAkZWxlbWVudAogKiBAcGFyYW0ge011dGF0aW9uQ2FsbGJhY2t9IGNhbGxiYWNrCiAqIEBwYXJhbSB7TXV0YXRpb25PYnNlcnZlckluaXR9IG9wdGlvbnMKICovCmZ1bmN0aW9uIG9ic2VydmVFbGVtZW50KCRlbGVtZW50LCBjYWxsYmFjaywgb3B0aW9ucyA9IHtjaGlsZExpc3Q6IHRydWV9KSB7CiAgbGV0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2spCiAgY2FsbGJhY2soW10sIG9ic2VydmVyKQogIG9ic2VydmVyLm9ic2VydmUoJGVsZW1lbnQsIG9wdGlvbnMpCiAgcmV0dXJuIG9ic2VydmVyCn0KCmZ1bmN0aW9uIHBhZ2VJc05vdChwYWdlKSB7CiAgcmV0dXJuICgpID0+IHBhZ2UgIT0gY3VycmVudFBhZ2UKfQoKZnVuY3Rpb24gcGF0aElzTm90KHBhdGgpIHsKICByZXR1cm4gKCkgPT4gcGF0aCAhPSBjdXJyZW50UGF0aAp9CgpmdW5jdGlvbiBzKG4pIHsKICByZXR1cm4gbiA9PSAxID8gJycgOiAncycKfQovLyNlbmRyZWdpb24KCi8vI3JlZ2lvbiBHbG9iYWwgb2JzZXJ2ZXJzCmZ1bmN0aW9uIG9ic2VydmVIdG1sRm9udFNpemUoKSB7CiAgbGV0ICRodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpCiAgbGV0ICRzdHlsZSA9IGFkZFN0eWxlKCcnKQogIGxldCBsYXN0Rm9udFNpemUgPSAnJwoKICBsb2coJ29ic2VydmluZyBodG1sIHN0eWxlIGF0dHJpYnV0ZSBmb3IgZm9udC1zaXplIGNoYW5nZXMnKQogIGxldCBvYnNlcnZlciA9IG9ic2VydmVFbGVtZW50KCRodG1sLCAoKSA9PiB7CiAgICBpZiAoJGh0bWwuc3R5bGUuZm9udFNpemUgIT0gbGFzdEZvbnRTaXplKSB7CiAgICAgIGxhc3RGb250U2l6ZSA9ICRodG1sLnN0eWxlLmZvbnRTaXplCiAgICAgIGxvZyhgc2V0dGluZyBuYXYgZm9udCBzaXplIHRvICR7bGFzdEZvbnRTaXplfWApCiAgICAgICRzdHlsZS50ZXh0Q29udGVudCA9IFsKICAgICAgICBgJHtTZWxlY3RvcnMuUFJJTUFSWV9OQVZ9IGRpdltkaXI9ImF1dG8iXSBzcGFuIHsgZm9udC1zaXplOiAke2xhc3RGb250U2l6ZX07IGZvbnQtd2VpZ2h0OiBub3JtYWw7IH1gLAogICAgICAgIGAke1NlbGVjdG9ycy5QUklNQVJZX05BVn0gZGl2W2Rpcj0iYXV0byJdIHsgbWFyZ2luLXRvcDogLTRweDsgfWAKICAgICAgXS5qb2luKCdcbicpCiAgICB9CiAgfSwgewogICAgYXR0cmlidXRlczogdHJ1ZSwKICAgIGF0dHJpYnV0ZUZpbHRlcjogWydzdHlsZSddCiAgfSkKCiAgcmV0dXJuIHsKICAgIGRpc2Nvbm5lY3QoKSB7CiAgICAgICRzdHlsZS5yZW1vdmUoKQogICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCkKICAgIH0KICB9Cn0KCmFzeW5jIGZ1bmN0aW9uIG9ic2VydmVUaXRsZSgpIHsKICBsZXQgJHRpdGxlID0gYXdhaXQgZ2V0RWxlbWVudCgndGl0bGUnLCB7bmFtZTogJzx0aXRsZT4nfSkKICBsb2coJ29ic2VydmluZyA8dGl0bGU+JykKICByZXR1cm4gb2JzZXJ2ZUVsZW1lbnQoJHRpdGxlLCAoKSA9PiBvblRpdGxlQ2hhbmdlKCR0aXRsZS50ZXh0Q29udGVudCksIHsKICAgIGNoaWxkTGlzdDogdHJ1ZSwKICB9KQp9Cgphc3luYyBmdW5jdGlvbiBvYnNlcnZlUG9wdXBzKCkgewogIGxldCAka2V5Ym9hcmRXcmFwcGVyID0gYXdhaXQgZ2V0RWxlbWVudCgnW2RhdGEtYXQtc2hvcnRjdXRrZXlzXScsIHsKICAgIG5hbWU6ICdrZXlib2FyZCB3cmFwcGVyJywKICB9KQogIGxvZygnb2JzZXJ2aW5nIHBvcHVwcycpCiAgb2JzZXJ2ZUVsZW1lbnQoJGtleWJvYXJkV3JhcHBlci5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLCAobXV0YXRpb25zKSA9PiB7CiAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHsKICAgICAgLy8gVGhlIGZpcnN0IHBvcHVwIHRha2VzIGFub3RoZXIgdGljayB0byByZW5kZXIgY29udGVudAogICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goJGVsID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBvblBvcHVwKCRlbCkpKQogICAgfSkKICB9KQp9Ci8vI2VuZHJlZ2lvbgoKLy8jcmVnaW9uIFBhZ2Ugb2JzZXJ2ZXJzCmFzeW5jIGZ1bmN0aW9uIG9ic2VydmVTaWRlYmFyQXBwZWFyYW5jZShwYWdlKSB7CiAgbGV0ICRwcmltYXJ5Q29sdW1uID0gYXdhaXQgZ2V0RWxlbWVudChTZWxlY3RvcnMuUFJJTUFSWV9DT0xVTU4sIHsKICAgIG5hbWU6ICdwcmltYXJ5IGNvbHVtbicsCiAgICBzdG9wSWY6IHBhZ2VJc05vdChwYWdlKSwKICB9KQogIGxvZygnb2JzZXJ2aW5nIHJlc3BvbnNpdmUgc2lkZWJhcicpCiAgcGFnZU9ic2VydmVycy5wdXNoKAogICAgb2JzZXJ2ZUVsZW1lbnQoJHByaW1hcnlDb2x1bW4ucGFyZW50Tm9kZSwgKG11dGF0aW9ucykgPT4gewogICAgICBtdXRhdGlvbnMuZm9yRWFjaCgobXV0YXRpb24pID0+IHsKICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKGVsKSA9PiB7CiAgICAgICAgICBpZiAoLyoqIEB0eXBlIHtIVE1MRWxlbWVudH0gKi8gKGVsKS5kYXRhc2V0LnRlc3RpZCA9PSAnc2lkZWJhckNvbHVtbicpIHsKICAgICAgICAgICAgbG9nKCdzaWRlYmFyIGFwcGVhcmVkJykKICAgICAgICAgICAgaGlkZVNpZGViYXJDb250ZW50cyhwYWdlKQogICAgICAgICAgfQogICAgICAgIH0pCiAgICAgIH0pCiAgICB9KQogICkKfQoKYXN5bmMgZnVuY3Rpb24gb2JzZXJ2ZVRpbWVsaW5lKHBhZ2UpIHsKICBsZXQgJHRpbWVsaW5lID0gYXdhaXQgZ2V0RWxlbWVudChTZWxlY3RvcnMuVElNRUxJTkUsIHsKICAgIG5hbWU6ICd0aW1lbGluZScsCiAgICBzdG9wSWY6IHBhZ2VJc05vdChwYWdlKSwKICB9KQogIGlmICgkdGltZWxpbmUgPT0gbnVsbCkgewogICAgcmV0dXJuCiAgfQoKICAvLyBPbiAyMDIwLTA0LTAzIFR3aXR0ZXIgc3dpdGNoZWQgdG8gYSBuZXcgd2F5IG9mIHJlbmRlcmluZyB0aGUgdGltZWxpbmUgd2hpY2ggcmVwbGFjZXMgYW4gaW5pdGlhbAogIC8vIGNvbnRhaW5lciB3aXRoIHRoZSByZWFsIGVsZW1lbnQgd2hpY2ggaG9sZHMgdGltZWxpbmUgdHdlZXRzIGFuZCByZWR1Y2VzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKICAvLyB3cmFwcGluZyB0aGUgdGltZWxpbmUuCiAgLy8KICAvLyB2MS45IHdhcyByZWxlYXNlZCB0byBoYW5kbGUgdGhpcy4KICAvLwogIC8vIE9uIDIwMjAtMDQtMDUgdGhleSBzd2l0Y2hlZCBiYWNrIHRvIHRoZSBvbGQgbWV0aG9kLgogIC8vCiAgLy8gVGhpcyBhdHRlbXB0cyB0byBzdXBwb3J0IGJvdGggYXBwcm9hY2hlcyBpbiBjYXNlIHRoZXkga2VlcGluZyBzd2l0Y2hpbmcgYmV0d2VlbiB0aGUgdHdvLgoKICAvLyBUaGUgIm5ldyIgaW5pdGFsIHRpbWVsaW5lIGVsZW1lbnQgaXMgYSBwbGFjZWhvbGRlciB3aGljaCBkb2Vzbid0IGhhdmUgYSBzdHlsZSBhdHRyaWJ1dGUKICAvLyBUaGUgIm9sZCIgdGltZWxpbmUgaGFzIDIgd3JhcHBlciBkaXZzIHdoaWNoIGFwcGx5IHBhZGRpbmcgdmlhIHRoZSBET00gLnN0eWxlIG9iamVjdAogIGlmICgkdGltZWxpbmUuaGFzQXR0cmlidXRlKCdzdHlsZScpKSB7CiAgICAvLyBUaGUgIm9sZCIgdGltZWxpbmUgaXMgbmVzdGVkIG9uZSBsZXZlbCBkZWVwZXIgYW5kIHRoZSBpbml0aWFsIGNvbnRhaW5lciBoYXMgcGFkZGluZy1ib3R0b20KICAgIC8vIDxkaXYgYXJpYS1sYWJlbD0iVGltZWxpbmU6IFlvdXIgSG9tZSBUaW1lbGluZSI+CiAgICAvLyAgIDxkaXYgc3R5bGU9InBhZGRpbmctYm90dG9tOiAwcHgiPiA8IS0tIGN1cnJlbnQgJHRpbWVsaW5lIC0tPgogICAgLy8gICAgIDxkaXYgc3R5bGU9InBhZGRpbmctdG9wOiAuLi5weDsgcGFkZGluZy1ib3R0b206IC4uLnB4Ij4gPCEtLSB3ZSB3YW50IHRvIG9ic2VydmUgdGhpcyAtLT4KICAgIC8vICAgICAgIDxkaXY+IDwhLS0gdHdlZXQgZWxlbWVudHMgYXJlIGF0IHRoaXMgbGV2ZWwgLS0+CiAgICAvLyAgICAgICAuLi4KICAgIGlmICgkdGltZWxpbmUuc3R5bGUucGFkZGluZ0JvdHRvbSkgewogICAgICAkdGltZWxpbmUgPSAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLyAoJHRpbWVsaW5lLmZpcnN0RWxlbWVudENoaWxkKQogICAgICBsb2coJ29ic2VydmluZyAib2xkIiB0aW1lbGluZScsIHskdGltZWxpbmV9KQogICAgfQogICAgZWxzZSB7CiAgICAgIGxvZygnb2JzZXJ2aW5nICJuZXciIHRpbWVsaW5lJywgeyR0aW1lbGluZX0pCiAgICB9CiAgICBwYWdlT2JzZXJ2ZXJzLnB1c2goCiAgICAgIG9ic2VydmVFbGVtZW50KCR0aW1lbGluZSwgKCkgPT4gb25UaW1lbGluZUNoYW5nZSgkdGltZWxpbmUsIHBhZ2UpKQogICAgKQogIH0KICBlbHNlIHsKICAgIGxvZygnd2FpdGluZyBmb3IgcmVhbCAibmV3IiB0aW1lbGluZScpCiAgICBwYWdlT2JzZXJ2ZXJzLnB1c2goCiAgICAgIG9ic2VydmVFbGVtZW50KCR0aW1lbGluZS5wYXJlbnROb2RlLCAobXV0YXRpb25zKSA9PiB7CiAgICAgICAgbXV0YXRpb25zLmZvckVhY2goKG11dGF0aW9uKSA9PiB7CiAgICAgICAgICBtdXRhdGlvbi5hZGRlZE5vZGVzLmZvckVhY2goKCR0aW1lbGluZSkgPT4gewogICAgICAgICAgICBsb2coJ29ic2VydmluZyAibmV3IiB0aW1lbGluZScsIHskdGltZWxpbmV9KQogICAgICAgICAgICBwYWdlT2JzZXJ2ZXJzLnB1c2goCiAgICAgICAgICAgICAgb2JzZXJ2ZUVsZW1lbnQoJHRpbWVsaW5lLCAoKSA9PiBvblRpbWVsaW5lQ2hhbmdlKCR0aW1lbGluZSwgcGFnZSkpCiAgICAgICAgICAgICkKICAgICAgICAgIH0pCiAgICAgICAgfSkKICAgICAgfSkKICAgICkKICB9Cn0KLy8jZW5kcmVnaW9uCgovLyNyZWdpb24gVHdlYWsgZnVuY3Rpb25zCmFzeW5jIGZ1bmN0aW9uIGFkZFJldHdlZXRzSGVhZGVyKHBhZ2UpIHsKICBsZXQgJHRpbWVsaW5lVGl0bGUgPSBhd2FpdCBnZXRFbGVtZW50KCdtYWluIGgyJywgewogICAgbmFtZTogJ3RpbWVsaW5lIHRpdGxlJywKICAgIHN0b3BJZjogcGFnZUlzTm90KHBhZ2UpLAogIH0pCiAgaWYgKCR0aW1lbGluZVRpdGxlICE9IG51bGwgJiYKICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3R3dF9yZXR3ZWV0cycpID09IG51bGwpIHsKICAgIGxvZygnaW5zZXJ0aW5nIFJldHdlZXRzIGhlYWRlcicpCiAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykKICAgIGRpdi5pbm5lckhUTUwgPSAkdGltZWxpbmVUaXRsZS5wYXJlbnRFbGVtZW50Lm91dGVySFRNTAogICAgbGV0ICRyZXR3ZWV0cyA9IGRpdi5maXJzdEVsZW1lbnRDaGlsZAogICAgJHJldHdlZXRzLnF1ZXJ5U2VsZWN0b3IoJ2gyJykuaWQgPSAndHd0X3JldHdlZXRzJwogICAgJHJldHdlZXRzLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKS50ZXh0Q29udGVudCA9ICdSZXR3ZWV0cycKICAgIC8vIFRoaXMgc2NyaXB0IGFzc3VtZXMgbmF2aWdhdGlvbiBoYXMgb2NjdXJyZWQgd2hlbiB0aGUgZG9jdW1lbnQgdGl0bGUgY2hhbmdlcywKICAgIC8vIHNvIGJ5IGNoYW5naW5nIHRoZSB0aXRsZSB0byAiUmV0d2VldHMiIHdlIGVmZmVjdGl2ZWx5IGZha2UgbmF2aWdhdGlvbiB0byBhCiAgICAvLyBub24tZXhpc3RlbnQgUmV0d2VldHMgcGFnZS4KICAgICRyZXR3ZWV0cy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgICAgaWYgKCFkb2N1bWVudC50aXRsZS5zdGFydHNXaXRoKFRJTUVMSU5FX1JFVFdFRVRTKSkgewogICAgICAgIHNldFRpdGxlKFRJTUVMSU5FX1JFVFdFRVRTKQogICAgICB9CiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7dG9wOiAwfSkKICAgIH0pCiAgICAkdGltZWxpbmVUaXRsZS5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsICRyZXR3ZWV0cykKICAgIC8vIEdvIGJhY2sgdG8gdGhlIG1haW4gdGltZWxpbmUgZnJvbSBSZXR3ZWV0cyB3aGVuIHRoZSBMYXRlc3QgVHdlZXRzIC8gSG9tZSBoZWFkaW5nIGlzIGNsaWNrZWQKICAgICR0aW1lbGluZVRpdGxlLnBhcmVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgIGlmICghZG9jdW1lbnQudGl0bGUuc3RhcnRzV2l0aChwYWdlKSkgewogICAgICAgIGhvbWVMaW5rQ2xpY2tlZCA9IHRydWUKICAgICAgICBzZXRUaXRsZShwYWdlKQogICAgICB9CiAgICB9KQogICAgLy8gR28gYmFjayB0byB0aGUgbWFpbiB0aW1lbGluZSBmcm9tIFJldHdlZXRzIHdoZW4gdGhlIEhvbWUgbmF2IGxpbmsgaXMgY2xpY2tlZAogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihTZWxlY3RvcnMuTkFWX0hPTUVfTElOSykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICAgIGhvbWVMaW5rQ2xpY2tlZCA9IHRydWUKICAgICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lID09ICcvaG9tZScgJiYgIWRvY3VtZW50LnRpdGxlLnN0YXJ0c1dpdGgocGFnZSkpIHsKICAgICAgICBzZXRUaXRsZShwYWdlKQogICAgICB9CiAgICB9KQogIH0KfQoKZnVuY3Rpb24gYWRkU3RhdGljQ3NzKCkgewogIHZhciBjc3NSdWxlcyA9IFtdCiAgdmFyIGhpZGVDc3NTZWxlY3RvcnMgPSBbXQogIGlmIChjb25maWcuaGlkZVNpZGViYXJDb250ZW50KSB7CiAgICBoaWRlQ3NzU2VsZWN0b3JzLnB1c2goCiAgICAgIFNlbGVjdG9ycy5TSURFQkFSX1RSRU5EUywKICAgICAgU2VsZWN0b3JzLlNJREVCQVJfUEVPUExFLAogICAgICBTZWxlY3RvcnMuU0lERUJBUl9GT09URVIKICAgICkKICB9CiAgaWYgKGNvbmZpZy5oaWRlRXhwbG9yZU5hdikgewogICAgaGlkZUNzc1NlbGVjdG9ycy5wdXNoKGAke1NlbGVjdG9ycy5QUklNQVJZX05BVn0gYVtocmVmPSIvZXhwbG9yZSJdYCkKICB9CiAgaWYgKGNvbmZpZy5oaWRlQm9va21hcmtzTmF2KSB7CiAgICBoaWRlQ3NzU2VsZWN0b3JzLnB1c2goYCR7U2VsZWN0b3JzLlBSSU1BUllfTkFWfSBhW2hyZWY9Ii9pL2Jvb2ttYXJrcyJdYCkKICB9CiAgaWYgKGNvbmZpZy5oaWRlTGlzdHNOYXYpIHsKICAgIGhpZGVDc3NTZWxlY3RvcnMucHVzaChgJHtTZWxlY3RvcnMuUFJJTUFSWV9OQVZ9IGFbaHJlZio9Ii9saXN0cyJdYCkKICB9CiAgaWYgKGNvbmZpZy5oaWRlQWNjb3VudFN3aXRjaGVyKSB7CiAgICBoaWRlQ3NzU2VsZWN0b3JzLnB1c2goU2VsZWN0b3JzLkFDQ09VTlRfU1dJVENIRVIpCiAgfQogIGlmIChjb25maWcuaGlkZU1lc3NhZ2VzRHJhd2VyKSB7CiAgICBoaWRlQ3NzU2VsZWN0b3JzLnB1c2goU2VsZWN0b3JzLk1FU1NBR0VTX0RSQVdFUikKICB9CiAgaWYgKGhpZGVDc3NTZWxlY3RvcnMubGVuZ3RoID4gMCkgewogICAgY3NzUnVsZXMucHVzaChgJHtoaWRlQ3NzU2VsZWN0b3JzLmpvaW4oJywgJyl9IHsgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyB9YCkKICB9CiAgaWYgKGNzc1J1bGVzLmxlbmd0aCA+IDApIHsKICAgIGFkZFN0eWxlKGNzc1J1bGVzLmpvaW4oJ1xuJykpCiAgfQp9CgpmdW5jdGlvbiBnZXRUd2VldFR5cGUoJHR3ZWV0KSB7CiAgaWYgKCR0d2VldC5jbG9zZXN0KFNlbGVjdG9ycy5QUk9NT1RFRF9UV0VFVCkpIHsKICAgIHJldHVybiAnUFJPTU9URURfVFdFRVQnCiAgfQogIGlmICgkdHdlZXQucHJldmlvdXNFbGVtZW50U2libGluZyAhPSBudWxsICYmCiAgICAgICR0d2VldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLnRleHRDb250ZW50LmluY2x1ZGVzKCdSZXR3ZWV0ZWQnKSkgewogICAgcmV0dXJuICdSRVRXRUVUJwogIH0KICByZXR1cm4gJ1RXRUVUJwp9Cgphc3luYyBmdW5jdGlvbiBoaWRlU2lkZWJhckNvbnRlbnRzKHBhZ2UpIHsKICBsZXQgdHJlbmRzID0gZ2V0RWxlbWVudChTZWxlY3RvcnMuU0lERUJBUl9UUkVORFMsIHsKICAgIG5hbWU6ICdzaWRlYmFyIHRyZW5kcycsCiAgICBzdG9wSWY6IHBhZ2VJc05vdChwYWdlKSwKICAgIHRpbWVvdXQ6IDQwMDAsCiAgfSkudGhlbigoJHRyZW5kcykgPT4gewogICAgaWYgKCR0cmVuZHMgPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2UKICAgIH0KICAgIGxldCAkdHJlbmRzTW9kdWxlID0gJHRyZW5kcy5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudAogICAgJHRyZW5kc01vZHVsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCiAgICAvLyBIaWRlIHN1cnJvdW5kaW5nIGVsZW1lbnRzIHdoaWNoIGRyYXcgc2VwYXJhdG9ycyBiZXR3ZWVuIG1vZHVsZXMKICAgIGlmICgkdHJlbmRzTW9kdWxlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYKICAgICAgICAkdHJlbmRzTW9kdWxlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuY2hpbGRFbGVtZW50Q291bnQgPT0gMCkgewogICAgICAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLyAoJHRyZW5kc01vZHVsZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCiAgICB9CiAgICBpZiAoJHRyZW5kc01vZHVsZS5uZXh0RWxlbWVudFNpYmxpbmcgJiYKICAgICAgICAkdHJlbmRzTW9kdWxlLm5leHRFbGVtZW50U2libGluZy5jaGlsZEVsZW1lbnRDb3VudCA9PSAwKSB7CiAgICAgIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovICgkdHJlbmRzTW9kdWxlLm5leHRFbGVtZW50U2libGluZykuc3R5bGUuZGlzcGxheSA9ICdub25lJwogICAgfQogICAgcmV0dXJuIHRydWUKICB9KQoKICBsZXQgcGVvcGxlID0gZ2V0RWxlbWVudChTZWxlY3RvcnMuU0lERUJBUl9QRU9QTEUsIHsKICAgIG5hbWU6ICdzaWRlYmFyIHBlb3BsZScsCiAgICBzdG9wSWY6IHBhZ2VJc05vdChwYWdlKSwKICAgIHRpbWVvdXQ6IDQwMDAsCiAgfSkudGhlbigoJHBlb3BsZSkgPT4gewogICAgaWYgKCRwZW9wbGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2UKICAgIH0KICAgIGxldCAkcGVvcGxlTW9kdWxlCiAgICBpZiAoJHBlb3BsZS5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSA9PSAnUmVsZXZhbnQgcGVvcGxlJykgewogICAgICAvLyAiUmVsZXZhbnQgcGVvcGxlIiBzZWN0aW9uIHdoZW4gdmlld2luZyBhIFR3ZWV0L3RocmVhZAogICAgICAkcGVvcGxlTW9kdWxlID0gJHBlb3BsZS5wYXJlbnRFbGVtZW50CiAgICB9CiAgICBlbHNlIHsKICAgICAgLy8gIldobyB0byBmb2xsb3ciIHNlY3Rpb24KICAgICAgJHBlb3BsZU1vZHVsZSA9ICRwZW9wbGUucGFyZW50RWxlbWVudAogICAgfQogICAgJHBlb3BsZU1vZHVsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCiAgICByZXR1cm4gdHJ1ZQogIH0pCgogIGxldCBbaGlkVHJlbmRzLCBoaWRQZW9wbGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RyZW5kcywgcGVvcGxlXSkKICBsb2coaGlkVHJlbmRzID09IHRydWUgJiYgaGlkUGVvcGxlID09IHRydWUKICAgID8gJ2hpZCBhbGwgc2lkZWJhciBjb250ZW50JwogICAgOiAnc3RvcHBlZCB3YWl0aW5nIGZvciBzaWRlYmFyIGNvbnRlbnQnKQp9CgpmdW5jdGlvbiBvblBvcHVwKCR0b3BMZXZlbEVsZW1lbnQpIHsKICAvLyBCbG9jayBidXR0b24KICBsZXQgJGNvbmZpcm1CdXR0b24gPSAkdG9wTGV2ZWxFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdltkYXRhLXRlc3RpZD0iY29uZmlybWF0aW9uU2hlZXRDb25maXJtIl0nKQogIGlmICgkY29uZmlybUJ1dHRvbiAmJiAkY29uZmlybUJ1dHRvbi5pbm5lclRleHQgPT0gJ0Jsb2NrJykgewogICAgaWYgKGNvbmZpZy5mYXN0QmxvY2spIHsKICAgICAgbG9nKCdGYXN0IGJsb2NraW5nJykKICAgICAgJGNvbmZpcm1CdXR0b24uY2xpY2soKQogICAgfQogICAgcmV0dXJuCiAgfQp9CgovKiogQHR5cGVkZWYgeydUV0VFVCd8J1JFVFdFRVQnfCdQUk9NT1RFRF9UV0VFVCd8J0hFQURJTkcnfSBUaW1lbGluZUl0ZW1UeXBlICovCgpmdW5jdGlvbiBvblRpbWVsaW5lQ2hhbmdlKCR0aW1lbGluZSwgcGFnZSkgewogIGxvZyhgcHJvY2Vzc2luZyAkeyR0aW1lbGluZS5jaGlsZHJlbi5sZW5ndGh9IHRpbWVsaW5lIGl0ZW0ke3MoJHRpbWVsaW5lLmNoaWxkcmVuLmxlbmd0aCl9YCkKICAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLwogIGxldCAkcHJldmlvdXNJdGVtID0gbnVsbAogIC8qKiBAdHlwZSB7P1RpbWVsaW5lSXRlbVR5cGV9ICovCiAgbGV0IHByZXZpb3VzVGltZWxpbmVJdGVtVHlwZSA9IG51bGwKICBmb3IgKGxldCAkaXRlbSBvZiAkdGltZWxpbmUuY2hpbGRyZW4pIHsKICAgIC8qKiBAdHlwZSB7P1RpbWVsaW5lSXRlbVR5cGV9ICovCiAgICBsZXQgdGltZWxpbmVJdGVtVHlwZSA9IG51bGwKICAgIGxldCBoaWRlSXRlbSA9IG51bGwKICAgIGxldCAkdHdlZXQgPSAkaXRlbS5xdWVyeVNlbGVjdG9yKFNlbGVjdG9ycy5UV0VFVCkKCiAgICBpZiAoJHR3ZWV0ICE9IG51bGwpIHsKICAgICAgdGltZWxpbmVJdGVtVHlwZSA9IGdldFR3ZWV0VHlwZSgkdHdlZXQpCiAgICAgIGlmIChwYWdlID09IExBVEVTVF9UV0VFVFMgfHwgcGFnZSA9PSBUSU1FTElORV9SRVRXRUVUUyB8fCBwYWdlID09IEhPTUUpIHsKICAgICAgICBoaWRlSXRlbSA9IHNob3VsZEhpZGVUd2VldCh0aW1lbGluZUl0ZW1UeXBlLCBwYWdlKQogICAgICB9CiAgICB9CgogICAgaWYgKHRpbWVsaW5lSXRlbVR5cGUgPT0gbnVsbCAmJiBjb25maWcuaGlkZVdob1RvRm9sbG93RXRjKSB7CiAgICAgIC8vICJXaG8gdG8gZm9sbG93IiwgIkZvbGxvdyBzb21lIFRvcGljcyIgZXRjLiBoZWFkaW5ncwogICAgICBpZiAoJGl0ZW0ucXVlcnlTZWxlY3RvcihTZWxlY3RvcnMuVElNRUxJTkVfSEVBRElORykpIHsKICAgICAgICB0aW1lbGluZUl0ZW1UeXBlID0gJ0hFQURJTkcnCiAgICAgICAgaGlkZUl0ZW0gPSB0cnVlCiAgICAgICAgLy8gQWxzbyBoaWRlIHRoZSBkaXZpZGVyIGFib3ZlIHRoZSBoZWFkaW5nCiAgICAgICAgaWYgKCRwcmV2aW91c0l0ZW0gJiYgJHByZXZpb3VzSXRlbS5pbm5lclRleHQgPT0gJycpIHsKICAgICAgICAgIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovICgkcHJldmlvdXNJdGVtLmZpcnN0RWxlbWVudENoaWxkKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnCiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKHRpbWVsaW5lSXRlbVR5cGUgPT0gbnVsbCkgewogICAgICAvLyBBc3N1bWUgYSBub24taWRlbnRpZmllZCBpdGVtIGZvbGxvd2luZyBhbiBpZGVudGlmaWVkIGl0ZW0gaXMgcmVsYXRlZCB0byBpdAogICAgICAvLyAiV2hvIHRvIGZvbGxvdyIgdXNlcnMgYW5kICJGb2xsb3cgc29tZSBUb3BpY3MiIHRvcGljcyBhcHBlYXIgaW4gc3Vic2VxdWVudCBpdGVtcwogICAgICAvLyAiU2hvdyB0aGlzIHRocmVhZCIgYW5kICJTaG93IG1vcmUiIGxpbmtzIGFwcGVhciBpbiBzdWJzZXF1ZW50IGl0ZW1zCiAgICAgIGlmIChwcmV2aW91c1RpbWVsaW5lSXRlbVR5cGUgIT0gbnVsbCkgewogICAgICAgIGhpZGVJdGVtID0gcHJldmlvdXNUaW1lbGluZUl0ZW1UeXBlID09ICdIRUFESU5HJyB8fCBzaG91bGRIaWRlVHdlZXQocHJldmlvdXNUaW1lbGluZUl0ZW1UeXBlLCBwYWdlKQogICAgICB9CiAgICAgIC8vIFRoZSBmaXJzdCBpdGVtIGluIHRoZSB0aW1lbGluZSBpcyBzb21ldGltZXMgYW4gZW1wdHkgcGxhY2Vob2xkZXIgPGRpdj4KICAgICAgZWxzZSBpZiAoJGl0ZW0gIT09ICR0aW1lbGluZS5maXJzdEVsZW1lbnRDaGlsZCkgewogICAgICAgIC8vIFdlJ3JlIHByb2JhYmx5IGFsc28gbWlzc2luZyBzb21lIHNwYWNlciAvIGRpdmlkZXIgbm9kZXMKICAgICAgICBsb2coJ3VuaGFuZGxlZCB0aW1lbGluZSBpdGVtJywgJGl0ZW0pCiAgICAgIH0KICAgIH0KCiAgICBpZiAoaGlkZUl0ZW0gIT09IHRydWUgJiYKICAgICAgICBjb25maWcudmVyaWZpZWRBY2NvdW50cyA9PT0gJ2hpZGUnICYmCiAgICAgICAgJGl0ZW0ucXVlcnlTZWxlY3RvcihTZWxlY3RvcnMuVkVSSUZJRURfVElDSykpIHsKICAgICAgaGlkZUl0ZW0gPSB0cnVlCiAgICB9CgogICAgaWYgKGhpZGVJdGVtICE9IG51bGwpIHsKICAgICAgLyoqIEB0eXBlIHtIVE1MRWxlbWVudH0gKi8gKCRpdGVtLmZpcnN0RWxlbWVudENoaWxkKS5zdHlsZS5kaXNwbGF5ID0gaGlkZUl0ZW0gPyAnbm9uZScgOiAnJwogICAgICAvLyBMb2cgdGhlc2Ugb3V0IGFzIHRoZXkgY2FuJ3QgYmUgcmVsaWFibHkgdHJpZ2dlcmVkIGZvciB0ZXN0aW5nCiAgICAgIGlmICh0aW1lbGluZUl0ZW1UeXBlID09ICdIRUFESU5HJyB8fCBwcmV2aW91c1RpbWVsaW5lSXRlbVR5cGUgPT0gJ0hFQURJTkcnKSB7CiAgICAgICAgbG9nKGBoaWQgYSAke3ByZXZpb3VzVGltZWxpbmVJdGVtVHlwZSA9PSAnSEVBRElORycgPyAncG9zdC0nIDogJyd9aGVhZGluZyBpdGVtYCwgJGl0ZW0pCiAgICAgIH0KICAgIH0KCiAgICBpZiAoaGlkZUl0ZW0gIT09IHRydWUgJiYKICAgICAgICBjb25maWcudmVyaWZpZWRBY2NvdW50cyA9PT0gJ2hpZ2hsaWdodCcgJiYKICAgICAgICAkaXRlbS5xdWVyeVNlbGVjdG9yKFNlbGVjdG9ycy5WRVJJRklFRF9USUNLKSkgewogICAgICAkaXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAncmdiYSgyOSwgMTYxLCAyNDIsIDAuMjUpJwogICAgfQoKICAgICRwcmV2aW91c0l0ZW0gPSAkaXRlbQogICAgLy8gSWYgd2UgaGlkIGEgaGVhZGluZywga2VlcCBoaWRpbmcgZXZlcnl0aGluZyBhZnRlciBpdCB1bnRpbCB3ZSBoaXQgYSB0d2VldAogICAgaWYgKCEocHJldmlvdXNUaW1lbGluZUl0ZW1UeXBlID09ICdIRUFESU5HJyAmJiB0aW1lbGluZUl0ZW1UeXBlID09IG51bGwpKSB7CiAgICAgIHByZXZpb3VzVGltZWxpbmVJdGVtVHlwZSA9IHRpbWVsaW5lSXRlbVR5cGUKICAgIH0KICB9Cn0KCmZ1bmN0aW9uIG9uVGl0bGVDaGFuZ2UodGl0bGUpIHsKICAvLyBJZ25vcmUgYW55IGxlYWRpbmcgbm90aWZpY2F0aW9uIGNvdW50cyBpbiB0aXRsZXMsIGUuZy4gJygxKSBMYXRlc3QgVHdlZXRzIC8gVHdpdHRlcicKICBsZXQgbm90aWZpY2F0aW9uQ291bnQgPSAnJwogIGlmIChUSVRMRV9OT1RJRklDQVRJT05fUkUudGVzdCh0aXRsZSkpIHsKICAgIG5vdGlmaWNhdGlvbkNvdW50ID0gVElUTEVfTk9USUZJQ0FUSU9OX1JFLmV4ZWModGl0bGUpWzBdCiAgICB0aXRsZSA9IHRpdGxlLnJlcGxhY2UoVElUTEVfTk9USUZJQ0FUSU9OX1JFLCAnJykKICB9CgogIGxldCBob21lTGlua1dhc0NsaWNrZWQgPSBob21lTGlua0NsaWNrZWQKICBob21lTGlua0NsaWNrZWQgPSBmYWxzZQoKICAvLyBJZ25vcmUgRmxhc2ggb2YgVW5pbml0aWFsaXNlZCBUaXRsZSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBzY3JlZW4gZm9yIHRoZQogIC8vIGZpcnN0IHRpbWUuCiAgaWYgKHRpdGxlID09ICdUd2l0dGVyJykgewogICAgbG9nKCdpZ25vcmluZyBGbGFzaCBvZiBVbmluaXRpYWxpc2VkIFRpdGxlJykKICAgIHJldHVybgogIH0KCiAgLy8gT25seSBhbGxvdyB0aGUgc2FtZSBwYWdlIHRvIHJlLXByb2Nlc3MgaWYgdGhlICJDdXN0b21pemUgeW91ciB2aWV3IiBkaWFsb2cKICAvLyBpcyBjdXJyZW50bHkgb3Blbi4KICBsZXQgbmV3UGFnZSA9IHRpdGxlLnNwbGl0KCcgLyAnKVswXQogIGlmIChuZXdQYWdlID09IGN1cnJlbnRQYWdlICYmIGxvY2F0aW9uLnBhdGhuYW1lICE9ICcvaS9kaXNwbGF5JykgewogICAgbG9nKCdpZ25vcmluZyBkdXBsaWNhdGUgdGl0bGUgY2hhbmdlJykKICAgIGN1cnJlbnROb3RpZmljYXRpb25Db3VudCA9IG5vdGlmaWNhdGlvbkNvdW50CiAgICByZXR1cm4KICB9CgogIC8vIFN0YXkgb24gdGhlIFJldHdlZXRzIHRpbWVsaW5lIHdoZW7igKYKICBpZiAoY3VycmVudFBhZ2UgPT0gVElNRUxJTkVfUkVUV0VFVFMgJiYKICAgICAgLy8g4oCmdGhlIHRpdGxlIGhhcyBjaGFuZ2VkIGJhY2sgdG8gdGhlIG1haW4gdGltZWxpbmXigKYKICAgICAgKG5ld1BhZ2UgPT0gTEFURVNUX1RXRUVUUyB8fCBuZXdQYWdlID09IEhPTUUpICYmCiAgICAgIC8vIOKApnRoZSBIb21lIG5hdiBvciBMYXRlc3QgVHdlZXRzIC8gSG9tZSBoZWFkZXIgX3dhc24ndF8gY2xpY2tlZCBhbmTigKYKICAgICAgIWhvbWVMaW5rV2FzQ2xpY2tlZCAmJgogICAgICAoCiAgICAgICAgLy8g4oCmdGhlIHVzZXIgdmlld2VkIGEgcGhvdG8uCiAgICAgICAgVVJMX1BIT1RPX1JFLnRlc3QobG9jYXRpb24ucGF0aG5hbWUpIHx8CiAgICAgICAgLy8g4oCmdGhlIHVzZXIgc3RvcHBlZCB2aWV3aW5nIGEgcGhvdG8uCiAgICAgICAgVVJMX1BIT1RPX1JFLnRlc3QoY3VycmVudFBhdGgpIHx8CiAgICAgICAgLy8g4oCmdGhlIHVzZXIgb3BlbmVkIG9yIHVzZWQgdGhlICJDdXN0b21pemUgeW91ciB2aWV3IiBkaWFsb2cuCiAgICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPT0gJy9pL2Rpc3BsYXknIHx8CiAgICAgICAgLy8g4oCmdGhlIHVzZXIgY2xvc2VkIHRoZSAiQ3VzdG9taXplIHlvdXIgdmlldyIgZGlhbG9nLgogICAgICAgIGN1cnJlbnRQYXRoID09ICcvaS9kaXNwbGF5JyB8fAogICAgICAgIC8vIOKApnRoZSB1c2VyIG9wZW5lZCB0aGUgIlNlbmQgdmlhIERpcmVjdCBNZXNzYWdlIiBkaWFsb2cuCiAgICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPT0gJy9tZXNzYWdlcy9jb21wb3NlJyB8fAogICAgICAgIC8vIOKApnRoZSB1c2VyIGNsb3NlZCB0aGUgIlNlbmQgdmlhIERpcmVjdCBNZXNzYWdlIiBkaWFsb2cuCiAgICAgICAgY3VycmVudFBhdGggPT0gJy9tZXNzYWdlcy9jb21wb3NlJyB8fAogICAgICAgIC8vIOKApnRoZSB1c2VyIG9wZW5lZCB0aGUgY29tcG9zZSBUd2VldCBkaWFsb2cuCiAgICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPT0gJy9jb21wb3NlL3R3ZWV0JyB8fAogICAgICAgIC8vIOKApnRoZSB1c2VyIGNsb3NlZCB0aGUgY29tcG9zZSBUd2VldCBkaWFsb2cuCiAgICAgICAgY3VycmVudFBhdGggPT0gJy9jb21wb3NlL3R3ZWV0JyB8fAogICAgICAgIC8vIOKApnRoZSBub3RpZmljYXRpb24gY291bnQgaW4gdGhlIHRpdGxlIGNoYW5nZWQuCiAgICAgICAgbm90aWZpY2F0aW9uQ291bnQgIT0gY3VycmVudE5vdGlmaWNhdGlvbkNvdW50CiAgICAgICkpIHsKICAgIGxvZygnaWdub3JpbmcgdGl0bGUgY2hhbmdlIG9uIFJldHdlZXRzIHRpbWVsaW5lJykKICAgIGN1cnJlbnROb3RpZmljYXRpb25Db3VudCA9IG5vdGlmaWNhdGlvbkNvdW50CiAgICBjdXJyZW50UGF0aCA9IGxvY2F0aW9uLnBhdGhuYW1lCiAgICBzZXRUaXRsZShUSU1FTElORV9SRVRXRUVUUykKICAgIHJldHVybgogIH0KCiAgLy8gQXNzdW1wdGlvbjogYWxsIG5vbi1GT1VULCBub24tZHVwbGljYXRlIHRpdGxlIGNoYW5nZXMgYXJlIG5hdmlnYXRpb24sIHdoaWNoCiAgLy8gbmVlZCB0aGUgc2NyZWVuIHRvIGJlIHJlLXByb2Nlc3NlZC4KCiAgaWYgKHBhZ2VPYnNlcnZlcnMubGVuZ3RoID4gMCkgewogICAgbG9nKGBkaXNjb25uZWN0aW5nICR7cGFnZU9ic2VydmVycy5sZW5ndGh9IHBhZ2Ugb2JzZXJ2ZXIke3MocGFnZU9ic2VydmVycy5sZW5ndGgpfWApCiAgICBwYWdlT2JzZXJ2ZXJzLmZvckVhY2gob2JzZXJ2ZXIgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpKQogICAgcGFnZU9ic2VydmVycyA9IFtdCiAgfQoKICBjdXJyZW50UGFnZSA9IG5ld1BhZ2UKICBjdXJyZW50Tm90aWZpY2F0aW9uQ291bnQgPSBub3RpZmljYXRpb25Db3VudAogIGN1cnJlbnRQYXRoID0gbG9jYXRpb24ucGF0aG5hbWUKCiAgbG9nKCdwcm9jZXNzaW5nIG5ldyBwYWdlJykKCiAgaWYgKGNvbmZpZy5hbHdheXNVc2VMYXRlc3RUd2VldHMgJiYgY3VycmVudFBhZ2UgPT0gSE9NRSkgewogICAgcmV0dXJuIHN3aXRjaFRvTGF0ZXN0VHdlZXRzKGN1cnJlbnRQYWdlKQogIH0KCiAgaWYgKGNvbmZpZy5yZXR3ZWV0cyA9PSAnc2VwYXJhdGUnKSB7CiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ0hvbWUnLCBjdXJyZW50UGFnZSA9PSBIT01FKQogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdMYXRlc3RUd2VldHMnLCBjdXJyZW50UGFnZSA9PSBMQVRFU1RfVFdFRVRTKQogICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdUaW1lbGluZVJldHdlZXRzJywgY3VycmVudFBhZ2UgPT0gVElNRUxJTkVfUkVUV0VFVFMpCiAgICB1cGRhdGVUaGVtZUNvbG9yKCkKICB9CgogIGlmIChjb25maWcucmV0d2VldHMgPT0gJ3NlcGFyYXRlJyAmJiAoY3VycmVudFBhZ2UgPT0gTEFURVNUX1RXRUVUUyB8fCBjdXJyZW50UGFnZSA9PSBUSU1FTElORV9SRVRXRUVUUyB8fCBjdXJyZW50UGFnZSA9PSBIT01FKSkgewogICAgYWRkUmV0d2VldHNIZWFkZXIoY3VycmVudFBhZ2UpCiAgfQoKICBpZiAoKGNvbmZpZy5yZXR3ZWV0cyAhPSAnaWdub3JlJyB8fCBjb25maWcudmVyaWZpZWRBY2NvdW50cyAhPSAnaWdub3JlJyB8fCBjb25maWcuaGlkZVdob1RvRm9sbG93RXRjKSAmJiAoY3VycmVudFBhZ2UgPT0gTEFURVNUX1RXRUVUUyB8fCBjdXJyZW50UGFnZSA9PSBUSU1FTElORV9SRVRXRUVUUyB8fCBjdXJyZW50UGFnZSA9PSBIT01FKSB8fAogICAgICAoY29uZmlnLnZlcmlmaWVkQWNjb3VudHMgIT0gJ2lnbm9yZScgfHwgY29uZmlnLmhpZGVXaG9Ub0ZvbGxvd0V0YykgJiYgUFJPRklMRV9USVRMRV9SRS50ZXN0KGN1cnJlbnRQYWdlKSkgewogICAgb2JzZXJ2ZVRpbWVsaW5lKGN1cnJlbnRQYWdlKQogIH0KCiAgaWYgKGNvbmZpZy5oaWRlU2lkZWJhckNvbnRlbnQgJiYgY3VycmVudFBhZ2UgIT0gTUVTU0FHRVMpIHsKICAgIGhpZGVTaWRlYmFyQ29udGVudHMoY3VycmVudFBhZ2UpCiAgICBvYnNlcnZlU2lkZWJhckFwcGVhcmFuY2UoY3VycmVudFBhZ2UpCiAgfQoKICBpZiAoY29uZmlnLmhpZGVNb3JlVHdlZXRzICYmIFVSTF9UV0VFVF9JRF9SRS50ZXN0KGN1cnJlbnRQYXRoKSAmJiBsb2NhdGlvbi5zZWFyY2guc3RhcnRzV2l0aCgnP3JlZl9zcmMnKSkgewogICAgaGlkZU1vcmVUd2VldHNTZWN0aW9uKGN1cnJlbnRQYXRoKQogIH0KfQoKLyoqCiAqIEF1dG9tYXRpY2FsbHkgY2xpY2sgdGhlICJTaG93IHRoaXMgdGhyZWFkIiBsaW5rIHRvIGdldCByaWQgb2YgdGhlICJNb3JlIFR3ZWV0cyIgc2VjdGlvbiBpZiB0aGUKICogdXNlciBpcyB2aWV3aW5nIGEgdHdlZXQgZnJvbSBhbiBleHRlcm5hbCBsaW5rIHdpdGggYSA/cmVmX3NyYz0gVVJMLgogKi8KYXN5bmMgZnVuY3Rpb24gaGlkZU1vcmVUd2VldHNTZWN0aW9uKHBhdGgpIHsKICBsZXQgaWQgPSBVUkxfVFdFRVRfSURfUkUuZXhlYyhwYXRoKVsxXQogIGxldCAkbGluayA9IGF3YWl0IGdldEVsZW1lbnQoYGFbaHJlZiQ9Ii9zdGF0dXMvJHtpZH0iXWAsIHsKICAgIG5hbWU6ICciU2hvdyB0aGlzIHRocmVhZCIgbGluaycsCiAgICBzdG9wSWY6IHBhdGhJc05vdChwYXRoKSwKICB9KQogIGlmICgkbGluayAhPSBudWxsKSB7CiAgICBsb2coJ2NsaWNraW5nICJTaG93IHRoaXMgdGhyZWFkIiBsaW5rJykKICAgICRsaW5rLmNsaWNrKCkKICB9Cn0KCi8qKgogKiBTZXRzIHRoZSBwYWdlIG5hbWUgaW4gPHRpdGxlPiwgcmV0YWluaW5nIGFueSBjdXJyZW50IG5vdGlmaWNhdGlvbiBjb3VudC4KICogQHBhcmFtIHtzdHJpbmd9IHBhZ2UKICovCmZ1bmN0aW9uIHNldFRpdGxlKHBhZ2UpIHsKICBkb2N1bWVudC50aXRsZSA9IGAke2N1cnJlbnROb3RpZmljYXRpb25Db3VudH0ke3BhZ2V9IC8gVHdpdHRlcmAKfQoKZnVuY3Rpb24gc2hvdWxkSGlkZVR3ZWV0KHR3ZWV0VHlwZSwgcGFnZSkgewogIGlmICh0d2VldFR5cGUgPT0gJ1JFVFdFRVQnICYmIGNvbmZpZy5yZXR3ZWV0cyA9PSAnaWdub3JlJykgewogICAgcmV0dXJuIGZhbHNlCiAgfQogIHJldHVybiB0d2VldFR5cGUgIT0gKHBhZ2UgPT0gVElNRUxJTkVfUkVUV0VFVFMgPyAnUkVUV0VFVCcgOiAnVFdFRVQnKQp9Cgphc3luYyBmdW5jdGlvbiBzd2l0Y2hUb0xhdGVzdFR3ZWV0cyhwYWdlKSB7CiAgbGV0ICRzd2l0Y2hCdXR0b24gPSBhd2FpdCBnZXRFbGVtZW50KCdkaXZbYXJpYS1sYWJlbD0iVG9wIFR3ZWV0cyBvbiJdJywgewogICAgbmFtZTogJ3RpbWVsaW5lIHN3aXRjaCBidXR0b24nLAogICAgc3RvcElmOiBwYWdlSXNOb3QocGFnZSksCiAgfSkKCiAgaWYgKCRzd2l0Y2hCdXR0b24gPT0gbnVsbCkgewogICAgcmV0dXJuIGZhbHNlCiAgfQoKICAkc3dpdGNoQnV0dG9uLmNsaWNrKCkKCiAgbGV0ICRzZWVMYXRlc3RUd2VldHNJbnN0ZWFkID0gYXdhaXQgZ2V0RWxlbWVudCgnZGl2W3JvbGU9Im1lbnUiXSBkaXZbcm9sZT0ibWVudWl0ZW0iXScsIHsKICAgIG5hbWU6ICciU2VlIGxhdGVzdCBUd2VldHMgaW5zdGVhZCIgbWVudSBpdGVtJywKICAgIHN0b3BJZjogcGFnZUlzTm90KHBhZ2UpLAogIH0pCgogIGlmICgkc2VlTGF0ZXN0VHdlZXRzSW5zdGVhZCA9PSBudWxsKSB7CiAgICByZXR1cm4gZmFsc2UKICB9CgogIC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovICgkc2VlTGF0ZXN0VHdlZXRzSW5zdGVhZC5jbG9zZXN0KCdkaXZbdGFiaW5kZXg9IjAiXScpKS5jbGljaygpCiAgcmV0dXJuIHRydWUKfQoKbGV0IHVwZGF0ZVRoZW1lQ29sb3IgPSAoZnVuY3Rpb24oKSB7CiAgbGV0ICRzdHlsZSA9IGFkZFN0eWxlKCcnKQogIGxldCBsYXN0VGhlbWVDb2xvciA9IG51bGwKCiAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVRoZW1lQ29sb3IoKSB7CiAgICAvLyBPbmx5IHRyeSB0byB1cGRhdGUgaWYgdGhlICJDdXN0b21pemUgeW91ciB2aWV3IiBkaWFsb2cgaXMgb3BlbiBvciB3ZQogICAgLy8gaGF2ZW4ndCBzZXQgYW4gaW5pdGFsIGNvbG9yIHlldC4KICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gJy9pL2Rpc3BsYXknICYmIGxhc3RUaGVtZUNvbG9yICE9IG51bGwpIHsKICAgICAgcmV0dXJuCiAgICB9CgogICAgbGV0ICR0d2VldEJ1dHRvbiA9IGF3YWl0IGdldEVsZW1lbnQoJ2FbZGF0YS10ZXN0aWQ9IlNpZGVOYXZfTmV3VHdlZXRfQnV0dG9uIl0nLCB7CiAgICAgIG5hbWU6ICdUd2VldCBidXR0b24nCiAgICB9KQoKICAgIGxldCB0aGVtZUNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZSgkdHdlZXRCdXR0b24pLmJhY2tncm91bmRDb2xvcgogICAgaWYgKHRoZW1lQ29sb3IgPT09IGxhc3RUaGVtZUNvbG9yKSB7CiAgICAgIHJldHVybgogICAgfQogICAgbG9nKGBzZXR0aW5nIHRoZW1lIGNvbG9yIHRvICR7dGhlbWVDb2xvcn1gKQogICAgbGFzdFRoZW1lQ29sb3IgPSB0aGVtZUNvbG9yCiAgICAkc3R5bGUudGV4dENvbnRlbnQgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdib2R5LkhvbWUgbWFpbiBoMjpub3QoI3R3dF9yZXR3ZWV0cyknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9keS5MYXRlc3RUd2VldHMgbWFpbiBoMjpub3QoI3R3dF9yZXR3ZWV0cyknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9keS5UaW1lbGluZVJldHdlZXRzICN0d3RfcmV0d2VldHMnLAogICAgICAgICAgICAgICAgICAgICAgICAgXS5qb2luKCcsICcpICsgYCB7IGNvbG9yOiAke2xhc3RUaGVtZUNvbG9yfTsgfWAKICB9Cn0pKCkKLy8jZW5kcmVnaW9uCgovLyNyZWdpb24gTWFpbgpmdW5jdGlvbiBtYWluKCkgewogIGxvZygnY29uZmlnJywgY29uZmlnKQoKICBhZGRTdGF0aWNDc3MoKQoKICBpZiAoY29uZmlnLmZhc3RCbG9jaykgewogICAgb2JzZXJ2ZVBvcHVwcygpCiAgfQoKICBpZiAoY29uZmlnLm5hdkJhc2VGb250U2l6ZSkgewogICAgb2JzZXJ2ZUh0bWxGb250U2l6ZSgpCiAgfQoKICBpZiAoY29uZmlnLmhpZGVNb3JlVHdlZXRzIHx8CiAgICAgIGNvbmZpZy5oaWRlU2lkZWJhckNvbnRlbnQgfHwKICAgICAgY29uZmlnLmhpZGVXaG9Ub0ZvbGxvd0V0YyB8fAogICAgICBjb25maWcucmV0d2VldHMgIT0gJ2lnbm9yZScgfHwKICAgICAgY29uZmlnLnZlcmlmaWVkQWNjb3VudHMgIT0gJ2lnbm9yZScpIHsKICAgIG9ic2VydmVUaXRsZSgpCiAgfQp9CgppZiAodHlwZW9mIGNocm9tZSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY2hyb21lLnN0b3JhZ2UgIT0gJ3VuZGVmaW5lZCcpIHsKICBjaHJvbWUuc3RvcmFnZS5sb2NhbC5nZXQoKHN0b3JlZENvbmZpZykgPT4gewogICAgT2JqZWN0LmFzc2lnbihjb25maWcsIHN0b3JlZENvbmZpZykKICAgIG1haW4oKQogIH0pCn0KZWxzZSB7CiAgbWFpbigpCn0KLy8jZW5kcmVnaW9uCg=="},{"name":"SankakuAddon","options":{"check_for_updates":true,"compat_foreach":false,"compat_metadata":false,"compat_prototypes":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://chan.sankakucomplex.com/*","https://idol.sankakucomplex.com/*","https://legacy.sankakucomplex.com/*"],"orig_noframes":true,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1607794040343,"data":{}},"enabled":true,"position":31,"file_url":"https://sleazyfork.org/scripts/23597-sankakuaddon/code/SankakuAddon.user.js","uuid":"0fa3b467-e989-4145-b0b0-4dded142818f","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgIFNhbmtha3VBZGRvbgovLyBAbmFtZXNwYWNlICAgU2Fua2FrdUFkZG9uCi8vIEBkZXNjcmlwdGlvbiBBZGRzIGEgZmV3IHF1YWxpdHkgb2YgbGlmZSBpbXByb3ZlbWVudHMgb24gU2Fua2FrdSBDaGFubmVsOiBBdXRvbWF0aWMgaW1hZ2Ugc2NhbGluZywgc2Nyb2xsaW5nIHRvIGltYWdlLCB0aHVtYm5haWwgaWNvbnMgZm9yIGxvdWQvYW5pbWF0ZWQgcG9zdHMsIG11dGluZy9wYXVzaW5nIHZpZGVvcywgKyAtIHRhZyBzZWFyY2ggYnV0dG9ucywgYSB0YWcgbWVudSB3aGljaCBhbGxvd3MgZm9yIHRhZ2dpbmcgYnkgY2xpY2tpbmcsICdDaG9vc2UvU2V0IFBhcmVudCcgbW9kZXMsIGVhc2llciBkdXBsaWNhdGUgdGFnZ2luZy9mbGFnZ2luZy4gRnVsbHkgY29uZmlndXJhYmxlIHRocm91Z2ggdGhlIEFkZG9uIGNvbmZpZy4KLy8gQGF1dGhvciAgICAgIHNhbmNoYW4KLy8gQHZlcnNpb24gICAgIDAuOTkuNzYKLy8gQGljb24gICAgICAgIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUNBWUFBQUFmOC85aEFBQUJibWxEUTFCcFkyTUFBQ2lSZFpIUEt3UmhHTWMvZG9sWWJlSWdPZXdCT2V5V0tEbHFGWmZsc0ZaWlhHWm1aM2ZWenBobVpwTmNsWXVEY2hBWHZ3NytBNjdLbFZLS2xPVGdML0RySW8zbjNWVXI4VTd2UEorKzcvdDlldC92QzZGVXliQzgrZ0d3Yk45TlR5UmpzOW01V09NVEVUcG9veDAwdzNNbXA4Y3ovRHZlYjZoVDlUcWhldjIvNzgvUmtqTTlBK3FhaEljTngvV0ZSNFZUeTc2amVFTzR3eWhxT2VGOTRiZ3JCeFMrVUxwZTVVZkZoU3EvS25ZejZURUlxWjZ4d2cvV2Y3QlJkQzNoZnVFZXExUTJ2cytqYmhJeDdabHBxVjB5dS9GSU0wR1NHRHBsRmluaGs1QnFTMlovK3dZcXZpbVd4R1BJMzJFRlZ4d0ZpdUtOaTFxV3JxYlV2T2ltZkNWV1ZPNi84L1R5UTRQVjdwRWtORHdFd1Vzdk5HN0I1MllRZkJ3RXdlY2hoTy9oeks3NWx5U25rVGZSTjJ0YXp4NUUxK0RrdkticDIzQzZEcDEzanVacUZTa3NNNVRQdy9NeHRHYWgvUXFhNTZ0WmZhOXpkQXVaVlhtaVM5alpoVDdaSDEzNEFyaGNaK20vV1N0U0FBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFBZUVsRVFWUTR5Mk5nb0NYNFh5YjdINFR4cVdIQ283a2VHNXRvQTRDZ0FRZWJzQUhZYk1UbENpWWliTWZyQ2laaWJjSWx4MFNFMy9HR0JSTStHeGk3SGplQ01ENDFURVNHUEU1WE1PR3pIUnNibnhjSXhic0REQU10czRjYmptUjdBNGtwdlFIa01pWkNLWTFRU21YQlpUS2VkTkJBMVJ3TEFGQ2VOQ1RWaHoyRkFBQUFBRWxGVGtTdVFtQ0MKLy8gQG1hdGNoICAgICAgIGh0dHBzOi8vY2hhbi5zYW5rYWt1Y29tcGxleC5jb20vKgovLyBAbWF0Y2ggICAgICAgaHR0cHM6Ly9pZG9sLnNhbmtha3Vjb21wbGV4LmNvbS8qCi8vIEBtYXRjaCAgICAgICBodHRwczovL2xlZ2FjeS5zYW5rYWt1Y29tcGxleC5jb20vKgovLyBAcnVuLWF0ICAgICAgZG9jdW1lbnQtc3RhcnQKLy8gQG5vZnJhbWVzCi8vIEBncmFudCAgICAgICBHTS5yZWdpc3Rlck1lbnVDb21tYW5kCi8vIEBncmFudCAgICAgICBHTS5hZGRTdHlsZQovLyBAZ3JhbnQgICAgICAgR00ub3BlbkluVGFiCi8vIEBncmFudCAgICAgICBHTS5zZXRWYWx1ZQovLyBAZ3JhbnQgICAgICAgR00uZ2V0VmFsdWUKLy8gQGdyYW50ICAgICAgIEdNLmRlbGV0ZVZhbHVlCi8vIEBncmFudCAgICAgICBHTS5hZGRWYWx1ZUNoYW5nZUxpc3RlbmVyCi8vIEBncmFudCAgICAgICBHTV9hZGRWYWx1ZUNoYW5nZUxpc3RlbmVyCi8vIEBncmFudCAgICAgICBHTS5zZXRDbGlwYm9hcmQKLy8gQGdyYW50ICAgICAgIHVuc2FmZVdpbmRvdwovLyA9PS9Vc2VyU2NyaXB0PT0KCihhc3luYyBmdW5jdGlvbih1bnNhZmVXaW5kb3cpIHsKICAndXNlIHN0cmljdCc7CgogIGNvbnN0IFZFUlNJT04gPSAndjAuOTkuNzYnOwoKICBjb25zdCBTVkdfU0laRSA9IDIwOwogIGNvbnN0IFNQRUFLRVJfU1ZHID0gYDxzdmcgd2lkdGg9IiR7U1ZHX1NJWkV9IiBoZWlnaHQ9IiR7U1ZHX1NJWkV9IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8cmVjdCB4PSIyIiB5PSIyIiB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGwtb3BhY2l0eT0iLjY3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS13aWR0aD0iLjIyNjMxIi8+CiA8ZyBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zMyIgZmlsbC1ydWxlPSJldmVub2RkIj4KICA8cmVjdCB3aWR0aD0iMzIiIGhlaWdodD0iMiIgc3Ryb2tlLXdpZHRoPSIuMDc0OTI3Ii8+CiAgPHJlY3QgeD0iMzAiIHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjI4IiBzdHJva2Utd2lkdGg9Ii4wNzU4MzkiLz4KICA8cmVjdCB5PSIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyOCIgc3Ryb2tlLXdpZHRoPSIuMDc1ODM5Ii8+CiAgPHJlY3QgeT0iMzAiIHdpZHRoPSIzMiIgaGVpZ2h0PSIyIiBzdHJva2Utd2lkdGg9Ii4wNzY5OCIvPgogPC9nPgogPHBhdGggZD0ibTE5IDExYzYgNSAwIDEwIDAgMTAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzFjZDlmZiIgc3Ryb2tlLXdpZHRoPSIyIi8+CiA8cGF0aCBkPSJtMjMgOWM4IDcgMCAxNCAwIDE0IiBmaWxsPSJub25lIiBzdHJva2U9IiMxY2Q5ZmYiIHN0cm9rZS13aWR0aD0iMiIvPgogPHBhdGggZD0ibTE2IDIzaC0zbC0zLTNoLTV2LThoNWwzLTNoMyIgZmlsbD0iI2ZmNzYxYyIvPgo8L3N2Zz5gOwoKICBjb25zdCBBTklNQVRFRF9TVkcgPSBgPHN2ZyB3aWR0aD0iJHtTVkdfU0laRX0iIGhlaWdodD0iJHtTVkdfU0laRX0iIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxyZWN0IHg9IjIiIHk9IjIiIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgZmlsbC1vcGFjaXR5PSIuNjciIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLXdpZHRoPSIuMjI2MzEiLz4KIDxnIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogIDxyZWN0IHdpZHRoPSIzMiIgaGVpZ2h0PSIyIiBzdHJva2Utd2lkdGg9Ii4wNzQ5MjciLz4KICA8cmVjdCB4PSIzMCIgeT0iMiIgd2lkdGg9IjIiIGhlaWdodD0iMjgiIHN0cm9rZS13aWR0aD0iLjA3NTgzOSIvPgogIDxyZWN0IHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjI4IiBzdHJva2Utd2lkdGg9Ii4wNzU4MzkiLz4KICA8cmVjdCB5PSIzMCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjIiIHN0cm9rZS13aWR0aD0iLjA3Njk4Ii8+CiA8L2c+CiA8cGF0aCBkPSJtMTggMTYtMTAgNnYtMTIiIGZpbGw9IiNmZjc2MWMiLz4KIDxwYXRoIGQ9Im0yNiAxNi05IDZ2LTEyIiBmaWxsPSIjZmY3NjFjIi8+Cjwvc3ZnPmA7CgogIGNvbnN0IEVYUExJQ0lUX1NWRyA9IGA8c3ZnIHdpZHRoPSIke1NWR19TSVpFfSIgaGVpZ2h0PSIke1NWR19TSVpFfSIgdmlld0JveD0iMCAwIDMyIDMyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogPGc+CiAgPHJlY3QgeD0iMiIgeT0iMiIgd2lkdGg9IjI4IiBoZWlnaHQ9IjI4IiBmaWxsLW9wYWNpdHk9Ii42NyIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2Utd2lkdGg9Ii4yMjYzMSIvPgogIDxnIGZpbGw9IiNmZmYiIGZpbGwtb3BhY2l0eT0iLjMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICA8cmVjdCB4PSItNi4wOTU2ZS04IiB5PSItMS4zNTEyZS05IiB3aWR0aD0iMzIiIGhlaWdodD0iMiIgc3Ryb2tlLXdpZHRoPSIuMDc0OTI3Ii8+CiAgIDxyZWN0IHg9IjMwIiB5PSIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyOCIgc3Ryb2tlLXdpZHRoPSIuMDc1ODM5Ii8+CiAgIDxyZWN0IHg9Ii02LjA5NTZlLTgiIHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjI4IiBzdHJva2Utd2lkdGg9Ii4wNzU4MzkiLz4KICAgPHJlY3QgeD0iLTYuMDk1NmUtOCIgeT0iMzAiIHdpZHRoPSIzMiIgaGVpZ2h0PSIyIiBzdHJva2Utd2lkdGg9Ii4wNzY5OCIvPgogIDwvZz4KICA8ZyB0cmFuc2Zvcm09InNjYWxlKC45OTUzIDEuMDA0NykiIGZpbGw9IiNmOTkiIGFyaWEtbGFiZWw9IlMiPgogICA8cmVjdCB4PSIxMi4wNTciIHk9IjUuOTcxOCIgd2lkdGg9IjExLjA1MiIgaGVpZ2h0PSIyLjk4NTkiIHN0cm9rZS13aWR0aD0iMS4wODU2Ii8+CiAgIDxyZWN0IHg9IjEyLjA1NyIgeT0iMjIuODkyIiB3aWR0aD0iMTEuMDUyIiBoZWlnaHQ9IjIuOTg1OSIgc3Ryb2tlLXdpZHRoPSIxLjA4NTYiLz4KICAgPHJlY3QgeD0iMTIuMDU3IiB5PSIxNC40MzIiIHdpZHRoPSI5LjA0MjUiIGhlaWdodD0iMi45ODU5IiBzdHJva2Utd2lkdGg9Ii45ODE5OCIvPgogICA8cmVjdCB4PSI5LjA0MjUiIHk9IjUuOTcxOCIgd2lkdGg9IjMuMDE0MiIgaGVpZ2h0PSIxOS45MDYiIHN0cm9rZS13aWR0aD0iMS4wNTQxIi8+CiAgPC9nPgogPC9nPgo8L3N2Zz5gOwoKICBjb25zdCBRVUVTVElPTkFCTEVfU1ZHID0gYDxzdmcgd2lkdGg9IiR7U1ZHX1NJWkV9IiBoZWlnaHQ9IiR7U1ZHX1NJWkV9IiB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiA8Zz4KICA8cmVjdCB4PSIyIiB5PSIyIiB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIGZpbGwtb3BhY2l0eT0iLjY3IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS13aWR0aD0iLjIyNjMxIi8+CiAgPGcgZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIuMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgIDxyZWN0IHg9Ii02LjA5NTZlLTgiIHk9Ii0xLjM1MTJlLTkiIHdpZHRoPSIzMiIgaGVpZ2h0PSIyIiBzdHJva2Utd2lkdGg9Ii4wNzQ5MjciLz4KICAgPHJlY3QgeD0iMzAiIHk9IjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjI4IiBzdHJva2Utd2lkdGg9Ii4wNzU4MzkiLz4KICAgPHJlY3QgeD0iLTYuMDk1NmUtOCIgeT0iMiIgd2lkdGg9IjIiIGhlaWdodD0iMjgiIHN0cm9rZS13aWR0aD0iLjA3NTgzOSIvPgogICA8cmVjdCB4PSItNi4wOTU2ZS04IiB5PSIzMCIgd2lkdGg9IjMyIiBoZWlnaHQ9IjIiIHN0cm9rZS13aWR0aD0iLjA3Njk4Ii8+CiAgPC9nPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDYuOTU1MSA1LjA3MDQpIiBmaWxsPSIjOTk5IiBhcmlhLWxhYmVsPSJTIj4KICAgPHBhdGggZD0ibTExLjU0NSAxNC45MyA1IDQtMiAyLTUtNCIgZmlsbD0iIzk5OSIvPgogIDwvZz4KICA8dGV4dCB4PSItMTMiIHk9IjQiIGZvbnQtZmFtaWx5PSInQW5kaWthIE5ldyBCYXNpYyciIGZvbnQtc2l6ZT0iNDBweCIgc3R5bGU9ImxpbmUtaGVpZ2h0OjEuMjUiIHhtbDpzcGFjZT0icHJlc2VydmUiPjx0c3BhbiB4PSItMTMiIHk9IjQiLz48L3RleHQ+CiAgPHBhdGggZD0ibTE2IDYuNWE3IDkuNSAwIDAgMC03IDkuNSA3IDkuNSAwIDAgMCA3IDkuNSA3IDkuNSAwIDAgMCA3LTkuNSA3IDkuNSAwIDAgMC03LTkuNXptMCAxLjVhNSA4IDAgMCAxIDUgOCA1IDggMCAwIDEtNSA4IDUgOCAwIDAgMS01LTggNSA4IDAgMCAxIDUtOHoiIGZpbGw9IiM5OTkiLz4KIDwvZz4KPC9zdmc+YDsKCiAgY29uc3QgU0FGRV9TVkcgPSBgPHN2ZyB3aWR0aD0iJHtTVkdfU0laRX0iIGhlaWdodD0iJHtTVkdfU0laRX0iIHZpZXdCb3g9IjAgMCAzMiAzMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KIDxnPgogIDxyZWN0IHg9IjIiIHk9IjIiIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgZmlsbC1vcGFjaXR5PSIuNjciIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLXdpZHRoPSIuMjI2MzEiLz4KICA8ZyBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii4zMyIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgPHJlY3QgeD0iLTYuMDk1NmUtOCIgeT0iLTEuMzUxMmUtOSIgd2lkdGg9IjMyIiBoZWlnaHQ9IjIiIHN0cm9rZS13aWR0aD0iLjA3NDkyNyIvPgogICA8cmVjdCB4PSIzMCIgeT0iMiIgd2lkdGg9IjIiIGhlaWdodD0iMjgiIHN0cm9rZS13aWR0aD0iLjA3NTgzOSIvPgogICA8cmVjdCB4PSItNi4wOTU2ZS04IiB5PSIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyOCIgc3Ryb2tlLXdpZHRoPSIuMDc1ODM5Ii8+CiAgIDxyZWN0IHg9Ii02LjA5NTZlLTgiIHk9IjMwIiB3aWR0aD0iMzIiIGhlaWdodD0iMiIgc3Ryb2tlLXdpZHRoPSIuMDc2OTgiLz4KICA8L2c+CiAgPGcgdHJhbnNmb3JtPSJzY2FsZSguOTk1MyAxLjAwNDcpIiBmaWxsPSIjOWY5IiBhcmlhLWxhYmVsPSJTIj4KICAgPHBhdGggZD0ibTIxLjU4NiA5LjcyODlxLTAuNzgzMDYtMC4zOTU0OC0xLjQ1MDEtMC42NTkxNC0wLjY1MjU1LTAuMjc2ODQtMS4yNzYxLTAuNDQ4MjItMC42MjM1NS0wLjE4NDU2LTEuMjQ3MS0wLjI2MzY2LTAuNjIzNTUtMC4wNzkwOTYtMS4zMTk2LTAuMDc5MDk2LTAuODcwMDYgMC0xLjU5NTEgMC4yMzcyOS0wLjcxMDU1IDAuMjM3MjktMS4yMzI2IDAuNjMyNzctMC41MjIwNCAwLjM5NTQ4LTAuODEyMDYgMC45MDk2MS0wLjI3NTUyIDAuNTE0MTMtMC4yNzU1MiAxLjA1NDYgMCAwLjU0MDUgMC4xNTk1MSAwLjk4ODcxIDAuMTc0MDEgMC40MzUwMyAwLjY4MTU1IDAuODMwNTIgMC41MDc1NCAwLjM4MjMgMS40NTAxIDAuNzY0NiAwLjk0MjU3IDAuMzY5MTIgMi40OTQyIDAuNzc3NzkgMS40MzU2IDAuMzgyMyAyLjUzNzcgMC44OTY0MyAxLjExNjYgMC41MDA5NSAxLjg3MDYgMS4xNjAxdDEuMTQ1NiAxLjUwMjhxMC4zOTE1MyAwLjg0MzcgMC4zOTE1MyAxLjkxMTUgMCAxLjMzMTUtMC41ODAwNCAyLjQyNTYtMC41NjU1NCAxLjA4MS0xLjU2NjEgMS44NzItMC45ODYwNyAwLjc3Nzc5LTIuMzA1NyAxLjIxMjgtMS4zMTk2IDAuNDIxODUtMi43OTg3IDAuNDIxODUtMS4wNDQxIDAtMi4wNDQ3LTAuMTMxODMtMC45ODYwNy0wLjEzMTgzLTEuODcwNi0wLjM2OTEyLTAuODcwMDYtMC4yMzcyOS0xLjYwOTYtMC41NTM2OC0wLjczOTU1LTAuMzI5NTctMS4yOTA2LTAuNzI1MDZsMC42NTI1NS0yLjcwMjVxMS40NTAxIDEuMTQ2OSAyLjk4NzIgMS42NjEgMS41NTE2IDAuNTE0MTMgMy4xNzU3IDAuNTE0MTMgMC44NzAwNiAwIDEuNjgyMS0wLjIyNDExdDEuNDM1Ni0wLjY0NTk2cTAuNjIzNTUtMC40MzUwMyAxLjAwMDYtMS4wNTQ2IDAuMzc3MDMtMC42MzI3OCAwLjM3NzAzLTEuNDM2OSAwLTAuNTE0MTMtMC4xODg1MS0wLjk3NTUzLTAuMTc0MDEtMC40NzQ1OC0wLjcyNTA1LTAuOTIyOC0wLjU1MTA0LTAuNDQ4MjItMS41ODA2LTAuODgzMjUtMS4wMjk2LTAuNDQ4MjItMi43MjYyLTAuOTA5NjEtMS42OTY2LTAuNDYxNC0yLjc2OTctMS4wMTUxLTEuMDczMS0wLjU1MzY4LTEuNjgyMS0xLjE5OTYtMC42MDkwNC0wLjY1OTE0LTAuODQxMDYtMS4zOTc0LTAuMjE3NTItMC43NTE0Mi0wLjIxNzUyLTEuNTk1MSAwLTAuODQzNyAwLjM3NzAzLTEuNzc5NyAwLjM5MTUzLTAuOTM1OTggMS4yMTgxLTEuNzI2OSAwLjgyNjU2LTAuNzkwOTcgMi4xMTcyLTEuMzA1MSAxLjI5MDYtMC41MjczMSAzLjEwMzItMC41MjczMSAwLjg0MTA2IDAgMS41NjYxIDAuMDY1OTE0IDAuNzM5NTYgMC4wNjU5MTQgMS40MjExIDAuMjEwOTIgMC42OTYwNSAwLjE0NTAxIDEuMzYzMSAwLjM2OTEyIDAuNjY3MDUgMC4yMjQxMSAxLjM3NzYgMC41NDA1eiIgZmlsbD0iIzlmOSIvPgogIDwvZz4KIDwvZz4KPC9zdmc+YDsKCiAgY29uc3QgUkFUSU5HX1NWRyA9IHsKICAgIGU6IEVYUExJQ0lUX1NWRywKICAgIHE6IFFVRVNUSU9OQUJMRV9TVkcsCiAgICBzOiBTQUZFX1NWRywKICB9OwoKICAvLyBiYXNlZCBvbiB0aGUgVGFnIENoZWNrbGlzdCBpbiB0aGUgd2lraQogIGNvbnN0IERFRkFVTFRfVEFHTElTVCA9CiAgICBgWwogIHsKICAgICJuYW1lIjogIlBlb3BsZSAmIEdlbmRlciIsCiAgICAidGFncyI6IFsKICAgICAgWwogICAgICAgIFsiZmVtYWxlIGZlbWFsZV9vbmx5IDFnaXJsIDJnaXJscyAzZ2lybHMgNGdpcmxzIDVnaXJscyA2K2dpcmxzIl0sCiAgICAgICAgWyJtYWxlIG1hbGVfb25seSAxYm95IDJib3lzIDNib3lzIDRib3lzIDVib3lzIDYrYm95cyJdLAogICAgICAgIFsiZnV0YW5hcmkgZnV0YW5hcmlfb25seSAxX2Z1dGFuYXJpIDJfZnV0YW5hcmkgM19mdXRhbmFyaSA0X2Z1dGFuYXJpIDVfZnV0YW5hcmkgNitfZnV0YW5hcmkiXSwKICAgICAgICBbIm5ld2hhbGYgbmV3aGFsZl9vbmx5IDFfbmV3aGFsZiAyX25ld2hhbGYgM19uZXdoYWxmIDRfbmV3aGFsZiA1X25ld2hhbGYgNitfbmV3aGFsZiJdCiAgICAgIF0sCiAgICAgICJub19odW1hbnMiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJZb3VuZyBBZ2UiLAogICAgInRhZ3MiOiBbCiAgICAgICJjaGlsZCBsb2xpIHNob3RhIHRvZGRsZXJjb24geW91bmciCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJBbmRyb2d5bm91cyIsCiAgICAidGFncyI6IFsKICAgICAgImFuZHJvZ3lub3VzIGNyb3NzZHJlc3NpbmcgZ2VuZGVyc3dhcCB0cmFwIHJldmVyc2VfdHJhcCIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkdyb3VwIiwKICAgICJ0YWdzIjogWwogICAgICAic29sbyBkdW8gdHJpbyBxdWFydGV0IHF1aW50ZXQgc2V4dGV0IGdyb3VwIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiUmVsYXRpb25zaGlwIiwKICAgICJ0YWdzIjogWwogICAgICAiY291cGxlIHNpYmxpbmdzIHNpc3RlcnMgYnJvdGhlcnMgYnJvdGhlcl9hbmRfc2lzdGVyIHR3aW5zIHRyaXBsZXRzIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiV2hvL090aGVyIiwKICAgICJ0YWdzIjogWwogICAgICAiYW50aHJvcG9tb3JwaGl6YXRpb24gbXVsdGlwbGVfcGVyc29uYSBlbGYgbWVjaGEgbW9uc3RlciBtb25zdGVyX2dpcmwgbWFnaWNhbF9naXJsIGZhaXJ5IgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiRmFjZSIsCiAgICAidGFncyI6IFsKICAgICAgImZhY2UgZWFycyBleWVzIG5vc2UgbGlwcyB0ZWV0aCBmYWNpYWxfbWFyayBmYWNpYWxfaGFpciBiZWFyZCIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIlVwcGVyIEJvZHkiLAogICAgInRhZ3MiOiBbCiAgICAgICJhcm1zIGFybXBpdHMgYXJtcGl0X2NyZWFzZSBhcm1waXRfcGVlayBiYWNrIGJhcmVfc2hvdWxkZXJzIGJyZWFzdHMgYnVzdCBjbGF2aWNsZSBtaWRyaWZmIG5hdmVsIHN0b21hY2ggaGFuZHMgZmluZ2VycyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkxvd2VyIEJvZHkiLAogICAgInRhZ3MiOiBbCiAgICAgICJhbnVzIGFzcyBtb3VuZF9vZl92ZW51cyB2YWdpbmEgcGVuaXMgdGhpZ2hzIGtuZWVzIGZlZXQgYmFyZWZvb3QgbGVncyBiYXJlX2xlZ3MgYmFyZV90aGlnaHMgemV0dGFpX3J5b3Vpa2kgdG9lcyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkJyZWFzdHMiLAogICAgInRhZ3MiOiBbCiAgICAgICJjbGVhdmFnZSBicmVhc3RzIG5pcHBsZXMgYXJlb2xhZSBwdWZmeV9hcmVvbGFlIGFyZW9sYV9zbGlwIGJyZWFzdHNfb3V0X29mX2Nsb3RoZXMgYnJlYXN0c19hcGFydCB1bmRlcmJvb2Igc2lkZWJvb2IiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJCcmVhc3QgU2l6ZSIsCiAgICAidGFncyI6IFsKICAgICAgInBldHRhbmtvIHNtYWxsX2JyZWFzdHMgbWVkaXVtX2JyZWFzdHMgbGFyZ2VfYnJlYXN0cyBodWdlX2JyZWFzdHMgZ2lnYW50aWNfYnJlYXN0cyBhbHRlcm5hdGVfYnVzdF9zaXplIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiU2tpbiBDb2xvciIsCiAgICAidGFncyI6IFsKICAgICAgInBhbGVfc2tpbiBkYXJrX3NraW4gdGFubmVkIHNoaW55X3NraW4gYWxiaW5vIiwKICAgICAgWyJyZWRfc2tpbiBvcmFuZ2Vfc2tpbiB5ZWxsb3dfc2tpbiBncmVlbl9za2luIGJsdWVfc2tpbiBwdXJwbGVfc2tpbiBwaW5rX3NraW4gd2hpdGVfc2tpbiBncmV5X3NraW4gYmxhY2tfc2tpbiJdCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJIYWlyc3R5bGUiLAogICAgInRhZ3MiOiBbCiAgICAgICJhaG9nZSBiYW5ncyBibHVudF9iYW5ncyBib2JfY3V0IGRvdWJsZV9idW4gZHJpbGxfaGFpciBoYWlyX292ZXJfb25lX2V5ZSBwZWVrLWEtYm9vX2JhbmcgcG9ueXRhaWwgc2lkZV9wb255X3RhaWwgc2luZ2xlX2JyYWlkIHNwaWt5X2hhaXIgdHdpbmJyYWlkcyB0d2ludGFpbHMgYWx0ZXJuYXRlX2hhaXJzdHlsZSB0d29fc2lkZV91cCIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkhhaXIgTGVuZ3RoIiwKICAgICJ0YWdzIjogWwogICAgICAidmVyeV9zaG9ydF9oYWlyIHNob3J0X2hhaXIgbWVkaXVtX2hhaXIgbG9uZ19oYWlyIHZlcnlfbG9uZ19oYWlyIGFic3VyZGx5X2xvbmdfaGFpciIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkhhaXIvRXllIENvbG9yIiwKICAgICJ0YWdzIjogWwogICAgICBbCiAgICAgICAgWyJibG9uZGVfaGFpciBibGFja19oYWlyIGJsdWVfaGFpciBicm93bl9oYWlyIGdyZWVuX2hhaXIgZ3JleV9oYWlyIG9yYW5nZV9oYWlyIHBpbmtfaGFpciBwdXJwbGVfaGFpciByZWRfaGFpciBzaWx2ZXJfaGFpciB3aGl0ZV9oYWlyIl0sCiAgICAgICAgWyJnb2xkZW5fZXllcyBibGFja19leWVzIGJsdWVfZXllcyBicm93bl9leWVzIGdyZWVuX2V5ZXMgZ3JleV9leWVzIG9yYW5nZV9leWVzIHBpbmtfZXllcyBwdXJwbGVfZXllcyByZWRfZXllcyBzaWx2ZXJfZXllcyB3aGl0ZV9leWVzIl0KICAgICAgXQogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiQW5pbWFsIFBhcnRzIiwKICAgICJ0YWdzIjogWwogICAgICAiYW5pbWFsX2VhcnMgYmF0X3dpbmdzIGJ1bm55X2VhcnMgY2F0X3RhaWwgd29sZl9lYXJzIGZhbmcgaG9ybnMga2l0c3VuZW1pbWkgbmVrb21pbWkgdGFpbCBpbnVtaW1pIHdpbmdzIGFuZ2VsX3dpbmdzIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiTG9vay9PdGhlciIsCiAgICAidGFncyI6IFsKICAgICAgImNoaWJpIG1vbGUgbXVzY2xlIHBvaW50ZWRfZWFycyBwcmVnbmFudCBzY2FyIGN1cnZ5IGFuaW1hbF9lYXJfZmx1ZmYgZmx1ZmZ5X3RhaWwiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJTd2ltd2VhciIsCiAgICAidGFncyI6IFsKICAgICAgImJpa2luaSBvbmUtcGllY2Vfc3dpbXN1aXQgc3dpbXN1aXQgY29tcGV0aXRpb25fc3dpbXN1aXQgc3VrdW1penUiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJGYWNld2VhciIsCiAgICAidGFncyI6IFsKICAgICAgIm1lZ2FuZSBzdW5nbGFzc2VzIGV5ZXdlYXJfb25faGVhZCByZWQtZnJhbWVkX2V5ZXdlYXIiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJVcHBlciBCb2R5IiwKICAgICJ0YWdzIjogWwogICAgICAic2FpbG9yX2NvbGxhciBjaG9rZXIgc2hpcnQgY3JvcF90b3AgY2FtaXNvbGUgZHJlc3MgYnJhIGJhYnlkb2xsIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiTG93ZXIgQm9keSIsCiAgICAidGFncyI6IFsKICAgICAgInNraXJ0IHBsZWF0ZWRfc2tpcnQgcGFudHN1IHRoaWdoaGlnaHMgc2hvZXMgc2FuZGFscyBzb2NrcyBwYW50cyBzaG9ydHMgc2hvcnRfc2hvcnRzIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiVHJhZGl0aW9uYWxcdTAwQTBDbG90aGVzIiwKICAgICJ0YWdzIjogWwogICAgICAic2VyYWZ1a3Uga2ltb25vIGtpbmRlcmdhcnRlbl91bmlmb3JtIGNoaW5lc2VfY2xvdGhlcyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIldlYXIvT3RoZXIiLAogICAgInRhZ3MiOiBbCiAgICAgICJhcm1vciBzdWl0IHVuaWZvcm0gc2Nob29sX3VuaWZvcm0gdW5kZXJ3ZWFyX29ubHkgbnVkZSBjb21wbGV0ZWx5X251ZGUiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJBY3Rpb25zIiwKICAgICJ0YWdzIjogWwogICAgICAiYmF0dGxlIGZpZ2h0aW5nIGp1bXBpbmcgcnVubmluZyBwcmluY2Vzc19jYXJyeSBzdHJldGNoIHNsZWVwaW5nIGx5aW5nIGZseWluZyBzcXVhdHRpbmciCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJQb3N0dXJlIiwKICAgICJ0YWdzIjogWwogICAgICAiYWxsX2ZvdXJzIGFyY2hlZF9iYWNrIGJhY2stdG8tYmFjayBiZW50LW92ZXIgZmlnaHRpbmdfc3RhbmNlIGxlYW5pbmcgbGVhbmluZ19iYWNrIGxlYW5pbmdfZm9yd2FyZCBzcXVhdCB0b3AtZG93bl9ib3R0b20tdXAiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJBcm1zIiwKICAgICJ0YWdzIjogWwogICAgICAiYXJtc19iZWhpbmRfYmFjayBhcm1zX2Nyb3NzZWQgYXJtX3N1cHBvcnQgYXJtX3VwIGFybXNfdXAgYXJtc19iZWhpbmRfaGVhZCBjaGluX3Jlc3Qgb3V0c3RyZXRjaGVkX2FybSBvdXRzdHJldGNoZWRfYXJtcyBzcHJlYWRfYXJtcyB2X2FybXMiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJIYW5kcyIsCiAgICAidGFncyI6IFsKICAgICAgImhhbmRzX2NsYXNwZWQgaGFuZF9pbl9wb2NrZXQgaGFuZHNfaW5fcG9ja2V0IGhhbmRfb25fY2hlZWsgaGFuZF9vbl9oYXQgaGFuZF9vbl9oZWFkIGhhbmRfb25faGlwIGhhbmRzX29uX2hpcCBoYW5kX29uX3Nob3VsZGVyIGhvbGRpbmdfaGFuZHMgaW50ZXJsb2NrZWRfZmluZ2VycyBvdXRzdHJldGNoZWRfaGFuZCIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkxlZ3MiLAogICAgInRhZ3MiOiBbCiAgICAgICJrbmVlc19vbl9jaGVzdCBsZWdfbGlmdCBsZWdfdXAgbGVnc191cCBvdXRzdHJldGNoZWRfbGVnIHBpZ2Vvbl90b2VkIHNwcmVhZF9sZWdzIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiU2l0dGluZyIsCiAgICAidGFncyI6IFsKICAgICAgInNpdHRpbmcgY3Jvc3NlZF9sZWdzIGluZGlhbl9zdHlsZSBsZWdfaHVnIHNlaXphIHNpdHRpbmdfb25fbGFwIHNpdHRpbmdfb25fcGVyc29uIHdhcml6YSB5b2tvenV3YXJpIHN0cmFkZGxpbmciCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJTdGFuZGluZyIsCiAgICAidGFncyI6IFsKICAgICAgInN0YW5kaW5nIGNyb3NzZWRfbGVnc18oc3RhbmRpbmcpIHN0YW5kaW5nX29uX29uZV9sZWciCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJMeWluZyIsCiAgICAidGFncyI6IFsKICAgICAgImx5aW5nIG9uX2JhY2sgb25fc2lkZSBvbl9zdG9tYWNoIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiVmlld2luZyBEaXJlY3Rpb24iLAogICAgInRhZ3MiOiBbCiAgICAgICJleWVfY29udGFjdCBsb29raW5nX2F0X3ZpZXdlciBsb29raW5nX2JhY2sgbG9va2luZ19hd2F5IgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiR2VzdHVyZSIsCiAgICAidGFncyI6IFsKICAgICAgImNsZW5jaGVkX2hhbmQgY2xlbmNoZWRfaGFuZHMgZG91YmxlX3YgaGVhcnRfaGFuZHMgcGlua3lfb3V0IHBvaW50aW5nIHNodXNoaW5nIHRodW1ic191cCBcXFxcbVxcLyByZWFjaGluZyBzYWx1dGUgd2F2aW5nIGNhdF9wb3NlIHBhd19wb3NlIHYgY2xhd19wb3NlIGRvdWJsZV9cXFxcbVxcLyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkZhY2lhbCBFeHByZXNzaW9ucyIsCiAgICAidGFncyI6IFsKICAgICAgImV4cHJlc3Npb25zIGV4cHJlc3Npb25sZXNzIGFoZWdhbyBhbmdlcl92ZWluIGJsdXNoIGJsdXNoX3N0aWNrZXJzIGNsZW5jaGVkX3RlZXRoIGNsb3NlZF9leWVzIGV2aWwgbmF1Z2h0eV9mYWNlIG5vc2VibGVlZCBvcGVuX21vdXRoIHBhcnRlZF9saXBzIHBvdXQgcm9sbGV5ZXMgZnJvd24gdGVhcnMgc2NyZWFtIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiRW1vdGlvbnMiLAogICAgInRhZ3MiOiBbCiAgICAgICJhbmdyeSBhbm5veWVkIGVtYmFycmFzc2VkIGhhcHB5IHNhZCBzY2FyZWQgc3VycHJpc2VkIHdvcnJpZWQgZGlzYXBwb2ludGVkIGRydW5rIHRyZW1ibGluZyIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIlNleCIsCiAgICAidGFncyI6IFsKICAgICAgInNleCBhbmFsIGNsb3RoZWRfc2V4IGhhcHB5X3NleCB2YWdpbmFsIHlhb2kgeXVyaSB0cmliYWRpc20gb3JhbCIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIlBvc2l0aW9ucyIsCiAgICAidGFncyI6IFsKICAgICAgIjY5IGRvZ2d5c3R5bGUgZ2lybF9vbl90b3AgY293Z2lybF9wb3NpdGlvbiByZXZlcnNlX2Nvd2dpcmxfcG9zaXRpb24gdXByaWdodF9zdHJhZGRsZSBtaXNzaW9uYXJ5IgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiU3RpbXVsYXRpb24iLAogICAgInRhZ3MiOiBbCiAgICAgICJidXR0am9iIGZvb3Rqb2IgZ3JpbmRpbmcgdGhpZ2hfc2V4IHRla29raSBjYXJlc3NpbmdfdGVzdGljbGVzIGRvdWJsZV9oYW5kam9iIG1hc3R1cmJhdGlvbiBjcm90Y2hfcnViIHBhaXp1cmkgbmFpenVyaSIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIk9yYWwiLAogICAgInRhZ3MiOiBbCiAgICAgICJvcmFsIGJyZWFzdF9zdWNraW5nIGN1bm5pbGluZ3VzIGZhY2VzaXR0aW5nIGZlbGxhdGlvIGRlZXB0aHJvYXQgOj49IgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiR3JvcGluZyIsCiAgICAidGFncyI6IFsKICAgICAgImdyb3BpbmcgYXNzX2dyYWIgYnJlYXN0X2dyYWIgbmlwcGxlX3R3ZWFrIHNlbGZfZm9uZGxlIHRvcnNvX2dyYWIiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJHcm91cCBTZXgiLAogICAgInRhZ3MiOiBbCiAgICAgICJncm91cF9zZXggZ2FuZ2JhbmcgZG91YmxlX3BlbmV0cmF0aW9uIG9yZ3kgc3BpdHJvYXN0IHRlYW13b3JrIHRocmVlc29tZSIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkluc2VydGlvbiIsCiAgICAidGFncyI6IFsKICAgICAgImluc2VydGlvbiBhbmFsX2luc2VydGlvbiBsYXJnZV9pbnNlcnRpb24gc3RvbWFjaF9idWxnZSBtdWx0aXBsZV9pbnNlcnRpb25zIHVyZXRocmFsX2luc2VydGlvbiBwZW5ldHJhdGlvbiBuaXBwbGVfcGVuZXRyYXRpb24gZmluZ2VyaW5nIGFuYWxfZmluZ2VyaW5nIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiRmV0aXNoZXMiLAogICAgInRhZ3MiOiBbCiAgICAgICJtaWxmIGdpYW50ZXNzIG1pbmlnaXJsIHBsdW1wIGZhdCBza2lubnkgcHVibGljIHB1YmxpY19udWRpdHkgemVucmEgZXhoaWJpdGlvbmlzbSB2b3lldXJpc20gZnV0YV9vbl9mZW1hbGUgZnV0YV9vbl9tYWxlIGluY2VzdCB0d2luY2VzdCByYXBlIGFib3V0X3RvX2JlX3JhcGVkIG1vbGVzdGF0aW9uIGJlc3RpYWxpdHkgaW1wcmVnbmF0aW9uIHRlbnRhY2xlcyB2aXJnaW4gdm9yZSIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkJvbmRhZ2UiLAogICAgInRhZ3MiOiBbCiAgICAgICJib25kYWdlIGJkc20gYXNwaHl4aWF0aW9uIGJyZWFzdF9ib25kYWdlIHNoaWJhcmkgc3ByZWFkZXJfYmFyIHN1c3BlbnNpb24gZmVtZG9tIGh1bWlsaWF0aW9uIGJvZHlfd3JpdGluZyBzbGF2ZSBzcGFua2VkIHRvcnR1cmUgYm91bmRfYXJtcyBib3VuZF9sZWdzIGJvdW5kX3dyaXN0cyBzdXNwZW5zaW9uIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiU2VtZW4iLAogICAgInRhZ3MiOiBbCiAgICAgICJzZW1lbiBidWtrYWtlIGRyaXBwaW5nX3NlbWVuIHNlbWVuX3NwbGF0dGVyIHNlbWVuX3Bvb2wgbmFrYWRhc2hpIHNlbWVuX2luX2FudXMgc2VtZW5faW5fbW91dGggc2VtZW5fb25fdG9uZ3VlIHNlbWVuX29uX2JvZHkgc2VtZW5fb25faGFpciBzZW1lbl9vbl9sb3dlcl9ib2R5IHNlbWVuX29uX2FzcyBzZW1lbl9vbl92YWdpbmEgc2VtZW5fb25fdXBwZXJfYm9keSBzZW1lbl9vbl9icmVhc3RzIHNlbWVuX29uX2Nsb3RoZXMgZWphY3VsYXRpb24gZWphY3VsYXRpbmdfd2hpbGVfcGVuZXRyYXRlZCBmYWNpYWwiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJPYmplY3RzIiwKICAgICJ0YWdzIjogWwogICAgICAiY29uZG9tIHVzZWRfY29uZG9tIHNleF90b3kgZGlsZG8gdmlicmF0b3IiCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJCb2RpbHkgRmx1aWRzIiwKICAgICJ0YWdzIjogWwogICAgICAiYmxvb2QgbGFjdGF0aW9uIHVyaW5hdGluZyBzYWxpdmEgc3dlYXQgZmVtYWxlX2VqYWN1bGF0aW9uIHZhZ2luYWxfanVpY2VzIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiVmlldyIsCiAgICAidGFncyI6IFsKICAgICAgImNyb3NzLXNlY3Rpb24gaW50ZXJuYWxfY3Vtc2hvdCB4LXJheSIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIkJhY2tncm91bmQiLAogICAgInRhZ3MiOiBbCiAgICAgICJzaW1wbGVfYmFja2dyb3VuZCBncmFkaWVudF9iYWNrZ3JvdW5kIHR3by10b25lX2JhY2tncm91bmQgYW1iaWd1b3VzX2JhY2tncm91bmQgYmx1cnJ5X2JhY2tncm91bmQiLAogICAgICBbIndoaXRlX2JhY2tncm91bmQgZ3JleV9iYWNrZ3JvdW5kIGJsYWNrX2JhY2tncm91bmQgcmVkX2JhY2tncm91bmQgYnJvd25fYmFja2dyb3VuZCBvcmFuZ2VfYmFja2dyb3VuZCB5ZWxsb3dfYmFja2dyb3VuZCBncmVlbl9iYWNrZ3JvdW5kIGJsdWVfYmFja2dyb3VuZCBwdXJwbGVfYmFja2dyb3VuZCBwaW5rX2JhY2tncm91bmQiXSAgICAgIAogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiUGxhY2VtZW50IiwKICAgICJ0YWdzIjogWwogICAgICAiaW5kb29ycyBvdXRkb29ycyByb29mdG9wIGNpdHkgcG9vbCBiZWFjaCBjYXZlIGJlZHJvb20gaGFsbHdheSIKICAgIF0KICB9LAogIHsKICAgICJuYW1lIjogIk5hdHVyZSIsCiAgICAidGFncyI6IFsKICAgICAgIm9jZWFuIHJpdmVyIHRyZWUgcGFsbV90cmVlIHdpc3RlcmlhIGxpbGFjIGdyYXNzIHNhbmQgd2F0ZXIiLAogICAgICBbIndoaXRlX2Zsb3dlciByZWRfZmxvd2VyIHllbGxvd19mbG93ZXIgYmx1ZV9mbG93ZXIgcHVycGxlX2Zsb3dlciBwaW5rX2Zsb3dlciJdCiAgICBdCiAgfSwKICB7CiAgICAibmFtZSI6ICJJbmRvb3JzIiwKICAgICJ0YWdzIjogWwogICAgICAicGlsbG93IGJlZCBkb29yIGJlZF9zaGVldCBjb3VudGVyIHdpbmRvdyBjdXJ0YWlucyBiYXRodHViIgogICAgXQogIH0sCiAgewogICAgIm5hbWUiOiAiV29yayBUeXBlIiwKICAgICJ0YWdzIjogWwogICAgICAic2NhbiB3YXRlcmNvbG9yXyhtZWRpdW0pIHBhcGVyY3JhZnQgbm9uLXdlYl9zb3VyY2UgcGhvdG9zaG9wXyhtZWRpdW0pIHNrZXRjaCB3b3JrX2luX3Byb2dyZXNzIGxpbmVhcnQiCiAgICBdCiAgfQpdYDsKCiAgY29uc3QgUE9TVF9NT0RFX0RFU0NSSVBUSU9OUyA9IHsKICAgICd2aWV3JzogJ1ZpZXcnLAogICAgJ2FkZC1mYXYnOiAnQWRkIHRvIGZhdm9yaXRlcycsCiAgICAncmVtb3ZlLWZhdic6ICdSZW1vdmUgZnJvbSBmYXZvcml0ZXMnLAogICAgJ3JhdGluZy1zJzogJ1JhdGUgRycsCiAgICAncmF0aW5nLXEnOiAnUmF0ZSAxNSsnLAogICAgJ3JhdGluZy1lJzogJ1JhdGUgUjE4KycsCiAgICAnYXBwcm92ZSc6ICdBcHByb3ZlIHBvc3QnLAogICAgJ2ZsYWcnOiAnRmxhZycsCiAgICAnZWRpdC10YWctc2NyaXB0JzogJ0VkaXQgdGFnIHNjcmlwdCcsCiAgICAnYXBwbHktdGFnLXNjcmlwdCc6ICdBcHBseSB0YWcgc2NyaXB0JywKICAgICdjaG9vc2UtcGFyZW50JzogJ0Nob29zZSBQYXJlbnQnLAogICAgJ3NldC1wYXJlbnQnOiAnU2V0IFBhcmVudCcsCiAgICAnZWRpdC10YWdzJzogJ0VkaXQgVGFncycsCiAgICAnZmluZC1zaW1pbGFyJzogJ0ZpbmQgU2ltaWxhcicsCiAgfTsKCiAgLyoqKioqKioqKioqKioqKioqLwogIC8qIGNvbXBhdGliaWxpdHkgKi8KICAvKioqKioqKioqKioqKioqKiovCgogIGxldCBJU19NT05LRVkgPSBmYWxzZTsgLy8gVGFtcGVybW9ua2V5LCBWaW9sZW50bW9ua2V5LCBHcmVhc2Vtb25rZXkgKGFsbCBhdCBsZWFzdCBwYXJ0aWFsbHkgc3VwcG9ydCAnR00uJyBmdW5jdGlvbnMpCgogIGlmICh0eXBlb2YgR00gPT09ICdvYmplY3QnICYmIHR5cGVvZiBHTS5pbmZvID09PSAnb2JqZWN0JykgewogICAgSVNfTU9OS0VZID0gdHJ1ZTsKCiAgICAvLyBHcmVhc2Vtb25rZXk6CiAgICAvLyBkb2Vzbid0IGhhdmUgYWRkU3R5bGUgYW5kIGFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIKICAgIC8vIGZldGNoKCkgZG9lc24ndCB3b3JrIHdpdGggcmVsYXRpdmUgVVJMcyAoaHR0cHM6Ly9naXRodWIuY29tL2dyZWFzZW1vbmtleS9ncmVhc2Vtb25rZXkvaXNzdWVzLzI2NDcpLCB3b3JrYXJvdW5kOiBuZXcgVVJMKCcvcmVsYXRpdmUvcGF0aCcsIGRvY3VtZW50LmxvY2F0aW9uKQoKICAgIC8vIHBvbHlmaWxsIGZvciBWaW9sZW50TW9ua2V5CiAgICBpZiAoIUdNLmFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIgJiYgdHlwZW9mIEdNX2FkZFZhbHVlQ2hhbmdlTGlzdGVuZXIgIT09ICd1bmRlZmluZWQnKSBHTS5hZGRWYWx1ZUNoYW5nZUxpc3RlbmVyID0gR01fYWRkVmFsdWVDaGFuZ2VMaXN0ZW5lcjsKICB9CgogIGNvbnN0IEhBU19NT05LRVlfU1RPUkFHRSA9IElTX01PTktFWTsKICBjb25zdCBIQVNfTU9OS0VZX1NUT1JBR0VfTElTVEVORVIgPSBJU19NT05LRVkgJiYgR00uYWRkVmFsdWVDaGFuZ2VMaXN0ZW5lcjsKICBjb25zdCBIQVNfTU9OS0VZX0FERF9TVFlMRSA9IElTX01PTktFWSAmJiBHTS5hZGRTdHlsZTsKCiAgbGV0IEhBU19MT0NBTF9TVE9SQUdFOwogIHRyeSB7CiAgICBIQVNfTE9DQUxfU1RPUkFHRSA9ICEhbG9jYWxTdG9yYWdlLmdldEl0ZW07CiAgfSBjYXRjaCAoZXJyb3IpIHsgLy8gRE9NRXhjZXB0aW9uCiAgICBIQVNfTE9DQUxfU1RPUkFHRSA9IGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gYWRkX3N0b3JhZ2VfY2hhbmdlX2xpc3RlbmVyKCkgewogICAgaWYgKEhBU19NT05LRVlfU1RPUkFHRV9MSVNURU5FUikgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSkgR00uYWRkVmFsdWVDaGFuZ2VMaXN0ZW5lcihrZXksIHN0b3JhZ2VfY2hhbmdlZCk7CiAgICBlbHNlIGlmIChIQVNfTE9DQUxfU1RPUkFHRSkgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBsb2NhbF9zdG9yYWdlX2NoYW5nZWQpOwogICAgZWxzZSBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSBjb3VsZG5cJ3QgYWRkIHN0b3JhZ2UgY2hhbmdlIGxpc3RlbmVyISBObyBjcm9zcy10YWIgY29tbXVuaWNhdGlvbiBwb3NzaWJsZS4nKTsKICB9CgogIGZ1bmN0aW9uIG9wZW5faW5fdGFiKHVybCkgewogICAgaWYgKElTX01PTktFWSkgR00ub3BlbkluVGFiKHVybCwgZmFsc2UpOwogICAgZWxzZSAgICAgICAgICAgd2luZG93Lm9wZW4odXJsKTsgLy8gcmVxdWlyZXMgcG9wdXAgcGVybWlzc2lvbgogIH0KCiAgZnVuY3Rpb24gYWRkX3N0eWxlKGNzcykgewogICAgaWYgKEhBU19NT05LRVlfQUREX1NUWUxFKSB7CiAgICAgIEdNLmFkZFN0eWxlKGNzcyk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBzaGVldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NUWUxFJyk7CiAgICAgIHNoZWV0LmlubmVyVGV4dCA9IGNzczsKICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzaGVldCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzZXRfY2xpcGJvYXJkKHRleHQpIHsKICAgIGlmIChJU19NT05LRVkpIHsKICAgICAgR00uc2V0Q2xpcGJvYXJkKHRleHQpOwogICAgfSBlbHNlIHsKICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCkuY2F0Y2goKGVycikgPT4gewogICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdOiBDb3VsZG5cJ3QgY29weSB0ZXh0IHRvIGNsaXBib2FyZCcsIGVycik7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8gdGhlIHNpdGUgdXNlcyBhIHRvbiBvZiBhbmNpZW50LCBub24tc3RhbmRhcmQgcG9seWZpbGxzL3Byb3RvdHlwZSBvdmVycmlkZXMsIGUuZy4KICAvLyBBcnJheS5mcm9tKG5ldyBTZXQoWzFdKSkgcmV0dXJucyBbXSBpbnN0ZWFkIG9mIFsxXQogIC8vIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoWzFdKSkgcmV0dXJucyAiWzFdIiBpbnN0ZWFkIG9mIFsxXQogIC8vIEFycmF5LmZyb20ocykgY2FuIGJlIHJlcGxhY2VkIGJ5IFsuLi5zXQogIC8vIHRvIHVzZSBwcm9wZXIgSlNPTiB3ZSBuZWVkIHRvIHRlbXBvcmFyaWx5IHVuYmluZCB0aGUgc2l0ZSdzIHRvSlNPTiBmdW5jdGlvbnMKICBjb25zdCB0b0pTT05fT0JKRUNUUyA9IFtPYmplY3QsIEFycmF5LnByb3RvdHlwZSwgTnVtYmVyLnByb3RvdHlwZSwgU3RyaW5nLnByb3RvdHlwZV07CgogIGZ1bmN0aW9uIGRlbGV0ZV90b0pTT05zKCkgewogICAgY29uc3QgdG9KU09OX29yaWdpbmFscyA9IFtdOwogICAgZm9yIChjb25zdCBvYmogb2YgdG9KU09OX09CSkVDVFMpIHsKICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eSgndG9KU09OJykpIHsKICAgICAgICB0b0pTT05fb3JpZ2luYWxzLnB1c2goeyBvYmosIGZ1bmM6IG9iai50b0pTT04gfSk7CiAgICAgICAgZGVsZXRlIG9iai50b0pTT047CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b0pTT05fb3JpZ2luYWxzOwogIH0KCiAgZnVuY3Rpb24gcmVzdG9yZV90b0pTT05zKHRvSlNPTl9vcmlnaW5hbHMpIHsKICAgIGZvciAoY29uc3QgeyBvYmosIGZ1bmMgfSBvZiB0b0pTT05fb3JpZ2luYWxzKQogICAgICBvYmoudG9KU09OID0gZnVuYzsKICB9CgogIGZ1bmN0aW9uIEpTT05fc3RyaW5naWZ5KG9iaiwgcmVwbGFjZXIsIHNwYWNlKSB7CiAgICBsZXQgdG9KU09OX29yaWdpbmFsczsKICAgIHRyeSB7CiAgICAgIHRvSlNPTl9vcmlnaW5hbHMgPSBkZWxldGVfdG9KU09OcygpOwogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCByZXBsYWNlciwgc3BhY2UpOwogICAgfSBmaW5hbGx5IHsKICAgICAgcmVzdG9yZV90b0pTT05zKHRvSlNPTl9vcmlnaW5hbHMpOwogICAgfQogIH0KCiAgLy8gZW5hYmxlcyBKU09OIHRvIHN0cmluZ2lmeSBTZXRzIGFuZCBIb3RrZXlzCiAgZnVuY3Rpb24ganNvbl9yZXBsYWNlcihrZXksIHZhbHVlKSB7CiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgewogICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZXQpICByZXR1cm4geyB0OiAnU2V0JywgdjogWy4uLnZhbHVlXSB9OwogICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApICByZXR1cm4geyB0OiAnTWFwJywgdjogWy4uLnZhbHVlXSB9OwogICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBIb3RrZXkpIHsKICAgICAgICByZXR1cm4geyB0OiAnSG90a2V5JywgdjogewogICAgICAgICAgICBtb2RpZmllcnM6IHZhbHVlLm1vZGlmaWVycywKICAgICAgICAgICAgYWN0aW9uOiB2YWx1ZS5hY3Rpb25fbmFtZSwKICAgICAgICAgIH0gfTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIC8vIGVuYWJsZXMgSlNPTiB0byBwYXJzZSBTZXRzIGFuZCBIb3RrZXlzCiAgZnVuY3Rpb24ganNvbl9yZXZpdmVyKGtleSwgdmFsdWUpIHsKICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7CiAgICAgIHN3aXRjaCAodmFsdWUudCkgewogICAgICAgIGNhc2UgJ1NldCc6CiAgICAgICAgICByZXR1cm4gbmV3IFNldCh2YWx1ZS52KTsKICAgICAgICBjYXNlICdNYXAnOgogICAgICAgICAgcmV0dXJuIG5ldyBNYXAodmFsdWUudik7CiAgICAgICAgY2FzZSAnSG90a2V5JzoKICAgICAgICAgIHJldHVybiBuZXcgSG90a2V5KHZhbHVlLnYuYWN0aW9uLCB2YWx1ZS52Lm1vZGlmaWVycyk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBsZXQgYXBwbGllZF9jc3MgPSBmYWxzZTsKICBmdW5jdGlvbiBhZGp1c3RfY3NzKCkgewogICAgaWYgKGFwcGxpZWRfY3NzKSByZXR1cm47CiAgICBhcHBsaWVkX2NzcyA9IHRydWU7CgogICAgLy8gY2hhbmdlIHByaW9yaXR5IG9mIHBvc3QgYm9yZGVycyAoYnkgcmVkZWZpbmluZyB0aGVpciBjb2xvcnMgYWZ0ZXIgdGhlaXIgb3JpZ2luYWwgZGVmaW5pdGlvbikKICAgIC8vIG9yaWdpbmFsOiBmbGFnZ2VkIDwgaGFzLWNoaWxkcmVuIDwgaGFzLXBhcmVudCA8IHBlbmRpbmcgPCBkZWxldGVkCiAgICAvLyBkZWZhdWx0OiAgZGVsZXRlZCA8IGhhcy1jaGlsZHJlbiA8IGhhcy1wYXJlbnQgPCBwZW5kaW5nIDwgZmxhZ2dlZAogICAgLy8gdmFyaWFudHM6IHBlbmRpbmcgPCBkZWxldGVkIDwgaGFzLWNoaWxkcmVuIDwgaGFzLXBhcmVudCA8IGZsYWdnZWQKICAgIC8vIG5vdGU6IHBlbmRpbmcsIGZsYWdnZWQgYW5kIGRlbGV0ZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgc28gdGhpcyBpcyBvbmx5IGFib3V0IHRoZWlyIHJlbGF0aW9uIHRvIGhhcy1jaGlsZHJlbi9wYXJlbnQKICAgIC8vIGFsc28gbm90ZTogZGVsZXRlZCBwb3N0cyBvbmx5IHNob3cgdGhyb3VnaCBleHBsaWNpdCBzZWFyY2ggc28gdGhleSBkb24ndCByZWFsbHkgbmVlZCBhIGJvcmRlcgogICAgYWRkX3N0eWxlKGAKICAgICAgaW1nLmhhcy1jaGlsZHJlbiB7IGJvcmRlci1jb2xvcjogI0E3REYzODsgfQogICAgICBpbWcuaGFzLXBhcmVudCAgIHsgYm9yZGVyLWNvbG9yOiAjQ0NDQzAwOyB9CiAgICAke2NvbmZpZy5wb3N0X2JvcmRlcl9zdHlsZSA9PT0gMCA/IGAKICAgICAgaW1nLnBlbmRpbmcgICAgICB7IGJvcmRlci1jb2xvcjogIzRCNEJBMzsgfQogICAgYCA6IGNvbmZpZy5wb3N0X2JvcmRlcl9zdHlsZSA9PT0gMiA/IGAKICAgICAgaW1nLnBlbmRpbmc6aXMoLmhhcy1jaGlsZHJlbiwuaGFzLXBhcmVudCkgeyBvdXRsaW5lOiAjNEI0QkEzIHNvbGlkIDJweDsgfQogICAgYCA6ICcnfQogICAgICBpbWcuZmxhZ2dlZCAgICAgIHsgYm9yZGVyLWNvbG9yOiAjRjAwOyB9CiAgICBgKTsKCiAgICAvKiBzaXRlZml4IGZvciB0aHVtYm5haWxzIG5vdCBhbGlnbmluZyBwcm9wZXJseSBhbnltb3JlICovCiAgICBhZGRfc3R5bGUoJ3NwYW4udGh1bWIgeyBmbG9hdDogbGVmdDsgfScpOwoKICAgIC8qIHJlYWRkIG1pc3NpbmcgdGh1bWJuYWlsIHBhZGRpbmcgKHNvIHRodW1ibmFpbCBpY29ucyBkb24ndCBqdW1wIGFyb3VuZCkgKi8KICAgIGFkZF9zdHlsZShgCiAgICAgIHNwYW4udGh1bWIgLnByZXZpZXc6bm90KDpob3ZlciwuaGFzLXBhcmVudCwuaGFzLWNoaWxkcmVuLC5wZW5kaW5nLC5mbGFnZ2VkLC5kZWxldGVkKSB7CiAgICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgIH0KICAgIGApOwoKICAgIC8qIHNpdGVmaXg6IGRhcmttb2RlIGhhcyBhIHNtYWxsIGdhcCBiZXR3ZWVuIHRoZSBuYXZiYXIgPGxpPnMgYW5kIHRoZSA8dWw+cyB3aGljaCBwYXJ0aWFsbHkgYnJlYWtzIGhvdmVyaW5nICovCiAgICAvKiBUaGlzIGFsc28gZml4ZXMgYSB2aXN1YWwgaXNzdWUgaW4gbGlnaHRtb2RlIHdoZXJlIHRoZSB3aGl0ZSBib3JkZXJzIGN1dCBpbnRvIHRoZSBncmF5IG5hdmJhciAqLwogICAgYWRkX3N0eWxlKGAKICAgICAgZGl2I2hlYWRlciB1bCNuYXZiYXIgbGkgewogICAgICAgIHBhZGRpbmctYm90dG9tOiAxcHg7CiAgICAgIH0KICAgICAgZGl2I2hlYWRlciB1bCNuYXZiYXIgbGk6aG92ZXIgPiB1bCB7CiAgICAgICAgbWFyZ2luLXRvcDogM3B4OwogICAgICB9CiAgICBgKTsKCiAgICAvKiBSZW1vdmUgYmFyZWx5IHZpc2libGUgd2hpdGUgYm9yZGVyIGZyb20gc3VibmF2IGVsZW1lbnRzIGluIGxpZ2h0bW9kZSAqLwogICAgYWRkX3N0eWxlKGAKICAgICAgZGl2I2hlYWRlciB1bCNuYXZiYXIgbGkgewogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KICAgIGApOwoKICAgIC8qIHNpdGVmaXggZm9yIGJyb2tlbiBkZWxldGlvbiBwYWdlIGxheW91dCAqLwogICAgYWRkX3N0eWxlKGAKICAgICAgLyogY29tcGFyaXNvbiBib3ggKi8KICAgICAgI2NvbnRlbnQgPiAuZGVsZXRpbmctcG9zdCB7CiAgICAgICAgICBjbGVhcjogbGVmdDsgICAgLyogY2xlYXJmaXg6IGVuc3VyZSBib3ggc3RhcnRzIGJlbG93IGZpcnN0IHRodW1ibmFpbCAqLwogICAgICAgICAgb3ZlcmZsb3c6IGF1dG87IC8qIGZpdCBpdHMgY29udGVudCAqLwogICAgICB9CgogICAgICAvKiBiYWxhbmNlIG1hcmdpbnMgKi8KICAgICAgI2NvbnRlbnQgPiAuZGVsZXRpbmctcG9zdCB7CiAgICAgICAgICBwYWRkaW5nLXRvcDogMWVtOwogICAgICAgICAgcGFkZGluZy1ib3R0b206IDFlbTsKICAgICAgfQogICAgICAjY29udGVudCA+IC5kZWxldGluZy1wb3N0ID4gZGl2IHsKICAgICAgICAgIG1hcmdpbi10b3A6IHVuc2V0ICFpbXBvcnRhbnQ7IC8qIGltcG9ydGFudCBkdWUgdG8gaW5saW5lIHN0eWxlICovCiAgICAgICAgICBtYXJnaW4tYm90dG9tOiB1bnNldCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgICNjb250ZW50ID4gLmRlbGV0aW5nLXBvc3QgPiB1bCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiB1bnNldDsKICAgICAgfQoKICAgICAgLyogYWxpZ24gZmlyc3QgdGh1bWJuYWlsIHdpdGggY29tcGFyaXNvbiBib3ggKi8KICAgICAgI2NvbnRlbnQgPiAudGh1bWIgewogICAgICAgICAgbWFyZ2luLWxlZnQ6IGNhbGMoNGVtICsgNHB4KTsKICAgICAgfQoKICAgICAgLyogY2VudGVyIHdhcm4gdGFncyAvIGVkaXQgZ2VhciBiZWxvdyB0aHVtYm5haWxzICovCiAgICAgICNjb250ZW50IC5kZWxldGluZy1wb3N0IC50aHVtYiA+ICogewogICAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICB9CiAgICBgKTsKCiAgICAvKiByZXBsYWNlIHRodW1ibmFpbCBjZW50ZXJpbmcgbG9naWMgKG1vcmUgcm9idXN0LCBuZWVkZWQgZm9yIHRodW1ibmFpbCBpY29ucykgKi8KICAgIGFkZF9zdHlsZShgCiAgICAgIHNwYW4udGh1bWIgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIHBsYWNlLWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgaW1nLnByZXZpZXcgewogICAgICAgICAgcG9zaXRpb246IHN0YXRpYzsKICAgICAgfQoKICAgICAgLyogbmVlZGVkIGZvciB0aHVtYm5haWwgaWNvbnMgKi8KICAgICAgLnRodW1iIGEgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgYCk7CgogICAgLyogY3VzdG9tIHN0eWxlIGZvciB0YWcgbWVudSAqLwogICAgYWRkX3N0eWxlKGAKICAgICAgI3RhZ19tZW51IC50YWdfYnV0dG9uIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDVweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA1cHg7CiAgICAgICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsKICAgICAgICBib3JkZXItd2lkdGg6IDFweDsKICAgICAgfQoKICAgICAgI3RhZ19tZW51IC50YWdfbGlzdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgI3RhZ19tZW51IC50YWdfbm9uZXhpc3RlbnQgewogICAgICAgIGNvbG9yOiAjRTAwOwogICAgICB9CiAgICBgKTsKICB9CgoKICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogIC8qIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zICovCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgY29uc3QgSVNfSURPTCA9ICh3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09ICdpZG9sLnNhbmtha3Vjb21wbGV4LmNvbScgPyAxIDogMCk7CiAgY29uc3QgSElTVE9SWV9LRVkgPSAoSVNfSURPTCA/ICd2aWV3X2hpc3RvcnlfaWRvbCcgOiAndmlld19oaXN0b3J5Jyk7CiAgY29uc3QgQ09NTU9OX1RBR1NfS0VZUyA9IFsnY29tbW9uX3RhZ3NfanNvbicsICdjb21tb25fdGFnc19qc29uX2lkb2wnXTsKICBjb25zdCBDT01NT05fVEFHU19LRVkgPSBDT01NT05fVEFHU19LRVlTW0lTX0lET0xdOwogIGNvbnN0IE9USEVSX0NPTU1PTl9UQUdTX0tFWSA9IENPTU1PTl9UQUdTX0tFWVNbMSAtIElTX0lET0xdOwoKICBjb25zdCBIT1RLRVlfQUNUSU9OUyA9IHsgLy8gYWN0aW9ucyBuZWVkIHVuaXF1ZSBuYW1lcyAoZm9yIHNlcmlhbGl6YXRpb24pCiAgICBwb3N0cGFnZTogewogICAgICByZXNldF9zaXplOiAoKSA9PiB7CiAgICAgICAgc2NhbGVfaW1hZ2UoU0NBTEVfTU9ERVMuUkVTRVQsIHRydWUpOwogICAgICAgIHNjcm9sbF90b19pbWFnZSgpOwogICAgICB9LAogICAgICBmaXRfc2l6ZTogKCkgPT4gewogICAgICAgIHNjYWxlX2ltYWdlKFNDQUxFX01PREVTLkZJVCwgdHJ1ZSk7CiAgICAgICAgc2Nyb2xsX3RvX2ltYWdlKCk7CiAgICAgIH0sCiAgICAgIGZpdF9ob3Jpem9udGFsOiAoKSA9PiB7CiAgICAgICAgc2NhbGVfaW1hZ2UoU0NBTEVfTU9ERVMuSE9SSVpPTlRBTCwgdHJ1ZSk7CiAgICAgICAgc2Nyb2xsX3RvX2ltYWdlKCk7CiAgICAgIH0sCiAgICAgIGZpdF92ZXJ0aWNhbDogKCkgPT4gewogICAgICAgIHNjYWxlX2ltYWdlKFNDQUxFX01PREVTLlZFUlRJQ0FMLCB0cnVlKTsKICAgICAgICBzY3JvbGxfdG9faW1hZ2UoKTsKICAgICAgfSwKICAgICAgb3Blbl9zaW1pbGFyOiAoKSA9PiB7CiAgICAgICAgb3Blbl9pbl90YWIod2luZG93LmxvY2F0aW9uLm9yaWdpbiArICcvcG9zdC9zaW1pbGFyP2lkPScgKyBQb3N0UGFnZS5wb3N0X2lkKTsKICAgICAgfSwKICAgICAgb3Blbl9kZWxldGU6ICgpID0+IHsKICAgICAgICBpZiAoIWZvdW5kX2RlbGV0ZV9hY3Rpb24pIHsKICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdhZGRvbiBlcnJvcjogRGVsZXRlIGFjdGlvbiBub3QgZm91bmQsIG5vIHBlcm1pc3Npb24/Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9wZW5faW5fdGFiKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyAnL3Bvc3QvZGVsZXRlLycgKyBQb3N0UGFnZS5wb3N0X2lkKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFkZF90cmFuc2xhdGlvbjogKCkgPT4gewogICAgICAgIHVuc2FmZVdpbmRvdy5Ob3RlLmNyZWF0ZShQb3N0UGFnZS5wb3N0X2lkKTsKICAgICAgfSwKICAgIH0sCiAgICBpbmRleHBhZ2U6IHt9CiAgfTsKCiAgZm9yIChjb25zdCBtb2RlIG9mIE9iamVjdC5rZXlzKFBPU1RfTU9ERV9ERVNDUklQVElPTlMpKSB7CiAgICBIT1RLRVlfQUNUSU9OUy5pbmRleHBhZ2VbYCR7bW9kZX1fbW9kZWBdID0gKCkgPT4gc2VsZWN0X21vZGUobW9kZSk7CiAgfQoKICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMDsgaSsrKSB7CiAgICBIT1RLRVlfQUNUSU9OUy5pbmRleHBhZ2VbYHNlbGVjdF90YWdzY3JpcHRfcHJlc2V0JHtpfWBdID0gKCkgPT4gewogICAgICBjb25zdCBkcm9wZG93biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdzY3JpcHRfcHJlc2V0c19kcm9wZG93bicpOwogICAgICBkcm9wZG93bi5zZWxlY3RlZEluZGV4ID0gaTsKICAgICAgZHJvcGRvd24uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScpKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBnZXRfaG90a2V5X2FjdGlvbihhY3Rpb25fbmFtZSkgewogICAgZm9yIChjb25zdCBhY3Rpb25zIG9mIE9iamVjdC52YWx1ZXMoSE9US0VZX0FDVElPTlMpKSB7CiAgICAgIGNvbnN0IGFjdGlvbiA9IGFjdGlvbnNbYWN0aW9uX25hbWVdOwogICAgICBpZiAoYWN0aW9uKSB7CiAgICAgICAgcmV0dXJuIGFjdGlvbjsKICAgICAgfQogICAgfQoKICAgIHRocm93IG5ldyBFcnJvcihgSG90a2V5ICR7YWN0aW9uX25hbWV9IG5vdCBmb3VuZGApOwogIH0KCiAgY2xhc3MgSG90a2V5IHsKICAgIGNvbnN0cnVjdG9yKGFjdGlvbl9uYW1lLCBtb2RpZmllcnMpIHsKICAgICAgdGhpcy5tb2RpZmllcnMgPSBtb2RpZmllcnMgPz8gbmV3IFNldCgpOwogICAgICB0aGlzLmFjdGlvbl9uYW1lID0gYWN0aW9uX25hbWU7CiAgICAgIHRoaXMuYWN0aW9uID0gZ2V0X2hvdGtleV9hY3Rpb24oYWN0aW9uX25hbWUpOwogICAgfQoKICAgIGNhbGwoZSkgewogICAgICBpZiAodGhpcy5tb2RpZmllcnMuaGFzKCdjdHJsJykgPT09IGUuY3RybEtleQogICAgICAgICYmIHRoaXMubW9kaWZpZXJzLmhhcygnYWx0JykgPT09IGUuYWx0S2V5CiAgICAgICAgJiYgdGhpcy5tb2RpZmllcnMuaGFzKCdzaGlmdCcpID09PSBlLnNoaWZ0S2V5KSB7CiAgICAgICAgdGhpcy5hY3Rpb24oKTsKICAgICAgfQogICAgfQogIH0KCiAgY29uc3QgREVGQVVMVF9DT05GSUcgPSB7CiAgICBzY3JvbGxfdG9faW1hZ2U6IHRydWUsCiAgICBzY2FsZV9pbWFnZTogdHJ1ZSwgLy8gYW5kIHZpZGVvCiAgICBzY2FsZV9vbmx5X2Rvd25zY2FsZTogZmFsc2UsCiAgICBzY2FsZV9mbGFzaDogZmFsc2UsCiAgICBzY2FsZV9tb2RlOiAwLAogICAgc2NhbGVfb25fcmVzaXplOiBmYWxzZSwKICAgIHNjcm9sbF90b19pbWFnZV9jZW50ZXI6IHRydWUsCiAgICBsb2FkX2hpZ2hyZXM6IGZhbHNlLAogICAgaGlnaHJlc19saW1pdDogNDAwMDAwMCwgLy8gYnl0ZXMKICAgIHZpZGVvX3BhdXNlOiBmYWxzZSwKICAgIHZpZGVvX211dGU6IHRydWUsCiAgICBzZXRfdmlkZW9fdm9sdW1lOiBmYWxzZSwKICAgIHZpZGVvX3ZvbHVtZTogNTAsCiAgICB2aWRlb19jb250cm9sczogdHJ1ZSwKICAgIHNob3dfc3BlYWtlcl9pY29uOiB0cnVlLAogICAgc2hvd19hbmltYXRlZF9pY29uOiB0cnVlLAogICAgc2hvd19yYXRpbmdzX2ljb246IGZhbHNlLAogICAgcG9zdF9ib3JkZXJfc3R5bGU6IDAsCiAgICBzZXRwYXJlbnRfZGVsZXRlcG90ZW50aWFsZHVwbGljYXRlOiBmYWxzZSwKICAgIGVkaXRmb3JtX2RlbGV0ZXVzZWxlc3N0YWdzOiBmYWxzZSwKICAgIGhpZGVfaGVhZGVybG9nbzogZmFsc2UsCiAgICB0YWdfc2VhcmNoX2J1dHRvbnM6IHRydWUsCiAgICBvcl90YWdfc2VhcmNoX2J1dHRvbjogZmFsc2UsCiAgICB0YWdfbWVudTogdHJ1ZSwKICAgIHRhZ19tZW51X3NjYWxlOiAnMzAlJywKICAgIHRhZ19tZW51X2xheW91dDogMSwKICAgIGNvbW1vbl90YWdzX2pzb246IERFRkFVTFRfVEFHTElTVCwKICAgIGNvbW1vbl90YWdzX2pzb25faWRvbDogJ1sgeyJuYW1lIjoidGVzdCB0YWdzIiwgInRhZ3MiOlsidGFnMSB0YWcyIiwgWyJncm91cGVkX3RhZzEgZ3JvdXBlZF90YWcyIl0sICJ0YWczIHRhZzQiXSB9LCB7ICJ0YWdzIjpbICJuZXh0X2xpbmUgdGFnNSB0YWc2IiwgWyJncm91cGVkX3RhZzMgZ3JvdXBlZF90YWc0Il0gLCAidGFnNyB0YWc4Il0gfSwgeyJuYW1lIjoiYW5vdGhlclx1MDBBMGNhdGVnb3J5IiwgInRhZ3MiOlsidDEgdDIgdDMiXX0gXScsCiAgICBzYW5rYWt1X2NoYW5uZWxfZGFya19jb21wYXRpYmlsaXR5OiBmYWxzZSwKICAgIHZpZXdfaGlzdG9yeV9lbmFibGVkOiBmYWxzZSwKICAgIHZpZXdfaGlzdG9yeTogbmV3IFNldCgpLAogICAgdmlld19oaXN0b3J5X2lkb2w6IG5ldyBTZXQoKSwKICAgIHdpa2lfdGVtcGxhdGU6ICcnLAogICAgcmVjb3JkX3RlbXBsYXRlOgogICAgICBgWwogIFsKICAgICJQb29yIFRhZ2dpbmcgLSBuZXV0cmFsIiwKICAgICJIZWxsby5cXG5cXG5QbGVhc2UgY29tcGx5IHdpdGggb3VyIFtbdXBsb2FkaW5nIHJ1bGVzXV0gd2hlbiBtYWtpbmcgbmV3IHBvc3RzLiBbIyNdJSBvZiB5b3VyIHBvc3RzIGRvIG5vdCBoYXZlIGVub3VnaCB0YWdzIHRvIGdldCByaWQgb2YgdGhlaXIgdGFnbWUgc3RhdHVzLlxcblxcbklmIHlvdSBuZWVkIGhlbHAgZmlndXJpbmcgb3V0IHdoYXQgdGFncyB0byBhZGQsIHRoZXJlJ3MgYSBncmVhdCBbW3RhZyBjaGVja2xpc3RdXSB0aGF0IHdpbGwgZ2l2ZSB5b3UgbG90cyBvZiB0YWdzIHRvIGFkZC5cXG5cXG5VbnRpbCB5b3UgY29ycmVjdCB0aGlzIGlzc3VlLCBJJ2xsIGhhdmUgdG8gcmVxdWVzdCB0aGF0IHlvdSBub3QgdXBsb2FkIGFueXRoaW5nIGVsc2UuIEEgZmFpbHVyZSB0byBjb21wbHkgd2l0aCBvdXIgdGFnZ2luZyBzdGFuZGFyZHMgY2FuIHJlc3VsdCBpbiBmdXJ0aGVyIHN0YWZmIGFjdGlvbiBhZ2FpbnN0IHlvdXIgYWNjb3VudC5cXG5cXG5BcyBhbiBleHRyYSBiaXQgb2YgaW5mb3JtYXRpb24sIHdlIHJlcXVpcmUgMTMgZ2VuZXJhbCB0YWdzIG9uIGNvbG9yIHBvc3RzIGFuZCA3IGdlbmVyYWwgdGFncyBvbiBbW21vbm9jaHJvbWVdXSBwb3N0cyB0byBhdm9pZCByZWNvcmRzIHN1Y2ggYXMgdGhpcyBvbmUuIiwKICAgICJuZXV0cmFsIgogIF0KXWAsCiAgICB0YWdzY3JpcHRfcHJlc2V0czoKICAgICAgYFsKICBbCiAgICAiUmVtb3ZlIHBvdGVudGlhbF9kdXBsaWNhdGUiLAogICAgIi1wb3RlbnRpYWxfZHVwbGljYXRlIgogIF0sCiAgWwogICAgImZ1dGFuYXJpIC0+IG5ld2hhbGYiLAogICAgIm5ld2hhbGYgLWZ1dGFuYXJpIC1mdWxsLXBhY2thZ2VfZnV0YW5hcmkiCiAgXQpdYCwKICAgIHRhZ19jYXRlZ29yeV9jb2xsYXBzZXI6IGZhbHNlLAogICAgdGFnX2NhdGVnb3J5X2NvbGxhcHNlcl9zdHlsZTogMCwKICAgIGNvbGxhcHNlZF90YWdfY2F0ZWdvcmllczogbmV3IFNldCgpLAogICAgYWRkX2ZpbGV0eXBlX3N0YXQ6IHRydWUsCiAgICBtb3ZlX3N0YXRzX3RvX2VkaXRfZm9ybTogZmFsc2UsCiAgICBwb3N0cGFnZV9ob3RrZXlzOiB7CiAgICAgIHI6IG5ldyBIb3RrZXkoJ3Jlc2V0X3NpemUnKSwKICAgICAgZjogbmV3IEhvdGtleSgnZml0X3NpemUnKSwKICAgICAgZzogbmV3IEhvdGtleSgnZml0X2hvcml6b250YWwnKSwKICAgICAgaDogbmV3IEhvdGtleSgnZml0X3ZlcnRpY2FsJyksCiAgICAgIHM6IG5ldyBIb3RrZXkoJ29wZW5fc2ltaWxhcicpLAogICAgICBkOiBuZXcgSG90a2V5KCdvcGVuX2RlbGV0ZScpLAogICAgICB0OiBuZXcgSG90a2V5KCdhZGRfdHJhbnNsYXRpb24nKSwKICAgIH0sCiAgICBpbmRleHBhZ2VfaG90a2V5czogewogICAgICB2OiBuZXcgSG90a2V5KCdzZXQtcGFyZW50X21vZGUnKSwKICAgICAgYzogbmV3IEhvdGtleSgnY2hvb3NlLXBhcmVudF9tb2RlJyksCiAgICAgIHM6IG5ldyBIb3RrZXkoJ3JhdGluZy1zX21vZGUnKSwKICAgICAgcTogbmV3IEhvdGtleSgncmF0aW5nLXFfbW9kZScpLAogICAgICBlOiBuZXcgSG90a2V5KCdyYXRpbmctZV9tb2RlJyksCiAgICB9LAogIH07CgogIGZvciAobGV0IGkgPSAxOyBpIDw9IDEwOyBpKyspIHsKICAgIGNvbnN0IGtleSA9IGkgPCAxMCA/IFN0cmluZyhpKSA6ICcwJzsKICAgIERFRkFVTFRfQ09ORklHLmluZGV4cGFnZV9ob3RrZXlzW2tleV0gPSBuZXcgSG90a2V5KGBzZWxlY3RfdGFnc2NyaXB0X3ByZXNldCR7aX1gKTsKICB9CgogIGNvbnN0IEtFWV9QUkVGSVggPSAnY29uZmlnLic7IC8vIHVzZWQgdG8gYXZvaWQgY29uZmxpY3RzIGluIGxvY2FsU3RvcmFnZSBhbmQgY29uZmlnIGVsZW1lbnQgaWRzCgogIGNvbnN0IGNvbmZpZyA9IE9iamVjdF9jbG9uZShERUZBVUxUX0NPTkZJRyk7IC8vIGxvYWQgZGVmYXVsdAoKICAvLyBhcHBsaWVkIHRvIGxvYWRlZC9zZXQgY29uZmlnIGVudHJpZXMgKGUuZy4gY29uZmlnIGVsZW1lbnRzIHJldHVybiBzdHJpbmdzIHdoZW4gd2UgbmVlZCBudW1iZXJzKQogIGNvbnN0IENPTkZJR19GSVhFUiA9IHsKICAgIHNjYWxlX21vZGU6IE51bWJlciwKICAgIHRhZ19tZW51X2xheW91dDogTnVtYmVyLAogICAgdGFnX2NhdGVnb3J5X2NvbGxhcHNlcl9zdHlsZTogTnVtYmVyLAogICAgaGlnaHJlc19saW1pdDogTnVtYmVyLAogICAgcG9zdF9ib3JkZXJfc3R5bGU6IE51bWJlciwKICB9OwoKICBmdW5jdGlvbiBmaXhfY29uZmlnX2VudHJ5KGtleSwgdmFsdWUpIHsKICAgIGNvbnN0IGZpeGVyID0gQ09ORklHX0ZJWEVSW2tleV07CiAgICByZXR1cm4gKGZpeGVyICE9PSB1bmRlZmluZWQgPyBmaXhlcih2YWx1ZSkgOiB2YWx1ZSk7CiAgfQoKICAvLyBwZXJtYW5lbnRseSBzYXZlIHNldHRpbmcgdG8gbG9jYWxTdG9yYWdlIChhbmQgYnJvYWRjYXN0IHRvIG90aGVyIHRhYnMpCiAgZnVuY3Rpb24gc2F2ZV9zZXR0aW5nKGtleSwgdmFsdWUpIHsKICAgIHZhbHVlID0gZml4X2NvbmZpZ19lbnRyeShrZXksIHZhbHVlKTsKCiAgICBpZiAoSEFTX01PTktFWV9TVE9SQUdFKSB7CiAgICAgIEdNLnNldFZhbHVlKGtleSwgSlNPTl9zdHJpbmdpZnkodmFsdWUsIGpzb25fcmVwbGFjZXIpKS5jYXRjaCgocmVhc29uKSA9PiB7CiAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgYGFkZG9uIGVycm9yOiBjb3VsZG4ndCBzYXZlIHNldHRpbmcgIiR7a2V5fSIsIGNoZWNrIGNvbnNvbGVgLCByZWFzb24pOwogICAgICB9KTsKCiAgICAgIC8vIHVzZSBsb2NhbHN0b3JhZ2UgdG9vIGlmIHdlIGRvbid0IGhhdmUgYSBjaGFuZ2UgbGlzdGVuZXIKICAgICAgaWYgKEdNLmFkZFZhbHVlQ2hhbmdlTGlzdGVuZXIpIHJldHVybjsKICAgIH0KCiAgICBpZiAoIUhBU19MT0NBTF9TVE9SQUdFKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgYFthZGRvbl0gY291bGRuJ3Qgc2F2ZSBzZXR0aW5nICIke0tFWV9QUkVGSVggKyBrZXl9IiB0byBsb2NhbFN0b3JhZ2UuIGNoZWNrIHBlcm1pc3Npb25zYCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cnkgewogICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShLRVlfUFJFRklYICsga2V5LCBKU09OX3N0cmluZ2lmeSh2YWx1ZSwganNvbl9yZXBsYWNlcikpOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgYFthZGRvbiBlcnJvcl0gY291bGRuJ3Qgc2F2ZSBzZXR0aW5nICIke0tFWV9QUkVGSVggKyBrZXl9IiB0byBsb2NhbFN0b3JhZ2UsIGNoZWNrIGNvbnNvbGVgLCBlcnJvcik7CiAgICB9CiAgfQoKICBhc3luYyBmdW5jdGlvbiBsb2FkX2NvbmZpZygpIHsKICAgIGNvbnN0IG1vbmtleV92YWx1ZXMgPSB7fTsKCiAgICBpZiAoSEFTX01PTktFWV9TVE9SQUdFKSB7CiAgICAgIGNvbnN0IHByb21pc2VzID0gW107CiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHsKICAgICAgICBwcm9taXNlcy5wdXNoKEdNLmdldFZhbHVlKGtleSkudGhlbigodmFsdWUpID0+IHsKICAgICAgICAgIG1vbmtleV92YWx1ZXNba2V5XSA9IHZhbHVlOwogICAgICAgIH0pKTsKICAgICAgfQoKICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpOwogICAgfQoKICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHsKICAgICAgbGV0IHZhbHVlID0gY29uZmlnW2tleV07IC8vIGRlZmF1bHQgYWxyZWFkeSBsb2FkZWQKCiAgICAgIGxldCBzdG9yZWRfdmFsdWUgPSBtb25rZXlfdmFsdWVzW2tleV07CgogICAgICBpZiAoc3RvcmVkX3ZhbHVlID09PSB1bmRlZmluZWQgJiYgSEFTX0xPQ0FMX1NUT1JBR0UpCiAgICAgICAgc3RvcmVkX3ZhbHVlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oS0VZX1BSRUZJWCArIGtleSk7CgogICAgICBpZiAoc3RvcmVkX3ZhbHVlICE9PSB1bmRlZmluZWQgJiYgc3RvcmVkX3ZhbHVlICE9PSBudWxsKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZShzdG9yZWRfdmFsdWUsIGpzb25fcmV2aXZlcik7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsIGBbYWRkb24gZXJyb3JdIGNvdWxkbid0IGxvYWQgc2V0dGluZyAiJHtrZXl9ImAsIGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHVwZGF0ZV9zZXR0aW5nKGtleSwgdmFsdWUpOyAvLyBmaXJlIHJlZ2FyZGxlc3MKICAgIH0KICB9CgogIGZ1bmN0aW9uIHN0b3JhZ2VfY2hhbmdlZChrZXksIG9sZF92YWx1ZSwgbmV3X3ZhbHVlLCByZW1vdGUpIHsKICAgIHRyeSB7CiAgICAgIGlmICghcmVtb3RlKSByZXR1cm47IC8vIG9ubHkgbGlzdGVuIHRvIG90aGVyIHRhYnMKCiAgICAgIGlmIChuZXdfdmFsdWUgPT09IHVuZGVmaW5lZCB8fCBuZXdfdmFsdWUgPT09IG51bGwpIHsKICAgICAgICAvLyBlbnRyeSB3YXMgcmVtb3ZlZCwgcmVzZXQgc2V0dGluZyB0byBkZWZhdWx0CiAgICAgICAgdXBkYXRlX3NldHRpbmcoa2V5LCBPYmplY3RfY2xvbmUoREVGQVVMVF9DT05GSUdba2V5XSkpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIGVudHJ5IHdhcyBhZGRlZCBvciBjaGFuZ2VkCiAgICAgICAgY29uc3QgdmFsdWUgPSBKU09OLnBhcnNlKG5ld192YWx1ZSwganNvbl9yZXZpdmVyKTsKCiAgICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgcG9zdCB2aWV3IGhpc3RvcnkgcmFjZSBjb25kaXRpb24KICAgICAgICBpZiAoa2V5ID09PSBISVNUT1JZX0tFWSkgewogICAgICAgICAgY29uc3QgbmV3X2lkcyA9IFNldF9kaWZmZXJlbmNlKHZhbHVlLCBjb25maWdba2V5XSk7CiAgICAgICAgICBpZiAobmV3X2lkcy5zaXplID09PSAwKSByZXR1cm47CgogICAgICAgICAgLy8gaW50ZWdyYXRlIG5ld2x5IHJlY2VpdmVkIHBvc3QgaWRzIGludG8gdmlldyBoaXN0b3J5CiAgICAgICAgICBjb25maWdba2V5XSA9IFNldF91bmlvbih2YWx1ZSwgY29uZmlnW2tleV0pOwoKICAgICAgICAgIC8vIHNhdmUgbmV3IHZpZXcgaGlzdG9yeSBhbmQgYnJvYWRjYXN0IGl0IHRvIG90aGVyIHRhYnMsCiAgICAgICAgICAvLyB3aGljaCBpbiB0dXJuIG1pZ2h0IGJyb2FkY2FzdCB0aGVpciBpZHMgYmFjayB0byB1cwogICAgICAgICAgc2F2ZV9zZXR0aW5nKGtleSwgdmFsdWUpOwoKICAgICAgICAgIC8vIGxpdmUgdXBkYXRlIHRodW1ibmFpbHMKICAgICAgICAgIGlmICghaXNfcGVyc29uYWxfcG9zdF9wYWdlKCkpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBpZCBvZiBuZXdfaWRzKSB7CiAgICAgICAgICAgICAgY29uc3QgdGh1bWJzID0gR2VuZXJhbC50aHVtYm5haWxfY2FjaGUuZ2V0KGlkKTsKICAgICAgICAgICAgICBpZiAodGh1bWJzID09PSB1bmRlZmluZWQpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRodW1iIG9mIHRodW1icykKICAgICAgICAgICAgICAgIGZhZGVvdXRfcG9zdCh0aHVtYik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm47IC8vIGRvbid0IGNhbGwgdXBkYXRlX3NldHRpbmcoKQogICAgICAgIH0KCiAgICAgICAgdXBkYXRlX3NldHRpbmcoa2V5LCB2YWx1ZSk7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdzdG9yYWdlX2NoYW5nZWQoKSBmYWlsZWQsIGNoZWNrIGNvbnNvbGUnLCBlcnJvcik7CiAgICB9CiAgfQoKICAvLyBsb2NhbFN0b3JhZ2UgZnJvbSBvdGhlciB0YWJzIGNoYW5nZWQKICBmdW5jdGlvbiBsb2NhbF9zdG9yYWdlX2NoYW5nZWQoZSkgewogICAgaWYgKGUuc3RvcmFnZUFyZWEgIT09IGxvY2FsU3RvcmFnZSkgcmV0dXJuOwogICAgaWYgKGUua2V5ID09PSBudWxsKSByZXR1cm47IC8vIGlnbm9yZSBleHRlcm5hbCBsb2NhbFN0b3JhZ2UuY2xlYXIoKSBmb3Igbm93CgogICAgLy8gb25seSBsb29rIGF0IFNhbmtha3VBZGRvbiBzcGVjaWZpYyBjaGFuZ2VzCiAgICBpZiAoIWUua2V5LnN0YXJ0c1dpdGgoS0VZX1BSRUZJWCkpIHJldHVybjsKICAgIGNvbnN0IGtleSA9IGUua2V5LnN1YnN0cmluZyhLRVlfUFJFRklYLmxlbmd0aCk7CgogICAgc3RvcmFnZV9jaGFuZ2VkKGtleSwgZS5vbGRWYWx1ZSwgZS5uZXdWYWx1ZSwgdHJ1ZSk7CiAgfQoKICBmdW5jdGlvbiB1cGRhdGVfc2V0dGluZyhrZXksIHZhbHVlKSB7CiAgICBjb25maWdba2V5XSA9IGZpeF9jb25maWdfZW50cnkoa2V5LCB2YWx1ZSk7CgogICAgaWYgKGtleSA9PT0gJ3NjYWxlX29uX3Jlc2l6ZScpIHsKICAgICAgaWYgKHZhbHVlKSBhZGRfc2NhbGVfb25fcmVzaXplX2xpc3RlbmVyKCk7CiAgICAgIGVsc2UgICAgICAgcmVtb3ZlX3NjYWxlX29uX3Jlc2l6ZV9saXN0ZW5lcigpOwogICAgfQoKICAgIHVwZGF0ZV9jb25maWdfZGlhbG9nX2J5X2tleShrZXkpOwoKICAgIGlmIChrZXkgPT09ICdoaWRlX2hlYWRlcmxvZ28nKSB7CiAgICAgIHVwZGF0ZV9oZWFkZXJsb2dvKCk7CiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NvbGxhcHNlZF90YWdfY2F0ZWdvcmllcycpIHsKICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjb2xsYXBzZXJfbWFwLmtleXMoKSkKICAgICAgICBjb2xsYXBzZV90YWdfY2F0ZWdvcnkoY2F0ZWdvcnksIGNvbmZpZy5jb2xsYXBzZWRfdGFnX2NhdGVnb3JpZXMuaGFzKGNhdGVnb3J5KSwgZmFsc2UpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gcmVzZXRfc2V0dGluZyhrZXkpIHsKICAgIGlmIChIQVNfTU9OS0VZX1NUT1JBR0UpIEdNLmRlbGV0ZVZhbHVlKGtleSk7CiAgICBpZiAoSEFTX0xPQ0FMX1NUT1JBR0UpIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEtFWV9QUkVGSVggKyBrZXkpOyAvLyBhbHNvIGRlbGV0ZSBpZiBVU0VfTU9OS0VZX1NUT1JBR0UKICAgIHVwZGF0ZV9zZXR0aW5nKGtleSwgT2JqZWN0X2Nsb25lKERFRkFVTFRfQ09ORklHW2tleV0pKTsKICB9CgogIGZ1bmN0aW9uIHJlc2V0X2NvbmZpZygpIHsKICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHsKICAgICAgLy8gZG9uJ3QgY2xlYXIgdGhlIGhpc3Rvcnkgc28gdGhlIGNsZWFyIGhpc3RvcnkgYnV0dG9uIG1ha2VzIG1vcmUgc2Vuc2UKICAgICAgaWYgKGtleSA9PT0gJ3ZpZXdfaGlzdG9yeScgfHwga2V5ID09PSAndmlld19oaXN0b3J5X2lkb2wnKSBjb250aW51ZTsKICAgICAgLy8gZG9uJ3QgcmVzZXQgdGhlIGNvbW1vbiB0YWdzIGxpc3Qgb2YgdGhlIG90aGVyIHNpdGUKICAgICAgaWYgKGtleSA9PT0gT1RIRVJfQ09NTU9OX1RBR1NfS0VZKSBjb250aW51ZTsKCiAgICAgIHJlc2V0X3NldHRpbmcoa2V5KTsKICAgIH0KICB9CgoKICAvLyB0ZW1wbGF0ZXMgZm9yIHRoZSBjb25maWcgZGlhbG9nCiAgY29uc3QgQ09ORklHX1RBQlNfVEVNUExBVEUgPSB7CiAgICBnZW5lcmFsOiB7CiAgICAgIG5hbWU6ICdHZW5lcmFsJywKICAgICAgY2F0ZWdvcmllczogWydwb3N0JywgJ2dlbmVyYWwnXSwKICAgIH0sCiAgICBlZGl0aW5nOiB7CiAgICAgIG5hbWU6ICdFZGl0aW5nJywKICAgICAgY2F0ZWdvcmllczogWydlZGl0aW5nJ10sCiAgICB9LAogICAgaG90a2V5czogewogICAgICBuYW1lOiAnSG90a2V5cycsCiAgICAgIGNhdGVnb3JpZXM6IFsncG9zdHBhZ2VfaG90a2V5cycsICdpbmRleHBhZ2VfaG90a2V5cyddLAogICAgfSwKICB9OwoKICBjb25zdCBDT05GSUdfQ0FURUdPUllfVEVNUExBVEUgPSB7CiAgICBwb3N0OiB7CiAgICAgIG5hbWU6ICdJbWFnZS9WaWRlbycsCiAgICAgIGVudHJpZXM6IFsKICAgICAgICAnc2Nyb2xsX3RvX2ltYWdlJywKICAgICAgICAnc2Nyb2xsX3RvX2ltYWdlX2NlbnRlcicsCiAgICAgICAgJ3NjYWxlX2ltYWdlJywKICAgICAgICAnc2NhbGVfb25seV9kb3duc2NhbGUnLAogICAgICAgICdzY2FsZV9mbGFzaCcsCiAgICAgICAgJ3NjYWxlX29uX3Jlc2l6ZScsCiAgICAgICAgJ3NjYWxlX21vZGUnLAogICAgICAgICdsb2FkX2hpZ2hyZXMnLAogICAgICAgICd2aWRlb19wYXVzZScsCiAgICAgICAgJ3ZpZGVvX211dGUnLAogICAgICAgICdzZXRfdmlkZW9fdm9sdW1lJywKICAgICAgICAndmlkZW9fY29udHJvbHMnLAogICAgICBdLAogICAgfSwKICAgIGdlbmVyYWw6IHsKICAgICAgbmFtZTogJ0dlbmVyYWwnLAogICAgICBlbnRyaWVzOiBbCiAgICAgICAgJ3RhZ19zZWFyY2hfYnV0dG9ucycsCiAgICAgICAgJ29yX3RhZ19zZWFyY2hfYnV0dG9uJywKICAgICAgICAndGFnX2NhdGVnb3J5X2NvbGxhcHNlcicsCiAgICAgICAgJ3RhZ19jYXRlZ29yeV9jb2xsYXBzZXJfc3R5bGUnLAogICAgICAgICdzaG93X3NwZWFrZXJfaWNvbicsCiAgICAgICAgJ3Nob3dfYW5pbWF0ZWRfaWNvbicsCiAgICAgICAgJ3Nob3dfcmF0aW5nc19pY29uJywKICAgICAgICAndmlld19oaXN0b3J5X2VuYWJsZWQnLAogICAgICAgICdwb3N0X2JvcmRlcl9zdHlsZScsCiAgICAgICAgJ2hpZGVfaGVhZGVybG9nbycsCiAgICAgICAgJ3Nhbmtha3VfY2hhbm5lbF9kYXJrX2NvbXBhdGliaWxpdHknLAogICAgICBdLAogICAgfSwKICAgIGVkaXRpbmc6IHsKICAgICAgbmFtZTogJ0VkaXRpbmcnLAogICAgICBlbnRyaWVzOiBbCiAgICAgICAgJ2FkZF9maWxldHlwZV9zdGF0JywKICAgICAgICAnbW92ZV9zdGF0c190b19lZGl0X2Zvcm0nLAogICAgICAgICdzZXRwYXJlbnRfZGVsZXRlcG90ZW50aWFsZHVwbGljYXRlJywKICAgICAgICAnZWRpdGZvcm1fZGVsZXRldXNlbGVzc3RhZ3MnLAogICAgICAgICd0YWdfbWVudScsCiAgICAgICAgQ09NTU9OX1RBR1NfS0VZLAogICAgICAgICd0YWdfbWVudV9sYXlvdXQnLAogICAgICAgICd3aWtpX3RlbXBsYXRlJywKICAgICAgICAncmVjb3JkX3RlbXBsYXRlJywKICAgICAgICAndGFnc2NyaXB0X3ByZXNldHMnLAogICAgICBdLAogICAgfSwKICAgIHBvc3RwYWdlX2hvdGtleXM6IHsKICAgICAgbmFtZTogJ1Bvc3QgUGFnZSBIb3RrZXlzJywKICAgICAgZW50cmllczogW10sCiAgICB9LAogICAgaW5kZXhwYWdlX2hvdGtleXM6IHsKICAgICAgbmFtZTogJ0luZGV4IFBhZ2UgSG90a2V5cycsCiAgICAgIGVudHJpZXM6IFtdLAogICAgfSwKICB9OwoKICAvLyBleHBhbmQgaG90a2V5cwogIGZvciAoY29uc3QgW3BhZ2UsIGFjdGlvbnNdIG9mIE9iamVjdC5lbnRyaWVzKEhPVEtFWV9BQ1RJT05TKSkgewogICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGFjdGlvbnMpKSB7CiAgICAgIENPTkZJR19DQVRFR09SWV9URU1QTEFURVtgJHtwYWdlfV9ob3RrZXlzYF0uZW50cmllcy5wdXNoKGAke3BhZ2V9X2hvdGtleXMuJHtuYW1lfWApOwogICAgfQogIH0KCiAgY29uc3QgU0VUVElOR1NfVEVNUExBVEUgPSB7CiAgICBzY3JvbGxfdG9faW1hZ2U6ICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ1Njcm9sbCB0byBpbWFnZS92aWRlbyB3aGVuIG9wZW5pbmcgcG9zdCd9LAogICAgc2Nyb2xsX3RvX2ltYWdlX2NlbnRlcjogICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdTY3JvbGwgdG8gY2VudGVyIG9mIGltYWdlL3ZpZGVvLCBlbHNlIHNjcm9sbCB0byB0b3AnfSwKICAgIHNjYWxlX2ltYWdlOiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnU2NhbGUgaW1hZ2UvdmlkZW8gd2hlbiBvcGVuaW5nIHBvc3QnfSwKICAgIHNjYWxlX29ubHlfZG93bnNjYWxlOiAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnT25seSBkb3duc2NhbGUnfSwKICAgIHNjYWxlX2ZsYXNoOiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnQWxzbyBzY2FsZSBmbGFzaCB2aWRlb3MnfSwKICAgIHNjYWxlX29uX3Jlc2l6ZTogICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnU2NhbGUgaW1hZ2Ugb24gd2luZG93IHJlc2l6ZScsIHRpdGxlOiAnVGhpcyB1c2VzIHRoZSBcJ3NjYWxlIGltYWdlIG1vZGVcJyBzZXR0aW5nLCBzbyBpdCBkb2VzblwndCB3b3JrIHdlbGwgd2hlbiB1c2luZyB0aGUgbWFudWFsIHNjYWxpbmcgYWN0aW9ucy4nfSwKICAgIHNjYWxlX21vZGU6ICAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnc2VsZWN0JywgICBkZXNjOiAnU2NhbGUgaW1hZ2UvdmlkZW8gbW9kZTogJywgb3B0aW9uczogezA6ICdGaXQgdG8gd2luZG93JywgMTogJ0ZpdCBob3Jpem9udGFsbHknLCAyOiAnRml0IHZlcnRpY2FsbHknfX0sCiAgICBsb2FkX2hpZ2hyZXM6ICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0xvYWQgb3JpZ2luYWwgaW1hZ2UgaWYgc21hbGxlciB0aGFuICcsIHRpdGxlOiAnU2V0IHRvIDAgYnl0ZXMgdG8gYWx3YXlzIGxvYWQnfSwKICAgIHZpZGVvX3BhdXNlOiAgICAgICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnUGF1c2UgKG5vbi1mbGFzaCkgdmlkZW9zKid9LAogICAgdmlkZW9fbXV0ZTogICAgICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdNdXRlIChub24tZmxhc2gpIHZpZGVvcyonfSwKICAgIHNldF92aWRlb192b2x1bWU6ICAgICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnU2V0IChub24tZmxhc2gpIHZpZGVvIHZvbHVtZSB0bzogJ30sCiAgICB2aWRlb19jb250cm9sczogICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ1Nob3cgdmlkZW8gY29udHJvbHMqJ30sCiAgICB0YWdfc2VhcmNoX2J1dHRvbnM6ICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0VuYWJsZSArIC0gdGFnIHNlYXJjaCBidXR0b25zKid9LAogICAgb3JfdGFnX3NlYXJjaF9idXR0b246ICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICdBbHNvIGFkZCB+IHRhZyBzZWFyY2ggYnV0dG9uKid9LAogICAgc2hvd19zcGVha2VyX2ljb246ICAgICAgICAgICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6IGBTaG93ICR7U1BFQUtFUl9TVkd9IGljb24gb24gdGh1bWJuYWlsIGlmIGl0IGhhcyBhdWRpbypgfSwKICAgIHNob3dfYW5pbWF0ZWRfaWNvbjogICAgICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiBgU2hvdyAke0FOSU1BVEVEX1NWR30gaWNvbiBvbiB0aHVtYm5haWwgaWYgaXQgaXMgYW5pbWF0ZWQgKCR7U1BFQUtFUl9TVkd9ICBvdmVycmlkZXMgJHtBTklNQVRFRF9TVkd9ICkqYH0sCiAgICBzaG93X3JhdGluZ3NfaWNvbjogICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogYFNob3cgcmF0aW5ncyBpY29uICgke1NBRkVfU1ZHfSwgJHtRVUVTVElPTkFCTEVfU1ZHfSwgJHtFWFBMSUNJVF9TVkd9KSBvbiBwb3N0IHRodW1ibmFpbHMqYH0sCiAgICB2aWV3X2hpc3RvcnlfZW5hYmxlZDogICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0ZhZGUgb3V0IHRodW1ibmFpbHMgb2Ygdmlld2VkIHBvc3RzIChlbmFibGVzIHBvc3QgdmlldyBoaXN0b3J5KSonfSwKICAgIHBvc3RfYm9yZGVyX3N0eWxlOiAgICAgICAgICAgICAgICAgIHt0eXBlOiAnc2VsZWN0JywgICBkZXNjOiAnUG9zdCBib3JkZXIgc3R5bGU6ICcsIG9wdGlvbnM6IHswOiAnUHJpb3JpdGl6ZSBibHVlIFwndW5hcHByb3ZlZFwnIGJvcmRlcicsIDE6ICdQcmlvcml6aXRlIHllbGxvdy9ncmVlbiBcJ2hhcyBwYXJlbnQgLyBjaGlsZHJlblwnIGJvcmRlcnMnLCAyOiAnU2hvdyBib3RoIGJvcmRlcnMnfX0sCiAgICBzZXRwYXJlbnRfZGVsZXRlcG90ZW50aWFsZHVwbGljYXRlOiB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0RlbGV0ZSBwb3RlbnRpYWxfZHVwbGljYXRlIHRhZyB3aGVuIHVzaW5nICJTZXQgUGFyZW50Iid9LAogICAgZWRpdGZvcm1fZGVsZXRldXNlbGVzc3RhZ3M6ICAgICAgICAge3R5cGU6ICdjaGVja2JveCcsIGRlc2M6ICciU2F2ZSBjaGFuZ2VzIiBidXR0b24gZGVsZXRlcyB1c2VsZXNzX3RhZ3MgdGFnIChpZiB0aGVyZSBoYXZlIGJlZW4gY2hhbmdlcyknfSwKICAgIHRhZ19jYXRlZ29yeV9jb2xsYXBzZXI6ICAgICAgICAgICAgIHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnRW5hYmxlIHRhZyBjYXRlZ29yeSBjb2xsYXBzZXJzIG9uIHBvc3QgcGFnZXMqJ30sCiAgICB0YWdfY2F0ZWdvcnlfY29sbGFwc2VyX3N0eWxlOiAgICAgICB7dHlwZTogJ3NlbGVjdCcsICAgZGVzYzogJ1RhZyBjYXRlZ29yeSBjb2xsYXBzZXIgc3R5bGU6ICcsIG9wdGlvbnM6IHswOiAnQ29tcGFjdCcsIDE6ICdXaXRoIGNhdGVnb3J5IG5hbWUnfX0sCiAgICBoaWRlX2hlYWRlcmxvZ286ICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0hpZGUgaGVhZGVyIGxvZ28nfSwKICAgIHNhbmtha3VfY2hhbm5lbF9kYXJrX2NvbXBhdGliaWxpdHk6IHt0eXBlOiAnY2hlY2tib3gnLCBkZXNjOiAnR2FsaW5vYVwncyBTYW5rYWt1IENoYW5uZWwgRGFyayBjb21wYXRpYmlsdHkqJ30sCiAgICB0YWdfbWVudTogICAgICAgICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0FjdGl2YXRlIHRhZyBtZW51Kid9LAogICAgW0NPTU1PTl9UQUdTX0tFWV06ICAgICAgICAgICAgICAgICAge3R5cGU6ICd0ZXh0JywgICAgIGRlc2M6ICdDb21tb24gdGFncyBsaXN0IChKU09OIGZvcm1hdCk6J30sCiAgICB0YWdfbWVudV9sYXlvdXQ6ICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ3NlbGVjdCcsICAgZGVzYzogJ1RhZyBtZW51IGxheW91dDogJywgb3B0aW9uczogezA6ICdOb3JtYWwnLCAxOiAnVmVydGljYWxseSBjb21wYWN0J319LAogICAgd2lraV90ZW1wbGF0ZTogICAgICAgICAgICAgICAgICAgICAge3R5cGU6ICd0ZXh0JywgICAgIGRlc2M6ICdXaWtpIHRlbXBsYXRlOicsIHRpdGxlOiAnVGV4dCB0aGF0IHdpbGwgYmUgYmUgc2hvd24gaW4gYSBzZXBhcmF0ZSB0ZXh0YXJlYSBvbiB3aWtpIGFkZC9lZGl0IHBhZ2VzIHNvIGl0IGNhbiBlYXNpbHkgYmUgY29waWVkJ30sCiAgICByZWNvcmRfdGVtcGxhdGU6ICAgICAgICAgICAgICAgICAgICB7dHlwZTogJ3RleHQnLCAgICAgZGVzYzogJ1JlY29yZCB0ZW1wbGF0ZXMgKEpTT04gZm9ybWF0KTonLCB0aXRsZTogJ0EgbGlzdCBvZiB0ZW1wbGF0ZXMgdG8gYmUgY2hvc2VuIGZyb20gYSBkcm9wZG93biBtZW51IG9uIHRoZSByZWNvcmQgYWRkIHBhZ2UsIGVhY2ggZW50cnkgaGFzIGEgdGl0bGUgZm9sbG93ZWQgYnkgdGhlIGFjdHVhbCBjb250ZW50Lid9LAogICAgdGFnc2NyaXB0X3ByZXNldHM6ICAgICAgICAgICAgICAgICAge3R5cGU6ICd0ZXh0JywgICAgIGRlc2M6ICdUYWcgc2NyaXB0IHByZXNldHMgKEpTT04gZm9ybWF0KTonLCB0aXRsZTogJ0EgbGlzdCBvZiB0YWcgc2NyaXB0cyB0byBiZSBjaG9zZW4gZnJvbSBhIGRyb3Bkb3duIG1lbnUgYmVsb3cgIk1vZGUiIChwdXQgW10gdG8gZGlzYWJsZSkuJ30sCiAgICBhZGRfZmlsZXR5cGVfc3RhdDogICAgICAgICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ0FkZCBmaWxlIHR5cGUgdG8gcG9zdCAiRGV0YWlscyIqJ30sCiAgICBtb3ZlX3N0YXRzX3RvX2VkaXRfZm9ybTogICAgICAgICAgICB7dHlwZTogJ2NoZWNrYm94JywgZGVzYzogJ01vdmUgcG9zdCAiRGV0YWlscyIgdG8gdGhlIHJpZ2h0IG9mIHRoZSBlZGl0IGZvcm0qJ30sCiAgICAvLyBUT0RPIHRoaXMgaXMgYSBtZXNzLCBob3RrZXlzIHNob3VsZCBoYXZlIGEgZGVzY3JpcHRpb24KICAgICdwb3N0cGFnZV9ob3RrZXlzLnJlc2V0X3NpemUnOiAgICAgIHt0eXBlOiAnaG90a2V5JywgICBkZXNjOiAnUmVzZXQgSW1hZ2UgU2l6ZSd9LAogICAgJ3Bvc3RwYWdlX2hvdGtleXMuZml0X3NpemUnOiAgICAgICAge3R5cGU6ICdob3RrZXknLCAgIGRlc2M6ICdGaXQgSW1hZ2UnfSwKICAgICdwb3N0cGFnZV9ob3RrZXlzLmZpdF9ob3Jpem9udGFsJzogIHt0eXBlOiAnaG90a2V5JywgICBkZXNjOiAnRml0IEltYWdlIChIb3Jpem9udGFsKSd9LAogICAgJ3Bvc3RwYWdlX2hvdGtleXMuZml0X3ZlcnRpY2FsJzogICAge3R5cGU6ICdob3RrZXknLCAgIGRlc2M6ICdGaXQgSW1hZ2UgKFZlcnRpY2FsKSd9LAogICAgJ3Bvc3RwYWdlX2hvdGtleXMub3Blbl9zaW1pbGFyJzogICAge3R5cGU6ICdob3RrZXknLCAgIGRlc2M6ICdGaW5kIFNpbWlsYXInfSwKICAgICdwb3N0cGFnZV9ob3RrZXlzLm9wZW5fZGVsZXRlJzogICAgIHt0eXBlOiAnaG90a2V5JywgICBkZXNjOiAnRGVsZXRlIFBvc3QnfSwKICAgICdwb3N0cGFnZV9ob3RrZXlzLmFkZF90cmFuc2xhdGlvbic6IHt0eXBlOiAnaG90a2V5JywgICBkZXNjOiAnQWRkIFRyYW5zbGF0aW9uJ30sCiAgfTsKCiAgZm9yIChjb25zdCBbbW9kZSwgZGVzY10gb2YgT2JqZWN0LmVudHJpZXMoUE9TVF9NT0RFX0RFU0NSSVBUSU9OUykpIHsKICAgIFNFVFRJTkdTX1RFTVBMQVRFW2BpbmRleHBhZ2VfaG90a2V5cy4ke21vZGV9X21vZGVgXSA9IHt0eXBlOiAnaG90a2V5JywgZGVzYzogZGVzYyArICcgbW9kZSd9OwogIH0KCiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTA7IGkrKykgewogICAgU0VUVElOR1NfVEVNUExBVEVbYGluZGV4cGFnZV9ob3RrZXlzLnNlbGVjdF90YWdzY3JpcHRfcHJlc2V0JHtpfWBdID0ge3R5cGU6ICdob3RrZXknLCBkZXNjOiBgU2VsZWN0IFRhZyBTY3JpcHQgVGVtcGxhdGUgIyR7aX1gfTsKICB9CgogIC8vIHdoZXRoZXIgYSBjb25maWcgZWxlbWVudCdzIHZhbHVlIGFyZSBhY2Nlc3NlZCB2aWEgJy52YWx1ZScgKG9yIG90aGVyd2lzZSAnLmNoZWNrZWQnKQogIGZ1bmN0aW9uIGlzX3ZhbHVlX2VsZW1lbnQoa2V5KSB7CiAgICAvLyBoYXJkY29kZWQgZWxlbWVudHMKICAgIGlmIChrZXkgPT09ICd2aWRlb192b2x1bWUnKSAgIHJldHVybiB0cnVlOwogICAgaWYgKGtleSA9PT0gJ2hpZ2hyZXNfbGltaXQnKSAgcmV0dXJuIHRydWU7CiAgICBpZiAoa2V5ID09PSAndGFnX21lbnVfc2NhbGUnKSByZXR1cm4gdHJ1ZTsgLy8gZG9lc24ndCBleGlzdCBhcyBhbiBlbGVtZW50LCBidXQgaXQgd291bGQgYmUgJy52YWx1ZScgdHlwZQoKICAgIGNvbnN0IHR5cGUgPSBTRVRUSU5HU19URU1QTEFURVtrZXldLnR5cGU7CiAgICByZXR1cm4gKHR5cGUgPT09ICdzZWxlY3QnIHx8IHR5cGUgPT09ICd0ZXh0Jyk7CiAgfQoKICAvLyBjYWxscyBmKGNmZ19lbGVtLCBrZXksIGdldF92YWx1ZSkgZm9yIGVhY2ggZXhpc3RpbmcgY29uZmlnIGVsZW1lbnQKICBmdW5jdGlvbiBmb3JlYWNoX2NvbmZpZ19lbGVtZW50KGYpIHsKICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHsKICAgICAgY29uc3QgY2ZnX2VsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChLRVlfUFJFRklYICsga2V5KTsKICAgICAgaWYgKGNmZ19lbGVtID09PSBudWxsKSBjb250aW51ZTsKCiAgICAgIGlmIChpc192YWx1ZV9lbGVtZW50KGtleSkpIGYoY2ZnX2VsZW0sIGtleSwgKCkgPT4gY2ZnX2VsZW0udmFsdWUpOwogICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICBmKGNmZ19lbGVtLCBrZXksICgpID0+IGNmZ19lbGVtLmNoZWNrZWQpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdXBkYXRlX2NvbmZpZ19kaWFsb2dfYnlfa2V5KGtleSkgewogICAgaWYgKGtleS5lbmRzV2l0aCgnX2hvdGtleXMnKSkgewogICAgICB1cGRhdGVfaG90a2V5cyhrZXkuc2xpY2UoMCwgLSdfaG90a2V5cycubGVuZ3RoKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBjb25zdCBjZmdfZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEtFWV9QUkVGSVggKyBrZXkpOwogICAgaWYgKGNmZ19lbGVtICE9PSBudWxsKSB7CiAgICAgIGlmIChpc192YWx1ZV9lbGVtZW50KGtleSkpIGNmZ19lbGVtLnZhbHVlICAgPSBjb25maWdba2V5XTsKICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgY2ZnX2VsZW0uY2hlY2tlZCA9IGNvbmZpZ1trZXldOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdXBkYXRlX2NvbmZpZ19kaWFsb2coKSB7CiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKSB1cGRhdGVfY29uZmlnX2RpYWxvZ19ieV9rZXkoa2V5KTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZV9oZWFkZXJsb2dvKCkgewogICAgaGlkZV9oZWFkZXJsb2dvKGNvbmZpZy5oaWRlX2hlYWRlcmxvZ28pOwogIH0KCiAgZnVuY3Rpb24gc2hvd19jb25maWdfZGlhbG9nKGJvb2wpIHsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjZmdfZGlhbG9nJykuc3R5bGUuZGlzcGxheSA9IChib29sID8gJ2Jsb2NrJyA6ICdub25lJyk7CiAgfQoKCiAgLyoqKioqKioqKioqKioqKioqKioqLwogIC8qIGhlbHBlciBmdW5jdGlvbnMgKi8KICAvKioqKioqKioqKioqKioqKioqKiovCgogIGNvbnN0IEVNUFRZX0lNQUdFID0gJ2RhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBQUFBQUNINUJBRUtBQUVBTEFBQUFBQUJBQUVBQUFJQ1RBRUFPdz09JzsKCiAgY2xhc3MgVGFncyB7IC8vIHRoaW4gd3JhcHBlciBhcm91bmQgU2V0CiAgICB0YWdzOwoKICAgIGNvbnN0cnVjdG9yKHRhZ19zdHIpIHsKICAgICAgdGFnX3N0ciA/Pz0gJyc7CiAgICAgIHRoaXMudGFncyA9IG5ldyBTZXQodGFnX3N0ci50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcih0ID0+IHQubGVuZ3RoICE9PSAwKSk7CiAgICB9CgogICAgc3RhdGljIGludmVydCh0YWcpIHsKICAgICAgY29uc3QgbWludXMgPSB0YWcuc3RhcnRzV2l0aCgnLScpOwogICAgICByZXR1cm4gbWludXMgPyB0YWcuc3Vic3RyaW5nKDEpIDogYC0ke3RhZ31gOwogICAgfQoKICAgIGhhcyh0YWcpIHsKICAgICAgcmV0dXJuIHRoaXMudGFncy5oYXModGFnKTsKICAgIH0KCiAgICBhZGQodGFnKSB7CiAgICAgIHRoaXMudGFncy5hZGQodGFnKTsKICAgICAgdGhpcy50YWdzLmRlbGV0ZShUYWdzLmludmVydCh0YWcpKTsKICAgIH0KCiAgICByZW1vdmUodGFnKSB7CiAgICAgIHRoaXMudGFncy5kZWxldGUodGFnKTsKICAgIH0KCiAgICB0b2dnbGUodGFnKSB7CiAgICAgIGlmICh0aGlzLmhhcyh0YWcpKSB7CiAgICAgICAgdGhpcy5yZW1vdmUodGFnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmFkZCh0YWcpOwogICAgICB9CiAgICB9CgogICAgZmlsdGVyKHByZWQpIHsKICAgICAgdGhpcy50YWdzID0gbmV3IFNldChbLi4udGhpcy50YWdzXS5maWx0ZXIocHJlZCkpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KCiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHsKICAgICAgcmV0dXJuIHRoaXMudGFncy52YWx1ZXMoKTsKICAgIH0KCiAgICB0b0FycmF5KCkgewogICAgICByZXR1cm4gWy4uLnRoaXMudGFnc107CiAgICB9CgogICAgdG9TdHJpbmcoKSB7CiAgICAgIHJldHVybiBbLi4udGhpcy50YWdzXS5qb2luKCcgJyk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzZXRfY29va2llKG5hbWUsIHZhbHVlLCB2YWxpZF9mb3JfZGF5cyA9IDM2NSkgewogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7CiAgICBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgKyAodmFsaWRfZm9yX2RheXMgKiAyNCAqIDYwICogNjAgKiAxMDAwKSk7CiAgICBkb2N1bWVudC5jb29raWUgPSBgJHtuYW1lfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSl9OyBleHBpcmVzPSR7ZGF0ZS50b1VUQ1N0cmluZygpfTsgcGF0aD0vOyBTYW1lU2l0ZT1MYXhgOwogIH0KCiAgZnVuY3Rpb24gZ2V0X2Nvb2tpZShuYW1lKSB7CiAgICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7CiAgICBmb3IgKGNvbnN0IGNvb2tpZSBvZiBjb29raWVzKSB7CiAgICAgIGNvbnN0IGt2ID0gY29va2llLnNwbGl0KCc9Jyk7CiAgICAgIGlmIChrdi5sZW5ndGggPT09IDIgJiYga3ZbMF0udHJpbSgpID09PSBuYW1lKSB7CiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChrdlsxXSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAnJzsKICB9CgogIGZ1bmN0aW9uIHNsZWVwKG1zKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTsKICB9CgogIC8vIGhlbHBlciBmdW5jdGlvbiB0byBtb2RpZnkgbm9kZXMgb24gY3JlYXRpb24KICBmdW5jdGlvbiBtb2RpZnlfbm9kZXMobm9kZV9zZWxlY3Rvciwgbm9kZV9tb2RpZmllciwgcm9vdF9zZWxlY3RvcikgewogICAgLy8gTXV0YXRpb25PYnNlcnZlciAod2l0aCBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUpIHdpbGwgb2JzZXJ2ZSBldmVyeSBzaW5nbGUgbm9kZSBmcm9tIHRoZSBIVE1MIGFzICJhZGRlZCIsCiAgICAvLyBidXQgZm9yIHNjcmlwdC1pbnNlcnRlZCBub2RlIHRyZWVzLCBvbmx5IHRoZSByb290IG5vZGUgaXMgY291bnRlZC4KICAgIC8vIEFzIGEgd29ya2Fyb3VuZCwgYWxsIHN1Ym5vZGVzIG9mIG5vZGVzIG1hdGNoaW5nIHJvb3Rfc2VsZWN0b3Igd2lsbCBiZSBjaGVja2VkIG1hbnVhbGx5CgogICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4gewogICAgICAvLyBmb3IgZWFjaCBhZGRlZCBlbGVtZW50CiAgICAgIGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7CiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG11dGF0aW9uLmFkZGVkTm9kZXMpIHsKICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkgY29udGludWU7CgogICAgICAgICAgLy8gY2hlY2sgZm9yIG1hdGNoCiAgICAgICAgICBpZiAobm9kZS5tYXRjaGVzKG5vZGVfc2VsZWN0b3IpICYmIG5vZGVfbW9kaWZpZXIobm9kZSwgb2JzZXJ2ZXIpKSB7IC8vIGFyZSB3ZSBkb25lPwogICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBjaGVjayBhbGwgc3Vibm9kZXMgb2Ygbm9kZXMgbWF0Y2hpbmcgcm9vdF9zZWxlY3RvcgogICAgICAgICAgaWYgKHJvb3Rfc2VsZWN0b3IgJiYgbm9kZS5tYXRjaGVzKHJvb3Rfc2VsZWN0b3IpKSB7CiAgICAgICAgICAgIGZvciAoY29uc3Qgc3Vibm9kZSBvZiBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCcqJykpIHsKICAgICAgICAgICAgICBpZiAoc3Vibm9kZS5tYXRjaGVzKG5vZGVfc2VsZWN0b3IpICYmIG5vZGVfbW9kaWZpZXIoc3Vibm9kZSwgb2JzZXJ2ZXIpKSB7CiAgICAgICAgICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTsKCiAgICAvLyBpdCdzIHBvc3NpYmxlIHdlIGFyZSB0b28gbGF0ZSB0byBvYnNlcnZlIHRoZSBlbGVtZW50J3MgY29uc3RydWN0aW9uLCBzbyBsb29rIGZvciBpdCBhZnRlcndhcmRzIGltbWVkaWF0ZWx5CiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChub2RlX3NlbGVjdG9yKSkgewogICAgICBpZiAobm9kZV9tb2RpZmllcihub2RlLCBvYnNlcnZlcikpIHsKICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIGNhbGwgYWRqdXN0X2NzcygpIGFzIGVhcmx5IGFzIHBvc3NpYmxlCiAgZnVuY3Rpb24gbW9kaWZ5X2NzcygpIHsKICAgIGNvbnN0IHRyeV9hZGp1c3RfY3NzID0gKCkgPT4gewogICAgICBpZiAoZG9jdW1lbnQuYm9keSAhPT0gbnVsbCkgeyAvLyB3YWl0IGZvciBib2R5IHRvIGd1YXJhbnRlZSBoZWFkIHdhcyBsb2FkZWQKICAgICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgYWRqdXN0X2NzcygpOwogICAgICB9CiAgICB9OwoKICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodHJ5X2FkanVzdF9jc3MpOwogICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7CiAgICB0cnlfYWRqdXN0X2NzcygpOwogIH0KCiAgZnVuY3Rpb24gZ2V0X3Njcm9sbGJhcl93aWR0aCgpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgZGl2LnN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CiAgICBjb25zdCBzY3JvbGxiYXJfd2lkdGggPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7CiAgICBkaXYucmVtb3ZlKCk7CiAgICByZXR1cm4gc2Nyb2xsYmFyX3dpZHRoOwogIH0KCiAgLy8gKGFsbW9zdCkgZGVlcGNsb25lIGFuIG9iamVjdAogIGZ1bmN0aW9uIE9iamVjdF9jbG9uZShvYmopIHsKICAgIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JykgewogICAgICAvLyBzaGFsbG93IGNsb25lIGNvbnRhaW5lcnMKICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSByZXR1cm4gWy4uLm9ial07CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBTZXQpIHJldHVybiBuZXcgU2V0KG9iaik7CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBNYXApIHJldHVybiBuZXcgTWFwKG9iaik7CiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBIb3RrZXkpIHJldHVybiBuZXcgSG90a2V5KG9iai5hY3Rpb25fbmFtZSwgbmV3IFNldChvYmoubW9kaWZpZXJzKSk7CgogICAgICBjb25zdCBuZXdfb2JqID0ge307CiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpCiAgICAgICAgbmV3X29ialtrZXldID0gT2JqZWN0X2Nsb25lKHZhbHVlKTsKICAgICAgcmV0dXJuIG5ld19vYmo7CiAgICB9CgogICAgcmV0dXJuIG9iajsKICB9CgogIGZ1bmN0aW9uIFNldF9kaWZmZXJlbmNlKGEsIGIpIHsKICAgIHJldHVybiBuZXcgU2V0KFsuLi5hXS5maWx0ZXIoKHgpID0+ICFiLmhhcyh4KSkpOwogIH0KCiAgZnVuY3Rpb24gU2V0X3VuaW9uKGEsIGIpIHsKICAgIHJldHVybiBuZXcgU2V0KFsuLi5hLCAuLi5iXSk7CiAgfQoKICBmdW5jdGlvbiBpbnNlcnRfbm9kZV9hZnRlcihub2RlLCByZWZfbm9kZSkgewogICAgcmVmX25vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgcmVmX25vZGUubmV4dFNpYmxpbmcpOwogIH0KCiAgZnVuY3Rpb24gZ2V0X3Jlc29sdXRpb24ob2JqKSB7CiAgICBpZiAob2JqLnNyYyA9PT0gJ2Fib3V0OmJsYW5rJykgcmV0dXJuIG51bGw7CgogICAgLy8gbmF0dXJhbCBzaXplIG9ubHkgZm9yIGltYWdlcywgY2FuIGJlIDAgd2hlbiBub3QgeWV0IGxvYWRlZAogICAgLy8gbm90ZTogd2hlbiBzcmMgaXMgY2hhbmdlZCwgdGhpcyBjYW4gcmVhZCB0aGUgb2xkIHNpemUKICAgIGlmIChvYmoubmF0dXJhbFdpZHRoICYmIG9iai5uYXR1cmFsSGVpZ2h0KSB7CiAgICAgIHJldHVybiBbb2JqLm5hdHVyYWxXaWR0aCwgb2JqLm5hdHVyYWxIZWlnaHRdOwogICAgfQoKICAgIGlmIChvYmoudmlkZW9XaWR0aCAmJiBvYmoudmlkZW9IZWlnaHQpIHsKICAgICAgcmV0dXJuIFtvYmoudmlkZW9XaWR0aCwgb2JqLnZpZGVvSGVpZ2h0XTsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIGZ1bmN0aW9uIHNob3dfbm90aWNlKGxvZ0Z1bmMsIC4uLm1zZykgewogICAgdW5zYWZlV2luZG93Lm5vdGljZT8uKG1zZ1swXSk7CiAgICBsb2dGdW5jPy4oLi4ubXNnKTsKICB9CgogIGZ1bmN0aW9uIGdldF9vcmlnaW5hbF9iYWNrZ3JvdW5kX2NvbG9yKCkgewogICAgLy8gdGhlIGJhY2tncm91bmQtY29sb3Igc3R5bGUgZ2V0cyBjaGFuZ2VkIHRocm91Z2ggdGhlIChzaXRlKXNjcmlwdCwgYnV0IHdlIG5lZWQgdGhlIG9yaWdpbmFsIG9uZQogICAgLy8gdGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVyIHdheSB0aGFuIHRoaXMsIHJpZ2h0PwogICAgY29uc3QgY3VycmVudCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmJvZHkpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKTsKICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2JhY2tncm91bmQtY29sb3InKTsKICAgIGNvbnN0IG9yaWdpbmFsID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjdXJyZW50OwogICAgcmV0dXJuIG9yaWdpbmFsOwogIH0KCiAgLy8gInJnYihyLGcsYikiIC0+IFtpbnQociksIGludChnKSwgaW50KGIpXQogIGZ1bmN0aW9uIHJnYl90b19hcnJheShyZ2IpIHsKICAgIGNvbnN0IGFyciA9IHJnYi5zdWJzdHJpbmcocmdiLmluZGV4T2YoJygnKSArIDEsIHJnYi5sYXN0SW5kZXhPZignKScpKS5zcGxpdCgvLFxzKi8pOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspCiAgICAgIGFycltpXSA9IHBhcnNlSW50KGFycltpXSwgMTApOwogICAgcmV0dXJuIGFycjsKICB9CgogIGZ1bmN0aW9uIHJnYl9hcnJheV9pc19kYXJrKHJnYl9hcnJheSkgewogICAgbGV0IGF2ZyA9IDA7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJnYl9hcnJheS5sZW5ndGg7IGkrKykKICAgICAgYXZnICs9IHJnYl9hcnJheVtpXTsKICAgIGF2ZyAvPSByZ2JfYXJyYXkubGVuZ3RoOwoKICAgIHJldHVybiAoYXZnIDw9IDEyOCk7CiAgfQoKICBmdW5jdGlvbiByZ2JfYXJyYXlfc2hpZnQocmdiLCBzaGlmdCkgewogICAgY29uc3Qgc2hpZnRlZCA9IFtdOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspCiAgICAgIHNoaWZ0ZWQucHVzaChNYXRoLm1pbihNYXRoLm1heChyZ2JbaV0gKyBzaGlmdCwgMCksIDI1NSkpOwoKICAgIHJldHVybiBzaGlmdGVkOwogIH0KCiAgLy8gW3IsIGcsIGJdIC0+ICJyZ2IocixnLGIpIgogIGZ1bmN0aW9uIHJnYl9hcnJheV90b19yZ2IocmdiKSB7CiAgICBpZiAocmdiLmxlbmd0aCA9PT0gMykKICAgICAgcmV0dXJuICdyZ2IoJyArIHJnYlswXSArICcsJyArIHJnYlsxXSArICcsJyArIHJnYlsyXSArICcpJzsKICAgIHJldHVybiAncmdiYSgnICsgcmdiWzBdICsgJywnICsgcmdiWzFdICsgJywnICsgcmdiWzJdICsgJywnICsgcmdiWzNdICsgJyknOwogIH0KCiAgZnVuY3Rpb24gaXNfZGFya21vZGUoKSB7CiAgICBjb25zdCB0aGVtZSA9IGdldF9jb29raWUoJ3RoZW1lJyk7CiAgICBpZiAodGhlbWUgIT09ICcnICYmIE51bWJlcih0aGVtZSkgIT09IDApCiAgICAgIHJldHVybiB0cnVlOwoKICAgIC8vIGZhbGxiYWNrCiAgICBjb25zdCByZ2IgPSByZ2JfdG9fYXJyYXkoZ2V0X29yaWdpbmFsX2JhY2tncm91bmRfY29sb3IoKSk7CiAgICByZXR1cm4gcmdiX2FycmF5X2lzX2RhcmsocmdiKTsKICB9CgogIC8vIGhlbHBlciBmdW5jdGlvbiB0byBhZGp1c3QgYmFja2dyb3VuZCBjb2xvcnMgYmFzZWQgb24gbGlnaHQgb3IgZGFyayBtb2RlCiAgZnVuY3Rpb24gc2hpZnRlZF9iYWNrZ3JvdW5kQ29sb3Ioc2hpZnQpIHsKICAgIGNvbnN0IHJnYiA9IHJnYl90b19hcnJheShnZXRfb3JpZ2luYWxfYmFja2dyb3VuZF9jb2xvcigpKTsKICAgIGNvbnN0IHNoaWZ0ZWRfcmdiID0gcmdiX2FycmF5X3NoaWZ0KHJnYiwgKGlzX2Rhcmttb2RlKCkgPyAxIDogLTEpICogc2hpZnQpOwogICAgcmV0dXJuIHJnYl9hcnJheV90b19yZ2Ioc2hpZnRlZF9yZ2IpOwogIH0KCiAgZnVuY3Rpb24gY3JlYXRlX2J1dHRvbigpIHsKICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICBlbC5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7CiAgICByZXR1cm4gZWw7CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVfcG9wdXBfbWVudSgpIHsKICAgIGNvbnN0IHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7CiAgICBwb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgcG9wdXAuc3R5bGUucGFkZGluZyA9ICc2cHggMTJweCA2cHggMTJweCc7CiAgICBwb3B1cC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyBzaGlmdGVkX2JhY2tncm91bmRDb2xvcigzMik7CiAgICBwb3B1cC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBnZXRfb3JpZ2luYWxfYmFja2dyb3VuZF9jb2xvcigpOwogICAgLy8gZml4ZWQsIGNlbnRlcmVkIGRpdgogICAgcG9wdXAuc3R5bGUudG9wICA9ICc1MCUnOwogICAgcG9wdXAuc3R5bGUubGVmdCA9ICc1MCUnOwogICAgcG9wdXAuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZSgtNTAlLCAtNTAlKSc7CiAgICBwb3B1cC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7CiAgICBwb3B1cC5zdHlsZS56SW5kZXggPSAnMTAwMDInOwogICAgLy8gc2Nyb2xsIGJhcnMgaWYgdG9vIGxhcmdlIChyZXNpemluZyB0ZXh0YXJlYXMgYmVoYXZlcyBhIGJpdCB3ZWlyZGx5IG9uIENocm9tZSBiZWNhdXNlIGl0IHNldHMgbWFyZ2lucykKICAgIHBvcHVwLnN0eWxlLm1pbldpZHRoICA9ICczMHZ3JzsKICAgIHBvcHVwLnN0eWxlLm1heFdpZHRoICA9ICc5MHZ3JzsKICAgIHBvcHVwLnN0eWxlLm1heEhlaWdodCA9ICc5MHZoJzsKICAgIHBvcHVwLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nOwogICAgcmV0dXJuIHBvcHVwOwogIH0KCgogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAvKiBnZW5lcmFsIHNpdGUgZnVuY3Rpb25zICovCiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqLwoKICBjbGFzcyBQYWdlIHsKICAgIHN0YXRpYyBJbmRleCAgICA9IFN5bWJvbCgnaW5kZXgvc2ltaWxhcicpOwogICAgc3RhdGljIFBvc3QgICAgID0gU3ltYm9sKCdwb3N0Jyk7CiAgICBzdGF0aWMgV2lraSAgICAgPSBTeW1ib2woJ3dpa2kgYWRkL2VkaXQnKTsKICAgIHN0YXRpYyBXaWtpU2hvdyA9IFN5bWJvbCgnd2lraSBzaG93Jyk7CiAgICBzdGF0aWMgVGFnICAgICAgPSBTeW1ib2woJ3RhZyBlZGl0Jyk7CiAgICBzdGF0aWMgTW9kZXJhdGUgPSBTeW1ib2woJ21vZGVyYXRlJyk7CiAgICBzdGF0aWMgRGVsZXRlICAgPSBTeW1ib2woJ2RlbGV0ZScpOwogICAgc3RhdGljIFJlY29yZCAgID0gU3ltYm9sKCd1c2VyIHJlY29yZCcpOwogIH0KCiAgY2xhc3MgR2VuZXJhbCB7CiAgICBzdGF0aWMgcGFnZTsKICAgIHN0YXRpYyB0aHVtYm5haWxfY2FjaGUgPSBuZXcgTWFwKCk7IC8vIGlkIC0+IGFycmF5IG9mIHRodW1ibmFpbCBlbGVtZW50cwogIH0KCgogIGZ1bmN0aW9uIGdldF9zZWFyY2hfdGFncyhsb2NhdGlvbikgewogICAgbG9jYXRpb24gPz89IHdpbmRvdy5sb2NhdGlvbjsKICAgIHJldHVybiBuZXcgVGFncyhuZXcgVVJMKGxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoJ3RhZ3MnKSk7CiAgfQoKICBmdW5jdGlvbiBnZXRfdXNlcm5hbWUoKSB7IC8vIHdvbid0IHdvcmsgb24gZXZlcnkgcGFnZQogICAgLy8gcmVhZCBmcm9tIHRoZSAnTXkgRmF2b3JpdGVzJyBidXR0b24gKGluIG9uZSBvZiB0aGUgc3VibmF2cykgaW4gdGhlIG5hdmJhcgogICAgZm9yIChjb25zdCBhIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNuYXZiYXIgYScpKSB7CiAgICAgIGlmICh0eXBlb2YgYS5ocmVmICE9PSAnc3RyaW5nJykgY29udGludWU7CgogICAgICBmb3IgKGNvbnN0IHRhZyBvZiBuZXcgVGFncyhuZXcgVVJMKGEuaHJlZikuc2VhcmNoUGFyYW1zLmdldCgndGFncycpKSkgewogICAgICAgIGlmICh0YWcuc3RhcnRzV2l0aCgnZmF2OicpKSB7CiAgICAgICAgICByZXR1cm4gdGFnLnN1YnN0cmluZygnZmF2OicubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIGlzIG93biB1cGxvYWRzIG9yIGZhdm9yaXRlcyBwYWdlCiAgbGV0IHBlcnNvbmFsX2NhY2hlID0gbnVsbDsKICBmdW5jdGlvbiBpc19wZXJzb25hbF9wb3N0X3BhZ2UoKSB7CiAgICBpZiAocGVyc29uYWxfY2FjaGUgIT09IG51bGwpIHJldHVybiBwZXJzb25hbF9jYWNoZTsKCiAgICBjb25zdCB1c2VybmFtZSA9IGdldF91c2VybmFtZSgpOwogICAgaWYgKHVzZXJuYW1lID09PSBudWxsKSB7CiAgICAgIHBlcnNvbmFsX2NhY2hlID0gZmFsc2U7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBjb25zdCB0YWdzID0gZ2V0X3NlYXJjaF90YWdzKCk7CiAgICBwZXJzb25hbF9jYWNoZSA9IHRhZ3MuaGFzKCdmYXY6JyArIHVzZXJuYW1lKSB8fCB0YWdzLmhhcygndXNlcjonICsgdXNlcm5hbWUpOwogICAgcmV0dXJuIHBlcnNvbmFsX2NhY2hlOwogIH0KCiAgZnVuY3Rpb24gaGlkZV9oZWFkZXJsb2dvKGhpZGUpIHsKICAgIGNvbnN0IGhlYWRlcmxvZ28gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGVhZGVybG9nbycpOwogICAgaWYgKGhlYWRlcmxvZ28gIT09IG51bGwpIHsKICAgICAgaWYgKGhpZGUpIGhlYWRlcmxvZ28uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgZWxzZSAgICAgIGhlYWRlcmxvZ28uc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGFkZF9jb25maWdfZGlhbG9nKCkgewogICAgY29uc3QgY2ZnX2RpYWxvZyA9IGNyZWF0ZV9wb3B1cF9tZW51KCk7CiAgICBjZmdfZGlhbG9nLnN0eWxlLnpJbmRleCA9ICcxMDAxMCc7CiAgICBjZmdfZGlhbG9nLmlkID0gJ2NmZ19kaWFsb2cnOwoKICAgIC8vIGdlbmVyYXRlIHRoZSBjb250ZW50IG9mIHRoZSBjb25maWcgbWVudQogICAgbGV0IGlubmVyRGl2SFRNTCA9IGA8ZGl2IHN0eWxlPSdmb250LXdlaWdodDogYm9sZDsgbWFyZ2luLWJvdHRvbTogNnB4Oyc+U2Fua2FrdUFkZG9uICR7VkVSU0lPTn08L2Rpdj5gOwogICAgLy8gKyBgPGhyIHN0eWxlPSdtYXJnaW4tdG9wOiAwOyBtYXJnaW4tYm90dG9tOiAycHg7IGJvcmRlcjoxcHggc29saWQgJHtzaGlmdGVkX2JhY2tncm91bmRDb2xvcigzMil9Oyc+YDsKCiAgICAvLyBhZGQgdGFicywgVE9ETzogdGhleSdyZSB1Z2x5IGVzcGVjaWFsbHkgaW4gZGFyayBtb2RlCiAgICBpbm5lckRpdkhUTUwgKz0gJzxkaXYgaWQ9ImNmZ190YWJzIiBzdHlsZT0iZGlzcGxheTogZmxleDsgd2hpdGUtc3BhY2U6IG5vd3JhcDsiPic7CiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhDT05GSUdfVEFCU19URU1QTEFURSkpCiAgICAgIGlubmVyRGl2SFRNTCArPSBgPGJ1dHRvbiBpZD0iY2ZnX3RhYl8ke2tleX0iIHN0eWxlPSJib3JkZXItc3R5bGU6IHNvbGlkOyBwYWRkaW5nOiAwIDJweCAwIDJweDsgbWFyZ2luOiAwIDJweCAwIDJweDsgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlci1ib3R0b20td2lkdGg6IDA7IGN1cnNvcjogcG9pbnRlciI+JHt2YWx1ZS5uYW1lfTwvYnV0dG9uPmA7CiAgICBpbm5lckRpdkhUTUwgKz0gJzwvZGl2Pic7CgogICAgLy8gYWRkIGJvZGllcwogICAgZm9yIChjb25zdCBbYm9keV9rZXksIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKENPTkZJR19DQVRFR09SWV9URU1QTEFURSkpIHsKICAgICAgaW5uZXJEaXZIVE1MICs9IGA8ZGl2IGlkPSJjZmdfYm9keV8ke2JvZHlfa2V5fSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IHJnYmEoMTI4LCAxMjgsIDEyOCwgMC4xKTsgbWFyZ2luLWJvdHRvbTogNHB4OyBwYWRkaW5nOiAwIDRweCAycHggNHB4OyI+YAogICAgICAgICsgYDxoNT4ke2JvZHkubmFtZX08L2g1PmA7CgogICAgICAvLyBhZGQgY29uZmlnIGVsZW1lbnRzIGZvciBlYWNoIGJvZHkKICAgICAgZm9yIChjb25zdCBrZXkgb2YgYm9keS5lbnRyaWVzKSB7CiAgICAgICAgY29uc3QgdmFsdWUgPSBTRVRUSU5HU19URU1QTEFURVtrZXldOwoKICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgY29uc29sZS5lcnJvcihgY291bGRuJ3QgZmluZCBTRVRUSU5HU19URU1QTEFURVske2tleX1dYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGNvbnN0IGdlbmVyYXRlX3NwYW4gPSAoKSA9PiBgPHNwYW4gc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7ICR7dmFsdWUudGl0bGUgPyAnY3Vyc29yOmhlbHA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIGRhc2hlZDsgJyA6ICcnfSIgYAogICAgICAgICAgKyBgJHt2YWx1ZS50aXRsZSA/IGB0aXRsZT0iJHt2YWx1ZS50aXRsZX0iYCA6ICcnfSA+JHt2YWx1ZS5kZXNjfTwvc3Bhbj5gOwoKICAgICAgICBpbm5lckRpdkhUTUwgKz0gJzxkaXY+JzsKICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUpIHsKICAgICAgICAgIGNhc2UgJ2NoZWNrYm94JzoKICAgICAgICAgICAgaW5uZXJEaXZIVE1MICs9IGA8aW5wdXQgaWQ9JyR7S0VZX1BSRUZJWH0ke2tleX0nIHR5cGU9J2NoZWNrYm94JyBzdHlsZT0ndmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luOiAzcHggNHB4IDNweCA0cHg7Jz5gOwogICAgICAgICAgICBpbm5lckRpdkhUTUwgKz0gZ2VuZXJhdGVfc3BhbigpOwogICAgICAgICAgICAvLyBoYXJkY29kZWQgZWxlbWVudHM6CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSAoa2V5ID09PSAnc2V0X3ZpZGVvX3ZvbHVtZScgPyBgPGlucHV0IGlkPSIke0tFWV9QUkVGSVh9dmlkZW9fdm9sdW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxMDAiIHNpemU9IjQiPiVgIDogJycpOwogICAgICAgICAgICBpbm5lckRpdkhUTUwgKz0gKGtleSA9PT0gJ2xvYWRfaGlnaHJlcycgPyBgPGlucHV0IGlkPSIke0tFWV9QUkVGSVh9aGlnaHJlc19saW1pdCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNDAwMDAwMCIgc2l6ZT0iMTAiPiBieXRlc2AgOiAnJyk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnc2VsZWN0JzoKICAgICAgICAgICAgaW5uZXJEaXZIVE1MICs9IGdlbmVyYXRlX3NwYW4oKTsKICAgICAgICAgICAgaW5uZXJEaXZIVE1MICs9IGA8c2VsZWN0IGlkPSIke0tFWV9QUkVGSVh9JHtrZXl9Ij5gOwogICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZS5vcHRpb25zKSkKICAgICAgICAgICAgICBpbm5lckRpdkhUTUwgKz0gYDxvcHRpb24gdmFsdWU9IiR7a30iPiR7dn08L29wdGlvbj5gOwogICAgICAgICAgICBpbm5lckRpdkhUTUwgKz0gJzwvc2VsZWN0Pic7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAndGV4dCc6CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSBnZW5lcmF0ZV9zcGFuKCk7CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSBgPHRleHRhcmVhIGlkPSIke0tFWV9QUkVGSVh9JHtrZXl9IiByb3dzPTggc3R5bGU9J3dpZHRoOiAxMDAlOyBib3gtc2l6aW5nOiBib3JkZXItYm94Jz48L3RleHRhcmVhPmA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnaG90a2V5JzoKICAgICAgICAgICAgaW5uZXJEaXZIVE1MICs9IGA8aW5wdXQgaWQ9JyR7S0VZX1BSRUZJWH0ke2tleX1fY3RybCcgdHlwZT0nY2hlY2tib3gnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW46IDNweCA0cHggM3B4IDRweDsnPmA7CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSAnPHNwYW4gc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij5jdHJsPC9zcGFuPic7CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSBgPGlucHV0IGlkPScke0tFWV9QUkVGSVh9JHtrZXl9X2FsdCcgdHlwZT0nY2hlY2tib3gnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW46IDNweCA0cHggM3B4IDRweDsnPmA7CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSAnPHNwYW4gc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij5hbHQ8L3NwYW4+JzsKICAgICAgICAgICAgaW5uZXJEaXZIVE1MICs9IGA8aW5wdXQgaWQ9JyR7S0VZX1BSRUZJWH0ke2tleX1fc2hpZnQnIHR5cGU9J2NoZWNrYm94JyBzdHlsZT0ndmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luOiAzcHggNHB4IDNweCA0cHg7Jz5gOwogICAgICAgICAgICBpbm5lckRpdkhUTUwgKz0gJzxzcGFuIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyI+c2hpZnQ8L3NwYW4+JzsKICAgICAgICAgICAgaW5uZXJEaXZIVE1MICs9IGA8aW5wdXQgaWQ9JyR7S0VZX1BSRUZJWH0ke2tleX1fa2V5JyB0eXBlPSd0ZXh0JyBtYXhMZW5ndGg9JzEnIHNpemU9JzEnIHN0eWxlPSd2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW46IDNweCA0cHggM3B4IDRweDsnPmA7CiAgICAgICAgICAgIGlubmVyRGl2SFRNTCArPSBnZW5lcmF0ZV9zcGFuKCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ1thZGRvbiBlcnJvcl0gQ09ORklHX1RFTVBMQVRFIGlzIGRlZmVjdGl2ZSEnLCB2YWx1ZS50eXBlKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlubmVyRGl2SFRNTCArPSAnPC9kaXY+JzsKICAgICAgfQoKICAgICAgaW5uZXJEaXZIVE1MICs9ICc8L2Rpdj4nOwogICAgfQoKICAgIGlubmVyRGl2SFRNTCArPSAnPGRpdiBzdHlsZT0icGFkZGluZzogMnB4Ij4nOwogICAgaW5uZXJEaXZIVE1MICs9ICAnPGJ1dHRvbiBpZD0iY29uZmlnX2Nsb3NlIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tcmlnaHQ6IDZweCI+Q2xvc2U8L2J1dHRvbj4nOwogICAgaW5uZXJEaXZIVE1MICs9ICAnPGJ1dHRvbiBpZD0iY29uZmlnX3Jlc2V0IiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyIgdGl0bGU9IlJlc2V0cyBhbGwgc2V0dGluZ3MgdG8gZGVmYXVsdCAoYnV0IGRvZXNuXCd0IGNsZWFyIHBvc3QgaGlzdG9yeSkiPlJlc2V0IHNldHRpbmdzPC9idXR0b24+JzsKICAgIGlubmVyRGl2SFRNTCArPSAgJzxidXR0b24gaWQ9Imhpc3RvcnlfY2xlYXIiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7IiB0aXRsZT0iQ2xlYXJzIHRoZSBwb3N0IHZpZXcgaGlzdG9yeSBmb3IgdGhlIGN1cnJlbnQgc2l0ZSAoY2hhbiBvciBpZG9sKSI+Q2xlYXIgcG9zdCB2aWV3IGhpc3Rvcnk8L2J1dHRvbj4nOwogICAgaW5uZXJEaXZIVE1MICs9ICc8L2Rpdj4nOwogICAgaW5uZXJEaXZIVE1MICs9ICc8ZGl2IHN0eWxlPSJwYWRkaW5nOiAycHgiPiZuYnNwOypyZXF1aXJlcyBhIHBhZ2UgcmVsb2FkLjwvZGl2Pic7CgogICAgY2ZnX2RpYWxvZy5pbm5lckhUTUwgPSBpbm5lckRpdkhUTUw7CgogICAgLy8gYWRqdXN0IGlubGluZSBTVkcgaWNvbnMKICAgIGZvciAoY29uc3Qgc3ZnIG9mIGNmZ19kaWFsb2cucXVlcnlTZWxlY3RvckFsbCgnc3ZnJykpIHsKICAgICAgc3ZnLnN0eWxlLndpZHRoID0gJzFyZW0nOwogICAgICBzdmcuc3R5bGUudmVydGljYWxBbGlnbiA9ICdtaWRkbGUnOwogICAgfQoKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY2ZnX2RpYWxvZyk7CgogICAgLy8gaGlkZSBub24tZGVmYXVsdCBjYXRlZ29yaWVzCiAgICBmb3IgKGNvbnN0IFtvdGhlcl90YWJfbmFtZSwgb3RoZXJfdGFiXSBvZiBPYmplY3QuZW50cmllcyhDT05GSUdfVEFCU19URU1QTEFURSkpIHsKICAgICAgaWYgKG90aGVyX3RhYl9uYW1lICE9PSAnZ2VuZXJhbCcpIHsKICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIG90aGVyX3RhYi5jYXRlZ29yaWVzKQogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNmZ19ib2R5XyR7Y2F0ZWdvcnl9YCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgfQoKICAgIC8vIGFkZCBldmVudHMKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25maWdfY2xvc2UnKS5vbmNsaWNrID0gKCkgPT4geyBzaG93X2NvbmZpZ19kaWFsb2coZmFsc2UpOyByZXR1cm4gZmFsc2U7IH07CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uZmlnX3Jlc2V0Jykub25jbGljayA9ICgpID0+IHsgcmVzZXRfY29uZmlnKCk7IHJldHVybiBmYWxzZTsgfTsKICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaXN0b3J5X2NsZWFyJykub25jbGljayA9ICgpID0+IHsgcmVzZXRfc2V0dGluZyhISVNUT1JZX0tFWSk7IHJldHVybiBmYWxzZTsgfTsKCiAgICAvLyB0YWIgZXZlbnRzCiAgICBmb3IgKGNvbnN0IFt0YWJfbmFtZSwgdGFiXSBvZiBPYmplY3QuZW50cmllcyhDT05GSUdfVEFCU19URU1QTEFURSkpIHsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYGNmZ190YWJfJHt0YWJfbmFtZX1gKS5vbmNsaWNrID0gKCkgPT4gewogICAgICAgIC8vIGhpZGUgY2F0ZWdvcmllcyBvZiBvdGhlciB0YWJzCiAgICAgICAgZm9yIChjb25zdCBbb3RoZXJfdGFiX25hbWUsIG90aGVyX3RhYl0gb2YgT2JqZWN0LmVudHJpZXMoQ09ORklHX1RBQlNfVEVNUExBVEUpKSB7CiAgICAgICAgICBpZiAob3RoZXJfdGFiX25hbWUgIT09IHRhYl9uYW1lKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2Ygb3RoZXJfdGFiLmNhdGVnb3JpZXMpIHsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgY2ZnX2JvZHlfJHtjYXRlZ29yeX1gKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBzaG93IGNhdGVnb3JpZXMgZm9yIGdpdmVuIHRhYgogICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgdGFiLmNhdGVnb3JpZXMpIHsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBjZmdfYm9keV8ke2NhdGVnb3J5fWApLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgIH0KICAgICAgfTsKICAgIH0KCiAgICBmb3JlYWNoX2NvbmZpZ19lbGVtZW50KChjZmdfZWxlbSwga2V5LCBnZXRfdmFsdWUpID0+IHsKICAgICAgY2ZnX2VsZW0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gewogICAgICAgIHVwZGF0ZV9zZXR0aW5nKGtleSwgZ2V0X3ZhbHVlKCkpOwogICAgICAgIHNhdmVfc2V0dGluZyhrZXksIGdldF92YWx1ZSgpKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICAvLyBjb25maWd1cmUgaG90a2V5IGVsZW1lbnRzCiAgICBmb3IgKGNvbnN0IFtwYWdlLCBhY3Rpb25zXSBvZiBPYmplY3QuZW50cmllcyhIT1RLRVlfQUNUSU9OUykpIHsKICAgICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKGFjdGlvbnMpKSB7CiAgICAgICAgZm9yIChjb25zdCBzdWZmaXggb2YgWydjdHJsJywgJ2FsdCcsICdzaGlmdCcsICdrZXknXSkgewogICAgICAgICAgY29uc3QgY2ZnX2VsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtLRVlfUFJFRklYfSR7cGFnZX1faG90a2V5cy4ke25hbWV9XyR7c3VmZml4fWApOwogICAgICAgICAgY2ZnX2VsZW0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gewogICAgICAgICAgICBjb25zdCBob3RrZXlzID0gZ2V0X2hvdGtleXMocGFnZSk7CiAgICAgICAgICAgIHVwZGF0ZV9zZXR0aW5nKGAke3BhZ2V9X2hvdGtleXNgLCBob3RrZXlzKTsKICAgICAgICAgICAgc2F2ZV9zZXR0aW5nKGAke3BhZ2V9X2hvdGtleXNgLCBob3RrZXlzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgZnVuY3Rpb24gZ2V0X2hvdGtleXMocGFnZSkgeyAvLyBnZXQgZnJvbSBjb25maWcgZGlhbG9nCiAgICBjb25zdCBob3RrZXlzID0ge307CgogICAgZm9yIChjb25zdCBbbmFtZSwgYWN0aW9uXSBvZiBPYmplY3QuZW50cmllcyhIT1RLRVlfQUNUSU9OU1twYWdlXSkpIHsKICAgICAgY29uc3QgbW9kaWZpZXJzID0gbmV3IFNldCgpOwogICAgICBmb3IgKGNvbnN0IG1vZCBvZiBbJ2N0cmwnLCAnYWx0JywgJ3NoaWZ0J10pIHsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7S0VZX1BSRUZJWH0ke3BhZ2V9X2hvdGtleXMuJHtuYW1lfV8ke21vZH1gKS5jaGVja2VkKSB7CiAgICAgICAgICBtb2RpZmllcnMuYWRkKG1vZCk7CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zdCBrZXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtLRVlfUFJFRklYfSR7cGFnZX1faG90a2V5cy4ke25hbWV9X2tleWApLnZhbHVlOwogICAgICBpZiAoa2V5Lmxlbmd0aCAhPT0gMCkgewogICAgICAgIGhvdGtleXNba2V5XSA9IG5ldyBIb3RrZXkobmFtZSwgbW9kaWZpZXJzKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBob3RrZXlzOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlX2hvdGtleXMocGFnZSkgewogICAgLy8gcmVzZXQgYWxsIGhvdGtleSBjb25maWcgZWxlbWVudHMKICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhIT1RLRVlfQUNUSU9OU1twYWdlXSkpIHsKICAgICAgZm9yIChjb25zdCBtb2Qgb2YgWydjdHJsJywgJ2FsdCcsICdzaGlmdCddKSB7CiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtLRVlfUFJFRklYfSR7cGFnZX1faG90a2V5cy4ke25hbWV9XyR7bW9kfWApOwogICAgICAgIGlmIChlbCAhPT0gbnVsbCkKICAgICAgICAgIGVsLmNoZWNrZWQgPSBmYWxzZTsKICAgICAgfQogICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGAke0tFWV9QUkVGSVh9JHtwYWdlfV9ob3RrZXlzLiR7bmFtZX1fa2V5YCk7CiAgICAgIGlmIChlbCAhPT0gbnVsbCkKICAgICAgICBlbC52YWx1ZSA9ICcnOwogICAgfQoKICAgIC8vIHVwZGF0ZSBob3RrZXkgY29uZmlnIGVsZW1lbnRzCiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhjb25maWdbYCR7cGFnZX1faG90a2V5c2BdKSkgewogICAgICBjb25zdCBrZXlfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtLRVlfUFJFRklYfSR7cGFnZX1faG90a2V5cy4ke3YuYWN0aW9uX25hbWV9X2tleWApOwogICAgICBpZiAoa2V5X2VsICE9PSBudWxsKQogICAgICAgIGtleV9lbC52YWx1ZSA9IGs7CgogICAgICBmb3IgKGNvbnN0IG1vZCBvZiBbJ2N0cmwnLCAnYWx0JywgJ3NoaWZ0J10pIHsKICAgICAgICBjb25zdCBtb2RfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgJHtLRVlfUFJFRklYfSR7cGFnZX1faG90a2V5cy4ke3YuYWN0aW9uX25hbWV9XyR7bW9kfWApOwogICAgICAgIGlmIChtb2RfZWwgIT09IG51bGwpCiAgICAgICAgICBtb2RfZWwuY2hlY2tlZCA9IHYubW9kaWZpZXJzLmhhcyhtb2QpOwogICAgICB9CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfY29uZmlnX2J1dHRvbigpIHsKICAgIGNvbnN0IG5hdmJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYXZiYXInKTsKICAgIGlmIChuYXZiYXIgPT09IG51bGwpIHJldHVybjsKCiAgICBuYXZiYXIuc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnOyAvLyBoYWNrIHRvIGZpdCBjb25maWcgYnV0dG9uCgogICAgY29uc3QgbGFuZ19zZWxlY3QgPSBuYXZiYXIucXVlcnlTZWxlY3RvcignLmxhbmctc2VsZWN0Jyk7CiAgICBpZiAobGFuZ19zZWxlY3QgIT09IG51bGwpCiAgICAgIGxhbmdfc2VsZWN0LnN0eWxlLmJvcmRlclJpZ2h0ID0gMDsgLy8gcHJldmVudCBjb25maWcgYnV0dG9uIGZyb20ganVtcGluZyBhIHBpeGVsIG9uIG1vdXNlb3ZlcgoKICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdBJyk7CiAgICBhLmhyZWYgPSAnIyc7CiAgICBhLm9uY2xpY2sgPSAoKSA9PiB7IHNob3dfY29uZmlnX2RpYWxvZyh0cnVlKTsgcmV0dXJuIGZhbHNlOyB9OwogICAgYS5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTEwJTsiPuKamTwvc3Bhbj4gQWRkb24gY29uZmlnJzsKICAgIGEuc3R5bGUuZm9udFNpemUgPSAnMTIwJSc7CgogICAgY29uc3QgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdMSScpOwogICAgbGkuY2xhc3NOYW1lID0gJ2xhbmctc2VsZWN0JzsgLy8gbWF0Y2ggc3R5bGUgb2YgdG9wIGJhcgogICAgbGkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJzEwcHgnOwogICAgbGkuYXBwZW5kQ2hpbGQoYSk7CiAgICBuYXZiYXIuYXBwZW5kQ2hpbGQobGkpOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZ19zZWFyY2hfYnV0dG9ucygpIHsKICAgIGZvciAoY29uc3QgaXRlbSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjdGFnLXNpZGViYXIgbGknKSkgewogICAgICBjb25zdCB0YWdsaW5rID0gaXRlbS5xdWVyeVNlbGVjdG9yKCdhJyk7CiAgICAgIGlmICh0YWdsaW5rID09PSBudWxsKSBjb250aW51ZTsKCiAgICAgIGNvbnN0IHRhZ25hbWUgPSBnZXRfc2VhcmNoX3RhZ3ModGFnbGluaykudG9TdHJpbmcoKTsKCiAgICAgIGNvbnN0IGdldF9jbGlja19saXN0ZW5lciA9ICh0YWcpID0+IHsKICAgICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICAgY29uc3Qgc2VhcmNoX2ZpZWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ3MnKTsKICAgICAgICAgIGNvbnN0IHNlYXJjaF90YWdzID0gbmV3IFRhZ3Moc2VhcmNoX2ZpZWxkLnZhbHVlKTsKCiAgICAgICAgICBzZWFyY2hfdGFncy50b2dnbGUodGFnKTsKCiAgICAgICAgICBzZWFyY2hfZmllbGQudmFsdWUgPSBzZWFyY2hfdGFncy50b1N0cmluZygpICsgJyAnOwoKICAgICAgICAgIHNlYXJjaF9maWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzZWFyY2hfZmllbGQudmFsdWUubGVuZ3RoLCBzZWFyY2hfZmllbGQudmFsdWUubGVuZ3RoKTsKICAgICAgICAgIHNlYXJjaF9maWVsZC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7CgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH07CiAgICAgIH07CgogICAgICBjb25zdCBhZGRfc2VhcmNoX2J1dHRvbiA9ICh0YWdfcHJlZml4KSA9PiB7CiAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0EnKTsKICAgICAgICBhLmhyZWYgPSAnIyc7CiAgICAgICAgYS5pbm5lclRleHQgPSB0YWdfcHJlZml4OwogICAgICAgIGEub25jbGljayA9IGdldF9jbGlja19saXN0ZW5lcigodGFnX3ByZWZpeCA9PT0gJysnID8gJycgOiB0YWdfcHJlZml4KSArIHRhZ25hbWUpOwoKICAgICAgICBpdGVtLmluc2VydEJlZm9yZShhLCB0YWdsaW5rKTsKICAgICAgICBpdGVtLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnICcpLCB0YWdsaW5rKTsKICAgICAgfTsKCiAgICAgIGFkZF9zZWFyY2hfYnV0dG9uKCcrJyk7CiAgICAgIGFkZF9zZWFyY2hfYnV0dG9uKCctJyk7CiAgICAgIGlmIChjb25maWcub3JfdGFnX3NlYXJjaF9idXR0b24pCiAgICAgICAgYWRkX3NlYXJjaF9idXR0b24oJ34nKTsKICAgIH0KICB9CgogIGNvbnN0IGNvbGxhcHNlcl9tYXAgPSBuZXcgTWFwKCk7IC8vIGNhdGVnb3J5IC0+IFtjb2xsYXBzZXIsIHRhZ3NdCiAgY29uc3QgY29sbGFwc2VyX2NvbG9yX21hcCA9IG5ldyBNYXAoKTsgLy8gY2F0ZWdvcnkgLT4gZm9udCBjb2xvcgoKICBmdW5jdGlvbiBjb2xsYXBzZV90YWdfY2F0ZWdvcnkoY2F0ZWdvcnksIGNvbGxhcHNlLCBzYXZlID0gdHJ1ZSkgewogICAgY29uc3QgW2NvbGxhcHNlciwgdGFnc10gPSBjb2xsYXBzZXJfbWFwLmdldChjYXRlZ29yeSk7CgogICAgY29uc3QgYSA9IGNvbGxhcHNlci5jaGlsZHJlblswXTsKICAgIGNvbnN0IG1pZGRsZV9kaXYgPSBhLmNoaWxkcmVuWzFdOwoKICAgIC8vIGNvbGxhcHNlL2V4cGFuZCBjYXRlZ29yeQogICAgaWYgKGNvbGxhcHNlKSB7CiAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpCiAgICAgICAgdGFnLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKQogICAgICAgIHRhZy5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpOwogICAgfQoKICAgIC8vIGNoYW5nZSBjb2xsYXBzZXIgdmlzdWFscwogICAgaWYgKGNvbmZpZy50YWdfY2F0ZWdvcnlfY29sbGFwc2VyX3N0eWxlID09PSAwKSB7IC8vIGNvbXBhY3Qgc3R5bGUKICAgICAgaWYgKGNvbGxhcHNlKSB7CiAgICAgICAgbWlkZGxlX2Rpdi5zdHlsZS5oZWlnaHQgPSAnMCc7CiAgICAgICAgbWlkZGxlX2Rpdi5zdHlsZS5ib3JkZXJUb3BXaWR0aCA9ICczcHgnOwogICAgICAgIG1pZGRsZV9kaXYuc3R5bGUuYm9yZGVyQm90dG9tV2lkdGggPSAnM3B4JzsKICAgICAgICBtaWRkbGVfZGl2LnN0eWxlLm1hcmdpblRvcCA9ICczcHgnOwogICAgICAgIG1pZGRsZV9kaXYuc3R5bGUubWFyZ2luQm90dG9tID0gJzNweCc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWlkZGxlX2Rpdi5zdHlsZS5oZWlnaHQgPSAnNHB4JzsKICAgICAgICBtaWRkbGVfZGl2LnN0eWxlLmJvcmRlclRvcFdpZHRoID0gJzJweCc7CiAgICAgICAgbWlkZGxlX2Rpdi5zdHlsZS5ib3JkZXJCb3R0b21XaWR0aCA9ICcycHgnOwogICAgICAgIG1pZGRsZV9kaXYuc3R5bGUubWFyZ2luVG9wID0gJzJweCc7CiAgICAgICAgbWlkZGxlX2Rpdi5zdHlsZS5tYXJnaW5Cb3R0b20gPSAnMnB4JzsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb25maWcudGFnX2NhdGVnb3J5X2NvbGxhcHNlcl9zdHlsZSA9PT0gMSkgeyAvLyB3aXRoIGNhdGVnb3J5IG5hbWUKICAgICAgaWYgKGNvbGxhcHNlKSB7CiAgICAgICAgLy8gc3dhcCBib3JkZXIgYW5kIGZvbnQgY29sb3IKICAgICAgICBtaWRkbGVfZGl2LnN0eWxlLmNvbG9yID0gZ2V0X29yaWdpbmFsX2JhY2tncm91bmRfY29sb3IoKTsKICAgICAgICBtaWRkbGVfZGl2LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbGxhcHNlcl9jb2xvcl9tYXAuZ2V0KGNhdGVnb3J5KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtaWRkbGVfZGl2LnN0eWxlLnJlbW92ZVByb3BlcnR5KCdjb2xvcicpOwogICAgICAgIG1pZGRsZV9kaXYuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2JhY2tncm91bmQtY29sb3InKTsKICAgICAgfQogICAgfQoKICAgIC8vIHJldGFpbiBjb2xsYXBzZSBzdGF0ZQogICAgaWYgKGNvbGxhcHNlKSBjb25maWcuY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzLmFkZChjYXRlZ29yeSk7CiAgICBlbHNlICAgICAgICAgIGNvbmZpZy5jb2xsYXBzZWRfdGFnX2NhdGVnb3JpZXMuZGVsZXRlKGNhdGVnb3J5KTsKCiAgICBpZiAoc2F2ZSkgc2F2ZV9zZXR0aW5nKCdjb2xsYXBzZWRfdGFnX2NhdGVnb3JpZXMnLCBjb25maWcuY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzKTsKICB9CgogIGxldCBkcmFnX2NvbGxhcHNlID0gZmFsc2U7CiAgbGV0IGRyYWdfY29sbGFwc2VfY2F0ZWdvcmllczsKCiAgZnVuY3Rpb24gZHJhZ19jb2xsYXBzZV9kb3duKGUpIHsKICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIGRyYWdfY29sbGFwc2UgPSB0cnVlOwoKICAgIGNvbnN0IGNhdGVnb3J5ID0gZS5jdXJyZW50VGFyZ2V0LmNsYXNzTmFtZTsKICAgIGRyYWdfY29sbGFwc2VfY2F0ZWdvcmllcyA9ICFjb25maWcuY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzLmhhcyhjYXRlZ29yeSk7CgogICAgY29sbGFwc2VfdGFnX2NhdGVnb3J5KGNhdGVnb3J5LCBkcmFnX2NvbGxhcHNlX2NhdGVnb3JpZXMpOwogIH0KCiAgZnVuY3Rpb24gZHJhZ19jb2xsYXBzZV9tb3ZlKGUpIHsKICAgIGlmICghZHJhZ19jb2xsYXBzZSkgcmV0dXJuOwoKICAgIGNvbnN0IGNhdGVnb3J5ID0gZS5jdXJyZW50VGFyZ2V0LmNsYXNzTmFtZTsKCiAgICBpZiAoZHJhZ19jb2xsYXBzZV9jYXRlZ29yaWVzICE9PSBjb25maWcuY29sbGFwc2VkX3RhZ19jYXRlZ29yaWVzLmhhcyhjYXRlZ29yeSkpCiAgICAgIGNvbGxhcHNlX3RhZ19jYXRlZ29yeShjYXRlZ29yeSwgZHJhZ19jb2xsYXBzZV9jYXRlZ29yaWVzKTsKICB9CgogIGZ1bmN0aW9uIGRyYWdfY29sbGFwc2VfdXAoKSB7CiAgICBkcmFnX2NvbGxhcHNlID0gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBhZGRfdGFnX2NhdGVnb3J5X2NvbGxhcHNlcigpIHsKICAgIGNvbnN0IHRhZ3NpZGViYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnLXNpZGViYXInKTsKICAgIGlmICh0YWdzaWRlYmFyID09PSBudWxsKSByZXR1cm47CgogICAgY29uc3QgaXRlbXMgPSB0YWdzaWRlYmFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdMSScpOwoKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgZHJhZ19jb2xsYXBzZV91cCk7CgogICAgY29uc3Qgc2V0dXBfY29sbGFwc2VyID0gKGNvbGxhcHNlciwgY2F0ZWdvcnksIHRhZ3MpID0+IHsKICAgICAgY29sbGFwc2VyX21hcC5zZXQoY2F0ZWdvcnksIFtjb2xsYXBzZXIsIHRhZ3NdKTsKCiAgICAgIGNvbGxhcHNlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBkcmFnX2NvbGxhcHNlX2Rvd24pOwogICAgICBjb2xsYXBzZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZHJhZ19jb2xsYXBzZV9tb3ZlKTsKICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykKICAgICAgICB0YWcuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgZHJhZ19jb2xsYXBzZV9tb3ZlKTsKICAgIH07CgogICAgbGV0IGN1cnJfY2F0ZWdvcnkgPSBudWxsOwogICAgbGV0IGN1cnJfY2F0ZWdvcnlfdGFncyA9IFtdOwogICAgbGV0IHByZXZfY2F0ZWdvcnlfY29sbGFwc2VyID0gbnVsbDsKICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBbXTsKCiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHsKICAgICAgaWYgKGl0ZW0uY2xhc3NOYW1lID09PSBjdXJyX2NhdGVnb3J5KSB7CiAgICAgICAgY3Vycl9jYXRlZ29yeV90YWdzLnB1c2goaXRlbSk7CiAgICAgIH0gZWxzZSB7IC8vIHJlYWNoZWQgbmV3IGNhdGVnb3J5CiAgICAgICAgaWYgKHByZXZfY2F0ZWdvcnlfY29sbGFwc2VyICE9PSBudWxsKQogICAgICAgICAgc2V0dXBfY29sbGFwc2VyKHByZXZfY2F0ZWdvcnlfY29sbGFwc2VyLCBjdXJyX2NhdGVnb3J5LCBbLi4uY3Vycl9jYXRlZ29yeV90YWdzXSk7CgogICAgICAgIC8vIHJlbWVtYmVyIGNhdGVnb3J5IGNvbG9yLCB3b3JrYXJvdW5kIGZvciBjb2xvciBjaGFuZ2luZyBvbiBob3ZlcgogICAgICAgIGZvciAoY29uc3QgYSBvZiBpdGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdBJykpIHsKICAgICAgICAgIGNvbGxhcHNlcl9jb2xvcl9tYXAuc2V0KGl0ZW0uY2xhc3NOYW1lLCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgY3Vycl9jYXRlZ29yeSA9IGl0ZW0uY2xhc3NOYW1lOwogICAgICAgIGN1cnJfY2F0ZWdvcnlfdGFncyA9IFtdOyAvLyBpdGVtIHdpbGwgYmUgcHVzaGVkIGluIHRoZSBuZXh0IGl0ZXJhdGlvbiwgc2VlIHdhcm5pbmcgYmVsb3cKICAgICAgICBjYXRlZ29yaWVzLnB1c2goY3Vycl9jYXRlZ29yeSk7CgogICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdBJyk7CiAgICAgICAgYS5ocmVmID0gJyMnOwogICAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gZS5wcmV2ZW50RGVmYXVsdCgpKTsKCiAgICAgICAgLy8gY29sbGFwc2VyIHZpc3VhbHMKICAgICAgICBhLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7CiAgICAgICAgYS5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInOwogICAgICAgIGEuc3R5bGUuYWxpZ25JdGVtcyA9ICdjZW50ZXInOwoKICAgICAgICBpZiAoY29uZmlnLnRhZ19jYXRlZ29yeV9jb2xsYXBzZXJfc3R5bGUgPT09IDApIHsgLy8gY29tcGFjdCBzdHlsZQogICAgICAgICAgYS5pbm5lckhUTUwgPQogICAgICAgICAgICAnPGRpdiBzdHlsZT0id2lkdGg6NDAlOyBoZWlnaHQ6IDA7IGJvcmRlci10b3Atd2lkdGg6IDFweDsgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyI+PC9kaXY+JyArCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJ3aWR0aDo1JTsgIGhlaWdodDogNHB4OyBib3JkZXItd2lkdGg6IDJweDsgbWFyZ2luOiAycHggMnB4IDJweCAycHg7IGJvcmRlci1zdHlsZTogc29saWQiPjwvZGl2PicgKwogICAgICAgICAgICAnPGRpdiBzdHlsZT0id2lkdGg6NDAlOyBoZWlnaHQ6IDA7IGJvcmRlci10b3Atd2lkdGg6IDFweDsgYm9yZGVyLWJvdHRvbS13aWR0aDogMXB4OyBib3JkZXItc3R5bGU6IHNvbGlkOyI+PC9kaXY+JzsKICAgICAgICB9IGVsc2UgeyAvLyB3aXRoIGNhdGVnb3J5IG5hbWUKICAgICAgICAgIGNvbnN0IGNhdGVnb3J5X25hbWUgPSBjdXJyX2NhdGVnb3J5LnN1YnN0cmluZygndGFnLXR5cGUtJy5sZW5ndGgpOwoKICAgICAgICAgIGEuc3R5bGUucGFkZGluZ0xlZnQgPSAnMi41JSc7CiAgICAgICAgICBhLnN0eWxlLnBhZGRpbmdSaWdodCA9ICcyLjUlJzsKICAgICAgICAgIGEuaW5uZXJIVE1MID0KICAgICAgICAgICAgJzxkaXYgc3R5bGU9IndpZHRoOjUwJTsgaGVpZ2h0OiAwOyBib3JkZXItdG9wLXdpZHRoOiAxcHg7IGJvcmRlci1ib3R0b20td2lkdGg6IDFweDsgYm9yZGVyLXN0eWxlOiBzb2xpZDsiPjwvZGl2PicgKwogICAgICAgICAgICBgPGRpdiBzdHlsZT0iYm9yZGVyLXdpZHRoOiAycHg7IG1hcmdpbjogMnB4IDJweCAycHggMnB4OyBwYWRkaW5nLWxlZnQ6IDRweDsgcGFkZGluZy1yaWdodDogNHB4OyBib3JkZXItc3R5bGU6IHNvbGlkIj4ke2NhdGVnb3J5X25hbWV9PC9kaXY+YCArCiAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJ3aWR0aDo1MCU7IGhlaWdodDogMDsgYm9yZGVyLXRvcC13aWR0aDogMXB4OyBib3JkZXItYm90dG9tLXdpZHRoOiAxcHg7IGJvcmRlci1zdHlsZTogc29saWQ7Ij48L2Rpdj4nOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgY29sbGFwc2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnTEknKTsKICAgICAgICBjb2xsYXBzZXIuY2xhc3NOYW1lID0gaXRlbS5jbGFzc05hbWU7CiAgICAgICAgY29sbGFwc2VyLmFwcGVuZENoaWxkKGEpOwogICAgICAgIHByZXZfY2F0ZWdvcnlfY29sbGFwc2VyID0gY29sbGFwc2VyOwoKICAgICAgICAvLyB3YXJuaW5nOiBtb2RpZmllcyBpdGVyYXRpbmcgbGlzdCwgY3VycmVudCBpdGVtIHdpbGwgYmUgcHJvY2Vzc2VkIHR3aWNlCiAgICAgICAgaXRlbS5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2JlZm9yZWJlZ2luJywgY29sbGFwc2VyKTsKICAgICAgfQogICAgfQoKICAgIC8vIHNldHVwIGxhc3QgY29sbGFwc2VyCiAgICBpZiAocHJldl9jYXRlZ29yeV9jb2xsYXBzZXIgIT09IG51bGwpCiAgICAgIHNldHVwX2NvbGxhcHNlcihwcmV2X2NhdGVnb3J5X2NvbGxhcHNlciwgY3Vycl9jYXRlZ29yeSwgWy4uLmN1cnJfY2F0ZWdvcnlfdGFnc10pOwoKICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgY2F0ZWdvcmllcykKICAgICAgaWYgKGNvbmZpZy5jb2xsYXBzZWRfdGFnX2NhdGVnb3JpZXMuaGFzKGNhdGVnb3J5KSkKICAgICAgICBjb2xsYXBzZV90YWdfY2F0ZWdvcnkoY2F0ZWdvcnksIHRydWUsIGZhbHNlKTsKICB9CgogIGZ1bmN0aW9uIGdldF90aHVtYm5haWxfcG9zdF9pZCh0aHVtYikgewogICAgY29uc3QgcGlkID0gdGh1bWIuaWQ7CiAgICBpZiAocGlkID09PSAnJykgcmV0dXJuIG51bGw7IC8vIGZpcnN0IHRodW1ibmFpbCBvbiBzaW1pbGFyIHBhZ2UgZG9lc24ndCBoYXZlIHBvc3QgaWQKICAgIGlmICghcGlkLnN0YXJ0c1dpdGgoJ3AnKSkgewogICAgICBjb25zb2xlLmVycm9yKCdbYWRkb24gZXJyb3JdIGludmFsaWQgdGh1bWJuYWlsIGlkJyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGNvbnN0IGlkID0gTnVtYmVyKHBpZC5zdWJzdHJpbmcoMSkpOwogICAgaWYgKE51bWJlci5pc05hTihpZCkpIHsKICAgICAgY29uc29sZS5lcnJvcignW2FkZG9uIGVycm9yXSB0aHVtYm5haWwgaWQgaXNuXCd0IGEgbnVtYmVyJywgaWQpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXR1cm4gaWQ7CiAgfQoKICBjb25zdCBwb3N0X2NhY2hlID0gbmV3IE1hcCgpOyAvLyByZXR1cm5zIG9iamVjdCB3aXRoIHRhZ3MgYXJyYXkgYW5kIHJhdGluZwogIGZ1bmN0aW9uIGdldF9wb3N0KHBvc3RfaWQpIHsKICAgIC8vIG1pZ2h0IG5vdCBiZSBsb2FkZWQgeWV0IG9yIGV4aXN0IGF0IGFsbCAoZS5nIG9uIGRlbGV0aW9uIHBhZ2UpCiAgICBsZXQgcG9zdCA9IHVuc2FmZVdpbmRvdy5Qb3N0Py5wb3N0cz8uZ2V0KHBvc3RfaWQpOwogICAgaWYgKHBvc3QgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHBvc3Q7CgogICAgcG9zdCA9IHBvc3RfY2FjaGUuZ2V0KHBvc3RfaWQpOwogICAgaWYgKHBvc3QgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHBvc3Q7CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBnZXRfcG9zdF9mcm9tX3RodW1iKHRodW1iKSB7CiAgICBjb25zdCBpbWcgPSB0aHVtYi5xdWVyeVNlbGVjdG9yKCcucHJldmlldycpOwogICAgaWYgKGltZyA9PT0gbnVsbCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSB0aHVtYm5haWwgaGFzIG5vIHByZXZpZXcgaW1hZ2UnKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgY29uc3QgcG9zdF9pZCA9IGdldF90aHVtYm5haWxfcG9zdF9pZCh0aHVtYik7CiAgICBsZXQgcG9zdCA9IGdldF9wb3N0KHBvc3RfaWQpOwoKICAgIGlmIChwb3N0ICE9PSBudWxsKSByZXR1cm4gcG9zdDsKCiAgICAvLyBub3RlOiB0aHVtYm5haWwgdGl0bGUgdGFncyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50LCBlLmcuIFJhdGluZzpTYWZlIGluc3RlYWQgb2YgcmF0aW5nOnMKICAgIGxldCB0YWdzID0gbmV3IFRhZ3MoaW1nLnRpdGxlKS50b0FycmF5KCk7CgogICAgLy8gZmluZCByYXRpbmcKICAgIGxldCByYXRpbmcgPSBudWxsOwogICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykgewogICAgICBpZiAodGFnLnN0YXJ0c1dpdGgoJ1JhdGluZzonKSkgewogICAgICAgIHJhdGluZyA9IHRhZy5zdWJzdHJpbmcoJ1JhdGluZzonLmxlbmd0aClbMF0udG9Mb3dlckNhc2UoKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIC8vIHJlbW92ZSAibWF0Y2ggdGFncyIKICAgIHRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB7CiAgICAgIHJldHVybiAhKHRhZy5zdGFydHNXaXRoKCdSYXRpbmc6JykgfHwgdGFnLnN0YXJ0c1dpdGgoJ1Njb3JlOicpIHx8IHRhZy5zdGFydHNXaXRoKCdTaXplOicpIHx8IHRhZy5zdGFydHNXaXRoKCdVc2VyOicpKTsKICAgIH0pOwoKICAgIHBvc3QgPSB7CiAgICAgIHRhZ3MsCiAgICAgIHJhdGluZywKICAgIH07CgogICAgcG9zdF9jYWNoZS5zZXQocG9zdF9pZCwgcG9zdCk7CgogICAgcmV0dXJuIHBvc3Q7CiAgfQoKICBmdW5jdGlvbiBtb2RpZnlfdGh1bWJuYWlsKHByZXZpZXcpIHsKICAgIC8vIE11dGF0aW9uT2JzZXJ2ZXIgaXMgd2FpdGluZyBmb3IgLnByZXZpZXcgc28gd2UgY2FuIGd1YXJhbnRlZSBhbGwgdGhlIG5lY2Vzc2FyeSBkYXRhIGlzIHRoZXJlCiAgICBjb25zdCB0aHVtYl9hID0gcHJldmlldy5wYXJlbnRFbGVtZW50OwogICAgY29uc3QgdGh1bWIgPSB0aHVtYl9hPy5wYXJlbnRFbGVtZW50OwoKICAgIC8vIHN0aWxsIG1ha2UgZXh0cmEgc3VyZSBzdHVmZidzIGluIHBsYWNlCiAgICBpZiAodGh1bWJfYT8udGFnTmFtZSAhPT0gJ0EnKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIHRodW1ibmFpbCBoYXMgbm8gYW5jaG9yIHRhZz8hJyk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAoIXRodW1iPy5tYXRjaGVzKCdzcGFuLnRodW1iJykpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ1thZGRvbiBlcnJvcl0gdGh1bWJuYWlsIGhhcyBubyB0aHVtYiBzcGFuPyEnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IHBvc3RfaWQgPSBnZXRfdGh1bWJuYWlsX3Bvc3RfaWQodGh1bWIpOwogICAgaWYgKHBvc3RfaWQgPT09IG51bGwpIHJldHVybjsKCiAgICAvLyB1c2UgYW5kIHVwZGF0ZSB0aHVtYm5haWxfY2FjaGUKICAgIGNvbnN0IHRodW1icyA9IEdlbmVyYWwudGh1bWJuYWlsX2NhY2hlLmdldChwb3N0X2lkKSA/PyBbXTsKCiAgICBjb25zdCBpc19uZXcgPSAhdGh1bWJzLmluY2x1ZGVzKHRodW1iKTsKCiAgICBpZiAoaXNfbmV3KSB0aHVtYnMucHVzaCh0aHVtYik7CiAgICBHZW5lcmFsLnRodW1ibmFpbF9jYWNoZS5zZXQocG9zdF9pZCwgdGh1bWJzKTsKCiAgICBpZiAoaXNfbmV3KSB7CiAgICAgIG92ZXJyaWRlX3RodW1ibmFpbF9jbGlja19ldmVudCh0aHVtYl9hKTsKICAgICAgYWRkX3RodW1ibmFpbF9pY29ucyh0aHVtYik7CgogICAgICBpZiAoIWlzX3BlcnNvbmFsX3Bvc3RfcGFnZSgpICYmIEdlbmVyYWwucGFnZSAhPT0gUGFnZS5EZWxldGUpCiAgICAgICAgZmFkZW91dF92aWV3ZWRfcG9zdCh0aHVtYiwgcG9zdF9pZCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfdGh1bWJuYWlsX2ljb25zKHRodW1iKSB7CiAgICBpZiAoIShjb25maWcuc2hvd19zcGVha2VyX2ljb24gfHwgY29uZmlnLnNob3dfYW5pbWF0ZWRfaWNvbiB8fCBjb25maWcuc2hvd19yYXRpbmdzX2ljb24pKSByZXR1cm47CgogICAgY29uc3QgcG9zdCA9IGdldF9wb3N0X2Zyb21fdGh1bWIodGh1bWIpOwogICAgaWYgKHBvc3QgPT0gbnVsbCkgcmV0dXJuOwoKICAgIGNvbnN0IGljb25zID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU1BBTicpOwogICAgaWNvbnMuc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnOwoKICAgIGlmIChjb25maWcuc2hvd19yYXRpbmdzX2ljb24pIHsKICAgICAgaWNvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBSQVRJTkdfU1ZHW3Bvc3QucmF0aW5nXSk7CiAgICB9CgogICAgaWYgKGNvbmZpZy5zaG93X3NwZWFrZXJfaWNvbiAmJiAocG9zdC50YWdzLmluY2x1ZGVzKCdoYXNfYXVkaW8nKSkpIHsKICAgICAgaWNvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBTUEVBS0VSX1NWRyk7CiAgICB9IGVsc2UgaWYgKGNvbmZpZy5zaG93X2FuaW1hdGVkX2ljb24gJiYgKHBvc3QudGFncy5pbmNsdWRlcygnYW5pbWF0ZWQnKSB8fCBwb3N0LnRhZ3MuaW5jbHVkZXMoJ3ZpZGVvJykgfHwgcG9zdC50YWdzLmluY2x1ZGVzKCdzbGlkZXNob3cnKSkpIHsKICAgICAgaWNvbnMuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBBTklNQVRFRF9TVkcpOwogICAgfQoKICAgIGljb25zLmNsYXNzTmFtZSA9ICd0aHVtYm5haWxfaWNvbnMnOwogICAgaWNvbnMuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwogICAgaWNvbnMuc3R5bGUudG9wICAgPSAnMnB4JzsgLy8gYWNjb3VudCBmb3IgYm9yZGVyCiAgICBpY29ucy5zdHlsZS5yaWdodCA9ICcycHgnOwogICAgaWNvbnMuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtTVkdfU0laRSAvIDJ9cHgpIHRyYW5zbGF0ZVkoLSR7U1ZHX1NJWkUgLyAyfXB4KWA7CgogICAgdGh1bWIucXVlcnlTZWxlY3RvcignYScpLmFwcGVuZENoaWxkKGljb25zKTsKICB9CgogIGZ1bmN0aW9uIGZhZGVvdXRfcG9zdCh0aHVtYikgewogICAgaWYgKCFjb25maWcudmlld19oaXN0b3J5X2VuYWJsZWQpIHJldHVybjsKCiAgICBjb25zdCBhID0gdGh1bWIucXVlcnlTZWxlY3RvcignYScpOwogICAgY29uc3QgaW1nID0gdGh1bWIucXVlcnlTZWxlY3RvcignaW1nJyk7CgogICAgLy8gbW92ZSBib3ggc2hhZG93IGZyb20gaW1hZ2UgdG8gbGluaywgc28gb3BhY2l0eSBkb2Vzbid0IGFmZmVjdCBpdAogICAgYS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICBhLnN0eWxlLmJveFNoYWRvdyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGltZykuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNoYWRvdycpOwogICAgaW1nLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdib3gtc2hhZG93Jyk7CgogICAgaW1nLnN0eWxlLm9wYWNpdHkgPSAnMjAlJzsKICAgIGZvciAoY29uc3QgdGh1bWJuYWlsX2ljb25zIG9mIHRodW1iLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3RodW1ibmFpbF9pY29ucycpKQogICAgICB0aHVtYm5haWxfaWNvbnMuc3R5bGUub3BhY2l0eSA9ICcyMCUnOwogIH0KCiAgZnVuY3Rpb24gZmFkZW91dF92aWV3ZWRfcG9zdCh0aHVtYiwgaWQpIHsKICAgIGlmIChjb25maWdbSElTVE9SWV9LRVldLmhhcyhpZCkpCiAgICAgIGZhZGVvdXRfcG9zdCh0aHVtYik7CiAgfQoKICBmdW5jdGlvbiBjb25maWd1cmVfdmlkZW8obm9kZSkgewogICAgaWYgKGNvbmZpZy52aWRlb19wYXVzZSkgICAgICBub2RlLnBhdXNlKCk7CiAgICBpZiAoY29uZmlnLnNldF92aWRlb192b2x1bWUpIG5vZGUudm9sdW1lID0gY29uZmlnLnZpZGVvX3ZvbHVtZSAvIDEwMC4wOwogICAgaWYgKGNvbmZpZy52aWRlb19tdXRlKSAgICAgICBub2RlLm11dGVkID0gdHJ1ZTsKICAgIG5vZGUuY29udHJvbHMgPSBjb25maWcudmlkZW9fY29udHJvbHM7CiAgfQoKICBmdW5jdGlvbiB1c2VmdWxfYmV0YV9saW5rKHBhdGhuYW1lKSB7IC8vIGlkZWEgYW5kIHNvbWUgY29kZSBkb25hdGVkIGJ5IE9jdG9wdXMgSHVnZ2VyCiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKS5zZWFyY2hQYXJhbXM7CiAgICBjb25zdCBiZXRhTGluayA9IG5ldyBVUkwoJ2h0dHBzOi8vYmV0YS5zYW5rYWt1Y29tcGxleC5jb20vJyk7CgogICAgLy8gcG9zdCBpbmRleC9wYWdlLCBzaW1wbHkgcmVwbGFjZSBjaGFuIHdpdGggYmV0YSBhbmQga2VlcCBzZWFyY2ggcGFyYW1ldGVycwogICAgaWYgKHBhdGhuYW1lID09PSAnLycgfHwgcGF0aG5hbWUuc3RhcnRzV2l0aCgnL3Bvc3Qvc2hvdycpKSB7CiAgICAgIGJldGFMaW5rLnBhdGhuYW1lID0gcGF0aG5hbWU7CiAgICAgIGJldGFMaW5rLnNlYXJjaCA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CiAgICB9CgogICAgLy8gdXNlciBwYWdlLCAvdXNlci9zaG93LzxpZD4gLT4gL3VzZXIvc2hvdz9pZD08aWQ+CiAgICBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3VzZXIvc2hvdycpKSB7CiAgICAgIGNvbnN0IHRlbXAgPSAocGF0aG5hbWUuZW5kc1dpdGgoJy8nKSA/IHBhdGhuYW1lLnNsaWNlKDAsIC0xKSA6IHBhdGhuYW1lKTsKICAgICAgY29uc3QgdXNlcl9pZCA9IHRlbXAuc3Vic3RyaW5nKHRlbXAubGFzdEluZGV4T2YoJy8nKSArIDEpOwoKICAgICAgYmV0YUxpbmsucGF0aG5hbWUgPSAnL3VzZXIvc2hvdyc7CiAgICAgIGJldGFMaW5rLnNlYXJjaFBhcmFtcy5zZXQoJ2lkJywgdXNlcl9pZCk7CiAgICB9CgogICAgLy8gd2lraSwgL3dpa2kvc2hvdz90aXRsZT08ZW50cnk+IC0+IC90YWcvZW4/dGFnTmFtZT08ZW50cnk+CiAgICBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3dpa2kvc2hvdycpKSB7CiAgICAgIGJldGFMaW5rLnBhdGhuYW1lID0gJy90YWcvZW4nOwogICAgICBiZXRhTGluay5zZWFyY2hQYXJhbXMuc2V0KCd0YWdOYW1lJywgcGFyYW1zLmdldCgndGl0bGUnKSk7CiAgICB9CgogICAgLy8gdXBkYXRlIGJldGEgbGluawogICAgZm9yIChjb25zdCBhIG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNuYXZiYXIgYVtocmVmPSJodHRwczovL2JldGEuc2Fua2FrdWNvbXBsZXguY29tLyJdJykpIHsKICAgICAgYS5ocmVmID0gYmV0YUxpbmsuaHJlZjsKICAgIH0KICB9CgoKICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAgLyogbWFpbiBwYWdlIC8gdmlzdWFsbHkgc2ltaWxhciBwYWdlIGZ1bmN0aW9ucyAqLwogIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCiAgY2xhc3MgSW5kZXhQYWdlIHsKICAgIHN0YXRpYyBoYXNfdGFnX3NjcmlwdHM7CgogICAgc3RhdGljIGluaXQoKSB7CiAgICAgIEluZGV4UGFnZS5oYXNfdGFnX3NjcmlwdHMgPSAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI21vZGUgPiBvcHRpb25bdmFsdWU9YXBwbHktdGFnLXNjcmlwdF0nKSAhPT0gbnVsbCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBzZWxlY3RfbW9kZShtb2RlKSB7CiAgICBjb25zdCBtb2RlX2Ryb3Bkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGUnKTsKCiAgICBjb25zdCBvbGRfbW9kZSA9IG1vZGVfZHJvcGRvd24udmFsdWU7CiAgICBtb2RlX2Ryb3Bkb3duLnZhbHVlID0gbW9kZTsKICAgIGlmICghbW9kZV9kcm9wZG93bi52YWx1ZSkgbW9kZV9kcm9wZG93bi52YWx1ZSA9IG9sZF9tb2RlOyAvLyBjb3VsZG4ndCBzZXQgbW9kZSAob3B0aW9uIGRvZXNuJ3QgZXhpc3QpCgogICAgUG9zdE1vZGVNZW51X2NoYW5nZV9vdmVycmlkZSgpOwogIH0KCiAgZnVuY3Rpb24gYWRkX21vZGVfb3B0aW9ucygpIHsKICAgIGNvbnN0IG1vZGVfZHJvcGRvd24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZScpOwogICAgaWYgKG1vZGVfZHJvcGRvd24gPT09IG51bGwpIHJldHVybjsgLy8gbm90IGxvZ2dlZCBpbgoKICAgIGNvbnN0IGFkZF9tb2RlX29wdGlvbiA9ICh0ZXh0LCB2YWx1ZSkgPT4gewogICAgICBjb25zdCBvcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKICAgICAgb3B0aW9uLnRleHQgID0gdGV4dDsKICAgICAgb3B0aW9uLnZhbHVlID0gdmFsdWU7CiAgICAgIG1vZGVfZHJvcGRvd24uYWRkKG9wdGlvbik7CiAgICB9OwoKICAgIGlmIChJbmRleFBhZ2UuaGFzX3RhZ19zY3JpcHRzKSB7CiAgICAgIGFkZF9tb2RlX29wdGlvbignQ2hvb3NlIFBhcmVudCcsICdjaG9vc2UtcGFyZW50Jyk7CiAgICAgIGFkZF9tb2RlX29wdGlvbignU2V0IFBhcmVudCcsICdzZXQtcGFyZW50Jyk7CiAgICB9CiAgICBhZGRfbW9kZV9vcHRpb24oJ0VkaXQgVGFncycsICdlZGl0LXRhZ3MnKTsKICAgIGFkZF9tb2RlX29wdGlvbignRmluZCBTaW1pbGFyJywgJ2ZpbmQtc2ltaWxhcicpOwoKICAgIG92ZXJyaWRlX21vZGVfY2hhbmdlX2V2ZW50KG1vZGVfZHJvcGRvd24pOwoKICAgIFBvc3RNb2RlTWVudV9pbml0X3dvcmthcm91bmQoKTsgLy8gZ3VhcmFudGVlIHRoYXQgJ21vZGUnIGNvcnJlY3RseSBjaGFuZ2VzIHRvIG5ldyBtb2RlcyB3aGVuIGxvYWRpbmcgcGFnZQogIH0KCiAgZnVuY3Rpb24gYWRkX3Bvc3RfZWRpdF9kaWFsb2coKSB7CiAgICBjb25zdCBkaWFsb2cgPSBjcmVhdGVfcG9wdXBfbWVudSgpOwogICAgZGlhbG9nLmlkID0gJ3Bvc3RfZWRpdF9kaWFsb2cnOwogICAgZGlhbG9nLnN0eWxlLmJvcmRlcldpZHRoID0gJzRweCc7CgogICAgLy8gZWRpdCBib3gsIG1vZGlmaWVkIGZyb20gdGhlIHBvc3QgcGFnZQogICAgZGlhbG9nLmlubmVySFRNTCA9CiAgICAgIGA8ZGl2IGlkPSJTQS1lZGl0IiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsiPgo8ZGl2IHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogMzAwcHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBtYXJnaW4tcmlnaHQ6IDEycHgiPgo8aW1nIGlkPSJTQS1lZGl0LWltYWdlIiBzcmM9IiR7RU1QVFlfSU1BR0V9Ij4KPC9kaXY+CjxkaXY+CjxoNT48YSBpZD0icG9zdC1saW5rIiBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj48L2E+PC9oNT4KPGZvcm0gaWQ9IlNBLWVkaXQtZm9ybSIgbWV0aG9kPSJwb3N0IiBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50Ij4KPGlucHV0IGlkPSJTQS1wb3N0X29sZF90YWdzIiBuYW1lPSJwb3N0W29sZF90YWdzXSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iIj4KPHRhYmxlIGNsYXNzPSJmb3JtIj4KPHRmb290Pgo8dHI+Cjx0ZCBjb2xzcGFuPSIyIiBzdHlsZT0id2hpdGUtc3BhY2U6IG5vd3JhcCI+PGlucHV0IGFjY2Vzc2tleT0icyIgbmFtZT0iY29tbWl0IiB0YWJpbmRleD0iMTEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNhdmUgY2hhbmdlcyIgc3R5bGU9Im1pbi13aWR0aDogMTMuNWVtOyI+CjwvdGQ+CjwvdHI+CjwvdGZvb3Q+Cjx0Ym9keT4KPHRyPgo8dGggc3R5bGU9IndpZHRoOiAxMCUiPgo8bGFiZWwgY2xhc3M9ImJsb2NrIiBmb3I9IlNBLXBvc3RfcmF0aW5nX3F1ZXN0aW9uYWJsZSI+UmF0aW5nPC9sYWJlbD4KPC90aD4KPHRkIHN0eWxlPSJ3aWR0aDogOTAlIj4KPGlucHV0IGlkPSJTQS1wb3N0X3JhdGluZ19leHBsaWNpdCIgbmFtZT0icG9zdFtyYXRpbmddIiB0YWJpbmRleD0iMSIgdHlwZT0icmFkaW8iIHZhbHVlPSJleHBsaWNpdCI+CjxsYWJlbCBmb3I9IlNBLXBvc3RfcmF0aW5nX2V4cGxpY2l0Ij5SMTgrPC9sYWJlbD4KPGlucHV0IGlkPSJTQS1wb3N0X3JhdGluZ19xdWVzdGlvbmFibGUiIG5hbWU9InBvc3RbcmF0aW5nXSIgdGFiaW5kZXg9IjIiIHR5cGU9InJhZGlvIiB2YWx1ZT0icXVlc3Rpb25hYmxlIj4KPGxhYmVsIGZvcj0iU0EtcG9zdF9yYXRpbmdfcXVlc3Rpb25hYmxlIj5SMTUrPC9sYWJlbD4KPGlucHV0IGNoZWNrZWQ9IiIgaWQ9IlNBLXBvc3RfcmF0aW5nX3NhZmUiIG5hbWU9InBvc3RbcmF0aW5nXSIgdGFiaW5kZXg9IjMiIHR5cGU9InJhZGlvIiB2YWx1ZT0ic2FmZSI+CjxsYWJlbCBmb3I9IlNBLXBvc3RfcmF0aW5nX3NhZmUiPkc8L2xhYmVsPgo8L3RkPgo8L3RyPgo8dHI+Cjx0aD4KPGxhYmVsIGNsYXNzPSJibG9jayIgZm9yPSJTQS1wb3N0X3RhZ3MiPlRhZ3M8L2xhYmVsPgo8L3RoPgo8dGQ+Cjx0ZXh0YXJlYSBjb2xzPSI4MyIgaWQ9IlNBLXBvc3RfdGFncyIgbmFtZT0icG9zdFt0YWdzXSIgcm93cz0iOSIgc3BlbGxjaGVjaz0iZmFsc2UiIHRhYmluZGV4PSIxMCIgYXV0b2NvbXBsZXRlPSJvZmYiPjwvdGV4dGFyZWE+CjwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvZm9ybT4KPC9kaXY+CjwvZGl2PmA7CgogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaWFsb2cpOwogICAgYWRkX3RhZ19idXR0b25zKCdTQS1lZGl0LWZvcm0nKTsKCiAgICAvLyBoaWRlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gewogICAgICBpZiAoaXNfcG9zdF9lZGl0X2RpYWxvZ192aXNpYmxlKCkpIHsKICAgICAgICBpZiAoZS50YXJnZXQuY2xvc2VzdCgnI3Bvc3RfZWRpdF9kaWFsb2csICNhdXRvc3VnZ2VzdCcpICE9PSBudWxsKQogICAgICAgICAgcmV0dXJuOyAvLyBjbGlja2VkIGluc2lkZQoKICAgICAgICBzaG93X3Bvc3RfZWRpdF9kaWFsb2coZmFsc2UpOwogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgfQogICAgfSwgdHJ1ZSk7CgogICAgZW5hYmxlX2F1dG9fc3VnZ2VzdCgpOwogIH0KCiAgYXN5bmMgZnVuY3Rpb24gZW5hYmxlX2F1dG9fc3VnZ2VzdCgpIHsKICAgIHdoaWxlICh1bnNhZmVXaW5kb3cuQXV0b1N1Z2dlc3QgPT09IHVuZGVmaW5lZCkKICAgICAgYXdhaXQgc2xlZXAoMjUwKTsKCiAgICB1bnNhZmVXaW5kb3cuQXV0b1N1Z2dlc3QuYWRkKCcjU0EtcG9zdF90YWdzJyk7CiAgfQoKICBmdW5jdGlvbiBzaG93X3Bvc3RfZWRpdF9kaWFsb2coYm9vbCkgewogICAgY29uc3QgZGlhbG9nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc3RfZWRpdF9kaWFsb2cnKTsKICAgIGlmIChkaWFsb2cgIT09IG51bGwpIGRpYWxvZy5zdHlsZS5kaXNwbGF5ID0gKGJvb2wgPyAnYmxvY2snIDogJ25vbmUnKTsKICB9CgogIGZ1bmN0aW9uIGlzX3Bvc3RfZWRpdF9kaWFsb2dfdmlzaWJsZSgpIHsKICAgIGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3N0X2VkaXRfZGlhbG9nJyk7CiAgICByZXR1cm4gZGlhbG9nPy5zdHlsZS5kaXNwbGF5ID09PSAnYmxvY2snOwogIH0KCiAgZnVuY3Rpb24gb3Blbl9wb3N0X2VkaXRfZGlhbG9nKHRodW1iKSB7CiAgICBjb25zdCBkaWFsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zdF9lZGl0X2RpYWxvZycpOwogICAgaWYgKGRpYWxvZyA9PT0gbnVsbCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSB0YWcgZWRpdCBwb3B1cCBpcyBtaXNzaW5nPyEnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IHBvc3RfaWQgPSBnZXRfdGh1bWJuYWlsX3Bvc3RfaWQodGh1bWIpOwogICAgaWYgKHBvc3RfaWQgPT09IG51bGwpIHJldHVybjsKCiAgICBjb25zdCBhID0gdGh1bWIucXVlcnlTZWxlY3RvcignYScpOwogICAgaWYgKGEgPT09IG51bGwpIHJldHVybjsKCiAgICBjb25zdCBlZGl0X2ltYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NBLWVkaXQtaW1hZ2UnKTsKICAgIGNvbnN0IHBvc3Rfb2xkX3RhZ3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU0EtcG9zdF9vbGRfdGFncycpOwogICAgY29uc3QgcG9zdF90YWdzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NBLXBvc3RfdGFncycpOwogICAgY29uc3QgZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTQS1lZGl0LWZvcm0nKTsKICAgIGNvbnN0IHBvc3RfbGluayA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwb3N0LWxpbmsnKTsKCiAgICAvLyBzZXQgdGh1bWJuYWlsIGltYWdlIGFuZCBwb3N0IGxpbmsKICAgIGVkaXRfaW1hZ2Uuc3JjID0gRU1QVFlfSU1BR0U7CiAgICBlZGl0X2ltYWdlLnNyYyA9IHRodW1iLnF1ZXJ5U2VsZWN0b3IoJy5wcmV2aWV3Jykuc3JjOwogICAgcG9zdF9saW5rLmhyZWYgPSBhLmhyZWY7CiAgICBwb3N0X2xpbmsuaW5uZXJUZXh0ID0gJ1Bvc3QgJyArIHBvc3RfaWQ7CgogICAgY29uc3QgZnVsbF9yYXRpbmcgPSAocmF0aW5nKSA9PiAoeyBzOiAnc2FmZScsIHE6ICdxdWVzdGlvbmFibGUnLCBlOiAnZXhwbGljaXQnIH1bcmF0aW5nXSk7CgogICAgLy8gZ2V0IHRhZ3MgYW5kIHJhdGluZwogICAgY29uc3QgcG9zdCA9IGdldF9wb3N0X2Zyb21fdGh1bWIodGh1bWIpOwogICAgY29uc3QgdGFncyA9IHBvc3QudGFncy5qb2luKCcgJyk7CiAgICBjb25zdCByYXRpbmcgPSBmdWxsX3JhdGluZyhwb3N0LnJhdGluZyk7CgogICAgLy8gc2V0IGVkaXQgYm94IGNvbnRlbnRzCiAgICBwb3N0X29sZF90YWdzLnZhbHVlID0gdGFnczsKICAgIHBvc3RfdGFncy52YWx1ZSA9IHRhZ3M7CgogICAgaWYgKHJhdGluZyAhPT0gbnVsbCkgewogICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU0EtcG9zdF9yYXRpbmdfJyArIHJhdGluZykuY2hlY2tlZCA9IHRydWU7CiAgICB9CgogICAgdXBkYXRlX3RhZ19lbGVtZW50cygpOwoKICAgIGZvcm0ub25zdWJtaXQgPSBhc3luYyAoZXZlbnQpID0+IHsKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gYmxvY2sgcmVsb2FkaW5nIHBhZ2UKCiAgICAgIGRlbGV0ZV91c2VsZXNzX3RhZ3NfdGFnKCk7CgogICAgICBjb25zdCBzdWJtaXR0ZWRfdGFncyA9IG5ldyBUYWdzKHBvc3RfdGFncy52YWx1ZSkudG9BcnJheSgpOwogICAgICBzaG93X25vdGljZShjb25zb2xlLmxvZywgJ1thZGRvbl0gc2F2aW5nLi4uJyk7CgogICAgICAvLyBtYW51YWxseSBzdWJtaXQgZGF0YQogICAgICB0cnkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobmV3IFVSTChgL3Bvc3QvdXBkYXRlLyR7cG9zdF9pZH1gLCBkb2N1bWVudC5sb2NhdGlvbiksIHsKICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgYm9keTogbmV3IEZvcm1EYXRhKGZvcm0pLAogICAgICAgICAgcmVkaXJlY3Q6ICdtYW51YWwnLCAvLyB0aGlzIHdpbGwgb3RoZXJ3aXNlIGVyciBiZWNhdXNlIG9mIGEgaHR0cHMgLT4gaHR0cCByZWRpcmVjdAogICAgICAgIH0pOwoKICAgICAgICAvLyB3ZSBhc3N1bWUgc3VjY2VzcyBvbiByZWRpcmVjdAogICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnb3BhcXVlcmVkaXJlY3QnIHx8IHJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAvLyB1cGRhdGUgbG9jYWwgdGFncwogICAgICAgICAgcG9zdC50YWdzID0gc3VibWl0dGVkX3RhZ3M7CiAgICAgICAgICBkZWxldGlvbl9zYW5pdHlfY2hlY2tzKCk7CgogICAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5sb2csICdbYWRkb25dIHNhdmVkIHRhZ3MhJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIGNvdWxkblwndCBzYXZlIHRhZ3MhJyk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIG5ldHdvcmsgZXJyb3Igd2hpbGUgc2F2aW5nIHRhZ3MhJywgZXJyb3IpOwogICAgICB9CiAgICB9OwoKICAgIHNob3dfcG9zdF9lZGl0X2RpYWxvZyh0cnVlKTsKICB9CgogIGZ1bmN0aW9uIGFkZF9wb3N0bW9kZV9ob3RrZXlzKCkgewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7CiAgICAgIGNvbnN0IG1vZGVfZHJvcGRvd24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kZScpOwogICAgICBjb25zdCBzY3JpcHRfcHJlc2V0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdzY3JpcHRfcHJlc2V0c19kcm9wZG93bicpOwogICAgICBpZiAobW9kZV9kcm9wZG93biA9PT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoZS5jdHJsS2V5IHx8IGUuYWx0S2V5IHx8IGUuc2hpZnRLZXkpIHJldHVybjsKCiAgICAgIGlmIChlLnRhcmdldCA9PT0gbW9kZV9kcm9wZG93biB8fCAoc2NyaXB0X3ByZXNldHMgIT09IG51bGwgJiYgZS50YXJnZXQgPT09IHNjcmlwdF9wcmVzZXRzKSkgewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgLy8gZS5nLiAndicgd291bGQgb3RoZXJ3aXNlIGNoYW5nZSB0byAnVmlldyBQb3N0cycKICAgICAgfSBlbHNlIGlmIChbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddLmluY2x1ZGVzKGUudGFyZ2V0LnRhZ05hbWUpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25maWcuaW5kZXhwYWdlX2hvdGtleXNbZS5rZXkudG9Mb3dlckNhc2UoKV0/LmNhbGwoZSk7CiAgICB9LCB0cnVlKTsKICB9CgogIGZ1bmN0aW9uIFBvc3RNb2RlTWVudV9pbml0X3dvcmthcm91bmQoKSB7CiAgICAvLyBpc3N1ZTogbmV3IHBvc3QgbW9kZXMgY2FuIHJlc2V0IG9uIHBhZ2UgbG9hZCBpZiB0aGV5IHdlcmUgYWRkZWQgdG9vIGxhdGUKICAgIC8vIHJlYXNvbjogb24gcGFnZSBsb2FkLCBQb3N0TW9kZU1lbnUuaW5pdCByZWFkcyB0aGUgIm1vZGUiIGNvb2tpZSwgdHJpZXMgdG8gc2V0IG1vZGVfZHJvcGRvd24udmFsdWUsIHRoZW4KICAgIC8vIGNhbGxzIFBvc3RNb2RlTWVudS5jaGFuZ2UsIHdoaWNoIHNldHMgdGhlIGNvb2tpZSB0byBtb2RlX2Ryb3Bkb3duLnZhbHVlLgogICAgLy8gc28gaWYgdGhlIG5ldyBtb2RlcyBhcmVuJ3QgYWRkZWQgeWV0LCBtb2RlX2Ryb3Bkb3duLnZhbHVlIGFuZCB0aGUgIm1vZGUiIGNvb2tpZSB3aWxsIGJvdGggcmVzZXQKICAgIC8vIHNvbHV0aW9uOiBzYWZlIG1vZGUgaW4gYSBzZXBhcmF0ZSAnYmFja3VwJyBjb29raWUgYW5kIHNldCB0aGUgIm1vZGUiIGNvb2tpZSBhbmQgbW9kZV9kcm9wZG93biBhZnRlciBuZXcgbW9kZXMgd2VyZSBhZGRlZAogICAgY29uc3QgbW9kZSA9IGdldF9jb29raWUoJ2FkZG9uX21vZGUnKTsKICAgIGlmIChtb2RlICE9PSAnJykgewogICAgICBzZXRfY29va2llKCdtb2RlJywgbW9kZSwgNyk7CiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RlJykudmFsdWUgPSBtb2RlOwogICAgfQoKICAgIFBvc3RNb2RlTWVudV9jaGFuZ2Vfb3ZlcnJpZGUoKTsKICB9CgogIGFzeW5jIGZ1bmN0aW9uIFBvc3RNb2RlTWVudV9jaGFuZ2Vfb3ZlcnJpZGUoKSB7CiAgICBjb25zdCBtb2RlX2Ryb3Bkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGUnKTsKICAgIGlmIChtb2RlX2Ryb3Bkb3duID09PSBudWxsKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIFBvc3RNb2RlTWVudV9jaGFuZ2Vfb3ZlcnJpZGUoKSBjb3VsZG5cJ3QgZmluZCBtb2RlIGRyb3Bkb3duPyEnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIHNldHRpbmcgbW9kZSBmYWlsZWQsIHBvc3NpYmxlIHdoZW4gY2hhbmdpbmcgdG8gYWNjb3VudCB3aXRoIGxvd2VyIHBlcm1pc3Npb25zCiAgICBpZiAoIW1vZGVfZHJvcGRvd24udmFsdWUpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ1thZGRvbiBlcnJvcl0gaW52YWxpZCBtb2RlLCByZXNldHRpbmcgdG8gXCd2aWV3XCcnKTsKICAgICAgbW9kZV9kcm9wZG93bi52YWx1ZSA9ICd2aWV3JzsKICAgICAgc2V0X2Nvb2tpZSgnbW9kZScsICd2aWV3JywgNyk7CiAgICB9CgogICAgLy8gdHJ5IHRvIGd1YXJhbnRlZSBzaXRlc2NyaXB0IGhhcyBsb2FkZWQgVE9ETzogZnV0dXJlIG5vdGU6IHBvdGVudGlhbCBpbmZpbml0ZSBsb29wCiAgICB3aGlsZSAodW5zYWZlV2luZG93LlBvc3RNb2RlTWVudSA9PT0gdW5kZWZpbmVkIHx8IHVuc2FmZVdpbmRvdy5Db29raWUgPT09IHVuZGVmaW5lZCB8fCB1bnNhZmVXaW5kb3cuJCA9PT0gdW5kZWZpbmVkKQogICAgICBhd2FpdCBzbGVlcCgxMDApOwoKICAgIHVuc2FmZVdpbmRvdy5Qb3N0TW9kZU1lbnUuY2hhbmdlKCk7CgogICAgY29uc3QgcyA9IG1vZGVfZHJvcGRvd24udmFsdWU7CgogICAgc2V0X2Nvb2tpZSgnYWRkb25fbW9kZScsIHMsIDcpOyAvLyBzZXQgJ2JhY2t1cCcgY29va2llCgogICAgY29uc3QgZGFya21vZGUgPSBpc19kYXJrbW9kZSgpOwogICAgaWYgKHMgPT09ICdhZGQtZmF2JykgewogICAgICAvLyBGRkZGQUEsIG9yaWdpbmFsLiBkYXJrbW9kZTogbHVtaW5hbmNlIDQwCiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gKGRhcmttb2RlID8gJyM1MDUwMDAnIDogJyNGRkEnKTsKICAgIH0gZWxzZSBpZiAocyA9PT0gJ3JlbW92ZS1mYXYnKSB7CiAgICAgIC8vIEZGRkZBQSAtPiBGRkVFQUEsIHNsaWdodGx5IG1vcmUgb3JhbmdlLiBkYXJrbW9kZTogbHVtaW5hbmNlIDQwCiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gKGRhcmttb2RlID8gJyM1MDQwMDAnIDogJyNGRUEnKTsKICAgIH0gZWxzZSBpZiAocyA9PT0gJ2FwcGx5LXRhZy1zY3JpcHQnKSB7CiAgICAgIC8vIEFBMzNBQSAtPiBGRkRERkYsIHdlYWtlbiBjb2xvciBpbnRlbnNpdHkuIGRhcmttb2RlOiBsdW1pbmFuY2UgNDAKICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAoZGFya21vZGUgPyAnIzUwMDA1MCcgOiAnI0ZERicpOwogICAgfSBlbHNlIGlmIChzID09PSAnYXBwcm92ZScpIHsKICAgICAgLy8gMjI2NkFBIC0+IEZGRERGRiwgaW5jcmVhc2UgY29udHJhc3QgdG8gdW5hcHByb3ZlZCBwb3N0cy4gZGFya21vZGU6IGx1bWluYW5jZSA0MAogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IChkYXJrbW9kZSA/ICcjNTAwMDUwJyA6ICcjRkRGJyk7CiAgICB9IGVsc2UgaWYgKHMgPT09ICdjaG9vc2UtcGFyZW50JykgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IChkYXJrbW9kZSA/ICcjNDY0NjAwJyA6ICcjRkZEJyk7CiAgICB9IGVsc2UgaWYgKHMgPT09ICdzZXQtcGFyZW50JykgewogICAgICBpZiAoZ2V0X2Nvb2tpZSgnY2hvc2VuLXBhcmVudCcpID09PSAnJykgewogICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgJ1thZGRvbl0gQ2hvb3NlIHBhcmVudCBmaXJzdCEnKTsKICAgICAgICBzZWxlY3RfbW9kZSgnY2hvb3NlLXBhcmVudCcpOwogICAgICB9IGVsc2UgewogICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gKGRhcmttb2RlID8gJyMwMDUwNTAnIDogJyNERkYnKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChzID09PSAnZWRpdC10YWdzJykgewogICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IChkYXJrbW9kZSA/ICcjMDA2NDAwJyA6ICcjM0EzJyk7CiAgICB9IGVsc2UgaWYgKHMgPT09ICdmaW5kLXNpbWlsYXInKSB7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2JhY2tncm91bmQtY29sb3InKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIFBvc3RNb2RlTWVudV9jbGlja19vdmVycmlkZShldmVudCkgewogICAgY29uc3QgdGh1bWJfYSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7CiAgICBjb25zdCB0aHVtYiA9IHRodW1iX2EucGFyZW50RWxlbWVudDsKICAgIGNvbnN0IHBvc3RfaWQgPSBnZXRfdGh1bWJuYWlsX3Bvc3RfaWQodGh1bWIpOwoKICAgIGlmICh1bnNhZmVXaW5kb3cuUG9zdE1vZGVNZW51LmNsaWNrKHBvc3RfaWQpKQogICAgICByZXR1cm4gdHJ1ZTsgLy8gdmlldyBtb2RlLCBsZXQgaXQgY2xpY2sKCiAgICBjb25zdCBtb2RlX2Ryb3Bkb3duID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGUnKTsKICAgIGNvbnN0IHMgPSBtb2RlX2Ryb3Bkb3duLnZhbHVlOwoKICAgIGlmIChzID09PSAnY2hvb3NlLXBhcmVudCcpIHsKICAgICAgc2V0X2Nvb2tpZSgnY2hvc2VuLXBhcmVudCcsIHBvc3RfaWQpOwogICAgICBtb2RlX2Ryb3Bkb3duLnZhbHVlID0gJ3NldC1wYXJlbnQnOwogICAgICBQb3N0TW9kZU1lbnVfY2hhbmdlX292ZXJyaWRlKCk7CiAgICB9IGVsc2UgaWYgKHMgPT09ICdzZXQtcGFyZW50JykgewogICAgICBjb25zdCBwYXJlbnRfaWQgPSBnZXRfY29va2llKCdjaG9zZW4tcGFyZW50Jyk7CiAgICAgIHVuc2FmZVdpbmRvdy5UYWdTY3JpcHQucnVuKHBvc3RfaWQsICdwYXJlbnQ6JyArIHBhcmVudF9pZCArIChjb25maWcuc2V0cGFyZW50X2RlbGV0ZXBvdGVudGlhbGR1cGxpY2F0ZSA/ICcgLXBvdGVudGlhbF9kdXBsaWNhdGUnIDogJycpKTsKICAgIH0gZWxzZSBpZiAocyA9PT0gJ2VkaXQtdGFncycpIHsKICAgICAgb3Blbl9wb3N0X2VkaXRfZGlhbG9nKHRodW1iKTsKICAgIH0gZWxzZSBpZiAocyA9PT0gJ2ZpbmQtc2ltaWxhcicpIHsKICAgICAgb3Blbl9pbl90YWIod2luZG93LmxvY2F0aW9uLm9yaWdpbiArICcvcG9zdC9zaW1pbGFyP2lkPScgKyBwb3N0X2lkKTsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBvdmVycmlkZV9tb2RlX2NoYW5nZV9ldmVudChtb2RlX2Ryb3Bkb3duKSB7CiAgICBtb2RlX2Ryb3Bkb3duLnJlbW92ZUF0dHJpYnV0ZSgnb25jaGFuZ2UnKTsKICAgIG1vZGVfZHJvcGRvd24ub25jaGFuZ2UgPSBQb3N0TW9kZU1lbnVfY2hhbmdlX292ZXJyaWRlOwogIH0KCiAgZnVuY3Rpb24gb3ZlcnJpZGVfdGh1bWJuYWlsX2NsaWNrX2V2ZW50KHRodW1iX2EpIHsKICAgIHRodW1iX2EucmVtb3ZlQXR0cmlidXRlKCdvbmNsaWNrJyk7CiAgICB0aHVtYl9hLm9uY2xpY2sgPSBQb3N0TW9kZU1lbnVfY2xpY2tfb3ZlcnJpZGU7CiAgfQoKICAvKioqKioqKioqKioqKioqKioqKioqKiovCiAgLyogcG9zdCBwYWdlIGZ1bmN0aW9ucyAqLwogIC8qKioqKioqKioqKioqKioqKioqKioqKi8KCiAgLy8gVE9ETyBleHBhbmQgdGhpcwogIGNsYXNzIFBvc3RQYWdlIHsKICAgIHN0YXRpYyBwb3N0X2lkID0gbnVsbDsKICAgIHN0YXRpYyBwYXJlbnRfaWQgPSBudWxsOwoKICAgIHN0YXRpYyBpbml0KHBhdGhuYW1lKSB7CiAgICAgIFBvc3RQYWdlLnBvc3RfaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlkZGVuX3Bvc3RfaWQnKT8uaW5uZXJUZXh0OwogICAgICBpZiAoUG9zdFBhZ2UucG9zdF9pZCA9PSBudWxsKSB7CiAgICAgICAgY29uc3QgdGVtcCA9IChwYXRobmFtZS5lbmRzV2l0aCgnLycpID8gcGF0aG5hbWUuc2xpY2UoMCwgLTEpIDogcGF0aG5hbWUpOwogICAgICAgIFBvc3RQYWdlLnBvc3RfaWQgPSB0ZW1wLnN1YnN0cmluZyh0ZW1wLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKICAgICAgfQoKICAgICAgUG9zdFBhZ2UucGFyZW50X2lkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc3RfcGFyZW50X2lkJyk/LnZhbHVlOwogICAgfQogIH0KCiAgLy8gb3JpZ2luYWwgcG9zdC9wYXJlbnQgaWRzCiAgbGV0IGltYWdlX2RhdGEgPSBudWxsOwogIGxldCByZXNpemVfdGltZXI7CiAgbGV0IHRhZ191cGRhdGVfdGltZXI7CiAgbGV0IHRhZ3NfY2hhbmdlZCA9IGZhbHNlOwogIC8vIHNldCBieSBmaW5kX2FjdGlvbnNfbGlzdCgpOgogIGxldCBmb3VuZF9kZWxldGVfYWN0aW9uID0gZmFsc2U7CgogIGxldCBkb25lX3Njcm9sbGluZyA9IGZhbHNlOwogIGZ1bmN0aW9uIGlzX2RvbmVfc2Nyb2xsaW5nKCkgewogICAgcmV0dXJuICFjb25maWcuc2Nyb2xsX3RvX2ltYWdlIHx8IGRvbmVfc2Nyb2xsaW5nOwogIH0KCiAgY2xhc3MgVGFnTWVudVNjYWxlciB7CiAgICBzdGF0aWMgI21vdXNlX21vdmVkID0gZmFsc2U7CgogICAgc3RhdGljIG1vdXNlZG93bihlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgVGFnTWVudVNjYWxlci4jbW91c2VfbW92ZWQgPSBmYWxzZTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIFRhZ01lbnVTY2FsZXIubW91c2Vtb3ZlKTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCAgIFRhZ01lbnVTY2FsZXIubW91c2V1cCk7CiAgICB9CgogICAgc3RhdGljIG1vdXNlbW92ZShlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgVGFnTWVudVNjYWxlci4jbW91c2VfbW92ZWQgPSB0cnVlOwogICAgICBUYWdNZW51U2NhbGVyLnNldF9zY2FsZShlLCBmYWxzZSk7CiAgICB9CgogICAgc3RhdGljIG1vdXNldXAoZSkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmIChUYWdNZW51U2NhbGVyLiNtb3VzZV9tb3ZlZCkgVGFnTWVudVNjYWxlci5zZXRfc2NhbGUoZSwgdHJ1ZSk7CgogICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgVGFnTWVudVNjYWxlci5tb3VzZW1vdmUpOwogICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICAgVGFnTWVudVNjYWxlci5tb3VzZXVwKTsKICAgIH0KCiAgICBzdGF0aWMgc2V0X3NjYWxlKGUsIHNhdmUpIHsKICAgICAgY29uc3QgdGFnX21lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFnX21lbnUnKTsKICAgICAgaWYgKHRhZ19tZW51ID09PSBudWxsKSByZXR1cm47CgogICAgICBjb25zdCB5RnJvbUJvdHRvbSA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGUuY2xpZW50WTsKICAgICAgbGV0IHlQZXJjZW50ZnJvbUJvdHRvbSA9ICgxMDAuMCAqICh5RnJvbUJvdHRvbSAvIHdpbmRvdy5pbm5lckhlaWdodCkpOwogICAgICB5UGVyY2VudGZyb21Cb3R0b20gPSBNYXRoLm1pbihNYXRoLm1heCh5UGVyY2VudGZyb21Cb3R0b20sIDUpLCA5NSkgKyAnJSc7CgogICAgICB0YWdfbWVudS5zdHlsZS5oZWlnaHQgPSB5UGVyY2VudGZyb21Cb3R0b207CgogICAgICBpZiAoc2F2ZSkgc2F2ZV9zZXR0aW5nKCd0YWdfbWVudV9zY2FsZScsIHlQZXJjZW50ZnJvbUJvdHRvbSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfdGFnX21lbnUoKSB7CiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc3RfdGFncycpID09PSBudWxsKSByZXR1cm47IC8vIG5vdCBsb2dnZWQgaW4KCiAgICBjb25zdCB0YWdfbWVudSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgdGFnX21lbnUuaWQgPSAndGFnX21lbnUnOwogICAgdGFnX21lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIHRhZ19tZW51LnN0eWxlLndpZHRoID0gJzEwMCUnOwogICAgdGFnX21lbnUuc3R5bGUuaGVpZ2h0ID0gY29uZmlnLnRhZ19tZW51X3NjYWxlOwogICAgdGFnX21lbnUuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOwogICAgdGFnX21lbnUuc3R5bGUuYm90dG9tID0gJzAnOwogICAgdGFnX21lbnUuc3R5bGUub3ZlcmZsb3cgPSAnYXV0byc7CiAgICB0YWdfbWVudS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBnZXRfb3JpZ2luYWxfYmFja2dyb3VuZF9jb2xvcigpOwogICAgdGFnX21lbnUuc3R5bGUuekluZGV4ID0gJzEwMDAxJzsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGFnX21lbnUpOwoKICAgIC8vIHRoZSBpbm5lciBkaXYgZW5zdXJlcyB0YWdfbWVudV9jbG9zZSBidXR0b24gZG9lc24ndCBzY3JvbGwgd2l0aCB0aGUgY29udGVudAogICAgdGFnX21lbnUuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9IndpZHRoOiBjYWxjKDEwMCUgLSAycHgpOyBoZWlnaHQ6IDEwMCU7IG92ZXJmbG93OiBhdXRvOyI+PHNwYW4gaWQ9ImNvbW1vbl90YWdzIj48L3NwYW4+Q3VycmVudCBUYWdzOjxzcGFuIGlkPSJjdXJyZW50X3RhZ3MiPjwvc3Bhbj48L2Rpdj4nOwoKICAgIGNvbnN0IHRhZ19tZW51X3NjYWxlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgdGFnX21lbnVfc2NhbGVyLmlkID0gJ3RhZ19tZW51X3NjYWxlcic7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUuaGVpZ2h0ID0gJzZweCc7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gc2hpZnRlZF9iYWNrZ3JvdW5kQ29sb3IoMzIpOwogICAgdGFnX21lbnVfc2NhbGVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJzsKICAgIHRhZ19tZW51X3NjYWxlci5zdHlsZS50b3AgPSAnMCc7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUuY3Vyc29yID0gJ25zLXJlc2l6ZSc7CiAgICB0YWdfbWVudV9zY2FsZXIuc3R5bGUuekluZGV4ID0gJzEwMDAwJzsKICAgIHRhZ19tZW51X3NjYWxlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBUYWdNZW51U2NhbGVyLm1vdXNlZG93bik7CiAgICB0YWdfbWVudS5hcHBlbmRDaGlsZCh0YWdfbWVudV9zY2FsZXIpOwogICAgdGFnX21lbnUuc3R5bGUucGFkZGluZ1RvcCA9IHRhZ19tZW51X3NjYWxlci5zdHlsZS5oZWlnaHQ7IC8vIHNpbmNlIHRhZ19tZW51X3NjYWxlciBmbG9hdHMgYWJvdmUgdGhlIHRhZ3MKCiAgICBjb25zdCBjcmVhdGVfdGFnX21lbnVfYnV0dG9uID0gZnVuY3Rpb24oaWQsIHRleHQpIHsKICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7CiAgICAgIGJ1dHRvbi5pZCA9IGlkOwogICAgICBidXR0b24uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAnICsgc2hpZnRlZF9iYWNrZ3JvdW5kQ29sb3IoMzIpOwogICAgICBidXR0b24uc3R5bGUud2lkdGggID0gJzI0cHgnOwogICAgICBidXR0b24uc3R5bGUuaGVpZ2h0ID0gJzI0cHgnOwogICAgICBidXR0b24uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnOwogICAgICBidXR0b24uc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7CiAgICAgIGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7CiAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBzaGlmdGVkX2JhY2tncm91bmRDb2xvcigxNik7CiAgICAgIGJ1dHRvbi5pbm5lckhUTUwgPSBgPHNwYW4gc3R5bGU9IndpZHRoOiAxMDAlOyBkaXNwbGF5OiBibG9jazsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDUwJTsgbGVmdDogNTAlOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKTsiPiR7dGV4dH08L3NwYW4+YDsKICAgICAgYnV0dG9uLnN0eWxlLnpJbmRleCA9ICcxMDAwMSc7CiAgICAgIHJldHVybiBidXR0b247CiAgICB9OwoKICAgIGNvbnN0IHRhZ19tZW51X2Nsb3NlID0gY3JlYXRlX3RhZ19tZW51X2J1dHRvbigndGFnX21lbnVfY2xvc2UnLCAnWCcpOwogICAgdGFnX21lbnVfY2xvc2Uuc3R5bGUudG9wICAgPSAnMCc7CiAgICB0YWdfbWVudV9jbG9zZS5zdHlsZS5yaWdodCA9ICcwJzsKICAgIHRhZ19tZW51X2Nsb3NlLm9uY2xpY2sgPSAoKSA9PiB7IHNob3dfdGFnX21lbnUoZmFsc2UpOyByZXR1cm4gZmFsc2U7IH07CiAgICB0YWdfbWVudS5hcHBlbmRDaGlsZCh0YWdfbWVudV9jbG9zZSk7CgogICAgY29uc3QgdGFnX21lbnVfb3BlbiA9IGNyZWF0ZV90YWdfbWVudV9idXR0b24oJ3RhZ19tZW51X29wZW4nLCAnwqsnKTsKICAgIHRhZ19tZW51X29wZW4uc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnOwogICAgdGFnX21lbnVfb3Blbi5zdHlsZS5yaWdodCAgPSAnMCc7CiAgICB0YWdfbWVudV9vcGVuLnN0eWxlLmJvdHRvbSA9ICcwJzsKICAgIHRhZ19tZW51X29wZW4ub25jbGljayA9ICgpID0+IHsgc2hvd190YWdfbWVudSh0cnVlKTsgdXBkYXRlX3RhZ19tZW51KCk7IHJldHVybiBmYWxzZTsgfTsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGFnX21lbnVfb3Blbik7CgogICAgY29uc3QgdGFnX21lbnVfc2F2ZSA9IGNyZWF0ZV90YWdfbWVudV9idXR0b24oJ3RhZ19tZW51X3NhdmUnLCAnU2F2ZSBjaGFuZ2VzJyk7CiAgICB0YWdfbWVudV9zYXZlLnN0eWxlLnRvcCAgID0gJzAnOwogICAgdGFnX21lbnVfc2F2ZS5zdHlsZS5yaWdodCA9ICczNnB4JzsKICAgIHRhZ19tZW51X3NhdmUuc3R5bGUud2lkdGggPSAnMTQwcHgnOwogICAgdGFnX21lbnVfc2F2ZS5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOwogICAgdGFnX21lbnVfc2F2ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgZGVsZXRlX3VzZWxlc3NfdGFnc190YWcoKTsKICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtZm9ybScpLnN1Ym1pdCgpOwogICAgfSk7CiAgICB0YWdfbWVudS5hcHBlbmRDaGlsZCh0YWdfbWVudV9zYXZlKTsKICB9CgogIGZ1bmN0aW9uIHVwZGF0ZV90YWdfbWVudShza2lwX2NvbW1vbl90YWdzID0gZmFsc2UpIHsKICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zdF90YWdzJykgPT09IG51bGwpIHJldHVybjsgLy8gbm90IGxvZ2dlZCBpbgoKICAgIGNvbnN0IGNvbW1vbl90YWdzX2VsZW0gID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbW1vbl90YWdzJyk7CiAgICBjb25zdCBjdXJyZW50X3RhZ3NfZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjdXJyZW50X3RhZ3MnKTsKCiAgICAvLyB0YWcgbWVudSBkaXNhYmxlZAogICAgaWYgKGNvbW1vbl90YWdzX2VsZW0gPT09IG51bGwgfHwgY3VycmVudF90YWdzX2VsZW0gPT09IG51bGwpCiAgICAgIHJldHVybjsKCiAgICBpZiAoY29uZmlnLnRhZ19tZW51X2xheW91dCA9PT0gMSkgewogICAgICBjb21tb25fdGFnc19lbGVtLnN0eWxlLmRpc3BsYXkgPSAnZ3JpZCc7CiAgICAgIGNvbW1vbl90YWdzX2VsZW0uc3R5bGUuZ3JpZFRlbXBsYXRlQ29sdW1ucyA9ICdmaXQtY29udGVudCg1JSkgYXV0byc7CiAgICB9IGVsc2UgewogICAgICBjb21tb25fdGFnc19lbGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7CiAgICB9CgogICAgY29uc3QgY3JlYXRlX3RhZ19idXR0b24gPSBmdW5jdGlvbih0YWcsIHNraXBfY29tbW9uX3RhZ3NfdXBkYXRlID0gZmFsc2UpIHsKICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0EnKTsKICAgICAgYS5ocmVmID0gJyMnOwogICAgICBhLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IChpc19kYXJrbW9kZSgpID8gJyMwMDAnIDogJyNGRkYnKTsgLy8gbW9yZSBjb250cmFzdCBmb3IgdGFnIGJ1dHRvbnMKICAgICAgYS5jbGFzc0xpc3QuYWRkKCd0YWdfYnV0dG9uJyk7CiAgICAgIGlmICghZ2V0X3Bvc3RfdGFncygpLmhhcyh0YWcpKSBhLmNsYXNzTGlzdC5hZGQoJ3RhZ19ub25leGlzdGVudCcpOwoKICAgICAgYS5vbmNsaWNrID0gZnVuY3Rpb24oZSkgewogICAgICAgIGlmIChlLmN0cmxLZXkpIHsKICAgICAgICAgIG9wZW5faW5fdGFiKHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyAnL3dpa2kvc2hvdy8/dGl0bGU9JyArIHRhZyk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoZ2V0X3Bvc3RfdGFncygpLmhhcyh0YWcpKSB7CiAgICAgICAgICByZW1vdmVfcG9zdF90YWcodGFnLCBza2lwX2NvbW1vbl90YWdzX3VwZGF0ZSk7CiAgICAgICAgICBhLmNsYXNzTGlzdC5hZGQoJ3RhZ19ub25leGlzdGVudCcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZGRfcG9zdF90YWcodGFnLCBza2lwX2NvbW1vbl90YWdzX3VwZGF0ZSk7CiAgICAgICAgICBhLmNsYXNzTGlzdC5yZW1vdmUoJ3RhZ19ub25leGlzdGVudCcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH07CiAgICAgIGEuaW5uZXJUZXh0ID0gdGFnOwogICAgICByZXR1cm4gYTsKICAgIH07CgogICAgY29uc3Qgd3JhcF9pbl9kaXYgPSBmdW5jdGlvbihlbCwgbWFyZ2luKSB7CiAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0RJVicpOwogICAgICBkaXYuc3R5bGUubWFyZ2luID0gbWFyZ2luOwogICAgICBkaXYuc3R5bGUuZmxvYXQgPSAnbGVmdCc7CiAgICAgIGRpdi5hcHBlbmRDaGlsZChlbCk7CiAgICAgIHJldHVybiBkaXY7CiAgICB9OwoKICAgIGNvbnN0IGNyZWF0ZV90b3BfbGV2ZWxfZGl2ID0gZnVuY3Rpb24obWFyZ2luID0gJzNweCcpIHsKICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7CiAgICAgIGRpdi5zdHlsZS5tYXJnaW4gPSBtYXJnaW47CiAgICAgIHJldHVybiBkaXY7CiAgICB9OwoKICAgIGNvbnN0IGNyZWF0ZV90YWdfbGlzdCA9IGZ1bmN0aW9uKCkgewogICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKICAgICAgZGl2LmNsYXNzTmFtZSA9ICd0YWdfbGlzdCc7CiAgICAgIHJldHVybiBkaXY7CiAgICB9OwoKICAgIC8vIGdlbmVyYXRlIHRhZyBidXR0b24gbGlzdCBmb3IgY3VycmVudCB0YWdzCiAgICBjb25zdCBjdXJyZW50X3RhZ3NfZmxleCA9IGNyZWF0ZV90YWdfbGlzdCgpOwogICAgY3VycmVudF90YWdzX2ZsZXguc3R5bGUubWFyZ2luQm90dG9tID0gJzNweCc7CiAgICBmb3IgKGNvbnN0IGN1cnJlbnRfdGFnIG9mIGdldF9wb3N0X3RhZ3MoKSkgewogICAgICBjb25zdCBkaXYgPSBjcmVhdGVfdG9wX2xldmVsX2RpdigpOwogICAgICBkaXYuYXBwZW5kQ2hpbGQoY3JlYXRlX3RhZ19idXR0b24oY3VycmVudF90YWcsIGZhbHNlKSk7CiAgICAgIGN1cnJlbnRfdGFnc19mbGV4LmFwcGVuZENoaWxkKGRpdik7CiAgICB9CgogICAgLy8gcmVwbGFjZSBjdXJyZW50IGxpc3Qgd2l0aCBuZXcgb25lCiAgICB3aGlsZSAoY3VycmVudF90YWdzX2VsZW0uaGFzQ2hpbGROb2RlcygpKQogICAgICBjdXJyZW50X3RhZ3NfZWxlbS5yZW1vdmVDaGlsZChjdXJyZW50X3RhZ3NfZWxlbS5sYXN0Q2hpbGQpOwogICAgY3VycmVudF90YWdzX2VsZW0uYXBwZW5kQ2hpbGQoY3VycmVudF90YWdzX2ZsZXgpOwoKICAgIC8vIGRvbid0IHJlYnVpbGQgdGhlIGNvbW1vbiB0YWdzIGxpc3Qgd2hlbiBjb21tb24gdGFncyBidXR0b25zIGFyZSBwcmVzc2VkCiAgICBpZiAoc2tpcF9jb21tb25fdGFncykgcmV0dXJuOwoKICAgIC8vIG5vdyBhZGQgY29tbW9uIHRhZ3MKICAgIC8vIGNvbW1vbl90YWdzX2pzb24oX2lkb2wpIHNob3VsZCBiZSBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggYW4gb3B0aW9uYWwgc3RyaW5nICJuYW1lIiBmaWVsZCBhbmQgYW4gYXJyYXkgInRhZ3MiIGZpZWxkLAogICAgLy8gd2hlcmUgdGhlICJ0YWdzIiBhcnJheSBjYW4gY29udGFpbiBzdHJpbmdzIChzcGFjZSBzZXBhcmF0ZWQgdGFncyksIGFycmF5cyBjb250YWluaW5nIG9uZSBzdHJpbmcgKHJlcHJlc2VudGluZyBhIGdyb3VwKQogICAgLy8gb3IgYXJyYXlzIG9mIGFycmF5IGNvbnRhaW5pbmcgb25lIHN0cmluZyAocmVwcmVzZW50aW5nIGEgdGFibGUpCiAgICAvLyBleC4gWyB7ICJuYW1lIjoiY29tbW9uIHRhZ3MiLCAidGFncyI6WyAidGFnMSB0YWcyIiwgWyJncm91cGVkX3RhZzEgZ3JvdXBlZF90YWcyIl0gLCAidGFnMyB0YWc0Il0gfSwgeyAibmFtZSI6InVuY29tbW9uIHRhZ3MiLCAidGFncyI6WyAidDEgdDIgdDMiIF19IF0KICAgIGxldCB0YWdfZGF0YTsKICAgIHRyeSB7CiAgICAgIHRhZ19kYXRhID0gSlNPTi5wYXJzZShjb25maWdbQ09NTU9OX1RBR1NfS0VZXSk7CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSAiY29tbW9uIHRhZ3MiIEpTT04gc3ludGF4IGVycm9yJywgZXJyb3IpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKCFBcnJheS5pc0FycmF5KHRhZ19kYXRhKSkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSAiY29tbW9uIHRhZ3MiIG5lZWRzIHRvIGJlIGFuIGFycmF5IG9mIG9iamVjdHMnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdoaWxlIChjb21tb25fdGFnc19lbGVtLmhhc0NoaWxkTm9kZXMoKSkKICAgICAgY29tbW9uX3RhZ3NfZWxlbS5yZW1vdmVDaGlsZChjb21tb25fdGFnc19lbGVtLmxhc3RDaGlsZCk7CgogICAgZm9yIChsZXQgayA9IDA7IGsgPCB0YWdfZGF0YS5sZW5ndGg7IGsrKykgewogICAgICBjb25zdCBsaXN0X2ZsZXggPSBjcmVhdGVfdGFnX2xpc3QoKTsKICAgICAgY29uc3QgbGlzdF9uYW1lID0gdGFnX2RhdGFba10ubmFtZTsKICAgICAgY29uc3QgbGlzdF90YWdzID0gdGFnX2RhdGFba10udGFnczsKCiAgICAgIGlmICghQXJyYXkuaXNBcnJheShsaXN0X3RhZ3MpKSB7CiAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ1thZGRvbiBlcnJvcl0gYSAiY29tbW9uIHRhZ3MiIG9iamVjdCBuZWVkcyB0byBoYXZlIGEgInRhZ3MiIGFycmF5Jyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBjb25zdCBUQUdTX1RZUEVTID0gewogICAgICAgIExJU1Q6ICAnbGlzdCcsICAvLyBlLmcuICJ0YWcxIHRhZzIiCiAgICAgICAgR1JPVVA6ICdncm91cCcsIC8vIGUuZy4gWyJ0YWcxIHRhZzIiXQogICAgICAgIFRBQkxFOiAndGFibGUnICAvLyBlLmcuIFtbInRhZzEgdGFnMiJdLCBbInRhZzMgdGFnNCJdXQogICAgICB9OwoKICAgICAgY29uc3QgZ3JvdXBfc3R5bGUgPSBmdW5jdGlvbihlbCkgewogICAgICAgIC8vIHJlZCBpbiBkYXJrbW9kZSBuZWVkcyBtb3JlIGNvbnRyYXN0CiAgICAgICAgY29uc3QgcmdiID0gcmdiX3RvX2FycmF5KGdldF9vcmlnaW5hbF9iYWNrZ3JvdW5kX2NvbG9yKCkpOwogICAgICAgIGlmIChpc19kYXJrbW9kZSgpKSB7CiAgICAgICAgICBlbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICcgKyByZ2JfYXJyYXlfdG9fcmdiKHJnYl9hcnJheV9zaGlmdChyZ2IsIDk2KSk7CiAgICAgICAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JfYXJyYXlfdG9fcmdiKHJnYl9hcnJheV9zaGlmdChyZ2IsIDY0KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVsLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgJyArIHJnYl9hcnJheV90b19yZ2IocmdiX2FycmF5X3NoaWZ0KHJnYiwgLTY0KSk7CiAgICAgICAgICBlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZ2JfYXJyYXlfdG9fcmdiKHJnYl9hcnJheV9zaGlmdChyZ2IsIC0zMikpOwogICAgICAgIH0KICAgICAgfTsKCiAgICAgIGZvciAoY29uc3QgbGlzdF90YWcgb2YgbGlzdF90YWdzKSB7CiAgICAgICAgY29uc3QgaXNfYXJyYXkgPSBBcnJheS5pc0FycmF5KGxpc3RfdGFnKTsKCiAgICAgICAgLy8gZmluZCB0YWdzX3R5cGUKICAgICAgICBsZXQgdGFnc190eXBlOwogICAgICAgIGlmIChpc19hcnJheSkgewogICAgICAgICAgaWYgKGxpc3RfdGFnLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSAiY29tbW9uIHRhZ3MiICJ0YWdzIiBhcnJheSBjb250YWlucyBhbiBlbXB0eSBhcnJheScpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CgogICAgICAgICAgLy8gY2hlY2sgd2hhdCB0aGUgYXJyYXkgY29uc2lzdHMgb2YKICAgICAgICAgIGxldCBhbGxfYXJyYXlzID0gdHJ1ZTsKICAgICAgICAgIGxldCBub19hcnJheXMgPSB0cnVlOwogICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0X3RhZy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdF90YWdbaV0pKSB7CiAgICAgICAgICAgICAgYWxsX2FycmF5cyA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG5vX2FycmF5cyA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKGFsbF9hcnJheXMpIHsKICAgICAgICAgICAgdGFnc190eXBlID0gVEFHU19UWVBFUy5UQUJMRTsKICAgICAgICAgIH0gZWxzZSBpZiAobm9fYXJyYXlzKSB7CiAgICAgICAgICAgIHRhZ3NfdHlwZSA9IFRBR1NfVFlQRVMuR1JPVVA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSAiY29tbW9uIHRhZ3MiICJ0YWdzIiBhcnJheSBjb250YWlucyBhbiBhcnJheSB3aGljaCBpcyBuZWl0aGVyIGEgZ3JvdXAgbm9yIGEgdGFibGUnKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0YWdzX3R5cGUgPSBUQUdTX1RZUEVTLkxJU1Q7CiAgICAgICAgfQoKICAgICAgICBpZiAodGFnc190eXBlID09PSBUQUdTX1RZUEVTLlRBQkxFKSB7CiAgICAgICAgICBjb25zdCB0YWdzX3RhYmxlID0gW107CiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpc3RfdGFnLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICAgIGlmIChsaXN0X3RhZ1tqXS5sZW5ndGggIT09IDEpIHsKICAgICAgICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSAiY29tbW9uIHRhZ3MiICJ0YWdzIiBhcnJheSBjb250YWlucyBhIHRhYmxlIGVudHJ5IHdpdGggbm90IGV4YWN0bHkgMSB0YWdzIHN0cmluZycpOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGFnc190YWJsZS5wdXNoKG5ldyBUYWdzKGxpc3RfdGFnW2pdWzBdKS50b0FycmF5KCkpOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IHRhYmxlX2hlaWdodCA9IHRhZ3NfdGFibGUubGVuZ3RoOwogICAgICAgICAgbGV0IHRhYmxlX3dpZHRoID0gMDsKICAgICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IHRhZ3NfdGFibGUubGVuZ3RoOyByb3crKykKICAgICAgICAgICAgdGFibGVfd2lkdGggPSBNYXRoLm1heCh0YWJsZV93aWR0aCwgdGFnc190YWJsZVtyb3ddLmxlbmd0aCk7CgogICAgICAgICAgLy8gZGl2IChmbGV4Ym94KT48ZGl2Pjx0YWJsZT48dHI+PHRkPjxkaXYgKGJ1dHRvbik+CiAgICAgICAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1RBQkxFJyk7CiAgICAgICAgICB0YWJsZS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICAgICAgICBncm91cF9zdHlsZSh0YWJsZSk7CiAgICAgICAgICB0YWJsZS5zdHlsZS5tYXJnaW5Cb3R0b20gPSAnMCc7CiAgICAgICAgICBmb3IgKGxldCByb3cgPSAwOyByb3cgPCB0YWJsZV9oZWlnaHQ7IHJvdysrKSB7CiAgICAgICAgICAgIGNvbnN0IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnVFInKTsKICAgICAgICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgdGFibGVfd2lkdGg7IGNvbCsrKSB7CiAgICAgICAgICAgICAgY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURCcpOwogICAgICAgICAgICAgIHRkLnN0eWxlLmJvcmRlciA9ICdub25lJzsKICAgICAgICAgICAgICB0ZC5zdHlsZS5wYWRkaW5nID0gJzAnOwogICAgICAgICAgICAgIGlmICh0YWdzX3RhYmxlW3Jvd11bY29sXSkKICAgICAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKHdyYXBfaW5fZGl2KGNyZWF0ZV90YWdfYnV0dG9uKHRhZ3NfdGFibGVbcm93XVtjb2xdLCB0cnVlKSwgJzFweCcpKTsKICAgICAgICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodHIpOwogICAgICAgICAgfQoKICAgICAgICAgIGNvbnN0IGRpdiA9IGNyZWF0ZV90b3BfbGV2ZWxfZGl2KCcwIDNweCAwIDNweCcpOwogICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHRhYmxlKTsKICAgICAgICAgIGxpc3RfZmxleC5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgIH0gZWxzZSBpZiAodGFnc190eXBlID09PSBUQUdTX1RZUEVTLkdST1VQKSB7CiAgICAgICAgICBpZiAobGlzdF90YWcubGVuZ3RoICE9PSAxKSB7CiAgICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdICJjb21tb24gdGFncyIgInRhZ3MiIGFycmF5IGNvbnRhaW5zIGEgZ3JvdXAgd2l0aCBub3QgZXhhY3RseSAxIHRhZ3Mgc3RyaW5nJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KCiAgICAgICAgICBjb25zdCB0YWdzID0gbGlzdF90YWdbMF0udHJpbSgpLnNwbGl0KC9ccysvKTsKCiAgICAgICAgICAvLyA8ZGl2IChmbGV4Ym94KT48ZGl2PjxkaXYgKGJ1dHRvbik+CiAgICAgICAgICBjb25zdCBncm91cF9kaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKICAgICAgICAgIGdyb3VwX2Rpdi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICAgICAgICBncm91cF9zdHlsZShncm91cF9kaXYpOwoKICAgICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpCiAgICAgICAgICAgIGdyb3VwX2Rpdi5hcHBlbmRDaGlsZCh3cmFwX2luX2RpdihjcmVhdGVfdGFnX2J1dHRvbih0YWcsIHRydWUpLCAnM3B4JykpOwoKICAgICAgICAgIGNvbnN0IGRpdiA9IGNyZWF0ZV90b3BfbGV2ZWxfZGl2KCcwIDNweCAwIDNweCcpOwogICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGdyb3VwX2Rpdik7CiAgICAgICAgICBsaXN0X2ZsZXguYXBwZW5kQ2hpbGQoZGl2KTsKICAgICAgICB9IGVsc2UgLyogaWYgKHRhZ3NfdHlwZSA9PT0gdGFnX3R5cGVzLkxJU1QpICovIHsKICAgICAgICAgIC8vIDxkaXYgKGZsZXhib3gpPjxkaXY+PGRpdiAoYnV0dG9uKT4KICAgICAgICAgIGNvbnN0IHRhZ3MgPSBuZXcgVGFncyhsaXN0X3RhZyk7CiAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7CiAgICAgICAgICAgIGNvbnN0IGRpdiA9IGNyZWF0ZV90b3BfbGV2ZWxfZGl2KCc0cHggM3B4IDJweCAzcHgnKTsKICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHdyYXBfaW5fZGl2KGNyZWF0ZV90YWdfYnV0dG9uKHRhZywgdHJ1ZSkpKTsKICAgICAgICAgICAgbGlzdF9mbGV4LmFwcGVuZENoaWxkKGRpdik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU1BBTicpOwogICAgICBzcGFuLmlubmVyVGV4dCA9IChsaXN0X25hbWUgPyBgJHtsaXN0X25hbWV9OmAgOiAnJyk7CiAgICAgIHNwYW4uc3R5bGUucGFkZGluZ1RvcCA9ICcycHgnOwogICAgICBpZiAobGlzdF9uYW1lKSBzcGFuLnN0eWxlLm1hcmdpbkxlZnQgPSAnMnB4JzsKCiAgICAgIGlmIChsaXN0X25hbWUgJiYgY29uZmlnLnRhZ19tZW51X2xheW91dCA9PT0gMSkgewogICAgICAgIGNvbnN0IGFkZF90b3BfYm9yZGVyID0gZnVuY3Rpb24oZWwpIHsKICAgICAgICAgIGVsLnN0eWxlLmJvcmRlclRvcFdpZHRoID0gJzFweCc7CiAgICAgICAgICBlbC5zdHlsZS5ib3JkZXJUb3BTdHlsZSA9ICdzb2xpZCc7CiAgICAgICAgICBlbC5zdHlsZS5ib3JkZXJUb3BDb2xvciA9IHNoaWZ0ZWRfYmFja2dyb3VuZENvbG9yKDMyKTsKICAgICAgICB9OwogICAgICAgIGFkZF90b3BfYm9yZGVyKHNwYW4pOwogICAgICAgIGFkZF90b3BfYm9yZGVyKGxpc3RfZmxleCk7CiAgICAgIH0KCiAgICAgIGNvbW1vbl90YWdzX2VsZW0uYXBwZW5kQ2hpbGQoc3Bhbik7CiAgICAgIGNvbW1vbl90YWdzX2VsZW0uYXBwZW5kQ2hpbGQobGlzdF9mbGV4KTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHNob3dfdGFnX21lbnUoYm9vbCkgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ19tZW51Jykuc3R5bGUuZGlzcGxheSA9IChib29sID8gJycgOiAnbm9uZScpOwogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ19tZW51X29wZW4nKS5zdHlsZS5kaXNwbGF5ID0gKCFib29sID8gJycgOiAnbm9uZScpOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZ3NfY2hhbmdlX2xpc3RlbmVyKCkgewogICAgY29uc3QgcG9zdF90YWdzID0gZ2V0X3Bvc3RfdGFnc19lbCgpOwogICAgaWYgKHBvc3RfdGFncyA9PT0gbnVsbCkgcmV0dXJuOyAvLyBub3QgbG9nZ2VkIGluCgogICAgY29uc3QgZGVsYXllZF91cGRhdGUgPSAoKSA9PiB7CiAgICAgIHRhZ3NfY2hhbmdlZCA9IHRydWU7CiAgICAgIGNsZWFyVGltZW91dCh0YWdfdXBkYXRlX3RpbWVyKTsKICAgICAgdGFnX3VwZGF0ZV90aW1lciA9IHNldFRpbWVvdXQodXBkYXRlX3RhZ19lbGVtZW50cywgNDAwKTsKICAgIH07CgogICAgcG9zdF90YWdzLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGRlbGF5ZWRfdXBkYXRlKTsKICAgIHBvc3RfdGFncy5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsICBkZWxheWVkX3VwZGF0ZSk7CiAgfQoKCiAgZnVuY3Rpb24gYWRkX3RhZ3Nfc3VibWl0X2xpc3RlbmVyKCkgewogICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXQtZm9ybScpPy5hZGRFdmVudExpc3RlbmVyKCdzdWJtaXQnLCAoKSA9PiB7CiAgICAgIGRlbGV0ZV91c2VsZXNzX3RhZ3NfdGFnKCk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIGZpbmRfYWN0aW9uc19saXN0KCkgewogICAgY29uc3QgYWN0aW9uc191bCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzdGF0cyArIGRpdiA+IHVsJyk7CgogICAgY29uc3QgYWN0aW9uX2xpbmtzID0gYWN0aW9uc191bD8uZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0EnKSA/PyBbXTsKICAgIGZvciAoY29uc3QgYWN0aW9uX2xpbmsgb2YgYWN0aW9uX2xpbmtzKSB7CiAgICAgIGlmIChhY3Rpb25fbGluay5ocmVmLmluY2x1ZGVzKCcvZGVsZXRlLycpKSB7CiAgICAgICAgZm91bmRfZGVsZXRlX2FjdGlvbiA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gYWN0aW9uc191bDsKICB9CgogIGZ1bmN0aW9uIGFkZF9hZGRvbl9hY3Rpb25zKGFjdGlvbnNfdWwpIHsKICAgIGlmIChhY3Rpb25zX3VsID09PSBudWxsKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIGNvdWxkblwndCBmaW5kIGFjdGlvbnMgbGlzdCEgRGlzYWJsZWQgYWRkb24gYWN0aW9ucy4nKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IHNlcGFyYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0g1Jyk7CiAgICBzZXBhcmF0b3IuaW5uZXJUZXh0ID0gJ0FkZG9uIGFjdGlvbnMnOwogICAgY29uc3QgbmV3bGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdMSScpOwogICAgbmV3bGkuYXBwZW5kQ2hpbGQoc2VwYXJhdG9yKTsKICAgIGFjdGlvbnNfdWwuYXBwZW5kQ2hpbGQobmV3bGkpOwoKICAgIGNvbnN0IGFkZF9hY3Rpb24gPSBmdW5jdGlvbihmdW5jLCBuYW1lLCBpZCkgewogICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQScpOwogICAgICBhLmhyZWYgPSAnIyc7CiAgICAgIGEub25jbGljayA9ICgpID0+IHsgZnVuYygpOyByZXR1cm4gZmFsc2U7IH07CiAgICAgIGEuaW5uZXJUZXh0ID0gbmFtZTsKCiAgICAgIGNvbnN0IGxpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnTEknKTsKICAgICAgbGkuaWQgPSBpZDsKICAgICAgbGkuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIGFjdGlvbnNfdWwuYXBwZW5kQ2hpbGQobGkpOwogICAgfTsKCiAgICBhZGRfYWN0aW9uKCgpID0+IHsgc2NhbGVfaW1hZ2UoU0NBTEVfTU9ERVMuRklULCAgICAgICAgdHJ1ZSk7IHNjcm9sbF90b19pbWFnZSgpOyB9LCAnRml0IGltYWdlJywgICAgICAgICAgICAgICdzY2FsZS1pbWFnZS1maXQnKTsKICAgIGFkZF9hY3Rpb24oKCkgPT4geyBzY2FsZV9pbWFnZShTQ0FMRV9NT0RFUy5IT1JJWk9OVEFMLCB0cnVlKTsgc2Nyb2xsX3RvX2ltYWdlKCk7IH0sICdGaXQgaW1hZ2UgKEhvcml6b250YWwpJywgJ3NjYWxlLWltYWdlLWhvcicpOwogICAgYWRkX2FjdGlvbigoKSA9PiB7IHNjYWxlX2ltYWdlKFNDQUxFX01PREVTLlZFUlRJQ0FMLCAgIHRydWUpOyBzY3JvbGxfdG9faW1hZ2UoKTsgfSwgJ0ZpdCBpbWFnZSAoVmVydGljYWwpJywgICAnc2NhbGUtaW1hZ2UtdmVyJyk7CiAgICBhZGRfYWN0aW9uKCgpID0+IHsgc2NhbGVfaW1hZ2UoU0NBTEVfTU9ERVMuUkVTRVQsICAgICAgdHJ1ZSk7IHNjcm9sbF90b19pbWFnZSgpOyB9LCAnUmVzZXQgaW1hZ2Ugc2l6ZScsICAgICAgICdyZXNldC1pbWFnZScpOwoKICAgIGlmIChQb3N0UGFnZS5wYXJlbnRfaWQgPT09IG51bGwpIHJldHVybjsgLy8gbm90IGxvZ2dlZCBpbgoKICAgIGFkZF9hY3Rpb24oKCkgPT4geyBmbGFnX2R1cGxpY2F0ZShQb3N0UGFnZS5wb3N0X2lkLCAnJyk7ICAgICAgICAgICAgICAgICAgICAgICB9LCAnRmxhZyBkdXBsaWNhdGUnLCAgICAgICAgICAgICAgJ2ZsYWctZHVwbGljYXRlJyk7CiAgICBhZGRfYWN0aW9uKCgpID0+IHsgZmxhZ19kdXBsaWNhdGUoUG9zdFBhZ2UucG9zdF9pZCwgJywgdmlzdWFsbHkgaWRlbnRpY2FsJyk7ICAgfSwgJ0ZsYWcgZHVwbGljYXRlIChpZGVudGljYWwpJywgICdmbGFnLWR1cGxpY2F0ZS1pZGVudGljYWwnKTsKICAgIGFkZF9hY3Rpb24oKCkgPT4geyBmbGFnX2R1cGxpY2F0ZShQb3N0UGFnZS5wb3N0X2lkLCAnIHdpdGggd29yc2UgcXVhbGl0eScpOyAgICB9LCAnRmxhZyBkdXBsaWNhdGUgKHF1YWxpdHkpJywgICAgJ2ZsYWctZHVwbGljYXRlLXF1YWxpdHknKTsKICAgIGFkZF9hY3Rpb24oKCkgPT4geyBmbGFnX2R1cGxpY2F0ZShQb3N0UGFnZS5wb3N0X2lkLCAnIHdpdGggd29yc2UgcmVzb2x1dGlvbicpOyB9LCAnRmxhZyBkdXBsaWNhdGUgKHJlc29sdXRpb24pJywgJ2ZsYWctZHVwbGljYXRlLXJlc29sdXRpb24nKTsKICB9CgogIGZ1bmN0aW9uIGFkZF9maWxldHlwZV9zdGF0KCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgaW1nX2xpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaGlnaHJlcycpOwogICAgICBpZiAoaW1nX2xpbmsgPT09IG51bGwpIHJldHVybjsgLy8gZmxhc2g/CgogICAgICBjb25zdCBzID0gbmV3IFVSTChpbWdfbGluay5ocmVmKS5wYXRobmFtZS5zcGxpdCgnLicpOwogICAgICBjb25zdCBleHQgPSBzW3MubGVuZ3RoIC0gMV07CgogICAgICBjb25zdCBmaWxldHlwZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGBGaWxlIHR5cGU6ICR7ZXh0fWApOwogICAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0xJJyk7CiAgICAgIGxpLmFwcGVuZENoaWxkKGZpbGV0eXBlKTsKICAgICAgaW5zZXJ0X25vZGVfYWZ0ZXIobGksIGltZ19saW5rLnBhcmVudE5vZGUpOwoKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoJ1thZGRvbiBlcnJvcl0gYWRkX2ZpbGV0eXBlX3N0YXQgZmFpbGVkIHdpdGgnLCBlcnJvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBtb3ZlX3N0YXRzX3RvX2VkaXRfZm9ybSgpIHsKICAgIHRyeSB7CgogICAgICAvLyBmb3JtIGRpc3BsYXk6IGZsZXgKICAgICAgLy8gc3RhdHMgaW5zZXJ0YWZ0ZXIgdGFibGUKICAgICAgLy8gc3RhdHMgd2hpdGUtc3BhY2U6IG5vd3JhcAogICAgICAvLyAjZWRpdC1mb3JtIHdpZHRoOiBtYXgtY29udGVudAogICAgICAvLyBtYXJnaW4tbGVmdDogOHB4OwoKICAgICAgY29uc3Qgc3RhdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhdHMnKTsKCiAgICAgIGNvbnN0IGVkaXRfZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0LWZvcm0nKTsKICAgICAgaWYgKGVkaXRfZm9ybSA9PT0gbnVsbCkgcmV0dXJuOwoKICAgICAgY29uc3QgdGFibGUgPSBlZGl0X2Zvcm0ucXVlcnlTZWxlY3RvcigndGFibGUnKTsKCiAgICAgIGVkaXRfZm9ybS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOyAvLyBhZGQgdG8gdGhlIHJpZ2h0CgogICAgICBpbnNlcnRfbm9kZV9hZnRlcihzdGF0cywgdGFibGUpOwogICAgICBzdGF0cy5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7CiAgICAgIGVkaXRfZm9ybS5zdHlsZS53aWR0aCA9ICdtYXgtY29udGVudCc7CiAgICAgIHN0YXRzLnN0eWxlLm1hcmdpbkxlZnQgPSAnOHB4JzsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoJ1thZGRvbiBlcnJvcl0gbW92ZV9zdGF0c190b19lZGl0X2Zvcm0gZmFpbGVkIHdpdGgnLCBlcnJvcik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfdGFnX2J1dHRvbnMoZm9ybV9pZCkgewogICAgY29uc3QgZWRpdF9mb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybV9pZCk7CiAgICBpZiAoZWRpdF9mb3JtID09PSBudWxsKSByZXR1cm47IC8vIG5vdCBsb2dnZWQgaW4KCiAgICBjb25zdCB0YWdfYnV0dG9uX3BsYWNlID0gZWRpdF9mb3JtLnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlID4gdGZvb3QgPiB0ciA+IHRkJyk7CiAgICB0YWdfYnV0dG9uX3BsYWNlLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJzsKICAgIC8vIHNhdmUgYnV0dG9uIG1pbi13aWR0aCBpcyAyNSUsIHdoaWNoIG1ha2VzIHRoZSA8dGQ+IG5vdCBmaXQgaXRzIGNvbnRlbnQKICAgIHRhZ19idXR0b25fcGxhY2UuY2hpbGRyZW5bMF0uc3R5bGUubWluV2lkdGggPSAnMTMuNWVtJzsKCiAgICBjb25zdCBwYXJlbnRfZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zdF9wYXJlbnRfaWQnKTsKCiAgICB7CiAgICAgIGNvbnN0IGVsID0gY3JlYXRlX2J1dHRvbigpOwogICAgICBlbC5pZCA9ICdjbGVhcl9wYXJlbnRfaWRfYnV0dG9uJzsKICAgICAgZWwuc3R5bGUubWFyZ2luID0gJzAgM3B4IDAgNnB4JzsKICAgICAgZWwuaW5uZXJUZXh0ID0gJ0NsZWFyJzsKICAgICAgZWwub25jbGljayA9ICgpID0+IHsgcGFyZW50X2VsLnZhbHVlID0gJyc7IHJldHVybiBmYWxzZTsgfTsKICAgICAgcGFyZW50X2VsPy5wYXJlbnROb2RlPy5hcHBlbmRDaGlsZChlbCk7CiAgICB9CgogICAgewogICAgICBjb25zdCBlbCA9IGNyZWF0ZV9idXR0b24oKTsKICAgICAgZWwuaWQgPSAncmVzZXRfcGFyZW50X2lkX2J1dHRvbic7CiAgICAgIGVsLnN0eWxlLm1hcmdpbiA9ICcwIDNweCc7CiAgICAgIGVsLmlubmVyVGV4dCA9ICdSZXNldCc7CiAgICAgIGVsLm9uY2xpY2sgPSAoKSA9PiB7IHJlc2V0X3BhcmVudF9pZCgpOyByZXR1cm4gZmFsc2U7IH07CiAgICAgIHBhcmVudF9lbD8ucGFyZW50Tm9kZT8uYXBwZW5kQ2hpbGQoZWwpOwogICAgfQoKICAgIHsKICAgICAgY29uc3QgZWwgPSBjcmVhdGVfYnV0dG9uKCk7CiAgICAgIGVsLmlkID0gJ3RhZ19yZXNldF9idXR0b24nOwogICAgICBlbC5zdHlsZS5tYXJnaW4gPSAnMCAzcHggMCA2cHgnOwogICAgICBlbC5pbm5lclRleHQgPSAnUmVzZXQnOwogICAgICBlbC5vbmNsaWNrID0gKCkgPT4geyByZXNldF90YWdzKCk7IHJldHVybiBmYWxzZTsgfTsKICAgICAgdGFnX2J1dHRvbl9wbGFjZS5hcHBlbmRDaGlsZChlbCk7CiAgICB9CgogICAgY29uc3QgYXBwZW5kX3RhZ19idXR0b24gPSAoaWQsIHRhZykgPT4gewogICAgICBjb25zdCBlbCA9IGNyZWF0ZV9idXR0b24oKTsKICAgICAgZWwuaWQgPSBpZDsKICAgICAgZWwuY2xhc3NOYW1lID0gJ1NBLXRhZy1idXR0b24nOwogICAgICBlbC5kYXRhc2V0Wyd0YWcnXSA9IHRhZzsKICAgICAgZWwuc3R5bGUubWFyZ2luID0gJzAgM3B4JzsKICAgICAgZWwub25jbGljayA9ICgpID0+IHsgdG9nZ2xlX3Bvc3RfdGFnKHRhZyk7IHJldHVybiBmYWxzZTsgfTsKICAgICAgdGFnX2J1dHRvbl9wbGFjZS5hcHBlbmRDaGlsZChlbCk7CiAgICB9OwoKICAgIGFwcGVuZF90YWdfYnV0dG9uKCd0YWdfZHVwX2J1dHRvbicsICAgICAnZHVwbGljYXRlJyk7CiAgICBhcHBlbmRfdGFnX2J1dHRvbigndGFnX3Zhcl9idXR0b24nLCAgICAgJ2xlZ2l0aW1hdGVfdmFyaWF0aW9uJyk7CiAgICBhcHBlbmRfdGFnX2J1dHRvbigndGFnX3Jldl9idXR0b24nLCAgICAgJ3JldmlzaW9uJyk7CiAgICBhcHBlbmRfdGFnX2J1dHRvbigndGFnX2hhc19yZXZfYnV0dG9uJywgJ2hhc19yZXZpc2VkX3ZlcnNpb24nKTsKICAgIGFwcGVuZF90YWdfYnV0dG9uKCd0YWdfcG90X2J1dHRvbicsICAgICAncG90ZW50aWFsX2R1cGxpY2F0ZScpOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlX3RhZ19idXR0b25zKCkgewogICAgY29uc3QgdGFnbGlzdCA9IGdldF9wb3N0X3RhZ3NfZWwoKTsKICAgIGlmICh0YWdsaXN0ID09PSBudWxsKQogICAgICByZXR1cm47CgogICAgY29uc3QgdGFncyA9IGdldF9wb3N0X3RhZ3MoKTsKCiAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuU0EtdGFnLWJ1dHRvbicpKSB7CiAgICAgIGNvbnN0IHRhZyA9IGJ1dHRvbi5kYXRhc2V0Wyd0YWcnXTsKCiAgICAgIGlmICh0YWcgPT09ICdwb3RlbnRpYWxfZHVwbGljYXRlJykgewogICAgICAgIGlmICh0YWdzLmhhcyh0YWcpKSB7CiAgICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgIGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBidXR0b24uc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2N1cnNvcicpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgYnV0dG9uLmlubmVyVGV4dCA9ICh0YWdzPy5oYXModGFnKSA/ICctJyA6ICcrJykgKyB0YWc7CiAgICB9CiAgfQoKICBmdW5jdGlvbiByZXNldF9wYXJlbnRfaWQoKSB7CiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9zdF9wYXJlbnRfaWQnKS52YWx1ZSA9IFBvc3RQYWdlLnBhcmVudF9pZDsKICB9CgogIGZ1bmN0aW9uIGdldF9wb3N0X29sZF90YWdzX2VsKCkgewogICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwb3N0X29sZF90YWdzLCAjU0EtcG9zdF9vbGRfdGFncycpOwogIH0KCiAgZnVuY3Rpb24gZ2V0X3Bvc3RfdGFnc19lbCgpIHsKICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcG9zdF90YWdzLCAjU0EtcG9zdF90YWdzJyk7CiAgfQoKICBmdW5jdGlvbiBnZXRfcG9zdF9vbGRfdGFncygpIHsKICAgIHJldHVybiBuZXcgVGFncyhnZXRfcG9zdF9vbGRfdGFnc19lbCgpPy52YWx1ZSk7CiAgfQoKICBmdW5jdGlvbiBnZXRfcG9zdF90YWdzKCkgewogICAgcmV0dXJuIG5ldyBUYWdzKGdldF9wb3N0X3RhZ3NfZWwoKT8udmFsdWUpOwogIH0KCiAgZnVuY3Rpb24gdG9nZ2xlX3Bvc3RfdGFnKHRhZywgc2tpcF9jb21tb25fdGFnc191cGRhdGUgPSBmYWxzZSkgewogICAgaWYgKGdldF9wb3N0X3RhZ3MoKS5oYXModGFnKSkgewogICAgICByZW1vdmVfcG9zdF90YWcodGFnLCBza2lwX2NvbW1vbl90YWdzX3VwZGF0ZSk7CiAgICB9IGVsc2UgewogICAgICBhZGRfcG9zdF90YWcodGFnLCBza2lwX2NvbW1vbl90YWdzX3VwZGF0ZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfcG9zdF90YWcodGFnLCBza2lwX2NvbW1vbl90YWdzX3VwZGF0ZSA9IGZhbHNlKSB7CiAgICBjb25zdCB0YWdzX2VsID0gZ2V0X3Bvc3RfdGFnc19lbCgpOwogICAgY29uc3QgdGFncyA9IGdldF9wb3N0X3RhZ3MoKTsKCiAgICBpZiAoKHRhZyA9PT0gJ2R1cGxpY2F0ZScgJiYgdGFncy5oYXMoJ2xlZ2l0aW1hdGVfdmFyaWF0aW9uJykpIHx8ICh0YWcgPT09ICdsZWdpdGltYXRlX3ZhcmlhdGlvbicgJiYgdGFncy5oYXMoJ2R1cGxpY2F0ZScpKSkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLndhcm4sICdbYWRkb25dIGNhbm5vdCB0YWcgYXMgZHVwbGljYXRlIGFuZCBsZWdpdGltYXRlX3ZhcmlhdGlvbiBhdCB0aGUgc2FtZSB0aW1lLicpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdGFncy5hZGQodGFnKTsKICAgIHRhZ3NfZWwudmFsdWUgPSB0YWdzLnRvU3RyaW5nKCkgKyAnICc7CgogICAgdGFnc19jaGFuZ2VkID0gdHJ1ZTsKICAgIHVwZGF0ZV90YWdfZWxlbWVudHMoc2tpcF9jb21tb25fdGFnc191cGRhdGUpOwogIH0KCiAgZnVuY3Rpb24gcmVtb3ZlX3Bvc3RfdGFnKHRhZywgc2tpcF9jb21tb25fdGFnc191cGRhdGUgPSBmYWxzZSkgewogICAgY29uc3QgdGFncyA9IGdldF9wb3N0X3RhZ3MoKTsKCiAgICB0YWdzLnJlbW92ZSh0YWcpOwogICAgZ2V0X3Bvc3RfdGFnc19lbCgpLnZhbHVlID0gdGFncy50b1N0cmluZygpICsgJyAnOwoKICAgIHRhZ3NfY2hhbmdlZCA9IHRydWU7CiAgICB1cGRhdGVfdGFnX2VsZW1lbnRzKHNraXBfY29tbW9uX3RhZ3NfdXBkYXRlKTsKICB9CgogIGZ1bmN0aW9uIGRlbGV0ZV91c2VsZXNzX3RhZ3NfdGFnKCkgewogICAgaWYgKHRhZ3NfY2hhbmdlZCAmJiBjb25maWcuZWRpdGZvcm1fZGVsZXRldXNlbGVzc3RhZ3MpIHJlbW92ZV9wb3N0X3RhZygndXNlbGVzc190YWdzJyk7CiAgfQoKICBmdW5jdGlvbiByZXNldF90YWdzKCkgewogICAgZ2V0X3Bvc3RfdGFnc19lbCgpLnZhbHVlID0gZ2V0X3Bvc3Rfb2xkX3RhZ3NfZWwoKS52YWx1ZTsKICAgIHRhZ3NfY2hhbmdlZCA9IGZhbHNlOwogICAgdXBkYXRlX3RhZ19lbGVtZW50cygpOwogIH0KCiAgZnVuY3Rpb24gdXBkYXRlX3RhZ19lbGVtZW50cyhza2lwX2NvbW1vbl90YWdzID0gZmFsc2UpIHsKICAgIHVwZGF0ZV90YWdfYnV0dG9ucygpOwoKICAgIGNvbnN0IHRhZ19tZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhZ19tZW51Jyk7CiAgICBpZiAodGFnX21lbnUgIT09IG51bGwgJiYgdGFnX21lbnUuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnKSB7CiAgICAgIHVwZGF0ZV90YWdfbWVudShza2lwX2NvbW1vbl90YWdzKTsKICAgIH0KICB9CgoKCiAgLy8gZmxhZyBvcHRpb24gd2l0aCBkZWZhdWx0IHRleHQKICBmdW5jdGlvbiBmbGFnX2R1cGxpY2F0ZShwb3N0X2lkLCByZWFzb25fc3VmZml4KSB7CiAgICBpZiAoUG9zdFBhZ2UucGFyZW50X2lkID09PSBudWxsKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgJ1thZGRvbl0gcGFyZW50IGlkIG5vdCBmb3VuZCwgbm90IGxvZ2dlZCBpbj8nKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IGN1cnJlbnRfcGFyZW50X2lkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bvc3RfcGFyZW50X2lkJyk/LnZhbHVlOwogICAgaWYgKGN1cnJlbnRfcGFyZW50X2lkICE9PSBQb3N0UGFnZS5wYXJlbnRfaWQpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS53YXJuLCAnW2FkZG9uXSBwYXJlbnQgaWQgd2FzIGNoYW5nZWQgYnV0IG5vdCBzYXZlZCEnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghY3VycmVudF9wYXJlbnRfaWQgfHwgY3VycmVudF9wYXJlbnRfaWQubGVuZ3RoID09PSAwKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgJ1thZGRvbl0gbm8gcGFyZW50IGlkIHNldCEnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IHRhZ3MgPSBnZXRfcG9zdF90YWdzKCk7CiAgICBjb25zdCBvbGRfdGFncyA9IGdldF9wb3N0X29sZF90YWdzKCk7CiAgICBpZiAodGFncy5oYXMoJ2R1cGxpY2F0ZScpICYmICFvbGRfdGFncy5oYXMoJ2R1cGxpY2F0ZScpKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgJ1thZGRvbl0gZHVwbGljYXRlIHRhZyBzZXQgYnV0IG5vdCBzYXZlZCEnKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFvbGRfdGFncy5oYXMoJ2R1cGxpY2F0ZScpKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUud2FybiwgJ1thZGRvbl0gbm90IHRhZ2dlZCBhcyBkdXBsaWNhdGUhJyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAob2xkX3RhZ3MuaGFzKCdsZWdpdGltYXRlX3ZhcmlhdGlvbicpIHx8IG9sZF90YWdzLmhhcygncmV2aXNpb24nKSkKICAgICAgaWYgKCF3aW5kb3cuY29uZmlybSgnUG9zdCBpcyB0YWdnZWQgYXMgYSBsZWdpdGltYXRlX3ZhcmlhdGlvbiBvciByZXZpc2lvbiwgaXQgbWF5IG5vdCBiZSBhIGR1cGxpY2F0ZSFcblxuRmxhZyBpdCBhbnl3YXk/JykpCiAgICAgICAgcmV0dXJuOwoKICAgIGNvbnN0IHJlYXNvbiA9IHdpbmRvdy5wcm9tcHQoJ1doeSBzaG91bGQgdGhpcyBwb3N0IGJlIHJlY29uc2lkZXJlZCBmb3IgbW9kZXJhdGlvbj8nLCBgZHVwbGljYXRlIG9mICR7UG9zdFBhZ2UucGFyZW50X2lkfSR7cmVhc29uX3N1ZmZpeH1gKTsKICAgIGlmIChyZWFzb24gPT09IG51bGwpCiAgICAgIHJldHVybjsKCiAgICAoYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChuZXcgVVJMKCcvcG9zdC9mbGFnLmpzb24nLCBkb2N1bWVudC5sb2NhdGlvbiksIHsKICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGlkOiBwb3N0X2lkLCByZWFzb24gfSksCiAgICAgICAgfSk7CgogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsIGBbYWRkb24gZXJyb3JdIG5vbi1PSyBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CgogICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHNob3dfbm90aWNlKGNvbnNvbGUubG9nLCAnUG9zdCB3YXMgcmVzZW50IHRvIG1vZGVyYXRpb24gcXVldWUnKTsKICAgICAgICBlbHNlICAgICAgICAgICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCBgRXJyb3I6ICR7ZGF0YS5yZWFzb259YCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ1thZGRvbiBlcnJvcl0gZXJyb3IgZmxhZ2dpbmcgcG9zdCEnLCBlcnJvcik7CiAgICAgIH0KICAgIH0pKCk7CiAgfQoKICAvLyB3cml0ZXMgdG8gaW1hZ2VfZGF0YSBvbmNlIGZpbmlzaGVkCiAgYXN5bmMgZnVuY3Rpb24gcmVhZF9pbWFnZV9kYXRhKCkgewogICAgY29uc3QgZGF0YSA9IHsKICAgICAgaW1nX2VsZW06IG51bGwsIC8vIDxpbWc+LCA8dmlkZW8+IG9yIDxvYmplY3Q+IChpbiBjYXNlIG9mIGZsYXNoKQogICAgICBlbWJfZWxlbTogbnVsbCwgbm9uX2ltZ19kaXY6IG51bGwsIC8vIGZsYXNoIGlzIDxvYmplY3Q+PGVtYmVkPiwgd2UgbmVlZCB0aGUgPGRpdj4gaXQncyBpbiBhcyB3ZWxsCiAgICAgIGlzX2ZsYXNoOiBmYWxzZSwKICAgICAgd2lkdGg6IG51bGwsCiAgICAgIGhlaWdodDogbnVsbCwKICAgICAgYXNwZWN0X3JhdGlvOiBudWxsLAogICAgICBjdXJyZW50X2hlaWdodDogbnVsbCwgLy8gc3RvcmUgY3VycmVudCBoZWlnaHQgc2VwYXJhdGVseSwgYmVjYXVzZSBmbGFzaCBpcyBhIGJpdGNoCiAgICB9OwoKICAgIC8vIGltYWdlIG9yIHZpZGVvCiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UnKTsKICAgIGlmIChpbWcgIT09IG51bGwpIHsKICAgICAgZGF0YS5pbWdfZWxlbSA9IGltZzsKCiAgICAgIC8vIHRoZSBocmVmIG9mIHRoaXMgZWxlbWVudCBpcyByZW1vdmVkIHdoZW4gdGhlIG9yaWdpbmFsIGltYWdlIGlzIGxvYWRlZAogICAgICBjb25zdCBzYW1wbGVfbGluayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EjaW1hZ2UtbGluay5zYW1wbGUnKTsKICAgICAgY29uc3QgaXNfc2FtcGxlID0gc2FtcGxlX2xpbmsgIT09IG51bGwgJiYgc2FtcGxlX2xpbmsuaGFzQXR0cmlidXRlKCdocmVmJyk7CgogICAgICBsZXQgcmVzID0gbnVsbDsKICAgICAgaWYgKGlzX3NhbXBsZSkgewogICAgICAgIGNvbnN0IGxvd3JlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb3dyZXMnKTsKICAgICAgICBpZiAobG93cmVzICE9PSBudWxsKSB7CiAgICAgICAgICByZXMgPSBsb3dyZXMuaW5uZXJUZXh0LnNwbGl0KCd4Jyk7IC8vIHBhcnNlICI8d2lkdGg+eDxoZWlnaHQ+IgogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBoaWdocmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hpZ2hyZXMnKTsKICAgICAgICBpZiAoaGlnaHJlcyAhPT0gbnVsbCkgewogICAgICAgICAgcmVzID0gaGlnaHJlcy5pbm5lclRleHQuc3BsaXQoJyAnKVswXS5zcGxpdCgneCcpOyAvLyBwYXJzZSAiPHdpZHRoPng8aGVpZ2h0PiAoPGZpbGUgc2l6ZT4pIgogICAgICAgIH0KCiAgICAgICAgaWYgKHJlcyA9PT0gbnVsbCkgewogICAgICAgICAgaWYgKGltZy5oYXNBdHRyaWJ1dGUoJ29yaWdfd2lkdGgnKSAmJiBpbWcuaGFzQXR0cmlidXRlKCdvcmlnX2hlaWdodCcpKSB7CiAgICAgICAgICAgIHJlcyA9IFtpbWcuZ2V0QXR0cmlidXRlKCdvcmlnX3dpZHRoJyksIGltZy5nZXRBdHRyaWJ1dGUoJ29yaWdfaGVpZ2h0JyldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKHJlcyA9PT0gbnVsbCkgewogICAgICAgIGNvbnNvbGUubG9nKCdbYWRkb25dIENvdWxkblwndCByZWFkIHJlc29sdXRpb24gZnJvbSBkZXRhaWxzIHNlY3Rpb24sIHdhaXRpbmcgZm9yIGltYWdlIHNpemUuLi4nKTsKCiAgICAgICAgLy8gbGFzdCByZXNvcnQ6IHRyeSB0byByZWFkIG5hdHVyYWwgc2l6ZQogICAgICAgIC8vIHdoZW4gbG9hZGluZyB0aGUgb3JpZ2luYWwgaW1hZ2UsIHRoaXMgY2FuIHJlYWQgdGhlIG9sZCBwcmV2aWV3IHNpemUgaW5zdGVhZCwgd2hpY2ggc2hvdWxkbid0IGJlIGEgaHVnZSBkZWFsIHNpbmNlCiAgICAgICAgLy8gdGhpcyBoYXBwZW5zIGFmdGVyIGltYWdlIHNjcm9sbGluZyAoc2VlIGlzX2RvbmVfc2Nyb2xsaW5nKCkpIGFuZCB0aGUgYXNwZWN0IHJhdGlvIGlzIGFwcHJveGltYXRlbHkgY29ycmVjdAogICAgICAgIC8vIFRPRE86IHRoaXMgd2lsbCBob3dldmVyIGJyZWFrIHRoZSBtYW51YWwgaW1hZ2Ugc2Nyb2xsaW5nCgogICAgICAgIC8vIFRPRE86IHNob3VsZCBhYm9ydCB3aGVuIGNvbnRlbnQgZmFpbGVkIGxvYWRpbmcKICAgICAgICB3aGlsZSAoKHJlcyA9IGdldF9yZXNvbHV0aW9uKGltZykpID09PSBudWxsKQogICAgICAgICAgYXdhaXQgc2xlZXAoMjApOwogICAgICB9CgogICAgICBkYXRhLndpZHRoICA9IE51bWJlcihyZXNbMF0pOwogICAgICBkYXRhLmhlaWdodCA9IE51bWJlcihyZXNbMV0pOwogICAgICBjb25zb2xlLmxvZygnW2FkZG9uXSBSZWFkIGltYWdlIG9yIHZpZGVvIHJlc29sdXRpb24gJywgZGF0YS53aWR0aCwgJ3gnLCBkYXRhLmhlaWdodCk7CgogICAgICBkYXRhLmN1cnJlbnRfaGVpZ2h0ID0gZGF0YS5oZWlnaHQ7CiAgICAgIGRhdGEuYXNwZWN0X3JhdGlvID0gZGF0YS53aWR0aCAvIGRhdGEuaGVpZ2h0OwogICAgICBpbWFnZV9kYXRhID0gZGF0YTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIGZsYXNoIG9yIHVua25vd24KICAgIGNvbnN0IG5vbl9pbWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm9uLWltYWdlLWNvbnRlbnQnKTsKICAgIGlmIChub25faW1nICE9PSBudWxsKSB7CiAgICAgIGRhdGEubm9uX2ltZ19kaXYgPSBub25faW1nOwoKICAgICAgY29uc3Qgb2JqcyA9IG5vbl9pbWcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ09CSkVDVCcpOwogICAgICBjb25zdCBlbWJzID0gbm9uX2ltZy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnRU1CRUQnKTsKICAgICAgZGF0YS5pc19mbGFzaCA9IChvYmpzLmxlbmd0aCA9PT0gMSAmJiBlbWJzLmxlbmd0aCA9PT0gMSk7IC8vIDxvYmplY3Q+PGVtYmVkPgoKICAgICAgaWYgKCFkYXRhLmlzX2ZsYXNoKSB7CiAgICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ1thZGRvbiBlcnJvcl0gdW5rbm93biBwb3N0IGNvbnRlbnQhIENhblwndCByZWFkIHdpZHRoL2hlaWdodC4nKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGRhdGEuaW1nX2VsZW0gPSBvYmpzWzBdOwogICAgICBkYXRhLmVtYl9lbGVtID0gZW1ic1swXTsKICAgICAgLy8gPG9iamVjdD4gY29udGFpbnMgd2lkdGgvaGVpZ2h0IGluIGJvdGggRmlyZWZveCBhbmQgQ2hyb21lCiAgICAgIGRhdGEud2lkdGggID0gZGF0YS5pbWdfZWxlbS53aWR0aDsKICAgICAgZGF0YS5oZWlnaHQgPSBkYXRhLmltZ19lbGVtLmhlaWdodDsKICAgICAgY29uc29sZS5sb2coJ1thZGRvbl0gUmVhZCByZXNvbHV0aW9uICcsIGRhdGEud2lkdGgsICd4JywgZGF0YS5oZWlnaHQpOwoKICAgICAgZGF0YS5jdXJyZW50X2hlaWdodCA9IGRhdGEuaGVpZ2h0OwogICAgICBkYXRhLmFzcGVjdF9yYXRpbyA9IGRhdGEud2lkdGggLyBkYXRhLmhlaWdodDsKICAgICAgaW1hZ2VfZGF0YSA9IGRhdGE7CiAgICB9CiAgfQoKICBjb25zdCBTQ0FMRV9NT0RFUyA9IHsgUkVTRVQ6IC0xLCBGSVQ6IDAsIEhPUklaT05UQUw6IDEsIFZFUlRJQ0FMOiAyIH07CgogIC8vIHN0cmV0Y2ggaW1hZ2UvdmlkZW8vZmxhc2gsIHJlcXVpcmVzIGRhdGEgZnJvbSByZWFkX2ltYWdlX2RhdGEoKQogIGZ1bmN0aW9uIHNjYWxlX2ltYWdlKG1vZGUsIGFsd2F5c19zY2FsZSkgewogICAgaWYgKGltYWdlX2RhdGEgPT09IG51bGwpIHJldHVybjsgLy8gcmVhZF9pbWFnZV9kYXRhKCkgZmFpbGVkCgogICAgaWYgKCFhbHdheXNfc2NhbGUgJiYgKCFjb25maWcuc2NhbGVfZmxhc2ggJiYgaW1hZ2VfZGF0YS5pc19mbGFzaCkpCiAgICAgIHJldHVybjsKCiAgICAvLyBXZSBjYW4ndCB1c2UgdHJhbnNmb3JtIHNjYWxlIGJlY2F1c2UgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIERPTSBzaXplIChzbyB0aGUgaW1hZ2UgY291bGQgYmUgY292ZXJlZCB1cCBieSBvdGhlciBlbGVtZW50cykKICAgIC8vIFdlIGFsc28gY2FuJ3QgdXNlIHN0eWxlLndpZHRoL2hlaWdodCBiZWNhdXNlIHRyYW5zbGF0aW9uIG5vdGVzIHJlbHkgb24gLndpZHRoLy5oZWlnaHQKICAgIGNvbnN0IHNldF9kaW1lbnNpb25zID0gKG9iaiwgZGltKSA9PiB7CiAgICAgIG9iai53aWR0aCAgPSBkaW0ud2lkdGg7CiAgICAgIG9iai5oZWlnaHQgPSBkaW0uaGVpZ2h0OwogICAgfTsKCiAgICAvLyByZXNldCBpbWFnZSBzaXplCiAgICBpZiAobW9kZSA9PT0gU0NBTEVfTU9ERVMuUkVTRVQpIHsKICAgICAgaWYgKCFpbWFnZV9kYXRhLmlzX2ZsYXNoKSB7CiAgICAgICAgc2V0X2RpbWVuc2lvbnMoaW1hZ2VfZGF0YS5pbWdfZWxlbSwgaW1hZ2VfZGF0YSk7CiAgICAgICAgYWRqdXN0X25vdGVzKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0X2RpbWVuc2lvbnMoaW1hZ2VfZGF0YS5pbWdfZWxlbSwgaW1hZ2VfZGF0YSk7CiAgICAgICAgc2V0X2RpbWVuc2lvbnMoaW1hZ2VfZGF0YS5lbWJfZWxlbSwgaW1hZ2VfZGF0YSk7CiAgICAgIH0KICAgICAgaW1hZ2VfZGF0YS5jdXJyZW50X2hlaWdodCA9IGltYWdlX2RhdGEuaGVpZ2h0OwoKICAgICAgLy8gd29ya2Fyb3VuZCBmb3IgR2FsaW5vYSdzIFNhbmtha3UgQ2hhbm5lbCBEYXJrCiAgICAgIGlmIChjb25maWcuc2Fua2FrdV9jaGFubmVsX2RhcmtfY29tcGF0aWJpbGl0eSkgewogICAgICAgIGltYWdlX2RhdGEuaW1nX2VsZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoJ3BhZGRpbmctbGVmdCcpOwogICAgICAgIG5vdGVfZml4KCk7CiAgICAgIH0KCiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyB3b3JrYXJvdW5kIGZvciBHYWxpbm9hJ3MgU2Fua2FrdSBDaGFubmVsIERhcmsKICAgIC8vIHByb2JsZW06IHNlZW1zIHRvIG9ubHkgd29yayBmb3IgYmlnZ2VyIHdpbmRvd3MKICAgIGxldCBsZWZ0X3NpZGU7CiAgICBpZiAoY29uZmlnLnNhbmtha3VfY2hhbm5lbF9kYXJrX2NvbXBhdGliaWxpdHkpIHsKICAgICAgY29uc3Qgc2lkZWJhciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zaWRlYmFyJyk7CiAgICAgIGxlZnRfc2lkZSA9IChzaWRlYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0ICsgd2luZG93LnNjcm9sbFggKyAxMik7CiAgICAgIGltYWdlX2RhdGEuaW1nX2VsZW0uc3R5bGUucGFkZGluZ0xlZnQgPSBsZWZ0X3NpZGUgKyAncHgnOyAvLyBkb24ndCBoaWRlIGJlaGluZCBzaWRlYmFyCiAgICB9IGVsc2UgewogICAgICBsZWZ0X3NpZGUgPSBpbWFnZV9kYXRhLmltZ19lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWDsKICAgIH0KCiAgICBjb25zdCB0YXJnZXRfdyA9IE1hdGgubWF4KHdpbmRvdy5pbm5lcldpZHRoIC0gbGVmdF9zaWRlIC0gZ2V0X3Njcm9sbGJhcl93aWR0aCgpLCAxKTsKICAgIGNvbnN0IHRhcmdldF9oID0gTWF0aC5tYXgod2luZG93LmlubmVySGVpZ2h0LCAxKTsKICAgIGNvbnN0IHRhcmdldF9hc3BlY3RfcmF0aW8gPSB0YXJnZXRfdyAvIHRhcmdldF9oOwoKICAgIGlmIChtb2RlID09PSBTQ0FMRV9NT0RFUy5GSVQpCiAgICAgIG1vZGUgPSAoaW1hZ2VfZGF0YS5hc3BlY3RfcmF0aW8gPiB0YXJnZXRfYXNwZWN0X3JhdGlvID8gU0NBTEVfTU9ERVMuSE9SSVpPTlRBTCA6IFNDQUxFX01PREVTLlZFUlRJQ0FMKTsKCiAgICBjb25zdCBzY2FsZWQgPSB7fTsKICAgIGlmIChtb2RlID09PSBTQ0FMRV9NT0RFUy5IT1JJWk9OVEFMKSB7CiAgICAgIHNjYWxlZC53aWR0aCAgPSBNYXRoLmZsb29yKHRhcmdldF93KTsKICAgICAgc2NhbGVkLmhlaWdodCA9IE1hdGguZmxvb3IodGFyZ2V0X3cgLyBpbWFnZV9kYXRhLmFzcGVjdF9yYXRpbyk7CiAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFNDQUxFX01PREVTLlZFUlRJQ0FMKSB7CiAgICAgIHNjYWxlZC53aWR0aCAgPSBNYXRoLmZsb29yKHRhcmdldF9oICogaW1hZ2VfZGF0YS5hc3BlY3RfcmF0aW8pOwogICAgICBzY2FsZWQuaGVpZ2h0ID0gTWF0aC5mbG9vcih0YXJnZXRfaCk7CiAgICB9CgogICAgaWYgKCFhbHdheXNfc2NhbGUgJiYgKGNvbmZpZy5zY2FsZV9vbmx5X2Rvd25zY2FsZSAmJiAoc2NhbGVkLndpZHRoID4gaW1hZ2VfZGF0YS53aWR0aCB8fCBzY2FsZWQuaGVpZ2h0ID4gaW1hZ2VfZGF0YS5oZWlnaHQpKSkKICAgICAgcmV0dXJuOwoKICAgIGlmICghaW1hZ2VfZGF0YS5pc19mbGFzaCkgewogICAgICBzZXRfZGltZW5zaW9ucyhpbWFnZV9kYXRhLmltZ19lbGVtLCBzY2FsZWQpOwogICAgICBhZGp1c3Rfbm90ZXMoKTsKICAgIH0gZWxzZSB7CiAgICAgIHNldF9kaW1lbnNpb25zKGltYWdlX2RhdGEuaW1nX2VsZW0sIHNjYWxlZCk7CiAgICAgIHNldF9kaW1lbnNpb25zKGltYWdlX2RhdGEuZW1iX2VsZW0sIHNjYWxlZCk7CiAgICB9CgogICAgaW1hZ2VfZGF0YS5jdXJyZW50X2hlaWdodCA9IHNjYWxlZC5oZWlnaHQ7CiAgfQoKICBmdW5jdGlvbiBhZGp1c3Rfbm90ZXMoKSB7CiAgICBmb3IgKGNvbnN0IG5vdGUgb2YgdW5zYWZlV2luZG93Lk5vdGU/LmFsbCA/PyBbXSkgewogICAgICBub3RlLmFkanVzdFNjYWxlKCk7IC8vIHRoaXMgcmVsaWVzIG9uIHRoZSBpbWFnZSdzIC53aWR0aCBhbmQgLmhlaWdodAogICAgfQogIH0KCiAgZnVuY3Rpb24gc2NhbGVfb25fcmVzaXplX2hlbHBlcigpIHsKICAgIGNsZWFyVGltZW91dChyZXNpemVfdGltZXIpOwogICAgcmVzaXplX3RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGlmIChjb25maWcuc2NhbGVfb25fcmVzaXplKSBzY2FsZV9pbWFnZShjb25maWcuc2NhbGVfbW9kZSwgZmFsc2UpOwogICAgfSwgMTAwKTsKICB9CgogIGZ1bmN0aW9uIGFkZF9zY2FsZV9vbl9yZXNpemVfbGlzdGVuZXIoKSB7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgc2NhbGVfb25fcmVzaXplX2hlbHBlcik7CiAgfQoKICBmdW5jdGlvbiByZW1vdmVfc2NhbGVfb25fcmVzaXplX2xpc3RlbmVyKCkgewogICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHNjYWxlX29uX3Jlc2l6ZV9oZWxwZXIpOwogIH0KCiAgZnVuY3Rpb24gc2Nyb2xsX3RvX2ltYWdlKCkgewogICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgIGlmIChpbWFnZV9kYXRhID09PSBudWxsKSByZXR1cm47CiAgICAgIGNvbnN0IGFic29sdXRlX2ltZ190b3AgPSBNYXRoLnJvdW5kKChpbWFnZV9kYXRhLmlzX2ZsYXNoID8gaW1hZ2VfZGF0YS5ub25faW1nX2RpdiA6IGltYWdlX2RhdGEuaW1nX2VsZW0pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCkgKyB3aW5kb3cuc2Nyb2xsWTsKICAgICAgaWYgKGNvbmZpZy5zY3JvbGxfdG9faW1hZ2VfY2VudGVyKSB7CiAgICAgICAgY29uc3QgdG9wX29mX2NlbnRlcmVkX3JlY3QgPSBhYnNvbHV0ZV9pbWdfdG9wIC0gKHdpbmRvdy5pbm5lckhlaWdodCAtIGltYWdlX2RhdGEuY3VycmVudF9oZWlnaHQpIC8gMjsKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdG9wX29mX2NlbnRlcmVkX3JlY3QpOwogICAgICB9IGVsc2UgewogICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBhYnNvbHV0ZV9pbWdfdG9wKTsKICAgICAgfQogICAgICBkb25lX3Njcm9sbGluZyA9IHRydWU7CiAgICB9KTsKICB9CgogIC8vIHdoZW4gcmVzaXplIG5vdGljZSBpcyBoaWRkZW4gKGUuZy4gb3JpZ2luYWwgaW1hZ2UgaXMgbG9hZGVkKSwgc2Nyb2xsIHRvIG1ha2UgdXAgdGhlIGRpZmZlcmVuY2UKICBmdW5jdGlvbiBhZGRfcmVzaXplX25vdGljZV9saXN0ZW5lcigpIHsKICAgIGNvbnN0IHJlc2l6ZWRfbm90aWNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc2l6ZWRfbm90aWNlJyk7CiAgICBpZiAoaW1hZ2VfZGF0YSA9PT0gbnVsbCB8fCByZXNpemVkX25vdGljZSA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGNvbnN0IG5vdGljZV95X2RpZmYgPSBpbWFnZV9kYXRhLmltZ19lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHJlc2l6ZWRfbm90aWNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsKCiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICB3aW5kb3cuc2Nyb2xsQnkoMCwgLW5vdGljZV95X2RpZmYpOwogICAgfSk7CiAgICBvYnNlcnZlci5vYnNlcnZlKHJlc2l6ZWRfbm90aWNlLCB7IGF0dHJpYnV0ZUZpbHRlcjogWydzdHlsZSddIH0pOwogIH0KCiAgZnVuY3Rpb24gYWRkX2hpZ2hyZXNfbGlzdGVuZXIoKSB7CiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1hZ2UnKTsKICAgIGlmIChpbWcgPT09IG51bGwpIHJldHVybjsKCiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgLy8gaW1hZ2UgaXMgY2xlYXJlZCBiZWZvcmUgaGlnaHJlcyBpbWFnZSBpcyBsb2FkZWQKICAgICAgaWYgKGltZy5zcmMgPT09ICdhYm91dDpibGFuaycpIHJldHVybjsKICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwoKICAgICAgLy8gcmUtcmVhZCBpbWFnZSBzaXplIGluIGNhc2UgZ2V0X3Jlc29sdXRpb24oKSBoYWQgdG8gYmUgdXNlZAogICAgICByZWFkX2ltYWdlX2RhdGEoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoY29uZmlnLnNjYWxlX2ltYWdlKSBzY2FsZV9pbWFnZShjb25maWcuc2NhbGVfbW9kZSwgZmFsc2UpOwogICAgICB9KTsKICAgIH0pOwoKICAgIG9ic2VydmVyLm9ic2VydmUoaW1nLCB7IGF0dHJpYnV0ZUZpbHRlcjogWydzcmMnXSB9KTsKICB9CgogIGFzeW5jIGZ1bmN0aW9uIGxvYWRfaGlnaHJlcygpIHsKICAgIGlmICghY29uZmlnLmxvYWRfaGlnaHJlcykgcmV0dXJuOwoKICAgIGlmIChjb25maWcuaGlnaHJlc19saW1pdCA+IDApIHsKICAgICAgY29uc3QgaGlnaHJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoaWdocmVzJyk7CiAgICAgIGlmIChoaWdocmVzICE9PSBudWxsKSB7CiAgICAgICAgbGV0IHNpemUgPSBoaWdocmVzLnRpdGxlOyAvLyBlLmcuICIxLDczOCwyNTMgYnl0ZXMiCiAgICAgICAgc2l6ZSA9IHNpemUucmVwbGFjZUFsbCgnLCcsICcnKTsKICAgICAgICBzaXplID0gcGFyc2VJbnQoc2l6ZSwgMTApOwoKICAgICAgICBpZiAoc2l6ZSA+IGNvbmZpZy5oaWdocmVzX2xpbWl0KSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgd2hpbGUgKCFpc19kb25lX3Njcm9sbGluZygpIHx8IHVuc2FmZVdpbmRvdy5Qb3N0Py5oaWdocmVzID09PSB1bmRlZmluZWQpCiAgICAgIGF3YWl0IHNsZWVwKDIwKTsKCiAgICAvLyBtaW1pYyBzaXRlc2NyaXB0CiAgICB1bnNhZmVXaW5kb3cualF1ZXJ5KCdhI2ltYWdlLWxpbmsuc2FtcGxlJykudW5iaW5kKCdjbGljaycpLnJlbW92ZUF0dHIoJ2hyZWYnKTsKICAgIHVuc2FmZVdpbmRvdy5Qb3N0LmhpZ2hyZXMoKTsKICB9CgogIC8vIHNpbXBsZSBub3RlIGZpeCBmb3IgR2FsaW5vYSdzIFNhbmtha3UgQ2hhbm5lbCBEYXJrIChvbmx5IGZvciBkZWZhdWx0IGltYWdlIHNpemUpCiAgZnVuY3Rpb24gbm90ZV9maXgoKSB7CiAgICBpZiAoIWNvbmZpZy5zYW5rYWt1X2NoYW5uZWxfZGFya19jb21wYXRpYmlsaXR5KSByZXR1cm47CgogICAgY29uc3Qgbm90ZV9jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbm90ZS1jb250YWluZXInKTsKICAgIGlmIChub3RlX2NvbnRhaW5lciAhPT0gbnVsbCAmJiBpbWFnZV9kYXRhICE9PSBudWxsKSB7CiAgICAgIG5vdGVfY29udGFpbmVyLnN0eWxlLm1hcmdpbkxlZnQgPSAoKHdpbmRvdy5pbm5lcldpZHRoIC0gaW1hZ2VfZGF0YS5pbWdfZWxlbS5jbGllbnRXaWR0aCkgLyAyIC0gOCkgKyAncHgnOwogICAgfQogIH0KCiAgZnVuY3Rpb24gYWRkX3Bvc3RwYWdlX2hvdGtleXMoKSB7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHsKICAgICAgaWYgKFsnSU5QVVQnLCAnVEVYVEFSRUEnLCAnU0VMRUNUJ10uaW5jbHVkZXMoZS50YXJnZXQudGFnTmFtZSkpIHJldHVybjsKCiAgICAgIGNvbmZpZy5wb3N0cGFnZV9ob3RrZXlzW2Uua2V5LnRvTG93ZXJDYXNlKCldPy5jYWxsKGUpOwogICAgfSwgdHJ1ZSk7CiAgfQoKICAvLyBzaXRlZml4OiBmaXggcGl4aXYgc291cmNlIGxpbmtzIHVuZGVyICdEZXRhaWxzJwogIC8vIGlzc3VlOiBzb3VyY2UgbGlua3Mgb2YgdGhlIGZvcm0gaHR0cHM6Ly93d3cucGl4aXYubmV0L2FydHdvcmtzLzxpZD4gdHVybiBpbnRvCiAgLy8gaHR0cHM6Ly93d3cucGl4aXYubmV0L2FydHdvcmtzL2h0dHBzOi8vd3d3LnBpeGl2Lm5ldC9hcnR3b3Jrcy88aWQ+CiAgLy8gZG9lc24ndCBoYXBwZW4gZm9yIGh0dHBzOi8vd3d3LnBpeGl2Lm5ldC9lbi9hcnR3b3Jrcy88aWQ+CiAgLy8gb3IgdGhlIG9sZCBmb3JtYXQgaHR0cHM6Ly93d3cucGl4aXYubmV0L21lbWJlcl9pbGx1c3QucGhwP21vZGU9bWVkaXVtJmlsbHVzdF9pZD08aWQ+CiAgZnVuY3Rpb24gZml4X3BpeGl2X3NvdXJjZV9saW5rKCkgewogICAgY29uc3Qgc3RhdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RhdHMnKTsKICAgIGlmIChzdGF0cyA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGZvciAoY29uc3QgbGluayBvZiBzdGF0cy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnQScpKSB7CiAgICAgIGlmIChsaW5rLmhyZWYgJiYgbGluay5ocmVmLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vd3d3LnBpeGl2Lm5ldC9hcnR3b3Jrcy8nKSkgewogICAgICAgIGNvbnN0IGlkID0gbGluay5ocmVmLnN1YnN0cmluZygnaHR0cHM6Ly93d3cucGl4aXYubmV0L2FydHdvcmtzLycubGVuZ3RoKTsKICAgICAgICB0cnkgewogICAgICAgICAgbmV3IFVSTChpZCk7IC8vIHRocm93cyBpZiBub3QgYSB2YWxpZCBVUkwKICAgICAgICAgIGxpbmsuaHJlZiA9IGlkOwogICAgICAgIH0gY2F0Y2ggKGlnbm9yZSkgeyB9CiAgICAgIH0KICAgIH0KICB9CgogIC8qKioqKioqKioqKioqKioqKioqKioqKi8KICAvKiB3aWtpIHBhZ2UgZnVuY3Rpb25zICovCiAgLyoqKioqKioqKioqKioqKioqKioqKioqLwoKICBmdW5jdGlvbiBhZGRfZHRleHRfc3R5bGVfYnV0dG9ucygpIHsKICAgIGNvbnN0IHdpa2lfZm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aWtpLWZvcm0nKTsKICAgIGNvbnN0IHdpa2lfYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3aWtpX3BhZ2VfYm9keScpOwoKICAgIGlmICh3aWtpX2Zvcm0gPT09IG51bGwgfHwgd2lraV9ib2R5ID09PSBudWxsKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIGNvdWxkblwndCBmaW5kICJ3aWtpLWZvcm0iIG9yICJ3aWtpX3BhZ2VfYm9keSIsIERUZXh0IHN0eWxlIGJ1dHRvbnMgZGlzYWJsZWQnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHdpa2lfZm9ybS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOyAvLyBhZGQgYnV0dG9ucyB0byB0aGUgcmlnaHQKCiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKICAgIGRpdi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzFlbSc7CiAgICBkaXYuc3R5bGUubWFyZ2luVG9wID0gKHdpa2lfYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSB3aWtpX2Zvcm0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKSArICdweCc7CiAgICBkaXYuc3R5bGUuYmFja2dyb3VuZCA9IGdldF9vcmlnaW5hbF9iYWNrZ3JvdW5kX2NvbG9yKCk7CgogICAgZGl2LmlubmVySFRNTCA9ICc8bGFiZWwgdGl0bGU9IkJ1dHRvbnMgYWRkIChvciByZW1vdmUgb3V0ZXJtb3N0KSBEVGV4dCBzdHlsaW5nIG9uIHNlbGVjdGVkIHRleHQuXG4nCiAgICAgICsgJ0J1dHRvbnMgaGF2ZSBhY2Nlc3NrZXlzL2tleWJvYXJkIHNob3J0Y3V0cywgdHlwaWNhbGx5IGFjdGl2YXRlZCBieSBBbHQgKyBTaGlmdCArIGtleSBvciBBbHQgKyBrZXkgZGVwZW5kaW5nIG9uIHRoZSBicm93c2VyLiInCiAgICAgICsgJyBzdHlsZT0iY3Vyc29yOmhlbHA7Ij5EVGV4dCBzdHlsZSBidXR0b25zPC9sYWJlbD48YnI+JzsKCiAgICBjb25zdCBEVEVYVF9DT0RFUyA9IFsKICAgICAgJ2InLCAnaScsICdzJywgJ3UnLCAnPGJyPicsCiAgICAgICdjb2RlJywgJ3F1b3RlJywgJ3Nwb2lsZXInLCAnPGJyPicsCiAgICAgICdbWy4uLl1dJywgJ3t7Li4ufX0nLCAnVVJMJywKICAgIF07CgogICAgZm9yIChjb25zdCBjb2RlIG9mIERURVhUX0NPREVTKSB7CiAgICAgIGlmIChjb2RlID09PSAnPGJyPicpIHsKICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlInKSk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KCiAgICAgIGNvbnN0IGJ0biA9IGNyZWF0ZV9idXR0b24oKTsKICAgICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7CiAgICAgICAgY29uc3QgdGV4dCA9IHdpa2lfYm9keS52YWx1ZTsKICAgICAgICBjb25zdCBhID0gd2lraV9ib2R5LnNlbGVjdGlvblN0YXJ0OwogICAgICAgIGNvbnN0IGIgPSB3aWtpX2JvZHkuc2VsZWN0aW9uRW5kOwogICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRleHQuc3Vic3RyaW5nKGEsIGIpOwoKICAgICAgICBsZXQgY3V0X2EgPSBhLCBjdXRfYiA9IGI7ICAgICAgICAgLy8gcmFuZ2UgdG8gY3V0CiAgICAgICAgbGV0IGluc2VydDsgICAgICAgICAgICAgICAgICAgICAgIC8vIHRleHQgdG8gaW5zZXJ0IGluYmV0d2VlbgogICAgICAgIGxldCBzZWxfb2ZmX2EgPSAwLCBzZWxfb2ZmX2IgPSAwOyAvLyBieSBkZWZhdWx0IHRoZSBpbnNlcnRlZCB0ZXh0IGlzIHNlbGVjdGVkLCB0aGVzZSBhcmUgb2Zmc2V0cwoKICAgICAgICBpZiAoY29kZSA9PT0gJ1VSTCcpIHsKICAgICAgICAgIGNvbnN0IGxpbmsgPSB3aW5kb3cucHJvbXB0KCdFbnRlciBVUkwnKTsKICAgICAgICAgIGlmIChsaW5rID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpbnNlcnQgPSBgIiR7c2VsZWN0aW9ufSI6JHtsaW5rfWA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxldCBvcGVuOwogICAgICAgICAgbGV0IGNsb3NlOwogICAgICAgICAgaWYgKGNvZGUgPT09ICd7ey4uLn19JykgewogICAgICAgICAgICBvcGVuICA9ICd7eyc7CiAgICAgICAgICAgIGNsb3NlID0gJ319JzsKICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gJ1tbLi4uXV0nKSB7CiAgICAgICAgICAgIG9wZW4gID0gJ1tbJzsKICAgICAgICAgICAgY2xvc2UgPSAnXV0nOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3BlbiAgPSBgWyR7Y29kZX1dYDsKICAgICAgICAgICAgY2xvc2UgPSBgWy8ke2NvZGV9XWA7CiAgICAgICAgICB9CgogICAgICAgICAgY29uc3QgZXh0X2EgPSBNYXRoLm1heCgwLCBhIC0gb3Blbi5sZW5ndGgpOwogICAgICAgICAgY29uc3QgZXh0X2IgPSBiICsgY2xvc2UubGVuZ3RoOwogICAgICAgICAgY29uc3QgZXh0X3NlbGVjdGlvbiA9IHRleHQuc3Vic3RyaW5nKGV4dF9hLCBleHRfYik7CgogICAgICAgICAgaWYgKGV4dF9zZWxlY3Rpb24uc3RhcnRzV2l0aChvcGVuKSAmJiBleHRfc2VsZWN0aW9uLmVuZHNXaXRoKGNsb3NlKSkgewogICAgICAgICAgICAvLyByZW1vdmUgRFRleHQgZGlyZWN0bHkgb3V0c2lkZSBzZWxlY3Rpb24KICAgICAgICAgICAgaW5zZXJ0ID0gc2VsZWN0aW9uOwogICAgICAgICAgICBjdXRfYSA9IGV4dF9hOwogICAgICAgICAgICBjdXRfYiA9IGV4dF9iOwogICAgICAgICAgICBzZWxfb2ZmX2EgPSAtb3Blbi5sZW5ndGg7CiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5zdGFydHNXaXRoKG9wZW4pICYmIHNlbGVjdGlvbi5lbmRzV2l0aChjbG9zZSkpIHsKICAgICAgICAgICAgLy8gcmVtb3ZlIERUZXh0IGRpcmVjdGx5IGluc2lkZSBzZWxlY3Rpb24KICAgICAgICAgICAgaW5zZXJ0ID0gc2VsZWN0aW9uLnNsaWNlKG9wZW4ubGVuZ3RoLCAtY2xvc2UubGVuZ3RoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGxldCBjbGVhbmVkOwoKICAgICAgICAgICAgY29uc3Qgb3Blbl9pICA9IHNlbGVjdGlvbi5pbmRleE9mKG9wZW4pOwogICAgICAgICAgICBjb25zdCBjbG9zZV9pID0gc2VsZWN0aW9uLmxhc3RJbmRleE9mKGNsb3NlKTsKCiAgICAgICAgICAgIC8vIHJlbW92ZSBleGlzdGluZyAoaW5uZXIpIERUZXh0IGJlZm9yZSBhZGRpbmcgbmV3IG9uZQogICAgICAgICAgICBpZiAob3Blbl9pICE9PSAtMSAmJiBjbG9zZV9pID4gb3Blbl9pKSB7CiAgICAgICAgICAgICAgY2xlYW5lZCA9IHNlbGVjdGlvbi5zdWJzdHJpbmcoMCwgb3Blbl9pKQogICAgICAgICAgICAgICAgKyBzZWxlY3Rpb24uc3Vic3RyaW5nKG9wZW5faSAgKyBvcGVuLmxlbmd0aCwgY2xvc2VfaSkKICAgICAgICAgICAgICAgICsgc2VsZWN0aW9uLnN1YnN0cmluZyhjbG9zZV9pICsgY2xvc2UubGVuZ3RoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjbGVhbmVkID0gc2VsZWN0aW9uOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnNlcnQgPSBvcGVuICsgY2xlYW5lZCArIGNsb3NlOwogICAgICAgICAgICAvLyBzZWxlY3QgJ2NsZWFuZWQnCiAgICAgICAgICAgIHNlbF9vZmZfYSA9IG9wZW4ubGVuZ3RoOwogICAgICAgICAgICBzZWxfb2ZmX2IgPSAtKG9wZW4ubGVuZ3RoICsgY2xvc2UubGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGNvbnN0IHNlbF9hID0gYSArIHNlbF9vZmZfYTsKICAgICAgICBjb25zdCBzZWxfYiA9IHNlbF9hICsgaW5zZXJ0Lmxlbmd0aCArIHNlbF9vZmZfYjsKCiAgICAgICAgd2lraV9ib2R5LnZhbHVlID0gdGV4dC5zdWJzdHJpbmcoMCwgY3V0X2EpICsgaW5zZXJ0ICsgdGV4dC5zdWJzdHJpbmcoY3V0X2IpOwogICAgICAgIHdpa2lfYm9keS5zZXRTZWxlY3Rpb25SYW5nZShNYXRoLm1heCgwLCBzZWxfYSksIHNlbF9iKTsKICAgICAgICB3aWtpX2JvZHkuZm9jdXMoKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH07CgogICAgICAvLyBhZGQgYWNjZXNza2V5cyBhbmQgdGl0bGVzCiAgICAgIGlmIChjb2RlLmxlbmd0aCA9PT0gMSkgewogICAgICAgIGJ0bi5hY2Nlc3NLZXkgPSBjb2RlOwogICAgICAgIGJ0bi50aXRsZSA9CiAgICAgICAgICBjb2RlID09PSAnYicgPyAnYm9sZCcgOgogICAgICAgICAgICBjb2RlID09PSAnaScgPyAnaXRhbGljJyA6CiAgICAgICAgICAgICAgY29kZSA9PT0gJ3MnID8gJ3N0cmlrZXRocm91Z2gnIDoKICAgICAgICAgICAgICAgIGNvZGUgPT09ICd1JyA/ICd1bmRlcmxpbmUnIDogJyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnRuLmFjY2Vzc0tleSA9CiAgICAgICAgICBjb2RlID09PSAnY29kZScgICAgPyAnYycgOgogICAgICAgICAgICBjb2RlID09PSAncXVvdGUnICAgPyAncScgOgogICAgICAgICAgICAgIGNvZGUgPT09ICdzcG9pbGVyJyA/ICdvJyA6CiAgICAgICAgICAgICAgICBjb2RlID09PSAnW1suLi5dXScgPyAndycgOgogICAgICAgICAgICAgICAgICBjb2RlID09PSAne3suLi59fScgPyAncCcgOgogICAgICAgICAgICAgICAgICAgIGNvZGUgPT09ICdVUkwnICAgICA/ICdsJyA6ICcnOwoKICAgICAgICBpZiAoY29kZSA9PT0gJ1tbLi4uXV0nKSBidG4udGl0bGUgPSAnYWNjZXNza2V5OiB3JzsKICAgICAgICBpZiAoY29kZSA9PT0gJ3t7Li4ufX0nKSBidG4udGl0bGUgPSAnYWNjZXNza2V5OiBwJzsKICAgICAgfQoKICAgICAgY29uc3QgdSA9IC8vIGNoYXJhY3RlciB0byB1bmRlcmxpbmUKICAgICAgICBjb2RlID09PSAnY29kZScgICAgPyAwIDoKICAgICAgICAgIGNvZGUgPT09ICdxdW90ZScgICA/IDAgOgogICAgICAgICAgICBjb2RlID09PSAnc3BvaWxlcicgPyAyIDoKICAgICAgICAgICAgICBjb2RlID09PSAnVVJMJyAgICAgPyAyIDoKICAgICAgICAgICAgICAgIGNvZGUubGVuZ3RoID09PSAxICA/IDAgOiAtMTsKCiAgICAgIGlmICh1ICE9PSAtMSkgewogICAgICAgIGJ0bi5pbm5lckhUTUwgPSBgJHtjb2RlLnN1YnN0cmluZygwLCB1KX08c3BhbiBzdHlsZT0idGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Ij4ke2NvZGVbdV19PC9zcGFuPiR7Y29kZS5zdWJzdHJpbmcodSArIDEpfWA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnRuLmlubmVyVGV4dCA9IGNvZGU7CiAgICAgIH0KCiAgICAgIGRpdi5hcHBlbmRDaGlsZChidG4pOwogICAgfQoKICAgIHdpa2lfZm9ybS5hcHBlbmRDaGlsZChkaXYpOwogIH0KCiAgZnVuY3Rpb24gYWRkX3dpa2lfdGVtcGxhdGUoKSB7CiAgICBpZiAoY29uZmlnLndpa2lfdGVtcGxhdGUubGVuZ3RoID09PSAwKSByZXR1cm47CgogICAgY29uc3Qgd2lraV9mb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dpa2ktZm9ybScpOwogICAgY29uc3Qgd2lraV9ib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3dpa2lfcGFnZV9ib2R5Jyk7CgogICAgaWYgKHdpa2lfZm9ybSA9PT0gbnVsbCB8fCB3aWtpX2JvZHkgPT09IG51bGwpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ1thZGRvbiBlcnJvcl0gY291bGRuXCd0IGZpbmQgIndpa2ktZm9ybSIgb3IgIndpa2lfcGFnZV9ib2R5Iiwgd2lraSB0ZW1wbGF0ZSBkaXNhYmxlZCcpOwogICAgICByZXR1cm47CiAgICB9CgogICAgd2lraV9mb3JtLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7IC8vIGFkZCB0ZW1wbGF0ZSB0byB0aGUgcmlnaHQKCiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTsKICAgIGRpdi5zdHlsZS5tYXJnaW5MZWZ0ID0gJzFlbSc7CgogICAgY29uc3QgdGVtcGxhdGVfbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdMQUJFTCcpOwogICAgdGVtcGxhdGVfbGFiZWwuaW5uZXJUZXh0ID0gJ1dpa2kgVGVtcGxhdGUnOwogICAgdGVtcGxhdGVfbGFiZWwuc3R5bGUuY3Vyc29yID0gJ2hlbHAnOwogICAgdGVtcGxhdGVfbGFiZWwuc3R5bGUudGV4dERlY29yYXRpb24gPSAndW5kZXJsaW5lIGRhc2hlZCc7CiAgICB0ZW1wbGF0ZV9sYWJlbC50aXRsZSA9ICdTZWxlY3RlZCB0ZXh0IGNhbiBiZSBhcHBlbmRlZCB0byB0aGUgcGFnZSBib2R5LiBDbGlja2luZyBvciB1c2luZyBhcnJvdyBrZXlzIHNlbGVjdHMgYSB3aG9sZSBsaW5lLCBwcmVzc2luZyBcJ2NcJyBvciB0aGUgYnV0dG9uIGJlbG93IGNvcGllcyB0aGUgc2VsZWN0aW9uIG92ZXInOwoKICAgIGNvbnN0IHRlbXBsYXRlX3RleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdURVhUQVJFQScpOwogICAgdGVtcGxhdGVfdGV4dC5pZCA9ICd3aWtpX3RlbXBsYXRlX3RleHQnOwogICAgdGVtcGxhdGVfdGV4dC5jb2xzID0gd2lraV9ib2R5LmNvbHM7CiAgICB0ZW1wbGF0ZV90ZXh0LnJvd3MgPSB3aWtpX2JvZHkucm93czsKICAgIHRlbXBsYXRlX3RleHQuc3R5bGUud2lkdGggPSAnMzNlbSc7CiAgICB0ZW1wbGF0ZV90ZXh0LnZhbHVlID0gY29uZmlnLndpa2lfdGVtcGxhdGU7CgogICAgY29uc3QgaW5zZXJ0X3RlbXBsYXRlX3NlbGVjdGlvbiA9ICgpID0+IHsKICAgICAgY29uc3QgdGV4dCA9IHRlbXBsYXRlX3RleHQudmFsdWU7CiAgICAgIGNvbnN0IGEgPSB0ZW1wbGF0ZV90ZXh0LnNlbGVjdGlvblN0YXJ0OwogICAgICBjb25zdCBiID0gdGVtcGxhdGVfdGV4dC5zZWxlY3Rpb25FbmQ7CgogICAgICBjb25zdCBzZWxlY3Rpb24gPSB0ZXh0LnN1YnN0cmluZyhhLCBiKTsKICAgICAgY29uc3QgYWRkX25ld2xpbmUgPSB3aWtpX2JvZHkudmFsdWUgJiYgIXdpa2lfYm9keS52YWx1ZS5lbmRzV2l0aCgnXG4nKTsKICAgICAgd2lraV9ib2R5LnZhbHVlICs9IChhZGRfbmV3bGluZSA/ICdcbicgOiAnJykgKyBzZWxlY3Rpb247CiAgICB9OwoKICAgIGNvbnN0IGV4dGVuZF9zZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgIC8vIGV4dGVuZCBlbXB0eSBzZWxlY3Rpb24gdG8gbmV3bGluZXMgKG9yIHRleHQgc3RhcnQvZW5kKQogICAgICBjb25zdCB0ZXh0ID0gdGVtcGxhdGVfdGV4dC52YWx1ZTsKICAgICAgbGV0IGEgPSB0ZW1wbGF0ZV90ZXh0LnNlbGVjdGlvblN0YXJ0OwogICAgICBsZXQgYiA9IHRlbXBsYXRlX3RleHQuc2VsZWN0aW9uRW5kOwoKICAgICAgaWYgKGEgPT09IGIpIHsKICAgICAgICBjb25zdCBleHRfYSA9IHRleHQubGFzdEluZGV4T2YoJ1xuJywgYSAtIDEpOwogICAgICAgIGEgPSAoZXh0X2EgIT09IC0xID8gZXh0X2EgKyAxIDogMCk7CgogICAgICAgIGlmICh0ZXh0LmNoYXJBdChiKSAhPT0gJ1xuJykgewogICAgICAgICAgY29uc3QgZXh0X2IgPSB0ZXh0LmluZGV4T2YoJ1xuJywgYiArIDEpOwogICAgICAgICAgYiA9IChleHRfYiAhPT0gLTEgPyBleHRfYiAtIDEgOiB0ZXh0Lmxlbmd0aCAtIDEpICsgMTsKICAgICAgICB9CgogICAgICAgIHRlbXBsYXRlX3RleHQuc2V0U2VsZWN0aW9uUmFuZ2UoYSwgYik7CiAgICAgIH0KICAgIH07CgogICAgdGVtcGxhdGVfdGV4dC5yZWFkT25seSA9IHRydWU7IC8vIGhpZGVzIHRoZSBjYXJldCBhbmQgdGhlcmUncyBubyBlYXN5IHdvcmthcm91bmQKICAgIHRlbXBsYXRlX3RleHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBleHRlbmRfc2VsZWN0aW9uKTsKICAgIHRlbXBsYXRlX3RleHQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCBleHRlbmRfc2VsZWN0aW9uKTsKICAgIHRlbXBsYXRlX3RleHQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7CiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5hbHRLZXkgfHwgZS5zaGlmdEtleSkgcmV0dXJuOwogICAgICBpZiAoZS5rZXkgPT09ICdjJykgaW5zZXJ0X3RlbXBsYXRlX3NlbGVjdGlvbigpOwogICAgfSk7CgogICAgY29uc3QgYnRuID0gY3JlYXRlX2J1dHRvbigpOwogICAgYnRuLmlubmVyVGV4dCA9ICdDb3B5IHNlbGVjdGlvbiBvdmVyJzsKICAgIGJ0bi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOwogICAgYnRuLnN0eWxlLnBhZGRpbmcgPSAnMC4yZW0gMmVtJzsKICAgIGJ0bi5zdHlsZS5tYXJnaW4gPSAnMC4xZW0nOwogICAgYnRuLm9uY2xpY2sgPSAoKSA9PiB7IGluc2VydF90ZW1wbGF0ZV9zZWxlY3Rpb24oKTsgdGVtcGxhdGVfdGV4dC5mb2N1cygpOyByZXR1cm4gZmFsc2U7IH07CgogICAgZGl2LmFwcGVuZENoaWxkKHRlbXBsYXRlX2xhYmVsKTsKICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdCUicpKTsKICAgIGRpdi5hcHBlbmRDaGlsZCh0ZW1wbGF0ZV90ZXh0KTsKICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdCUicpKTsKICAgIGRpdi5hcHBlbmRDaGlsZChidG4pOwogICAgd2lraV9mb3JtLmFwcGVuZENoaWxkKGRpdik7CgogICAgZGl2LnN0eWxlLm1hcmdpblRvcCA9ICh3aWtpX2JvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gd2lraV9mb3JtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRlbXBsYXRlX2xhYmVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgKyAncHgnOwogIH0KCiAgZnVuY3Rpb24gYWRkX3JlY29yZF90ZW1wbGF0ZSgpIHsKICAgIGNvbnN0IHJlY29yZF9ib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJfcmVjb3JkX2JvZHknKTsKICAgIGNvbnN0IHJlY29yZF9zY29yZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyX3JlY29yZF9zY29yZScpOwoKICAgIGlmIChyZWNvcmRfYm9keSA9PT0gbnVsbCB8fCByZWNvcmRfc2NvcmUgPT09IG51bGwpIHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ2NvdWxkblwndCBmaW5kIHJlY29yZCBlbGVtZW50cywgZGlzYWJsZWQgdGVtcGxhdGUnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU1BBTicpOwogICAgbGFiZWwuaW5uZXJUZXh0ID0gJ1RlbXBsYXRlOic7CiAgICBsYWJlbC5zdHlsZS5tYXJnaW5MZWZ0ID0gJzAuNWVtJzsKICAgIGxhYmVsLnN0eWxlLm1hcmdpblJpZ2h0ID0gJzAuNWVtJzsKICAgIGluc2VydF9ub2RlX2FmdGVyKGxhYmVsLCByZWNvcmRfc2NvcmUpOwoKICAgIC8vIHRoZSBKU09OIGlzIHN1cHBvc2VkIHRvIGJlIGFuIGFycmF5IG9mIDItb3ItMy1lbnRyeS1hcnJheXMsIHdoaWNoIGNvbnZlcnRzIHRvIE1hcAogICAgY29uc3QgcmF3X3RlbXBsYXRlcyA9IEpTT04ucGFyc2UoY29uZmlnLnJlY29yZF90ZW1wbGF0ZSk7CgogICAgY29uc3QgdGVtcGxhdGVzID0gbmV3IE1hcCgpOwogICAgZm9yIChjb25zdCBbdGl0bGUsIGNvbnRlbnQsIHJhd19zY29yZV0gb2YgcmF3X3RlbXBsYXRlcykgewogICAgICBsZXQgc2NvcmUgPSBudWxsOwogICAgICBpZiAodHlwZW9mIHJhd19zY29yZSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICBzY29yZSA9IHJhd19zY29yZS50b0xvd2VyQ2FzZSgpOwoKICAgICAgICBpZiAoc2NvcmUgPT09ICduZXV0cmFsJykgc2NvcmUgPSAwOwogICAgICAgIGVsc2UgaWYgKHNjb3JlID09PSAncG9zaXRpdmUnKSBzY29yZSA9IDE7CiAgICAgICAgZWxzZSBpZiAoc2NvcmUgPT09ICduZWdhdGl2ZScpIHNjb3JlID0gLTE7CiAgICAgICAgZWxzZSBzY29yZSA9IG51bGw7CiAgICAgIH0KCiAgICAgIGlmIChzY29yZSA9PT0gbnVsbCkgewogICAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIHJlY29yZCB0ZW1wbGF0ZSBoYXMgaW52YWxpZCBzY29yZSwgc2VlIGNvbnNvbGUgZm9yIGRldGFpbHMnLCBbdGl0bGUsIGNvbnRlbnQsIHJhd19zY29yZV0pOwogICAgICB9CgogICAgICB0ZW1wbGF0ZXMuc2V0KHRpdGxlLCB7IGNvbnRlbnQsIHNjb3JlIH0pOwogICAgfQoKICAgIGNvbnN0IGFwcGx5X3RlbXBsYXRlID0gKHRlbXBsYXRlKSA9PiB7CiAgICAgIHJlY29yZF9ib2R5LnZhbHVlID0gdGVtcGxhdGUuY29udGVudDsKICAgICAgaWYgKHRlbXBsYXRlLnNjb3JlICE9PSBudWxsKSByZWNvcmRfc2NvcmUudmFsdWUgPSB0ZW1wbGF0ZS5zY29yZTsKICAgIH07CgogICAgY29uc3QgZHJvcGRvd24gPSBjcmVhdGVfdGVtcGxhdGVfZHJvcGRvd24odGVtcGxhdGVzLCBhcHBseV90ZW1wbGF0ZSk7CiAgICBkcm9wZG93bi5pZCA9ICd0ZW1wbGF0ZV9kcm9wZG93bic7CiAgICBpbnNlcnRfbm9kZV9hZnRlcihkcm9wZG93biwgbGFiZWwpOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZ3NjcmlwdF9wcmVzZXRzKCkgewogICAgaWYgKCFJbmRleFBhZ2UuaGFzX3RhZ19zY3JpcHRzKSByZXR1cm47CgogICAgY29uc3QgbW9kZV9tZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGUtbWVudScpOwogICAgaWYgKG1vZGVfbWVudSA9PT0gbnVsbCkgewogICAgICBzaG93X25vdGljZShjb25zb2xlLmVycm9yLCAnW2FkZG9uIGVycm9yXSBjb3VsZG5cJ3QgZmluZCAiTW9kZSIgbWVudSwgZGlzYWJsZWQgdGFnc2NyaXB0IHByZXNldHMnKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIHRoZSBKU09OIGlzIHN1cHBvc2VkIHRvIGJlIGFuIGFycmF5IG9mIDItZW50cnktYXJyYXlzLCB3aGljaCBjb252ZXJ0cyB0byBNYXAKICAgIGNvbnN0IHByZXNldHMgPSBuZXcgTWFwKEpTT04ucGFyc2UoY29uZmlnLnRhZ3NjcmlwdF9wcmVzZXRzKSk7CgogICAgaWYgKHByZXNldHMuc2l6ZSA9PT0gMCkKICAgICAgcmV0dXJuOwoKICAgIG1vZGVfbWVudS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdQJykpOwoKICAgIGNvbnN0IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnSDUnKTsKICAgIGxhYmVsLmlubmVyVGV4dCA9ICdUYWcgU2NyaXB0IFByZXNldHMnOwogICAgbW9kZV9tZW51LmFwcGVuZENoaWxkKGxhYmVsKTsKCiAgICBjb25zdCBzZXRfdGFnX3NjcmlwdCA9IChzY3JpcHQpID0+IHsKICAgICAgc2V0X2Nvb2tpZSgndGFnLXNjcmlwdCcsIHNjcmlwdCk7CiAgICAgIHNlbGVjdF9tb2RlKCdhcHBseS10YWctc2NyaXB0Jyk7CiAgICB9OwoKICAgIGNvbnN0IGRyb3Bkb3duID0gY3JlYXRlX3RlbXBsYXRlX2Ryb3Bkb3duKHByZXNldHMsIHNldF90YWdfc2NyaXB0KTsKICAgIGRyb3Bkb3duLmlkID0gJ3RhZ3NjcmlwdF9wcmVzZXRzX2Ryb3Bkb3duJzsKICAgIG1vZGVfbWVudS5hcHBlbmRDaGlsZChkcm9wZG93bik7CiAgfQoKICBmdW5jdGlvbiBjcmVhdGVfdGVtcGxhdGVfZHJvcGRvd24odGVtcGxhdGVzLCBjaGFuZ2VfZXZlbnQpIHsKICAgIGNvbnN0IGRyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU0VMRUNUJyk7CgogICAgY29uc3QgZW1wdHlfb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnT1BUSU9OJyk7CiAgICBlbXB0eV9vcHRpb24uZGlzYWJsZWQgPSB0cnVlOwogICAgZW1wdHlfb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTsKICAgIGVtcHR5X29wdGlvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgZHJvcGRvd24uYXBwZW5kQ2hpbGQoZW1wdHlfb3B0aW9uKTsKCiAgICBmb3IgKGNvbnN0IFt0aXRsZSwgdmFsdWVdIG9mIHRlbXBsYXRlcy5lbnRyaWVzKCkpIHsKICAgICAgY29uc3Qgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnT1BUSU9OJyk7CiAgICAgIG9wdGlvbi5pbm5lclRleHQgPSB0aXRsZTsKCiAgICAgIC8vIHNvbWV3aGF0IHJlZHVuZGFudCB0byB0aGUgY2hhbmdlIGV2ZW50IGJ1dCBhbGxvd3MgdG8gInJlc2V0IiB0aGUgdGV4dCB0byBhbiBhbHJlYWR5IHNlbGVjdGVkIHRlbXBsYXRlCiAgICAgIG9wdGlvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7CiAgICAgICAgY2hhbmdlX2V2ZW50KHZhbHVlKTsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIH0pOwoKICAgICAgZHJvcGRvd24uYXBwZW5kQ2hpbGQob3B0aW9uKTsKICAgIH0KCiAgICBkcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gewogICAgICBjaGFuZ2VfZXZlbnQodGVtcGxhdGVzLmdldChkcm9wZG93bi52YWx1ZSkpOwogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB9KTsKCiAgICByZXR1cm4gZHJvcGRvd247CiAgfQoKICBmdW5jdGlvbiBhZGRfdGFnX2VkaXRfZ2VhcigpIHsgLy8gYWRkIGEgIuKamSIgbGluayB0byB0aGUgdGFnIGVkaXQgcGFnZQogICAgdHJ5IHsKICAgICAgY29uc3QgaDIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudGl0bGUnKTsKCiAgICAgIGNvbnN0IHRhZyA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpLnNlYXJjaFBhcmFtcy5nZXQoJ3RpdGxlJyk7CgogICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQScpOwogICAgICBhLmhyZWYgPSAnL3RhZy9lZGl0P25hbWU9JyArIHRhZzsKICAgICAgYS5pbm5lclRleHQgPSAn4pqZJzsKICAgICAgYS50aXRsZSA9ICdFZGl0IFRhZyc7CgogICAgICBoMi5hcHBlbmRDaGlsZChhKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIGNvdWxkblwndCBhZGQgIuKamSIgdGFnIHBhZ2UgbGluaywgY2hlY2sgY29uc29sZScsIGVycm9yKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGFkZF90YWdfaGlzdG9yeV9saW5rKCkgeyAvLyBhZGQgYSAiSGlzdG9yeSDCuyIgbGluayB0byB0aGUgdGFnIGhpc3RvcnkgcGFnZQogICAgdHJ5IHsKICAgICAgY29uc3QgaW5mbyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50YWctaW5mb3JtYXRpb24nKTsKICAgICAgY29uc3QgcmVsYXRlZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5yZWxhdGVkLXRhZ3MnKTsKCiAgICAgIC8vIHVzZSB0aGUgaGlkZGVuIGZvcm0gZmllbGQgYmVjYXVzZSB1cmwgY2FuIGVpdGhlciBiZSBlLmcuIC90YWcvZWRpdD9uYW1lPWhpZ2hfcmVzb2x1dGlvbiBvciAvdGFnL2VkaXQvNDY0MjkyCiAgICAgIGNvbnN0IHRhZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWdfbmFtZScpLnZhbHVlOwoKICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7CiAgICAgIGNvbnN0IGg0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnSDQnKTsKICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ0EnKTsKICAgICAgYS5ocmVmID0gJy90YWcvaGlzdG9yeT9uYW1lPScgKyB0YWc7CiAgICAgIGEuaW5uZXJUZXh0ID0gJ0hpc3RvcnkgwrsnOwoKICAgICAgZGl2LmFwcGVuZENoaWxkKGg0KTsKICAgICAgaDQuYXBwZW5kQ2hpbGQoYSk7CgogICAgICBpZiAocmVsYXRlZCAhPT0gbnVsbCkgewogICAgICAgIHJlbGF0ZWQuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KCdhZnRlcmVuZCcsIGRpdik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5mby5wcmVwZW5kKGRpdik7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHNob3dfbm90aWNlKGNvbnNvbGUuZXJyb3IsICdbYWRkb24gZXJyb3JdIGNvdWxkblwndCBhZGQgdGFnIGhpc3RvcnkgcGFnZSBsaW5rLCBjaGVjayBjb25zb2xlJywgZXJyb3IpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gZGVsZXRpb25fc2FuaXR5X2NoZWNrcygpIHsgLy8gZm9yIGR1cGxpY2F0ZXMKICAgIGNvbnN0IHRodW1icyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcjY29udGVudCA+IC5kZWxldGluZy1wb3N0IC50aHVtYicpXTsKICAgIGlmICh0aHVtYnMubGVuZ3RoICE9PSAyKQogICAgICByZXR1cm47IC8vIG5vIHBhcmVudAoKICAgIGNvbnN0IFdBUk5JTkdfVEVYVCA9ICc8YiBzdHlsZT0iY29sb3I6IGNyaW1zb24iPldhcm5pbmc6IDwvYj4nOwogICAgY29uc3QgQ0hFQ0tFRF9UQUdTID0gWyd1cHNjYWxlZCcsICdsZWdpdGltYXRlX3ZhcmlhdGlvbicsICdyZXZpc2lvbicsICd0aGlyZC1wYXJ0eV9lZGl0JywgJ3BvdGVudGlhbF91cHNjYWxlJywgJ21kNV9taXNtYXRjaCddOwogICAgY29uc3QgQ0hFQ0tFRF9DT01CSU5BVElPTlMgPSBbWydjZW5zb3JlZCcsICd1bmNlbnNvcmVkJ11dOwoKICAgIC8vIHJlbW92ZSBvbGQgd2FybmluZ3MgYmVmb3JlIHJlLWV2YWx1YXRpbmcKICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5TQS13YXJuaW5nJykuZm9yRWFjaCgoZWwpID0+IGVsLnJlbW92ZSgpKTsKCiAgICBjb25zdCBwb3N0cyA9IHRodW1icy5tYXAoZ2V0X3Bvc3RfZnJvbV90aHVtYik7CgogICAgY29uc3Qgd2Fybl90YWdzID0gcG9zdHMubWFwKHBvc3QgPT4gcG9zdC50YWdzLmZpbHRlcih0YWcgPT4gQ0hFQ0tFRF9UQUdTLmluY2x1ZGVzKHRhZykpKTsKCiAgICBmb3IgKGNvbnN0IFt0YWcxLCB0YWcyXSBvZiBDSEVDS0VEX0NPTUJJTkFUSU9OUykgewogICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykgewogICAgICAgIGlmIChwb3N0c1tpXS50YWdzLmluY2x1ZGVzKHRhZzEpICYmIHBvc3RzWzEgLSBpXS50YWdzLmluY2x1ZGVzKHRhZzIpKSB7CiAgICAgICAgICB3YXJuX3RhZ3NbaV0ucHVzaCh0YWcxKTsKICAgICAgICAgIHdhcm5fdGFnc1sxIC0gaV0ucHVzaCh0YWcyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBjb25zdCBjb252ZXJ0X3RvX21hcmdpbiA9ICh0aHVtYikgPT4gewogICAgICBjb25zdCBhID0gdGh1bWIucXVlcnlTZWxlY3RvcignYScpOwogICAgICBjb25zdCB5X2RpZmYgPSBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIHRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsKCiAgICAgIC8vIHRoZSB0aHVtYm5haWwgaW1hZ2UgaXMgY2VudGVyZWQgaW4gYSBncmlkIChzZWUgYWRqdXN0X2NzcygpKSwgd2hpY2ggd2lsbCBtb3ZlIGl0IHVwIHdoZW4gc29tZXRoaW5nIGlzIGFkZGVkIGJlbG93IGl0CiAgICAgIC8vIHRvIGZpeCB0aGlzIHdlIHJlcGxhY2UgdGhlIHZlcnRpY2FsIGNlbnRlcmluZyB3aXRoIGEgbWFyZ2luIChhbmQgYWxsb3cgdGhlIHRodW1ibmFpbCB0byBzY2FsZSB2ZXJ0aWNhbGx5IHRvbykKCiAgICAgIC8vIGZpeCB0aHVtYm5haWwgaW4gcGxhY2UgdmVydGljYWxseQogICAgICBhLnN0eWxlLm1hcmdpblRvcCA9IGAke3lfZGlmZn1weGA7CiAgICAgIHRodW1iLnN0eWxlLmFsaWduQ29udGVudCA9ICdzdGFydCc7CiAgICAgIC8vIG1ha2UgdGh1bWJuYWlsIHNjYWxlIHZlcnRpY2FsbHkKICAgICAgdGh1bWIuc3R5bGUubWluSGVpZ2h0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGh1bWIpLmhlaWdodDsKICAgICAgdGh1bWIuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nOwogICAgfTsKCiAgICB0aHVtYnMuZm9yRWFjaChjb252ZXJ0X3RvX21hcmdpbik7CgogICAgY29uc3QgYWRkX3RhZ3NfYmVsb3dfdGh1bWIgPSAodGh1bWIsIHRhZ3MsIG1pc3NpbmcpID0+IHsKICAgICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykgewogICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7CiAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSAnU0Etd2FybmluZyc7CiAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICdjcmltc29uJzsKICAgICAgICBzcGFuLnN0eWxlLmZvbnRXZWlnaHQgPSAnYm9sZCc7CiAgICAgICAgaWYgKG1pc3NpbmcpIHNwYW4uc3R5bGUudGV4dERlY29yYXRpb24gPSAnbGluZS10aHJvdWdoJzsKICAgICAgICBzcGFuLmlubmVyVGV4dCA9IHRhZzsKCiAgICAgICAgdGh1bWIuYXBwZW5kQ2hpbGQoc3Bhbik7CiAgICAgIH0KICAgIH07CgogICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHVtYnMubGVuZ3RoOyBpKyspIHsKICAgICAgYWRkX3RhZ3NfYmVsb3dfdGh1bWIodGh1bWJzW2ldLCB3YXJuX3RhZ3NbaV0pOwogICAgfQoKICAgIGlmICghcG9zdHNbMF0udGFncy5pbmNsdWRlcygnZHVwbGljYXRlJykpIHsKICAgICAgYWRkX3RhZ3NfYmVsb3dfdGh1bWIodGh1bWJzWzBdLCBbJ2R1cGxpY2F0ZSddLCB0cnVlKTsKICAgIH0KCiAgICBjb25zdCBpbnRlZ2VyX211bHRpcGxlID0gKGEsIGIpID0+IHsKICAgICAgaWYgKGEgPCBiKSByZXR1cm4gaW50ZWdlcl9tdWx0aXBsZShiLCBhKTsKICAgICAgaWYgKGEgPiBiICYmIGEgJSBiID09PSAwKSB7CiAgICAgICAgcmV0dXJuIGEgLyBiOwogICAgICB9CiAgICAgIHJldHVybiBOYU47CiAgICB9OwoKICAgIGNvbnN0IHdpZHRocyA9IFtdOwogICAgY29uc3QgaGVpZ2h0cyA9IFtdOwoKICAgIC8vIHJlYWQgcmVzb2x1dGlvbnMKICAgIGNvbnN0IHJlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjb250ZW50ID4gLmRlbGV0aW5nLXBvc3QgPiB1bCA+IGxpOm50aC1jaGlsZCgyKScpOwogICAgZm9yIChjb25zdCBiIG9mIHJlcy5nZXRFbGVtZW50c0J5VGFnTmFtZSgnQicpKSB7CiAgICAgIGNvbnN0IG1hdGNoID0gLyhbXGRdKyl4KFtcZF0rKS8uZXhlYyhiLmlubmVyVGV4dCk7CiAgICAgIGlmIChtYXRjaCkgewogICAgICAgIGNvbnN0IFssIHdpZHRoLCBoZWlnaHRdID0gbWF0Y2g7CiAgICAgICAgd2lkdGhzLnB1c2goTnVtYmVyKHdpZHRoKSk7CiAgICAgICAgaGVpZ2h0cy5wdXNoKE51bWJlcihoZWlnaHQpKTsKICAgICAgfQogICAgfQoKICAgIC8vIGFkZCBwb3RlbnRpYWwgdXBzY2FsZSB3YXJuaW5nCiAgICBjb25zdCBtdWx0aXBsZSA9IGludGVnZXJfbXVsdGlwbGUoLi4ud2lkdGhzKTsKICAgIGlmIChtdWx0aXBsZSA9PT0gaW50ZWdlcl9tdWx0aXBsZSguLi5oZWlnaHRzKSkgewogICAgICByZXMuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLCBgICR7V0FSTklOR19URVhUfSBwb3RlbnRpYWwgJHttdWx0aXBsZX14IHVwc2NhbGVgKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGFkZF9jdXN0b21fZHVwbGljYXRlX2RlbGV0ZV9yZWFzb24oKSB7CiAgICBjb25zdCByZWFzb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVhc29uJyk7CiAgICBjb25zdCBjdXN0b21fcmVhc29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbV9yZWFzb24nKTsKCiAgICBjb25zdCB0aHVtYnMgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnI2NvbnRlbnQgPiAuZGVsZXRpbmctcG9zdCAudGh1bWInKV07CiAgICBpZiAodGh1bWJzLmxlbmd0aCAhPT0gMikKICAgICAgcmV0dXJuOyAvLyBubyBwYXJlbnQKCiAgICBjb25zdCBwYXJlbnRfaWQgPSB0aHVtYnNbMV0uaWQuc3Vic3RyaW5nKDEpOwoKICAgIGNvbnN0IGN1c3RvbV9kdXBlX29wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ09QVElPTicpOwogICAgY3VzdG9tX2R1cGVfb3B0aW9uLmlubmVyVGV4dCA9IGBkdXBsaWNhdGUgb2YgJHtwYXJlbnRfaWR9IChjdXN0b20gcmVhc29uKWA7CiAgICByZWFzb24uYXBwZW5kQ2hpbGQoY3VzdG9tX2R1cGVfb3B0aW9uKTsKCiAgICByZWFzb24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4gewogICAgICBjb25zdCBpID0gcmVhc29uLnNlbGVjdGVkSW5kZXg7CiAgICAgIGlmIChpID09PSAwKSByZXR1cm47CgogICAgICBjb25zdCBpc19jdXN0b21fZHVwZSA9IHJlYXNvbi5vcHRpb25zW2ldID09PSBjdXN0b21fZHVwZV9vcHRpb247CgogICAgICBpZiAoaXNfY3VzdG9tX2R1cGUpIHsKICAgICAgICByZWFzb24uc2VsZWN0ZWRJbmRleCA9IDA7CiAgICAgICAgY3VzdG9tX3JlYXNvbi52YWx1ZSA9IGBkdXBsaWNhdGUgb2YgJHtwYXJlbnRfaWR9ICguLi4pYDsKICAgICAgICBjdXN0b21fcmVhc29uLmZvY3VzKCk7CiAgICAgICAgY3VzdG9tX3JlYXNvbi5zZXRTZWxlY3Rpb25SYW5nZShjdXN0b21fcmVhc29uLnZhbHVlLmxlbmd0aCAtIDQsIGN1c3RvbV9yZWFzb24udmFsdWUubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gYWRkX3RhZ3NfY29weV9idXR0b24oKSB7CiAgICBjb25zdCB0YWdzX25vdF9wcmVzZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NvbnRlbnQgPiAuZGVsZXRpbmctcG9zdCA+IHVsID4gbGk6bnRoLWNoaWxkKDcpJyk7CiAgICBpZiAodGFnc19ub3RfcHJlc2VudCA9PT0gbnVsbCkgcmV0dXJuOwoKICAgIGxldCB0YWdzX2RpZmYgPSAnICc7CiAgICBmb3IgKGNvbnN0IGEgb2YgdGFnc19ub3RfcHJlc2VudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnQScpKSB7CiAgICAgIGNvbnN0IHRhZyA9IGEuaW5uZXJUZXh0LnJlcGxhY2VBbGwoLyAvZywgJ18nKTsKICAgICAgaWYgKFsnZHVwbGljYXRlJywgJ3BvdGVudGlhbF9kdXBsaWNhdGUnXS5pbmNsdWRlcyh0YWcpKSBjb250aW51ZTsgLy8gVE9ETzogaWdub3JlIGFsbCBtZXRhIHRhZ3M/CiAgICAgIHRhZ3NfZGlmZiArPSB0YWcgKyAnICc7CiAgICB9CgogICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQlVUVE9OJyk7CiAgICBidXR0b24udHlwZSA9ICdidXR0b24nOwogICAgYnV0dG9uLmlubmVyVGV4dCA9ICdDb3B5IFRhZ3MnOwogICAgYnV0dG9uLm9uY2xpY2sgPSAoKSA9PiBzZXRfY2xpcGJvYXJkKHRhZ3NfZGlmZik7CgogICAgdGFnc19ub3RfcHJlc2VudC5hcHBlbmRDaGlsZChidXR0b24pOwogIH0KCiAgZnVuY3Rpb24gYWRkX3Bvc3RfZWRpdF9idXR0b25zKCkgewogICAgLy8gY2FjaGUgdGh1bWJuYWlsIHRhZ3MKICAgIGZvciAoY29uc3QgdGh1bWIgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRodW1iJykpCiAgICAgIGdldF9wb3N0X2Zyb21fdGh1bWIodGh1bWIpOwoKICAgIGNvbnN0IHRodW1icyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGVsZXRpbmctcG9zdCAudGh1bWInKV07CiAgICBmb3IgKGNvbnN0IHRodW1iIG9mIHRodW1icykgewogICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQScpOwogICAgICBhLmlubmVyVGV4dCA9ICfimpknOwogICAgICBhLnN0eWxlLmZvbnRTaXplID0gJzEyMCUnOwogICAgICBhLmhyZWYgPSAnIyc7CiAgICAgIGEub25jbGljayA9ICgpID0+IHsKICAgICAgICBvcGVuX3Bvc3RfZWRpdF9kaWFsb2codGh1bWIpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfTsKICAgICAgdGh1bWIuYXBwZW5kQ2hpbGQoYSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhZGRfbW9kZXJhdGlvbl9zZWFyY2hfdGVtcGxhdGUoKSB7CiAgICBjb25zdCBxdWVyeSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdxdWVyeScpOwogICAgY29uc3Qgc2VsZWN0ID0gY3JlYXRlX3RlbXBsYXRlX2Ryb3Bkb3duKG5ldyBNYXAoW1snUGVuZGluZyBQb3N0cycsICdzdGF0dXM6cGVuZGluZyddLCBbJ0ZsYWdnZWQgUG9zdHMnLCAnb3JkZXI6cmVjZW50bHlfZmxhZ2dlZCAtc3RhdHVzOnBlbmRpbmcnXV0pLCAodmFsdWUpID0+IHsKICAgICAgc2VsZWN0LnNlbGVjdGVkSW5kZXggPSAwOwogICAgICBxdWVyeS5mb2N1cygpOwoKICAgICAgaWYgKHF1ZXJ5LnZhbHVlLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuOwogICAgICBxdWVyeS52YWx1ZSArPSBgICR7dmFsdWV9IGA7CiAgICB9KTsKCiAgICBjb25zdCBzZWFyY2hfYnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2NvbnRlbnQgPiBmb3JtID4gaW5wdXQ6bnRoLWNoaWxkKDIpJyk7CiAgICBzZWFyY2hfYnV0dG9uLmluc2VydEFkamFjZW50RWxlbWVudCgnYWZ0ZXJlbmQnLCBzZWxlY3QpOwogICAgc2VhcmNoX2J1dHRvbi5pbnNlcnRBZGphY2VudFRleHQoJ2FmdGVyZW5kJywgJyAnKTsKICB9CgoKICAvKioqKioqKioqKioqKioqKioqLwogIC8qIGRvY3VtZW50LXN0YXJ0ICovCiAgLyoqKioqKioqKioqKioqKioqKi8KCiAgYXdhaXQgbG9hZF9jb25maWcoKTsKCiAgLy8gc2tpcCBsYW5ndWFnZSBjb2RlcyBpbiBwYXRobmFtZXMgbGlrZSAiL2pwL3Bvc3Qvc2hvdyIKICBsZXQgcGF0aG5hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgaWYgKHBhdGhuYW1lLmluZGV4T2YoJy8nLCAxKSA9PT0gMykKICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyaW5nKDMpOwogIGlmIChwYXRobmFtZS5zdGFydHNXaXRoKCcvcG9zdC9pbmRleCcpKSBwYXRobmFtZSA9ICcvJzsgLy8gbm9ybWFsaXplIHBvc3QgaW5kZXgKCiAgLy8gZGV0ZWN0IHBhZ2UKICBpZiAocGF0aG5hbWUgPT09ICcvJyB8fCBwYXRobmFtZS5zdGFydHNXaXRoKCcvcG9zdC9zaW1pbGFyJykpICAgICAgICAgICAgICAgICAgIEdlbmVyYWwucGFnZSA9IFBhZ2UuSW5kZXg7CiAgZWxzZSBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3Bvc3Qvc2hvdy8nKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmFsLnBhZ2UgPSBQYWdlLlBvc3Q7CiAgZWxzZSBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3dpa2kvYWRkJykgfHwgcGF0aG5hbWUuc3RhcnRzV2l0aCgnL3dpa2kvZWRpdCcpKSBHZW5lcmFsLnBhZ2UgPSBQYWdlLldpa2k7CiAgZWxzZSBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3dpa2kvc2hvdycpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmFsLnBhZ2UgPSBQYWdlLldpa2lTaG93OwogIGVsc2UgaWYgKHBhdGhuYW1lLnN0YXJ0c1dpdGgoJy90YWcvZWRpdCcpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhbC5wYWdlID0gUGFnZS5UYWc7CiAgZWxzZSBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3Bvc3QvZGVsZXRlJykpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmFsLnBhZ2UgPSBQYWdlLkRlbGV0ZTsKICBlbHNlIGlmIChwYXRobmFtZS5zdGFydHNXaXRoKCcvcG9zdC9tb2RlcmF0ZScpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYWwucGFnZSA9IFBhZ2UuTW9kZXJhdGU7CiAgZWxzZSBpZiAocGF0aG5hbWUuc3RhcnRzV2l0aCgnL3VzZXJfcmVjb3JkL2NyZWF0ZScpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmFsLnBhZ2UgPSBQYWdlLlJlY29yZDsKCiAgLy8gbGlzdGVuIGZvciBjb25maWcgY2hhbmdlcyBpbiBvdGhlciB3aW5kb3dzCiAgYWRkX3N0b3JhZ2VfY2hhbmdlX2xpc3RlbmVyKCk7CgogIG1vZGlmeV9jc3MoKTsKCiAgLy8gYWRkIHRodW1ibmFpbCBpY29ucyBhbmQgZmFkZSBvdXQgdGh1bWJuYWlscwogIG1vZGlmeV9ub2Rlcygnc3Bhbi50aHVtYiAucHJldmlldycsIG1vZGlmeV90aHVtYm5haWwsICcuY29udGVudC1wYWdlLCAjcmVjb21tZW5kYXRpb25zJyk7CgogIHN3aXRjaCAoR2VuZXJhbC5wYWdlKSB7CiAgICBjYXNlIFBhZ2UuUG9zdDoKCiAgICAgIC8vIG11dGUvcGF1c2UgdmlkZW8KICAgICAgbW9kaWZ5X25vZGVzKCd2aWRlbyNpbWFnZScsIG5vZGUgPT4geyBjb25maWd1cmVfdmlkZW8obm9kZSk7IHJldHVybiB0cnVlOyB9KTsKCiAgICAgIGJyZWFrOwogIH0KCgoKCiAgLyoqKioqKioqKioqKioqKioqKi8KICAvKiBjb250ZW50LWxvYWRlZCAqLwogIC8qKioqKioqKioqKioqKioqKiovCgogIGFzeW5jIGZ1bmN0aW9uIGluaXQoKSB7CiAgICBhZGRfY29uZmlnX2RpYWxvZygpOwogICAgaWYgKElTX01PTktFWSkgR00ucmVnaXN0ZXJNZW51Q29tbWFuZCgnT3BlbiBBZGRvbiBDb25maWcnLCAoKSA9PiBzaG93X2NvbmZpZ19kaWFsb2codHJ1ZSksICdDJyk7CiAgICBhZGRfY29uZmlnX2J1dHRvbigpOwogICAgdXBkYXRlX2NvbmZpZ19kaWFsb2coKTsKCiAgICB1cGRhdGVfaGVhZGVybG9nbygpOwogICAgdXNlZnVsX2JldGFfbGluayhwYXRobmFtZSk7CgogICAgc3dpdGNoIChHZW5lcmFsLnBhZ2UpIHsKICAgICAgY2FzZSBQYWdlLkluZGV4OgogICAgICAgIEluZGV4UGFnZS5pbml0KCk7CgogICAgICAgIGFkZF9tb2RlX29wdGlvbnMoKTsKICAgICAgICBhZGRfdGFnc2NyaXB0X3ByZXNldHMoKTsKCiAgICAgICAgaWYgKGNvbmZpZy50YWdfc2VhcmNoX2J1dHRvbnMpIGFkZF90YWdfc2VhcmNoX2J1dHRvbnMoKTsKICAgICAgICBhZGRfcG9zdG1vZGVfaG90a2V5cygpOwoKICAgICAgICBhZGRfcG9zdF9lZGl0X2RpYWxvZygpOwogICAgICAgIHVwZGF0ZV90YWdfZWxlbWVudHMoKTsgLy8gaW5pdGlhbGl6ZSB0YWcgbWVudS9idXR0b25zCiAgICAgICAgYWRkX3RhZ3NfY2hhbmdlX2xpc3RlbmVyKCk7CgogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQYWdlLlBvc3Q6CiAgICAgICAgUG9zdFBhZ2UuaW5pdChwYXRobmFtZSk7CgogICAgICAgIGlmIChjb25maWcudmlld19oaXN0b3J5X2VuYWJsZWQpIHsKICAgICAgICAgIGNvbmZpZ1tISVNUT1JZX0tFWV0uYWRkKE51bWJlcihQb3N0UGFnZS5wb3N0X2lkKSk7CiAgICAgICAgICBzYXZlX3NldHRpbmcoSElTVE9SWV9LRVksIGNvbmZpZ1tISVNUT1JZX0tFWV0pOyAvLyBzYXZlIGFuZCBicm9hZGNhc3QgdmlldyBoaXN0b3J5CiAgICAgICAgfQoKICAgICAgICBpZiAoY29uZmlnLnRhZ19zZWFyY2hfYnV0dG9ucykgYWRkX3RhZ19zZWFyY2hfYnV0dG9ucygpOwogICAgICAgIGlmIChjb25maWcudGFnX2NhdGVnb3J5X2NvbGxhcHNlcikgYWRkX3RhZ19jYXRlZ29yeV9jb2xsYXBzZXIoKTsKICAgICAgICBhZGRfYWRkb25fYWN0aW9ucyhmaW5kX2FjdGlvbnNfbGlzdCgpKTsKCiAgICAgICAgaWYgKGNvbmZpZy5hZGRfZmlsZXR5cGVfc3RhdCkgYWRkX2ZpbGV0eXBlX3N0YXQoKTsKICAgICAgICBmaXhfcGl4aXZfc291cmNlX2xpbmsoKTsKICAgICAgICBpZiAoY29uZmlnLm1vdmVfc3RhdHNfdG9fZWRpdF9mb3JtKSBtb3ZlX3N0YXRzX3RvX2VkaXRfZm9ybSgpOwoKICAgICAgICBhZGRfdGFnX2J1dHRvbnMoJ2VkaXQtZm9ybScpOwogICAgICAgIGlmIChjb25maWcudGFnX21lbnUpIGFkZF90YWdfbWVudSgpOwogICAgICAgIHVwZGF0ZV90YWdfZWxlbWVudHMoKTsgLy8gaW5pdGlhbGl6ZSB0YWcgbWVudS9idXR0b25zCiAgICAgICAgYWRkX3RhZ3NfY2hhbmdlX2xpc3RlbmVyKCk7CiAgICAgICAgYWRkX3RhZ3Nfc3VibWl0X2xpc3RlbmVyKCk7IC8vIHNwZWNpZmljYWxseSBmb3IgZWRpdC1mb3JtCgogICAgICAgIGFkZF9wb3N0cGFnZV9ob3RrZXlzKCk7CiAgICAgICAgaWYgKGNvbmZpZy5zY2FsZV9vbl9yZXNpemUpIGFkZF9zY2FsZV9vbl9yZXNpemVfbGlzdGVuZXIoKTsKCiAgICAgICAgcmVhZF9pbWFnZV9kYXRhKCkudGhlbigoKSA9PiB7CiAgICAgICAgICBpZiAoY29uZmlnLnNjYWxlX2ltYWdlKSBzY2FsZV9pbWFnZShjb25maWcuc2NhbGVfbW9kZSwgZmFsc2UpOwogICAgICAgICAgZWxzZSBub3RlX2ZpeCgpOwogICAgICAgICAgaWYgKGNvbmZpZy5zY3JvbGxfdG9faW1hZ2UpIHNjcm9sbF90b19pbWFnZSgpOwogICAgICAgICAgYWRkX3Jlc2l6ZV9ub3RpY2VfbGlzdGVuZXIoKTsKICAgICAgICAgIGFkZF9oaWdocmVzX2xpc3RlbmVyKCk7CiAgICAgICAgICBsb2FkX2hpZ2hyZXMoKTsKICAgICAgICB9KTsKCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIFBhZ2UuV2lraToKICAgICAgICBhZGRfZHRleHRfc3R5bGVfYnV0dG9ucygpOwogICAgICAgIGFkZF93aWtpX3RlbXBsYXRlKCk7CgogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQYWdlLldpa2lTaG93OgogICAgICAgIGFkZF90YWdfZWRpdF9nZWFyKCk7CgogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBQYWdlLlRhZzoKICAgICAgICBhZGRfdGFnX2hpc3RvcnlfbGluaygpOwoKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgUGFnZS5SZWNvcmQ6CiAgICAgICAgYWRkX3JlY29yZF90ZW1wbGF0ZSgpOwoKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgUGFnZS5EZWxldGU6CiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1c3RvbV9yZWFzb24nKS5zdHlsZS5taW5XaWR0aCA9ICcyNSUnOwogICAgICAgIGFkZF9jdXN0b21fZHVwbGljYXRlX2RlbGV0ZV9yZWFzb24oKTsKICAgICAgICBhZGRfdGFnc19jb3B5X2J1dHRvbigpOwoKICAgICAgICBhZGRfcG9zdF9lZGl0X2RpYWxvZygpOwogICAgICAgIGFkZF9wb3N0X2VkaXRfYnV0dG9ucygpOwogICAgICAgIHVwZGF0ZV90YWdfZWxlbWVudHMoKTsgLy8gaW5pdGlhbGl6ZSB0YWcgbWVudS9idXR0b25zCiAgICAgICAgYWRkX3RhZ3NfY2hhbmdlX2xpc3RlbmVyKCk7CgogICAgICAgIGRlbGV0aW9uX3Nhbml0eV9jaGVja3MoKTsKCiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIFBhZ2UuTW9kZXJhdGU6CiAgICAgICAgYWRkX21vZGVyYXRpb25fc2VhcmNoX3RlbXBsYXRlKCk7CgogICAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdjb21wbGV0ZScgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRlZCcgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJykgewogICAgaW5pdCgpLmNhdGNoKChyZWFzb24pID0+IHsKICAgICAgc2hvd19ub3RpY2UoY29uc29sZS5lcnJvciwgJ1thZGRvbiBlcnJvcl0gaW5pdCgpIGZhaWxlZCwgY2hlY2sgY29uc29sZScsIHJlYXNvbik7CiAgICB9KTsKICB9IGVsc2UgewogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGluaXQsIGZhbHNlKTsKICB9Cn0pKHR5cGVvZiB1bnNhZmVXaW5kb3cgIT09ICd1bmRlZmluZWQnID8gdW5zYWZlV2luZG93IDogd2luZG93KTsK"},{"name":"Instagram - Allow right click on images","options":{"awareOfChrome":false,"check_for_updates":true,"comment":null,"compat_arrayleft":false,"compat_foreach":false,"compat_forvarin":false,"compat_metadata":false,"compat_uW_gmonkey":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":["http://instagram.com/*","https://instagram.com/*","http://*.instagram.com/*","https://*.instagram.com/*"],"orig_matches":[],"orig_noframes":null,"orig_run_at":"document-start","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1616865637883,"data":{}},"enabled":true,"position":32,"file_url":"https://greasyfork.org/scripts/424063-instagram-allow-right-click-on-images/code/Instagram%20-%20Allow%20right%20click%20on%20images.user.js","uuid":"d5b50f42-2f3d-43d4-8f05-a8fb1dfceb48","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgSW5zdGFncmFtIC0gQWxsb3cgcmlnaHQgY2xpY2sgb24gaW1hZ2VzCi8vIEBuYW1lc3BhY2UgZ2l0aHViLmNvbS9CcmF3bDM0NQovLyBAdmVyc2lvbiAxLjAuMAovLyBAZGVzY3JpcHRpb24gQWxsb3cgcmlnaHQtY2xpY2tpbmcgb24gaW1hZ2VzIG9uIEluc3RhZ3JhbQovLyBAYXV0aG9yIEJyYXdsIChodHRwczovL2dpdGh1Yi5jb20vQnJhd2wzNDUpCi8vIEBsaWNlbnNlIFVubGljZW5zZQovLyBAZ3JhbnQgR01fYWRkU3R5bGUKLy8gQHJ1bi1hdCBkb2N1bWVudC1zdGFydAovLyBAaW5jbHVkZSBodHRwOi8vaW5zdGFncmFtLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHBzOi8vaW5zdGFncmFtLmNvbS8qCi8vIEBpbmNsdWRlIGh0dHA6Ly8qLmluc3RhZ3JhbS5jb20vKgovLyBAaW5jbHVkZSBodHRwczovLyouaW5zdGFncmFtLmNvbS8qCi8vID09L1VzZXJTY3JpcHQ9PQoKKGZ1bmN0aW9uKCkgewpsZXQgY3NzID0gYAouX292ZzNnLCAuX3NpN2R5LCAuXzlBaEgwIHsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQpgOwppZiAodHlwZW9mIEdNX2FkZFN0eWxlICE9PSAidW5kZWZpbmVkIikgewogIEdNX2FkZFN0eWxlKGNzcyk7Cn0gZWxzZSB7CiAgbGV0IHN0eWxlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpOwogIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIikgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmRDaGlsZChzdHlsZU5vZGUpOwp9Cn0pKCk7Cg=="},{"name":"Sankaku Complex - Kill lazy load","options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_prototypes":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["https://www.sankakucomplex.com/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1623616164987,"data":{}},"enabled":true,"position":33,"uuid":"c2d0c99d-4342-400f-8696-f1907d7bcafc","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgU2Fua2FrdSBDb21wbGV4IC0gS2lsbCBsYXp5IGxvYWQKLy8gQG5hbWVzcGFjZSBnaXRodWIuY29tL0JyYXdsMzQ1Ci8vIEBtYXRjaCBodHRwczovL3d3dy5zYW5rYWt1Y29tcGxleC5jb20vKgovLyBAZ3JhbnQgbm9uZQovLyA9PS9Vc2VyU2NyaXB0PT0KCmNvbnN0IHJ1biA9ICgpID0+IHsKICAgIGNvbnN0IGltYWdlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZ1tkYXRhLWxhenktc3JjXScpOwoKICAgIC8vIExvYWQgYWxsOiBTTE9XISEhCiAgICAvLyBpbWFnZXMuZm9yRWFjaChpbWFnZSA9PiBpbWFnZS5zcmMgPSBpbWFnZS5kYXRhc2V0LmxhenlTcmMpOwoKICAgIGltYWdlcy5mb3JFYWNoKGltYWdlID0+IHsKICAgICAgICBjb25zdCBzcmNzZXQgPSBpbWFnZS5kYXRhc2V0LmxhenlTcmNzZXQuc3BsaXQoJywnKTsKICAgICAgICBpbWFnZS5zcmMgPSBzcmNzZXRbc3Jjc2V0Lmxlbmd0aCAtIDFdLnNwbGl0KCcgJylbMV07CiAgICB9KQoKfQoKcnVuKCk7"},{"name":"Substitute","options":{"check_for_updates":true,"comment":null,"compat_foreach":false,"compat_metadata":false,"compat_prototypes":false,"compat_wrappedjsobject":false,"compatopts_for_requires":true,"noframes":null,"override":{"merge_connects":true,"merge_excludes":true,"merge_includes":true,"merge_matches":true,"orig_connects":[],"orig_excludes":[],"orig_includes":[],"orig_matches":["*://*/*"],"orig_noframes":null,"orig_run_at":"document-idle","use_blockers":[],"use_connects":[],"use_excludes":[],"use_includes":[],"use_matches":[]},"run_at":null,"tab_types":null,"compat_powerful_this":null},"storage":{"ts":1638478905313,"data":{"substitute_dict":"s[{\"key\":\"S*x\",\"value\":\"Sex\",\"img\":false},{\"key\":\"Under*ear\",\"value\":\"Underwear\",\"img\":false},{\"key\":\"s*x\",\"value\":\"sex\",\"img\":false},{\"key\":\"S** \",\"value\":\"Sex \",\"img\":false},{\"key\":\"–\",\"value\":\"-\",\"img\":false}]"}},"enabled":false,"position":34,"file_url":"https://github.com/LenAnderson/Substitute/raw/master/substitute.user.js","uuid":"417e63ef-c6ba-417f-83f4-abfca3335a8b","source":"Ly8gPT1Vc2VyU2NyaXB0PT0KLy8gQG5hbWUgICAgICAgICBTdWJzdGl0dXRlCi8vIEBuYW1lc3BhY2UgICAgaHR0cHM6Ly9naXRodWIuY29tL0xlbkFuZGVyc29uLwovLyBAZG93bmxvYWRVUkwgIGh0dHBzOi8vZ2l0aHViLmNvbS9MZW5BbmRlcnNvbi9TdWJzdGl0dXRlL3Jhdy9tYXN0ZXIvc3Vic3RpdHV0ZS51c2VyLmpzCi8vIEB2ZXJzaW9uICAgICAgMC40Ci8vIEBkZXNjcmlwdGlvbiAgUmVwbGFjZSB0ZXh0IGNvbnRlbnQgd2l0aCBvdGhlciB0ZXh0IG9yIGltYWdlcy4KLy8gQGF1dGhvciAgICAgICBMZW5BbmRlcnNvbgovLyBAbWF0Y2ggICAgICAgICo6Ly8qLyoKLy8gQGdyYW50ICAgICAgICBHTV9yZWdpc3Rlck1lbnVDb21tYW5kCi8vIEBncmFudCAgICAgICAgR01fc2V0VmFsdWUKLy8gQGdyYW50ICAgICAgICBHTV9nZXRWYWx1ZQovLyA9PS9Vc2VyU2NyaXB0PT0KCkdNX3JlZ2lzdGVyTWVudUNvbW1hbmQoJ1N1YnN0aXR1dGUgLSBQcmVmZXJlbmNlcycsIGZ1bmN0aW9uKCkgewogICAgdmFyIGRsZ1dpbmRvdyA9IG9wZW4oJ2Fib3V0OmJsYW5rJywgJ1N1YnN0aXR1dGUgLSBQcmVmZXJlbmNlcycsICdyZXNpemFibGUsaW5uZXJIZWlnaHQ9NTAwLGlubmVyV2lkdGg9NDg1LGNlbnRlcnNjcmVlbixtZW51YmFyPW5vLHRvb2xiYXI9bm8sbG9jYXRpb249bm8nKTsKICAgIHZhciBkbGcgPSBkbGdXaW5kb3cuZG9jdW1lbnQuYm9keTsKICAgIGRsZy5zdHlsZS5mb250RmFtaWx5ID0gJ3NhbnMtc2VyaWYnOwogICAgdmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDInKTsKICAgIHRpdGxlLnRleHRDb250ZW50ID0gJ1N1YnN0aXR1dGUgLSBQcmVmZXJlbmNlcyc7CiAgICBkbGcuYXBwZW5kQ2hpbGQodGl0bGUpOwogICAgdmFyIGRpY3QgPSBKU09OLnBhcnNlKEdNX2dldFZhbHVlKCdzdWJzdGl0dXRlX2RpY3QnKSB8fCAnW10nKTsKICAgIGRpY3QuZm9yRWFjaChmdW5jdGlvbihyZXApIHsKICAgICAgICB2YXIgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgcm93LmNsYXNzTGlzdC5hZGQoJ3JvdycpOwogICAgICAgIHJvdy5zdHlsZS5tYXJnaW4gPSAnM3B4IDAnOwogICAgICAgIHZhciBrZXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgIGtleS5zdHlsZS5tYXJnaW4gPSAnMCAzcHgnOwogICAgICAgIGtleS5wbGFjZWhvbGRlciA9ICdrZXknOwogICAgICAgIGtleS52YWx1ZSA9IHJlcC5rZXk7CiAgICAgICAgcm93LmFwcGVuZENoaWxkKGtleSk7CiAgICAgICAgdmFyIHZhbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgdmFsLnN0eWxlLm1hcmdpbiA9ICcwIDNweCc7CiAgICAgICAgdmFsLnBsYWNlaG9sZGVyID0gJ3ZhbHVlJzsKICAgICAgICB2YWwudmFsdWUgPSByZXAudmFsdWU7CiAgICAgICAgcm93LmFwcGVuZENoaWxkKHZhbCk7CiAgICAgICAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgaW1nLnN0eWxlLm1hcmdpbiA9ICcwIDNweCc7CiAgICAgICAgaW1nLnR5cGUgPSAnY2hlY2tib3gnOwogICAgICAgIGltZy5jaGVja2VkID0gcmVwLmltZzsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQoaW1nKTsKICAgICAgICB2YXIgbGJsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTsKICAgICAgICBsYmwudGV4dENvbnRlbnQgPSAnIGltYWdlJzsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQobGJsKTsKICAgICAgICB2YXIgZGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgZGVsLnN0eWxlLm1hcmdpbiA9ICcwIDAgMCAxNXB4JzsKICAgICAgICBkZWwudGV4dENvbnRlbnQgPSAnWCc7CiAgICAgICAgZGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJvdy5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQoZGVsKTsKICAgICAgICBkbGcuYXBwZW5kQ2hpbGQocm93KTsKICAgIH0pOwogICAgdmFyIGFkZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgdmFyIGFkZEJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpOwogICAgYWRkQnRuLnRleHRDb250ZW50ID0gJ0FkZCBTdWJzdGl0dXRpb24nOwogICAgYWRkQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIHJvdy5jbGFzc0xpc3QuYWRkKCdyb3cnKTsKICAgICAgICByb3cuc3R5bGUubWFyZ2luID0gJzNweCAwJzsKICAgICAgICB2YXIga2V5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICAgICBrZXkuc3R5bGUubWFyZ2luID0gJzAgM3B4JzsKICAgICAgICBrZXkucGxhY2Vob2xkZXIgPSAna2V5JzsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQoa2V5KTsKICAgICAgICB2YXIgdmFsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICAgICB2YWwuc3R5bGUubWFyZ2luID0gJzAgM3B4JzsKICAgICAgICB2YWwucGxhY2Vob2xkZXIgPSAndmFsdWUnOwogICAgICAgIHJvdy5hcHBlbmRDaGlsZCh2YWwpOwogICAgICAgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwogICAgICAgIGltZy5zdHlsZS5tYXJnaW4gPSAnMCAzcHgnOwogICAgICAgIGltZy50eXBlID0gJ2NoZWNrYm94JzsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQoaW1nKTsKICAgICAgICB2YXIgbGJsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTsKICAgICAgICBsYmwudGV4dENvbnRlbnQgPSAnIGltYWdlJzsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQobGJsKTsKICAgICAgICB2YXIgZGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgICAgICAgZGVsLnN0eWxlLm1hcmdpbiA9ICcwIDAgMCAxNXB4JzsKICAgICAgICBkZWwudGV4dENvbnRlbnQgPSAnWCc7CiAgICAgICAgZGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJvdy5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgICAgICByb3cuYXBwZW5kQ2hpbGQoZGVsKTsKICAgICAgICBkbGcuaW5zZXJ0QmVmb3JlKHJvdyxhZGQpOwogICAgfSk7CiAgICBhZGQuYXBwZW5kQ2hpbGQoYWRkQnRuKTsKICAgIGRsZy5hcHBlbmRDaGlsZChhZGQpOwogICAgdmFyIGFjdGlvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIGFjdGlvbnMuc3R5bGUubWFyZ2luID0gJzhweCAzcHgnOwogICAgYWN0aW9ucy5zdHlsZS50ZXh0QWxpZ24gPSAncmlnaHQnOwogICAgdmFyIHNhdmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgIHNhdmUuc3R5bGUubWFyZ2luID0gJzAgM3B4JzsKICAgIHNhdmUudGV4dENvbnRlbnQgPSAnU2F2ZSc7CiAgICBzYXZlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9kaWN0ID0gW107CiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkbGcucXVlcnlTZWxlY3RvckFsbCgnLnJvdycpLCBmdW5jdGlvbihyb3cpIHsKICAgICAgICAgICAgaWYgKHJvdy5jaGlsZHJlblswXS52YWx1ZSA9PSAnJykgcmV0dXJuOwogICAgICAgICAgICBfZGljdC5wdXNoKHtrZXk6IHJvdy5jaGlsZHJlblswXS52YWx1ZSwgdmFsdWU6IHJvdy5jaGlsZHJlblsxXS52YWx1ZSwgaW1nOiByb3cuY2hpbGRyZW5bMl0uY2hlY2tlZH0pOwogICAgICAgIH0pOwogICAgICAgIGRpY3QgPSBfZGljdDsKICAgICAgICBHTV9zZXRWYWx1ZSgnc3Vic3RpdHV0ZV9kaWN0JywgSlNPTi5zdHJpbmdpZnkoZGljdCkpOwogICAgICAgIGRsZ1dpbmRvdy5jbG9zZSgpOwogICAgICAgIHN1YnN0aXR1dGUoKTsKICAgIH0pOwogICAgYWN0aW9ucy5hcHBlbmRDaGlsZChzYXZlKTsKICAgIHZhciBjYW5jZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgIGNhbmNlbC5zdHlsZS5tYXJnaW4gPSAnMCAzcHgnOwogICAgY2FuY2VsLnRleHRDb250ZW50ID0gJ0NhbmNlbCc7CiAgICBjYW5jZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBkbGdXaW5kb3cuY2xvc2UuYmluZChkbGdXaW5kb3cpKTsKICAgIGFjdGlvbnMuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICAgIGRsZy5hcHBlbmRDaGlsZChhY3Rpb25zKTsKfSk7CgpmdW5jdGlvbiBzdWJzdGl0dXRlKCkgewogICAgdmFyIGRpY3QgPSBKU09OLnBhcnNlKEdNX2dldFZhbHVlKCdzdWJzdGl0dXRlX2RpY3QnKSB8fCAnW10nKTsKICAgIGRpY3QuZm9yRWFjaChmdW5jdGlvbihyZXApIHsKICAgICAgICB2YXIgbm9kZXMgPSBkb2N1bWVudC5ldmFsdWF0ZSgnLy90ZXh0KClbY29udGFpbnMoLiwgIicrcmVwLmtleS5yZXBsYWNlKC8iL2csJ1wiJykrJyIpXScsIGRvY3VtZW50LCBudWxsLCBYUGF0aFJlc3VsdC5PUkRFUkVEX05PREVfU05BUFNIT1RfVFlQRSwgbnVsbCk7CiAgICAgICAgZm9yKHZhciBpPTA7aTxub2Rlcy5zbmFwc2hvdExlbmd0aDtpKyspIHsKICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlcy5zbmFwc2hvdEl0ZW0oaSk7CiAgICAgICAgICAgIGlmIChub2RlLmlzU3Vic3RpdHV0ZSkgY29udGludWU7CiAgICAgICAgICAgIHZhciBwYXJ0cyA9IG5vZGUuZGF0YS5zcGxpdChyZXAua2V5KTsKICAgICAgICAgICAgbm9kZS5kYXRhID0gcGFydHMucG9wKCk7CiAgICAgICAgICAgIHBhcnRzLmZvckVhY2goZnVuY3Rpb24ocGFydCkgewogICAgICAgICAgICAgICAgdmFyIHN1YjsKICAgICAgICAgICAgICAgIGlmIChyZXAuaW1nKSB7CiAgICAgICAgICAgICAgICAgICAgc3ViID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7CiAgICAgICAgICAgICAgICAgICAgc3ViLnNyYyA9IHJlcC52YWx1ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc3ViID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocmVwLnZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN1Yi5pc1N1YnN0aXR1dGUgPSB0cnVlOwogICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzdWIsIG5vZGUpOwogICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYXJ0KSwgc3ViKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfSk7Cn0KCgp2YXIgbW8gPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRzKSB7CiAgICBzdWJzdGl0dXRlKCk7Cn0pOwptby5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtjaGlsZExpc3Q6dHJ1ZSwgc3VidHJlZTp0cnVlfSk7Cg=="}]} \ No newline at end of file diff --git a/uBlock Origin/my-ublock-backup_2019-04-13_13.39.18.txt b/uBlock Origin/my-ublock-backup_2019-04-13_13.39.18.txt new file mode 100644 index 0000000..5489721 --- /dev/null +++ b/uBlock Origin/my-ublock-backup_2019-04-13_13.39.18.txt @@ -0,0 +1,78 @@ +{ + "timeStamp": 1555155558388, + "version": "1.18.16", + "userSettings": { + "advancedUserEnabled": false, + "alwaysDetachLogger": false, + "autoUpdate": true, + "cloudStorageEnabled": false, + "collapseBlocked": true, + "colorBlindFriendly": false, + "contextMenuEnabled": true, + "dynamicFilteringEnabled": true, + "externalLists": "http://akamaru.de/scripts/delads.txt\nhttps://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt\nhttps://pgl.yoyo.org/adservers/admiral-domains.txt\nhttps://raw.github.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt\nhttps://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt\nhttps://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt\nhttps://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt\nhttps://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt\nhttps://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt\nhttps://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt\nhttps://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "firewallPaneMinimized": false, + "hyperlinkAuditingDisabled": true, + "ignoreGenericCosmeticFilters": false, + "largeMediaSize": 50, + "parseAllABPHideFilters": true, + "prefetchingDisabled": true, + "requestLogMaxEntries": 1000, + "showIconBadge": true, + "tooltipsDisabled": false, + "webrtcIPAddressHidden": false + }, + "selectedFilterLists": [ + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt", + "https://raw.github.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "DEU-0", + "plowe-0", + "adguard-annoyance", + "spam404-0", + "malware-1", + "malware-0", + "easyprivacy", + "easylist", + "adguard-generic", + "awrl-0", + "ublock-unbreak", + "ublock-abuse", + "ublock-privacy", + "ublock-filters", + "user-filters" + ], + "hiddenSettings": { + "assetFetchTimeout": 30, + "autoCommentFilterTemplate": "{{date}} {{origin}}", + "autoUpdateAssetFetchPeriod": 120, + "autoUpdatePeriod": 7, + "cacheStorageAPI": "unset", + "cacheStorageCompression": true, + "cacheControlForFirefox1376932": "no-cache, no-store, must-revalidate", + "consoleLogLevel": "unset", + "debugScriptlets": false, + "disableWebAssembly": false, + "ignoreRedirectFilters": false, + "ignoreScriptInjectFilters": false, + "manualUpdateAssetFetchPeriod": 500, + "popupFontSize": "unset", + "requestJournalProcessPeriod": 1000, + "selfieAfter": 11, + "strictBlockingBypassDuration": 120, + "suspendTabsUntilReady": "unset", + "userResourcesLocation": "unset" + }, + "netWhitelist": "akamaru.de\nbee.anime-loads.org\ndrive.google.com\nfilecrypt.cc\nforum.woleutesind.de\nhomebrew.cloud\nnibutani.local\npartnernet.amazon.de\nponypaste.de\nponywave.de\nriko.moe\nwiki.woleutesind.de\nww7.chara-hiroba.com\nwww.anime-loads.org\nwww.crunchyroll.com\nwww.netcup-wiki.de\nwww.norma-online.de\nwww.rtl.de\nwww.sparkasse-badneustadt.de\nyagyuu.de\nyagyuu.moe", + "dynamicFilteringString": "behind-the-scene * * noop\nbehind-the-scene * inline-script noop\nbehind-the-scene * 1p-script noop\nbehind-the-scene * 3p-script noop\nbehind-the-scene * 3p-frame noop\nbehind-the-scene * image noop\nbehind-the-scene * 3p noop", + "urlFilteringString": "", + "hostnameSwitchesString": "no-strict-blocking: logc206.xiti.com true\nno-strict-blocking: www.computerbase.de true\nno-scripting: behind-the-scene false", + "userFilters": "###########################\n##Plex##\napp.plex.tv##div:nth-of-type(1) > .SidebarList-sidebarListHeaderContainer-2D2g-W\napp.plex.tv##div:nth-of-type(1) > div.SidebarListItem-sidebarListItem-GdcVsd:nth-of-type(3)\napp.plex.tv##div:nth-of-type(1) > div.SidebarListItem-sidebarListItem-GdcVsd:nth-of-type(2)\napp.plex.tv##div:nth-of-type(3) > .SidebarList-sidebarListHeaderContainer-2D2g-W\n###########################\n##Outlook##\noutlook.live.com##._2heo7Eue0oDeyWNI4XaGWZ.ms-FocusZone > div._2SvWF44TZgwj95spKJn8Za:nth-of-type(1)\noutlook.live.com##._16EfhtP2SkmWE3EtSGakyM\noutlook.live.com##._1QaVoiariD7ShXYD075Et1\noutlook.live.com##.NKOTxdIEMuiw_Kew0d2CY\n###########################\n##Sonstiges##\nfacebook.com###blueBarDOMInspector\n###########################\n\n! 28.2.2019 https://fansubdb.net\nfansubdb.net###message\n\n! 5.3.2019 https://www.skidrowreloaded.com\nwww.skidrowreloaded.com##[href=\"https://www.skidrowreloaded.com/donate/\"]\n\n! 5.3.2019 https://www.youtube.com\nwww.youtube.com###sponsor-button\n\n! 8.3.2019 https://ddl-warez.to\n||evdo8pe.cloudimg.io/cdn/n/n/https://s17.directupload.net/images/190228/36r6u687.gif$image\n\n! 8.3.2019 https://xxxblog.to\n||s1.imagebanana.com/file/181224/qrr2Jfgg.gif$image\n\n! 8.3.2019 https://www.fromjapan.co.jp\nwww.fromjapan.co.jp###fjd_ad_c\n\n! 9.3.2019 https://github.com\ngithub.com##[href=\"https://www.patreon.com/atlasnx\"]\ngithub.com##[href=\"https://discord.gg/qbRAuy7\"]\n\n! 10.3.2019 https://www.sdsetup.com\nwww.sdsetup.com##.icon.paypal\nwww.sdsetup.com##.icon.patreon\n\n! 10.3.2019 https://ddl-music.to\n||evdo8pe.cloudimg.io/cdn/n/n/https://s15.directupload.net/images/190228/4436cu6v.gif$image\n||evdo8pe.cloudimg.io/cdn/n/n/https://s15.directupload.net/images/190228/4436cu6v.gif$image\n\n! 23.3.2019 https://www.amazon.de\n||images-eu.ssl-images-amazon.com/images/G/03/digital/video/placement/Gateway/UpNav/Mar19test/PV_engagment_XSite_UpNav_1x_Desktop_1920x45_DE_T2._CB469347368_.jpg$image\nwww.amazon.de###nav-upnav > .nav-a\nwww.amazon.de###nav-upnav\n\n! 23.3.2019 https://outlook.live.com\noutlook.live.com##._33q0KHy2ceHx9Ea1A4VXHj\n\n! 24.3.2019 https://www.amazon.de\nwww.amazon.de###detail-ilm\n\n! 28.3.2019 https://www.youporn.com\nwww.youporn.com###js_euCookieModal\n\n! 28.3.2019 https://ddl-music.to\n||evdo8pe.cloudimg.io/cdn/n/n/https://s16.directupload.net/images/190313/s8q5aamb.gif$image\n\n! 28.3.2019 https://www.zeit.de\nwww.zeit.de###overlay-addefend\nwww.zeit.de###addefend-overlay\n\n! 30.3.2019 https://outlook.live.com\noutlook.live.com##._2AatwWz68SIFlRK-YqMCp9 > div:nth-of-type(1) > div > div\n\n! 3.4.2019 http://movie-blog.to\n||fs1.directupload.net/images/180517/dyoha8us.jpg$image\n\n! 3.4.2019 https://codycrossanswers.org\ncodycrossanswers.org##.in.fade.modal-backdrop\n\n! 4.4.2019 https://sumikai.com\n||x.sumikai.com*$image\n\n! 10.4.2019 https://www.musik-sammler.de\n||www.musik-sammler.de/gfx/affiliates/*$image\n\n! 12.4.2019 https://www.reddit.com\nwww.reddit.com###comment-atf\n" +} \ No newline at end of file diff --git a/uBlock Origin/my-ublock-backup_2020-01-28_19.55.26.txt b/uBlock Origin/my-ublock-backup_2020-01-28_19.55.26.txt new file mode 100644 index 0000000..56c0685 --- /dev/null +++ b/uBlock Origin/my-ublock-backup_2020-01-28_19.55.26.txt @@ -0,0 +1,126 @@ +{ + "timeStamp": 1580237726649, + "version": "1.24.2", + "userSettings": { + "advancedUserEnabled": true, + "alwaysDetachLogger": false, + "autoUpdate": true, + "cloudStorageEnabled": false, + "collapseBlocked": true, + "colorBlindFriendly": false, + "contextMenuEnabled": true, + "dynamicFilteringEnabled": true, + "externalLists": "https://akamaru.de/scripts/delads.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt\nhttps://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt\nhttps://pgl.yoyo.org/adservers/admiral-domains.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt\nhttps://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt\nhttps://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt\nhttps://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt\nhttps://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt\nhttps://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt\nhttps://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt\nhttps://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt\nhttps://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "firewallPaneMinimized": false, + "hyperlinkAuditingDisabled": true, + "ignoreGenericCosmeticFilters": false, + "largeMediaSize": 50, + "parseAllABPHideFilters": true, + "prefetchingDisabled": false, + "requestLogMaxEntries": 1000, + "showIconBadge": true, + "tooltipsDisabled": false, + "webrtcIPAddressHidden": false + }, + "selectedFilterLists": [ + "user-filters", + "ublock-filters", + "ublock-privacy", + "ublock-abuse", + "ublock-unbreak", + "awrl-0", + "adguard-generic", + "easylist", + "easyprivacy", + "malware-0", + "malware-1", + "spam404-0", + "adguard-annoyance", + "fanboy-social", + "plowe-0", + "DEU-0", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt" + ], + "hiddenSettings": { + "allowGenericProceduralFilters": false, + "assetFetchTimeout": 30, + "autoCommentFilterTemplate": "{{date}} {{origin}}", + "autoUpdateAssetFetchPeriod": 120, + "autoUpdateDelayAfterLaunch": 180, + "autoUpdatePeriod": 7, + "blockingProfiles": "11111/#F00 11011/#C0F 11001/#00F 00001", + "cacheStorageAPI": "unset", + "cacheStorageCompression": true, + "cacheControlForFirefox1376932": "no-cache, no-store, must-revalidate", + "consoleLogLevel": "unset", + "debugScriptlets": false, + "debugScriptletInjector": false, + "disableWebAssembly": false, + "extensionUpdateForceReload": false, + "ignoreRedirectFilters": false, + "ignoreScriptInjectFilters": false, + "filterAuthorMode": false, + "loggerPopupType": "popup", + "manualUpdateAssetFetchPeriod": 500, + "popupFontSize": "unset", + "requestJournalProcessPeriod": 1000, + "selfieAfter": 3, + "strictBlockingBypassDuration": 120, + "suspendTabsUntilReady": "unset", + "updateAssetBypassBrowserCache": false, + "userResourcesLocation": "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoResources.txt" + }, + "whitelist": [ + "akamaru.de", + "bee.anime-loads.org", + "blog.centzilius.de", + "brawlbot.tk", + "drive.google.com", + "forum.woleutesind.de", + "hakase.local", + "homebrew.cloud", + "img.ponywave.de", + "leutecraft.de", + "nibutani.local", + "niinono.de", + "partnernet.amazon.de", + "ponypaste.de", + "riko.moe", + "wiidatabase.de", + "wiki.woleutesind.de", + "ww7.chara-hiroba.com", + "www.hellofresh.de", + "www.netcup-wiki.de", + "www.norma-online.de", + "www.sparkasse-badneustadt.de", + "www.ticketmaster.de", + "yagyuu.de", + "yagyuu.moe" + ], + "netWhitelist": "akamaru.de\nbee.anime-loads.org\nblog.centzilius.de\nbrawlbot.tk\ndrive.google.com\nforum.woleutesind.de\nhakase.local\nhomebrew.cloud\nimg.ponywave.de\nleutecraft.de\nnibutani.local\nniinono.de\npartnernet.amazon.de\nponypaste.de\nriko.moe\nwiidatabase.de\nwiki.woleutesind.de\nww7.chara-hiroba.com\nwww.hellofresh.de\nwww.netcup-wiki.de\nwww.norma-online.de\nwww.sparkasse-badneustadt.de\nwww.ticketmaster.de\nyagyuu.de\nyagyuu.moe", + "dynamicFilteringString": "behind-the-scene * * noop\nbehind-the-scene * inline-script noop\nbehind-the-scene * 1p-script noop\nbehind-the-scene * 3p-script noop\nbehind-the-scene * 3p-frame noop\nbehind-the-scene * image noop\nbehind-the-scene * 3p noop\nerai-ddl2.info * 3p-script block", + "urlFilteringString": "", + "hostnameSwitchesString": "no-strict-blocking: logc206.xiti.com true\nno-strict-blocking: www.computerbase.de true\nno-scripting: behind-the-scene false\nno-strict-blocking: clkde.tradedoubler.com true", + "userFilters": "!##Plex##\napp.plex.tv##div:nth-of-type(1) > .SidebarList-sidebarListHeaderContainer-2D2g-W\napp.plex.tv##div:nth-of-type(1) > div.SidebarListItem-sidebarListItem-GdcVsd\napp.plex.tv##div:nth-of-type(3) > .SidebarList-sidebarListHeaderContainer-2D2g-W\n!##Outlook##\noutlook.live.com##._2heo7Eue0oDeyWNI4XaGWZ.ms-FocusZone > div._2SvWF44TZgwj95spKJn8Za:nth-of-type(1)\noutlook.live.com##._16EfhtP2SkmWE3EtSGakyM\noutlook.live.com##._1QaVoiariD7ShXYD075Et1\noutlook.live.com##.NKOTxdIEMuiw_Kew0d2CY\noutlook.live.com##._2AatwWz68SIFlRK-YqMCp9 > div:nth-of-type(1) > div > div\noutlook.live.com##._1pHiM7jJITiO-ULj_dBGaM > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._33q0KHy2ceHx9Ea1A4VXHj\noutlook.live.com##._4EQjiwXF4KIhqby_Qqf8J\noutlook.live.com##._1rxhgtJc4Lwbc8jHwgeW26\noutlook.live.com##._1TpU2KF6f_EeQiytBaYj8I > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com###headerButtonsRegionId > button.ZOugRDnXxgnHy1ncf7VTA:nth-of-type(1)\noutlook.live.com###headerButtonsRegionId > button.nb7rqaaMNXuAIKTquG_PJ:nth-of-type(1)\n!##Sonstiges##\nfacebook.com###blueBarDOMInspector\namazon.de##.cop.pb-notification-frame-container\namazon.de##.in.pb-notification-frame-container\nmydealz.de##.cop.pb-notification-frame-container\nmydealz.de##.in.pb-notification-frame-container\n!###########################\n\nfilecrypt.co##.bams\nfilecrypt.co###jh34\n||filecrypt.co/blob/uli2.png\nfilecrypt.co##.support_2\n||justpic.info/images4/f9fc/Untitled.png\n||justpic.info/images4/bbf7/abc.png\n||thumbs.3dl.tv/usenet.gif\nweb-capture.net###no-ads-banner\naccount.ubisoft.com##.type-warning\n||filer.net/media/images/final_grafik_460x300_02.gif\nbbqpit.de##.aawp\n||sumikai.com/wp-content/uploads/*/*/podcast.png\nhealthfood24.com##.inner\nyamayurikai-subs.eu##[href=\"https://discord.gg/eUjZnDF\"]\nweb-capture.net##.partner\nyoutube.com###content > .ytd-rich-section-renderer\nforum.nox.tv##.userNotice\ncrunchyroll.com##[href=\"https://got.cr/FreeTrial-Lights-News-DE\"]\n||img1.ak.crunchyroll.com/i/spire3/3cc95b051639c4894aac651529b178cc1574090322_full.png\ntaz.de##.tziBottom\ntaz.de##.tzi-paywahl__logo\nebay.de##.srp-1p__link\nanime-loads.org##[href^=\"https://www.anime-loads.org/upload\"]\nanime-loads.org##[href=\"#amv_trailer\"]\nanime-loads.org##[href=\"#streams\"]\nanime-loads.org##[href=\"#suggestion\"]\nanime-loads.org##.social-btn-group-circle\nanime-loads.org##.footer-widget\ndmax-shop.de###gutschein-container\nddl-warez.to##.panel-heading\nfossil.com###consent-tracking\nmyanimelist.net##.btn-forum-manga-store\nzippy.direct##center\nreddit.com###redesign-beta-optin-btn\n||image.myanimelist.net/ui/vb5Dx2O5SRqwjTxao5NP9x_1KzZ6fcCf66Fq1WwHcVncXpkBxVeU4k6_X6E799h1v2QjVGhWQKT4ZHeA7mrQhg\n||c5.patreon.com/external/logo/become_a_patron_button.png\nuserstyles.org###donate\nfish4me.de##.sp-dsgvo-privacy-popup\nfish4me.de##.sp-dsgvo-popup-overlay\nyoutube.com###donation-shelf\n||erai-raws.info/wp-content/uploads/2017/08/pp1.gif\n||erai-raws.info/wp-content/uploads/2018/09/ee.jpg\nsueddeutsche.de##.teaserable-layout--image\ndiffchecker.com##.keep-us-running\nmediafire.com##.appPromo-wrap\nmyanimelist.net##.free-manga-pop-up\n||topbingowebsites.co.uk/images/logo.png\narchive.org###donate_banner\nzeit.de###data-protection-overlay\naniflix.tv##.chat\ngogalaxy.com##.glx-social-buttons\nmyanimelist.net##.popup-background\nlebensmittel-sonderposten.de###BadgeContent_db8d3657bdbe440c985ae127463eaad4\nanidb.net###vote\n||cdn.myanimelist.net/images/event/*\nanisearch.de###rightB\nanisearch.de###rightA\nfilecrypt.co##.bims\nhaveibeenpwned.com##[href=\"/Donate\"]\nyoutube.com##.ytp-endscreen-next\nyoutube.com##.ytp-endscreen-previous\nyoutube.com##.ytp-show-tiles\nmyanimelist.net##.icon-watch\nanime.plus###notice-message\nitch.io##.youtube_banner\n" +} \ No newline at end of file diff --git a/uBlock Origin/ublock-ausnahmeregeln_2022-04-15_22.09.12.txt b/uBlock Origin/ublock-ausnahmeregeln_2022-04-15_22.09.12.txt new file mode 100644 index 0000000..22f8dbe --- /dev/null +++ b/uBlock Origin/ublock-ausnahmeregeln_2022-04-15_22.09.12.txt @@ -0,0 +1,49 @@ +# about-scheme +# chrome-extension-scheme +# chrome-scheme +# edge-scheme +# moz-extension-scheme +# opera-scheme +# vivaldi-scheme +# wyciwyg-scheme +192.168.1.32 +akamaru.de +bayernid.freistaat.bayern +bee.anime-loads.org +code.ponywave.de +de-de.facebook.com +drive.google.com +eisbrecher.hamburgrecords.com +forum.woleutesind.de +gaming.pringles.com +gibmirspiele.de +hakase.local +homebrew.cloud +img.ponywave.de +leutecraft.de +museum.xbox.com +myaccount.google.com +niinono.de +partnernet.amazon.de +pay.ebay.de +ponypaste.de +ponywave.de +portals.aliexpress.com +riko.moe +shana.local +wiidatabase.de +wiki.woleutesind.de +www.facebook.com +www.freebookspot.es +www.hd-plus.de +www.hellofresh.de +www.kickstarter.com +www.neckermann.de +www.netcup-wiki.de +www.obi.de +www.scooter-attack.com +www.sparkasse-badneustadt.de +www.telekom-empfehlen.de +yagyuu.de +yagyuu.moe + diff --git a/uBlock Origin/ublock-dynamische-regeln_2022-04-15_22.08.59.txt b/uBlock Origin/ublock-dynamische-regeln_2022-04-15_22.08.59.txt new file mode 100644 index 0000000..af8e59b --- /dev/null +++ b/uBlock Origin/ublock-dynamische-regeln_2022-04-15_22.08.59.txt @@ -0,0 +1,13 @@ +no-scripting: behind-the-scene false +no-strict-blocking: www.computerbase.de true +no-strict-blocking: cdn.discordapp.com true +no-strict-blocking: clkde.tradedoubler.com true +no-strict-blocking: logc206.xiti.com true +behind-the-scene * * noop +behind-the-scene * 1p-script noop +behind-the-scene * 3p noop +behind-the-scene * 3p-frame noop +behind-the-scene * 3p-script noop +behind-the-scene * image noop +behind-the-scene * inline-script noop +erai-ddl2.info * 3p-script block diff --git a/uBlock Origin/ublock-sicherung_2021-03-15_22.26.37.txt b/uBlock Origin/ublock-sicherung_2021-03-15_22.26.37.txt new file mode 100644 index 0000000..5f96001 --- /dev/null +++ b/uBlock Origin/ublock-sicherung_2021-03-15_22.26.37.txt @@ -0,0 +1,121 @@ +{ + "timeStamp": 1615843597201, + "version": "1.33.2", + "userSettings": { + "advancedUserEnabled": true, + "alwaysDetachLogger": false, + "dynamicFilteringEnabled": true, + "externalLists": "https://akamaru.de/scripts/delads.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt\nhttps://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt\nhttps://pgl.yoyo.org/adservers/admiral-domains.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt\nhttps://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt\nhttps://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt\nhttps://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt\nhttps://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt\nhttps://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt\nhttps://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt\nhttps://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt\nhttps://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "firewallPaneMinimized": false, + "importedLists": [ + "https://akamaru.de/scripts/delads.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/" + ], + "popupPanelSections": 63, + "prefetchingDisabled": false + }, + "selectedFilterLists": [ + "user-filters", + "ublock-filters", + "ublock-privacy", + "ublock-abuse", + "ublock-unbreak", + "easylist", + "easyprivacy", + "urlhaus-1", + "spam404-0", + "adguard-annoyance", + "plowe-0", + "DEU-0", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt" + ], + "hiddenSettings": { + "userResourcesLocation": "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoResources.txt" + }, + "whitelist": [ + "# about-scheme", + "# chrome-extension-scheme", + "# chrome-scheme", + "# edge-scheme", + "# moz-extension-scheme", + "# opera-scheme", + "# vivaldi-scheme", + "# wyciwyg-scheme", + "akamaru.de", + "bee.anime-loads.org", + "code.ponywave.de", + "drive.google.com", + "forum.woleutesind.de", + "gaming.pringles.com", + "hakase.local", + "homebrew.cloud", + "img.ponywave.de", + "leutecraft.de", + "niinono.de", + "partnernet.amazon.de", + "ponypaste.de", + "ponywave.de", + "portals.aliexpress.com", + "riko.moe", + "shana.local", + "wiidatabase.de", + "wiki.woleutesind.de", + "www.facebook.com", + "www.hellofresh.de", + "www.kickstarter.com", + "www.netcup-wiki.de", + "www.sparkasse-badneustadt.de", + "www.telekom-empfehlen.de", + "yagyuu.de", + "yagyuu.moe" + ], + "dynamicFilteringString": "behind-the-scene * * noop\nbehind-the-scene * inline-script noop\nbehind-the-scene * 1p-script noop\nbehind-the-scene * 3p-script noop\nbehind-the-scene * 3p-frame noop\nbehind-the-scene * image noop\nbehind-the-scene * 3p noop\nerai-ddl2.info * 3p-script block", + "urlFilteringString": "", + "hostnameSwitchesString": "no-strict-blocking: logc206.xiti.com true\nno-strict-blocking: www.computerbase.de true\nno-scripting: behind-the-scene false\nno-strict-blocking: clkde.tradedoubler.com true\nno-strict-blocking: cdn.discordapp.com true", + "userFilters": "!##Outlook##\noutlook.live.com##._2heo7Eue0oDeyWNI4XaGWZ.ms-FocusZone > div._2SvWF44TZgwj95spKJn8Za:nth-of-type(1)\noutlook.live.com##._16EfhtP2SkmWE3EtSGakyM\noutlook.live.com##._1QaVoiariD7ShXYD075Et1\noutlook.live.com##.NKOTxdIEMuiw_Kew0d2CY\noutlook.live.com##._2AatwWz68SIFlRK-YqMCp9 > div:nth-of-type(1) > div > div\noutlook.live.com##._1pHiM7jJITiO-ULj_dBGaM > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._33q0KHy2ceHx9Ea1A4VXHj\noutlook.live.com##._4EQjiwXF4KIhqby_Qqf8J\noutlook.live.com##._1rxhgtJc4Lwbc8jHwgeW26\noutlook.live.com##._1TpU2KF6f_EeQiytBaYj8I > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._3zQI3WiOC__cGoCqhRmdWG\noutlook.live.com###headerButtonsRegionId > button.ZOugRDnXxgnHy1ncf7VTA:nth-of-type(1)\noutlook.live.com###headerButtonsRegionId > button.nb7rqaaMNXuAIKTquG_PJ:nth-of-type(1)\noutlook.live.com##._24cFIcLR99oG439EGHkpE8\noutlook.live.com##.allowTextSelection.wV0GLq1bd2LIzJBOyd3tF\noutlook.live.com###owaMeetNowButton\noutlook.live.com##._2PxBL_S6KFCMTya8zm3aLF\n!##Sonstiges##\namazon.de##.cop.pb-notification-frame-container\namazon.de##.in.pb-notification-frame-container\nmydealz.de##.cop.pb-notification-frame-container\nmydealz.de##.in.pb-notification-frame-container\n!###########################\n\nmyanimelist.net##.footer-app\nfernsehserien.de##.serie-infos-ebay\nfitgirl-repacks.site###smart_push_smio_overlay\nfitgirl-repacks.site###smart_push_smio_window\nmydealz.de##.popover-cover\nebay.de###gh-doodleS\nhd-source.to##.reflnk\nhd-source.to##.sidebar-module-inset.sidebar-module > [href^=\"https://hd-source.to/out/af.php\"]\nmydealz.de##.popover\n\n! 2021-02-17 https://crystal-warez.in\ncrystal-warez.in##.download_voting\n||crystal-warez.in/images/linkifier.jpg$image\n\n! 2021-02-17 https://filecrypt.co\n||filecrypt.co/images/bmrbea21g.png$image\n\n! 2021-02-17 https://scnlog.me\nscnlog.me##.donation\n\n! 2021-02-17 https://filecrypt.co\n||filecrypt.co/bIob/5vpdenod.png$image\n\n! 2021-02-19 https://page.auctions.yahoo.co.jp\npage.auctions.yahoo.co.jp##.acMdBuyee\n\n! 2021-02-20 https://filecrypt.co\nfilecrypt.co##.fiIltheadblockqueue2\n\n! 2021-02-21 https://www.youtube.com\nwww.youtube.com##.it-rate-notify--show\n\n! 2021-02-22 https://reviewmeta.com\nreviewmeta.com##.alert-warning.alert\nreviewmeta.com##.notification-bottom\n\n! 2021-02-23 https://filmfans.org\nfilmfans.org##.highlighter\nfilmfans.org##.trailer\n\n! 2021-02-25 https://www.tintenfaesschen.de\nwww.tintenfaesschen.de##.ui-front.ui-widget-overlay\n\n! 2021-02-25 https://beta.sankakucomplex.com\nbeta.sankakucomplex.com##.MuiDialog-root\n\n! 2021-03-07 https://www.moviepilot.de\n||www.dailymotion.com/embed/video$subdocument\n\n! 2021-03-12 https://de.pornhub.com\nde.pornhub.com##.removeAdLink\nde.pornhub.com###js-networkBar\n" +} \ No newline at end of file diff --git a/uBlock Origin/ublock-sicherung_2021-03-28_22.11.44.txt b/uBlock Origin/ublock-sicherung_2021-03-28_22.11.44.txt new file mode 100644 index 0000000..25877f3 --- /dev/null +++ b/uBlock Origin/ublock-sicherung_2021-03-28_22.11.44.txt @@ -0,0 +1,122 @@ +{ + "timeStamp": 1616962304742, + "version": "1.34.0", + "userSettings": { + "advancedUserEnabled": true, + "alwaysDetachLogger": false, + "dynamicFilteringEnabled": true, + "externalLists": "https://akamaru.de/scripts/delads.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt\nhttps://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt\nhttps://pgl.yoyo.org/adservers/admiral-domains.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt\nhttps://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt\nhttps://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt\nhttps://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt\nhttps://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt\nhttps://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt\nhttps://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt\nhttps://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt\nhttps://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "firewallPaneMinimized": false, + "importedLists": [ + "https://akamaru.de/scripts/delads.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/" + ], + "popupPanelSections": 63, + "prefetchingDisabled": false + }, + "selectedFilterLists": [ + "user-filters", + "ublock-filters", + "ublock-privacy", + "ublock-abuse", + "ublock-unbreak", + "easylist", + "easyprivacy", + "urlhaus-1", + "spam404-0", + "adguard-annoyance", + "plowe-0", + "DEU-0", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt" + ], + "hiddenSettings": { + "userResourcesLocation": "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoResources.txt" + }, + "whitelist": [ + "# about-scheme", + "# chrome-extension-scheme", + "# chrome-scheme", + "# edge-scheme", + "# moz-extension-scheme", + "# opera-scheme", + "# vivaldi-scheme", + "# wyciwyg-scheme", + "akamaru.de", + "bee.anime-loads.org", + "code.ponywave.de", + "drive.google.com", + "forum.woleutesind.de", + "gaming.pringles.com", + "hakase.local", + "homebrew.cloud", + "img.ponywave.de", + "leutecraft.de", + "niinono.de", + "partnernet.amazon.de", + "pay.ebay.de", + "ponypaste.de", + "ponywave.de", + "portals.aliexpress.com", + "riko.moe", + "shana.local", + "wiidatabase.de", + "wiki.woleutesind.de", + "www.facebook.com", + "www.hellofresh.de", + "www.kickstarter.com", + "www.netcup-wiki.de", + "www.sparkasse-badneustadt.de", + "www.telekom-empfehlen.de", + "yagyuu.de", + "yagyuu.moe" + ], + "dynamicFilteringString": "behind-the-scene * * noop\nbehind-the-scene * inline-script noop\nbehind-the-scene * 1p-script noop\nbehind-the-scene * 3p-script noop\nbehind-the-scene * 3p-frame noop\nbehind-the-scene * image noop\nbehind-the-scene * 3p noop\nerai-ddl2.info * 3p-script block", + "urlFilteringString": "", + "hostnameSwitchesString": "no-strict-blocking: logc206.xiti.com true\nno-strict-blocking: www.computerbase.de true\nno-scripting: behind-the-scene false\nno-strict-blocking: clkde.tradedoubler.com true\nno-strict-blocking: cdn.discordapp.com true", + "userFilters": "!##Outlook##\noutlook.live.com##._2heo7Eue0oDeyWNI4XaGWZ.ms-FocusZone > div._2SvWF44TZgwj95spKJn8Za:nth-of-type(1)\noutlook.live.com##._16EfhtP2SkmWE3EtSGakyM\noutlook.live.com##._1QaVoiariD7ShXYD075Et1\noutlook.live.com##.NKOTxdIEMuiw_Kew0d2CY\noutlook.live.com##._2AatwWz68SIFlRK-YqMCp9 > div:nth-of-type(1) > div > div\noutlook.live.com##._1pHiM7jJITiO-ULj_dBGaM > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._33q0KHy2ceHx9Ea1A4VXHj\noutlook.live.com##._4EQjiwXF4KIhqby_Qqf8J\noutlook.live.com##._1rxhgtJc4Lwbc8jHwgeW26\noutlook.live.com##._1TpU2KF6f_EeQiytBaYj8I > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._3zQI3WiOC__cGoCqhRmdWG\noutlook.live.com###headerButtonsRegionId > button.ZOugRDnXxgnHy1ncf7VTA:nth-of-type(1)\noutlook.live.com###headerButtonsRegionId > button.nb7rqaaMNXuAIKTquG_PJ:nth-of-type(1)\noutlook.live.com##._24cFIcLR99oG439EGHkpE8\noutlook.live.com##.allowTextSelection.wV0GLq1bd2LIzJBOyd3tF\noutlook.live.com###owaMeetNowButton\noutlook.live.com##._2PxBL_S6KFCMTya8zm3aLF\n!##Sonstiges##\namazon.de##.cop.pb-notification-frame-container\namazon.de##.in.pb-notification-frame-container\nmydealz.de##.cop.pb-notification-frame-container\nmydealz.de##.in.pb-notification-frame-container\n!###########################\n\nmyanimelist.net##.footer-app\nfernsehserien.de##.serie-infos-ebay\nfitgirl-repacks.site###smart_push_smio_overlay\nfitgirl-repacks.site###smart_push_smio_window\nmydealz.de##.popover-cover\nebay.de###gh-doodleS\nhd-source.to##.reflnk\nhd-source.to##.sidebar-module-inset.sidebar-module > [href^=\"https://hd-source.to/out/af.php\"]\nmydealz.de##.popover\n\n! 2021-02-17 https://crystal-warez.in\ncrystal-warez.in##.download_voting\n||crystal-warez.in/images/linkifier.jpg$image\n\n! 2021-02-17 https://filecrypt.co\n||filecrypt.co/images/bmrbea21g.png$image\n\n! 2021-02-17 https://scnlog.me\nscnlog.me##.donation\n\n! 2021-02-17 https://filecrypt.co\n||filecrypt.co/bIob/5vpdenod.png$image\n\n! 2021-02-19 https://page.auctions.yahoo.co.jp\npage.auctions.yahoo.co.jp##.acMdBuyee\n\n! 2021-02-20 https://filecrypt.co\nfilecrypt.co##.fiIltheadblockqueue2\n\n! 2021-02-21 https://www.youtube.com\nwww.youtube.com##.it-rate-notify--show\n\n! 2021-02-22 https://reviewmeta.com\nreviewmeta.com##.alert-warning.alert\nreviewmeta.com##.notification-bottom\n\n! 2021-02-23 https://filmfans.org\nfilmfans.org##.highlighter\nfilmfans.org##.trailer\n\n! 2021-02-25 https://www.tintenfaesschen.de\nwww.tintenfaesschen.de##.ui-front.ui-widget-overlay\n\n! 2021-02-25 https://beta.sankakucomplex.com\nbeta.sankakucomplex.com##.MuiDialog-root\n\n! 2021-03-07 https://www.moviepilot.de\n||www.dailymotion.com/embed/video$subdocument\n\n! 2021-03-12 https://de.pornhub.com\nde.pornhub.com###js-networkBar\n\n! 2021-03-23 https://main.movietopia.to\nmain.movietopia.to##.p-header-content > table\n\n! 2021-03-24 https://ninotaku.de\nninotaku.de###wpd-bubble-wrapper\n\n! 2021-03-25 https://www.heise.de\n||api.heise.de/svc/pvg-widget$subdocument\n" +} \ No newline at end of file diff --git a/uBlock Origin/ublock-sicherung_2021-06-02_13.09.10.txt b/uBlock Origin/ublock-sicherung_2021-06-02_13.09.10.txt new file mode 100644 index 0000000..323579f --- /dev/null +++ b/uBlock Origin/ublock-sicherung_2021-06-02_13.09.10.txt @@ -0,0 +1,127 @@ +{ + "timeStamp": 1622632150379, + "version": "1.35.2", + "userSettings": { + "advancedUserEnabled": true, + "alwaysDetachLogger": false, + "dynamicFilteringEnabled": true, + "externalLists": "https://akamaru.de/scripts/delads.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt\nhttps://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt\nhttps://pgl.yoyo.org/adservers/admiral-domains.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt\nhttps://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt\nhttps://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt\nhttps://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt\nhttps://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt\nhttps://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt\nhttps://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt\nhttps://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt\nhttps://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "firewallPaneMinimized": false, + "importedLists": [ + "https://akamaru.de/scripts/delads.txt", + "https://git.ponywave.de/Akamaru/Adblock-Filterliste/raw/branch/master/filterlist.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/" + ], + "popupPanelSections": 63, + "prefetchingDisabled": false + }, + "selectedFilterLists": [ + "user-filters", + "ublock-filters", + "ublock-privacy", + "ublock-abuse", + "ublock-unbreak", + "easylist", + "easyprivacy", + "urlhaus-1", + "spam404-0", + "adguard-annoyance", + "plowe-0", + "DEU-0", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://git.ponywave.de/Akamaru/Adblock-Filterliste/raw/branch/master/filterlist.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt" + ], + "hiddenSettings": { + "userResourcesLocation": "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoResources.txt" + }, + "whitelist": [ + "# about-scheme", + "# chrome-extension-scheme", + "# chrome-scheme", + "# edge-scheme", + "# moz-extension-scheme", + "# opera-scheme", + "# vivaldi-scheme", + "# wyciwyg-scheme", + "akamaru.de", + "bee.anime-loads.org", + "code.ponywave.de", + "drive.google.com", + "eisbrecher.hamburgrecords.com", + "forum.woleutesind.de", + "gaming.pringles.com", + "gibmirspiele.de", + "hakase.local", + "homebrew.cloud", + "img.ponywave.de", + "leutecraft.de", + "niinono.de", + "partnernet.amazon.de", + "pay.ebay.de", + "ponypaste.de", + "ponywave.de", + "portals.aliexpress.com", + "riko.moe", + "shana.local", + "wiidatabase.de", + "wiki.woleutesind.de", + "www.facebook.com", + "www.freebookspot.es", + "www.hellofresh.de", + "www.kickstarter.com", + "www.neckermann.de", + "www.netcup-wiki.de", + "www.obi.de", + "www.sparkasse-badneustadt.de", + "www.telekom-empfehlen.de", + "yagyuu.de", + "yagyuu.moe" + ], + "dynamicFilteringString": "behind-the-scene * * noop\nbehind-the-scene * inline-script noop\nbehind-the-scene * 1p-script noop\nbehind-the-scene * 3p-script noop\nbehind-the-scene * 3p-frame noop\nbehind-the-scene * image noop\nbehind-the-scene * 3p noop\nerai-ddl2.info * 3p-script block", + "urlFilteringString": "", + "hostnameSwitchesString": "no-strict-blocking: logc206.xiti.com true\nno-strict-blocking: www.computerbase.de true\nno-scripting: behind-the-scene false\nno-strict-blocking: clkde.tradedoubler.com true\nno-strict-blocking: cdn.discordapp.com true", + "userFilters": "!##Outlook##\noutlook.live.com##._2heo7Eue0oDeyWNI4XaGWZ.ms-FocusZone > div._2SvWF44TZgwj95spKJn8Za:nth-of-type(1)\noutlook.live.com##._16EfhtP2SkmWE3EtSGakyM\noutlook.live.com##._1QaVoiariD7ShXYD075Et1\noutlook.live.com##.NKOTxdIEMuiw_Kew0d2CY\noutlook.live.com##._2AatwWz68SIFlRK-YqMCp9 > div:nth-of-type(1) > div > div\noutlook.live.com##._1pHiM7jJITiO-ULj_dBGaM > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._33q0KHy2ceHx9Ea1A4VXHj\noutlook.live.com##._4EQjiwXF4KIhqby_Qqf8J\noutlook.live.com##._1rxhgtJc4Lwbc8jHwgeW26\noutlook.live.com##._1TpU2KF6f_EeQiytBaYj8I > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._3zQI3WiOC__cGoCqhRmdWG\noutlook.live.com###headerButtonsRegionId > button.ZOugRDnXxgnHy1ncf7VTA:nth-of-type(1)\noutlook.live.com###headerButtonsRegionId > button.nb7rqaaMNXuAIKTquG_PJ:nth-of-type(1)\noutlook.live.com##._24cFIcLR99oG439EGHkpE8\noutlook.live.com##.allowTextSelection.wV0GLq1bd2LIzJBOyd3tF\noutlook.live.com###owaMeetNowButton\noutlook.live.com##._2PxBL_S6KFCMTya8zm3aLF\n!##Sonstiges##\namazon.de##.cop.pb-notification-frame-container\namazon.de##.in.pb-notification-frame-container\nmydealz.de##.cop.pb-notification-frame-container\nmydealz.de##.in.pb-notification-frame-container\n!###########################\n\nmyanimelist.net##.footer-app\nfernsehserien.de##.serie-infos-ebay\nfitgirl-repacks.site###smart_push_smio_overlay\nfitgirl-repacks.site###smart_push_smio_window\nmydealz.de##.popover-cover\nebay.de###gh-doodleS\nhd-source.to##.reflnk\nhd-source.to##.sidebar-module-inset.sidebar-module > [href^=\"https://hd-source.to/out/af.php\"]\nmydealz.de##.popover\ncrystal-warez.in##.download_voting\n||crystal-warez.in/images/linkifier.jpg\n||filecrypt.co/images/bmrbea21g.png\nscnlog.me##.donation\n||filecrypt.co/bIob/5vpdenod.png\npage.auctions.yahoo.co.jp##.acMdBuyee\nfilecrypt.co##.fiIltheadblockqueue2\nyoutube.com##.it-rate-notify--show\nreviewmeta.com##.alert-warning.alert\nreviewmeta.com##.notification-bottom\nfilmfans.org##.highlighter\nfilmfans.org##.trailer\ntintenfaesschen.de##.ui-front.ui-widget-overlay\nbeta.sankakucomplex.com##.MuiDialog-root\n||dailymotion.com/embed/video$subdocument\npornhub.com###js-networkBar\nmain.movietopia.to##.p-header-content > table\nninotaku.de###wpd-bubble-wrapper\n||api.heise.de/svc/pvg-widget\namazon.com##.amazonlive-widget-padding\namazon.com##.vse-carousel-container\n||bilder.wunschliste.de/anzeigen/\nfilecrypt.co##.fiIltheadblockqueue3 > i\nstore.steampowered.com##.cookiepreferences_popup\n\n! 2021-04-07 https://jpgames.de\njpgames.de##p > [href^=\"https://c.singular.net/api/v1/ad\"]\n\n! 2021-04-10 https://outlook.live.com\noutlook.live.com##._3mlfhE4JyZTE3izdzM4XY8\n\n! 2021-05-24 https://bluemaxima.org\nbluemaxima.org##.avast\n\n! 2021-05-26 https://www.golem.de\nwww.golem.de##[href^=\"https://redirect.golem.de/nl.php\"]\n\n! 2021-05-27 https://ddl-music.to\n||filesearch.download$subdocument\n\n! 2021-05-31 https://github.com\ngithub.com##.Popover\n" +} \ No newline at end of file diff --git a/uBlock Origin/ublock-sicherung_2021-08-24_19.50.50.txt b/uBlock Origin/ublock-sicherung_2021-08-24_19.50.50.txt new file mode 100644 index 0000000..8c6d5fe --- /dev/null +++ b/uBlock Origin/ublock-sicherung_2021-08-24_19.50.50.txt @@ -0,0 +1,129 @@ +{ + "timeStamp": 1629827450315, + "version": "1.37.2", + "userSettings": { + "advancedUserEnabled": true, + "alwaysDetachLogger": false, + "dynamicFilteringEnabled": true, + "externalLists": "https://akamaru.de/scripts/delads.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt\nhttps://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt\nhttps://pgl.yoyo.org/adservers/admiral-domains.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt\nhttps://raw.githubusercontent.com/Akamaru/Adblock-Filterliste/master/filterlist.txt\nhttps://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt\nhttps://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt\nhttps://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt\nhttps://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt\nhttps://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt\nhttps://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt\nhttps://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "firewallPaneMinimized": false, + "importedLists": [ + "https://akamaru.de/scripts/delads.txt", + "https://git.ponywave.de/Akamaru/Adblock-Filterliste/raw/branch/master/filterlist.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/" + ], + "popupPanelSections": 63, + "prefetchingDisabled": false + }, + "selectedFilterLists": [ + "user-filters", + "ublock-filters", + "ublock-privacy", + "ublock-abuse", + "ublock-unbreak", + "easylist", + "easyprivacy", + "urlhaus-1", + "spam404-0", + "adguard-annoyance", + "plowe-0", + "DEU-0", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://git.ponywave.de/Akamaru/Adblock-Filterliste/raw/branch/master/filterlist.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt" + ], + "hiddenSettings": { + "userResourcesLocation": "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoResources.txt" + }, + "whitelist": [ + "# about-scheme", + "# chrome-extension-scheme", + "# chrome-scheme", + "# edge-scheme", + "# moz-extension-scheme", + "# opera-scheme", + "# vivaldi-scheme", + "# wyciwyg-scheme", + "akamaru.de", + "bee.anime-loads.org", + "code.ponywave.de", + "de-de.facebook.com", + "drive.google.com", + "eisbrecher.hamburgrecords.com", + "forum.woleutesind.de", + "gaming.pringles.com", + "gibmirspiele.de", + "hakase.local", + "homebrew.cloud", + "img.ponywave.de", + "leutecraft.de", + "niinono.de", + "partnernet.amazon.de", + "pay.ebay.de", + "ponypaste.de", + "ponywave.de", + "portals.aliexpress.com", + "riko.moe", + "shana.local", + "store.steampowered.com", + "wiidatabase.de", + "wiki.woleutesind.de", + "www.facebook.com", + "www.freebookspot.es", + "www.hellofresh.de", + "www.kickstarter.com", + "www.neckermann.de", + "www.netcup-wiki.de", + "www.obi.de", + "www.sparkasse-badneustadt.de", + "www.telekom-empfehlen.de", + "yagyuu.de", + "yagyuu.moe" + ], + "dynamicFilteringString": "behind-the-scene * * noop\nbehind-the-scene * inline-script noop\nbehind-the-scene * 1p-script noop\nbehind-the-scene * 3p-script noop\nbehind-the-scene * 3p-frame noop\nbehind-the-scene * image noop\nbehind-the-scene * 3p noop\nerai-ddl2.info * 3p-script block", + "urlFilteringString": "", + "hostnameSwitchesString": "no-strict-blocking: logc206.xiti.com true\nno-strict-blocking: www.computerbase.de true\nno-scripting: behind-the-scene false\nno-strict-blocking: clkde.tradedoubler.com true\nno-strict-blocking: cdn.discordapp.com true", + "userFilters": "!##Outlook##\noutlook.live.com##._2heo7Eue0oDeyWNI4XaGWZ.ms-FocusZone > div._2SvWF44TZgwj95spKJn8Za:nth-of-type(1)\noutlook.live.com##._16EfhtP2SkmWE3EtSGakyM\noutlook.live.com##._1QaVoiariD7ShXYD075Et1\noutlook.live.com##.NKOTxdIEMuiw_Kew0d2CY\noutlook.live.com##._2AatwWz68SIFlRK-YqMCp9 > div:nth-of-type(1) > div > div\noutlook.live.com##._1pHiM7jJITiO-ULj_dBGaM > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._33q0KHy2ceHx9Ea1A4VXHj\noutlook.live.com##._4EQjiwXF4KIhqby_Qqf8J\noutlook.live.com##._1rxhgtJc4Lwbc8jHwgeW26\noutlook.live.com##._1TpU2KF6f_EeQiytBaYj8I > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._3zQI3WiOC__cGoCqhRmdWG\noutlook.live.com###headerButtonsRegionId > button.ZOugRDnXxgnHy1ncf7VTA:nth-of-type(1)\noutlook.live.com###headerButtonsRegionId > button.nb7rqaaMNXuAIKTquG_PJ:nth-of-type(1)\noutlook.live.com##._24cFIcLR99oG439EGHkpE8\noutlook.live.com##.allowTextSelection.wV0GLq1bd2LIzJBOyd3tF\noutlook.live.com###owaMeetNowButton\noutlook.live.com##._2PxBL_S6KFCMTya8zm3aLF\noutlook.live.com##._3mlfhE4JyZTE3izdzM4XY8\n!##Sonstiges##\namazon.de##.cop.pb-notification-frame-container\namazon.de##.in.pb-notification-frame-container\nmydealz.de##.cop.pb-notification-frame-container\nmydealz.de##.in.pb-notification-frame-container\n!###########################\n\nfernsehserien.de##.kaufartikel-horizontal\nyoutube.com###header > .ytd-rich-grid-renderer\nonline.pubhtml5.com##.ph5---banner---container\nitch.io##.goal_banner_widget\nautoscout24.de##.cl-list-element-gap.cl-list-element-top-spot\npornhub.com##.notifContainer\n\n! 2021-07-31 https://www.youtube.com\nwww.youtube.com##.ytp-ce-element-show\n\n! 2021-07-31 https://filecrypt.co\n||filecrypt.co/bIob/turde.png$image\n\n! 2021-08-01 https://sukebei.nyaa.si\nsukebei.nyaa.si##[href=\"https://theporndude.com/\"]\n" +} \ No newline at end of file diff --git a/uBlock Origin/ublock-sicherung_2022-04-15_22.08.41.txt b/uBlock Origin/ublock-sicherung_2022-04-15_22.08.41.txt new file mode 100644 index 0000000..cbac70f --- /dev/null +++ b/uBlock Origin/ublock-sicherung_2022-04-15_22.08.41.txt @@ -0,0 +1,135 @@ +{ + "timeStamp": 1650053321389, + "version": "1.42.4", + "userSettings": { + "advancedUserEnabled": true, + "alwaysDetachLogger": false, + "externalLists": "https://akamaru.de/scripts/delads.txt\nhttps://git.ponywave.de/Akamaru/Adblock-Filterliste/raw/branch/master/filterlist.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt\nhttps://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt\nhttps://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt\nhttps://pgl.yoyo.org/adservers/admiral-domains.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt\nhttps://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt\nhttps://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt\nhttps://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt\nhttps://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt\nhttps://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt\nhttps://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt\nhttps://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt\nhttps://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt\nhttps://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "firewallPaneMinimized": false, + "importedLists": [ + "https://akamaru.de/scripts/delads.txt", + "https://git.ponywave.de/Akamaru/Adblock-Filterliste/raw/branch/master/filterlist.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/specific.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "https://raw.githubusercontent.com/Spam404/lists/master/adblock-list.txt" + ], + "popupPanelSections": 31, + "prefetchingDisabled": false + }, + "selectedFilterLists": [ + "https://raw.githubusercontent.com/Spam404/lists/master/adblock-list.txt", + "user-filters", + "ublock-filters", + "ublock-privacy", + "ublock-abuse", + "ublock-unbreak", + "easylist", + "easyprivacy", + "urlhaus-1", + "spam404-0", + "adguard-annoyance", + "plowe-0", + "DEU-0", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoBase.txt", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoWhitelist.txt", + "https://gitlab.com/xuhaiyang1234/AAK-Cont/raw/master/FINAL_BUILD/aak-cont-list-ubo.txt", + "https://pgl.yoyo.org/adservers/admiral-domains.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/annoyances.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/popups.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/AnnoyancesFilter/sections/widgets.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/adservers.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/antiadblock.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/css_extended.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/general_extensions.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/replace.txt", + "https://raw.githubusercontent.com/AdguardTeam/AdguardFilters/master/GermanFilter/sections/whitelist.txt", + "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt", + "https://git.ponywave.de/Akamaru/Adblock-Filterliste/raw/branch/master/filterlist.txt", + "https://raw.githubusercontent.com/Yhonay/antipopads/master/popads.txt", + "https://raw.githubusercontent.com/gwarser/filter-lists/master/lan-block.txt", + "https://raw.githubusercontent.com/ryanbr/fanboy-adblock/master/fake-news.txt", + "https://raw.githubusercontent.com/bcye/Hello-Goodbye/master/filterlist.txt", + "https://www.kiboke-studio.hr/i-dont-care-about-cookies/abp/", + "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoMirror/NanoDefender.txt", + "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/nocoin.txt", + "https://raw.githubusercontent.com/IDKwhattoputhere/uBlock-Filters-Plus/master/uBlock-Filters-Plus.txt" + ], + "hiddenSettings": { + "userResourcesLocation": "https://gitcdn.xyz/repo/NanoAdblocker/NanoFilters/master/NanoFilters/NanoResources.txt" + }, + "whitelist": [ + "# about-scheme", + "# chrome-extension-scheme", + "# chrome-scheme", + "# edge-scheme", + "# moz-extension-scheme", + "# opera-scheme", + "# vivaldi-scheme", + "# wyciwyg-scheme", + "192.168.1.32", + "akamaru.de", + "bayernid.freistaat.bayern", + "bee.anime-loads.org", + "code.ponywave.de", + "de-de.facebook.com", + "drive.google.com", + "eisbrecher.hamburgrecords.com", + "forum.woleutesind.de", + "gaming.pringles.com", + "gibmirspiele.de", + "hakase.local", + "homebrew.cloud", + "img.ponywave.de", + "leutecraft.de", + "museum.xbox.com", + "myaccount.google.com", + "niinono.de", + "partnernet.amazon.de", + "pay.ebay.de", + "ponypaste.de", + "ponywave.de", + "portals.aliexpress.com", + "riko.moe", + "shana.local", + "wiidatabase.de", + "wiki.woleutesind.de", + "www.facebook.com", + "www.freebookspot.es", + "www.hd-plus.de", + "www.hellofresh.de", + "www.kickstarter.com", + "www.neckermann.de", + "www.netcup-wiki.de", + "www.obi.de", + "www.scooter-attack.com", + "www.sparkasse-badneustadt.de", + "www.telekom-empfehlen.de", + "yagyuu.de", + "yagyuu.moe" + ], + "dynamicFilteringString": "behind-the-scene * * noop\nbehind-the-scene * inline-script noop\nbehind-the-scene * 1p-script noop\nbehind-the-scene * 3p-script noop\nbehind-the-scene * 3p-frame noop\nbehind-the-scene * image noop\nbehind-the-scene * 3p noop\nerai-ddl2.info * 3p-script block", + "urlFilteringString": "", + "hostnameSwitchesString": "no-strict-blocking: logc206.xiti.com true\nno-strict-blocking: www.computerbase.de true\nno-scripting: behind-the-scene false\nno-strict-blocking: clkde.tradedoubler.com true\nno-strict-blocking: cdn.discordapp.com true", + "userFilters": "!##Outlook##\noutlook.live.com##._2heo7Eue0oDeyWNI4XaGWZ.ms-FocusZone > div._2SvWF44TZgwj95spKJn8Za:nth-of-type(1)\noutlook.live.com##._16EfhtP2SkmWE3EtSGakyM\noutlook.live.com##._1QaVoiariD7ShXYD075Et1\noutlook.live.com##.NKOTxdIEMuiw_Kew0d2CY\noutlook.live.com##._2AatwWz68SIFlRK-YqMCp9 > div:nth-of-type(1) > div > div\noutlook.live.com##._1pHiM7jJITiO-ULj_dBGaM > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._33q0KHy2ceHx9Ea1A4VXHj\noutlook.live.com##._4EQjiwXF4KIhqby_Qqf8J\noutlook.live.com##._1rxhgtJc4Lwbc8jHwgeW26\noutlook.live.com##._1TpU2KF6f_EeQiytBaYj8I > ._3_hHr3kfEhbNYRFM5YJxH9\noutlook.live.com##._3zQI3WiOC__cGoCqhRmdWG\noutlook.live.com###headerButtonsRegionId > button.ZOugRDnXxgnHy1ncf7VTA:nth-of-type(1)\noutlook.live.com###headerButtonsRegionId > button.nb7rqaaMNXuAIKTquG_PJ:nth-of-type(1)\noutlook.live.com##._24cFIcLR99oG439EGHkpE8\noutlook.live.com##.allowTextSelection.wV0GLq1bd2LIzJBOyd3tF\noutlook.live.com###owaMeetNowButton\noutlook.live.com##._2PxBL_S6KFCMTya8zm3aLF\noutlook.live.com##._3mlfhE4JyZTE3izdzM4XY8\n!##Sonstiges##\namazon.de##.cop.pb-notification-frame-container\namazon.de##.in.pb-notification-frame-container\nmydealz.de##.cop.pb-notification-frame-container\nmydealz.de##.in.pb-notification-frame-container\n!###########################\n\nfernsehserien.de##.kaufartikel-horizontal\nyoutube.com###header > .ytd-rich-grid-renderer\nonline.pubhtml5.com##.ph5---banner---container\nitch.io##.goal_banner_widget\nautoscout24.de##.cl-list-element-gap.cl-list-element-top-spot\npornhub.com##.notifContainer\nyoutube.com##.ytp-ce-element-show\n||filecrypt.co/bIob/turde.png\nsukebei.nyaa.si##[href=\"https://theporndude.com/\"]\nfilecrypt.co##.klj34kh34_j23\nfilecrypt.co##.filltheadblockqueue3\nmyanimelist.net##.pb24 > .widget-content\nthetvdb.com##.mb-4\nmediafire.com##.Avast\nmyanimelist.net##.icon-watch2\nmyanimelist.net##.icon-watch-pv2\ndaskochrezept.de##.paragraph-suggestionbox\nyoutube.com###scroll-container\nmyanimelist.net##.side-koukoku\nmyanimelist.net##.tag_pc_top\nmyanimelist.net##.js-broadcast-button\nitch.io##.jam_banner\n\n! 2022-04-06 https://app.plex.tv\napp.plex.tv##.PageHeaderCenter-pageHeaderCenter-mMF86x\n\n! 2022-04-09 https://myanimelist.net\nmyanimelist.net##.nUGkAdHmiepCTsbx_pc_top\n\n! 2022-04-12 https://www.ebay.de\nwww.ebay.de##.aspects-1\n" +} \ No newline at end of file